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
@@ -0,0 +1,56 @@
1
+ // sdk/ui/src/lib/features/config/APP_CONFIGURATIONS.ts
2
+ // Single source of truth for all configuration dimensions.
3
+ // Frozen at import time — must not be mutated at runtime.
4
+
5
+ /**
6
+ * Describes a single configuration dimension
7
+ * (e.g., theme, language, currency) for the generic selector system.
8
+ */
9
+ export interface ConfigDimension {
10
+ /** Unique key matching the RUNE_LAB_CONTEXT key */
11
+ readonly key: string;
12
+ /** Key used to look up the ConfigStore from context */
13
+ readonly storeKey: string;
14
+ /** Property name used as the item identifier */
15
+ readonly idKey: string;
16
+ /** Emoji used for display / logging */
17
+ readonly icon: string;
18
+ /** Human-readable label for settings panels */
19
+ readonly label: string;
20
+ }
21
+
22
+ /**
23
+ * All built-in configuration dimensions.
24
+ * Used by `AppSettingSelector` and settings panels to enumerate available
25
+ * config pickers without hard-coding them.
26
+ *
27
+ * @example
28
+ * ```svelte
29
+ * {#each APP_CONFIGURATIONS as dim}
30
+ * <ResourceSelector store={stores[dim.storeKey]} idKey={dim.idKey} ... />
31
+ * {/each}
32
+ * ```
33
+ */
34
+ export const APP_CONFIGURATIONS: readonly ConfigDimension[] = Object.freeze([
35
+ {
36
+ key: "theme",
37
+ storeKey: "theme",
38
+ idKey: "name",
39
+ icon: "🎨",
40
+ label: "Theme",
41
+ },
42
+ {
43
+ key: "language",
44
+ storeKey: "language",
45
+ idKey: "code",
46
+ icon: "🌍",
47
+ label: "Language",
48
+ },
49
+ {
50
+ key: "currency",
51
+ storeKey: "currency",
52
+ idKey: "code",
53
+ icon: "💰",
54
+ label: "Currency",
55
+ },
56
+ ]);
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { portal } from "../../actions/portal";
2
+ import { portal } from "@rune-lab/kernel";
3
3
  import { type Snippet } from "svelte";
4
4
 
5
5
  let {
@@ -1,6 +1,6 @@
1
1
  <!-- src/lib/features/layout/smart/ConnectedNavigationPanel.svelte -->
2
2
  <script lang="ts">
3
- import { getLayoutStore, type NavigationSection } from "@internal/state";
3
+ import { getLayoutStore, type NavigationSection } from "@rune-lab/kernel";
4
4
  import NavigationPanel from "./NavigationPanel.svelte";
5
5
  import { createNavigationConnection } from "./connection-factory.ts";
6
6
  import type { Snippet } from "svelte";
@@ -1,6 +1,6 @@
1
1
  <!-- src/lib/features/layout/smart/ConnectedWorkspaceStrip.svelte -->
2
2
  <script lang="ts">
3
- import { getLayoutStore, type WorkspaceItem } from "@internal/state";
3
+ import { getLayoutStore, type WorkspaceItem } from "@rune-lab/kernel";
4
4
  import WorkspaceStrip from "./WorkspaceStrip.svelte";
5
5
  import { createWorkspaceConnection } from "./connection-factory.ts";
6
6
  import type { Snippet } from "svelte";
@@ -0,0 +1,7 @@
1
+ <script lang="ts">
2
+ let { name, class: className = "" } = $props<{ name: string; class?: string }>();
3
+ </script>
4
+
5
+ <span class="material-symbols-outlined {className}">
6
+ {name}
7
+ </span>
@@ -1,16 +1,18 @@
1
1
  <script lang="ts">
2
2
  import ResourceSelector from "./ResourceSelector.svelte";
3
- import { getLanguageStore } from "@internal/state";
4
- import { setLocale } from "../../paraglide/runtime";
3
+ import { getLanguageStore } from "@rune-lab/kernel";
4
+ import { setLocale } from "@rune-lab/i18n/paraglide/runtime.js";
5
5
 
6
6
  const languageStore = getLanguageStore();
7
7
 
8
8
  let {
9
- languages: allowedLocales = languageStore.available.map((l) => l.code),
10
- current = $bindable(languageStore.current),
9
+ languages: allowedLocales = languageStore.available.map((l) =>
10
+ String(l.code),
11
+ ),
12
+ current = $bindable(String(languageStore.current)),
11
13
  onchange,
12
14
  }: {
13
- languages?: ReadonlyArray<string>;
15
+ languages?: string[];
14
16
  current?: string;
15
17
  onchange?: (value: string) => void;
16
18
  } = $props();
@@ -1,10 +1,7 @@
1
1
  <!-- src/lib/layout/NavigationPanel.svelte -->
2
2
  <script lang="ts">
3
3
  import type { Snippet } from "svelte";
4
- import type {
5
- NavigationItem,
6
- NavigationSection,
7
- } from "@internal/state";
4
+ import type { NavigationItem, NavigationSection } from "@rune-lab/kernel";
8
5
 
9
6
  let {
10
7
  header,
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import AppSettingSelector from "./AppSettingSelector.svelte";
3
- import type { ConfigStore } from "@internal/state";
4
- import * as rlMessages from "../../paraglide/messages.js";
3
+ import type { ConfigStore } from "@rune-lab/kernel";
4
+ import * as rlMessages from "@rune-lab/i18n/paraglide/messages.js";
5
5
  import { getContext, type Snippet } from "svelte";
6
6
 
7
7
  /**
@@ -62,9 +62,7 @@
62
62
  return key;
63
63
  }
64
64
 
65
- let active = $derived(
66
- store.get(store.current) ?? store.available[0],
67
- );
65
+ let active = $derived(store.get(store.current) ?? store.available[0]);
68
66
 
69
67
  let available = $derived(
70
68
  filterKeys.length > 0
@@ -1,12 +1,12 @@
1
1
  <script lang="ts">
2
2
  import ResourceSelector from "./ResourceSelector.svelte";
3
- import { getThemeStore, type Theme } from "@internal/state";
3
+ import { getThemeStore, type Theme } from "@rune-lab/kernel";
4
4
 
5
5
  const themeStore = getThemeStore();
6
6
 
7
7
  let {
8
8
  themes = [],
9
- current = $bindable(themeStore.current),
9
+ current = $bindable(String(themeStore.current)),
10
10
  onchange,
11
11
  }: {
12
12
  themes?: string[];
@@ -1,7 +1,7 @@
1
1
  <!-- src/lib/layout/WorkspaceLayout.svelte -->
2
2
  <script module lang="ts">
3
3
  import type { Snippet } from "svelte";
4
- import type { LayoutConfig } from "@internal/core";
4
+ import type { LayoutConfig } from "./types.ts";
5
5
 
6
6
  export interface WorkspaceLayoutProps {
7
7
  /** Content for the far-left vertical strip */
@@ -38,11 +38,13 @@
38
38
  <script lang="ts">
39
39
  import {
40
40
  getLayoutStore,
41
- getShortcutStore,
42
41
  getLanguageStore,
42
+ } from "./mod.ts";
43
+ import { LAYOUT_SHORTCUTS } from "./types.ts";
44
+ import {
45
+ getShortcutStore,
43
46
  shortcutListener,
44
- LAYOUT_SHORTCUTS,
45
- } from "@internal/state";
47
+ } from "@rune-lab/palettes";
46
48
  import { onMount } from "svelte";
47
49
 
48
50
  /**
@@ -1,7 +1,7 @@
1
1
  <!-- src/lib/layout/WorkspaceStrip.svelte -->
2
2
  <script lang="ts">
3
3
  import type { Snippet } from "svelte";
4
- import type { WorkspaceItem } from "@internal/state";
4
+ import type { WorkspaceItem } from "@rune-lab/kernel";
5
5
 
6
6
  let {
7
7
  items = [],
@@ -0,0 +1,95 @@
1
+ // sdk/ui/src/lib/layout/connection-factory.ts
2
+ // Connection functions that generate reactive prop bindings from LayoutStore.
3
+ // Svelte 5 doesn't support React-style HOCs — this is the idiomatic alternative.
4
+
5
+ import type { LayoutStore } from "./store.svelte.ts";
6
+
7
+ /**
8
+ * Reactive prop binding for the NavigationPanel component.
9
+ */
10
+ export interface NavigationConnection {
11
+ /** Currently active navigation item ID */
12
+ readonly activeId: string | null;
13
+ /** Set of collapsed section IDs */
14
+ readonly collapsedIds: Set<string>;
15
+ /** Handler for when a navigation item is selected */
16
+ onSelect: (item: { id?: string }) => void;
17
+ /** Handler for when a section is toggled */
18
+ onToggle: (id: string, isOpen: boolean) => void;
19
+ }
20
+
21
+ /**
22
+ * Reactive prop binding for the WorkspaceStrip component.
23
+ */
24
+ export interface WorkspaceConnection {
25
+ /** Currently active workspace ID */
26
+ readonly activeId: string | null;
27
+ /** Handler for when a workspace is selected */
28
+ onSelect: (id: string) => void;
29
+ }
30
+
31
+ /**
32
+ * Creates reactive prop bindings for connecting NavigationPanel to LayoutStore.
33
+ * Returns an object with getter properties that track LayoutStore state.
34
+ *
35
+ * @param layoutStore - The LayoutStore instance from context
36
+ * @returns Prop bindings compatible with NavigationPanel
37
+ *
38
+ * @example
39
+ * ```svelte
40
+ * <script>
41
+ * const layoutStore = getLayoutStore();
42
+ * const nav = createNavigationConnection(layoutStore);
43
+ * </script>
44
+ * <NavigationPanel {sections} activeId={nav.activeId} collapsedIds={nav.collapsedIds}
45
+ * onSelect={nav.onSelect} onToggle={nav.onToggle} />
46
+ * ```
47
+ */
48
+ export function createNavigationConnection(
49
+ layoutStore: Pick<
50
+ LayoutStore,
51
+ | "activeNavItemId"
52
+ | "collapsedSections"
53
+ | "navigate"
54
+ | "expandSection"
55
+ | "collapseSection"
56
+ >,
57
+ ): NavigationConnection {
58
+ return {
59
+ get activeId() {
60
+ return layoutStore.activeNavItemId;
61
+ },
62
+ get collapsedIds() {
63
+ return layoutStore.collapsedSections;
64
+ },
65
+ onSelect(item: { id?: string }) {
66
+ if (item.id) layoutStore.navigate(item.id);
67
+ },
68
+ onToggle(id: string, isOpen: boolean) {
69
+ if (isOpen) {
70
+ layoutStore.expandSection(id);
71
+ } else {
72
+ layoutStore.collapseSection(id);
73
+ }
74
+ },
75
+ };
76
+ }
77
+
78
+ /**
79
+ * Creates reactive prop bindings for connecting WorkspaceStrip to LayoutStore.
80
+ *
81
+ * @param layoutStore - The LayoutStore instance from context
82
+ * @returns Prop bindings compatible with WorkspaceStrip
83
+ */
84
+ export function createWorkspaceConnection(
85
+ layoutStore: Pick<LayoutStore, "activeWorkspaceId" | "activateWorkspace">,
86
+ ): WorkspaceConnection {
87
+ return {
88
+ get activeId() {
89
+ return layoutStore.activeWorkspaceId;
90
+ },
91
+ onSelect(id: string) {
92
+ layoutStore.activateWorkspace(id);
93
+ },
94
+ };
95
+ }
@@ -0,0 +1,44 @@
1
+ // sdk/state/src/language.svelte.ts
2
+
3
+ import {
4
+ type ConfigStore,
5
+ createConfigStore,
6
+ getLanguageStore,
7
+ } from "@rune-lab/kernel";
8
+ import type { Language } from "@rune-lab/kernel";
9
+
10
+ export type { Language };
11
+
12
+ export const LANGUAGES = [
13
+ // --- INDOEUROPEAS (Rama Romance / Latín) ---
14
+ { code: "es", flag: "🇲🇽" },
15
+ { code: "fr", flag: "🇫🇷" },
16
+ { code: "it", flag: "🇮🇹" },
17
+ { code: "pt", flag: "🇧🇷" },
18
+ // --- INDOEUROPEAS (Rama Germánica) ---
19
+ { code: "en", flag: "🇺🇸" },
20
+ { code: "de", flag: "🇩🇪" },
21
+ // --- INDOEUROPEAS (Otras Ramas) ---
22
+ { code: "ru", flag: "🇷🇺" },
23
+ { code: "hi", flag: "🇮🇳" },
24
+ // --- AFROASIÁTICAS ---
25
+ { code: "ar", flag: "🇸🇦" },
26
+ // --- FAMILIAS ASIÁTICAS INDEPENDIENTES ---
27
+ { code: "zh", flag: "🇨🇳" },
28
+ { code: "ja", flag: "🇯🇵" },
29
+ { code: "ko", flag: "🇰🇷" },
30
+ { code: "vi", flag: "🇻🇳" },
31
+ ] as const;
32
+
33
+ export const languageStore: ConfigStore<Language> = createConfigStore<Language>(
34
+ {
35
+ items: LANGUAGES,
36
+ storageKey: "language",
37
+ displayName: "Language",
38
+ idKey: "code",
39
+ icon: "🌍",
40
+ },
41
+ );
42
+
43
+ export type LanguageStore = ReturnType<typeof createConfigStore<Language>>;
44
+ export { getLanguageStore };
@@ -0,0 +1,71 @@
1
+ import { defineRune, RUNE_LAB_CONTEXT } from "@rune-lab/kernel";
2
+ import type { PersistenceDriver, RunePlugin } from "@rune-lab/kernel";
3
+ import { createLayoutStore } from "./store.svelte.ts";
4
+ import { type Theme, themeStore } from "./theme.svelte.ts";
5
+ import { languageStore } from "./language.svelte.ts";
6
+
7
+ export * from "./store.svelte.ts";
8
+ export * from "./types.ts";
9
+ export { default as WorkspaceLayout } from "./WorkspaceLayout.svelte";
10
+ export * from "./language.svelte.ts";
11
+ export * from "./theme.svelte.ts";
12
+ export * from "./APP_CONFIGURATIONS.ts";
13
+ export * from "./connection-factory.ts";
14
+ export { default as LanguageSelector } from "./LanguageSelector.svelte";
15
+ export { default as ThemeSelector } from "./ThemeSelector.svelte";
16
+ export { default as ResourceSelector } from "./ResourceSelector.svelte";
17
+ export { default as AppSettingSelector } from "./AppSettingSelector.svelte";
18
+ export { default as NavigationPanel } from "./NavigationPanel.svelte";
19
+ export { default as WorkspaceStrip } from "./WorkspaceStrip.svelte";
20
+ export { default as ContentArea } from "./ContentArea.svelte";
21
+ export { default as DetailPanel } from "./DetailPanel.svelte";
22
+ export { default as Icon } from "./Icon.svelte";
23
+
24
+ /**
25
+ * Layout Plugin — manages the primary workspace layout, theme, and language.
26
+ * Always included by default in RuneProvider.
27
+ */
28
+ export const LayoutPlugin: RunePlugin = defineRune({
29
+ id: "rune-lab.layout",
30
+ stores: [
31
+ {
32
+ id: "layout",
33
+ contextKey: RUNE_LAB_CONTEXT.layout,
34
+ factory: (_config: unknown, driver: PersistenceDriver) =>
35
+ createLayoutStore(driver),
36
+ },
37
+ {
38
+ id: "theme",
39
+ contextKey: RUNE_LAB_CONTEXT.theme,
40
+ factory: (config: unknown, _driver: PersistenceDriver) => {
41
+ const c = config as Record<string, unknown>;
42
+ if (c.customThemes) {
43
+ themeStore.addItems(c.customThemes as Theme[]);
44
+ }
45
+ if (
46
+ c.defaultTheme &&
47
+ !(themeStore as unknown as { current: unknown }).current
48
+ ) {
49
+ if (themeStore.get(c.defaultTheme as never)) {
50
+ themeStore.set(c.defaultTheme as never);
51
+ }
52
+ }
53
+ return themeStore;
54
+ },
55
+ },
56
+ {
57
+ id: "language",
58
+ contextKey: RUNE_LAB_CONTEXT.language,
59
+ factory: (config: unknown, _driver: PersistenceDriver) => {
60
+ const c = config as Record<string, unknown>;
61
+ if (c.locales) {
62
+ const localesToKeep = c.locales as string[];
63
+ languageStore.available = languageStore.available.filter(
64
+ (l) => localesToKeep.includes(l.code),
65
+ );
66
+ }
67
+ return languageStore;
68
+ },
69
+ },
70
+ ],
71
+ });
@@ -0,0 +1,142 @@
1
+ // src/lib/state/layout.svelte.ts
2
+ import { getLayoutStore } from "@rune-lab/kernel";
3
+ import type {
4
+ NavigationItem,
5
+ NavigationSection,
6
+ PersistenceDriver,
7
+ WorkspaceItem,
8
+ } from "@rune-lab/kernel";
9
+ import { resolveDriver } from "@rune-lab/kernel";
10
+
11
+ export type { NavigationItem, NavigationSection, WorkspaceItem };
12
+
13
+ export class LayoutStore {
14
+ workspaces: WorkspaceItem[] = $state<WorkspaceItem[]>([]);
15
+ activeWorkspaceId: string | null = $state<string | null>(null);
16
+ activeNavItemId: string | null = $state<string | null>(null);
17
+ navOpen: boolean = $state(true);
18
+ detailOpen: boolean = $state(false);
19
+ collapsedSections: Set<string> = $state<Set<string>>(new Set());
20
+
21
+ #storageNamespace = "default";
22
+ #initialized = false;
23
+ #driver: PersistenceDriver | undefined;
24
+
25
+ constructor(
26
+ driver?: PersistenceDriver | (() => PersistenceDriver | undefined),
27
+ ) {
28
+ // Use resolveDriver but allow undefined result for SSR/no-driver scenarios
29
+ this.#driver = driver ? resolveDriver(driver) : undefined;
30
+ }
31
+
32
+ init(options?: { namespace?: string; driver?: PersistenceDriver }) {
33
+ if (this.#initialized) return;
34
+ if (options?.namespace) this.#storageNamespace = options.namespace;
35
+ if (options?.driver) this.#driver = options.driver;
36
+
37
+ // If no driver was injected and no window (SSR), we just do nothing
38
+ if (!this.#driver && typeof window !== "undefined") {
39
+ this.#driver = {
40
+ get: (key: string) => localStorage.getItem(key),
41
+ set: (key: string, val: string) => localStorage.setItem(key, val),
42
+ remove: (key: string) => localStorage.removeItem(key),
43
+ };
44
+ }
45
+
46
+ if (this.#driver) {
47
+ const savedWorkspace = this.#driver.get(
48
+ `rl:layout:${this.#storageNamespace}:workspace`,
49
+ );
50
+ if (savedWorkspace) this.activeWorkspaceId = savedWorkspace;
51
+
52
+ const savedSections = this.#driver.get(
53
+ `rl:layout:${this.#storageNamespace}:sections`,
54
+ );
55
+ if (savedSections) {
56
+ try {
57
+ this.collapsedSections = new Set(JSON.parse(savedSections));
58
+ } catch (e) {
59
+ console.error("Failed to parse collapsed sections", e);
60
+ }
61
+ }
62
+ }
63
+
64
+ this.#initialized = true;
65
+
66
+ // Set up persistence effects
67
+ if (this.#driver) {
68
+ $effect.root(() => {
69
+ $effect(() => {
70
+ if (this.activeWorkspaceId) {
71
+ this.#driver?.set(
72
+ `rl:layout:${this.#storageNamespace}:workspace`,
73
+ this.activeWorkspaceId,
74
+ );
75
+ }
76
+ });
77
+
78
+ $effect(() => {
79
+ this.#driver?.set(
80
+ `rl:layout:${this.#storageNamespace}:sections`,
81
+ JSON.stringify([...this.collapsedSections]),
82
+ );
83
+ });
84
+ });
85
+ }
86
+ }
87
+
88
+ setWorkspaces(items: WorkspaceItem[]) {
89
+ this.workspaces = items;
90
+ if (items.length > 0 && !this.activeWorkspaceId) {
91
+ this.activeWorkspaceId = items[0].id;
92
+ }
93
+ }
94
+
95
+ activateWorkspace(id: string) {
96
+ this.activeWorkspaceId = id;
97
+ }
98
+
99
+ activateWorkspaceByIndex(index: number) {
100
+ const ws = this.workspaces[index];
101
+ if (ws) {
102
+ this.activateWorkspace(ws.id);
103
+ ws.onClick?.();
104
+ }
105
+ }
106
+
107
+ navigate(id: string) {
108
+ this.activeNavItemId = id;
109
+ }
110
+
111
+ toggleNav() {
112
+ this.navOpen = !this.navOpen;
113
+ }
114
+
115
+ toggleDetail() {
116
+ this.detailOpen = !this.detailOpen;
117
+ }
118
+
119
+ toggleSection(id: string) {
120
+ if (this.collapsedSections.has(id)) {
121
+ this.collapsedSections.delete(id);
122
+ } else {
123
+ this.collapsedSections.add(id);
124
+ }
125
+ }
126
+
127
+ collapseSection(id: string) {
128
+ this.collapsedSections.add(id);
129
+ }
130
+
131
+ expandSection(id: string) {
132
+ this.collapsedSections.delete(id);
133
+ }
134
+ }
135
+
136
+ export function createLayoutStore(
137
+ driver?: PersistenceDriver | (() => PersistenceDriver | undefined),
138
+ ): LayoutStore {
139
+ return new LayoutStore(driver);
140
+ }
141
+
142
+ export { getLayoutStore };
@@ -0,0 +1,73 @@
1
+ // @ts-nocheck: legacy daisyui imports and complex ConfigStore typing
2
+ // client/packages/ui/src/state/theme-config.svelte.ts
3
+
4
+ import { createConfigStore, getThemeStore } from "@rune-lab/kernel";
5
+ import type { Theme } from "@rune-lab/kernel";
6
+ import { BROWSER } from "esm-env";
7
+
8
+ export type { Theme };
9
+
10
+ // Icon map for known themes - unknown ones fall back to 🎨
11
+ const THEME_ICONS: Record<string, string> = {
12
+ light: "🌞",
13
+ dark: "🌙",
14
+ cupcake: "🧁",
15
+ bumblebee: "🐝",
16
+ emerald: "💚",
17
+ corporate: "🏢",
18
+ synthwave: "🌆",
19
+ retro: "📺",
20
+ cyberpunk: "🤖",
21
+ valentine: "💝",
22
+ halloween: "🎃",
23
+ garden: "🌷",
24
+ forest: "🌲",
25
+ aqua: "💧",
26
+ lofi: "🎵",
27
+ pastel: "🎨",
28
+ fantasy: "🔮",
29
+ wireframe: "📝",
30
+ black: "⚫",
31
+ luxury: "👑",
32
+ dracula: "🧛",
33
+ cmyk: "🖨️",
34
+ autumn: "🍂",
35
+ business: "💼",
36
+ acid: "🧪",
37
+ lemonade: "🍋",
38
+ night: "🌃",
39
+ coffee: "☕",
40
+ winter: "❄️",
41
+ dim: "🔅",
42
+ nord: "🧊",
43
+ sunset: "🌅",
44
+ caramellatte: "🍮",
45
+ abyss: "🌌",
46
+ silk: "🎀",
47
+ };
48
+
49
+ const THEMES: Theme[] = Object.keys(THEME_ICONS).map((name: string) => ({
50
+ name,
51
+ icon: THEME_ICONS[name] ?? "🎨",
52
+ }));
53
+
54
+ export const themeStore: ConfigStore<Theme> = createConfigStore<Theme>({
55
+ items: THEMES,
56
+ storageKey: "theme",
57
+ displayName: "Theme",
58
+ idKey: "name",
59
+ icon: "🎨",
60
+ });
61
+
62
+ // System preference detection — only if no persisted value was loaded
63
+ if (!themeStore.current && BROWSER) {
64
+ const prefersDark =
65
+ globalThis.matchMedia("(prefers-color-scheme: dark)").matches;
66
+ const systemDefault = prefersDark ? "dark" : "light";
67
+ if (themeStore.get(systemDefault as never)) {
68
+ themeStore.set(systemDefault as never);
69
+ }
70
+ }
71
+
72
+ export type ThemeStore = ReturnType<typeof createConfigStore<Theme>>;
73
+ export { getThemeStore };
@@ -0,0 +1,11 @@
1
+ // sdk/core/src/layout/types.ts
2
+ // Framework-agnostic layout configuration types.
3
+ // No Svelte dependency — `component` is typed as `unknown` (resolved by sdk/ui).
4
+
5
+ export type { LayoutConfig, LayoutZone } from "@rune-lab/kernel";
6
+
7
+ /**
8
+ * Standard layout shortcuts
9
+ * Re-exported from kernel
10
+ */
11
+ export { LAYOUT_SHORTCUTS } from "@rune-lab/kernel";
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "@rune-lab/palettes",
3
+ "version": "0.1.0",
4
+ "exports": "./mod.ts",
5
+ "imports": {
6
+ "hotkeys-js": "npm:hotkeys-js"
7
+ }
8
+ }
@@ -1,9 +1,9 @@
1
1
  <!-- src/client/sdk/ui/src/features/config/CommandPalette.svelte -->
2
2
  <script lang="ts">
3
- import { onMount, tick } from "svelte";
4
- import { getCommandStore, type Command } from "@internal/state";
5
- import { getShortcutStore } from "@internal/state";
6
- import { Icon } from "../../../mod";
3
+ import { tick } from "svelte";
4
+ import { getCommandStore, type Command } from "@rune-lab/kernel";
5
+ import { getShortcutStore } from "@rune-lab/kernel";
6
+ import { Icon } from "../../../layout/src/mod.ts";
7
7
 
8
8
  let { shortcutKey = "shift+k" } = $props<{ shortcutKey?: string }>();
9
9
 
@@ -0,0 +1,2 @@
1
+ export * from "./store.svelte.ts";
2
+ export { default as CommandPalette } from "./CommandPalette.svelte";