rune-lab 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (433) hide show
  1. package/.gitignore +12 -0
  2. package/README.md +3 -3
  3. package/deno.json +50 -0
  4. package/justfile +5 -0
  5. package/package.json +2 -79
  6. package/scripts/build_pkg.ts +51 -0
  7. package/scripts/ci.just +26 -0
  8. package/scripts/deploy.just +21 -0
  9. package/scripts/dev.just +4 -0
  10. package/scripts/inject.just +72 -0
  11. package/src/RuneProvider.svelte +105 -0
  12. package/src/i18n/message-resolver.test.ts +103 -0
  13. package/src/i18n/message-resolver.ts +89 -0
  14. package/src/i18n/project.inlang/settings.json +26 -0
  15. package/src/i18n/translations/ar.json +89 -0
  16. package/src/i18n/translations/de.json +89 -0
  17. package/src/i18n/translations/en.json +89 -0
  18. package/src/i18n/translations/es.json +89 -0
  19. package/src/i18n/translations/fr.json +89 -0
  20. package/src/i18n/translations/hi.json +89 -0
  21. package/src/i18n/translations/it.json +89 -0
  22. package/src/i18n/translations/ja.json +89 -0
  23. package/src/i18n/translations/ko.json +89 -0
  24. package/src/i18n/translations/pt.json +89 -0
  25. package/src/i18n/translations/ru.json +89 -0
  26. package/src/i18n/translations/vi.json +89 -0
  27. package/src/i18n/translations/zh.json +89 -0
  28. package/src/kernel/deno.json +5 -0
  29. package/src/kernel/src/actions/portal.ts +41 -0
  30. package/src/kernel/src/actions/shortcut-listener.ts +50 -0
  31. package/src/kernel/src/context/app.svelte.ts +98 -0
  32. package/src/kernel/src/context/context.ts +31 -0
  33. package/src/kernel/src/context/stores.svelte.ts +96 -0
  34. package/src/kernel/src/context/types.ts +110 -0
  35. package/src/kernel/src/context/useRuneLab.ts +38 -0
  36. package/src/kernel/src/mod.ts +13 -0
  37. package/src/kernel/src/persistence/createConfigStore.svelte.ts +120 -0
  38. package/src/kernel/src/persistence/drivers.test.ts +95 -0
  39. package/src/kernel/src/persistence/drivers.ts +77 -0
  40. package/src/kernel/src/persistence/provider.test.ts +58 -0
  41. package/{dist/state/persistence/provider.js → src/kernel/src/persistence/provider.ts} +29 -14
  42. package/src/kernel/src/persistence/types.ts +19 -0
  43. package/src/kernel/src/persistence/usePersistence.ts +9 -0
  44. package/src/kernel/src/registry/mod.ts +221 -0
  45. package/src/kernel/src/registry/registry.test.ts +162 -0
  46. package/src/kernel/src/tokens/props.ts +94 -0
  47. package/src/mod.ts +10 -0
  48. package/src/runes/layout/deno.json +5 -0
  49. package/src/runes/layout/src/APP_CONFIGURATIONS.ts +56 -0
  50. package/{dist/ui/features/config → src/runes/layout/src}/AppSettingSelector.svelte +1 -1
  51. package/{dist/ui/layout → src/runes/layout/src}/ConnectedNavigationPanel.svelte +1 -1
  52. package/{dist/ui/layout → src/runes/layout/src}/ConnectedWorkspaceStrip.svelte +1 -1
  53. package/src/runes/layout/src/Icon.svelte +7 -0
  54. package/{dist/ui/features/config → src/runes/layout/src}/LanguageSelector.svelte +7 -5
  55. package/{dist/ui/layout → src/runes/layout/src}/NavigationPanel.svelte +1 -4
  56. package/{dist/ui/features/config → src/runes/layout/src}/ResourceSelector.svelte +3 -5
  57. package/{dist/ui/features/config → src/runes/layout/src}/ThemeSelector.svelte +2 -2
  58. package/{dist/ui/layout → src/runes/layout/src}/WorkspaceLayout.svelte +6 -4
  59. package/{dist/ui/layout → src/runes/layout/src}/WorkspaceStrip.svelte +1 -1
  60. package/src/runes/layout/src/connection-factory.ts +95 -0
  61. package/src/runes/layout/src/language.svelte.ts +44 -0
  62. package/src/runes/layout/src/mod.ts +71 -0
  63. package/src/runes/layout/src/store.svelte.ts +142 -0
  64. package/src/runes/layout/src/theme.svelte.ts +73 -0
  65. package/src/runes/layout/src/types.ts +11 -0
  66. package/src/runes/palettes/deno.json +8 -0
  67. package/{dist/ui/features/command-palette → src/runes/palettes/src/commands}/CommandPalette.svelte +4 -4
  68. package/src/runes/palettes/src/commands/mod.ts +2 -0
  69. package/src/runes/palettes/src/commands/store.svelte.ts +80 -0
  70. package/src/runes/palettes/src/mod.ts +51 -0
  71. package/{dist/ui/components → src/runes/palettes/src/notifications}/Toaster.svelte +1 -2
  72. package/src/runes/palettes/src/notifications/bridge.ts +56 -0
  73. package/src/runes/palettes/src/notifications/mod.ts +4 -0
  74. package/src/runes/palettes/src/notifications/store.svelte.ts +58 -0
  75. package/{dist/ui/features → src/runes/palettes/src}/shortcuts/ShortcutPalette.svelte +4 -4
  76. package/src/runes/palettes/src/shortcuts/mod.ts +4 -0
  77. package/src/runes/palettes/src/shortcuts/store.svelte.ts +85 -0
  78. package/src/runes/palettes/src/shortcuts/types.ts +4 -0
  79. package/src/runes/palettes/src/shortcuts/useShortcuts.ts +85 -0
  80. package/src/runes/plugins/money/deno.json +8 -0
  81. package/{dist/ui/features/config → src/runes/plugins/money/src}/CurrencySelector.svelte +2 -2
  82. package/{dist/ui/components/money → src/runes/plugins/money/src}/MoneyDisplay.svelte +2 -2
  83. package/{dist/ui/components/money → src/runes/plugins/money/src}/MoneyInput.svelte +4 -8
  84. package/src/runes/plugins/money/src/currency.svelte.ts +95 -0
  85. package/src/runes/plugins/money/src/currency.test.ts +40 -0
  86. package/src/runes/plugins/money/src/exchange-rate.svelte.ts +176 -0
  87. package/src/runes/plugins/money/src/exchange-rate.test.ts +95 -0
  88. package/src/runes/plugins/money/src/mod.ts +79 -0
  89. package/src/runes/plugins/money/src/money-primitive.test.ts +217 -0
  90. package/src/runes/plugins/money/src/money-primitive.ts +220 -0
  91. package/src/runes/plugins/money/src/money.test.ts +183 -0
  92. package/src/runes/plugins/money/src/money.ts +382 -0
  93. package/src/runes/plugins/money/src/strategies.test.ts +143 -0
  94. package/{dist/core/exchange-rate/strategies.js → src/runes/plugins/money/src/strategies.ts} +45 -22
  95. package/src/runes/plugins/money/src/types.ts +27 -0
  96. package/src/runes/plugins/money/src/useMoney.ts +261 -0
  97. package/src/runes/plugins/money/src/useMoneyFilter.ts +132 -0
  98. package/tsconfig.json +41 -0
  99. package/vite.config.ts +44 -0
  100. package/dist/core/design-tokens/props.d.ts +0 -52
  101. package/dist/core/design-tokens/props.d.ts.map +0 -1
  102. package/dist/core/design-tokens/props.js +0 -34
  103. package/dist/core/exchange-rate/strategies.d.ts +0 -52
  104. package/dist/core/exchange-rate/strategies.d.ts.map +0 -1
  105. package/dist/core/index.d.ts +0 -9
  106. package/dist/core/index.d.ts.map +0 -1
  107. package/dist/core/index.js +0 -8
  108. package/dist/core/internal/message-resolver.d.ts +0 -42
  109. package/dist/core/internal/message-resolver.d.ts.map +0 -1
  110. package/dist/core/internal/message-resolver.js +0 -47
  111. package/dist/core/layout/types.d.ts +0 -60
  112. package/dist/core/layout/types.d.ts.map +0 -1
  113. package/dist/core/layout/types.js +0 -4
  114. package/dist/core/money/index.d.ts +0 -2
  115. package/dist/core/money/index.d.ts.map +0 -1
  116. package/dist/core/money/index.js +0 -2
  117. package/dist/core/money/money-primitive.d.ts +0 -101
  118. package/dist/core/money/money-primitive.d.ts.map +0 -1
  119. package/dist/core/money/money-primitive.js +0 -161
  120. package/dist/core/money/money.d.ts +0 -129
  121. package/dist/core/money/money.d.ts.map +0 -1
  122. package/dist/core/money/money.js +0 -250
  123. package/dist/core/persistence/types.d.ts +0 -18
  124. package/dist/core/persistence/types.d.ts.map +0 -1
  125. package/dist/core/persistence/types.js +0 -2
  126. package/dist/core/shortcuts/types.d.ts +0 -60
  127. package/dist/core/shortcuts/types.d.ts.map +0 -1
  128. package/dist/core/shortcuts/types.js +0 -4
  129. package/dist/index.d.ts +0 -6
  130. package/dist/index.js +0 -7
  131. package/dist/state/api.svelte.d.ts +0 -26
  132. package/dist/state/api.svelte.js +0 -65
  133. package/dist/state/app.svelte.d.ts +0 -48
  134. package/dist/state/app.svelte.js +0 -82
  135. package/dist/state/auth/index.d.ts +0 -2
  136. package/dist/state/auth/index.js +0 -2
  137. package/dist/state/auth/session.svelte.d.ts +0 -40
  138. package/dist/state/auth/session.svelte.js +0 -59
  139. package/dist/state/auth/types.d.ts +0 -30
  140. package/dist/state/auth/types.js +0 -3
  141. package/dist/state/cart.svelte.d.ts +0 -64
  142. package/dist/state/cart.svelte.js +0 -122
  143. package/dist/state/commands.svelte.d.ts +0 -46
  144. package/dist/state/commands.svelte.js +0 -62
  145. package/dist/state/composables/useMoney.d.ts +0 -31
  146. package/dist/state/composables/useMoney.js +0 -126
  147. package/dist/state/composables/useMoneyFilter.d.ts +0 -20
  148. package/dist/state/composables/useMoneyFilter.js +0 -81
  149. package/dist/state/composables/usePersistence.d.ts +0 -2
  150. package/dist/state/composables/usePersistence.js +0 -5
  151. package/dist/state/composables/useRuneLab.d.ts +0 -19
  152. package/dist/state/composables/useRuneLab.js +0 -30
  153. package/dist/state/composables/useShortcuts.d.ts +0 -33
  154. package/dist/state/composables/useShortcuts.js +0 -75
  155. package/dist/state/context.d.ts +0 -15
  156. package/dist/state/context.js +0 -16
  157. package/dist/state/createConfigStore.svelte.d.ts +0 -28
  158. package/dist/state/createConfigStore.svelte.js +0 -72
  159. package/dist/state/currency.svelte.d.ts +0 -32
  160. package/dist/state/currency.svelte.js +0 -96
  161. package/dist/state/currency.test.d.ts +0 -1
  162. package/dist/state/currency.test.js +0 -35
  163. package/dist/state/exchange-rate.svelte.d.ts +0 -43
  164. package/dist/state/exchange-rate.svelte.js +0 -145
  165. package/dist/state/exchange-rate.test.d.ts +0 -1
  166. package/dist/state/exchange-rate.test.js +0 -75
  167. package/dist/state/index.d.ts +0 -26
  168. package/dist/state/index.js +0 -32
  169. package/dist/state/language.svelte.d.ts +0 -57
  170. package/dist/state/language.svelte.js +0 -43
  171. package/dist/state/layout.svelte.d.ts +0 -49
  172. package/dist/state/layout.svelte.js +0 -108
  173. package/dist/state/persistence/drivers.d.ts +0 -12
  174. package/dist/state/persistence/drivers.js +0 -75
  175. package/dist/state/persistence/drivers.test.d.ts +0 -1
  176. package/dist/state/persistence/drivers.test.js +0 -79
  177. package/dist/state/persistence/provider.d.ts +0 -23
  178. package/dist/state/persistence/provider.test.d.ts +0 -1
  179. package/dist/state/persistence/provider.test.js +0 -51
  180. package/dist/state/registry/index.d.ts +0 -44
  181. package/dist/state/registry/index.js +0 -58
  182. package/dist/state/registry/registry.test.d.ts +0 -1
  183. package/dist/state/registry/registry.test.js +0 -112
  184. package/dist/state/registry/types.d.ts +0 -20
  185. package/dist/state/registry/types.js +0 -3
  186. package/dist/state/shortcuts.svelte.d.ts +0 -121
  187. package/dist/state/shortcuts.svelte.js +0 -222
  188. package/dist/state/theme.svelte.d.ts +0 -15
  189. package/dist/state/theme.svelte.js +0 -92
  190. package/dist/state/toast-bridge.d.ts +0 -29
  191. package/dist/state/toast-bridge.js +0 -43
  192. package/dist/state/toast.svelte.d.ts +0 -27
  193. package/dist/state/toast.svelte.js +0 -43
  194. package/dist/ui/actions/portal.d.ts +0 -7
  195. package/dist/ui/actions/portal.js +0 -32
  196. package/dist/ui/components/ApiMonitor.svelte +0 -162
  197. package/dist/ui/components/ApiMonitor.svelte.d.ts +0 -3
  198. package/dist/ui/components/Icon.svelte +0 -108
  199. package/dist/ui/components/Icon.svelte.d.ts +0 -14
  200. package/dist/ui/components/Kyntharil.svelte +0 -48
  201. package/dist/ui/components/Kyntharil.svelte.d.ts +0 -6
  202. package/dist/ui/components/RuneProvider.svelte +0 -218
  203. package/dist/ui/components/RuneProvider.svelte.d.ts +0 -49
  204. package/dist/ui/components/Toaster.svelte.d.ts +0 -18
  205. package/dist/ui/components/money/MoneyDisplay.svelte.d.ts +0 -33
  206. package/dist/ui/components/money/MoneyDisplay.svelte.test.d.ts +0 -1
  207. package/dist/ui/components/money/MoneyDisplay.svelte.test.js +0 -117
  208. package/dist/ui/components/money/MoneyInput.svelte.d.ts +0 -34
  209. package/dist/ui/components/money/index.d.ts +0 -2
  210. package/dist/ui/components/money/index.js +0 -3
  211. package/dist/ui/components/user/UserAvatar.svelte +0 -66
  212. package/dist/ui/components/user/UserAvatar.svelte.d.ts +0 -13
  213. package/dist/ui/components/user/UserProfile.svelte +0 -79
  214. package/dist/ui/components/user/UserProfile.svelte.d.ts +0 -17
  215. package/dist/ui/components/user/index.d.ts +0 -2
  216. package/dist/ui/components/user/index.js +0 -3
  217. package/dist/ui/features/command-palette/CommandPalette.svelte.d.ts +0 -6
  218. package/dist/ui/features/config/APP_CONFIGURATIONS.d.ts +0 -29
  219. package/dist/ui/features/config/APP_CONFIGURATIONS.js +0 -38
  220. package/dist/ui/features/config/AppSettingSelector.svelte.d.ts +0 -13
  221. package/dist/ui/features/config/CurrencySelector.svelte.d.ts +0 -8
  222. package/dist/ui/features/config/LanguageSelector.svelte.d.ts +0 -8
  223. package/dist/ui/features/config/ResourceSelector.svelte.d.ts +0 -25
  224. package/dist/ui/features/config/ThemeSelector.svelte.d.ts +0 -8
  225. package/dist/ui/features/notifications/NotificationBell.svelte.d.ts +0 -11
  226. package/dist/ui/features/notifications/index.d.ts +0 -1
  227. package/dist/ui/features/notifications/index.js +0 -2
  228. package/dist/ui/features/shortcuts/ShortcutBinder.svelte +0 -17
  229. package/dist/ui/features/shortcuts/ShortcutBinder.svelte.d.ts +0 -7
  230. package/dist/ui/features/shortcuts/ShortcutPalette.svelte.d.ts +0 -6
  231. package/dist/ui/index.d.ts +0 -30
  232. package/dist/ui/index.js +0 -46
  233. package/dist/ui/layout/ConnectedNavigationPanel.svelte.d.ts +0 -10
  234. package/dist/ui/layout/ConnectedWorkspaceStrip.svelte.d.ts +0 -9
  235. package/dist/ui/layout/ContentArea.svelte.d.ts +0 -8
  236. package/dist/ui/layout/DetailPanel.svelte.d.ts +0 -7
  237. package/dist/ui/layout/NavigationPanel.svelte.d.ts +0 -14
  238. package/dist/ui/layout/WorkspaceLayout.svelte.d.ts +0 -32
  239. package/dist/ui/layout/WorkspaceStrip.svelte.d.ts +0 -11
  240. package/dist/ui/layout/connection-factory.d.ts +0 -50
  241. package/dist/ui/layout/connection-factory.js +0 -58
  242. package/dist/ui/layout/index.d.ts +0 -7
  243. package/dist/ui/layout/index.js +0 -7
  244. package/dist/ui/paraglide/README.md +0 -147
  245. package/dist/ui/paraglide/messages/_index.d.ts +0 -87
  246. package/dist/ui/paraglide/messages/_index.js +0 -88
  247. package/dist/ui/paraglide/messages/abyss.d.ts +0 -16
  248. package/dist/ui/paraglide/messages/abyss.js +0 -84
  249. package/dist/ui/paraglide/messages/acid.d.ts +0 -16
  250. package/dist/ui/paraglide/messages/acid.js +0 -84
  251. package/dist/ui/paraglide/messages/active_toasts.d.ts +0 -16
  252. package/dist/ui/paraglide/messages/active_toasts.js +0 -84
  253. package/dist/ui/paraglide/messages/aed3.d.ts +0 -17
  254. package/dist/ui/paraglide/messages/aed3.js +0 -85
  255. package/dist/ui/paraglide/messages/all_currencies.d.ts +0 -16
  256. package/dist/ui/paraglide/messages/all_currencies.js +0 -84
  257. package/dist/ui/paraglide/messages/all_languages.d.ts +0 -16
  258. package/dist/ui/paraglide/messages/all_languages.js +0 -84
  259. package/dist/ui/paraglide/messages/all_themes.d.ts +0 -16
  260. package/dist/ui/paraglide/messages/all_themes.js +0 -84
  261. package/dist/ui/paraglide/messages/api_status.d.ts +0 -16
  262. package/dist/ui/paraglide/messages/api_status.js +0 -84
  263. package/dist/ui/paraglide/messages/app_info.d.ts +0 -16
  264. package/dist/ui/paraglide/messages/app_info.js +0 -84
  265. package/dist/ui/paraglide/messages/appearance.d.ts +0 -16
  266. package/dist/ui/paraglide/messages/appearance.js +0 -84
  267. package/dist/ui/paraglide/messages/aqua.d.ts +0 -16
  268. package/dist/ui/paraglide/messages/aqua.js +0 -84
  269. package/dist/ui/paraglide/messages/ar.d.ts +0 -16
  270. package/dist/ui/paraglide/messages/ar.js +0 -84
  271. package/dist/ui/paraglide/messages/autumn.d.ts +0 -16
  272. package/dist/ui/paraglide/messages/autumn.js +0 -84
  273. package/dist/ui/paraglide/messages/black.d.ts +0 -16
  274. package/dist/ui/paraglide/messages/black.js +0 -84
  275. package/dist/ui/paraglide/messages/brl3.d.ts +0 -17
  276. package/dist/ui/paraglide/messages/brl3.js +0 -85
  277. package/dist/ui/paraglide/messages/bumblebee.d.ts +0 -16
  278. package/dist/ui/paraglide/messages/bumblebee.js +0 -84
  279. package/dist/ui/paraglide/messages/business.d.ts +0 -16
  280. package/dist/ui/paraglide/messages/business.js +0 -84
  281. package/dist/ui/paraglide/messages/cad3.d.ts +0 -17
  282. package/dist/ui/paraglide/messages/cad3.js +0 -85
  283. package/dist/ui/paraglide/messages/caramellatte.d.ts +0 -16
  284. package/dist/ui/paraglide/messages/caramellatte.js +0 -84
  285. package/dist/ui/paraglide/messages/cmyk.d.ts +0 -16
  286. package/dist/ui/paraglide/messages/cmyk.js +0 -84
  287. package/dist/ui/paraglide/messages/cny3.d.ts +0 -17
  288. package/dist/ui/paraglide/messages/cny3.js +0 -85
  289. package/dist/ui/paraglide/messages/coffee.d.ts +0 -16
  290. package/dist/ui/paraglide/messages/coffee.js +0 -84
  291. package/dist/ui/paraglide/messages/commands_label.d.ts +0 -16
  292. package/dist/ui/paraglide/messages/commands_label.js +0 -84
  293. package/dist/ui/paraglide/messages/corporate.d.ts +0 -16
  294. package/dist/ui/paraglide/messages/corporate.js +0 -84
  295. package/dist/ui/paraglide/messages/cupcake.d.ts +0 -16
  296. package/dist/ui/paraglide/messages/cupcake.js +0 -84
  297. package/dist/ui/paraglide/messages/currency.d.ts +0 -16
  298. package/dist/ui/paraglide/messages/currency.js +0 -84
  299. package/dist/ui/paraglide/messages/current_currency.d.ts +0 -16
  300. package/dist/ui/paraglide/messages/current_currency.js +0 -84
  301. package/dist/ui/paraglide/messages/current_language.d.ts +0 -16
  302. package/dist/ui/paraglide/messages/current_language.js +0 -84
  303. package/dist/ui/paraglide/messages/current_theme.d.ts +0 -16
  304. package/dist/ui/paraglide/messages/current_theme.js +0 -84
  305. package/dist/ui/paraglide/messages/currently_in_queue.d.ts +0 -16
  306. package/dist/ui/paraglide/messages/currently_in_queue.js +0 -84
  307. package/dist/ui/paraglide/messages/cyberpunk.d.ts +0 -16
  308. package/dist/ui/paraglide/messages/cyberpunk.js +0 -84
  309. package/dist/ui/paraglide/messages/dark.d.ts +0 -16
  310. package/dist/ui/paraglide/messages/dark.js +0 -84
  311. package/dist/ui/paraglide/messages/de.d.ts +0 -16
  312. package/dist/ui/paraglide/messages/de.js +0 -84
  313. package/dist/ui/paraglide/messages/dim.d.ts +0 -16
  314. package/dist/ui/paraglide/messages/dim.js +0 -84
  315. package/dist/ui/paraglide/messages/dracula.d.ts +0 -16
  316. package/dist/ui/paraglide/messages/dracula.js +0 -84
  317. package/dist/ui/paraglide/messages/emerald.d.ts +0 -16
  318. package/dist/ui/paraglide/messages/emerald.js +0 -84
  319. package/dist/ui/paraglide/messages/en.d.ts +0 -16
  320. package/dist/ui/paraglide/messages/en.js +0 -84
  321. package/dist/ui/paraglide/messages/es.d.ts +0 -16
  322. package/dist/ui/paraglide/messages/es.js +0 -84
  323. package/dist/ui/paraglide/messages/eur3.d.ts +0 -17
  324. package/dist/ui/paraglide/messages/eur3.js +0 -85
  325. package/dist/ui/paraglide/messages/extended_controls.d.ts +0 -16
  326. package/dist/ui/paraglide/messages/extended_controls.js +0 -84
  327. package/dist/ui/paraglide/messages/fantasy.d.ts +0 -16
  328. package/dist/ui/paraglide/messages/fantasy.js +0 -84
  329. package/dist/ui/paraglide/messages/forest.d.ts +0 -16
  330. package/dist/ui/paraglide/messages/forest.js +0 -84
  331. package/dist/ui/paraglide/messages/fr.d.ts +0 -16
  332. package/dist/ui/paraglide/messages/fr.js +0 -84
  333. package/dist/ui/paraglide/messages/garden.d.ts +0 -16
  334. package/dist/ui/paraglide/messages/garden.js +0 -84
  335. package/dist/ui/paraglide/messages/gbp3.d.ts +0 -17
  336. package/dist/ui/paraglide/messages/gbp3.js +0 -85
  337. package/dist/ui/paraglide/messages/halloween.d.ts +0 -16
  338. package/dist/ui/paraglide/messages/halloween.js +0 -84
  339. package/dist/ui/paraglide/messages/hello_world.d.ts +0 -18
  340. package/dist/ui/paraglide/messages/hello_world.js +0 -84
  341. package/dist/ui/paraglide/messages/hi.d.ts +0 -16
  342. package/dist/ui/paraglide/messages/hi.js +0 -84
  343. package/dist/ui/paraglide/messages/inr3.d.ts +0 -17
  344. package/dist/ui/paraglide/messages/inr3.js +0 -85
  345. package/dist/ui/paraglide/messages/it.d.ts +0 -16
  346. package/dist/ui/paraglide/messages/it.js +0 -84
  347. package/dist/ui/paraglide/messages/ja.d.ts +0 -16
  348. package/dist/ui/paraglide/messages/ja.js +0 -84
  349. package/dist/ui/paraglide/messages/jpy3.d.ts +0 -17
  350. package/dist/ui/paraglide/messages/jpy3.js +0 -85
  351. package/dist/ui/paraglide/messages/ko.d.ts +0 -16
  352. package/dist/ui/paraglide/messages/ko.js +0 -84
  353. package/dist/ui/paraglide/messages/krw3.d.ts +0 -17
  354. package/dist/ui/paraglide/messages/krw3.js +0 -85
  355. package/dist/ui/paraglide/messages/languages.d.ts +0 -16
  356. package/dist/ui/paraglide/messages/languages.js +0 -84
  357. package/dist/ui/paraglide/messages/lemonade.d.ts +0 -16
  358. package/dist/ui/paraglide/messages/lemonade.js +0 -84
  359. package/dist/ui/paraglide/messages/light.d.ts +0 -16
  360. package/dist/ui/paraglide/messages/light.js +0 -84
  361. package/dist/ui/paraglide/messages/live_store_dashboard.d.ts +0 -16
  362. package/dist/ui/paraglide/messages/live_store_dashboard.js +0 -84
  363. package/dist/ui/paraglide/messages/localization.d.ts +0 -16
  364. package/dist/ui/paraglide/messages/localization.js +0 -84
  365. package/dist/ui/paraglide/messages/lofi.d.ts +0 -16
  366. package/dist/ui/paraglide/messages/lofi.js +0 -84
  367. package/dist/ui/paraglide/messages/luxury.d.ts +0 -16
  368. package/dist/ui/paraglide/messages/luxury.js +0 -84
  369. package/dist/ui/paraglide/messages/mxn3.d.ts +0 -17
  370. package/dist/ui/paraglide/messages/mxn3.js +0 -85
  371. package/dist/ui/paraglide/messages/name_label.d.ts +0 -16
  372. package/dist/ui/paraglide/messages/name_label.js +0 -84
  373. package/dist/ui/paraglide/messages/night.d.ts +0 -16
  374. package/dist/ui/paraglide/messages/night.js +0 -84
  375. package/dist/ui/paraglide/messages/nord.d.ts +0 -16
  376. package/dist/ui/paraglide/messages/nord.js +0 -84
  377. package/dist/ui/paraglide/messages/pastel.d.ts +0 -16
  378. package/dist/ui/paraglide/messages/pastel.js +0 -84
  379. package/dist/ui/paraglide/messages/pt.d.ts +0 -16
  380. package/dist/ui/paraglide/messages/pt.js +0 -84
  381. package/dist/ui/paraglide/messages/real_time_monitor_desc.d.ts +0 -16
  382. package/dist/ui/paraglide/messages/real_time_monitor_desc.js +0 -84
  383. package/dist/ui/paraglide/messages/registered_in_registry.d.ts +0 -16
  384. package/dist/ui/paraglide/messages/registered_in_registry.js +0 -84
  385. package/dist/ui/paraglide/messages/retro.d.ts +0 -16
  386. package/dist/ui/paraglide/messages/retro.js +0 -84
  387. package/dist/ui/paraglide/messages/ru.d.ts +0 -16
  388. package/dist/ui/paraglide/messages/ru.js +0 -84
  389. package/dist/ui/paraglide/messages/silk.d.ts +0 -16
  390. package/dist/ui/paraglide/messages/silk.js +0 -84
  391. package/dist/ui/paraglide/messages/state_label.d.ts +0 -16
  392. package/dist/ui/paraglide/messages/state_label.js +0 -84
  393. package/dist/ui/paraglide/messages/sunset.d.ts +0 -16
  394. package/dist/ui/paraglide/messages/sunset.js +0 -84
  395. package/dist/ui/paraglide/messages/synthwave.d.ts +0 -16
  396. package/dist/ui/paraglide/messages/synthwave.js +0 -84
  397. package/dist/ui/paraglide/messages/system.d.ts +0 -16
  398. package/dist/ui/paraglide/messages/system.js +0 -84
  399. package/dist/ui/paraglide/messages/theme.d.ts +0 -16
  400. package/dist/ui/paraglide/messages/theme.js +0 -84
  401. package/dist/ui/paraglide/messages/themes.d.ts +0 -16
  402. package/dist/ui/paraglide/messages/themes.js +0 -84
  403. package/dist/ui/paraglide/messages/url_label.d.ts +0 -16
  404. package/dist/ui/paraglide/messages/url_label.js +0 -84
  405. package/dist/ui/paraglide/messages/usd3.d.ts +0 -17
  406. package/dist/ui/paraglide/messages/usd3.js +0 -85
  407. package/dist/ui/paraglide/messages/valentine.d.ts +0 -16
  408. package/dist/ui/paraglide/messages/valentine.js +0 -84
  409. package/dist/ui/paraglide/messages/version_label.d.ts +0 -16
  410. package/dist/ui/paraglide/messages/version_label.js +0 -84
  411. package/dist/ui/paraglide/messages/vi.d.ts +0 -16
  412. package/dist/ui/paraglide/messages/vi.js +0 -84
  413. package/dist/ui/paraglide/messages/winter.d.ts +0 -16
  414. package/dist/ui/paraglide/messages/winter.js +0 -84
  415. package/dist/ui/paraglide/messages/wireframe.d.ts +0 -16
  416. package/dist/ui/paraglide/messages/wireframe.js +0 -84
  417. package/dist/ui/paraglide/messages/zh.d.ts +0 -16
  418. package/dist/ui/paraglide/messages/zh.js +0 -84
  419. package/dist/ui/paraglide/messages.d.ts +0 -2
  420. package/dist/ui/paraglide/messages.js +0 -4
  421. package/dist/ui/paraglide/registry.d.ts +0 -21
  422. package/dist/ui/paraglide/registry.js +0 -31
  423. package/dist/ui/paraglide/runtime.d.ts +0 -730
  424. package/dist/ui/paraglide/runtime.js +0 -1812
  425. package/dist/ui/paraglide/server.d.ts +0 -92
  426. package/dist/ui/paraglide/server.js +0 -239
  427. package/dist/ui/primitives/DatePicker.svelte +0 -257
  428. package/dist/ui/primitives/DatePicker.svelte.d.ts +0 -17
  429. package/dist/ui/primitives/index.d.ts +0 -1
  430. package/dist/ui/primitives/index.js +0 -3
  431. /package/{dist/ui/layout → src/runes/layout/src}/ContentArea.svelte +0 -0
  432. /package/{dist/ui/layout → src/runes/layout/src}/DetailPanel.svelte +0 -0
  433. /package/{dist/ui/features → src/runes/palettes/src}/notifications/NotificationBell.svelte +0 -0
@@ -0,0 +1,220 @@
1
+ // sdk/core/src/money/money-primitive.ts
2
+ // Immutable Value Object for monetary amounts.
3
+ // Zero Svelte dependencies — pure TypeScript class.
4
+
5
+ import { CURRENCY_MAP, type ISO4217Code } from "./money.ts";
6
+
7
+ /**
8
+ * Serializable representation of a MoneyPrimitive.
9
+ * Used for persistence drivers and JSON round-trips.
10
+ */
11
+ export interface MoneyJSON {
12
+ amount: number;
13
+ currencyCode: string;
14
+ scale: number;
15
+ }
16
+
17
+ /**
18
+ * Immutable Value Object that encapsulates a monetary amount, its currency,
19
+ * and the scale (number of decimal places).
20
+ *
21
+ * Amounts are always stored in minor units (e.g., cents for USD, centavos for MXN).
22
+ * The scale is derived from the currency's exponent in CURRENCY_MAP.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * const price = MoneyPrimitive.fromMajor(12.99, "USD");
27
+ * price.minor; // 1299
28
+ * price.major; // 12.99
29
+ * price.format("en-US"); // "$12.99"
30
+ *
31
+ * const json = price.toJSON();
32
+ * const restored = MoneyPrimitive.fromJSON(json);
33
+ * ```
34
+ */
35
+ export class MoneyPrimitive {
36
+ /** Raw amount in minor units (e.g., cents). */
37
+ readonly amount: number;
38
+ /** ISO 4217 currency code. */
39
+ readonly currencyCode: string;
40
+ /** Number of decimal places for this currency (e.g., 2 for USD, 0 for JPY). */
41
+ readonly scale: number;
42
+
43
+ private constructor(amount: number, currencyCode: string, scale: number) {
44
+ this.amount = Math.round(amount);
45
+ this.currencyCode = currencyCode;
46
+ this.scale = scale;
47
+ }
48
+
49
+ // ── Factories ────────────────────────────────────────────────────────────
50
+
51
+ /**
52
+ * Create a MoneyPrimitive from a minor-unit integer amount.
53
+ * @param amount - Amount in minor units (e.g., 1299 for $12.99)
54
+ * @param currencyCode - ISO 4217 currency code
55
+ */
56
+ static fromMinor(
57
+ amount: number,
58
+ currencyCode: ISO4217Code | string,
59
+ ): MoneyPrimitive {
60
+ const scale = MoneyPrimitive.resolveScale(currencyCode);
61
+ return new MoneyPrimitive(amount, currencyCode, scale);
62
+ }
63
+
64
+ /**
65
+ * Create a MoneyPrimitive from a major-unit float amount.
66
+ * @param amount - Amount in major units (e.g., 12.99 for $12.99)
67
+ * @param currencyCode - ISO 4217 currency code
68
+ */
69
+ static fromMajor(
70
+ amount: number,
71
+ currencyCode: ISO4217Code | string,
72
+ ): MoneyPrimitive {
73
+ const scale = MoneyPrimitive.resolveScale(currencyCode);
74
+ const factor = Math.pow(10, scale);
75
+ return new MoneyPrimitive(Math.round(amount * factor), currencyCode, scale);
76
+ }
77
+
78
+ /**
79
+ * Restore a MoneyPrimitive from its JSON representation.
80
+ */
81
+ static fromJSON(json: MoneyJSON): MoneyPrimitive {
82
+ return new MoneyPrimitive(json.amount, json.currencyCode, json.scale);
83
+ }
84
+
85
+ // ── Computed Getters ─────────────────────────────────────────────────────
86
+
87
+ /** Amount in minor units (alias for `amount`). */
88
+ get minor(): number {
89
+ return this.amount;
90
+ }
91
+
92
+ /** Amount in major units (e.g., 12.99 for 1299 cents). */
93
+ get major(): number {
94
+ if (this.scale === 0) return this.amount;
95
+ return this.amount / Math.pow(10, this.scale);
96
+ }
97
+
98
+ // ── Formatting ───────────────────────────────────────────────────────────
99
+
100
+ /**
101
+ * Format this monetary value as a locale-aware currency string.
102
+ * @param locale - BCP 47 locale string (default: "en-US")
103
+ */
104
+ format(locale: string = "en-US"): string {
105
+ return new Intl.NumberFormat(locale, {
106
+ style: "currency",
107
+ currency: this.currencyCode,
108
+ minimumFractionDigits: this.scale,
109
+ maximumFractionDigits: this.scale,
110
+ }).format(this.major);
111
+ }
112
+
113
+ // ── Arithmetic (returns new instances — immutability) ────────────────────
114
+
115
+ /**
116
+ * Add another MoneyPrimitive (must be same currency).
117
+ * Returns a new MoneyPrimitive.
118
+ */
119
+ add(other: MoneyPrimitive): MoneyPrimitive {
120
+ this.assertSameCurrency(other);
121
+ return new MoneyPrimitive(
122
+ this.amount + other.amount,
123
+ this.currencyCode,
124
+ this.scale,
125
+ );
126
+ }
127
+
128
+ /**
129
+ * Subtract another MoneyPrimitive (must be same currency).
130
+ * Returns a new MoneyPrimitive.
131
+ */
132
+ subtract(other: MoneyPrimitive): MoneyPrimitive {
133
+ this.assertSameCurrency(other);
134
+ return new MoneyPrimitive(
135
+ this.amount - other.amount,
136
+ this.currencyCode,
137
+ this.scale,
138
+ );
139
+ }
140
+
141
+ /**
142
+ * Multiply by a scalar factor. Returns a new MoneyPrimitive.
143
+ */
144
+ multiply(factor: number): MoneyPrimitive {
145
+ return new MoneyPrimitive(
146
+ Math.round(this.amount * factor),
147
+ this.currencyCode,
148
+ this.scale,
149
+ );
150
+ }
151
+
152
+ // ── Comparison ───────────────────────────────────────────────────────────
153
+
154
+ /**
155
+ * Value equality — two MoneyPrimitives are equal if they have the same
156
+ * amount, currency code, and scale.
157
+ */
158
+ equals(other: MoneyPrimitive): boolean {
159
+ return (
160
+ this.amount === other.amount &&
161
+ this.currencyCode === other.currencyCode &&
162
+ this.scale === other.scale
163
+ );
164
+ }
165
+
166
+ /**
167
+ * Returns true if this amount is zero.
168
+ */
169
+ isZero(): boolean {
170
+ return this.amount === 0;
171
+ }
172
+
173
+ /**
174
+ * Returns true if this amount is negative.
175
+ */
176
+ isNegative(): boolean {
177
+ return this.amount < 0;
178
+ }
179
+
180
+ // ── Serialization ────────────────────────────────────────────────────────
181
+
182
+ /**
183
+ * Serialize to a plain JSON-compatible object.
184
+ */
185
+ toJSON(): MoneyJSON {
186
+ return {
187
+ amount: this.amount,
188
+ currencyCode: this.currencyCode,
189
+ scale: this.scale,
190
+ };
191
+ }
192
+
193
+ toString(): string {
194
+ return `MoneyPrimitive(${this.amount} ${this.currencyCode} scale=${this.scale})`;
195
+ }
196
+
197
+ // ── Private Helpers ──────────────────────────────────────────────────────
198
+
199
+ private assertSameCurrency(other: MoneyPrimitive): void {
200
+ if (this.currencyCode !== other.currencyCode) {
201
+ throw new Error(
202
+ `Currency mismatch: cannot operate on ${this.currencyCode} and ${other.currencyCode}`,
203
+ );
204
+ }
205
+ }
206
+
207
+ /**
208
+ * Resolves the scale (exponent) for a currency code from CURRENCY_MAP.
209
+ * Throws if the currency is not registered.
210
+ */
211
+ private static resolveScale(currencyCode: string): number {
212
+ const currency = CURRENCY_MAP[currencyCode];
213
+ if (!currency) {
214
+ throw new Error(
215
+ `Unknown currency code: ${currencyCode}. Register it first via registerCurrency().`,
216
+ );
217
+ }
218
+ return currency.exponent;
219
+ }
220
+ }
@@ -0,0 +1,183 @@
1
+ import { describe, expect, it } from "vite-plus/test";
2
+ import { toSnapshot } from "dinero.js";
3
+ import {
4
+ convertAmount,
5
+ convertMoney,
6
+ createMoney,
7
+ CURRENCY_MAP,
8
+ formatAmount,
9
+ fromMoneySnapshot,
10
+ registerCurrency,
11
+ scaledRate,
12
+ toAdyenMoney,
13
+ toMinorUnit,
14
+ toMoneySnapshot,
15
+ toPaypalMoney,
16
+ toSquareMoney,
17
+ toStripeMoney,
18
+ } from "./money.ts";
19
+
20
+ describe("Money Core Utilities", () => {
21
+ describe("safeAmount()", () => {
22
+ it("should return 0 for null and undefined", () => {
23
+ // testing internal private function via public wrapper createMoney
24
+ expect(toSnapshot(createMoney(null, "USD")).amount).toBe(0);
25
+ expect(toSnapshot(createMoney(undefined, "USD")).amount).toBe(0);
26
+ });
27
+
28
+ it("should return finite numbers unchanged", () => {
29
+ expect(toSnapshot(createMoney(1234, "USD")).amount).toBe(1234);
30
+ });
31
+
32
+ it("should return 0 for NaN and Infinity", () => {
33
+ expect(toSnapshot(createMoney(NaN, "USD")).amount).toBe(0);
34
+ expect(toSnapshot(createMoney(Infinity, "USD")).amount).toBe(0);
35
+ });
36
+
37
+ it("should handle bigints", () => {
38
+ expect(toSnapshot(createMoney(BigInt(5000), "USD")).amount).toBe(5000);
39
+ });
40
+
41
+ it("should handle objects with toString (SurrealDB Decimal)", () => {
42
+ const decimal = { toString: () => "123.45" };
43
+ expect(toSnapshot(createMoney(decimal, "USD")).amount).toBe(123); // Math.round(123.45) = 123
44
+ });
45
+
46
+ it("should handle numeric strings", () => {
47
+ expect(toSnapshot(createMoney("999", "USD")).amount).toBe(999);
48
+ });
49
+ });
50
+
51
+ describe("toMinorUnit()", () => {
52
+ it("should convert major to minor for MXN (exponent 2)", () => {
53
+ expect(toMinorUnit(12900000, "MXN")).toBe(1290000000);
54
+ });
55
+
56
+ it("should convert major to minor for JPY (exponent 0)", () => {
57
+ expect(toMinorUnit(5000, "JPY")).toBe(5000);
58
+ });
59
+
60
+ it("should throw for unknown currency", () => {
61
+ expect(() => toMinorUnit(100, "UNKNOWN")).toThrow();
62
+ });
63
+ });
64
+
65
+ describe("registerCurrency()", () => {
66
+ it("should allow registering a new currency and creating money with it", () => {
67
+ const KWD = { code: "KWD", base: 10, exponent: 3 };
68
+ registerCurrency("KWD", KWD);
69
+
70
+ expect(CURRENCY_MAP["KWD"]).toEqual(KWD);
71
+
72
+ const money = createMoney(1000, "KWD");
73
+ expect(toSnapshot(money).currency.code).toBe("KWD");
74
+ });
75
+ });
76
+
77
+ describe("formatAmount()", () => {
78
+ it("should format minor units correctly for USD", () => {
79
+ // $1.50
80
+ expect(formatAmount(150, "USD", "en-US")).toMatch(/\$1\.50/);
81
+ });
82
+
83
+ it("should format minor units correctly for MXN", () => {
84
+ // MX$1.50 or $1.50 depending on locale
85
+ expect(formatAmount(150, "MXN", "es-MX")).toMatch(/\$1\.50/);
86
+ });
87
+ });
88
+
89
+ describe("Exchange Rates & Conversion", () => {
90
+ describe("scaledRate()", () => {
91
+ it("should convert float to ScaledRate with default precision", () => {
92
+ expect(scaledRate(17.23)).toEqual({ amount: 172300, scale: 4 });
93
+ });
94
+
95
+ it("should use custom precision", () => {
96
+ expect(scaledRate(0.89, 2)).toEqual({ amount: 89, scale: 2 });
97
+ });
98
+
99
+ it("should handle integer rates", () => {
100
+ expect(scaledRate(1199, 0)).toEqual({ amount: 1199, scale: 0 });
101
+ });
102
+ });
103
+
104
+ describe("convertMoney()", () => {
105
+ it("should convert USD to MXN", () => {
106
+ const usd = createMoney(100, "USD");
107
+ const rates = { MXN: scaledRate(20) };
108
+ const mxn = convertMoney(usd, "MXN", rates);
109
+ const snapshot = toSnapshot(mxn);
110
+ expect(snapshot.amount).toBe(20000000);
111
+ expect(snapshot.scale).toBe(6);
112
+ expect(snapshot.currency.code).toBe("MXN");
113
+ });
114
+
115
+ it("should throw for unknown target currency", () => {
116
+ const usd = createMoney(100, "USD");
117
+ expect(() => convertMoney(usd, "UNKNOWN", {})).toThrow();
118
+ });
119
+
120
+ it("should throw for missing rate", () => {
121
+ const usd = createMoney(100, "USD");
122
+ expect(() => convertMoney(usd, "MXN", {})).toThrow();
123
+ });
124
+ });
125
+
126
+ describe("convertAmount()", () => {
127
+ it("should return same amount if codes match", () => {
128
+ expect(convertAmount(100, "USD", "USD", {})).toBe(100);
129
+ });
130
+
131
+ it("should convert minor units correctly", () => {
132
+ const rates = { MXN: scaledRate(20) };
133
+ expect(convertAmount(100, "USD", "MXN", rates)).toBe(2000);
134
+ });
135
+ });
136
+ });
137
+
138
+ describe("Payment Provider Helpers", () => {
139
+ it("toStripeMoney should return lowercase currency and amount", () => {
140
+ const money = createMoney(150, "USD");
141
+ expect(toStripeMoney(money)).toEqual({ amount: 150, currency: "usd" });
142
+ });
143
+
144
+ it("toPaypalMoney should return decimal string and uppercase code", () => {
145
+ const money = createMoney(150, "USD");
146
+ expect(toPaypalMoney(money)).toEqual({
147
+ value: "1.50",
148
+ currency_code: "USD",
149
+ });
150
+ });
151
+
152
+ it("toAdyenMoney should return amount and uppercase code", () => {
153
+ const money = createMoney(150, "USD");
154
+ expect(toAdyenMoney(money)).toEqual({ value: 150, currency: "USD" });
155
+ });
156
+
157
+ it("toSquareMoney should return bigint amount and code", () => {
158
+ const money = createMoney(150, "USD");
159
+ expect(toSquareMoney(money)).toEqual({
160
+ amount: BigInt(150),
161
+ currency: "USD",
162
+ });
163
+ });
164
+ });
165
+
166
+ describe("Snapshots", () => {
167
+ it("should round-trip to/from money snapshot", () => {
168
+ const money = createMoney(123, "MXN");
169
+ const snapshot = toMoneySnapshot(money);
170
+ expect(snapshot).toEqual({ amount: 123, currency: "MXN", scale: 2 });
171
+
172
+ const restored = fromMoneySnapshot(snapshot);
173
+ expect(toSnapshot(restored)).toEqual(toSnapshot(money));
174
+ });
175
+
176
+ it("should preserve elevated scale", () => {
177
+ const _money = createMoney(123, "USD");
178
+ const snapshot = { amount: 12345, currency: "USD", scale: 4 };
179
+ const restored = fromMoneySnapshot(snapshot);
180
+ expect(toSnapshot(restored).scale).toBe(4);
181
+ });
182
+ });
183
+ });