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>
56 lines
2.0 KiB
Dart
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),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|