rune-lab 0.4.0 → 0.4.1

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 (433) hide show
  1. package/.gitignore +12 -0
  2. package/README.md +3 -3
  3. package/deno.json +50 -0
  4. package/justfile +5 -0
  5. package/package.json +2 -79
  6. package/scripts/build_pkg.ts +51 -0
  7. package/scripts/ci.just +26 -0
  8. package/scripts/deploy.just +21 -0
  9. package/scripts/dev.just +4 -0
  10. package/scripts/inject.just +72 -0
  11. package/src/RuneProvider.svelte +105 -0
  12. package/src/i18n/message-resolver.test.ts +103 -0
  13. package/src/i18n/message-resolver.ts +89 -0
  14. package/src/i18n/project.inlang/settings.json +26 -0
  15. package/src/i18n/translations/ar.json +89 -0
  16. package/src/i18n/translations/de.json +89 -0
  17. package/src/i18n/translations/en.json +89 -0
  18. package/src/i18n/translations/es.json +89 -0
  19. package/src/i18n/translations/fr.json +89 -0
  20. package/src/i18n/translations/hi.json +89 -0
  21. package/src/i18n/translations/it.json +89 -0
  22. package/src/i18n/translations/ja.json +89 -0
  23. package/src/i18n/translations/ko.json +89 -0
  24. package/src/i18n/translations/pt.json +89 -0
  25. package/src/i18n/translations/ru.json +89 -0
  26. package/src/i18n/translations/vi.json +89 -0
  27. package/src/i18n/translations/zh.json +89 -0
  28. package/src/kernel/deno.json +5 -0
  29. package/src/kernel/src/actions/portal.ts +41 -0
  30. package/src/kernel/src/actions/shortcut-listener.ts +50 -0
  31. package/src/kernel/src/context/app.svelte.ts +98 -0
  32. package/src/kernel/src/context/context.ts +31 -0
  33. package/src/kernel/src/context/stores.svelte.ts +96 -0
  34. package/src/kernel/src/context/types.ts +110 -0
  35. package/src/kernel/src/context/useRuneLab.ts +38 -0
  36. package/src/kernel/src/mod.ts +13 -0
  37. package/src/kernel/src/persistence/createConfigStore.svelte.ts +120 -0
  38. package/src/kernel/src/persistence/drivers.test.ts +95 -0
  39. package/src/kernel/src/persistence/drivers.ts +77 -0
  40. package/src/kernel/src/persistence/provider.test.ts +58 -0
  41. package/{dist/state/persistence/provider.js → src/kernel/src/persistence/provider.ts} +29 -14
  42. package/src/kernel/src/persistence/types.ts +19 -0
  43. package/src/kernel/src/persistence/usePersistence.ts +9 -0
  44. package/src/kernel/src/registry/mod.ts +221 -0
  45. package/src/kernel/src/registry/registry.test.ts +162 -0
  46. package/src/kernel/src/tokens/props.ts +94 -0
  47. package/src/mod.ts +10 -0
  48. package/src/runes/layout/deno.json +5 -0
  49. package/src/runes/layout/src/APP_CONFIGURATIONS.ts +56 -0
  50. package/{dist/ui/features/config → src/runes/layout/src}/AppSettingSelector.svelte +1 -1
  51. package/{dist/ui/layout → src/runes/layout/src}/ConnectedNavigationPanel.svelte +1 -1
  52. package/{dist/ui/layout → src/runes/layout/src}/ConnectedWorkspaceStrip.svelte +1 -1
  53. package/src/runes/layout/src/Icon.svelte +7 -0
  54. package/{dist/ui/features/config → src/runes/layout/src}/LanguageSelector.svelte +7 -5
  55. package/{dist/ui/layout → src/runes/layout/src}/NavigationPanel.svelte +1 -4
  56. package/{dist/ui/features/config → src/runes/layout/src}/ResourceSelector.svelte +3 -5
  57. package/{dist/ui/features/config → src/runes/layout/src}/ThemeSelector.svelte +2 -2
  58. package/{dist/ui/layout → src/runes/layout/src}/WorkspaceLayout.svelte +6 -4
  59. package/{dist/ui/layout → src/runes/layout/src}/WorkspaceStrip.svelte +1 -1
  60. package/src/runes/layout/src/connection-factory.ts +95 -0
  61. package/src/runes/layout/src/language.svelte.ts +44 -0
  62. package/src/runes/layout/src/mod.ts +71 -0
  63. package/src/runes/layout/src/store.svelte.ts +142 -0
  64. package/src/runes/layout/src/theme.svelte.ts +73 -0
  65. package/src/runes/layout/src/types.ts +11 -0
  66. package/src/runes/palettes/deno.json +8 -0
  67. package/{dist/ui/features/command-palette → src/runes/palettes/src/commands}/CommandPalette.svelte +4 -4
  68. package/src/runes/palettes/src/commands/mod.ts +2 -0
  69. package/src/runes/palettes/src/commands/store.svelte.ts +80 -0
  70. package/src/runes/palettes/src/mod.ts +51 -0
  71. package/{dist/ui/components → src/runes/palettes/src/notifications}/Toaster.svelte +1 -2
  72. package/src/runes/palettes/src/notifications/bridge.ts +56 -0
  73. package/src/runes/palettes/src/notifications/mod.ts +4 -0
  74. package/src/runes/palettes/src/notifications/store.svelte.ts +58 -0
  75. package/{dist/ui/features → src/runes/palettes/src}/shortcuts/ShortcutPalette.svelte +4 -4
  76. package/src/runes/palettes/src/shortcuts/mod.ts +4 -0
  77. package/src/runes/palettes/src/shortcuts/store.svelte.ts +85 -0
  78. package/src/runes/palettes/src/shortcuts/types.ts +4 -0
  79. package/src/runes/palettes/src/shortcuts/useShortcuts.ts +85 -0
  80. package/src/runes/plugins/money/deno.json +8 -0
  81. package/{dist/ui/features/config → src/runes/plugins/money/src}/CurrencySelector.svelte +2 -2
  82. package/{dist/ui/components/money → src/runes/plugins/money/src}/MoneyDisplay.svelte +2 -2
  83. package/{dist/ui/components/money → src/runes/plugins/money/src}/MoneyInput.svelte +4 -8
  84. package/src/runes/plugins/money/src/currency.svelte.ts +95 -0
  85. package/src/runes/plugins/money/src/currency.test.ts +40 -0
  86. package/src/runes/plugins/money/src/exchange-rate.svelte.ts +176 -0
  87. package/src/runes/plugins/money/src/exchange-rate.test.ts +95 -0
  88. package/src/runes/plugins/money/src/mod.ts +79 -0
  89. package/src/runes/plugins/money/src/money-primitive.test.ts +217 -0
  90. package/src/runes/plugins/money/src/money-primitive.ts +220 -0
  91. package/src/runes/plugins/money/src/money.test.ts +183 -0
  92. package/src/runes/plugins/money/src/money.ts +382 -0
  93. package/src/runes/plugins/money/src/strategies.test.ts +143 -0
  94. package/{dist/core/exchange-rate/strategies.js → src/runes/plugins/money/src/strategies.ts} +45 -22
  95. package/src/runes/plugins/money/src/types.ts +27 -0
  96. package/src/runes/plugins/money/src/useMoney.ts +261 -0
  97. package/src/runes/plugins/money/src/useMoneyFilter.ts +132 -0
  98. package/tsconfig.json +41 -0
  99. package/vite.config.ts +44 -0
  100. package/dist/core/design-tokens/props.d.ts +0 -52
  101. package/dist/core/design-tokens/props.d.ts.map +0 -1
  102. package/dist/core/design-tokens/props.js +0 -34
  103. package/dist/core/exchange-rate/strategies.d.ts +0 -52
  104. package/dist/core/exchange-rate/strategies.d.ts.map +0 -1
  105. package/dist/core/index.d.ts +0 -9
  106. package/dist/core/index.d.ts.map +0 -1
  107. package/dist/core/index.js +0 -8
  108. package/dist/core/internal/message-resolver.d.ts +0 -42
  109. package/dist/core/internal/message-resolver.d.ts.map +0 -1
  110. package/dist/core/internal/message-resolver.js +0 -47
  111. package/dist/core/layout/types.d.ts +0 -60
  112. package/dist/core/layout/types.d.ts.map +0 -1
  113. package/dist/core/layout/types.js +0 -4
  114. package/dist/core/money/index.d.ts +0 -2
  115. package/dist/core/money/index.d.ts.map +0 -1
  116. package/dist/core/money/index.js +0 -2
  117. package/dist/core/money/money-primitive.d.ts +0 -101
  118. package/dist/core/money/money-primitive.d.ts.map +0 -1
  119. package/dist/core/money/money-primitive.js +0 -161
  120. package/dist/core/money/money.d.ts +0 -129
  121. package/dist/core/money/money.d.ts.map +0 -1
  122. package/dist/core/money/money.js +0 -250
  123. package/dist/core/persistence/types.d.ts +0 -18
  124. package/dist/core/persistence/types.d.ts.map +0 -1
  125. package/dist/core/persistence/types.js +0 -2
  126. package/dist/core/shortcuts/types.d.ts +0 -60
  127. package/dist/core/shortcuts/types.d.ts.map +0 -1
  128. package/dist/core/shortcuts/types.js +0 -4
  129. package/dist/index.d.ts +0 -6
  130. package/dist/index.js +0 -7
  131. package/dist/state/api.svelte.d.ts +0 -26
  132. package/dist/state/api.svelte.js +0 -65
  133. package/dist/state/app.svelte.d.ts +0 -48
  134. package/dist/state/app.svelte.js +0 -82
  135. package/dist/state/auth/index.d.ts +0 -2
  136. package/dist/state/auth/index.js +0 -2
  137. package/dist/state/auth/session.svelte.d.ts +0 -40
  138. package/dist/state/auth/session.svelte.js +0 -59
  139. package/dist/state/auth/types.d.ts +0 -30
  140. package/dist/state/auth/types.js +0 -3
  141. package/dist/state/cart.svelte.d.ts +0 -64
  142. package/dist/state/cart.svelte.js +0 -122
  143. package/dist/state/commands.svelte.d.ts +0 -46
  144. package/dist/state/commands.svelte.js +0 -62
  145. package/dist/state/composables/useMoney.d.ts +0 -31
  146. package/dist/state/composables/useMoney.js +0 -126
  147. package/dist/state/composables/useMoneyFilter.d.ts +0 -20
  148. package/dist/state/composables/useMoneyFilter.js +0 -81
  149. package/dist/state/composables/usePersistence.d.ts +0 -2
  150. package/dist/state/composables/usePersistence.js +0 -5
  151. package/dist/state/composables/useRuneLab.d.ts +0 -19
  152. package/dist/state/composables/useRuneLab.js +0 -30
  153. package/dist/state/composables/useShortcuts.d.ts +0 -33
  154. package/dist/state/composables/useShortcuts.js +0 -75
  155. package/dist/state/context.d.ts +0 -15
  156. package/dist/state/context.js +0 -16
  157. package/dist/state/createConfigStore.svelte.d.ts +0 -28
  158. package/dist/state/createConfigStore.svelte.js +0 -72
  159. package/dist/state/currency.svelte.d.ts +0 -32
  160. package/dist/state/currency.svelte.js +0 -96
  161. package/dist/state/currency.test.d.ts +0 -1
  162. package/dist/state/currency.test.js +0 -35
  163. package/dist/state/exchange-rate.svelte.d.ts +0 -43
  164. package/dist/state/exchange-rate.svelte.js +0 -145
  165. package/dist/state/exchange-rate.test.d.ts +0 -1
  166. package/dist/state/exchange-rate.test.js +0 -75
  167. package/dist/state/index.d.ts +0 -26
  168. package/dist/state/index.js +0 -32
  169. package/dist/state/language.svelte.d.ts +0 -57
  170. package/dist/state/language.svelte.js +0 -43
  171. package/dist/state/layout.svelte.d.ts +0 -49
  172. package/dist/state/layout.svelte.js +0 -108
  173. package/dist/state/persistence/drivers.d.ts +0 -12
  174. package/dist/state/persistence/drivers.js +0 -75
  175. package/dist/state/persistence/drivers.test.d.ts +0 -1
  176. package/dist/state/persistence/drivers.test.js +0 -79
  177. package/dist/state/persistence/provider.d.ts +0 -23
  178. package/dist/state/persistence/provider.test.d.ts +0 -1
  179. package/dist/state/persistence/provider.test.js +0 -51
  180. package/dist/state/registry/index.d.ts +0 -44
  181. package/dist/state/registry/index.js +0 -58
  182. package/dist/state/registry/registry.test.d.ts +0 -1
  183. package/dist/state/registry/registry.test.js +0 -112
  184. package/dist/state/registry/types.d.ts +0 -20
  185. package/dist/state/registry/types.js +0 -3
  186. package/dist/state/shortcuts.svelte.d.ts +0 -121
  187. package/dist/state/shortcuts.svelte.js +0 -222
  188. package/dist/state/theme.svelte.d.ts +0 -15
  189. package/dist/state/theme.svelte.js +0 -92
  190. package/dist/state/toast-bridge.d.ts +0 -29
  191. package/dist/state/toast-bridge.js +0 -43
  192. package/dist/state/toast.svelte.d.ts +0 -27
  193. package/dist/state/toast.svelte.js +0 -43
  194. package/dist/ui/actions/portal.d.ts +0 -7
  195. package/dist/ui/actions/portal.js +0 -32
  196. package/dist/ui/components/ApiMonitor.svelte +0 -162
  197. package/dist/ui/components/ApiMonitor.svelte.d.ts +0 -3
  198. package/dist/ui/components/Icon.svelte +0 -108
  199. package/dist/ui/components/Icon.svelte.d.ts +0 -14
  200. package/dist/ui/components/Kyntharil.svelte +0 -48
  201. package/dist/ui/components/Kyntharil.svelte.d.ts +0 -6
  202. package/dist/ui/components/RuneProvider.svelte +0 -218
  203. package/dist/ui/components/RuneProvider.svelte.d.ts +0 -49
  204. package/dist/ui/components/Toaster.svelte.d.ts +0 -18
  205. package/dist/ui/components/money/MoneyDisplay.svelte.d.ts +0 -33
  206. package/dist/ui/components/money/MoneyDisplay.svelte.test.d.ts +0 -1
  207. package/dist/ui/components/money/MoneyDisplay.svelte.test.js +0 -117
  208. package/dist/ui/components/money/MoneyInput.svelte.d.ts +0 -34
  209. package/dist/ui/components/money/index.d.ts +0 -2
  210. package/dist/ui/components/money/index.js +0 -3
  211. package/dist/ui/components/user/UserAvatar.svelte +0 -66
  212. package/dist/ui/components/user/UserAvatar.svelte.d.ts +0 -13
  213. package/dist/ui/components/user/UserProfile.svelte +0 -79
  214. package/dist/ui/components/user/UserProfile.svelte.d.ts +0 -17
  215. package/dist/ui/components/user/index.d.ts +0 -2
  216. package/dist/ui/components/user/index.js +0 -3
  217. package/dist/ui/features/command-palette/CommandPalette.svelte.d.ts +0 -6
  218. package/dist/ui/features/config/APP_CONFIGURATIONS.d.ts +0 -29
  219. package/dist/ui/features/config/APP_CONFIGURATIONS.js +0 -38
  220. package/dist/ui/features/config/AppSettingSelector.svelte.d.ts +0 -13
  221. package/dist/ui/features/config/CurrencySelector.svelte.d.ts +0 -8
  222. package/dist/ui/features/config/LanguageSelector.svelte.d.ts +0 -8
  223. package/dist/ui/features/config/ResourceSelector.svelte.d.ts +0 -25
  224. package/dist/ui/features/config/ThemeSelector.svelte.d.ts +0 -8
  225. package/dist/ui/features/notifications/NotificationBell.svelte.d.ts +0 -11
  226. package/dist/ui/features/notifications/index.d.ts +0 -1
  227. package/dist/ui/features/notifications/index.js +0 -2
  228. package/dist/ui/features/shortcuts/ShortcutBinder.svelte +0 -17
  229. package/dist/ui/features/shortcuts/ShortcutBinder.svelte.d.ts +0 -7
  230. package/dist/ui/features/shortcuts/ShortcutPalette.svelte.d.ts +0 -6
  231. package/dist/ui/index.d.ts +0 -30
  232. package/dist/ui/index.js +0 -46
  233. package/dist/ui/layout/ConnectedNavigationPanel.svelte.d.ts +0 -10
  234. package/dist/ui/layout/ConnectedWorkspaceStrip.svelte.d.ts +0 -9
  235. package/dist/ui/layout/ContentArea.svelte.d.ts +0 -8
  236. package/dist/ui/layout/DetailPanel.svelte.d.ts +0 -7
  237. package/dist/ui/layout/NavigationPanel.svelte.d.ts +0 -14
  238. package/dist/ui/layout/WorkspaceLayout.svelte.d.ts +0 -32
  239. package/dist/ui/layout/WorkspaceStrip.svelte.d.ts +0 -11
  240. package/dist/ui/layout/connection-factory.d.ts +0 -50
  241. package/dist/ui/layout/connection-factory.js +0 -58
  242. package/dist/ui/layout/index.d.ts +0 -7
  243. package/dist/ui/layout/index.js +0 -7
  244. package/dist/ui/paraglide/README.md +0 -147
  245. package/dist/ui/paraglide/messages/_index.d.ts +0 -87
  246. package/dist/ui/paraglide/messages/_index.js +0 -88
  247. package/dist/ui/paraglide/messages/abyss.d.ts +0 -16
  248. package/dist/ui/paraglide/messages/abyss.js +0 -84
  249. package/dist/ui/paraglide/messages/acid.d.ts +0 -16
  250. package/dist/ui/paraglide/messages/acid.js +0 -84
  251. package/dist/ui/paraglide/messages/active_toasts.d.ts +0 -16
  252. package/dist/ui/paraglide/messages/active_toasts.js +0 -84
  253. package/dist/ui/paraglide/messages/aed3.d.ts +0 -17
  254. package/dist/ui/paraglide/messages/aed3.js +0 -85
  255. package/dist/ui/paraglide/messages/all_currencies.d.ts +0 -16
  256. package/dist/ui/paraglide/messages/all_currencies.js +0 -84
  257. package/dist/ui/paraglide/messages/all_languages.d.ts +0 -16
  258. package/dist/ui/paraglide/messages/all_languages.js +0 -84
  259. package/dist/ui/paraglide/messages/all_themes.d.ts +0 -16
  260. package/dist/ui/paraglide/messages/all_themes.js +0 -84
  261. package/dist/ui/paraglide/messages/api_status.d.ts +0 -16
  262. package/dist/ui/paraglide/messages/api_status.js +0 -84
  263. package/dist/ui/paraglide/messages/app_info.d.ts +0 -16
  264. package/dist/ui/paraglide/messages/app_info.js +0 -84
  265. package/dist/ui/paraglide/messages/appearance.d.ts +0 -16
  266. package/dist/ui/paraglide/messages/appearance.js +0 -84
  267. package/dist/ui/paraglide/messages/aqua.d.ts +0 -16
  268. package/dist/ui/paraglide/messages/aqua.js +0 -84
  269. package/dist/ui/paraglide/messages/ar.d.ts +0 -16
  270. package/dist/ui/paraglide/messages/ar.js +0 -84
  271. package/dist/ui/paraglide/messages/autumn.d.ts +0 -16
  272. package/dist/ui/paraglide/messages/autumn.js +0 -84
  273. package/dist/ui/paraglide/messages/black.d.ts +0 -16
  274. package/dist/ui/paraglide/messages/black.js +0 -84
  275. package/dist/ui/paraglide/messages/brl3.d.ts +0 -17
  276. package/dist/ui/paraglide/messages/brl3.js +0 -85
  277. package/dist/ui/paraglide/messages/bumblebee.d.ts +0 -16
  278. package/dist/ui/paraglide/messages/bumblebee.js +0 -84
  279. package/dist/ui/paraglide/messages/business.d.ts +0 -16
  280. package/dist/ui/paraglide/messages/business.js +0 -84
  281. package/dist/ui/paraglide/messages/cad3.d.ts +0 -17
  282. package/dist/ui/paraglide/messages/cad3.js +0 -85
  283. package/dist/ui/paraglide/messages/caramellatte.d.ts +0 -16
  284. package/dist/ui/paraglide/messages/caramellatte.js +0 -84
  285. package/dist/ui/paraglide/messages/cmyk.d.ts +0 -16
  286. package/dist/ui/paraglide/messages/cmyk.js +0 -84
  287. package/dist/ui/paraglide/messages/cny3.d.ts +0 -17
  288. package/dist/ui/paraglide/messages/cny3.js +0 -85
  289. package/dist/ui/paraglide/messages/coffee.d.ts +0 -16
  290. package/dist/ui/paraglide/messages/coffee.js +0 -84
  291. package/dist/ui/paraglide/messages/commands_label.d.ts +0 -16
  292. package/dist/ui/paraglide/messages/commands_label.js +0 -84
  293. package/dist/ui/paraglide/messages/corporate.d.ts +0 -16
  294. package/dist/ui/paraglide/messages/corporate.js +0 -84
  295. package/dist/ui/paraglide/messages/cupcake.d.ts +0 -16
  296. package/dist/ui/paraglide/messages/cupcake.js +0 -84
  297. package/dist/ui/paraglide/messages/currency.d.ts +0 -16
  298. package/dist/ui/paraglide/messages/currency.js +0 -84
  299. package/dist/ui/paraglide/messages/current_currency.d.ts +0 -16
  300. package/dist/ui/paraglide/messages/current_currency.js +0 -84
  301. package/dist/ui/paraglide/messages/current_language.d.ts +0 -16
  302. package/dist/ui/paraglide/messages/current_language.js +0 -84
  303. package/dist/ui/paraglide/messages/current_theme.d.ts +0 -16
  304. package/dist/ui/paraglide/messages/current_theme.js +0 -84
  305. package/dist/ui/paraglide/messages/currently_in_queue.d.ts +0 -16
  306. package/dist/ui/paraglide/messages/currently_in_queue.js +0 -84
  307. package/dist/ui/paraglide/messages/cyberpunk.d.ts +0 -16
  308. package/dist/ui/paraglide/messages/cyberpunk.js +0 -84
  309. package/dist/ui/paraglide/messages/dark.d.ts +0 -16
  310. package/dist/ui/paraglide/messages/dark.js +0 -84
  311. package/dist/ui/paraglide/messages/de.d.ts +0 -16
  312. package/dist/ui/paraglide/messages/de.js +0 -84
  313. package/dist/ui/paraglide/messages/dim.d.ts +0 -16
  314. package/dist/ui/paraglide/messages/dim.js +0 -84
  315. package/dist/ui/paraglide/messages/dracula.d.ts +0 -16
  316. package/dist/ui/paraglide/messages/dracula.js +0 -84
  317. package/dist/ui/paraglide/messages/emerald.d.ts +0 -16
  318. package/dist/ui/paraglide/messages/emerald.js +0 -84
  319. package/dist/ui/paraglide/messages/en.d.ts +0 -16
  320. package/dist/ui/paraglide/messages/en.js +0 -84
  321. package/dist/ui/paraglide/messages/es.d.ts +0 -16
  322. package/dist/ui/paraglide/messages/es.js +0 -84
  323. package/dist/ui/paraglide/messages/eur3.d.ts +0 -17
  324. package/dist/ui/paraglide/messages/eur3.js +0 -85
  325. package/dist/ui/paraglide/messages/extended_controls.d.ts +0 -16
  326. package/dist/ui/paraglide/messages/extended_controls.js +0 -84
  327. package/dist/ui/paraglide/messages/fantasy.d.ts +0 -16
  328. package/dist/ui/paraglide/messages/fantasy.js +0 -84
  329. package/dist/ui/paraglide/messages/forest.d.ts +0 -16
  330. package/dist/ui/paraglide/messages/forest.js +0 -84
  331. package/dist/ui/paraglide/messages/fr.d.ts +0 -16
  332. package/dist/ui/paraglide/messages/fr.js +0 -84
  333. package/dist/ui/paraglide/messages/garden.d.ts +0 -16
  334. package/dist/ui/paraglide/messages/garden.js +0 -84
  335. package/dist/ui/paraglide/messages/gbp3.d.ts +0 -17
  336. package/dist/ui/paraglide/messages/gbp3.js +0 -85
  337. package/dist/ui/paraglide/messages/halloween.d.ts +0 -16
  338. package/dist/ui/paraglide/messages/halloween.js +0 -84
  339. package/dist/ui/paraglide/messages/hello_world.d.ts +0 -18
  340. package/dist/ui/paraglide/messages/hello_world.js +0 -84
  341. package/dist/ui/paraglide/messages/hi.d.ts +0 -16
  342. package/dist/ui/paraglide/messages/hi.js +0 -84
  343. package/dist/ui/paraglide/messages/inr3.d.ts +0 -17
  344. package/dist/ui/paraglide/messages/inr3.js +0 -85
  345. package/dist/ui/paraglide/messages/it.d.ts +0 -16
  346. package/dist/ui/paraglide/messages/it.js +0 -84
  347. package/dist/ui/paraglide/messages/ja.d.ts +0 -16
  348. package/dist/ui/paraglide/messages/ja.js +0 -84
  349. package/dist/ui/paraglide/messages/jpy3.d.ts +0 -17
  350. package/dist/ui/paraglide/messages/jpy3.js +0 -85
  351. package/dist/ui/paraglide/messages/ko.d.ts +0 -16
  352. package/dist/ui/paraglide/messages/ko.js +0 -84
  353. package/dist/ui/paraglide/messages/krw3.d.ts +0 -17
  354. package/dist/ui/paraglide/messages/krw3.js +0 -85
  355. package/dist/ui/paraglide/messages/languages.d.ts +0 -16
  356. package/dist/ui/paraglide/messages/languages.js +0 -84
  357. package/dist/ui/paraglide/messages/lemonade.d.ts +0 -16
  358. package/dist/ui/paraglide/messages/lemonade.js +0 -84
  359. package/dist/ui/paraglide/messages/light.d.ts +0 -16
  360. package/dist/ui/paraglide/messages/light.js +0 -84
  361. package/dist/ui/paraglide/messages/live_store_dashboard.d.ts +0 -16
  362. package/dist/ui/paraglide/messages/live_store_dashboard.js +0 -84
  363. package/dist/ui/paraglide/messages/localization.d.ts +0 -16
  364. package/dist/ui/paraglide/messages/localization.js +0 -84
  365. package/dist/ui/paraglide/messages/lofi.d.ts +0 -16
  366. package/dist/ui/paraglide/messages/lofi.js +0 -84
  367. package/dist/ui/paraglide/messages/luxury.d.ts +0 -16
  368. package/dist/ui/paraglide/messages/luxury.js +0 -84
  369. package/dist/ui/paraglide/messages/mxn3.d.ts +0 -17
  370. package/dist/ui/paraglide/messages/mxn3.js +0 -85
  371. package/dist/ui/paraglide/messages/name_label.d.ts +0 -16
  372. package/dist/ui/paraglide/messages/name_label.js +0 -84
  373. package/dist/ui/paraglide/messages/night.d.ts +0 -16
  374. package/dist/ui/paraglide/messages/night.js +0 -84
  375. package/dist/ui/paraglide/messages/nord.d.ts +0 -16
  376. package/dist/ui/paraglide/messages/nord.js +0 -84
  377. package/dist/ui/paraglide/messages/pastel.d.ts +0 -16
  378. package/dist/ui/paraglide/messages/pastel.js +0 -84
  379. package/dist/ui/paraglide/messages/pt.d.ts +0 -16
  380. package/dist/ui/paraglide/messages/pt.js +0 -84
  381. package/dist/ui/paraglide/messages/real_time_monitor_desc.d.ts +0 -16
  382. package/dist/ui/paraglide/messages/real_time_monitor_desc.js +0 -84
  383. package/dist/ui/paraglide/messages/registered_in_registry.d.ts +0 -16
  384. package/dist/ui/paraglide/messages/registered_in_registry.js +0 -84
  385. package/dist/ui/paraglide/messages/retro.d.ts +0 -16
  386. package/dist/ui/paraglide/messages/retro.js +0 -84
  387. package/dist/ui/paraglide/messages/ru.d.ts +0 -16
  388. package/dist/ui/paraglide/messages/ru.js +0 -84
  389. package/dist/ui/paraglide/messages/silk.d.ts +0 -16
  390. package/dist/ui/paraglide/messages/silk.js +0 -84
  391. package/dist/ui/paraglide/messages/state_label.d.ts +0 -16
  392. package/dist/ui/paraglide/messages/state_label.js +0 -84
  393. package/dist/ui/paraglide/messages/sunset.d.ts +0 -16
  394. package/dist/ui/paraglide/messages/sunset.js +0 -84
  395. package/dist/ui/paraglide/messages/synthwave.d.ts +0 -16
  396. package/dist/ui/paraglide/messages/synthwave.js +0 -84
  397. package/dist/ui/paraglide/messages/system.d.ts +0 -16
  398. package/dist/ui/paraglide/messages/system.js +0 -84
  399. package/dist/ui/paraglide/messages/theme.d.ts +0 -16
  400. package/dist/ui/paraglide/messages/theme.js +0 -84
  401. package/dist/ui/paraglide/messages/themes.d.ts +0 -16
  402. package/dist/ui/paraglide/messages/themes.js +0 -84
  403. package/dist/ui/paraglide/messages/url_label.d.ts +0 -16
  404. package/dist/ui/paraglide/messages/url_label.js +0 -84
  405. package/dist/ui/paraglide/messages/usd3.d.ts +0 -17
  406. package/dist/ui/paraglide/messages/usd3.js +0 -85
  407. package/dist/ui/paraglide/messages/valentine.d.ts +0 -16
  408. package/dist/ui/paraglide/messages/valentine.js +0 -84
  409. package/dist/ui/paraglide/messages/version_label.d.ts +0 -16
  410. package/dist/ui/paraglide/messages/version_label.js +0 -84
  411. package/dist/ui/paraglide/messages/vi.d.ts +0 -16
  412. package/dist/ui/paraglide/messages/vi.js +0 -84
  413. package/dist/ui/paraglide/messages/winter.d.ts +0 -16
  414. package/dist/ui/paraglide/messages/winter.js +0 -84
  415. package/dist/ui/paraglide/messages/wireframe.d.ts +0 -16
  416. package/dist/ui/paraglide/messages/wireframe.js +0 -84
  417. package/dist/ui/paraglide/messages/zh.d.ts +0 -16
  418. package/dist/ui/paraglide/messages/zh.js +0 -84
  419. package/dist/ui/paraglide/messages.d.ts +0 -2
  420. package/dist/ui/paraglide/messages.js +0 -4
  421. package/dist/ui/paraglide/registry.d.ts +0 -21
  422. package/dist/ui/paraglide/registry.js +0 -31
  423. package/dist/ui/paraglide/runtime.d.ts +0 -730
  424. package/dist/ui/paraglide/runtime.js +0 -1812
  425. package/dist/ui/paraglide/server.d.ts +0 -92
  426. package/dist/ui/paraglide/server.js +0 -239
  427. package/dist/ui/primitives/DatePicker.svelte +0 -257
  428. package/dist/ui/primitives/DatePicker.svelte.d.ts +0 -17
  429. package/dist/ui/primitives/index.d.ts +0 -1
  430. package/dist/ui/primitives/index.js +0 -3
  431. /package/{dist/ui/layout → src/runes/layout/src}/ContentArea.svelte +0 -0
  432. /package/{dist/ui/layout → src/runes/layout/src}/DetailPanel.svelte +0 -0
  433. /package/{dist/ui/features → src/runes/palettes/src}/notifications/NotificationBell.svelte +0 -0
@@ -1,44 +0,0 @@
1
- import type { StoreRegistryEntry } from "./types.ts";
2
- export type { StoreFactory, StoreRegistryEntry } from "./types.ts";
3
- /**
4
- * The global store registry.
5
- * Pre-populated with built-in stores by RuneProvider.
6
- * Third-party plugins can register additional entries before mounting.
7
- *
8
- * @example
9
- * ```ts
10
- * // Plugin registration (before RuneProvider mounts)
11
- * registerStore({
12
- * key: "analytics",
13
- * factory: (config, driver) => createAnalyticsStore(config),
14
- * optional: true,
15
- * noPersistence: true,
16
- * });
17
- * ```
18
- */
19
- declare const STORE_REGISTRY: Map<string, StoreRegistryEntry<unknown, unknown>>;
20
- /**
21
- * Register a store entry in the global registry.
22
- * Must be called before RuneProvider mounts for the store to be auto-wired.
23
- *
24
- * @param entry - Store registry entry with key, factory, and options.
25
- * @throws Error if a store with the same key is already registered.
26
- */
27
- export declare function registerStore(entry: StoreRegistryEntry): void;
28
- /**
29
- * Get a registered store entry by key.
30
- */
31
- export declare function getRegisteredStore(key: string): StoreRegistryEntry | undefined;
32
- /**
33
- * Get all registered store entries.
34
- */
35
- export declare function getAllRegisteredStores(): Map<string, StoreRegistryEntry>;
36
- /**
37
- * Remove a store registration (primarily useful for testing).
38
- */
39
- export declare function unregisterStore(key: string): boolean;
40
- /**
41
- * Clear all store registrations (primarily useful for testing).
42
- */
43
- export declare function clearRegistry(): void;
44
- export { STORE_REGISTRY };
@@ -1,58 +0,0 @@
1
- // sdk/state/src/registry/index.ts
2
- // Store Registry — declarative map of context keys to store factories.
3
- // RuneProvider iterates this at mount time to auto-wire all stores.
4
- /**
5
- * The global store registry.
6
- * Pre-populated with built-in stores by RuneProvider.
7
- * Third-party plugins can register additional entries before mounting.
8
- *
9
- * @example
10
- * ```ts
11
- * // Plugin registration (before RuneProvider mounts)
12
- * registerStore({
13
- * key: "analytics",
14
- * factory: (config, driver) => createAnalyticsStore(config),
15
- * optional: true,
16
- * noPersistence: true,
17
- * });
18
- * ```
19
- */
20
- const STORE_REGISTRY = new Map();
21
- /**
22
- * Register a store entry in the global registry.
23
- * Must be called before RuneProvider mounts for the store to be auto-wired.
24
- *
25
- * @param entry - Store registry entry with key, factory, and options.
26
- * @throws Error if a store with the same key is already registered.
27
- */
28
- export function registerStore(entry) {
29
- if (STORE_REGISTRY.has(entry.key)) {
30
- console.warn(`[StoreRegistry] Overwriting existing store registration for key "${entry.key}"`);
31
- }
32
- STORE_REGISTRY.set(entry.key, entry);
33
- }
34
- /**
35
- * Get a registered store entry by key.
36
- */
37
- export function getRegisteredStore(key) {
38
- return STORE_REGISTRY.get(key);
39
- }
40
- /**
41
- * Get all registered store entries.
42
- */
43
- export function getAllRegisteredStores() {
44
- return STORE_REGISTRY;
45
- }
46
- /**
47
- * Remove a store registration (primarily useful for testing).
48
- */
49
- export function unregisterStore(key) {
50
- return STORE_REGISTRY.delete(key);
51
- }
52
- /**
53
- * Clear all store registrations (primarily useful for testing).
54
- */
55
- export function clearRegistry() {
56
- STORE_REGISTRY.clear();
57
- }
58
- export { STORE_REGISTRY };
@@ -1 +0,0 @@
1
- export {};
@@ -1,112 +0,0 @@
1
- import { describe, expect, it, beforeEach } from "vitest";
2
- import { registerStore, getRegisteredStore, getAllRegisteredStores, unregisterStore, clearRegistry, STORE_REGISTRY, } from "./index.ts";
3
- describe("StoreRegistry", () => {
4
- // Clean slate for each test
5
- beforeEach(() => {
6
- clearRegistry();
7
- });
8
- describe("registerStore", () => {
9
- it("should register a store entry", () => {
10
- registerStore({
11
- key: "test",
12
- factory: () => ({ value: 42 }),
13
- });
14
- expect(STORE_REGISTRY.size).toBe(1);
15
- expect(STORE_REGISTRY.has("test")).toBe(true);
16
- });
17
- it("should allow overwriting with a warning", () => {
18
- registerStore({ key: "test", factory: () => "v1" });
19
- registerStore({ key: "test", factory: () => "v2" });
20
- expect(STORE_REGISTRY.size).toBe(1);
21
- const entry = getRegisteredStore("test");
22
- // Factory should be the second one
23
- expect(entry?.factory({}, {})).toBe("v2");
24
- });
25
- it("should register multiple entries", () => {
26
- registerStore({ key: "a", factory: () => "A" });
27
- registerStore({ key: "b", factory: () => "B" });
28
- registerStore({ key: "c", factory: () => "C" });
29
- expect(STORE_REGISTRY.size).toBe(3);
30
- });
31
- });
32
- describe("getRegisteredStore", () => {
33
- it("should return the entry for a registered key", () => {
34
- registerStore({
35
- key: "theme",
36
- factory: () => "theme-store",
37
- optional: false,
38
- });
39
- const entry = getRegisteredStore("theme");
40
- expect(entry).toBeDefined();
41
- expect(entry.key).toBe("theme");
42
- expect(entry.optional).toBe(false);
43
- });
44
- it("should return undefined for unregistered keys", () => {
45
- expect(getRegisteredStore("nonexistent")).toBeUndefined();
46
- });
47
- });
48
- describe("getAllRegisteredStores", () => {
49
- it("should return all registered stores", () => {
50
- registerStore({ key: "a", factory: () => "A" });
51
- registerStore({ key: "b", factory: () => "B" });
52
- const all = getAllRegisteredStores();
53
- expect(all.size).toBe(2);
54
- expect(all.has("a")).toBe(true);
55
- expect(all.has("b")).toBe(true);
56
- });
57
- });
58
- describe("unregisterStore", () => {
59
- it("should remove a registered store", () => {
60
- registerStore({ key: "test", factory: () => "val" });
61
- expect(STORE_REGISTRY.has("test")).toBe(true);
62
- const result = unregisterStore("test");
63
- expect(result).toBe(true);
64
- expect(STORE_REGISTRY.has("test")).toBe(false);
65
- });
66
- it("should return false for non-existent keys", () => {
67
- expect(unregisterStore("nope")).toBe(false);
68
- });
69
- });
70
- describe("clearRegistry", () => {
71
- it("should remove all entries", () => {
72
- registerStore({ key: "a", factory: () => "A" });
73
- registerStore({ key: "b", factory: () => "B" });
74
- expect(STORE_REGISTRY.size).toBe(2);
75
- clearRegistry();
76
- expect(STORE_REGISTRY.size).toBe(0);
77
- });
78
- });
79
- describe("StoreFactory contract", () => {
80
- it("factory receives config and driver, returns store", () => {
81
- const mockDriver = {
82
- get: () => null,
83
- set: () => { },
84
- remove: () => { },
85
- };
86
- registerStore({
87
- key: "analytics",
88
- factory: (config, driver) => ({
89
- type: "analytics",
90
- hasDriver: !!driver,
91
- }),
92
- optional: true,
93
- noPersistence: true,
94
- });
95
- const entry = getRegisteredStore("analytics");
96
- const store = entry.factory({ apiUrl: "test" }, mockDriver);
97
- expect(store).toEqual({
98
- type: "analytics",
99
- hasDriver: true,
100
- });
101
- });
102
- it("optional factory can return null", () => {
103
- registerStore({
104
- key: "optional-feature",
105
- factory: () => null,
106
- optional: true,
107
- });
108
- const entry = getRegisteredStore("optional-feature");
109
- expect(entry.factory({}, {})).toBeNull();
110
- });
111
- });
112
- });
@@ -1,20 +0,0 @@
1
- import type { PersistenceDriver } from "@internal/core";
2
- /**
3
- * Factory function signature for creating a store.
4
- * Receives the resolved config and driver, returns a store instance or null (for optional stores).
5
- */
6
- export type StoreFactory<TConfig = unknown, TStore = unknown> = (config: TConfig, driver: PersistenceDriver) => TStore | null;
7
- /**
8
- * An entry in the Store Registry.
9
- * Maps a context key to its factory function and metadata.
10
- */
11
- export interface StoreRegistryEntry<TConfig = unknown, TStore = unknown> {
12
- /** Unique key matching the RUNE_LAB_CONTEXT key (e.g., "theme", "language") */
13
- key: string;
14
- /** Factory function that creates the store */
15
- factory: StoreFactory<TConfig, TStore>;
16
- /** If true, the store is optional — null return from factory means "skip" */
17
- optional?: boolean;
18
- /** If true, the store does not use persistence at all */
19
- noPersistence?: boolean;
20
- }
@@ -1,3 +0,0 @@
1
- // sdk/state/src/registry/types.ts
2
- // Types for the Store Registry — the declarative store auto-wiring engine.
3
- export {};
@@ -1,121 +0,0 @@
1
- /**
2
- * Metadata for a keyboard shortcut
3
- */
4
- export interface ShortcutMeta {
5
- /** Unique dot-namespaced identifier (e.g. "rl:layout:toggle-nav") */
6
- id: string;
7
- /** Hotkeys.js-compatible key string (e.g. "ctrl+\\", "alt+down") */
8
- keys: string;
9
- /** Human-readable description shown in the Shortcut Palette */
10
- label: string;
11
- /** Display group within a scope (e.g. "Layout", "Navigation") */
12
- category: string;
13
- /** When the shortcut is eligible to fire */
14
- scope: "global" | "layout" | `panel:${string}`;
15
- /** Whether the shortcut is currently active in the execution engine */
16
- enabled?: boolean;
17
- /** Whether to hide the shortcut from the Shortcut Palette */
18
- hidden?: boolean;
19
- }
20
- /**
21
- * Descriptor for a keyboard shortcut with handler
22
- */
23
- export interface ShortcutEntry extends ShortcutMeta {
24
- /** The function to execute when the shortcut is triggered */
25
- handler: (event: KeyboardEvent) => void;
26
- }
27
- /**
28
- * Built-in layout shortcuts
29
- */
30
- export declare const LAYOUT_SHORTCUTS: {
31
- readonly TOGGLE_NAV: {
32
- readonly id: "rl:layout:toggle-nav";
33
- readonly keys: "ctrl+\\";
34
- readonly label: "Toggle Navigation Panel";
35
- readonly category: "Layout";
36
- readonly scope: "global";
37
- };
38
- readonly TOGGLE_DETAIL: {
39
- readonly id: "rl:layout:toggle-detail";
40
- readonly keys: "ctrl+shift+\\";
41
- readonly label: "Toggle Detail Panel";
42
- readonly category: "Layout";
43
- readonly scope: "global";
44
- };
45
- readonly OPEN_SHORTCUTS: {
46
- readonly id: "rl:shortcuts:open";
47
- readonly keys: "ctrl+/";
48
- readonly label: "Show Shortcut Palette";
49
- readonly category: "Help";
50
- readonly scope: "global";
51
- };
52
- readonly NAV_NEXT: {
53
- readonly id: "rl:nav:next-item";
54
- readonly keys: "alt+down";
55
- readonly label: "Next navigation item";
56
- readonly category: "Navigation";
57
- readonly scope: "panel:navigation";
58
- };
59
- readonly NAV_PREV: {
60
- readonly id: "rl:nav:prev-item";
61
- readonly keys: "alt+up";
62
- readonly label: "Previous navigation item";
63
- readonly category: "Navigation";
64
- readonly scope: "panel:navigation";
65
- };
66
- readonly NAV_EXPAND: {
67
- readonly id: "rl:nav:expand-section";
68
- readonly keys: "alt+right";
69
- readonly label: "Expand section";
70
- readonly category: "Navigation";
71
- readonly scope: "panel:navigation";
72
- };
73
- readonly NAV_COLLAPSE: {
74
- readonly id: "rl:nav:collapse-section";
75
- readonly keys: "alt+left";
76
- readonly label: "Collapse section";
77
- readonly category: "Navigation";
78
- readonly scope: "panel:navigation";
79
- };
80
- };
81
- export declare class ShortcutStore {
82
- /** All registered shortcuts */
83
- entries: ShortcutEntry[];
84
- /** Whether the shortcut palette is currently visible */
85
- showPalette: boolean;
86
- /** Subset of shortcuts that should be displayed in the palette */
87
- active: ShortcutEntry[];
88
- /** Grouped entries for display (scope -> category -> entries) */
89
- byScopeAndCategory: Record<string, Record<string, ShortcutEntry[]>>;
90
- /** Scopes sorted by importance (global first, then layout, then alphabetical) */
91
- sortedScopes: string[];
92
- /**
93
- * Register a new shortcut
94
- */
95
- register(entry: ShortcutEntry): void;
96
- /**
97
- * Unregister a shortcut by ID
98
- */
99
- unregister(id: string): void;
100
- /**
101
- * Enable a shortcut
102
- */
103
- enable(id: string): void;
104
- /**
105
- * Disable a shortcut
106
- */
107
- disable(id: string): void;
108
- /**
109
- * Find conflicts for a given key combo and scope
110
- */
111
- findConflicts(keys: string, scope: string): ShortcutEntry[];
112
- }
113
- /**
114
- * Svelte Action to listen for shortcuts registered in shortcutStore.
115
- * Applied to the root element of the layout.
116
- */
117
- export declare function shortcutListener(node: HTMLElement, shortcutStore: ShortcutStore): {
118
- destroy(): void;
119
- };
120
- export declare function createShortcutStore(): ShortcutStore;
121
- export declare function getShortcutStore(): ShortcutStore;
@@ -1,222 +0,0 @@
1
- import hotkeys from "hotkeys-js";
2
- import { getContext, untrack } from "svelte";
3
- import { RUNE_LAB_CONTEXT } from "./context.ts";
4
- import { DEV } from "esm-env";
5
- /**
6
- * Built-in layout shortcuts
7
- */
8
- export const LAYOUT_SHORTCUTS = {
9
- TOGGLE_NAV: {
10
- id: "rl:layout:toggle-nav",
11
- keys: "ctrl+\\",
12
- label: "Toggle Navigation Panel",
13
- category: "Layout",
14
- scope: "global",
15
- },
16
- TOGGLE_DETAIL: {
17
- id: "rl:layout:toggle-detail",
18
- keys: "ctrl+shift+\\",
19
- label: "Toggle Detail Panel",
20
- category: "Layout",
21
- scope: "global",
22
- },
23
- OPEN_SHORTCUTS: {
24
- id: "rl:shortcuts:open",
25
- keys: "ctrl+/",
26
- label: "Show Shortcut Palette",
27
- category: "Help",
28
- scope: "global",
29
- },
30
- NAV_NEXT: {
31
- id: "rl:nav:next-item",
32
- keys: "alt+down",
33
- label: "Next navigation item",
34
- category: "Navigation",
35
- scope: "panel:navigation",
36
- },
37
- NAV_PREV: {
38
- id: "rl:nav:prev-item",
39
- keys: "alt+up",
40
- label: "Previous navigation item",
41
- category: "Navigation",
42
- scope: "panel:navigation",
43
- },
44
- NAV_EXPAND: {
45
- id: "rl:nav:expand-section",
46
- keys: "alt+right",
47
- label: "Expand section",
48
- category: "Navigation",
49
- scope: "panel:navigation",
50
- },
51
- NAV_COLLAPSE: {
52
- id: "rl:nav:collapse-section",
53
- keys: "alt+left",
54
- label: "Collapse section",
55
- category: "Navigation",
56
- scope: "panel:navigation",
57
- },
58
- };
59
- export class ShortcutStore {
60
- /** All registered shortcuts */
61
- entries = $state([]);
62
- /** Whether the shortcut palette is currently visible */
63
- showPalette = $state(false);
64
- /** Subset of shortcuts that should be displayed in the palette */
65
- active = $derived(this.entries.filter((e) => e.enabled !== false && !e.hidden));
66
- /** Grouped entries for display (scope -> category -> entries) */
67
- byScopeAndCategory = $derived.by(() => {
68
- const groups = {};
69
- for (const entry of this.active) {
70
- const scope = entry.scope;
71
- const category = entry.category;
72
- if (!groups[scope])
73
- groups[scope] = {};
74
- if (!groups[scope][category])
75
- groups[scope][category] = [];
76
- groups[scope][category].push(entry);
77
- }
78
- return groups;
79
- });
80
- /** Scopes sorted by importance (global first, then layout, then alphabetical) */
81
- sortedScopes = $derived.by(() => {
82
- return Object.keys(this.byScopeAndCategory).sort((a, b) => {
83
- if (a === "global")
84
- return -1;
85
- if (b === "global")
86
- return 1;
87
- if (a === "layout")
88
- return -1;
89
- if (b === "layout")
90
- return 1;
91
- return a.localeCompare(b);
92
- });
93
- });
94
- /**
95
- * Register a new shortcut
96
- */
97
- register(entry) {
98
- untrack(() => {
99
- const existingIndex = this.entries.findIndex((e) => e.id === entry.id);
100
- if (existingIndex !== -1) {
101
- if (DEV) {
102
- console.warn(`[ShortcutStore] Overwriting shortcut ID "${entry.id}"`, {
103
- old: this.entries[existingIndex],
104
- new: entry,
105
- });
106
- }
107
- this.entries[existingIndex] = { enabled: true, ...entry };
108
- return;
109
- }
110
- // Check for collisions (keys + scope)
111
- const collision = this.entries.find((e) => e.keys === entry.keys && e.scope === entry.scope);
112
- if (collision && DEV) {
113
- console.warn(`[ShortcutStore] Collision detected for keys "${entry.keys}" in scope "${entry.scope}". ` +
114
- `ID "${entry.id}" will displace "${collision.id}".`);
115
- }
116
- this.entries.push({ enabled: true, ...entry });
117
- });
118
- }
119
- /**
120
- * Unregister a shortcut by ID
121
- */
122
- unregister(id) {
123
- untrack(() => {
124
- this.entries = this.entries.filter((e) => e.id !== id);
125
- });
126
- }
127
- /**
128
- * Enable a shortcut
129
- */
130
- enable(id) {
131
- untrack(() => {
132
- const entry = this.entries.find((e) => e.id === id);
133
- if (entry)
134
- entry.enabled = true;
135
- });
136
- }
137
- /**
138
- * Disable a shortcut
139
- */
140
- disable(id) {
141
- untrack(() => {
142
- const entry = this.entries.find((e) => e.id === id);
143
- if (entry)
144
- entry.enabled = false;
145
- });
146
- }
147
- /**
148
- * Find conflicts for a given key combo and scope
149
- */
150
- findConflicts(keys, scope) {
151
- return untrack(() => this.entries.filter((e) => e.keys === keys && e.scope === scope));
152
- }
153
- }
154
- /**
155
- * Svelte Action to listen for shortcuts registered in shortcutStore.
156
- * Applied to the root element of the layout.
157
- */
158
- export function shortcutListener(node, shortcutStore) {
159
- // Use $effect to reactively sync shortcuts
160
- const cleanup = $effect.root(() => {
161
- $effect(() => {
162
- // Unbind everything first to ensure clean state
163
- hotkeys.unbind();
164
- // We read entries here, so this effect re-runs when entries change.
165
- // That's exactly what we want.
166
- for (const entry of shortcutStore.entries) {
167
- if (entry.enabled === false)
168
- continue;
169
- hotkeys(entry.keys, "all", (event, _handler) => {
170
- // Scoping logic: check if the event target is within the required scope
171
- if (entry.scope === "global") {
172
- // Hotkeys.js already filters inputs by default
173
- entry.handler(event);
174
- }
175
- else if (entry.scope === "layout") {
176
- if (node.contains(event.target)) {
177
- entry.handler(event);
178
- }
179
- }
180
- else if (entry.scope.startsWith("panel:")) {
181
- const panelId = entry.scope.replace("panel:", "");
182
- const panel = node.querySelector(`[data-rl-panel="${panelId}"]`);
183
- if (panel && panel.contains(event.target)) {
184
- entry.handler(event);
185
- }
186
- }
187
- });
188
- }
189
- });
190
- // Helper to sync hotkeys-js scope with focus
191
- const handleFocusIn = (e) => {
192
- const target = e.target;
193
- const panel = target.closest("[data-rl-panel]");
194
- if (panel) {
195
- const scope = `panel:${panel.getAttribute("data-rl-panel")}`;
196
- hotkeys.setScope(scope);
197
- }
198
- else if (node.contains(target)) {
199
- hotkeys.setScope("layout");
200
- }
201
- else {
202
- hotkeys.setScope("global");
203
- }
204
- };
205
- globalThis.addEventListener("focusin", handleFocusIn);
206
- return () => {
207
- globalThis.removeEventListener("focusin", handleFocusIn);
208
- };
209
- });
210
- return {
211
- destroy() {
212
- cleanup();
213
- hotkeys.unbind();
214
- },
215
- };
216
- }
217
- export function createShortcutStore() {
218
- return new ShortcutStore();
219
- }
220
- export function getShortcutStore() {
221
- return getContext(RUNE_LAB_CONTEXT.shortcut);
222
- }
@@ -1,15 +0,0 @@
1
- import { type ConfigStore } from "./createConfigStore.svelte.ts";
2
- export interface Theme {
3
- name: string;
4
- icon: string;
5
- }
6
- import type { PersistenceDriver } from "@internal/core";
7
- export interface ThemeStoreOptions {
8
- driver?: PersistenceDriver | (() => PersistenceDriver | undefined);
9
- /** Additional custom themes to append to the built-in DaisyUI set */
10
- customThemes?: Theme[];
11
- /** Fallback theme if no persisted value exists (after system preference check) */
12
- defaultTheme?: string;
13
- }
14
- export declare function createThemeStore(driverOrOptions?: PersistenceDriver | (() => PersistenceDriver | undefined) | ThemeStoreOptions): ConfigStore<Theme>;
15
- export declare function getThemeStore(): ConfigStore<Theme>;