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.
- package/.gitignore +12 -0
- package/README.md +4 -4
- package/deno.json +50 -0
- package/justfile +5 -0
- package/package.json +3 -80
- package/scripts/build_pkg.ts +51 -0
- package/scripts/ci.just +26 -0
- package/scripts/deploy.just +21 -0
- package/scripts/dev.just +4 -0
- package/scripts/inject.just +72 -0
- package/src/RuneProvider.svelte +105 -0
- package/src/i18n/message-resolver.test.ts +103 -0
- package/src/i18n/message-resolver.ts +89 -0
- package/src/i18n/project.inlang/settings.json +26 -0
- package/src/i18n/translations/ar.json +89 -0
- package/src/i18n/translations/de.json +89 -0
- package/src/i18n/translations/en.json +89 -0
- package/src/i18n/translations/es.json +89 -0
- package/src/i18n/translations/fr.json +89 -0
- package/src/i18n/translations/hi.json +89 -0
- package/src/i18n/translations/it.json +89 -0
- package/src/i18n/translations/ja.json +89 -0
- package/src/i18n/translations/ko.json +89 -0
- package/src/i18n/translations/pt.json +89 -0
- package/src/i18n/translations/ru.json +89 -0
- package/src/i18n/translations/vi.json +89 -0
- package/src/i18n/translations/zh.json +89 -0
- package/src/kernel/deno.json +5 -0
- package/src/kernel/src/actions/portal.ts +41 -0
- package/src/kernel/src/actions/shortcut-listener.ts +50 -0
- package/src/kernel/src/context/app.svelte.ts +98 -0
- package/src/kernel/src/context/context.ts +31 -0
- package/src/kernel/src/context/stores.svelte.ts +96 -0
- package/src/kernel/src/context/types.ts +110 -0
- package/src/kernel/src/context/useRuneLab.ts +38 -0
- package/src/kernel/src/mod.ts +13 -0
- package/src/kernel/src/persistence/createConfigStore.svelte.ts +120 -0
- package/src/kernel/src/persistence/drivers.test.ts +95 -0
- package/src/kernel/src/persistence/drivers.ts +77 -0
- package/src/kernel/src/persistence/provider.test.ts +58 -0
- package/src/kernel/src/persistence/provider.ts +58 -0
- package/src/kernel/src/persistence/types.ts +19 -0
- package/src/kernel/src/persistence/usePersistence.ts +9 -0
- package/src/kernel/src/registry/mod.ts +221 -0
- package/src/kernel/src/registry/registry.test.ts +162 -0
- package/src/kernel/src/tokens/props.ts +94 -0
- package/src/mod.ts +10 -0
- package/src/runes/layout/deno.json +5 -0
- package/src/runes/layout/src/APP_CONFIGURATIONS.ts +56 -0
- package/{dist/ui/features/config → src/runes/layout/src}/AppSettingSelector.svelte +1 -1
- package/{dist/ui/layout → src/runes/layout/src}/ConnectedNavigationPanel.svelte +7 -8
- package/{dist/ui/layout → src/runes/layout/src}/ConnectedWorkspaceStrip.svelte +5 -3
- package/src/runes/layout/src/Icon.svelte +7 -0
- package/src/runes/layout/src/LanguageSelector.svelte +45 -0
- package/{dist/ui/layout → src/runes/layout/src}/NavigationPanel.svelte +1 -4
- package/src/runes/layout/src/ResourceSelector.svelte +90 -0
- package/src/runes/layout/src/ThemeSelector.svelte +50 -0
- package/{dist/ui/layout → src/runes/layout/src}/WorkspaceLayout.svelte +13 -3
- package/{dist/ui/layout → src/runes/layout/src}/WorkspaceStrip.svelte +1 -1
- package/src/runes/layout/src/connection-factory.ts +95 -0
- package/src/runes/layout/src/language.svelte.ts +44 -0
- package/src/runes/layout/src/mod.ts +71 -0
- package/src/runes/layout/src/store.svelte.ts +142 -0
- package/src/runes/layout/src/theme.svelte.ts +73 -0
- package/src/runes/layout/src/types.ts +11 -0
- package/src/runes/palettes/deno.json +8 -0
- package/{dist/ui/features/command-palette → src/runes/palettes/src/commands}/CommandPalette.svelte +4 -4
- package/src/runes/palettes/src/commands/mod.ts +2 -0
- package/src/runes/palettes/src/commands/store.svelte.ts +80 -0
- package/src/runes/palettes/src/mod.ts +51 -0
- package/{dist/ui/components → src/runes/palettes/src/notifications}/Toaster.svelte +1 -2
- package/src/runes/palettes/src/notifications/bridge.ts +56 -0
- package/src/runes/palettes/src/notifications/mod.ts +4 -0
- package/src/runes/palettes/src/notifications/store.svelte.ts +58 -0
- package/{dist/ui/features → src/runes/palettes/src}/shortcuts/ShortcutPalette.svelte +4 -4
- package/src/runes/palettes/src/shortcuts/mod.ts +4 -0
- package/src/runes/palettes/src/shortcuts/store.svelte.ts +85 -0
- package/src/runes/palettes/src/shortcuts/types.ts +4 -0
- package/src/runes/palettes/src/shortcuts/useShortcuts.ts +85 -0
- package/src/runes/plugins/money/deno.json +8 -0
- package/src/runes/plugins/money/src/CurrencySelector.svelte +41 -0
- package/src/runes/plugins/money/src/MoneyDisplay.svelte +142 -0
- package/src/runes/plugins/money/src/MoneyInput.svelte +208 -0
- package/src/runes/plugins/money/src/currency.svelte.ts +95 -0
- package/src/runes/plugins/money/src/currency.test.ts +40 -0
- package/src/runes/plugins/money/src/exchange-rate.svelte.ts +176 -0
- package/src/runes/plugins/money/src/exchange-rate.test.ts +95 -0
- package/src/runes/plugins/money/src/mod.ts +79 -0
- package/src/runes/plugins/money/src/money-primitive.test.ts +217 -0
- package/src/runes/plugins/money/src/money-primitive.ts +220 -0
- package/src/runes/plugins/money/src/money.test.ts +183 -0
- package/src/runes/plugins/money/src/money.ts +382 -0
- package/src/runes/plugins/money/src/strategies.test.ts +143 -0
- package/src/runes/plugins/money/src/strategies.ts +95 -0
- package/src/runes/plugins/money/src/types.ts +27 -0
- package/src/runes/plugins/money/src/useMoney.ts +261 -0
- package/src/runes/plugins/money/src/useMoneyFilter.ts +132 -0
- package/tsconfig.json +41 -0
- package/vite.config.ts +44 -0
- package/dist/core/index.d.ts +0 -4
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -3
- package/dist/core/internal/message-resolver.d.ts +0 -42
- package/dist/core/internal/message-resolver.d.ts.map +0 -1
- package/dist/core/internal/message-resolver.js +0 -47
- package/dist/core/money/index.d.ts +0 -2
- package/dist/core/money/index.d.ts.map +0 -1
- package/dist/core/money/index.js +0 -2
- package/dist/core/money/money.d.ts +0 -57
- package/dist/core/money/money.d.ts.map +0 -1
- package/dist/core/money/money.js +0 -132
- package/dist/core/persistence/types.d.ts +0 -18
- package/dist/core/persistence/types.d.ts.map +0 -1
- package/dist/core/persistence/types.js +0 -2
- package/dist/index.d.ts +0 -5
- package/dist/index.js +0 -5
- package/dist/state/api.svelte.d.ts +0 -26
- package/dist/state/api.svelte.js +0 -65
- package/dist/state/app.svelte.d.ts +0 -48
- package/dist/state/app.svelte.js +0 -82
- package/dist/state/auth/index.d.ts +0 -2
- package/dist/state/auth/index.js +0 -2
- package/dist/state/auth/session.svelte.d.ts +0 -40
- package/dist/state/auth/session.svelte.js +0 -57
- package/dist/state/auth/types.d.ts +0 -30
- package/dist/state/auth/types.js +0 -3
- package/dist/state/cart.svelte.d.ts +0 -64
- package/dist/state/cart.svelte.js +0 -122
- package/dist/state/commands.svelte.d.ts +0 -46
- package/dist/state/commands.svelte.js +0 -62
- package/dist/state/composables/useMoney.d.ts +0 -15
- package/dist/state/composables/useMoney.js +0 -62
- package/dist/state/composables/usePersistence.d.ts +0 -2
- package/dist/state/composables/usePersistence.js +0 -5
- package/dist/state/composables/useRuneLab.d.ts +0 -19
- package/dist/state/composables/useRuneLab.js +0 -30
- package/dist/state/context.d.ts +0 -14
- package/dist/state/context.js +0 -15
- package/dist/state/createConfigStore.svelte.d.ts +0 -55
- package/dist/state/createConfigStore.svelte.js +0 -61
- package/dist/state/currency.svelte.d.ts +0 -28
- package/dist/state/currency.svelte.js +0 -80
- package/dist/state/daisyui.d.ts +0 -4
- package/dist/state/index.d.ts +0 -19
- package/dist/state/index.js +0 -25
- package/dist/state/language.svelte.d.ts +0 -64
- package/dist/state/language.svelte.js +0 -44
- package/dist/state/layout.svelte.d.ts +0 -49
- package/dist/state/layout.svelte.js +0 -108
- package/dist/state/persistence/drivers.d.ts +0 -12
- package/dist/state/persistence/drivers.js +0 -73
- package/dist/state/shortcuts.svelte.d.ts +0 -121
- package/dist/state/shortcuts.svelte.js +0 -222
- package/dist/state/theme.svelte.d.ts +0 -22
- package/dist/state/theme.svelte.js +0 -92
- package/dist/state/toast-bridge.d.ts +0 -29
- package/dist/state/toast-bridge.js +0 -43
- package/dist/state/toast.svelte.d.ts +0 -27
- package/dist/state/toast.svelte.js +0 -43
- package/dist/ui/actions/portal.d.ts +0 -7
- package/dist/ui/actions/portal.js +0 -32
- package/dist/ui/components/ApiMonitor.svelte +0 -162
- package/dist/ui/components/ApiMonitor.svelte.d.ts +0 -3
- package/dist/ui/components/Icon.svelte +0 -108
- package/dist/ui/components/Icon.svelte.d.ts +0 -14
- package/dist/ui/components/Kyntharil.svelte +0 -48
- package/dist/ui/components/Kyntharil.svelte.d.ts +0 -6
- package/dist/ui/components/RuneProvider.svelte +0 -198
- package/dist/ui/components/RuneProvider.svelte.d.ts +0 -42
- package/dist/ui/components/Toaster.svelte.d.ts +0 -18
- package/dist/ui/components/money/MoneyDisplay.svelte +0 -69
- package/dist/ui/components/money/MoneyDisplay.svelte.d.ts +0 -21
- package/dist/ui/components/money/MoneyDisplay.svelte.test.d.ts +0 -1
- package/dist/ui/components/money/MoneyDisplay.svelte.test.js +0 -74
- package/dist/ui/components/money/MoneyInput.svelte +0 -131
- package/dist/ui/components/money/MoneyInput.svelte.d.ts +0 -25
- package/dist/ui/components/money/index.d.ts +0 -2
- package/dist/ui/components/money/index.js +0 -3
- package/dist/ui/components/user/UserAvatar.svelte +0 -66
- package/dist/ui/components/user/UserAvatar.svelte.d.ts +0 -13
- package/dist/ui/components/user/UserProfile.svelte +0 -79
- package/dist/ui/components/user/UserProfile.svelte.d.ts +0 -17
- package/dist/ui/components/user/index.d.ts +0 -2
- package/dist/ui/components/user/index.js +0 -3
- package/dist/ui/features/command-palette/CommandPalette.svelte.d.ts +0 -6
- package/dist/ui/features/config/AppSettingSelector.svelte.d.ts +0 -13
- package/dist/ui/features/config/CurrencySelector.svelte +0 -67
- package/dist/ui/features/config/CurrencySelector.svelte.d.ts +0 -8
- package/dist/ui/features/config/LanguageSelector.svelte +0 -66
- package/dist/ui/features/config/LanguageSelector.svelte.d.ts +0 -8
- package/dist/ui/features/config/ThemeSelector.svelte +0 -73
- package/dist/ui/features/config/ThemeSelector.svelte.d.ts +0 -8
- package/dist/ui/features/notifications/NotificationBell.svelte.d.ts +0 -11
- package/dist/ui/features/notifications/index.d.ts +0 -1
- package/dist/ui/features/notifications/index.js +0 -2
- package/dist/ui/features/shortcuts/ShortcutPalette.svelte.d.ts +0 -6
- package/dist/ui/index.d.ts +0 -26
- package/dist/ui/index.js +0 -41
- package/dist/ui/layout/ConnectedNavigationPanel.svelte.d.ts +0 -10
- package/dist/ui/layout/ConnectedWorkspaceStrip.svelte.d.ts +0 -9
- package/dist/ui/layout/ContentArea.svelte.d.ts +0 -8
- package/dist/ui/layout/DetailPanel.svelte.d.ts +0 -7
- package/dist/ui/layout/NavigationPanel.svelte.d.ts +0 -14
- package/dist/ui/layout/WorkspaceLayout.svelte.d.ts +0 -25
- package/dist/ui/layout/WorkspaceStrip.svelte.d.ts +0 -11
- package/dist/ui/layout/index.d.ts +0 -7
- package/dist/ui/layout/index.js +0 -7
- package/dist/ui/paraglide/README.md +0 -94
- package/dist/ui/paraglide/messages/_index.d.ts +0 -87
- package/dist/ui/paraglide/messages/_index.js +0 -88
- package/dist/ui/paraglide/messages/abyss.d.ts +0 -16
- package/dist/ui/paraglide/messages/abyss.js +0 -84
- package/dist/ui/paraglide/messages/acid.d.ts +0 -16
- package/dist/ui/paraglide/messages/acid.js +0 -84
- package/dist/ui/paraglide/messages/active_toasts.d.ts +0 -16
- package/dist/ui/paraglide/messages/active_toasts.js +0 -84
- package/dist/ui/paraglide/messages/aed3.d.ts +0 -17
- package/dist/ui/paraglide/messages/aed3.js +0 -85
- package/dist/ui/paraglide/messages/all_currencies.d.ts +0 -16
- package/dist/ui/paraglide/messages/all_currencies.js +0 -84
- package/dist/ui/paraglide/messages/all_languages.d.ts +0 -16
- package/dist/ui/paraglide/messages/all_languages.js +0 -84
- package/dist/ui/paraglide/messages/all_themes.d.ts +0 -16
- package/dist/ui/paraglide/messages/all_themes.js +0 -84
- package/dist/ui/paraglide/messages/api_status.d.ts +0 -16
- package/dist/ui/paraglide/messages/api_status.js +0 -84
- package/dist/ui/paraglide/messages/app_info.d.ts +0 -16
- package/dist/ui/paraglide/messages/app_info.js +0 -84
- package/dist/ui/paraglide/messages/appearance.d.ts +0 -16
- package/dist/ui/paraglide/messages/appearance.js +0 -84
- package/dist/ui/paraglide/messages/aqua.d.ts +0 -16
- package/dist/ui/paraglide/messages/aqua.js +0 -84
- package/dist/ui/paraglide/messages/ar.d.ts +0 -16
- package/dist/ui/paraglide/messages/ar.js +0 -84
- package/dist/ui/paraglide/messages/autumn.d.ts +0 -16
- package/dist/ui/paraglide/messages/autumn.js +0 -84
- package/dist/ui/paraglide/messages/black.d.ts +0 -16
- package/dist/ui/paraglide/messages/black.js +0 -84
- package/dist/ui/paraglide/messages/brl3.d.ts +0 -17
- package/dist/ui/paraglide/messages/brl3.js +0 -85
- package/dist/ui/paraglide/messages/bumblebee.d.ts +0 -16
- package/dist/ui/paraglide/messages/bumblebee.js +0 -84
- package/dist/ui/paraglide/messages/business.d.ts +0 -16
- package/dist/ui/paraglide/messages/business.js +0 -84
- package/dist/ui/paraglide/messages/cad3.d.ts +0 -17
- package/dist/ui/paraglide/messages/cad3.js +0 -85
- package/dist/ui/paraglide/messages/caramellatte.d.ts +0 -16
- package/dist/ui/paraglide/messages/caramellatte.js +0 -84
- package/dist/ui/paraglide/messages/cmyk.d.ts +0 -16
- package/dist/ui/paraglide/messages/cmyk.js +0 -84
- package/dist/ui/paraglide/messages/cny3.d.ts +0 -17
- package/dist/ui/paraglide/messages/cny3.js +0 -85
- package/dist/ui/paraglide/messages/coffee.d.ts +0 -16
- package/dist/ui/paraglide/messages/coffee.js +0 -84
- package/dist/ui/paraglide/messages/commands_label.d.ts +0 -16
- package/dist/ui/paraglide/messages/commands_label.js +0 -84
- package/dist/ui/paraglide/messages/corporate.d.ts +0 -16
- package/dist/ui/paraglide/messages/corporate.js +0 -84
- package/dist/ui/paraglide/messages/cupcake.d.ts +0 -16
- package/dist/ui/paraglide/messages/cupcake.js +0 -84
- package/dist/ui/paraglide/messages/currency.d.ts +0 -16
- package/dist/ui/paraglide/messages/currency.js +0 -84
- package/dist/ui/paraglide/messages/current_currency.d.ts +0 -16
- package/dist/ui/paraglide/messages/current_currency.js +0 -84
- package/dist/ui/paraglide/messages/current_language.d.ts +0 -16
- package/dist/ui/paraglide/messages/current_language.js +0 -84
- package/dist/ui/paraglide/messages/current_theme.d.ts +0 -16
- package/dist/ui/paraglide/messages/current_theme.js +0 -84
- package/dist/ui/paraglide/messages/currently_in_queue.d.ts +0 -16
- package/dist/ui/paraglide/messages/currently_in_queue.js +0 -84
- package/dist/ui/paraglide/messages/cyberpunk.d.ts +0 -16
- package/dist/ui/paraglide/messages/cyberpunk.js +0 -84
- package/dist/ui/paraglide/messages/dark.d.ts +0 -16
- package/dist/ui/paraglide/messages/dark.js +0 -84
- package/dist/ui/paraglide/messages/de.d.ts +0 -16
- package/dist/ui/paraglide/messages/de.js +0 -84
- package/dist/ui/paraglide/messages/dim.d.ts +0 -16
- package/dist/ui/paraglide/messages/dim.js +0 -84
- package/dist/ui/paraglide/messages/dracula.d.ts +0 -16
- package/dist/ui/paraglide/messages/dracula.js +0 -84
- package/dist/ui/paraglide/messages/emerald.d.ts +0 -16
- package/dist/ui/paraglide/messages/emerald.js +0 -84
- package/dist/ui/paraglide/messages/en.d.ts +0 -16
- package/dist/ui/paraglide/messages/en.js +0 -84
- package/dist/ui/paraglide/messages/es.d.ts +0 -16
- package/dist/ui/paraglide/messages/es.js +0 -84
- package/dist/ui/paraglide/messages/eur3.d.ts +0 -17
- package/dist/ui/paraglide/messages/eur3.js +0 -85
- package/dist/ui/paraglide/messages/extended_controls.d.ts +0 -16
- package/dist/ui/paraglide/messages/extended_controls.js +0 -84
- package/dist/ui/paraglide/messages/fantasy.d.ts +0 -16
- package/dist/ui/paraglide/messages/fantasy.js +0 -84
- package/dist/ui/paraglide/messages/forest.d.ts +0 -16
- package/dist/ui/paraglide/messages/forest.js +0 -84
- package/dist/ui/paraglide/messages/fr.d.ts +0 -16
- package/dist/ui/paraglide/messages/fr.js +0 -84
- package/dist/ui/paraglide/messages/garden.d.ts +0 -16
- package/dist/ui/paraglide/messages/garden.js +0 -84
- package/dist/ui/paraglide/messages/gbp3.d.ts +0 -17
- package/dist/ui/paraglide/messages/gbp3.js +0 -85
- package/dist/ui/paraglide/messages/halloween.d.ts +0 -16
- package/dist/ui/paraglide/messages/halloween.js +0 -84
- package/dist/ui/paraglide/messages/hello_world.d.ts +0 -18
- package/dist/ui/paraglide/messages/hello_world.js +0 -84
- package/dist/ui/paraglide/messages/hi.d.ts +0 -16
- package/dist/ui/paraglide/messages/hi.js +0 -84
- package/dist/ui/paraglide/messages/inr3.d.ts +0 -17
- package/dist/ui/paraglide/messages/inr3.js +0 -85
- package/dist/ui/paraglide/messages/it.d.ts +0 -16
- package/dist/ui/paraglide/messages/it.js +0 -84
- package/dist/ui/paraglide/messages/ja.d.ts +0 -16
- package/dist/ui/paraglide/messages/ja.js +0 -84
- package/dist/ui/paraglide/messages/jpy3.d.ts +0 -17
- package/dist/ui/paraglide/messages/jpy3.js +0 -85
- package/dist/ui/paraglide/messages/ko.d.ts +0 -16
- package/dist/ui/paraglide/messages/ko.js +0 -84
- package/dist/ui/paraglide/messages/krw3.d.ts +0 -17
- package/dist/ui/paraglide/messages/krw3.js +0 -85
- package/dist/ui/paraglide/messages/languages.d.ts +0 -16
- package/dist/ui/paraglide/messages/languages.js +0 -84
- package/dist/ui/paraglide/messages/lemonade.d.ts +0 -16
- package/dist/ui/paraglide/messages/lemonade.js +0 -84
- package/dist/ui/paraglide/messages/light.d.ts +0 -16
- package/dist/ui/paraglide/messages/light.js +0 -84
- package/dist/ui/paraglide/messages/live_store_dashboard.d.ts +0 -16
- package/dist/ui/paraglide/messages/live_store_dashboard.js +0 -84
- package/dist/ui/paraglide/messages/localization.d.ts +0 -16
- package/dist/ui/paraglide/messages/localization.js +0 -84
- package/dist/ui/paraglide/messages/lofi.d.ts +0 -16
- package/dist/ui/paraglide/messages/lofi.js +0 -84
- package/dist/ui/paraglide/messages/luxury.d.ts +0 -16
- package/dist/ui/paraglide/messages/luxury.js +0 -84
- package/dist/ui/paraglide/messages/mxn3.d.ts +0 -17
- package/dist/ui/paraglide/messages/mxn3.js +0 -85
- package/dist/ui/paraglide/messages/name_label.d.ts +0 -16
- package/dist/ui/paraglide/messages/name_label.js +0 -84
- package/dist/ui/paraglide/messages/night.d.ts +0 -16
- package/dist/ui/paraglide/messages/night.js +0 -84
- package/dist/ui/paraglide/messages/nord.d.ts +0 -16
- package/dist/ui/paraglide/messages/nord.js +0 -84
- package/dist/ui/paraglide/messages/pastel.d.ts +0 -16
- package/dist/ui/paraglide/messages/pastel.js +0 -84
- package/dist/ui/paraglide/messages/pt.d.ts +0 -16
- package/dist/ui/paraglide/messages/pt.js +0 -84
- package/dist/ui/paraglide/messages/real_time_monitor_desc.d.ts +0 -16
- package/dist/ui/paraglide/messages/real_time_monitor_desc.js +0 -84
- package/dist/ui/paraglide/messages/registered_in_registry.d.ts +0 -16
- package/dist/ui/paraglide/messages/registered_in_registry.js +0 -84
- package/dist/ui/paraglide/messages/retro.d.ts +0 -16
- package/dist/ui/paraglide/messages/retro.js +0 -84
- package/dist/ui/paraglide/messages/ru.d.ts +0 -16
- package/dist/ui/paraglide/messages/ru.js +0 -84
- package/dist/ui/paraglide/messages/silk.d.ts +0 -16
- package/dist/ui/paraglide/messages/silk.js +0 -84
- package/dist/ui/paraglide/messages/state_label.d.ts +0 -16
- package/dist/ui/paraglide/messages/state_label.js +0 -84
- package/dist/ui/paraglide/messages/sunset.d.ts +0 -16
- package/dist/ui/paraglide/messages/sunset.js +0 -84
- package/dist/ui/paraglide/messages/synthwave.d.ts +0 -16
- package/dist/ui/paraglide/messages/synthwave.js +0 -84
- package/dist/ui/paraglide/messages/system.d.ts +0 -16
- package/dist/ui/paraglide/messages/system.js +0 -84
- package/dist/ui/paraglide/messages/theme.d.ts +0 -16
- package/dist/ui/paraglide/messages/theme.js +0 -84
- package/dist/ui/paraglide/messages/themes.d.ts +0 -16
- package/dist/ui/paraglide/messages/themes.js +0 -84
- package/dist/ui/paraglide/messages/url_label.d.ts +0 -16
- package/dist/ui/paraglide/messages/url_label.js +0 -84
- package/dist/ui/paraglide/messages/usd3.d.ts +0 -17
- package/dist/ui/paraglide/messages/usd3.js +0 -85
- package/dist/ui/paraglide/messages/valentine.d.ts +0 -16
- package/dist/ui/paraglide/messages/valentine.js +0 -84
- package/dist/ui/paraglide/messages/version_label.d.ts +0 -16
- package/dist/ui/paraglide/messages/version_label.js +0 -84
- package/dist/ui/paraglide/messages/vi.d.ts +0 -16
- package/dist/ui/paraglide/messages/vi.js +0 -84
- package/dist/ui/paraglide/messages/winter.d.ts +0 -16
- package/dist/ui/paraglide/messages/winter.js +0 -84
- package/dist/ui/paraglide/messages/wireframe.d.ts +0 -16
- package/dist/ui/paraglide/messages/wireframe.js +0 -84
- package/dist/ui/paraglide/messages/zh.d.ts +0 -16
- package/dist/ui/paraglide/messages/zh.js +0 -84
- package/dist/ui/paraglide/messages.d.ts +0 -2
- package/dist/ui/paraglide/messages.js +0 -4
- package/dist/ui/paraglide/registry.d.ts +0 -21
- package/dist/ui/paraglide/registry.js +0 -31
- package/dist/ui/paraglide/runtime.d.ts +0 -749
- package/dist/ui/paraglide/runtime.js +0 -1777
- package/dist/ui/paraglide/server.d.ts +0 -103
- package/dist/ui/paraglide/server.js +0 -248
- package/dist/ui/primitives/DatePicker.svelte +0 -257
- package/dist/ui/primitives/DatePicker.svelte.d.ts +0 -17
- package/dist/ui/primitives/index.d.ts +0 -1
- package/dist/ui/primitives/index.js +0 -3
- /package/{dist/ui/layout → src/runes/layout/src}/ContentArea.svelte +0 -0
- /package/{dist/ui/layout → src/runes/layout/src}/DetailPanel.svelte +0 -0
- /package/{dist/ui/features → src/runes/palettes/src}/notifications/NotificationBell.svelte +0 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// sdk/core/src/exchange-rate/strategies.ts
|
|
2
|
+
// Pure conversion strategy functions — no store or context dependencies.
|
|
3
|
+
// Extracted from ExchangeRateStore to enable independent testing and extensibility.
|
|
4
|
+
|
|
5
|
+
import type { ScaledRate } from "./money.ts";
|
|
6
|
+
|
|
7
|
+
// ── Types ──────────────────────────────────────────────────────────────────────
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* A pure function that converts a minor-unit amount using a rate.
|
|
11
|
+
* All strategy functions must be deterministic and side-effect-free.
|
|
12
|
+
*/
|
|
13
|
+
export type ConversionFn = (amount: number, ...rates: number[]) => number;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Resolves a ScaledRate or plain number into a float rate value.
|
|
17
|
+
*/
|
|
18
|
+
export function resolveRate(rate: ScaledRate | number): number {
|
|
19
|
+
if (typeof rate === "number") return rate;
|
|
20
|
+
return rate.amount / Math.pow(10, rate.scale);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// ── Strategy Functions ─────────────────────────────────────────────────────────
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Direct conversion: base currency → target currency.
|
|
27
|
+
* Multiplies the amount by the rate.
|
|
28
|
+
*
|
|
29
|
+
* @param amount - Minor-unit amount in the source currency
|
|
30
|
+
* @param rate - Conversion rate (1 source = `rate` target)
|
|
31
|
+
* @returns Minor-unit amount in the target currency
|
|
32
|
+
*/
|
|
33
|
+
export function directConversion(amount: number, rate: number): number {
|
|
34
|
+
return Math.round(amount * rate);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Inverse conversion: target currency → base currency.
|
|
39
|
+
* Divides the amount by the rate.
|
|
40
|
+
*
|
|
41
|
+
* @param amount - Minor-unit amount in the source currency
|
|
42
|
+
* @param rate - Conversion rate of source relative to base (1 base = `rate` source)
|
|
43
|
+
* @returns Minor-unit amount in the base currency
|
|
44
|
+
*/
|
|
45
|
+
export function inverseConversion(amount: number, rate: number): number {
|
|
46
|
+
if (rate === 0) {
|
|
47
|
+
throw new Error("Cannot perform inverse conversion with a rate of zero.");
|
|
48
|
+
}
|
|
49
|
+
return Math.round(amount / rate);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Triangular conversion: source → base → target (cross-rate).
|
|
54
|
+
* First divides by the source-to-base rate, then multiplies by the base-to-target rate.
|
|
55
|
+
*
|
|
56
|
+
* @param amount - Minor-unit amount in the source currency
|
|
57
|
+
* @param rateSourceToBase - Rate of source relative to base (1 base = `rate` source)
|
|
58
|
+
* @param rateBaseToTarget - Rate of base to target (1 base = `rate` target)
|
|
59
|
+
* @returns Minor-unit amount in the target currency
|
|
60
|
+
*/
|
|
61
|
+
export function triangularConversion(
|
|
62
|
+
amount: number,
|
|
63
|
+
rateSourceToBase: number,
|
|
64
|
+
rateBaseToTarget: number,
|
|
65
|
+
): number {
|
|
66
|
+
if (rateSourceToBase === 0) {
|
|
67
|
+
throw new Error(
|
|
68
|
+
"Cannot perform triangular conversion: source-to-base rate is zero.",
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
const amountInBase = amount / rateSourceToBase;
|
|
72
|
+
return Math.round(amountInBase * rateBaseToTarget);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// ── Strategy Registry ──────────────────────────────────────────────────────────
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Named map of conversion strategies.
|
|
79
|
+
* Consumer code and the ExchangeRateStore can select a strategy by name.
|
|
80
|
+
* Extensible: register additional strategies before store initialization.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```ts
|
|
84
|
+
* CONVERSION_STRATEGIES["crypto"] = (amount, rate) => {
|
|
85
|
+
* // 18-decimal precision logic
|
|
86
|
+
* };
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export const CONVERSION_STRATEGIES: Record<string, ConversionFn> = {
|
|
90
|
+
direct: directConversion,
|
|
91
|
+
inverse: inverseConversion,
|
|
92
|
+
// triangularConversion takes 2 rates — wrapped for the registry signature
|
|
93
|
+
triangular: (amount: number, ...rates: number[]) =>
|
|
94
|
+
triangularConversion(amount, rates[0], rates[1]),
|
|
95
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export {
|
|
2
|
+
addMoney,
|
|
3
|
+
convertAmount,
|
|
4
|
+
convertMoney,
|
|
5
|
+
createMoney,
|
|
6
|
+
CURRENCY_MAP,
|
|
7
|
+
type Dinero,
|
|
8
|
+
type DineroCurrency,
|
|
9
|
+
type DineroSnapshot,
|
|
10
|
+
formatAmount,
|
|
11
|
+
formatMoney,
|
|
12
|
+
fromMoneySnapshot,
|
|
13
|
+
type ISO4217Code,
|
|
14
|
+
multiplyMoney,
|
|
15
|
+
type RateMap,
|
|
16
|
+
registerCurrency,
|
|
17
|
+
safeAmount,
|
|
18
|
+
type ScaledRate,
|
|
19
|
+
scaledRate,
|
|
20
|
+
subtractMoney,
|
|
21
|
+
toAdyenMoney,
|
|
22
|
+
toMinorUnit,
|
|
23
|
+
toMoneySnapshot,
|
|
24
|
+
toPaypalMoney,
|
|
25
|
+
toSquareMoney,
|
|
26
|
+
toStripeMoney,
|
|
27
|
+
} from "./money.ts";
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
// sdk/state/src/composables/useMoney.ts
|
|
2
|
+
// Context-aware money composable that reads CurrencyStore + LanguageStore
|
|
3
|
+
|
|
4
|
+
import { getContext } from "svelte";
|
|
5
|
+
import { RUNE_LAB_CONTEXT } from "@rune-lab/kernel";
|
|
6
|
+
import type { ConfigStore } from "@rune-lab/kernel";
|
|
7
|
+
import {
|
|
8
|
+
addMoney,
|
|
9
|
+
convertMoney,
|
|
10
|
+
createMoney,
|
|
11
|
+
formatMoney,
|
|
12
|
+
multiplyMoney,
|
|
13
|
+
subtractMoney,
|
|
14
|
+
toAdyenMoney,
|
|
15
|
+
toMinorUnit,
|
|
16
|
+
toMoneySnapshot,
|
|
17
|
+
toPaypalMoney,
|
|
18
|
+
toSquareMoney,
|
|
19
|
+
toStripeMoney,
|
|
20
|
+
} from "@rune-lab/money";
|
|
21
|
+
import type {
|
|
22
|
+
CurrencyStore,
|
|
23
|
+
Dinero,
|
|
24
|
+
ExchangeRateStore,
|
|
25
|
+
ISO4217Code,
|
|
26
|
+
} from "@rune-lab/money";
|
|
27
|
+
|
|
28
|
+
export interface UseMoneyReturn {
|
|
29
|
+
toDinero: (
|
|
30
|
+
amount: number | null | undefined,
|
|
31
|
+
currencyCode?: ISO4217Code | string,
|
|
32
|
+
unit?: "major" | "minor",
|
|
33
|
+
) => Dinero<number>;
|
|
34
|
+
format: (
|
|
35
|
+
amount: number | null | undefined,
|
|
36
|
+
currencyCode?: ISO4217Code | string,
|
|
37
|
+
unit?: "major" | "minor",
|
|
38
|
+
localeOverride?: string,
|
|
39
|
+
) => string;
|
|
40
|
+
add: (
|
|
41
|
+
a: number,
|
|
42
|
+
b: number,
|
|
43
|
+
currencyCode?: ISO4217Code | string,
|
|
44
|
+
unit?: "major" | "minor",
|
|
45
|
+
) => Dinero<number>;
|
|
46
|
+
subtract: (
|
|
47
|
+
a: number,
|
|
48
|
+
b: number,
|
|
49
|
+
currencyCode?: ISO4217Code | string,
|
|
50
|
+
unit?: "major" | "minor",
|
|
51
|
+
) => Dinero<number>;
|
|
52
|
+
convert: (
|
|
53
|
+
amount: number,
|
|
54
|
+
fromCode: string,
|
|
55
|
+
unit?: "major" | "minor",
|
|
56
|
+
) => Dinero<number>;
|
|
57
|
+
formatConverted: (
|
|
58
|
+
amount: number,
|
|
59
|
+
fromCode: string,
|
|
60
|
+
unit?: "major" | "minor",
|
|
61
|
+
) => string;
|
|
62
|
+
toPayload: (
|
|
63
|
+
amount: number,
|
|
64
|
+
currencyCode?: string,
|
|
65
|
+
target?: "stripe" | "paypal" | "adyen" | "square",
|
|
66
|
+
unit?: "major" | "minor",
|
|
67
|
+
) =>
|
|
68
|
+
| { amount: number; currency: string }
|
|
69
|
+
| { value: string; currency_code: string }
|
|
70
|
+
| { value: number; currency: string }
|
|
71
|
+
| { amount: bigint; currency: string };
|
|
72
|
+
multiply: (
|
|
73
|
+
amount: number,
|
|
74
|
+
factor: number,
|
|
75
|
+
currencyCode?: ISO4217Code | string,
|
|
76
|
+
unit?: "major" | "minor",
|
|
77
|
+
) => Dinero<number>;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Context-aware money composable.
|
|
82
|
+
* Reads CurrencyStore and LanguageStore from rune-lab context.
|
|
83
|
+
*
|
|
84
|
+
* Usage:
|
|
85
|
+
* const { format, toDinero, add, subtract, convert } = useMoney();
|
|
86
|
+
* const display = format(150.00, undefined, 'major'); // "$150.00"
|
|
87
|
+
*/
|
|
88
|
+
export function useMoney(): UseMoneyReturn {
|
|
89
|
+
const currencyStore = getContext<CurrencyStore>(RUNE_LAB_CONTEXT.currency);
|
|
90
|
+
const languageStore = getContext<ConfigStore<unknown>>(
|
|
91
|
+
RUNE_LAB_CONTEXT.language,
|
|
92
|
+
);
|
|
93
|
+
const exchangeRateStore = getContext<ExchangeRateStore>(
|
|
94
|
+
RUNE_LAB_CONTEXT.exchangeRate,
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Convert amount to a Dinero object using current currency
|
|
99
|
+
*/
|
|
100
|
+
function toDinero(
|
|
101
|
+
amount: number | null | undefined,
|
|
102
|
+
currencyCode?: ISO4217Code | string,
|
|
103
|
+
unit: "major" | "minor" = "minor",
|
|
104
|
+
): Dinero<number> {
|
|
105
|
+
const code = currencyCode ?? String(currencyStore.current);
|
|
106
|
+
const minorAmount =
|
|
107
|
+
unit === "major" && amount !== null && amount !== undefined
|
|
108
|
+
? toMinorUnit(Number(amount), code)
|
|
109
|
+
: amount;
|
|
110
|
+
return createMoney(minorAmount, code);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Format an amount as a locale-aware currency string
|
|
115
|
+
*/
|
|
116
|
+
function format(
|
|
117
|
+
amount: number | null | undefined,
|
|
118
|
+
currencyCode?: ISO4217Code | string,
|
|
119
|
+
unit: "major" | "minor" = "minor",
|
|
120
|
+
localeOverride?: string,
|
|
121
|
+
): string {
|
|
122
|
+
if (
|
|
123
|
+
amount === null || amount === undefined ||
|
|
124
|
+
(typeof amount === "number" && isNaN(amount))
|
|
125
|
+
) {
|
|
126
|
+
return "—";
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const code = currencyCode ?? String(currencyStore.current);
|
|
130
|
+
const locale = localeOverride ?? (String(languageStore.current) || "en");
|
|
131
|
+
|
|
132
|
+
const minorAmount = unit === "major"
|
|
133
|
+
? toMinorUnit(Number(amount), code)
|
|
134
|
+
: amount;
|
|
135
|
+
|
|
136
|
+
const money = createMoney(minorAmount, code);
|
|
137
|
+
return formatMoney(money, locale, code);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Converts an amount from fromCode to the current display currency.
|
|
142
|
+
*/
|
|
143
|
+
function convert(
|
|
144
|
+
amount: number,
|
|
145
|
+
fromCode: string,
|
|
146
|
+
unit: "major" | "minor" = "minor",
|
|
147
|
+
): Dinero<number> {
|
|
148
|
+
const minorAmount = unit === "major"
|
|
149
|
+
? toMinorUnit(amount, fromCode)
|
|
150
|
+
: amount;
|
|
151
|
+
const currentCode = String(currencyStore.current);
|
|
152
|
+
|
|
153
|
+
if (!exchangeRateStore?.hasRates || fromCode === currentCode) {
|
|
154
|
+
return createMoney(minorAmount, fromCode);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const sourceMoney = createMoney(minorAmount, fromCode);
|
|
158
|
+
return convertMoney(sourceMoney, currentCode, exchangeRateStore.rates);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Convenience: converts and formats an amount in one go.
|
|
163
|
+
*/
|
|
164
|
+
function formatConverted(
|
|
165
|
+
amount: number,
|
|
166
|
+
fromCode: string,
|
|
167
|
+
unit: "major" | "minor" = "minor",
|
|
168
|
+
): string {
|
|
169
|
+
const money = convert(amount, fromCode, unit);
|
|
170
|
+
const locale = String(languageStore.current) || "en";
|
|
171
|
+
const currentCode = String(currencyStore.current);
|
|
172
|
+
const snapshot = toMoneySnapshot(money);
|
|
173
|
+
|
|
174
|
+
// If conversion didn't happen (no rates), format as original currency
|
|
175
|
+
const displayCode = exchangeRateStore?.hasRates
|
|
176
|
+
? currentCode
|
|
177
|
+
: snapshot.currency;
|
|
178
|
+
|
|
179
|
+
return formatMoney(money, locale, displayCode);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Multiply an amount by a factor.
|
|
184
|
+
*/
|
|
185
|
+
function multiply(
|
|
186
|
+
amount: number,
|
|
187
|
+
factor: number,
|
|
188
|
+
currencyCode?: ISO4217Code | string,
|
|
189
|
+
unit: "major" | "minor" = "minor",
|
|
190
|
+
): Dinero<number> {
|
|
191
|
+
const money = toDinero(amount, currencyCode, unit);
|
|
192
|
+
return multiplyMoney(money, factor);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Format an amount for a specific payment provider payload.
|
|
197
|
+
*/
|
|
198
|
+
function toPayload(
|
|
199
|
+
amount: number,
|
|
200
|
+
currencyCode?: string,
|
|
201
|
+
target: "stripe" | "paypal" | "adyen" | "square" = "stripe",
|
|
202
|
+
unit: "major" | "minor" = "minor",
|
|
203
|
+
) {
|
|
204
|
+
const code = currencyCode ?? String(currencyStore.current);
|
|
205
|
+
const money = toDinero(amount, code, unit);
|
|
206
|
+
|
|
207
|
+
switch (target) {
|
|
208
|
+
case "stripe":
|
|
209
|
+
return toStripeMoney(money);
|
|
210
|
+
case "paypal":
|
|
211
|
+
return toPaypalMoney(money);
|
|
212
|
+
case "adyen":
|
|
213
|
+
return toAdyenMoney(money);
|
|
214
|
+
case "square":
|
|
215
|
+
return toSquareMoney(money);
|
|
216
|
+
default:
|
|
217
|
+
return toStripeMoney(money);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Add two amounts in the current currency
|
|
223
|
+
*/
|
|
224
|
+
function add(
|
|
225
|
+
a: number,
|
|
226
|
+
b: number,
|
|
227
|
+
currencyCode?: ISO4217Code | string,
|
|
228
|
+
unit: "major" | "minor" = "minor",
|
|
229
|
+
): Dinero<number> {
|
|
230
|
+
const code = currencyCode ?? String(currencyStore.current);
|
|
231
|
+
const aMoney = toDinero(a, code, unit);
|
|
232
|
+
const bMoney = toDinero(b, code, unit);
|
|
233
|
+
return addMoney(aMoney, bMoney);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Subtract two amounts in the current currency
|
|
238
|
+
*/
|
|
239
|
+
function subtract(
|
|
240
|
+
a: number,
|
|
241
|
+
b: number,
|
|
242
|
+
currencyCode?: ISO4217Code | string,
|
|
243
|
+
unit: "major" | "minor" = "minor",
|
|
244
|
+
): Dinero<number> {
|
|
245
|
+
const code = currencyCode ?? String(currencyStore.current);
|
|
246
|
+
const aMoney = toDinero(a, code, unit);
|
|
247
|
+
const bMoney = toDinero(b, code, unit);
|
|
248
|
+
return subtractMoney(aMoney, bMoney);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
return {
|
|
252
|
+
toDinero,
|
|
253
|
+
format,
|
|
254
|
+
add,
|
|
255
|
+
subtract,
|
|
256
|
+
convert,
|
|
257
|
+
formatConverted,
|
|
258
|
+
toPayload,
|
|
259
|
+
multiply,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// sdk/state/src/composables/useMoneyFilter.ts
|
|
2
|
+
|
|
3
|
+
import { getContext, untrack } from "svelte";
|
|
4
|
+
import { RUNE_LAB_CONTEXT } from "@rune-lab/kernel";
|
|
5
|
+
import type { CurrencyStore } from "@rune-lab/money";
|
|
6
|
+
import { useMoney } from "./useMoney.ts";
|
|
7
|
+
|
|
8
|
+
export interface MoneyFilterOptions {
|
|
9
|
+
min?: number;
|
|
10
|
+
max?: number;
|
|
11
|
+
unit?: "major" | "minor";
|
|
12
|
+
autoConvertOnChange?: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface UseMoneyFilterReturn {
|
|
16
|
+
min: number;
|
|
17
|
+
max: number;
|
|
18
|
+
readonly displayMin: string;
|
|
19
|
+
readonly displayMax: string;
|
|
20
|
+
setMin: (value: number) => void;
|
|
21
|
+
setMax: (value: number) => void;
|
|
22
|
+
reset: () => void;
|
|
23
|
+
matches: (amount: number, entityCurrency: string) => boolean;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* A reactive currency-aware filter composable.
|
|
28
|
+
* Handles min/max thresholds that auto-convert when the display currency changes.
|
|
29
|
+
*/
|
|
30
|
+
export function useMoneyFilter(
|
|
31
|
+
options: MoneyFilterOptions = {},
|
|
32
|
+
): UseMoneyFilterReturn {
|
|
33
|
+
const currencyStore = getContext<CurrencyStore>(RUNE_LAB_CONTEXT.currency);
|
|
34
|
+
const { format } = useMoney();
|
|
35
|
+
|
|
36
|
+
let min = $state(options.min ?? 0);
|
|
37
|
+
let max = $state(options.max ?? Infinity);
|
|
38
|
+
const unit = options.unit ?? "minor";
|
|
39
|
+
const autoConvertOnChange = options.autoConvertOnChange ?? true;
|
|
40
|
+
|
|
41
|
+
let lastCurrency = $state(String(currencyStore.current));
|
|
42
|
+
|
|
43
|
+
$effect(() => {
|
|
44
|
+
const currentCurrency = String(currencyStore.current);
|
|
45
|
+
const previousCurrency = untrack(() => lastCurrency);
|
|
46
|
+
|
|
47
|
+
if (autoConvertOnChange && currentCurrency !== previousCurrency) {
|
|
48
|
+
if (currencyStore.canConvert) {
|
|
49
|
+
if (min !== 0) {
|
|
50
|
+
min = currencyStore.convertAmount(
|
|
51
|
+
min,
|
|
52
|
+
previousCurrency,
|
|
53
|
+
currentCurrency,
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
if (max !== Infinity) {
|
|
57
|
+
max = currencyStore.convertAmount(
|
|
58
|
+
max,
|
|
59
|
+
previousCurrency,
|
|
60
|
+
currentCurrency,
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
} else {
|
|
64
|
+
// Reset if no rates available
|
|
65
|
+
min = 0;
|
|
66
|
+
max = Infinity;
|
|
67
|
+
}
|
|
68
|
+
untrack(() => {
|
|
69
|
+
lastCurrency = currentCurrency;
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
function setMin(value: number) {
|
|
75
|
+
min = value;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function setMax(value: number) {
|
|
79
|
+
max = value;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function reset() {
|
|
83
|
+
min = 0;
|
|
84
|
+
max = Infinity;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Checks if an amount (in its entity currency) matches the current filter.
|
|
89
|
+
*/
|
|
90
|
+
function matches(amount: number, entityCurrency: string): boolean {
|
|
91
|
+
const currentCurrency = String(currencyStore.current);
|
|
92
|
+
|
|
93
|
+
// Convert entity amount to display currency for comparison
|
|
94
|
+
const convertedAmount = currencyStore.convertAmount(
|
|
95
|
+
amount,
|
|
96
|
+
entityCurrency,
|
|
97
|
+
currentCurrency,
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
return convertedAmount >= min && convertedAmount <= max;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const displayMin = $derived(format(min, undefined, unit));
|
|
104
|
+
const displayMax = $derived(
|
|
105
|
+
max === Infinity ? "∞" : format(max, undefined, unit),
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
get min() {
|
|
110
|
+
return min;
|
|
111
|
+
},
|
|
112
|
+
set min(v) {
|
|
113
|
+
min = v;
|
|
114
|
+
},
|
|
115
|
+
get max() {
|
|
116
|
+
return max;
|
|
117
|
+
},
|
|
118
|
+
set max(v) {
|
|
119
|
+
max = v;
|
|
120
|
+
},
|
|
121
|
+
get displayMin() {
|
|
122
|
+
return displayMin;
|
|
123
|
+
},
|
|
124
|
+
get displayMax() {
|
|
125
|
+
return displayMax;
|
|
126
|
+
},
|
|
127
|
+
setMin,
|
|
128
|
+
setMax,
|
|
129
|
+
reset,
|
|
130
|
+
matches,
|
|
131
|
+
};
|
|
132
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"lib": [
|
|
4
|
+
"ESNext",
|
|
5
|
+
"DOM",
|
|
6
|
+
"DOM.Iterable",
|
|
7
|
+
"DOM.AsyncIterable"
|
|
8
|
+
],
|
|
9
|
+
// Set modern JS target
|
|
10
|
+
"target": "ESNext",
|
|
11
|
+
"module": "ESNext",
|
|
12
|
+
// Resolution & Extensions
|
|
13
|
+
"moduleResolution": "bundler",
|
|
14
|
+
"allowImportingTsExtensions": true,
|
|
15
|
+
"noEmit": true,
|
|
16
|
+
"skipLibCheck": true,
|
|
17
|
+
"paths": {
|
|
18
|
+
"@rune-lab/kernel": [
|
|
19
|
+
"./src/kernel/src/mod.ts"
|
|
20
|
+
],
|
|
21
|
+
"@rune-lab/layout": [
|
|
22
|
+
"./src/runes/layout/src/mod.ts"
|
|
23
|
+
],
|
|
24
|
+
"@rune-lab/palettes": [
|
|
25
|
+
"./src/runes/palettes/src/mod.ts"
|
|
26
|
+
],
|
|
27
|
+
"@rune-lab/money": [
|
|
28
|
+
"./src/runes/plugins/money/src/mod.ts"
|
|
29
|
+
],
|
|
30
|
+
"@rune-lab/i18n/*": [
|
|
31
|
+
"./src/i18n/*"
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"exclude": [
|
|
36
|
+
"scripts/**",
|
|
37
|
+
"dist/**",
|
|
38
|
+
".old/**",
|
|
39
|
+
"**/*.test.ts"
|
|
40
|
+
]
|
|
41
|
+
}
|
package/vite.config.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// vite plus
|
|
2
|
+
import { defineConfig } from "vite-plus";
|
|
3
|
+
// customization
|
|
4
|
+
import tailwindcss from "@tailwindcss/vite";
|
|
5
|
+
import { paraglideVitePlugin } from "@inlang/paraglide-js";
|
|
6
|
+
// main framework
|
|
7
|
+
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
8
|
+
|
|
9
|
+
export default defineConfig({
|
|
10
|
+
plugins: [
|
|
11
|
+
svelte(),
|
|
12
|
+
tailwindcss(),
|
|
13
|
+
paraglideVitePlugin({
|
|
14
|
+
project: "./src/i18n/project.inlang",
|
|
15
|
+
outdir: "./src/i18n/paraglide",
|
|
16
|
+
}),
|
|
17
|
+
],
|
|
18
|
+
test: {
|
|
19
|
+
environment: "jsdom",
|
|
20
|
+
setupFiles: ["@testing-library/jest-dom/vitest"],
|
|
21
|
+
},
|
|
22
|
+
build: {
|
|
23
|
+
lib: {
|
|
24
|
+
entry: "./src/mod.ts",
|
|
25
|
+
formats: ["es"],
|
|
26
|
+
},
|
|
27
|
+
outDir: "dist",
|
|
28
|
+
rollupOptions: {
|
|
29
|
+
external: [
|
|
30
|
+
"svelte",
|
|
31
|
+
/^svelte\//,
|
|
32
|
+
"esm-env",
|
|
33
|
+
/^@sveltejs\//,
|
|
34
|
+
/^@inlang\//,
|
|
35
|
+
"hotkeys-js",
|
|
36
|
+
],
|
|
37
|
+
output: {
|
|
38
|
+
preserveModules: true,
|
|
39
|
+
preserveModulesRoot: "src",
|
|
40
|
+
entryFileNames: "[name].ts",
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
});
|
package/dist/core/index.d.ts
DELETED
package/dist/core/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sdk/core/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAE5C,cAAc,qBAAqB,CAAC;AAEpC,cAAc,eAAe,CAAC"}
|
package/dist/core/index.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dynamic i18n Message Resolver Pattern
|
|
3
|
-
*
|
|
4
|
-
* Enables dynamic message function calls for config selectors.
|
|
5
|
-
* Creates a resolver that dynamically looks up and calls message functions.
|
|
6
|
-
*/
|
|
7
|
-
type MessageBundle = Record<string, (...args: any[]) => string>;
|
|
8
|
-
interface MessageResolverConfig<T> {
|
|
9
|
-
/**
|
|
10
|
-
* Function to extract the message key from an option
|
|
11
|
-
* @example (currency) => currency.code // "USD"
|
|
12
|
-
*/
|
|
13
|
-
keyExtractor: (option: T) => string;
|
|
14
|
-
/**
|
|
15
|
-
* Optional transformer for the key before message lookup
|
|
16
|
-
* @example (key) => key.toLowerCase() // "USD" -> "usd"
|
|
17
|
-
*/
|
|
18
|
-
keyTransformer?: (key: string) => string;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Creates a message resolver function for dynamic i18n lookups
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* const getCurrencyLabel = createMessageResolver<Currency>(m, {
|
|
26
|
-
* keyExtractor: (currency) => currency.code
|
|
27
|
-
* });
|
|
28
|
-
*
|
|
29
|
-
* getCurrencyLabel({ code: "EUR", symbol: "€" }); // "Euro"
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
export declare function createMessageResolver<T>(messages: MessageBundle, config: MessageResolverConfig<T>): (option: T) => string;
|
|
33
|
-
/**
|
|
34
|
-
* Type guard to check if a message key exists
|
|
35
|
-
*/
|
|
36
|
-
export declare function hasMessage(messages: MessageBundle, key: string): boolean;
|
|
37
|
-
/**
|
|
38
|
-
* Batch resolver for multiple options at once
|
|
39
|
-
*/
|
|
40
|
-
export declare function batchResolveMessages<T>(messages: MessageBundle, options: T[], config: MessageResolverConfig<T>): Record<string, string>;
|
|
41
|
-
export {};
|
|
42
|
-
//# sourceMappingURL=message-resolver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-resolver.d.ts","sourceRoot":"","sources":["../../../src/sdk/core/src/internal/message-resolver.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AAEH,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,CAAC;AAEhE,UAAU,qBAAqB,CAAC,CAAC;IAC/B;;;OAGG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC;IAEpC;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,IAExB,QAAQ,CAAC,KAAG,MAAM,CAmB3B;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAExE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,CAAC,EAAE,EACZ,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxB"}
|