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.
Files changed (537) hide show
  1. package/README.md +139 -6
  2. package/bin/waybetter.mjs +43 -0
  3. package/build/runtime.mjs +105 -0
  4. package/cli/buildenv.mjs +130 -0
  5. package/cli/dev.mjs +97 -0
  6. package/cli/i18n.mjs +382 -0
  7. package/cli/manifests.mjs +383 -0
  8. package/cli/release.mjs +437 -0
  9. package/cli/releasecheck.mjs +15 -0
  10. package/cli/remote.mjs +260 -0
  11. package/cli/store.mjs +378 -0
  12. package/cli/strings.mjs +123 -0
  13. package/dist/runtime/column.d.ts +93 -0
  14. package/dist/runtime/column.js +451 -0
  15. package/dist/runtime/column.js.map +1 -0
  16. package/dist/runtime/commandReport.d.ts +19 -0
  17. package/dist/runtime/commandReport.js +47 -0
  18. package/dist/runtime/commandReport.js.map +1 -0
  19. package/dist/runtime/commands.d.ts +72 -0
  20. package/dist/runtime/commands.js +214 -0
  21. package/dist/runtime/commands.js.map +1 -0
  22. package/dist/runtime/devErrors.d.ts +16 -0
  23. package/dist/runtime/devErrors.js +30 -0
  24. package/dist/runtime/devErrors.js.map +1 -0
  25. package/dist/runtime/domHub.d.ts +21 -0
  26. package/dist/runtime/domHub.js +139 -4
  27. package/dist/runtime/domHub.js.map +1 -1
  28. package/dist/runtime/featureModules.d.ts +157 -0
  29. package/dist/runtime/featureModules.js +484 -0
  30. package/dist/runtime/featureModules.js.map +1 -0
  31. package/dist/runtime/featureTable.d.ts +144 -0
  32. package/dist/runtime/featureTable.js +223 -0
  33. package/dist/runtime/featureTable.js.map +1 -0
  34. package/dist/runtime/fonts.d.ts +22 -0
  35. package/dist/runtime/fonts.js +72 -0
  36. package/dist/runtime/fonts.js.map +1 -0
  37. package/dist/runtime/i18n.d.ts +138 -0
  38. package/dist/runtime/i18n.js +614 -0
  39. package/dist/runtime/i18n.js.map +1 -0
  40. package/dist/runtime/i18nCheck.d.ts +30 -0
  41. package/dist/runtime/i18nCheck.js +224 -0
  42. package/dist/runtime/i18nCheck.js.map +1 -0
  43. package/dist/runtime/pageLang.d.ts +8 -0
  44. package/dist/runtime/pageLang.js +64 -0
  45. package/dist/runtime/pageLang.js.map +1 -0
  46. package/dist/runtime/pageStrings.d.ts +35 -0
  47. package/dist/runtime/pageStrings.js +76 -0
  48. package/dist/runtime/pageStrings.js.map +1 -0
  49. package/dist/runtime/panelButton.d.ts +33 -0
  50. package/dist/runtime/panelButton.js +83 -0
  51. package/dist/runtime/panelButton.js.map +1 -0
  52. package/dist/runtime/permissions.d.ts +47 -0
  53. package/dist/runtime/permissions.js +141 -0
  54. package/dist/runtime/permissions.js.map +1 -0
  55. package/dist/runtime/pluginApi.d.ts +51 -2
  56. package/dist/runtime/pluginApi.js +137 -22
  57. package/dist/runtime/pluginApi.js.map +1 -1
  58. package/dist/runtime/pluginI18n.d.ts +29 -0
  59. package/dist/runtime/pluginI18n.js +119 -0
  60. package/dist/runtime/pluginI18n.js.map +1 -0
  61. package/dist/runtime/settingsForm.d.ts +66 -0
  62. package/dist/runtime/settingsForm.js +114 -0
  63. package/dist/runtime/settingsForm.js.map +1 -0
  64. package/dist/runtime/site.d.ts +5 -0
  65. package/dist/runtime/site.js +1 -1
  66. package/dist/runtime/site.js.map +1 -1
  67. package/dist/runtime/siteRuntime.d.ts +144 -0
  68. package/dist/runtime/siteRuntime.js +175 -0
  69. package/dist/runtime/siteRuntime.js.map +1 -0
  70. package/dist/runtime/stringPackHook.d.ts +84 -0
  71. package/dist/runtime/stringPackHook.js +220 -0
  72. package/dist/runtime/stringPackHook.js.map +1 -0
  73. package/dist/runtime/stringPackTranslate.d.ts +61 -0
  74. package/dist/runtime/stringPackTranslate.js +267 -0
  75. package/dist/runtime/stringPackTranslate.js.map +1 -0
  76. package/dist/runtime/stringPacks.d.ts +248 -0
  77. package/dist/runtime/stringPacks.js +610 -0
  78. package/dist/runtime/stringPacks.js.map +1 -0
  79. package/dist/runtime/styles.d.ts +15 -0
  80. package/dist/runtime/styles.js +81 -0
  81. package/dist/runtime/styles.js.map +1 -0
  82. package/dist/runtime/textNet.d.ts +15 -0
  83. package/dist/runtime/textNet.js +131 -0
  84. package/dist/runtime/textNet.js.map +1 -0
  85. package/dist/runtime/themeApi.d.ts +121 -0
  86. package/dist/runtime/themeApi.js +220 -0
  87. package/dist/runtime/themeApi.js.map +1 -0
  88. package/dist/runtime/themeBar.d.ts +28 -0
  89. package/dist/runtime/themeBar.js +82 -0
  90. package/dist/runtime/themeBar.js.map +1 -0
  91. package/dist/runtime/themeChoice.d.ts +52 -0
  92. package/dist/runtime/themeChoice.js +69 -0
  93. package/dist/runtime/themeChoice.js.map +1 -0
  94. package/dist/runtime/themeComponents.d.ts +435 -0
  95. package/dist/runtime/themeComponents.js +476 -0
  96. package/dist/runtime/themeComponents.js.map +1 -0
  97. package/dist/runtime/themeDecor.d.ts +73 -0
  98. package/dist/runtime/themeDecor.js +133 -0
  99. package/dist/runtime/themeDecor.js.map +1 -0
  100. package/dist/runtime/themeDerive.d.ts +69 -0
  101. package/dist/runtime/themeDerive.js +117 -0
  102. package/dist/runtime/themeDerive.js.map +1 -0
  103. package/dist/runtime/themeDoctor.d.ts +52 -0
  104. package/dist/runtime/themeDoctor.js +112 -0
  105. package/dist/runtime/themeDoctor.js.map +1 -0
  106. package/dist/runtime/themeGuards.d.ts +60 -0
  107. package/dist/runtime/themeGuards.js +235 -0
  108. package/dist/runtime/themeGuards.js.map +1 -0
  109. package/dist/runtime/themeIcons.d.ts +130 -0
  110. package/dist/runtime/themeIcons.js +271 -0
  111. package/dist/runtime/themeIcons.js.map +1 -0
  112. package/dist/runtime/themeInk.d.ts +37 -0
  113. package/dist/runtime/themeInk.js +111 -0
  114. package/dist/runtime/themeInk.js.map +1 -0
  115. package/dist/runtime/themeInvariants.d.ts +39 -0
  116. package/dist/runtime/themeInvariants.js +273 -0
  117. package/dist/runtime/themeInvariants.js.map +1 -0
  118. package/dist/runtime/themeRuntime.d.ts +114 -0
  119. package/dist/runtime/themeRuntime.js +570 -0
  120. package/dist/runtime/themeRuntime.js.map +1 -0
  121. package/dist/runtime/themeSchema.d.ts +10 -0
  122. package/dist/runtime/themeSchema.js +150 -0
  123. package/dist/runtime/themeSchema.js.map +1 -0
  124. package/dist/runtime/themeSpec.d.ts +263 -0
  125. package/dist/runtime/themeSpec.js +435 -0
  126. package/dist/runtime/themeSpec.js.map +1 -0
  127. package/dist/runtime/themeTokens.d.ts +12 -0
  128. package/dist/runtime/themeTokens.js +14 -6
  129. package/dist/runtime/themeTokens.js.map +1 -1
  130. package/dist/runtime/themeVariants.d.ts +30 -0
  131. package/dist/runtime/themeVariants.js +53 -0
  132. package/dist/runtime/themeVariants.js.map +1 -0
  133. package/dist/runtime/ui.d.ts +192 -0
  134. package/dist/runtime/ui.js +926 -0
  135. package/dist/runtime/ui.js.map +1 -0
  136. package/dist/shell/InstallDialog.d.ts +40 -0
  137. package/dist/shell/InstallDialog.js +176 -0
  138. package/dist/shell/InstallDialog.js.map +1 -0
  139. package/dist/shell/StoreView.d.ts +78 -0
  140. package/dist/shell/StoreView.js +108 -0
  141. package/dist/shell/StoreView.js.map +1 -0
  142. package/dist/shell/addressModel.js.map +1 -1
  143. package/dist/shell/chrome.js.map +1 -1
  144. package/dist/shell/deckModel.d.ts +117 -0
  145. package/dist/shell/deckModel.js +267 -0
  146. package/dist/shell/deckModel.js.map +1 -0
  147. package/dist/shell/frame/AccountSwitcher.d.ts +42 -0
  148. package/dist/shell/frame/AccountSwitcher.js +243 -0
  149. package/dist/shell/frame/AccountSwitcher.js.map +1 -0
  150. package/dist/shell/frame/AddColumnDialog.d.ts +8 -0
  151. package/dist/shell/frame/AddColumnDialog.js +81 -0
  152. package/dist/shell/frame/AddColumnDialog.js.map +1 -0
  153. package/dist/shell/frame/AppMenu.d.ts +44 -0
  154. package/dist/shell/frame/AppMenu.js +721 -0
  155. package/dist/shell/frame/AppMenu.js.map +1 -0
  156. package/dist/shell/frame/CommandPalette.d.ts +7 -0
  157. package/dist/shell/frame/CommandPalette.js +118 -0
  158. package/dist/shell/frame/CommandPalette.js.map +1 -0
  159. package/dist/shell/frame/DeckView.d.ts +13 -0
  160. package/dist/shell/frame/DeckView.js +287 -0
  161. package/dist/shell/frame/DeckView.js.map +1 -0
  162. package/dist/shell/frame/FindBar.d.ts +10 -0
  163. package/dist/shell/frame/FindBar.js +108 -0
  164. package/dist/shell/frame/FindBar.js.map +1 -0
  165. package/dist/shell/frame/MediaPanel.d.ts +8 -0
  166. package/dist/shell/frame/MediaPanel.js +76 -0
  167. package/dist/shell/frame/MediaPanel.js.map +1 -0
  168. package/dist/shell/frame/NewTabPage.d.ts +9 -0
  169. package/dist/shell/frame/NewTabPage.js +71 -0
  170. package/dist/shell/frame/NewTabPage.js.map +1 -0
  171. package/dist/shell/frame/PaneTheme.d.ts +16 -0
  172. package/dist/shell/frame/PaneTheme.js +67 -0
  173. package/dist/shell/frame/PaneTheme.js.map +1 -0
  174. package/dist/shell/frame/ReportDialog.d.ts +3 -0
  175. package/dist/shell/frame/ReportDialog.js +95 -0
  176. package/dist/shell/frame/ReportDialog.js.map +1 -0
  177. package/dist/shell/frame/Shell.d.ts +9 -0
  178. package/dist/shell/frame/Shell.js +1139 -0
  179. package/dist/shell/frame/Shell.js.map +1 -0
  180. package/dist/shell/frame/Titlebar.d.ts +17 -0
  181. package/dist/shell/frame/Titlebar.js +79 -0
  182. package/dist/shell/frame/Titlebar.js.map +1 -0
  183. package/dist/shell/frame/TitlebarExtras.d.ts +4 -0
  184. package/dist/shell/frame/TitlebarExtras.js +202 -0
  185. package/dist/shell/frame/TitlebarExtras.js.map +1 -0
  186. package/dist/shell/frame/WebPanel.d.ts +4 -0
  187. package/dist/shell/frame/WebPanel.js +185 -0
  188. package/dist/shell/frame/WebPanel.js.map +1 -0
  189. package/dist/shell/frame/accountModel.d.ts +49 -0
  190. package/dist/shell/frame/accountModel.js +67 -0
  191. package/dist/shell/frame/accountModel.js.map +1 -0
  192. package/dist/shell/frame/accountSwitcher.css +91 -0
  193. package/dist/shell/frame/appI18n.d.ts +44 -0
  194. package/dist/shell/frame/appI18n.js +64 -0
  195. package/dist/shell/frame/appI18n.js.map +1 -0
  196. package/dist/shell/frame/appMenu.css +127 -0
  197. package/dist/shell/frame/backupModel.d.ts +38 -0
  198. package/dist/shell/frame/backupModel.js +192 -0
  199. package/dist/shell/frame/backupModel.js.map +1 -0
  200. package/dist/shell/frame/boot.d.ts +8 -0
  201. package/dist/shell/frame/boot.js +37 -0
  202. package/dist/shell/frame/boot.js.map +1 -0
  203. package/dist/shell/frame/brand.d.ts +1 -0
  204. package/dist/shell/frame/brand.js +4 -0
  205. package/dist/shell/frame/brand.js.map +1 -0
  206. package/dist/shell/frame/bridge.d.ts +35 -0
  207. package/dist/shell/frame/bridge.js +70 -0
  208. package/dist/shell/frame/bridge.js.map +1 -0
  209. package/dist/shell/frame/chromeTheme.d.ts +47 -0
  210. package/dist/shell/frame/chromeTheme.js +118 -0
  211. package/dist/shell/frame/chromeTheme.js.map +1 -0
  212. package/dist/shell/frame/deck.css +209 -0
  213. package/dist/shell/frame/deckStore.d.ts +89 -0
  214. package/dist/shell/frame/deckStore.js +239 -0
  215. package/dist/shell/frame/deckStore.js.map +1 -0
  216. package/dist/shell/frame/devHost.d.ts +35 -0
  217. package/dist/shell/frame/devHost.js +80 -0
  218. package/dist/shell/frame/devHost.js.map +1 -0
  219. package/dist/shell/frame/devModel.d.ts +7 -0
  220. package/dist/shell/frame/devModel.js +17 -0
  221. package/dist/shell/frame/devModel.js.map +1 -0
  222. package/dist/shell/frame/diag.d.ts +7 -0
  223. package/dist/shell/frame/diag.js +39 -0
  224. package/dist/shell/frame/diag.js.map +1 -0
  225. package/dist/shell/frame/edges.css +159 -0
  226. package/dist/shell/frame/findBar.css +14 -0
  227. package/dist/shell/frame/frameMessages.d.ts +248 -0
  228. package/dist/shell/frame/frameMessages.js +252 -0
  229. package/dist/shell/frame/frameMessages.js.map +1 -0
  230. package/dist/shell/frame/hooks.d.ts +39 -0
  231. package/dist/shell/frame/hooks.js +97 -0
  232. package/dist/shell/frame/hooks.js.map +1 -0
  233. package/dist/shell/frame/i18n.d.ts +27 -0
  234. package/dist/shell/frame/i18n.js +66 -0
  235. package/dist/shell/frame/i18n.js.map +1 -0
  236. package/dist/shell/frame/iconPack.d.ts +11 -0
  237. package/dist/shell/frame/iconPack.js +45 -0
  238. package/dist/shell/frame/iconPack.js.map +1 -0
  239. package/dist/shell/frame/icons.d.ts +71 -0
  240. package/dist/shell/frame/icons.js +75 -0
  241. package/dist/shell/frame/icons.js.map +1 -0
  242. package/dist/shell/frame/index.d.ts +34 -0
  243. package/dist/shell/frame/index.js +43 -0
  244. package/dist/shell/frame/index.js.map +1 -0
  245. package/dist/shell/frame/language.d.ts +58 -0
  246. package/dist/shell/frame/language.js +165 -0
  247. package/dist/shell/frame/language.js.map +1 -0
  248. package/dist/shell/frame/mediaModel.d.ts +47 -0
  249. package/dist/shell/frame/mediaModel.js +67 -0
  250. package/dist/shell/frame/mediaModel.js.map +1 -0
  251. package/dist/shell/frame/menuMessages.en.json +96 -0
  252. package/dist/shell/frame/menuModel.d.ts +319 -0
  253. package/dist/shell/frame/menuModel.js +301 -0
  254. package/dist/shell/frame/menuModel.js.map +1 -0
  255. package/dist/shell/frame/nativeMenu.d.ts +5 -0
  256. package/dist/shell/frame/nativeMenu.js +178 -0
  257. package/dist/shell/frame/nativeMenu.js.map +1 -0
  258. package/dist/shell/frame/nativeMenuModel.d.ts +102 -0
  259. package/dist/shell/frame/nativeMenuModel.js +186 -0
  260. package/dist/shell/frame/nativeMenuModel.js.map +1 -0
  261. package/dist/shell/frame/paletteModel.d.ts +139 -0
  262. package/dist/shell/frame/paletteModel.js +114 -0
  263. package/dist/shell/frame/paletteModel.js.map +1 -0
  264. package/dist/shell/frame/paneTheme.css +9 -0
  265. package/dist/shell/frame/pluginCommandStore.d.ts +23 -0
  266. package/dist/shell/frame/pluginCommandStore.js +70 -0
  267. package/dist/shell/frame/pluginCommandStore.js.map +1 -0
  268. package/dist/shell/frame/reportModel.d.ts +52 -0
  269. package/dist/shell/frame/reportModel.js +105 -0
  270. package/dist/shell/frame/reportModel.js.map +1 -0
  271. package/dist/shell/frame/safeStore.d.ts +7 -0
  272. package/dist/shell/frame/safeStore.js +40 -0
  273. package/dist/shell/frame/safeStore.js.map +1 -0
  274. package/dist/shell/frame/searchInput.d.ts +2 -0
  275. package/dist/shell/frame/searchInput.js +11 -0
  276. package/dist/shell/frame/searchInput.js.map +1 -0
  277. package/dist/shell/frame/shell.css +634 -0
  278. package/dist/shell/frame/site.d.ts +206 -0
  279. package/dist/shell/frame/site.js +22 -0
  280. package/dist/shell/frame/site.js.map +1 -0
  281. package/dist/shell/frame/state.d.ts +101 -0
  282. package/dist/shell/frame/state.js +286 -0
  283. package/dist/shell/frame/state.js.map +1 -0
  284. package/dist/shell/frame/syncGate.d.ts +10 -0
  285. package/dist/shell/frame/syncGate.js +36 -0
  286. package/dist/shell/frame/syncGate.js.map +1 -0
  287. package/dist/shell/frame/syncHost.d.ts +35 -0
  288. package/dist/shell/frame/syncHost.js +85 -0
  289. package/dist/shell/frame/syncHost.js.map +1 -0
  290. package/dist/shell/frame/tabStill.d.ts +2 -0
  291. package/dist/shell/frame/tabStill.js +62 -0
  292. package/dist/shell/frame/tabStill.js.map +1 -0
  293. package/dist/shell/frame/themeScopes.d.ts +29 -0
  294. package/dist/shell/frame/themeScopes.js +61 -0
  295. package/dist/shell/frame/themeScopes.js.map +1 -0
  296. package/dist/shell/frame/themeStore.d.ts +99 -0
  297. package/dist/shell/frame/themeStore.js +267 -0
  298. package/dist/shell/frame/themeStore.js.map +1 -0
  299. package/dist/shell/frame/windowBinding.d.ts +2 -0
  300. package/dist/shell/frame/windowBinding.js +7 -0
  301. package/dist/shell/frame/windowBinding.js.map +1 -0
  302. package/dist/shell/frame/workspaceModel.d.ts +82 -0
  303. package/dist/shell/frame/workspaceModel.js +250 -0
  304. package/dist/shell/frame/workspaceModel.js.map +1 -0
  305. package/dist/shell/frame/workspaces.css +84 -0
  306. package/dist/shell/frame/workspaces.d.ts +22 -0
  307. package/dist/shell/frame/workspaces.js +125 -0
  308. package/dist/shell/frame/workspaces.js.map +1 -0
  309. package/dist/shell/frame/zoomStore.d.ts +10 -0
  310. package/dist/shell/frame/zoomStore.js +65 -0
  311. package/dist/shell/frame/zoomStore.js.map +1 -0
  312. package/dist/shell/installController.d.ts +137 -0
  313. package/dist/shell/installController.js +172 -0
  314. package/dist/shell/installController.js.map +1 -0
  315. package/dist/shell/installerMessages.d.ts +30 -0
  316. package/dist/shell/installerMessages.js +36 -0
  317. package/dist/shell/installerMessages.js.map +1 -0
  318. package/dist/shell/linkDrop.js.map +1 -1
  319. package/dist/shell/messages.d.ts +16 -0
  320. package/dist/shell/messages.js +27 -0
  321. package/dist/shell/messages.js.map +1 -0
  322. package/dist/shell/palette.js.map +1 -1
  323. package/dist/shell/paneModel.d.ts +22 -0
  324. package/dist/shell/paneModel.js +24 -1
  325. package/dist/shell/paneModel.js.map +1 -1
  326. package/dist/shell/panel/Appearance.d.ts +8 -0
  327. package/dist/shell/panel/Appearance.js +265 -0
  328. package/dist/shell/panel/Appearance.js.map +1 -0
  329. package/dist/shell/panel/BackupPanel.d.ts +5 -0
  330. package/dist/shell/panel/BackupPanel.js +198 -0
  331. package/dist/shell/panel/BackupPanel.js.map +1 -0
  332. package/dist/shell/panel/DeveloperPanel.d.ts +4 -0
  333. package/dist/shell/panel/DeveloperPanel.js +51 -0
  334. package/dist/shell/panel/DeveloperPanel.js.map +1 -0
  335. package/dist/shell/panel/FeatureToggles.d.ts +13 -0
  336. package/dist/shell/panel/FeatureToggles.js +42 -0
  337. package/dist/shell/panel/FeatureToggles.js.map +1 -0
  338. package/dist/shell/panel/Home.d.ts +3 -0
  339. package/dist/shell/panel/Home.js +23 -0
  340. package/dist/shell/panel/Home.js.map +1 -0
  341. package/dist/shell/panel/IconPackInstall.d.ts +15 -0
  342. package/dist/shell/panel/IconPackInstall.js +41 -0
  343. package/dist/shell/panel/IconPackInstall.js.map +1 -0
  344. package/dist/shell/panel/LanguageSettings.d.ts +1 -0
  345. package/dist/shell/panel/LanguageSettings.js +54 -0
  346. package/dist/shell/panel/LanguageSettings.js.map +1 -0
  347. package/dist/shell/panel/MakePanel.d.ts +3 -0
  348. package/dist/shell/panel/MakePanel.js +237 -0
  349. package/dist/shell/panel/MakePanel.js.map +1 -0
  350. package/dist/shell/panel/MarkdownDoc.d.ts +6 -0
  351. package/dist/shell/panel/MarkdownDoc.js +35 -0
  352. package/dist/shell/panel/MarkdownDoc.js.map +1 -0
  353. package/dist/shell/panel/Modes.d.ts +40 -0
  354. package/dist/shell/panel/Modes.js +270 -0
  355. package/dist/shell/panel/Modes.js.map +1 -0
  356. package/dist/shell/panel/NavIcon.d.ts +4 -0
  357. package/dist/shell/panel/NavIcon.js +6 -0
  358. package/dist/shell/panel/NavIcon.js.map +1 -0
  359. package/dist/shell/panel/Panel.d.ts +7 -0
  360. package/dist/shell/panel/Panel.js +139 -0
  361. package/dist/shell/panel/Panel.js.map +1 -0
  362. package/dist/shell/panel/PluginFeatures.d.ts +24 -0
  363. package/dist/shell/panel/PluginFeatures.js +165 -0
  364. package/dist/shell/panel/PluginFeatures.js.map +1 -0
  365. package/dist/shell/panel/Plugins.d.ts +33 -0
  366. package/dist/shell/panel/Plugins.js +112 -0
  367. package/dist/shell/panel/Plugins.js.map +1 -0
  368. package/dist/shell/panel/PowerSettings.d.ts +4 -0
  369. package/dist/shell/panel/PowerSettings.js +52 -0
  370. package/dist/shell/panel/PowerSettings.js.map +1 -0
  371. package/dist/shell/panel/Settings.d.ts +23 -0
  372. package/dist/shell/panel/Settings.js +117 -0
  373. package/dist/shell/panel/Settings.js.map +1 -0
  374. package/dist/shell/panel/ShareSetup.d.ts +8 -0
  375. package/dist/shell/panel/ShareSetup.js +130 -0
  376. package/dist/shell/panel/ShareSetup.js.map +1 -0
  377. package/dist/shell/panel/StoreSection.d.ts +7 -0
  378. package/dist/shell/panel/StoreSection.js +78 -0
  379. package/dist/shell/panel/StoreSection.js.map +1 -0
  380. package/dist/shell/panel/StringPacks.d.ts +20 -0
  381. package/dist/shell/panel/StringPacks.js +131 -0
  382. package/dist/shell/panel/StringPacks.js.map +1 -0
  383. package/dist/shell/panel/ThemeBuilder.d.ts +5 -0
  384. package/dist/shell/panel/ThemeBuilder.js +205 -0
  385. package/dist/shell/panel/ThemeBuilder.js.map +1 -0
  386. package/dist/shell/panel/backup.css +34 -0
  387. package/dist/shell/panel/builder.css +240 -0
  388. package/dist/shell/panel/builderModel.d.ts +55 -0
  389. package/dist/shell/panel/builderModel.js +95 -0
  390. package/dist/shell/panel/builderModel.js.map +1 -0
  391. package/dist/shell/panel/compare.d.ts +10 -0
  392. package/dist/shell/panel/compare.js +51 -0
  393. package/dist/shell/panel/compare.js.map +1 -0
  394. package/dist/shell/panel/controls.d.ts +135 -0
  395. package/dist/shell/panel/controls.js +213 -0
  396. package/dist/shell/panel/controls.js.map +1 -0
  397. package/dist/shell/panel/featureModel.d.ts +69 -0
  398. package/dist/shell/panel/featureModel.js +79 -0
  399. package/dist/shell/panel/featureModel.js.map +1 -0
  400. package/dist/shell/panel/fonts/FontBrowser.d.ts +10 -0
  401. package/dist/shell/panel/fonts/FontBrowser.js +189 -0
  402. package/dist/shell/panel/fonts/FontBrowser.js.map +1 -0
  403. package/dist/shell/panel/fonts/FontRoles.d.ts +20 -0
  404. package/dist/shell/panel/fonts/FontRoles.js +77 -0
  405. package/dist/shell/panel/fonts/FontRoles.js.map +1 -0
  406. package/dist/shell/panel/fonts/catalog.d.ts +37 -0
  407. package/dist/shell/panel/fonts/catalog.js +68 -0
  408. package/dist/shell/panel/fonts/catalog.js.map +1 -0
  409. package/dist/shell/panel/fonts/googleFontsCatalog.json +1 -0
  410. package/dist/shell/panel/index.d.ts +20 -0
  411. package/dist/shell/panel/index.js +34 -0
  412. package/dist/shell/panel/index.js.map +1 -0
  413. package/dist/shell/panel/languageModel.d.ts +5 -0
  414. package/dist/shell/panel/languageModel.js +7 -0
  415. package/dist/shell/panel/languageModel.js.map +1 -0
  416. package/dist/shell/panel/make.css +73 -0
  417. package/dist/shell/panel/makeModel.d.ts +32 -0
  418. package/dist/shell/panel/makeModel.js +84 -0
  419. package/dist/shell/panel/makeModel.js.map +1 -0
  420. package/dist/shell/panel/markdown.d.ts +46 -0
  421. package/dist/shell/panel/markdown.js +100 -0
  422. package/dist/shell/panel/markdown.js.map +1 -0
  423. package/dist/shell/panel/nav.d.ts +12 -0
  424. package/dist/shell/panel/nav.js +50 -0
  425. package/dist/shell/panel/nav.js.map +1 -0
  426. package/dist/shell/panel/panel.css +401 -0
  427. package/dist/shell/panel/panelMessages.d.ts +803 -0
  428. package/dist/shell/panel/panelMessages.js +779 -0
  429. package/dist/shell/panel/panelMessages.js.map +1 -0
  430. package/dist/shell/panel/plugins.css +59 -0
  431. package/dist/shell/panel/setupModel.d.ts +87 -0
  432. package/dist/shell/panel/setupModel.js +152 -0
  433. package/dist/shell/panel/setupModel.js.map +1 -0
  434. package/dist/shell/panel/site.d.ts +259 -0
  435. package/dist/shell/panel/site.js +25 -0
  436. package/dist/shell/panel/site.js.map +1 -0
  437. package/dist/shell/panel/strings.css +7 -0
  438. package/dist/shell/panel/themes.d.ts +10 -0
  439. package/dist/shell/panel/themes.js +8 -0
  440. package/dist/shell/panel/themes.js.map +1 -0
  441. package/dist/shell/profileModel.d.ts +3 -2
  442. package/dist/shell/profileModel.js +7 -5
  443. package/dist/shell/profileModel.js.map +1 -1
  444. package/dist/shell/store.css +250 -0
  445. package/dist/shell/storeMessages.d.ts +193 -0
  446. package/dist/shell/storeMessages.js +196 -0
  447. package/dist/shell/storeMessages.js.map +1 -0
  448. package/dist/shell/storeModel.d.ts +205 -0
  449. package/dist/shell/storeModel.js +146 -0
  450. package/dist/shell/storeModel.js.map +1 -0
  451. package/dist/shell/stringPacksModel.d.ts +44 -0
  452. package/dist/shell/stringPacksModel.js +99 -0
  453. package/dist/shell/stringPacksModel.js.map +1 -0
  454. package/dist/shell/updateModel.d.ts +2 -1
  455. package/dist/shell/updateModel.js +5 -4
  456. package/dist/shell/updateModel.js.map +1 -1
  457. package/dist/shell/windowControls.d.ts +4 -0
  458. package/dist/shell/windowControls.js +5 -0
  459. package/dist/shell/windowControls.js.map +1 -1
  460. package/i18n-config.schema.json +29 -0
  461. package/i18n-meta.schema.json +26 -0
  462. package/i18n.schema.json +42 -0
  463. package/icons.schema.json +655 -0
  464. package/languages.schema.json +23 -0
  465. package/locales/ar-x-fm.json +11 -0
  466. package/locales/ar.json +1388 -0
  467. package/locales/bg.json +1387 -0
  468. package/locales/bn.json +1387 -0
  469. package/locales/ca.json +1387 -0
  470. package/locales/cs.json +1387 -0
  471. package/locales/da.json +1387 -0
  472. package/locales/de.json +1387 -0
  473. package/locales/el.json +1387 -0
  474. package/locales/en-GB.json +27 -0
  475. package/locales/en.json +1386 -0
  476. package/locales/en.meta.json +51 -0
  477. package/locales/es.json +1387 -0
  478. package/locales/eu.json +1387 -0
  479. package/locales/fa.json +1388 -0
  480. package/locales/fi.json +1387 -0
  481. package/locales/fil.json +1387 -0
  482. package/locales/fr.json +1387 -0
  483. package/locales/ga.json +1387 -0
  484. package/locales/gl.json +1387 -0
  485. package/locales/gu.json +1387 -0
  486. package/locales/ha.json +1387 -0
  487. package/locales/he.json +1388 -0
  488. package/locales/hi.json +1387 -0
  489. package/locales/hr.json +1387 -0
  490. package/locales/hu.json +1387 -0
  491. package/locales/id.json +1387 -0
  492. package/locales/ig.json +1387 -0
  493. package/locales/it.json +1387 -0
  494. package/locales/ja.json +1387 -0
  495. package/locales/kn.json +1387 -0
  496. package/locales/ko.json +1387 -0
  497. package/locales/mr.json +1387 -0
  498. package/locales/ms.json +1387 -0
  499. package/locales/nb.json +1387 -0
  500. package/locales/nl.json +1387 -0
  501. package/locales/pl.json +1387 -0
  502. package/locales/pt.json +1387 -0
  503. package/locales/ro.json +1387 -0
  504. package/locales/ru.json +1387 -0
  505. package/locales/sk.json +1387 -0
  506. package/locales/sr.json +1387 -0
  507. package/locales/sv.json +1387 -0
  508. package/locales/ta.json +1387 -0
  509. package/locales/th.json +1387 -0
  510. package/locales/tr.json +1387 -0
  511. package/locales/uk.json +1387 -0
  512. package/locales/ur.json +1388 -0
  513. package/locales/vi.json +1387 -0
  514. package/locales/yo.json +1387 -0
  515. package/locales/zh-Hans.json +1387 -0
  516. package/locales/zh-Hant.json +1387 -0
  517. package/package.json +138 -5
  518. package/store-catalog.schema.json +78 -0
  519. package/theme.schema.json +4668 -0
  520. package/windows/installer.nsi +946 -0
  521. package/windows/languages/Basque.nsh +28 -0
  522. package/windows/languages/Catalan.nsh +28 -0
  523. package/windows/languages/Croatian.nsh +28 -0
  524. package/windows/languages/Czech.nsh +28 -0
  525. package/windows/languages/Danish.nsh +28 -0
  526. package/windows/languages/Finnish.nsh +28 -0
  527. package/windows/languages/Galician.nsh +28 -0
  528. package/windows/languages/Greek.nsh +28 -0
  529. package/windows/languages/Hungarian.nsh +28 -0
  530. package/windows/languages/Indonesian.nsh +28 -0
  531. package/windows/languages/Irish.nsh +28 -0
  532. package/windows/languages/Malay.nsh +28 -0
  533. package/windows/languages/Polish.nsh +28 -0
  534. package/windows/languages/Romanian.nsh +28 -0
  535. package/windows/languages/Serbian.nsh +28 -0
  536. package/windows/languages/Slovak.nsh +28 -0
  537. package/windows/languages/Thai.nsh +28 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppMenu.js","sourceRoot":"","sources":["../../../../../../shell/src/frame/AppMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["// The app menu (\"Settings and more\"). Its trigger is the app's choice (`ShellMenu.trigger`): by\n// default each pane's wayBetter button at the end of its toolbar (`PaneMenuButton`; the menu hangs\n// under the button that was clicked, so in split view each pane opens it under itself), else a\n// button at the end of the titlebar or the titlebar's logo. It also opens on Alt+F and F10\n// (Shell.tsx; a focused tab forwards the keys), from the command palette and from the last row of\n// the account menu: under the focused pane's button (the first one on screen when no pane is\n// focused). Its rows are the app's (`ShellSite.menu`, menuModel.ts): built-in ones by name, each\n// shown only when the app serves what it needs, and the app's own.\n//\n// Like every shell menu it is an overlay: while open the shell is raised above the tab webviews\n// (`setOverlay`), panes stay visible and nothing is dimmed. Keyboard: arrows, Home/End, type-ahead,\n// the arrow pointing along the reading direction opens a submenu and the other one closes it,\n// Enter or Space chooses, Esc closes one level. Submenus fly out beside the menu and stay inside\n// the window (in a narrow one they lie over it). Words: menuMessages.en.json (`menuText`).\n\nimport { useEffect, useLayoutEffect, useReducer, useRef, useState, type KeyboardEvent as ReactKeyboardEvent, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { parseUpdateStatus, type UpdateStatus } from '../updateModel.ts';\nimport { invoke, listen } from './bridge.ts';\nimport { describe, diag } from './diag.ts';\nimport { decks } from './deckStore.ts';\nimport { refreshDev } from './devHost.ts';\nimport { useDev, usePaneTick, useT } from './hooks.ts';\nimport { formatNumber } from './i18n.ts';\nimport { Icon, type IconName } from './icons.tsx';\nimport {\n DEFAULT_MENU, ZOOM_MAX, ZOOM_MIN, findSpec, joinGroups, languageChoice, languageRows, menuText, moveStop, planMenu, resolveTrigger, shortcutText, specRows, submenuKeys, submenuLeft, typeahead, updateRow,\n type AppMenuTrigger, type BuiltinMenuItem, type MenuEnv, type MenuItemRow, type MenuModeStatus, type MenuRow,\n} from './menuModel.ts';\nimport { ReportDialog } from './ReportDialog.tsx';\nimport { safe, setSafeMode } from './safeStore.ts';\nimport { hasFeature, site } from './site.ts';\nimport { isWeb, setOverlay, shell, type TabParams } from './state.ts';\nimport { openWorkspaceSave } from './TitlebarExtras.tsx';\nimport { os, startDrag, systemMenu } from './windowBinding.ts';\nimport { loadWorkspaces, restoreWorkspace, workspaceList, workspaces } from './workspaces.ts';\nimport { readZoom, stepZoom, zoomOf, zoomTarget } from './zoomStore.ts';\nimport './appMenu.css';\n\n/**\n * How the menu is asked to open: at a trigger other than the app's own (`anchor`), under one pane's\n * button (`pane`, a dockview panel id), at a submenu, with the first row focused (keyboard), or\n * closing if it is open at that place.\n */\nexport type AppMenuRequest = { anchor?: AppMenuTrigger; pane?: string; submenu?: string; keyboard?: boolean; toggle?: boolean };\n\n/** Opens the app menu (Alt+F / F10, the palette, the account menu's last row). */\nexport const openAppMenu = (request: AppMenuRequest = {}) => window.dispatchEvent(new CustomEvent('bt-app-menu', { detail: request }));\n\n/** Opens the \"Report a problem\" summary (the native menu bar's Help item). */\nexport const openReport = () => window.dispatchEvent(new CustomEvent('bt-report'));\n\nconst mac = os === 'macos';\n/** The keys that open the menu, as the button's tooltip and the account menu write them. */\nexport const APP_MENU_KEYS = mac ? 'F10' : 'Alt+F';\n\nconst getError = (error: unknown) => (error instanceof Error ? error.message : String(error)).replace(/^Error: /, '');\nconst percent = (factor: number) => formatNumber(factor, { style: 'percent', maximumFractionDigits: 0 });\n\ntype Focus = { level: number; id?: string; edge?: 'first' | 'last' | 'menu' };\n/**\n * Where the menu hangs: under a button (its end edge lined up with the button's: from the window's\n * right edge, or from the left in a right-to-left pane) or under the logo (from its start edge).\n */\ntype Anchor = { at: AppMenuTrigger; pane?: string; top: number; left?: number; right?: number };\n\n/** One trigger, as a key: `pane:<id>` for a pane's button. */\nconst triggerKey = (at: AppMenuTrigger, pane?: string) => (at === 'pane' ? `pane:${pane ?? ''}` : at);\n\n/** Which trigger the open menu hangs from (null: closed), for the triggers' `aria-expanded`. */\nlet openAt: string | null = null;\nfunction noteOpen(key: string | null) {\n if (openAt === key) return;\n openAt = key;\n window.dispatchEvent(new CustomEvent('bt-app-menu-state'));\n}\n\n/** `aria-expanded` of one trigger. */\nfunction useExpanded(key: string) {\n const [expanded, setExpanded] = useState(openAt === key);\n useEffect(() => {\n const update = () => setExpanded(openAt === key);\n update();\n window.addEventListener('bt-app-menu-state', update);\n return () => window.removeEventListener('bt-app-menu-state', update);\n }, [key]);\n return expanded;\n}\n\n/** Pane `id`'s menu button on screen; else the focused pane's; else the first one on screen. */\nfunction paneButton(id?: string): HTMLElement | null {\n const shown = Array.from(document.querySelectorAll<HTMLElement>('.bt-pane-menu[data-pane]')).filter(el => el.getClientRects().length > 0);\n const find = (want: string | undefined) => (want ? shown.find(el => el.dataset.pane === want) : undefined);\n return find(id) ?? find(shell.api?.activePanel?.id) ?? shown[0] ?? null;\n}\n\n/** The rows of one level a key can stop on: enabled items; the zoom row counts once. */\nfunction stopsOf(menu: HTMLElement): HTMLElement[] {\n const all = Array.from(menu.querySelectorAll<HTMLElement>('[data-item]:not(:disabled)'));\n const active = document.activeElement;\n const zoom = all.filter(el => 'zoom' in el.dataset);\n const keep = zoom.find(el => el === active) ?? zoom.find(el => el.getAttribute('aria-disabled') !== 'true') ?? zoom[0];\n return all.filter(el => !('zoom' in el.dataset) || el === keep);\n}\n\n/**\n * The menu (mounted once, in the titlebar). `trigger`: where clicks and keys open it; default the\n * app's `ShellMenu.trigger`, else `pane`. `true` / `false` are the older spellings of `button` / `logo`.\n */\nexport function AppMenu({ trigger }: { trigger?: AppMenuTrigger | boolean } = {}) {\n const t = useT();\n usePaneTick();\n const dev = useDev();\n const config = site();\n const menu = config.menu ?? {};\n const [open, setOpen] = useState(false);\n const [path, setPath] = useState<string[]>([]);\n const [anchor, setAnchor] = useState<Anchor>({ at: 'button', top: 50, right: 8 });\n const [mode, setMode] = useState<string | null>(null);\n const [modeStatus, setModeStatus] = useState<MenuModeStatus | null>(null);\n const [asking, setAsking] = useState<{ to: string; changes: number; reapply?: boolean } | null>(null);\n const [version, setVersion] = useState('');\n const [update, setUpdate] = useState<UpdateStatus>({ state: 'idle' });\n const [askedUpdate, setAskedUpdate] = useState(false);\n const [reporting, setReporting] = useState(false);\n const [error, setError] = useState('');\n const [, tick] = useReducer((n: number) => n + 1, 0);\n const button = useRef<HTMLButtonElement>(null);\n const layers = useRef<HTMLDivElement>(null);\n const focusNext = useRef<Focus | null>(null);\n const before = useRef<HTMLElement | null>(null);\n const hover = useRef<{ el: Element | null; timer?: ReturnType<typeof setTimeout> }>({ el: null });\n const typed = useRef({ text: '', at: 0 });\n const live = useRef({ open, path });\n live.current = { open, path };\n\n // Whatever a row shows may change while the menu is open (a language or theme picked in it).\n useEffect(() => {\n const events = ['bt-zoom', 'bt-workspaces', 'bt-decks', 'bt-site', 'bt-safe'];\n for (const event of events) window.addEventListener(event, tick);\n const off = [config.themes?.subscribe(tick), menu.languages?.subscribe(tick)];\n return () => {\n for (const event of events) window.removeEventListener(event, tick);\n for (const dispose of off) dispose?.();\n };\n }, []);\n\n /** Where a request without an anchor opens: the app's trigger. */\n const home = (): AppMenuTrigger => menuTrigger(trigger);\n\n /** The element a request hangs the menu under (null: none on screen). */\n function triggerOf(at: AppMenuTrigger, pane?: string): HTMLElement | null {\n if (at === 'pane') return paneButton(pane);\n if (at === 'logo') return document.querySelector<HTMLElement>('button.bt-titlebar-logo');\n return button.current;\n }\n\n function show(request: AppMenuRequest = {}) {\n const at = request.anchor ?? home();\n const el = triggerOf(at, request.pane);\n const pane = at === 'pane' ? el?.dataset.pane : undefined;\n diag(`menu open: anchor=${at} keyboard=${!!request.keyboard} hasFocus=${document.hasFocus()} active=${describe(document.activeElement)}`);\n const rect = el?.getBoundingClientRect();\n if (rect) {\n const top = Math.round(rect.bottom + 6);\n const rtl = getComputedStyle(el!).direction === 'rtl';\n if (at === 'logo') setAnchor({ at, top, left: Math.max(8, Math.round(rect.left - 3)) });\n // The menu's end edge lines up with its button's, so it opens over the pane the button is in.\n else if (rtl) setAnchor({ at, pane, top, left: Math.max(8, Math.round(rect.left)) });\n else setAnchor({ at, pane, top, right: Math.max(8, Math.round(window.innerWidth - rect.right)) });\n } else {\n // No trigger on screen (only the app's own tab, a deck): under the titlebar, at its end.\n setAnchor({ at, pane, top: 50, right: 8 });\n }\n const active = document.activeElement as HTMLElement | null;\n before.current = active && active !== document.body && document.hasFocus() ? active : null;\n // Keys pressed in a tab open the menu: the shell takes the keyboard. A click on the shell already\n // gave it the keyboard, so nothing native is asked for then.\n if (!document.hasFocus()) invoke('shell_focus').catch(() => {});\n setAsking(null); setError('');\n setPath(request.submenu ? [request.submenu] : []);\n focusNext.current = request.submenu ? { level: 1, edge: 'first' } : { level: 0, edge: request.keyboard ? 'first' : 'menu' };\n setOpen(true);\n // What the rows show, read fresh.\n void readZoom(zoomTarget());\n if (hasFeature('developer')) void refreshDev();\n if (hasFeature('workspaces') && !workspaces.loaded) void loadWorkspaces().catch(() => {});\n void config.themes?.loadThemes();\n menu.modes?.current().then(setMode, () => {});\n menu.modes?.status?.().then(setModeStatus, () => {});\n if (!version) menu.version?.().then(setVersion, () => {});\n setAskedUpdate(false);\n if (hasFeature('updates')) invoke('update_status').then(value => setUpdate(parseUpdateStatus(value)), () => {});\n }\n\n /** `escape`: back to what had focus before. `action` and `away`: nothing focused, so typing returns to the active pane. */\n function close(how: 'escape' | 'action' | 'away' = 'away', why = '') {\n diag(`menu close: ${how}${why ? ` (${why})` : ''} hasFocus=${document.hasFocus()}`);\n clearTimeout(hover.current.timer);\n hover.current = { el: null };\n focusNext.current = null;\n setOpen(false); setPath([]); setAsking(null); setError('');\n if (how === 'escape' && before.current?.isConnected) before.current.focus();\n before.current = null;\n }\n\n // The updater's steps (checking, downloading, ready) as they happen.\n useEffect(() => {\n if (!hasFeature('updates')) return;\n let disposed = false;\n let unlisten: (() => void) | undefined;\n listen('update-status', event => setUpdate(parseUpdateStatus(event.payload)))\n .then(dispose => { if (disposed) dispose(); else unlisten = dispose; })\n .catch(() => {});\n return () => { disposed = true; unlisten?.(); };\n }, []);\n\n useEffect(() => {\n const onRequest = (event: Event) => {\n const request = (event as CustomEvent<AppMenuRequest | undefined>).detail ?? {};\n // Asked again from another trigger, the open menu moves there instead of closing.\n const at = request.anchor ?? home();\n const key = triggerKey(at, at === 'pane' ? request.pane ?? paneButton()?.dataset.pane : undefined);\n if (live.current.open && request.toggle && key === openAt) close('escape'); else show(request);\n };\n window.addEventListener('bt-app-menu', onRequest);\n return () => window.removeEventListener('bt-app-menu', onRequest);\n }, [version]);\n\n useEffect(() => {\n const show = () => setReporting(true);\n window.addEventListener('bt-report', show);\n return () => window.removeEventListener('bt-report', show);\n }, []);\n\n useEffect(() => {\n if (!open) return;\n // Native tab webviews would cover the menu.\n setOverlay(1);\n // The window lost the keyboard: the menu closes, unless the focus is back a moment later (taking the\n // keyboard from a tab for Alt+F / F10 can pass through a blur on its way to the shell).\n let leaving: ReturnType<typeof setTimeout> | undefined;\n const away = () => {\n diag(`menu: window blur hasFocus=${document.hasFocus()}`);\n clearTimeout(leaving);\n leaving = setTimeout(() => { if (!document.hasFocus()) close('away', 'blur'); else diag('menu: blur passed, focus is back'); }, 160);\n };\n const resized = () => close();\n // Keys while nothing in the menu has focus (a click on its padding): Esc closes, arrows enter it.\n const onKey = (event: KeyboardEvent) => {\n if (layers.current?.contains(event.target as Node)) return;\n if (event.key === 'Escape') { event.preventDefault(); close('escape'); return; }\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n focusNext.current = { level: live.current.path.length, edge: event.key === 'ArrowDown' ? 'first' : 'last' };\n tick();\n }\n };\n window.addEventListener('blur', away);\n window.addEventListener('resize', resized);\n window.addEventListener('keydown', onKey);\n return () => { clearTimeout(leaving); setOverlay(-1); window.removeEventListener('blur', away); window.removeEventListener('resize', resized); window.removeEventListener('keydown', onKey); };\n }, [open, anchor.at]);\n\n // The trigger the menu hangs from shows it is open.\n useEffect(() => {\n noteOpen(open ? triggerKey(anchor.at, anchor.pane) : null);\n return () => noteOpen(null);\n }, [open, anchor.at, anchor.pane]);\n\n const layer =(level: number) => layers.current?.querySelector<HTMLElement>(`[data-level=\"${level}\"]`) ?? null;\n\n // After every render: submenus sit beside their row, inside the window; then the focus that was asked for.\n useLayoutEffect(() => {\n if (!open) return;\n // The menu stays inside the window: a button near the start edge (a narrow pane in split view)\n // would push it out, so it slides back in.\n const root = layer(0);\n if (root) {\n const edge = 8;\n root.style.left = anchor.left === undefined ? '' : `${anchor.left}px`;\n root.style.right = anchor.right === undefined ? '' : `${anchor.right}px`;\n const box = root.getBoundingClientRect();\n if (box.left < edge || box.right > window.innerWidth - edge) {\n root.style.left = `${Math.round(Math.max(edge, Math.min(box.left, window.innerWidth - edge - box.width)))}px`;\n root.style.right = 'auto';\n }\n }\n for (let level = 1; level <= path.length; level += 1) {\n const el = layer(level);\n const parent = layer(level - 1);\n const row = parent?.querySelector<HTMLElement>(`[data-item=\"${CSS.escape(path[level - 1]!)}\"]`);\n if (!el || !parent) continue;\n const edge = 8;\n const box = parent.getBoundingClientRect();\n el.style.maxHeight = `${window.innerHeight - edge * 2}px`;\n const { width, height } = el.getBoundingClientRect();\n const left = submenuLeft(box, width, window.innerWidth, edge);\n // It slides in from the side it hangs on.\n el.style.setProperty('--bt-app-sub-from', left < box.left ? '6px' : '-6px');\n const top = Math.max(edge, Math.min((row?.getBoundingClientRect().top ?? box.top) - 6, window.innerHeight - height - edge));\n el.style.left = `${Math.round(left)}px`;\n el.style.top = `${Math.round(top)}px`;\n }\n const want = focusNext.current;\n const el = want ? layer(want.level) : null;\n if (!want || !el) return;\n focusNext.current = null;\n const stops = stopsOf(el);\n const target = want.id ? el.querySelector<HTMLElement>(`[data-item=\"${CSS.escape(want.id)}\"]:not(:disabled)`)\n : want.edge === 'menu' ? el : want.edge === 'last' ? stops[stops.length - 1] : stops[0];\n (target ?? el).focus();\n });\n\n const openSub = (level: number, id: string, focus = false) => {\n setPath(current => [...current.slice(0, level), id]);\n setAsking(null); setError('');\n if (focus) focusNext.current = { level: level + 1, edge: 'first' };\n };\n /** Closes the submenu at `level`; its row gets the focus back. */\n const closeSub = (level: number) => {\n focusNext.current = { level: level - 1, id: path[level - 1] };\n setPath(current => current.slice(0, level - 1));\n setAsking(null); setError('');\n };\n\n async function activate(row: MenuItemRow, level: number) {\n if (row.disabled) return;\n if (row.submenu) {\n if (path[level] === row.id) { focusNext.current = { level: level + 1, edge: 'first' }; tick(); } else openSub(level, row.id, true);\n return;\n }\n setError('');\n if (!row.keepOpen) close('action');\n try { await row.run?.(); }\n catch (failure) { if (row.keepOpen) setError(getError(failure)); else console.error('[shell] menu', failure); }\n }\n\n // -------------------------------------------------------------------------------------------\n // Rows\n\n const item = (id: string, label: string, icon: IconName | undefined, rest: Partial<MenuItemRow> = {}): MenuItemRow => ({ kind: 'item', id, label, icon, ...rest });\n /** \"Plugins…\": a row that opens a section of the app's panel. */\n const section = (name: string) => menuText('section', { section: name });\n const active = shell.api?.activePanel;\n const activeParams = active?.params as TabParams | undefined;\n const canSplit = !!active && (isWeb(active) || active.group.panels.length > 1);\n const languageName = (code: string | undefined) => menu.languages?.list.find(language => language.code === code)?.name;\n const themeState = config.themes?.current();\n const themeId = config.themes && themeState ? config.themes.adapter.preset(themeState.choice) : '';\n const modeList = menu.modes?.list() ?? [];\n\n /** Settings → Language: the panel's Settings, scrolled to that group once it is there. */\n function openSettingsAt(anchor: string) {\n shell.openPanelSection('settings');\n let tries = 0;\n const find = () => {\n const heading = document.getElementById(`${anchor}-h`);\n if (heading) heading.scrollIntoView({ block: 'start' });\n else if ((tries += 1) < 40) setTimeout(find, 50);\n };\n find();\n }\n\n function builtin(id: BuiltinMenuItem): MenuRow {\n switch (id) {\n case 'new-tab': return item(id, t('wb.shell.tab.new'), 'plus', { shortcut: 'Ctrl+T', run: () => shell.shortcut('new-tab') });\n case 'split-right': return item(id, t('wb.shell.menu.splitRight'), 'split', { shortcut: 'Ctrl+\\\\', disabled: !canSplit, run: () => shell.shortcut('split-right') });\n case 'split-down': return item(id, t('wb.shell.menu.splitDown'), 'splitDown', { shortcut: 'Ctrl+Shift+\\\\', disabled: !canSplit, run: () => shell.shortcut('split-down') });\n case 'new-column': return item(id, menuText('newColumn'), 'columns', {\n run: () => {\n // The deck in front, else the first one; with none yet, the deck tab itself (it starts one).\n const target = activeParams?.kind === 'deck' ? activeParams.deckId : decks.list[0]?.id;\n shell.run(target ? { type: 'deck-add', deckId: target } : { type: 'deck' });\n },\n });\n case 'language': return item(id, t('wb.settings.language.title'), 'globe', { submenu: true, hint: languageName(menu.languages?.state().locale) });\n case 'theme': return item(id, menuText('theme'), 'palette', { submenu: true, hint: themeId ? config.themes!.themeName(themeId) : undefined });\n case 'mode': {\n const label = modeList.find(entry => entry.id === mode)?.label;\n return item(id, t('wb.modes.section'), 'layers', { submenu: true, hint: label && modeStatus?.custom ? t('wb.modes.custom', { mode: label }) : label });\n }\n case 'zoom': return { kind: 'zoom', id: 'zoom' };\n case 'plugins': return item(id, section(t('wb.panel.section.plugins')), 'plug', { run: () => shell.openPanelSection('plugins') });\n case 'store': return item(id, section(t('wb.panel.section.store')), 'bag', { run: () => shell.openPanelSection('store') });\n case 'strings': return item(id, section(menuText('strings')), 'globe', { run: () => shell.openPanelSection('languages') });\n case 'workspaces': return item(id, t('wb.ws.title'), 'layout', { submenu: true, hint: workspaces.store.items.find(entry => entry.id === workspaces.active)?.name });\n case 'find': return item(id, menuText('find'), 'search', { shortcut: 'Ctrl+F', disabled: !(shell.api?.panels ?? []).some(panel => isWeb(panel) && panel.api.isVisible), run: () => shell.shortcut('find') });\n case 'shortcuts': return item(id, menuText('shortcuts'), 'keyboard', { run: () => (menu.shortcuts ? menu.shortcuts() : shell.shortcut('command-palette')) });\n case 'palette': return item(id, menuText('palette'), 'command', { shortcut: 'Ctrl+K', run: () => shell.shortcut('command-palette') });\n case 'developer': return item(id, menuText('developer'), 'code', { submenu: true });\n case 'updates': {\n // A real check: the row asks the updater now and says what came of it (the titlebar chip stays the loud part).\n const row = updateRow(update, askedUpdate, version);\n return item(id, row.label, 'reload', {\n hint: row.hint, title: row.title, keepOpen: row.action === 'check' || row.action === 'wait',\n run: async () => {\n if (row.action === 'open') { shell.openPanelSection('updates'); return; }\n if (row.action === 'restart') { await invoke('apply_update'); return; }\n if (row.action !== 'check') return;\n setAskedUpdate(true);\n setUpdate({ state: 'checking' });\n // One request, no retry: whatever the updater answers is what the row says.\n try { setUpdate(parseUpdateStatus(await invoke('update_check'))); } catch { setUpdate({ state: 'error', message: '' }); }\n },\n });\n }\n // Off: a submenu that says what it does before anything reloads. On: one row that leaves it.\n case 'safe-mode': return safe.active\n ? item(id, menuText('safeLeave'), 'shield', { run: () => setSafeMode(false) })\n : item(id, menuText('safeRestart'), 'shield', { submenu: true });\n case 'report': return item(id, menuText('report'), 'flag', { run: () => setReporting(true) });\n case 'about': return item(id, menuText('about', { product: config.product }), 'info', { run: () => shell.openPanelSection('home') });\n case 'settings': return item(id, section(t('wb.panel.section.settings')), 'settings', { run: () => shell.openPanelSection('settings') });\n }\n }\n\n function submenuRows(id: string): MenuRow[] {\n switch (id) {\n case 'language': {\n const languages = menu.languages;\n if (!languages) return [];\n const rows = languageRows(languages.list, languages.state(), { site: t('wb.settings.language.followSite'), system: t('wb.settings.language.followSystem'), more: menuText('moreLanguages') });\n return rows.map(row => {\n if (row.kind !== 'item') return row;\n const choice = languageChoice(row.id);\n // Switching is live and the menu stays: what was picked can be read (or undone) on the spot.\n return choice ? { ...row, keepOpen: true, run: () => languages.set(choice) } : { ...row, run: () => openSettingsAt('language') };\n });\n }\n case 'theme': {\n const themes = config.themes;\n if (!themes || !themeState) return [];\n const list: MenuRow[] = themes.allThemes(themeState.choice).map(theme => item(`theme:${theme.id}`, theme.name, undefined, {\n check: 'radio', checked: theme.id === themeId, keepOpen: true, swatch: themes.adapter.dots(theme),\n // As Appearance does: a theme starts without the customizations made on another one.\n run: () => themes.setChoice(themes.adapter.choiceForId(themeState.choice, theme.id)),\n }));\n return joinGroups([list, [\n item('theme:builder', section(t('wb.panel.section.builder')), 'edit', { run: () => shell.openPanelSection('builder') }),\n item('theme:more', menuText('moreAppearance'), 'palette', { run: () => shell.openPanelSection('themes') }),\n ]]);\n }\n case 'mode': {\n const modes = menu.modes;\n if (!modes) return [];\n const name = (modeId: string) => modeList.find(entry => entry.id === modeId)?.label ?? modeId;\n const apply = async (to: string, keep: boolean) => { await modes.apply(to, keep); setMode(to); close('action'); };\n const at = path.indexOf('mode') + 1;\n if (asking?.reapply && modeStatus) {\n // What applying the mode again turns on and off, said before it happens.\n return [\n { kind: 'note', id: 'mode:reapply-hint', title: t('wb.modes.reapply', { mode: name(asking.to) }), text: t('wb.modes.reapplyHint', { mode: name(asking.to) }) },\n ...(modeStatus.on.length ? [{ kind: 'note' as const, id: 'mode:reapply-on', title: '', text: t('wb.modes.turnsOn', { list: modeStatus.on.join(', ') }) }] : []),\n ...(modeStatus.off.length ? [{ kind: 'note' as const, id: 'mode:reapply-off', title: '', text: t('wb.modes.turnsOff', { list: modeStatus.off.join(', ') }) }] : []),\n item('mode:reapply-yes', t('wb.modes.reapply', { mode: name(asking.to) }), 'reload', { keepOpen: true, run: async () => { await modes.reapply?.(); close('action'); } }),\n item('mode:cancel', t('wb.common.cancel'), 'close', { keepOpen: true, run: () => { focusNext.current = { level: at, id: 'mode:reapply' }; setAsking(null); } }),\n ];\n }\n if (asking) {\n // The question Settings asks: what was changed by hand stays, or the mode is taken as it is.\n return [\n { kind: 'note', id: 'mode:question', title: t('wb.modes.keepQuestion'), text: t('wb.modes.keepHint', { count: asking.changes }) },\n item('mode:keep', t('wb.modes.keep'), 'check', { keepOpen: true, run: () => apply(asking.to, true) }),\n item('mode:reset', t('wb.modes.reset', { mode: name(asking.to) }), 'reload', { keepOpen: true, run: () => apply(asking.to, false) }),\n item('mode:cancel', t('wb.common.cancel'), 'close', { keepOpen: true, run: () => { focusNext.current = { level: at, id: `mode:${asking.to}` }; setAsking(null); } }),\n ];\n }\n const list = modeList.map(entry => item(`mode:${entry.id}`, entry.label, undefined, {\n check: 'radio', checked: entry.id === mode, keepOpen: true,\n run: async () => {\n if (entry.id === mode) { close('action'); return; }\n const changes = await modes.changes(entry.id);\n if (changes > 0) { focusNext.current = { level: at, edge: 'first' }; setAsking({ to: entry.id, changes }); } else await apply(entry.id, false);\n },\n }));\n if (!mode || !modeStatus?.custom || !modes.reapply) return list;\n // The mode is a starting point: the features moved on, and nothing applies it again unasked.\n const grew: MenuRow[] = modeStatus.added > 0 ? [{ kind: 'note', id: 'mode:grew', title: '', text: t('wb.modes.grew', { mode: name(mode), count: modeStatus.added }) }] : [];\n return joinGroups([list, [\n { kind: 'note', id: 'mode:custom', title: t('wb.modes.custom', { mode: name(mode) }) },\n ...grew,\n item('mode:reapply', t('wb.modes.reapply', { mode: name(mode) }), 'reload', {\n keepOpen: true,\n run: () => {\n focusNext.current = { level: at, edge: 'first' };\n setAsking({ to: mode, changes: 0, reapply: true });\n if (modeStatus.added > 0) void modes.seen?.().then(() => setModeStatus({ ...modeStatus, added: 0 }), () => {});\n },\n }),\n ]]);\n }\n case 'workspaces': {\n const list = workspaceList();\n const rows: MenuRow[] = list.length\n ? list.map(entry => item(`ws:${entry.id}`, entry.name, undefined, { check: 'radio', checked: entry.id === workspaces.active, hint: t('wb.ws.tabs', { count: entry.tabs }), run: () => restoreWorkspace(entry.id) }))\n : [{ kind: 'note', id: 'ws:none', title: '', text: menuText('noWorkspaces') }];\n return joinGroups([rows, [item('ws:save', menuText('saveLayout'), 'plus', { run: openWorkspaceSave })]]);\n }\n case 'safe-mode': return [\n { kind: 'note', id: 'safe:question', title: menuText('safeQuestion'), text: menuText('safeExplain') },\n item('safe:confirm', menuText('safeConfirm'), 'shield', { run: () => setSafeMode(true) }),\n item('safe:cancel', t('wb.common.cancel'), 'close', { keepOpen: true, run: () => closeSub(path.indexOf('safe-mode') + 1) }),\n ];\n case 'developer': return [\n item('dev:mode', t('wb.dev.mode'), undefined, { check: 'checkbox', checked: dev.enabled, keepOpen: true, run: async () => { await invoke('dev_set', { enabled: !dev.enabled }); await refreshDev(); } }),\n item('dev:folder', menuText('pluginsFolder'), 'folder', { run: () => invoke('plugins_open_folder') }),\n ];\n default: return specRows(findSpec(groups, id)?.submenu?.() ?? []);\n }\n }\n\n const groups = menu.groups ?? DEFAULT_MENU;\n const env: MenuEnv = {\n decks: !!config.deck, languages: !!menu.languages, themes: !!config.themes, modes: modeList.length > 0,\n zoom: hasFeature('zoom'), find: hasFeature('find'), safeMode: hasFeature('safeMode'), store: hasFeature('store'), strings: config.features?.strings === true, workspaces: hasFeature('workspaces'), developer: hasFeature('developer'), updates: hasFeature('updates'),\n };\n const rootRows = () => joinGroups(planMenu(groups, env).map(group => group.flatMap(entry => (typeof entry === 'string' ? [builtin(entry)] : specRows([entry])))));\n const labelOf = (id: string, rows: MenuRow[]) => rows.find((row): row is MenuItemRow => row.kind === 'item' && row.id === id)?.label ?? '';\n\n // -------------------------------------------------------------------------------------------\n // Keyboard and pointer\n\n function onKey(event: ReactKeyboardEvent<HTMLDivElement>) {\n const target = event.target as HTMLElement;\n const menuEl = target.closest<HTMLElement>('[data-level]');\n if (!menuEl) return;\n const level = Number(menuEl.dataset.level);\n const { key } = event;\n // The keyboard leads now: the row under a resting pointer takes the focus back only when the pointer moves on.\n clearTimeout(hover.current.timer);\n hover.current = { el: null };\n const keys = submenuKeys(getComputedStyle(menuEl).direction === 'rtl');\n const done = () => { event.preventDefault(); event.stopPropagation(); };\n if (key === 'Escape') { done(); if (level > 0) closeSub(level); else close('escape'); return; }\n if (key === 'Tab') { done(); close('escape'); return; }\n // The zoom row is one stop: left and right move through − + and reset (laid out left to right).\n if ('zoom' in target.dataset && (key === 'ArrowLeft' || key === 'ArrowRight')) {\n done();\n const controls = Array.from(menuEl.querySelectorAll<HTMLElement>('[data-zoom]'));\n controls[Math.max(0, Math.min(controls.length - 1, controls.indexOf(target) + (key === 'ArrowRight' ? 1 : -1)))]?.focus();\n return;\n }\n if (key === 'ArrowDown' || key === 'ArrowUp' || key === 'Home' || key === 'End') {\n done();\n const stops = stopsOf(menuEl);\n stops[moveStop(stops.indexOf(target), key, stops.length)]?.focus();\n return;\n }\n if (key === keys.open) {\n if (target.getAttribute('aria-haspopup') === 'menu' && target.dataset.item) { done(); openSub(level, target.dataset.item, true); }\n return;\n }\n if (key === keys.close) { if (level > 0) { done(); closeSub(level); } return; }\n const now = Date.now();\n const typing = !!typed.current.text && now - typed.current.at <= 700;\n // Enter, and Space outside a typed word: the row's own click chooses it; on the menu itself nothing is chosen.\n if (key === 'Enter' || (key === ' ' && !typing)) {\n if (target === menuEl) done();\n typed.current.text = '';\n return;\n }\n if (key.length !== 1 || event.ctrlKey || event.metaKey || event.altKey) return;\n // Type-ahead: the next row whose label starts with what was typed.\n done();\n typed.current = { text: typing ? typed.current.text + key : key, at: now };\n const stops = stopsOf(menuEl);\n const found = typeahead(stops.map(el => el.dataset.label ?? ''), stops.indexOf(target), typed.current.text);\n if (found >= 0) stops[found]!.focus();\n }\n\n /** The pointer moves the focus, like the arrows do: one highlight. A row with a submenu opens it after a beat. */\n function onHover(row: MenuItemRow | null, level: number, el: HTMLElement) {\n if (hover.current.el === el) return;\n clearTimeout(hover.current.timer);\n hover.current = { el };\n if (document.activeElement !== el) el.focus({ preventScroll: true });\n if (row?.submenu) {\n if (path[level] !== row.id) hover.current.timer = setTimeout(() => openSub(level, row.id), 170);\n } else if (path.length > level) {\n hover.current.timer = setTimeout(() => { setPath(current => current.slice(0, level)); setAsking(null); }, 280);\n }\n }\n\n // -------------------------------------------------------------------------------------------\n\n function renderRow(row: MenuRow, level: number, index: number) {\n if (row.kind === 'separator') return <hr key={`sep${index}`} role=\"separator\"/>;\n if (row.kind === 'note') {\n return <div key={row.id} className={`bt-app-note${row.tone === 'error' ? ' is-error' : ''}`} role={row.tone === 'error' ? 'alert' : 'presentation'}>\n {row.title && <strong>{row.title}</strong>}{row.text && <span>{row.text}</span>}\n </div>;\n }\n if (row.kind === 'zoom') {\n const tab = zoomTarget();\n const factor = zoomOf(tab);\n const control = (id: string, label: string, icon: IconName, direction: 1 | -1 | 0, off: boolean, className = '') =>\n <button type=\"button\" role=\"menuitem\" tabIndex={-1} className={className} data-item={`zoom:${id}`} data-zoom=\"\" data-label={menuText('zoom')}\n aria-label={label} title={tab ? label : menuText('zoomNone')} aria-disabled={off}\n onPointerMove={event => onHover(null, level, event.currentTarget)} onClick={() => { if (!off) void stepZoom(direction, tab); }}>\n <Icon name={icon}/>\n </button>;\n return <div key=\"zoom\" className={`bt-app-zoom${tab ? '' : ' is-off'}`} role=\"group\" aria-label={menuText('zoom')} title={tab ? undefined : menuText('zoomNone')}>\n <Icon name=\"zoom\"/>\n <span className=\"bt-menu-label\">{menuText('zoom')}</span>\n <span className=\"bt-app-zoom-step\">\n {control('out', menuText('zoomOut'), 'minus', -1, !tab || factor <= ZOOM_MIN)}\n <output className=\"bt-app-zoom-value\" aria-live=\"polite\">{percent(factor)}</output>\n {control('in', menuText('zoomIn'), 'plus', 1, !tab || factor >= ZOOM_MAX)}\n </span>\n {control('reset', menuText('zoomReset'), 'reload', 0, !tab || factor === 1, 'bt-app-zoom-reset')}\n </div>;\n }\n const expanded = row.submenu ? path[level] === row.id : undefined;\n return <button key={row.id} type=\"button\" tabIndex={-1} disabled={row.disabled} data-item={row.id} data-label={row.label} title={row.title}\n role={row.check === 'radio' ? 'menuitemradio' : row.check ? 'menuitemcheckbox' : 'menuitem'} aria-checked={row.check ? !!row.checked : undefined}\n aria-haspopup={row.submenu ? 'menu' : undefined} aria-expanded={expanded}\n onPointerMove={event => onHover(row, level, event.currentTarget)} onClick={() => void activate(row, level)}>\n {row.check ? <span className=\"bt-app-check\">{row.checked && <Icon name=\"check\"/>}</span> : row.icon ? <Icon name={row.icon}/> : <span className=\"bt-app-check\"/>}\n {/* A language's own name keeps its own direction (<bdi>) but starts where every other label does. */}\n <span className=\"bt-menu-label\">{row.lang ? <bdi lang={row.lang} dir={row.dir}>{row.label}</bdi> : row.label}</span>\n {row.swatch && <span className=\"wb-dots\" aria-hidden=\"true\" style={{ background: row.swatch.page }}>\n <i style={{ background: row.swatch.bg, boxShadow: `inset 0 0 0 1px ${row.swatch.border}` }}/><i style={{ background: row.swatch.text }}/><i style={{ background: row.swatch.accent }}/>\n </span>}\n {row.hint && <span className=\"bt-app-hint\">{row.hint}</span>}\n {row.shortcut && <span className=\"bt-menu-keys\">{shortcutText(row.shortcut, mac)}</span>}\n {row.submenu && <Icon name=\"chevronRight\" className=\"bt-app-chevron\"/>}\n </button>;\n }\n\n function renderMenus() {\n const root = rootRows();\n const levels: Array<{ rows: MenuRow[]; label: string }> = [{ rows: root, label: menuText('label') }];\n path.forEach((id, index) => levels.push({ rows: submenuRows(id), label: labelOf(id, levels[index]!.rows) }));\n // An error belongs to the level it happened on: the deepest one open.\n if (error) levels[levels.length - 1]!.rows = [...levels[levels.length - 1]!.rows, { kind: 'note', id: 'error', title: '', text: error, tone: 'error' }];\n return levels.map(({ rows, label }, level) => <div key={level === 0 ? 'root' : `${level}:${path[level - 1]}`} role=\"menu\" aria-label={label} tabIndex={-1} data-level={level}\n className={level === 0 ? `bt-menu bt-app-menu bt-pop${anchor.at === 'logo' ? '' : ' bt-pop--right'}` : 'bt-menu bt-app-menu bt-app-sub'}\n style={level === 0 ? { top: anchor.top, left: anchor.left, right: anchor.right, maxHeight: `calc(100vh - ${anchor.top + 8}px)` } : undefined}>\n {rows.map((row, index) => renderRow(row, level, index))}\n </div>);\n }\n\n const label = menuText('label');\n return <>\n {home() === 'button' && <button ref={button} type=\"button\" className=\"bt-app-button\" aria-haspopup=\"menu\" aria-expanded={open && anchor.at === 'button'} aria-label={label} title={`${label} (${APP_MENU_KEYS})`}\n onClick={event => (open && anchor.at === 'button' ? close('escape') : show({ keyboard: event.detail === 0 }))}>\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"5.75\" r=\"1.6\"/><circle cx=\"12\" cy=\"12\" r=\"1.6\"/><circle cx=\"12\" cy=\"18.25\" r=\"1.6\"/></svg>\n </button>}\n {open && createPortal(<div className=\"bt-menu-backdrop\" onMouseDown={() => close()} onContextMenu={event => { event.preventDefault(); close(); }}>\n <div ref={layers} className=\"bt-app-layers\" onMouseDown={event => event.stopPropagation()} onContextMenu={event => { event.preventDefault(); event.stopPropagation(); }} onKeyDown={onKey}>\n {renderMenus()}\n </div>\n </div>, document.body)}\n {reporting && <ReportDialog onClose={() => setReporting(false)}/>}\n </>;\n}\n\n/**\n * The app's logo at the start of the titlebar: a second trigger of the same menu, hung under the\n * logo. A click opens it; a press that turns into a drag moves the window, as the titlebar around\n * it does; a right-click shows the window's system menu, where a titlebar icon has always had it.\n */\nexport function AppMenuLogo() {\n useT();\n const expanded = useExpanded('logo');\n const press = useRef<{ x: number; y: number; dragged: boolean } | null>(null);\n const { product, logo } = site();\n const label = menuText('label');\n return <button type=\"button\" className=\"bt-titlebar-logo\" aria-haspopup=\"menu\" aria-expanded={expanded} aria-label={`${product}: ${label}`} title={`${product} · ${label}`}\n onPointerDown={event => { if (event.button === 0) press.current = { x: event.clientX, y: event.clientY, dragged: false }; }}\n onPointerMove={event => {\n const start = press.current;\n if (!start || start.dragged || !(event.buttons & 1)) return;\n // The press became a drag: the window moves, and no menu opens when the button is released.\n if (Math.hypot(event.clientX - start.x, event.clientY - start.y) > 5) { start.dragged = true; startDrag(); }\n }}\n onClick={event => {\n const dragged = press.current?.dragged;\n press.current = null;\n if (!dragged) openAppMenu({ anchor: 'logo', toggle: true, keyboard: event.detail === 0 });\n }}\n onContextMenu={event => {\n event.preventDefault(); event.stopPropagation();\n const scale = window.devicePixelRatio || 1;\n systemMenu(Math.round(event.screenX * scale), Math.round(event.screenY * scale));\n }}>\n <img src={logo} alt=\"\" draggable={false}/>\n </button>;\n}\n\n/** The app's menu trigger: `trigger` as `AppMenu` takes it, else `ShellMenu.trigger`, else `pane`. */\nexport const menuTrigger = (trigger?: AppMenuTrigger | boolean): AppMenuTrigger => resolveTrigger(trigger, site().menu?.trigger);\n\n/**\n * One pane's menu button, at the end of its toolbar (the app's mark inside): opens the app menu\n * under itself, or closes it when it is open there. Shown when the app's trigger is `pane`.\n */\nexport function PaneMenuButton({ pane, children }: { pane: string; children: ReactNode }) {\n useT();\n const expanded = useExpanded(triggerKey('pane', pane));\n const label = menuText('label');\n const { product } = site();\n return <button type=\"button\" className=\"bt-brand-button bt-pane-menu\" data-pane={pane} aria-haspopup=\"menu\" aria-expanded={expanded}\n aria-label={`${product}: ${label}`} title={`${product} · ${label} (${APP_MENU_KEYS})`}\n onClick={event => openAppMenu({ anchor: 'pane', pane, toggle: true, keyboard: event.detail === 0 })}>\n {children}\n </button>;\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import { type PaletteAction, type PaletteContext } from './paletteModel.ts';
2
+ /** Ctrl+K palette. The shell rises above the tab webviews (or hides them) while it is open. */
3
+ export declare function CommandPalette({ context, onRun, onClose }: {
4
+ context: PaletteContext;
5
+ onRun: (action: PaletteAction) => void;
6
+ onClose: () => void;
7
+ }): import("react").ReactPortal;
@@ -0,0 +1,118 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useRef, useState } from 'react';
3
+ import { createPortal } from 'react-dom';
4
+ import { useT } from "./hooks.js";
5
+ import { t } from "./i18n.js";
6
+ import { Avatar, Icon } from "./icons.js";
7
+ import { buildItems, moveSelection } from "./paletteModel.js";
8
+ import { hasFeature, site } from "./site.js";
9
+ import { setOverlay } from "./state.js";
10
+ /** Leading visual for a palette row: the tab's favicon, the account avatar or the item's glyph. */
11
+ function leading(item, context) {
12
+ const [kind, ...rest] = item.id.split(':');
13
+ const key = rest.join(':');
14
+ if (kind === 'tab') {
15
+ const favicon = context.tabs.find(tab => `tab:${tab.id}` === item.id)?.favicon;
16
+ return favicon ? _jsx("img", { src: favicon, alt: "", width: 16, height: 16 }) : _jsx(Icon, { name: "globe" });
17
+ }
18
+ if (kind === 'profile') {
19
+ const profile = context.profiles.find(p => p.id === key);
20
+ return _jsx(Avatar, { name: profile?.name ?? '?', color: profile?.color ?? '#8a90a6', size: 20 });
21
+ }
22
+ if (item.icon)
23
+ return _jsx(Icon, { name: item.icon });
24
+ if (kind === 'deck' || kind === 'deck-new')
25
+ return _jsx(Icon, { name: "grid" });
26
+ if (kind === 'deck-add')
27
+ return _jsx(Icon, { name: "plus" });
28
+ if (kind === 'deck-focus')
29
+ return _jsx(Icon, { name: "list" });
30
+ if (kind === 'ws')
31
+ return _jsx(Icon, { name: "grid" });
32
+ if (kind === 'ws-save')
33
+ return _jsx(Icon, { name: "plus" });
34
+ return _jsx(Icon, { name: "search" });
35
+ }
36
+ const shortHint = (hint) => hint.replace(/^https?:\/\/(www\.)?/, '');
37
+ /** The frame's group names are translated; the site names its own groups; plugin groups are the plugins' names. */
38
+ const GROUPS = {
39
+ Tabs: 'wb.palette.group.tabs', Deck: 'wb.palette.group.deck', Workspaces: 'wb.palette.group.workspaces', Profiles: 'wb.palette.group.profiles',
40
+ };
41
+ const groupLabel = (group) => (GROUPS[group] ? t(GROUPS[group]) : site().palette.groupLabel?.(group) ?? group);
42
+ /** Ctrl+K palette. The shell rises above the tab webviews (or hides them) while it is open. */
43
+ export function CommandPalette({ context, onRun, onClose }) {
44
+ const [query, setQuery] = useState('');
45
+ const [selected, setSelected] = useState(0);
46
+ const input = useRef(null);
47
+ const list = useRef(null);
48
+ const items = useMemo(() => {
49
+ const { palette, product, deck, media } = site();
50
+ return buildItems(context, query, { site: palette, product, decks: !!deck, media: !!media, workspaces: hasFeature('workspaces') });
51
+ }, [context, query]);
52
+ useEffect(() => {
53
+ setOverlay(1);
54
+ input.current?.focus();
55
+ const close = () => onClose();
56
+ window.addEventListener('blur', close);
57
+ return () => { setOverlay(-1); window.removeEventListener('blur', close); };
58
+ }, []);
59
+ useEffect(() => setSelected(0), [query]);
60
+ useEffect(() => { list.current?.querySelector('[aria-selected="true"]')?.scrollIntoView({ block: 'nearest' }); }, [selected]);
61
+ const run = (index) => {
62
+ const item = items[index];
63
+ if (!item)
64
+ return;
65
+ if (item.action.type === 'complete') {
66
+ setQuery(item.action.text);
67
+ input.current?.focus();
68
+ return;
69
+ }
70
+ onClose();
71
+ onRun(item.action);
72
+ };
73
+ const onKeyDown = (event) => {
74
+ if (event.nativeEvent.isComposing)
75
+ return;
76
+ // Ctrl+K again closes, like the shortcut that opened it.
77
+ if ((event.ctrlKey || event.metaKey) && !event.altKey && !event.shiftKey && event.key.toLowerCase() === 'k') {
78
+ event.preventDefault();
79
+ event.stopPropagation();
80
+ onClose();
81
+ return;
82
+ }
83
+ if (event.key === 'ArrowDown' || (event.key === 'Tab' && !event.shiftKey)) {
84
+ event.preventDefault();
85
+ setSelected(i => moveSelection(i, 1, items.length));
86
+ }
87
+ else if (event.key === 'ArrowUp' || (event.key === 'Tab' && event.shiftKey)) {
88
+ event.preventDefault();
89
+ setSelected(i => moveSelection(i, -1, items.length));
90
+ }
91
+ else if (event.key === 'Home' && event.ctrlKey) {
92
+ event.preventDefault();
93
+ setSelected(0);
94
+ }
95
+ else if (event.key === 'End' && event.ctrlKey) {
96
+ event.preventDefault();
97
+ setSelected(Math.max(0, items.length - 1));
98
+ }
99
+ else if (event.key === 'Enter') {
100
+ event.preventDefault();
101
+ run(selected);
102
+ }
103
+ else if (event.key === 'Escape') {
104
+ event.preventDefault();
105
+ onClose();
106
+ }
107
+ event.stopPropagation();
108
+ };
109
+ const tr = useT();
110
+ let lastGroup = '';
111
+ return createPortal(_jsx("div", { className: "bt-palette-backdrop", onMouseDown: onClose, children: _jsxs("div", { className: "bt-palette bt-pop", role: "dialog", "aria-label": tr('wb.palette.title'), onMouseDown: event => event.stopPropagation(), onKeyDown: onKeyDown, children: [_jsxs("div", { className: "bt-palette-field", children: [_jsx(Icon, { name: "search" }), _jsx("input", { ref: input, className: "bt-palette-input", placeholder: site().palette.placeholder(), value: query, onChange: event => setQuery(event.target.value), role: "combobox", "aria-expanded": "true", "aria-controls": "bt-palette-list", "aria-activedescendant": items[selected] ? `bt-pal-${selected}` : undefined, spellCheck: false }), _jsx("kbd", { className: "bt-kbd", children: "Esc" })] }), _jsxs("div", { className: "bt-palette-list", id: "bt-palette-list", role: "listbox", ref: list, children: [items.length === 0 && _jsx("div", { className: "bt-palette-empty", children: tr('wb.palette.none') }), items.map((item, index) => {
112
+ const heading = item.group !== lastGroup ? item.group : null;
113
+ lastGroup = item.group;
114
+ return _jsxs("div", { children: [heading && _jsx("div", { className: "bt-palette-group", children: groupLabel(heading) }), _jsxs("div", { id: `bt-pal-${index}`, role: "option", "aria-selected": index === selected, className: "bt-palette-item", onMouseMove: () => { if (selected !== index)
115
+ setSelected(index); }, onClick: () => run(index), children: [_jsx("span", { className: "bt-palette-icon", children: leading(item, context) }), _jsx("span", { className: "bt-palette-label", children: item.label }), item.hint && _jsx("span", { className: `bt-palette-hint ${item.hint === tr('wb.palette.active') ? 'bt-palette-hint--tag' : ''}`, children: shortHint(item.hint) }), _jsx("span", { className: "bt-palette-enter", "aria-hidden": "true", children: "\u21B5" })] })] }, item.id);
116
+ })] }), _jsxs("div", { className: "bt-palette-foot", children: [_jsxs("span", { children: [_jsx("kbd", { className: "bt-kbd", children: "\u2191" }), _jsx("kbd", { className: "bt-kbd", children: "\u2193" }), " ", tr('wb.palette.navigate')] }), _jsxs("span", { children: [_jsx("kbd", { className: "bt-kbd", children: "\u21B5" }), " ", tr('wb.common.open')] }), _jsxs("span", { children: [_jsx("kbd", { className: "bt-kbd", children: tr('wb.web.tabKey') }), " ", tr('wb.palette.next')] }), _jsxs("span", { className: "bt-palette-foot-end", children: [_jsx("kbd", { className: "bt-kbd", children: "Ctrl" }), _jsx("kbd", { className: "bt-kbd", children: "K" }), " ", tr('wb.common.close')] })] })] }) }), document.body);
117
+ }
118
+ //# sourceMappingURL=CommandPalette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.js","sourceRoot":"","sources":["../../../../../../shell/src/frame/CommandPalette.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useRef, useState, type KeyboardEvent as ReactKeyboardEvent, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useT } from './hooks.ts';\nimport { t } from './i18n.ts';\nimport { Avatar, Icon } from './icons.tsx';\nimport { buildItems, moveSelection, type PaletteAction, type PaletteContext, type PaletteItem } from './paletteModel.ts';\nimport { hasFeature, site } from './site.ts';\nimport { setOverlay } from './state.ts';\n\n/** Leading visual for a palette row: the tab's favicon, the account avatar or the item's glyph. */\nfunction leading(item: PaletteItem, context: PaletteContext): ReactNode {\n const [kind, ...rest] = item.id.split(':');\n const key = rest.join(':');\n if (kind === 'tab') {\n const favicon = context.tabs.find(tab => `tab:${tab.id}` === item.id)?.favicon;\n return favicon ? <img src={favicon} alt=\"\" width={16} height={16}/> : <Icon name=\"globe\"/>;\n }\n if (kind === 'profile') {\n const profile = context.profiles.find(p => p.id === key);\n return <Avatar name={profile?.name ?? '?'} color={profile?.color ?? '#8a90a6'} size={20}/>;\n }\n if (item.icon) return <Icon name={item.icon}/>;\n if (kind === 'deck' || kind === 'deck-new') return <Icon name=\"grid\"/>;\n if (kind === 'deck-add') return <Icon name=\"plus\"/>;\n if (kind === 'deck-focus') return <Icon name=\"list\"/>;\n if (kind === 'ws') return <Icon name=\"grid\"/>;\n if (kind === 'ws-save') return <Icon name=\"plus\"/>;\n return <Icon name=\"search\"/>;\n}\n\nconst shortHint = (hint: string) => hint.replace(/^https?:\\/\\/(www\\.)?/, '');\n\n/** The frame's group names are translated; the site names its own groups; plugin groups are the plugins' names. */\nconst GROUPS: Record<string, string> = {\n Tabs: 'wb.palette.group.tabs', Deck: 'wb.palette.group.deck', Workspaces: 'wb.palette.group.workspaces', Profiles: 'wb.palette.group.profiles',\n};\nconst groupLabel = (group: string) => (GROUPS[group] ? t(GROUPS[group]!) : site().palette.groupLabel?.(group) ?? group);\n\n/** Ctrl+K palette. The shell rises above the tab webviews (or hides them) while it is open. */\nexport function CommandPalette({ context, onRun, onClose }: { context: PaletteContext; onRun: (action: PaletteAction) => void; onClose: () => void }) {\n const [query, setQuery] = useState('');\n const [selected, setSelected] = useState(0);\n const input = useRef<HTMLInputElement>(null);\n const list = useRef<HTMLDivElement>(null);\n const items = useMemo(() => {\n const { palette, product, deck, media } = site();\n return buildItems(context, query, { site: palette, product, decks: !!deck, media: !!media, workspaces: hasFeature('workspaces') });\n }, [context, query]);\n\n useEffect(() => {\n setOverlay(1);\n input.current?.focus();\n const close = () => onClose();\n window.addEventListener('blur', close);\n return () => { setOverlay(-1); window.removeEventListener('blur', close); };\n }, []);\n useEffect(() => setSelected(0), [query]);\n useEffect(() => { list.current?.querySelector('[aria-selected=\"true\"]')?.scrollIntoView({ block: 'nearest' }); }, [selected]);\n\n const run = (index: number) => {\n const item = items[index];\n if (!item) return;\n if (item.action.type === 'complete') { setQuery(item.action.text); input.current?.focus(); return; }\n onClose();\n onRun(item.action);\n };\n const onKeyDown = (event: ReactKeyboardEvent) => {\n if (event.nativeEvent.isComposing) return;\n // Ctrl+K again closes, like the shortcut that opened it.\n if ((event.ctrlKey || event.metaKey) && !event.altKey && !event.shiftKey && event.key.toLowerCase() === 'k') { event.preventDefault(); event.stopPropagation(); onClose(); return; }\n if (event.key === 'ArrowDown' || (event.key === 'Tab' && !event.shiftKey)) { event.preventDefault(); setSelected(i => moveSelection(i, 1, items.length)); }\n else if (event.key === 'ArrowUp' || (event.key === 'Tab' && event.shiftKey)) { event.preventDefault(); setSelected(i => moveSelection(i, -1, items.length)); }\n else if (event.key === 'Home' && event.ctrlKey) { event.preventDefault(); setSelected(0); }\n else if (event.key === 'End' && event.ctrlKey) { event.preventDefault(); setSelected(Math.max(0, items.length - 1)); }\n else if (event.key === 'Enter') { event.preventDefault(); run(selected); }\n else if (event.key === 'Escape') { event.preventDefault(); onClose(); }\n event.stopPropagation();\n };\n\n const tr = useT();\n let lastGroup = '';\n return createPortal(<div className=\"bt-palette-backdrop\" onMouseDown={onClose}>\n <div className=\"bt-palette bt-pop\" role=\"dialog\" aria-label={tr('wb.palette.title')} onMouseDown={event => event.stopPropagation()} onKeyDown={onKeyDown}>\n <div className=\"bt-palette-field\">\n <Icon name=\"search\"/>\n <input ref={input} className=\"bt-palette-input\" placeholder={site().palette.placeholder()} value={query}\n onChange={event => setQuery(event.target.value)} role=\"combobox\" aria-expanded=\"true\" aria-controls=\"bt-palette-list\"\n aria-activedescendant={items[selected] ? `bt-pal-${selected}` : undefined} spellCheck={false}/>\n <kbd className=\"bt-kbd\">Esc</kbd>\n </div>\n <div className=\"bt-palette-list\" id=\"bt-palette-list\" role=\"listbox\" ref={list}>\n {items.length === 0 && <div className=\"bt-palette-empty\">{tr('wb.palette.none')}</div>}\n {items.map((item, index) => {\n const heading = item.group !== lastGroup ? item.group : null;\n lastGroup = item.group;\n return <div key={item.id}>\n {heading && <div className=\"bt-palette-group\">{groupLabel(heading)}</div>}\n <div id={`bt-pal-${index}`} role=\"option\" aria-selected={index === selected} className=\"bt-palette-item\"\n onMouseMove={() => { if (selected !== index) setSelected(index); }} onClick={() => run(index)}>\n <span className=\"bt-palette-icon\">{leading(item, context)}</span>\n <span className=\"bt-palette-label\">{item.label}</span>\n {item.hint && <span className={`bt-palette-hint ${item.hint === tr('wb.palette.active') ? 'bt-palette-hint--tag' : ''}`}>{shortHint(item.hint)}</span>}\n <span className=\"bt-palette-enter\" aria-hidden=\"true\">↵</span>\n </div>\n </div>;\n })}\n </div>\n <div className=\"bt-palette-foot\">\n <span><kbd className=\"bt-kbd\">↑</kbd><kbd className=\"bt-kbd\">↓</kbd> {tr('wb.palette.navigate')}</span>\n <span><kbd className=\"bt-kbd\">↵</kbd> {tr('wb.common.open')}</span>\n <span><kbd className=\"bt-kbd\">{tr('wb.web.tabKey')}</kbd> {tr('wb.palette.next')}</span>\n <span className=\"bt-palette-foot-end\"><kbd className=\"bt-kbd\">Ctrl</kbd><kbd className=\"bt-kbd\">K</kbd> {tr('wb.common.close')}</span>\n </div>\n </div>\n </div>, document.body);\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import type { IDockviewPanelProps } from 'dockview';
2
+ import { type DeckParams } from './state.ts';
3
+ import './deck.css';
4
+ export type DeckCommand = 'column-prev' | 'column-next' | 'column-page-prev' | 'column-page-next' | 'column-mark-read' | 'column-jump-unread' | 'deck-compose' | `column-${1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9}`;
5
+ /** Focuses a column: it becomes the deck's focused column, its page is shown and its webview gets the keys. */
6
+ export declare function focusColumn(deckId: string, columnId: string, giveKeys?: boolean): void;
7
+ export declare function runDeckCommand(deckId: string, command: string): void;
8
+ export declare function toggleCompose(deckId: string, profile?: string): void;
9
+ export declare function DeckView(props: IDockviewPanelProps<DeckParams>): import("react").JSX.Element;
10
+ /** Unread total of a deck on its dockview tab. */
11
+ export declare function DeckTabBadge({ deckId }: {
12
+ deckId: string;
13
+ }): import("react").JSX.Element | null;