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,30 +0,0 @@
1
- // src/lib/composables/useRuneLab.ts
2
- import { getApiStore, getAppStore, getCommandStore, getCurrencyStore, getLanguageStore, getLayoutStore, getShortcutStore, getThemeStore, getToastStore, } from "../index.ts";
3
- import { getContext } from "svelte";
4
- import { RUNE_LAB_CONTEXT } from "../context.ts";
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,33 +0,0 @@
1
- import type { ShortcutConfig } from "@internal/core";
2
- /**
3
- * Declarative shortcut registration composable.
4
- * Registers all shortcuts via ShortcutStore in a single `$effect` and
5
- * automatically unregisters them when the component is destroyed.
6
- *
7
- * Must be called at component initialization time (top-level in `<script>`),
8
- * not inside event handlers.
9
- *
10
- * @param configs - Array of ShortcutConfig from sdk/core
11
- * @returns Object with `registered` getter for the list of registered IDs
12
- *
13
- * @example
14
- * ```svelte
15
- * <script>
16
- * import { useShortcuts } from 'rune-lab/state';
17
- *
18
- * useShortcuts([
19
- * {
20
- * id: "save:document",
21
- * keys: "ctrl+s",
22
- * handler: (e) => { e.preventDefault(); save(); },
23
- * label: "Save document",
24
- * category: "Editing",
25
- * },
26
- * ]);
27
- * </script>
28
- * ```
29
- */
30
- export declare function useShortcuts(configs: ShortcutConfig[]): {
31
- /** IDs of all shortcuts registered by this composable */
32
- readonly registered: string[];
33
- };
@@ -1,75 +0,0 @@
1
- // sdk/state/src/composables/useShortcuts.ts
2
- // Declarative shortcut registration with automatic lifecycle cleanup.
3
- // Bridges ShortcutConfig (sdk/core) → ShortcutStore (sdk/state).
4
- import { getShortcutStore } from "../shortcuts.svelte.ts";
5
- /**
6
- * Declarative shortcut registration composable.
7
- * Registers all shortcuts via ShortcutStore in a single `$effect` and
8
- * automatically unregisters them when the component is destroyed.
9
- *
10
- * Must be called at component initialization time (top-level in `<script>`),
11
- * not inside event handlers.
12
- *
13
- * @param configs - Array of ShortcutConfig from sdk/core
14
- * @returns Object with `registered` getter for the list of registered IDs
15
- *
16
- * @example
17
- * ```svelte
18
- * <script>
19
- * import { useShortcuts } from 'rune-lab/state';
20
- *
21
- * useShortcuts([
22
- * {
23
- * id: "save:document",
24
- * keys: "ctrl+s",
25
- * handler: (e) => { e.preventDefault(); save(); },
26
- * label: "Save document",
27
- * category: "Editing",
28
- * },
29
- * ]);
30
- * </script>
31
- * ```
32
- */
33
- export function useShortcuts(configs) {
34
- const shortcutStore = getShortcutStore();
35
- // Convert ShortcutConfig[] to ShortcutEntry[] respecting the `when` predicate
36
- function toEntries(configs) {
37
- return configs.map((config) => ({
38
- id: config.id,
39
- keys: config.keys,
40
- handler: (event) => {
41
- // Check `when` predicate before firing
42
- if (config.when && !config.when())
43
- return;
44
- config.handler(event);
45
- },
46
- label: config.label ?? config.id,
47
- category: config.category ?? "General",
48
- scope: config.scope ?? "global",
49
- enabled: true,
50
- hidden: !config.label, // Hide from palette if no label
51
- }));
52
- }
53
- // Register all shortcuts
54
- const entries = toEntries(configs);
55
- const ids = entries.map((e) => e.id);
56
- for (const entry of entries) {
57
- shortcutStore.register(entry);
58
- }
59
- // Auto-cleanup using $effect.root for lifecycle management
60
- $effect(() => {
61
- // This effect runs on mount — shortcuts are already registered above.
62
- // Return cleanup that unregisters all shortcuts on destroy.
63
- return () => {
64
- for (const id of ids) {
65
- shortcutStore.unregister(id);
66
- }
67
- };
68
- });
69
- return {
70
- /** IDs of all shortcuts registered by this composable */
71
- get registered() {
72
- return ids;
73
- },
74
- };
75
- }
@@ -1,15 +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
- readonly exchangeRate: symbol;
15
- };
@@ -1,16 +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
- exchangeRate: Symbol("rl:exchange-rate"),
16
- };
@@ -1,28 +0,0 @@
1
- import { type PersistenceDriver } from "@internal/core";
2
- export type ConfigStore<T extends object> = {
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
- export interface ConfigStoreOptions<T extends object> {
12
- /** Array of available items */
13
- items: readonly T[];
14
- /** Storage key used by the persistence driver */
15
- storageKey: string;
16
- /** Display name for logging (e.g., "Theme", "Language") */
17
- displayName: string;
18
- /** Key to use as identifier (e.g., "code", "name") */
19
- idKey: keyof T;
20
- /** Icon for logs */
21
- icon?: string;
22
- /** Persistence driver */
23
- driver?: PersistenceDriver;
24
- }
25
- /**
26
- * Creates a reactive configuration store with persistence
27
- */
28
- export declare function createConfigStore<T extends object>(options: ConfigStoreOptions<T>): ConfigStore<T>;
@@ -1,72 +0,0 @@
1
- import { createInMemoryDriver } from "./persistence/drivers.ts";
2
- import { DEV } from "esm-env";
3
- /**
4
- * Internal class implementation for configuration stores.
5
- * Stable class definition avoids potential issues with multiple definitions in SSR.
6
- */
7
- class ConfigStoreImpl {
8
- current = $state(null);
9
- available = $state([]);
10
- #options;
11
- #driver;
12
- constructor(options) {
13
- this.#options = options;
14
- const { items, idKey, storageKey, driver = createInMemoryDriver() } = options;
15
- this.#driver = driver;
16
- this.available = [...items];
17
- this.current = items[0]?.[idKey] ?? "";
18
- const saved = this.#driver.get(storageKey);
19
- // Only load saved if it actually exists in our available items
20
- if (saved && this.get(saved)) {
21
- this.current = saved;
22
- }
23
- if (DEV) {
24
- console.log(`${options.icon ?? "⚙️"} ${options.displayName} configured:`, {
25
- current: this.current,
26
- });
27
- }
28
- }
29
- /**
30
- * Set current item with validation
31
- */
32
- set(id) {
33
- const item = this.get(id);
34
- if (!item) {
35
- console.warn(`${this.#options.displayName} "${id}" not found`);
36
- return;
37
- }
38
- this.current = id;
39
- this.#driver.set(this.#options.storageKey, String(id));
40
- }
41
- /**
42
- * Get item by id
43
- */
44
- get(id) {
45
- const idKey = this.#options.idKey;
46
- return this.available.find((item) => item[idKey] === id);
47
- }
48
- /**
49
- * Get property from current or specified item
50
- */
51
- getProp(prop, id) {
52
- const targetId = id ?? this.current;
53
- return this.get(targetId)?.[prop];
54
- }
55
- /**
56
- * Append additional items (deduplicates by idKey)
57
- */
58
- addItems(newItems) {
59
- const idKey = this.#options.idKey;
60
- for (const item of newItems) {
61
- if (!this.get(item[idKey])) {
62
- this.available.push(item);
63
- }
64
- }
65
- }
66
- }
67
- /**
68
- * Creates a reactive configuration store with persistence
69
- */
70
- export function createConfigStore(options) {
71
- return new ConfigStoreImpl(options);
72
- }
@@ -1,32 +0,0 @@
1
- import { type ConfigStore, createConfigStore } from "./createConfigStore.svelte.ts";
2
- /**
3
- * Currency configuration
4
- * Based on ISO 4217 currency codes
5
- */
6
- export interface Currency {
7
- code: string;
8
- symbol: string;
9
- decimals: number;
10
- }
11
- import type { PersistenceDriver } from "@internal/core";
12
- import { type ExchangeRateStore } from "./exchange-rate.svelte.ts";
13
- export interface CurrencyStoreOptions {
14
- driver?: PersistenceDriver | (() => PersistenceDriver | undefined);
15
- /** Additional custom currencies to append to the built-in set */
16
- customCurrencies?: Currency[];
17
- /** Default currency code if no persisted value exists */
18
- defaultCurrency?: string;
19
- /** Wired exchange rate store for conversions */
20
- exchangeRateStore?: ExchangeRateStore;
21
- }
22
- export declare function createCurrencyStore(driverOrOptions?: PersistenceDriver | (() => PersistenceDriver | undefined) | CurrencyStoreOptions): ReturnType<typeof createConfigStore<Currency>> & {
23
- addCurrency: (meta: Currency, dineroDef?: unknown) => void;
24
- convertAmount: (amount: number, fromCode: string, toCode?: string) => number;
25
- readonly canConvert: boolean;
26
- };
27
- export type CurrencyStore = ReturnType<typeof createCurrencyStore>;
28
- export declare function getCurrencyStore(): ConfigStore<Currency> & {
29
- addCurrency: (meta: Currency, dineroDef?: unknown) => void;
30
- convertAmount: (amount: number, fromCode: string, toCode?: string) => number;
31
- readonly canConvert: boolean;
32
- };
@@ -1,96 +0,0 @@
1
- import { createConfigStore, } from "./createConfigStore.svelte.ts";
2
- import { getContext } from "svelte";
3
- import { RUNE_LAB_CONTEXT } from "./context.ts";
4
- import { registerCurrency } from "@internal/core";
5
- /**
6
- * Helper to build a minimal Dinero definition from Currency metadata.
7
- * Assumes base 10 (standard decimal) for auto-registration.
8
- */
9
- function buildDineroDef(meta) {
10
- return {
11
- code: meta.code,
12
- base: 10,
13
- exponent: meta.decimals,
14
- };
15
- }
16
- const CURRENCIES = [
17
- { code: "USD", symbol: "$", decimals: 2 },
18
- { code: "EUR", symbol: "€", decimals: 2 },
19
- { code: "GBP", symbol: "£", decimals: 2 },
20
- { code: "MXN", symbol: "$", decimals: 2 },
21
- { code: "CAD", symbol: "C$", decimals: 2 },
22
- { code: "BRL", symbol: "R$", decimals: 2 },
23
- { code: "INR", symbol: "₹", decimals: 2 },
24
- { code: "CNY", symbol: "¥", decimals: 2 },
25
- { code: "JPY", symbol: "¥", decimals: 0 },
26
- { code: "KRW", symbol: "₩", decimals: 0 },
27
- { code: "AED", symbol: "د.إ", decimals: 2 },
28
- ];
29
- import { resolveDriver } from "./persistence/provider.ts";
30
- export function createCurrencyStore(driverOrOptions) {
31
- // Normalize overloaded argument
32
- const opts = driverOrOptions && typeof driverOrOptions === "object" &&
33
- "driver" in driverOrOptions
34
- ? driverOrOptions
35
- : {
36
- driver: driverOrOptions,
37
- };
38
- const resolvedDriver = resolveDriver(opts.driver);
39
- const store = createConfigStore({
40
- items: CURRENCIES,
41
- storageKey: "currency",
42
- displayName: "Currency",
43
- idKey: "code",
44
- icon: "💰",
45
- driver: resolvedDriver,
46
- });
47
- const exchangeRateStore = opts.exchangeRateStore;
48
- /**
49
- * Extension: Atomic currency registration.
50
- * Updates both the Dinero registry (core) and the reactive store (UI).
51
- *
52
- * @remarks Custom currencies with non-decimal base systems must use
53
- * registerCurrency() from @internal/core explicitly before addItems().
54
- */
55
- function addCurrency(meta, dineroDef) {
56
- const def = dineroDef || buildDineroDef(meta);
57
- registerCurrency(meta.code, def);
58
- store.addItems([meta]);
59
- }
60
- /**
61
- * Converts an amount from one currency to another.
62
- * Defaults to converting to the current store currency.
63
- */
64
- function convertAmount(amount, fromCode, toCode) {
65
- const target = toCode ?? String(store.current);
66
- if (fromCode === target)
67
- return amount;
68
- if (!exchangeRateStore || !exchangeRateStore.hasRates)
69
- return amount;
70
- return exchangeRateStore.convertAmount(amount, fromCode, target);
71
- }
72
- // Append and auto-register custom currencies if provided
73
- if (opts.customCurrencies?.length) {
74
- for (const c of opts.customCurrencies) {
75
- registerCurrency(c.code, buildDineroDef(c));
76
- }
77
- store.addItems(opts.customCurrencies);
78
- }
79
- // Set default currency if provided and no persisted value found
80
- if (!resolvedDriver?.get("currency") && opts.defaultCurrency) {
81
- if (store.get(opts.defaultCurrency)) {
82
- store.set(opts.defaultCurrency);
83
- }
84
- }
85
- // Explicitly attach method to ensure prototype is preserved and method is available
86
- // across different build environments.
87
- Object.defineProperties(store, {
88
- addCurrency: { value: addCurrency },
89
- convertAmount: { value: convertAmount },
90
- canConvert: { get: () => !!exchangeRateStore?.hasRates },
91
- });
92
- return store;
93
- }
94
- export function getCurrencyStore() {
95
- return getContext(RUNE_LAB_CONTEXT.currency);
96
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,35 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { createCurrencyStore } from "./currency.svelte.ts";
3
- describe("Currency Store", () => {
4
- it("should have prototype methods from ConfigStore", () => {
5
- const store = createCurrencyStore();
6
- // These come from the ConfigStore class prototype
7
- expect(typeof store.get).toBe("function");
8
- expect(typeof store.set).toBe("function");
9
- expect(typeof store.getProp).toBe("function");
10
- expect(typeof store.addItems).toBe("function");
11
- // These are instance properties
12
- expect(store.current).toBeDefined();
13
- expect(Array.isArray(store.available)).toBe(true);
14
- // This is the extension method
15
- expect(typeof store.addCurrency).toBe("function");
16
- });
17
- it("should correctly use prototype methods", () => {
18
- const store = createCurrencyStore();
19
- const usd = store.get("USD");
20
- expect(usd).toBeDefined();
21
- expect(usd?.code).toBe("USD");
22
- expect(usd?.symbol).toBe("$");
23
- });
24
- it("should add a new currency and keep methods", () => {
25
- const store = createCurrencyStore();
26
- store.addCurrency({ code: "BTC", symbol: "₿", decimals: 8 });
27
- const btc = store.get("BTC");
28
- expect(btc).toBeDefined();
29
- expect(btc?.code).toBe("BTC");
30
- expect(btc?.decimals).toBe(8);
31
- // Methods still exist after interaction
32
- expect(typeof store.get).toBe("function");
33
- expect(typeof store.set).toBe("function");
34
- });
35
- });
@@ -1,43 +0,0 @@
1
- import { type RateMap, type ScaledRate } from "@internal/core";
2
- export declare class ExchangeRateStore {
3
- #private;
4
- /**
5
- * The current exchange rates relative to the base currency.
6
- */
7
- get rates(): RateMap;
8
- /**
9
- * The base currency all rates are relative to.
10
- */
11
- get baseCurrency(): string;
12
- /**
13
- * Returns true if exchange rates have been loaded.
14
- */
15
- get hasRates(): boolean;
16
- /**
17
- * Set exchange rates from a human-readable float map.
18
- * @param base - The base currency code (e.g., "USD")
19
- * @param rawRates - A map of currency codes to float rates (e.g., { MXN: 17.23 })
20
- */
21
- setRates(base: string, rawRates: Record<string, number>): void;
22
- /**
23
- * Directly set pre-scaled rates.
24
- */
25
- setScaledRates(base: string, rates: RateMap): void;
26
- /**
27
- * Resolves the exchange rate between two currencies.
28
- * Returns a ScaledRate representing how many units of toCode are in 1 unit of fromCode.
29
- */
30
- getRate(fromCode: string, toCode: string): ScaledRate | number | undefined;
31
- /**
32
- * Internal conversion logic that handles triangulation through base currency.
33
- */
34
- convertAmount(amount: number, fromCode: string, toCode: string): number;
35
- }
36
- /**
37
- * Factory to create the ExchangeRateStore.
38
- */
39
- export declare function createExchangeRateStore(): ExchangeRateStore;
40
- /**
41
- * Consumer to retrieve the ExchangeRateStore from context.
42
- */
43
- export declare function getExchangeRateStore(): ExchangeRateStore;
@@ -1,145 +0,0 @@
1
- // sdk/state/src/exchange-rate.svelte.ts
2
- import { getContext } from "svelte";
3
- import { convertAmount, convertMoney, createMoney, CURRENCY_MAP,
4
- // Phase 2: ConversionStrategies from sdk/core
5
- resolveRate, scaledRate, toMoneySnapshot, } from "@internal/core";
6
- import { RUNE_LAB_CONTEXT } from "./context.ts";
7
- export class ExchangeRateStore {
8
- #rates = $state({});
9
- #baseCurrency = $state("USD");
10
- /**
11
- * The current exchange rates relative to the base currency.
12
- */
13
- get rates() {
14
- return this.#rates;
15
- }
16
- /**
17
- * The base currency all rates are relative to.
18
- */
19
- get baseCurrency() {
20
- return this.#baseCurrency;
21
- }
22
- /**
23
- * Returns true if exchange rates have been loaded.
24
- */
25
- get hasRates() {
26
- return Object.keys(this.#rates).length > 0;
27
- }
28
- /**
29
- * Set exchange rates from a human-readable float map.
30
- * @param base - The base currency code (e.g., "USD")
31
- * @param rawRates - A map of currency codes to float rates (e.g., { MXN: 17.23 })
32
- */
33
- setRates(base, rawRates) {
34
- const nextRates = {};
35
- for (const [code, rate] of Object.entries(rawRates)) {
36
- nextRates[code] = scaledRate(rate, 4);
37
- }
38
- this.#baseCurrency = base;
39
- this.#rates = nextRates;
40
- }
41
- /**
42
- * Directly set pre-scaled rates.
43
- */
44
- setScaledRates(base, rates) {
45
- this.#baseCurrency = base;
46
- this.#rates = rates;
47
- }
48
- /**
49
- * Resolves the exchange rate between two currencies.
50
- * Returns a ScaledRate representing how many units of toCode are in 1 unit of fromCode.
51
- */
52
- getRate(fromCode, toCode) {
53
- if (fromCode === toCode)
54
- return 1;
55
- const fromCurrency = CURRENCY_MAP[fromCode];
56
- const toCurrency = CURRENCY_MAP[toCode];
57
- if (!fromCurrency || !toCurrency)
58
- return undefined;
59
- if (!this.hasRates)
60
- return undefined;
61
- try {
62
- // 1 unit of fromCode (major unit)
63
- const oneUnit = Math.pow(Array.isArray(fromCurrency.base)
64
- ? fromCurrency.base[0]
65
- : fromCurrency.base, fromCurrency.exponent);
66
- const currentRates = this.#rates;
67
- const currentBase = this.#baseCurrency;
68
- const sourceMoney = createMoney(oneUnit, fromCode);
69
- let targetMoney;
70
- if (fromCode === currentBase) {
71
- // Direct: base → target
72
- targetMoney = convertMoney(sourceMoney, toCode, currentRates);
73
- }
74
- else if (toCode === currentBase) {
75
- // Inverse: target → base
76
- const rateToBase = currentRates[fromCode];
77
- if (!rateToBase)
78
- return undefined;
79
- const r = resolveRate(rateToBase);
80
- targetMoney = convertMoney(sourceMoney, toCode, {
81
- [toCode]: scaledRate(1 / r, 6),
82
- });
83
- }
84
- else {
85
- // Triangular: source → base → target
86
- const rateToBase = currentRates[fromCode];
87
- const rateToTarget = currentRates[toCode];
88
- if (!rateToBase || !rateToTarget)
89
- return undefined;
90
- const r1 = resolveRate(rateToBase);
91
- const r2 = resolveRate(rateToTarget);
92
- targetMoney = convertMoney(sourceMoney, toCode, {
93
- [toCode]: scaledRate(r2 / r1, 6),
94
- });
95
- }
96
- const snapshot = toMoneySnapshot(targetMoney);
97
- return {
98
- amount: snapshot.amount,
99
- scale: snapshot.scale,
100
- };
101
- }
102
- catch (_err) {
103
- return undefined;
104
- }
105
- }
106
- /**
107
- * Internal conversion logic that handles triangulation through base currency.
108
- */
109
- convertAmount(amount, fromCode, toCode) {
110
- if (fromCode === toCode)
111
- return amount;
112
- if (!this.hasRates)
113
- return amount;
114
- // Direct: Base → Target
115
- if (fromCode === this.#baseCurrency) {
116
- return convertAmount(amount, fromCode, toCode, this.#rates);
117
- }
118
- // Inverse: Target → Base
119
- if (toCode === this.#baseCurrency) {
120
- const rateToBase = this.#rates[fromCode];
121
- if (!rateToBase)
122
- return amount;
123
- const r = resolveRate(rateToBase);
124
- const inverseRate = scaledRate(1 / r, 6);
125
- return convertAmount(amount, fromCode, toCode, {
126
- [toCode]: inverseRate,
127
- });
128
- }
129
- // Triangulation: From → Base → To
130
- const amountInBase = this.convertAmount(amount, fromCode, this.#baseCurrency);
131
- return this.convertAmount(amountInBase, this.#baseCurrency, toCode);
132
- }
133
- }
134
- /**
135
- * Factory to create the ExchangeRateStore.
136
- */
137
- export function createExchangeRateStore() {
138
- return new ExchangeRateStore();
139
- }
140
- /**
141
- * Consumer to retrieve the ExchangeRateStore from context.
142
- */
143
- export function getExchangeRateStore() {
144
- return getContext(RUNE_LAB_CONTEXT.exchangeRate);
145
- }
@@ -1 +0,0 @@
1
- export {};