waybetter 0.1.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (515) hide show
  1. package/README.md +143 -9
  2. package/bin/waybetter.mjs +46 -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/privacy.mjs +768 -0
  9. package/cli/release.mjs +444 -0
  10. package/cli/remote.mjs +260 -0
  11. package/cli/store.mjs +326 -0
  12. package/cli/strings.mjs +121 -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 +59 -0
  74. package/dist/runtime/stringPackTranslate.js +264 -0
  75. package/dist/runtime/stringPackTranslate.js.map +1 -0
  76. package/dist/runtime/stringPacks.d.ts +200 -0
  77. package/dist/runtime/stringPacks.js +474 -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/themeChoice.d.ts +52 -0
  89. package/dist/runtime/themeChoice.js +69 -0
  90. package/dist/runtime/themeChoice.js.map +1 -0
  91. package/dist/runtime/themeComponents.d.ts +435 -0
  92. package/dist/runtime/themeComponents.js +463 -0
  93. package/dist/runtime/themeComponents.js.map +1 -0
  94. package/dist/runtime/themeDecor.d.ts +73 -0
  95. package/dist/runtime/themeDecor.js +131 -0
  96. package/dist/runtime/themeDecor.js.map +1 -0
  97. package/dist/runtime/themeDoctor.d.ts +11 -0
  98. package/dist/runtime/themeDoctor.js +51 -0
  99. package/dist/runtime/themeDoctor.js.map +1 -0
  100. package/dist/runtime/themeIcons.d.ts +130 -0
  101. package/dist/runtime/themeIcons.js +263 -0
  102. package/dist/runtime/themeIcons.js.map +1 -0
  103. package/dist/runtime/themeRuntime.d.ts +100 -0
  104. package/dist/runtime/themeRuntime.js +497 -0
  105. package/dist/runtime/themeRuntime.js.map +1 -0
  106. package/dist/runtime/themeSchema.d.ts +10 -0
  107. package/dist/runtime/themeSchema.js +150 -0
  108. package/dist/runtime/themeSchema.js.map +1 -0
  109. package/dist/runtime/themeSpec.d.ts +259 -0
  110. package/dist/runtime/themeSpec.js +439 -0
  111. package/dist/runtime/themeSpec.js.map +1 -0
  112. package/dist/runtime/themeTokens.d.ts +12 -0
  113. package/dist/runtime/themeTokens.js +14 -6
  114. package/dist/runtime/themeTokens.js.map +1 -1
  115. package/dist/runtime/themeVariants.d.ts +30 -0
  116. package/dist/runtime/themeVariants.js +53 -0
  117. package/dist/runtime/themeVariants.js.map +1 -0
  118. package/dist/runtime/ui.d.ts +192 -0
  119. package/dist/runtime/ui.js +926 -0
  120. package/dist/runtime/ui.js.map +1 -0
  121. package/dist/shell/InstallDialog.d.ts +40 -0
  122. package/dist/shell/InstallDialog.js +170 -0
  123. package/dist/shell/InstallDialog.js.map +1 -0
  124. package/dist/shell/StoreView.d.ts +66 -0
  125. package/dist/shell/StoreView.js +103 -0
  126. package/dist/shell/StoreView.js.map +1 -0
  127. package/dist/shell/addressModel.js.map +1 -1
  128. package/dist/shell/chrome.js.map +1 -1
  129. package/dist/shell/deckModel.d.ts +117 -0
  130. package/dist/shell/deckModel.js +267 -0
  131. package/dist/shell/deckModel.js.map +1 -0
  132. package/dist/shell/frame/AccountSwitcher.d.ts +42 -0
  133. package/dist/shell/frame/AccountSwitcher.js +243 -0
  134. package/dist/shell/frame/AccountSwitcher.js.map +1 -0
  135. package/dist/shell/frame/AddColumnDialog.d.ts +8 -0
  136. package/dist/shell/frame/AddColumnDialog.js +81 -0
  137. package/dist/shell/frame/AddColumnDialog.js.map +1 -0
  138. package/dist/shell/frame/AppMenu.d.ts +21 -0
  139. package/dist/shell/frame/AppMenu.js +642 -0
  140. package/dist/shell/frame/AppMenu.js.map +1 -0
  141. package/dist/shell/frame/CommandPalette.d.ts +7 -0
  142. package/dist/shell/frame/CommandPalette.js +118 -0
  143. package/dist/shell/frame/CommandPalette.js.map +1 -0
  144. package/dist/shell/frame/DeckView.d.ts +13 -0
  145. package/dist/shell/frame/DeckView.js +287 -0
  146. package/dist/shell/frame/DeckView.js.map +1 -0
  147. package/dist/shell/frame/FindBar.d.ts +10 -0
  148. package/dist/shell/frame/FindBar.js +108 -0
  149. package/dist/shell/frame/FindBar.js.map +1 -0
  150. package/dist/shell/frame/MediaPanel.d.ts +8 -0
  151. package/dist/shell/frame/MediaPanel.js +76 -0
  152. package/dist/shell/frame/MediaPanel.js.map +1 -0
  153. package/dist/shell/frame/NewTabPage.d.ts +9 -0
  154. package/dist/shell/frame/NewTabPage.js +71 -0
  155. package/dist/shell/frame/NewTabPage.js.map +1 -0
  156. package/dist/shell/frame/PaneTheme.d.ts +16 -0
  157. package/dist/shell/frame/PaneTheme.js +67 -0
  158. package/dist/shell/frame/PaneTheme.js.map +1 -0
  159. package/dist/shell/frame/ReportDialog.d.ts +3 -0
  160. package/dist/shell/frame/ReportDialog.js +95 -0
  161. package/dist/shell/frame/ReportDialog.js.map +1 -0
  162. package/dist/shell/frame/Shell.d.ts +8 -0
  163. package/dist/shell/frame/Shell.js +1131 -0
  164. package/dist/shell/frame/Shell.js.map +1 -0
  165. package/dist/shell/frame/Titlebar.d.ts +16 -0
  166. package/dist/shell/frame/Titlebar.js +77 -0
  167. package/dist/shell/frame/Titlebar.js.map +1 -0
  168. package/dist/shell/frame/TitlebarExtras.d.ts +4 -0
  169. package/dist/shell/frame/TitlebarExtras.js +202 -0
  170. package/dist/shell/frame/TitlebarExtras.js.map +1 -0
  171. package/dist/shell/frame/WebPanel.d.ts +4 -0
  172. package/dist/shell/frame/WebPanel.js +182 -0
  173. package/dist/shell/frame/WebPanel.js.map +1 -0
  174. package/dist/shell/frame/accountModel.d.ts +49 -0
  175. package/dist/shell/frame/accountModel.js +67 -0
  176. package/dist/shell/frame/accountModel.js.map +1 -0
  177. package/dist/shell/frame/accountSwitcher.css +91 -0
  178. package/dist/shell/frame/appI18n.d.ts +44 -0
  179. package/dist/shell/frame/appI18n.js +64 -0
  180. package/dist/shell/frame/appI18n.js.map +1 -0
  181. package/dist/shell/frame/appMenu.css +121 -0
  182. package/dist/shell/frame/backupModel.d.ts +38 -0
  183. package/dist/shell/frame/backupModel.js +192 -0
  184. package/dist/shell/frame/backupModel.js.map +1 -0
  185. package/dist/shell/frame/boot.d.ts +8 -0
  186. package/dist/shell/frame/boot.js +35 -0
  187. package/dist/shell/frame/boot.js.map +1 -0
  188. package/dist/shell/frame/brand.d.ts +1 -0
  189. package/dist/shell/frame/brand.js +4 -0
  190. package/dist/shell/frame/brand.js.map +1 -0
  191. package/dist/shell/frame/bridge.d.ts +35 -0
  192. package/dist/shell/frame/bridge.js +70 -0
  193. package/dist/shell/frame/bridge.js.map +1 -0
  194. package/dist/shell/frame/chromeTheme.d.ts +29 -0
  195. package/dist/shell/frame/chromeTheme.js +81 -0
  196. package/dist/shell/frame/chromeTheme.js.map +1 -0
  197. package/dist/shell/frame/deck.css +209 -0
  198. package/dist/shell/frame/deckStore.d.ts +89 -0
  199. package/dist/shell/frame/deckStore.js +239 -0
  200. package/dist/shell/frame/deckStore.js.map +1 -0
  201. package/dist/shell/frame/devHost.d.ts +35 -0
  202. package/dist/shell/frame/devHost.js +80 -0
  203. package/dist/shell/frame/devHost.js.map +1 -0
  204. package/dist/shell/frame/devModel.d.ts +7 -0
  205. package/dist/shell/frame/devModel.js +17 -0
  206. package/dist/shell/frame/devModel.js.map +1 -0
  207. package/dist/shell/frame/diag.d.ts +7 -0
  208. package/dist/shell/frame/diag.js +39 -0
  209. package/dist/shell/frame/diag.js.map +1 -0
  210. package/dist/shell/frame/findBar.css +14 -0
  211. package/dist/shell/frame/frameMessages.d.ts +248 -0
  212. package/dist/shell/frame/frameMessages.js +252 -0
  213. package/dist/shell/frame/frameMessages.js.map +1 -0
  214. package/dist/shell/frame/hooks.d.ts +39 -0
  215. package/dist/shell/frame/hooks.js +97 -0
  216. package/dist/shell/frame/hooks.js.map +1 -0
  217. package/dist/shell/frame/i18n.d.ts +27 -0
  218. package/dist/shell/frame/i18n.js +66 -0
  219. package/dist/shell/frame/i18n.js.map +1 -0
  220. package/dist/shell/frame/iconPack.d.ts +11 -0
  221. package/dist/shell/frame/iconPack.js +45 -0
  222. package/dist/shell/frame/iconPack.js.map +1 -0
  223. package/dist/shell/frame/icons.d.ts +71 -0
  224. package/dist/shell/frame/icons.js +75 -0
  225. package/dist/shell/frame/icons.js.map +1 -0
  226. package/dist/shell/frame/index.d.ts +34 -0
  227. package/dist/shell/frame/index.js +43 -0
  228. package/dist/shell/frame/index.js.map +1 -0
  229. package/dist/shell/frame/language.d.ts +58 -0
  230. package/dist/shell/frame/language.js +165 -0
  231. package/dist/shell/frame/language.js.map +1 -0
  232. package/dist/shell/frame/mediaModel.d.ts +34 -0
  233. package/dist/shell/frame/mediaModel.js +53 -0
  234. package/dist/shell/frame/mediaModel.js.map +1 -0
  235. package/dist/shell/frame/menuMessages.en.json +54 -0
  236. package/dist/shell/frame/menuModel.d.ts +277 -0
  237. package/dist/shell/frame/menuModel.js +293 -0
  238. package/dist/shell/frame/menuModel.js.map +1 -0
  239. package/dist/shell/frame/paletteModel.d.ts +139 -0
  240. package/dist/shell/frame/paletteModel.js +112 -0
  241. package/dist/shell/frame/paletteModel.js.map +1 -0
  242. package/dist/shell/frame/paneTheme.css +9 -0
  243. package/dist/shell/frame/pluginCommandStore.d.ts +23 -0
  244. package/dist/shell/frame/pluginCommandStore.js +70 -0
  245. package/dist/shell/frame/pluginCommandStore.js.map +1 -0
  246. package/dist/shell/frame/reportModel.d.ts +52 -0
  247. package/dist/shell/frame/reportModel.js +105 -0
  248. package/dist/shell/frame/reportModel.js.map +1 -0
  249. package/dist/shell/frame/safeStore.d.ts +7 -0
  250. package/dist/shell/frame/safeStore.js +40 -0
  251. package/dist/shell/frame/safeStore.js.map +1 -0
  252. package/dist/shell/frame/searchInput.d.ts +2 -0
  253. package/dist/shell/frame/searchInput.js +11 -0
  254. package/dist/shell/frame/searchInput.js.map +1 -0
  255. package/dist/shell/frame/shell.css +629 -0
  256. package/dist/shell/frame/site.d.ts +206 -0
  257. package/dist/shell/frame/site.js +22 -0
  258. package/dist/shell/frame/site.js.map +1 -0
  259. package/dist/shell/frame/state.d.ts +99 -0
  260. package/dist/shell/frame/state.js +284 -0
  261. package/dist/shell/frame/state.js.map +1 -0
  262. package/dist/shell/frame/syncGate.d.ts +10 -0
  263. package/dist/shell/frame/syncGate.js +36 -0
  264. package/dist/shell/frame/syncGate.js.map +1 -0
  265. package/dist/shell/frame/syncHost.d.ts +35 -0
  266. package/dist/shell/frame/syncHost.js +85 -0
  267. package/dist/shell/frame/syncHost.js.map +1 -0
  268. package/dist/shell/frame/tabStill.d.ts +2 -0
  269. package/dist/shell/frame/tabStill.js +62 -0
  270. package/dist/shell/frame/tabStill.js.map +1 -0
  271. package/dist/shell/frame/themeScopes.d.ts +29 -0
  272. package/dist/shell/frame/themeScopes.js +61 -0
  273. package/dist/shell/frame/themeScopes.js.map +1 -0
  274. package/dist/shell/frame/themeStore.d.ts +99 -0
  275. package/dist/shell/frame/themeStore.js +252 -0
  276. package/dist/shell/frame/themeStore.js.map +1 -0
  277. package/dist/shell/frame/windowBinding.d.ts +2 -0
  278. package/dist/shell/frame/windowBinding.js +7 -0
  279. package/dist/shell/frame/windowBinding.js.map +1 -0
  280. package/dist/shell/frame/workspaceModel.d.ts +82 -0
  281. package/dist/shell/frame/workspaceModel.js +250 -0
  282. package/dist/shell/frame/workspaceModel.js.map +1 -0
  283. package/dist/shell/frame/workspaces.css +84 -0
  284. package/dist/shell/frame/workspaces.d.ts +22 -0
  285. package/dist/shell/frame/workspaces.js +125 -0
  286. package/dist/shell/frame/workspaces.js.map +1 -0
  287. package/dist/shell/frame/zoomStore.d.ts +10 -0
  288. package/dist/shell/frame/zoomStore.js +65 -0
  289. package/dist/shell/frame/zoomStore.js.map +1 -0
  290. package/dist/shell/installController.d.ts +122 -0
  291. package/dist/shell/installController.js +146 -0
  292. package/dist/shell/installController.js.map +1 -0
  293. package/dist/shell/installerMessages.d.ts +30 -0
  294. package/dist/shell/installerMessages.js +36 -0
  295. package/dist/shell/installerMessages.js.map +1 -0
  296. package/dist/shell/linkDrop.js.map +1 -1
  297. package/dist/shell/messages.d.ts +16 -0
  298. package/dist/shell/messages.js +27 -0
  299. package/dist/shell/messages.js.map +1 -0
  300. package/dist/shell/palette.js.map +1 -1
  301. package/dist/shell/paneModel.d.ts +22 -0
  302. package/dist/shell/paneModel.js +24 -1
  303. package/dist/shell/paneModel.js.map +1 -1
  304. package/dist/shell/panel/Appearance.d.ts +8 -0
  305. package/dist/shell/panel/Appearance.js +256 -0
  306. package/dist/shell/panel/Appearance.js.map +1 -0
  307. package/dist/shell/panel/BackupPanel.d.ts +5 -0
  308. package/dist/shell/panel/BackupPanel.js +198 -0
  309. package/dist/shell/panel/BackupPanel.js.map +1 -0
  310. package/dist/shell/panel/DeveloperPanel.d.ts +4 -0
  311. package/dist/shell/panel/DeveloperPanel.js +51 -0
  312. package/dist/shell/panel/DeveloperPanel.js.map +1 -0
  313. package/dist/shell/panel/FeatureToggles.d.ts +13 -0
  314. package/dist/shell/panel/FeatureToggles.js +42 -0
  315. package/dist/shell/panel/FeatureToggles.js.map +1 -0
  316. package/dist/shell/panel/Home.d.ts +3 -0
  317. package/dist/shell/panel/Home.js +23 -0
  318. package/dist/shell/panel/Home.js.map +1 -0
  319. package/dist/shell/panel/IconPackInstall.d.ts +15 -0
  320. package/dist/shell/panel/IconPackInstall.js +41 -0
  321. package/dist/shell/panel/IconPackInstall.js.map +1 -0
  322. package/dist/shell/panel/LanguageSettings.d.ts +1 -0
  323. package/dist/shell/panel/LanguageSettings.js +54 -0
  324. package/dist/shell/panel/LanguageSettings.js.map +1 -0
  325. package/dist/shell/panel/MakePanel.d.ts +3 -0
  326. package/dist/shell/panel/MakePanel.js +237 -0
  327. package/dist/shell/panel/MakePanel.js.map +1 -0
  328. package/dist/shell/panel/MarkdownDoc.d.ts +6 -0
  329. package/dist/shell/panel/MarkdownDoc.js +35 -0
  330. package/dist/shell/panel/MarkdownDoc.js.map +1 -0
  331. package/dist/shell/panel/Modes.d.ts +40 -0
  332. package/dist/shell/panel/Modes.js +270 -0
  333. package/dist/shell/panel/Modes.js.map +1 -0
  334. package/dist/shell/panel/NavIcon.d.ts +4 -0
  335. package/dist/shell/panel/NavIcon.js +6 -0
  336. package/dist/shell/panel/NavIcon.js.map +1 -0
  337. package/dist/shell/panel/Panel.d.ts +7 -0
  338. package/dist/shell/panel/Panel.js +139 -0
  339. package/dist/shell/panel/Panel.js.map +1 -0
  340. package/dist/shell/panel/PluginFeatures.d.ts +24 -0
  341. package/dist/shell/panel/PluginFeatures.js +165 -0
  342. package/dist/shell/panel/PluginFeatures.js.map +1 -0
  343. package/dist/shell/panel/Plugins.d.ts +33 -0
  344. package/dist/shell/panel/Plugins.js +112 -0
  345. package/dist/shell/panel/Plugins.js.map +1 -0
  346. package/dist/shell/panel/PowerSettings.d.ts +4 -0
  347. package/dist/shell/panel/PowerSettings.js +52 -0
  348. package/dist/shell/panel/PowerSettings.js.map +1 -0
  349. package/dist/shell/panel/Settings.d.ts +23 -0
  350. package/dist/shell/panel/Settings.js +116 -0
  351. package/dist/shell/panel/Settings.js.map +1 -0
  352. package/dist/shell/panel/ShareSetup.d.ts +8 -0
  353. package/dist/shell/panel/ShareSetup.js +130 -0
  354. package/dist/shell/panel/ShareSetup.js.map +1 -0
  355. package/dist/shell/panel/StoreSection.d.ts +6 -0
  356. package/dist/shell/panel/StoreSection.js +48 -0
  357. package/dist/shell/panel/StoreSection.js.map +1 -0
  358. package/dist/shell/panel/StringPacks.d.ts +11 -0
  359. package/dist/shell/panel/StringPacks.js +106 -0
  360. package/dist/shell/panel/StringPacks.js.map +1 -0
  361. package/dist/shell/panel/ThemeBuilder.d.ts +5 -0
  362. package/dist/shell/panel/ThemeBuilder.js +205 -0
  363. package/dist/shell/panel/ThemeBuilder.js.map +1 -0
  364. package/dist/shell/panel/backup.css +34 -0
  365. package/dist/shell/panel/builder.css +232 -0
  366. package/dist/shell/panel/builderModel.d.ts +55 -0
  367. package/dist/shell/panel/builderModel.js +95 -0
  368. package/dist/shell/panel/builderModel.js.map +1 -0
  369. package/dist/shell/panel/compare.d.ts +10 -0
  370. package/dist/shell/panel/compare.js +51 -0
  371. package/dist/shell/panel/compare.js.map +1 -0
  372. package/dist/shell/panel/controls.d.ts +135 -0
  373. package/dist/shell/panel/controls.js +213 -0
  374. package/dist/shell/panel/controls.js.map +1 -0
  375. package/dist/shell/panel/featureModel.d.ts +69 -0
  376. package/dist/shell/panel/featureModel.js +79 -0
  377. package/dist/shell/panel/featureModel.js.map +1 -0
  378. package/dist/shell/panel/fonts/FontBrowser.d.ts +10 -0
  379. package/dist/shell/panel/fonts/FontBrowser.js +189 -0
  380. package/dist/shell/panel/fonts/FontBrowser.js.map +1 -0
  381. package/dist/shell/panel/fonts/FontRoles.d.ts +20 -0
  382. package/dist/shell/panel/fonts/FontRoles.js +77 -0
  383. package/dist/shell/panel/fonts/FontRoles.js.map +1 -0
  384. package/dist/shell/panel/fonts/catalog.d.ts +37 -0
  385. package/dist/shell/panel/fonts/catalog.js +68 -0
  386. package/dist/shell/panel/fonts/catalog.js.map +1 -0
  387. package/dist/shell/panel/fonts/googleFontsCatalog.json +1 -0
  388. package/dist/shell/panel/index.d.ts +20 -0
  389. package/dist/shell/panel/index.js +34 -0
  390. package/dist/shell/panel/index.js.map +1 -0
  391. package/dist/shell/panel/languageModel.d.ts +5 -0
  392. package/dist/shell/panel/languageModel.js +7 -0
  393. package/dist/shell/panel/languageModel.js.map +1 -0
  394. package/dist/shell/panel/make.css +72 -0
  395. package/dist/shell/panel/makeModel.d.ts +32 -0
  396. package/dist/shell/panel/makeModel.js +84 -0
  397. package/dist/shell/panel/makeModel.js.map +1 -0
  398. package/dist/shell/panel/markdown.d.ts +46 -0
  399. package/dist/shell/panel/markdown.js +100 -0
  400. package/dist/shell/panel/markdown.js.map +1 -0
  401. package/dist/shell/panel/nav.d.ts +12 -0
  402. package/dist/shell/panel/nav.js +50 -0
  403. package/dist/shell/panel/nav.js.map +1 -0
  404. package/dist/shell/panel/panel.css +401 -0
  405. package/dist/shell/panel/panelMessages.d.ts +763 -0
  406. package/dist/shell/panel/panelMessages.js +767 -0
  407. package/dist/shell/panel/panelMessages.js.map +1 -0
  408. package/dist/shell/panel/plugins.css +59 -0
  409. package/dist/shell/panel/setupModel.d.ts +87 -0
  410. package/dist/shell/panel/setupModel.js +152 -0
  411. package/dist/shell/panel/setupModel.js.map +1 -0
  412. package/dist/shell/panel/site.d.ts +259 -0
  413. package/dist/shell/panel/site.js +25 -0
  414. package/dist/shell/panel/site.js.map +1 -0
  415. package/dist/shell/panel/strings.css +7 -0
  416. package/dist/shell/panel/themes.d.ts +10 -0
  417. package/dist/shell/panel/themes.js +8 -0
  418. package/dist/shell/panel/themes.js.map +1 -0
  419. package/dist/shell/profileModel.d.ts +3 -2
  420. package/dist/shell/profileModel.js +7 -5
  421. package/dist/shell/profileModel.js.map +1 -1
  422. package/dist/shell/store.css +230 -0
  423. package/dist/shell/storeMessages.d.ts +169 -0
  424. package/dist/shell/storeMessages.js +172 -0
  425. package/dist/shell/storeMessages.js.map +1 -0
  426. package/dist/shell/storeModel.d.ts +181 -0
  427. package/dist/shell/storeModel.js +133 -0
  428. package/dist/shell/storeModel.js.map +1 -0
  429. package/dist/shell/stringPacksModel.d.ts +44 -0
  430. package/dist/shell/stringPacksModel.js +94 -0
  431. package/dist/shell/stringPacksModel.js.map +1 -0
  432. package/dist/shell/updateModel.d.ts +2 -1
  433. package/dist/shell/updateModel.js +5 -4
  434. package/dist/shell/updateModel.js.map +1 -1
  435. package/dist/shell/windowControls.d.ts +4 -0
  436. package/dist/shell/windowControls.js +5 -0
  437. package/dist/shell/windowControls.js.map +1 -1
  438. package/i18n-config.schema.json +29 -0
  439. package/i18n-meta.schema.json +26 -0
  440. package/i18n.schema.json +42 -0
  441. package/icons.schema.json +646 -0
  442. package/languages.schema.json +23 -0
  443. package/locales/ar-x-fm.json +11 -0
  444. package/locales/ar.json +1281 -0
  445. package/locales/bg.json +1280 -0
  446. package/locales/bn.json +1280 -0
  447. package/locales/ca.json +1280 -0
  448. package/locales/cs.json +1280 -0
  449. package/locales/da.json +1280 -0
  450. package/locales/de.json +1280 -0
  451. package/locales/el.json +1280 -0
  452. package/locales/en-GB.json +27 -0
  453. package/locales/en.json +1280 -0
  454. package/locales/en.meta.json +51 -0
  455. package/locales/es.json +1280 -0
  456. package/locales/eu.json +1280 -0
  457. package/locales/fa.json +1281 -0
  458. package/locales/fi.json +1280 -0
  459. package/locales/fil.json +1280 -0
  460. package/locales/fr.json +1280 -0
  461. package/locales/ga.json +1280 -0
  462. package/locales/gl.json +1280 -0
  463. package/locales/gu.json +1280 -0
  464. package/locales/ha.json +1280 -0
  465. package/locales/he.json +1281 -0
  466. package/locales/hi.json +1280 -0
  467. package/locales/hr.json +1280 -0
  468. package/locales/hu.json +1279 -0
  469. package/locales/id.json +1280 -0
  470. package/locales/ig.json +1280 -0
  471. package/locales/it.json +1280 -0
  472. package/locales/ja.json +1280 -0
  473. package/locales/kn.json +1280 -0
  474. package/locales/ko.json +1280 -0
  475. package/locales/mr.json +1280 -0
  476. package/locales/ms.json +1280 -0
  477. package/locales/nb.json +1280 -0
  478. package/locales/nl.json +1280 -0
  479. package/locales/pl.json +1280 -0
  480. package/locales/pt.json +1280 -0
  481. package/locales/ro.json +1280 -0
  482. package/locales/ru.json +1280 -0
  483. package/locales/sk.json +1280 -0
  484. package/locales/sr.json +1280 -0
  485. package/locales/sv.json +1280 -0
  486. package/locales/ta.json +1280 -0
  487. package/locales/th.json +1280 -0
  488. package/locales/tr.json +1280 -0
  489. package/locales/uk.json +1280 -0
  490. package/locales/ur.json +1281 -0
  491. package/locales/vi.json +1280 -0
  492. package/locales/yo.json +1280 -0
  493. package/locales/zh-Hans.json +1280 -0
  494. package/locales/zh-Hant.json +1280 -0
  495. package/package.json +148 -6
  496. package/store-catalog.schema.json +65 -0
  497. package/theme.schema.json +4659 -0
  498. package/windows/installer.nsi +926 -0
  499. package/windows/languages/Basque.nsh +28 -0
  500. package/windows/languages/Catalan.nsh +28 -0
  501. package/windows/languages/Croatian.nsh +28 -0
  502. package/windows/languages/Czech.nsh +28 -0
  503. package/windows/languages/Danish.nsh +28 -0
  504. package/windows/languages/Finnish.nsh +28 -0
  505. package/windows/languages/Galician.nsh +28 -0
  506. package/windows/languages/Greek.nsh +28 -0
  507. package/windows/languages/Hungarian.nsh +28 -0
  508. package/windows/languages/Indonesian.nsh +28 -0
  509. package/windows/languages/Irish.nsh +28 -0
  510. package/windows/languages/Malay.nsh +28 -0
  511. package/windows/languages/Polish.nsh +28 -0
  512. package/windows/languages/Romanian.nsh +28 -0
  513. package/windows/languages/Serbian.nsh +28 -0
  514. package/windows/languages/Slovak.nsh +28 -0
  515. package/windows/languages/Thai.nsh +28 -0
@@ -0,0 +1,81 @@
1
+ // The app's own window in the active theme: the theme's palette and its chrome/mono fonts become
2
+ // the shell's `--wb-c-*` (tabs, address bar, titlebar, menus) and the panel's `--wb-p-*` tokens,
3
+ // which shell.css (and the app's panel CSS) read with Night Ink as the fallback. Pure (tests,
4
+ // shell, panel). The app turns its theme documents into a `ChromeTheme` (site.themes.chrome).
5
+ /** The shell's own interface font (what an inheriting chrome role falls back to outside the page). */
6
+ export const SHELL_UI_FONT = "'Geist Variable', system-ui, sans-serif";
7
+ export const SHELL_MONO_FONT = "'Geist Mono Variable', ui-monospace, monospace";
8
+ function hexToRgb(hex) {
9
+ const n = parseInt(hex.slice(1), 16);
10
+ return [(n >> 16) & 255, (n >> 8) & 255, n & 255];
11
+ }
12
+ const toHex = (rgb) => `#${rgb.map(v => Math.round(Math.min(255, Math.max(0, v))).toString(16).padStart(2, '0')).join('')}`;
13
+ export function luminance(hex) {
14
+ const [r, g, b] = hexToRgb(hex).map(v => { const c = v / 255; return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4; });
15
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
16
+ }
17
+ export function contrast(a, b) {
18
+ const [x, y] = [luminance(a), luminance(b)].sort((m, n) => n - m);
19
+ return (x + 0.05) / (y + 0.05);
20
+ }
21
+ export function mix(a, b, t) {
22
+ const [x, y] = [hexToRgb(a), hexToRgb(b)];
23
+ return toHex(x.map((v, i) => v + (y[i] - v) * t));
24
+ }
25
+ const channels = (hex) => hexToRgb(hex).join(' ');
26
+ /** Moves `color` toward `pole` until it reads at `ratio` on `surface`. */
27
+ function legible(color, surface, ratio) {
28
+ if (contrast(color, surface) >= ratio)
29
+ return color;
30
+ const pole = luminance(surface) > 0.18 ? '#000000' : '#ffffff';
31
+ for (let t = 0.1; t <= 1; t += 0.1) {
32
+ const next = mix(color, pole, t);
33
+ if (contrast(next, surface) >= ratio)
34
+ return next;
35
+ }
36
+ return pole;
37
+ }
38
+ /**
39
+ * CSS custom properties for the chrome in `theme`. A theme that keeps the site's colors changes
40
+ * only the fonts; `own` keeps wayBetter's own style entirely (empty result).
41
+ */
42
+ export function chromeVars(theme, own = false) {
43
+ if (own)
44
+ return {};
45
+ const vars = {};
46
+ // The chrome inherits the theme's interface font (a web font of the site is not available here: then Geist).
47
+ if (theme.chromeFont)
48
+ vars['--wb-f-chrome'] = theme.chromeFont;
49
+ if (theme.monoFont)
50
+ vars['--wb-f-mono'] = theme.monoFont;
51
+ const colors = theme.colors;
52
+ if (!colors)
53
+ return vars;
54
+ const { bg, surface, elevated, border, text, muted, accent } = colors;
55
+ const dark = luminance(bg) < luminance(text);
56
+ const ink = legible(mix(accent, text, 0.55), elevated, 4.5);
57
+ Object.assign(vars, {
58
+ // Shell chrome: the ground under the tabs is the theme's column background.
59
+ '--wb-c-ground': bg, '--wb-c-chrome': surface, '--wb-c-field': mix(surface, elevated, 0.45),
60
+ '--wb-c-raised': elevated, '--wb-c-raised-2': mix(elevated, border, 0.45),
61
+ '--wb-c-line': border, '--wb-c-line-soft': mix(border, bg, 0.45), '--wb-c-line-strong': mix(border, text, 0.14),
62
+ '--wb-c-text': text, '--wb-c-text-2': mix(text, muted, 0.4), '--wb-c-muted': muted, '--wb-c-faint': mix(muted, bg, 0.38),
63
+ '--wb-c-text-rgb': channels(text), '--wb-c-accent': accent, '--wb-c-accent-rgb': channels(accent), '--wb-c-accent-ink': ink,
64
+ '--wb-c-scheme': dark ? 'dark' : 'light',
65
+ ...(dark ? {} : { '--wb-c-shadow-pop': `0 18px 44px -14px rgba(${hexToRgb(mix(text, bg, 0.2)).join(', ')}, .28), 0 3px 10px rgba(0, 0, 0, .08)` }),
66
+ // Panel.
67
+ '--wb-p-ground': bg, '--wb-p-chrome': mix(bg, surface, 0.5), '--wb-p-card': surface, '--wb-p-field': mix(surface, elevated, 0.5), '--wb-p-raise': elevated,
68
+ '--wb-p-line': border, '--wb-p-line-soft': mix(border, bg, 0.4), '--wb-p-line-strong': mix(border, text, 0.16),
69
+ '--wb-p-text': text, '--wb-p-text-2': mix(text, muted, 0.3), '--wb-p-muted': muted, '--wb-p-faint': mix(muted, bg, 0.35),
70
+ '--wb-p-accent': accent, '--wb-p-accent-rgb': channels(accent), '--wb-p-accent-ink': contrast(accent, '#ffffff') >= contrast(accent, bg) ? '#ffffff' : bg,
71
+ '--wb-p-text-rgb': channels(text), '--wb-p-popover': elevated, '--wb-p-thumb': `linear-gradient(180deg, ${mix(elevated, text, 0.08)}, ${elevated})`,
72
+ '--wb-p-track': mix(elevated, border, 0.5), '--wb-p-knob': mix(muted, text, 0.3),
73
+ });
74
+ return vars;
75
+ }
76
+ /** Every variable chromeVars may set (to clear them when a pane returns to the global theme). */
77
+ export const CHROME_VAR_NAMES = Object.keys(chromeVars({
78
+ colors: { bg: '#000000', surface: '#111111', elevated: '#222222', border: '#333333', text: '#ffffff', muted: '#999999', accent: '#1d9bf0' },
79
+ chromeFont: 'A', monoFont: 'B',
80
+ })).concat('--wb-c-shadow-pop');
81
+ //# sourceMappingURL=chromeTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chromeTheme.js","sourceRoot":"","sources":["../../../../../../shell/src/frame/chromeTheme.ts"],"names":[],"mappings":"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","sourcesContent":["// The app's own window in the active theme: the theme's palette and its chrome/mono fonts become\n// the shell's `--wb-c-*` (tabs, address bar, titlebar, menus) and the panel's `--wb-p-*` tokens,\n// which shell.css (and the app's panel CSS) read with Night Ink as the fallback. Pure (tests,\n// shell, panel). The app turns its theme documents into a `ChromeTheme` (site.themes.chrome).\n\n/** The shell's own interface font (what an inheriting chrome role falls back to outside the page). */\nexport const SHELL_UI_FONT = \"'Geist Variable', system-ui, sans-serif\";\nexport const SHELL_MONO_FONT = \"'Geist Mono Variable', ui-monospace, monospace\";\n\n/** A theme as the chrome needs it: seven colors (none: the site's own colors) and two font stacks. */\nexport type ChromeTheme = {\n colors?: { bg: string; surface: string; elevated: string; border: string; text: string; muted: string; accent: string } | null;\n /** The chrome's font stack when the theme sets one other than SHELL_UI_FONT. */\n chromeFont?: string | null;\n /** The mono font stack when the theme sets one. */\n monoFont?: string | null;\n};\n\nfunction hexToRgb(hex: string): [number, number, number] {\n const n = parseInt(hex.slice(1), 16);\n return [(n >> 16) & 255, (n >> 8) & 255, n & 255];\n}\nconst toHex = (rgb: number[]) => `#${rgb.map(v => Math.round(Math.min(255, Math.max(0, v))).toString(16).padStart(2, '0')).join('')}`;\nexport function luminance(hex: string): number {\n const [r, g, b] = hexToRgb(hex).map(v => { const c = v / 255; return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4; }) as [number, number, number];\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\nexport function contrast(a: string, b: string): number {\n const [x, y] = [luminance(a), luminance(b)].sort((m, n) => n - m) as [number, number];\n return (x + 0.05) / (y + 0.05);\n}\nexport function mix(a: string, b: string, t: number): string {\n const [x, y] = [hexToRgb(a), hexToRgb(b)];\n return toHex(x.map((v, i) => v + (y[i]! - v) * t));\n}\n\nconst channels = (hex: string) => hexToRgb(hex).join(' ');\n\n/** Moves `color` toward `pole` until it reads at `ratio` on `surface`. */\nfunction legible(color: string, surface: string, ratio: number): string {\n if (contrast(color, surface) >= ratio) return color;\n const pole = luminance(surface) > 0.18 ? '#000000' : '#ffffff';\n for (let t = 0.1; t <= 1; t += 0.1) { const next = mix(color, pole, t); if (contrast(next, surface) >= ratio) return next; }\n return pole;\n}\n\n/**\n * CSS custom properties for the chrome in `theme`. A theme that keeps the site's colors changes\n * only the fonts; `own` keeps wayBetter's own style entirely (empty result).\n */\nexport function chromeVars(theme: ChromeTheme, own = false): Record<string, string> {\n if (own) return {};\n const vars: Record<string, string> = {};\n // The chrome inherits the theme's interface font (a web font of the site is not available here: then Geist).\n if (theme.chromeFont) vars['--wb-f-chrome'] = theme.chromeFont;\n if (theme.monoFont) vars['--wb-f-mono'] = theme.monoFont;\n const colors = theme.colors;\n if (!colors) return vars;\n const { bg, surface, elevated, border, text, muted, accent } = colors;\n const dark = luminance(bg) < luminance(text);\n const ink = legible(mix(accent, text, 0.55), elevated, 4.5);\n Object.assign(vars, {\n // Shell chrome: the ground under the tabs is the theme's column background.\n '--wb-c-ground': bg, '--wb-c-chrome': surface, '--wb-c-field': mix(surface, elevated, 0.45),\n '--wb-c-raised': elevated, '--wb-c-raised-2': mix(elevated, border, 0.45),\n '--wb-c-line': border, '--wb-c-line-soft': mix(border, bg, 0.45), '--wb-c-line-strong': mix(border, text, 0.14),\n '--wb-c-text': text, '--wb-c-text-2': mix(text, muted, 0.4), '--wb-c-muted': muted, '--wb-c-faint': mix(muted, bg, 0.38),\n '--wb-c-text-rgb': channels(text), '--wb-c-accent': accent, '--wb-c-accent-rgb': channels(accent), '--wb-c-accent-ink': ink,\n '--wb-c-scheme': dark ? 'dark' : 'light',\n ...(dark ? {} : { '--wb-c-shadow-pop': `0 18px 44px -14px rgba(${hexToRgb(mix(text, bg, 0.2)).join(', ')}, .28), 0 3px 10px rgba(0, 0, 0, .08)` }),\n // Panel.\n '--wb-p-ground': bg, '--wb-p-chrome': mix(bg, surface, 0.5), '--wb-p-card': surface, '--wb-p-field': mix(surface, elevated, 0.5), '--wb-p-raise': elevated,\n '--wb-p-line': border, '--wb-p-line-soft': mix(border, bg, 0.4), '--wb-p-line-strong': mix(border, text, 0.16),\n '--wb-p-text': text, '--wb-p-text-2': mix(text, muted, 0.3), '--wb-p-muted': muted, '--wb-p-faint': mix(muted, bg, 0.35),\n '--wb-p-accent': accent, '--wb-p-accent-rgb': channels(accent), '--wb-p-accent-ink': contrast(accent, '#ffffff') >= contrast(accent, bg) ? '#ffffff' : bg,\n '--wb-p-text-rgb': channels(text), '--wb-p-popover': elevated, '--wb-p-thumb': `linear-gradient(180deg, ${mix(elevated, text, 0.08)}, ${elevated})`,\n '--wb-p-track': mix(elevated, border, 0.5), '--wb-p-knob': mix(muted, text, 0.3),\n });\n return vars;\n}\n\n/** Every variable chromeVars may set (to clear them when a pane returns to the global theme). */\nexport const CHROME_VAR_NAMES = Object.keys(chromeVars({\n colors: { bg: '#000000', surface: '#111111', elevated: '#222222', border: '#333333', text: '#ffffff', muted: '#999999', accent: '#1d9bf0' },\n chromeFont: 'A', monoFont: 'B',\n})).concat('--wb-c-shadow-pop');\n"]}
@@ -0,0 +1,209 @@
1
+ /*
2
+ * Decks: the deck tab. A 40px deck bar, then a row of column cards. Each card is a 46px
3
+ * header over a body that a site tab webview covers exactly (so the body is square and flush with
4
+ * the window bottom; only the header is ours). Night Ink tokens from shell.css.
5
+ */
6
+ .bt-deck { position: relative; height: 100%; display: flex; flex-direction: column; background: var(--bt-ground); color: var(--bt-text); overflow: hidden; }
7
+
8
+ /* The deck's dockview tab: unread total. */
9
+ .bt-tab-unread { flex: none; min-width: 16px; height: 16px; padding: 0 5px; box-sizing: border-box; border-radius: 999px; background: var(--bt-accent); color: #fff; font: 700 10px/16px var(--bt-mono); text-align: center; }
10
+
11
+ /* Deck bar ---------------------------------------------------------------------------------- */
12
+ .bt-deck-bar { flex: none; display: flex; align-items: center; gap: 10px; height: 40px; padding-block: 0; padding-inline: 14px 10px; }
13
+ .bt-deck-mark { display: grid; place-items: center; width: 22px; height: 22px; border-radius: 7px; background: linear-gradient(135deg, rgba(79, 107, 255, .28), rgba(34, 211, 238, .18)); box-shadow: inset 0 0 0 1px rgba(159, 211, 255, .18); color: #bfe0ff; }
14
+ .bt-deck-mark .bt-glyph { width: 13px; height: 13px; }
15
+ .bt-deck-name { font: 650 13.5px/1 var(--bt-ui); letter-spacing: -.01em; }
16
+ .bt-deck-count { color: var(--bt-faint); font: 500 11.5px/1 var(--bt-ui); }
17
+ .bt-deck-total { padding: 4px 8px; border-radius: 999px; background: var(--bt-accent-soft); color: var(--bt-accent-ink); font: 600 11px/1 var(--bt-mono); box-shadow: inset 0 0 0 1px rgba(29, 155, 240, .28); }
18
+ .bt-deck-fill { flex: 1; }
19
+ .bt-deck-pager { display: flex; align-items: center; gap: 2px; padding: 2px; border-radius: 999px; background: var(--bt-field); box-shadow: inset 0 0 0 1px var(--bt-line-soft); }
20
+ .bt-deck-pager .bt-icon { width: 24px; height: 24px; border-radius: 999px; }
21
+ .bt-deck-pager .bt-glyph { width: 13px; height: 13px; }
22
+ .bt-deck-dot { width: 18px; height: 24px; padding: 0; border: 0; background: transparent; cursor: pointer; position: relative; }
23
+ .bt-deck-dot::after { content: ""; position: absolute; left: 50%; top: 50%; width: 6px; height: 6px; margin: -3px 0 0 -3px; border-radius: 999px; background: var(--bt-line-strong); transition: width var(--bt-t2) var(--bt-ease-out), margin var(--bt-t2) var(--bt-ease-out), background-color var(--bt-t1) var(--bt-ease); }
24
+ .bt-deck-dot:hover::after { background: var(--bt-muted); }
25
+ .bt-deck-dot.is-on::after { width: 14px; margin-left: -7px; background: var(--bt-accent); } /* rtl-ok: centred with left: 50% */
26
+ .bt-deck-memory { color: var(--bt-muted); font: 500 11px/1 var(--bt-mono); padding: 5px 8px; border-radius: 7px; background: rgba(238, 240, 247, .04); }
27
+ .bt-deck-action { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding-block: 0; padding-inline: 9px 11px; border: 0; border-radius: 8px; background: rgba(238, 240, 247, .05); box-shadow: inset 0 0 0 1px rgba(238, 240, 247, .06); color: var(--bt-text-2); font: 550 12.5px/1 var(--bt-ui); cursor: pointer; transition: background-color var(--bt-t1) var(--bt-ease), color var(--bt-t1) var(--bt-ease); }
28
+ .bt-deck-action .bt-glyph { width: 14px; height: 14px; }
29
+ .bt-deck-action:hover { background: rgba(238, 240, 247, .09); color: var(--bt-text); }
30
+ .bt-deck-action.is-on { background: var(--bt-accent-soft); box-shadow: inset 0 0 0 1px rgba(29, 155, 240, .38); color: var(--bt-accent-ink); }
31
+ .bt-deck-settings { width: 28px; height: 28px; }
32
+ .bt-deck-settings .bt-glyph { width: 15px; height: 15px; }
33
+
34
+ /* Columns row ------------------------------------------------------------------------------- */
35
+ .bt-deck-row { position: relative; flex: 1; min-height: 0; margin: 0 8px; }
36
+ .bt-col, .bt-compose {
37
+ position: absolute; top: 0; bottom: 0; display: flex; flex-direction: column; box-sizing: border-box;
38
+ border-radius: 12px 12px 0 0; background: var(--bt-chrome); box-shadow: inset 0 0 0 1px var(--bt-line-soft);
39
+ --bt-col-account: var(--bt-accent);
40
+ }
41
+ /* Motion never transforms a column's body: the webview is placed on the body's rectangle, so only
42
+ opacity (the card) and the header move. */
43
+ .bt-col { animation: bt-fade-in var(--bt-t3) var(--bt-ease-out) both; }
44
+ .bt-col > .bt-col-head { animation: bt-col-in var(--bt-t3) var(--bt-ease-out) both; }
45
+ .bt-col.is-leaving { animation: bt-col-out 180ms var(--bt-ease) forwards; pointer-events: none; }
46
+ .bt-col.is-leaving > .bt-col-head { animation: bt-col-head-out 180ms var(--bt-ease) forwards; }
47
+ @keyframes bt-col-in { from { opacity: 0; transform: translateY(8px); } }
48
+ @keyframes bt-col-out { to { opacity: 0; } }
49
+ @keyframes bt-col-head-out { to { transform: translateY(-6px); } }
50
+
51
+ .bt-col-head, .bt-compose-head {
52
+ position: relative; flex: none; display: flex; align-items: center; gap: 8px; height: 46px; padding-block: 0; padding-inline: 8px 6px;
53
+ border-radius: 12px 12px 0 0; border-bottom: 1px solid var(--bt-line-soft);
54
+ background: linear-gradient(180deg, rgba(238, 240, 247, .025), transparent);
55
+ }
56
+ /* The focused column: an accent line on top and a lifted header. */
57
+ .bt-col-head::before, .bt-compose-head::before {
58
+ content: ""; position: absolute; left: 12px; right: 12px; top: 0; height: 2px; border-radius: 0 0 2px 2px;
59
+ background: var(--bt-brush); opacity: 0; transform: scaleX(.6); transition: opacity var(--bt-t2) var(--bt-ease), transform var(--bt-t3) var(--bt-ease-out);
60
+ }
61
+ .bt-col.is-focused .bt-col-head::before, .bt-compose-head::before { opacity: 1; transform: none; }
62
+ .bt-col.is-focused { box-shadow: inset 0 0 0 1px rgba(29, 155, 240, .32); }
63
+ .bt-col.is-focused .bt-col-head { background: linear-gradient(180deg, rgba(29, 155, 240, .08), rgba(29, 155, 240, 0)); }
64
+
65
+ .bt-col-glyph {
66
+ display: grid; place-items: center; flex: none; width: 28px; height: 28px; border-radius: 8px; padding: 0; border: 0;
67
+ background: color-mix(in srgb, var(--bt-col-account) 16%, transparent); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--bt-col-account) 30%, transparent);
68
+ color: color-mix(in srgb, var(--bt-col-account) 55%, #ffffff);
69
+ }
70
+ .bt-col-glyph .bt-glyph { width: 15px; height: 15px; }
71
+ .bt-col-back { cursor: pointer; background: rgba(238, 240, 247, .07); box-shadow: inset 0 0 0 1px rgba(238, 240, 247, .1); color: var(--bt-text); transition: background-color var(--bt-t1) var(--bt-ease); }
72
+ .bt-col-back:hover { background: rgba(238, 240, 247, .12); }
73
+ .bt-col-titles { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
74
+ .bt-col-titles strong { font: 650 13.5px/1.1 var(--bt-ui); letter-spacing: -.01em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
75
+ .bt-col-titles span { color: var(--bt-muted); font: 450 11.5px/1.1 var(--bt-ui); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
76
+ .bt-col-fill { flex: 1; min-width: 4px; }
77
+ .bt-col-unread {
78
+ flex: none; min-width: 22px; height: 20px; padding: 0 7px; box-sizing: border-box; border: 0; border-radius: 999px; cursor: pointer;
79
+ background: var(--bt-accent); color: #fff; font: 700 11px/20px var(--bt-mono); letter-spacing: -.02em;
80
+ box-shadow: 0 0 0 3px rgba(29, 155, 240, .16), 0 4px 12px -4px rgba(29, 155, 240, .8);
81
+ animation: bt-unread-in var(--bt-t3) var(--bt-ease-out);
82
+ }
83
+ .bt-col-unread:hover { filter: brightness(1.12); }
84
+ @keyframes bt-unread-in { from { transform: scale(.6); opacity: 0; } }
85
+ .bt-col-account { display: grid; place-items: center; flex: none; padding: 2px; border-radius: 999px; box-shadow: 0 0 0 1.5px color-mix(in srgb, var(--bt-col-account) 70%, transparent); }
86
+ .bt-col-btn { width: 28px; height: 28px; border-radius: 8px; color: var(--bt-muted); }
87
+ .bt-col-btn .bt-glyph { width: 15px; height: 15px; }
88
+ .bt-col-btn:hover { color: var(--bt-text); }
89
+ .bt-col-btn.is-active { color: var(--bt-accent-ink); background: var(--bt-accent-soft); }
90
+ .bt-col-key { position: absolute; inset-inline-end: 6px; top: 4px; color: var(--bt-faint); font: 600 9px/1 var(--bt-mono); opacity: 0; transition: opacity var(--bt-t1) var(--bt-ease); pointer-events: none; }
91
+ .bt-col-head:hover .bt-col-key { opacity: .8; }
92
+ .bt-col-progress { position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; overflow: hidden; }
93
+ .bt-col-progress::after { content: ""; position: absolute; top: 0; bottom: 0; width: 40%; background: linear-gradient(90deg, transparent, var(--bt-accent), transparent); animation: bt-col-load 1.1s var(--bt-ease) infinite; }
94
+ @keyframes bt-col-load { from { left: -40%; } to { left: 100%; } }
95
+ .bt-col-body { position: relative; flex: 1; min-height: 0; background: #000; }
96
+ .bt-col-hint { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; color: var(--bt-faint); font: 500 12px/1 var(--bt-ui); }
97
+
98
+ /* Compose dock ------------------------------------------------------------------------------ */
99
+ .bt-compose { right: 0; animation: bt-fade-in var(--bt-t3) var(--bt-ease-out) both; box-shadow: inset 0 0 0 1px rgba(29, 155, 240, .28), -18px 0 40px -24px rgba(0, 0, 0, .8); }
100
+ .bt-compose > .bt-compose-head { animation: bt-slide-in var(--bt-t3) var(--bt-ease-out) both; }
101
+ .bt-compose-glyph { --bt-col-account: var(--bt-accent); }
102
+ .bt-compose-accounts { display: flex; gap: 2px; padding: 2px; border-radius: 999px; background: var(--bt-field); }
103
+ .bt-compose-accounts button { display: grid; place-items: center; padding: 2px; border: 0; border-radius: 999px; background: transparent; cursor: pointer; opacity: .55; transition: opacity var(--bt-t1) var(--bt-ease); }
104
+ .bt-compose-accounts button:hover { opacity: .9; }
105
+ .bt-compose-accounts button.is-on { opacity: 1; box-shadow: 0 0 0 1.5px var(--bt-accent); }
106
+
107
+ /* Popovers (filters, column menu) --------------------------------------------------------------- */
108
+ .bt-deck-pop { gap: 2px; }
109
+ .bt-deck-pop-head { display: flex; align-items: center; gap: 8px; padding: 8px 8px 10px; }
110
+ .bt-deck-pop-head .bt-glyph { width: 15px; height: 15px; color: var(--bt-accent); }
111
+ .bt-deck-pop-head strong { font: 650 13px/1 var(--bt-ui); }
112
+ .bt-deck-pop-head span { margin-inline-start: auto; color: var(--bt-faint); font: 500 11.5px/1 var(--bt-ui); max-width: 55%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
113
+ .bt-deck-terms { display: flex; flex-direction: column; gap: 8px; padding: 0 4px 6px; }
114
+ .bt-deck-input { height: 32px; padding: 0 10px; border: 0; border-radius: 8px; background: var(--bt-field); box-shadow: inset 0 0 0 1px var(--bt-line); color: var(--bt-text); font: 450 12.5px/1 var(--bt-mono); outline: none; user-select: text; }
115
+ .bt-deck-input:focus { box-shadow: var(--bt-ring); }
116
+ .bt-deck-chips { display: flex; flex-wrap: wrap; gap: 5px; max-height: 120px; overflow-y: auto; scrollbar-width: thin; }
117
+ .bt-deck-chip { display: inline-flex; align-items: center; gap: 2px; max-width: 100%; height: 24px; padding-block: 0; padding-inline: 9px 2px; border-radius: 999px; background: rgba(238, 240, 247, .06); box-shadow: inset 0 0 0 1px rgba(238, 240, 247, .07); font: 500 12px/1 var(--bt-ui); }
118
+ .bt-deck-chip > span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
119
+ .bt-deck-chip.is-regex { font-family: var(--bt-mono); color: #d7c6ff; background: rgba(168, 85, 247, .12); box-shadow: inset 0 0 0 1px rgba(168, 85, 247, .25); }
120
+ .bt-menu .bt-deck-chip button { width: 20px; height: 20px; padding: 0; justify-content: center; border-radius: 999px; }
121
+ .bt-deck-chip .bt-glyph { width: 11px; height: 11px; }
122
+ .bt-deck-check { display: flex; align-items: flex-start; gap: 10px; padding: 7px 8px; border-radius: 8px; cursor: pointer; }
123
+ .bt-deck-check:hover { background: var(--bt-hover); }
124
+ .bt-deck-check input { position: absolute; opacity: 0; pointer-events: none; }
125
+ .bt-deck-check-box { display: grid; place-items: center; flex: none; width: 16px; height: 16px; margin-top: 1px; border-radius: 5px; box-shadow: inset 0 0 0 1.5px var(--bt-line-strong); color: transparent; transition: background-color var(--bt-t1) var(--bt-ease); }
126
+ .bt-deck-check-box .bt-glyph { width: 11px; height: 11px; stroke-width: 2.4; }
127
+ .bt-deck-check input:checked + .bt-deck-check-box { background: var(--bt-accent); box-shadow: none; color: #fff; }
128
+ .bt-deck-check input:focus-visible + .bt-deck-check-box { box-shadow: var(--bt-ring); }
129
+ .bt-deck-check-text { display: flex; flex-direction: column; gap: 3px; }
130
+ .bt-deck-check-text strong { font: 550 12.5px/1.1 var(--bt-ui); }
131
+ .bt-deck-check-text small { color: var(--bt-muted); font: 400 11.5px/1.2 var(--bt-ui); }
132
+ .bt-deck-widths { display: flex; align-items: center; gap: 2px; padding-block: 4px; padding-inline: 10px 6px; color: var(--bt-muted); font: 500 12px/1 var(--bt-ui); }
133
+ .bt-deck-widths > span { margin-inline-end: auto; }
134
+ .bt-menu .bt-deck-widths button { height: 24px; padding: 0 6px; border-radius: 6px; color: var(--bt-muted); font: 500 11px/1 var(--bt-mono); }
135
+ .bt-menu .bt-deck-widths button.is-on { background: var(--bt-accent-soft); color: var(--bt-accent-ink); }
136
+
137
+ /* Buttons ----------------------------------------------------------------------------------- */
138
+ .bt-deck-primary, .bt-deck-secondary {
139
+ display: inline-flex; align-items: center; justify-content: center; gap: 7px; height: 34px; padding: 0 14px; border: 0; border-radius: 9px; cursor: pointer;
140
+ font: 600 13px/1 var(--bt-ui); transition: filter var(--bt-t1) var(--bt-ease), background-color var(--bt-t1) var(--bt-ease);
141
+ }
142
+ .bt-deck-primary { background: var(--bt-accent); color: #fff; box-shadow: 0 6px 18px -8px rgba(29, 155, 240, .9), inset 0 1px 0 rgba(255, 255, 255, .18); }
143
+ .bt-deck-primary:hover:not(:disabled) { filter: brightness(1.08); }
144
+ .bt-deck-primary:disabled { opacity: .45; cursor: default; }
145
+ .bt-deck-primary .bt-glyph { width: 15px; height: 15px; stroke-width: 2.2; }
146
+ .bt-deck-secondary { background: rgba(238, 240, 247, .06); box-shadow: inset 0 0 0 1px rgba(238, 240, 247, .08); color: var(--bt-text-2); }
147
+ .bt-deck-secondary:hover:not(:disabled) { background: rgba(238, 240, 247, .1); color: var(--bt-text); }
148
+ .bt-deck-secondary:disabled { opacity: .45; cursor: default; }
149
+
150
+ /* Empty deck -------------------------------------------------------------------------------- */
151
+ .bt-deck-empty { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; padding: 24px; text-align: center; }
152
+ .bt-deck-empty h2 { margin: 6px 0 0; font: 700 22px/1.1 var(--bt-ui); letter-spacing: -.02em; }
153
+ .bt-deck-empty p { margin: 0; max-width: 420px; color: var(--bt-muted); font: 400 13.5px/1.5 var(--bt-ui); }
154
+ .bt-deck-empty-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin-top: 8px; }
155
+ .bt-deck-empty-keys { display: flex; align-items: center; gap: 6px 18px; flex-wrap: wrap; justify-content: center; margin-top: 10px !important; font-size: 12px !important; color: var(--bt-faint) !important; }
156
+ .bt-deck-empty-keys > span { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
157
+ .bt-deck-empty-art { display: flex; gap: 6px; height: 64px; align-items: flex-end; }
158
+ .bt-deck-empty-art span { width: 30px; border-radius: 7px 7px 2px 2px; background: linear-gradient(180deg, rgba(79, 107, 255, .5), rgba(34, 211, 238, .12)); box-shadow: inset 0 0 0 1px rgba(159, 211, 255, .2); animation: bt-rise var(--bt-t3) var(--bt-ease-out) both; }
159
+ .bt-deck-empty-art span:nth-child(1) { height: 64px; }
160
+ .bt-deck-empty-art span:nth-child(2) { height: 52px; }
161
+ .bt-deck-empty-art span:nth-child(3) { height: 58px; }
162
+ .bt-deck-empty-art span:nth-child(4) { height: 44px; background: linear-gradient(180deg, rgba(168, 85, 247, .5), rgba(168, 85, 247, .1)); }
163
+
164
+ /* Add column dialog ------------------------------------------------------------------------- */
165
+ .bt-addcol { width: min(680px, 100%); max-height: min(84vh, 640px); overflow-y: auto; }
166
+ .bt-addcol-head { display: flex; align-items: baseline; gap: 8px; padding-block: 18px 6px; padding-inline: 20px 16px; }
167
+ .bt-addcol-head h2 { margin: 0; font: 700 17px/1.1 var(--bt-ui); letter-spacing: -.015em; }
168
+ .bt-addcol-head > span { color: var(--bt-muted); font-size: 12.5px; }
169
+ .bt-addcol-head .bt-icon { margin-inline-start: auto; align-self: center; }
170
+ .bt-addcol-types { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; padding: 10px 16px 6px; }
171
+ .bt-addcol-type {
172
+ display: flex; flex-direction: column; align-items: flex-start; gap: 6px; min-height: 96px; padding: 12px; border: 0; border-radius: 11px; cursor: pointer; text-align: start;
173
+ background: rgba(238, 240, 247, .035); box-shadow: inset 0 0 0 1px rgba(238, 240, 247, .06); color: var(--bt-text-2);
174
+ transition: background-color var(--bt-t1) var(--bt-ease), box-shadow var(--bt-t1) var(--bt-ease), transform var(--bt-t2) var(--bt-ease-out);
175
+ }
176
+ .bt-addcol-type:hover { background: rgba(238, 240, 247, .06); }
177
+ .bt-addcol-type:active { transform: scale(.985); }
178
+ .bt-addcol-type.is-on { background: var(--bt-accent-soft); box-shadow: inset 0 0 0 1.5px rgba(29, 155, 240, .6); color: var(--bt-text); }
179
+ .bt-addcol-type strong { font: 650 13.5px/1.1 var(--bt-ui); color: var(--bt-text); }
180
+ .bt-addcol-type small { color: var(--bt-muted); font: 400 11.5px/1.35 var(--bt-ui); }
181
+ .bt-addcol-icon { display: grid; place-items: center; width: 28px; height: 28px; border-radius: 8px; background: rgba(238, 240, 247, .06); color: var(--bt-muted); }
182
+ .bt-addcol-type.is-on .bt-addcol-icon { background: rgba(29, 155, 240, .22); color: #bfe0ff; }
183
+ .bt-addcol-icon .bt-glyph { width: 15px; height: 15px; }
184
+ .bt-addcol-value { display: flex; flex-direction: column; gap: 8px; padding: 10px 16px 4px; }
185
+ .bt-addcol-value label, .bt-addcol-label { color: var(--bt-faint); font: 600 10.5px/1 var(--bt-ui); letter-spacing: .08em; text-transform: uppercase; }
186
+ .bt-addcol-field { display: flex; align-items: center; gap: 10px; height: 42px; padding: 0 12px; border-radius: 10px; background: var(--bt-field); box-shadow: inset 0 0 0 1px var(--bt-line); }
187
+ .bt-addcol-field:focus-within { box-shadow: var(--bt-ring); }
188
+ .bt-addcol-field.is-bad { box-shadow: 0 0 0 1px rgba(229, 72, 77, .7); }
189
+ .bt-addcol-field .bt-glyph { color: var(--bt-muted); }
190
+ .bt-addcol-field input { flex: 1; min-width: 0; border: 0; background: transparent; color: var(--bt-text); font: 500 14px/1 var(--bt-mono); outline: none; user-select: text; }
191
+ .bt-addcol-field input::placeholder { color: var(--bt-faint); }
192
+ .bt-addcol-chips { display: flex; flex-wrap: wrap; gap: 6px; }
193
+ .bt-addcol-chips button { height: 26px; padding: 0 10px; border: 0; border-radius: 999px; background: rgba(238, 240, 247, .06); box-shadow: inset 0 0 0 1px rgba(238, 240, 247, .08); color: var(--bt-text-2); font: 500 12px/1 var(--bt-mono); cursor: pointer; }
194
+ .bt-addcol-chips button[aria-selected=true] { background: var(--bt-accent-soft); color: var(--bt-accent-ink); box-shadow: inset 0 0 0 1px rgba(29, 155, 240, .35); }
195
+ .bt-addcol-error { margin: 0; color: #ff9a9e; font-size: 12px; }
196
+ .bt-addcol-accounts { display: flex; flex-direction: column; gap: 8px; padding: 12px 16px 8px; }
197
+ .bt-addcol-accounts > div { display: flex; flex-wrap: wrap; gap: 6px; }
198
+ .bt-addcol-account { display: inline-flex; align-items: center; gap: 8px; height: 34px; padding-block: 0; padding-inline: 6px 12px; border: 0; border-radius: 999px; cursor: pointer; background: rgba(238, 240, 247, .04); box-shadow: inset 0 0 0 1px rgba(238, 240, 247, .07); color: var(--bt-text-2); font: 550 12.5px/1 var(--bt-ui); }
199
+ .bt-addcol-account:hover { background: rgba(238, 240, 247, .08); }
200
+ .bt-addcol-account.is-on { box-shadow: inset 0 0 0 1.5px var(--bt-col-account); color: var(--bt-text); background: color-mix(in srgb, var(--bt-col-account) 12%, transparent); }
201
+ .bt-addcol-account em { color: var(--bt-faint); font: italic 400 11px/1 var(--bt-ui); }
202
+ .bt-addcol-foot { display: flex; align-items: center; gap: 14px; padding: 12px 16px 16px; color: var(--bt-muted); font-size: 11.5px; }
203
+ .bt-addcol-foot > span { display: inline-flex; align-items: center; gap: 6px; }
204
+ @media (max-width: 620px) { .bt-addcol-types { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
205
+
206
+ @media (prefers-reduced-motion: reduce) {
207
+ .bt-col, .bt-col > .bt-col-head, .bt-col.is-leaving, .bt-compose, .bt-compose > .bt-compose-head, .bt-col-unread, .bt-deck-empty-art span { animation: none !important; }
208
+ .bt-col.is-leaving { opacity: 0; }
209
+ }
@@ -0,0 +1,89 @@
1
+ import { type ColumnFilters, type ColumnSource, type Deck, type DeckColumn } from '../deckModel.ts';
2
+ export type { Deck, DeckColumn, ColumnFilters, ColumnSource };
3
+ /** Flags a column may carry: the listed ones and the site's unlisted ones (native code checks them again). */
4
+ export declare const columnFlagKeys: () => string[];
5
+ export type DeckSettings = {
6
+ width: number;
7
+ density: 'compact' | 'comfortable';
8
+ /** Default flags for new columns (and every column that does not override them). */
9
+ flags: Record<string, boolean>;
10
+ /** Visible columns per page; the memory guard warns above DEFAULT_MAX_VISIBLE. */
11
+ maxVisible: number;
12
+ /** Columns on other pages drop to WebView2's low memory target. */
13
+ parkOffPage: boolean;
14
+ };
15
+ export declare const defaultDeckSettings: () => DeckSettings;
16
+ export declare function normalizeDeckSettings(value: unknown): DeckSettings;
17
+ type ColumnRuntime = {
18
+ url?: string;
19
+ title?: string;
20
+ loading?: boolean;
21
+ unread: number;
22
+ };
23
+ export declare const decks: {
24
+ list: Deck[];
25
+ /** `defaultDeckSettings()` once the site is set (createShell), then the saved ones (loadDecks). */
26
+ settings: DeckSettings;
27
+ /** Per column tab: what its webview last reported. */
28
+ runtime: Map<string, ColumnRuntime>;
29
+ /** Focused column per deck. */
30
+ focus: Map<string, string>;
31
+ page: Map<string, number>;
32
+ /** Mark-read / jump requests per column tab (the page acts when the number changes). */
33
+ seq: Map<string, {
34
+ read: number;
35
+ jump: number;
36
+ }>;
37
+ /** Compose dock per deck: open and in which profile. */
38
+ compose: Map<string, {
39
+ profile: string;
40
+ }>;
41
+ /** Last config sent per column tab (JSON), so unchanged configs are not re-sent. */
42
+ sent: Map<string, string>;
43
+ /** Column tabs whose config native code has: only these are laid out (their webview then starts
44
+ * with the site's chrome already hidden). */
45
+ ready: Set<string>;
46
+ loaded: boolean;
47
+ };
48
+ export declare function loadDecks(profiles?: readonly string[], fallbackProfile?: string): void;
49
+ export declare function saveDecks(): void;
50
+ export declare function setDeckSettings(next: DeckSettings): void;
51
+ export declare const deckById: (id: string) => Deck | undefined;
52
+ export declare const newId: (prefix: string) => string;
53
+ export declare function updateDeck(id: string, change: (deck: Deck) => Deck): void;
54
+ export declare function createDeck(name: string, columns?: Array<Pick<DeckColumn, 'profile' | 'source'> & Partial<DeckColumn>>): Deck;
55
+ export declare function makeColumn(input: Pick<DeckColumn, 'profile' | 'source'> & Partial<DeckColumn>): DeckColumn;
56
+ export declare function addColumn(deckId: string, input: Pick<DeckColumn, 'profile' | 'source'> & Partial<DeckColumn>, after?: string): DeckColumn;
57
+ export declare function removeColumn(deckId: string, columnId: string): void;
58
+ export declare function patchColumn(deckId: string, columnId: string, patch: Partial<DeckColumn>): void;
59
+ export declare function shiftColumn(deckId: string, columnId: string, delta: number): void;
60
+ export declare function forgetColumn(tabId: string): void;
61
+ export declare const columnSourceUrl: (source: ColumnSource) => string | null;
62
+ /** The config a column's page gets (validated natively). */
63
+ export declare function columnConfig(column: DeckColumn): {
64
+ url: string;
65
+ kind: string;
66
+ density: "compact" | "comfortable";
67
+ filters: ColumnFilters;
68
+ flags: Record<string, boolean>;
69
+ unread: boolean;
70
+ readSeq: number;
71
+ jumpSeq: number;
72
+ } | null;
73
+ /** Sends a column its config when it changed (or always with `force`, e.g. on mount). */
74
+ export declare function configureColumn(column: DeckColumn, force?: boolean): Promise<void>;
75
+ /** The compose dock (`site.deck.compose`) is a column-like webview on the site's compose page. */
76
+ export declare const composeTabId: (deckId: string) => string;
77
+ export declare function configureCompose(deckId: string): Promise<void>;
78
+ export declare function bump(column: DeckColumn, which: 'read' | 'jump'): void;
79
+ export declare function setRuntime(tabId: string, patch: Partial<ColumnRuntime>): boolean;
80
+ /** The deck and column a tab webview id belongs to (columns and compose docks), if any. */
81
+ export declare function findColumnTab(tabId: string): {
82
+ deck: Deck;
83
+ column?: DeckColumn;
84
+ compose?: boolean;
85
+ } | null;
86
+ /** Workspaces: decks a restored workspace shows that are no longer here come back (by id). */
87
+ export declare function ensureDecks(list: unknown[]): void;
88
+ /** Settings import: the backup's decks and deck settings replace the ones here. */
89
+ export declare function replaceDecks(list: unknown, settings: unknown): void;