waybetter 0.1.1 → 0.7.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 +139 -6
- package/bin/waybetter.mjs +43 -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/release.mjs +437 -0
- package/cli/releasecheck.mjs +15 -0
- package/cli/remote.mjs +260 -0
- package/cli/store.mjs +378 -0
- package/cli/strings.mjs +123 -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 +61 -0
- package/dist/runtime/stringPackTranslate.js +267 -0
- package/dist/runtime/stringPackTranslate.js.map +1 -0
- package/dist/runtime/stringPacks.d.ts +248 -0
- package/dist/runtime/stringPacks.js +610 -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/themeBar.d.ts +28 -0
- package/dist/runtime/themeBar.js +82 -0
- package/dist/runtime/themeBar.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 +476 -0
- package/dist/runtime/themeComponents.js.map +1 -0
- package/dist/runtime/themeDecor.d.ts +73 -0
- package/dist/runtime/themeDecor.js +133 -0
- package/dist/runtime/themeDecor.js.map +1 -0
- package/dist/runtime/themeDerive.d.ts +69 -0
- package/dist/runtime/themeDerive.js +117 -0
- package/dist/runtime/themeDerive.js.map +1 -0
- package/dist/runtime/themeDoctor.d.ts +52 -0
- package/dist/runtime/themeDoctor.js +112 -0
- package/dist/runtime/themeDoctor.js.map +1 -0
- package/dist/runtime/themeGuards.d.ts +60 -0
- package/dist/runtime/themeGuards.js +235 -0
- package/dist/runtime/themeGuards.js.map +1 -0
- package/dist/runtime/themeIcons.d.ts +130 -0
- package/dist/runtime/themeIcons.js +271 -0
- package/dist/runtime/themeIcons.js.map +1 -0
- package/dist/runtime/themeInk.d.ts +37 -0
- package/dist/runtime/themeInk.js +111 -0
- package/dist/runtime/themeInk.js.map +1 -0
- package/dist/runtime/themeInvariants.d.ts +39 -0
- package/dist/runtime/themeInvariants.js +273 -0
- package/dist/runtime/themeInvariants.js.map +1 -0
- package/dist/runtime/themeRuntime.d.ts +114 -0
- package/dist/runtime/themeRuntime.js +570 -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 +263 -0
- package/dist/runtime/themeSpec.js +435 -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 +176 -0
- package/dist/shell/InstallDialog.js.map +1 -0
- package/dist/shell/StoreView.d.ts +78 -0
- package/dist/shell/StoreView.js +108 -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 +44 -0
- package/dist/shell/frame/AppMenu.js +721 -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 +9 -0
- package/dist/shell/frame/Shell.js +1139 -0
- package/dist/shell/frame/Shell.js.map +1 -0
- package/dist/shell/frame/Titlebar.d.ts +17 -0
- package/dist/shell/frame/Titlebar.js +79 -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 +185 -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 +127 -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 +37 -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 +47 -0
- package/dist/shell/frame/chromeTheme.js +118 -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/edges.css +159 -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 +47 -0
- package/dist/shell/frame/mediaModel.js +67 -0
- package/dist/shell/frame/mediaModel.js.map +1 -0
- package/dist/shell/frame/menuMessages.en.json +96 -0
- package/dist/shell/frame/menuModel.d.ts +319 -0
- package/dist/shell/frame/menuModel.js +301 -0
- package/dist/shell/frame/menuModel.js.map +1 -0
- package/dist/shell/frame/nativeMenu.d.ts +5 -0
- package/dist/shell/frame/nativeMenu.js +178 -0
- package/dist/shell/frame/nativeMenu.js.map +1 -0
- package/dist/shell/frame/nativeMenuModel.d.ts +102 -0
- package/dist/shell/frame/nativeMenuModel.js +186 -0
- package/dist/shell/frame/nativeMenuModel.js.map +1 -0
- package/dist/shell/frame/paletteModel.d.ts +139 -0
- package/dist/shell/frame/paletteModel.js +114 -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 +634 -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 +101 -0
- package/dist/shell/frame/state.js +286 -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 +267 -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 +137 -0
- package/dist/shell/installController.js +172 -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 +265 -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 +117 -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 +7 -0
- package/dist/shell/panel/StoreSection.js +78 -0
- package/dist/shell/panel/StoreSection.js.map +1 -0
- package/dist/shell/panel/StringPacks.d.ts +20 -0
- package/dist/shell/panel/StringPacks.js +131 -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 +240 -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 +73 -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 +803 -0
- package/dist/shell/panel/panelMessages.js +779 -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 +250 -0
- package/dist/shell/storeMessages.d.ts +193 -0
- package/dist/shell/storeMessages.js +196 -0
- package/dist/shell/storeMessages.js.map +1 -0
- package/dist/shell/storeModel.d.ts +205 -0
- package/dist/shell/storeModel.js +146 -0
- package/dist/shell/storeModel.js.map +1 -0
- package/dist/shell/stringPacksModel.d.ts +44 -0
- package/dist/shell/stringPacksModel.js +99 -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 +655 -0
- package/languages.schema.json +23 -0
- package/locales/ar-x-fm.json +11 -0
- package/locales/ar.json +1388 -0
- package/locales/bg.json +1387 -0
- package/locales/bn.json +1387 -0
- package/locales/ca.json +1387 -0
- package/locales/cs.json +1387 -0
- package/locales/da.json +1387 -0
- package/locales/de.json +1387 -0
- package/locales/el.json +1387 -0
- package/locales/en-GB.json +27 -0
- package/locales/en.json +1386 -0
- package/locales/en.meta.json +51 -0
- package/locales/es.json +1387 -0
- package/locales/eu.json +1387 -0
- package/locales/fa.json +1388 -0
- package/locales/fi.json +1387 -0
- package/locales/fil.json +1387 -0
- package/locales/fr.json +1387 -0
- package/locales/ga.json +1387 -0
- package/locales/gl.json +1387 -0
- package/locales/gu.json +1387 -0
- package/locales/ha.json +1387 -0
- package/locales/he.json +1388 -0
- package/locales/hi.json +1387 -0
- package/locales/hr.json +1387 -0
- package/locales/hu.json +1387 -0
- package/locales/id.json +1387 -0
- package/locales/ig.json +1387 -0
- package/locales/it.json +1387 -0
- package/locales/ja.json +1387 -0
- package/locales/kn.json +1387 -0
- package/locales/ko.json +1387 -0
- package/locales/mr.json +1387 -0
- package/locales/ms.json +1387 -0
- package/locales/nb.json +1387 -0
- package/locales/nl.json +1387 -0
- package/locales/pl.json +1387 -0
- package/locales/pt.json +1387 -0
- package/locales/ro.json +1387 -0
- package/locales/ru.json +1387 -0
- package/locales/sk.json +1387 -0
- package/locales/sr.json +1387 -0
- package/locales/sv.json +1387 -0
- package/locales/ta.json +1387 -0
- package/locales/th.json +1387 -0
- package/locales/tr.json +1387 -0
- package/locales/uk.json +1387 -0
- package/locales/ur.json +1388 -0
- package/locales/vi.json +1387 -0
- package/locales/yo.json +1387 -0
- package/locales/zh-Hans.json +1387 -0
- package/locales/zh-Hant.json +1387 -0
- package/package.json +138 -5
- package/store-catalog.schema.json +78 -0
- package/theme.schema.json +4668 -0
- package/windows/installer.nsi +946 -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":"AccountSwitcher.js","sourceRoot":"","sources":["../../../../../../shell/src/frame/AccountSwitcher.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useRef, useState, type KeyboardEvent as ReactKeyboardEvent, type MouseEvent as ReactMouseEvent } from 'react';\nimport { createPortal } from 'react-dom';\nimport { DEFAULT_PROFILE, accountLabel as accountLabelCore, removeProfile, tabProfile, type Profile, type ProfileSettings } from '../profileModel.ts';\nimport { accountAction, addAccountProfile, focusedAccount, moveFocus, setDefaultAccount, tabsByAccount } from './accountModel.ts';\nimport { APP_MENU_KEYS, openAppMenu } from './AppMenu.tsx';\nimport { invoke } from './bridge.ts';\nimport { decks, forgetColumn, saveDecks } from './deckStore.ts';\nimport { usePaneTick, useProfiles, useT } from './hooks.ts';\nimport { t, tx } from './i18n.ts';\nimport { Avatar, Icon } from './icons.tsx';\nimport { menuText } from './menuModel.ts';\nimport { site } from './site.ts';\nimport { flushSync, paneInfos, setOverlay, setProfiles, shell } from './state.ts';\nimport { isTauri } from './windowBinding.ts';\nimport './accountSwitcher.css';\n\nexport { useProfiles } from './hooks.ts';\n\n/** What the switcher shows for a profile: the site login once seen, the profile name before. */\nexport function accountLabel(profile: Profile) {\n return accountLabelCore(profile, site().accounts, key => tx(key, undefined, '') || undefined);\n}\n\n/** Saves natively (Rust validates and owns the data directories); the preview keeps it in memory. */\nexport async function saveProfiles(next: ProfileSettings): Promise<void> {\n if (!isTauri) { setProfiles(next); return; }\n setProfiles(await invoke<ProfileSettings>('profiles_set', { settings: next }));\n}\n\nexport const ProfileDot = ({ color, title }: { color: string; title?: string }) =>\n <span className=\"bt-profile-dot\" style={{ background: color }} title={title} aria-hidden={title ? undefined : true}/>;\n\nexport function openTabs(profile: string) {\n return tabsByAccount(shell.profiles, paneInfos()).get(profile)?.length ?? 0;\n}\n\n/** The site's own sign-in page for that account, in a new pane beside the focused one. */\nexport function signIn(profile: string) {\n shell.openAccount(profile, { url: site().loginUrl });\n}\n\n/** \"Add account\": a fresh login (its own cookies and storage) whose sign-in opens in a new pane. */\nexport async function addAccount(settings: ProfileSettings): Promise<void> {\n const next = addAccountProfile(settings);\n await saveProfiles(next.settings);\n signIn(next.profile);\n}\n\n/**\n * Removes an account after the user confirmed: its tabs close first (native code refuses to delete\n * the data directory of a profile that still has a tab), then the list is saved and native code\n * deletes that login's data on this computer. Never called without the explicit confirm step.\n */\nexport async function removeAccount(settings: ProfileSettings, id: string): Promise<void> {\n if (id === DEFAULT_PROFILE) return;\n const tabs = tabsByAccount(settings, paneInfos()).get(id) ?? [];\n for (const tab of tabs) shell.api?.getPanel(tab)?.api.close();\n // Start pages of that account fall back to the default one.\n for (const panel of shell.api?.panels ?? []) {\n const params = panel.params as { kind?: string; profile?: string } | undefined;\n if (params?.kind === 'start' && params.profile === id) panel.api.updateParameters({ profile: DEFAULT_PROFILE });\n }\n // Deck columns of that account go too (each is a webview in its profile); a compose dock in it closes.\n let deckChanged = false;\n decks.list = decks.list.map(deck => {\n const gone = deck.columns.filter(column => column.profile === id);\n if (!gone.length) return deck;\n deckChanged = true;\n for (const column of gone) forgetColumn(column.tabId);\n return { ...deck, columns: deck.columns.filter(column => column.profile !== id) };\n });\n for (const [deckId, compose] of decks.compose) if (compose.profile === id) { decks.compose.delete(deckId); deckChanged = true; }\n if (deckChanged) saveDecks();\n // dockview drops closed panels from `api.panels` synchronously (checked in the harness, whose\n // profiles_set refuses like native code), so this sync no longer lists the account's tabs.\n await flushSync();\n try {\n await saveProfiles(removeProfile(settings, id));\n } catch (failure) {\n const message = String(failure);\n if (/PROFILE: close this profile's tabs/.test(message)) throw new Error(t('wb.acct.notRemoved'));\n throw failure;\n }\n}\n\nexport const AccountAvatar = ({ profile, size }: { profile: Profile; size: number }) =>\n <Avatar name={accountLabel(profile).title} color={profile.color} size={size} src={profile.account?.avatar}/>;\n\n/** \"Name (@handle)\" for titles and labels. */\nexport function accountName(profile: Profile): string {\n return `${accountLabel(profile).title}${profile.account ? ` (${site().accounts.handlePrefix}${profile.account.handle})` : ''}`;\n}\n\ntype RowMenu = { id: string; confirm?: boolean };\n\n/**\n * Titlebar account switcher. Every entry is a separate site login on this computer (its own\n * WebView data directory) that shows the account the site itself reports as signed in there.\n *\n * One click shows the account: a visible pane of it gets focus, otherwise its home feed (or the\n * site's sign-in) opens in a new pane beside the focused one. Shift/Ctrl-click opens a new tab\n * instead. Everything else (\"Open in new tab\", \"Use for new tabs\", sign out, remove) is in the\n * row's \"…\" menu. The button shows the focused pane's account.\n */\nexport function AccountSwitcher() {\n const t = useT();\n const settings = useProfiles();\n usePaneTick();\n const [open, setOpen] = useState(false);\n const [rowMenu, setRowMenu] = useState<RowMenu | null>(null);\n const [error, setError] = useState('');\n const [anchor, setAnchor] = useState<{ top: number; right: number }>({ top: 44, right: 12 });\n const button = useRef<HTMLButtonElement>(null);\n const menu = useRef<HTMLDivElement>(null);\n const panes = paneInfos();\n const activeId = shell.api?.activePanel?.id;\n const focused = focusedAccount(settings, panes, activeId);\n const tabs = tabsByAccount(settings, panes);\n const multi = settings.profiles.length > 1;\n const { name: siteName, homeUrl, loginUrl, logoutUrl, isSiteUrl, accounts: rules } = site();\n const handle = (profile: Profile) => `${rules.handlePrefix}${profile.account!.handle}`;\n\n useEffect(() => {\n if (!open) return;\n // Native tab webviews would cover the menu.\n setOverlay(1);\n const onBlur = () => close();\n // Escape while focus is outside the menu (a click on its padding); inside, onMenuKey handles it.\n const onKey = (event: KeyboardEvent) => { if (event.key === 'Escape' && !menu.current?.contains(event.target as Node)) close(true); };\n window.addEventListener('blur', onBlur);\n window.addEventListener('keydown', onKey);\n // Start on the focused pane's account.\n // Two lookups: a selector list matches in document order, so it would always pick the first row.\n requestAnimationFrame(() => (menu.current?.querySelector<HTMLElement>('.bt-acct-row.is-focused .bt-acct-main')\n ?? menu.current?.querySelector<HTMLElement>('.bt-acct-main'))?.focus());\n return () => { setOverlay(-1); window.removeEventListener('blur', onBlur); window.removeEventListener('keydown', onKey); };\n }, [open]);\n\n // The row menu takes focus when it opens; closing it returns focus to its row.\n const lastRow = useRef<string | null>(null);\n useEffect(() => {\n if (!open) return;\n if (rowMenu) {\n lastRow.current = rowMenu.id;\n requestAnimationFrame(() => menu.current?.querySelector<HTMLElement>(rowMenu.confirm ? '.bt-acct-confirm button' : '.bt-acct-sub button:not(:disabled)')?.focus());\n } else if (lastRow.current) {\n const id = lastRow.current;\n lastRow.current = null;\n requestAnimationFrame(() => menu.current?.querySelector<HTMLElement>(`.bt-acct-row[data-profile=\"${id}\"] .bt-acct-main`)?.focus());\n }\n }, [rowMenu, open]);\n\n function close(refocus = false) {\n setOpen(false); setRowMenu(null); setError('');\n if (refocus) button.current?.focus();\n }\n function toggle() {\n const rect = button.current?.getBoundingClientRect();\n if (rect) setAnchor({ top: Math.round(rect.bottom + 6), right: Math.max(8, Math.round(window.innerWidth - rect.right)) });\n setRowMenu(null); setError('');\n setOpen(value => !value);\n }\n\n async function run(action: () => Promise<unknown>) {\n setError('');\n try { await action(); return true; }\n catch (failure) { setError(String(failure).replace(/^Error: /, '')); return false; }\n }\n\n /** The main click: focus or open beside; Shift/Ctrl (or \"Open in new tab\") forces a tab. */\n function pick(profile: string, force = false) {\n close();\n shell.openAccount(profile, { force });\n }\n\n const onMainClick = (profile: string) => (event: ReactMouseEvent) => pick(profile, event.shiftKey || event.ctrlKey || event.metaKey);\n\n function onMenuKey(event: ReactKeyboardEvent<HTMLDivElement>) {\n const target = event.target as HTMLElement;\n const inSub = !!target.closest('.bt-acct-sub, .bt-acct-confirm');\n if (event.key === 'Escape') {\n event.preventDefault(); event.stopPropagation();\n if (rowMenu) setRowMenu(null); else close(true);\n return;\n }\n if (event.key === 'Tab') { event.preventDefault(); close(true); return; }\n const scope = inSub ? target.closest('.bt-acct-sub, .bt-acct-confirm')! : menu.current!;\n const items = Array.from(scope.querySelectorAll<HTMLElement>(inSub ? 'button:not(:disabled)' : '.bt-acct-main, .bt-acct-add, .bt-acct-settings'));\n if (['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) {\n event.preventDefault();\n items[moveFocus(items.indexOf(target), event.key, items.length)]?.focus();\n return;\n }\n const row = target.closest<HTMLElement>('.bt-acct-row')?.dataset.profile;\n if (!inSub && row && (event.key === 'ArrowRight' || event.key === 'ContextMenu' || (event.key === 'F10' && event.shiftKey))) {\n event.preventDefault(); setRowMenu({ id: row }); return;\n }\n if (inSub && event.key === 'ArrowLeft') { event.preventDefault(); setRowMenu(null); return; }\n // Keyboard Enter/Space clicks carry no modifiers: Shift/Ctrl+Enter forces a new tab here.\n if (!inSub && row && event.key === 'Enter' && (event.shiftKey || event.ctrlKey || event.metaKey)) { event.preventDefault(); pick(row, true); }\n }\n\n const buttonLabel = t('wb.acct.buttonLabel', { name: accountName(focused) });\n return <>\n <button ref={button} className=\"bt-profile-switcher\" aria-label={buttonLabel}\n title={multi ? t('wb.acct.buttonTitle', { pane: accountName(focused), tabs: accountName(tabProfile(settings, settings.active)) }) : accountName(focused)}\n aria-haspopup=\"menu\" aria-expanded={open} onClick={toggle}>\n <AccountAvatar profile={focused} size={22}/><span className=\"bt-profile-switcher-name\">{focused.account ? handle(focused) : accountLabel(focused).title}</span>\n <Icon name=\"chevron\" className=\"bt-profile-switcher-chevron\"/>\n </button>\n {open && createPortal(<div className=\"bt-menu-backdrop\" onMouseDown={() => close()} onContextMenu={event => { event.preventDefault(); close(); }}>\n <div ref={menu} className=\"bt-menu bt-acct-menu bt-pop bt-pop--right\" role=\"menu\" aria-label={t('wb.acct.title')} style={{ top: anchor.top, right: anchor.right }}\n onMouseDown={event => event.stopPropagation()} onKeyDown={onMenuKey}>\n <div className=\"bt-acct-head\" role=\"presentation\">\n <strong>{t('wb.acct.title')}</strong>\n <span>{t('wb.acct.headBefore')} <kbd className=\"bt-kbd\">{t('wb.acct.shift')}</kbd> {t('wb.acct.headAfter')}</span>\n </div>\n {settings.profiles.map(profile => {\n const label = accountLabel(profile);\n const count = tabs.get(profile.id)?.length ?? 0;\n const isFocused = profile.id === focused.id;\n const isDefault = profile.id === settings.active;\n const action = accountAction(settings, panes, activeId, profile.id, { homeUrl, loginUrl, isSiteUrl });\n const hint = action.type === 'focus' ? (action.paneId === activeId ? t('wb.acct.thisPane') : t('wb.acct.goToPane')) : label.state === 'signed-in' ? t('wb.acct.openBeside') : t('wb.acct.signInBeside');\n const status = label.state === 'signed-in' ? handle(profile) : label.state === 'signed-out' ? t('wb.acct.signedOut', { handle: handle(profile) }) : label.detail;\n const sub = rowMenu?.id === profile.id ? rowMenu : null;\n return <div key={profile.id} className={`bt-acct-row${isFocused ? ' is-focused' : ''}${sub ? ' is-open' : ''}`} data-profile={profile.id} role=\"none\"\n onContextMenu={event => { event.preventDefault(); event.stopPropagation(); setRowMenu({ id: profile.id }); }}>\n <div className=\"bt-acct-line\">\n <button role=\"menuitem\" className=\"bt-acct-main\" aria-current={isFocused ? 'true' : undefined}\n aria-label={label.state === 'signed-in' ? t('wb.acct.rowLabel', { name: accountName(profile), hint }) : label.state === 'new' ? t('wb.acct.rowLabelNew', { name: accountName(profile), hint }) : t('wb.acct.rowLabelOut', { name: accountName(profile), hint })}\n onClick={onMainClick(profile.id)}>\n <span className={`bt-acct-avatar is-${label.state}`}><AccountAvatar profile={profile} size={32}/></span>\n <span className=\"bt-acct-text\">\n <span className=\"bt-acct-name\">{label.title}{isDefault && multi && <span className=\"bt-acct-badge\" title={t('wb.acct.newTabsTitle')}>{t('wb.acct.newTabs')}</span>}</span>\n <span className={`bt-acct-meta is-${label.state}`}>{status}{count > 0 && <span className=\"bt-acct-count\"> · {t('wb.ws.tabs', { count })}</span>}</span>\n </span>\n <span className=\"bt-acct-hint\" aria-hidden=\"true\">{hint}{action.type === 'open' && <Icon name=\"split\"/>}</span>\n </button>\n <button className=\"bt-acct-more\" tabIndex={-1} aria-haspopup=\"menu\" aria-expanded={!!sub} aria-label={t('wb.acct.moreFor', { name: accountName(profile) })} title={t('wb.acct.more')}\n onClick={() => setRowMenu(sub ? null : { id: profile.id })}>\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"6\" cy=\"12\" r=\"1.6\"/><circle cx=\"12\" cy=\"12\" r=\"1.6\"/><circle cx=\"18\" cy=\"12\" r=\"1.6\"/></svg>\n </button>\n </div>\n {sub && !sub.confirm && <div className=\"bt-acct-sub\" role=\"menu\" aria-label={t('wb.acct.actions', { name: accountName(profile) })}>\n <button role=\"menuitem\" data-action=\"tab\" onClick={() => pick(profile.id, true)}>\n <Icon name=\"plus\"/><span className=\"bt-menu-label\">{t('wb.acct.openNewTab')}</span><span className=\"bt-menu-keys\">{t('wb.acct.shiftClick')}</span></button>\n <button role=\"menuitemcheckbox\" aria-checked={isDefault} data-action=\"default\" disabled={isDefault}\n onClick={() => void run(() => saveProfiles(setDefaultAccount(settings, profile.id))).then(ok => ok && setRowMenu(null))}>\n <Icon name={isDefault ? 'check' : 'sparkle'}/><span className=\"bt-menu-label\">{isDefault ? t('wb.acct.newTabsOpenHere') : t('wb.acct.useForNewTabs')}</span></button>\n {label.state === 'signed-in'\n ? <button role=\"menuitem\" data-action=\"signout\" title={t('wb.acct.signOutTitle', { site: siteName })} onClick={() => { close(); shell.openAccount(profile.id, { url: logoutUrl }); }}>\n <Icon name=\"external\"/><span className=\"bt-menu-label\">{t('wb.acct.signOut', { site: siteName })}</span></button>\n : <button role=\"menuitem\" data-action=\"signin\" onClick={() => { close(); signIn(profile.id); }}>\n <Icon name=\"user\"/><span className=\"bt-menu-label\">{t('wb.acct.signIn', { site: siteName })}</span></button>}\n {profile.id !== DEFAULT_PROFILE && <button role=\"menuitem\" data-action=\"remove\" className=\"bt-acct-danger\" onClick={() => setRowMenu({ id: profile.id, confirm: true })}>\n <Icon name=\"trash\"/><span className=\"bt-menu-label\">{t('wb.acct.remove')}</span></button>}\n </div>}\n {sub?.confirm && <div className=\"bt-acct-confirm\" role=\"alertdialog\" aria-label={t('wb.common.removeItem', { item: label.title })}>\n <span>{t('wb.acct.removeConfirm', { name: accountName(profile), tabs: count })}</span>\n <div>\n <button className=\"bt-acct-remove\" onClick={() => void run(() => removeAccount(settings, profile.id)).then(ok => ok && setRowMenu(null))}>{t('wb.common.remove')}</button>\n <button className=\"bt-acct-cancel\" onClick={() => setRowMenu(null)}>{t('wb.common.cancel')}</button>\n </div>\n </div>}\n </div>;\n })}\n <hr/>\n <button role=\"menuitem\" className=\"bt-acct-add\" onClick={() => void run(() => addAccount(settings)).then(ok => ok && close())}>\n <span className=\"bt-acct-add-icon\"><Icon name=\"plus\"/></span>\n <span className=\"bt-acct-text\"><span className=\"bt-acct-name\">{t('wb.acct.add')}</span><span className=\"bt-acct-meta\">{t('wb.acct.addHint', { site: siteName })}</span></span>\n </button>\n <hr/>\n {/* Settings are looked for where the account name is: the way to the app menu. */}\n <button role=\"menuitem\" className=\"bt-acct-settings\" aria-haspopup=\"menu\" onClick={event => { const keyboard = event.detail === 0; close(); openAppMenu({ keyboard }); }}>\n <Icon name=\"settings\"/><span className=\"bt-menu-label\">{menuText('accountsRow')}</span><span className=\"bt-menu-keys\">{APP_MENU_KEYS}</span>\n </button>\n {error && <div className=\"bt-acct-error\" role=\"alert\">{error}</div>}\n </div>\n </div>, document.body)}\n </>;\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Deck, type DeckColumn } from './deckStore.ts';
|
|
2
|
+
type Input = Pick<DeckColumn, 'profile' | 'source'>;
|
|
3
|
+
export declare function AddColumnDialog({ deck, onClose, onAdd }: {
|
|
4
|
+
deck: Deck;
|
|
5
|
+
onClose(): void;
|
|
6
|
+
onAdd(input: Input): void;
|
|
7
|
+
}): import("react").ReactPortal;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// "Add column": pick what the column shows (the site's column kinds: `site.deck.kinds`), which
|
|
3
|
+
// account it runs in and, for kinds that take one, the value. The shell rises above the tab
|
|
4
|
+
// webviews (or hides them) while it is open, so it draws above them.
|
|
5
|
+
import { useEffect, useRef, useState } from 'react';
|
|
6
|
+
import { createPortal } from 'react-dom';
|
|
7
|
+
import { tabProfile } from "../profileModel.js";
|
|
8
|
+
import { AccountAvatar, accountLabel } from "./AccountSwitcher.js";
|
|
9
|
+
import { decks } from "./deckStore.js";
|
|
10
|
+
import { useProfiles, useT } from "./hooks.js";
|
|
11
|
+
import { Icon } from "./icons.js";
|
|
12
|
+
import { site } from "./site.js";
|
|
13
|
+
import { setOverlay } from "./state.js";
|
|
14
|
+
export function AddColumnDialog({ deck, onClose, onAdd }) {
|
|
15
|
+
const t = useT();
|
|
16
|
+
const profiles = useProfiles();
|
|
17
|
+
const spec = site().deck;
|
|
18
|
+
const types = spec.kinds;
|
|
19
|
+
const focused = deck.columns.find(c => c.id === decks.focus.get(deck.id));
|
|
20
|
+
const [kind, setKind] = useState(types[0]?.kind ?? '');
|
|
21
|
+
const [profile, setProfile] = useState(tabProfile(profiles, focused?.profile ?? profiles.active).id);
|
|
22
|
+
const [value, setValue] = useState('');
|
|
23
|
+
const [caret, setCaret] = useState(0);
|
|
24
|
+
const field = useRef(null);
|
|
25
|
+
const dialog = useRef(null);
|
|
26
|
+
const type = types.find(item => item.kind === kind);
|
|
27
|
+
const parsed = type.value ? spec.parseValue(kind, value) : '';
|
|
28
|
+
const valid = parsed !== null && (!type.value || parsed !== '') && !!spec.urlFor({ kind, ...(parsed ? { value: parsed } : {}) });
|
|
29
|
+
const completer = spec.completer?.(kind) ?? null;
|
|
30
|
+
const chips = completer ? completer.suggest(value, caret, 6) : [];
|
|
31
|
+
const handlePrefix = site().accounts.handlePrefix;
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
setOverlay(1);
|
|
34
|
+
const onBlur = () => onClose();
|
|
35
|
+
window.addEventListener('blur', onBlur);
|
|
36
|
+
dialog.current?.querySelector('[aria-checked="true"]')?.focus();
|
|
37
|
+
return () => { setOverlay(-1); window.removeEventListener('blur', onBlur); };
|
|
38
|
+
}, []);
|
|
39
|
+
useEffect(() => { if (type.value)
|
|
40
|
+
requestAnimationFrame(() => field.current?.focus()); }, [kind]);
|
|
41
|
+
const submit = () => {
|
|
42
|
+
if (!valid) {
|
|
43
|
+
field.current?.focus();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
onAdd({ profile, source: parsed ? { kind, value: parsed } : { kind } });
|
|
47
|
+
};
|
|
48
|
+
const onKey = (event) => {
|
|
49
|
+
if (event.key === 'Escape') {
|
|
50
|
+
event.preventDefault();
|
|
51
|
+
onClose();
|
|
52
|
+
}
|
|
53
|
+
else if (event.key === 'Enter' && !event.target.matches('button')) {
|
|
54
|
+
event.preventDefault();
|
|
55
|
+
submit();
|
|
56
|
+
}
|
|
57
|
+
else if (['ArrowRight', 'ArrowLeft', 'ArrowDown', 'ArrowUp'].includes(event.key) && event.target.getAttribute('role') === 'radio'
|
|
58
|
+
&& event.target.closest('.bt-addcol-types')) {
|
|
59
|
+
event.preventDefault();
|
|
60
|
+
const index = types.findIndex(item => item.kind === kind);
|
|
61
|
+
const step = event.key === 'ArrowRight' ? 1 : event.key === 'ArrowLeft' ? -1 : event.key === 'ArrowDown' ? 4 : -4;
|
|
62
|
+
const next = types[(index + step + types.length) % types.length];
|
|
63
|
+
setKind(next.kind);
|
|
64
|
+
requestAnimationFrame(() => dialog.current?.querySelector(`[data-kind="${next.kind}"]`)?.focus());
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const acceptChip = (insert) => {
|
|
68
|
+
if (!completer)
|
|
69
|
+
return;
|
|
70
|
+
const next = completer.apply(value, caret, insert);
|
|
71
|
+
setValue(next.text);
|
|
72
|
+
setCaret(next.caret);
|
|
73
|
+
requestAnimationFrame(() => { field.current?.focus(); field.current?.setSelectionRange(next.caret, next.caret); });
|
|
74
|
+
};
|
|
75
|
+
return createPortal(_jsx("div", { className: "bt-palette-backdrop bt-addcol-backdrop", onMouseDown: onClose, children: _jsxs("div", { ref: dialog, className: "bt-palette bt-addcol bt-pop", role: "dialog", "aria-modal": "true", "aria-labelledby": "bt-addcol-title", onMouseDown: event => event.stopPropagation(), onKeyDown: onKey, children: [_jsxs("header", { className: "bt-addcol-head", children: [_jsx("h2", { id: "bt-addcol-title", children: t('wb.deck.addColumn') }), _jsx("span", { children: t('wb.addcol.to', { deck: deck.name }) }), _jsx("button", { className: "bt-icon", "aria-label": t('wb.common.close'), onClick: onClose, children: _jsx(Icon, { name: "close" }) })] }), _jsx("div", { className: "bt-addcol-types", role: "radiogroup", "aria-label": t('wb.addcol.type'), children: types.map(item => _jsxs("button", { "data-kind": item.kind, role: "radio", "aria-checked": item.kind === kind, tabIndex: item.kind === kind ? 0 : -1, className: `bt-addcol-type${item.kind === kind ? ' is-on' : ''}`, onClick: () => setKind(item.kind), onDoubleClick: () => { if (!item.value)
|
|
76
|
+
onAdd({ profile, source: { kind: item.kind } }); }, children: [_jsx("span", { className: "bt-addcol-icon", children: _jsx(Icon, { name: item.icon }) }), _jsx("strong", { children: item.label }), _jsx("small", { children: item.hint })] }, item.kind)) }), type.value && _jsxs("div", { className: "bt-addcol-value", children: [_jsx("label", { htmlFor: "bt-addcol-field", children: type.value.label }), _jsxs("div", { className: `bt-addcol-field${value && parsed === null ? ' is-bad' : ''}`, children: [_jsx(Icon, { name: type.icon }), _jsx("input", { id: "bt-addcol-field", ref: field, spellCheck: false, autoComplete: "off", placeholder: type.value.placeholder, value: value, onChange: event => { setValue(event.target.value); setCaret(event.target.selectionStart ?? event.target.value.length); }, onSelect: () => setCaret(field.current?.selectionStart ?? value.length), onKeyDown: event => { if (event.key === 'Tab' && !event.shiftKey && chips[0]) {
|
|
77
|
+
event.preventDefault();
|
|
78
|
+
acceptChip(chips[0].insert);
|
|
79
|
+
} } })] }), chips.length > 0 && _jsx("div", { className: "bt-addcol-chips", role: "listbox", "aria-label": completer?.label(), children: chips.map((chip, index) => _jsx("button", { type: "button", role: "option", "aria-selected": index === 0, title: `${chip.hint}${index === 0 ? ` (${t('wb.web.tabKey')})` : ''}`, onMouseDown: event => event.preventDefault(), onClick: () => acceptChip(chip.insert), children: chip.label }, chip.insert)) }), value && parsed === null && _jsx("p", { className: "bt-addcol-error", role: "alert", children: spec.invalid(kind) })] }), _jsxs("div", { className: "bt-addcol-accounts", children: [_jsx("span", { className: "bt-addcol-label", children: t('wb.addcol.account') }), _jsx("div", { role: "radiogroup", "aria-label": t('wb.addcol.account'), children: profiles.profiles.map(p => _jsxs("button", { role: "radio", "aria-checked": p.id === profile, className: `bt-addcol-account${p.id === profile ? ' is-on' : ''}`, onClick: () => setProfile(p.id), style: { ['--bt-col-account']: p.color }, children: [_jsx(AccountAvatar, { profile: p, size: 22 }), _jsx("span", { children: p.account ? `${handlePrefix}${p.account.handle}` : accountLabel(p).title }), p.account && !p.account.signedIn && _jsx("em", { children: t('wb.addcol.signedOut') })] }, p.id)) })] }), _jsxs("footer", { className: "bt-addcol-foot", children: [_jsxs("span", { children: [_jsx("span", { className: "bt-kbd", children: "\u21B5" }), " ", t('wb.addcol.add')] }), _jsxs("span", { children: [_jsx("span", { className: "bt-kbd", children: "Esc" }), " ", t('wb.addcol.close')] }), _jsx("span", { className: "bt-palette-foot-end" }), _jsx("button", { className: "bt-deck-secondary", onClick: onClose, children: t('wb.common.cancel') }), _jsxs("button", { className: "bt-deck-primary", disabled: !valid, onClick: submit, children: [_jsx(Icon, { name: "plus" }), t('wb.addcol.submit')] })] })] }) }), document.body);
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=AddColumnDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddColumnDialog.js","sourceRoot":"","sources":["../../../../../../shell/src/frame/AddColumnDialog.tsx"],"names":[],"mappings":"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","sourcesContent":["// \"Add column\": pick what the column shows (the site's column kinds: `site.deck.kinds`), which\n// account it runs in and, for kinds that take one, the value. The shell rises above the tab\n// webviews (or hides them) while it is open, so it draws above them.\n\nimport { useEffect, useRef, useState, type KeyboardEvent as ReactKeyboardEvent } from 'react';\nimport { createPortal } from 'react-dom';\nimport { tabProfile } from '../profileModel.ts';\nimport { AccountAvatar, accountLabel } from './AccountSwitcher.tsx';\nimport { decks, type Deck, type DeckColumn } from './deckStore.ts';\nimport { useProfiles, useT } from './hooks.ts';\nimport { Icon } from './icons.tsx';\nimport { site, type DeckSite } from './site.ts';\nimport { setOverlay } from './state.ts';\n\ntype Input = Pick<DeckColumn, 'profile' | 'source'>;\n\nexport function AddColumnDialog({ deck, onClose, onAdd }: { deck: Deck; onClose(): void; onAdd(input: Input): void }) {\n const t = useT();\n const profiles = useProfiles();\n const spec = site().deck as DeckSite;\n const types = spec.kinds;\n const focused = deck.columns.find(c => c.id === decks.focus.get(deck.id));\n const [kind, setKind] = useState<string>(types[0]?.kind ?? '');\n const [profile, setProfile] = useState(tabProfile(profiles, focused?.profile ?? profiles.active).id);\n const [value, setValue] = useState('');\n const [caret, setCaret] = useState(0);\n const field = useRef<HTMLInputElement>(null);\n const dialog = useRef<HTMLDivElement>(null);\n const type = types.find(item => item.kind === kind)!;\n const parsed = type.value ? spec.parseValue(kind, value) : '';\n const valid = parsed !== null && (!type.value || parsed !== '') && !!spec.urlFor({ kind, ...(parsed ? { value: parsed } : {}) });\n const completer = spec.completer?.(kind) ?? null;\n const chips = completer ? completer.suggest(value, caret, 6) : [];\n const handlePrefix = site().accounts.handlePrefix;\n\n useEffect(() => {\n setOverlay(1);\n const onBlur = () => onClose();\n window.addEventListener('blur', onBlur);\n (dialog.current?.querySelector('[aria-checked=\"true\"]') as HTMLElement | null)?.focus();\n return () => { setOverlay(-1); window.removeEventListener('blur', onBlur); };\n }, []);\n useEffect(() => { if (type.value) requestAnimationFrame(() => field.current?.focus()); }, [kind]);\n\n const submit = () => {\n if (!valid) { field.current?.focus(); return; }\n onAdd({ profile, source: parsed ? { kind, value: parsed } : { kind } });\n };\n const onKey = (event: ReactKeyboardEvent) => {\n if (event.key === 'Escape') { event.preventDefault(); onClose(); }\n else if (event.key === 'Enter' && !(event.target as HTMLElement).matches('button')) { event.preventDefault(); submit(); }\n else if (['ArrowRight', 'ArrowLeft', 'ArrowDown', 'ArrowUp'].includes(event.key) && (event.target as HTMLElement).getAttribute('role') === 'radio'\n && (event.target as HTMLElement).closest('.bt-addcol-types')) {\n event.preventDefault();\n const index = types.findIndex(item => item.kind === kind);\n const step = event.key === 'ArrowRight' ? 1 : event.key === 'ArrowLeft' ? -1 : event.key === 'ArrowDown' ? 4 : -4;\n const next = types[(index + step + types.length) % types.length]!;\n setKind(next.kind);\n requestAnimationFrame(() => (dialog.current?.querySelector(`[data-kind=\"${next.kind}\"]`) as HTMLElement | null)?.focus());\n }\n };\n const acceptChip = (insert: string) => {\n if (!completer) return;\n const next = completer.apply(value, caret, insert);\n setValue(next.text);\n setCaret(next.caret);\n requestAnimationFrame(() => { field.current?.focus(); field.current?.setSelectionRange(next.caret, next.caret); });\n };\n\n return createPortal(<div className=\"bt-palette-backdrop bt-addcol-backdrop\" onMouseDown={onClose}>\n <div ref={dialog} className=\"bt-palette bt-addcol bt-pop\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"bt-addcol-title\" onMouseDown={event => event.stopPropagation()} onKeyDown={onKey}>\n <header className=\"bt-addcol-head\">\n <h2 id=\"bt-addcol-title\">{t('wb.deck.addColumn')}</h2>\n <span>{t('wb.addcol.to', { deck: deck.name })}</span>\n <button className=\"bt-icon\" aria-label={t('wb.common.close')} onClick={onClose}><Icon name=\"close\"/></button>\n </header>\n <div className=\"bt-addcol-types\" role=\"radiogroup\" aria-label={t('wb.addcol.type')}>\n {types.map(item => <button key={item.kind} data-kind={item.kind} role=\"radio\" aria-checked={item.kind === kind} tabIndex={item.kind === kind ? 0 : -1}\n className={`bt-addcol-type${item.kind === kind ? ' is-on' : ''}`} onClick={() => setKind(item.kind)} onDoubleClick={() => { if (!item.value) onAdd({ profile, source: { kind: item.kind } }); }}>\n <span className=\"bt-addcol-icon\"><Icon name={item.icon}/></span>\n <strong>{item.label}</strong>\n <small>{item.hint}</small>\n </button>)}\n </div>\n {type.value && <div className=\"bt-addcol-value\">\n <label htmlFor=\"bt-addcol-field\">{type.value.label}</label>\n <div className={`bt-addcol-field${value && parsed === null ? ' is-bad' : ''}`}>\n <Icon name={type.icon}/>\n <input id=\"bt-addcol-field\" ref={field} spellCheck={false} autoComplete=\"off\" placeholder={type.value.placeholder} value={value}\n onChange={event => { setValue(event.target.value); setCaret(event.target.selectionStart ?? event.target.value.length); }}\n onSelect={() => setCaret(field.current?.selectionStart ?? value.length)}\n onKeyDown={event => { if (event.key === 'Tab' && !event.shiftKey && chips[0]) { event.preventDefault(); acceptChip(chips[0].insert); } }}/>\n </div>\n {chips.length > 0 && <div className=\"bt-addcol-chips\" role=\"listbox\" aria-label={completer?.label()}>\n {chips.map((chip, index) => <button key={chip.insert} type=\"button\" role=\"option\" aria-selected={index === 0} title={`${chip.hint}${index === 0 ? ` (${t('wb.web.tabKey')})` : ''}`}\n onMouseDown={event => event.preventDefault()} onClick={() => acceptChip(chip.insert)}>{chip.label}</button>)}\n </div>}\n {value && parsed === null && <p className=\"bt-addcol-error\" role=\"alert\">{spec.invalid(kind)}</p>}\n </div>}\n <div className=\"bt-addcol-accounts\">\n <span className=\"bt-addcol-label\">{t('wb.addcol.account')}</span>\n <div role=\"radiogroup\" aria-label={t('wb.addcol.account')}>\n {profiles.profiles.map(p => <button key={p.id} role=\"radio\" aria-checked={p.id === profile} className={`bt-addcol-account${p.id === profile ? ' is-on' : ''}`} onClick={() => setProfile(p.id)}\n style={{ ['--bt-col-account' as string]: p.color }}>\n <AccountAvatar profile={p} size={22}/><span>{p.account ? `${handlePrefix}${p.account.handle}` : accountLabel(p).title}</span>\n {p.account && !p.account.signedIn && <em>{t('wb.addcol.signedOut')}</em>}\n </button>)}\n </div>\n </div>\n <footer className=\"bt-addcol-foot\">\n <span><span className=\"bt-kbd\">↵</span> {t('wb.addcol.add')}</span><span><span className=\"bt-kbd\">Esc</span> {t('wb.addcol.close')}</span>\n <span className=\"bt-palette-foot-end\"/>\n <button className=\"bt-deck-secondary\" onClick={onClose}>{t('wb.common.cancel')}</button>\n <button className=\"bt-deck-primary\" disabled={!valid} onClick={submit}><Icon name=\"plus\"/>{t('wb.addcol.submit')}</button>\n </footer>\n </div>\n </div>, document.body);\n}\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type AppMenuTrigger } from './menuModel.ts';
|
|
3
|
+
import './appMenu.css';
|
|
4
|
+
/**
|
|
5
|
+
* How the menu is asked to open: at a trigger other than the app's own (`anchor`), under one pane's
|
|
6
|
+
* button (`pane`, a dockview panel id), at a submenu, with the first row focused (keyboard), or
|
|
7
|
+
* closing if it is open at that place.
|
|
8
|
+
*/
|
|
9
|
+
export type AppMenuRequest = {
|
|
10
|
+
anchor?: AppMenuTrigger;
|
|
11
|
+
pane?: string;
|
|
12
|
+
submenu?: string;
|
|
13
|
+
keyboard?: boolean;
|
|
14
|
+
toggle?: boolean;
|
|
15
|
+
};
|
|
16
|
+
/** Opens the app menu (Alt+F / F10, the palette, the account menu's last row). */
|
|
17
|
+
export declare const openAppMenu: (request?: AppMenuRequest) => boolean;
|
|
18
|
+
/** Opens the "Report a problem" summary (the native menu bar's Help item). */
|
|
19
|
+
export declare const openReport: () => boolean;
|
|
20
|
+
/** The keys that open the menu, as the button's tooltip and the account menu write them. */
|
|
21
|
+
export declare const APP_MENU_KEYS: string;
|
|
22
|
+
/**
|
|
23
|
+
* The menu (mounted once, in the titlebar). `trigger`: where clicks and keys open it; default the
|
|
24
|
+
* app's `ShellMenu.trigger`, else `pane`. `true` / `false` are the older spellings of `button` / `logo`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function AppMenu({ trigger }?: {
|
|
27
|
+
trigger?: AppMenuTrigger | boolean;
|
|
28
|
+
}): import("react").JSX.Element;
|
|
29
|
+
/**
|
|
30
|
+
* The app's logo at the start of the titlebar: a second trigger of the same menu, hung under the
|
|
31
|
+
* logo. A click opens it; a press that turns into a drag moves the window, as the titlebar around
|
|
32
|
+
* it does; a right-click shows the window's system menu, where a titlebar icon has always had it.
|
|
33
|
+
*/
|
|
34
|
+
export declare function AppMenuLogo(): import("react").JSX.Element;
|
|
35
|
+
/** The app's menu trigger: `trigger` as `AppMenu` takes it, else `ShellMenu.trigger`, else `pane`. */
|
|
36
|
+
export declare const menuTrigger: (trigger?: AppMenuTrigger | boolean) => AppMenuTrigger;
|
|
37
|
+
/**
|
|
38
|
+
* One pane's menu button, at the end of its toolbar (the app's mark inside): opens the app menu
|
|
39
|
+
* under itself, or closes it when it is open there. Shown when the app's trigger is `pane`.
|
|
40
|
+
*/
|
|
41
|
+
export declare function PaneMenuButton({ pane, children }: {
|
|
42
|
+
pane: string;
|
|
43
|
+
children: ReactNode;
|
|
44
|
+
}): import("react").JSX.Element;
|