rune-lab 0.3.1 → 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 (397) hide show
  1. package/.gitignore +12 -0
  2. package/README.md +4 -4
  3. package/deno.json +50 -0
  4. package/justfile +5 -0
  5. package/package.json +3 -80
  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/src/kernel/src/persistence/provider.ts +58 -0
  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 +7 -8
  52. package/{dist/ui/layout → src/runes/layout/src}/ConnectedWorkspaceStrip.svelte +5 -3
  53. package/src/runes/layout/src/Icon.svelte +7 -0
  54. package/src/runes/layout/src/LanguageSelector.svelte +45 -0
  55. package/{dist/ui/layout → src/runes/layout/src}/NavigationPanel.svelte +1 -4
  56. package/src/runes/layout/src/ResourceSelector.svelte +90 -0
  57. package/src/runes/layout/src/ThemeSelector.svelte +50 -0
  58. package/{dist/ui/layout → src/runes/layout/src}/WorkspaceLayout.svelte +13 -3
  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/src/runes/plugins/money/src/CurrencySelector.svelte +41 -0
  82. package/src/runes/plugins/money/src/MoneyDisplay.svelte +142 -0
  83. package/src/runes/plugins/money/src/MoneyInput.svelte +208 -0
  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/src/runes/plugins/money/src/strategies.ts +95 -0
  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/index.d.ts +0 -4
  101. package/dist/core/index.d.ts.map +0 -1
  102. package/dist/core/index.js +0 -3
  103. package/dist/core/internal/message-resolver.d.ts +0 -42
  104. package/dist/core/internal/message-resolver.d.ts.map +0 -1
  105. package/dist/core/internal/message-resolver.js +0 -47
  106. package/dist/core/money/index.d.ts +0 -2
  107. package/dist/core/money/index.d.ts.map +0 -1
  108. package/dist/core/money/index.js +0 -2
  109. package/dist/core/money/money.d.ts +0 -57
  110. package/dist/core/money/money.d.ts.map +0 -1
  111. package/dist/core/money/money.js +0 -132
  112. package/dist/core/persistence/types.d.ts +0 -18
  113. package/dist/core/persistence/types.d.ts.map +0 -1
  114. package/dist/core/persistence/types.js +0 -2
  115. package/dist/index.d.ts +0 -5
  116. package/dist/index.js +0 -5
  117. package/dist/state/api.svelte.d.ts +0 -26
  118. package/dist/state/api.svelte.js +0 -65
  119. package/dist/state/app.svelte.d.ts +0 -48
  120. package/dist/state/app.svelte.js +0 -82
  121. package/dist/state/auth/index.d.ts +0 -2
  122. package/dist/state/auth/index.js +0 -2
  123. package/dist/state/auth/session.svelte.d.ts +0 -40
  124. package/dist/state/auth/session.svelte.js +0 -57
  125. package/dist/state/auth/types.d.ts +0 -30
  126. package/dist/state/auth/types.js +0 -3
  127. package/dist/state/cart.svelte.d.ts +0 -64
  128. package/dist/state/cart.svelte.js +0 -122
  129. package/dist/state/commands.svelte.d.ts +0 -46
  130. package/dist/state/commands.svelte.js +0 -62
  131. package/dist/state/composables/useMoney.d.ts +0 -15
  132. package/dist/state/composables/useMoney.js +0 -62
  133. package/dist/state/composables/usePersistence.d.ts +0 -2
  134. package/dist/state/composables/usePersistence.js +0 -5
  135. package/dist/state/composables/useRuneLab.d.ts +0 -19
  136. package/dist/state/composables/useRuneLab.js +0 -30
  137. package/dist/state/context.d.ts +0 -14
  138. package/dist/state/context.js +0 -15
  139. package/dist/state/createConfigStore.svelte.d.ts +0 -55
  140. package/dist/state/createConfigStore.svelte.js +0 -61
  141. package/dist/state/currency.svelte.d.ts +0 -28
  142. package/dist/state/currency.svelte.js +0 -80
  143. package/dist/state/daisyui.d.ts +0 -4
  144. package/dist/state/index.d.ts +0 -19
  145. package/dist/state/index.js +0 -25
  146. package/dist/state/language.svelte.d.ts +0 -64
  147. package/dist/state/language.svelte.js +0 -44
  148. package/dist/state/layout.svelte.d.ts +0 -49
  149. package/dist/state/layout.svelte.js +0 -108
  150. package/dist/state/persistence/drivers.d.ts +0 -12
  151. package/dist/state/persistence/drivers.js +0 -73
  152. package/dist/state/shortcuts.svelte.d.ts +0 -121
  153. package/dist/state/shortcuts.svelte.js +0 -222
  154. package/dist/state/theme.svelte.d.ts +0 -22
  155. package/dist/state/theme.svelte.js +0 -92
  156. package/dist/state/toast-bridge.d.ts +0 -29
  157. package/dist/state/toast-bridge.js +0 -43
  158. package/dist/state/toast.svelte.d.ts +0 -27
  159. package/dist/state/toast.svelte.js +0 -43
  160. package/dist/ui/actions/portal.d.ts +0 -7
  161. package/dist/ui/actions/portal.js +0 -32
  162. package/dist/ui/components/ApiMonitor.svelte +0 -162
  163. package/dist/ui/components/ApiMonitor.svelte.d.ts +0 -3
  164. package/dist/ui/components/Icon.svelte +0 -108
  165. package/dist/ui/components/Icon.svelte.d.ts +0 -14
  166. package/dist/ui/components/Kyntharil.svelte +0 -48
  167. package/dist/ui/components/Kyntharil.svelte.d.ts +0 -6
  168. package/dist/ui/components/RuneProvider.svelte +0 -198
  169. package/dist/ui/components/RuneProvider.svelte.d.ts +0 -42
  170. package/dist/ui/components/Toaster.svelte.d.ts +0 -18
  171. package/dist/ui/components/money/MoneyDisplay.svelte +0 -69
  172. package/dist/ui/components/money/MoneyDisplay.svelte.d.ts +0 -21
  173. package/dist/ui/components/money/MoneyDisplay.svelte.test.d.ts +0 -1
  174. package/dist/ui/components/money/MoneyDisplay.svelte.test.js +0 -74
  175. package/dist/ui/components/money/MoneyInput.svelte +0 -131
  176. package/dist/ui/components/money/MoneyInput.svelte.d.ts +0 -25
  177. package/dist/ui/components/money/index.d.ts +0 -2
  178. package/dist/ui/components/money/index.js +0 -3
  179. package/dist/ui/components/user/UserAvatar.svelte +0 -66
  180. package/dist/ui/components/user/UserAvatar.svelte.d.ts +0 -13
  181. package/dist/ui/components/user/UserProfile.svelte +0 -79
  182. package/dist/ui/components/user/UserProfile.svelte.d.ts +0 -17
  183. package/dist/ui/components/user/index.d.ts +0 -2
  184. package/dist/ui/components/user/index.js +0 -3
  185. package/dist/ui/features/command-palette/CommandPalette.svelte.d.ts +0 -6
  186. package/dist/ui/features/config/AppSettingSelector.svelte.d.ts +0 -13
  187. package/dist/ui/features/config/CurrencySelector.svelte +0 -67
  188. package/dist/ui/features/config/CurrencySelector.svelte.d.ts +0 -8
  189. package/dist/ui/features/config/LanguageSelector.svelte +0 -66
  190. package/dist/ui/features/config/LanguageSelector.svelte.d.ts +0 -8
  191. package/dist/ui/features/config/ThemeSelector.svelte +0 -73
  192. package/dist/ui/features/config/ThemeSelector.svelte.d.ts +0 -8
  193. package/dist/ui/features/notifications/NotificationBell.svelte.d.ts +0 -11
  194. package/dist/ui/features/notifications/index.d.ts +0 -1
  195. package/dist/ui/features/notifications/index.js +0 -2
  196. package/dist/ui/features/shortcuts/ShortcutPalette.svelte.d.ts +0 -6
  197. package/dist/ui/index.d.ts +0 -26
  198. package/dist/ui/index.js +0 -41
  199. package/dist/ui/layout/ConnectedNavigationPanel.svelte.d.ts +0 -10
  200. package/dist/ui/layout/ConnectedWorkspaceStrip.svelte.d.ts +0 -9
  201. package/dist/ui/layout/ContentArea.svelte.d.ts +0 -8
  202. package/dist/ui/layout/DetailPanel.svelte.d.ts +0 -7
  203. package/dist/ui/layout/NavigationPanel.svelte.d.ts +0 -14
  204. package/dist/ui/layout/WorkspaceLayout.svelte.d.ts +0 -25
  205. package/dist/ui/layout/WorkspaceStrip.svelte.d.ts +0 -11
  206. package/dist/ui/layout/index.d.ts +0 -7
  207. package/dist/ui/layout/index.js +0 -7
  208. package/dist/ui/paraglide/README.md +0 -94
  209. package/dist/ui/paraglide/messages/_index.d.ts +0 -87
  210. package/dist/ui/paraglide/messages/_index.js +0 -88
  211. package/dist/ui/paraglide/messages/abyss.d.ts +0 -16
  212. package/dist/ui/paraglide/messages/abyss.js +0 -84
  213. package/dist/ui/paraglide/messages/acid.d.ts +0 -16
  214. package/dist/ui/paraglide/messages/acid.js +0 -84
  215. package/dist/ui/paraglide/messages/active_toasts.d.ts +0 -16
  216. package/dist/ui/paraglide/messages/active_toasts.js +0 -84
  217. package/dist/ui/paraglide/messages/aed3.d.ts +0 -17
  218. package/dist/ui/paraglide/messages/aed3.js +0 -85
  219. package/dist/ui/paraglide/messages/all_currencies.d.ts +0 -16
  220. package/dist/ui/paraglide/messages/all_currencies.js +0 -84
  221. package/dist/ui/paraglide/messages/all_languages.d.ts +0 -16
  222. package/dist/ui/paraglide/messages/all_languages.js +0 -84
  223. package/dist/ui/paraglide/messages/all_themes.d.ts +0 -16
  224. package/dist/ui/paraglide/messages/all_themes.js +0 -84
  225. package/dist/ui/paraglide/messages/api_status.d.ts +0 -16
  226. package/dist/ui/paraglide/messages/api_status.js +0 -84
  227. package/dist/ui/paraglide/messages/app_info.d.ts +0 -16
  228. package/dist/ui/paraglide/messages/app_info.js +0 -84
  229. package/dist/ui/paraglide/messages/appearance.d.ts +0 -16
  230. package/dist/ui/paraglide/messages/appearance.js +0 -84
  231. package/dist/ui/paraglide/messages/aqua.d.ts +0 -16
  232. package/dist/ui/paraglide/messages/aqua.js +0 -84
  233. package/dist/ui/paraglide/messages/ar.d.ts +0 -16
  234. package/dist/ui/paraglide/messages/ar.js +0 -84
  235. package/dist/ui/paraglide/messages/autumn.d.ts +0 -16
  236. package/dist/ui/paraglide/messages/autumn.js +0 -84
  237. package/dist/ui/paraglide/messages/black.d.ts +0 -16
  238. package/dist/ui/paraglide/messages/black.js +0 -84
  239. package/dist/ui/paraglide/messages/brl3.d.ts +0 -17
  240. package/dist/ui/paraglide/messages/brl3.js +0 -85
  241. package/dist/ui/paraglide/messages/bumblebee.d.ts +0 -16
  242. package/dist/ui/paraglide/messages/bumblebee.js +0 -84
  243. package/dist/ui/paraglide/messages/business.d.ts +0 -16
  244. package/dist/ui/paraglide/messages/business.js +0 -84
  245. package/dist/ui/paraglide/messages/cad3.d.ts +0 -17
  246. package/dist/ui/paraglide/messages/cad3.js +0 -85
  247. package/dist/ui/paraglide/messages/caramellatte.d.ts +0 -16
  248. package/dist/ui/paraglide/messages/caramellatte.js +0 -84
  249. package/dist/ui/paraglide/messages/cmyk.d.ts +0 -16
  250. package/dist/ui/paraglide/messages/cmyk.js +0 -84
  251. package/dist/ui/paraglide/messages/cny3.d.ts +0 -17
  252. package/dist/ui/paraglide/messages/cny3.js +0 -85
  253. package/dist/ui/paraglide/messages/coffee.d.ts +0 -16
  254. package/dist/ui/paraglide/messages/coffee.js +0 -84
  255. package/dist/ui/paraglide/messages/commands_label.d.ts +0 -16
  256. package/dist/ui/paraglide/messages/commands_label.js +0 -84
  257. package/dist/ui/paraglide/messages/corporate.d.ts +0 -16
  258. package/dist/ui/paraglide/messages/corporate.js +0 -84
  259. package/dist/ui/paraglide/messages/cupcake.d.ts +0 -16
  260. package/dist/ui/paraglide/messages/cupcake.js +0 -84
  261. package/dist/ui/paraglide/messages/currency.d.ts +0 -16
  262. package/dist/ui/paraglide/messages/currency.js +0 -84
  263. package/dist/ui/paraglide/messages/current_currency.d.ts +0 -16
  264. package/dist/ui/paraglide/messages/current_currency.js +0 -84
  265. package/dist/ui/paraglide/messages/current_language.d.ts +0 -16
  266. package/dist/ui/paraglide/messages/current_language.js +0 -84
  267. package/dist/ui/paraglide/messages/current_theme.d.ts +0 -16
  268. package/dist/ui/paraglide/messages/current_theme.js +0 -84
  269. package/dist/ui/paraglide/messages/currently_in_queue.d.ts +0 -16
  270. package/dist/ui/paraglide/messages/currently_in_queue.js +0 -84
  271. package/dist/ui/paraglide/messages/cyberpunk.d.ts +0 -16
  272. package/dist/ui/paraglide/messages/cyberpunk.js +0 -84
  273. package/dist/ui/paraglide/messages/dark.d.ts +0 -16
  274. package/dist/ui/paraglide/messages/dark.js +0 -84
  275. package/dist/ui/paraglide/messages/de.d.ts +0 -16
  276. package/dist/ui/paraglide/messages/de.js +0 -84
  277. package/dist/ui/paraglide/messages/dim.d.ts +0 -16
  278. package/dist/ui/paraglide/messages/dim.js +0 -84
  279. package/dist/ui/paraglide/messages/dracula.d.ts +0 -16
  280. package/dist/ui/paraglide/messages/dracula.js +0 -84
  281. package/dist/ui/paraglide/messages/emerald.d.ts +0 -16
  282. package/dist/ui/paraglide/messages/emerald.js +0 -84
  283. package/dist/ui/paraglide/messages/en.d.ts +0 -16
  284. package/dist/ui/paraglide/messages/en.js +0 -84
  285. package/dist/ui/paraglide/messages/es.d.ts +0 -16
  286. package/dist/ui/paraglide/messages/es.js +0 -84
  287. package/dist/ui/paraglide/messages/eur3.d.ts +0 -17
  288. package/dist/ui/paraglide/messages/eur3.js +0 -85
  289. package/dist/ui/paraglide/messages/extended_controls.d.ts +0 -16
  290. package/dist/ui/paraglide/messages/extended_controls.js +0 -84
  291. package/dist/ui/paraglide/messages/fantasy.d.ts +0 -16
  292. package/dist/ui/paraglide/messages/fantasy.js +0 -84
  293. package/dist/ui/paraglide/messages/forest.d.ts +0 -16
  294. package/dist/ui/paraglide/messages/forest.js +0 -84
  295. package/dist/ui/paraglide/messages/fr.d.ts +0 -16
  296. package/dist/ui/paraglide/messages/fr.js +0 -84
  297. package/dist/ui/paraglide/messages/garden.d.ts +0 -16
  298. package/dist/ui/paraglide/messages/garden.js +0 -84
  299. package/dist/ui/paraglide/messages/gbp3.d.ts +0 -17
  300. package/dist/ui/paraglide/messages/gbp3.js +0 -85
  301. package/dist/ui/paraglide/messages/halloween.d.ts +0 -16
  302. package/dist/ui/paraglide/messages/halloween.js +0 -84
  303. package/dist/ui/paraglide/messages/hello_world.d.ts +0 -18
  304. package/dist/ui/paraglide/messages/hello_world.js +0 -84
  305. package/dist/ui/paraglide/messages/hi.d.ts +0 -16
  306. package/dist/ui/paraglide/messages/hi.js +0 -84
  307. package/dist/ui/paraglide/messages/inr3.d.ts +0 -17
  308. package/dist/ui/paraglide/messages/inr3.js +0 -85
  309. package/dist/ui/paraglide/messages/it.d.ts +0 -16
  310. package/dist/ui/paraglide/messages/it.js +0 -84
  311. package/dist/ui/paraglide/messages/ja.d.ts +0 -16
  312. package/dist/ui/paraglide/messages/ja.js +0 -84
  313. package/dist/ui/paraglide/messages/jpy3.d.ts +0 -17
  314. package/dist/ui/paraglide/messages/jpy3.js +0 -85
  315. package/dist/ui/paraglide/messages/ko.d.ts +0 -16
  316. package/dist/ui/paraglide/messages/ko.js +0 -84
  317. package/dist/ui/paraglide/messages/krw3.d.ts +0 -17
  318. package/dist/ui/paraglide/messages/krw3.js +0 -85
  319. package/dist/ui/paraglide/messages/languages.d.ts +0 -16
  320. package/dist/ui/paraglide/messages/languages.js +0 -84
  321. package/dist/ui/paraglide/messages/lemonade.d.ts +0 -16
  322. package/dist/ui/paraglide/messages/lemonade.js +0 -84
  323. package/dist/ui/paraglide/messages/light.d.ts +0 -16
  324. package/dist/ui/paraglide/messages/light.js +0 -84
  325. package/dist/ui/paraglide/messages/live_store_dashboard.d.ts +0 -16
  326. package/dist/ui/paraglide/messages/live_store_dashboard.js +0 -84
  327. package/dist/ui/paraglide/messages/localization.d.ts +0 -16
  328. package/dist/ui/paraglide/messages/localization.js +0 -84
  329. package/dist/ui/paraglide/messages/lofi.d.ts +0 -16
  330. package/dist/ui/paraglide/messages/lofi.js +0 -84
  331. package/dist/ui/paraglide/messages/luxury.d.ts +0 -16
  332. package/dist/ui/paraglide/messages/luxury.js +0 -84
  333. package/dist/ui/paraglide/messages/mxn3.d.ts +0 -17
  334. package/dist/ui/paraglide/messages/mxn3.js +0 -85
  335. package/dist/ui/paraglide/messages/name_label.d.ts +0 -16
  336. package/dist/ui/paraglide/messages/name_label.js +0 -84
  337. package/dist/ui/paraglide/messages/night.d.ts +0 -16
  338. package/dist/ui/paraglide/messages/night.js +0 -84
  339. package/dist/ui/paraglide/messages/nord.d.ts +0 -16
  340. package/dist/ui/paraglide/messages/nord.js +0 -84
  341. package/dist/ui/paraglide/messages/pastel.d.ts +0 -16
  342. package/dist/ui/paraglide/messages/pastel.js +0 -84
  343. package/dist/ui/paraglide/messages/pt.d.ts +0 -16
  344. package/dist/ui/paraglide/messages/pt.js +0 -84
  345. package/dist/ui/paraglide/messages/real_time_monitor_desc.d.ts +0 -16
  346. package/dist/ui/paraglide/messages/real_time_monitor_desc.js +0 -84
  347. package/dist/ui/paraglide/messages/registered_in_registry.d.ts +0 -16
  348. package/dist/ui/paraglide/messages/registered_in_registry.js +0 -84
  349. package/dist/ui/paraglide/messages/retro.d.ts +0 -16
  350. package/dist/ui/paraglide/messages/retro.js +0 -84
  351. package/dist/ui/paraglide/messages/ru.d.ts +0 -16
  352. package/dist/ui/paraglide/messages/ru.js +0 -84
  353. package/dist/ui/paraglide/messages/silk.d.ts +0 -16
  354. package/dist/ui/paraglide/messages/silk.js +0 -84
  355. package/dist/ui/paraglide/messages/state_label.d.ts +0 -16
  356. package/dist/ui/paraglide/messages/state_label.js +0 -84
  357. package/dist/ui/paraglide/messages/sunset.d.ts +0 -16
  358. package/dist/ui/paraglide/messages/sunset.js +0 -84
  359. package/dist/ui/paraglide/messages/synthwave.d.ts +0 -16
  360. package/dist/ui/paraglide/messages/synthwave.js +0 -84
  361. package/dist/ui/paraglide/messages/system.d.ts +0 -16
  362. package/dist/ui/paraglide/messages/system.js +0 -84
  363. package/dist/ui/paraglide/messages/theme.d.ts +0 -16
  364. package/dist/ui/paraglide/messages/theme.js +0 -84
  365. package/dist/ui/paraglide/messages/themes.d.ts +0 -16
  366. package/dist/ui/paraglide/messages/themes.js +0 -84
  367. package/dist/ui/paraglide/messages/url_label.d.ts +0 -16
  368. package/dist/ui/paraglide/messages/url_label.js +0 -84
  369. package/dist/ui/paraglide/messages/usd3.d.ts +0 -17
  370. package/dist/ui/paraglide/messages/usd3.js +0 -85
  371. package/dist/ui/paraglide/messages/valentine.d.ts +0 -16
  372. package/dist/ui/paraglide/messages/valentine.js +0 -84
  373. package/dist/ui/paraglide/messages/version_label.d.ts +0 -16
  374. package/dist/ui/paraglide/messages/version_label.js +0 -84
  375. package/dist/ui/paraglide/messages/vi.d.ts +0 -16
  376. package/dist/ui/paraglide/messages/vi.js +0 -84
  377. package/dist/ui/paraglide/messages/winter.d.ts +0 -16
  378. package/dist/ui/paraglide/messages/winter.js +0 -84
  379. package/dist/ui/paraglide/messages/wireframe.d.ts +0 -16
  380. package/dist/ui/paraglide/messages/wireframe.js +0 -84
  381. package/dist/ui/paraglide/messages/zh.d.ts +0 -16
  382. package/dist/ui/paraglide/messages/zh.js +0 -84
  383. package/dist/ui/paraglide/messages.d.ts +0 -2
  384. package/dist/ui/paraglide/messages.js +0 -4
  385. package/dist/ui/paraglide/registry.d.ts +0 -21
  386. package/dist/ui/paraglide/registry.js +0 -31
  387. package/dist/ui/paraglide/runtime.d.ts +0 -749
  388. package/dist/ui/paraglide/runtime.js +0 -1777
  389. package/dist/ui/paraglide/server.d.ts +0 -103
  390. package/dist/ui/paraglide/server.js +0 -248
  391. package/dist/ui/primitives/DatePicker.svelte +0 -257
  392. package/dist/ui/primitives/DatePicker.svelte.d.ts +0 -17
  393. package/dist/ui/primitives/index.d.ts +0 -1
  394. package/dist/ui/primitives/index.js +0 -3
  395. /package/{dist/ui/layout → src/runes/layout/src}/ContentArea.svelte +0 -0
  396. /package/{dist/ui/layout → src/runes/layout/src}/DetailPanel.svelte +0 -0
  397. /package/{dist/ui/features → src/runes/palettes/src}/notifications/NotificationBell.svelte +0 -0
@@ -1,64 +0,0 @@
1
- import type { PersistenceDriver } from "rune-lab/core";
2
- /**
3
- * Configuration for creating a CartStore
4
- */
5
- export interface CartStoreConfig<T> {
6
- /** Extract a unique identifier from an item */
7
- idExtractor: (item: T) => string;
8
- /** Extract the price (in minor units / cents) from an item */
9
- priceExtractor: (item: T) => number;
10
- /** Optional persistence driver for cart recovery */
11
- driver?: PersistenceDriver;
12
- /** Storage key for persistence */
13
- storageKey?: string;
14
- }
15
- export interface CartEntry<T> {
16
- item: T;
17
- qty: number;
18
- }
19
- /**
20
- * Generic cart store factory.
21
- * Works with any item type via extractors.
22
- *
23
- * **Note**: Consumers must call `setContext(RUNE_LAB_CONTEXT.cart, store)` manually
24
- * since CartStore is app-specific (needs `idExtractor` and `priceExtractor`).
25
- * RuneProvider can optionally wire it via `config.cart`.
26
- *
27
- * Usage:
28
- * const cart = createCartStore<Property>({
29
- * idExtractor: (p) => p.id,
30
- * priceExtractor: (p) => p.price,
31
- * });
32
- * cart.add(someProperty);
33
- * cart.totalPrice; // sum of all items * qty in minor units
34
- */
35
- export declare function createCartStore<T>(config: CartStoreConfig<T>): {
36
- /** All cart entries */
37
- readonly items: CartEntry<T>[];
38
- /** Total number of items (sum of quantities) */
39
- readonly totalItems: number;
40
- /** Total price in minor units */
41
- readonly totalPrice: number;
42
- /** Whether the cart is empty */
43
- readonly isEmpty: boolean;
44
- /** Add an item (or increment quantity if already present) */
45
- add(item: T, qty?: number): void;
46
- /** Remove an item entirely */
47
- remove(id: string): void;
48
- /** Update the quantity of an item (removes if qty ≤ 0) */
49
- updateQty(id: string, qty: number): void;
50
- /** Clear all items */
51
- clear(): void;
52
- /** Check if an item is in the cart */
53
- has(id: string): boolean;
54
- /** Get a specific entry by ID */
55
- getEntry(id: string): CartEntry<T> | undefined;
56
- };
57
- /** Return type of createCartStore for context typing */
58
- export type CartStore<T = unknown> = ReturnType<typeof createCartStore<T>>;
59
- /**
60
- * Get CartStore from Svelte context.
61
- * Only works if the consuming app has called setContext(RUNE_LAB_CONTEXT.cart, store)
62
- * or passed a cart config to RuneProvider.
63
- */
64
- export declare function getCartStore<T = unknown>(): CartStore<T>;
@@ -1,122 +0,0 @@
1
- // sdk/state/src/cart.svelte.ts
2
- // Generic cart store factory — business-agnostic add/remove/total pattern.
3
- import { getContext } from "svelte";
4
- import { RUNE_LAB_CONTEXT } from "./context";
5
- import { DEV } from "esm-env";
6
- /**
7
- * Generic cart store factory.
8
- * Works with any item type via extractors.
9
- *
10
- * **Note**: Consumers must call `setContext(RUNE_LAB_CONTEXT.cart, store)` manually
11
- * since CartStore is app-specific (needs `idExtractor` and `priceExtractor`).
12
- * RuneProvider can optionally wire it via `config.cart`.
13
- *
14
- * Usage:
15
- * const cart = createCartStore<Property>({
16
- * idExtractor: (p) => p.id,
17
- * priceExtractor: (p) => p.price,
18
- * });
19
- * cart.add(someProperty);
20
- * cart.totalPrice; // sum of all items * qty in minor units
21
- */
22
- export function createCartStore(config) {
23
- const { idExtractor, priceExtractor, driver, storageKey = "cart", } = config;
24
- // Internal entries store — using a plain array for correct serialization
25
- let _entries = $state([]);
26
- /** Lookup by ID */
27
- function _findIndex(id) {
28
- return _entries.findIndex((e) => idExtractor(e.item) === id);
29
- }
30
- /** @internal Persist current state (Map serialized as Array) */
31
- function _persist() {
32
- if (!driver)
33
- return;
34
- try {
35
- const data = _entries.map((entry) => ({
36
- id: idExtractor(entry.item),
37
- qty: entry.qty,
38
- }));
39
- driver.set(storageKey, JSON.stringify(data));
40
- }
41
- catch {
42
- // Persistence is best-effort
43
- }
44
- }
45
- return {
46
- /** All cart entries */
47
- get items() {
48
- return _entries;
49
- },
50
- /** Total number of items (sum of quantities) */
51
- get totalItems() {
52
- let total = 0;
53
- for (const entry of _entries)
54
- total += entry.qty;
55
- return total;
56
- },
57
- /** Total price in minor units */
58
- get totalPrice() {
59
- let total = 0;
60
- for (const entry of _entries) {
61
- total += priceExtractor(entry.item) * entry.qty;
62
- }
63
- return total;
64
- },
65
- /** Whether the cart is empty */
66
- get isEmpty() {
67
- return _entries.length === 0;
68
- },
69
- /** Add an item (or increment quantity if already present) */
70
- add(item, qty = 1) {
71
- const id = idExtractor(item);
72
- const idx = _findIndex(id);
73
- if (idx >= 0) {
74
- _entries[idx] = { ..._entries[idx], qty: _entries[idx].qty + qty };
75
- }
76
- else {
77
- _entries = [..._entries, { item, qty }];
78
- }
79
- _persist();
80
- if (DEV)
81
- console.log(`🛒 Added ${id} (qty: ${qty})`);
82
- },
83
- /** Remove an item entirely */
84
- remove(id) {
85
- _entries = _entries.filter((e) => idExtractor(e.item) !== id);
86
- _persist();
87
- },
88
- /** Update the quantity of an item (removes if qty ≤ 0) */
89
- updateQty(id, qty) {
90
- if (qty <= 0) {
91
- this.remove(id);
92
- return;
93
- }
94
- const idx = _findIndex(id);
95
- if (idx >= 0) {
96
- _entries[idx] = { ..._entries[idx], qty };
97
- _persist();
98
- }
99
- },
100
- /** Clear all items */
101
- clear() {
102
- _entries = [];
103
- _persist();
104
- },
105
- /** Check if an item is in the cart */
106
- has(id) {
107
- return _findIndex(id) >= 0;
108
- },
109
- /** Get a specific entry by ID */
110
- getEntry(id) {
111
- return _entries.find((e) => idExtractor(e.item) === id);
112
- },
113
- };
114
- }
115
- /**
116
- * Get CartStore from Svelte context.
117
- * Only works if the consuming app has called setContext(RUNE_LAB_CONTEXT.cart, store)
118
- * or passed a cart config to RuneProvider.
119
- */
120
- export function getCartStore() {
121
- return getContext(RUNE_LAB_CONTEXT.cart);
122
- }
@@ -1,46 +0,0 @@
1
- import type { AppStore } from "./app.svelte";
2
- import type { ApiStore } from "./api.svelte";
3
- import type { ConfigStore } from "./createConfigStore.svelte";
4
- import type { ToastStore } from "./toast.svelte";
5
- import type { Theme } from "./theme.svelte";
6
- import type { Language } from "./language.svelte";
7
- import type { Currency } from "./currency.svelte";
8
- /**
9
- * Command Palette Store
10
- */
11
- export interface Command {
12
- id: string;
13
- label: string;
14
- category?: string;
15
- icon?: string;
16
- action?: () => void;
17
- children?: Command[];
18
- }
19
- export interface CommandServices {
20
- appStore: AppStore;
21
- apiStore: ApiStore;
22
- toastStore: ToastStore;
23
- themeStore: ConfigStore<Theme>;
24
- languageStore: ConfigStore<Language>;
25
- currencyStore: ConfigStore<Currency>;
26
- }
27
- export declare class CommandStore {
28
- #private;
29
- constructor(services: CommandServices);
30
- commands: Command[];
31
- refreshDefaultCommands(): void;
32
- /**
33
- * Register a new command
34
- */
35
- register(command: Command): void;
36
- /**
37
- * Remove a command by id
38
- */
39
- unregister(id: string): void;
40
- /**
41
- * Search commands, optionally scoped to a parent's children
42
- */
43
- search(query: string, parentId?: string): Command[];
44
- }
45
- export declare function createCommandStore(services: CommandServices): CommandStore;
46
- export declare function getCommandStore(): CommandStore;
@@ -1,62 +0,0 @@
1
- import { getContext } from "svelte";
2
- import { RUNE_LAB_CONTEXT } from "./context";
3
- export class CommandStore {
4
- // Dependency Injection
5
- #services;
6
- constructor(services) {
7
- this.#services = services;
8
- this.refreshDefaultCommands();
9
- }
10
- commands = $state([]);
11
- refreshDefaultCommands() {
12
- // Intentionally empty.
13
- // Consumers (like the demo app) should inject their own default commands via `commandStore.register`.
14
- this.commands = [];
15
- }
16
- /**
17
- * Register a new command
18
- */
19
- register(command) {
20
- if (this.commands.find((c) => c.id === command.id))
21
- return;
22
- this.commands.push(command);
23
- }
24
- /**
25
- * Remove a command by id
26
- */
27
- unregister(id) {
28
- this.commands = this.commands.filter((c) => c.id !== id);
29
- }
30
- /**
31
- * Search commands, optionally scoped to a parent's children
32
- */
33
- search(query, parentId) {
34
- const targetList = parentId
35
- ? this.#findById(parentId, this.commands)?.children ?? []
36
- : this.commands;
37
- if (!query)
38
- return targetList;
39
- const q = query.toLowerCase();
40
- return targetList.filter((c) => c.label.toLowerCase().includes(q) ||
41
- c.category?.toLowerCase().includes(q));
42
- }
43
- // Native JS private field — TypeScript CAN emit .d.ts for this, unlike `private`
44
- #findById(id, list) {
45
- for (const cmd of list) {
46
- if (cmd.id === id)
47
- return cmd;
48
- if (cmd.children) {
49
- const found = this.#findById(id, cmd.children);
50
- if (found)
51
- return found;
52
- }
53
- }
54
- return undefined;
55
- }
56
- }
57
- export function createCommandStore(services) {
58
- return new CommandStore(services);
59
- }
60
- export function getCommandStore() {
61
- return getContext(RUNE_LAB_CONTEXT.commands);
62
- }
@@ -1,15 +0,0 @@
1
- import { type Dinero, type ISO4217Code } from "rune-lab/core";
2
- /**
3
- * Context-aware money composable.
4
- * Reads CurrencyStore and LanguageStore from rune-lab context.
5
- *
6
- * Usage:
7
- * const { format, toDinero, add, subtract } = useMoney();
8
- * const display = format(150.00, undefined, 'major'); // "$150.00"
9
- */
10
- export declare function useMoney(): {
11
- toDinero: (amount: number | null | undefined, currencyCode?: ISO4217Code | string, unit?: "major" | "minor") => Dinero<number>;
12
- format: (amount: number | null | undefined, currencyCode?: ISO4217Code | string, unit?: "major" | "minor") => string;
13
- add: (a: number, b: number, currencyCode?: ISO4217Code | string, unit?: "major" | "minor") => Dinero<number>;
14
- subtract: (a: number, b: number, currencyCode?: ISO4217Code | string, unit?: "major" | "minor") => Dinero<number>;
15
- };
@@ -1,62 +0,0 @@
1
- // sdk/state/src/composables/useMoney.ts
2
- // Context-aware money composable that reads CurrencyStore + LanguageStore
3
- import { getContext } from "svelte";
4
- import { RUNE_LAB_CONTEXT } from "../context";
5
- import { addMoney, createMoney, formatMoney, subtractMoney, toMinorUnit, } from "rune-lab/core";
6
- /**
7
- * Context-aware money composable.
8
- * Reads CurrencyStore and LanguageStore from rune-lab context.
9
- *
10
- * Usage:
11
- * const { format, toDinero, add, subtract } = useMoney();
12
- * const display = format(150.00, undefined, 'major'); // "$150.00"
13
- */
14
- export function useMoney() {
15
- const currencyStore = getContext(RUNE_LAB_CONTEXT.currency);
16
- const languageStore = getContext(RUNE_LAB_CONTEXT.language);
17
- /**
18
- * Convert amount to a Dinero object using current currency
19
- */
20
- function toDinero(amount, currencyCode, unit = "minor") {
21
- const code = currencyCode ?? String(currencyStore.current);
22
- const minorAmount = unit === "major" && amount !== null && amount !== undefined
23
- ? toMinorUnit(Number(amount), code)
24
- : amount;
25
- return createMoney(minorAmount, code);
26
- }
27
- /**
28
- * Format an amount as a locale-aware currency string
29
- */
30
- function format(amount, currencyCode, unit = "minor") {
31
- if (amount === null || amount === undefined ||
32
- (typeof amount === "number" && isNaN(amount))) {
33
- return "—";
34
- }
35
- const code = currencyCode ?? String(currencyStore.current);
36
- const locale = String(languageStore.current) || "en";
37
- const minorAmount = unit === "major"
38
- ? toMinorUnit(Number(amount), code)
39
- : amount;
40
- const money = createMoney(minorAmount, code);
41
- return formatMoney(money, locale, code);
42
- }
43
- /**
44
- * Add two amounts in the current currency
45
- */
46
- function add(a, b, currencyCode, unit = "minor") {
47
- const code = currencyCode ?? String(currencyStore.current);
48
- const aMoney = toDinero(a, code, unit);
49
- const bMoney = toDinero(b, code, unit);
50
- return addMoney(aMoney, bMoney);
51
- }
52
- /**
53
- * Subtract two amounts in the current currency
54
- */
55
- function subtract(a, b, currencyCode, unit = "minor") {
56
- const code = currencyCode ?? String(currencyStore.current);
57
- const aMoney = toDinero(a, code, unit);
58
- const bMoney = toDinero(b, code, unit);
59
- return subtractMoney(aMoney, bMoney);
60
- }
61
- return { toDinero, format, add, subtract };
62
- }
@@ -1,2 +0,0 @@
1
- import type { PersistenceDriver } from "rune-lab/core";
2
- export declare function usePersistence(): PersistenceDriver | undefined;
@@ -1,5 +0,0 @@
1
- import { getContext } from "svelte";
2
- import { RUNE_LAB_CONTEXT } from "../context";
3
- export function usePersistence() {
4
- return getContext(RUNE_LAB_CONTEXT.persistence);
5
- }
@@ -1,19 +0,0 @@
1
- import { getApiStore, getAppStore, getCommandStore, getCurrencyStore, getLanguageStore, getLayoutStore, getShortcutStore, getThemeStore, getToastStore, type SessionStore } from "../index";
2
- export interface RuneLabContext {
3
- app: ReturnType<typeof getAppStore>;
4
- api: ReturnType<typeof getApiStore>;
5
- toast: ReturnType<typeof getToastStore>;
6
- theme: ReturnType<typeof getThemeStore>;
7
- language: ReturnType<typeof getLanguageStore>;
8
- currency: ReturnType<typeof getCurrencyStore>;
9
- shortcut: ReturnType<typeof getShortcutStore>;
10
- layout: ReturnType<typeof getLayoutStore>;
11
- commands: ReturnType<typeof getCommandStore>;
12
- /** Available when auth is enabled in RuneProvider config */
13
- session?: SessionStore;
14
- }
15
- /**
16
- * Retrieves all Rune Lab stores from the Svelte context tree.
17
- * Must be called during component initialization (in the `<script>` block).
18
- */
19
- export declare function useRuneLab(): RuneLabContext;
@@ -1,30 +0,0 @@
1
- // src/lib/composables/useRuneLab.ts
2
- import { getApiStore, getAppStore, getCommandStore, getCurrencyStore, getLanguageStore, getLayoutStore, getShortcutStore, getThemeStore, getToastStore, } from "../index";
3
- import { getContext } from "svelte";
4
- import { RUNE_LAB_CONTEXT } from "../context";
5
- /**
6
- * Retrieves all Rune Lab stores from the Svelte context tree.
7
- * Must be called during component initialization (in the `<script>` block).
8
- */
9
- export function useRuneLab() {
10
- // Session is optional — only present when auth is enabled
11
- let session;
12
- try {
13
- session = getContext(RUNE_LAB_CONTEXT.session);
14
- }
15
- catch {
16
- // Auth not enabled — session stays undefined
17
- }
18
- return {
19
- app: getAppStore(),
20
- api: getApiStore(),
21
- toast: getToastStore(),
22
- theme: getThemeStore(),
23
- language: getLanguageStore(),
24
- currency: getCurrencyStore(),
25
- shortcut: getShortcutStore(),
26
- layout: getLayoutStore(),
27
- commands: getCommandStore(),
28
- session,
29
- };
30
- }
@@ -1,14 +0,0 @@
1
- export declare const RUNE_LAB_CONTEXT: {
2
- readonly app: symbol;
3
- readonly api: symbol;
4
- readonly toast: symbol;
5
- readonly theme: symbol;
6
- readonly language: symbol;
7
- readonly currency: symbol;
8
- readonly shortcut: symbol;
9
- readonly layout: symbol;
10
- readonly commands: symbol;
11
- readonly persistence: symbol;
12
- readonly cart: symbol;
13
- readonly session: symbol;
14
- };
@@ -1,15 +0,0 @@
1
- // src/lib/context.ts
2
- export const RUNE_LAB_CONTEXT = {
3
- app: Symbol("rl:app"),
4
- api: Symbol("rl:api"),
5
- toast: Symbol("rl:toast"),
6
- theme: Symbol("rl:theme"),
7
- language: Symbol("rl:language"),
8
- currency: Symbol("rl:currency"),
9
- shortcut: Symbol("rl:shortcut"),
10
- layout: Symbol("rl:layout"),
11
- commands: Symbol("rl:commands"),
12
- persistence: Symbol("rl:persistence"),
13
- cart: Symbol("rl:cart"),
14
- session: Symbol("rl:session"),
15
- };
@@ -1,55 +0,0 @@
1
- import { type PersistenceDriver } from "rune-lab/core";
2
- export type ConfigStore<T extends ConfigItem> = {
3
- current: T[keyof T];
4
- available: T[];
5
- set: (id: T[keyof T]) => void;
6
- get: (id: T[keyof T]) => T | undefined;
7
- getProp: <K extends keyof T>(prop: K, id?: T[keyof T]) => T[K] | undefined;
8
- /** Append additional items (e.g. custom themes/currencies from the consuming app) */
9
- addItems: (newItems: T[]) => void;
10
- };
11
- /**
12
- * Generic configuration store factory
13
- * Creates type-safe stores for theme, language, currency, etc.
14
- * with validation, persistence, and utilities
15
- */
16
- export interface ConfigItem {
17
- [key: string]: any;
18
- }
19
- export interface ConfigStoreOptions<T extends ConfigItem> {
20
- /** Array of available items */
21
- items: readonly T[];
22
- /** Storage key used by the persistence driver */
23
- storageKey: string;
24
- /** Display name for logging (e.g., "Theme", "Language") */
25
- displayName: string;
26
- /** Key to use as identifier (e.g., "code", "name") */
27
- idKey: keyof T;
28
- /** Icon for logs */
29
- icon?: string;
30
- /** Persistence driver */
31
- driver?: PersistenceDriver;
32
- }
33
- /**
34
- * Creates a reactive configuration store with persistence
35
- */
36
- export declare function createConfigStore<T extends ConfigItem>(options: ConfigStoreOptions<T>): {
37
- current: T[keyof T];
38
- available: T[];
39
- /**
40
- * Set current item with validation
41
- */
42
- set(id: T[keyof T]): void;
43
- /**
44
- * Get item by id
45
- */
46
- get(id: T[keyof T]): T | undefined;
47
- /**
48
- * Get property from current or specified item
49
- */
50
- getProp<K extends keyof T>(prop: K, id?: T[keyof T]): T[K] | undefined;
51
- /**
52
- * Append additional items (deduplicates by idKey)
53
- */
54
- addItems(newItems: T[]): void;
55
- };
@@ -1,61 +0,0 @@
1
- // client/sdk/devtools/src/patterns/createConfigStore.svelte.ts
2
- import { createInMemoryDriver } from "./persistence/drivers";
3
- import { DEV } from "esm-env";
4
- /**
5
- * Creates a reactive configuration store with persistence
6
- */
7
- export function createConfigStore(options) {
8
- const { items, storageKey, displayName, idKey, icon = "⚙️", driver = createInMemoryDriver(), } = options;
9
- class ConfigStore {
10
- current = $state(items[0]?.[idKey] ?? "");
11
- available = $state([...items]);
12
- constructor() {
13
- const saved = driver.get(storageKey);
14
- // Only load saved if it actually exists in our available items
15
- if (saved && this.get(saved)) {
16
- this.current = saved;
17
- }
18
- if (DEV) {
19
- console.log(`${icon} ${displayName} configured:`, {
20
- current: this.current,
21
- });
22
- }
23
- }
24
- /**
25
- * Set current item with validation
26
- */
27
- set(id) {
28
- const item = this.get(id);
29
- if (!item) {
30
- console.warn(`${displayName} "${id}" not found`);
31
- return;
32
- }
33
- this.current = id;
34
- driver.set(storageKey, String(id));
35
- }
36
- /**
37
- * Get item by id
38
- */
39
- get(id) {
40
- return this.available.find((item) => item[idKey] === id);
41
- }
42
- /**
43
- * Get property from current or specified item
44
- */
45
- getProp(prop, id) {
46
- const targetId = id ?? this.current;
47
- return this.get(targetId)?.[prop];
48
- }
49
- /**
50
- * Append additional items (deduplicates by idKey)
51
- */
52
- addItems(newItems) {
53
- for (const item of newItems) {
54
- if (!this.get(item[idKey])) {
55
- this.available.push(item);
56
- }
57
- }
58
- }
59
- }
60
- return new ConfigStore();
61
- }
@@ -1,28 +0,0 @@
1
- /**
2
- * Currency configuration
3
- * Based on ISO 4217 currency codes
4
- */
5
- export interface Currency {
6
- code: string;
7
- symbol: string;
8
- decimals: number;
9
- }
10
- import type { PersistenceDriver } from "rune-lab/core";
11
- export interface CurrencyStoreOptions {
12
- driver?: PersistenceDriver | (() => PersistenceDriver | undefined);
13
- /** Additional custom currencies to append to the built-in set */
14
- customCurrencies?: Currency[];
15
- /** Default currency code if no persisted value exists */
16
- defaultCurrency?: string;
17
- }
18
- export declare function createCurrencyStore(driverOrOptions?: PersistenceDriver | (() => PersistenceDriver | undefined) | CurrencyStoreOptions): {
19
- addCurrency: (meta: Currency, dineroDef?: any) => void;
20
- current: string | number;
21
- available: Currency[];
22
- };
23
- export type CurrencyStore = ReturnType<typeof createCurrencyStore>;
24
- export declare function getCurrencyStore(): {
25
- addCurrency: (meta: Currency, dineroDef?: any) => void;
26
- current: string | number;
27
- available: Currency[];
28
- };