waybetter 0.1.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +143 -9
- package/bin/waybetter.mjs +46 -0
- package/build/runtime.mjs +105 -0
- package/cli/buildenv.mjs +130 -0
- package/cli/dev.mjs +97 -0
- package/cli/i18n.mjs +382 -0
- package/cli/manifests.mjs +383 -0
- package/cli/privacy.mjs +768 -0
- package/cli/release.mjs +444 -0
- package/cli/remote.mjs +260 -0
- package/cli/store.mjs +326 -0
- package/cli/strings.mjs +121 -0
- package/dist/runtime/column.d.ts +93 -0
- package/dist/runtime/column.js +451 -0
- package/dist/runtime/column.js.map +1 -0
- package/dist/runtime/commandReport.d.ts +19 -0
- package/dist/runtime/commandReport.js +47 -0
- package/dist/runtime/commandReport.js.map +1 -0
- package/dist/runtime/commands.d.ts +72 -0
- package/dist/runtime/commands.js +214 -0
- package/dist/runtime/commands.js.map +1 -0
- package/dist/runtime/devErrors.d.ts +16 -0
- package/dist/runtime/devErrors.js +30 -0
- package/dist/runtime/devErrors.js.map +1 -0
- package/dist/runtime/domHub.d.ts +21 -0
- package/dist/runtime/domHub.js +139 -4
- package/dist/runtime/domHub.js.map +1 -1
- package/dist/runtime/featureModules.d.ts +157 -0
- package/dist/runtime/featureModules.js +484 -0
- package/dist/runtime/featureModules.js.map +1 -0
- package/dist/runtime/featureTable.d.ts +144 -0
- package/dist/runtime/featureTable.js +223 -0
- package/dist/runtime/featureTable.js.map +1 -0
- package/dist/runtime/fonts.d.ts +22 -0
- package/dist/runtime/fonts.js +72 -0
- package/dist/runtime/fonts.js.map +1 -0
- package/dist/runtime/i18n.d.ts +138 -0
- package/dist/runtime/i18n.js +614 -0
- package/dist/runtime/i18n.js.map +1 -0
- package/dist/runtime/i18nCheck.d.ts +30 -0
- package/dist/runtime/i18nCheck.js +224 -0
- package/dist/runtime/i18nCheck.js.map +1 -0
- package/dist/runtime/pageLang.d.ts +8 -0
- package/dist/runtime/pageLang.js +64 -0
- package/dist/runtime/pageLang.js.map +1 -0
- package/dist/runtime/pageStrings.d.ts +35 -0
- package/dist/runtime/pageStrings.js +76 -0
- package/dist/runtime/pageStrings.js.map +1 -0
- package/dist/runtime/panelButton.d.ts +33 -0
- package/dist/runtime/panelButton.js +83 -0
- package/dist/runtime/panelButton.js.map +1 -0
- package/dist/runtime/permissions.d.ts +47 -0
- package/dist/runtime/permissions.js +141 -0
- package/dist/runtime/permissions.js.map +1 -0
- package/dist/runtime/pluginApi.d.ts +51 -2
- package/dist/runtime/pluginApi.js +137 -22
- package/dist/runtime/pluginApi.js.map +1 -1
- package/dist/runtime/pluginI18n.d.ts +29 -0
- package/dist/runtime/pluginI18n.js +119 -0
- package/dist/runtime/pluginI18n.js.map +1 -0
- package/dist/runtime/settingsForm.d.ts +66 -0
- package/dist/runtime/settingsForm.js +114 -0
- package/dist/runtime/settingsForm.js.map +1 -0
- package/dist/runtime/site.d.ts +5 -0
- package/dist/runtime/site.js +1 -1
- package/dist/runtime/site.js.map +1 -1
- package/dist/runtime/siteRuntime.d.ts +144 -0
- package/dist/runtime/siteRuntime.js +175 -0
- package/dist/runtime/siteRuntime.js.map +1 -0
- package/dist/runtime/stringPackHook.d.ts +84 -0
- package/dist/runtime/stringPackHook.js +220 -0
- package/dist/runtime/stringPackHook.js.map +1 -0
- package/dist/runtime/stringPackTranslate.d.ts +59 -0
- package/dist/runtime/stringPackTranslate.js +264 -0
- package/dist/runtime/stringPackTranslate.js.map +1 -0
- package/dist/runtime/stringPacks.d.ts +200 -0
- package/dist/runtime/stringPacks.js +474 -0
- package/dist/runtime/stringPacks.js.map +1 -0
- package/dist/runtime/styles.d.ts +15 -0
- package/dist/runtime/styles.js +81 -0
- package/dist/runtime/styles.js.map +1 -0
- package/dist/runtime/textNet.d.ts +15 -0
- package/dist/runtime/textNet.js +131 -0
- package/dist/runtime/textNet.js.map +1 -0
- package/dist/runtime/themeApi.d.ts +121 -0
- package/dist/runtime/themeApi.js +220 -0
- package/dist/runtime/themeApi.js.map +1 -0
- package/dist/runtime/themeChoice.d.ts +52 -0
- package/dist/runtime/themeChoice.js +69 -0
- package/dist/runtime/themeChoice.js.map +1 -0
- package/dist/runtime/themeComponents.d.ts +435 -0
- package/dist/runtime/themeComponents.js +463 -0
- package/dist/runtime/themeComponents.js.map +1 -0
- package/dist/runtime/themeDecor.d.ts +73 -0
- package/dist/runtime/themeDecor.js +131 -0
- package/dist/runtime/themeDecor.js.map +1 -0
- package/dist/runtime/themeDoctor.d.ts +11 -0
- package/dist/runtime/themeDoctor.js +51 -0
- package/dist/runtime/themeDoctor.js.map +1 -0
- package/dist/runtime/themeIcons.d.ts +130 -0
- package/dist/runtime/themeIcons.js +263 -0
- package/dist/runtime/themeIcons.js.map +1 -0
- package/dist/runtime/themeRuntime.d.ts +100 -0
- package/dist/runtime/themeRuntime.js +497 -0
- package/dist/runtime/themeRuntime.js.map +1 -0
- package/dist/runtime/themeSchema.d.ts +10 -0
- package/dist/runtime/themeSchema.js +150 -0
- package/dist/runtime/themeSchema.js.map +1 -0
- package/dist/runtime/themeSpec.d.ts +259 -0
- package/dist/runtime/themeSpec.js +439 -0
- package/dist/runtime/themeSpec.js.map +1 -0
- package/dist/runtime/themeTokens.d.ts +12 -0
- package/dist/runtime/themeTokens.js +14 -6
- package/dist/runtime/themeTokens.js.map +1 -1
- package/dist/runtime/themeVariants.d.ts +30 -0
- package/dist/runtime/themeVariants.js +53 -0
- package/dist/runtime/themeVariants.js.map +1 -0
- package/dist/runtime/ui.d.ts +192 -0
- package/dist/runtime/ui.js +926 -0
- package/dist/runtime/ui.js.map +1 -0
- package/dist/shell/InstallDialog.d.ts +40 -0
- package/dist/shell/InstallDialog.js +170 -0
- package/dist/shell/InstallDialog.js.map +1 -0
- package/dist/shell/StoreView.d.ts +66 -0
- package/dist/shell/StoreView.js +103 -0
- package/dist/shell/StoreView.js.map +1 -0
- package/dist/shell/addressModel.js.map +1 -1
- package/dist/shell/chrome.js.map +1 -1
- package/dist/shell/deckModel.d.ts +117 -0
- package/dist/shell/deckModel.js +267 -0
- package/dist/shell/deckModel.js.map +1 -0
- package/dist/shell/frame/AccountSwitcher.d.ts +42 -0
- package/dist/shell/frame/AccountSwitcher.js +243 -0
- package/dist/shell/frame/AccountSwitcher.js.map +1 -0
- package/dist/shell/frame/AddColumnDialog.d.ts +8 -0
- package/dist/shell/frame/AddColumnDialog.js +81 -0
- package/dist/shell/frame/AddColumnDialog.js.map +1 -0
- package/dist/shell/frame/AppMenu.d.ts +21 -0
- package/dist/shell/frame/AppMenu.js +642 -0
- package/dist/shell/frame/AppMenu.js.map +1 -0
- package/dist/shell/frame/CommandPalette.d.ts +7 -0
- package/dist/shell/frame/CommandPalette.js +118 -0
- package/dist/shell/frame/CommandPalette.js.map +1 -0
- package/dist/shell/frame/DeckView.d.ts +13 -0
- package/dist/shell/frame/DeckView.js +287 -0
- package/dist/shell/frame/DeckView.js.map +1 -0
- package/dist/shell/frame/FindBar.d.ts +10 -0
- package/dist/shell/frame/FindBar.js +108 -0
- package/dist/shell/frame/FindBar.js.map +1 -0
- package/dist/shell/frame/MediaPanel.d.ts +8 -0
- package/dist/shell/frame/MediaPanel.js +76 -0
- package/dist/shell/frame/MediaPanel.js.map +1 -0
- package/dist/shell/frame/NewTabPage.d.ts +9 -0
- package/dist/shell/frame/NewTabPage.js +71 -0
- package/dist/shell/frame/NewTabPage.js.map +1 -0
- package/dist/shell/frame/PaneTheme.d.ts +16 -0
- package/dist/shell/frame/PaneTheme.js +67 -0
- package/dist/shell/frame/PaneTheme.js.map +1 -0
- package/dist/shell/frame/ReportDialog.d.ts +3 -0
- package/dist/shell/frame/ReportDialog.js +95 -0
- package/dist/shell/frame/ReportDialog.js.map +1 -0
- package/dist/shell/frame/Shell.d.ts +8 -0
- package/dist/shell/frame/Shell.js +1131 -0
- package/dist/shell/frame/Shell.js.map +1 -0
- package/dist/shell/frame/Titlebar.d.ts +16 -0
- package/dist/shell/frame/Titlebar.js +77 -0
- package/dist/shell/frame/Titlebar.js.map +1 -0
- package/dist/shell/frame/TitlebarExtras.d.ts +4 -0
- package/dist/shell/frame/TitlebarExtras.js +202 -0
- package/dist/shell/frame/TitlebarExtras.js.map +1 -0
- package/dist/shell/frame/WebPanel.d.ts +4 -0
- package/dist/shell/frame/WebPanel.js +182 -0
- package/dist/shell/frame/WebPanel.js.map +1 -0
- package/dist/shell/frame/accountModel.d.ts +49 -0
- package/dist/shell/frame/accountModel.js +67 -0
- package/dist/shell/frame/accountModel.js.map +1 -0
- package/dist/shell/frame/accountSwitcher.css +91 -0
- package/dist/shell/frame/appI18n.d.ts +44 -0
- package/dist/shell/frame/appI18n.js +64 -0
- package/dist/shell/frame/appI18n.js.map +1 -0
- package/dist/shell/frame/appMenu.css +121 -0
- package/dist/shell/frame/backupModel.d.ts +38 -0
- package/dist/shell/frame/backupModel.js +192 -0
- package/dist/shell/frame/backupModel.js.map +1 -0
- package/dist/shell/frame/boot.d.ts +8 -0
- package/dist/shell/frame/boot.js +35 -0
- package/dist/shell/frame/boot.js.map +1 -0
- package/dist/shell/frame/brand.d.ts +1 -0
- package/dist/shell/frame/brand.js +4 -0
- package/dist/shell/frame/brand.js.map +1 -0
- package/dist/shell/frame/bridge.d.ts +35 -0
- package/dist/shell/frame/bridge.js +70 -0
- package/dist/shell/frame/bridge.js.map +1 -0
- package/dist/shell/frame/chromeTheme.d.ts +29 -0
- package/dist/shell/frame/chromeTheme.js +81 -0
- package/dist/shell/frame/chromeTheme.js.map +1 -0
- package/dist/shell/frame/deck.css +209 -0
- package/dist/shell/frame/deckStore.d.ts +89 -0
- package/dist/shell/frame/deckStore.js +239 -0
- package/dist/shell/frame/deckStore.js.map +1 -0
- package/dist/shell/frame/devHost.d.ts +35 -0
- package/dist/shell/frame/devHost.js +80 -0
- package/dist/shell/frame/devHost.js.map +1 -0
- package/dist/shell/frame/devModel.d.ts +7 -0
- package/dist/shell/frame/devModel.js +17 -0
- package/dist/shell/frame/devModel.js.map +1 -0
- package/dist/shell/frame/diag.d.ts +7 -0
- package/dist/shell/frame/diag.js +39 -0
- package/dist/shell/frame/diag.js.map +1 -0
- package/dist/shell/frame/findBar.css +14 -0
- package/dist/shell/frame/frameMessages.d.ts +248 -0
- package/dist/shell/frame/frameMessages.js +252 -0
- package/dist/shell/frame/frameMessages.js.map +1 -0
- package/dist/shell/frame/hooks.d.ts +39 -0
- package/dist/shell/frame/hooks.js +97 -0
- package/dist/shell/frame/hooks.js.map +1 -0
- package/dist/shell/frame/i18n.d.ts +27 -0
- package/dist/shell/frame/i18n.js +66 -0
- package/dist/shell/frame/i18n.js.map +1 -0
- package/dist/shell/frame/iconPack.d.ts +11 -0
- package/dist/shell/frame/iconPack.js +45 -0
- package/dist/shell/frame/iconPack.js.map +1 -0
- package/dist/shell/frame/icons.d.ts +71 -0
- package/dist/shell/frame/icons.js +75 -0
- package/dist/shell/frame/icons.js.map +1 -0
- package/dist/shell/frame/index.d.ts +34 -0
- package/dist/shell/frame/index.js +43 -0
- package/dist/shell/frame/index.js.map +1 -0
- package/dist/shell/frame/language.d.ts +58 -0
- package/dist/shell/frame/language.js +165 -0
- package/dist/shell/frame/language.js.map +1 -0
- package/dist/shell/frame/mediaModel.d.ts +34 -0
- package/dist/shell/frame/mediaModel.js +53 -0
- package/dist/shell/frame/mediaModel.js.map +1 -0
- package/dist/shell/frame/menuMessages.en.json +54 -0
- package/dist/shell/frame/menuModel.d.ts +277 -0
- package/dist/shell/frame/menuModel.js +293 -0
- package/dist/shell/frame/menuModel.js.map +1 -0
- package/dist/shell/frame/paletteModel.d.ts +139 -0
- package/dist/shell/frame/paletteModel.js +112 -0
- package/dist/shell/frame/paletteModel.js.map +1 -0
- package/dist/shell/frame/paneTheme.css +9 -0
- package/dist/shell/frame/pluginCommandStore.d.ts +23 -0
- package/dist/shell/frame/pluginCommandStore.js +70 -0
- package/dist/shell/frame/pluginCommandStore.js.map +1 -0
- package/dist/shell/frame/reportModel.d.ts +52 -0
- package/dist/shell/frame/reportModel.js +105 -0
- package/dist/shell/frame/reportModel.js.map +1 -0
- package/dist/shell/frame/safeStore.d.ts +7 -0
- package/dist/shell/frame/safeStore.js +40 -0
- package/dist/shell/frame/safeStore.js.map +1 -0
- package/dist/shell/frame/searchInput.d.ts +2 -0
- package/dist/shell/frame/searchInput.js +11 -0
- package/dist/shell/frame/searchInput.js.map +1 -0
- package/dist/shell/frame/shell.css +629 -0
- package/dist/shell/frame/site.d.ts +206 -0
- package/dist/shell/frame/site.js +22 -0
- package/dist/shell/frame/site.js.map +1 -0
- package/dist/shell/frame/state.d.ts +99 -0
- package/dist/shell/frame/state.js +284 -0
- package/dist/shell/frame/state.js.map +1 -0
- package/dist/shell/frame/syncGate.d.ts +10 -0
- package/dist/shell/frame/syncGate.js +36 -0
- package/dist/shell/frame/syncGate.js.map +1 -0
- package/dist/shell/frame/syncHost.d.ts +35 -0
- package/dist/shell/frame/syncHost.js +85 -0
- package/dist/shell/frame/syncHost.js.map +1 -0
- package/dist/shell/frame/tabStill.d.ts +2 -0
- package/dist/shell/frame/tabStill.js +62 -0
- package/dist/shell/frame/tabStill.js.map +1 -0
- package/dist/shell/frame/themeScopes.d.ts +29 -0
- package/dist/shell/frame/themeScopes.js +61 -0
- package/dist/shell/frame/themeScopes.js.map +1 -0
- package/dist/shell/frame/themeStore.d.ts +99 -0
- package/dist/shell/frame/themeStore.js +252 -0
- package/dist/shell/frame/themeStore.js.map +1 -0
- package/dist/shell/frame/windowBinding.d.ts +2 -0
- package/dist/shell/frame/windowBinding.js +7 -0
- package/dist/shell/frame/windowBinding.js.map +1 -0
- package/dist/shell/frame/workspaceModel.d.ts +82 -0
- package/dist/shell/frame/workspaceModel.js +250 -0
- package/dist/shell/frame/workspaceModel.js.map +1 -0
- package/dist/shell/frame/workspaces.css +84 -0
- package/dist/shell/frame/workspaces.d.ts +22 -0
- package/dist/shell/frame/workspaces.js +125 -0
- package/dist/shell/frame/workspaces.js.map +1 -0
- package/dist/shell/frame/zoomStore.d.ts +10 -0
- package/dist/shell/frame/zoomStore.js +65 -0
- package/dist/shell/frame/zoomStore.js.map +1 -0
- package/dist/shell/installController.d.ts +122 -0
- package/dist/shell/installController.js +146 -0
- package/dist/shell/installController.js.map +1 -0
- package/dist/shell/installerMessages.d.ts +30 -0
- package/dist/shell/installerMessages.js +36 -0
- package/dist/shell/installerMessages.js.map +1 -0
- package/dist/shell/linkDrop.js.map +1 -1
- package/dist/shell/messages.d.ts +16 -0
- package/dist/shell/messages.js +27 -0
- package/dist/shell/messages.js.map +1 -0
- package/dist/shell/palette.js.map +1 -1
- package/dist/shell/paneModel.d.ts +22 -0
- package/dist/shell/paneModel.js +24 -1
- package/dist/shell/paneModel.js.map +1 -1
- package/dist/shell/panel/Appearance.d.ts +8 -0
- package/dist/shell/panel/Appearance.js +256 -0
- package/dist/shell/panel/Appearance.js.map +1 -0
- package/dist/shell/panel/BackupPanel.d.ts +5 -0
- package/dist/shell/panel/BackupPanel.js +198 -0
- package/dist/shell/panel/BackupPanel.js.map +1 -0
- package/dist/shell/panel/DeveloperPanel.d.ts +4 -0
- package/dist/shell/panel/DeveloperPanel.js +51 -0
- package/dist/shell/panel/DeveloperPanel.js.map +1 -0
- package/dist/shell/panel/FeatureToggles.d.ts +13 -0
- package/dist/shell/panel/FeatureToggles.js +42 -0
- package/dist/shell/panel/FeatureToggles.js.map +1 -0
- package/dist/shell/panel/Home.d.ts +3 -0
- package/dist/shell/panel/Home.js +23 -0
- package/dist/shell/panel/Home.js.map +1 -0
- package/dist/shell/panel/IconPackInstall.d.ts +15 -0
- package/dist/shell/panel/IconPackInstall.js +41 -0
- package/dist/shell/panel/IconPackInstall.js.map +1 -0
- package/dist/shell/panel/LanguageSettings.d.ts +1 -0
- package/dist/shell/panel/LanguageSettings.js +54 -0
- package/dist/shell/panel/LanguageSettings.js.map +1 -0
- package/dist/shell/panel/MakePanel.d.ts +3 -0
- package/dist/shell/panel/MakePanel.js +237 -0
- package/dist/shell/panel/MakePanel.js.map +1 -0
- package/dist/shell/panel/MarkdownDoc.d.ts +6 -0
- package/dist/shell/panel/MarkdownDoc.js +35 -0
- package/dist/shell/panel/MarkdownDoc.js.map +1 -0
- package/dist/shell/panel/Modes.d.ts +40 -0
- package/dist/shell/panel/Modes.js +270 -0
- package/dist/shell/panel/Modes.js.map +1 -0
- package/dist/shell/panel/NavIcon.d.ts +4 -0
- package/dist/shell/panel/NavIcon.js +6 -0
- package/dist/shell/panel/NavIcon.js.map +1 -0
- package/dist/shell/panel/Panel.d.ts +7 -0
- package/dist/shell/panel/Panel.js +139 -0
- package/dist/shell/panel/Panel.js.map +1 -0
- package/dist/shell/panel/PluginFeatures.d.ts +24 -0
- package/dist/shell/panel/PluginFeatures.js +165 -0
- package/dist/shell/panel/PluginFeatures.js.map +1 -0
- package/dist/shell/panel/Plugins.d.ts +33 -0
- package/dist/shell/panel/Plugins.js +112 -0
- package/dist/shell/panel/Plugins.js.map +1 -0
- package/dist/shell/panel/PowerSettings.d.ts +4 -0
- package/dist/shell/panel/PowerSettings.js +52 -0
- package/dist/shell/panel/PowerSettings.js.map +1 -0
- package/dist/shell/panel/Settings.d.ts +23 -0
- package/dist/shell/panel/Settings.js +116 -0
- package/dist/shell/panel/Settings.js.map +1 -0
- package/dist/shell/panel/ShareSetup.d.ts +8 -0
- package/dist/shell/panel/ShareSetup.js +130 -0
- package/dist/shell/panel/ShareSetup.js.map +1 -0
- package/dist/shell/panel/StoreSection.d.ts +6 -0
- package/dist/shell/panel/StoreSection.js +48 -0
- package/dist/shell/panel/StoreSection.js.map +1 -0
- package/dist/shell/panel/StringPacks.d.ts +11 -0
- package/dist/shell/panel/StringPacks.js +106 -0
- package/dist/shell/panel/StringPacks.js.map +1 -0
- package/dist/shell/panel/ThemeBuilder.d.ts +5 -0
- package/dist/shell/panel/ThemeBuilder.js +205 -0
- package/dist/shell/panel/ThemeBuilder.js.map +1 -0
- package/dist/shell/panel/backup.css +34 -0
- package/dist/shell/panel/builder.css +232 -0
- package/dist/shell/panel/builderModel.d.ts +55 -0
- package/dist/shell/panel/builderModel.js +95 -0
- package/dist/shell/panel/builderModel.js.map +1 -0
- package/dist/shell/panel/compare.d.ts +10 -0
- package/dist/shell/panel/compare.js +51 -0
- package/dist/shell/panel/compare.js.map +1 -0
- package/dist/shell/panel/controls.d.ts +135 -0
- package/dist/shell/panel/controls.js +213 -0
- package/dist/shell/panel/controls.js.map +1 -0
- package/dist/shell/panel/featureModel.d.ts +69 -0
- package/dist/shell/panel/featureModel.js +79 -0
- package/dist/shell/panel/featureModel.js.map +1 -0
- package/dist/shell/panel/fonts/FontBrowser.d.ts +10 -0
- package/dist/shell/panel/fonts/FontBrowser.js +189 -0
- package/dist/shell/panel/fonts/FontBrowser.js.map +1 -0
- package/dist/shell/panel/fonts/FontRoles.d.ts +20 -0
- package/dist/shell/panel/fonts/FontRoles.js +77 -0
- package/dist/shell/panel/fonts/FontRoles.js.map +1 -0
- package/dist/shell/panel/fonts/catalog.d.ts +37 -0
- package/dist/shell/panel/fonts/catalog.js +68 -0
- package/dist/shell/panel/fonts/catalog.js.map +1 -0
- package/dist/shell/panel/fonts/googleFontsCatalog.json +1 -0
- package/dist/shell/panel/index.d.ts +20 -0
- package/dist/shell/panel/index.js +34 -0
- package/dist/shell/panel/index.js.map +1 -0
- package/dist/shell/panel/languageModel.d.ts +5 -0
- package/dist/shell/panel/languageModel.js +7 -0
- package/dist/shell/panel/languageModel.js.map +1 -0
- package/dist/shell/panel/make.css +72 -0
- package/dist/shell/panel/makeModel.d.ts +32 -0
- package/dist/shell/panel/makeModel.js +84 -0
- package/dist/shell/panel/makeModel.js.map +1 -0
- package/dist/shell/panel/markdown.d.ts +46 -0
- package/dist/shell/panel/markdown.js +100 -0
- package/dist/shell/panel/markdown.js.map +1 -0
- package/dist/shell/panel/nav.d.ts +12 -0
- package/dist/shell/panel/nav.js +50 -0
- package/dist/shell/panel/nav.js.map +1 -0
- package/dist/shell/panel/panel.css +401 -0
- package/dist/shell/panel/panelMessages.d.ts +763 -0
- package/dist/shell/panel/panelMessages.js +767 -0
- package/dist/shell/panel/panelMessages.js.map +1 -0
- package/dist/shell/panel/plugins.css +59 -0
- package/dist/shell/panel/setupModel.d.ts +87 -0
- package/dist/shell/panel/setupModel.js +152 -0
- package/dist/shell/panel/setupModel.js.map +1 -0
- package/dist/shell/panel/site.d.ts +259 -0
- package/dist/shell/panel/site.js +25 -0
- package/dist/shell/panel/site.js.map +1 -0
- package/dist/shell/panel/strings.css +7 -0
- package/dist/shell/panel/themes.d.ts +10 -0
- package/dist/shell/panel/themes.js +8 -0
- package/dist/shell/panel/themes.js.map +1 -0
- package/dist/shell/profileModel.d.ts +3 -2
- package/dist/shell/profileModel.js +7 -5
- package/dist/shell/profileModel.js.map +1 -1
- package/dist/shell/store.css +230 -0
- package/dist/shell/storeMessages.d.ts +169 -0
- package/dist/shell/storeMessages.js +172 -0
- package/dist/shell/storeMessages.js.map +1 -0
- package/dist/shell/storeModel.d.ts +181 -0
- package/dist/shell/storeModel.js +133 -0
- package/dist/shell/storeModel.js.map +1 -0
- package/dist/shell/stringPacksModel.d.ts +44 -0
- package/dist/shell/stringPacksModel.js +94 -0
- package/dist/shell/stringPacksModel.js.map +1 -0
- package/dist/shell/updateModel.d.ts +2 -1
- package/dist/shell/updateModel.js +5 -4
- package/dist/shell/updateModel.js.map +1 -1
- package/dist/shell/windowControls.d.ts +4 -0
- package/dist/shell/windowControls.js +5 -0
- package/dist/shell/windowControls.js.map +1 -1
- package/i18n-config.schema.json +29 -0
- package/i18n-meta.schema.json +26 -0
- package/i18n.schema.json +42 -0
- package/icons.schema.json +646 -0
- package/languages.schema.json +23 -0
- package/locales/ar-x-fm.json +11 -0
- package/locales/ar.json +1281 -0
- package/locales/bg.json +1280 -0
- package/locales/bn.json +1280 -0
- package/locales/ca.json +1280 -0
- package/locales/cs.json +1280 -0
- package/locales/da.json +1280 -0
- package/locales/de.json +1280 -0
- package/locales/el.json +1280 -0
- package/locales/en-GB.json +27 -0
- package/locales/en.json +1280 -0
- package/locales/en.meta.json +51 -0
- package/locales/es.json +1280 -0
- package/locales/eu.json +1280 -0
- package/locales/fa.json +1281 -0
- package/locales/fi.json +1280 -0
- package/locales/fil.json +1280 -0
- package/locales/fr.json +1280 -0
- package/locales/ga.json +1280 -0
- package/locales/gl.json +1280 -0
- package/locales/gu.json +1280 -0
- package/locales/ha.json +1280 -0
- package/locales/he.json +1281 -0
- package/locales/hi.json +1280 -0
- package/locales/hr.json +1280 -0
- package/locales/hu.json +1279 -0
- package/locales/id.json +1280 -0
- package/locales/ig.json +1280 -0
- package/locales/it.json +1280 -0
- package/locales/ja.json +1280 -0
- package/locales/kn.json +1280 -0
- package/locales/ko.json +1280 -0
- package/locales/mr.json +1280 -0
- package/locales/ms.json +1280 -0
- package/locales/nb.json +1280 -0
- package/locales/nl.json +1280 -0
- package/locales/pl.json +1280 -0
- package/locales/pt.json +1280 -0
- package/locales/ro.json +1280 -0
- package/locales/ru.json +1280 -0
- package/locales/sk.json +1280 -0
- package/locales/sr.json +1280 -0
- package/locales/sv.json +1280 -0
- package/locales/ta.json +1280 -0
- package/locales/th.json +1280 -0
- package/locales/tr.json +1280 -0
- package/locales/uk.json +1280 -0
- package/locales/ur.json +1281 -0
- package/locales/vi.json +1280 -0
- package/locales/yo.json +1280 -0
- package/locales/zh-Hans.json +1280 -0
- package/locales/zh-Hant.json +1280 -0
- package/package.json +148 -6
- package/store-catalog.schema.json +65 -0
- package/theme.schema.json +4659 -0
- package/windows/installer.nsi +926 -0
- package/windows/languages/Basque.nsh +28 -0
- package/windows/languages/Catalan.nsh +28 -0
- package/windows/languages/Croatian.nsh +28 -0
- package/windows/languages/Czech.nsh +28 -0
- package/windows/languages/Danish.nsh +28 -0
- package/windows/languages/Finnish.nsh +28 -0
- package/windows/languages/Galician.nsh +28 -0
- package/windows/languages/Greek.nsh +28 -0
- package/windows/languages/Hungarian.nsh +28 -0
- package/windows/languages/Indonesian.nsh +28 -0
- package/windows/languages/Irish.nsh +28 -0
- package/windows/languages/Malay.nsh +28 -0
- package/windows/languages/Polish.nsh +28 -0
- package/windows/languages/Romanian.nsh +28 -0
- package/windows/languages/Serbian.nsh +28 -0
- package/windows/languages/Slovak.nsh +28 -0
- package/windows/languages/Thai.nsh +28 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppMenu.js","sourceRoot":"","sources":["../../../../../../shell/src/frame/AppMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["// The app menu: the titlebar's \"Settings and more\" button, at the far end of the titlebar cluster\n// (before the caption buttons on Windows and Linux; macOS has none there). It opens on click, on\n// Alt+F and F10 (Shell.tsx; a focused tab forwards the keys), from the command palette, from the\n// last row of the account menu, and from the app's logo at the start of the titlebar (the same\n// menu, hung under the logo on its side of the window). Its rows are the app's (`ShellSite.menu`, menuModel.ts): built-in\n// ones by name, each shown only when the app serves what it needs, and the app's own.\n//\n// Like every shell menu it is an overlay: while open the shell is raised above the tab webviews\n// (`setOverlay`), panes stay visible and nothing is dimmed. Keyboard: arrows, Home/End, type-ahead,\n// the arrow pointing along the reading direction opens a submenu and the other one closes it,\n// Enter or Space chooses, Esc closes one level. Submenus fly out beside the menu and stay inside\n// the window (in a narrow one they lie over it). Words: menuMessages.en.json (`menuText`).\n\nimport { useEffect, useLayoutEffect, useReducer, useRef, useState, type KeyboardEvent as ReactKeyboardEvent } from 'react';\nimport { createPortal } from 'react-dom';\nimport { parseUpdateStatus, type UpdateStatus } from '../updateModel.ts';\nimport { invoke, listen } from './bridge.ts';\nimport { describe, diag } from './diag.ts';\nimport { decks } from './deckStore.ts';\nimport { refreshDev } from './devHost.ts';\nimport { useDev, usePaneTick, useT } from './hooks.ts';\nimport { formatNumber } from './i18n.ts';\nimport { Icon, type IconName } from './icons.tsx';\nimport {\n DEFAULT_MENU, ZOOM_MAX, ZOOM_MIN, findSpec, joinGroups, languageChoice, languageRows, menuText, moveStop, planMenu, shortcutText, specRows, submenuKeys, submenuLeft, typeahead, updateRow,\n type BuiltinMenuItem, type MenuEnv, type MenuItemRow, type MenuModeStatus, type MenuRow,\n} from './menuModel.ts';\nimport { ReportDialog } from './ReportDialog.tsx';\nimport { safe, setSafeMode } from './safeStore.ts';\nimport { hasFeature, site } from './site.ts';\nimport { isWeb, setOverlay, shell, type TabParams } from './state.ts';\nimport { openWorkspaceSave } from './TitlebarExtras.tsx';\nimport { os, startDrag, systemMenu } from './windowBinding.ts';\nimport { loadWorkspaces, restoreWorkspace, workspaceList, workspaces } from './workspaces.ts';\nimport { readZoom, stepZoom, zoomOf, zoomTarget } from './zoomStore.ts';\nimport './appMenu.css';\n\n/** How the menu is asked to open: under the logo instead of its button, at a submenu, with the first row focused (keyboard), or closing if it is open. */\nexport type AppMenuRequest = { anchor?: 'button' | 'logo'; submenu?: string; keyboard?: boolean; toggle?: boolean };\n\n/** Opens the app menu (Alt+F / F10, the palette, the account menu's last row). */\nexport const openAppMenu = (request: AppMenuRequest = {}) => window.dispatchEvent(new CustomEvent('bt-app-menu', { detail: request }));\n\nconst mac = os === 'macos';\n/** The keys that open the menu, as the button's tooltip and the account menu write them. */\nexport const APP_MENU_KEYS = mac ? 'F10' : 'Alt+F';\n\nconst getError = (error: unknown) => (error instanceof Error ? error.message : String(error)).replace(/^Error: /, '');\nconst percent = (factor: number) => formatNumber(factor, { style: 'percent', maximumFractionDigits: 0 });\n\ntype Focus = { level: number; id?: string; edge?: 'first' | 'last' | 'menu' };\n/** Where the menu hangs: under its button (from the window's end edge) or under the logo (from its start edge). */\ntype Anchor = { at: 'button' | 'logo'; top: number; left?: number; right?: number };\n\n/** Which trigger the open menu hangs from (null: closed), for the triggers' `aria-expanded`. */\nlet openAt: Anchor['at'] | null = null;\nfunction noteOpen(at: Anchor['at'] | null) {\n if (openAt === at) return;\n openAt = at;\n window.dispatchEvent(new CustomEvent('bt-app-menu-state'));\n}\n\n/** The rows of one level a key can stop on: enabled items; the zoom row counts once. */\nfunction stopsOf(menu: HTMLElement): HTMLElement[] {\n const all = Array.from(menu.querySelectorAll<HTMLElement>('[data-item]:not(:disabled)'));\n const active = document.activeElement;\n const zoom = all.filter(el => 'zoom' in el.dataset);\n const keep = zoom.find(el => el === active) ?? zoom.find(el => el.getAttribute('aria-disabled') !== 'true') ?? zoom[0];\n return all.filter(el => !('zoom' in el.dataset) || el === keep);\n}\n\nexport function AppMenu({ trigger = true }: { trigger?: boolean } = {}) {\n const t = useT();\n usePaneTick();\n const dev = useDev();\n const config = site();\n const menu = config.menu ?? {};\n const [open, setOpen] = useState(false);\n const [path, setPath] = useState<string[]>([]);\n const [anchor, setAnchor] = useState<Anchor>({ at: 'button', top: 50, right: 8 });\n const [mode, setMode] = useState<string | null>(null);\n const [modeStatus, setModeStatus] = useState<MenuModeStatus | null>(null);\n const [asking, setAsking] = useState<{ to: string; changes: number; reapply?: boolean } | null>(null);\n const [version, setVersion] = useState('');\n const [update, setUpdate] = useState<UpdateStatus>({ state: 'idle' });\n const [askedUpdate, setAskedUpdate] = useState(false);\n const [reporting, setReporting] = useState(false);\n const [error, setError] = useState('');\n const [, tick] = useReducer((n: number) => n + 1, 0);\n const button = useRef<HTMLButtonElement>(null);\n const layers = useRef<HTMLDivElement>(null);\n const focusNext = useRef<Focus | null>(null);\n const before = useRef<HTMLElement | null>(null);\n const hover = useRef<{ el: Element | null; timer?: ReturnType<typeof setTimeout> }>({ el: null });\n const typed = useRef({ text: '', at: 0 });\n const live = useRef({ open, path });\n live.current = { open, path };\n\n // Whatever a row shows may change while the menu is open (a language or theme picked in it).\n useEffect(() => {\n const events = ['bt-zoom', 'bt-workspaces', 'bt-decks', 'bt-site', 'bt-safe'];\n for (const event of events) window.addEventListener(event, tick);\n const off = [config.themes?.subscribe(tick), menu.languages?.subscribe(tick)];\n return () => {\n for (const event of events) window.removeEventListener(event, tick);\n for (const dispose of off) dispose?.();\n };\n }, []);\n\n /** Where a request without an anchor opens: the button when this app shows one, else the logo. */\n const home = (): Anchor['at'] => (trigger ? 'button' : 'logo');\n\n function show(request: AppMenuRequest = {}) {\n const at = request.anchor ?? home();\n diag(`menu open: anchor=${at} keyboard=${!!request.keyboard} hasFocus=${document.hasFocus()} active=${describe(document.activeElement)}`);\n const logo = at === 'logo' ? document.querySelector('.bt-titlebar-logo') : null;\n const rect = (logo ?? button.current)?.getBoundingClientRect();\n if (rect) {\n const top = Math.round(rect.bottom + 6);\n setAnchor(logo ? { at: 'logo', top, left: Math.max(8, Math.round(rect.left - 3)) } : { at: 'button', top, right: Math.max(8, Math.round(window.innerWidth - rect.right)) });\n }\n const active = document.activeElement as HTMLElement | null;\n before.current = active && active !== document.body && document.hasFocus() ? active : null;\n // Keys pressed in a tab open the menu: the shell takes the keyboard. A click on the shell already\n // gave it the keyboard, so nothing native is asked for then.\n if (!document.hasFocus()) invoke('shell_focus').catch(() => {});\n setAsking(null); setError('');\n setPath(request.submenu ? [request.submenu] : []);\n focusNext.current = request.submenu ? { level: 1, edge: 'first' } : { level: 0, edge: request.keyboard ? 'first' : 'menu' };\n setOpen(true);\n // What the rows show, read fresh.\n void readZoom(zoomTarget());\n if (hasFeature('developer')) void refreshDev();\n if (hasFeature('workspaces') && !workspaces.loaded) void loadWorkspaces().catch(() => {});\n void config.themes?.loadThemes();\n menu.modes?.current().then(setMode, () => {});\n menu.modes?.status?.().then(setModeStatus, () => {});\n if (!version) menu.version?.().then(setVersion, () => {});\n setAskedUpdate(false);\n if (hasFeature('updates')) invoke('update_status').then(value => setUpdate(parseUpdateStatus(value)), () => {});\n }\n\n /** `escape`: back to what had focus before. `action` and `away`: nothing focused, so typing returns to the active pane. */\n function close(how: 'escape' | 'action' | 'away' = 'away', why = '') {\n diag(`menu close: ${how}${why ? ` (${why})` : ''} hasFocus=${document.hasFocus()}`);\n clearTimeout(hover.current.timer);\n hover.current = { el: null };\n focusNext.current = null;\n setOpen(false); setPath([]); setAsking(null); setError('');\n if (how === 'escape' && before.current?.isConnected) before.current.focus();\n before.current = null;\n }\n\n // The updater's steps (checking, downloading, ready) as they happen.\n useEffect(() => {\n if (!hasFeature('updates')) return;\n let disposed = false;\n let unlisten: (() => void) | undefined;\n listen('update-status', event => setUpdate(parseUpdateStatus(event.payload)))\n .then(dispose => { if (disposed) dispose(); else unlisten = dispose; })\n .catch(() => {});\n return () => { disposed = true; unlisten?.(); };\n }, []);\n\n useEffect(() => {\n const onRequest = (event: Event) => {\n const request = (event as CustomEvent<AppMenuRequest | undefined>).detail ?? {};\n // Asked again from the other trigger, the open menu moves there instead of closing.\n if (live.current.open && request.toggle && (request.anchor ?? home()) === (openAt ?? home())) close('escape'); else show(request);\n };\n window.addEventListener('bt-app-menu', onRequest);\n return () => window.removeEventListener('bt-app-menu', onRequest);\n }, [version]);\n\n useEffect(() => {\n if (!open) return;\n // Native tab webviews would cover the menu.\n setOverlay(1);\n noteOpen(anchor.at);\n // The window lost the keyboard: the menu closes, unless the focus is back a moment later (taking the\n // keyboard from a tab for Alt+F / F10 can pass through a blur on its way to the shell).\n let leaving: ReturnType<typeof setTimeout> | undefined;\n const away = () => {\n diag(`menu: window blur hasFocus=${document.hasFocus()}`);\n clearTimeout(leaving);\n leaving = setTimeout(() => { if (!document.hasFocus()) close('away', 'blur'); else diag('menu: blur passed, focus is back'); }, 160);\n };\n const resized = () => close();\n // Keys while nothing in the menu has focus (a click on its padding): Esc closes, arrows enter it.\n const onKey = (event: KeyboardEvent) => {\n if (layers.current?.contains(event.target as Node)) return;\n if (event.key === 'Escape') { event.preventDefault(); close('escape'); return; }\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n focusNext.current = { level: live.current.path.length, edge: event.key === 'ArrowDown' ? 'first' : 'last' };\n tick();\n }\n };\n window.addEventListener('blur', away);\n window.addEventListener('resize', resized);\n window.addEventListener('keydown', onKey);\n return () => { clearTimeout(leaving); setOverlay(-1); noteOpen(null); window.removeEventListener('blur', away); window.removeEventListener('resize', resized); window.removeEventListener('keydown', onKey); };\n }, [open, anchor.at]);\n\n const layer = (level: number) => layers.current?.querySelector<HTMLElement>(`[data-level=\"${level}\"]`) ?? null;\n\n // After every render: submenus sit beside their row, inside the window; then the focus that was asked for.\n useLayoutEffect(() => {\n if (!open) return;\n for (let level = 1; level <= path.length; level += 1) {\n const el = layer(level);\n const parent = layer(level - 1);\n const row = parent?.querySelector<HTMLElement>(`[data-item=\"${CSS.escape(path[level - 1]!)}\"]`);\n if (!el || !parent) continue;\n const edge = 8;\n const box = parent.getBoundingClientRect();\n el.style.maxHeight = `${window.innerHeight - edge * 2}px`;\n const { width, height } = el.getBoundingClientRect();\n const left = submenuLeft(box, width, window.innerWidth, edge);\n // It slides in from the side it hangs on.\n el.style.setProperty('--bt-app-sub-from', left < box.left ? '6px' : '-6px');\n const top = Math.max(edge, Math.min((row?.getBoundingClientRect().top ?? box.top) - 6, window.innerHeight - height - edge));\n el.style.left = `${Math.round(left)}px`;\n el.style.top = `${Math.round(top)}px`;\n }\n const want = focusNext.current;\n const el = want ? layer(want.level) : null;\n if (!want || !el) return;\n focusNext.current = null;\n const stops = stopsOf(el);\n const target = want.id ? el.querySelector<HTMLElement>(`[data-item=\"${CSS.escape(want.id)}\"]:not(:disabled)`)\n : want.edge === 'menu' ? el : want.edge === 'last' ? stops[stops.length - 1] : stops[0];\n (target ?? el).focus();\n });\n\n const openSub = (level: number, id: string, focus = false) => {\n setPath(current => [...current.slice(0, level), id]);\n setAsking(null); setError('');\n if (focus) focusNext.current = { level: level + 1, edge: 'first' };\n };\n /** Closes the submenu at `level`; its row gets the focus back. */\n const closeSub = (level: number) => {\n focusNext.current = { level: level - 1, id: path[level - 1] };\n setPath(current => current.slice(0, level - 1));\n setAsking(null); setError('');\n };\n\n async function activate(row: MenuItemRow, level: number) {\n if (row.disabled) return;\n if (row.submenu) {\n if (path[level] === row.id) { focusNext.current = { level: level + 1, edge: 'first' }; tick(); } else openSub(level, row.id, true);\n return;\n }\n setError('');\n if (!row.keepOpen) close('action');\n try { await row.run?.(); }\n catch (failure) { if (row.keepOpen) setError(getError(failure)); else console.error('[shell] menu', failure); }\n }\n\n // -------------------------------------------------------------------------------------------\n // Rows\n\n const item = (id: string, label: string, icon: IconName | undefined, rest: Partial<MenuItemRow> = {}): MenuItemRow => ({ kind: 'item', id, label, icon, ...rest });\n /** \"Plugins…\": a row that opens a section of the app's panel. */\n const section = (name: string) => menuText('section', { section: name });\n const active = shell.api?.activePanel;\n const activeParams = active?.params as TabParams | undefined;\n const canSplit = !!active && (isWeb(active) || active.group.panels.length > 1);\n const languageName = (code: string | undefined) => menu.languages?.list.find(language => language.code === code)?.name;\n const themeState = config.themes?.current();\n const themeId = config.themes && themeState ? config.themes.adapter.preset(themeState.choice) : '';\n const modeList = menu.modes?.list() ?? [];\n\n /** Settings → Language: the panel's Settings, scrolled to that group once it is there. */\n function openSettingsAt(anchor: string) {\n shell.openPanelSection('settings');\n let tries = 0;\n const find = () => {\n const heading = document.getElementById(`${anchor}-h`);\n if (heading) heading.scrollIntoView({ block: 'start' });\n else if ((tries += 1) < 40) setTimeout(find, 50);\n };\n find();\n }\n\n function builtin(id: BuiltinMenuItem): MenuRow {\n switch (id) {\n case 'new-tab': return item(id, t('wb.shell.tab.new'), 'plus', { shortcut: 'Ctrl+T', run: () => shell.shortcut('new-tab') });\n case 'split-right': return item(id, t('wb.shell.menu.splitRight'), 'split', { shortcut: 'Ctrl+\\\\', disabled: !canSplit, run: () => shell.shortcut('split-right') });\n case 'split-down': return item(id, t('wb.shell.menu.splitDown'), 'splitDown', { shortcut: 'Ctrl+Shift+\\\\', disabled: !canSplit, run: () => shell.shortcut('split-down') });\n case 'new-column': return item(id, menuText('newColumn'), 'columns', {\n run: () => {\n // The deck in front, else the first one; with none yet, the deck tab itself (it starts one).\n const target = activeParams?.kind === 'deck' ? activeParams.deckId : decks.list[0]?.id;\n shell.run(target ? { type: 'deck-add', deckId: target } : { type: 'deck' });\n },\n });\n case 'language': return item(id, t('wb.settings.language.title'), 'globe', { submenu: true, hint: languageName(menu.languages?.state().locale) });\n case 'theme': return item(id, menuText('theme'), 'palette', { submenu: true, hint: themeId ? config.themes!.themeName(themeId) : undefined });\n case 'mode': {\n const label = modeList.find(entry => entry.id === mode)?.label;\n return item(id, t('wb.modes.section'), 'layers', { submenu: true, hint: label && modeStatus?.custom ? t('wb.modes.custom', { mode: label }) : label });\n }\n case 'zoom': return { kind: 'zoom', id: 'zoom' };\n case 'plugins': return item(id, section(t('wb.panel.section.plugins')), 'plug', { run: () => shell.openPanelSection('plugins') });\n case 'store': return item(id, section(t('wb.panel.section.store')), 'bag', { run: () => shell.openPanelSection('store') });\n case 'strings': return item(id, section(menuText('strings')), 'globe', { run: () => shell.openPanelSection('languages') });\n case 'workspaces': return item(id, t('wb.ws.title'), 'layout', { submenu: true, hint: workspaces.store.items.find(entry => entry.id === workspaces.active)?.name });\n case 'find': return item(id, menuText('find'), 'search', { shortcut: 'Ctrl+F', disabled: !(shell.api?.panels ?? []).some(panel => isWeb(panel) && panel.api.isVisible), run: () => shell.shortcut('find') });\n case 'shortcuts': return item(id, menuText('shortcuts'), 'keyboard', { run: () => (menu.shortcuts ? menu.shortcuts() : shell.shortcut('command-palette')) });\n case 'palette': return item(id, menuText('palette'), 'command', { shortcut: 'Ctrl+K', run: () => shell.shortcut('command-palette') });\n case 'developer': return item(id, menuText('developer'), 'code', { submenu: true });\n case 'updates': {\n // A real check: the row asks the updater now and says what came of it (the titlebar chip stays the loud part).\n const row = updateRow(update, askedUpdate, version);\n return item(id, row.label, 'reload', {\n hint: row.hint, title: row.title, keepOpen: row.action === 'check' || row.action === 'wait',\n run: async () => {\n if (row.action === 'open') { shell.openPanelSection('updates'); return; }\n if (row.action === 'restart') { await invoke('apply_update'); return; }\n if (row.action !== 'check') return;\n setAskedUpdate(true);\n setUpdate({ state: 'checking' });\n // One request, no retry: whatever the updater answers is what the row says.\n try { setUpdate(parseUpdateStatus(await invoke('update_check'))); } catch { setUpdate({ state: 'error', message: '' }); }\n },\n });\n }\n // Off: a submenu that says what it does before anything reloads. On: one row that leaves it.\n case 'safe-mode': return safe.active\n ? item(id, menuText('safeLeave'), 'shield', { run: () => setSafeMode(false) })\n : item(id, menuText('safeRestart'), 'shield', { submenu: true });\n case 'report': return item(id, menuText('report'), 'flag', { run: () => setReporting(true) });\n case 'about': return item(id, menuText('about', { product: config.product }), 'info', { run: () => shell.openPanelSection('home') });\n case 'settings': return item(id, section(t('wb.panel.section.settings')), 'settings', { run: () => shell.openPanelSection('settings') });\n }\n }\n\n function submenuRows(id: string): MenuRow[] {\n switch (id) {\n case 'language': {\n const languages = menu.languages;\n if (!languages) return [];\n const rows = languageRows(languages.list, languages.state(), { site: t('wb.settings.language.followSite'), system: t('wb.settings.language.followSystem'), more: menuText('moreLanguages') });\n return rows.map(row => {\n if (row.kind !== 'item') return row;\n const choice = languageChoice(row.id);\n // Switching is live and the menu stays: what was picked can be read (or undone) on the spot.\n return choice ? { ...row, keepOpen: true, run: () => languages.set(choice) } : { ...row, run: () => openSettingsAt('language') };\n });\n }\n case 'theme': {\n const themes = config.themes;\n if (!themes || !themeState) return [];\n const list: MenuRow[] = themes.allThemes(themeState.choice).map(theme => item(`theme:${theme.id}`, theme.name, undefined, {\n check: 'radio', checked: theme.id === themeId, keepOpen: true, swatch: themes.adapter.dots(theme),\n // As Appearance does: a theme starts without the customizations made on another one.\n run: () => themes.setChoice(themes.adapter.choiceForId(themeState.choice, theme.id)),\n }));\n return joinGroups([list, [\n item('theme:builder', section(t('wb.panel.section.builder')), 'edit', { run: () => shell.openPanelSection('builder') }),\n item('theme:more', menuText('moreAppearance'), 'palette', { run: () => shell.openPanelSection('themes') }),\n ]]);\n }\n case 'mode': {\n const modes = menu.modes;\n if (!modes) return [];\n const name = (modeId: string) => modeList.find(entry => entry.id === modeId)?.label ?? modeId;\n const apply = async (to: string, keep: boolean) => { await modes.apply(to, keep); setMode(to); close('action'); };\n const at = path.indexOf('mode') + 1;\n if (asking?.reapply && modeStatus) {\n // What applying the mode again turns on and off, said before it happens.\n return [\n { kind: 'note', id: 'mode:reapply-hint', title: t('wb.modes.reapply', { mode: name(asking.to) }), text: t('wb.modes.reapplyHint', { mode: name(asking.to) }) },\n ...(modeStatus.on.length ? [{ kind: 'note' as const, id: 'mode:reapply-on', title: '', text: t('wb.modes.turnsOn', { list: modeStatus.on.join(', ') }) }] : []),\n ...(modeStatus.off.length ? [{ kind: 'note' as const, id: 'mode:reapply-off', title: '', text: t('wb.modes.turnsOff', { list: modeStatus.off.join(', ') }) }] : []),\n item('mode:reapply-yes', t('wb.modes.reapply', { mode: name(asking.to) }), 'reload', { keepOpen: true, run: async () => { await modes.reapply?.(); close('action'); } }),\n item('mode:cancel', t('wb.common.cancel'), 'close', { keepOpen: true, run: () => { focusNext.current = { level: at, id: 'mode:reapply' }; setAsking(null); } }),\n ];\n }\n if (asking) {\n // The question Settings asks: what was changed by hand stays, or the mode is taken as it is.\n return [\n { kind: 'note', id: 'mode:question', title: t('wb.modes.keepQuestion'), text: t('wb.modes.keepHint', { count: asking.changes }) },\n item('mode:keep', t('wb.modes.keep'), 'check', { keepOpen: true, run: () => apply(asking.to, true) }),\n item('mode:reset', t('wb.modes.reset', { mode: name(asking.to) }), 'reload', { keepOpen: true, run: () => apply(asking.to, false) }),\n item('mode:cancel', t('wb.common.cancel'), 'close', { keepOpen: true, run: () => { focusNext.current = { level: at, id: `mode:${asking.to}` }; setAsking(null); } }),\n ];\n }\n const list = modeList.map(entry => item(`mode:${entry.id}`, entry.label, undefined, {\n check: 'radio', checked: entry.id === mode, keepOpen: true,\n run: async () => {\n if (entry.id === mode) { close('action'); return; }\n const changes = await modes.changes(entry.id);\n if (changes > 0) { focusNext.current = { level: at, edge: 'first' }; setAsking({ to: entry.id, changes }); } else await apply(entry.id, false);\n },\n }));\n if (!mode || !modeStatus?.custom || !modes.reapply) return list;\n // The mode is a starting point: the features moved on, and nothing applies it again unasked.\n const grew: MenuRow[] = modeStatus.added > 0 ? [{ kind: 'note', id: 'mode:grew', title: '', text: t('wb.modes.grew', { mode: name(mode), count: modeStatus.added }) }] : [];\n return joinGroups([list, [\n { kind: 'note', id: 'mode:custom', title: t('wb.modes.custom', { mode: name(mode) }) },\n ...grew,\n item('mode:reapply', t('wb.modes.reapply', { mode: name(mode) }), 'reload', {\n keepOpen: true,\n run: () => {\n focusNext.current = { level: at, edge: 'first' };\n setAsking({ to: mode, changes: 0, reapply: true });\n if (modeStatus.added > 0) void modes.seen?.().then(() => setModeStatus({ ...modeStatus, added: 0 }), () => {});\n },\n }),\n ]]);\n }\n case 'workspaces': {\n const list = workspaceList();\n const rows: MenuRow[] = list.length\n ? list.map(entry => item(`ws:${entry.id}`, entry.name, undefined, { check: 'radio', checked: entry.id === workspaces.active, hint: t('wb.ws.tabs', { count: entry.tabs }), run: () => restoreWorkspace(entry.id) }))\n : [{ kind: 'note', id: 'ws:none', title: '', text: menuText('noWorkspaces') }];\n return joinGroups([rows, [item('ws:save', menuText('saveLayout'), 'plus', { run: openWorkspaceSave })]]);\n }\n case 'safe-mode': return [\n { kind: 'note', id: 'safe:question', title: menuText('safeQuestion'), text: menuText('safeExplain') },\n item('safe:confirm', menuText('safeConfirm'), 'shield', { run: () => setSafeMode(true) }),\n item('safe:cancel', t('wb.common.cancel'), 'close', { keepOpen: true, run: () => closeSub(path.indexOf('safe-mode') + 1) }),\n ];\n case 'developer': return [\n item('dev:mode', t('wb.dev.mode'), undefined, { check: 'checkbox', checked: dev.enabled, keepOpen: true, run: async () => { await invoke('dev_set', { enabled: !dev.enabled }); await refreshDev(); } }),\n item('dev:folder', menuText('pluginsFolder'), 'folder', { run: () => invoke('plugins_open_folder') }),\n ];\n default: return specRows(findSpec(groups, id)?.submenu?.() ?? []);\n }\n }\n\n const groups = menu.groups ?? DEFAULT_MENU;\n const env: MenuEnv = {\n decks: !!config.deck, languages: !!menu.languages, themes: !!config.themes, modes: modeList.length > 0,\n zoom: hasFeature('zoom'), find: hasFeature('find'), safeMode: hasFeature('safeMode'), store: hasFeature('store'), strings: config.features?.strings === true, workspaces: hasFeature('workspaces'), developer: hasFeature('developer'), updates: hasFeature('updates'),\n };\n const rootRows = () => joinGroups(planMenu(groups, env).map(group => group.flatMap(entry => (typeof entry === 'string' ? [builtin(entry)] : specRows([entry])))));\n const labelOf = (id: string, rows: MenuRow[]) => rows.find((row): row is MenuItemRow => row.kind === 'item' && row.id === id)?.label ?? '';\n\n // -------------------------------------------------------------------------------------------\n // Keyboard and pointer\n\n function onKey(event: ReactKeyboardEvent<HTMLDivElement>) {\n const target = event.target as HTMLElement;\n const menuEl = target.closest<HTMLElement>('[data-level]');\n if (!menuEl) return;\n const level = Number(menuEl.dataset.level);\n const { key } = event;\n // The keyboard leads now: the row under a resting pointer takes the focus back only when the pointer moves on.\n clearTimeout(hover.current.timer);\n hover.current = { el: null };\n const keys = submenuKeys(getComputedStyle(menuEl).direction === 'rtl');\n const done = () => { event.preventDefault(); event.stopPropagation(); };\n if (key === 'Escape') { done(); if (level > 0) closeSub(level); else close('escape'); return; }\n if (key === 'Tab') { done(); close('escape'); return; }\n // The zoom row is one stop: left and right move through − + and reset (laid out left to right).\n if ('zoom' in target.dataset && (key === 'ArrowLeft' || key === 'ArrowRight')) {\n done();\n const controls = Array.from(menuEl.querySelectorAll<HTMLElement>('[data-zoom]'));\n controls[Math.max(0, Math.min(controls.length - 1, controls.indexOf(target) + (key === 'ArrowRight' ? 1 : -1)))]?.focus();\n return;\n }\n if (key === 'ArrowDown' || key === 'ArrowUp' || key === 'Home' || key === 'End') {\n done();\n const stops = stopsOf(menuEl);\n stops[moveStop(stops.indexOf(target), key, stops.length)]?.focus();\n return;\n }\n if (key === keys.open) {\n if (target.getAttribute('aria-haspopup') === 'menu' && target.dataset.item) { done(); openSub(level, target.dataset.item, true); }\n return;\n }\n if (key === keys.close) { if (level > 0) { done(); closeSub(level); } return; }\n const now = Date.now();\n const typing = !!typed.current.text && now - typed.current.at <= 700;\n // Enter, and Space outside a typed word: the row's own click chooses it; on the menu itself nothing is chosen.\n if (key === 'Enter' || (key === ' ' && !typing)) {\n if (target === menuEl) done();\n typed.current.text = '';\n return;\n }\n if (key.length !== 1 || event.ctrlKey || event.metaKey || event.altKey) return;\n // Type-ahead: the next row whose label starts with what was typed.\n done();\n typed.current = { text: typing ? typed.current.text + key : key, at: now };\n const stops = stopsOf(menuEl);\n const found = typeahead(stops.map(el => el.dataset.label ?? ''), stops.indexOf(target), typed.current.text);\n if (found >= 0) stops[found]!.focus();\n }\n\n /** The pointer moves the focus, like the arrows do: one highlight. A row with a submenu opens it after a beat. */\n function onHover(row: MenuItemRow | null, level: number, el: HTMLElement) {\n if (hover.current.el === el) return;\n clearTimeout(hover.current.timer);\n hover.current = { el };\n if (document.activeElement !== el) el.focus({ preventScroll: true });\n if (row?.submenu) {\n if (path[level] !== row.id) hover.current.timer = setTimeout(() => openSub(level, row.id), 170);\n } else if (path.length > level) {\n hover.current.timer = setTimeout(() => { setPath(current => current.slice(0, level)); setAsking(null); }, 280);\n }\n }\n\n // -------------------------------------------------------------------------------------------\n\n function renderRow(row: MenuRow, level: number, index: number) {\n if (row.kind === 'separator') return <hr key={`sep${index}`} role=\"separator\"/>;\n if (row.kind === 'note') {\n return <div key={row.id} className={`bt-app-note${row.tone === 'error' ? ' is-error' : ''}`} role={row.tone === 'error' ? 'alert' : 'presentation'}>\n {row.title && <strong>{row.title}</strong>}{row.text && <span>{row.text}</span>}\n </div>;\n }\n if (row.kind === 'zoom') {\n const tab = zoomTarget();\n const factor = zoomOf(tab);\n const control = (id: string, label: string, icon: IconName, direction: 1 | -1 | 0, off: boolean, className = '') =>\n <button type=\"button\" role=\"menuitem\" tabIndex={-1} className={className} data-item={`zoom:${id}`} data-zoom=\"\" data-label={menuText('zoom')}\n aria-label={label} title={tab ? label : menuText('zoomNone')} aria-disabled={off}\n onPointerMove={event => onHover(null, level, event.currentTarget)} onClick={() => { if (!off) void stepZoom(direction, tab); }}>\n <Icon name={icon}/>\n </button>;\n return <div key=\"zoom\" className={`bt-app-zoom${tab ? '' : ' is-off'}`} role=\"group\" aria-label={menuText('zoom')} title={tab ? undefined : menuText('zoomNone')}>\n <Icon name=\"zoom\"/>\n <span className=\"bt-menu-label\">{menuText('zoom')}</span>\n <span className=\"bt-app-zoom-step\">\n {control('out', menuText('zoomOut'), 'minus', -1, !tab || factor <= ZOOM_MIN)}\n <output className=\"bt-app-zoom-value\" aria-live=\"polite\">{percent(factor)}</output>\n {control('in', menuText('zoomIn'), 'plus', 1, !tab || factor >= ZOOM_MAX)}\n </span>\n {control('reset', menuText('zoomReset'), 'reload', 0, !tab || factor === 1, 'bt-app-zoom-reset')}\n </div>;\n }\n const expanded = row.submenu ? path[level] === row.id : undefined;\n return <button key={row.id} type=\"button\" tabIndex={-1} disabled={row.disabled} data-item={row.id} data-label={row.label} title={row.title}\n role={row.check === 'radio' ? 'menuitemradio' : row.check ? 'menuitemcheckbox' : 'menuitem'} aria-checked={row.check ? !!row.checked : undefined}\n aria-haspopup={row.submenu ? 'menu' : undefined} aria-expanded={expanded}\n onPointerMove={event => onHover(row, level, event.currentTarget)} onClick={() => void activate(row, level)}>\n {row.check ? <span className=\"bt-app-check\">{row.checked && <Icon name=\"check\"/>}</span> : row.icon ? <Icon name={row.icon}/> : <span className=\"bt-app-check\"/>}\n {/* A language's own name keeps its own direction (<bdi>) but starts where every other label does. */}\n <span className=\"bt-menu-label\">{row.lang ? <bdi lang={row.lang} dir={row.dir}>{row.label}</bdi> : row.label}</span>\n {row.swatch && <span className=\"wb-dots\" aria-hidden=\"true\" style={{ background: row.swatch.page }}>\n <i style={{ background: row.swatch.bg, boxShadow: `inset 0 0 0 1px ${row.swatch.border}` }}/><i style={{ background: row.swatch.text }}/><i style={{ background: row.swatch.accent }}/>\n </span>}\n {row.hint && <span className=\"bt-app-hint\">{row.hint}</span>}\n {row.shortcut && <span className=\"bt-menu-keys\">{shortcutText(row.shortcut, mac)}</span>}\n {row.submenu && <Icon name=\"chevronRight\" className=\"bt-app-chevron\"/>}\n </button>;\n }\n\n function renderMenus() {\n const root = rootRows();\n const levels: Array<{ rows: MenuRow[]; label: string }> = [{ rows: root, label: menuText('label') }];\n path.forEach((id, index) => levels.push({ rows: submenuRows(id), label: labelOf(id, levels[index]!.rows) }));\n // An error belongs to the level it happened on: the deepest one open.\n if (error) levels[levels.length - 1]!.rows = [...levels[levels.length - 1]!.rows, { kind: 'note', id: 'error', title: '', text: error, tone: 'error' }];\n return levels.map(({ rows, label }, level) => <div key={level === 0 ? 'root' : `${level}:${path[level - 1]}`} role=\"menu\" aria-label={label} tabIndex={-1} data-level={level}\n className={level === 0 ? `bt-menu bt-app-menu bt-pop${anchor.at === 'logo' ? '' : ' bt-pop--right'}` : 'bt-menu bt-app-menu bt-app-sub'}\n style={level === 0 ? { top: anchor.top, left: anchor.left, right: anchor.right, maxHeight: `calc(100vh - ${anchor.top + 8}px)` } : undefined}>\n {rows.map((row, index) => renderRow(row, level, index))}\n </div>);\n }\n\n const label = menuText('label');\n return <>\n {trigger && <button ref={button} type=\"button\" className=\"bt-app-button\" aria-haspopup=\"menu\" aria-expanded={open && anchor.at === 'button'} aria-label={label} title={`${label} (${APP_MENU_KEYS})`}\n onClick={event => (open && anchor.at === 'button' ? close('escape') : show({ keyboard: event.detail === 0 }))}>\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"5.75\" r=\"1.6\"/><circle cx=\"12\" cy=\"12\" r=\"1.6\"/><circle cx=\"12\" cy=\"18.25\" r=\"1.6\"/></svg>\n </button>}\n {open && createPortal(<div className=\"bt-menu-backdrop\" onMouseDown={() => close()} onContextMenu={event => { event.preventDefault(); close(); }}>\n <div ref={layers} className=\"bt-app-layers\" onMouseDown={event => event.stopPropagation()} onContextMenu={event => { event.preventDefault(); event.stopPropagation(); }} onKeyDown={onKey}>\n {renderMenus()}\n </div>\n </div>, document.body)}\n {reporting && <ReportDialog onClose={() => setReporting(false)}/>}\n </>;\n}\n\n/**\n * The app's logo at the start of the titlebar: a second trigger of the same menu, hung under the\n * logo. A click opens it; a press that turns into a drag moves the window, as the titlebar around\n * it does; a right-click shows the window's system menu, where a titlebar icon has always had it.\n */\nexport function AppMenuLogo() {\n useT();\n const [expanded, setExpanded] = useState(openAt === 'logo');\n const press = useRef<{ x: number; y: number; dragged: boolean } | null>(null);\n useEffect(() => {\n const update = () => setExpanded(openAt === 'logo');\n window.addEventListener('bt-app-menu-state', update);\n return () => window.removeEventListener('bt-app-menu-state', update);\n }, []);\n const { product, logo } = site();\n const label = menuText('label');\n return <button type=\"button\" className=\"bt-titlebar-logo\" aria-haspopup=\"menu\" aria-expanded={expanded} aria-label={`${product}: ${label}`} title={`${product} · ${label}`}\n onPointerDown={event => { if (event.button === 0) press.current = { x: event.clientX, y: event.clientY, dragged: false }; }}\n onPointerMove={event => {\n const start = press.current;\n if (!start || start.dragged || !(event.buttons & 1)) return;\n // The press became a drag: the window moves, and no menu opens when the button is released.\n if (Math.hypot(event.clientX - start.x, event.clientY - start.y) > 5) { start.dragged = true; startDrag(); }\n }}\n onClick={event => {\n const dragged = press.current?.dragged;\n press.current = null;\n if (!dragged) openAppMenu({ anchor: 'logo', toggle: true, keyboard: event.detail === 0 });\n }}\n onContextMenu={event => {\n event.preventDefault(); event.stopPropagation();\n const scale = window.devicePixelRatio || 1;\n systemMenu(Math.round(event.screenX * scale), Math.round(event.screenY * scale));\n }}>\n <img src={logo} alt=\"\" draggable={false}/>\n </button>;\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type PaletteAction, type PaletteContext } from './paletteModel.ts';
|
|
2
|
+
/** Ctrl+K palette. The shell rises above the tab webviews (or hides them) while it is open. */
|
|
3
|
+
export declare function CommandPalette({ context, onRun, onClose }: {
|
|
4
|
+
context: PaletteContext;
|
|
5
|
+
onRun: (action: PaletteAction) => void;
|
|
6
|
+
onClose: () => void;
|
|
7
|
+
}): import("react").ReactPortal;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
4
|
+
import { useT } from "./hooks.js";
|
|
5
|
+
import { t } from "./i18n.js";
|
|
6
|
+
import { Avatar, Icon } from "./icons.js";
|
|
7
|
+
import { buildItems, moveSelection } from "./paletteModel.js";
|
|
8
|
+
import { hasFeature, site } from "./site.js";
|
|
9
|
+
import { setOverlay } from "./state.js";
|
|
10
|
+
/** Leading visual for a palette row: the tab's favicon, the account avatar or the item's glyph. */
|
|
11
|
+
function leading(item, context) {
|
|
12
|
+
const [kind, ...rest] = item.id.split(':');
|
|
13
|
+
const key = rest.join(':');
|
|
14
|
+
if (kind === 'tab') {
|
|
15
|
+
const favicon = context.tabs.find(tab => `tab:${tab.id}` === item.id)?.favicon;
|
|
16
|
+
return favicon ? _jsx("img", { src: favicon, alt: "", width: 16, height: 16 }) : _jsx(Icon, { name: "globe" });
|
|
17
|
+
}
|
|
18
|
+
if (kind === 'profile') {
|
|
19
|
+
const profile = context.profiles.find(p => p.id === key);
|
|
20
|
+
return _jsx(Avatar, { name: profile?.name ?? '?', color: profile?.color ?? '#8a90a6', size: 20 });
|
|
21
|
+
}
|
|
22
|
+
if (item.icon)
|
|
23
|
+
return _jsx(Icon, { name: item.icon });
|
|
24
|
+
if (kind === 'deck' || kind === 'deck-new')
|
|
25
|
+
return _jsx(Icon, { name: "grid" });
|
|
26
|
+
if (kind === 'deck-add')
|
|
27
|
+
return _jsx(Icon, { name: "plus" });
|
|
28
|
+
if (kind === 'deck-focus')
|
|
29
|
+
return _jsx(Icon, { name: "list" });
|
|
30
|
+
if (kind === 'ws')
|
|
31
|
+
return _jsx(Icon, { name: "grid" });
|
|
32
|
+
if (kind === 'ws-save')
|
|
33
|
+
return _jsx(Icon, { name: "plus" });
|
|
34
|
+
return _jsx(Icon, { name: "search" });
|
|
35
|
+
}
|
|
36
|
+
const shortHint = (hint) => hint.replace(/^https?:\/\/(www\.)?/, '');
|
|
37
|
+
/** The frame's group names are translated; the site names its own groups; plugin groups are the plugins' names. */
|
|
38
|
+
const GROUPS = {
|
|
39
|
+
Tabs: 'wb.palette.group.tabs', Deck: 'wb.palette.group.deck', Workspaces: 'wb.palette.group.workspaces', Profiles: 'wb.palette.group.profiles',
|
|
40
|
+
};
|
|
41
|
+
const groupLabel = (group) => (GROUPS[group] ? t(GROUPS[group]) : site().palette.groupLabel?.(group) ?? group);
|
|
42
|
+
/** Ctrl+K palette. The shell rises above the tab webviews (or hides them) while it is open. */
|
|
43
|
+
export function CommandPalette({ context, onRun, onClose }) {
|
|
44
|
+
const [query, setQuery] = useState('');
|
|
45
|
+
const [selected, setSelected] = useState(0);
|
|
46
|
+
const input = useRef(null);
|
|
47
|
+
const list = useRef(null);
|
|
48
|
+
const items = useMemo(() => {
|
|
49
|
+
const { palette, product, deck, media } = site();
|
|
50
|
+
return buildItems(context, query, { site: palette, product, decks: !!deck, media: !!media, workspaces: hasFeature('workspaces') });
|
|
51
|
+
}, [context, query]);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
setOverlay(1);
|
|
54
|
+
input.current?.focus();
|
|
55
|
+
const close = () => onClose();
|
|
56
|
+
window.addEventListener('blur', close);
|
|
57
|
+
return () => { setOverlay(-1); window.removeEventListener('blur', close); };
|
|
58
|
+
}, []);
|
|
59
|
+
useEffect(() => setSelected(0), [query]);
|
|
60
|
+
useEffect(() => { list.current?.querySelector('[aria-selected="true"]')?.scrollIntoView({ block: 'nearest' }); }, [selected]);
|
|
61
|
+
const run = (index) => {
|
|
62
|
+
const item = items[index];
|
|
63
|
+
if (!item)
|
|
64
|
+
return;
|
|
65
|
+
if (item.action.type === 'complete') {
|
|
66
|
+
setQuery(item.action.text);
|
|
67
|
+
input.current?.focus();
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
onClose();
|
|
71
|
+
onRun(item.action);
|
|
72
|
+
};
|
|
73
|
+
const onKeyDown = (event) => {
|
|
74
|
+
if (event.nativeEvent.isComposing)
|
|
75
|
+
return;
|
|
76
|
+
// Ctrl+K again closes, like the shortcut that opened it.
|
|
77
|
+
if ((event.ctrlKey || event.metaKey) && !event.altKey && !event.shiftKey && event.key.toLowerCase() === 'k') {
|
|
78
|
+
event.preventDefault();
|
|
79
|
+
event.stopPropagation();
|
|
80
|
+
onClose();
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (event.key === 'ArrowDown' || (event.key === 'Tab' && !event.shiftKey)) {
|
|
84
|
+
event.preventDefault();
|
|
85
|
+
setSelected(i => moveSelection(i, 1, items.length));
|
|
86
|
+
}
|
|
87
|
+
else if (event.key === 'ArrowUp' || (event.key === 'Tab' && event.shiftKey)) {
|
|
88
|
+
event.preventDefault();
|
|
89
|
+
setSelected(i => moveSelection(i, -1, items.length));
|
|
90
|
+
}
|
|
91
|
+
else if (event.key === 'Home' && event.ctrlKey) {
|
|
92
|
+
event.preventDefault();
|
|
93
|
+
setSelected(0);
|
|
94
|
+
}
|
|
95
|
+
else if (event.key === 'End' && event.ctrlKey) {
|
|
96
|
+
event.preventDefault();
|
|
97
|
+
setSelected(Math.max(0, items.length - 1));
|
|
98
|
+
}
|
|
99
|
+
else if (event.key === 'Enter') {
|
|
100
|
+
event.preventDefault();
|
|
101
|
+
run(selected);
|
|
102
|
+
}
|
|
103
|
+
else if (event.key === 'Escape') {
|
|
104
|
+
event.preventDefault();
|
|
105
|
+
onClose();
|
|
106
|
+
}
|
|
107
|
+
event.stopPropagation();
|
|
108
|
+
};
|
|
109
|
+
const tr = useT();
|
|
110
|
+
let lastGroup = '';
|
|
111
|
+
return createPortal(_jsx("div", { className: "bt-palette-backdrop", onMouseDown: onClose, children: _jsxs("div", { className: "bt-palette bt-pop", role: "dialog", "aria-label": tr('wb.palette.title'), onMouseDown: event => event.stopPropagation(), onKeyDown: onKeyDown, children: [_jsxs("div", { className: "bt-palette-field", children: [_jsx(Icon, { name: "search" }), _jsx("input", { ref: input, className: "bt-palette-input", placeholder: site().palette.placeholder(), value: query, onChange: event => setQuery(event.target.value), role: "combobox", "aria-expanded": "true", "aria-controls": "bt-palette-list", "aria-activedescendant": items[selected] ? `bt-pal-${selected}` : undefined, spellCheck: false }), _jsx("kbd", { className: "bt-kbd", children: "Esc" })] }), _jsxs("div", { className: "bt-palette-list", id: "bt-palette-list", role: "listbox", ref: list, children: [items.length === 0 && _jsx("div", { className: "bt-palette-empty", children: tr('wb.palette.none') }), items.map((item, index) => {
|
|
112
|
+
const heading = item.group !== lastGroup ? item.group : null;
|
|
113
|
+
lastGroup = item.group;
|
|
114
|
+
return _jsxs("div", { children: [heading && _jsx("div", { className: "bt-palette-group", children: groupLabel(heading) }), _jsxs("div", { id: `bt-pal-${index}`, role: "option", "aria-selected": index === selected, className: "bt-palette-item", onMouseMove: () => { if (selected !== index)
|
|
115
|
+
setSelected(index); }, onClick: () => run(index), children: [_jsx("span", { className: "bt-palette-icon", children: leading(item, context) }), _jsx("span", { className: "bt-palette-label", children: item.label }), item.hint && _jsx("span", { className: `bt-palette-hint ${item.hint === tr('wb.palette.active') ? 'bt-palette-hint--tag' : ''}`, children: shortHint(item.hint) }), _jsx("span", { className: "bt-palette-enter", "aria-hidden": "true", children: "\u21B5" })] })] }, item.id);
|
|
116
|
+
})] }), _jsxs("div", { className: "bt-palette-foot", children: [_jsxs("span", { children: [_jsx("kbd", { className: "bt-kbd", children: "\u2191" }), _jsx("kbd", { className: "bt-kbd", children: "\u2193" }), " ", tr('wb.palette.navigate')] }), _jsxs("span", { children: [_jsx("kbd", { className: "bt-kbd", children: "\u21B5" }), " ", tr('wb.common.open')] }), _jsxs("span", { children: [_jsx("kbd", { className: "bt-kbd", children: tr('wb.web.tabKey') }), " ", tr('wb.palette.next')] }), _jsxs("span", { className: "bt-palette-foot-end", children: [_jsx("kbd", { className: "bt-kbd", children: "Ctrl" }), _jsx("kbd", { className: "bt-kbd", children: "K" }), " ", tr('wb.common.close')] })] })] }) }), document.body);
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=CommandPalette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandPalette.js","sourceRoot":"","sources":["../../../../../../shell/src/frame/CommandPalette.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useRef, useState, type KeyboardEvent as ReactKeyboardEvent, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useT } from './hooks.ts';\nimport { t } from './i18n.ts';\nimport { Avatar, Icon } from './icons.tsx';\nimport { buildItems, moveSelection, type PaletteAction, type PaletteContext, type PaletteItem } from './paletteModel.ts';\nimport { hasFeature, site } from './site.ts';\nimport { setOverlay } from './state.ts';\n\n/** Leading visual for a palette row: the tab's favicon, the account avatar or the item's glyph. */\nfunction leading(item: PaletteItem, context: PaletteContext): ReactNode {\n const [kind, ...rest] = item.id.split(':');\n const key = rest.join(':');\n if (kind === 'tab') {\n const favicon = context.tabs.find(tab => `tab:${tab.id}` === item.id)?.favicon;\n return favicon ? <img src={favicon} alt=\"\" width={16} height={16}/> : <Icon name=\"globe\"/>;\n }\n if (kind === 'profile') {\n const profile = context.profiles.find(p => p.id === key);\n return <Avatar name={profile?.name ?? '?'} color={profile?.color ?? '#8a90a6'} size={20}/>;\n }\n if (item.icon) return <Icon name={item.icon}/>;\n if (kind === 'deck' || kind === 'deck-new') return <Icon name=\"grid\"/>;\n if (kind === 'deck-add') return <Icon name=\"plus\"/>;\n if (kind === 'deck-focus') return <Icon name=\"list\"/>;\n if (kind === 'ws') return <Icon name=\"grid\"/>;\n if (kind === 'ws-save') return <Icon name=\"plus\"/>;\n return <Icon name=\"search\"/>;\n}\n\nconst shortHint = (hint: string) => hint.replace(/^https?:\\/\\/(www\\.)?/, '');\n\n/** The frame's group names are translated; the site names its own groups; plugin groups are the plugins' names. */\nconst GROUPS: Record<string, string> = {\n Tabs: 'wb.palette.group.tabs', Deck: 'wb.palette.group.deck', Workspaces: 'wb.palette.group.workspaces', Profiles: 'wb.palette.group.profiles',\n};\nconst groupLabel = (group: string) => (GROUPS[group] ? t(GROUPS[group]!) : site().palette.groupLabel?.(group) ?? group);\n\n/** Ctrl+K palette. The shell rises above the tab webviews (or hides them) while it is open. */\nexport function CommandPalette({ context, onRun, onClose }: { context: PaletteContext; onRun: (action: PaletteAction) => void; onClose: () => void }) {\n const [query, setQuery] = useState('');\n const [selected, setSelected] = useState(0);\n const input = useRef<HTMLInputElement>(null);\n const list = useRef<HTMLDivElement>(null);\n const items = useMemo(() => {\n const { palette, product, deck, media } = site();\n return buildItems(context, query, { site: palette, product, decks: !!deck, media: !!media, workspaces: hasFeature('workspaces') });\n }, [context, query]);\n\n useEffect(() => {\n setOverlay(1);\n input.current?.focus();\n const close = () => onClose();\n window.addEventListener('blur', close);\n return () => { setOverlay(-1); window.removeEventListener('blur', close); };\n }, []);\n useEffect(() => setSelected(0), [query]);\n useEffect(() => { list.current?.querySelector('[aria-selected=\"true\"]')?.scrollIntoView({ block: 'nearest' }); }, [selected]);\n\n const run = (index: number) => {\n const item = items[index];\n if (!item) return;\n if (item.action.type === 'complete') { setQuery(item.action.text); input.current?.focus(); return; }\n onClose();\n onRun(item.action);\n };\n const onKeyDown = (event: ReactKeyboardEvent) => {\n if (event.nativeEvent.isComposing) return;\n // Ctrl+K again closes, like the shortcut that opened it.\n if ((event.ctrlKey || event.metaKey) && !event.altKey && !event.shiftKey && event.key.toLowerCase() === 'k') { event.preventDefault(); event.stopPropagation(); onClose(); return; }\n if (event.key === 'ArrowDown' || (event.key === 'Tab' && !event.shiftKey)) { event.preventDefault(); setSelected(i => moveSelection(i, 1, items.length)); }\n else if (event.key === 'ArrowUp' || (event.key === 'Tab' && event.shiftKey)) { event.preventDefault(); setSelected(i => moveSelection(i, -1, items.length)); }\n else if (event.key === 'Home' && event.ctrlKey) { event.preventDefault(); setSelected(0); }\n else if (event.key === 'End' && event.ctrlKey) { event.preventDefault(); setSelected(Math.max(0, items.length - 1)); }\n else if (event.key === 'Enter') { event.preventDefault(); run(selected); }\n else if (event.key === 'Escape') { event.preventDefault(); onClose(); }\n event.stopPropagation();\n };\n\n const tr = useT();\n let lastGroup = '';\n return createPortal(<div className=\"bt-palette-backdrop\" onMouseDown={onClose}>\n <div className=\"bt-palette bt-pop\" role=\"dialog\" aria-label={tr('wb.palette.title')} onMouseDown={event => event.stopPropagation()} onKeyDown={onKeyDown}>\n <div className=\"bt-palette-field\">\n <Icon name=\"search\"/>\n <input ref={input} className=\"bt-palette-input\" placeholder={site().palette.placeholder()} value={query}\n onChange={event => setQuery(event.target.value)} role=\"combobox\" aria-expanded=\"true\" aria-controls=\"bt-palette-list\"\n aria-activedescendant={items[selected] ? `bt-pal-${selected}` : undefined} spellCheck={false}/>\n <kbd className=\"bt-kbd\">Esc</kbd>\n </div>\n <div className=\"bt-palette-list\" id=\"bt-palette-list\" role=\"listbox\" ref={list}>\n {items.length === 0 && <div className=\"bt-palette-empty\">{tr('wb.palette.none')}</div>}\n {items.map((item, index) => {\n const heading = item.group !== lastGroup ? item.group : null;\n lastGroup = item.group;\n return <div key={item.id}>\n {heading && <div className=\"bt-palette-group\">{groupLabel(heading)}</div>}\n <div id={`bt-pal-${index}`} role=\"option\" aria-selected={index === selected} className=\"bt-palette-item\"\n onMouseMove={() => { if (selected !== index) setSelected(index); }} onClick={() => run(index)}>\n <span className=\"bt-palette-icon\">{leading(item, context)}</span>\n <span className=\"bt-palette-label\">{item.label}</span>\n {item.hint && <span className={`bt-palette-hint ${item.hint === tr('wb.palette.active') ? 'bt-palette-hint--tag' : ''}`}>{shortHint(item.hint)}</span>}\n <span className=\"bt-palette-enter\" aria-hidden=\"true\">↵</span>\n </div>\n </div>;\n })}\n </div>\n <div className=\"bt-palette-foot\">\n <span><kbd className=\"bt-kbd\">↑</kbd><kbd className=\"bt-kbd\">↓</kbd> {tr('wb.palette.navigate')}</span>\n <span><kbd className=\"bt-kbd\">↵</kbd> {tr('wb.common.open')}</span>\n <span><kbd className=\"bt-kbd\">{tr('wb.web.tabKey')}</kbd> {tr('wb.palette.next')}</span>\n <span className=\"bt-palette-foot-end\"><kbd className=\"bt-kbd\">Ctrl</kbd><kbd className=\"bt-kbd\">K</kbd> {tr('wb.common.close')}</span>\n </div>\n </div>\n </div>, document.body);\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { IDockviewPanelProps } from 'dockview';
|
|
2
|
+
import { type DeckParams } from './state.ts';
|
|
3
|
+
import './deck.css';
|
|
4
|
+
export type DeckCommand = 'column-prev' | 'column-next' | 'column-page-prev' | 'column-page-next' | 'column-mark-read' | 'column-jump-unread' | 'deck-compose' | `column-${1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9}`;
|
|
5
|
+
/** Focuses a column: it becomes the deck's focused column, its page is shown and its webview gets the keys. */
|
|
6
|
+
export declare function focusColumn(deckId: string, columnId: string, giveKeys?: boolean): void;
|
|
7
|
+
export declare function runDeckCommand(deckId: string, command: string): void;
|
|
8
|
+
export declare function toggleCompose(deckId: string, profile?: string): void;
|
|
9
|
+
export declare function DeckView(props: IDockviewPanelProps<DeckParams>): import("react").JSX.Element;
|
|
10
|
+
/** Unread total of a deck on its dockview tab. */
|
|
11
|
+
export declare function DeckTabBadge({ deckId }: {
|
|
12
|
+
deckId: string;
|
|
13
|
+
}): import("react").JSX.Element | null;
|