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
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { getAppStore } from "rune-lab/state";
|
|
3
|
-
import { DEV } from "esm-env";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Simple Icon component for Rune Lab.
|
|
7
|
-
* Centralizes SVG paths to reduce boilerplate.
|
|
8
|
-
*
|
|
9
|
-
* ⚠️ SECURITY: `customIcons` values (from `appStore.customIcons` or the `icons` prop)
|
|
10
|
-
* are rendered as **unsanitized HTML** via `{@html}`. Only pass trusted SVG path strings.
|
|
11
|
-
*/
|
|
12
|
-
let {
|
|
13
|
-
name,
|
|
14
|
-
size = "w-5 h-5",
|
|
15
|
-
class: className = "",
|
|
16
|
-
icons = {},
|
|
17
|
-
provider = "svg",
|
|
18
|
-
fill = 0,
|
|
19
|
-
weight = 400,
|
|
20
|
-
grade = 0,
|
|
21
|
-
opsz = 24,
|
|
22
|
-
} = $props<{
|
|
23
|
-
name: string;
|
|
24
|
-
size?: string;
|
|
25
|
-
class?: string;
|
|
26
|
-
icons?: Record<string, string>;
|
|
27
|
-
provider?: "svg" | "material";
|
|
28
|
-
fill?: 0 | 1;
|
|
29
|
-
weight?: 100 | 200 | 300 | 400 | 500 | 600 | 700;
|
|
30
|
-
grade?: -25 | 0 | 200;
|
|
31
|
-
opsz?: 20 | 24 | 40 | 48;
|
|
32
|
-
}>();
|
|
33
|
-
|
|
34
|
-
let appStore: ReturnType<typeof getAppStore> | undefined;
|
|
35
|
-
try {
|
|
36
|
-
appStore = getAppStore();
|
|
37
|
-
} catch {
|
|
38
|
-
// Graceful fallback if Icon is used outside RuneProvider
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const paths: Record<string, string> = {
|
|
42
|
-
search:
|
|
43
|
-
'<circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.3-4.3"></path>',
|
|
44
|
-
"chevron-down": '<path d="m6 9 6 6 6-6" />',
|
|
45
|
-
"chevron-right": '<path d="m9 18 6-6-6-6" />',
|
|
46
|
-
info: '<circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/>',
|
|
47
|
-
shortcut:
|
|
48
|
-
'<rect width="18" height="11" x="3" y="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/>',
|
|
49
|
-
close: '<path d="M18 6 6 18"/><path d="m6 6 12 12"/>',
|
|
50
|
-
external:
|
|
51
|
-
'<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/>',
|
|
52
|
-
plus: '<path d="M5 12h14"/><path d="M12 5v14"/>',
|
|
53
|
-
minus: '<path d="M5 12h14"/>',
|
|
54
|
-
check: '<path d="M20 6 9 17l-5-5"/>',
|
|
55
|
-
trash:
|
|
56
|
-
'<path d="M3 6h18"/><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"/><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"/>',
|
|
57
|
-
edit: '<path d="M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z"/><path d="m15 5 4 4"/>',
|
|
58
|
-
grid: '<rect width="7" height="7" x="3" y="3" rx="1"/><rect width="7" height="7" x="14" y="3" rx="1"/><rect width="7" height="7" x="14" y="14" rx="1"/><rect width="7" height="7" x="3" y="14" rx="1"/>',
|
|
59
|
-
list: '<line x1="8" x2="21" y1="6" y2="6"/><line x1="8" x2="21" y1="12" y2="12"/><line x1="8" x2="21" y1="18" y2="18"/><line x1="3" x2="3.01" y1="6" y2="6"/><line x1="3" x2="3.01" y1="12" y2="12"/><line x1="3" x2="3.01" y1="18" y2="18"/>',
|
|
60
|
-
table:
|
|
61
|
-
'<rect width="18" height="18" x="3" y="3" rx="2" ry="2"/><line x1="3" x2="21" y1="9" y2="9"/><line x1="3" x2="21" y1="15" y2="15"/><line x1="9" x2="9" y1="3" y2="21"/><line x1="15" x2="15" y1="3" y2="21"/>',
|
|
62
|
-
"arrow-left": '<path d="m12 19-7-7 7-7"/><path d="M19 12H5"/>',
|
|
63
|
-
"arrow-right": '<path d="M5 12h14"/><path d="m12 5 7 7-7 7"/>',
|
|
64
|
-
menu: '<line x1="4" x2="20" y1="12" y2="12"/><line x1="4" x2="20" y1="6" y2="6"/><line x1="4" x2="20" y1="18" y2="18"/>',
|
|
65
|
-
bell: '<path d="M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9"/><path d="M10.3 21a1.94 1.94 0 0 0 3.4 0"/>',
|
|
66
|
-
user: '<path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/>',
|
|
67
|
-
settings:
|
|
68
|
-
'<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/>',
|
|
69
|
-
logout:
|
|
70
|
-
'<path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/><polyline points="16 17 21 12 16 7"/><line x1="21" x2="9" y1="12" y2="12"/>',
|
|
71
|
-
unknown:
|
|
72
|
-
'<circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><path d="M12 17h.01"/>',
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
const path = $derived.by(() => {
|
|
76
|
-
if (icons[name]) return icons[name];
|
|
77
|
-
if (appStore?.customIcons?.[name]) return appStore.customIcons[name];
|
|
78
|
-
if (paths[name]) return paths[name];
|
|
79
|
-
|
|
80
|
-
if (DEV) {
|
|
81
|
-
console.warn(`[Icon] Unknown icon name: "${name}"`);
|
|
82
|
-
}
|
|
83
|
-
return paths.unknown;
|
|
84
|
-
});
|
|
85
|
-
</script>
|
|
86
|
-
|
|
87
|
-
{#if provider === "material"}
|
|
88
|
-
<span
|
|
89
|
-
class="material-symbols-outlined {size} {className} select-none"
|
|
90
|
-
style="font-variation-settings: 'FILL' {fill}, 'wght' {weight}, 'GRAD' {grade}, 'opsz' {opsz}; display: inline-flex; align-items: center; justify-content: center;"
|
|
91
|
-
>
|
|
92
|
-
{name}
|
|
93
|
-
</span>
|
|
94
|
-
{:else}
|
|
95
|
-
<svg
|
|
96
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
97
|
-
viewBox="0 0 24 24"
|
|
98
|
-
fill="none"
|
|
99
|
-
stroke="currentColor"
|
|
100
|
-
stroke-width="2"
|
|
101
|
-
stroke-linecap="round"
|
|
102
|
-
stroke-linejoin="round"
|
|
103
|
-
class="{size} {className}"
|
|
104
|
-
>
|
|
105
|
-
<!-- eslint-disable-next-line svelte/no-at-html-tags -->
|
|
106
|
-
{@html path}
|
|
107
|
-
</svg>
|
|
108
|
-
{/if}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
type $$ComponentProps = {
|
|
2
|
-
name: string;
|
|
3
|
-
size?: string;
|
|
4
|
-
class?: string;
|
|
5
|
-
icons?: Record<string, string>;
|
|
6
|
-
provider?: "svg" | "material";
|
|
7
|
-
fill?: 0 | 1;
|
|
8
|
-
weight?: 100 | 200 | 300 | 400 | 500 | 600 | 700;
|
|
9
|
-
grade?: -25 | 0 | 200;
|
|
10
|
-
opsz?: 20 | 24 | 40 | 48;
|
|
11
|
-
};
|
|
12
|
-
declare const Icon: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
13
|
-
type Icon = ReturnType<typeof Icon>;
|
|
14
|
-
export default Icon;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { DEV } from "esm-env";
|
|
3
|
-
import { portal } from "../actions/portal";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Kyntharil — Reactive Value Inspector
|
|
7
|
-
* A dev-mode-only component that displays a floating panel of reactive values.
|
|
8
|
-
*/
|
|
9
|
-
let { observe = {} } = $props<{
|
|
10
|
-
observe?: Record<string, unknown>;
|
|
11
|
-
}>();
|
|
12
|
-
</script>
|
|
13
|
-
|
|
14
|
-
{#if DEV}
|
|
15
|
-
<div
|
|
16
|
-
use:portal
|
|
17
|
-
class="rl-kyntharil fixed bottom-4 right-4 z-[9999] max-w-sm max-h-[80vh] overflow-y-auto bg-base-300 border border-base-content/10 rounded-lg shadow-2xl p-4 font-mono text-xs select-none pointer-events-auto"
|
|
18
|
-
>
|
|
19
|
-
<div class="flex items-center justify-between mb-2 border-b border-base-content/10 pb-2">
|
|
20
|
-
<span class="font-bold text-primary flex items-center gap-1">
|
|
21
|
-
<span class="w-2 h-2 rounded-full bg-primary animate-pulse"></span>
|
|
22
|
-
Kyntharil DevTools
|
|
23
|
-
</span>
|
|
24
|
-
<span class="opacity-50 text-[10px] uppercase tracking-wider">Reactive Observer</span>
|
|
25
|
-
</div>
|
|
26
|
-
|
|
27
|
-
<div class="space-y-2">
|
|
28
|
-
{#each Object.entries(observe) as [label, value]}
|
|
29
|
-
<div class="flex flex-col gap-0.5">
|
|
30
|
-
<span class="text-base-content/50 text-[10px]">{label}</span>
|
|
31
|
-
<pre class="bg-base-100 p-1.5 rounded overflow-x-auto text-success whitespace-pre-wrap break-all">{JSON.stringify(value, null, 2)}</pre>
|
|
32
|
-
</div>
|
|
33
|
-
{:else}
|
|
34
|
-
<div class="text-base-content/30 italic text-center py-4">No values observed</div>
|
|
35
|
-
{/each}
|
|
36
|
-
</div>
|
|
37
|
-
</div>
|
|
38
|
-
{/if}
|
|
39
|
-
|
|
40
|
-
<style>
|
|
41
|
-
.rl-kyntharil::-webkit-scrollbar {
|
|
42
|
-
width: 4px;
|
|
43
|
-
}
|
|
44
|
-
.rl-kyntharil::-webkit-scrollbar-thumb {
|
|
45
|
-
background: rgba(0, 0, 0, 0.1);
|
|
46
|
-
border-radius: 10px;
|
|
47
|
-
}
|
|
48
|
-
</style>
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { setContext, untrack, type Snippet, onMount } from "svelte";
|
|
3
|
-
import {
|
|
4
|
-
createAppStore,
|
|
5
|
-
createLayoutStore,
|
|
6
|
-
createCommandStore,
|
|
7
|
-
createApiStore,
|
|
8
|
-
createToastStore,
|
|
9
|
-
createThemeStore,
|
|
10
|
-
createLanguageStore,
|
|
11
|
-
createCurrencyStore,
|
|
12
|
-
createShortcutStore,
|
|
13
|
-
createCartStore,
|
|
14
|
-
createSessionStore,
|
|
15
|
-
type CartStoreConfig,
|
|
16
|
-
} from "rune-lab/state";
|
|
17
|
-
import type { PersistenceDriver } from "rune-lab/core";
|
|
18
|
-
import { localStorageDriver } from "rune-lab/state";
|
|
19
|
-
import { RUNE_LAB_CONTEXT } from "rune-lab/state";
|
|
20
|
-
import type { AppData } from "rune-lab/state";
|
|
21
|
-
import type { Theme } from "rune-lab/state";
|
|
22
|
-
import type { Currency } from "rune-lab/state";
|
|
23
|
-
import { CommandPalette, ShortcutPalette, Toaster } from "rune-lab/ui";
|
|
24
|
-
|
|
25
|
-
export interface RuneLabConfig {
|
|
26
|
-
persistence?: PersistenceDriver;
|
|
27
|
-
app?: Partial<AppData>;
|
|
28
|
-
apiUrl?: string;
|
|
29
|
-
apiHealthCheck?: () => Promise<boolean>;
|
|
30
|
-
favicon?: string;
|
|
31
|
-
manageHead?: boolean;
|
|
32
|
-
dictionary?: Record<string, any>;
|
|
33
|
-
locales?: readonly string[];
|
|
34
|
-
onLanguageChange?: (code: string) => void;
|
|
35
|
-
/** Icon provider to use. 'material' injects Google Material Symbols font link. */
|
|
36
|
-
icons?: 'material' | 'none';
|
|
37
|
-
|
|
38
|
-
// Theming (DaisyUI)
|
|
39
|
-
/** Additional custom themes to register alongside the built-in DaisyUI set */
|
|
40
|
-
customThemes?: Theme[];
|
|
41
|
-
/** Theme to use when no persisted value exists (after system preference detection) */
|
|
42
|
-
defaultTheme?: string;
|
|
43
|
-
|
|
44
|
-
// Currencies (Dinero.js)
|
|
45
|
-
/** Additional custom currencies to register */
|
|
46
|
-
currencies?: Currency[];
|
|
47
|
-
/** Default currency code when no persisted value exists */
|
|
48
|
-
defaultCurrency?: string;
|
|
49
|
-
|
|
50
|
-
// Cart (opt-in)
|
|
51
|
-
/** CartStore configuration — when provided, a CartStore is created and registered in context */
|
|
52
|
-
cart?: CartStoreConfig<any>;
|
|
53
|
-
|
|
54
|
-
// Auth (opt-in)
|
|
55
|
-
/** When true, creates and registers a SessionStore in context */
|
|
56
|
-
auth?: {
|
|
57
|
-
enabled?: boolean;
|
|
58
|
-
/** Callback when session changes (login, logout, expiry) */
|
|
59
|
-
onSessionChange?: (session: any) => void;
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
let { children, config = {} } = $props<{
|
|
64
|
-
children: Snippet;
|
|
65
|
-
config?: RuneLabConfig;
|
|
66
|
-
}>();
|
|
67
|
-
|
|
68
|
-
// 1. Initialize Base Configuration Stores
|
|
69
|
-
const appStore = createAppStore();
|
|
70
|
-
const apiStore = createApiStore();
|
|
71
|
-
const toastStore = createToastStore();
|
|
72
|
-
|
|
73
|
-
// Capture the initial persistence prop to avoid Svelte 5 reactive capture warnings
|
|
74
|
-
// Default to localStorageDriver to ensure UI selectors persist across browser page reloads
|
|
75
|
-
const initialPersistence = untrack(
|
|
76
|
-
() => config.persistence ?? localStorageDriver,
|
|
77
|
-
);
|
|
78
|
-
const initialLocales = untrack(() => config.locales);
|
|
79
|
-
const initialCustomThemes = untrack(() => config.customThemes);
|
|
80
|
-
const initialDefaultTheme = untrack(() => config.defaultTheme);
|
|
81
|
-
const initialCustomCurrencies = untrack(() => config.currencies);
|
|
82
|
-
const initialDefaultCurrency = untrack(() => config.defaultCurrency);
|
|
83
|
-
const initialCartConfig = untrack(() => config.cart);
|
|
84
|
-
const initialAuthConfig = untrack(() => config.auth);
|
|
85
|
-
|
|
86
|
-
const themeStore = createThemeStore({
|
|
87
|
-
driver: initialPersistence,
|
|
88
|
-
customThemes: initialCustomThemes,
|
|
89
|
-
defaultTheme: initialDefaultTheme,
|
|
90
|
-
});
|
|
91
|
-
const languageStore = createLanguageStore({
|
|
92
|
-
driver: initialPersistence,
|
|
93
|
-
locales: initialLocales,
|
|
94
|
-
});
|
|
95
|
-
const currencyStore = createCurrencyStore({
|
|
96
|
-
driver: initialPersistence,
|
|
97
|
-
customCurrencies: initialCustomCurrencies,
|
|
98
|
-
defaultCurrency: initialDefaultCurrency,
|
|
99
|
-
});
|
|
100
|
-
const shortcutStore = createShortcutStore();
|
|
101
|
-
|
|
102
|
-
// 2. Initialize Complex Stores (Dependency Injection)
|
|
103
|
-
const layoutStore = createLayoutStore(initialPersistence);
|
|
104
|
-
const commandStore = createCommandStore({
|
|
105
|
-
appStore,
|
|
106
|
-
apiStore,
|
|
107
|
-
toastStore,
|
|
108
|
-
themeStore,
|
|
109
|
-
languageStore,
|
|
110
|
-
currencyStore,
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
// 3. Provide Core Contexts
|
|
114
|
-
setContext(RUNE_LAB_CONTEXT.app, appStore);
|
|
115
|
-
setContext(RUNE_LAB_CONTEXT.api, apiStore);
|
|
116
|
-
setContext(RUNE_LAB_CONTEXT.toast, toastStore);
|
|
117
|
-
setContext(RUNE_LAB_CONTEXT.theme, themeStore);
|
|
118
|
-
setContext(RUNE_LAB_CONTEXT.language, languageStore);
|
|
119
|
-
setContext(RUNE_LAB_CONTEXT.currency, currencyStore);
|
|
120
|
-
setContext(RUNE_LAB_CONTEXT.shortcut, shortcutStore);
|
|
121
|
-
setContext(RUNE_LAB_CONTEXT.layout, layoutStore);
|
|
122
|
-
setContext(RUNE_LAB_CONTEXT.commands, commandStore);
|
|
123
|
-
setContext(RUNE_LAB_CONTEXT.persistence, initialPersistence);
|
|
124
|
-
|
|
125
|
-
// 4. Opt-in: CartStore (C-01 FIX)
|
|
126
|
-
if (initialCartConfig) {
|
|
127
|
-
const cartStore = createCartStore(initialCartConfig);
|
|
128
|
-
setContext(RUNE_LAB_CONTEXT.cart, cartStore);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// 5. Opt-in: SessionStore (C-02 FIX)
|
|
132
|
-
if (initialAuthConfig && initialAuthConfig.enabled !== false) {
|
|
133
|
-
const sessionStore = createSessionStore();
|
|
134
|
-
setContext(RUNE_LAB_CONTEXT.session, sessionStore);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
const initialDictionary = untrack(() => config.dictionary);
|
|
138
|
-
if (initialDictionary) {
|
|
139
|
-
setContext("rl:dictionary", initialDictionary);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// Track config changes dynamically
|
|
143
|
-
$effect(() => {
|
|
144
|
-
if (config.app) appStore.init(config.app);
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
$effect(() => {
|
|
148
|
-
if (config.apiUrl)
|
|
149
|
-
apiStore.init(config.apiUrl, "v1", config.apiHealthCheck);
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
$effect(() => {
|
|
153
|
-
const code = languageStore.current as string;
|
|
154
|
-
if (config.onLanguageChange) {
|
|
155
|
-
config.onLanguageChange(code);
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
$effect(() => {
|
|
160
|
-
const name = themeStore.current as string;
|
|
161
|
-
if (config.onThemeChange) {
|
|
162
|
-
config.onThemeChange(name);
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
onMount(() => {
|
|
167
|
-
layoutStore.init();
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
// Meta tags derived from app store state
|
|
171
|
-
const metaTags = $derived([
|
|
172
|
-
{ name: "description", content: appStore.description },
|
|
173
|
-
{ name: "author", content: appStore.author },
|
|
174
|
-
]);
|
|
175
|
-
</script>
|
|
176
|
-
|
|
177
|
-
<svelte:head>
|
|
178
|
-
{#if config.manageHead !== false}
|
|
179
|
-
<title>{appStore.name}</title>
|
|
180
|
-
{#if config.favicon}
|
|
181
|
-
<link rel="icon" href={config.favicon} />
|
|
182
|
-
{/if}
|
|
183
|
-
{#each metaTags as meta}
|
|
184
|
-
<meta name={meta.name} content={meta.content} />
|
|
185
|
-
{/each}
|
|
186
|
-
{#if config.icons === "material"}
|
|
187
|
-
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" />
|
|
188
|
-
{/if}
|
|
189
|
-
{/if}
|
|
190
|
-
</svelte:head>
|
|
191
|
-
|
|
192
|
-
<!-- Global Overlays -->
|
|
193
|
-
<Toaster />
|
|
194
|
-
<CommandPalette />
|
|
195
|
-
<ShortcutPalette />
|
|
196
|
-
|
|
197
|
-
<!-- Render Children -->
|
|
198
|
-
{@render children()}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { type Snippet } from "svelte";
|
|
2
|
-
import { type CartStoreConfig } from "rune-lab/state";
|
|
3
|
-
import type { PersistenceDriver } from "rune-lab/core";
|
|
4
|
-
import type { AppData } from "rune-lab/state";
|
|
5
|
-
import type { Theme } from "rune-lab/state";
|
|
6
|
-
import type { Currency } from "rune-lab/state";
|
|
7
|
-
export interface RuneLabConfig {
|
|
8
|
-
persistence?: PersistenceDriver;
|
|
9
|
-
app?: Partial<AppData>;
|
|
10
|
-
apiUrl?: string;
|
|
11
|
-
apiHealthCheck?: () => Promise<boolean>;
|
|
12
|
-
favicon?: string;
|
|
13
|
-
manageHead?: boolean;
|
|
14
|
-
dictionary?: Record<string, any>;
|
|
15
|
-
locales?: readonly string[];
|
|
16
|
-
onLanguageChange?: (code: string) => void;
|
|
17
|
-
/** Icon provider to use. 'material' injects Google Material Symbols font link. */
|
|
18
|
-
icons?: 'material' | 'none';
|
|
19
|
-
/** Additional custom themes to register alongside the built-in DaisyUI set */
|
|
20
|
-
customThemes?: Theme[];
|
|
21
|
-
/** Theme to use when no persisted value exists (after system preference detection) */
|
|
22
|
-
defaultTheme?: string;
|
|
23
|
-
/** Additional custom currencies to register */
|
|
24
|
-
currencies?: Currency[];
|
|
25
|
-
/** Default currency code when no persisted value exists */
|
|
26
|
-
defaultCurrency?: string;
|
|
27
|
-
/** CartStore configuration — when provided, a CartStore is created and registered in context */
|
|
28
|
-
cart?: CartStoreConfig<any>;
|
|
29
|
-
/** When true, creates and registers a SessionStore in context */
|
|
30
|
-
auth?: {
|
|
31
|
-
enabled?: boolean;
|
|
32
|
-
/** Callback when session changes (login, logout, expiry) */
|
|
33
|
-
onSessionChange?: (session: any) => void;
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
type $$ComponentProps = {
|
|
37
|
-
children: Snippet;
|
|
38
|
-
config?: RuneLabConfig;
|
|
39
|
-
};
|
|
40
|
-
declare const RuneProvider: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
41
|
-
type RuneProvider = ReturnType<typeof RuneProvider>;
|
|
42
|
-
export default RuneProvider;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
-
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
-
$$bindings?: Bindings;
|
|
4
|
-
} & Exports;
|
|
5
|
-
(internal: unknown, props: {
|
|
6
|
-
$$events?: Events;
|
|
7
|
-
$$slots?: Slots;
|
|
8
|
-
}): Exports & {
|
|
9
|
-
$set?: any;
|
|
10
|
-
$on?: any;
|
|
11
|
-
};
|
|
12
|
-
z_$$bindings?: Bindings;
|
|
13
|
-
}
|
|
14
|
-
declare const Toaster: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
15
|
-
[evt: string]: CustomEvent<any>;
|
|
16
|
-
}, {}, {}, string>;
|
|
17
|
-
type Toaster = InstanceType<typeof Toaster>;
|
|
18
|
-
export default Toaster;
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { getLanguageStore, getCurrencyStore } from "rune-lab/state";
|
|
3
|
-
import { formatAmount, toMinorUnit, type ISO4217Code } from "rune-lab/core";
|
|
4
|
-
|
|
5
|
-
let {
|
|
6
|
-
amount,
|
|
7
|
-
unit = 'minor',
|
|
8
|
-
fallback = "—",
|
|
9
|
-
currency,
|
|
10
|
-
locale,
|
|
11
|
-
compact = false,
|
|
12
|
-
} = $props<{
|
|
13
|
-
/** Amount in minor or major units (see unit prop) */
|
|
14
|
-
amount: number | null | undefined;
|
|
15
|
-
/**
|
|
16
|
-
* Whether the amount is in 'major' (e.g., pesos) or 'minor' (e.g., centavos) units.
|
|
17
|
-
* Defaults to 'minor' for backward compatibility.
|
|
18
|
-
*/
|
|
19
|
-
unit?: 'major' | 'minor';
|
|
20
|
-
/** String to display if amount is null, undefined, or NaN. Defaults to "—" */
|
|
21
|
-
fallback?: string;
|
|
22
|
-
/** Override currency code (defaults to CurrencyStore.current) */
|
|
23
|
-
currency?: ISO4217Code | string;
|
|
24
|
-
/** Override locale (defaults to LanguageStore.current) */
|
|
25
|
-
locale?: string;
|
|
26
|
-
/** Use compact notation (e.g., $1.2M) */
|
|
27
|
-
compact?: boolean;
|
|
28
|
-
}>();
|
|
29
|
-
|
|
30
|
-
const currencyStore = getCurrencyStore();
|
|
31
|
-
const languageStore = getLanguageStore();
|
|
32
|
-
|
|
33
|
-
const resolvedCurrency = $derived(
|
|
34
|
-
currency ?? String(currencyStore.current),
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
const resolvedLocale = $derived(
|
|
38
|
-
locale ?? (String(languageStore.current) || "en"),
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
const currencyMeta = $derived(currencyStore.get(resolvedCurrency));
|
|
42
|
-
const decimals = $derived(currencyMeta?.decimals ?? 2);
|
|
43
|
-
|
|
44
|
-
const formatted = $derived.by(() => {
|
|
45
|
-
// If amount is null/undefined/NaN, use fallback
|
|
46
|
-
if (amount === null || amount === undefined || (typeof amount === 'number' && isNaN(amount))) {
|
|
47
|
-
return fallback;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Convert to minor units if necessary
|
|
51
|
-
const minorAmount = unit === 'major'
|
|
52
|
-
? toMinorUnit(Number(amount), resolvedCurrency)
|
|
53
|
-
: amount;
|
|
54
|
-
|
|
55
|
-
if (compact) {
|
|
56
|
-
const majorUnits = Number(minorAmount) / Math.pow(10, decimals);
|
|
57
|
-
return new Intl.NumberFormat(resolvedLocale, {
|
|
58
|
-
style: "currency",
|
|
59
|
-
currency: resolvedCurrency,
|
|
60
|
-
notation: "compact",
|
|
61
|
-
maximumFractionDigits: 1,
|
|
62
|
-
}).format(majorUnits);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return formatAmount(minorAmount, resolvedCurrency, resolvedLocale);
|
|
66
|
-
});
|
|
67
|
-
</script>
|
|
68
|
-
|
|
69
|
-
<data value={amount} class="rl-money-display tabular-nums">{formatted}</data>
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { type ISO4217Code } from "rune-lab/core";
|
|
2
|
-
type $$ComponentProps = {
|
|
3
|
-
/** Amount in minor or major units (see unit prop) */
|
|
4
|
-
amount: number | null | undefined;
|
|
5
|
-
/**
|
|
6
|
-
* Whether the amount is in 'major' (e.g., pesos) or 'minor' (e.g., centavos) units.
|
|
7
|
-
* Defaults to 'minor' for backward compatibility.
|
|
8
|
-
*/
|
|
9
|
-
unit?: 'major' | 'minor';
|
|
10
|
-
/** String to display if amount is null, undefined, or NaN. Defaults to "—" */
|
|
11
|
-
fallback?: string;
|
|
12
|
-
/** Override currency code (defaults to CurrencyStore.current) */
|
|
13
|
-
currency?: ISO4217Code | string;
|
|
14
|
-
/** Override locale (defaults to LanguageStore.current) */
|
|
15
|
-
locale?: string;
|
|
16
|
-
/** Use compact notation (e.g., $1.2M) */
|
|
17
|
-
compact?: boolean;
|
|
18
|
-
};
|
|
19
|
-
declare const MoneyDisplay: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
20
|
-
type MoneyDisplay = ReturnType<typeof MoneyDisplay>;
|
|
21
|
-
export default MoneyDisplay;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { render, screen } from "@testing-library/svelte";
|
|
2
|
-
import { describe, expect, it } from "vitest";
|
|
3
|
-
import MoneyDisplay from "./MoneyDisplay.svelte";
|
|
4
|
-
import { RUNE_LAB_CONTEXT } from "rune-lab/state";
|
|
5
|
-
// Mock stores for context
|
|
6
|
-
const mockCurrencyStore = {
|
|
7
|
-
current: "USD",
|
|
8
|
-
get: (code) => ({ symbol: "$", decimals: 2 }),
|
|
9
|
-
};
|
|
10
|
-
const mockLanguageStore = {
|
|
11
|
-
current: "en-US",
|
|
12
|
-
};
|
|
13
|
-
const context = new Map([
|
|
14
|
-
[RUNE_LAB_CONTEXT.currency, mockCurrencyStore],
|
|
15
|
-
[RUNE_LAB_CONTEXT.language, mockLanguageStore],
|
|
16
|
-
]);
|
|
17
|
-
describe("MoneyDisplay.svelte", () => {
|
|
18
|
-
it("renders fallback when amount is null", () => {
|
|
19
|
-
render(MoneyDisplay, {
|
|
20
|
-
props: { amount: null, fallback: "N/A" },
|
|
21
|
-
context,
|
|
22
|
-
});
|
|
23
|
-
expect(screen.getByText("N/A")).toBeInTheDocument();
|
|
24
|
-
});
|
|
25
|
-
it("renders fallback when amount is undefined", () => {
|
|
26
|
-
render(MoneyDisplay, {
|
|
27
|
-
props: { amount: undefined, fallback: "N/A" },
|
|
28
|
-
context,
|
|
29
|
-
});
|
|
30
|
-
expect(screen.getByText("N/A")).toBeInTheDocument();
|
|
31
|
-
});
|
|
32
|
-
it("renders fallback when amount is NaN", () => {
|
|
33
|
-
render(MoneyDisplay, {
|
|
34
|
-
props: { amount: NaN, fallback: "N/A" },
|
|
35
|
-
context,
|
|
36
|
-
});
|
|
37
|
-
expect(screen.getByText("N/A")).toBeInTheDocument();
|
|
38
|
-
});
|
|
39
|
-
it("renders default fallback when amount is NaN and no fallback prop provided", () => {
|
|
40
|
-
render(MoneyDisplay, {
|
|
41
|
-
props: { amount: NaN },
|
|
42
|
-
context,
|
|
43
|
-
});
|
|
44
|
-
expect(screen.getByText("—")).toBeInTheDocument();
|
|
45
|
-
});
|
|
46
|
-
it("renders zero correctly when passed literal 0", () => {
|
|
47
|
-
render(MoneyDisplay, {
|
|
48
|
-
props: { amount: 0 },
|
|
49
|
-
context,
|
|
50
|
-
});
|
|
51
|
-
expect(screen.getByText(/\$0\.00/)).toBeInTheDocument();
|
|
52
|
-
});
|
|
53
|
-
it('handles unit="major"', () => {
|
|
54
|
-
render(MoneyDisplay, {
|
|
55
|
-
props: { amount: 125.50, unit: "major", currency: "USD" },
|
|
56
|
-
context,
|
|
57
|
-
});
|
|
58
|
-
expect(screen.getByText(/\$125\.50/)).toBeInTheDocument();
|
|
59
|
-
});
|
|
60
|
-
it('handles unit="minor" (default)', () => {
|
|
61
|
-
render(MoneyDisplay, {
|
|
62
|
-
props: { amount: 12550, unit: "minor", currency: "USD" },
|
|
63
|
-
context,
|
|
64
|
-
});
|
|
65
|
-
expect(screen.getByText(/\$125\.50/)).toBeInTheDocument();
|
|
66
|
-
});
|
|
67
|
-
it("supports compact notation", () => {
|
|
68
|
-
render(MoneyDisplay, {
|
|
69
|
-
props: { amount: 1200000, unit: "major", currency: "USD", compact: true },
|
|
70
|
-
context,
|
|
71
|
-
});
|
|
72
|
-
expect(screen.getByText(/\$1\.2M/)).toBeInTheDocument();
|
|
73
|
-
});
|
|
74
|
-
});
|