Files
clide/lib/builtin/extensions_ui/src/extensions_notice.dart
T
jpmschweitzerandClaude Opus 4.8 18cd945380 refactor(theme): route consumer reads through ClideSettings.theme (T-473)
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) <noreply@anthropic.com>
2026-06-17 21:47:15 +02:00

56 lines
2.0 KiB
Dart

import 'package:clide/widgets/widgets.dart';
import 'package:flutter/widgets.dart';
/// The Extensions settings tab's "watch this space" notice (T-456).
///
/// Built-in extensions are always on and there's no third-party install path
/// yet, so there's nothing to manage. Rather than ship a toggle list that could
/// brick the app, the tab explains that extension management arrives with
/// third-party (Lua) extensions and points at the records that track it.
/// Rendered inside the section card (no own surface) via the custom-control
/// registry.
class ExtensionsNotice extends StatelessWidget {
const ExtensionsNotice({super.key});
static const ns = 'builtin.extensions-ui';
@override
Widget build(BuildContext context) {
final tokens = ClideSettings.theme.of(context).surface;
final i = ClideSettings.i18n.of(context);
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
ClideIcon(PhosphorIcons.byName('puzzle-piece'), size: 18, color: tokens.globalTextMuted),
const SizedBox(width: 8),
ClideText(
i.string('notice.title', namespace: ns, placeholder: 'Extension management is coming'),
fontSize: 14,
fontWeight: FontWeight.w600,
),
],
),
const SizedBox(height: 10),
ClideText(
i.string(
'notice.body',
namespace: ns,
placeholder:
'Installing, enabling, and disabling extensions arrives with third-party (Lua) extension support. For now the built-in extensions are always on.',
),
color: tokens.globalTextMuted,
),
const SizedBox(height: 10),
ClideText(
i.string('notice.tracked', namespace: ns, placeholder: 'Tracked in T-8 (Tier 6) · D-16'),
color: tokens.globalTextMuted,
fontSize: clideFontCaption,
fontFamily: ClideSettings.fonts.monoOf(context),
),
],
);
}
}