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":"Shell.js","sourceRoot":"","sources":["../../../../../../shell/src/frame/Shell.tsx"],"names":[],"mappings":";AAAA,mGAAmG;AACnG,gGAAgG;AAChG,kGAAkG;AAClG,+FAA+F;AAE/F,OAAO,EACL,aAAa,EAAE,SAAS,GAGzB,MAAM,UAAU,CAAC;AAClB,OAAO,mCAAmC,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAsC,MAAM,OAAO,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAmC,MAAM,gBAAgB,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAuB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAe,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAgB,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,WAAW,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAiB,MAAM,YAAa,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAiB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACxI,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EACL,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,GAErK,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,eAAgB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAsB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,aAAa,CAAC;AACrB,mEAAmE;AACnE,OAAO,aAAa,CAAC;AAIrB,iHAAiH;AACjH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAEzC,wFAAwF;AACxF,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,QAAQ,GAAG,KAAK,CAAC;AACnB,CAAC;AAED,4EAA4E;AAC5E,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,GAAG,IAAI,CAAC;IAAC,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAAC,CAAC;AAAC,MAAM,CAAC;IAAC,OAAO,EAAE,CAAC;AAAC,CAAC,CAAC,CAAC,CAAC;AAE/F,SAAS,MAAM,CAAC,GAAW,EAAE,SAAqC,EAAE,QAAQ,GAAG,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAiB;IACrI,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,MAAM,KAAK,GAAG,SAAS,IAAI,CAAC,gBAAgB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC;QAClG,CAAC,CAAC,gBAAgB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,OAAO,GAAG,CAAC,QAAQ,CAAY;QAC7B,EAAE,EAAE,QAAQ,EAAE;QACd,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC;QAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QAChH,QAAQ,EAAE,SAAS,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/G,QAAQ,EAAE,CAAC,QAAQ;KACpB,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU,CAAC,GAAW,EAAE,MAAsB,EAAE,QAAiB,EAAE,OAAgB;IAC1F,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,MAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,IAAI,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACzH,MAAM,GAAG,GAAG,CAAC,KAAyB,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAE,KAAK,CAAC,MAAyC,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1I,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC5G,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAChK,CAAC;AAED,0GAA0G;AAC1G,SAAS,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAqB;IACtE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,MAAM,SAAS,GAAG,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9F,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAc;QACtC,EAAE,EAAE,QAAQ,EAAE;QACd,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC;QAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE;QAC1E,QAAQ,EAAE,SAAS,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KAChH,CAAC,CAAC;IACH,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6FAA6F;AAC7F,SAAS,aAAa,CAAC,GAAW,EAAE,OAAe,EAAE,OAAgB;IACnE,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,IAAI,CAAC,KAAK,EAAE,CAAC;QAAC,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAClH,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,OAAe,EAAE,UAA6C,EAAE;IACnF,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC;IAC/B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG;QACxB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,QAAiB,EAAE;QACxH,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5H,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;QACvB,IAAI,KAAK;YAAE,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,QAAiB,CAAC,CAAC,CAAC,OAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/I,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,gGAAgG;AAChG,8DAA8D;AAE9D,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC;AACzD,gFAAgF;AAChF,IAAI,WAAW,GAAkB,IAAI,CAAC;AACtC,sFAAsF;AACtF,IAAI,OAAO,GAAkB,IAAI,CAAC;AAElC;;;GAGG;AACH,SAAS,UAAU,CAAC,KAAiC;IACnD,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1F,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,oEAAoE;AACpE,SAAS,QAAQ,CAAC,MAAe;IAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI;QAAE,OAAO;IACjC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACrG,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,IAAI,QAAQ,EAAE,CAAC;QAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IACnD,GAAG,CAAC,QAAQ,CAAa;QACvB,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;QACxG,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;KACjG,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,SAAS,UAAU;IACjB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,MAAM,MAAM,GAAG,GAAG,EAAE,WAAW,CAAC;IAChC,IAAI,MAAM,IAAK,MAAM,CAAC,MAAoB,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;QACtB,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IACD,QAAQ,EAAE,CAAC;AACb,CAAC;AAED,4GAA4G;AAC5G,SAAS,OAAO,CAAC,EAAW;IAC1B,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,MAA+B,CAAC;QACxE,OAAO,MAAM,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,MAA+B,CAAC;IACvE,OAAO,MAAM,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC;AAED,SAAS,SAAS,CAAC,OAAgB,EAAE,IAAa;IAChD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,OAAO;YAAE,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IACD,8EAA8E;IAC9E,MAAM,SAAS,GAAG,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,OAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACjH,GAAG,CAAC,QAAQ,CAAc,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AAC9J,CAAC;AAED,SAAS,QAAQ,CAAC,KAAqB;IACrC,IAAK,KAAK,CAAC,MAAoB,CAAC,MAAM;QAAE,OAAO;IAC/C,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,MAAmB,CAAC;QAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;IAAC,CAAC;IACnJ,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAqB,EAAE,SAA4B;IAC1E,oFAAoF;IACpF,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjG,CAAC;SAAM,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,MAAmB,CAAC;QACnD,MAAM,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC;IACrC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAClF,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;AAC5F,CAAC;AAED,SAAS,YAAY,CAAC,EAAU;IAC9B,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACtC,qBAAqB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACzG,CAAC;AAED,IAAI,aAAa,GAAe,GAAG,EAAE,GAAE,CAAC,CAAC;AACzC,IAAI,WAAW,GAAe,GAAG,EAAE,GAAE,CAAC,CAAC;AAEvC,SAAS,cAAc;IACrB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC;IACzB,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,EAAG,KAAK,CAAC,MAAoB,CAAC,GAAG,EAAE,OAAO,EAAG,KAAK,CAAC,MAAoB,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/J,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrF,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;QACpC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI;YAC5B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;SACxI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QACf,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,MAA+B,CAAC,CAAC,OAAO,MAAM,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7J,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS;QAClE,eAAe,EAAE,UAAU,CAAC,MAAM,IAAI,SAAS;QAC/C,4DAA4D;QAC5D,QAAQ,EAAE,eAAe,EAAE;KAC5B,CAAC;AACJ,CAAC;AAED,wGAAwG;AACxG,SAAS,UAAU,CAAC,MAAqB;IACvC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,WAAW;YAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;YAAC,MAAM;QAClE,KAAK,SAAS;YAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAAC,MAAM;QACpD,KAAK,OAAO;YAAE,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAAC,MAAM;QACpE,KAAK,MAAM;YAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAAC,MAAM;QACvC,KAAK,OAAO;YAAE,WAAW,EAAE,CAAC;YAAC,MAAM;QACnC,KAAK,MAAM;YAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAAC,MAAM;QAC5C,KAAK,UAAU;YAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAAC,MAAM;QACjF,KAAK,UAAU;YAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM;QAC9J,KAAK,YAAY;YAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAC,MAAM;QAC5H,KAAK,gBAAgB;YAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAAC,MAAM;QAC3E,KAAK,WAAW;YAAE,KAAK,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAAC,MAAM;QAC1D,KAAK,gBAAgB;YAAE,iBAAiB,EAAE,CAAC;YAAC,MAAM;QAClD,KAAK,MAAM;YAAE,WAAW,CAAC,MAAM,CAAC,CAAC;YAAC,MAAM;QACxC,KAAK,MAAM;YAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,MAAM;IACtD,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB,EAAE,EAAW;IAChD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;QAAC,aAAa,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IAChE,iFAAiF;IACjF,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACvF,sGAAsG;IACtG,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QACnF,KAAK,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,UAAU,EAAE,CAAC,CAAC;QACjG,OAAO;IACT,CAAC;IACD,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;QAAC,UAAU,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IACzD,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,MAAM;YAAE,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IACD,uGAAuG;IACvG,wCAAwC;IACxC,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;QACpF,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,IAAK,GAAG,CAAC,WAAW,EAAE,MAAgC,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5J,IAAI,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;YAC5C,IAAI,QAAQ,KAAK,MAAM;gBAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxE,IAAI,UAAU,CAAC,MAAM,CAAC;gBAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;IACH,CAAC;IACD,wEAAwE;IACxE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,aAAa,CAAC,EAAE,CAAC;QAAE,EAAE,GAAG,WAAW,CAAC,aAAa,CAAC,EAAE,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/F,MAAM,KAAK,GAAG,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACpE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YAAE,QAAQ,EAAE,CAAC;YAAC,MAAM;QAClC,oGAAoG;QACpG,KAAK,MAAM,CAAC,CAAC,CAAC;YAAC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;gBAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM;QAAC,CAAC;QAC5I,KAAK,WAAW,CAAC;QAAC,KAAK,eAAe,CAAC,CAAC,CAAC;YAAC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,MAAM;gBAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM;QAAC,CAAC;QACxJ,KAAK,WAAW;YAAE,IAAI,KAAK;gBAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAAC,MAAM;QACpD,KAAK,YAAY,CAAC,CAAC,CAAC;YAAC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAAC,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAAC,MAAM;QAAC,CAAC;QACrH,KAAK,eAAe;YAAE,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAK,KAAK,CAAC,MAAoB,CAAC,IAAI,KAAK,OAAO,CAAC;gBAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAAC,MAAM;QACjI,KAAK,UAAU;YAAE,SAAS,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM;QACrC,KAAK,UAAU;YAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM;QACtC,KAAK,QAAQ,CAAC;QAAC,KAAK,aAAa;YAAE,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;gBAAE,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAAC,MAAM;QACnG,KAAK,MAAM;YAAE,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;gBAAE,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAAC,MAAM;QAC3E,KAAK,SAAS;YAAE,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;gBAAE,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAAC,MAAM;QACjF,KAAK,aAAa;YAAE,IAAI,KAAK;gBAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAAC,MAAM;QAC/D,KAAK,YAAY;YAAE,IAAI,KAAK;gBAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAAC,MAAM;QAC9D,KAAK,YAAY;YAAE,IAAI,EAAE,KAAK,SAAS,IAAI,KAAK;gBAAE,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAAC,MAAM;QACzF,KAAK,aAAa;YAAE,WAAW,EAAE,CAAC;YAAC,MAAM;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,MAA0B,EAAE,EAAE;IAC9C,MAAM,EAAE,GAAG,MAA4B,CAAC;IACxC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,iBAAiB,IAAI,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AACzF,CAAC,CAAC;AAEF,wGAAwG;AACxG,SAAS,eAAe,CAAC,KAAoB;IAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,aAAa,CAAC;IAC1F,IAAK,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,MAAgC,EAAE,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACtH,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,cAAc,CAAC;IACrG,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,KAAK;YAAE,OAAO,UAAU,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;YAAE,OAAO,kBAAkB,CAAC;QACtD,IAAI,KAAK,CAAC,GAAG,KAAK,UAAU;YAAE,OAAO,kBAAkB,CAAC;QACxD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,kBAAkB,CAAC;QACrD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,oBAAoB,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;QAAE,OAAO,aAAa,CAAC;IACrE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;QAAE,OAAO,aAAa,CAAC;IACrE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,KAAoB;IACvC,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;IAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACzB,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;QACpE,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,eAAe,CAAC;QACxC,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ;YAAE,OAAO,iBAAiB,CAAC;QAC7D,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QACxE,IAAI,GAAG,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;QACnE,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,QAAQ,CAAC;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe;YAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;QACvH,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;gBAAE,OAAO,SAAS,CAAC;YAC/E,IAAI,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB;gBAAE,OAAO,UAAU,CAAC;YACtE,IAAI,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO,YAAY,CAAC;QACnE,CAAC;IACH,CAAC;IACD,IAAI,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC;QAAE,OAAO,aAAa,CAAC;IACrD,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC;IACvG,+FAA+F;IAC/F,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ;QAAE,OAAO,UAAU,CAAC;IACvF,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,OAAO;QAAE,OAAO,UAAU,CAAC;IAC1G,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC;IAC/D,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,YAAY;QAAE,OAAO,SAAS,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gGAAgG;AAChG,gGAAgG;AAEhG;;;GAGG;AACH,MAAM,QAAQ,GAAG;IACf,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,IAAqB,EAAE,IAAI,EAAE,SAA+B;IACjG,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,SAAuD;CAC7G,CAAC;AAEF,SAAS,aAAa,CAAC,IAAa,EAAE,GAAY;IAChD,IAAI,QAAQ,CAAC,QAAQ;QAAE,OAAO;IAC9B,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,6FAA6F;QAC7F,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,YAAY;YAAE,OAAO;QAC/C,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5G,UAAU,CAAC,CAAC,CAAC,CAAC;QACd,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC1E,4EAA4E;QAC5E,QAAQ,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,QAAQ,GAAG,IAAI;YAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7G,CAAC;IACD,IAAI,GAAG,EAAE,CAAC;QAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;QAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IAAC,CAAC;AACxD,CAAC;AAED,SAAS,WAAW,CAAC,QAAQ,GAAG,KAAK;IACnC,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO;IAC7B,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO;QAAE,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAC7E,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACzF,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC7E,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,sGAAsG;AACtG,SAAS,QAAQ,CAAC,KAAgB,EAAE,SAAoC;IACtE,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,MAAM,OAAO,GAAG,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,MAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;IACvG,WAAW,EAAE,CAAC;IACd,IAAI,GAAG;QAAE,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,KAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;AAKpF,IAAI,QAAQ,GAAyB,GAAG,EAAE,GAAE,CAAC,CAAC;AAE9C,SAAS,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAuC;IACzE,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACvB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAmB,CAAC;IACzC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,CAAC,CAAC,CAAC;QACd,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,CAAC,KAAoB,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,GAAG,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5H,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,IAAc,EAAE,MAAkB,EAAE,QAAQ,GAAG,KAAK,EAAE,IAAa,EAAE,EAAE,CAClG,kBAAQ,IAAI,EAAC,UAAU,EAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,aACjF,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,GAAG,EAAA,eAAM,SAAS,EAAC,eAAe,YAAE,KAAK,GAAQ,EAAC,IAAI,IAAI,eAAM,SAAS,EAAC,cAAc,YAAE,IAAI,GAAQ,IAC/G,CAAC;IACZ,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,CAAE,KAAK,CAAC,MAAoB,CAAC,MAAM,CAAC,CAAC;IAC1G,OAAO,YAAY,CAAC,cAAK,SAAS,EAAC,kBAAkB,EAAC,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,YACxI,eAAK,SAAS,EAAC,gBAAgB,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,aAC7N,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE;oBAC7G,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBACvD,IAAI,CAAC,MAAM,CAAC,MAAM;wBAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC1D,cAAc,EAAE,CAAC;gBACnB,CAAC,CAAC,EACD,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,EACnJ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,EACvG,cAAK,EACJ,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,SAAS,CAAC,EACxH,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,WAAW,CAAC,EAC7H,GAAG,IAAI,8BACN,cAAK,EACJ,IAAI,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAChL,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAC7F,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,IACrH,EACH,cAAK,EACJ,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EACzF,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,IACrG,GACF,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,MAAM,EAAyB;IAChD,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,SAAS,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjF,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,cAAK,SAAS,EAAC,YAAY,EAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAC,EAAE,GAAE,CAAC;IAC3F,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,KAAC,IAAI,IAAC,IAAI,EAAC,SAAS,EAAC,SAAS,EAAC,8BAA8B,GAAE,CAAC;IACpG,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,EAAC,SAAS,EAAC,+CAA+C,GAAE,CAAC;IACjH,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,eAAM,SAAS,EAAC,uBAAuB,EAAC,IAAI,EAAC,KAAK,gBAAa,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC;IACpH,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM;QAAE,OAAO,cAA0B,SAAS,EAAC,4BAA4B,EAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,EAAC,EAAE,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAjH,MAAM,CAAC,OAAO,CAAsG,CAAC;IACrK,OAAO,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,8BAA8B,GAAE,CAAC;AACvE,CAAC;AAED,SAAS,GAAG,CAAC,KAA2C;IACtD,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC1D,SAAS,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACtI,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,CAAC,KAAsB,EAAE,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,KAAK;QAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAClJ,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChJ,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3J,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IAC1D,6FAA6F;IAC7F,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACvG,OAAO,eAAK,SAAS,EAAE,SAAS,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,mBAClG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,aAAa,EAC/G,UAAU,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;YAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,aACtG,gBAAM,SAAS,EAAC,aAAa,aAC3B,KAAC,OAAO,IAAC,MAAM,EAAE,MAAM,GAAG,EACzB,OAAO,IAAI,eAAM,SAAS,EAAC,gBAAgB,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,gBAAc,CAAC,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,GAAG,IAC7I,EACN,CAAC,MAAM,CAAC,MAAM,IAAI,eAAM,SAAS,EAAC,cAAc,YAAE,KAAK,GAAQ,EAC/D,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,EAChE,CAAC,MAAM,CAAC,MAAM,IAAI,iBAAQ,SAAS,EAAC,cAAc,EAAC,KAAK,EAAE,CAAC,CAAC,yBAAyB,CAAC,gBAAc,CAAC,CAAC,qBAAqB,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,KAAK;oBAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YACxP,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,GAAE,GAAS,IAC3B,CAAC;AACT,CAAC;AAED,SAAS,YAAY,CAAC,KAAkC;IACtD,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,OAAO,cAAK,SAAS,EAAC,kBAAkB,YACtC,iBAAQ,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE,CAAC,CAAC,uBAAuB,CAAC,gBAAc,CAAC,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,YACxN,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,GAAE,GAAS,GAC1B,CAAC;AACT,CAAC;AAED,SAAS,QAAQ,CAAC,KAAuC;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAClH,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;IACrC,OAAO,cAAK,SAAS,EAAC,UAAU,YAAC,KAAC,KAAK,IAAC,OAAO,EAAE,OAAO,GAAG,GAAM,CAAC;AACpE,CAAC;AAED,SAAS,UAAU,CAAC,KAAuC;IACzD,OAAO,KAAC,UAAU,IAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,EACrE,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAC5F,CAAC;AAED,gEAAgE;AAChE,SAAS,SAAS;IAChB,OAAO,KAAC,UAAU,KAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAEzF;;;;GAIG;AACH,SAAS,kBAAkB;IACzB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;QAAE,OAAO;IAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC5C,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IAClG,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;QACzB,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtF,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QAClD,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACvF,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1F,MAAM,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;QAC7D,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,GAAG;gBAAE,aAAa,CAAC,YAAY,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;;gBAC7D,aAAa,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,KAAK;IAC3B,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,GAAG,EAAU,CAAC,CAAC;IACnD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAc,IAAI,CAAC,CAAC;IACpD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC,CAAC;IACpE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;IACjC,QAAQ,GAAG,OAAO,CAAC;IACnB,aAAa,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,KAAK,kBAAkB,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChJ,WAAW,GAAG,GAAG,EAAE,GAAG,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC,KAAK;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK;QAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACnH,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACrD,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC;IACpC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,KAAK,CAAC,gBAAgB,GAAG,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IACnF,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3C,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC;IAEvB,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,OAAO,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,4FAA4F;IAC5F,SAAS,CAAC,GAAG,EAAE,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,kBAAkB,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAE1G,mFAAmF;IACnF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,GAAG,GAAG;YACV,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,IAAI;YAC7D,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI;YACjD,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI;SAC9C,CAAC,MAAM,CAAC,CAAC,OAAO,EAAyB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACxD,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,iGAAiG;IACjG,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,mGAAmG;IACnG,SAAS,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC;IAEvC,mEAAmE;IACnE,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,iFAAiF;IACjF,SAAS,CAAC,GAAG,EAAE,GAAG,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE1C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG;YACf,6FAA6F;YAC7F,MAAM,CAAU,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC1E,MAAM,CAAgJ,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;gBACjL,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9C,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAE,KAAK,CAAC,MAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;gBACjG,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,WAAW,IAAI,OAAO,CAAC,GAAG,KAAK,WAAW,CAAC;oBAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAChI,IAAI,OAAO,CAAC,YAAY;oBAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACnE,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;gBACpF,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,0EAA0E;oBAC1E,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBACxC,IAAI,CAAC,KAAK,EAAE,CAAC;wBAAC,aAAa,EAAE,CAAC;wBAAC,OAAO;oBAAC,CAAC;oBACxC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;oBACrH,IAAI,KAAK,CAAC,OAAO;wBAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC/F,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;wBAC1F,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBAChD,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpD,CAAC;oBACD,aAAa,EAAE,CAAC;oBAChB,OAAO;gBACT,CAAC;gBACD,2FAA2F;gBAC3F,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAE,KAAK,CAAC,MAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBACzI,WAAW,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;gBAClG,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;oBAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAK,KAAK,CAAC,MAAoB,CAAC,GAAG,CAAC,CAAC;gBACtG,gGAAgG;gBAChG,4FAA4F;gBAC5F,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS;oBAAE,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;gBACzF,cAAc,EAAE,CAAC;gBACjB,aAAa,EAAE,CAAC;YAClB,CAAC,CAAC;YACF,MAAM,CAAwE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;gBACxG,wFAAwF;gBACxF,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC5E,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC5E,MAAM,OAAO,GAAG,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,MAAoB,CAAC,OAAO;oBAC5E,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACrI,IAAI,MAAM,EAAE,CAAC;oBAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBAAC,OAAO;gBAAC,CAAC;gBACrF,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;oBAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBAAC,OAAO;gBAAC,CAAC;gBACxG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACtI,CAAC,CAAC;YACF,6FAA6F;YAC7F,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,CAAmC,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YACpH,MAAM,CAAqC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACnH,+FAA+F;YAC/F,MAAM,CAAiE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;gBAClG,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK;oBAAE,WAAW,EAAE,CAAC;qBACtC,IAAI,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAAE,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YACnF,CAAC,CAAC;SACH,CAAC;QACF,MAAM,KAAK,GAAG,CAAC,KAAoB,EAAE,EAAE;YACrC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,QAAQ,EAAE,CAAC;gBACb,sFAAsF;gBACtF,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,kGAAkG;YAClG,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;YAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;gBAAC,KAAK,CAAC,cAAc,EAAE,CAAC;gBAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAClF,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;gBAAC,KAAK,CAAC,cAAc,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC7F,IAAI,GAAG,IAAI,KAAK,CAAC,QAAQ,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ;gBAAE,KAAK,CAAC,cAAc,EAAE,CAAC;QAChF,CAAC,CAAC;QACF,MAAM,aAAa,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAwB,CAAC;YAC9C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC,iBAAiB,CAAC;gBAAE,OAAO;YACjD,IAAI,SAAS,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC,2CAA2C,CAAC,EAAE,CAAC;gBAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YACxH,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,CAAC,KAAiB,EAAE,EAAE;YACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YACrD,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,WAAW,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACvD,CAAC,CAAC;QACF,yCAAyC;QACzC,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,EAAE,CAAC,QAAQ,CAAE,KAAyC,CAAC,MAAM,CAAC,CAAC;QACjG,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QACpD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,kBAAkB,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,8EAA8E;QAC9E,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,SAAS,GAAG,GAAG,EAAE,GAAG,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAAC,QAAQ,GAAG,IAAI,CAAC;YAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC;QACxH,MAAM,OAAO,GAAG,GAAG,EAAE,GAAG,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;YAAC,QAAQ,GAAG,KAAK,CAAC;YAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC;QACzG,qEAAqE;QACrE,MAAM,SAAS,GAAG,CAAC,KAAgB,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;QACtH,MAAM,QAAQ,GAAG,CAAC,KAAgB,EAAE,EAAE;YACpC,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAAE,OAAO;YAC7B,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YACxB,iGAAiG;YACjG,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,KAAK,CAAC,YAAY;gBAAE,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC;QACjE,CAAC,CAAC;QACF,0FAA0F;QAC1F,MAAM,IAAI,GAAG,CAAC,KAAgB,EAAE,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC;QACpH,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC1C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5C,kFAAkF;QAClF,4FAA4F;QAC5F,+FAA+F;QAC/F,2FAA2F;QAC3F,mFAAmF;QACnF,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,UAAU,GAAG,OAAO,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,GAAG,EAAE;YACxF,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAChC,SAAS,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,IAAI,WAAW;YAAE,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QAClD,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACxD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACpD,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACjD,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACxD,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAChD,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACxC,OAAO,GAAG,EAAE;YACV,WAAW,EAAE,CAAC;YACd,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC;YAC1E,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC7C,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/C,UAAU,EAAE,UAAU,EAAE,CAAC;YACzB,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAChC,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;YACvD,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;YACzD,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACjD,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC3D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACvD,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACpD,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC3D,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACnD,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,KAAK,EAAE,KAAyB,EAAE,EAAE;QAClD,MAAM,GAAG,GAAgB,KAAK,CAAC,GAAG,CAAC;QACnC,sFAAsF;QACtF,oFAAoF;QACpF,IAAI,WAAW,GAAG,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC;QACtD,IAAI,aAAwD,CAAC;QAC7D,MAAM,mBAAmB,GAAG,GAAG,EAAE;YAC/B,IAAI,CAAC,WAAW;gBAAE,OAAO;YACzB,WAAW,GAAG,KAAK,CAAC;YACpB,YAAY,CAAC,aAAa,CAAC,CAAC;YAC5B,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAChE,CAAC,CAAC;QACF,IAAI,WAAW,EAAE,CAAC;YAChB,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC3D,UAAU,CAAC,CAAC,CAAC,CAAC;YACd,2EAA2E;YAC3E,mEAAmE;YACnE,aAAa,GAAG,UAAU,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QAC1D,CAAC;QACD,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;QAChB,sFAAsF;QACtF,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAA4C,cAAc,CAAC,CAAC;YACzF,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;YACjC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;QAC3B,8FAA8F;QAC9F,IAAI,CAAC;YAAC,WAAW,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;QACxF,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAErF,8EAA8E;QAC9E,MAAM,cAAc,GAAG,OAAO,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QACrG,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAA+B,CAAC;QAChF,IAAI,cAAc;YAAE,MAAM,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAC3D,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,CAAC;gBACV,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACpB,iEAAiE;gBACjE,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC1D,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACpC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAmB,CAAC;oBACzC,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK;wBAAE,WAAW,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;oBAClE,sDAAsD;oBACtD,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,MAAM;wBAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACrD,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QAC1B,CAAC;QACD,yFAAyF;QACzF,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAK,KAAK,CAAC,MAAgC,EAAE,IAAI,KAAK,MAAM,CAAC;YAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/H,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QACzB,cAAc,EAAE,CAAC;QAEjB,GAAG,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,kBAAkB,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACnE,GAAG,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACtE,+DAA+D;QAC/D,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAClF,GAAG,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE;YACjC,IAAI,KAAK,IAAK,KAAK,CAAC,MAAgC,EAAE,IAAI,KAAK,MAAM;gBAAE,WAAW,GAAG,KAAK,CAAC,EAAE,CAAC;YAC9F,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;gBAAE,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;YAC9C,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3B,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,kCAAkC;QAClC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE;YACvC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAmB,CAAC;gBACzC,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;oBAAE,SAAS;gBACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;gBAC3C,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI;oBAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjE,CAAC;QACH,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACnC,WAAW,EAAE,CAAC;QACd,GAAG,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QACnC,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAChC,kHAAkH;QAClH,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,6BAA6B,CAAC,CAAC;QACtE,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,IAAI,gBAAgB,CAAC,GAAG,EAAE;gBACxB,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,GAAG,CAAC,CAAC;gBAC3C,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;oBAAC,KAAK,GAAG,IAAI,CAAC;oBAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,CAAC;YAClE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,oFAAoF;QACpF,GAAG,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE;YACnC,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;gBAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC3G,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACpB,IAAI,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;gBAAE,OAAO;YACjG,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3F,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACpJ,CAAC,CAAC,CAAC;QACH,kBAAkB,EAAE,CAAC;QACrB,YAAY,EAAE,CAAC;QACf,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC,eAAe,EAAE,CAAC;YACtC,mFAAmF;YACnF,qFAAqF;YACrF,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC9C,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACnF,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBACxC,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACjD,MAAM,IAAI,GAAG,OAAO,EAAE,qBAAqB,EAAE,CAAC;oBAC9C,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBACrD,CAAC,CAAC,CAAC;gBACH,qFAAqF;gBACrF,wFAAwF;gBACxF,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAE,KAAK,CAAC,MAAgC,EAAE,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC9H,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBACzC,MAAM,MAAM,GAAG,KAAK,CAAC,MAA+B,CAAC;oBACrD,IAAI,MAAM,EAAE,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS;wBAAE,OAAO,IAAI,CAAC;oBACjE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACrC,IAAI,CAAC,IAAI;wBAAE,OAAO,IAAI,CAAC;oBACvB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBAChE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;4BACvD,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BACrD,MAAM,IAAI,GAAG,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;4BAC3E,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;wBACrD,CAAC,CAAC,CAAC,CAAC;gBACR,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,QAAQ,IAAI,SAAS;oBAAE,MAAM;gBAC3E,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;YAC9C,MAAM,WAAW,GAAG,CAAC,GAA8B,EAAE,EAAE;gBACrD,IAAI,CAAC;oBAAC,OAAO,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAAC,OAAO,KAAK,CAAC;gBAAC,CAAC;YACjF,CAAC,CAAC;YACF,MAAM,cAAc,GAAG,GAAG,EAAE;gBAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;gBAC9B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBACpE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAmB,CAAC;oBACzC,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC;wBAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACxE,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBAC3B,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;4BAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,qBAAqB,EAAE,CAAC;4BAC3E,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;4BACnF,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gCACnG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BACxB,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC,CAAC;YACF,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,IAAI;gBAAE,mBAAmB,EAAE,CAAC;YAC1C,MAAM,UAAU,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,SAAS,EAAE,CAAC;gBAClB,yFAAyF;gBACzF,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC5B,8EAA8E;gBAC9E,+EAA+E;gBAC/E,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC5B,IAAI,QAAQ,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;oBACjC,8EAA8E;oBAC9E,+DAA+D;oBAC/D,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;wBAChC,MAAM,IAAI,GAAG,GAAG,EAAE;4BAChB,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;4BACjC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;wBACzF,CAAC,CAAC;wBACF,IAAI,IAAI,EAAE,EAAE,CAAC;4BAAC,OAAO,EAAE,CAAC;4BAAC,OAAO;wBAAC,CAAC;wBAClC,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE;4BAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;wBAC9C,MAAM,MAAM,GAAG,GAAG,EAAE;4BAClB,aAAa,CAAC,IAAI,CAAC,CAAC;4BACpB,YAAY,CAAC,KAAK,CAAC,CAAC;4BACpB,MAAM,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;4BAC1D,OAAO,EAAE,CAAC;wBACZ,CAAC,CAAC;wBACF,wEAAwE;wBACxE,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBACrC,oFAAoF;wBACpF,mFAAmF;wBACnF,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;wBACvD,MAAM,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;oBACzD,CAAC,CAAC,CAAC;oBACH,+EAA+E;oBAC/E,4EAA4E;oBAC5E,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,mBAAmB,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC7E,OAAO,eAAK,SAAS,EAAC,UAAU,iBAAc,MAAM,aAClD,KAAC,QAAQ,IAAC,SAAS,EAAE,SAAS,GAAG,EACjC,KAAC,aAAa,IACZ,SAAS,EAAC,SAAS,EACnB,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,UAAU,EACtB,mBAAmB,EAAE,GAAG,EACxB,2BAA2B,EAAE,YAAY,EACzC,kBAAkB,EAAE,SAAS,EAC7B,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,GACrC,EACD,OAAO,IAAI,KAAC,cAAc,IAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAClG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAC,OAAO,MAAM,KAAK,CAAG,CAAC,EACxD,KAAK,IAAI,KAAC,UAAU,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EACtD,IAAI,IAAI,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EACjE,KAAC,aAAa,KAAE,EACf,SAAS,IAAI,CAAC,SAAS,IAAI,KAAC,WAAW,KAAE,IACtC,CAAC;AACT,CAAC","sourcesContent":["// The shell: a trusted local page that fills the window and hosts the dock (dockview): tabs in the\n// titlebar row, splits, the new-tab page, decks, the app's panel tab, link drags into the dock,\n// keyboard shortcuts, overlays (menus, palette, dialogs) and session layout persistence. Each web\n// tab is a native child webview that native code places over its pane (`tabs_sync`, state.ts).\n\nimport {\n DockviewReact, themeDark,\n type DockviewApi, type DockviewGroupPanel, type DockviewReadyEvent, type IDockviewHeaderActionsProps, type IDockviewPanel,\n type IDockviewPanelHeaderProps, type IDockviewPanelProps, type SerializedDockview,\n} from 'dockview';\nimport 'dockview/dist/styles/dockview.css';\nimport { useEffect, useRef, useState, type MouseEvent as ReactMouseEvent } from 'react';\nimport { createPortal } from 'react-dom';\nimport { carriesLink, dropUrl, placementFor, type Placement as DropPlacement } from '../linkDrop.ts';\nimport { besideGroup } from '../paneModel.ts';\nimport { tabProfile } from '../profileModel.ts';\nimport { accountAction } from './accountModel.ts';\nimport { accountLabel } from './AccountSwitcher.tsx';\nimport { openAppMenu } from './AppMenu.tsx';\nimport { invoke, listen } from './bridge.ts';\nimport { CommandPalette } from './CommandPalette.tsx';\nimport { DeckTabBadge, DeckView, focusColumn, runDeckCommand } from './DeckView.tsx';\nimport { openFind, stepFind } from './FindBar.tsx';\nimport { columnSourceUrl, createDeck, deckById, decks, findColumnTab, loadDecks, setRuntime } from './deckStore.ts';\nimport { installDevHost } from './devHost.ts';\nimport { useProfiles, useT } from './hooks.ts';\nimport { t } from './i18n.ts';\nimport { Icon, type IconName } from './icons.tsx';\nimport { MediaPanel } from './MediaPanel.tsx';\nimport { isMediaShortcut } from './mediaModel.ts';\nimport { NewTabPage } from './NewTabPage.tsx';\nimport type { PaletteAction, PaletteContext } from './paletteModel.ts';\nimport { PaneThemeHost, openPaneTheme } from './PaneTheme.tsx';\nimport { focusedCommands, installPluginCommands, notePanelActive, refreshPluginNames, runPluginCommand } from './pluginCommandStore.ts';\nimport { initDiag } from './diag.ts';\nimport { installSafeMode } from './safeStore.ts';\nimport { startNativeMenu } from './nativeMenu.ts';\nimport { hasFeature, site } from './site.ts';\nimport {\n flushLayer, flushSync, isWeb, loadLayout, newTabId, paneInfos, panelId, patchParams, resync, saveLayoutSoon, scheduleSync, setOverlay, setProfiles, shell, tabAction,\n type DeckParams, type PanelParams, type StartParams, type TabParams, type WebParams,\n} from './state.ts';\nimport { installSyncHost } from './syncHost.ts';\nimport { ResizeGrips, Titlebar, titlebarContextMenu } from './Titlebar.tsx';\nimport { openWorkspaceSave } from './TitlebarExtras.tsx';\nimport { WebPanel } from './WebPanel.tsx';\nimport { frameless, isTauri, onMaximizedChange, os } from './windowBinding.ts';\nimport { loadWorkspaces, restoreWorkspace, workspaceList, workspaces } from './workspaces.ts';\nimport { stepZoom, zoomTarget } from './zoomStore.ts';\nimport './shell.css';\n// After shell.css: a bevelled theme's edges (html[data-wb-edges]).\nimport './edges.css';\n\ntype Placement = { referencePanel: string; direction: 'within' | 'right' | 'below' };\n\n/** How long the startup cover waits, once the window is shown, for the visible site tabs to say they painted. */\nexport const STARTUP_CONTENT_WAIT = 8000;\n\n/** A development build (createShell's `dev`): the shell keeps the devtools shortcut. */\nlet devBuild = false;\nexport function setDevBuild(value: boolean) {\n devBuild = value;\n}\n\n/** Opens a web tab. `profile` defaults to the switcher's active account. */\nconst originOf = (url: string) => { try { return new URL(url).origin; } catch { return ''; } };\n\nfunction addWeb(url: string, placement?: Placement | DropPlacement, activate = true, profile = shell.profiles.active, besideOf?: string): IDockviewPanel | undefined {\n const api = shell.api;\n if (!api) return;\n const valid = placement && ('referencePanel' in placement ? !!api.getPanel(placement.referencePanel)\n : 'referenceGroup' in placement ? !!api.getGroup(placement.referenceGroup) : true);\n const reference = valid ? placement : undefined;\n return api.addPanel<WebParams>({\n id: newTabId(),\n component: 'web',\n title: t('wb.shell.tab.new'),\n params: { kind: 'web', url, profile: tabProfile(shell.profiles, profile).id, ...(besideOf ? { besideOf } : {}) },\n position: reference ?? (api.activeGroup ? { referenceGroup: api.activeGroup, direction: 'within' } : undefined),\n inactive: !activate,\n });\n}\n\n/**\n * The \"pane\" link setting: opens `url` in the side pane right of `source`'s group: split once, then\n * reused. A link clicked inside a side pane stays in that pane instead of splitting again.\n */\nfunction openBeside(url: string, source: IDockviewPanel, activate: boolean, profile?: string) {\n const api = shell.api;\n if (!api) return;\n const origin = isWeb(source) ? (source.params as WebParams).besideOf : undefined;\n if (origin) { addWeb(url, { referenceGroup: source.group.id, direction: 'within' }, activate, profile, origin); return; }\n const box = (group: DockviewGroupPanel) => {\n const rect = group.element.getBoundingClientRect();\n const besideOf = group.panels.map(panel => (panel.params as Partial<WebParams> | undefined)?.besideOf).filter((id): id is string => !!id);\n return { id: group.id, left: rect.left, top: rect.top, right: rect.right, bottom: rect.bottom, besideOf };\n };\n const target = besideGroup(box(source.group), api.groups.map(box));\n addWeb(url, target ? { referenceGroup: target, direction: 'within' } : { referencePanel: source.id, direction: 'right' }, activate, profile, source.group.id);\n}\n\n/** Opens the new-tab page (shell-drawn, no webview) in the active group; links from it keep `profile`. */\nfunction addStart(profile = shell.profiles.active, placement?: Placement): IDockviewPanel | undefined {\n const api = shell.api;\n if (!api) return;\n const reference = placement && api.getPanel(placement.referencePanel) ? placement : undefined;\n const panel = api.addPanel<StartParams>({\n id: newTabId(),\n component: 'start',\n title: t('wb.shell.tab.new'),\n params: { kind: 'start', profile: tabProfile(shell.profiles, profile).id },\n position: reference ?? (api.activeGroup ? { referenceGroup: api.activeGroup, direction: 'within' } : undefined),\n });\n focusAddress(panel.id);\n return panel;\n}\n\n/** A link chosen on a new-tab page opens in that page's place; the page itself goes away. */\nfunction openFromStart(url: string, profile: string, startId?: string) {\n const start = startId ? shell.api?.getPanel(startId) : undefined;\n if (!start) { addWeb(url, undefined, true, profile); return; }\n const group = start.group;\n addWeb(url, { referenceGroup: group.id, direction: 'within', index: group.panels.indexOf(start) }, true, profile);\n start.api.close();\n}\n\n/**\n * Account switcher click: a visible pane of that account gets focus; otherwise its home feed (or the\n * site's sign-in) opens in a new pane right of the focused one. `force` opens a tab in the focused\n * group instead; `url` opens that page of the account (e.g. the site's sign-out) beside.\n */\nfunction openAccount(profile: string, options: { force?: boolean; url?: string } = {}) {\n const api = shell.api;\n if (!api) return;\n const active = api.activePanel;\n const { homeUrl, loginUrl, isSiteUrl } = site();\n const action = options.url\n ? { type: 'open' as const, url: options.url, profile: tabProfile(shell.profiles, profile).id, where: 'beside' as const }\n : accountAction(shell.profiles, paneInfos(), active?.id, profile, { force: options.force, homeUrl, loginUrl, isSiteUrl });\n if (action.type === 'focus') {\n const panel = api.getPanel(action.paneId);\n panel?.api.setActive();\n if (panel) tabAction(panel.id, 'focus');\n return;\n }\n const placement = active ? { referencePanel: active.id, direction: action.where === 'tab' ? 'within' as const : 'right' as const } : undefined;\n addWeb(action.url, placement, true, action.profile);\n}\n\n// ---------------------------------------------------------------------------------------------\n// Decks of site columns (DeckView.tsx; only with `site.deck`)\n\nconst deckPanelId = (deckId: string) => `deck-${deckId}`;\n/** The last focused tab that is not a deck, for Ctrl+Shift+D back and forth. */\nlet lastNonDeck: string | null = null;\n/** The last web tab that was in front (Ctrl+F from the app's own tab searches it). */\nlet lastWeb: string | null = null;\n\n/**\n * The web tab Ctrl+F searches: the one given, else the last web tab that was in front and is still\n * on screen, else the first web tab on screen. The app's own tab has no page to search.\n */\nfunction findTarget(panel: IDockviewPanel | undefined): IDockviewPanel | undefined {\n if (panel && isWeb(panel)) return panel;\n const shown = (shell.api?.panels ?? []).filter(item => isWeb(item) && item.api.isVisible);\n return shown.find(item => item.id === lastWeb) ?? shown[0];\n}\n\n/** Opens (or focuses) a deck tab; with no deck yet, creates one. */\nfunction openDeck(deckId?: string) {\n const api = shell.api;\n if (!api || !site().deck) return;\n const deck = (deckId && deckById(deckId)) || decks.list[0] || createDeck(t('wb.shell.deck.default'));\n const existing = api.getPanel(deckPanelId(deck.id));\n if (existing) { existing.api.setActive(); return; }\n api.addPanel<DeckParams>({\n id: deckPanelId(deck.id), component: 'deck', title: deck.name, params: { kind: 'deck', deckId: deck.id },\n position: api.activeGroup ? { referenceGroup: api.activeGroup, direction: 'within' } : undefined,\n });\n}\n\n/** Ctrl+Shift+D: to the deck, and from the deck back to the tab you came from. */\nfunction toggleDeck() {\n const api = shell.api;\n const active = api?.activePanel;\n if (active && (active.params as TabParams).kind === 'deck') {\n const back = lastNonDeck ? api?.getPanel(lastNonDeck) : undefined;\n back?.api.setActive();\n if (back && isWeb(back)) tabAction(back.id, 'focus');\n return;\n }\n openDeck();\n}\n\n/** The deck a shortcut is about: the column's deck (keys pressed in a column), else the active deck tab. */\nfunction deckFor(id?: string): string | null {\n if (id !== undefined) {\n const found = findColumnTab(id);\n if (found) return found.deck.id;\n const params = shell.api?.getPanel(id)?.params as TabParams | undefined;\n return params?.kind === 'deck' ? params.deckId : null;\n }\n const params = shell.api?.activePanel?.params as TabParams | undefined;\n return params?.kind === 'deck' ? params.deckId : null;\n}\n\nfunction openPanel(section?: string, from?: string) {\n const api = shell.api;\n if (!api) return;\n const existing = api.getPanel(panelId());\n const nonce = Date.now();\n if (existing) {\n if (section) existing.api.updateParameters({ section, nonce });\n existing.api.setActive();\n return;\n }\n // Open beside the site so both stay visible; a second group means split view.\n const reference = from && api.getPanel(from) ? { referencePanel: from, direction: 'right' as const } : undefined;\n api.addPanel<PanelParams>({ id: panelId(), component: 'panel', title: site().panel.title, params: { kind: 'panel', section, nonce }, position: reference });\n}\n\nfunction closeTab(panel: IDockviewPanel) {\n if ((panel.params as TabParams).pinned) return;\n if (isWeb(panel)) { const { url, profile } = panel.params as WebParams; shell.closed.push({ url, profile, title: panel.api.title || undefined }); }\n panel.api.close();\n}\n\nexport function splitTab(panel: IDockviewPanel, direction: 'right' | 'below') {\n // A lone tab cannot be moved out of its group, so split opens a copy of it instead.\n if (panel.group.panels.length > 1) {\n panel.api.moveTo({ group: panel.group, position: direction === 'right' ? 'right' : 'bottom' });\n } else if (isWeb(panel)) {\n const { url, profile } = panel.params as WebParams;\n addWeb(url, { referencePanel: panel.id, direction }, true, profile);\n }\n}\n\nfunction cycleTabs(step: number) {\n const group = shell.api?.activeGroup;\n if (!group || group.panels.length < 2) return;\n const index = group.panels.findIndex(panel => panel.id === group.activePanel?.id);\n group.panels[(index + step + group.panels.length) % group.panels.length]?.api.setActive();\n}\n\nfunction focusAddress(id: string) {\n invoke('shell_focus').catch(() => {});\n requestAnimationFrame(() => window.dispatchEvent(new CustomEvent('bt-focus-address', { detail: id })));\n}\n\nlet togglePalette: () => void = () => {};\nlet toggleMedia: () => void = () => {};\n\nfunction paletteContext(): PaletteContext {\n const panels = shell.api?.panels.filter(isWeb) ?? [];\n const deck = site().deck;\n return {\n tabs: panels.map(panel => ({ id: panel.id, title: panel.api.title ?? '', url: (panel.params as WebParams).url, favicon: (panel.params as WebParams).favicon })),\n profiles: shell.profiles.profiles.map(({ id, name, color }) => ({ id, name, color })),\n activeProfile: shell.profiles.active,\n decks: deck ? decks.list.map(item => ({\n id: item.id, name: item.name,\n columns: item.columns.map(column => ({ id: column.id, title: deck.title(column.source, column.title).title, profile: column.profile })),\n })) : undefined,\n activeDeck: (() => { const params = shell.api?.activePanel?.params as TabParams | undefined; return params?.kind === 'deck' ? params.deckId : undefined; })(),\n workspaces: hasFeature('workspaces') ? workspaceList() : undefined,\n activeWorkspace: workspaces.active ?? undefined,\n // Plugin commands of the focused site tab (they run there).\n commands: focusedCommands(),\n };\n}\n\n/** Palette actions only navigate; account changes are completed by the user on the site's own pages. */\nfunction runPalette(action: PaletteAction) {\n const api = shell.api;\n if (!api) return;\n switch (action.type) {\n case 'focus-tab': api.getPanel(action.id)?.api.setActive(); break;\n case 'new-tab': shell.newTab(action.profile); break;\n case 'panel': openPanel(action.section, api.activePanel?.id); break;\n case 'open': addWeb(action.url); break;\n case 'media': toggleMedia(); break;\n case 'deck': openDeck(action.deckId); break;\n case 'deck-new': openDeck(createDeck(`Deck ${decks.list.length + 1}`).id); break;\n case 'deck-add': openDeck(action.deckId); requestAnimationFrame(() => window.dispatchEvent(new CustomEvent('bt-deck-add', { detail: action.deckId }))); break;\n case 'deck-focus': openDeck(action.deckId); requestAnimationFrame(() => focusColumn(action.deckId, action.columnId)); break;\n case 'plugin-command': runPluginCommand(action.tab, action.command); break;\n case 'workspace': void restoreWorkspace(action.id); break;\n case 'workspace-save': openWorkspaceSave(); break;\n case 'find': runShortcut('find'); break;\n case 'menu': openAppMenu({ keyboard: true }); break;\n }\n}\n\nfunction runShortcut(shortcut: string, id?: string) {\n const api = shell.api;\n if (!api) return;\n if (shortcut === 'command-palette') { togglePalette(); return; }\n // Alt+F / F10: the app menu, opened for the keyboard (pressed again, it closes).\n if (shortcut === 'app-menu') { openAppMenu({ keyboard: true, toggle: true }); return; }\n // Page zoom of the tab the keys were pressed in (a deck column zooms itself), else the pane in front.\n if (shortcut === 'zoom-in' || shortcut === 'zoom-out' || shortcut === 'zoom-reset') {\n void stepZoom(shortcut === 'zoom-in' ? 1 : shortcut === 'zoom-out' ? -1 : 0, id ?? zoomTarget());\n return;\n }\n if (shortcut === 'deck-toggle') { toggleDeck(); return; }\n if (shortcut.startsWith('column-') || shortcut === 'deck-compose') {\n const deckId = deckFor(id);\n if (deckId) runDeckCommand(deckId, shortcut);\n return;\n }\n // Find in page in a deck column: that column's own find bar (the keys were pressed in it, or it is the\n // focused column of the deck in front).\n if (shortcut === 'find' || shortcut === 'find-next' || shortcut === 'find-previous') {\n const column = id && !api.getPanel(id) ? id : id === undefined && (api.activePanel?.params as TabParams | undefined)?.kind === 'deck' ? zoomTarget() : null;\n if (column && findColumnTab(column)?.column) {\n if (shortcut !== 'find') stepFind(column, shortcut === 'find-next' ? 1 : -1);\n else if (hasFeature('find')) openFind(column);\n return;\n }\n }\n // A browser shortcut pressed inside a deck column acts on its deck tab.\n if (id && !api.getPanel(id) && findColumnTab(id)) id = deckPanelId(findColumnTab(id)!.deck.id);\n const panel = id === undefined ? api.activePanel : api.getPanel(id);\n switch (shortcut) {\n case 'new-tab': addStart(); break;\n // Find in page: the find bar of that tab (the one the keys were pressed in, else the one in front).\n case 'find': { const target = findTarget(panel); if (target && hasFeature('find')) { target.api.setActive(); openFind(target.id); } break; }\n case 'find-next': case 'find-previous': { const target = findTarget(panel); if (target) stepFind(target.id, shortcut === 'find-next' ? 1 : -1); break; }\n case 'close-tab': if (panel) closeTab(panel); break;\n case 'reopen-tab': { const tab = shell.closed.pop(); if (tab) addWeb(tab.url, undefined, true, tab.profile); break; }\n case 'focus-address': if (panel && (isWeb(panel) || (panel.params as TabParams).kind === 'start')) focusAddress(panel.id); break;\n case 'next-tab': cycleTabs(1); break;\n case 'prev-tab': cycleTabs(-1); break;\n case 'reload': case 'hard-reload': if (panel && isWeb(panel)) tabAction(panel.id, 'reload'); break;\n case 'back': if (panel && isWeb(panel)) tabAction(panel.id, 'back'); break;\n case 'forward': if (panel && isWeb(panel)) tabAction(panel.id, 'forward'); break;\n case 'split-right': if (panel) splitTab(panel, 'right'); break;\n case 'split-down': if (panel) splitTab(panel, 'below'); break;\n case 'open-panel': if (id === undefined || panel) openPanel(undefined, panel?.id); break;\n case 'media-panel': toggleMedia(); break;\n }\n}\n\nconst editable = (target: EventTarget | null) => {\n const el = target as HTMLElement | null;\n return !!el && (el.isContentEditable || /^(input|textarea|select)$/i.test(el.tagName));\n};\n\n/** Deck keys pressed in the shell itself (a column header, the deck bar) while a deck tab is active. */\nfunction deckShortcutFor(event: KeyboardEvent): string | null {\n const mod = event.ctrlKey || event.metaKey;\n if (mod && event.shiftKey && !event.altKey && event.code === 'KeyD') return 'deck-toggle';\n if ((shell.api?.activePanel?.params as TabParams | undefined)?.kind !== 'deck' || editable(event.target)) return null;\n if (event.ctrlKey && event.altKey && !event.shiftKey && event.code === 'KeyN') return 'deck-compose';\n if (event.altKey && !mod && !event.shiftKey) {\n const digit = /^Digit([1-9])$/.exec(event.code);\n if (digit) return `column-${digit[1]}`;\n if (event.key === 'PageUp') return 'column-page-prev';\n if (event.key === 'PageDown') return 'column-page-next';\n if (event.code === 'KeyR') return 'column-mark-read';\n if (event.code === 'KeyU') return 'column-jump-unread';\n }\n if (!mod && !event.altKey && event.key === '[') return 'column-prev';\n if (!mod && !event.altKey && event.key === ']') return 'column-next';\n return null;\n}\n\nfunction shortcutFor(event: KeyboardEvent): string | null {\n const deck = site().deck ? deckShortcutFor(event) : null;\n if (deck) return deck;\n const mod = event.ctrlKey || event.metaKey;\n const key = event.key.toLowerCase();\n if (mod && !event.altKey) {\n if (key === 't') return event.shiftKey ? 'reopen-tab' : 'new-tab';\n if (key === 'w') return event.shiftKey ? 'open-panel' : 'close-tab';\n if (key === 'l') return 'focus-address';\n if (key === 'k' && !event.shiftKey) return 'command-palette';\n if (key === 'f' && !event.shiftKey && hasFeature('find')) return 'find';\n if (key === 'tab') return event.shiftKey ? 'prev-tab' : 'next-tab';\n if (key === 'r') return 'reload';\n if (event.code === 'Backslash' || event.code === 'IntlBackslash') return event.shiftKey ? 'split-down' : 'split-right';\n if (hasFeature('zoom')) {\n if (key === '=' || key === '+' || event.code === 'NumpadAdd') return 'zoom-in';\n if (key === '-' || event.code === 'NumpadSubtract') return 'zoom-out';\n if (key === '0' || event.code === 'Numpad0') return 'zoom-reset';\n }\n }\n if (isMediaShortcut(event, os)) return 'media-panel';\n if (event.key === 'F3' && !mod && !event.altKey) return event.shiftKey ? 'find-previous' : 'find-next';\n // The app menu, like a browser's: F10, and Alt+F where Alt is not a typing key (not on macOS).\n if (event.key === 'F10' && !mod && !event.altKey && !event.shiftKey) return 'app-menu';\n if (event.altKey && !mod && !event.shiftKey && event.code === 'KeyF' && os !== 'macos') return 'app-menu';\n if (event.altKey && !mod && key === 'arrowleft') return 'back';\n if (event.altKey && !mod && key === 'arrowright') return 'forward';\n return null;\n}\n\n// ---------------------------------------------------------------------------------------------\n// Link drags: a link dragged out of a tab (or in from another app) drops as a new tab or split.\n\n/**\n * While active, the native tab webviews are hidden so the OS drag reaches the shell and dockview's\n * drop zones. `internal`: a drag that started in the shell itself (tab moves, list reordering).\n */\nconst linkDrag = {\n active: false, internal: false, url: null as string | null, from: undefined as string | undefined,\n lastOver: 0, sawOver: false, blockedUntil: 0, timer: undefined as ReturnType<typeof setInterval> | undefined,\n};\n\nfunction beginLinkDrag(from?: string, url?: string) {\n if (linkDrag.internal) return;\n if (!linkDrag.active) {\n // A tab that keeps announcing drags that never reach the shell cannot keep the panes hidden.\n if (Date.now() < linkDrag.blockedUntil) return;\n Object.assign(linkDrag, { active: true, sawOver: false, lastOver: Date.now(), url: null, from: undefined });\n setOverlay(1);\n document.querySelector('.bt-shell')?.classList.add('bt-shell--link-drag');\n // Esc or a drop outside the window may end the drag without any event here.\n linkDrag.timer = setInterval(() => { if (Date.now() - linkDrag.lastOver > 1500) endLinkDrag(true); }, 250);\n }\n if (url) { linkDrag.url = url; linkDrag.from = from; }\n}\n\nfunction endLinkDrag(timedOut = false) {\n if (!linkDrag.active) return;\n clearInterval(linkDrag.timer);\n if (timedOut && !linkDrag.sawOver) linkDrag.blockedUntil = Date.now() + 5000;\n Object.assign(linkDrag, { active: false, url: null, from: undefined, timer: undefined });\n document.querySelector('.bt-shell')?.classList.remove('bt-shell--link-drag');\n setOverlay(-1);\n}\n\n/** Opens the dropped link where it was dropped, in the source tab's account (else the active one). */\nfunction dropLink(event: DragEvent, placement: DropPlacement | undefined) {\n const url = dropUrl(type => event.dataTransfer?.getData(type) ?? '', linkDrag.url);\n const source = linkDrag.from ? shell.api?.getPanel(linkDrag.from) : undefined;\n const profile = source && isWeb(source) ? (source.params as WebParams).profile : shell.profiles.active;\n endLinkDrag();\n if (url) addWeb(url, placement, true, profile);\n}\n\nconst dragTypes = (event: DragEvent) => Array.from(event.dataTransfer?.types ?? []);\n\n// ---------------------------------------------------------------------------------------------\n\ntype Menu = { x: number; y: number; panel: IDockviewPanel };\nlet openMenu: (menu: Menu) => void = () => {};\n\nfunction ContextMenu({ menu, onClose }: { menu: Menu; onClose: () => void }) {\n const t = useT();\n const { panel } = menu;\n const params = panel.params as TabParams;\n const web = params.kind === 'web' ? params : null;\n const group = panel.group;\n useEffect(() => {\n setOverlay(1);\n const close = () => onClose();\n const onKey = (event: KeyboardEvent) => { if (event.key === 'Escape') onClose(); };\n window.addEventListener('blur', close);\n window.addEventListener('keydown', onKey);\n return () => { setOverlay(-1); window.removeEventListener('blur', close); window.removeEventListener('keydown', onKey); };\n }, []);\n const item = (label: string, icon: IconName, action: () => void, disabled = false, keys?: string) =>\n <button role=\"menuitem\" disabled={disabled} onClick={() => { onClose(); action(); }}>\n <Icon name={icon}/><span className=\"bt-menu-label\">{label}</span>{keys && <span className=\"bt-menu-keys\">{keys}</span>}\n </button>;\n const others = group.panels.filter(other => other.id !== panel.id && !(other.params as TabParams).pinned);\n return createPortal(<div className=\"bt-menu-backdrop\" onMouseDown={onClose} onContextMenu={event => { event.preventDefault(); onClose(); }}>\n <div className=\"bt-menu bt-pop\" role=\"menu\" style={{ left: Math.max(8, Math.min(menu.x, window.innerWidth - 248)), top: Math.max(8, Math.min(menu.y, window.innerHeight - 360)) }} onMouseDown={event => event.stopPropagation()}>\n {item(params.pinned ? t('wb.shell.menu.unpin') : t('wb.shell.menu.pin'), params.pinned ? 'unpin' : 'pin', () => {\n panel.api.updateParameters({ pinned: !params.pinned });\n if (!params.pinned) panel.api.moveTo({ group, index: 0 });\n saveLayoutSoon();\n })}\n {web && item(t('wb.shell.menu.duplicate'), 'duplicate', () => addWeb(web.url, { referencePanel: panel.id, direction: 'within' }, true, web.profile))}\n {web && item(t('wb.shell.menu.reload'), 'reload', () => tabAction(panel.id, 'reload'), false, 'Ctrl R')}\n <hr/>\n {item(t('wb.shell.menu.splitRight'), 'split', () => splitTab(panel, 'right'), !web && group.panels.length < 2, 'Ctrl \\\\')}\n {item(t('wb.shell.menu.splitDown'), 'splitDown', () => splitTab(panel, 'below'), !web && group.panels.length < 2, 'Ctrl ⇧ \\\\')}\n {web && <>\n <hr/>\n {site().themes && item(t('wb.shell.menu.paneTheme'), 'palette', () => openPaneTheme({ id: panel.id, profile: tabProfile(shell.profiles, web.profile).id, x: menu.x, y: menu.y }))}\n {item(t('wb.shell.menu.copyLink'), 'copy', () => void navigator.clipboard?.writeText(web.url))}\n {item(t('wb.shell.menu.openBrowser'), 'external', () => invoke('open_external_url', { url: web.url }).catch(() => {}))}\n </>}\n <hr/>\n {item(t('wb.shell.menu.close'), 'close', () => closeTab(panel), !!params.pinned, 'Ctrl W')}\n {item(t('wb.shell.menu.closeOthers'), 'closeOthers', () => others.forEach(closeTab), others.length === 0)}\n </div>\n </div>, document.body);\n}\n\nfunction Favicon({ params }: { params: TabParams }) {\n const t = useT();\n const [broken, setBroken] = useState(false);\n useEffect(() => setBroken(false), [params.kind === 'web' ? params.favicon : '']);\n if (params.kind === 'panel') return <img className=\"bt-favicon\" src={site().logo} alt=\"\"/>;\n if (params.kind === 'start') return <Icon name=\"sparkle\" className=\"bt-favicon bt-favicon--glyph\"/>;\n if (params.kind === 'deck') return <Icon name=\"grid\" className=\"bt-favicon bt-favicon--glyph bt-favicon--deck\"/>;\n if (params.loading) return <span className=\"bt-favicon bt-spinner\" role=\"img\" aria-label={t('wb.common.loading')}/>;\n if (params.favicon && !broken) return <img key={params.favicon} className=\"bt-favicon bt-favicon--img\" src={params.favicon} alt=\"\" onError={() => setBroken(true)}/>;\n return <Icon name=\"globe\" className=\"bt-favicon bt-favicon--glyph\"/>;\n}\n\nfunction Tab(props: IDockviewPanelHeaderProps<TabParams>) {\n const t = useT();\n const profiles = useProfiles();\n const [title, setTitle] = useState(props.api.title ?? '');\n useEffect(() => { const sub = props.api.onDidTitleChange(event => setTitle(event.title)); return () => sub.dispose(); }, [props.api]);\n const params = props.params;\n const panel = shell.api?.getPanel(props.api.id);\n const onContextMenu = (event: ReactMouseEvent) => { event.preventDefault(); if (panel) openMenu({ x: event.clientX, y: event.clientY, panel }); };\n const account = params.kind !== 'panel' && params.kind !== 'deck' && profiles.profiles.length > 1 ? tabProfile(profiles, params.profile) : null;\n const accountName = account ? `${accountLabel(account).title}${account.account ? ` (${site().accounts.handlePrefix}${account.account.handle})` : ''}` : '';\n const loading = params.kind === 'web' && !!params.loading;\n // Titles saved by older sessions (or before the page reports one) said \"New tab\" in English.\n const shown = params.kind === 'start' || !title || title === 'New tab' ? t('wb.shell.tab.new') : title;\n return <div className={`bt-tab${params.pinned ? ' pinned bt-tab--pinned' : ''}${loading ? ' bt-tab--loading' : ''}`}\n data-panel-id={props.api.id} title={account ? `${shown} · ${accountName}` : shown} onContextMenu={onContextMenu}\n onAuxClick={event => { if (event.button === 1 && panel) { event.preventDefault(); closeTab(panel); } }}>\n <span className=\"bt-tab-icon\">\n <Favicon params={params}/>\n {account && <span className=\"bt-tab-account\" style={{ background: account.color }} aria-label={t('wb.shell.tab.account', { name: accountName })}/>}\n </span>\n {!params.pinned && <span className=\"bt-tab-title\">{shown}</span>}\n {params.kind === 'deck' && <DeckTabBadge deckId={params.deckId}/>}\n {!params.pinned && <button className=\"bt-tab-close\" title={t('wb.shell.tab.closeTitle')} aria-label={t('wb.shell.menu.close')} onPointerDown={event => event.stopPropagation()} onClick={event => { event.stopPropagation(); if (panel) closeTab(panel); }}>\n <Icon name=\"close\"/></button>}\n </div>;\n}\n\nfunction GroupActions(props: IDockviewHeaderActionsProps) {\n const t = useT();\n return <div className=\"bt-group-actions\">\n <button className=\"bt-icon bt-newtab\" title={t('wb.shell.tab.newTitle')} aria-label={t('wb.shell.tab.new')} onClick={() => addStart(undefined, { referencePanel: props.group.activePanel?.id ?? '', direction: 'within' })}>\n <Icon name=\"plus\"/></button>\n </div>;\n}\n\nfunction AppPanel(props: IDockviewPanelProps<PanelParams>) {\n const section = props.params.section ? { name: props.params.section, nonce: props.params.nonce ?? 0 } : undefined;\n const Panel = site().panel.component;\n return <div className=\"bt-panel\"><Panel section={section}/></div>;\n}\n\nfunction StartPanel(props: IDockviewPanelProps<StartParams>) {\n return <NewTabPage panelId={props.api.id} profile={props.params.profile}\n onProfile={profile => { props.api.updateParameters({ profile }); saveLayoutSoon(); }}/>;\n}\n\n/** Every tab closed: the dock shows the new-tab page itself. */\nfunction Watermark() {\n return <NewTabPage/>;\n}\n\nconst components = { web: WebPanel, panel: AppPanel, start: StartPanel, deck: DeckView };\n\n/**\n * Groups whose top edge touches the dock top host their tabs in the titlebar row: their header is\n * TITLEBAR_H tall and transparent, the empty part drags the window. The leftmost one leaves room\n * for the logo, the rightmost one for the caption buttons.\n */\nfunction markTitlebarGroups() {\n const api = shell.api;\n const dock = document.querySelector('.bt-dock');\n if (!api || !dock) return;\n const bounds = dock.getBoundingClientRect();\n document.querySelector('.bt-shell')?.classList.toggle('bt-shell--empty', api.groups.length === 0);\n for (const group of api.groups) {\n const el = group.element;\n const rect = el.getBoundingClientRect();\n const top = group.api.location.type === 'grid' && Math.abs(rect.top - bounds.top) < 1;\n el.classList.toggle('bt-group--in-titlebar', top);\n el.classList.toggle('bt-group--tb-left', top && Math.abs(rect.left - bounds.left) < 1);\n el.classList.toggle('bt-group--tb-right', top && Math.abs(rect.right - bounds.right) < 1);\n const voidContainer = el.querySelector('.dv-void-container');\n if (voidContainer) {\n if (top) voidContainer.setAttribute('data-tauri-drag-region', '');\n else voidContainer.removeAttribute('data-tauri-drag-region');\n }\n }\n}\n\nexport default function Shell() {\n const contentReadyTabs = useRef(new Set<string>());\n const [menu, setMenu] = useState<Menu | null>(null);\n const [maximized, setMaximized] = useState(false);\n const [palette, setPalette] = useState<PaletteContext | null>(null);\n const [media, setMedia] = useState(false);\n const { overlays = [] } = site();\n openMenu = setMenu;\n togglePalette = () => { invoke('shell_focus').catch(() => {}); void refreshPluginNames(); setPalette(open => open ? null : paletteContext()); };\n toggleMedia = () => { if (isTauri && site().media) setMedia(open => !open); };\n shell.split = (id, direction) => { const panel = shell.api?.getPanel(id); if (panel) splitTab(panel, direction); };\n shell.openPanel = from => openPanel(undefined, from);\n shell.newTab = profile => { addStart(profile); };\n shell.openFromStart = openFromStart;\n shell.openAccount = openAccount;\n shell.openUrl = (url, profile) => { addWeb(url, undefined, true, profile); };\n shell.openPanelSection = section => openPanel(section, shell.api?.activePanel?.id);\n shell.shortcut = name => runShortcut(name);\n shell.run = runPalette;\n\n useEffect(() => {\n document.documentElement.dataset.os = os;\n if (!isTauri) return;\n const unlisten = onMaximizedChange(value => setMaximized(value));\n return () => { unlisten.then(dispose => dispose()).catch(() => {}); };\n }, []);\n // Maximize/restore changes the resize-band inset: re-send the tab rectangles once laid out.\n useEffect(() => { requestAnimationFrame(() => { markTitlebarGroups(); scheduleSync(); }); }, [maximized]);\n\n // Plugin palette commands, developer mode (live reload) and encrypted folder sync.\n useEffect(() => {\n if (!isTauri) return;\n const off = [\n hasFeature('pluginCommands') ? installPluginCommands() : null,\n hasFeature('developer') ? installDevHost() : null,\n hasFeature('sync') ? installSyncHost() : null,\n ].filter((dispose): dispose is () => void => !!dispose);\n return () => off.forEach(dispose => dispose());\n }, []);\n\n // Safe mode for this run (the host's flag): the titlebar says so and the chrome drops its theme.\n useEffect(() => (hasFeature('safeMode') ? installSafeMode() : undefined), []);\n // The native menu bar (macOS only; nativeMenu.ts): described from the state the in-app menu reads.\n useEffect(() => startNativeMenu(), []);\n\n // The site's own settings and events (e.g. X's Twitter/X wording).\n useEffect(() => site().start?.(), []);\n // Focus and layering diagnostics, when the app was started with them (`--diag`).\n useEffect(() => { void initDiag(); }, []);\n\n useEffect(() => {\n const unlisten = [\n // A tab saw its account sign in or out (native code already saved it): refresh the switcher.\n listen<unknown>('profiles-changed', ({ payload }) => setProfiles(payload)),\n listen<{ id: string; url?: string; title?: string; loading?: boolean; favicon?: string; focused?: boolean; unread?: number; contentReady?: boolean }>('tab-state', ({ payload }) => {\n const panel = shell.api?.getPanel(payload.id);\n const previousUrl = panel ? (panel.params as WebParams).url : decks.runtime.get(payload.id)?.url;\n if (payload.loading || (payload.url && previousUrl && payload.url !== previousUrl)) contentReadyTabs.current.delete(payload.id);\n if (payload.contentReady) contentReadyTabs.current.add(payload.id);\n const notifyStartup = () => window.dispatchEvent(new Event('bt-tab-startup-state'));\n if (!panel) {\n // A deck column (or a deck's compose dock) reports about its own webview.\n const found = findColumnTab(payload.id);\n if (!found) { notifyStartup(); return; }\n setRuntime(payload.id, { url: payload.url, title: payload.title, loading: payload.loading, unread: payload.unread });\n if (found.compose) site().deck?.compose?.navigated?.(payload.id, payload.url, payload.loading);\n if (payload.focused && found.column && decks.focus.get(found.deck.id) !== found.column.id) {\n decks.focus.set(found.deck.id, found.column.id);\n window.dispatchEvent(new CustomEvent('bt-decks'));\n }\n notifyStartup();\n return;\n }\n // Another site must not keep the previous one's icon until (or unless) it reports its own.\n const favicon = payload.favicon ?? (payload.url && originOf(payload.url) !== originOf((panel.params as WebParams).url) ? '' : undefined);\n patchParams(panel, { url: payload.url, loading: payload.loading, favicon, title: payload.title });\n if (payload.title !== undefined) panel.api.setTitle(payload.title || (panel.params as WebParams).url);\n // A click into a visible pane makes it the active tab. A tab that is no longer shown (a link it\n // opened just took its place in the group) reports a late focus too: it must not jump back.\n if (payload.focused && !panel.api.isActive && panel.api.isVisible) panel.api.setActive();\n saveLayoutSoon();\n notifyStartup();\n }),\n listen<{ url: string; from?: string; background: boolean; beside?: boolean }>('tab-open', ({ payload }) => {\n // Links opened from a tab stay in that tab's account; they never jump to another login.\n const source = payload.from ? shell.api?.getPanel(payload.from) : undefined;\n const column = payload.from && !source ? findColumnTab(payload.from) : null;\n const profile = source && isWeb(source) ? (source.params as WebParams).profile\n : column ? (column.column?.profile ?? decks.compose.get(column.deck.id)?.profile ?? shell.profiles.active) : shell.profiles.active;\n if (column) { addWeb(payload.url, undefined, !payload.background, profile); return; }\n if (payload.beside && source) { openBeside(payload.url, source, !payload.background, profile); return; }\n addWeb(payload.url, payload.from ? { referencePanel: payload.from, direction: 'within' } : undefined, !payload.background, profile);\n }),\n // Native code builds every tab webview anew (safe mode switched): it needs the layout again.\n listen('tabs-rebuild', () => resync()),\n listen<{ id: string; shortcut: string }>('tab-shortcut', ({ payload }) => runShortcut(payload.shortcut, payload.id)),\n listen<{ from: string; section?: string }>('open-panel', ({ payload }) => openPanel(payload.section, payload.from)),\n // A tab's link drag: `start` carries the natively validated link, `enter` is an external drag.\n listen<{ id: string; phase: 'start' | 'enter' | 'end'; url?: string }>('link-drag', ({ payload }) => {\n if (payload.phase === 'end') endLinkDrag();\n else if (shell.api?.getPanel(payload.id)) beginLinkDrag(payload.id, payload.url);\n }),\n ];\n const onKey = (event: KeyboardEvent) => {\n const shortcut = shortcutFor(event);\n if (shortcut) {\n // Leave text editing shortcuts (e.g. Ctrl+L/T in inputs) alone except tab management.\n event.preventDefault();\n runShortcut(shortcut);\n return;\n }\n if (!isTauri) return;\n // Browser-engine keys that make no sense in the shell itself (the tab webviews handle their own).\n const mod = event.ctrlKey || event.metaKey;\n const key = event.key.toLowerCase();\n if (event.key === 'F5') { event.preventDefault(); runShortcut('reload'); return; }\n if (mod && !event.altKey && (key === 'p' || key === 'f')) { event.preventDefault(); return; }\n if (mod && event.shiftKey && key === 'i' && !devBuild) event.preventDefault();\n };\n const onContextMenu = (event: MouseEvent) => {\n const target = event.target as Element | null;\n if (target?.closest?.('input, textarea')) return;\n if (frameless && target?.closest?.('.bt-group--in-titlebar .dv-void-container')) { titlebarContextMenu(event); return; }\n event.preventDefault();\n };\n const onMouseUp = (event: MouseEvent) => {\n if (event.button !== 3 && event.button !== 4) return;\n event.preventDefault();\n runShortcut(event.button === 3 ? 'back' : 'forward');\n };\n // The app's settings ask for a deck tab.\n const onDeckOpen = (event: Event) => openDeck((event as CustomEvent<string | undefined>).detail);\n window.addEventListener('bt-deck-open', onDeckOpen);\n if (isTauri) {\n window.addEventListener('contextmenu', onContextMenu);\n window.addEventListener('mouseup', onMouseUp);\n }\n const relayout = () => { markTitlebarGroups(); scheduleSync(); };\n // Native webviews cover drop zones; hide them for the duration of a tab drag.\n let dragging = false;\n const dragStart = () => { linkDrag.internal = true; endLinkDrag(); if (!dragging) { dragging = true; setOverlay(1); } };\n const dragEnd = () => { linkDrag.internal = false; if (dragging) { dragging = false; setOverlay(-1); } };\n // A link dragged in from another app straight onto the shell chrome.\n const dragEnter = (event: DragEvent) => { if (!linkDrag.internal && carriesLink(dragTypes(event))) beginLinkDrag(); };\n const dragOver = (event: DragEvent) => {\n if (!linkDrag.active) return;\n linkDrag.lastOver = Date.now();\n linkDrag.sawOver = true;\n // Anywhere outside dockview's zones (e.g. the titlebar of an empty dock) still accepts: new tab.\n event.preventDefault();\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'copy';\n };\n // Dockview stops propagation of drops it handled; this only sees drops outside its zones.\n const drop = (event: DragEvent) => { if (linkDrag.active) { event.preventDefault(); dropLink(event, undefined); } };\n window.addEventListener('keydown', onKey);\n window.addEventListener('resize', relayout);\n // `resize` fires before dockview has laid its groups out at the new size (its own\n // ResizeObserver does that), so the titlebar marks read stale rects there: the group at the\n // right edge lost `bt-group--tb-right` and its tabs ran under the titlebar buttons. The dock's\n // size changes are marked again one frame later, once dockview's own observer has laid out\n // (measured live: marking inside the same observer pass still read the old rects).\n const dockElement = document.querySelector('.bt-dock');\n let markFrame = 0;\n const dockResize = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => {\n cancelAnimationFrame(markFrame);\n markFrame = requestAnimationFrame(markTitlebarGroups);\n });\n if (dockElement) dockResize?.observe(dockElement);\n document.addEventListener('dragstart', dragStart, true);\n document.addEventListener('dragend', dragEnd, true);\n document.addEventListener('drop', dragEnd, true);\n document.addEventListener('dragenter', dragEnter, true);\n document.addEventListener('dragover', dragOver);\n document.addEventListener('drop', drop);\n return () => {\n endLinkDrag();\n unlisten.forEach(promise => promise.then(dispose => dispose(), () => {}));\n window.removeEventListener('keydown', onKey);\n window.removeEventListener('resize', relayout);\n dockResize?.disconnect();\n cancelAnimationFrame(markFrame);\n window.removeEventListener('bt-deck-open', onDeckOpen);\n window.removeEventListener('contextmenu', onContextMenu);\n window.removeEventListener('mouseup', onMouseUp);\n document.removeEventListener('dragstart', dragStart, true);\n document.removeEventListener('dragend', dragEnd, true);\n document.removeEventListener('drop', dragEnd, true);\n document.removeEventListener('dragenter', dragEnter, true);\n document.removeEventListener('dragover', dragOver);\n document.removeEventListener('drop', drop);\n };\n }, []);\n\n const onReady = async (event: DockviewReadyEvent) => {\n const api: DockviewApi = event.api;\n // Establish the cover before any restore-triggered sync creates a visible native tab.\n // This also keeps the no-raise path from exposing X while a late still is captured.\n let coverActive = isTauri && !!site().deferWindowShow;\n let coverWatchdog: ReturnType<typeof setTimeout> | undefined;\n const releaseStartupCover = () => {\n if (!coverActive) return;\n coverActive = false;\n clearTimeout(coverWatchdog);\n setOverlay(-1);\n document.documentElement.classList.remove('bt-startup-cover');\n };\n if (coverActive) {\n document.documentElement.classList.add('bt-startup-cover');\n setOverlay(1);\n // Guard shell initialization if settings or native startup never complete.\n // Once shell_ready succeeds, semantic X readiness owns this cover.\n coverWatchdog = setTimeout(releaseStartupCover, 10_000);\n }\n shell.api = api;\n // Chrome colors and fonts follow the theme; panes with their own theme follow theirs.\n site().themes?.attachDock(api);\n let restoreTabs = true;\n try {\n const settings = await invoke<{ homeUrl: string; restoreTabs: boolean }>('settings_get');\n shell.homeUrl = settings.homeUrl;\n restoreTabs = settings.restoreTabs;\n } catch { /* Defaults. */ }\n // Profiles before the first tabs_sync, so restored tabs open in their own account right away.\n try { setProfiles(await invoke('profiles_get')); } catch { /* Default profile only. */ }\n loadDecks(shell.profiles.profiles.map(profile => profile.id), shell.profiles.active);\n\n // A workspace chosen to open on start replaces the previous session's layout.\n const startWorkspace = isTauri && hasFeature('workspaces') ? (await loadWorkspaces()).default : null;\n const saved = startWorkspace ? null : loadLayout() as SerializedDockview | null;\n if (startWorkspace) await restoreWorkspace(startWorkspace);\n shell.restoring = true;\n try {\n if (saved) {\n api.fromJSON(saved);\n // Layouts saved before a rename still carry the old panel title.\n api.getPanel(panelId())?.api.setTitle(site().panel.title);\n for (const panel of [...api.panels]) {\n const params = panel.params as TabParams;\n if (params.kind === 'web') patchParams(panel, { loading: false });\n // Without session restore only pinned tabs come back.\n if (!restoreTabs && !params.pinned) panel.api.close();\n }\n }\n } catch (error) {\n console.warn('[shell] layout restore failed', error);\n api.clear();\n } finally {\n shell.restoring = false;\n }\n // A restored deck tab counts: deck sessions come back to their deck, not a new Home tab.\n if (!api.panels.some(panel => isWeb(panel) || (panel.params as TabParams | undefined)?.kind === 'deck')) addWeb(shell.homeUrl);\n shell.layoutReady = true;\n saveLayoutSoon();\n\n api.onDidLayoutChange(() => { markTitlebarGroups(); scheduleSync(); saveLayoutSoon(); });\n api.onDidAddGroup(() => requestAnimationFrame(markTitlebarGroups));\n api.onDidRemoveGroup(() => requestAnimationFrame(markTitlebarGroups));\n // The titlebar switcher highlights the focused pane's account.\n const paneChanged = () => window.dispatchEvent(new CustomEvent('bt-active-pane'));\n api.onDidActivePanelChange(event => {\n if (event && (event.params as TabParams | undefined)?.kind !== 'deck') lastNonDeck = event.id;\n if (event && isWeb(event)) lastWeb = event.id;\n notePanelActive(event?.id);\n scheduleSync();\n paneChanged();\n });\n // A renamed deck renames its tab.\n window.addEventListener('bt-decks', () => {\n for (const panel of api.panels) {\n const params = panel.params as TabParams;\n if (params.kind !== 'deck') continue;\n const name = deckById(params.deckId)?.name;\n if (name && panel.api.title !== name) panel.api.setTitle(name);\n }\n });\n api.onDidLayoutChange(paneChanged);\n paneChanged();\n api.onDidRemovePanel(scheduleSync);\n api.onDidAddPanel(scheduleSync);\n // Dockview's overflow list (the \"N more tabs\" button) is a shell popover: hide the tab webviews while it is open.\n const popover = document.querySelector('.bt-dock .dv-popover-anchor');\n if (popover) {\n let shown = false;\n new MutationObserver(() => {\n const open = popover.childElementCount > 0;\n if (open !== shown) { shown = open; setOverlay(open ? 1 : -1); }\n }).observe(popover, { childList: true });\n }\n // External (non-panel) drags that carry a link get dockview's split/tab drop zones.\n api.onUnhandledDragOverEvent(event => {\n if (!linkDrag.internal && (linkDrag.active || carriesLink(dragTypes(event.nativeEvent)))) event.accept();\n });\n api.onDidDrop(event => {\n if (linkDrag.internal || !(linkDrag.active || carriesLink(dragTypes(event.nativeEvent)))) return;\n const tabIndex = event.panel && event.group ? event.group.panels.indexOf(event.panel) : -1;\n dropLink(event.nativeEvent, placementFor({ position: event.position, groupId: event.group?.id, tabIndex: tabIndex >= 0 ? tabIndex : undefined }));\n });\n markTitlebarGroups();\n scheduleSync();\n if (isTauri && site().deferWindowShow) {\n // React commits dock placeholders after Dockview's ready callback. Keep the native\n // window hidden until their real bounds have been sent and its restored panes exist.\n for (let attempt = 0; attempt < 40; attempt++) {\n const visibleWeb = api.panels.filter(panel => isWeb(panel) && panel.api.isVisible);\n const webReady = visibleWeb.every(panel => {\n const element = shell.placeholders.get(panel.id);\n const rect = element?.getBoundingClientRect();\n return !!rect && rect.width > 1 && rect.height > 1;\n });\n // On the first run Dockview can report no visible panels for a frame after addPanel.\n // An empty `every()` must not reveal the native window before the loading shape mounts.\n const visibleDeck = api.panels.some(panel => (panel.params as TabParams | undefined)?.kind === 'deck' && panel.api.isVisible);\n const deckReady = api.panels.every(panel => {\n const params = panel.params as TabParams | undefined;\n if (params?.kind !== 'deck' || !panel.api.isVisible) return true;\n const deck = deckById(params.deckId);\n if (!deck) return true;\n return deck.columns.every(column => decks.ready.has(column.tabId)) &&\n (deck.columns.length === 0 || deck.columns.some(column => {\n const element = shell.placeholders.get(column.tabId);\n const rect = element?.isConnected ? element.getBoundingClientRect() : null;\n return !!rect && rect.width > 1 && rect.height > 1;\n }));\n });\n if ((visibleWeb.length > 0 || visibleDeck) && webReady && deckReady) break;\n await new Promise(resolve => setTimeout(resolve, 50));\n }\n const origin = new URL(site().homeUrl).origin;\n const matchesSite = (url: string | null | undefined) => {\n try { return !!url && new URL(url).origin === origin; } catch { return false; }\n };\n const visibleSiteIds = () => {\n const ids = new Set<string>();\n for (const panel of api.panels.filter(panel => panel.api.isVisible)) {\n const params = panel.params as TabParams;\n if (params.kind === 'web' && matchesSite(params.url)) ids.add(panel.id);\n if (params.kind === 'deck') {\n for (const column of deckById(params.deckId)?.columns ?? []) {\n const rect = shell.placeholders.get(column.tabId)?.getBoundingClientRect();\n const url = decks.runtime.get(column.tabId)?.url ?? columnSourceUrl(column.source);\n if (decks.ready.has(column.tabId) && rect && rect.width > 1 && rect.height > 1 && matchesSite(url)) {\n ids.add(column.tabId);\n }\n }\n }\n }\n return ids;\n };\n const coverIds = visibleSiteIds();\n if (!coverIds.size) releaseStartupCover();\n await flushLayer();\n try {\n await flushSync();\n // Give the shell webview two paint opportunities after its placeholder DOM is committed.\n await new Promise<void>(resolve => requestAnimationFrame(() => requestAnimationFrame(() => resolve())));\n await invoke('shell_ready');\n // The global watchdog protects initialization. Once shown, the visible X tabs\n // keep the shell cover until content is ready or the tab is no longer visible.\n clearTimeout(coverWatchdog);\n if (coverIds.size && coverActive) {\n // Keep the shell's loading shape over the native tab until X has a real page.\n // The toolbar remains usable to reload a slow or offline page.\n await new Promise<void>(resolve => {\n const done = () => {\n const visible = visibleSiteIds();\n return [...coverIds].every(id => !visible.has(id) || contentReadyTabs.current.has(id));\n };\n if (done()) { resolve(); return; }\n const check = () => { if (done()) finish(); };\n const finish = () => {\n clearInterval(poll);\n clearTimeout(limit);\n window.removeEventListener('bt-tab-startup-state', check);\n resolve();\n };\n // Dockview closes and deck layout changes do not always emit tab-state.\n const poll = setInterval(check, 200);\n // Never longer than this: a page that never says it painted (its script failed, the\n // engine held its frames back) shows as it is rather than behind a cover for good.\n const limit = setTimeout(finish, STARTUP_CONTENT_WAIT);\n window.addEventListener('bt-tab-startup-state', check);\n });\n // The X DOM signal can precede its separate native WebView surface by a frame.\n // Give that surface one compositor turn before exposing it under the shell.\n await new Promise(resolve => setTimeout(resolve, 100));\n }\n } finally {\n releaseStartupCover();\n }\n }\n };\n\n const chrome = frameless ? (maximized ? 'maximized' : 'restored') : 'native';\n return <div className=\"bt-shell\" data-chrome={chrome}>\n <Titlebar maximized={maximized}/>\n <DockviewReact\n className=\"bt-dock\"\n theme={themeDark}\n components={components}\n defaultTabComponent={Tab}\n rightHeaderActionsComponent={GroupActions}\n watermarkComponent={Watermark}\n onReady={event => void onReady(event)}\n />\n {palette && <CommandPalette context={palette} onRun={runPalette} onClose={() => setPalette(null)}/>}\n {overlays.map((Overlay, index) => <Overlay key={index}/>)}\n {media && <MediaPanel onClose={() => setMedia(false)}/>}\n {menu && <ContextMenu menu={menu} onClose={() => setMenu(null)}/>}\n <PaneThemeHost/>\n {frameless && !maximized && <ResizeGrips/>}\n </div>;\n}\n\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type MouseEvent as ReactMouseEvent } from 'react';
|
|
2
|
+
/** Right-click on empty titlebar space: the native system menu (Restore, Move, Size, ...). */
|
|
3
|
+
export declare function titlebarContextMenu(event: ReactMouseEvent | MouseEvent): void;
|
|
4
|
+
/**
|
|
5
|
+
* The 44px titlebar row. It sits under the dockview root: the top groups' tab headers are
|
|
6
|
+
* transparent and let clicks through to the drag layer, the logo and the caption buttons. The logo
|
|
7
|
+
* is part of the drag region, unless the app chose it as the menu's trigger (`ShellMenu.trigger`);
|
|
8
|
+
* everything else that is empty drags the window.
|
|
9
|
+
*/
|
|
10
|
+
export declare function Titlebar({ maximized }: {
|
|
11
|
+
maximized: boolean;
|
|
12
|
+
}): import("react").JSX.Element;
|
|
13
|
+
/**
|
|
14
|
+
* The shell webview covers the whole frameless window, so the OS never sees its edges:
|
|
15
|
+
* these grips start native resize drags. Tab webviews are inset by the same band (Rust clamps too).
|
|
16
|
+
*/
|
|
17
|
+
export declare function ResizeGrips(): import("react").JSX.Element;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect } from 'react';
|
|
3
|
+
import { RESIZE_BORDER } from "../chrome.js";
|
|
4
|
+
import { chipFor } from "../updateModel.js";
|
|
5
|
+
import { AccountSwitcher } from "./AccountSwitcher.js";
|
|
6
|
+
import { AppMenu, AppMenuLogo, menuTrigger } from "./AppMenu.js";
|
|
7
|
+
import { invoke } from "./bridge.js";
|
|
8
|
+
import { useT, useUpdateStatus } from "./hooks.js";
|
|
9
|
+
import { tx } from "./i18n.js";
|
|
10
|
+
import { site } from "./site.js";
|
|
11
|
+
import { TitlebarExtras } from "./TitlebarExtras.js";
|
|
12
|
+
import { close, minimize, os, startResize, systemMenu, toggleMaximize } from "./windowBinding.js";
|
|
13
|
+
const isInteractive = (target) => target instanceof Element && !!target.closest('button, input, textarea, a, .dv-tab, [role="button"]');
|
|
14
|
+
/** Right-click on empty titlebar space: the native system menu (Restore, Move, Size, ...). */
|
|
15
|
+
export function titlebarContextMenu(event) {
|
|
16
|
+
if (isInteractive(event.target))
|
|
17
|
+
return;
|
|
18
|
+
event.preventDefault();
|
|
19
|
+
const scale = window.devicePixelRatio || 1;
|
|
20
|
+
systemMenu(Math.round(event.screenX * scale), Math.round(event.screenY * scale));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The 44px titlebar row. It sits under the dockview root: the top groups' tab headers are
|
|
24
|
+
* transparent and let clicks through to the drag layer, the logo and the caption buttons. The logo
|
|
25
|
+
* is part of the drag region, unless the app chose it as the menu's trigger (`ShellMenu.trigger`);
|
|
26
|
+
* everything else that is empty drags the window.
|
|
27
|
+
*/
|
|
28
|
+
export function Titlebar({ maximized }) {
|
|
29
|
+
const trigger = menuTrigger();
|
|
30
|
+
return _jsxs("header", { className: "bt-titlebar", onContextMenu: titlebarContextMenu, children: [_jsx("div", { className: "bt-titlebar-drag", "data-tauri-drag-region": true }), trigger === 'logo' ? _jsx(AppMenuLogo, {}) : _jsx("img", { className: "bt-titlebar-logo", src: site().logo, alt: "", draggable: false, "data-tauri-drag-region": true }), _jsx("div", { className: "bt-titlebar-spacer", "data-tauri-drag-region": true }), _jsx(TitlebarExtras, {}), _jsx(AccountSwitcher, {}), _jsx(UpdateChip, {}), _jsx(AppMenu, { trigger: trigger }), os !== 'macos' && _jsx(WindowControls, { maximized: maximized })] });
|
|
31
|
+
}
|
|
32
|
+
/** "Update ready · restart": appears only when a verified update is downloaded (or failed to start). */
|
|
33
|
+
function UpdateChip() {
|
|
34
|
+
const [status, apply] = useUpdateStatus();
|
|
35
|
+
const chip = chipFor(status, site().product, key => tx(key, undefined, '') || undefined);
|
|
36
|
+
// Widen the tab strip's right reserve while the chip is shown so tabs never sit under it.
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const root = document.documentElement;
|
|
39
|
+
if (chip)
|
|
40
|
+
root.dataset.update = chip.kind;
|
|
41
|
+
else
|
|
42
|
+
delete root.dataset.update;
|
|
43
|
+
return () => { delete root.dataset.update; };
|
|
44
|
+
}, [chip?.kind]);
|
|
45
|
+
if (!chip)
|
|
46
|
+
return null;
|
|
47
|
+
if (chip.kind === 'problem') {
|
|
48
|
+
return _jsx("button", { className: "bt-update-chip bt-update-chip--problem", title: chip.title, onClick: () => invoke('open_external_url', { url: chip.href }).catch(() => { }), children: chip.label });
|
|
49
|
+
}
|
|
50
|
+
return _jsxs("button", { className: `bt-update-chip bt-update-chip--${chip.kind}`, title: chip.title, disabled: chip.kind === 'installing', onClick: apply, children: [_jsx("span", { className: "bt-update-chip-dot", "aria-hidden": "true" }), chip.label] });
|
|
51
|
+
}
|
|
52
|
+
function WindowControls({ maximized }) {
|
|
53
|
+
const t = useT();
|
|
54
|
+
return _jsxs("div", { className: "bt-captions", children: [_jsx("button", { className: "bt-caption", "aria-label": t('wb.shell.window.minimize'), title: t('wb.shell.window.minimize'), onClick: minimize, children: _jsx("svg", { viewBox: "0 0 10 10", "aria-hidden": "true", children: _jsx("path", { d: "M0 5.5h10" }) }) }), _jsx("button", { className: "bt-caption", "aria-label": maximized ? t('wb.shell.window.restore') : t('wb.shell.window.maximize'), title: maximized ? t('wb.shell.window.restore') : t('wb.shell.window.maximize'), onClick: toggleMaximize, children: maximized
|
|
55
|
+
? _jsxs("svg", { viewBox: "0 0 10 10", "aria-hidden": "true", children: [_jsx("path", { d: "M.5 2.5h7v7h-7z" }), _jsx("path", { d: "M2.5 2.5v-2h7v7h-2" })] })
|
|
56
|
+
: _jsx("svg", { viewBox: "0 0 10 10", "aria-hidden": "true", children: _jsx("path", { d: "M.5.5h9v9h-9z" }) }) }), _jsx("button", { className: "bt-caption bt-caption--close", "aria-label": t('wb.common.close'), title: t('wb.common.close'), onClick: close, children: _jsx("svg", { viewBox: "0 0 10 10", "aria-hidden": "true", children: _jsx("path", { d: "M0 0l10 10M10 0L0 10" }) }) })] });
|
|
57
|
+
}
|
|
58
|
+
const CORNER = RESIZE_BORDER * 2;
|
|
59
|
+
const GRIPS = [
|
|
60
|
+
['North', { top: 0, left: CORNER, right: CORNER, height: RESIZE_BORDER, cursor: 'ns-resize' }],
|
|
61
|
+
['South', { bottom: 0, left: CORNER, right: CORNER, height: RESIZE_BORDER, cursor: 'ns-resize' }],
|
|
62
|
+
['West', { left: 0, top: CORNER, bottom: CORNER, width: RESIZE_BORDER, cursor: 'ew-resize' }],
|
|
63
|
+
['East', { right: 0, top: CORNER, bottom: CORNER, width: RESIZE_BORDER, cursor: 'ew-resize' }],
|
|
64
|
+
['NorthWest', { top: 0, left: 0, width: CORNER, height: CORNER, cursor: 'nwse-resize' }],
|
|
65
|
+
['SouthEast', { bottom: 0, right: 0, width: CORNER, height: CORNER, cursor: 'nwse-resize' }],
|
|
66
|
+
['NorthEast', { top: 0, right: 0, width: CORNER, height: CORNER, cursor: 'nesw-resize' }],
|
|
67
|
+
['SouthWest', { bottom: 0, left: 0, width: CORNER, height: CORNER, cursor: 'nesw-resize' }],
|
|
68
|
+
];
|
|
69
|
+
/**
|
|
70
|
+
* The shell webview covers the whole frameless window, so the OS never sees its edges:
|
|
71
|
+
* these grips start native resize drags. Tab webviews are inset by the same band (Rust clamps too).
|
|
72
|
+
*/
|
|
73
|
+
export function ResizeGrips() {
|
|
74
|
+
return _jsx(_Fragment, { children: GRIPS.map(([direction, style]) => _jsx("div", { className: "bt-grip", style: style, "aria-hidden": "true", onPointerDown: event => { if (event.button === 0) {
|
|
75
|
+
event.preventDefault();
|
|
76
|
+
startResize(direction);
|
|
77
|
+
} } }, direction)) });
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=Titlebar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Titlebar.js","sourceRoot":"","sources":["../../../../../../shell/src/frame/Titlebar.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, type CSSProperties, type MouseEvent as ReactMouseEvent } from 'react';\nimport { RESIZE_BORDER } from '../chrome.ts';\nimport { chipFor } from '../updateModel.ts';\nimport { AccountSwitcher } from './AccountSwitcher.tsx';\nimport { AppMenu, AppMenuLogo, menuTrigger } from './AppMenu.tsx';\nimport { invoke } from './bridge.ts';\nimport { useT, useUpdateStatus } from './hooks.ts';\nimport { tx } from './i18n.ts';\nimport { site } from './site.ts';\nimport { TitlebarExtras } from './TitlebarExtras.tsx';\nimport { close, minimize, os, startResize, systemMenu, toggleMaximize, type ResizeDirection } from './windowBinding.ts';\n\nconst isInteractive = (target: EventTarget | null) =>\n target instanceof Element && !!target.closest('button, input, textarea, a, .dv-tab, [role=\"button\"]');\n\n/** Right-click on empty titlebar space: the native system menu (Restore, Move, Size, ...). */\nexport function titlebarContextMenu(event: ReactMouseEvent | MouseEvent) {\n if (isInteractive(event.target)) return;\n event.preventDefault();\n const scale = window.devicePixelRatio || 1;\n systemMenu(Math.round(event.screenX * scale), Math.round(event.screenY * scale));\n}\n\n/**\n * The 44px titlebar row. It sits under the dockview root: the top groups' tab headers are\n * transparent and let clicks through to the drag layer, the logo and the caption buttons. The logo\n * is part of the drag region, unless the app chose it as the menu's trigger (`ShellMenu.trigger`);\n * everything else that is empty drags the window.\n */\nexport function Titlebar({ maximized }: { maximized: boolean }) {\n const trigger = menuTrigger();\n return <header className=\"bt-titlebar\" onContextMenu={titlebarContextMenu}>\n <div className=\"bt-titlebar-drag\" data-tauri-drag-region/>\n {trigger === 'logo' ? <AppMenuLogo/> : <img className=\"bt-titlebar-logo\" src={site().logo} alt=\"\" draggable={false} data-tauri-drag-region/>}\n <div className=\"bt-titlebar-spacer\" data-tauri-drag-region/>\n <TitlebarExtras/>\n <AccountSwitcher/>\n <UpdateChip/>\n {/* The app menu, mounted once; it hangs under its trigger (by default each pane's wB button). */}\n <AppMenu trigger={trigger}/>\n {os !== 'macos' && <WindowControls maximized={maximized}/>}\n </header>;\n}\n\n/** \"Update ready · restart\": appears only when a verified update is downloaded (or failed to start). */\nfunction UpdateChip() {\n const [status, apply] = useUpdateStatus();\n const chip = chipFor(status, site().product, key => tx(key, undefined, '') || undefined);\n // Widen the tab strip's right reserve while the chip is shown so tabs never sit under it.\n useEffect(() => {\n const root = document.documentElement;\n if (chip) root.dataset.update = chip.kind; else delete root.dataset.update;\n return () => { delete root.dataset.update; };\n }, [chip?.kind]);\n if (!chip) return null;\n if (chip.kind === 'problem') {\n return <button className=\"bt-update-chip bt-update-chip--problem\" title={chip.title}\n onClick={() => invoke('open_external_url', { url: chip.href }).catch(() => {})}>{chip.label}</button>;\n }\n return <button className={`bt-update-chip bt-update-chip--${chip.kind}`} title={chip.title} disabled={chip.kind === 'installing'} onClick={apply}>\n <span className=\"bt-update-chip-dot\" aria-hidden=\"true\"/>{chip.label}\n </button>;\n}\n\nfunction WindowControls({ maximized }: { maximized: boolean }) {\n const t = useT();\n return <div className=\"bt-captions\">\n <button className=\"bt-caption\" aria-label={t('wb.shell.window.minimize')} title={t('wb.shell.window.minimize')} onClick={minimize}>\n <svg viewBox=\"0 0 10 10\" aria-hidden=\"true\"><path d=\"M0 5.5h10\"/></svg>\n </button>\n <button className=\"bt-caption\" aria-label={maximized ? t('wb.shell.window.restore') : t('wb.shell.window.maximize')} title={maximized ? t('wb.shell.window.restore') : t('wb.shell.window.maximize')} onClick={toggleMaximize}>\n {maximized\n ? <svg viewBox=\"0 0 10 10\" aria-hidden=\"true\"><path d=\"M.5 2.5h7v7h-7z\"/><path d=\"M2.5 2.5v-2h7v7h-2\"/></svg>\n : <svg viewBox=\"0 0 10 10\" aria-hidden=\"true\"><path d=\"M.5.5h9v9h-9z\"/></svg>}\n </button>\n <button className=\"bt-caption bt-caption--close\" aria-label={t('wb.common.close')} title={t('wb.common.close')} onClick={close}>\n <svg viewBox=\"0 0 10 10\" aria-hidden=\"true\"><path d=\"M0 0l10 10M10 0L0 10\"/></svg>\n </button>\n </div>;\n}\n\nconst CORNER = RESIZE_BORDER * 2;\nconst GRIPS: Array<[ResizeDirection, CSSProperties]> = [\n ['North', { top: 0, left: CORNER, right: CORNER, height: RESIZE_BORDER, cursor: 'ns-resize' }],\n ['South', { bottom: 0, left: CORNER, right: CORNER, height: RESIZE_BORDER, cursor: 'ns-resize' }],\n ['West', { left: 0, top: CORNER, bottom: CORNER, width: RESIZE_BORDER, cursor: 'ew-resize' }],\n ['East', { right: 0, top: CORNER, bottom: CORNER, width: RESIZE_BORDER, cursor: 'ew-resize' }],\n ['NorthWest', { top: 0, left: 0, width: CORNER, height: CORNER, cursor: 'nwse-resize' }],\n ['SouthEast', { bottom: 0, right: 0, width: CORNER, height: CORNER, cursor: 'nwse-resize' }],\n ['NorthEast', { top: 0, right: 0, width: CORNER, height: CORNER, cursor: 'nesw-resize' }],\n ['SouthWest', { bottom: 0, left: 0, width: CORNER, height: CORNER, cursor: 'nesw-resize' }],\n];\n\n/**\n * The shell webview covers the whole frameless window, so the OS never sees its edges:\n * these grips start native resize drags. Tab webviews are inset by the same band (Rust clamps too).\n */\nexport function ResizeGrips() {\n return <>{GRIPS.map(([direction, style]) =>\n <div key={direction} className=\"bt-grip\" style={style} aria-hidden=\"true\"\n onPointerDown={event => { if (event.button === 0) { event.preventDefault(); startResize(direction); } }}/>)}</>;\n}\n"]}
|