Panel: area plugin cards with per-feature toggles, the Fixes list, modes (first-run screen and Settings)

- PanelSite.features: the app's feature table; AreaPlugins draws one card per area (switch, count, grouped features, Settings button that runs the area's command in the site tab) and the core flags as Fixes
- a feature still backed by an old plugin file is switched through plugin_set_enabled from its card and left out of the JavaScript plugins list
- Modes: Onboarding (three cards, recommended preselected; an existing setup may be kept) and ModeSettings with the keep-my-changes question; openOnboardingWhenDue for ShellSite.start
- flags are saved sparsely (only what differs from the table's defaults)
- PanelSite.appearance.extra; palette commands of an area are listed under its name
- the kit's words for feature settings and health notes; English in the framework catalog

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
CRTkafa 2026-09-30 18:34:14 +07:00
parent e7e744f66d
commit dc7d6f815a
16 changed files with 689 additions and 24 deletions

View file

@ -281,7 +281,20 @@ export const PANEL_MESSAGES = {
'wb.dev.title': 'Live reload',
'wb.dev.turnOn': 'Turn developer mode on to watch your files.',
'wb.dev.watching': 'Watching',
'wb.features.areas': 'Area plugins',
'wb.features.areasHint': 'One plugin for each part of {site}. Switch a whole plugin off, or open it and pick its features one by one.',
'wb.features.count': '{on} of {total} on',
'wb.features.default': 'default',
'wb.features.fixes': 'Fixes',
'wb.features.fixesHint': 'On in every mode. No plugin switches them off.',
'wb.features.inApp': 'runs in the app',
'wb.features.missing': 'not installed',
'wb.features.off': 'Off. Its features are paused; your choices are kept.',
'wb.features.ownCopy': 'You have your own copy of {name}, so the built-in feature is off.',
'wb.features.ownCopyAsk': 'Your own copy of {name} is on. Turn it off and use the built-in one?',
'wb.features.pluginFile': 'plugin file',
'wb.features.settingsNoTab': 'Open a {site} tab first, then choose Settings again.',
'wb.features.useBuiltIn': 'Use the built-in one',
'wb.fonts.asSite': 'As {site} draws it',
'wb.fonts.builtIn': 'Built-in & system',
'wb.fonts.category': 'Category',
@ -451,6 +464,21 @@ export const PANEL_MESSAGES = {
'wb.make.warn.permissions': 'No @permissions line: the plugin is listed as “legacy, full page access” and gets the whole API. Declare what it uses, e.g. @permissions storage, ui, network:none.',
'wb.make.warn.stop': 'Add stop() that undoes everything start() did (scope.dispose() does it for a scope).',
'wb.make.warn.tag': 'The header has no {tag}.',
'wb.modes.applied': '{mode} is on.',
'wb.modes.current': 'in use',
'wb.modes.existing': 'You already set {app} up. Nothing changes unless you pick a mode.',
'wb.modes.keep': 'Keep my changes',
'wb.modes.keepHint': '{count, plural, one {# setting you changed would be replaced.} other {# settings you changed would be replaced.}}',
'wb.modes.keepQuestion': 'Keep your manual changes?',
'wb.modes.keepSetup': 'Keep my current setup',
'wb.modes.lede': 'Pick a starting point. Every plugin and feature stays individually switchable, and you can change the mode later in Settings.',
'wb.modes.recommended': 'Recommended',
'wb.modes.reset': 'Use {mode} as it is',
'wb.modes.section': 'Mode',
'wb.modes.sectionHint': 'A starting point, not a lock. Changing it never takes a switch away.',
'wb.modes.start': 'Start with {mode}',
'wb.modes.title': 'How much should {app} change {site}?',
'wb.modes.use': 'Use this mode',
'wb.panel.accounts.add': '+ Add account',
'wb.panel.accounts.hint': 'Each account is its own {site} sign-in on this computer and stays signed in across restarts. Click one to open its feed beside this pane.',
'wb.panel.accounts.newTabsBadge': 'new tabs',