From 18cd9453803021c55f4fd4f9c8b4a3673b7067b1 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Wed, 17 Jun 2026 21:47:15 +0200 Subject: [PATCH] refactor(theme): route consumer reads through ClideSettings.theme (T-473) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Migrate ClideTheme.of(context) reads across the widget, feature, and shell layers to the unified ClideSettings.theme.of(context) facade (D-101), so theme/i18n/fonts/settings share one widget-facing entry. The facade delegates straight to ClideTheme, so behaviour is unchanged — goldens are unmoved. The low-level theme provider keeps its direct ClideTheme.of: the facade is built on it, and the two kernel sites (ClideTheme's own definition + the panels drag-resize widget) stay direct to avoid a widgets→kernel import cycle. Dead controller.dart/kernel.dart imports left by the sweep removed. Co-Authored-By: Claude Opus 4.8 (1M context) --- .pql/changelog/ticket_history/2026-06.sql | 1 + .pql/changelog/tickets/2026-06.sql | 1 + lib/builtin/claude/src/claude_composer.dart | 3 +-- lib/builtin/claude/src/claude_pane.dart | 2 +- lib/builtin/claude/src/claude_task_dock.dart | 3 +-- lib/builtin/claude/src/conversation_card.dart | 2 +- lib/builtin/claude/src/conversation_view.dart | 3 +-- lib/builtin/claude/src/image_thumbnail.dart | 4 ++-- .../claude/src/meta_sidebar/activity_tab.dart | 2 +- .../claude/src/meta_sidebar/config_tab.dart | 4 ++-- .../claude/src/meta_sidebar/icon_button.dart | 3 +-- .../claude/src/meta_sidebar/roster_row.dart | 2 +- lib/builtin/claude/src/meta_sidebar/tab_strip.dart | 3 +-- lib/builtin/claude/src/meta_sidebar/task_row.dart | 2 +- lib/builtin/claude/src/meta_sidebar/team_tab.dart | 2 +- lib/builtin/claude/src/model_picker_card.dart | 3 +-- .../claude/src/permission_mode_control.dart | 4 ++-- lib/builtin/claude/src/prompt_card.dart | 5 ++--- lib/builtin/claude/src/session_picker.dart | 3 +-- lib/builtin/claude/src/session_storage.dart | 3 +-- lib/builtin/claude/src/team_chat_sidebar.dart | 4 ++-- lib/builtin/claude/src/team_panel_host.dart | 2 +- .../decisions/src/decision_detail_view.dart | 4 ++-- lib/builtin/decisions/src/decisions_view.dart | 4 ++-- lib/builtin/deeplink/src/extension.dart | 3 +-- lib/builtin/diff/src/diff_view.dart | 8 ++++---- lib/builtin/editor/src/editor_view.dart | 2 +- .../extensions_ui/src/extensions_notice.dart | 3 +-- lib/builtin/files/src/file_tree_view.dart | 6 +++--- lib/builtin/git/src/git_panel_view.dart | 14 +++++++------- lib/builtin/git/src/git_status_item.dart | 6 +++--- lib/builtin/ipc_status/src/status_item.dart | 2 +- lib/builtin/menubar/src/about_dialog.dart | 2 +- lib/builtin/menubar/src/file_actions.dart | 4 ++-- lib/builtin/menubar/src/menu_bar.dart | 4 ++-- lib/builtin/output/src/dock_status_item.dart | 2 +- lib/builtin/output/src/output_view.dart | 8 ++++---- lib/builtin/pql/src/backlinks_view.dart | 4 ++-- lib/builtin/pql/src/pql_search_body.dart | 8 ++++---- lib/builtin/problems/src/problems_view.dart | 4 ++-- lib/builtin/search/src/search_panel_view.dart | 8 ++++---- .../settings_ui/src/settings_category_view.dart | 14 +++++++------- lib/builtin/settings_ui/src/settings_modal.dart | 12 ++++++------ lib/builtin/shared/reader_chrome.dart | 4 ++-- .../theme_picker/src/appearance_control.dart | 4 ++-- lib/builtin/theme_picker/src/settings_view.dart | 6 +++--- .../theme_picker/src/theme_status_item.dart | 2 +- lib/builtin/tickets/src/ticket_detail_view.dart | 4 ++-- lib/builtin/tickets/src/tickets_view.dart | 4 ++-- lib/builtin/vim/src/vim_mode_indicator.dart | 3 +-- lib/builtin/welcome/src/welcome_view.dart | 6 +++--- lib/src/shell/hat_bar.dart | 2 +- lib/src/shell/layout.dart | 10 +++++----- lib/src/shell/project_switcher.dart | 2 +- lib/src/shell/root_shell.dart | 4 ++-- lib/src/shell/slot_host.dart | 14 +++++++------- lib/widgets/src/clide_accordion.dart | 3 +-- lib/widgets/src/clide_button.dart | 4 ++-- lib/widgets/src/clide_code_block.dart | 3 +-- lib/widgets/src/clide_collapser_card.dart | 3 +-- lib/widgets/src/clide_divider.dart | 4 ++-- lib/widgets/src/clide_filter_box.dart | 4 ++-- lib/widgets/src/clide_icon.dart | 4 ++-- lib/widgets/src/clide_icon_rail.dart | 4 ++-- lib/widgets/src/clide_lightbox.dart | 4 ++-- lib/widgets/src/clide_markdown.dart | 3 +-- lib/widgets/src/clide_menu.dart | 3 ++- lib/widgets/src/clide_palette.dart | 4 ++-- lib/widgets/src/clide_pane_chrome.dart | 8 ++++---- lib/widgets/src/clide_pty_view.dart | 3 +-- lib/widgets/src/clide_scrollbar.dart | 4 ++-- lib/widgets/src/clide_spine.dart | 4 ++-- lib/widgets/src/clide_spinner.dart | 4 ++-- lib/widgets/src/clide_status_indicator.dart | 4 ++-- lib/widgets/src/clide_surface.dart | 4 ++-- lib/widgets/src/clide_tab_bar.dart | 6 +++--- lib/widgets/src/clide_tappable.dart | 4 ++-- lib/widgets/src/clide_text.dart | 4 ++-- lib/widgets/src/clide_toast.dart | 3 ++- lib/widgets/src/clide_tooltip.dart | 4 ++-- lib/widgets/src/ex_line_overlay.dart | 2 +- lib/widgets/src/multitab_pane.dart | 12 ++++++------ lib/widgets/src/quick_open_overlay.dart | 4 ++-- 83 files changed, 174 insertions(+), 187 deletions(-) diff --git a/.pql/changelog/ticket_history/2026-06.sql b/.pql/changelog/ticket_history/2026-06.sql index 515a4c4b..3583fcd4 100644 --- a/.pql/changelog/ticket_history/2026-06.sql +++ b/.pql/changelog/ticket_history/2026-06.sql @@ -5928,3 +5928,4 @@ INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, chang INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FDDX5KEAJ8KRWVV7ZSG6H7A0', 'description', NULL, 'Per D-101. Migrate i18n reads (ClideKernel.of(context).i18n[.string]) to ClideSettings.i18n.of(context). The facade delegates to the same I18n service, so behaviour is unchanged; mechanical sweep in batches.', NULL, '2026-06-17 19:03:22', '2026-06-17 19:03:22.235', '2026-06-17 19:03:22.235', NULL, '5d617ff30e22d3b4c57ca6325920d91a', 2) ON CONFLICT(hash) DO NOTHING; INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FDDTCGG5Z0KNQKF89W1VZSQ8', 'status', 'backlog', 'done', NULL, '2026-06-17 19:35:22', '2026-06-17 19:35:22.690', '2026-06-17 19:35:22.690', NULL, '580448456994d6acecc88cfbd40a595f', 2) ON CONFLICT(hash) DO NOTHING; INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FDDX5KEAJ8KRWVV7ZSG6H7A0', 'status', 'backlog', 'done', NULL, '2026-06-17 19:37:39', '2026-06-17 19:37:39.813', '2026-06-17 19:37:39.813', NULL, 'd59d0df2b693a0616265dd5e39559dc0', 2) ON CONFLICT(hash) DO NOTHING; +INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FDDX5GVH3FTCVDEC1QAFACY4', 'status', 'backlog', 'done', NULL, '2026-06-17 19:47:02', '2026-06-17 19:47:02.941', '2026-06-17 19:47:02.941', NULL, '28625100d88cacac15cabe97754fcdc5', 2) ON CONFLICT(hash) DO NOTHING; diff --git a/.pql/changelog/tickets/2026-06.sql b/.pql/changelog/tickets/2026-06.sql index 28d8b25f..5983c643 100644 --- a/.pql/changelog/tickets/2026-06.sql +++ b/.pql/changelog/tickets/2026-06.sql @@ -7247,3 +7247,4 @@ INSERT INTO tickets (record_id, type, parent_record_id, title, description, stat INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FDDX5KEAJ8KRWVV7ZSG6H7A0', 'task', '06FD07ECS3GK2V7Z2WYYPJHJYC', 'Migrate i18n consumers (ClideKernel.i18n → ClideSettings.i18n.of) per D-101', 'Per D-101. Migrate i18n reads (ClideKernel.of(context).i18n[.string]) to ClideSettings.i18n.of(context). The facade delegates to the same I18n service, so behaviour is unchanged; mechanical sweep in batches.', 'backlog', 'medium', NULL, NULL, NULL, '2026-06-17 19:00:21.490', '2026-06-17 19:03:22.235', NULL, '16d6229039400bd826a77a08eca9573b', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FDDTCGG5Z0KNQKF89W1VZSQ8', 'task', '06FD07ECS3GK2V7Z2WYYPJHJYC', 'Migrate 11 context-less mono-font sites onto ClideSettings.fonts (thread family through helpers)', 'Per D-101. The 11 sites that need a BuildContext threaded from the nearest context-bearing caller (resolve ClideSettings.fonts.monoOf(context) and pass the family in): prompt_card.dart toolEditBody/toolReadLikeBody/toolPathLine (top-level fns); conversation_view.dart _toolResult; welcome_view.dart _tipRow; search_panel_view.dart _base getter; clide_markdown.dart _inlineElementSpan/_recordLinkSpan/_fileLinkSpan (static span chain). Until done, these render the default JetBrains Mono regardless of the mono-font setting.', 'done', 'medium', NULL, NULL, NULL, '2026-06-17 18:48:11.649', '2026-06-17 19:35:22.690', NULL, '7dd6dae4197fc95d0bc6becfad4eecbb', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FDDX5KEAJ8KRWVV7ZSG6H7A0', 'task', '06FD07ECS3GK2V7Z2WYYPJHJYC', 'Migrate i18n consumers (ClideKernel.i18n → ClideSettings.i18n.of) per D-101', 'Per D-101. Migrate i18n reads (ClideKernel.of(context).i18n[.string]) to ClideSettings.i18n.of(context). The facade delegates to the same I18n service, so behaviour is unchanged; mechanical sweep in batches.', 'done', 'medium', NULL, NULL, NULL, '2026-06-17 19:00:21.490', '2026-06-17 19:37:39.813', NULL, 'fc64918991f0c9133419ee51227e1939', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FDDX5GVH3FTCVDEC1QAFACY4', 'task', '06FD07ECS3GK2V7Z2WYYPJHJYC', 'Migrate theme consumers (ClideTheme.of → ClideSettings.theme.of) per D-101', 'Per D-101. Migrate ClideTheme.of(context) consumers (hundreds of sites) to ClideSettings.theme.of(context). The facade already delegates to ClideTheme, so this is a mechanical, no-behavior-change sweep — do it in focused batches with analyze between, ideally via a scripted find/replace + import fixups.', 'done', 'medium', NULL, NULL, NULL, '2026-06-17 19:00:20.828', '2026-06-17 19:47:02.941', NULL, '8ea58b6162c81778a610f46b07585b05', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); diff --git a/lib/builtin/claude/src/claude_composer.dart b/lib/builtin/claude/src/claude_composer.dart index ea2987d7..8e696cfb 100644 --- a/lib/builtin/claude/src/claude_composer.dart +++ b/lib/builtin/claude/src/claude_composer.dart @@ -16,7 +16,6 @@ import 'package:clide/builtin/claude/src/image_thumbnail.dart'; import 'package:clide/builtin/claude/src/permission_mode_control.dart'; import 'package:clide/builtin/claude/src/running_indicator.dart'; import 'package:clide/builtin/claude/src/slash_commands.dart'; -import 'package:clide/kernel/src/theme/controller.dart'; import 'package:clide/kernel/src/theme/tokens.dart'; import 'package:clide/widgets/widgets.dart'; import 'package:flutter/services.dart'; @@ -415,7 +414,7 @@ class _ClaudeComposerState extends State { @override Widget build(BuildContext context) { - final theme = ClideTheme.of(context).surface; + final theme = ClideSettings.theme.of(context).surface; final hasText = _controller.text.isNotEmpty; final fg = widget.enabled ? theme.globalForeground : theme.globalTextMuted; diff --git a/lib/builtin/claude/src/claude_pane.dart b/lib/builtin/claude/src/claude_pane.dart index e06ca81f..6ad2e6d4 100644 --- a/lib/builtin/claude/src/claude_pane.dart +++ b/lib/builtin/claude/src/claude_pane.dart @@ -729,7 +729,7 @@ class _ClaudePaneState extends State { @override Widget build(BuildContext context) { final title = widget.isPrimary ? 'claude — primary' : 'claude — secondary ${widget.secondaryIndex}'; - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final Widget body; if (_error != null) { diff --git a/lib/builtin/claude/src/claude_task_dock.dart b/lib/builtin/claude/src/claude_task_dock.dart index 3bee0fdd..502b97bb 100644 --- a/lib/builtin/claude/src/claude_task_dock.dart +++ b/lib/builtin/claude/src/claude_task_dock.dart @@ -8,7 +8,6 @@ library; import 'package:clide/builtin/claude/src/task_list.dart'; -import 'package:clide/kernel/src/theme/controller.dart'; import 'package:clide/kernel/src/theme/tokens.dart'; import 'package:clide/widgets/widgets.dart'; import 'package:flutter/widgets.dart'; @@ -30,7 +29,7 @@ class _ClaudeTaskDockState extends State { final tasks = widget.tasks; if (tasks.isEmpty) return const SizedBox.shrink(); // no chrome when empty - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final done = tasks.where((t) => t.status == TaskStatus.completed).length; final inProgress = tasks.where((t) => t.status == TaskStatus.inProgress); final current = inProgress.isEmpty ? null : inProgress.first.text; diff --git a/lib/builtin/claude/src/conversation_card.dart b/lib/builtin/claude/src/conversation_card.dart index c78d4d80..26c2925a 100644 --- a/lib/builtin/claude/src/conversation_card.dart +++ b/lib/builtin/claude/src/conversation_card.dart @@ -175,7 +175,7 @@ class _ConversationCardState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final content = Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ diff --git a/lib/builtin/claude/src/conversation_view.dart b/lib/builtin/claude/src/conversation_view.dart index 4d87e77d..bc5b929a 100644 --- a/lib/builtin/claude/src/conversation_view.dart +++ b/lib/builtin/claude/src/conversation_view.dart @@ -27,7 +27,6 @@ import 'package:clide/kernel/src/facade.dart'; import 'package:clide/kernel/src/keymap/intents.dart'; import 'package:clide/kernel/src/keymap/pane_key_nav.dart'; import 'package:clide/kernel/src/syntax/language_map.dart'; -import 'package:clide/kernel/src/theme/controller.dart'; import 'package:clide/kernel/src/theme/tokens.dart'; import 'package:clide/src/terminal/terminal.dart'; import 'package:clide/widgets/widgets.dart'; @@ -293,7 +292,7 @@ class _ConversationViewState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final allItems = widget.controller.items; // T-263/T-264: resolve each sidechain run → owning Agent card before // culling, so the run is suppressed up top and folded into / nested under diff --git a/lib/builtin/claude/src/image_thumbnail.dart b/lib/builtin/claude/src/image_thumbnail.dart index cb18d319..f488a81f 100644 --- a/lib/builtin/claude/src/image_thumbnail.dart +++ b/lib/builtin/claude/src/image_thumbnail.dart @@ -25,7 +25,7 @@ void openImageLightbox(BuildContext context, String path) { } Widget _placeholder(BuildContext context, double size) { - final t = ClideTheme.of(context).surface; + final t = ClideSettings.theme.of(context).surface; return Container( width: size, height: size, @@ -46,7 +46,7 @@ class ImageThumbnail extends StatelessWidget { @override Widget build(BuildContext context) { - final t = ClideTheme.of(context).surface; + final t = ClideSettings.theme.of(context).surface; return Semantics( button: true, label: 'Image $_fileName', diff --git a/lib/builtin/claude/src/meta_sidebar/activity_tab.dart b/lib/builtin/claude/src/meta_sidebar/activity_tab.dart index 2724b171..dbe93130 100644 --- a/lib/builtin/claude/src/meta_sidebar/activity_tab.dart +++ b/lib/builtin/claude/src/meta_sidebar/activity_tab.dart @@ -45,7 +45,7 @@ class ActivityTabView extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final latest = stats.latest; final u = usage; final sections = [ diff --git a/lib/builtin/claude/src/meta_sidebar/config_tab.dart b/lib/builtin/claude/src/meta_sidebar/config_tab.dart index 2915e729..cc6511ea 100644 --- a/lib/builtin/claude/src/meta_sidebar/config_tab.dart +++ b/lib/builtin/claude/src/meta_sidebar/config_tab.dart @@ -41,7 +41,7 @@ class ConfigTabView extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final cfg = config; if (cfg == null) { return metaPlaceholder('Claude environment not loaded.'); @@ -299,7 +299,7 @@ class _SettingControlRowState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Padding( padding: const EdgeInsets.symmetric(vertical: kMetaRowPitch), child: Row( diff --git a/lib/builtin/claude/src/meta_sidebar/icon_button.dart b/lib/builtin/claude/src/meta_sidebar/icon_button.dart index 6340001d..757d0875 100644 --- a/lib/builtin/claude/src/meta_sidebar/icon_button.dart +++ b/lib/builtin/claude/src/meta_sidebar/icon_button.dart @@ -3,7 +3,6 @@ /// lib/widgets/ only when a second consumer appears. library; -import 'package:clide/kernel/kernel.dart'; import 'package:clide/widgets/widgets.dart'; import 'package:flutter/widgets.dart'; @@ -29,7 +28,7 @@ class MetaIconButton extends StatelessWidget { onTap: onTap, builder: (ctx, hovered, _) => Padding( padding: const EdgeInsets.symmetric(horizontal: 3, vertical: 2), - child: ClideIcon(painter, size: 12, color: hovered ? ClideTheme.of(ctx).surface.globalForeground : color), + child: ClideIcon(painter, size: 12, color: hovered ? ClideSettings.theme.of(ctx).surface.globalForeground : color), ), ), ); diff --git a/lib/builtin/claude/src/meta_sidebar/roster_row.dart b/lib/builtin/claude/src/meta_sidebar/roster_row.dart index 04e2d929..854a5167 100644 --- a/lib/builtin/claude/src/meta_sidebar/roster_row.dart +++ b/lib/builtin/claude/src/meta_sidebar/roster_row.dart @@ -70,7 +70,7 @@ class _AgentRosterRowState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final managed = widget.orchestrator?.byMemberName(widget.member.name); final color = teamColor(widget.member.color, fallback: tokens.globalForeground); final st = widget.status; diff --git a/lib/builtin/claude/src/meta_sidebar/tab_strip.dart b/lib/builtin/claude/src/meta_sidebar/tab_strip.dart index c2777790..febad9e0 100644 --- a/lib/builtin/claude/src/meta_sidebar/tab_strip.dart +++ b/lib/builtin/claude/src/meta_sidebar/tab_strip.dart @@ -4,7 +4,6 @@ library; import 'package:clide/builtin/claude/src/meta_sidebar/models.dart'; -import 'package:clide/kernel/kernel.dart'; import 'package:clide/widgets/widgets.dart'; import 'package:flutter/widgets.dart'; @@ -16,7 +15,7 @@ class SidebarTabStrip extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), decoration: BoxDecoration( diff --git a/lib/builtin/claude/src/meta_sidebar/task_row.dart b/lib/builtin/claude/src/meta_sidebar/task_row.dart index 4b503e3a..58c00a3a 100644 --- a/lib/builtin/claude/src/meta_sidebar/task_row.dart +++ b/lib/builtin/claude/src/meta_sidebar/task_row.dart @@ -18,7 +18,7 @@ class TaskRow extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final marker = switch (task.status) { 'done' => '✓', 'claimed' => '◈', diff --git a/lib/builtin/claude/src/meta_sidebar/team_tab.dart b/lib/builtin/claude/src/meta_sidebar/team_tab.dart index 59f29fe2..a4cded66 100644 --- a/lib/builtin/claude/src/meta_sidebar/team_tab.dart +++ b/lib/builtin/claude/src/meta_sidebar/team_tab.dart @@ -48,7 +48,7 @@ class TeamTabView extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; if (members.isEmpty) { return metaPlaceholder('No team active.'); } diff --git a/lib/builtin/claude/src/model_picker_card.dart b/lib/builtin/claude/src/model_picker_card.dart index dc0988ae..5198aa97 100644 --- a/lib/builtin/claude/src/model_picker_card.dart +++ b/lib/builtin/claude/src/model_picker_card.dart @@ -9,7 +9,6 @@ library; import 'package:clide/builtin/claude/src/stream_json_session.dart'; -import 'package:clide/kernel/src/theme/controller.dart'; import 'package:clide/kernel/src/theme/tokens.dart'; import 'package:clide/widgets/widgets.dart'; import 'package:flutter/services.dart'; @@ -130,7 +129,7 @@ class _ModelPickerCardState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Focus( autofocus: true, onKeyEvent: _onKey, diff --git a/lib/builtin/claude/src/permission_mode_control.dart b/lib/builtin/claude/src/permission_mode_control.dart index b056a3e1..cfd56bb9 100644 --- a/lib/builtin/claude/src/permission_mode_control.dart +++ b/lib/builtin/claude/src/permission_mode_control.dart @@ -88,13 +88,13 @@ class _PermissionModeControlState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return ClideAnchoredOverlay( controller: _overlay, side: ClideAnchorSide.above, align: ClideAnchorAlign.end, offset: const Offset(0, -6), - overlayBuilder: (ctx, ctrl) => ClideMenu(onClose: ctrl.close, minWidth: 180, entries: _entries(ClideTheme.of(ctx).surface)), + overlayBuilder: (ctx, ctrl) => ClideMenu(onClose: ctrl.close, minWidth: 180, entries: _entries(ClideSettings.theme.of(ctx).surface)), anchor: ListenableBuilder( listenable: _overlay, builder: (ctx, _) { diff --git a/lib/builtin/claude/src/prompt_card.dart b/lib/builtin/claude/src/prompt_card.dart index fea7f750..3a7ddb91 100644 --- a/lib/builtin/claude/src/prompt_card.dart +++ b/lib/builtin/claude/src/prompt_card.dart @@ -15,7 +15,6 @@ import 'dart:convert'; import 'package:clide/builtin/claude/src/stream_json_session.dart'; import 'package:clide/kernel/src/syntax/language_map.dart'; -import 'package:clide/kernel/src/theme/controller.dart'; import 'package:clide/kernel/src/theme/tokens.dart'; import 'package:clide/widgets/widgets.dart'; import 'package:flutter/services.dart'; @@ -103,7 +102,7 @@ class _ToolPromptCardState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final (accent, label, children) = widget.prompt.isQuestion ? _question(tokens) : _permission(tokens); // Autofocus the card so number keys pick a button/option on appear (T-240). // _onKey self-guards via hasPrimaryFocus, so once the user clicks a note @@ -607,7 +606,7 @@ class _NoteFieldState extends State<_NoteField> { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Container( width: double.infinity, decoration: BoxDecoration( diff --git a/lib/builtin/claude/src/session_picker.dart b/lib/builtin/claude/src/session_picker.dart index 7145508b..bb0572fc 100644 --- a/lib/builtin/claude/src/session_picker.dart +++ b/lib/builtin/claude/src/session_picker.dart @@ -5,7 +5,6 @@ library; import 'package:clide/builtin/claude/src/session_index.dart'; -import 'package:clide/kernel/src/theme/controller.dart'; import 'package:clide/kernel/src/theme/tokens.dart'; import 'package:clide/widgets/widgets.dart'; import 'package:flutter/services.dart'; @@ -60,7 +59,7 @@ class _SessionPickerDialogState extends State { @override Widget build(BuildContext context) { - final theme = ClideTheme.of(context).surface; + final theme = ClideSettings.theme.of(context).surface; return Focus( autofocus: true, onKeyEvent: _onKey, diff --git a/lib/builtin/claude/src/session_storage.dart b/lib/builtin/claude/src/session_storage.dart index 4b9b93c8..ebc9697a 100644 --- a/lib/builtin/claude/src/session_storage.dart +++ b/lib/builtin/claude/src/session_storage.dart @@ -8,7 +8,6 @@ import 'dart:io'; import 'package:clide/builtin/claude/src/session_index.dart'; import 'package:clide/builtin/claude/src/session_picker.dart' show relativeTime; -import 'package:clide/kernel/src/theme/controller.dart'; import 'package:clide/kernel/src/theme/tokens.dart'; import 'package:clide/widgets/widgets.dart'; import 'package:flutter/services.dart'; @@ -55,7 +54,7 @@ class _SessionStorageDialogState extends State { @override Widget build(BuildContext context) { - final theme = ClideTheme.of(context).surface; + final theme = ClideSettings.theme.of(context).surface; return Focus( autofocus: true, onKeyEvent: _onKey, diff --git a/lib/builtin/claude/src/team_chat_sidebar.dart b/lib/builtin/claude/src/team_chat_sidebar.dart index 6cc999c4..aa2addd5 100644 --- a/lib/builtin/claude/src/team_chat_sidebar.dart +++ b/lib/builtin/claude/src/team_chat_sidebar.dart @@ -122,7 +122,7 @@ class _TeamChatSidebarState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final messages = widget.model.messages; return Column( @@ -291,7 +291,7 @@ class _TeamChatPaneState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final messages = widget.model.messages; return Column( diff --git a/lib/builtin/claude/src/team_panel_host.dart b/lib/builtin/claude/src/team_panel_host.dart index 156699bb..c03e700f 100644 --- a/lib/builtin/claude/src/team_panel_host.dart +++ b/lib/builtin/claude/src/team_panel_host.dart @@ -73,7 +73,7 @@ class _TeamPanelHostState extends State { @override Widget build(BuildContext context) { if (_members.isEmpty) return widget.lead; - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return LayoutBuilder( builder: (context, constraints) { diff --git a/lib/builtin/decisions/src/decision_detail_view.dart b/lib/builtin/decisions/src/decision_detail_view.dart index ad5f0e23..1cb30ba2 100644 --- a/lib/builtin/decisions/src/decision_detail_view.dart +++ b/lib/builtin/decisions/src/decision_detail_view.dart @@ -92,8 +92,8 @@ class _DecisionDetailViewState extends State { final d = _decision; if (d == null) return const Padding(padding: EdgeInsets.all(12), child: ClideText('Select a decision to view details.', muted: true)); - final tokens = ClideTheme.of(context).surface; - final isDark = ClideTheme.of(context).dark; + final tokens = ClideSettings.theme.of(context).surface; + final isDark = ClideSettings.theme.of(context).dark; final typeColors = DecisionTypeColors.forTheme(dark: isDark); final id = d['id'] as String? ?? ''; diff --git a/lib/builtin/decisions/src/decisions_view.dart b/lib/builtin/decisions/src/decisions_view.dart index 48ebe637..b16936c5 100644 --- a/lib/builtin/decisions/src/decisions_view.dart +++ b/lib/builtin/decisions/src/decisions_view.dart @@ -128,7 +128,7 @@ class _DecisionsViewState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; if (_loading) return const Center(child: ClideText('Loading decisions...', muted: true)); if (_error != null) return Padding(padding: const EdgeInsets.all(12), child: ClideText(_error!, muted: true)); if (_decisions.isEmpty) { @@ -153,7 +153,7 @@ class _DecisionsViewState extends State { final questions = filtered.where((d) => d.type == 'question').toList(); final rejected = filtered.where((d) => d.type == 'rejected').toList(); - final isDark = ClideTheme.of(context).dark; + final isDark = ClideSettings.theme.of(context).dark; final typeColors = DecisionTypeColors.forTheme(dark: isDark); return Column( diff --git a/lib/builtin/deeplink/src/extension.dart b/lib/builtin/deeplink/src/extension.dart index 00be6f26..4ce79d76 100644 --- a/lib/builtin/deeplink/src/extension.dart +++ b/lib/builtin/deeplink/src/extension.dart @@ -9,7 +9,6 @@ library; import 'package:clide/builtin/deeplink/src/deep_link.dart'; import 'package:clide/clide.dart'; import 'package:clide/extension/extension.dart'; -import 'package:clide/kernel/kernel.dart'; import 'package:clide/widgets/widgets.dart'; import 'package:flutter/widgets.dart'; @@ -68,7 +67,7 @@ class _DeepLinkConfirmDialog extends StatelessWidget { @override Widget build(BuildContext context) { - final t = ClideTheme.of(context).surface; + final t = ClideSettings.theme.of(context).surface; return ClideSurface( width: 440, color: t.modalSurfaceBackground, diff --git a/lib/builtin/diff/src/diff_view.dart b/lib/builtin/diff/src/diff_view.dart index c2efc38e..153e8a43 100644 --- a/lib/builtin/diff/src/diff_view.dart +++ b/lib/builtin/diff/src/diff_view.dart @@ -86,7 +86,7 @@ class _DiffViewState extends State { return ListenableBuilder( listenable: c, builder: (context, _) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( label: 'diff view', container: true, @@ -136,7 +136,7 @@ class _DiffToolbar extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), decoration: BoxDecoration( @@ -180,7 +180,7 @@ class _FileDiff extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final path = diff['path'] as String? ?? ''; final isBinary = diff['binary'] as bool? ?? false; final isNew = diff['new'] as bool? ?? false; @@ -264,7 +264,7 @@ class _DiffLineRow extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final kind = line['kind'] as String? ?? 'context'; final text = line['text'] as String? ?? ''; final oldLineNo = line['oldLineNo'] as num?; diff --git a/lib/builtin/editor/src/editor_view.dart b/lib/builtin/editor/src/editor_view.dart index 4b594204..1bd22f75 100644 --- a/lib/builtin/editor/src/editor_view.dart +++ b/lib/builtin/editor/src/editor_view.dart @@ -311,7 +311,7 @@ class _EditorViewState extends State { @override Widget build(BuildContext context) { final c = _controller; - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; _text.tokens = tokens; if (c == null) return const SizedBox.shrink(); diff --git a/lib/builtin/extensions_ui/src/extensions_notice.dart b/lib/builtin/extensions_ui/src/extensions_notice.dart index 951d05e9..87920fab 100644 --- a/lib/builtin/extensions_ui/src/extensions_notice.dart +++ b/lib/builtin/extensions_ui/src/extensions_notice.dart @@ -1,4 +1,3 @@ -import 'package:clide/kernel/kernel.dart'; import 'package:clide/widgets/widgets.dart'; import 'package:flutter/widgets.dart'; @@ -17,7 +16,7 @@ class ExtensionsNotice extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final i = ClideSettings.i18n.of(context); return Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/builtin/files/src/file_tree_view.dart b/lib/builtin/files/src/file_tree_view.dart index da7f855c..aee7bc3f 100644 --- a/lib/builtin/files/src/file_tree_view.dart +++ b/lib/builtin/files/src/file_tree_view.dart @@ -202,7 +202,7 @@ class _DirRow extends StatelessWidget { @override Widget build(BuildContext context) { final expanded = controller.isExpanded(path); - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final selected = path == selectedPath; return Semantics( button: true, @@ -263,7 +263,7 @@ class _Row extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final leftPadding = 8.0 + (depth * 14.0); return ClideTappable( onTap: onTap, @@ -301,7 +301,7 @@ class _FilteredFileRow extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return ClideTappable( onTap: () => openWorkspaceFile(ClideKernel.of(context), entry.path), builder: (context, hovered, _) => Container( diff --git a/lib/builtin/git/src/git_panel_view.dart b/lib/builtin/git/src/git_panel_view.dart index 44586cac..252b98a6 100644 --- a/lib/builtin/git/src/git_panel_view.dart +++ b/lib/builtin/git/src/git_panel_view.dart @@ -68,7 +68,7 @@ class _GitPanelViewState extends State { return ListenableBuilder( listenable: c, builder: (context, _) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( label: 'git panel', container: true, @@ -143,7 +143,7 @@ class _BranchHeader extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final branch = controller.branch ?? '(detached)'; final parts = [branch]; if (controller.ahead > 0) parts.add('↑${controller.ahead}'); @@ -173,7 +173,7 @@ class _CommitInput extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Padding( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4), child: Column( @@ -239,7 +239,7 @@ class _FileGroup extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Column( crossAxisAlignment: CrossAxisAlignment.stretch, mainAxisSize: MainAxisSize.min, @@ -271,7 +271,7 @@ class _GitFileRow extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final path = entry['path'] as String? ?? ''; final name = path.split('/').last; final indexState = entry['indexState'] as String?; @@ -352,7 +352,7 @@ class _SmallAction extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( button: true, label: semanticsLabel ?? label, @@ -376,7 +376,7 @@ class _DiscardConfirmDialog extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final name = path.split('/').last; return Container( width: 360, diff --git a/lib/builtin/git/src/git_status_item.dart b/lib/builtin/git/src/git_status_item.dart index 0e3c9fdf..484a0038 100644 --- a/lib/builtin/git/src/git_status_item.dart +++ b/lib/builtin/git/src/git_status_item.dart @@ -56,7 +56,7 @@ class _GitStatusItemState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; if (_branch == null) return const SizedBox.shrink(); final parts = [_branch!]; if (_ahead > 0) parts.add('↑$_ahead'); @@ -143,7 +143,7 @@ class _BranchPickerState extends State<_BranchPicker> { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Focus( focusNode: _focus, onKeyEvent: _onKey, @@ -215,7 +215,7 @@ class _BranchRow extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return ClideTappable( onTap: onTap, cursor: onTap != null ? SystemMouseCursors.click : MouseCursor.defer, diff --git a/lib/builtin/ipc_status/src/status_item.dart b/lib/builtin/ipc_status/src/status_item.dart index 8f1f3e00..6eba4912 100644 --- a/lib/builtin/ipc_status/src/status_item.dart +++ b/lib/builtin/ipc_status/src/status_item.dart @@ -8,7 +8,7 @@ class ToolStatusItem extends StatelessWidget { @override Widget build(BuildContext context) { final kernel = ClideKernel.of(context); - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return ListenableBuilder( listenable: kernel.toolchain, builder: (ctx, _) { diff --git a/lib/builtin/menubar/src/about_dialog.dart b/lib/builtin/menubar/src/about_dialog.dart index fcd6f4aa..c720de35 100644 --- a/lib/builtin/menubar/src/about_dialog.dart +++ b/lib/builtin/menubar/src/about_dialog.dart @@ -13,7 +13,7 @@ class AboutDialog extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Container( width: 480, padding: const EdgeInsets.all(20), diff --git a/lib/builtin/menubar/src/file_actions.dart b/lib/builtin/menubar/src/file_actions.dart index f302b69c..642504a7 100644 --- a/lib/builtin/menubar/src/file_actions.dart +++ b/lib/builtin/menubar/src/file_actions.dart @@ -110,7 +110,7 @@ class _OpenFolderDialogState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Container( width: 420, padding: const EdgeInsets.all(20), @@ -173,7 +173,7 @@ class NotARepoDialog extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Container( width: 420, padding: const EdgeInsets.all(20), diff --git a/lib/builtin/menubar/src/menu_bar.dart b/lib/builtin/menubar/src/menu_bar.dart index 6d0b001e..716aa609 100644 --- a/lib/builtin/menubar/src/menu_bar.dart +++ b/lib/builtin/menubar/src/menu_bar.dart @@ -142,7 +142,7 @@ class _TopMenuButtonState extends State<_TopMenuButton> { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final open = widget.controller.openIndex == widget.index; return ClideAnchoredOverlay( controller: _overlay, @@ -166,7 +166,7 @@ class _TopMenuButtonState extends State<_TopMenuButton> { node.keybinding!, fontSize: clideFontSmall, fontFamily: ClideSettings.fonts.monoOf(context), - color: ClideTheme.of(ctx).surface.globalTextMuted, + color: ClideSettings.theme.of(ctx).surface.globalTextMuted, ) : null, onSelect: () => unawaited(widget.kernel.commands.execute(node.commandId)), diff --git a/lib/builtin/output/src/dock_status_item.dart b/lib/builtin/output/src/dock_status_item.dart index 68c0c691..2380c738 100644 --- a/lib/builtin/output/src/dock_status_item.dart +++ b/lib/builtin/output/src/dock_status_item.dart @@ -53,7 +53,7 @@ class _DockStatusItemState extends State { return ListenableBuilder( listenable: kernel.arrangement, builder: (ctx, _) { - final tokens = ClideTheme.of(ctx).surface; + final tokens = ClideSettings.theme.of(ctx).surface; final open = kernel.arrangement.isVisible(Slots.dock); final errors = kernel.logRing.countAtLeast(LogLevel.error); final warns = kernel.logRing.countAtLeast(LogLevel.warn) - errors; diff --git a/lib/builtin/output/src/output_view.dart b/lib/builtin/output/src/output_view.dart index 07c899bc..1ea565f9 100644 --- a/lib/builtin/output/src/output_view.dart +++ b/lib/builtin/output/src/output_view.dart @@ -75,7 +75,7 @@ class _OutputViewState extends State { return ListenableBuilder( listenable: _c, builder: (context, _) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final rows = _c.filtered; return Semantics( label: 'output log', @@ -149,7 +149,7 @@ class _Chip extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( button: true, label: label, @@ -177,7 +177,7 @@ class _JumpPill extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( button: true, label: 'jump to latest', @@ -206,7 +206,7 @@ class _LogRow extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final fg = _levelColor(record.level, tokens); final t = record.timestamp; final hh = t.hour.toString().padLeft(2, '0'); diff --git a/lib/builtin/pql/src/backlinks_view.dart b/lib/builtin/pql/src/backlinks_view.dart index 4f2ead9a..938c3dc7 100644 --- a/lib/builtin/pql/src/backlinks_view.dart +++ b/lib/builtin/pql/src/backlinks_view.dart @@ -40,7 +40,7 @@ class _BacklinksViewState extends State { return ListenableBuilder( listenable: c, builder: (context, _) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; if (c.activePath == null) { return const Padding(padding: EdgeInsets.all(12), child: ClideText('Open a file to see its links.', muted: true)); } @@ -110,7 +110,7 @@ class _LinkRow extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final target = link[pathKey] as String? ?? ''; final alias = link['alias'] as String?; final display = alias ?? target; diff --git a/lib/builtin/pql/src/pql_search_body.dart b/lib/builtin/pql/src/pql_search_body.dart index f769b164..940097ae 100644 --- a/lib/builtin/pql/src/pql_search_body.dart +++ b/lib/builtin/pql/src/pql_search_body.dart @@ -97,7 +97,7 @@ class _PqlSearchBodyState extends State { return ListenableBuilder( listenable: c, builder: (context, _) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ @@ -174,7 +174,7 @@ class _SearchResultRow extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final path = entry['path'] as String? ?? ''; final score = (entry['score'] as num?)?.toDouble() ?? 0; return Padding( @@ -242,7 +242,7 @@ class _FileRow extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final path = entry['path'] as String? ?? ''; return Padding( key: focusKey, @@ -269,7 +269,7 @@ class _QueryResultRow extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final name = entry['name'] as String? ?? entry['path'] as String? ?? ''; final values = entry.entries.where((e) => e.key != 'name' && e.key != 'path').map((e) => '${e.key}: ${e.value}').join(' · '); return Padding( diff --git a/lib/builtin/problems/src/problems_view.dart b/lib/builtin/problems/src/problems_view.dart index 23a23e9e..d01ec8d3 100644 --- a/lib/builtin/problems/src/problems_view.dart +++ b/lib/builtin/problems/src/problems_view.dart @@ -42,7 +42,7 @@ class _ProblemsViewState extends State { return ListenableBuilder( listenable: c, builder: (context, _) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( label: 'problems panel', container: true, @@ -104,7 +104,7 @@ class _ProblemRow extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Padding( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4), child: Column( diff --git a/lib/builtin/search/src/search_panel_view.dart b/lib/builtin/search/src/search_panel_view.dart index 4d843a3a..6693981d 100644 --- a/lib/builtin/search/src/search_panel_view.dart +++ b/lib/builtin/search/src/search_panel_view.dart @@ -66,7 +66,7 @@ class _SearchPanelViewState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ @@ -90,7 +90,7 @@ class _SearchPanelViewState extends State { } Widget _findBody() { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final c = _controller!; return ListenableBuilder( listenable: c, @@ -443,7 +443,7 @@ class _MessageDialog extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return _DialogFrame( tokens: tokens, children: [ @@ -468,7 +468,7 @@ class _ConfirmDialog extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return _DialogFrame( tokens: tokens, children: [ diff --git a/lib/builtin/settings_ui/src/settings_category_view.dart b/lib/builtin/settings_ui/src/settings_category_view.dart index c1026070..f60e3693 100644 --- a/lib/builtin/settings_ui/src/settings_category_view.dart +++ b/lib/builtin/settings_ui/src/settings_category_view.dart @@ -68,7 +68,7 @@ class SettingsSearchResults extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final i = ClideSettings.i18n.of(context); final store = ClideKernel.of(context).settings; final registry = ClideKernel.of(context).settingsRegistry; @@ -119,7 +119,7 @@ class _SectionCard extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Padding( padding: const EdgeInsets.only(bottom: 18), child: Column( @@ -164,7 +164,7 @@ class _FieldRow extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final label = Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -263,7 +263,7 @@ class _ToggleControl extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( checked: checked, excludeSemantics: true, @@ -315,7 +315,7 @@ class _SelectControlState extends State<_SelectControl> { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return ClideAnchoredOverlay( controller: _overlay, align: ClideAnchorAlign.end, @@ -427,7 +427,7 @@ class _EditControlState extends State<_EditControl> { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( textField: true, label: widget.field.label, @@ -504,7 +504,7 @@ class _ScopeTagState extends State<_ScopeTag> { String _ns(String key, String fallback) => ClideSettings.i18n.of(context).string(key, namespace: _settingsNs, placeholder: fallback); ({String glyph, Color color, String tip, String label}) _appearance(SettingsScope? layer) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return switch (layer) { SettingsScope.project => ( glyph: 'folder', diff --git a/lib/builtin/settings_ui/src/settings_modal.dart b/lib/builtin/settings_ui/src/settings_modal.dart index 3261e2fe..f28310f9 100644 --- a/lib/builtin/settings_ui/src/settings_modal.dart +++ b/lib/builtin/settings_ui/src/settings_modal.dart @@ -50,7 +50,7 @@ class _SettingsModalState extends State { @override Widget build(BuildContext context) { final i = ClideSettings.i18n.of(context); - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final title = i.string('modal.title', namespace: SettingsModal.ns, placeholder: 'Settings'); return Focus( @@ -117,7 +117,7 @@ class _Header extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Padding( padding: const EdgeInsets.fromLTRB(16, 12, 10, 12), child: Row( @@ -139,7 +139,7 @@ class _CloseButton extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final i = ClideSettings.i18n.of(context); final label = i.string('modal.close', namespace: SettingsModal.ns, placeholder: 'Close'); final hint = i.string('modal.close.hint', namespace: SettingsModal.ns, placeholder: 'Close settings'); @@ -177,7 +177,7 @@ class _CategoryRail extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final i = ClideSettings.i18n.of(context); final registry = ClideKernel.of(context).settingsRegistry; final searching = query.trim().isNotEmpty; @@ -241,7 +241,7 @@ class _RailRow extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final dim = matchCount == 0; final fg = dim ? tokens.globalTextMuted : (selected ? tokens.globalForeground : tokens.sidebarForeground); return Semantics( @@ -311,7 +311,7 @@ class _EmptyState extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final i = ClideSettings.i18n.of(context); return Center( child: Padding( diff --git a/lib/builtin/shared/reader_chrome.dart b/lib/builtin/shared/reader_chrome.dart index 31cd48df..9c3c909f 100644 --- a/lib/builtin/shared/reader_chrome.dart +++ b/lib/builtin/shared/reader_chrome.dart @@ -46,7 +46,7 @@ class ReaderActionBar extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Row( mainAxisSize: MainAxisSize.min, children: [ @@ -90,7 +90,7 @@ class ReaderPinButton extends StatelessWidget { enabled: onTap != null, active: pinned, onTap: onTap, - tokens: ClideTheme.of(context).surface, + tokens: ClideSettings.theme.of(context).surface, ); } } diff --git a/lib/builtin/theme_picker/src/appearance_control.dart b/lib/builtin/theme_picker/src/appearance_control.dart index 867a5457..cc4c2dcf 100644 --- a/lib/builtin/theme_picker/src/appearance_control.dart +++ b/lib/builtin/theme_picker/src/appearance_control.dart @@ -63,7 +63,7 @@ class _ThemeChip extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( button: true, selected: selected, @@ -95,7 +95,7 @@ class _HcToggle extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( checked: checked, label: label, diff --git a/lib/builtin/theme_picker/src/settings_view.dart b/lib/builtin/theme_picker/src/settings_view.dart index 190d0f84..970d9683 100644 --- a/lib/builtin/theme_picker/src/settings_view.dart +++ b/lib/builtin/theme_picker/src/settings_view.dart @@ -45,7 +45,7 @@ class _SettingsViewState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final i = ClideSettings.i18n.of(context); final themes = baseThemes(widget.controller.available); final currentBase = baseThemeName(widget.controller.currentName); @@ -140,7 +140,7 @@ class _HighContrastToggleState extends State<_HighContrastToggle> { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( checked: widget.checked, label: widget.label, @@ -200,7 +200,7 @@ class _ThemeRow extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final bg = selected ? tokens.listItemSelectedBackground : (hovered ? tokens.listItemHoverBackground : tokens.listItemBackground); final fg = selected ? tokens.listItemSelectedForeground : tokens.listItemForeground; return Semantics( diff --git a/lib/builtin/theme_picker/src/theme_status_item.dart b/lib/builtin/theme_picker/src/theme_status_item.dart index 99e22d88..ab48c217 100644 --- a/lib/builtin/theme_picker/src/theme_status_item.dart +++ b/lib/builtin/theme_picker/src/theme_status_item.dart @@ -32,7 +32,7 @@ class _ThemeSwitcherStatusItemState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; // Listen to both the theme (label changes) and the overlay (open state). return ListenableBuilder( listenable: Listenable.merge([_controller, _overlay]), diff --git a/lib/builtin/tickets/src/ticket_detail_view.dart b/lib/builtin/tickets/src/ticket_detail_view.dart index f27bc13a..a8443c3d 100644 --- a/lib/builtin/tickets/src/ticket_detail_view.dart +++ b/lib/builtin/tickets/src/ticket_detail_view.dart @@ -66,8 +66,8 @@ class _TicketDetailViewState extends State { final d = c.detail; if (d == null) return const Padding(padding: EdgeInsets.all(12), child: ClideText('Select a ticket to view details.', muted: true)); - final tokens = ClideTheme.of(ctx).surface; - final isDark = ClideTheme.of(ctx).dark; + final tokens = ClideSettings.theme.of(ctx).surface; + final isDark = ClideSettings.theme.of(ctx).dark; final typeColors = TicketTypeColors.forTheme(dark: isDark); return ClidePaneChrome( diff --git a/lib/builtin/tickets/src/tickets_view.dart b/lib/builtin/tickets/src/tickets_view.dart index 9d942c1c..f1870c35 100644 --- a/lib/builtin/tickets/src/tickets_view.dart +++ b/lib/builtin/tickets/src/tickets_view.dart @@ -168,7 +168,7 @@ class _TicketsViewState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; if (_loading) return const Center(child: ClideText('Loading tickets...', muted: true)); if (_error != null) return Padding(padding: const EdgeInsets.all(12), child: ClideText(_error!, muted: true)); if (_tickets.isEmpty) return const Padding(padding: EdgeInsets.all(12), child: ClideText('No tickets.\nRun `pql ticket new` to create one.', muted: true)); @@ -197,7 +197,7 @@ class _TicketsViewState extends State { (byStatus[t.status ?? 'backlog'] ??= []).add(t); } - final isDark = ClideTheme.of(context).dark; + final isDark = ClideSettings.theme.of(context).dark; final typeColors = TicketTypeColors.forTheme(dark: isDark); return Column( diff --git a/lib/builtin/vim/src/vim_mode_indicator.dart b/lib/builtin/vim/src/vim_mode_indicator.dart index eb0cd202..62456af9 100644 --- a/lib/builtin/vim/src/vim_mode_indicator.dart +++ b/lib/builtin/vim/src/vim_mode_indicator.dart @@ -1,5 +1,4 @@ import 'package:clide/builtin/vim/src/vim_mode_service.dart'; -import 'package:clide/kernel/kernel.dart'; import 'package:clide/widgets/widgets.dart'; import 'package:flutter/widgets.dart'; @@ -17,7 +16,7 @@ class VimModeIndicator extends StatelessWidget { listenable: service, builder: (context, _) { if (!service.enabled) return const SizedBox.shrink(); - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Padding( padding: const EdgeInsets.symmetric(horizontal: 8), child: ClideText( diff --git a/lib/builtin/welcome/src/welcome_view.dart b/lib/builtin/welcome/src/welcome_view.dart index dea80761..32065c80 100644 --- a/lib/builtin/welcome/src/welcome_view.dart +++ b/lib/builtin/welcome/src/welcome_view.dart @@ -12,7 +12,7 @@ class WelcomeView extends StatelessWidget { @override Widget build(BuildContext context) { final kernel = ClideKernel.of(context); - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return LayoutBuilder( builder: (context, c) { // Tips card sits below the START/RECENT row when there's room @@ -493,7 +493,7 @@ class _OpenProjectDialogState extends State<_OpenProjectDialog> { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Container( width: 420, padding: const EdgeInsets.all(20), @@ -554,7 +554,7 @@ class _NotARepoDialog extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Container( width: 420, padding: const EdgeInsets.all(20), diff --git a/lib/src/shell/hat_bar.dart b/lib/src/shell/hat_bar.dart index 761cbde3..a1bb1a90 100644 --- a/lib/src/shell/hat_bar.dart +++ b/lib/src/shell/hat_bar.dart @@ -18,7 +18,7 @@ class HatBar extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return GestureDetector( onPanStart: (_) => kernel.window.startDrag(), child: Container( diff --git a/lib/src/shell/layout.dart b/lib/src/shell/layout.dart index 9ff80efa..9e12a7c9 100644 --- a/lib/src/shell/layout.dart +++ b/lib/src/shell/layout.dart @@ -65,7 +65,7 @@ class RootLayout extends StatelessWidget { height: dockHeight, child: DecoratedBox( decoration: BoxDecoration( - border: Border(top: BorderSide(color: ClideTheme.of(ctx).surface.chromeBorder)), + border: Border(top: BorderSide(color: ClideSettings.theme.of(ctx).surface.chromeBorder)), ), child: SlotHost(slot: Slots.dock), ), @@ -74,7 +74,7 @@ class RootLayout extends StatelessWidget { Container( height: statusHeight, decoration: BoxDecoration( - border: Border(top: BorderSide(color: ClideTheme.of(ctx).surface.chromeBorder)), + border: Border(top: BorderSide(color: ClideSettings.theme.of(ctx).surface.chromeBorder)), ), child: Row( crossAxisAlignment: CrossAxisAlignment.stretch, @@ -136,7 +136,7 @@ class _BottomRail extends StatelessWidget { @override Widget build(BuildContext context) { final kernel = ClideKernel.of(context); - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return ListenableBuilder( listenable: kernel.panels, builder: (ctx, _) { @@ -202,7 +202,7 @@ class StatusbarCollapseToggle extends StatelessWidget { @override Widget build(BuildContext context) { final kernel = ClideKernel.of(context); - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; if (!visible) return const SizedBox(width: 24); // The chevron points the DIRECTION OF THE ACTION: collapsing tucks the pane // toward its own edge, expanding brings it back toward the centre. @@ -231,7 +231,7 @@ class StatusbarHost extends StatelessWidget { @override Widget build(BuildContext context) { final kernel = ClideKernel.of(context); - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return ListenableBuilder( listenable: kernel.panels, builder: (ctx, _) { diff --git a/lib/src/shell/project_switcher.dart b/lib/src/shell/project_switcher.dart index ceacc362..6a1f6c8b 100644 --- a/lib/src/shell/project_switcher.dart +++ b/lib/src/shell/project_switcher.dart @@ -102,7 +102,7 @@ class _ProjectSwitcherDropdownState extends State<_ProjectSwitcherDropdown> { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final recents = widget.kernel.project.recents; final lf = _filter.toLowerCase(); final filtered = lf.isEmpty ? recents : recents.where((r) => r.name.toLowerCase().contains(lf) || r.path.toLowerCase().contains(lf)).toList(); diff --git a/lib/src/shell/root_shell.dart b/lib/src/shell/root_shell.dart index 328bf402..264f852e 100644 --- a/lib/src/shell/root_shell.dart +++ b/lib/src/shell/root_shell.dart @@ -73,7 +73,7 @@ class RootShellState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; // Resolve the user-selected fonts once (Settings → Appearance, T-460/T-471) // and publish them via ClideFonts; the settings listener rebuilds this on a // change so descendants re-read live. The UI font flows through the @@ -326,7 +326,7 @@ class _WelcomeOverlay extends StatelessWidget { listenable: kernel.project, builder: (ctx, _) { if (kernel.project.isOpen) return const SizedBox.shrink(); - final tokens = ClideTheme.of(ctx).surface; + final tokens = ClideSettings.theme.of(ctx).surface; return ColoredBox(color: tokens.globalBackground, child: const WelcomeView()); }, ); diff --git a/lib/src/shell/slot_host.dart b/lib/src/shell/slot_host.dart index c07e0f37..42ba546c 100644 --- a/lib/src/shell/slot_host.dart +++ b/lib/src/shell/slot_host.dart @@ -52,7 +52,7 @@ class _SlotHostState extends State { @override Widget build(BuildContext context) { final kernel = ClideKernel.of(context); - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return FocusScope( node: _scope, onFocusChange: _onFocusChange, @@ -84,7 +84,7 @@ class _SlotBody extends StatelessWidget { @override Widget build(BuildContext context) { final kernel = ClideKernel.of(context); - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; if (slot == Slots.sidebar) { return _SidebarSlot(tabs: tabs, active: active, activeId: activeId, onSelect: (id) => kernel.panels.activateTab(slot, id)); @@ -125,7 +125,7 @@ class _SidebarSlot extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Container( color: tokens.chromeBackground, alignment: Alignment.topLeft, @@ -156,7 +156,7 @@ class _WorkspaceSlot extends StatelessWidget { @override Widget build(BuildContext context) { final kernel = ClideKernel.of(context); - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return ListenableBuilder( listenable: kernel.arrangement, builder: (ctx, _) { @@ -218,7 +218,7 @@ class _RevealedTab extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Column( children: [ Container( @@ -277,7 +277,7 @@ class _EditorDragHandleState extends State<_EditorDragHandle> { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final lineColor = (_hovered || _focused) ? tokens.panelActiveBorder : tokens.panelBorder; final ratio = widget.arrangement.editorRatio; @@ -356,7 +356,7 @@ class _ContextSlot extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Container(color: tokens.panelBackground, alignment: Alignment.topLeft, padding: const EdgeInsets.only(right: 2), child: active.build(context)); } } diff --git a/lib/widgets/src/clide_accordion.dart b/lib/widgets/src/clide_accordion.dart index 311984a8..c190fd18 100644 --- a/lib/widgets/src/clide_accordion.dart +++ b/lib/widgets/src/clide_accordion.dart @@ -1,4 +1,3 @@ -import 'package:clide/kernel/src/theme/controller.dart'; import 'package:clide/widgets/src/clide_icon.dart'; import 'package:clide/widgets/src/clide_settings.dart'; import 'package:clide/widgets/src/clide_tappable.dart'; @@ -27,7 +26,7 @@ class ClideAccordion extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ diff --git a/lib/widgets/src/clide_button.dart b/lib/widgets/src/clide_button.dart index d00b8cc5..969f02f8 100644 --- a/lib/widgets/src/clide_button.dart +++ b/lib/widgets/src/clide_button.dart @@ -1,4 +1,4 @@ -import 'package:clide/kernel/src/theme/controller.dart'; +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:clide/widgets/src/clide_tappable.dart'; import 'package:clide/widgets/src/clide_text.dart'; import 'package:flutter/widgets.dart'; @@ -27,7 +27,7 @@ class ClideButton extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final enabled = onPressed != null; return Semantics( diff --git a/lib/widgets/src/clide_code_block.dart b/lib/widgets/src/clide_code_block.dart index 8230165b..f693efa8 100644 --- a/lib/widgets/src/clide_code_block.dart +++ b/lib/widgets/src/clide_code_block.dart @@ -1,7 +1,6 @@ import 'dart:convert'; import 'package:clide/kernel/src/syntax/tree_sitter_service.dart'; -import 'package:clide/kernel/src/theme/controller.dart'; import 'package:clide/widgets/src/typography.dart'; import 'package:flutter/widgets.dart'; @@ -51,7 +50,7 @@ class _ClideCodeBlockState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final style = TextStyle( fontFamily: ClideSettings.fonts.monoOf(context), fontFamilyFallback: clideMonoFamilyFallback, diff --git a/lib/widgets/src/clide_collapser_card.dart b/lib/widgets/src/clide_collapser_card.dart index 5e2a2686..037924e1 100644 --- a/lib/widgets/src/clide_collapser_card.dart +++ b/lib/widgets/src/clide_collapser_card.dart @@ -23,7 +23,6 @@ /// caller and passed in — this widget stays free of conversation semantics. library; -import 'package:clide/kernel/src/theme/controller.dart'; import 'package:clide/kernel/src/theme/tokens.dart'; import 'package:clide/widgets/src/clide_card_metrics.dart'; import 'package:clide/widgets/src/clide_icon.dart'; @@ -88,7 +87,7 @@ class _ClideCollapserCardState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Padding( padding: const EdgeInsets.only(bottom: kClideCardGap), child: _expanded ? _expandedFrame(tokens) : _tickerRow(tokens), diff --git a/lib/widgets/src/clide_divider.dart b/lib/widgets/src/clide_divider.dart index 484f7689..dc6959a3 100644 --- a/lib/widgets/src/clide_divider.dart +++ b/lib/widgets/src/clide_divider.dart @@ -1,4 +1,4 @@ -import 'package:clide/kernel/src/theme/controller.dart'; +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:flutter/widgets.dart'; class ClideDivider extends StatelessWidget { @@ -9,7 +9,7 @@ class ClideDivider extends StatelessWidget { @override Widget build(BuildContext context) { - final color = ClideTheme.of(context).surface.dividerColor; + final color = ClideSettings.theme.of(context).surface.dividerColor; return Container(width: axis == Axis.vertical ? thickness : null, height: axis == Axis.horizontal ? thickness : null, color: color); } } diff --git a/lib/widgets/src/clide_filter_box.dart b/lib/widgets/src/clide_filter_box.dart index 4d29b4f8..face6579 100644 --- a/lib/widgets/src/clide_filter_box.dart +++ b/lib/widgets/src/clide_filter_box.dart @@ -1,8 +1,8 @@ +import 'package:clide/widgets/src/clide_settings.dart'; import 'dart:async'; import 'package:clide/kernel/src/events/message_bus.dart'; import 'package:clide/kernel/src/facade.dart'; -import 'package:clide/kernel/src/theme/controller.dart'; import 'package:clide/widgets/src/clide_icon.dart'; import 'package:clide/widgets/src/icons/phosphor.dart'; import 'package:clide/widgets/src/typography.dart'; @@ -115,7 +115,7 @@ class _ClideFilterBoxState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final hasText = _controller.text.isNotEmpty; return Padding( padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6), diff --git a/lib/widgets/src/clide_icon.dart b/lib/widgets/src/clide_icon.dart index 7fb5f5ae..5a0fcf16 100644 --- a/lib/widgets/src/clide_icon.dart +++ b/lib/widgets/src/clide_icon.dart @@ -1,4 +1,4 @@ -import 'package:clide/kernel/src/theme/controller.dart'; +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:flutter/widgets.dart'; /// Stateless painter producing a single-color icon. Every icon in @@ -37,7 +37,7 @@ class ClideIcon extends StatelessWidget { @override Widget build(BuildContext context) { - final resolved = color ?? ClideTheme.of(context).surface.globalForeground; + final resolved = color ?? ClideSettings.theme.of(context).surface.globalForeground; return SizedBox( width: size, height: size, diff --git a/lib/widgets/src/clide_icon_rail.dart b/lib/widgets/src/clide_icon_rail.dart index cfe1937f..0314ffea 100644 --- a/lib/widgets/src/clide_icon_rail.dart +++ b/lib/widgets/src/clide_icon_rail.dart @@ -1,4 +1,4 @@ -import 'package:clide/kernel/src/theme/controller.dart'; +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:clide/widgets/src/clide_icon.dart'; import 'package:clide/widgets/src/clide_tappable.dart'; import 'package:flutter/widgets.dart'; @@ -56,7 +56,7 @@ class _RailButton extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( button: true, selected: active, diff --git a/lib/widgets/src/clide_lightbox.dart b/lib/widgets/src/clide_lightbox.dart index 6f071293..78b62b7c 100644 --- a/lib/widgets/src/clide_lightbox.dart +++ b/lib/widgets/src/clide_lightbox.dart @@ -10,7 +10,7 @@ /// kept here so the UX is ours. library; -import 'package:clide/kernel/src/theme/controller.dart'; +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:clide/kernel/src/theme/tokens.dart'; import 'package:clide/widgets/src/clide_icon.dart'; import 'package:clide/widgets/src/clide_text.dart'; @@ -115,7 +115,7 @@ class _ClideLightboxState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final size = MediaQuery.of(context).size; return Focus( focusNode: _focus, diff --git a/lib/widgets/src/clide_markdown.dart b/lib/widgets/src/clide_markdown.dart index 3d4440ec..250e4da7 100644 --- a/lib/widgets/src/clide_markdown.dart +++ b/lib/widgets/src/clide_markdown.dart @@ -1,4 +1,3 @@ -import 'package:clide/kernel/src/theme/controller.dart'; import 'package:clide/kernel/src/theme/tokens.dart'; import 'package:clide/widgets/src/clide_code_block.dart'; import 'package:clide/widgets/src/clide_divider.dart'; @@ -114,7 +113,7 @@ class ClideMarkdown extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final doc = md.Document(extensionSet: md.ExtensionSet.gitHubFlavored); final nodes = doc.parseLines(source.split('\n')); final hooks = ClideMarkdownHooks( diff --git a/lib/widgets/src/clide_menu.dart b/lib/widgets/src/clide_menu.dart index b89a828a..e15b7908 100644 --- a/lib/widgets/src/clide_menu.dart +++ b/lib/widgets/src/clide_menu.dart @@ -8,6 +8,7 @@ /// quick-open) reuse identical key handling without [ClideMenu]'s rendering. library; +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:clide/kernel/kernel.dart'; import 'package:clide/widgets/src/clide_icon.dart'; import 'package:clide/widgets/src/clide_tappable.dart'; @@ -250,7 +251,7 @@ class _ClideMenuState extends State { @override Widget build(BuildContext context) { - final t = ClideTheme.of(context).surface; + final t = ClideSettings.theme.of(context).surface; final col = Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, diff --git a/lib/widgets/src/clide_palette.dart b/lib/widgets/src/clide_palette.dart index 69b7928b..68c595d1 100644 --- a/lib/widgets/src/clide_palette.dart +++ b/lib/widgets/src/clide_palette.dart @@ -104,7 +104,7 @@ class _ClidePaletteState extends State { @override Widget build(BuildContext context) { final kernel = ClideKernel.of(context); - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return ListenableBuilder( listenable: kernel.palette, builder: (ctx, _) { @@ -205,7 +205,7 @@ class _PaletteItemState extends State<_PaletteItem> { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final selected = widget.highlighted; return MouseRegion( cursor: SystemMouseCursors.click, diff --git a/lib/widgets/src/clide_pane_chrome.dart b/lib/widgets/src/clide_pane_chrome.dart index 7cbcb265..3105a3a6 100644 --- a/lib/widgets/src/clide_pane_chrome.dart +++ b/lib/widgets/src/clide_pane_chrome.dart @@ -1,4 +1,4 @@ -import 'package:clide/kernel/src/theme/controller.dart'; +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:flutter/widgets.dart'; import 'clide_divider.dart'; @@ -39,7 +39,7 @@ class ClidePaneChrome extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return ColoredBox( color: tokens.panelBackground, child: Column( @@ -59,7 +59,7 @@ class _CloseButton extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( button: true, label: 'Close pane', @@ -90,7 +90,7 @@ class _Header extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( container: true, explicitChildNodes: true, diff --git a/lib/widgets/src/clide_pty_view.dart b/lib/widgets/src/clide_pty_view.dart index df8a3ac8..c9495afd 100644 --- a/lib/widgets/src/clide_pty_view.dart +++ b/lib/widgets/src/clide_pty_view.dart @@ -1,4 +1,3 @@ -import 'package:clide/kernel/src/theme/controller.dart'; import 'package:clide/kernel/src/theme/tokens.dart'; import 'package:clide/widgets/src/typography.dart'; import 'package:flutter/widgets.dart'; @@ -30,7 +29,7 @@ class ClidePtyView extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( label: label, textField: true, diff --git a/lib/widgets/src/clide_scrollbar.dart b/lib/widgets/src/clide_scrollbar.dart index 3d522aa8..3740883f 100644 --- a/lib/widgets/src/clide_scrollbar.dart +++ b/lib/widgets/src/clide_scrollbar.dart @@ -1,4 +1,4 @@ -import 'package:clide/kernel/src/theme/controller.dart'; +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:flutter/widgets.dart'; /// Thin themed scrollbar. Tier-0 shell; more refined scrolling (velocity @@ -12,7 +12,7 @@ class ClideScrollbar extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return ScrollbarTheme( slider: tokens.scrollbarSlider, sliderHover: tokens.scrollbarSliderHover, diff --git a/lib/widgets/src/clide_spine.dart b/lib/widgets/src/clide_spine.dart index 62263dfc..26f6b31a 100644 --- a/lib/widgets/src/clide_spine.dart +++ b/lib/widgets/src/clide_spine.dart @@ -1,6 +1,6 @@ +import 'package:clide/widgets/src/clide_settings.dart'; import 'dart:math' as math; -import 'package:clide/kernel/src/theme/controller.dart'; import 'package:clide/widgets/src/clide_tappable.dart'; import 'package:flutter/widgets.dart'; @@ -16,7 +16,7 @@ class ClideSpine extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final borderSide = BorderSide(color: tokens.dividerColor); return Semantics( diff --git a/lib/widgets/src/clide_spinner.dart b/lib/widgets/src/clide_spinner.dart index 2af578e2..ca0c4e8a 100644 --- a/lib/widgets/src/clide_spinner.dart +++ b/lib/widgets/src/clide_spinner.dart @@ -9,9 +9,9 @@ /// with bounded pumps. library; +import 'package:clide/widgets/src/clide_settings.dart'; import 'dart:math' as math; -import 'package:clide/kernel/src/theme/controller.dart'; import 'package:clide/widgets/src/clide_svg_view.dart'; import 'package:flutter/widgets.dart'; @@ -61,7 +61,7 @@ class _ClideSpinnerState extends State with SingleTickerProviderSt @override Widget build(BuildContext context) { - final color = widget.color ?? ClideTheme.of(context).surface.globalForeground; + final color = widget.color ?? ClideSettings.theme.of(context).surface.globalForeground; // Tint every stroke of the multi-colour logo to one colour, keeping alpha. final mark = ColorFiltered( colorFilter: ColorFilter.mode(color, BlendMode.srcIn), diff --git a/lib/widgets/src/clide_status_indicator.dart b/lib/widgets/src/clide_status_indicator.dart index 188c96e8..40a8f9f5 100644 --- a/lib/widgets/src/clide_status_indicator.dart +++ b/lib/widgets/src/clide_status_indicator.dart @@ -8,7 +8,7 @@ /// children leave the seam for a fuller transition later. library; -import 'package:clide/kernel/src/theme/controller.dart'; +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:clide/widgets/src/clide_icon.dart'; import 'package:clide/widgets/src/clide_spinner.dart'; import 'package:clide/widgets/src/icons/check.dart'; @@ -45,7 +45,7 @@ class _ClideStatusIndicatorState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final key = ValueKey('${widget.status.name}-$_seq'); final (Widget glyph, String label) = switch (widget.status) { ClideRunStatus.running => (ClideSpinner(size: widget.size, color: tokens.globalTextMuted, key: key), 'running'), diff --git a/lib/widgets/src/clide_surface.dart b/lib/widgets/src/clide_surface.dart index 81dcf84b..ffb75546 100644 --- a/lib/widgets/src/clide_surface.dart +++ b/lib/widgets/src/clide_surface.dart @@ -1,4 +1,4 @@ -import 'package:clide/kernel/src/theme/controller.dart'; +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:flutter/widgets.dart'; /// Themed container. Replaces Material's Card / Scaffold body surfaces @@ -17,7 +17,7 @@ class ClideSurface extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Container( width: width, height: height, diff --git a/lib/widgets/src/clide_tab_bar.dart b/lib/widgets/src/clide_tab_bar.dart index 1cb45f14..bf7614ea 100644 --- a/lib/widgets/src/clide_tab_bar.dart +++ b/lib/widgets/src/clide_tab_bar.dart @@ -1,4 +1,4 @@ -import 'package:clide/kernel/src/theme/controller.dart'; +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:clide/widgets/src/clide_icon.dart'; import 'package:clide/widgets/src/clide_tappable.dart'; import 'package:clide/widgets/src/clide_text.dart'; @@ -26,7 +26,7 @@ class ClideTabBar extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( container: true, label: semanticContainerLabel, @@ -54,7 +54,7 @@ class _Tab extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final fg = active ? tokens.tabActiveForeground : tokens.tabInactiveForeground; return Semantics( diff --git a/lib/widgets/src/clide_tappable.dart b/lib/widgets/src/clide_tappable.dart index 2247b426..e91934ce 100644 --- a/lib/widgets/src/clide_tappable.dart +++ b/lib/widgets/src/clide_tappable.dart @@ -1,4 +1,4 @@ -import 'package:clide/kernel/kernel.dart' show ClideTheme; +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:clide/widgets/src/clide_tooltip.dart'; import 'package:flutter/widgets.dart'; @@ -68,7 +68,7 @@ class _ClideTappableState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final enabled = widget.onTap != null; Widget child = MouseRegion( cursor: enabled ? widget.cursor : SystemMouseCursors.forbidden, diff --git a/lib/widgets/src/clide_text.dart b/lib/widgets/src/clide_text.dart index fbf486c3..60fdc58a 100644 --- a/lib/widgets/src/clide_text.dart +++ b/lib/widgets/src/clide_text.dart @@ -1,4 +1,4 @@ -import 'package:clide/kernel/src/theme/controller.dart'; +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:clide/widgets/src/typography.dart'; import 'package:flutter/widgets.dart'; @@ -36,7 +36,7 @@ class ClideText extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final resolved = color ?? (muted ? tokens.globalTextMuted : tokens.globalForeground); return Text( data, diff --git a/lib/widgets/src/clide_toast.dart b/lib/widgets/src/clide_toast.dart index fbd42e0a..3ce4ccf0 100644 --- a/lib/widgets/src/clide_toast.dart +++ b/lib/widgets/src/clide_toast.dart @@ -1,3 +1,4 @@ +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:clide/kernel/kernel.dart'; import 'package:clide/widgets/src/clide_icon.dart'; import 'package:clide/widgets/src/clide_tappable.dart'; @@ -50,7 +51,7 @@ class _ClideToastState extends State { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final style = _styleFor(widget.entry.severity, tokens); return AnimatedSlide( offset: _shown ? Offset.zero : const Offset(0.25, 0), diff --git a/lib/widgets/src/clide_tooltip.dart b/lib/widgets/src/clide_tooltip.dart index 24c09e7e..8341083c 100644 --- a/lib/widgets/src/clide_tooltip.dart +++ b/lib/widgets/src/clide_tooltip.dart @@ -1,4 +1,4 @@ -import 'package:clide/kernel/src/theme/controller.dart'; +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:clide/widgets/src/clide_text.dart'; import 'package:flutter/widgets.dart'; @@ -29,7 +29,7 @@ class _ClideTooltipState extends State { _entry = OverlayEntry( builder: (ctx) { - final tokens = ClideTheme.of(ctx).surface; + final tokens = ClideSettings.theme.of(ctx).surface; final tooltip = Container( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), decoration: BoxDecoration( diff --git a/lib/widgets/src/ex_line_overlay.dart b/lib/widgets/src/ex_line_overlay.dart index 9ca383c5..0a1c4f0f 100644 --- a/lib/widgets/src/ex_line_overlay.dart +++ b/lib/widgets/src/ex_line_overlay.dart @@ -133,7 +133,7 @@ class _ExLineOverlayState extends State { @override Widget build(BuildContext context) { final kernel = ClideKernel.of(context); - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return ListenableBuilder( listenable: kernel.exLine, builder: (ctx, _) { diff --git a/lib/widgets/src/multitab_pane.dart b/lib/widgets/src/multitab_pane.dart index 26228043..df044995 100644 --- a/lib/widgets/src/multitab_pane.dart +++ b/lib/widgets/src/multitab_pane.dart @@ -1,4 +1,4 @@ -import 'package:clide/kernel/src/theme/controller.dart'; +import 'package:clide/widgets/src/clide_settings.dart'; import 'package:clide/widgets/src/clide_icon.dart'; import 'package:clide/widgets/src/clide_tappable.dart'; import 'package:clide/widgets/src/clide_text.dart'; @@ -105,7 +105,7 @@ class _TabStrip extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final entries = controller.entries; final activeId = controller.activeId; @@ -185,7 +185,7 @@ class _ReorderableTabState extends State<_ReorderableTab> { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final tabContent = _Tab(entry: widget.entry, active: widget.active, onSelect: widget.onSelect, onClose: widget.onClose, tabHeight: widget.tabHeight); @@ -238,7 +238,7 @@ class _DragFeedback extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Container( height: tabHeight, constraints: const BoxConstraints(minWidth: 96, maxWidth: 200), @@ -271,7 +271,7 @@ class _TabState extends State<_Tab> { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final fg = widget.active ? tokens.tabActiveForeground : tokens.tabInactiveForeground; // Active tabs sit on the elevated chrome surface (panelHeader); // inactive tabs blend into the tab bar. @@ -343,7 +343,7 @@ class _AddButton extends StatelessWidget { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return Semantics( button: true, label: 'New tab', diff --git a/lib/widgets/src/quick_open_overlay.dart b/lib/widgets/src/quick_open_overlay.dart index 0e68f1d5..8fa606a7 100644 --- a/lib/widgets/src/quick_open_overlay.dart +++ b/lib/widgets/src/quick_open_overlay.dart @@ -150,7 +150,7 @@ class _QuickOpenOverlayState extends State { @override Widget build(BuildContext context) { final kernel = ClideKernel.of(context); - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; return ListenableBuilder( listenable: kernel.quickOpen, builder: (ctx, _) { @@ -262,7 +262,7 @@ class _QuickOpenItemState extends State<_QuickOpenItem> { @override Widget build(BuildContext context) { - final tokens = ClideTheme.of(context).surface; + final tokens = ClideSettings.theme.of(context).surface; final selected = widget.highlighted; // Split the basename from its directory so the filename reads first. final slash = widget.path.lastIndexOf('/');