waybetter 0.1.1 → 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 +140 -6
  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 +139 -5
  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,192 @@
1
+ // Settings backup / import preview (pure, unit-tested under node).
2
+ //
3
+ // A `.waybetter` file is JSON: `{ format: 'waybetter-backup', version: 1, createdAt, sections }`.
4
+ // Native code (waybetter-host `backup`) writes and reads the native sections (themes, plugins,
5
+ // customCss, features, settings, alerts, accounts, workspaces, drafts when asked); the shell adds
6
+ // its own storage (`decks`: the decks and deck settings). Import shows a preview:
7
+ // one row per section with what would change, each with a checkbox; nothing is applied until the
8
+ // owner confirms, and only the ticked sections are.
9
+ import { relativeTime, t, tx } from "./i18n.js";
10
+ export const BACKUP_FORMAT = 'waybetter-backup';
11
+ export const BACKUP_VERSION = 1;
12
+ /** Sections the shell applies itself (the rest go to native `backup_apply`). */
13
+ export const LOCAL_SECTIONS = ['decks'];
14
+ /** Backup sections in display order; their names are `wb.backup.section.<id>` in the catalogs. */
15
+ export const SECTION_ORDER = ['themes', 'plugins', 'customCss', 'features', 'settings', 'alerts', 'accounts', 'workspaces', 'decks', 'drafts'];
16
+ export const sectionLabel = (section) => tx(`wb.backup.section.${section}`, undefined, section);
17
+ const isObject = (value) => !!value && typeof value === 'object' && !Array.isArray(value);
18
+ const list = (value) => (Array.isArray(value) ? value : []);
19
+ const str = (value) => (typeof value === 'string' ? value : '');
20
+ /** Stable JSON (sorted keys) for equality. */
21
+ export function canonical(value) {
22
+ if (Array.isArray(value))
23
+ return `[${value.map(canonical).join(',')}]`;
24
+ if (isObject(value))
25
+ return `{${Object.keys(value).sort().filter(key => value[key] !== undefined).map(key => `${JSON.stringify(key)}:${canonical(value[key])}`).join(',')}}`;
26
+ return JSON.stringify(value ?? null);
27
+ }
28
+ /** Secret-looking keys (same rule as native `strip_secrets`); never exported, never imported. */
29
+ export function isSecretKey(key) {
30
+ const folded = key.replace(/[_-]/g, '').toLowerCase();
31
+ return ['cookie', 'cookies', 'setcookie', 'token', 'tokens', 'accesstoken', 'authtoken', 'refreshtoken', 'idtoken', 'ct0', 'password', 'passphrase', 'secret', 'clientsecret', 'session', 'sessionid', 'authorization', 'bearer', 'csrf', 'csrftoken', 'privatekey', 'signingkey'].includes(folded)
32
+ || folded.endsWith('secret') || folded.endsWith('token') || folded.endsWith('password');
33
+ }
34
+ export function stripSecrets(value) {
35
+ if (Array.isArray(value))
36
+ return value.map(stripSecrets);
37
+ if (!isObject(value))
38
+ return value;
39
+ const out = {};
40
+ for (const [key, child] of Object.entries(value))
41
+ if (!isSecretKey(key))
42
+ out[key] = stripSecrets(child);
43
+ return out;
44
+ }
45
+ /** The shell's own sections: decks and deck settings (localStorage), never tab state. */
46
+ export function localSections(input) {
47
+ return stripSecrets({ decks: { decks: input.decks, settings: input.deckSettings } });
48
+ }
49
+ const names = (items, key = 'name', max = 3) => {
50
+ const shown = items.map(item => (isObject(item) ? str(item[key]) || str(item.id) : '')).filter(Boolean);
51
+ return shown.length > max ? `${shown.slice(0, max).join(', ')} +${shown.length - max}` : shown.join(', ');
52
+ };
53
+ function themeDetails(current, incoming) {
54
+ const out = [];
55
+ const now = isObject(current.theme) ? current.theme : {};
56
+ const next = isObject(incoming.theme) ? incoming.theme : {};
57
+ const presetNow = str(now.preset) || 'x';
58
+ const presetNext = str(next.preset) || 'x';
59
+ if (presetNow !== presetNext)
60
+ out.push(t('wb.backup.detail.theme', { from: presetNow, to: presetNext }));
61
+ const ids = (theme) => list(theme.themes).map(item => (isObject(item) ? str(item.id) : '')).filter(Boolean);
62
+ const added = ids(next).filter(id => !ids(now).includes(id));
63
+ if (added.length)
64
+ out.push(t('wb.backup.detail.importedThemes', { count: added.length, names: added.slice(0, 3).join(', ') }));
65
+ if (canonical(now.accent) !== canonical(next.accent) || canonical(now.overrides) !== canonical(next.overrides))
66
+ out.push(t('wb.backup.detail.customizations'));
67
+ const scopes = isObject(incoming.scopes) ? incoming.scopes : {};
68
+ const accounts = isObject(scopes.profiles) ? Object.keys(scopes.profiles).length : 0;
69
+ if (canonical(current.scopes) !== canonical(incoming.scopes))
70
+ out.push(accounts ? t('wb.backup.detail.scopesAccounts', { count: accounts }) : t('wb.backup.detail.scopes'));
71
+ return out;
72
+ }
73
+ function pluginDetails(current, incoming) {
74
+ const out = [];
75
+ const files = (section) => new Map(list(section.files).filter(isObject).map(file => [str(file.file), str(file.source)]));
76
+ const now = files(current);
77
+ const next = files(incoming);
78
+ const added = [...next.keys()].filter(file => !now.has(file));
79
+ const changed = [...next.keys()].filter(file => now.has(file) && now.get(file) !== next.get(file));
80
+ if (added.length)
81
+ out.push(t('wb.backup.detail.newPlugins', { count: added.length, names: added.slice(0, 3).join(', ') }));
82
+ if (changed.length)
83
+ out.push(t('wb.backup.detail.changed', { count: changed.length, names: changed.slice(0, 3).join(', ') }));
84
+ const enabledNow = new Set(list(current.enabled).map(str));
85
+ const enabledNext = new Set(list(incoming.enabled).map(str));
86
+ const on = [...enabledNext].filter(file => !enabledNow.has(file));
87
+ const off = [...enabledNow].filter(file => !enabledNext.has(file));
88
+ const short = (files) => `${files.slice(0, 3).map(file => file.replace(/\.plugin\.js$/, '')).join(', ')}${files.length > 3 ? ` +${files.length - 3}` : ''}`;
89
+ if (on.length)
90
+ out.push(t('wb.backup.detail.turnsOn', { names: short(on) }));
91
+ if (off.length)
92
+ out.push(t('wb.backup.detail.turnsOff', { names: short(off) }));
93
+ return out;
94
+ }
95
+ function keyDetails(current, incoming, kind) {
96
+ const keys = [...new Set([...Object.keys(current), ...Object.keys(incoming)])].filter(key => canonical(current[key]) !== canonical(incoming[key]));
97
+ if (!keys.length)
98
+ return [];
99
+ const names = `${keys.slice(0, 4).join(', ')}${keys.length > 4 ? ' …' : ''}`;
100
+ return [kind === 'tweak' ? t('wb.backup.detail.tweaksDiffer', { count: keys.length, names }) : t('wb.backup.detail.settingsDiffer', { count: keys.length, names })];
101
+ }
102
+ function details(section, current, incoming) {
103
+ switch (section) {
104
+ case 'themes': return themeDetails(current, incoming);
105
+ case 'plugins': return pluginDetails(current, incoming);
106
+ case 'customCss': return [t('wb.backup.detail.css', { count: str(incoming.css).length, here: str(current.css).length })];
107
+ case 'features': return keyDetails(current, incoming, 'tweak');
108
+ case 'settings': return keyDetails(current, incoming, 'setting');
109
+ case 'alerts': {
110
+ const now = new Set(list(current.keywords).map(str));
111
+ const next = list(incoming.keywords).map(str);
112
+ const added = next.filter(word => !now.has(word));
113
+ const summary = incoming.enabled ? t('wb.backup.alertsOn', { count: next.length }) : `${t('wb.common.off')} · ${t('wb.backup.detail.keywords', { count: next.length })}`;
114
+ return [`${summary}${added.length ? ` (+${added.slice(0, 3).join(', ')})` : ''}`];
115
+ }
116
+ case 'accounts': {
117
+ const now = new Map(list(current.profiles).filter(isObject).map(profile => [str(profile.id), profile]));
118
+ const next = list(incoming.profiles).filter(isObject);
119
+ const added = next.filter(profile => !now.has(str(profile.id)));
120
+ const renamed = next.filter(profile => now.has(str(profile.id)) && canonical(now.get(str(profile.id))) !== canonical(profile));
121
+ const out = [];
122
+ if (added.length)
123
+ out.push(t('wb.backup.detail.addsAccounts', { names: names(added) }));
124
+ if (renamed.length)
125
+ out.push(t('wb.backup.detail.renames', { names: names(renamed) }));
126
+ out.push(t('wb.backup.detail.noneRemoved'));
127
+ return out;
128
+ }
129
+ case 'workspaces': {
130
+ const now = new Set(list(current.items).filter(isObject).map(item => str(item.id)));
131
+ const next = list(incoming.items).filter(isObject);
132
+ const added = next.filter(item => !now.has(str(item.id)));
133
+ return [added.length ? t('wb.backup.detail.workspacesNew', { count: next.length, names: names(added) }) : t('wb.backup.detail.workspaces', { count: next.length })];
134
+ }
135
+ case 'decks': {
136
+ const next = list(incoming.decks).filter(isObject);
137
+ return [t('wb.backup.detail.decks', { count: next.length, names: names(next) })];
138
+ }
139
+ case 'drafts': {
140
+ const count = list(incoming.drafts).length;
141
+ return [t('wb.backup.detail.drafts', { count })];
142
+ }
143
+ default: return [];
144
+ }
145
+ }
146
+ /**
147
+ * A section as it is compared. A `settings` section written before the host kept the settings
148
+ * names the site links `xLinks` (native code reads both); it is the same setting as `siteLinks`.
149
+ */
150
+ function comparable(section, value) {
151
+ if (section !== 'settings' || !('xLinks' in value) || 'siteLinks' in value)
152
+ return value;
153
+ const { xLinks, ...rest } = value;
154
+ return { ...rest, siteLinks: xLinks };
155
+ }
156
+ /** One preview row per section present in `incoming`, in display order. */
157
+ export function diffSections(current, incoming) {
158
+ const rows = [];
159
+ for (const section of SECTION_ORDER) {
160
+ const given = incoming[section];
161
+ if (!isObject(given))
162
+ continue;
163
+ const next = comparable(section, given);
164
+ const now = isObject(current[section]) ? comparable(section, current[section]) : null;
165
+ const same = !!now && canonical(now) === canonical(next);
166
+ const status = same ? 'same' : now && Object.keys(now).length ? 'changed' : 'new';
167
+ const lines = same ? [t('wb.backup.detail.same')] : details(section, now ?? {}, next);
168
+ rows.push({ section, label: sectionLabel(section), status, details: lines.length ? lines : [t('wb.backup.detail.differs')], checked: !same && section !== 'drafts' });
169
+ }
170
+ return rows;
171
+ }
172
+ /** Splits the ticked sections into what native code applies and what the shell applies. */
173
+ export function pickSections(incoming, chosen) {
174
+ const native = {};
175
+ const local = {};
176
+ for (const section of chosen) {
177
+ const value = incoming[section];
178
+ if (!isObject(value) || !SECTION_ORDER.includes(section))
179
+ continue;
180
+ const clean = stripSecrets(value);
181
+ if (LOCAL_SECTIONS.includes(section))
182
+ local[section] = clean;
183
+ else
184
+ native[section] = clean;
185
+ }
186
+ return { native, local };
187
+ }
188
+ /** "3 minutes ago" / "yesterday" for sync snapshot times, in the active language. */
189
+ export function ago(ms, now = Date.now()) {
190
+ return relativeTime(Math.min(ms, now), now);
191
+ }
192
+ //# sourceMappingURL=backupModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backupModel.js","sourceRoot":"","sources":["../../../../../../shell/src/frame/backupModel.ts"],"names":[],"mappings":"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","sourcesContent":["// Settings backup / import preview (pure, unit-tested under node).\n//\n// A `.waybetter` file is JSON: `{ format: 'waybetter-backup', version: 1, createdAt, sections }`.\n// Native code (waybetter-host `backup`) writes and reads the native sections (themes, plugins,\n// customCss, features, settings, alerts, accounts, workspaces, drafts when asked); the shell adds\n// its own storage (`decks`: the decks and deck settings). Import shows a preview:\n// one row per section with what would change, each with a checkbox; nothing is applied until the\n// owner confirms, and only the ticked sections are.\n\nimport { relativeTime, t, tx } from './i18n.ts';\n\nexport const BACKUP_FORMAT = 'waybetter-backup';\nexport const BACKUP_VERSION = 1;\n\n/** Sections the shell applies itself (the rest go to native `backup_apply`). */\nexport const LOCAL_SECTIONS = ['decks'] as const;\n\n/** Backup sections in display order; their names are `wb.backup.section.<id>` in the catalogs. */\nexport const SECTION_ORDER = ['themes', 'plugins', 'customCss', 'features', 'settings', 'alerts', 'accounts', 'workspaces', 'decks', 'drafts'];\nexport const sectionLabel = (section: string) => tx(`wb.backup.section.${section}`, undefined, section);\n\ntype Json = Record<string, unknown>;\nconst isObject = (value: unknown): value is Json => !!value && typeof value === 'object' && !Array.isArray(value);\nconst list = (value: unknown): unknown[] => (Array.isArray(value) ? value : []);\nconst str = (value: unknown) => (typeof value === 'string' ? value : '');\n\n/** Stable JSON (sorted keys) for equality. */\nexport function canonical(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(canonical).join(',')}]`;\n if (isObject(value)) return `{${Object.keys(value).sort().filter(key => value[key] !== undefined).map(key => `${JSON.stringify(key)}:${canonical(value[key])}`).join(',')}}`;\n return JSON.stringify(value ?? null);\n}\n\n/** Secret-looking keys (same rule as native `strip_secrets`); never exported, never imported. */\nexport function isSecretKey(key: string): boolean {\n const folded = key.replace(/[_-]/g, '').toLowerCase();\n return ['cookie', 'cookies', 'setcookie', 'token', 'tokens', 'accesstoken', 'authtoken', 'refreshtoken', 'idtoken', 'ct0', 'password', 'passphrase', 'secret', 'clientsecret', 'session', 'sessionid', 'authorization', 'bearer', 'csrf', 'csrftoken', 'privatekey', 'signingkey'].includes(folded)\n || folded.endsWith('secret') || folded.endsWith('token') || folded.endsWith('password');\n}\n\nexport function stripSecrets<T>(value: T): T {\n if (Array.isArray(value)) return value.map(stripSecrets) as T;\n if (!isObject(value)) return value;\n const out: Json = {};\n for (const [key, child] of Object.entries(value)) if (!isSecretKey(key)) out[key] = stripSecrets(child);\n return out as T;\n}\n\n/** The shell's own sections: decks and deck settings (localStorage), never tab state. */\nexport function localSections(input: { decks: unknown[]; deckSettings: unknown }): Json {\n return stripSecrets({ decks: { decks: input.decks, settings: input.deckSettings } });\n}\n\nexport type SectionRow = {\n section: string;\n label: string;\n /** `same`: nothing would change; `changed`: differs from this computer; `new`: nothing here yet. */\n status: 'same' | 'changed' | 'new';\n /** Short lines for the preview (\"Nord → Paper\", \"+2 plugins\", ...). */\n details: string[];\n /** Ticked by default: changed sections, except drafts (added only when asked). */\n checked: boolean;\n};\n\nconst names = (items: unknown[], key = 'name', max = 3) => {\n const shown = items.map(item => (isObject(item) ? str(item[key]) || str(item.id) : '')).filter(Boolean);\n return shown.length > max ? `${shown.slice(0, max).join(', ')} +${shown.length - max}` : shown.join(', ');\n};\n\nfunction themeDetails(current: Json, incoming: Json): string[] {\n const out: string[] = [];\n const now = isObject(current.theme) ? current.theme : {};\n const next = isObject(incoming.theme) ? incoming.theme : {};\n const presetNow = str(now.preset) || 'x';\n const presetNext = str(next.preset) || 'x';\n if (presetNow !== presetNext) out.push(t('wb.backup.detail.theme', { from: presetNow, to: presetNext }));\n const ids = (theme: Json) => list(theme.themes).map(item => (isObject(item) ? str(item.id) : '')).filter(Boolean);\n const added = ids(next).filter(id => !ids(now).includes(id));\n if (added.length) out.push(t('wb.backup.detail.importedThemes', { count: added.length, names: added.slice(0, 3).join(', ') }));\n if (canonical(now.accent) !== canonical(next.accent) || canonical(now.overrides) !== canonical(next.overrides)) out.push(t('wb.backup.detail.customizations'));\n const scopes = isObject(incoming.scopes) ? incoming.scopes : {};\n const accounts = isObject(scopes.profiles) ? Object.keys(scopes.profiles).length : 0;\n if (canonical(current.scopes) !== canonical(incoming.scopes)) out.push(accounts ? t('wb.backup.detail.scopesAccounts', { count: accounts }) : t('wb.backup.detail.scopes'));\n return out;\n}\n\nfunction pluginDetails(current: Json, incoming: Json): string[] {\n const out: string[] = [];\n const files = (section: Json) => new Map(list(section.files).filter(isObject).map(file => [str(file.file), str(file.source)]));\n const now = files(current);\n const next = files(incoming);\n const added = [...next.keys()].filter(file => !now.has(file));\n const changed = [...next.keys()].filter(file => now.has(file) && now.get(file) !== next.get(file));\n if (added.length) out.push(t('wb.backup.detail.newPlugins', { count: added.length, names: added.slice(0, 3).join(', ') }));\n if (changed.length) out.push(t('wb.backup.detail.changed', { count: changed.length, names: changed.slice(0, 3).join(', ') }));\n const enabledNow = new Set(list(current.enabled).map(str));\n const enabledNext = new Set(list(incoming.enabled).map(str));\n const on = [...enabledNext].filter(file => !enabledNow.has(file));\n const off = [...enabledNow].filter(file => !enabledNext.has(file));\n const short = (files: string[]) => `${files.slice(0, 3).map(file => file.replace(/\\.plugin\\.js$/, '')).join(', ')}${files.length > 3 ? ` +${files.length - 3}` : ''}`;\n if (on.length) out.push(t('wb.backup.detail.turnsOn', { names: short(on) }));\n if (off.length) out.push(t('wb.backup.detail.turnsOff', { names: short(off) }));\n return out;\n}\n\nfunction keyDetails(current: Json, incoming: Json, kind: 'tweak' | 'setting'): string[] {\n const keys = [...new Set([...Object.keys(current), ...Object.keys(incoming)])].filter(key => canonical(current[key]) !== canonical(incoming[key]));\n if (!keys.length) return [];\n const names = `${keys.slice(0, 4).join(', ')}${keys.length > 4 ? ' …' : ''}`;\n return [kind === 'tweak' ? t('wb.backup.detail.tweaksDiffer', { count: keys.length, names }) : t('wb.backup.detail.settingsDiffer', { count: keys.length, names })];\n}\n\nfunction details(section: string, current: Json, incoming: Json): string[] {\n switch (section) {\n case 'themes': return themeDetails(current, incoming);\n case 'plugins': return pluginDetails(current, incoming);\n case 'customCss': return [t('wb.backup.detail.css', { count: str(incoming.css).length, here: str(current.css).length })];\n case 'features': return keyDetails(current, incoming, 'tweak');\n case 'settings': return keyDetails(current, incoming, 'setting');\n case 'alerts': {\n const now = new Set(list(current.keywords).map(str));\n const next = list(incoming.keywords).map(str);\n const added = next.filter(word => !now.has(word));\n const summary = incoming.enabled ? t('wb.backup.alertsOn', { count: next.length }) : `${t('wb.common.off')} · ${t('wb.backup.detail.keywords', { count: next.length })}`;\n return [`${summary}${added.length ? ` (+${added.slice(0, 3).join(', ')})` : ''}`];\n }\n case 'accounts': {\n const now = new Map(list(current.profiles).filter(isObject).map(profile => [str(profile.id), profile]));\n const next = list(incoming.profiles).filter(isObject);\n const added = next.filter(profile => !now.has(str(profile.id)));\n const renamed = next.filter(profile => now.has(str(profile.id)) && canonical(now.get(str(profile.id))) !== canonical(profile));\n const out: string[] = [];\n if (added.length) out.push(t('wb.backup.detail.addsAccounts', { names: names(added) }));\n if (renamed.length) out.push(t('wb.backup.detail.renames', { names: names(renamed) }));\n out.push(t('wb.backup.detail.noneRemoved'));\n return out;\n }\n case 'workspaces': {\n const now = new Set(list(current.items).filter(isObject).map(item => str(item.id)));\n const next = list(incoming.items).filter(isObject);\n const added = next.filter(item => !now.has(str(item.id)));\n return [added.length ? t('wb.backup.detail.workspacesNew', { count: next.length, names: names(added) }) : t('wb.backup.detail.workspaces', { count: next.length })];\n }\n case 'decks': {\n const next = list(incoming.decks).filter(isObject);\n return [t('wb.backup.detail.decks', { count: next.length, names: names(next) })];\n }\n case 'drafts': {\n const count = list(incoming.drafts).length;\n return [t('wb.backup.detail.drafts', { count })];\n }\n default: return [];\n }\n}\n\n/**\n * A section as it is compared. A `settings` section written before the host kept the settings\n * names the site links `xLinks` (native code reads both); it is the same setting as `siteLinks`.\n */\nfunction comparable(section: string, value: Json): Json {\n if (section !== 'settings' || !('xLinks' in value) || 'siteLinks' in value) return value;\n const { xLinks, ...rest } = value;\n return { ...rest, siteLinks: xLinks };\n}\n\n/** One preview row per section present in `incoming`, in display order. */\nexport function diffSections(current: Json, incoming: Json): SectionRow[] {\n const rows: SectionRow[] = [];\n for (const section of SECTION_ORDER) {\n const given = incoming[section];\n if (!isObject(given)) continue;\n const next = comparable(section, given);\n const now = isObject(current[section]) ? comparable(section, current[section] as Json) : null;\n const same = !!now && canonical(now) === canonical(next);\n const status: SectionRow['status'] = same ? 'same' : now && Object.keys(now).length ? 'changed' : 'new';\n const lines = same ? [t('wb.backup.detail.same')] : details(section, now ?? {}, next);\n rows.push({ section, label: sectionLabel(section), status, details: lines.length ? lines : [t('wb.backup.detail.differs')], checked: !same && section !== 'drafts' });\n }\n return rows;\n}\n\n/** Splits the ticked sections into what native code applies and what the shell applies. */\nexport function pickSections(incoming: Json, chosen: Iterable<string>): { native: Json; local: Json } {\n const native: Json = {};\n const local: Json = {};\n for (const section of chosen) {\n const value = incoming[section];\n if (!isObject(value) || !SECTION_ORDER.includes(section)) continue;\n const clean = stripSecrets(value);\n if ((LOCAL_SECTIONS as readonly string[]).includes(section)) local[section] = clean; else native[section] = clean;\n }\n return { native, local };\n}\n\n/** \"3 minutes ago\" / \"yesterday\" for sync snapshot times, in the active language. */\nexport function ago(ms: number, now = Date.now()): string {\n return relativeTime(Math.min(ms, now), now);\n}\n"]}
@@ -0,0 +1,8 @@
1
+ /** localStorage key of the last chrome variables (`--wb-*` name → value). */
2
+ export declare const BOOT_CACHE_KEY = "bt.chrome.vars";
3
+ /** The page ground before any theme (Night Ink), as shell.css paints it. */
4
+ export declare const BOOT_GROUND = "#07080c";
5
+ /** The boot script's source. `label`: the shell webview's label (waybetter-host `policy::SHELL_LABEL`). */
6
+ export declare function bootScript(options?: {
7
+ label?: string;
8
+ }): string;
@@ -0,0 +1,35 @@
1
+ // The first-frame script (`boot.js`, a classic script in the shell page's <head>): the chrome
2
+ // colors the global theme had last time (themeStore.ts writes them under BOOT_CACHE_KEY), so a light
3
+ // theme never starts on the dark default while the shell's modules and the persisted theme load.
4
+ // Shell webview only: other local webviews of the app (e.g. a popover) share the page and paint
5
+ // their own background. The app serves `bootScript()` as `/boot.js` (see the README: a Vite
6
+ // plugin or a build step writes it; nothing is copied by hand).
7
+ /** localStorage key of the last chrome variables (`--wb-*` name → value). */
8
+ export const BOOT_CACHE_KEY = 'bt.chrome.vars';
9
+ /** The page ground before any theme (Night Ink), as shell.css paints it. */
10
+ export const BOOT_GROUND = '#07080c';
11
+ /** The boot script's source. `label`: the shell webview's label (waybetter-host `policy::SHELL_LABEL`). */
12
+ export function bootScript(options = {}) {
13
+ const label = JSON.stringify(options.label ?? 'shell');
14
+ return `// Generated from waybetter/shell/frame/boot (bootScript): runs before the shell's first frame and
15
+ // paints the chrome colors the global theme had last time (${BOOT_CACHE_KEY}).
16
+ (() => {
17
+ try {
18
+ const label = window.__TAURI_INTERNALS__?.metadata?.currentWebview?.label;
19
+ if (label !== ${label}) return;
20
+ const vars = JSON.parse(localStorage.getItem(${JSON.stringify(BOOT_CACHE_KEY)}) || 'null');
21
+ if (!vars || typeof vars !== 'object') return;
22
+ const root = document.documentElement;
23
+ for (const [name, value] of Object.entries(vars)) {
24
+ if (/^--wb-[a-z]-[a-z0-9-]+$/.test(name) && typeof value === 'string' && value.length < 400) root.style.setProperty(name, value);
25
+ }
26
+ // shell.css (loaded with the shell's modules) paints the same ground; this rule only covers
27
+ // the frames before it, and \`html.bt-raised\` (more specific) still clears it.
28
+ const style = document.createElement('style');
29
+ style.textContent = 'html{background:var(--wb-c-ground,${BOOT_GROUND})}';
30
+ document.head.appendChild(style);
31
+ } catch { /* No cache yet or blocked storage: the default ground. */ }
32
+ })();
33
+ `;
34
+ }
35
+ //# sourceMappingURL=boot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boot.js","sourceRoot":"","sources":["../../../../../../shell/src/frame/boot.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,qGAAqG;AACrG,iGAAiG;AACjG,gGAAgG;AAChG,4FAA4F;AAC5F,gEAAgE;AAEhE,6EAA6E;AAC7E,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAE/C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC;AAErC,2GAA2G;AAC3G,MAAM,UAAU,UAAU,CAAC,UAA8B,EAAE;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC;IACvD,OAAO;8DACqD,cAAc;;;;oBAIxD,KAAK;mDAC0B,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;;;;;;;;;6DASpB,WAAW;;;;CAIvE,CAAC;AACF,CAAC","sourcesContent":["// The first-frame script (`boot.js`, a classic script in the shell page's <head>): the chrome\n// colors the global theme had last time (themeStore.ts writes them under BOOT_CACHE_KEY), so a light\n// theme never starts on the dark default while the shell's modules and the persisted theme load.\n// Shell webview only: other local webviews of the app (e.g. a popover) share the page and paint\n// their own background. The app serves `bootScript()` as `/boot.js` (see the README: a Vite\n// plugin or a build step writes it; nothing is copied by hand).\n\n/** localStorage key of the last chrome variables (`--wb-*` name → value). */\nexport const BOOT_CACHE_KEY = 'bt.chrome.vars';\n\n/** The page ground before any theme (Night Ink), as shell.css paints it. */\nexport const BOOT_GROUND = '#07080c';\n\n/** The boot script's source. `label`: the shell webview's label (waybetter-host `policy::SHELL_LABEL`). */\nexport function bootScript(options: { label?: string } = {}): string {\n const label = JSON.stringify(options.label ?? 'shell');\n return `// Generated from waybetter/shell/frame/boot (bootScript): runs before the shell's first frame and\n// paints the chrome colors the global theme had last time (${BOOT_CACHE_KEY}).\n(() => {\n try {\n const label = window.__TAURI_INTERNALS__?.metadata?.currentWebview?.label;\n if (label !== ${label}) return;\n const vars = JSON.parse(localStorage.getItem(${JSON.stringify(BOOT_CACHE_KEY)}) || 'null');\n if (!vars || typeof vars !== 'object') return;\n const root = document.documentElement;\n for (const [name, value] of Object.entries(vars)) {\n if (/^--wb-[a-z]-[a-z0-9-]+$/.test(name) && typeof value === 'string' && value.length < 400) root.style.setProperty(name, value);\n }\n // shell.css (loaded with the shell's modules) paints the same ground; this rule only covers\n // the frames before it, and \\`html.bt-raised\\` (more specific) still clears it.\n const style = document.createElement('style');\n style.textContent = 'html{background:var(--wb-c-ground,${BOOT_GROUND})}';\n document.head.appendChild(style);\n } catch { /* No cache yet or blocked storage: the default ground. */ }\n})();\n`;\n}\n"]}
@@ -0,0 +1 @@
1
+ export declare const WB_MARK = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjI4IDM2IDEzMjQgNzQwIj48dGl0bGU+d2F5QmV0dGVyPC90aXRsZT48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9IndicyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI2MCIgeTE9Ijc0MCIgeDI9IjEzMzAiIHkyPSI5MCI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNGY2YmZmIi8+PHN0b3Agb2Zmc2V0PSIwLjU1IiBzdG9wLWNvbG9yPSIjMjJkM2VlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYTg1NWY3Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGcgZmlsbD0idXJsKCN3YnMpIj48cGF0aCBkPSJNNjAuMiAxODguOCBMODYuNyAxOTEuMyBMOTcuNiAxOTYuMyBMMTA1LjcgMjAxLjggTDExMi4zIDIwNy42IEwxMTcuOCAyMTMuNiBMMTIyLjUgMjE5LjYgTDEyNi41IDIyNS44IEwxMjkuOSAyMzIuMSBMMTMyLjggMjM4LjQgTDEzNS4zIDI0NC45IEwxMzcuNCAyNTEuNCBMMTM5LjAgMjU3LjkgTDE0MC4yIDI2NC42IEwxNDEuNCAyNzEuMiBMMTQyLjYgMjc3LjggTDE0My44IDI4NC41IEwxNDUuMCAyOTEuMSBMMTQ2LjIgMjk3LjcgTDE0Ny40IDMwNC4zIEwxNDguNyAzMTAuOSBMMTQ5LjkgMzE3LjUgTDE1MS4xIDMyNC4wIEwxNTIuNCAzMzAuNiBMMTUzLjYgMzM3LjIgTDE1NC45IDM0My43IEwxNTYuMiAzNTAuMiBMMTU3LjQgMzU2LjggTDE1OC43IDM2My4zIEwxNjAuMCAzNjkuOCBMMTYxLjMgMzc2LjIgTDE2Mi42IDM4Mi43IEwxNjMuOSAzODkuMiBMMTY1LjIgMzk1LjYgTDE2Ni41IDQwMi4xIEwxNjcuOSA0MDguNSBMMTY5LjIgNDE0LjkgTDE3MC42IDQyMS4zIEwxNzEuOSA0MjcuNiBMMTczLjMgNDM0LjAgTDE3NC43IDQ0MC4zIEwxNzYuMSA0NDYuNiBMMTc3LjUgNDUyLjkgTDE3OC45IDQ1OS4yIEwxODAuMyA0NjUuNSBMMTgxLjcgNDcxLjcgTDE4My4xIDQ3Ny45IEwxODQuNiA0ODQuMSBMMTg2LjAgNDkwLjMgTDE4Ny41IDQ5Ni41IEwxODguOSA1MDIuNiBMMTkwLjQgNTA4LjcgTDE5MS45IDUxNC44IEwxOTMuNCA1MjAuOSBMMTk0LjkgNTI2LjkgTDE5Ni40IDUzMi45IEwxOTcuOSA1MzguOSBMMTk5LjUgNTQ0LjkgTDIwMS4wIDU1MC45IEwyMDIuNiA1NTYuOCBMMjA0LjEgNTYyLjcgTDIwNS43IDU2OC41IEwyMDcuMyA1NzQuNCBMMjA4LjkgNTgwLjIgTDIxMC41IDU4Ni4wIEwyMTIuMSA1OTEuNyBMMjEzLjggNTk3LjQgTDIxNS40IDYwMy4xIEwyMTcuMCA2MDguOCBMMjE4LjcgNjE0LjQgTDIyMC40IDYyMC4wIEwyMjIuMSA2MjUuNiBMMjIzLjcgNjMxLjEgTDIyMy4yIDYzNy4zIEwyMjIuNyA2NDMuNSBMMjIyLjIgNjQ5LjcgTDIyMS43IDY1NS44IEwyMjEuMiA2NjIuMCBMMjIwLjcgNjY4LjEgTDIyMC4zIDY3NC4yIEwyMTkuOSA2ODAuMyBMMjE5LjUgNjg2LjMgTDIxOS4xIDY5Mi40IEwyMTguNyA2OTguNCBMMjE4LjQgNzA0LjQgTDIxOC4xIDcxMC40IEwyMTcuNyA3MTYuNCBMMjE3LjUgNzIyLjQgTDIxNy4yIDcyOC4zIEwyMTYuOSA3MzQuMiBMMjE2LjcgNzQwLjEgTDE3Mi40IDc1Ny41IEwxNjguMiA3NTMuMCBMMTYzLjkgNzQ4LjUgTDE1OS43IDc0NC4wIEwxNTUuNSA3MzkuNCBMMTUxLjMgNzM0LjggTDE0Ny4xIDczMC4xIEwxNDIuOSA3MjUuMyBMMTM4LjcgNzIwLjUgTDEzNC41IDcxNS43IEwxMzAuNCA3MTAuOCBMMTI2LjIgNzA1LjggTDEyMi4xIDcwMC44IEwxMTcuOSA2OTUuOCBMMTEzLjggNjkwLjcgTDEwOS43IDY4NS42IEwxMDUuNiA2ODAuNCBMMTAxLjUgNjc1LjIgTDk3LjQgNjcwLjAgTDk1LjYgNjY0LjAgTDkzLjggNjU4LjAgTDkyLjAgNjUyLjAgTDkwLjIgNjQ1LjkgTDg4LjQgNjM5LjkgTDg2LjcgNjMzLjggTDg1LjAgNjI3LjcgTDgzLjIgNjIxLjUgTDgxLjUgNjE1LjQgTDc5LjggNjA5LjIgTDc4LjEgNjAzLjAgTDc2LjUgNTk2LjggTDc0LjggNTkwLjUgTDczLjIgNTg0LjMgTDcxLjUgNTc4LjAgTDY5LjkgNTcxLjcgTDY4LjMgNTY1LjQgTDY2LjcgNTU5LjAgTDY1LjEgNTUyLjcgTDYzLjUgNTQ2LjMgTDYyLjAgNTM5LjkgTDYwLjQgNTMzLjUgTDU4LjkgNTI3LjAgTDU3LjQgNTIwLjYgTDU1LjkgNTE0LjEgTDU0LjQgNTA3LjcgTDUyLjkgNTAxLjIgTDUxLjQgNDk0LjcgTDQ5LjkgNDg4LjEgTDQ4LjUgNDgxLjYgTDQ3LjAgNDc1LjEgTDQ1LjYgNDY4LjUgTDQ0LjEgNDYxLjkgTDQyLjcgNDU1LjMgTDQxLjMgNDQ4LjcgTDM5LjkgNDQyLjEgTDM4LjUgNDM1LjUgTDM3LjEgNDI4LjkgTDM1LjggNDIyLjIgTDM0LjQgNDE1LjYgTDMzLjEgNDA4LjkgTDMxLjcgNDAyLjIgTDMwLjQgMzk1LjUgTDI5LjAgMzg4LjkgTDI3LjcgMzgyLjIgTDI2LjQgMzc1LjQgTDI1LjEgMzY4LjcgTDIzLjggMzYyLjAgTDIyLjUgMzU1LjMgTDIxLjMgMzQ4LjUgTDIwLjAgMzQxLjggTDE4LjcgMzM1LjEgTDE3LjUgMzI4LjMgTDE2LjIgMzIxLjYgTDE1LjAgMzE0LjggTDEzLjggMzA4LjAgTDEyLjYgMzAxLjMgTDExLjMgMjk0LjUgTDEwLjEgMjg3LjcgTDkuMCAyODAuOSBMOC4zIDI3NC4xIEw3LjkgMjY3LjIgTDguMSAyNjAuMiBMOC43IDI1My4xIEw5LjggMjQ1LjkgTDExLjUgMjM4LjYgTDEzLjkgMjMxLjMgTDE3LjEgMjIzLjggTDIxLjMgMjE2LjEgTDI3LjIgMjA4LjIgTDM1LjggMTk5LjggTDYwLjIgMTg4LjggWiIvPjxwYXRoIGQ9Ik0xODcuOCA3NDguOCBMMTc0LjUgNzM5LjIgTDE3MC40IDczMi4xIEwxNjguMiA3MjUuNSBMMTY2LjkgNzE5LjEgTDE2Ni4zIDcxMi45IEwxNjYuMyA3MDYuOCBMMTY2LjggNzAwLjkgTDE2Ny43IDY5NS4wIEwxNjkuMSA2ODkuMyBMMTcwLjYgNjgzLjYgTDE3Mi4yIDY3Ny45IEwxNzMuNyA2NzIuMiBMMTc1LjMgNjY2LjUgTDE3Ni45IDY2MC44IEwxNzguNCA2NTUuMSBMMTgwLjAgNjQ5LjQgTDE4MS42IDY0My43IEwxODMuMiA2MzguMCBMMTg0LjggNjMyLjMgTDE4Ni40IDYyNi42IEwxODguMCA2MjAuOSBMMTg5LjYgNjE1LjIgTDE5MS4zIDYwOS41IEwxOTIuOSA2MDMuOCBMMTk0LjUgNTk4LjEgTDE5Ni4yIDU5Mi40IEwxOTcuOCA1ODYuNyBMMTk5LjUgNTgxLjAgTDIwMS4xIDU3NS4zIEwyMDIuOCA1NjkuNiBMMjA0LjUgNTYzLjkgTDIwNi4yIDU1OC4yIEwyMDcuOCA1NTIuNSBMMjA5LjUgNTQ2LjkgTDIxMS4yIDU0MS4yIEwyMTIuOSA1MzUuNSBMMjE0LjcgNTI5LjkgTDIxNi40IDUyNC4yIEwyMTguMSA1MTguNiBMMjE5LjggNTEzLjAgTDIyMS42IDUwNy4zIEwyMjMuMyA1MDEuNyBMMjI1LjEgNDk2LjEgTDIyNi44IDQ5MC41IEwyMjguNiA0ODUuMCBMMjMwLjQgNDc5LjQgTDIzMi4yIDQ3My44IEwyMzQuMCA0NjguMyBMMjM1LjggNDYyLjcgTDIzNy42IDQ1Ny4yIEwyMzkuNCA0NTEuNyBMMjQxLjIgNDQ2LjIgTDI0My4wIDQ0MC43IEwyNDQuOSA0MzUuMiBMMjQ2LjcgNDI5LjggTDI0OC41IDQyNC4zIEwyNTAuNCA0MTguOSBMMjUyLjMgNDEzLjUgTDI1NC4xIDQwOC4xIEwyNTYuMCA0MDIuNyBMMjU3LjkgMzk3LjMgTDI1OS44IDM5Mi4wIEwyNjEuNyAzODYuNiBMMjYzLjYgMzgxLjMgTDI2NS41IDM3Ni4wIEwyNjcuNSAzNzAuOCBMMjY5LjQgMzY1LjUgTDI3MS4zIDM2MC4zIEwyNzMuMyAzNTUuMSBMMjc1LjMgMzQ5LjkgTDI3Ny4yIDM0NC43IEwyNzkuMiAzMzkuNSBMMjgyLjMgMzM0LjkgTDI4NS41IDMzMC4yIEwyODguNiAzMjUuNiBMMjkxLjggMzIxLjAgTDI5NC45IDMxNi40IEwyOTguMSAzMTEuOSBMMzAxLjMgMzA3LjQgTDMwNC40IDMwMi45IEwzMDcuNiAyOTguNSBMMzEwLjggMjk0LjEgTDMxNC4wIDI4OS43IEwzMTcuMiAyODUuNCBMMzIwLjQgMjgxLjEgTDMyMy42IDI3Ni44IEwzMjYuOCAyNzIuNiBMMzMwLjAgMjY4LjQgTDMzMy4zIDI2NC4zIEwzMzYuNSAyNjAuMiBMMzU3LjMgMjY5LjcgTDM1Ni4zIDI3NC44IEwzNTUuNCAyNzkuOCBMMzU0LjUgMjg0LjkgTDM1My42IDI5MC4wIEwzNTIuNyAyOTUuMSBMMzUxLjggMzAwLjMgTDM1MC45IDMwNS41IEwzNTAuMCAzMTAuNyBMMzQ5LjIgMzE1LjkgTDM0OC4zIDMyMS4xIEwzNDcuNSAzMjYuNCBMMzQ2LjcgMzMxLjYgTDM0NS44IDMzNi45IEwzNDUuMCAzNDIuMiBMMzQ0LjIgMzQ3LjYgTDM0My41IDM1Mi45IEwzNDIuNyAzNTguMyBMMzQxLjkgMzYzLjcgTDM0MC4wIDM2OC43IEwzMzguMSAzNzMuNyBMMzM2LjIgMzc4LjcgTDMzNC4zIDM4My43IEwzMzIuNCAzODguOCBMMzMwLjYgMzkzLjkgTDMyOC43IDM5OS4wIEwzMjYuOCA0MDQuMiBMMzI1LjAgNDA5LjMgTDMyMy4xIDQxNC41IEwzMjEuMyA0MTkuNyBMMzE5LjQgNDI0LjkgTDMxNy42IDQzMC4xIEwzMTUuOCA0MzUuNCBMMzE0LjAgNDQwLjcgTDMxMi4yIDQ0Ni4wIEwzMTAuNCA0NTEuMyBMMzA4LjYgNDU2LjYgTDMwNi44IDQ2Mi4wIEwzMDUuMCA0NjcuMyBMMzAzLjIgNDcyLjcgTDMwMS40IDQ3OC4xIEwyOTkuNyA0ODMuNSBMMjk3LjkgNDg4LjkgTDI5Ni4yIDQ5NC40IEwyOTQuNCA0OTkuOCBMMjkyLjcgNTA1LjMgTDI5MC45IDUxMC44IEwyODkuMiA1MTYuMyBMMjg3LjUgNTIxLjggTDI4NS44IDUyNy4zIEwyODQuMSA1MzIuOCBMMjgyLjQgNTM4LjMgTDI4MC43IDU0My45IEwyNzkuMCA1NDkuNCBMMjc3LjMgNTU1LjAgTDI3NS42IDU2MC42IEwyNzMuOSA1NjYuMSBMMjcyLjMgNTcxLjcgTDI3MC42IDU3Ny4zIEwyNjguOSA1ODIuOSBMMjY3LjMgNTg4LjUgTDI2NS42IDU5NC4xIEwyNjQuMCA1OTkuOCBMMjYyLjQgNjA1LjQgTDI2MC43IDYxMS4wIEwyNTkuMSA2MTYuNiBMMjU3LjUgNjIyLjMgTDI1NS45IDYyNy45IEwyNTQuMyA2MzMuNiBMMjUyLjcgNjM5LjIgTDI1MS4xIDY0NC44IEwyNDkuNSA2NTAuNSBMMjQ3LjkgNjU2LjEgTDI0Ni4zIDY2MS44IEwyNDQuOCA2NjcuNCBMMjQzLjIgNjczLjEgTDI0MS42IDY3OC43IEwyNDAuMSA2ODQuNCBMMjM4LjUgNjkwLjAgTDIzNy4wIDY5NS43IEwyMzUuNCA3MDEuMyBMMjMzLjkgNzA2LjkgTDIzMi4yIDcxMi41IEwyMzAuMCA3MTguMCBMMjI3LjUgNzIzLjMgTDIyNC40IDcyOC41IEwyMjAuOCA3MzMuNiBMMjE2LjUgNzM4LjUgTDIxMS4yIDc0My4wIEwyMDQuMiA3NDcuMiBMMTg3LjggNzQ4LjggWiIvPjxwYXRoIGQ9Ik0zMzMuNCAyNjUuMCBMMzU3LjEgMjY1LjYgTDM2Ny4xIDI2OS4zIEwzNzQuNiAyNzMuNSBMMzgwLjkgMjc4LjEgTDM4Ni4yIDI4Mi44IEwzOTAuOCAyODcuNyBMMzk0LjkgMjkyLjcgTDM5OC41IDI5Ny43IEw0MDEuNyAzMDIuOSBMNDA0LjYgMzA4LjIgTDQwNy4xIDMxMy41IEw0MDkuMyAzMTkuMCBMNDExLjEgMzI0LjQgTDQxMi43IDMzMC4wIEw0MTQuMSAzMzUuNiBMNDE1LjQgMzQxLjIgTDQxNi44IDM0Ni44IEw0MTguMSAzNTIuNCBMNDE5LjUgMzU4LjAgTDQyMC44IDM2My41IEw0MjIuMiAzNjkuMSBMNDIzLjYgMzc0LjcgTDQyNC45IDM4MC4zIEw0MjYuMyAzODUuOCBMNDI3LjcgMzkxLjQgTDQyOS4xIDM5Ni45IEw0MzAuNSA0MDIuNSBMNDMxLjkgNDA4LjAgTDQzMy4zIDQxMy41IEw0MzQuNyA0MTkuMCBMNDM2LjIgNDI0LjYgTDQzNy42IDQzMC4xIEw0MzkuMCA0MzUuNiBMNDQwLjUgNDQxLjAgTDQ0MS45IDQ0Ni41IEw0NDMuNCA0NTIuMCBMNDQ0LjggNDU3LjQgTDQ0Ni4zIDQ2Mi45IEw0NDcuOCA0NjguMyBMNDQ5LjMgNDczLjcgTDQ1MC44IDQ3OS4yIEw0NTIuMyA0ODQuNiBMNDUzLjggNDkwLjAgTDQ1NS4zIDQ5NS4zIEw0NTYuOCA1MDAuNyBMNDU4LjMgNTA2LjEgTDQ1OS44IDUxMS40IEw0NjEuNCA1MTYuNyBMNDYyLjkgNTIyLjEgTDQ2NC41IDUyNy40IEw0NjYuMCA1MzIuNiBMNDY3LjYgNTM3LjkgTDQ2OS4yIDU0My4yIEw0NzAuNyA1NDguNCBMNDcyLjMgNTUzLjcgTDQ3My45IDU1OC45IEw0NzUuNSA1NjQuMSBMNDc3LjEgNTY5LjMgTDQ3OC43IDU3NC40IEw0ODAuNCA1NzkuNiBMNDgyLjAgNTg0LjcgTDQ4My42IDU4OS44IEw0ODUuMyA1OTQuOSBMNDg2LjkgNjAwLjAgTDQ4OC42IDYwNS4xIEw0OTAuMiA2MTAuMSBMNDkxLjkgNjE1LjEgTDQ5My42IDYyMC4xIEw0OTUuMyA2MjUuMSBMNDk3LjAgNjMwLjEgTDQ5OC43IDYzNS4wIEw1MDAuNCA2NDAuMCBMNTAwLjAgNjQ1LjYgTDQ5OS42IDY1MS4zIEw0OTkuMyA2NTYuOSBMNDk4LjkgNjYyLjUgTDQ5OC42IDY2OC4xIEw0OTguMyA2NzMuNyBMNDk4LjAgNjc5LjMgTDQ5Ny43IDY4NC45IEw0OTcuNCA2OTAuNSBMNDk3LjEgNjk2LjAgTDQ5Ni44IDcwMS42IEw0OTYuNiA3MDcuMSBMNDk2LjQgNzEyLjcgTDQ5Ni4yIDcxOC4yIEw0OTYuMCA3MjMuNyBMNDk1LjggNzI5LjIgTDQ5NS42IDczNC43IEw0OTUuNCA3NDAuMiBMNDUzLjcgNzU3LjQgTDQ0OS43IDc1My41IEw0NDUuNiA3NDkuNSBMNDQxLjYgNzQ1LjUgTDQzNy42IDc0MS40IEw0MzMuNiA3MzcuMyBMNDI5LjYgNzMzLjIgTDQyNS42IDcyOS4xIEw0MjEuNiA3MjQuOSBMNDE3LjYgNzIwLjYgTDQxMy42IDcxNi40IEw0MDkuNiA3MTIuMSBMNDA1LjcgNzA3LjggTDQwMS43IDcwMy41IEwzOTcuNyA2OTkuMSBMMzkzLjggNjk0LjcgTDM4OS44IDY5MC4yIEwzODUuOSA2ODUuOCBMMzgyLjAgNjgxLjMgTDM4MC4xIDY3Ni4wIEwzNzguMyA2NzAuOCBMMzc2LjUgNjY1LjUgTDM3NC43IDY2MC4yIEwzNzIuOSA2NTQuOSBMMzcxLjIgNjQ5LjYgTDM2OS40IDY0NC4zIEwzNjcuNyA2MzguOSBMMzY1LjkgNjMzLjUgTDM2NC4yIDYyOC4yIEwzNjIuNSA2MjIuOCBMMzYwLjcgNjE3LjQgTDM1OS4wIDYxMi4wIEwzNTcuMyA2MDYuNSBMMzU1LjcgNjAxLjEgTDM1NC4wIDU5NS42IEwzNTIuMyA1OTAuMiBMMzUwLjcgNTg0LjcgTDM0OS4wIDU3OS4yIEwzNDcuNCA1NzMuNyBMMzQ1LjcgNTY4LjIgTDM0NC4xIDU2Mi43IEwzNDIuNSA1NTcuMSBMMzQwLjkgNTUxLjYgTDMzOS4zIDU0Ni4wIEwzMzcuNyA1NDAuNSBMMzM2LjEgNTM0LjkgTDMzNC41IDUyOS4zIEwzMzMuMCA1MjMuNyBMMzMxLjQgNTE4LjEgTDMyOS44IDUxMi41IEwzMjguMyA1MDYuOSBMMzI2LjggNTAxLjMgTDMyNS4yIDQ5NS42IEwzMjMuNyA0OTAuMCBMMzIyLjIgNDg0LjQgTDMyMC43IDQ3OC43IEwzMTkuMiA0NzMuMSBMMzE3LjcgNDY3LjQgTDMxNi4yIDQ2MS43IEwzMTQuNyA0NTYuMCBMMzEzLjMgNDUwLjQgTDMxMS44IDQ0NC43IEwzMTAuNCA0MzkuMCBMMzA4LjkgNDMzLjMgTDMwNy41IDQyNy42IEwzMDYuMCA0MjEuOSBMMzA0LjYgNDE2LjIgTDMwMy4yIDQxMC41IEwzMDEuOCA0MDQuNyBMMzAwLjQgMzk5LjAgTDI5OS4wIDM5My4zIEwyOTcuNiAzODcuNiBMMjk2LjIgMzgxLjggTDI5NC44IDM3Ni4xIEwyOTMuNCAzNzAuNCBMMjkyLjEgMzY0LjYgTDI5MC43IDM1OC45IEwyODkuNiAzNTMuMSBMMjg4LjggMzQ3LjIgTDI4OC40IDM0MS4zIEwyODguMiAzMzUuMyBMMjg4LjQgMzI5LjIgTDI4OS4wIDMyMy4wIEwyOTAuMCAzMTYuOCBMMjkxLjUgMzEwLjQgTDI5My41IDMwMy45IEwyOTYuMyAyOTcuMyBMMjk5LjkgMjkwLjQgTDMwNC45IDI4My4zIEwzMTIuMyAyNzUuNyBMMzMzLjQgMjY1LjAgWiIvPjxwYXRoIGQ9Ik00NjcuOCA3NDguOCBMNDQ4LjYgNzM1LjMgTDQ0Mi44IDcyNS4yIEw0MzkuNSA3MTUuOSBMNDM3LjYgNzA2LjkgTDQzNi44IDY5OC4xIEw0MzYuNyA2ODkuNSBMNDM3LjQgNjgxLjEgTDQzOC43IDY3Mi44IEw0NDAuNiA2NjQuNiBMNDQyLjkgNjU2LjYgTDQ0NS4xIDY0OC41IEw0NDcuMyA2NDAuMyBMNDQ5LjYgNjMyLjIgTDQ1MS44IDYyNC4wIEw0NTQuMSA2MTUuOSBMNDU2LjQgNjA3LjcgTDQ1OC43IDU5OS41IEw0NjEuMSA1OTEuMyBMNDYzLjQgNTgzLjAgTDQ2NS44IDU3NC44IEw0NjguMiA1NjYuNiBMNDcwLjYgNTU4LjMgTDQ3My4wIDU1MC4wIEw0NzUuNCA1NDEuNyBMNDc3LjkgNTMzLjUgTDQ4MC4zIDUyNS4yIEw0ODIuOCA1MTYuOSBMNDg1LjMgNTA4LjYgTDQ4Ny45IDUwMC4zIEw0OTAuNCA0OTIuMCBMNDkzLjAgNDgzLjYgTDQ5NS42IDQ3NS4zIEw0OTguMiA0NjcuMCBMNTAwLjggNDU4LjcgTDUwMy41IDQ1MC40IEw1MDYuMiA0NDIuMSBMNTA4LjkgNDMzLjcgTDUxMS42IDQyNS40IEw1MTQuMyA0MTcuMSBMNTE3LjEgNDA4LjggTDUxOS45IDQwMC41IEw1MjIuNyAzOTIuMiBMNTI1LjYgMzg0LjAgTDUyOC40IDM3NS43IEw1MzEuMyAzNjcuNCBMNjIyLjIgMzk5LjQgTDYxOS40IDQwNy40IEw2MTYuNiA0MTUuNCBMNjEzLjkgNDIzLjQgTDYxMS4xIDQzMS40IEw2MDguNCA0MzkuNCBMNjA1LjcgNDQ3LjUgTDYwMy4xIDQ1NS42IEw2MDAuNCA0NjMuNiBMNTk3LjggNDcxLjcgTDU5NS4yIDQ3OS44IEw1OTIuNiA0ODcuOSBMNTkwLjEgNDk2LjAgTDU4Ny41IDUwNC4xIEw1ODUuMCA1MTIuMiBMNTgyLjUgNTIwLjMgTDU4MC4wIDUyOC40IEw1NzcuNSA1MzYuNSBMNTc1LjEgNTQ0LjcgTDU3Mi42IDU1Mi44IEw1NzAuMiA1NjAuOSBMNTY3LjggNTY5LjAgTDU2NS40IDU3Ny4xIEw1NjMuMCA1ODUuMiBMNTYwLjcgNTkzLjMgTDU1OC4zIDYwMS41IEw1NTYuMCA2MDkuNSBMNTUzLjcgNjE3LjYgTDU1MS40IDYyNS43IEw1NDkuMSA2MzMuOCBMNTQ2LjkgNjQxLjkgTDU0NC42IDY0OS45IEw1NDIuNCA2NTguMCBMNTQwLjIgNjY2LjAgTDUzNy45IDY3NC4wIEw1MzUuNyA2ODIuMCBMNTMzLjYgNjkwLjAgTDUzMS4xIDY5Ny45IEw1MjguMSA3MDUuNiBMNTI0LjQgNzEzLjIgTDUyMC4xIDcyMC41IEw1MTUuMCA3MjcuNiBMNTA4LjggNzM0LjUgTDUwMS4zIDc0MC45IEw0OTEuMyA3NDYuNiBMNDY3LjggNzQ4LjggWiIvPjxwYXRoIGQ9Ik01MTUuNiA0MTIuMCBMNTIxLjEgMzk4LjIgTDUyNi41IDM4NC4zIEw1MzEuMyAzNzAuMiBMNTM2LjMgMzU2LjIgTDU0MS41IDM0Mi4zIEw1NDYuOSAzMjguNCBMNTUyLjUgMzE0LjYgTDU1OC4yIDMwMS4wIEw1NjQuMiAyODcuNCBMNTcxLjIgMjc0LjIgTDU3OS4zIDI2MS42IEw1ODcuNSAyNDkuMCBMNTk1LjcgMjM2LjYgTDYwMy45IDIyNC4yIEw2MTIuMiAyMTEuOSBMNjIwLjUgMTk5LjcgTDYyOC44IDE4Ny42IEw2MzcuMiAxNzUuNiBMNjQ1LjYgMTYzLjcgTDY1NC4wIDE1MS45IEw2NjIuMyAxNDAuMiBMNjcwLjcgMTI4LjYgTDY3OS4wIDExNy4xIEw2ODcuMyAxMDUuNyBMNjg3LjMgMTA1LjcgTDY3OS40IDExNy4zIEw2NzEuNSAxMjkuMSBMNjYzLjYgMTQwLjkgTDY1NS44IDE1Mi44IEw2NDguMCAxNjQuOSBMNjQwLjIgMTc3LjEgTDYzMi41IDE4OS4zIEw2MjQuOSAyMDEuNyBMNjE3LjMgMjE0LjEgTDYwOS43IDIyNi43IEw2MDIuMyAyMzkuMyBMNTk0LjggMjUyLjEgTDU4Ny40IDI2NC45IEw1ODAuMSAyNzcuOCBMNTczLjYgMjkxLjAgTDU2Ny45IDMwNC43IEw1NjIuNCAzMTguNCBMNTU3LjEgMzMyLjIgTDU1MS45IDM0Ni4wIEw1NDYuOCAzNjAuMCBMNTQyLjAgMzc0LjAgTDUzNy4yIDM4OC4wIEw1MzMuMiA0MDIuMyBMNTI5LjQgNDE2LjYgWiIvPjxwYXRoIGQ9Ik01MjguNyA0MTYuNCBMNTM0LjAgNDAzLjAgTDUzOS4xIDM4OS42IEw1NDMuOCAzNzYuMCBMNTQ4LjUgMzYyLjUgTDU1My40IDM0OS4wIEw1NTguMyAzMzUuNSBMNTYzLjQgMzIyLjEgTDU2OC42IDMwOC44IEw1NzMuOSAyOTUuNSBMNTc5LjYgMjgyLjQgTDU4Ni40IDI2OS44IEw1OTMuNCAyNTcuMyBMNjAwLjQgMjQ0LjkgTDYwNy41IDIzMi41IEw2MTQuNiAyMjAuMyBMNjIxLjkgMjA4LjEgTDYyOS4xIDE5Ni4wIEw2MzYuNSAxODQuMCBMNjQzLjkgMTcyLjEgTDY1MS4zIDE2MC40IEw2NTguOCAxNDguNyBMNjY2LjMgMTM3LjEgTDY3My45IDEyNS42IEw2ODEuNSAxMTQuMyBMNjgxLjUgMTE0LjMgTDY3NC4zIDEyNS44IEw2NjcuMiAxMzcuNSBMNjYwLjIgMTQ5LjQgTDY1My4zIDE2MS4zIEw2NDYuNCAxNzMuNCBMNjM5LjcgMTg1LjUgTDYzMy4wIDE5Ny44IEw2MjYuNCAyMTAuMSBMNjE5LjkgMjIyLjYgTDYxMy41IDIzNS4xIEw2MDcuMSAyNDcuNyBMNjAwLjkgMjYwLjQgTDU5NC43IDI3My4xIEw1ODguNiAyODYuMCBMNTgzLjMgMjk5LjIgTDU3OC4zIDMxMi41IEw1NzMuNCAzMjUuOSBMNTY4LjUgMzM5LjMgTDU2My44IDM1Mi43IEw1NTkuMSAzNjYuMiBMNTU0LjQgMzc5LjggTDU0OS45IDM5My4zIEw1NDYuMSA0MDcuMSBMNTQyLjUgNDIxLjAgWiIvPjxwYXRoIGQ9Ik01NDEuNyA0MjAuNyBMNTQ3LjAgNDA3LjQgTDU1Mi4yIDM5NC4wIEw1NTcuMSAzODAuNiBMNTYxLjggMzY3LjEgTDU2Ni42IDM1My42IEw1NzEuNSAzNDAuMiBMNTc2LjYgMzI2LjggTDU4MS43IDMxMy41IEw1ODcuMSAzMDAuMyBMNTkyLjYgMjg3LjIgTDU5OS4wIDI3NC41IEw2MDUuNCAyNjEuOCBMNjExLjkgMjQ5LjIgTDYxOC40IDIzNi43IEw2MjUuMSAyMjQuMiBMNjMxLjggMjExLjkgTDYzOC41IDE5OS42IEw2NDUuNCAxODcuNSBMNjUyLjIgMTc1LjQgTDY1OS4xIDE2My40IEw2NjYuMSAxNTEuNSBMNjczLjEgMTM5LjcgTDY4MC4yIDEyOC4wIEw2ODcuMiAxMTYuNCBMNjg3LjIgMTE2LjQgTDY4MC41IDEyOC4yIEw2NzMuOSAxNDAuMSBMNjY3LjMgMTUyLjEgTDY2MC45IDE2NC4zIEw2NTQuNSAxNzYuNSBMNjQ4LjIgMTg4LjggTDY0Mi4wIDIwMS4yIEw2MzUuOSAyMTMuNyBMNjI5LjggMjI2LjMgTDYyMy45IDIzOS4wIEw2MTguMCAyNTEuOCBMNjEyLjIgMjY0LjYgTDYwNi40IDI3Ny41IEw2MDAuOCAyOTAuNCBMNTk1LjYgMzAzLjYgTDU5MC41IDMxNi45IEw1ODUuNiAzMzAuMiBMNTgwLjggMzQzLjYgTDU3Ni4wIDM1Ny4wIEw1NzEuNCAzNzAuNSBMNTY2LjggMzg0LjAgTDU2Mi43IDM5Ny42IEw1NTkuMCA0MTEuNSBMNTU1LjUgNDI1LjQgWiIvPjxwYXRoIGQ9Ik01NTQuOCA0MjUuMSBMNTU4LjggNDE1LjggTDU2Mi4wIDQwNi4yIEw1NjUuMyAzOTYuNiBMNTY4LjUgMzg3LjAgTDU3MS44IDM3Ny40IEw1NzUuMSAzNjcuOSBMNTc4LjQgMzU4LjMgTDU4MS44IDM0OC44IEw1ODUuMSAzMzkuMyBMNTg4LjUgMzI5LjggTDU5MS45IDMyMC4zIEw1OTUuNCAzMTAuOCBMNTk4LjkgMzAxLjQgTDYwMi42IDI5Mi4xIEw2MDYuNCAyODIuOCBMNjEwLjMgMjczLjUgTDYxNC4yIDI2NC4zIEw2MTguMiAyNTUuMiBMNjIyLjIgMjQ2LjEgTDYyNi4yIDIzNy4wIEw2MzAuNCAyMjcuOSBMNjM0LjUgMjE4LjkgTDYzOC43IDIxMC4wIEw2NDMuMCAyMDEuMCBMNjQzLjAgMjAxLjAgTDYzOS41IDIxMC4zIEw2MzYuMCAyMTkuNiBMNjMyLjcgMjI4LjkgTDYyOS40IDIzOC4zIEw2MjYuMSAyNDcuNyBMNjIzLjAgMjU3LjIgTDYxOS44IDI2Ni43IEw2MTYuOCAyNzYuMiBMNjEzLjcgMjg1LjcgTDYxMC43IDI5NS4zIEw2MDcuNyAzMDQuOCBMNjA0LjYgMzE0LjQgTDYwMS42IDMyNC4wIEw1OTguNyAzMzMuNiBMNTk1LjcgMzQzLjIgTDU5Mi42IDM1Mi44IEw1ODkuNiAzNjIuNCBMNTg2LjUgMzcxLjkgTDU4My40IDM4MS41IEw1ODAuMyAzOTEuMSBMNTc3LjEgNDAwLjcgTDU3NC4wIDQxMC4zIEw1NzAuOSA0MTkuOCBMNTY4LjYgNDI5LjcgWiIvPjxwYXRoIGQ9Ik01NjcuOCA0MjkuNSBMNTczLjggNDEzLjkgTDU3OS44IDM5OC40IEw1ODUuNiAzODIuOSBMNTkxLjEgMzY3LjIgTDU5Ni44IDM1MS42IEw2MDIuNiAzMzYuMSBMNjA4LjUgMzIwLjcgTDYxNC43IDMwNS40IEw2MjAuNyAyOTAuMSBMNjI2LjggMjc0LjkgTDYzMy4wIDI1OS44IEw2MzkuMyAyNDQuNyBMNjQ1LjcgMjI5LjggTDY1Mi4yIDIxNS4wIEw2NTguOCAyMDAuMyBMNjY1LjUgMTg1LjYgTDY3Mi4zIDE3MS4xIEw2NzkuMSAxNTYuNyBMNjg2LjAgMTQyLjQgTDY5My4wIDEyOC4yIEw3MDAuMSAxMTQuMSBMNzA3LjIgMTAwLjIgTDcxNC40IDg2LjMgTDcyMS42IDcyLjYgTDcyMS42IDcyLjYgTDcxNC42IDg2LjQgTDcwNy43IDEwMC40IEw3MDAuOSAxMTQuNiBMNjk0LjIgMTI4LjkgTDY4Ny43IDE0My4zIEw2ODEuMyAxNTcuOCBMNjc1LjAgMTcyLjQgTDY2OC44IDE4Ny4yIEw2NjIuNyAyMDIuMSBMNjU2LjggMjE3LjAgTDY1MC45IDIzMi4xIEw2NDUuMiAyNDcuMyBMNjM5LjUgMjYyLjUgTDYzNC4wIDI3Ny45IEw2MjguNyAyOTMuMyBMNjIzLjEgMzA4LjcgTDYxNy4yIDMyNC4xIEw2MTEuNSAzMzkuNSBMNjA1LjggMzU1LjAgTDYwMC4zIDM3MC41IEw1OTUuMCAzODYuMSBMNTkwLjIgNDAyLjAgTDU4NS45IDQxOC4wIEw1ODEuNiA0MzQuMSBaIi8+PHBhdGggZD0iTTU4MC45IDQzMy44IEw1ODcuMiA0MTcuMSBMNTkzLjYgNDAwLjUgTDYwMC4wIDM4My44IEw2MDYuMCAzNjcuMSBMNjEyLjIgMzUwLjUgTDYxOC42IDMzNC4wIEw2MjUuMyAzMTcuNiBMNjMxLjkgMzAxLjMgTDYzNy45IDI4NC43IEw2NDQuMCAyNjguMyBMNjUwLjMgMjUyLjAgTDY1Ni43IDIzNS44IEw2NjMuMSAyMTkuNyBMNjY5LjYgMjAzLjcgTDY3Ni4yIDE4Ny44IEw2ODIuOSAxNzIuMCBMNjg5LjYgMTU2LjMgTDY5Ni40IDE0MC43IEw3MDMuMiAxMjUuMSBMNzEwLjEgMTA5LjcgTDcxNy4wIDk0LjQgTDcyMy45IDc5LjEgTDczMC45IDYzLjkgTDczNy44IDQ4LjcgTDczNy44IDQ4LjcgTDczMS4wIDY0LjAgTDcyNC4zIDc5LjMgTDcxNy42IDk0LjcgTDcxMS4xIDExMC4zIEw3MDQuNiAxMjUuOSBMNjk4LjIgMTQxLjYgTDY5Mi4wIDE1Ny41IEw2ODUuOCAxNzMuNCBMNjc5LjcgMTg5LjQgTDY3My43IDIwNS42IEw2NjcuOSAyMjEuOCBMNjYyLjEgMjM4LjIgTDY1Ni40IDI1NC42IEw2NTAuOCAyNzEuMSBMNjQ1LjQgMjg3LjggTDY0MC4xIDMwNC41IEw2MzMuOCAzMjAuOSBMNjI3LjMgMzM3LjMgTDYyMS4xIDM1My44IEw2MTUuMCAzNzAuNCBMNjA5LjIgMzg3LjEgTDYwNC4xIDQwNC4xIEw1OTkuMyA0MjEuMiBMNTk0LjcgNDM4LjQgWiIvPjxwYXRoIGQ9Ik01OTMuOSA0MzguMiBMNTk5LjUgNDI0LjMgTDYwNC41IDQxMC4yIEw2MDkuMyAzOTYuMSBMNjE0LjEgMzgyLjAgTDYxOS4wIDM2OC4wIEw2MjQuMCAzNTMuOSBMNjI4LjkgMzQwLjAgTDYzMy45IDMyNi4wIEw2MzguOSAzMTIuMSBMNjQyLjkgMjk3LjkgTDY0Ni42IDI4My41IEw2NTAuNSAyNjkuMiBMNjU0LjYgMjU1LjEgTDY1OC44IDI0MS4wIEw2NjMuMSAyMjYuOSBMNjY3LjUgMjEzLjAgTDY3Mi4xIDE5OS4xIEw2NzYuNyAxODUuMyBMNjgxLjYgMTcxLjYgTDY4Ni41IDE1OC4xIEw2OTEuNiAxNDQuNiBMNjk2LjkgMTMxLjIgTDcwMi4zIDExOC4wIEw3MDcuOSAxMDQuOSBMNzA3LjkgMTA0LjkgTDcwMi43IDExOC4yIEw2OTcuNyAxMzEuNiBMNjkyLjkgMTQ1LjMgTDY4OC40IDE1OS4wIEw2ODQuMCAxNzIuOCBMNjc5LjggMTg2LjggTDY3NS45IDIwMC45IEw2NzIuMCAyMTUuMCBMNjY4LjQgMjI5LjMgTDY2NC44IDI0My42IEw2NjEuNSAyNTguMCBMNjU4LjIgMjcyLjQgTDY1NS4xIDI4Ny4wIEw2NTIuMiAzMDEuNiBMNjQ4LjkgMzE2LjEgTDY0NC4yIDMzMC4wIEw2MzkuNSAzNDQuMCBMNjM0LjggMzU4LjAgTDYzMC4xIDM3Mi4wIEw2MjUuNCAzODYuMCBMNjIwLjYgNDAwLjEgTDYxNS45IDQxNC4yIEw2MTEuNSA0MjguNCBMNjA3LjcgNDQyLjggWiIvPjxwYXRoIGQ9Ik0gNzMzLjAgNzYwLjAgTCA3MzMuMCA1MC4wIEwgMTAyNS42IDUwLjAgUSAxMTYwLjYgNTAuMCAxMjM0LjAgOTYuNSBRIDEzMDcuMyAxNDIuOSAxMzA3LjMgMjQzLjcgUSAxMzA3LjMgMjg3LjAgMTI5MC41IDMxOC40IFEgMTI3My42IDM0OS44IDEyNDAuMiAzNjguNCBRIDEyMDYuOCAzODcuMCAxMTU4LjUgMzkyLjQgTCAxMTU4LjQgMzkzLjYgUSAxMjQ3LjYgNDAxLjcgMTI5Mi41IDQ0NS43IFEgMTMzNy4zIDQ4OS43IDEzMzcuMyA1NjQuMSBRIDEzMzcuMyA2NjMuOCAxMjY0LjQgNzExLjkgUSAxMTkxLjUgNzYwLjAgMTA1Ni42IDc2MC4wIFogTSA5MTguMCA2MTYuNiBMIDEwNDQuOSA2MTYuNiBRIDEwOTAuOSA2MTYuNiAxMTIxLjQgNTk3LjggUSAxMTUxLjkgNTc5LjEgMTE1MS45IDUzOS4zIFEgMTE1MS45IDQ5OS41IDExMjEuOCA0ODAuMiBRIDEwOTEuOCA0NjAuOCAxMDQ0LjkgNDYwLjggTCA5MTguMCA0NjAuOCBaIE0gOTE4LjAgMzM3LjIgTCAxMDE4LjQgMzM3LjIgUSAxMDY0LjAgMzM3LjIgMTA5Mi45IDMxOS40IFEgMTEyMS45IDMwMS42IDExMjEuOSAyNjUuNyBRIDExMjEuOSAyMjcuNyAxMDkzLjUgMjEwLjYgUSAxMDY1LjIgMTkzLjQgMTAxOC40IDE5My40IEwgOTE4LjAgMTkzLjQgWiIvPjwvZz48L3N2Zz4K";
@@ -0,0 +1,4 @@
1
+ // The wayBetter mark (the "wB" brush lettering) on the address bar's brand button, as a data URI so
2
+ // the frame ships no asset files.
3
+ export const WB_MARK = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjI4IDM2IDEzMjQgNzQwIj48dGl0bGU+d2F5QmV0dGVyPC90aXRsZT48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9IndicyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI2MCIgeTE9Ijc0MCIgeDI9IjEzMzAiIHkyPSI5MCI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNGY2YmZmIi8+PHN0b3Agb2Zmc2V0PSIwLjU1IiBzdG9wLWNvbG9yPSIjMjJkM2VlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYTg1NWY3Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGcgZmlsbD0idXJsKCN3YnMpIj48cGF0aCBkPSJNNjAuMiAxODguOCBMODYuNyAxOTEuMyBMOTcuNiAxOTYuMyBMMTA1LjcgMjAxLjggTDExMi4zIDIwNy42IEwxMTcuOCAyMTMuNiBMMTIyLjUgMjE5LjYgTDEyNi41IDIyNS44IEwxMjkuOSAyMzIuMSBMMTMyLjggMjM4LjQgTDEzNS4zIDI0NC45IEwxMzcuNCAyNTEuNCBMMTM5LjAgMjU3LjkgTDE0MC4yIDI2NC42IEwxNDEuNCAyNzEuMiBMMTQyLjYgMjc3LjggTDE0My44IDI4NC41IEwxNDUuMCAyOTEuMSBMMTQ2LjIgMjk3LjcgTDE0Ny40IDMwNC4zIEwxNDguNyAzMTAuOSBMMTQ5LjkgMzE3LjUgTDE1MS4xIDMyNC4wIEwxNTIuNCAzMzAuNiBMMTUzLjYgMzM3LjIgTDE1NC45IDM0My43IEwxNTYuMiAzNTAuMiBMMTU3LjQgMzU2LjggTDE1OC43IDM2My4zIEwxNjAuMCAzNjkuOCBMMTYxLjMgMzc2LjIgTDE2Mi42IDM4Mi43IEwxNjMuOSAzODkuMiBMMTY1LjIgMzk1LjYgTDE2Ni41IDQwMi4xIEwxNjcuOSA0MDguNSBMMTY5LjIgNDE0LjkgTDE3MC42IDQyMS4zIEwxNzEuOSA0MjcuNiBMMTczLjMgNDM0LjAgTDE3NC43IDQ0MC4zIEwxNzYuMSA0NDYuNiBMMTc3LjUgNDUyLjkgTDE3OC45IDQ1OS4yIEwxODAuMyA0NjUuNSBMMTgxLjcgNDcxLjcgTDE4My4xIDQ3Ny45IEwxODQuNiA0ODQuMSBMMTg2LjAgNDkwLjMgTDE4Ny41IDQ5Ni41IEwxODguOSA1MDIuNiBMMTkwLjQgNTA4LjcgTDE5MS45IDUxNC44IEwxOTMuNCA1MjAuOSBMMTk0LjkgNTI2LjkgTDE5Ni40IDUzMi45IEwxOTcuOSA1MzguOSBMMTk5LjUgNTQ0LjkgTDIwMS4wIDU1MC45IEwyMDIuNiA1NTYuOCBMMjA0LjEgNTYyLjcgTDIwNS43IDU2OC41IEwyMDcuMyA1NzQuNCBMMjA4LjkgNTgwLjIgTDIxMC41IDU4Ni4wIEwyMTIuMSA1OTEuNyBMMjEzLjggNTk3LjQgTDIxNS40IDYwMy4xIEwyMTcuMCA2MDguOCBMMjE4LjcgNjE0LjQgTDIyMC40IDYyMC4wIEwyMjIuMSA2MjUuNiBMMjIzLjcgNjMxLjEgTDIyMy4yIDYzNy4zIEwyMjIuNyA2NDMuNSBMMjIyLjIgNjQ5LjcgTDIyMS43IDY1NS44IEwyMjEuMiA2NjIuMCBMMjIwLjcgNjY4LjEgTDIyMC4zIDY3NC4yIEwyMTkuOSA2ODAuMyBMMjE5LjUgNjg2LjMgTDIxOS4xIDY5Mi40IEwyMTguNyA2OTguNCBMMjE4LjQgNzA0LjQgTDIxOC4xIDcxMC40IEwyMTcuNyA3MTYuNCBMMjE3LjUgNzIyLjQgTDIxNy4yIDcyOC4zIEwyMTYuOSA3MzQuMiBMMjE2LjcgNzQwLjEgTDE3Mi40IDc1Ny41IEwxNjguMiA3NTMuMCBMMTYzLjkgNzQ4LjUgTDE1OS43IDc0NC4wIEwxNTUuNSA3MzkuNCBMMTUxLjMgNzM0LjggTDE0Ny4xIDczMC4xIEwxNDIuOSA3MjUuMyBMMTM4LjcgNzIwLjUgTDEzNC41IDcxNS43IEwxMzAuNCA3MTAuOCBMMTI2LjIgNzA1LjggTDEyMi4xIDcwMC44IEwxMTcuOSA2OTUuOCBMMTEzLjggNjkwLjcgTDEwOS43IDY4NS42IEwxMDUuNiA2ODAuNCBMMTAxLjUgNjc1LjIgTDk3LjQgNjcwLjAgTDk1LjYgNjY0LjAgTDkzLjggNjU4LjAgTDkyLjAgNjUyLjAgTDkwLjIgNjQ1LjkgTDg4LjQgNjM5LjkgTDg2LjcgNjMzLjggTDg1LjAgNjI3LjcgTDgzLjIgNjIxLjUgTDgxLjUgNjE1LjQgTDc5LjggNjA5LjIgTDc4LjEgNjAzLjAgTDc2LjUgNTk2LjggTDc0LjggNTkwLjUgTDczLjIgNTg0LjMgTDcxLjUgNTc4LjAgTDY5LjkgNTcxLjcgTDY4LjMgNTY1LjQgTDY2LjcgNTU5LjAgTDY1LjEgNTUyLjcgTDYzLjUgNTQ2LjMgTDYyLjAgNTM5LjkgTDYwLjQgNTMzLjUgTDU4LjkgNTI3LjAgTDU3LjQgNTIwLjYgTDU1LjkgNTE0LjEgTDU0LjQgNTA3LjcgTDUyLjkgNTAxLjIgTDUxLjQgNDk0LjcgTDQ5LjkgNDg4LjEgTDQ4LjUgNDgxLjYgTDQ3LjAgNDc1LjEgTDQ1LjYgNDY4LjUgTDQ0LjEgNDYxLjkgTDQyLjcgNDU1LjMgTDQxLjMgNDQ4LjcgTDM5LjkgNDQyLjEgTDM4LjUgNDM1LjUgTDM3LjEgNDI4LjkgTDM1LjggNDIyLjIgTDM0LjQgNDE1LjYgTDMzLjEgNDA4LjkgTDMxLjcgNDAyLjIgTDMwLjQgMzk1LjUgTDI5LjAgMzg4LjkgTDI3LjcgMzgyLjIgTDI2LjQgMzc1LjQgTDI1LjEgMzY4LjcgTDIzLjggMzYyLjAgTDIyLjUgMzU1LjMgTDIxLjMgMzQ4LjUgTDIwLjAgMzQxLjggTDE4LjcgMzM1LjEgTDE3LjUgMzI4LjMgTDE2LjIgMzIxLjYgTDE1LjAgMzE0LjggTDEzLjggMzA4LjAgTDEyLjYgMzAxLjMgTDExLjMgMjk0LjUgTDEwLjEgMjg3LjcgTDkuMCAyODAuOSBMOC4zIDI3NC4xIEw3LjkgMjY3LjIgTDguMSAyNjAuMiBMOC43IDI1My4xIEw5LjggMjQ1LjkgTDExLjUgMjM4LjYgTDEzLjkgMjMxLjMgTDE3LjEgMjIzLjggTDIxLjMgMjE2LjEgTDI3LjIgMjA4LjIgTDM1LjggMTk5LjggTDYwLjIgMTg4LjggWiIvPjxwYXRoIGQ9Ik0xODcuOCA3NDguOCBMMTc0LjUgNzM5LjIgTDE3MC40IDczMi4xIEwxNjguMiA3MjUuNSBMMTY2LjkgNzE5LjEgTDE2Ni4zIDcxMi45IEwxNjYuMyA3MDYuOCBMMTY2LjggNzAwLjkgTDE2Ny43IDY5NS4wIEwxNjkuMSA2ODkuMyBMMTcwLjYgNjgzLjYgTDE3Mi4yIDY3Ny45IEwxNzMuNyA2NzIuMiBMMTc1LjMgNjY2LjUgTDE3Ni45IDY2MC44IEwxNzguNCA2NTUuMSBMMTgwLjAgNjQ5LjQgTDE4MS42IDY0My43IEwxODMuMiA2MzguMCBMMTg0LjggNjMyLjMgTDE4Ni40IDYyNi42IEwxODguMCA2MjAuOSBMMTg5LjYgNjE1LjIgTDE5MS4zIDYwOS41IEwxOTIuOSA2MDMuOCBMMTk0LjUgNTk4LjEgTDE5Ni4yIDU5Mi40IEwxOTcuOCA1ODYuNyBMMTk5LjUgNTgxLjAgTDIwMS4xIDU3NS4zIEwyMDIuOCA1NjkuNiBMMjA0LjUgNTYzLjkgTDIwNi4yIDU1OC4yIEwyMDcuOCA1NTIuNSBMMjA5LjUgNTQ2LjkgTDIxMS4yIDU0MS4yIEwyMTIuOSA1MzUuNSBMMjE0LjcgNTI5LjkgTDIxNi40IDUyNC4yIEwyMTguMSA1MTguNiBMMjE5LjggNTEzLjAgTDIyMS42IDUwNy4zIEwyMjMuMyA1MDEuNyBMMjI1LjEgNDk2LjEgTDIyNi44IDQ5MC41IEwyMjguNiA0ODUuMCBMMjMwLjQgNDc5LjQgTDIzMi4yIDQ3My44IEwyMzQuMCA0NjguMyBMMjM1LjggNDYyLjcgTDIzNy42IDQ1Ny4yIEwyMzkuNCA0NTEuNyBMMjQxLjIgNDQ2LjIgTDI0My4wIDQ0MC43IEwyNDQuOSA0MzUuMiBMMjQ2LjcgNDI5LjggTDI0OC41IDQyNC4zIEwyNTAuNCA0MTguOSBMMjUyLjMgNDEzLjUgTDI1NC4xIDQwOC4xIEwyNTYuMCA0MDIuNyBMMjU3LjkgMzk3LjMgTDI1OS44IDM5Mi4wIEwyNjEuNyAzODYuNiBMMjYzLjYgMzgxLjMgTDI2NS41IDM3Ni4wIEwyNjcuNSAzNzAuOCBMMjY5LjQgMzY1LjUgTDI3MS4zIDM2MC4zIEwyNzMuMyAzNTUuMSBMMjc1LjMgMzQ5LjkgTDI3Ny4yIDM0NC43IEwyNzkuMiAzMzkuNSBMMjgyLjMgMzM0LjkgTDI4NS41IDMzMC4yIEwyODguNiAzMjUuNiBMMjkxLjggMzIxLjAgTDI5NC45IDMxNi40IEwyOTguMSAzMTEuOSBMMzAxLjMgMzA3LjQgTDMwNC40IDMwMi45IEwzMDcuNiAyOTguNSBMMzEwLjggMjk0LjEgTDMxNC4wIDI4OS43IEwzMTcuMiAyODUuNCBMMzIwLjQgMjgxLjEgTDMyMy42IDI3Ni44IEwzMjYuOCAyNzIuNiBMMzMwLjAgMjY4LjQgTDMzMy4zIDI2NC4zIEwzMzYuNSAyNjAuMiBMMzU3LjMgMjY5LjcgTDM1Ni4zIDI3NC44IEwzNTUuNCAyNzkuOCBMMzU0LjUgMjg0LjkgTDM1My42IDI5MC4wIEwzNTIuNyAyOTUuMSBMMzUxLjggMzAwLjMgTDM1MC45IDMwNS41IEwzNTAuMCAzMTAuNyBMMzQ5LjIgMzE1LjkgTDM0OC4zIDMyMS4xIEwzNDcuNSAzMjYuNCBMMzQ2LjcgMzMxLjYgTDM0NS44IDMzNi45IEwzNDUuMCAzNDIuMiBMMzQ0LjIgMzQ3LjYgTDM0My41IDM1Mi45IEwzNDIuNyAzNTguMyBMMzQxLjkgMzYzLjcgTDM0MC4wIDM2OC43IEwzMzguMSAzNzMuNyBMMzM2LjIgMzc4LjcgTDMzNC4zIDM4My43IEwzMzIuNCAzODguOCBMMzMwLjYgMzkzLjkgTDMyOC43IDM5OS4wIEwzMjYuOCA0MDQuMiBMMzI1LjAgNDA5LjMgTDMyMy4xIDQxNC41IEwzMjEuMyA0MTkuNyBMMzE5LjQgNDI0LjkgTDMxNy42IDQzMC4xIEwzMTUuOCA0MzUuNCBMMzE0LjAgNDQwLjcgTDMxMi4yIDQ0Ni4wIEwzMTAuNCA0NTEuMyBMMzA4LjYgNDU2LjYgTDMwNi44IDQ2Mi4wIEwzMDUuMCA0NjcuMyBMMzAzLjIgNDcyLjcgTDMwMS40IDQ3OC4xIEwyOTkuNyA0ODMuNSBMMjk3LjkgNDg4LjkgTDI5Ni4yIDQ5NC40IEwyOTQuNCA0OTkuOCBMMjkyLjcgNTA1LjMgTDI5MC45IDUxMC44IEwyODkuMiA1MTYuMyBMMjg3LjUgNTIxLjggTDI4NS44IDUyNy4zIEwyODQuMSA1MzIuOCBMMjgyLjQgNTM4LjMgTDI4MC43IDU0My45IEwyNzkuMCA1NDkuNCBMMjc3LjMgNTU1LjAgTDI3NS42IDU2MC42IEwyNzMuOSA1NjYuMSBMMjcyLjMgNTcxLjcgTDI3MC42IDU3Ny4zIEwyNjguOSA1ODIuOSBMMjY3LjMgNTg4LjUgTDI2NS42IDU5NC4xIEwyNjQuMCA1OTkuOCBMMjYyLjQgNjA1LjQgTDI2MC43IDYxMS4wIEwyNTkuMSA2MTYuNiBMMjU3LjUgNjIyLjMgTDI1NS45IDYyNy45IEwyNTQuMyA2MzMuNiBMMjUyLjcgNjM5LjIgTDI1MS4xIDY0NC44IEwyNDkuNSA2NTAuNSBMMjQ3LjkgNjU2LjEgTDI0Ni4zIDY2MS44IEwyNDQuOCA2NjcuNCBMMjQzLjIgNjczLjEgTDI0MS42IDY3OC43IEwyNDAuMSA2ODQuNCBMMjM4LjUgNjkwLjAgTDIzNy4wIDY5NS43IEwyMzUuNCA3MDEuMyBMMjMzLjkgNzA2LjkgTDIzMi4yIDcxMi41IEwyMzAuMCA3MTguMCBMMjI3LjUgNzIzLjMgTDIyNC40IDcyOC41IEwyMjAuOCA3MzMuNiBMMjE2LjUgNzM4LjUgTDIxMS4yIDc0My4wIEwyMDQuMiA3NDcuMiBMMTg3LjggNzQ4LjggWiIvPjxwYXRoIGQ9Ik0zMzMuNCAyNjUuMCBMMzU3LjEgMjY1LjYgTDM2Ny4xIDI2OS4zIEwzNzQuNiAyNzMuNSBMMzgwLjkgMjc4LjEgTDM4Ni4yIDI4Mi44IEwzOTAuOCAyODcuNyBMMzk0LjkgMjkyLjcgTDM5OC41IDI5Ny43IEw0MDEuNyAzMDIuOSBMNDA0LjYgMzA4LjIgTDQwNy4xIDMxMy41IEw0MDkuMyAzMTkuMCBMNDExLjEgMzI0LjQgTDQxMi43IDMzMC4wIEw0MTQuMSAzMzUuNiBMNDE1LjQgMzQxLjIgTDQxNi44IDM0Ni44IEw0MTguMSAzNTIuNCBMNDE5LjUgMzU4LjAgTDQyMC44IDM2My41IEw0MjIuMiAzNjkuMSBMNDIzLjYgMzc0LjcgTDQyNC45IDM4MC4zIEw0MjYuMyAzODUuOCBMNDI3LjcgMzkxLjQgTDQyOS4xIDM5Ni45IEw0MzAuNSA0MDIuNSBMNDMxLjkgNDA4LjAgTDQzMy4zIDQxMy41IEw0MzQuNyA0MTkuMCBMNDM2LjIgNDI0LjYgTDQzNy42IDQzMC4xIEw0MzkuMCA0MzUuNiBMNDQwLjUgNDQxLjAgTDQ0MS45IDQ0Ni41IEw0NDMuNCA0NTIuMCBMNDQ0LjggNDU3LjQgTDQ0Ni4zIDQ2Mi45IEw0NDcuOCA0NjguMyBMNDQ5LjMgNDczLjcgTDQ1MC44IDQ3OS4yIEw0NTIuMyA0ODQuNiBMNDUzLjggNDkwLjAgTDQ1NS4zIDQ5NS4zIEw0NTYuOCA1MDAuNyBMNDU4LjMgNTA2LjEgTDQ1OS44IDUxMS40IEw0NjEuNCA1MTYuNyBMNDYyLjkgNTIyLjEgTDQ2NC41IDUyNy40IEw0NjYuMCA1MzIuNiBMNDY3LjYgNTM3LjkgTDQ2OS4yIDU0My4yIEw0NzAuNyA1NDguNCBMNDcyLjMgNTUzLjcgTDQ3My45IDU1OC45IEw0NzUuNSA1NjQuMSBMNDc3LjEgNTY5LjMgTDQ3OC43IDU3NC40IEw0ODAuNCA1NzkuNiBMNDgyLjAgNTg0LjcgTDQ4My42IDU4OS44IEw0ODUuMyA1OTQuOSBMNDg2LjkgNjAwLjAgTDQ4OC42IDYwNS4xIEw0OTAuMiA2MTAuMSBMNDkxLjkgNjE1LjEgTDQ5My42IDYyMC4xIEw0OTUuMyA2MjUuMSBMNDk3LjAgNjMwLjEgTDQ5OC43IDYzNS4wIEw1MDAuNCA2NDAuMCBMNTAwLjAgNjQ1LjYgTDQ5OS42IDY1MS4zIEw0OTkuMyA2NTYuOSBMNDk4LjkgNjYyLjUgTDQ5OC42IDY2OC4xIEw0OTguMyA2NzMuNyBMNDk4LjAgNjc5LjMgTDQ5Ny43IDY4NC45IEw0OTcuNCA2OTAuNSBMNDk3LjEgNjk2LjAgTDQ5Ni44IDcwMS42IEw0OTYuNiA3MDcuMSBMNDk2LjQgNzEyLjcgTDQ5Ni4yIDcxOC4yIEw0OTYuMCA3MjMuNyBMNDk1LjggNzI5LjIgTDQ5NS42IDczNC43IEw0OTUuNCA3NDAuMiBMNDUzLjcgNzU3LjQgTDQ0OS43IDc1My41IEw0NDUuNiA3NDkuNSBMNDQxLjYgNzQ1LjUgTDQzNy42IDc0MS40IEw0MzMuNiA3MzcuMyBMNDI5LjYgNzMzLjIgTDQyNS42IDcyOS4xIEw0MjEuNiA3MjQuOSBMNDE3LjYgNzIwLjYgTDQxMy42IDcxNi40IEw0MDkuNiA3MTIuMSBMNDA1LjcgNzA3LjggTDQwMS43IDcwMy41IEwzOTcuNyA2OTkuMSBMMzkzLjggNjk0LjcgTDM4OS44IDY5MC4yIEwzODUuOSA2ODUuOCBMMzgyLjAgNjgxLjMgTDM4MC4xIDY3Ni4wIEwzNzguMyA2NzAuOCBMMzc2LjUgNjY1LjUgTDM3NC43IDY2MC4yIEwzNzIuOSA2NTQuOSBMMzcxLjIgNjQ5LjYgTDM2OS40IDY0NC4zIEwzNjcuNyA2MzguOSBMMzY1LjkgNjMzLjUgTDM2NC4yIDYyOC4yIEwzNjIuNSA2MjIuOCBMMzYwLjcgNjE3LjQgTDM1OS4wIDYxMi4wIEwzNTcuMyA2MDYuNSBMMzU1LjcgNjAxLjEgTDM1NC4wIDU5NS42IEwzNTIuMyA1OTAuMiBMMzUwLjcgNTg0LjcgTDM0OS4wIDU3OS4yIEwzNDcuNCA1NzMuNyBMMzQ1LjcgNTY4LjIgTDM0NC4xIDU2Mi43IEwzNDIuNSA1NTcuMSBMMzQwLjkgNTUxLjYgTDMzOS4zIDU0Ni4wIEwzMzcuNyA1NDAuNSBMMzM2LjEgNTM0LjkgTDMzNC41IDUyOS4zIEwzMzMuMCA1MjMuNyBMMzMxLjQgNTE4LjEgTDMyOS44IDUxMi41IEwzMjguMyA1MDYuOSBMMzI2LjggNTAxLjMgTDMyNS4yIDQ5NS42IEwzMjMuNyA0OTAuMCBMMzIyLjIgNDg0LjQgTDMyMC43IDQ3OC43IEwzMTkuMiA0NzMuMSBMMzE3LjcgNDY3LjQgTDMxNi4yIDQ2MS43IEwzMTQuNyA0NTYuMCBMMzEzLjMgNDUwLjQgTDMxMS44IDQ0NC43IEwzMTAuNCA0MzkuMCBMMzA4LjkgNDMzLjMgTDMwNy41IDQyNy42IEwzMDYuMCA0MjEuOSBMMzA0LjYgNDE2LjIgTDMwMy4yIDQxMC41IEwzMDEuOCA0MDQuNyBMMzAwLjQgMzk5LjAgTDI5OS4wIDM5My4zIEwyOTcuNiAzODcuNiBMMjk2LjIgMzgxLjggTDI5NC44IDM3Ni4xIEwyOTMuNCAzNzAuNCBMMjkyLjEgMzY0LjYgTDI5MC43IDM1OC45IEwyODkuNiAzNTMuMSBMMjg4LjggMzQ3LjIgTDI4OC40IDM0MS4zIEwyODguMiAzMzUuMyBMMjg4LjQgMzI5LjIgTDI4OS4wIDMyMy4wIEwyOTAuMCAzMTYuOCBMMjkxLjUgMzEwLjQgTDI5My41IDMwMy45IEwyOTYuMyAyOTcuMyBMMjk5LjkgMjkwLjQgTDMwNC45IDI4My4zIEwzMTIuMyAyNzUuNyBMMzMzLjQgMjY1LjAgWiIvPjxwYXRoIGQ9Ik00NjcuOCA3NDguOCBMNDQ4LjYgNzM1LjMgTDQ0Mi44IDcyNS4yIEw0MzkuNSA3MTUuOSBMNDM3LjYgNzA2LjkgTDQzNi44IDY5OC4xIEw0MzYuNyA2ODkuNSBMNDM3LjQgNjgxLjEgTDQzOC43IDY3Mi44IEw0NDAuNiA2NjQuNiBMNDQyLjkgNjU2LjYgTDQ0NS4xIDY0OC41IEw0NDcuMyA2NDAuMyBMNDQ5LjYgNjMyLjIgTDQ1MS44IDYyNC4wIEw0NTQuMSA2MTUuOSBMNDU2LjQgNjA3LjcgTDQ1OC43IDU5OS41IEw0NjEuMSA1OTEuMyBMNDYzLjQgNTgzLjAgTDQ2NS44IDU3NC44IEw0NjguMiA1NjYuNiBMNDcwLjYgNTU4LjMgTDQ3My4wIDU1MC4wIEw0NzUuNCA1NDEuNyBMNDc3LjkgNTMzLjUgTDQ4MC4zIDUyNS4yIEw0ODIuOCA1MTYuOSBMNDg1LjMgNTA4LjYgTDQ4Ny45IDUwMC4zIEw0OTAuNCA0OTIuMCBMNDkzLjAgNDgzLjYgTDQ5NS42IDQ3NS4zIEw0OTguMiA0NjcuMCBMNTAwLjggNDU4LjcgTDUwMy41IDQ1MC40IEw1MDYuMiA0NDIuMSBMNTA4LjkgNDMzLjcgTDUxMS42IDQyNS40IEw1MTQuMyA0MTcuMSBMNTE3LjEgNDA4LjggTDUxOS45IDQwMC41IEw1MjIuNyAzOTIuMiBMNTI1LjYgMzg0LjAgTDUyOC40IDM3NS43IEw1MzEuMyAzNjcuNCBMNjIyLjIgMzk5LjQgTDYxOS40IDQwNy40IEw2MTYuNiA0MTUuNCBMNjEzLjkgNDIzLjQgTDYxMS4xIDQzMS40IEw2MDguNCA0MzkuNCBMNjA1LjcgNDQ3LjUgTDYwMy4xIDQ1NS42IEw2MDAuNCA0NjMuNiBMNTk3LjggNDcxLjcgTDU5NS4yIDQ3OS44IEw1OTIuNiA0ODcuOSBMNTkwLjEgNDk2LjAgTDU4Ny41IDUwNC4xIEw1ODUuMCA1MTIuMiBMNTgyLjUgNTIwLjMgTDU4MC4wIDUyOC40IEw1NzcuNSA1MzYuNSBMNTc1LjEgNTQ0LjcgTDU3Mi42IDU1Mi44IEw1NzAuMiA1NjAuOSBMNTY3LjggNTY5LjAgTDU2NS40IDU3Ny4xIEw1NjMuMCA1ODUuMiBMNTYwLjcgNTkzLjMgTDU1OC4zIDYwMS41IEw1NTYuMCA2MDkuNSBMNTUzLjcgNjE3LjYgTDU1MS40IDYyNS43IEw1NDkuMSA2MzMuOCBMNTQ2LjkgNjQxLjkgTDU0NC42IDY0OS45IEw1NDIuNCA2NTguMCBMNTQwLjIgNjY2LjAgTDUzNy45IDY3NC4wIEw1MzUuNyA2ODIuMCBMNTMzLjYgNjkwLjAgTDUzMS4xIDY5Ny45IEw1MjguMSA3MDUuNiBMNTI0LjQgNzEzLjIgTDUyMC4xIDcyMC41IEw1MTUuMCA3MjcuNiBMNTA4LjggNzM0LjUgTDUwMS4zIDc0MC45IEw0OTEuMyA3NDYuNiBMNDY3LjggNzQ4LjggWiIvPjxwYXRoIGQ9Ik01MTUuNiA0MTIuMCBMNTIxLjEgMzk4LjIgTDUyNi41IDM4NC4zIEw1MzEuMyAzNzAuMiBMNTM2LjMgMzU2LjIgTDU0MS41IDM0Mi4zIEw1NDYuOSAzMjguNCBMNTUyLjUgMzE0LjYgTDU1OC4yIDMwMS4wIEw1NjQuMiAyODcuNCBMNTcxLjIgMjc0LjIgTDU3OS4zIDI2MS42IEw1ODcuNSAyNDkuMCBMNTk1LjcgMjM2LjYgTDYwMy45IDIyNC4yIEw2MTIuMiAyMTEuOSBMNjIwLjUgMTk5LjcgTDYyOC44IDE4Ny42IEw2MzcuMiAxNzUuNiBMNjQ1LjYgMTYzLjcgTDY1NC4wIDE1MS45IEw2NjIuMyAxNDAuMiBMNjcwLjcgMTI4LjYgTDY3OS4wIDExNy4xIEw2ODcuMyAxMDUuNyBMNjg3LjMgMTA1LjcgTDY3OS40IDExNy4zIEw2NzEuNSAxMjkuMSBMNjYzLjYgMTQwLjkgTDY1NS44IDE1Mi44IEw2NDguMCAxNjQuOSBMNjQwLjIgMTc3LjEgTDYzMi41IDE4OS4zIEw2MjQuOSAyMDEuNyBMNjE3LjMgMjE0LjEgTDYwOS43IDIyNi43IEw2MDIuMyAyMzkuMyBMNTk0LjggMjUyLjEgTDU4Ny40IDI2NC45IEw1ODAuMSAyNzcuOCBMNTczLjYgMjkxLjAgTDU2Ny45IDMwNC43IEw1NjIuNCAzMTguNCBMNTU3LjEgMzMyLjIgTDU1MS45IDM0Ni4wIEw1NDYuOCAzNjAuMCBMNTQyLjAgMzc0LjAgTDUzNy4yIDM4OC4wIEw1MzMuMiA0MDIuMyBMNTI5LjQgNDE2LjYgWiIvPjxwYXRoIGQ9Ik01MjguNyA0MTYuNCBMNTM0LjAgNDAzLjAgTDUzOS4xIDM4OS42IEw1NDMuOCAzNzYuMCBMNTQ4LjUgMzYyLjUgTDU1My40IDM0OS4wIEw1NTguMyAzMzUuNSBMNTYzLjQgMzIyLjEgTDU2OC42IDMwOC44IEw1NzMuOSAyOTUuNSBMNTc5LjYgMjgyLjQgTDU4Ni40IDI2OS44IEw1OTMuNCAyNTcuMyBMNjAwLjQgMjQ0LjkgTDYwNy41IDIzMi41IEw2MTQuNiAyMjAuMyBMNjIxLjkgMjA4LjEgTDYyOS4xIDE5Ni4wIEw2MzYuNSAxODQuMCBMNjQzLjkgMTcyLjEgTDY1MS4zIDE2MC40IEw2NTguOCAxNDguNyBMNjY2LjMgMTM3LjEgTDY3My45IDEyNS42IEw2ODEuNSAxMTQuMyBMNjgxLjUgMTE0LjMgTDY3NC4zIDEyNS44IEw2NjcuMiAxMzcuNSBMNjYwLjIgMTQ5LjQgTDY1My4zIDE2MS4zIEw2NDYuNCAxNzMuNCBMNjM5LjcgMTg1LjUgTDYzMy4wIDE5Ny44IEw2MjYuNCAyMTAuMSBMNjE5LjkgMjIyLjYgTDYxMy41IDIzNS4xIEw2MDcuMSAyNDcuNyBMNjAwLjkgMjYwLjQgTDU5NC43IDI3My4xIEw1ODguNiAyODYuMCBMNTgzLjMgMjk5LjIgTDU3OC4zIDMxMi41IEw1NzMuNCAzMjUuOSBMNTY4LjUgMzM5LjMgTDU2My44IDM1Mi43IEw1NTkuMSAzNjYuMiBMNTU0LjQgMzc5LjggTDU0OS45IDM5My4zIEw1NDYuMSA0MDcuMSBMNTQyLjUgNDIxLjAgWiIvPjxwYXRoIGQ9Ik01NDEuNyA0MjAuNyBMNTQ3LjAgNDA3LjQgTDU1Mi4yIDM5NC4wIEw1NTcuMSAzODAuNiBMNTYxLjggMzY3LjEgTDU2Ni42IDM1My42IEw1NzEuNSAzNDAuMiBMNTc2LjYgMzI2LjggTDU4MS43IDMxMy41IEw1ODcuMSAzMDAuMyBMNTkyLjYgMjg3LjIgTDU5OS4wIDI3NC41IEw2MDUuNCAyNjEuOCBMNjExLjkgMjQ5LjIgTDYxOC40IDIzNi43IEw2MjUuMSAyMjQuMiBMNjMxLjggMjExLjkgTDYzOC41IDE5OS42IEw2NDUuNCAxODcuNSBMNjUyLjIgMTc1LjQgTDY1OS4xIDE2My40IEw2NjYuMSAxNTEuNSBMNjczLjEgMTM5LjcgTDY4MC4yIDEyOC4wIEw2ODcuMiAxMTYuNCBMNjg3LjIgMTE2LjQgTDY4MC41IDEyOC4yIEw2NzMuOSAxNDAuMSBMNjY3LjMgMTUyLjEgTDY2MC45IDE2NC4zIEw2NTQuNSAxNzYuNSBMNjQ4LjIgMTg4LjggTDY0Mi4wIDIwMS4yIEw2MzUuOSAyMTMuNyBMNjI5LjggMjI2LjMgTDYyMy45IDIzOS4wIEw2MTguMCAyNTEuOCBMNjEyLjIgMjY0LjYgTDYwNi40IDI3Ny41IEw2MDAuOCAyOTAuNCBMNTk1LjYgMzAzLjYgTDU5MC41IDMxNi45IEw1ODUuNiAzMzAuMiBMNTgwLjggMzQzLjYgTDU3Ni4wIDM1Ny4wIEw1NzEuNCAzNzAuNSBMNTY2LjggMzg0LjAgTDU2Mi43IDM5Ny42IEw1NTkuMCA0MTEuNSBMNTU1LjUgNDI1LjQgWiIvPjxwYXRoIGQ9Ik01NTQuOCA0MjUuMSBMNTU4LjggNDE1LjggTDU2Mi4wIDQwNi4yIEw1NjUuMyAzOTYuNiBMNTY4LjUgMzg3LjAgTDU3MS44IDM3Ny40IEw1NzUuMSAzNjcuOSBMNTc4LjQgMzU4LjMgTDU4MS44IDM0OC44IEw1ODUuMSAzMzkuMyBMNTg4LjUgMzI5LjggTDU5MS45IDMyMC4zIEw1OTUuNCAzMTAuOCBMNTk4LjkgMzAxLjQgTDYwMi42IDI5Mi4xIEw2MDYuNCAyODIuOCBMNjEwLjMgMjczLjUgTDYxNC4yIDI2NC4zIEw2MTguMiAyNTUuMiBMNjIyLjIgMjQ2LjEgTDYyNi4yIDIzNy4wIEw2MzAuNCAyMjcuOSBMNjM0LjUgMjE4LjkgTDYzOC43IDIxMC4wIEw2NDMuMCAyMDEuMCBMNjQzLjAgMjAxLjAgTDYzOS41IDIxMC4zIEw2MzYuMCAyMTkuNiBMNjMyLjcgMjI4LjkgTDYyOS40IDIzOC4zIEw2MjYuMSAyNDcuNyBMNjIzLjAgMjU3LjIgTDYxOS44IDI2Ni43IEw2MTYuOCAyNzYuMiBMNjEzLjcgMjg1LjcgTDYxMC43IDI5NS4zIEw2MDcuNyAzMDQuOCBMNjA0LjYgMzE0LjQgTDYwMS42IDMyNC4wIEw1OTguNyAzMzMuNiBMNTk1LjcgMzQzLjIgTDU5Mi42IDM1Mi44IEw1ODkuNiAzNjIuNCBMNTg2LjUgMzcxLjkgTDU4My40IDM4MS41IEw1ODAuMyAzOTEuMSBMNTc3LjEgNDAwLjcgTDU3NC4wIDQxMC4zIEw1NzAuOSA0MTkuOCBMNTY4LjYgNDI5LjcgWiIvPjxwYXRoIGQ9Ik01NjcuOCA0MjkuNSBMNTczLjggNDEzLjkgTDU3OS44IDM5OC40IEw1ODUuNiAzODIuOSBMNTkxLjEgMzY3LjIgTDU5Ni44IDM1MS42IEw2MDIuNiAzMzYuMSBMNjA4LjUgMzIwLjcgTDYxNC43IDMwNS40IEw2MjAuNyAyOTAuMSBMNjI2LjggMjc0LjkgTDYzMy4wIDI1OS44IEw2MzkuMyAyNDQuNyBMNjQ1LjcgMjI5LjggTDY1Mi4yIDIxNS4wIEw2NTguOCAyMDAuMyBMNjY1LjUgMTg1LjYgTDY3Mi4zIDE3MS4xIEw2NzkuMSAxNTYuNyBMNjg2LjAgMTQyLjQgTDY5My4wIDEyOC4yIEw3MDAuMSAxMTQuMSBMNzA3LjIgMTAwLjIgTDcxNC40IDg2LjMgTDcyMS42IDcyLjYgTDcyMS42IDcyLjYgTDcxNC42IDg2LjQgTDcwNy43IDEwMC40IEw3MDAuOSAxMTQuNiBMNjk0LjIgMTI4LjkgTDY4Ny43IDE0My4zIEw2ODEuMyAxNTcuOCBMNjc1LjAgMTcyLjQgTDY2OC44IDE4Ny4yIEw2NjIuNyAyMDIuMSBMNjU2LjggMjE3LjAgTDY1MC45IDIzMi4xIEw2NDUuMiAyNDcuMyBMNjM5LjUgMjYyLjUgTDYzNC4wIDI3Ny45IEw2MjguNyAyOTMuMyBMNjIzLjEgMzA4LjcgTDYxNy4yIDMyNC4xIEw2MTEuNSAzMzkuNSBMNjA1LjggMzU1LjAgTDYwMC4zIDM3MC41IEw1OTUuMCAzODYuMSBMNTkwLjIgNDAyLjAgTDU4NS45IDQxOC4wIEw1ODEuNiA0MzQuMSBaIi8+PHBhdGggZD0iTTU4MC45IDQzMy44IEw1ODcuMiA0MTcuMSBMNTkzLjYgNDAwLjUgTDYwMC4wIDM4My44IEw2MDYuMCAzNjcuMSBMNjEyLjIgMzUwLjUgTDYxOC42IDMzNC4wIEw2MjUuMyAzMTcuNiBMNjMxLjkgMzAxLjMgTDYzNy45IDI4NC43IEw2NDQuMCAyNjguMyBMNjUwLjMgMjUyLjAgTDY1Ni43IDIzNS44IEw2NjMuMSAyMTkuNyBMNjY5LjYgMjAzLjcgTDY3Ni4yIDE4Ny44IEw2ODIuOSAxNzIuMCBMNjg5LjYgMTU2LjMgTDY5Ni40IDE0MC43IEw3MDMuMiAxMjUuMSBMNzEwLjEgMTA5LjcgTDcxNy4wIDk0LjQgTDcyMy45IDc5LjEgTDczMC45IDYzLjkgTDczNy44IDQ4LjcgTDczNy44IDQ4LjcgTDczMS4wIDY0LjAgTDcyNC4zIDc5LjMgTDcxNy42IDk0LjcgTDcxMS4xIDExMC4zIEw3MDQuNiAxMjUuOSBMNjk4LjIgMTQxLjYgTDY5Mi4wIDE1Ny41IEw2ODUuOCAxNzMuNCBMNjc5LjcgMTg5LjQgTDY3My43IDIwNS42IEw2NjcuOSAyMjEuOCBMNjYyLjEgMjM4LjIgTDY1Ni40IDI1NC42IEw2NTAuOCAyNzEuMSBMNjQ1LjQgMjg3LjggTDY0MC4xIDMwNC41IEw2MzMuOCAzMjAuOSBMNjI3LjMgMzM3LjMgTDYyMS4xIDM1My44IEw2MTUuMCAzNzAuNCBMNjA5LjIgMzg3LjEgTDYwNC4xIDQwNC4xIEw1OTkuMyA0MjEuMiBMNTk0LjcgNDM4LjQgWiIvPjxwYXRoIGQ9Ik01OTMuOSA0MzguMiBMNTk5LjUgNDI0LjMgTDYwNC41IDQxMC4yIEw2MDkuMyAzOTYuMSBMNjE0LjEgMzgyLjAgTDYxOS4wIDM2OC4wIEw2MjQuMCAzNTMuOSBMNjI4LjkgMzQwLjAgTDYzMy45IDMyNi4wIEw2MzguOSAzMTIuMSBMNjQyLjkgMjk3LjkgTDY0Ni42IDI4My41IEw2NTAuNSAyNjkuMiBMNjU0LjYgMjU1LjEgTDY1OC44IDI0MS4wIEw2NjMuMSAyMjYuOSBMNjY3LjUgMjEzLjAgTDY3Mi4xIDE5OS4xIEw2NzYuNyAxODUuMyBMNjgxLjYgMTcxLjYgTDY4Ni41IDE1OC4xIEw2OTEuNiAxNDQuNiBMNjk2LjkgMTMxLjIgTDcwMi4zIDExOC4wIEw3MDcuOSAxMDQuOSBMNzA3LjkgMTA0LjkgTDcwMi43IDExOC4yIEw2OTcuNyAxMzEuNiBMNjkyLjkgMTQ1LjMgTDY4OC40IDE1OS4wIEw2ODQuMCAxNzIuOCBMNjc5LjggMTg2LjggTDY3NS45IDIwMC45IEw2NzIuMCAyMTUuMCBMNjY4LjQgMjI5LjMgTDY2NC44IDI0My42IEw2NjEuNSAyNTguMCBMNjU4LjIgMjcyLjQgTDY1NS4xIDI4Ny4wIEw2NTIuMiAzMDEuNiBMNjQ4LjkgMzE2LjEgTDY0NC4yIDMzMC4wIEw2MzkuNSAzNDQuMCBMNjM0LjggMzU4LjAgTDYzMC4xIDM3Mi4wIEw2MjUuNCAzODYuMCBMNjIwLjYgNDAwLjEgTDYxNS45IDQxNC4yIEw2MTEuNSA0MjguNCBMNjA3LjcgNDQyLjggWiIvPjxwYXRoIGQ9Ik0gNzMzLjAgNzYwLjAgTCA3MzMuMCA1MC4wIEwgMTAyNS42IDUwLjAgUSAxMTYwLjYgNTAuMCAxMjM0LjAgOTYuNSBRIDEzMDcuMyAxNDIuOSAxMzA3LjMgMjQzLjcgUSAxMzA3LjMgMjg3LjAgMTI5MC41IDMxOC40IFEgMTI3My42IDM0OS44IDEyNDAuMiAzNjguNCBRIDEyMDYuOCAzODcuMCAxMTU4LjUgMzkyLjQgTCAxMTU4LjQgMzkzLjYgUSAxMjQ3LjYgNDAxLjcgMTI5Mi41IDQ0NS43IFEgMTMzNy4zIDQ4OS43IDEzMzcuMyA1NjQuMSBRIDEzMzcuMyA2NjMuOCAxMjY0LjQgNzExLjkgUSAxMTkxLjUgNzYwLjAgMTA1Ni42IDc2MC4wIFogTSA5MTguMCA2MTYuNiBMIDEwNDQuOSA2MTYuNiBRIDEwOTAuOSA2MTYuNiAxMTIxLjQgNTk3LjggUSAxMTUxLjkgNTc5LjEgMTE1MS45IDUzOS4zIFEgMTE1MS45IDQ5OS41IDExMjEuOCA0ODAuMiBRIDEwOTEuOCA0NjAuOCAxMDQ0LjkgNDYwLjggTCA5MTguMCA0NjAuOCBaIE0gOTE4LjAgMzM3LjIgTCAxMDE4LjQgMzM3LjIgUSAxMDY0LjAgMzM3LjIgMTA5Mi45IDMxOS40IFEgMTEyMS45IDMwMS42IDExMjEuOSAyNjUuNyBRIDExMjEuOSAyMjcuNyAxMDkzLjUgMjEwLjYgUSAxMDY1LjIgMTkzLjQgMTAxOC40IDE5My40IEwgOTE4LjAgMTkzLjQgWiIvPjwvZz48L3N2Zz4K';
4
+ //# sourceMappingURL=brand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand.js","sourceRoot":"","sources":["../../../../../../shell/src/frame/brand.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,kCAAkC;AAElC,MAAM,CAAC,MAAM,OAAO,GAAG,gnkBAAgnkB,CAAC","sourcesContent":["// The wayBetter mark (the \"wB\" brush lettering) on the address bar's brand button, as a data URI so\n// the frame ships no asset files.\n\nexport const WB_MARK = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjI4IDM2IDEzMjQgNzQwIj48dGl0bGU+d2F5QmV0dGVyPC90aXRsZT48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9IndicyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI2MCIgeTE9Ijc0MCIgeDI9IjEzMzAiIHkyPSI5MCI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNGY2YmZmIi8+PHN0b3Agb2Zmc2V0PSIwLjU1IiBzdG9wLWNvbG9yPSIjMjJkM2VlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYTg1NWY3Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGcgZmlsbD0idXJsKCN3YnMpIj48cGF0aCBkPSJNNjAuMiAxODguOCBMODYuNyAxOTEuMyBMOTcuNiAxOTYuMyBMMTA1LjcgMjAxLjggTDExMi4zIDIwNy42IEwxMTcuOCAyMTMuNiBMMTIyLjUgMjE5LjYgTDEyNi41IDIyNS44IEwxMjkuOSAyMzIuMSBMMTMyLjggMjM4LjQgTDEzNS4zIDI0NC45IEwxMzcuNCAyNTEuNCBMMTM5LjAgMjU3LjkgTDE0MC4yIDI2NC42IEwxNDEuNCAyNzEuMiBMMTQyLjYgMjc3LjggTDE0My44IDI4NC41IEwxNDUuMCAyOTEuMSBMMTQ2LjIgMjk3LjcgTDE0Ny40IDMwNC4zIEwxNDguNyAzMTAuOSBMMTQ5LjkgMzE3LjUgTDE1MS4xIDMyNC4wIEwxNTIuNCAzMzAuNiBMMTUzLjYgMzM3LjIgTDE1NC45IDM0My43IEwxNTYuMiAzNTAuMiBMMTU3LjQgMzU2LjggTDE1OC43IDM2My4zIEwxNjAuMCAzNjkuOCBMMTYxLjMgMzc2LjIgTDE2Mi42IDM4Mi43IEwxNjMuOSAzODkuMiBMMTY1LjIgMzk1LjYgTDE2Ni41IDQwMi4xIEwxNjcuOSA0MDguNSBMMTY5LjIgNDE0LjkgTDE3MC42IDQyMS4zIEwxNzEuOSA0MjcuNiBMMTczLjMgNDM0LjAgTDE3NC43IDQ0MC4zIEwxNzYuMSA0NDYuNiBMMTc3LjUgNDUyLjkgTDE3OC45IDQ1OS4yIEwxODAuMyA0NjUuNSBMMTgxLjcgNDcxLjcgTDE4My4xIDQ3Ny45IEwxODQuNiA0ODQuMSBMMTg2LjAgNDkwLjMgTDE4Ny41IDQ5Ni41IEwxODguOSA1MDIuNiBMMTkwLjQgNTA4LjcgTDE5MS45IDUxNC44IEwxOTMuNCA1MjAuOSBMMTk0LjkgNTI2LjkgTDE5Ni40IDUzMi45IEwxOTcuOSA1MzguOSBMMTk5LjUgNTQ0LjkgTDIwMS4wIDU1MC45IEwyMDIuNiA1NTYuOCBMMjA0LjEgNTYyLjcgTDIwNS43IDU2OC41IEwyMDcuMyA1NzQuNCBMMjA4LjkgNTgwLjIgTDIxMC41IDU4Ni4wIEwyMTIuMSA1OTEuNyBMMjEzLjggNTk3LjQgTDIxNS40IDYwMy4xIEwyMTcuMCA2MDguOCBMMjE4LjcgNjE0LjQgTDIyMC40IDYyMC4wIEwyMjIuMSA2MjUuNiBMMjIzLjcgNjMxLjEgTDIyMy4yIDYzNy4zIEwyMjIuNyA2NDMuNSBMMjIyLjIgNjQ5LjcgTDIyMS43IDY1NS44IEwyMjEuMiA2NjIuMCBMMjIwLjcgNjY4LjEgTDIyMC4zIDY3NC4yIEwyMTkuOSA2ODAuMyBMMjE5LjUgNjg2LjMgTDIxOS4xIDY5Mi40IEwyMTguNyA2OTguNCBMMjE4LjQgNzA0LjQgTDIxOC4xIDcxMC40IEwyMTcuNyA3MTYuNCBMMjE3LjUgNzIyLjQgTDIxNy4yIDcyOC4zIEwyMTYuOSA3MzQuMiBMMjE2LjcgNzQwLjEgTDE3Mi40IDc1Ny41IEwxNjguMiA3NTMuMCBMMTYzLjkgNzQ4LjUgTDE1OS43IDc0NC4wIEwxNTUuNSA3MzkuNCBMMTUxLjMgNzM0LjggTDE0Ny4xIDczMC4xIEwxNDIuOSA3MjUuMyBMMTM4LjcgNzIwLjUgTDEzNC41IDcxNS43IEwxMzAuNCA3MTAuOCBMMTI2LjIgNzA1LjggTDEyMi4xIDcwMC44IEwxMTcuOSA2OTUuOCBMMTEzLjggNjkwLjcgTDEwOS43IDY4NS42IEwxMDUuNiA2ODAuNCBMMTAxLjUgNjc1LjIgTDk3LjQgNjcwLjAgTDk1LjYgNjY0LjAgTDkzLjggNjU4LjAgTDkyLjAgNjUyLjAgTDkwLjIgNjQ1LjkgTDg4LjQgNjM5LjkgTDg2LjcgNjMzLjggTDg1LjAgNjI3LjcgTDgzLjIgNjIxLjUgTDgxLjUgNjE1LjQgTDc5LjggNjA5LjIgTDc4LjEgNjAzLjAgTDc2LjUgNTk2LjggTDc0LjggNTkwLjUgTDczLjIgNTg0LjMgTDcxLjUgNTc4LjAgTDY5LjkgNTcxLjcgTDY4LjMgNTY1LjQgTDY2LjcgNTU5LjAgTDY1LjEgNTUyLjcgTDYzLjUgNTQ2LjMgTDYyLjAgNTM5LjkgTDYwLjQgNTMzLjUgTDU4LjkgNTI3LjAgTDU3LjQgNTIwLjYgTDU1LjkgNTE0LjEgTDU0LjQgNTA3LjcgTDUyLjkgNTAxLjIgTDUxLjQgNDk0LjcgTDQ5LjkgNDg4LjEgTDQ4LjUgNDgxLjYgTDQ3LjAgNDc1LjEgTDQ1LjYgNDY4LjUgTDQ0LjEgNDYxLjkgTDQyLjcgNDU1LjMgTDQxLjMgNDQ4LjcgTDM5LjkgNDQyLjEgTDM4LjUgNDM1LjUgTDM3LjEgNDI4LjkgTDM1LjggNDIyLjIgTDM0LjQgNDE1LjYgTDMzLjEgNDA4LjkgTDMxLjcgNDAyLjIgTDMwLjQgMzk1LjUgTDI5LjAgMzg4LjkgTDI3LjcgMzgyLjIgTDI2LjQgMzc1LjQgTDI1LjEgMzY4LjcgTDIzLjggMzYyLjAgTDIyLjUgMzU1LjMgTDIxLjMgMzQ4LjUgTDIwLjAgMzQxLjggTDE4LjcgMzM1LjEgTDE3LjUgMzI4LjMgTDE2LjIgMzIxLjYgTDE1LjAgMzE0LjggTDEzLjggMzA4LjAgTDEyLjYgMzAxLjMgTDExLjMgMjk0LjUgTDEwLjEgMjg3LjcgTDkuMCAyODAuOSBMOC4zIDI3NC4xIEw3LjkgMjY3LjIgTDguMSAyNjAuMiBMOC43IDI1My4xIEw5LjggMjQ1LjkgTDExLjUgMjM4LjYgTDEzLjkgMjMxLjMgTDE3LjEgMjIzLjggTDIxLjMgMjE2LjEgTDI3LjIgMjA4LjIgTDM1LjggMTk5LjggTDYwLjIgMTg4LjggWiIvPjxwYXRoIGQ9Ik0xODcuOCA3NDguOCBMMTc0LjUgNzM5LjIgTDE3MC40IDczMi4xIEwxNjguMiA3MjUuNSBMMTY2LjkgNzE5LjEgTDE2Ni4zIDcxMi45IEwxNjYuMyA3MDYuOCBMMTY2LjggNzAwLjkgTDE2Ny43IDY5NS4wIEwxNjkuMSA2ODkuMyBMMTcwLjYgNjgzLjYgTDE3Mi4yIDY3Ny45IEwxNzMuNyA2NzIuMiBMMTc1LjMgNjY2LjUgTDE3Ni45IDY2MC44IEwxNzguNCA2NTUuMSBMMTgwLjAgNjQ5LjQgTDE4MS42IDY0My43IEwxODMuMiA2MzguMCBMMTg0LjggNjMyLjMgTDE4Ni40IDYyNi42IEwxODguMCA2MjAuOSBMMTg5LjYgNjE1LjIgTDE5MS4zIDYwOS41IEwxOTIuOSA2MDMuOCBMMTk0LjUgNTk4LjEgTDE5Ni4yIDU5Mi40IEwxOTcuOCA1ODYuNyBMMTk5LjUgNTgxLjAgTDIwMS4xIDU3NS4zIEwyMDIuOCA1NjkuNiBMMjA0LjUgNTYzLjkgTDIwNi4yIDU1OC4yIEwyMDcuOCA1NTIuNSBMMjA5LjUgNTQ2LjkgTDIxMS4yIDU0MS4yIEwyMTIuOSA1MzUuNSBMMjE0LjcgNTI5LjkgTDIxNi40IDUyNC4yIEwyMTguMSA1MTguNiBMMjE5LjggNTEzLjAgTDIyMS42IDUwNy4zIEwyMjMuMyA1MDEuNyBMMjI1LjEgNDk2LjEgTDIyNi44IDQ5MC41IEwyMjguNiA0ODUuMCBMMjMwLjQgNDc5LjQgTDIzMi4yIDQ3My44IEwyMzQuMCA0NjguMyBMMjM1LjggNDYyLjcgTDIzNy42IDQ1Ny4yIEwyMzkuNCA0NTEuNyBMMjQxLjIgNDQ2LjIgTDI0My4wIDQ0MC43IEwyNDQuOSA0MzUuMiBMMjQ2LjcgNDI5LjggTDI0OC41IDQyNC4zIEwyNTAuNCA0MTguOSBMMjUyLjMgNDEzLjUgTDI1NC4xIDQwOC4xIEwyNTYuMCA0MDIuNyBMMjU3LjkgMzk3LjMgTDI1OS44IDM5Mi4wIEwyNjEuNyAzODYuNiBMMjYzLjYgMzgxLjMgTDI2NS41IDM3Ni4wIEwyNjcuNSAzNzAuOCBMMjY5LjQgMzY1LjUgTDI3MS4zIDM2MC4zIEwyNzMuMyAzNTUuMSBMMjc1LjMgMzQ5LjkgTDI3Ny4yIDM0NC43IEwyNzkuMiAzMzkuNSBMMjgyLjMgMzM0LjkgTDI4NS41IDMzMC4yIEwyODguNiAzMjUuNiBMMjkxLjggMzIxLjAgTDI5NC45IDMxNi40IEwyOTguMSAzMTEuOSBMMzAxLjMgMzA3LjQgTDMwNC40IDMwMi45IEwzMDcuNiAyOTguNSBMMzEwLjggMjk0LjEgTDMxNC4wIDI4OS43IEwzMTcuMiAyODUuNCBMMzIwLjQgMjgxLjEgTDMyMy42IDI3Ni44IEwzMjYuOCAyNzIuNiBMMzMwLjAgMjY4LjQgTDMzMy4zIDI2NC4zIEwzMzYuNSAyNjAuMiBMMzU3LjMgMjY5LjcgTDM1Ni4zIDI3NC44IEwzNTUuNCAyNzkuOCBMMzU0LjUgMjg0LjkgTDM1My42IDI5MC4wIEwzNTIuNyAyOTUuMSBMMzUxLjggMzAwLjMgTDM1MC45IDMwNS41IEwzNTAuMCAzMTAuNyBMMzQ5LjIgMzE1LjkgTDM0OC4zIDMyMS4xIEwzNDcuNSAzMjYuNCBMMzQ2LjcgMzMxLjYgTDM0NS44IDMzNi45IEwzNDUuMCAzNDIuMiBMMzQ0LjIgMzQ3LjYgTDM0My41IDM1Mi45IEwzNDIuNyAzNTguMyBMMzQxLjkgMzYzLjcgTDM0MC4wIDM2OC43IEwzMzguMSAzNzMuNyBMMzM2LjIgMzc4LjcgTDMzNC4zIDM4My43IEwzMzIuNCAzODguOCBMMzMwLjYgMzkzLjkgTDMyOC43IDM5OS4wIEwzMjYuOCA0MDQuMiBMMzI1LjAgNDA5LjMgTDMyMy4xIDQxNC41IEwzMjEuMyA0MTkuNyBMMzE5LjQgNDI0LjkgTDMxNy42IDQzMC4xIEwzMTUuOCA0MzUuNCBMMzE0LjAgNDQwLjcgTDMxMi4yIDQ0Ni4wIEwzMTAuNCA0NTEuMyBMMzA4LjYgNDU2LjYgTDMwNi44IDQ2Mi4wIEwzMDUuMCA0NjcuMyBMMzAzLjIgNDcyLjcgTDMwMS40IDQ3OC4xIEwyOTkuNyA0ODMuNSBMMjk3LjkgNDg4LjkgTDI5Ni4yIDQ5NC40IEwyOTQuNCA0OTkuOCBMMjkyLjcgNTA1LjMgTDI5MC45IDUxMC44IEwyODkuMiA1MTYuMyBMMjg3LjUgNTIxLjggTDI4NS44IDUyNy4zIEwyODQuMSA1MzIuOCBMMjgyLjQgNTM4LjMgTDI4MC43IDU0My45IEwyNzkuMCA1NDkuNCBMMjc3LjMgNTU1LjAgTDI3NS42IDU2MC42IEwyNzMuOSA1NjYuMSBMMjcyLjMgNTcxLjcgTDI3MC42IDU3Ny4zIEwyNjguOSA1ODIuOSBMMjY3LjMgNTg4LjUgTDI2NS42IDU5NC4xIEwyNjQuMCA1OTkuOCBMMjYyLjQgNjA1LjQgTDI2MC43IDYxMS4wIEwyNTkuMSA2MTYuNiBMMjU3LjUgNjIyLjMgTDI1NS45IDYyNy45IEwyNTQuMyA2MzMuNiBMMjUyLjcgNjM5LjIgTDI1MS4xIDY0NC44IEwyNDkuNSA2NTAuNSBMMjQ3LjkgNjU2LjEgTDI0Ni4zIDY2MS44IEwyNDQuOCA2NjcuNCBMMjQzLjIgNjczLjEgTDI0MS42IDY3OC43IEwyNDAuMSA2ODQuNCBMMjM4LjUgNjkwLjAgTDIzNy4wIDY5NS43IEwyMzUuNCA3MDEuMyBMMjMzLjkgNzA2LjkgTDIzMi4yIDcxMi41IEwyMzAuMCA3MTguMCBMMjI3LjUgNzIzLjMgTDIyNC40IDcyOC41IEwyMjAuOCA3MzMuNiBMMjE2LjUgNzM4LjUgTDIxMS4yIDc0My4wIEwyMDQuMiA3NDcuMiBMMTg3LjggNzQ4LjggWiIvPjxwYXRoIGQ9Ik0zMzMuNCAyNjUuMCBMMzU3LjEgMjY1LjYgTDM2Ny4xIDI2OS4zIEwzNzQuNiAyNzMuNSBMMzgwLjkgMjc4LjEgTDM4Ni4yIDI4Mi44IEwzOTAuOCAyODcuNyBMMzk0LjkgMjkyLjcgTDM5OC41IDI5Ny43IEw0MDEuNyAzMDIuOSBMNDA0LjYgMzA4LjIgTDQwNy4xIDMxMy41IEw0MDkuMyAzMTkuMCBMNDExLjEgMzI0LjQgTDQxMi43IDMzMC4wIEw0MTQuMSAzMzUuNiBMNDE1LjQgMzQxLjIgTDQxNi44IDM0Ni44IEw0MTguMSAzNTIuNCBMNDE5LjUgMzU4LjAgTDQyMC44IDM2My41IEw0MjIuMiAzNjkuMSBMNDIzLjYgMzc0LjcgTDQyNC45IDM4MC4zIEw0MjYuMyAzODUuOCBMNDI3LjcgMzkxLjQgTDQyOS4xIDM5Ni45IEw0MzAuNSA0MDIuNSBMNDMxLjkgNDA4LjAgTDQzMy4zIDQxMy41IEw0MzQuNyA0MTkuMCBMNDM2LjIgNDI0LjYgTDQzNy42IDQzMC4xIEw0MzkuMCA0MzUuNiBMNDQwLjUgNDQxLjAgTDQ0MS45IDQ0Ni41IEw0NDMuNCA0NTIuMCBMNDQ0LjggNDU3LjQgTDQ0Ni4zIDQ2Mi45IEw0NDcuOCA0NjguMyBMNDQ5LjMgNDczLjcgTDQ1MC44IDQ3OS4yIEw0NTIuMyA0ODQuNiBMNDUzLjggNDkwLjAgTDQ1NS4zIDQ5NS4zIEw0NTYuOCA1MDAuNyBMNDU4LjMgNTA2LjEgTDQ1OS44IDUxMS40IEw0NjEuNCA1MTYuNyBMNDYyLjkgNTIyLjEgTDQ2NC41IDUyNy40IEw0NjYuMCA1MzIuNiBMNDY3LjYgNTM3LjkgTDQ2OS4yIDU0My4yIEw0NzAuNyA1NDguNCBMNDcyLjMgNTUzLjcgTDQ3My45IDU1OC45IEw0NzUuNSA1NjQuMSBMNDc3LjEgNTY5LjMgTDQ3OC43IDU3NC40IEw0ODAuNCA1NzkuNiBMNDgyLjAgNTg0LjcgTDQ4My42IDU4OS44IEw0ODUuMyA1OTQuOSBMNDg2LjkgNjAwLjAgTDQ4OC42IDYwNS4xIEw0OTAuMiA2MTAuMSBMNDkxLjkgNjE1LjEgTDQ5My42IDYyMC4xIEw0OTUuMyA2MjUuMSBMNDk3LjAgNjMwLjEgTDQ5OC43IDYzNS4wIEw1MDAuNCA2NDAuMCBMNTAwLjAgNjQ1LjYgTDQ5OS42IDY1MS4zIEw0OTkuMyA2NTYuOSBMNDk4LjkgNjYyLjUgTDQ5OC42IDY2OC4xIEw0OTguMyA2NzMuNyBMNDk4LjAgNjc5LjMgTDQ5Ny43IDY4NC45IEw0OTcuNCA2OTAuNSBMNDk3LjEgNjk2LjAgTDQ5Ni44IDcwMS42IEw0OTYuNiA3MDcuMSBMNDk2LjQgNzEyLjcgTDQ5Ni4yIDcxOC4yIEw0OTYuMCA3MjMuNyBMNDk1LjggNzI5LjIgTDQ5NS42IDczNC43IEw0OTUuNCA3NDAuMiBMNDUzLjcgNzU3LjQgTDQ0OS43IDc1My41IEw0NDUuNiA3NDkuNSBMNDQxLjYgNzQ1LjUgTDQzNy42IDc0MS40IEw0MzMuNiA3MzcuMyBMNDI5LjYgNzMzLjIgTDQyNS42IDcyOS4xIEw0MjEuNiA3MjQuOSBMNDE3LjYgNzIwLjYgTDQxMy42IDcxNi40IEw0MDkuNiA3MTIuMSBMNDA1LjcgNzA3LjggTDQwMS43IDcwMy41IEwzOTcuNyA2OTkuMSBMMzkzLjggNjk0LjcgTDM4OS44IDY5MC4yIEwzODUuOSA2ODUuOCBMMzgyLjAgNjgxLjMgTDM4MC4xIDY3Ni4wIEwzNzguMyA2NzAuOCBMMzc2LjUgNjY1LjUgTDM3NC43IDY2MC4yIEwzNzIuOSA2NTQuOSBMMzcxLjIgNjQ5LjYgTDM2OS40IDY0NC4zIEwzNjcuNyA2MzguOSBMMzY1LjkgNjMzLjUgTDM2NC4yIDYyOC4yIEwzNjIuNSA2MjIuOCBMMzYwLjcgNjE3LjQgTDM1OS4wIDYxMi4wIEwzNTcuMyA2MDYuNSBMMzU1LjcgNjAxLjEgTDM1NC4wIDU5NS42IEwzNTIuMyA1OTAuMiBMMzUwLjcgNTg0LjcgTDM0OS4wIDU3OS4yIEwzNDcuNCA1NzMuNyBMMzQ1LjcgNTY4LjIgTDM0NC4xIDU2Mi43IEwzNDIuNSA1NTcuMSBMMzQwLjkgNTUxLjYgTDMzOS4zIDU0Ni4wIEwzMzcuNyA1NDAuNSBMMzM2LjEgNTM0LjkgTDMzNC41IDUyOS4zIEwzMzMuMCA1MjMuNyBMMzMxLjQgNTE4LjEgTDMyOS44IDUxMi41IEwzMjguMyA1MDYuOSBMMzI2LjggNTAxLjMgTDMyNS4yIDQ5NS42IEwzMjMuNyA0OTAuMCBMMzIyLjIgNDg0LjQgTDMyMC43IDQ3OC43IEwzMTkuMiA0NzMuMSBMMzE3LjcgNDY3LjQgTDMxNi4yIDQ2MS43IEwzMTQuNyA0NTYuMCBMMzEzLjMgNDUwLjQgTDMxMS44IDQ0NC43IEwzMTAuNCA0MzkuMCBMMzA4LjkgNDMzLjMgTDMwNy41IDQyNy42IEwzMDYuMCA0MjEuOSBMMzA0LjYgNDE2LjIgTDMwMy4yIDQxMC41IEwzMDEuOCA0MDQuNyBMMzAwLjQgMzk5LjAgTDI5OS4wIDM5My4zIEwyOTcuNiAzODcuNiBMMjk2LjIgMzgxLjggTDI5NC44IDM3Ni4xIEwyOTMuNCAzNzAuNCBMMjkyLjEgMzY0LjYgTDI5MC43IDM1OC45IEwyODkuNiAzNTMuMSBMMjg4LjggMzQ3LjIgTDI4OC40IDM0MS4zIEwyODguMiAzMzUuMyBMMjg4LjQgMzI5LjIgTDI4OS4wIDMyMy4wIEwyOTAuMCAzMTYuOCBMMjkxLjUgMzEwLjQgTDI5My41IDMwMy45IEwyOTYuMyAyOTcuMyBMMjk5LjkgMjkwLjQgTDMwNC45IDI4My4zIEwzMTIuMyAyNzUuNyBMMzMzLjQgMjY1LjAgWiIvPjxwYXRoIGQ9Ik00NjcuOCA3NDguOCBMNDQ4LjYgNzM1LjMgTDQ0Mi44IDcyNS4yIEw0MzkuNSA3MTUuOSBMNDM3LjYgNzA2LjkgTDQzNi44IDY5OC4xIEw0MzYuNyA2ODkuNSBMNDM3LjQgNjgxLjEgTDQzOC43IDY3Mi44IEw0NDAuNiA2NjQuNiBMNDQyLjkgNjU2LjYgTDQ0NS4xIDY0OC41IEw0NDcuMyA2NDAuMyBMNDQ5LjYgNjMyLjIgTDQ1MS44IDYyNC4wIEw0NTQuMSA2MTUuOSBMNDU2LjQgNjA3LjcgTDQ1OC43IDU5OS41IEw0NjEuMSA1OTEuMyBMNDYzLjQgNTgzLjAgTDQ2NS44IDU3NC44IEw0NjguMiA1NjYuNiBMNDcwLjYgNTU4LjMgTDQ3My4wIDU1MC4wIEw0NzUuNCA1NDEuNyBMNDc3LjkgNTMzLjUgTDQ4MC4zIDUyNS4yIEw0ODIuOCA1MTYuOSBMNDg1LjMgNTA4LjYgTDQ4Ny45IDUwMC4zIEw0OTAuNCA0OTIuMCBMNDkzLjAgNDgzLjYgTDQ5NS42IDQ3NS4zIEw0OTguMiA0NjcuMCBMNTAwLjggNDU4LjcgTDUwMy41IDQ1MC40IEw1MDYuMiA0NDIuMSBMNTA4LjkgNDMzLjcgTDUxMS42IDQyNS40IEw1MTQuMyA0MTcuMSBMNTE3LjEgNDA4LjggTDUxOS45IDQwMC41IEw1MjIuNyAzOTIuMiBMNTI1LjYgMzg0LjAgTDUyOC40IDM3NS43IEw1MzEuMyAzNjcuNCBMNjIyLjIgMzk5LjQgTDYxOS40IDQwNy40IEw2MTYuNiA0MTUuNCBMNjEzLjkgNDIzLjQgTDYxMS4xIDQzMS40IEw2MDguNCA0MzkuNCBMNjA1LjcgNDQ3LjUgTDYwMy4xIDQ1NS42IEw2MDAuNCA0NjMuNiBMNTk3LjggNDcxLjcgTDU5NS4yIDQ3OS44IEw1OTIuNiA0ODcuOSBMNTkwLjEgNDk2LjAgTDU4Ny41IDUwNC4xIEw1ODUuMCA1MTIuMiBMNTgyLjUgNTIwLjMgTDU4MC4wIDUyOC40IEw1NzcuNSA1MzYuNSBMNTc1LjEgNTQ0LjcgTDU3Mi42IDU1Mi44IEw1NzAuMiA1NjAuOSBMNTY3LjggNTY5LjAgTDU2NS40IDU3Ny4xIEw1NjMuMCA1ODUuMiBMNTYwLjcgNTkzLjMgTDU1OC4zIDYwMS41IEw1NTYuMCA2MDkuNSBMNTUzLjcgNjE3LjYgTDU1MS40IDYyNS43IEw1NDkuMSA2MzMuOCBMNTQ2LjkgNjQxLjkgTDU0NC42IDY0OS45IEw1NDIuNCA2NTguMCBMNTQwLjIgNjY2LjAgTDUzNy45IDY3NC4wIEw1MzUuNyA2ODIuMCBMNTMzLjYgNjkwLjAgTDUzMS4xIDY5Ny45IEw1MjguMSA3MDUuNiBMNTI0LjQgNzEzLjIgTDUyMC4xIDcyMC41IEw1MTUuMCA3MjcuNiBMNTA4LjggNzM0LjUgTDUwMS4zIDc0MC45IEw0OTEuMyA3NDYuNiBMNDY3LjggNzQ4LjggWiIvPjxwYXRoIGQ9Ik01MTUuNiA0MTIuMCBMNTIxLjEgMzk4LjIgTDUyNi41IDM4NC4zIEw1MzEuMyAzNzAuMiBMNTM2LjMgMzU2LjIgTDU0MS41IDM0Mi4zIEw1NDYuOSAzMjguNCBMNTUyLjUgMzE0LjYgTDU1OC4yIDMwMS4wIEw1NjQuMiAyODcuNCBMNTcxLjIgMjc0LjIgTDU3OS4zIDI2MS42IEw1ODcuNSAyNDkuMCBMNTk1LjcgMjM2LjYgTDYwMy45IDIyNC4yIEw2MTIuMiAyMTEuOSBMNjIwLjUgMTk5LjcgTDYyOC44IDE4Ny42IEw2MzcuMiAxNzUuNiBMNjQ1LjYgMTYzLjcgTDY1NC4wIDE1MS45IEw2NjIuMyAxNDAuMiBMNjcwLjcgMTI4LjYgTDY3OS4wIDExNy4xIEw2ODcuMyAxMDUuNyBMNjg3LjMgMTA1LjcgTDY3OS40IDExNy4zIEw2NzEuNSAxMjkuMSBMNjYzLjYgMTQwLjkgTDY1NS44IDE1Mi44IEw2NDguMCAxNjQuOSBMNjQwLjIgMTc3LjEgTDYzMi41IDE4OS4zIEw2MjQuOSAyMDEuNyBMNjE3LjMgMjE0LjEgTDYwOS43IDIyNi43IEw2MDIuMyAyMzkuMyBMNTk0LjggMjUyLjEgTDU4Ny40IDI2NC45IEw1ODAuMSAyNzcuOCBMNTczLjYgMjkxLjAgTDU2Ny45IDMwNC43IEw1NjIuNCAzMTguNCBMNTU3LjEgMzMyLjIgTDU1MS45IDM0Ni4wIEw1NDYuOCAzNjAuMCBMNTQyLjAgMzc0LjAgTDUzNy4yIDM4OC4wIEw1MzMuMiA0MDIuMyBMNTI5LjQgNDE2LjYgWiIvPjxwYXRoIGQ9Ik01MjguNyA0MTYuNCBMNTM0LjAgNDAzLjAgTDUzOS4xIDM4OS42IEw1NDMuOCAzNzYuMCBMNTQ4LjUgMzYyLjUgTDU1My40IDM0OS4wIEw1NTguMyAzMzUuNSBMNTYzLjQgMzIyLjEgTDU2OC42IDMwOC44IEw1NzMuOSAyOTUuNSBMNTc5LjYgMjgyLjQgTDU4Ni40IDI2OS44IEw1OTMuNCAyNTcuMyBMNjAwLjQgMjQ0LjkgTDYwNy41IDIzMi41IEw2MTQuNiAyMjAuMyBMNjIxLjkgMjA4LjEgTDYyOS4xIDE5Ni4wIEw2MzYuNSAxODQuMCBMNjQzLjkgMTcyLjEgTDY1MS4zIDE2MC40IEw2NTguOCAxNDguNyBMNjY2LjMgMTM3LjEgTDY3My45IDEyNS42IEw2ODEuNSAxMTQuMyBMNjgxLjUgMTE0LjMgTDY3NC4zIDEyNS44IEw2NjcuMiAxMzcuNSBMNjYwLjIgMTQ5LjQgTDY1My4zIDE2MS4zIEw2NDYuNCAxNzMuNCBMNjM5LjcgMTg1LjUgTDYzMy4wIDE5Ny44IEw2MjYuNCAyMTAuMSBMNjE5LjkgMjIyLjYgTDYxMy41IDIzNS4xIEw2MDcuMSAyNDcuNyBMNjAwLjkgMjYwLjQgTDU5NC43IDI3My4xIEw1ODguNiAyODYuMCBMNTgzLjMgMjk5LjIgTDU3OC4zIDMxMi41IEw1NzMuNCAzMjUuOSBMNTY4LjUgMzM5LjMgTDU2My44IDM1Mi43IEw1NTkuMSAzNjYuMiBMNTU0LjQgMzc5LjggTDU0OS45IDM5My4zIEw1NDYuMSA0MDcuMSBMNTQyLjUgNDIxLjAgWiIvPjxwYXRoIGQ9Ik01NDEuNyA0MjAuNyBMNTQ3LjAgNDA3LjQgTDU1Mi4yIDM5NC4wIEw1NTcuMSAzODAuNiBMNTYxLjggMzY3LjEgTDU2Ni42IDM1My42IEw1NzEuNSAzNDAuMiBMNTc2LjYgMzI2LjggTDU4MS43IDMxMy41IEw1ODcuMSAzMDAuMyBMNTkyLjYgMjg3LjIgTDU5OS4wIDI3NC41IEw2MDUuNCAyNjEuOCBMNjExLjkgMjQ5LjIgTDYxOC40IDIzNi43IEw2MjUuMSAyMjQuMiBMNjMxLjggMjExLjkgTDYzOC41IDE5OS42IEw2NDUuNCAxODcuNSBMNjUyLjIgMTc1LjQgTDY1OS4xIDE2My40IEw2NjYuMSAxNTEuNSBMNjczLjEgMTM5LjcgTDY4MC4yIDEyOC4wIEw2ODcuMiAxMTYuNCBMNjg3LjIgMTE2LjQgTDY4MC41IDEyOC4yIEw2NzMuOSAxNDAuMSBMNjY3LjMgMTUyLjEgTDY2MC45IDE2NC4zIEw2NTQuNSAxNzYuNSBMNjQ4LjIgMTg4LjggTDY0Mi4wIDIwMS4yIEw2MzUuOSAyMTMuNyBMNjI5LjggMjI2LjMgTDYyMy45IDIzOS4wIEw2MTguMCAyNTEuOCBMNjEyLjIgMjY0LjYgTDYwNi40IDI3Ny41IEw2MDAuOCAyOTAuNCBMNTk1LjYgMzAzLjYgTDU5MC41IDMxNi45IEw1ODUuNiAzMzAuMiBMNTgwLjggMzQzLjYgTDU3Ni4wIDM1Ny4wIEw1NzEuNCAzNzAuNSBMNTY2LjggMzg0LjAgTDU2Mi43IDM5Ny42IEw1NTkuMCA0MTEuNSBMNTU1LjUgNDI1LjQgWiIvPjxwYXRoIGQ9Ik01NTQuOCA0MjUuMSBMNTU4LjggNDE1LjggTDU2Mi4wIDQwNi4yIEw1NjUuMyAzOTYuNiBMNTY4LjUgMzg3LjAgTDU3MS44IDM3Ny40IEw1NzUuMSAzNjcuOSBMNTc4LjQgMzU4LjMgTDU4MS44IDM0OC44IEw1ODUuMSAzMzkuMyBMNTg4LjUgMzI5LjggTDU5MS45IDMyMC4zIEw1OTUuNCAzMTAuOCBMNTk4LjkgMzAxLjQgTDYwMi42IDI5Mi4xIEw2MDYuNCAyODIuOCBMNjEwLjMgMjczLjUgTDYxNC4yIDI2NC4zIEw2MTguMiAyNTUuMiBMNjIyLjIgMjQ2LjEgTDYyNi4yIDIzNy4wIEw2MzAuNCAyMjcuOSBMNjM0LjUgMjE4LjkgTDYzOC43IDIxMC4wIEw2NDMuMCAyMDEuMCBMNjQzLjAgMjAxLjAgTDYzOS41IDIxMC4zIEw2MzYuMCAyMTkuNiBMNjMyLjcgMjI4LjkgTDYyOS40IDIzOC4zIEw2MjYuMSAyNDcuNyBMNjIzLjAgMjU3LjIgTDYxOS44IDI2Ni43IEw2MTYuOCAyNzYuMiBMNjEzLjcgMjg1LjcgTDYxMC43IDI5NS4zIEw2MDcuNyAzMDQuOCBMNjA0LjYgMzE0LjQgTDYwMS42IDMyNC4wIEw1OTguNyAzMzMuNiBMNTk1LjcgMzQzLjIgTDU5Mi42IDM1Mi44IEw1ODkuNiAzNjIuNCBMNTg2LjUgMzcxLjkgTDU4My40IDM4MS41IEw1ODAuMyAzOTEuMSBMNTc3LjEgNDAwLjcgTDU3NC4wIDQxMC4zIEw1NzAuOSA0MTkuOCBMNTY4LjYgNDI5LjcgWiIvPjxwYXRoIGQ9Ik01NjcuOCA0MjkuNSBMNTczLjggNDEzLjkgTDU3OS44IDM5OC40IEw1ODUuNiAzODIuOSBMNTkxLjEgMzY3LjIgTDU5Ni44IDM1MS42IEw2MDIuNiAzMzYuMSBMNjA4LjUgMzIwLjcgTDYxNC43IDMwNS40IEw2MjAuNyAyOTAuMSBMNjI2LjggMjc0LjkgTDYzMy4wIDI1OS44IEw2MzkuMyAyNDQuNyBMNjQ1LjcgMjI5LjggTDY1Mi4yIDIxNS4wIEw2NTguOCAyMDAuMyBMNjY1LjUgMTg1LjYgTDY3Mi4zIDE3MS4xIEw2NzkuMSAxNTYuNyBMNjg2LjAgMTQyLjQgTDY5My4wIDEyOC4yIEw3MDAuMSAxMTQuMSBMNzA3LjIgMTAwLjIgTDcxNC40IDg2LjMgTDcyMS42IDcyLjYgTDcyMS42IDcyLjYgTDcxNC42IDg2LjQgTDcwNy43IDEwMC40IEw3MDAuOSAxMTQuNiBMNjk0LjIgMTI4LjkgTDY4Ny43IDE0My4zIEw2ODEuMyAxNTcuOCBMNjc1LjAgMTcyLjQgTDY2OC44IDE4Ny4yIEw2NjIuNyAyMDIuMSBMNjU2LjggMjE3LjAgTDY1MC45IDIzMi4xIEw2NDUuMiAyNDcuMyBMNjM5LjUgMjYyLjUgTDYzNC4wIDI3Ny45IEw2MjguNyAyOTMuMyBMNjIzLjEgMzA4LjcgTDYxNy4yIDMyNC4xIEw2MTEuNSAzMzkuNSBMNjA1LjggMzU1LjAgTDYwMC4zIDM3MC41IEw1OTUuMCAzODYuMSBMNTkwLjIgNDAyLjAgTDU4NS45IDQxOC4wIEw1ODEuNiA0MzQuMSBaIi8+PHBhdGggZD0iTTU4MC45IDQzMy44IEw1ODcuMiA0MTcuMSBMNTkzLjYgNDAwLjUgTDYwMC4wIDM4My44IEw2MDYuMCAzNjcuMSBMNjEyLjIgMzUwLjUgTDYxOC42IDMzNC4wIEw2MjUuMyAzMTcuNiBMNjMxLjkgMzAxLjMgTDYzNy45IDI4NC43IEw2NDQuMCAyNjguMyBMNjUwLjMgMjUyLjAgTDY1Ni43IDIzNS44IEw2NjMuMSAyMTkuNyBMNjY5LjYgMjAzLjcgTDY3Ni4yIDE4Ny44IEw2ODIuOSAxNzIuMCBMNjg5LjYgMTU2LjMgTDY5Ni40IDE0MC43IEw3MDMuMiAxMjUuMSBMNzEwLjEgMTA5LjcgTDcxNy4wIDk0LjQgTDcyMy45IDc5LjEgTDczMC45IDYzLjkgTDczNy44IDQ4LjcgTDczNy44IDQ4LjcgTDczMS4wIDY0LjAgTDcyNC4zIDc5LjMgTDcxNy42IDk0LjcgTDcxMS4xIDExMC4zIEw3MDQuNiAxMjUuOSBMNjk4LjIgMTQxLjYgTDY5Mi4wIDE1Ny41IEw2ODUuOCAxNzMuNCBMNjc5LjcgMTg5LjQgTDY3My43IDIwNS42IEw2NjcuOSAyMjEuOCBMNjYyLjEgMjM4LjIgTDY1Ni40IDI1NC42IEw2NTAuOCAyNzEuMSBMNjQ1LjQgMjg3LjggTDY0MC4xIDMwNC41IEw2MzMuOCAzMjAuOSBMNjI3LjMgMzM3LjMgTDYyMS4xIDM1My44IEw2MTUuMCAzNzAuNCBMNjA5LjIgMzg3LjEgTDYwNC4xIDQwNC4xIEw1OTkuMyA0MjEuMiBMNTk0LjcgNDM4LjQgWiIvPjxwYXRoIGQ9Ik01OTMuOSA0MzguMiBMNTk5LjUgNDI0LjMgTDYwNC41IDQxMC4yIEw2MDkuMyAzOTYuMSBMNjE0LjEgMzgyLjAgTDYxOS4wIDM2OC4wIEw2MjQuMCAzNTMuOSBMNjI4LjkgMzQwLjAgTDYzMy45IDMyNi4wIEw2MzguOSAzMTIuMSBMNjQyLjkgMjk3LjkgTDY0Ni42IDI4My41IEw2NTAuNSAyNjkuMiBMNjU0LjYgMjU1LjEgTDY1OC44IDI0MS4wIEw2NjMuMSAyMjYuOSBMNjY3LjUgMjEzLjAgTDY3Mi4xIDE5OS4xIEw2NzYuNyAxODUuMyBMNjgxLjYgMTcxLjYgTDY4Ni41IDE1OC4xIEw2OTEuNiAxNDQuNiBMNjk2LjkgMTMxLjIgTDcwMi4zIDExOC4wIEw3MDcuOSAxMDQuOSBMNzA3LjkgMTA0LjkgTDcwMi43IDExOC4yIEw2OTcuNyAxMzEuNiBMNjkyLjkgMTQ1LjMgTDY4OC40IDE1OS4wIEw2ODQuMCAxNzIuOCBMNjc5LjggMTg2LjggTDY3NS45IDIwMC45IEw2NzIuMCAyMTUuMCBMNjY4LjQgMjI5LjMgTDY2NC44IDI0My42IEw2NjEuNSAyNTguMCBMNjU4LjIgMjcyLjQgTDY1NS4xIDI4Ny4wIEw2NTIuMiAzMDEuNiBMNjQ4LjkgMzE2LjEgTDY0NC4yIDMzMC4wIEw2MzkuNSAzNDQuMCBMNjM0LjggMzU4LjAgTDYzMC4xIDM3Mi4wIEw2MjUuNCAzODYuMCBMNjIwLjYgNDAwLjEgTDYxNS45IDQxNC4yIEw2MTEuNSA0MjguNCBMNjA3LjcgNDQyLjggWiIvPjxwYXRoIGQ9Ik0gNzMzLjAgNzYwLjAgTCA3MzMuMCA1MC4wIEwgMTAyNS42IDUwLjAgUSAxMTYwLjYgNTAuMCAxMjM0LjAgOTYuNSBRIDEzMDcuMyAxNDIuOSAxMzA3LjMgMjQzLjcgUSAxMzA3LjMgMjg3LjAgMTI5MC41IDMxOC40IFEgMTI3My42IDM0OS44IDEyNDAuMiAzNjguNCBRIDEyMDYuOCAzODcuMCAxMTU4LjUgMzkyLjQgTCAxMTU4LjQgMzkzLjYgUSAxMjQ3LjYgNDAxLjcgMTI5Mi41IDQ0NS43IFEgMTMzNy4zIDQ4OS43IDEzMzcuMyA1NjQuMSBRIDEzMzcuMyA2NjMuOCAxMjY0LjQgNzExLjkgUSAxMTkxLjUgNzYwLjAgMTA1Ni42IDc2MC4wIFogTSA5MTguMCA2MTYuNiBMIDEwNDQuOSA2MTYuNiBRIDEwOTAuOSA2MTYuNiAxMTIxLjQgNTk3LjggUSAxMTUxLjkgNTc5LjEgMTE1MS45IDUzOS4zIFEgMTE1MS45IDQ5OS41IDExMjEuOCA0ODAuMiBRIDEwOTEuOCA0NjAuOCAxMDQ0LjkgNDYwLjggTCA5MTguMCA0NjAuOCBaIE0gOTE4LjAgMzM3LjIgTCAxMDE4LjQgMzM3LjIgUSAxMDY0LjAgMzM3LjIgMTA5Mi45IDMxOS40IFEgMTEyMS45IDMwMS42IDExMjEuOSAyNjUuNyBRIDExMjEuOSAyMjcuNyAxMDkzLjUgMjEwLjYgUSAxMDY1LjIgMTkzLjQgMTAxOC40IDE5My40IEwgOTE4LjAgMTkzLjQgWiIvPjwvZz48L3N2Zz4K';\n"]}
@@ -0,0 +1,35 @@
1
+ import type { NativeWindow } from '../windowControls.ts';
2
+ export type Invoke = <T = unknown>(command: string, args?: Record<string, unknown>) => Promise<T>;
3
+ export type Listen = <T = unknown>(event: string, handler: (event: {
4
+ payload: T;
5
+ }) => void) => Promise<() => void>;
6
+ /** The Tauri `Window` calls the frame makes (window controls, and the window's own background). */
7
+ export type ShellWindow = NativeWindow & {
8
+ setBackgroundColor(color: [number, number, number, number]): Promise<void>;
9
+ };
10
+ export type NativeApi = {
11
+ invoke: Invoke;
12
+ listen: Listen;
13
+ currentWindow: () => ShellWindow;
14
+ };
15
+ export declare function setNative(native: NativeApi): void;
16
+ /** A native command (rejects with an Error whose message is native code's `CODE: detail`). */
17
+ export declare const invoke: Invoke;
18
+ /** A native event; resolves to its unlisten function (rejects outside Tauri without mocks). */
19
+ export declare const listen: Listen;
20
+ export declare const currentWindow: () => ShellWindow;
21
+ /** Tauri's IPC is present (the real app, or a preview with mocks installed). */
22
+ export declare const isNative: () => boolean;
23
+ export type MockHandler = (args: Record<string, unknown>) => unknown;
24
+ /**
25
+ * Development only: answers native commands from `handlers` (`window.__TAURI_INTERNALS__`, which
26
+ * `@tauri-apps/api` reads) so the real shell renders in a plain browser. Event listeners are
27
+ * mocked too; `emit(event, payload)` delivers an event to them. Unknown commands reject (and warn).
28
+ */
29
+ export declare function installPreviewMocks(handlers: Record<string, MockHandler>, options?: {
30
+ label?: string;
31
+ name?: string;
32
+ }): {
33
+ handlers: Record<string, MockHandler>;
34
+ emit: (event: string, payload: unknown) => void;
35
+ };
@@ -0,0 +1,70 @@
1
+ // The shell frame's line to native code. The app passes its own Tauri API (`@tauri-apps/api`
2
+ // `invoke`, `listen`, `getCurrentWindow`) through `createShell`, so the framework has no Tauri
3
+ // dependency and the app keeps its version. `call` normalizes errors; `installPreviewMocks` stands
4
+ // in for native code in a plain browser (the dev preview harnesses: every command answered from
5
+ // memory, events delivered with `emit`).
6
+ // No React; pure enough for node tests (nothing runs until a command is called).
7
+ let api = null;
8
+ export function setNative(native) {
9
+ api = native;
10
+ }
11
+ function need() {
12
+ if (!api)
13
+ throw new Error('wayBetter shell: createShell(site) first (no native API)');
14
+ return api;
15
+ }
16
+ /** A native command (rejects with an Error whose message is native code's `CODE: detail`). */
17
+ export const invoke = async (command, args) => {
18
+ try {
19
+ return await need().invoke(command, args);
20
+ }
21
+ catch (error) {
22
+ throw error instanceof Error ? error : new Error(String(error));
23
+ }
24
+ };
25
+ /** A native event; resolves to its unlisten function (rejects outside Tauri without mocks). */
26
+ export const listen = (event, handler) => {
27
+ try {
28
+ return need().listen(event, handler);
29
+ }
30
+ catch (error) {
31
+ return Promise.reject(error);
32
+ }
33
+ };
34
+ export const currentWindow = () => need().currentWindow();
35
+ /** Tauri's IPC is present (the real app, or a preview with mocks installed). */
36
+ export const isNative = () => typeof globalThis === 'object' && '__TAURI_INTERNALS__' in globalThis;
37
+ /**
38
+ * Development only: answers native commands from `handlers` (`window.__TAURI_INTERNALS__`, which
39
+ * `@tauri-apps/api` reads) so the real shell renders in a plain browser. Event listeners are
40
+ * mocked too; `emit(event, payload)` delivers an event to them. Unknown commands reject (and warn).
41
+ */
42
+ export function installPreviewMocks(handlers, options = {}) {
43
+ const label = options.label ?? 'shell';
44
+ let callbackId = 0;
45
+ const callbacks = new Map();
46
+ const listeners = {};
47
+ // Tauri's event plugin; `handlers` is read on every call, so commands can be added later.
48
+ const events = {
49
+ 'plugin:event|listen': ({ event, handler }) => { (listeners[String(event)] ??= []).push(Number(handler)); return Number(handler); },
50
+ 'plugin:event|unlisten': () => null,
51
+ };
52
+ const emit = (event, payload) => (listeners[event] ?? []).forEach(id => callbacks.get(id)?.({ event, id, payload }));
53
+ const target = window;
54
+ target.__TAURI_INTERNALS__ = {
55
+ invoke: async (cmd, args = {}) => {
56
+ const handler = handlers[cmd] ?? events[cmd];
57
+ if (!handler) {
58
+ console.warn(`[${options.name ?? 'preview'}] ${cmd} is not mocked`);
59
+ throw new Error(`Preview: ${cmd} is not mocked`);
60
+ }
61
+ return structuredClone(await handler(args));
62
+ },
63
+ transformCallback: (callback) => { callbacks.set(++callbackId, callback); return callbackId; },
64
+ unregisterCallback: () => { },
65
+ metadata: { currentWindow: { label }, currentWebview: { label } },
66
+ };
67
+ target.__TAURI_EVENT_PLUGIN_INTERNALS__ = { unregisterListener: () => { } };
68
+ return { handlers, emit };
69
+ }
70
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../../../../shell/src/frame/bridge.ts"],"names":[],"mappings":"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","sourcesContent":["// The shell frame's line to native code. The app passes its own Tauri API (`@tauri-apps/api`\n// `invoke`, `listen`, `getCurrentWindow`) through `createShell`, so the framework has no Tauri\n// dependency and the app keeps its version. `call` normalizes errors; `installPreviewMocks` stands\n// in for native code in a plain browser (the dev preview harnesses: every command answered from\n// memory, events delivered with `emit`).\n// No React; pure enough for node tests (nothing runs until a command is called).\n\nimport type { NativeWindow } from '../windowControls.ts';\n\nexport type Invoke = <T = unknown>(command: string, args?: Record<string, unknown>) => Promise<T>;\nexport type Listen = <T = unknown>(event: string, handler: (event: { payload: T }) => void) => Promise<() => void>;\n/** The Tauri `Window` calls the frame makes (window controls, and the window's own background). */\nexport type ShellWindow = NativeWindow & { setBackgroundColor(color: [number, number, number, number]): Promise<void> };\nexport type NativeApi = { invoke: Invoke; listen: Listen; currentWindow: () => ShellWindow };\n\nlet api: NativeApi | null = null;\n\nexport function setNative(native: NativeApi) {\n api = native;\n}\n\nfunction need(): NativeApi {\n if (!api) throw new Error('wayBetter shell: createShell(site) first (no native API)');\n return api;\n}\n\n/** A native command (rejects with an Error whose message is native code's `CODE: detail`). */\nexport const invoke: Invoke = async <T>(command: string, args?: Record<string, unknown>) => {\n try { return await need().invoke<T>(command, args); }\n catch (error) { throw error instanceof Error ? error : new Error(String(error)); }\n};\n\n/** A native event; resolves to its unlisten function (rejects outside Tauri without mocks). */\nexport const listen: Listen = (event, handler) => {\n try { return need().listen(event, handler); }\n catch (error) { return Promise.reject(error); }\n};\n\nexport const currentWindow = () => need().currentWindow();\n\n/** Tauri's IPC is present (the real app, or a preview with mocks installed). */\nexport const isNative = () => typeof globalThis === 'object' && '__TAURI_INTERNALS__' in globalThis;\n\nexport type MockHandler = (args: Record<string, unknown>) => unknown;\n\n/**\n * Development only: answers native commands from `handlers` (`window.__TAURI_INTERNALS__`, which\n * `@tauri-apps/api` reads) so the real shell renders in a plain browser. Event listeners are\n * mocked too; `emit(event, payload)` delivers an event to them. Unknown commands reject (and warn).\n */\nexport function installPreviewMocks(handlers: Record<string, MockHandler>, options: { label?: string; name?: string } = {}) {\n const label = options.label ?? 'shell';\n let callbackId = 0;\n const callbacks = new Map<number, (message: unknown) => void>();\n const listeners: Record<string, number[]> = {};\n // Tauri's event plugin; `handlers` is read on every call, so commands can be added later.\n const events: Record<string, MockHandler> = {\n 'plugin:event|listen': ({ event, handler }) => { (listeners[String(event)] ??= []).push(Number(handler)); return Number(handler); },\n 'plugin:event|unlisten': () => null,\n };\n const emit = (event: string, payload: unknown) =>\n (listeners[event] ?? []).forEach(id => callbacks.get(id)?.({ event, id, payload }));\n const target = window as unknown as Record<string, unknown>;\n target.__TAURI_INTERNALS__ = {\n invoke: async (cmd: string, args: Record<string, unknown> = {}) => {\n const handler = handlers[cmd] ?? events[cmd];\n if (!handler) { console.warn(`[${options.name ?? 'preview'}] ${cmd} is not mocked`); throw new Error(`Preview: ${cmd} is not mocked`); }\n return structuredClone(await handler(args));\n },\n transformCallback: (callback: (message: unknown) => void) => { callbacks.set(++callbackId, callback); return callbackId; },\n unregisterCallback: () => {},\n metadata: { currentWindow: { label }, currentWebview: { label } },\n };\n target.__TAURI_EVENT_PLUGIN_INTERNALS__ = { unregisterListener: () => {} };\n return { handlers, emit };\n}\n"]}
@@ -0,0 +1,29 @@
1
+ /** The shell's own interface font (what an inheriting chrome role falls back to outside the page). */
2
+ export declare const SHELL_UI_FONT = "'Geist Variable', system-ui, sans-serif";
3
+ export declare const SHELL_MONO_FONT = "'Geist Mono Variable', ui-monospace, monospace";
4
+ /** A theme as the chrome needs it: seven colors (none: the site's own colors) and two font stacks. */
5
+ export type ChromeTheme = {
6
+ colors?: {
7
+ bg: string;
8
+ surface: string;
9
+ elevated: string;
10
+ border: string;
11
+ text: string;
12
+ muted: string;
13
+ accent: string;
14
+ } | null;
15
+ /** The chrome's font stack when the theme sets one other than SHELL_UI_FONT. */
16
+ chromeFont?: string | null;
17
+ /** The mono font stack when the theme sets one. */
18
+ monoFont?: string | null;
19
+ };
20
+ export declare function luminance(hex: string): number;
21
+ export declare function contrast(a: string, b: string): number;
22
+ export declare function mix(a: string, b: string, t: number): string;
23
+ /**
24
+ * CSS custom properties for the chrome in `theme`. A theme that keeps the site's colors changes
25
+ * only the fonts; `own` keeps wayBetter's own style entirely (empty result).
26
+ */
27
+ export declare function chromeVars(theme: ChromeTheme, own?: boolean): Record<string, string>;
28
+ /** Every variable chromeVars may set (to clear them when a pane returns to the global theme). */
29
+ export declare const CHROME_VAR_NAMES: string[];