rune-lab 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitignore +12 -0
- package/README.md +3 -3
- package/deno.json +50 -0
- package/justfile +5 -0
- package/package.json +2 -79
- 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/{dist/state/persistence/provider.js → src/kernel/src/persistence/provider.ts} +29 -14
- 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 +1 -1
- package/{dist/ui/layout → src/runes/layout/src}/ConnectedWorkspaceStrip.svelte +1 -1
- package/src/runes/layout/src/Icon.svelte +7 -0
- package/{dist/ui/features/config → src/runes/layout/src}/LanguageSelector.svelte +7 -5
- package/{dist/ui/layout → src/runes/layout/src}/NavigationPanel.svelte +1 -4
- package/{dist/ui/features/config → src/runes/layout/src}/ResourceSelector.svelte +3 -5
- package/{dist/ui/features/config → src/runes/layout/src}/ThemeSelector.svelte +2 -2
- package/{dist/ui/layout → src/runes/layout/src}/WorkspaceLayout.svelte +6 -4
- 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/{dist/ui/features/config → src/runes/plugins/money/src}/CurrencySelector.svelte +2 -2
- package/{dist/ui/components/money → src/runes/plugins/money/src}/MoneyDisplay.svelte +2 -2
- package/{dist/ui/components/money → src/runes/plugins/money/src}/MoneyInput.svelte +4 -8
- 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/{dist/core/exchange-rate/strategies.js → src/runes/plugins/money/src/strategies.ts} +45 -22
- 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/design-tokens/props.d.ts +0 -52
- package/dist/core/design-tokens/props.d.ts.map +0 -1
- package/dist/core/design-tokens/props.js +0 -34
- package/dist/core/exchange-rate/strategies.d.ts +0 -52
- package/dist/core/exchange-rate/strategies.d.ts.map +0 -1
- package/dist/core/index.d.ts +0 -9
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -8
- 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/layout/types.d.ts +0 -60
- package/dist/core/layout/types.d.ts.map +0 -1
- package/dist/core/layout/types.js +0 -4
- 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-primitive.d.ts +0 -101
- package/dist/core/money/money-primitive.d.ts.map +0 -1
- package/dist/core/money/money-primitive.js +0 -161
- package/dist/core/money/money.d.ts +0 -129
- package/dist/core/money/money.d.ts.map +0 -1
- package/dist/core/money/money.js +0 -250
- 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/core/shortcuts/types.d.ts +0 -60
- package/dist/core/shortcuts/types.d.ts.map +0 -1
- package/dist/core/shortcuts/types.js +0 -4
- package/dist/index.d.ts +0 -6
- package/dist/index.js +0 -7
- 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 -59
- 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 -31
- package/dist/state/composables/useMoney.js +0 -126
- package/dist/state/composables/useMoneyFilter.d.ts +0 -20
- package/dist/state/composables/useMoneyFilter.js +0 -81
- 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/composables/useShortcuts.d.ts +0 -33
- package/dist/state/composables/useShortcuts.js +0 -75
- package/dist/state/context.d.ts +0 -15
- package/dist/state/context.js +0 -16
- package/dist/state/createConfigStore.svelte.d.ts +0 -28
- package/dist/state/createConfigStore.svelte.js +0 -72
- package/dist/state/currency.svelte.d.ts +0 -32
- package/dist/state/currency.svelte.js +0 -96
- package/dist/state/currency.test.d.ts +0 -1
- package/dist/state/currency.test.js +0 -35
- package/dist/state/exchange-rate.svelte.d.ts +0 -43
- package/dist/state/exchange-rate.svelte.js +0 -145
- package/dist/state/exchange-rate.test.d.ts +0 -1
- package/dist/state/exchange-rate.test.js +0 -75
- package/dist/state/index.d.ts +0 -26
- package/dist/state/index.js +0 -32
- package/dist/state/language.svelte.d.ts +0 -57
- package/dist/state/language.svelte.js +0 -43
- 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 -75
- package/dist/state/persistence/drivers.test.d.ts +0 -1
- package/dist/state/persistence/drivers.test.js +0 -79
- package/dist/state/persistence/provider.d.ts +0 -23
- package/dist/state/persistence/provider.test.d.ts +0 -1
- package/dist/state/persistence/provider.test.js +0 -51
- package/dist/state/registry/index.d.ts +0 -44
- package/dist/state/registry/index.js +0 -58
- package/dist/state/registry/registry.test.d.ts +0 -1
- package/dist/state/registry/registry.test.js +0 -112
- package/dist/state/registry/types.d.ts +0 -20
- package/dist/state/registry/types.js +0 -3
- 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 -15
- 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 -218
- package/dist/ui/components/RuneProvider.svelte.d.ts +0 -49
- package/dist/ui/components/Toaster.svelte.d.ts +0 -18
- package/dist/ui/components/money/MoneyDisplay.svelte.d.ts +0 -33
- package/dist/ui/components/money/MoneyDisplay.svelte.test.d.ts +0 -1
- package/dist/ui/components/money/MoneyDisplay.svelte.test.js +0 -117
- package/dist/ui/components/money/MoneyInput.svelte.d.ts +0 -34
- 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/APP_CONFIGURATIONS.d.ts +0 -29
- package/dist/ui/features/config/APP_CONFIGURATIONS.js +0 -38
- package/dist/ui/features/config/AppSettingSelector.svelte.d.ts +0 -13
- package/dist/ui/features/config/CurrencySelector.svelte.d.ts +0 -8
- package/dist/ui/features/config/LanguageSelector.svelte.d.ts +0 -8
- package/dist/ui/features/config/ResourceSelector.svelte.d.ts +0 -25
- 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/ShortcutBinder.svelte +0 -17
- package/dist/ui/features/shortcuts/ShortcutBinder.svelte.d.ts +0 -7
- package/dist/ui/features/shortcuts/ShortcutPalette.svelte.d.ts +0 -6
- package/dist/ui/index.d.ts +0 -30
- package/dist/ui/index.js +0 -46
- 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 -32
- package/dist/ui/layout/WorkspaceStrip.svelte.d.ts +0 -11
- package/dist/ui/layout/connection-factory.d.ts +0 -50
- package/dist/ui/layout/connection-factory.js +0 -58
- package/dist/ui/layout/index.d.ts +0 -7
- package/dist/ui/layout/index.js +0 -7
- package/dist/ui/paraglide/README.md +0 -147
- 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 -730
- package/dist/ui/paraglide/runtime.js +0 -1812
- package/dist/ui/paraglide/server.d.ts +0 -92
- package/dist/ui/paraglide/server.js +0 -239
- 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,75 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { ExchangeRateStore } from "./exchange-rate.svelte.ts";
|
|
3
|
-
import { createCurrencyStore } from "./currency.svelte.ts";
|
|
4
|
-
import { inMemoryDriver } from "./persistence/drivers.ts";
|
|
5
|
-
import { RUNE_LAB_CONTEXT } from "./context.ts";
|
|
6
|
-
import { createLanguageStore } from "./language.svelte.ts";
|
|
7
|
-
// Mock useMoney since it uses getContext and other stores
|
|
8
|
-
vi.mock("./composables/useMoney.ts", () => ({
|
|
9
|
-
useMoney: () => ({
|
|
10
|
-
format: (amount, code, unit) => `${amount} ${code ?? 'USD'}`
|
|
11
|
-
})
|
|
12
|
-
}));
|
|
13
|
-
describe("ExchangeRateStore", () => {
|
|
14
|
-
it("should initialize with default base", () => {
|
|
15
|
-
const store = new ExchangeRateStore();
|
|
16
|
-
expect(store.baseCurrency).toBe("USD");
|
|
17
|
-
expect(store.hasRates).toBe(false);
|
|
18
|
-
});
|
|
19
|
-
it("should set and retrieve rates", () => {
|
|
20
|
-
const store = new ExchangeRateStore();
|
|
21
|
-
store.setRates("USD", { MXN: 17.23, EUR: 0.91 });
|
|
22
|
-
expect(store.hasRates).toBe(true);
|
|
23
|
-
expect(store.baseCurrency).toBe("USD");
|
|
24
|
-
const rateToMxn = store.getRate("USD", "MXN");
|
|
25
|
-
expect(rateToMxn).toEqual({ amount: 17230000, scale: 6 });
|
|
26
|
-
});
|
|
27
|
-
it("should handle inverse rates", () => {
|
|
28
|
-
const store = new ExchangeRateStore();
|
|
29
|
-
store.setRates("USD", { MXN: 20 });
|
|
30
|
-
const rateToBase = store.getRate("MXN", "USD");
|
|
31
|
-
expect(rateToBase).toEqual({ amount: 5000000, scale: 8 });
|
|
32
|
-
});
|
|
33
|
-
it("should handle triangulation (cross-rates)", () => {
|
|
34
|
-
const store = new ExchangeRateStore();
|
|
35
|
-
store.setRates("USD", { MXN: 20, EUR: 0.5 });
|
|
36
|
-
const rateMxnToEur = store.getRate("MXN", "EUR");
|
|
37
|
-
expect(rateMxnToEur).toEqual({ amount: 2500000, scale: 8 });
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
describe("CurrencyStore Integration", () => {
|
|
41
|
-
it("should convert amount when ExchangeRateStore is wired", () => {
|
|
42
|
-
const exchangeRateStore = new ExchangeRateStore();
|
|
43
|
-
exchangeRateStore.setRates("USD", { MXN: 20 });
|
|
44
|
-
const currencyStore = createCurrencyStore({ exchangeRateStore, driver: inMemoryDriver });
|
|
45
|
-
expect(currencyStore.canConvert).toBe(true);
|
|
46
|
-
const converted = currencyStore.convertAmount(10000, "USD", "MXN");
|
|
47
|
-
expect(converted).toBe(200000);
|
|
48
|
-
});
|
|
49
|
-
it("should return original amount if no rates available", () => {
|
|
50
|
-
const exchangeRateStore = new ExchangeRateStore();
|
|
51
|
-
const currencyStore = createCurrencyStore({ exchangeRateStore, driver: inMemoryDriver });
|
|
52
|
-
expect(currencyStore.canConvert).toBe(false);
|
|
53
|
-
const converted = currencyStore.convertAmount(10000, "USD", "MXN");
|
|
54
|
-
expect(converted).toBe(10000);
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
describe("useMoneyFilter", () => {
|
|
58
|
-
// Simple test for logic, skipping full component mount for brevity
|
|
59
|
-
it("matches() should work with conversion", () => {
|
|
60
|
-
const exchangeRateStore = new ExchangeRateStore();
|
|
61
|
-
exchangeRateStore.setRates("USD", { MXN: 20 });
|
|
62
|
-
const currencyStore = createCurrencyStore({ exchangeRateStore, driver: inMemoryDriver });
|
|
63
|
-
// Manual mock of context for the composable
|
|
64
|
-
// In a real test we'd use render() from @testing-library/svelte
|
|
65
|
-
const mockContext = new Map();
|
|
66
|
-
mockContext.set(RUNE_LAB_CONTEXT.currency, currencyStore);
|
|
67
|
-
mockContext.set(RUNE_LAB_CONTEXT.exchangeRate, exchangeRateStore);
|
|
68
|
-
mockContext.set(RUNE_LAB_CONTEXT.language, createLanguageStore({ driver: inMemoryDriver }));
|
|
69
|
-
// We can't easily call useMoneyFilter outside component without more setup
|
|
70
|
-
// but we can verify the matches logic in CurrencyStore
|
|
71
|
-
const amountInMxn = 1000000; // 10,000 MXN
|
|
72
|
-
const amountInUsd = currencyStore.convertAmount(amountInMxn, "MXN", "USD");
|
|
73
|
-
expect(amountInUsd).toBe(50000); // 500 USD
|
|
74
|
-
});
|
|
75
|
-
});
|
package/dist/state/index.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export { RUNE_LAB_CONTEXT } from "./context.ts";
|
|
2
|
-
export { useRuneLab } from "./composables/useRuneLab.ts";
|
|
3
|
-
export type { RuneLabContext } from "./composables/useRuneLab.ts";
|
|
4
|
-
export { usePersistence } from "./composables/usePersistence.ts";
|
|
5
|
-
export { useMoney } from "./composables/useMoney.ts";
|
|
6
|
-
export { useMoneyFilter } from "./composables/useMoneyFilter.ts";
|
|
7
|
-
export type { MoneyFilterOptions } from "./composables/useMoneyFilter.ts";
|
|
8
|
-
export { useShortcuts } from "./composables/useShortcuts.ts";
|
|
9
|
-
export { cookieDriver, createCookieDriver, createInMemoryDriver, inMemoryDriver, localStorageDriver, sessionStorageDriver, } from "./persistence/drivers.ts";
|
|
10
|
-
export { getDriverContext, resolveDriver, setDriverContext, } from "./persistence/provider.ts";
|
|
11
|
-
export { clearRegistry, getAllRegisteredStores, getRegisteredStore, registerStore, STORE_REGISTRY, unregisterStore, } from "./registry/index.ts";
|
|
12
|
-
export type { StoreFactory, StoreRegistryEntry } from "./registry/types.ts";
|
|
13
|
-
export { type AppData, AppStore, createAppStore, getAppStore, } from "./app.svelte.ts";
|
|
14
|
-
export { createLayoutStore, getLayoutStore, LayoutStore, type NavigationItem, type NavigationSection, type WorkspaceItem, } from "./layout.svelte.ts";
|
|
15
|
-
export { ApiStore, type ConnectionState, createApiStore, getApiStore, } from "./api.svelte.ts";
|
|
16
|
-
export { createLanguageStore, getLanguageStore, type Language, } from "./language.svelte.ts";
|
|
17
|
-
export { createCurrencyStore, type Currency, type CurrencyStore, type CurrencyStoreOptions, getCurrencyStore, } from "./currency.svelte.ts";
|
|
18
|
-
export { createExchangeRateStore, ExchangeRateStore, getExchangeRateStore, } from "./exchange-rate.svelte.ts";
|
|
19
|
-
export { createToastStore, getToastStore, ToastStore } from "./toast.svelte.ts";
|
|
20
|
-
export { type Command, CommandStore, createCommandStore, getCommandStore, } from "./commands.svelte.ts";
|
|
21
|
-
export { createShortcutStore, getShortcutStore, LAYOUT_SHORTCUTS, type ShortcutEntry, shortcutListener, type ShortcutMeta, ShortcutStore, } from "./shortcuts.svelte.ts";
|
|
22
|
-
export { createThemeStore, getThemeStore, type Theme, type ThemeStoreOptions, } from "./theme.svelte.ts";
|
|
23
|
-
export { type ConfigStore, type ConfigStoreOptions, createConfigStore, } from "./createConfigStore.svelte.ts";
|
|
24
|
-
export { createToastBridge, notify } from "./toast-bridge.ts";
|
|
25
|
-
export { type CartEntry, type CartStore, type CartStoreConfig, createCartStore, getCartStore, } from "./cart.svelte.ts";
|
|
26
|
-
export { type AuthConfig, createSessionStore, getSessionStore, type Session, SessionStore, type User, } from "./auth/index.ts";
|
package/dist/state/index.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
// sdk/state/src/index.ts
|
|
2
|
-
// Unified public barrel for @internal/state
|
|
3
|
-
// ── Context ───────────────────────────────────────────────────────────────────
|
|
4
|
-
export { RUNE_LAB_CONTEXT } from "./context.ts";
|
|
5
|
-
// ── Composables ───────────────────────────────────────────────────────────────
|
|
6
|
-
export { useRuneLab } from "./composables/useRuneLab.ts";
|
|
7
|
-
export { usePersistence } from "./composables/usePersistence.ts";
|
|
8
|
-
export { useMoney } from "./composables/useMoney.ts";
|
|
9
|
-
export { useMoneyFilter } from "./composables/useMoneyFilter.ts";
|
|
10
|
-
export { useShortcuts } from "./composables/useShortcuts.ts";
|
|
11
|
-
// ── Persistence Drivers ───────────────────────────────────────────────────────
|
|
12
|
-
export { cookieDriver, createCookieDriver, createInMemoryDriver, inMemoryDriver, localStorageDriver, sessionStorageDriver, } from "./persistence/drivers.ts";
|
|
13
|
-
// ── Driver Provider (Phase 2) ─────────────────────────────────────────────────
|
|
14
|
-
export { getDriverContext, resolveDriver, setDriverContext, } from "./persistence/provider.ts";
|
|
15
|
-
// ── Store Registry (Phase 2) ──────────────────────────────────────────────────
|
|
16
|
-
export { clearRegistry, getAllRegisteredStores, getRegisteredStore, registerStore, STORE_REGISTRY, unregisterStore, } from "./registry/index.ts";
|
|
17
|
-
// Stores
|
|
18
|
-
export { AppStore, createAppStore, getAppStore, } from "./app.svelte.ts";
|
|
19
|
-
export { createLayoutStore, getLayoutStore, LayoutStore, } from "./layout.svelte.ts";
|
|
20
|
-
export { ApiStore, createApiStore, getApiStore, } from "./api.svelte.ts";
|
|
21
|
-
export { createLanguageStore, getLanguageStore, } from "./language.svelte.ts";
|
|
22
|
-
export { createCurrencyStore, getCurrencyStore, } from "./currency.svelte.ts";
|
|
23
|
-
export { createExchangeRateStore, ExchangeRateStore, getExchangeRateStore, } from "./exchange-rate.svelte.ts";
|
|
24
|
-
export { createToastStore, getToastStore, ToastStore } from "./toast.svelte.ts";
|
|
25
|
-
export { CommandStore, createCommandStore, getCommandStore, } from "./commands.svelte.ts";
|
|
26
|
-
export { createShortcutStore, getShortcutStore, LAYOUT_SHORTCUTS, shortcutListener, ShortcutStore, } from "./shortcuts.svelte.ts";
|
|
27
|
-
export { createThemeStore, getThemeStore, } from "./theme.svelte.ts";
|
|
28
|
-
export { createConfigStore, } from "./createConfigStore.svelte.ts";
|
|
29
|
-
export { createToastBridge, notify } from "./toast-bridge.ts";
|
|
30
|
-
export { createCartStore, getCartStore, } from "./cart.svelte.ts";
|
|
31
|
-
// ── Auth ──────────────────────────────────────────────────────────────────────
|
|
32
|
-
export { createSessionStore, getSessionStore, SessionStore, } from "./auth/index.ts";
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { type ConfigStore } from "./createConfigStore.svelte.ts";
|
|
2
|
-
/**
|
|
3
|
-
* Language configuration
|
|
4
|
-
* Represents a supported language in the application
|
|
5
|
-
*/
|
|
6
|
-
export interface Language {
|
|
7
|
-
code: string;
|
|
8
|
-
flag?: string;
|
|
9
|
-
}
|
|
10
|
-
export declare const LANGUAGES: readonly [{
|
|
11
|
-
readonly code: "es";
|
|
12
|
-
readonly flag: "🇲🇽";
|
|
13
|
-
}, {
|
|
14
|
-
readonly code: "fr";
|
|
15
|
-
readonly flag: "🇫🇷";
|
|
16
|
-
}, {
|
|
17
|
-
readonly code: "it";
|
|
18
|
-
readonly flag: "🇮🇹";
|
|
19
|
-
}, {
|
|
20
|
-
readonly code: "pt";
|
|
21
|
-
readonly flag: "🇧🇷";
|
|
22
|
-
}, {
|
|
23
|
-
readonly code: "en";
|
|
24
|
-
readonly flag: "🇺🇸";
|
|
25
|
-
}, {
|
|
26
|
-
readonly code: "de";
|
|
27
|
-
readonly flag: "🇩🇪";
|
|
28
|
-
}, {
|
|
29
|
-
readonly code: "ru";
|
|
30
|
-
readonly flag: "🇷🇺";
|
|
31
|
-
}, {
|
|
32
|
-
readonly code: "hi";
|
|
33
|
-
readonly flag: "🇮🇳";
|
|
34
|
-
}, {
|
|
35
|
-
readonly code: "ar";
|
|
36
|
-
readonly flag: "🇸🇦";
|
|
37
|
-
}, {
|
|
38
|
-
readonly code: "zh";
|
|
39
|
-
readonly flag: "🇨🇳";
|
|
40
|
-
}, {
|
|
41
|
-
readonly code: "ja";
|
|
42
|
-
readonly flag: "🇯🇵";
|
|
43
|
-
}, {
|
|
44
|
-
readonly code: "ko";
|
|
45
|
-
readonly flag: "🇰🇷";
|
|
46
|
-
}, {
|
|
47
|
-
readonly code: "vi";
|
|
48
|
-
readonly flag: "🇻🇳";
|
|
49
|
-
}];
|
|
50
|
-
import type { PersistenceDriver } from "@internal/core";
|
|
51
|
-
export interface LanguageStoreOptions {
|
|
52
|
-
driver?: PersistenceDriver | (() => PersistenceDriver | undefined);
|
|
53
|
-
onLocaleChange?: (code: string) => void;
|
|
54
|
-
locales?: readonly string[];
|
|
55
|
-
}
|
|
56
|
-
export declare function createLanguageStore(options?: LanguageStoreOptions): ConfigStore<Language>;
|
|
57
|
-
export declare function getLanguageStore(): ConfigStore<Language>;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
// sdk/state/src/language.svelte.ts
|
|
2
|
-
import { createConfigStore, } from "./createConfigStore.svelte.ts";
|
|
3
|
-
import { getContext } from "svelte";
|
|
4
|
-
import { RUNE_LAB_CONTEXT } from "./context.ts";
|
|
5
|
-
export const LANGUAGES = [
|
|
6
|
-
// --- INDOEUROPEAS (Rama Romance / Latín) ---
|
|
7
|
-
{ code: "es", flag: "🇲🇽" },
|
|
8
|
-
{ code: "fr", flag: "🇫🇷" },
|
|
9
|
-
{ code: "it", flag: "🇮🇹" },
|
|
10
|
-
{ code: "pt", flag: "🇧🇷" },
|
|
11
|
-
// --- INDOEUROPEAS (Rama Germánica) ---
|
|
12
|
-
{ code: "en", flag: "🇺🇸" },
|
|
13
|
-
{ code: "de", flag: "🇩🇪" },
|
|
14
|
-
// --- INDOEUROPEAS (Otras Ramas) ---
|
|
15
|
-
{ code: "ru", flag: "🇷🇺" },
|
|
16
|
-
{ code: "hi", flag: "🇮🇳" },
|
|
17
|
-
// --- AFROASIÁTICAS ---
|
|
18
|
-
{ code: "ar", flag: "🇸🇦" },
|
|
19
|
-
// --- FAMILIAS ASIÁTICAS INDEPENDIENTES ---
|
|
20
|
-
{ code: "zh", flag: "🇨🇳" },
|
|
21
|
-
{ code: "ja", flag: "🇯🇵" },
|
|
22
|
-
{ code: "ko", flag: "🇰🇷" },
|
|
23
|
-
{ code: "vi", flag: "🇻🇳" },
|
|
24
|
-
];
|
|
25
|
-
import { resolveDriver } from "./persistence/provider.ts";
|
|
26
|
-
export function createLanguageStore(options) {
|
|
27
|
-
const driver = resolveDriver(options?.driver);
|
|
28
|
-
const items = options?.locales
|
|
29
|
-
? LANGUAGES.filter((l) => options.locales.includes(l.code))
|
|
30
|
-
: LANGUAGES;
|
|
31
|
-
const store = createConfigStore({
|
|
32
|
-
items,
|
|
33
|
-
storageKey: "language",
|
|
34
|
-
displayName: "Language",
|
|
35
|
-
idKey: "code",
|
|
36
|
-
icon: "🌍",
|
|
37
|
-
driver,
|
|
38
|
-
});
|
|
39
|
-
return store;
|
|
40
|
-
}
|
|
41
|
-
export function getLanguageStore() {
|
|
42
|
-
return getContext(RUNE_LAB_CONTEXT.language);
|
|
43
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import type { PersistenceDriver } from "@internal/core";
|
|
2
|
-
export interface WorkspaceItem {
|
|
3
|
-
id: string;
|
|
4
|
-
icon: string;
|
|
5
|
-
label: string;
|
|
6
|
-
badge?: string | number;
|
|
7
|
-
href?: string;
|
|
8
|
-
onClick?: () => void;
|
|
9
|
-
}
|
|
10
|
-
export interface NavigationItem {
|
|
11
|
-
id: string;
|
|
12
|
-
label: string;
|
|
13
|
-
icon?: string;
|
|
14
|
-
href?: string;
|
|
15
|
-
badge?: string | number;
|
|
16
|
-
isActive?: boolean;
|
|
17
|
-
onClick?: () => void;
|
|
18
|
-
children?: NavigationItem[];
|
|
19
|
-
}
|
|
20
|
-
export interface NavigationSection {
|
|
21
|
-
id: string;
|
|
22
|
-
title: string;
|
|
23
|
-
items: NavigationItem[];
|
|
24
|
-
}
|
|
25
|
-
export declare class LayoutStore {
|
|
26
|
-
#private;
|
|
27
|
-
workspaces: WorkspaceItem[];
|
|
28
|
-
activeWorkspaceId: string | null;
|
|
29
|
-
activeNavItemId: string | null;
|
|
30
|
-
navOpen: boolean;
|
|
31
|
-
detailOpen: boolean;
|
|
32
|
-
collapsedSections: Set<string>;
|
|
33
|
-
constructor(driver?: PersistenceDriver | (() => PersistenceDriver | undefined));
|
|
34
|
-
init(options?: {
|
|
35
|
-
namespace?: string;
|
|
36
|
-
driver?: PersistenceDriver;
|
|
37
|
-
}): void;
|
|
38
|
-
setWorkspaces(items: WorkspaceItem[]): void;
|
|
39
|
-
activateWorkspace(id: string): void;
|
|
40
|
-
activateWorkspaceByIndex(index: number): void;
|
|
41
|
-
navigate(id: string): void;
|
|
42
|
-
toggleNav(): void;
|
|
43
|
-
toggleDetail(): void;
|
|
44
|
-
toggleSection(id: string): void;
|
|
45
|
-
collapseSection(id: string): void;
|
|
46
|
-
expandSection(id: string): void;
|
|
47
|
-
}
|
|
48
|
-
export declare function createLayoutStore(driver?: PersistenceDriver | (() => PersistenceDriver | undefined)): LayoutStore;
|
|
49
|
-
export declare function getLayoutStore(): LayoutStore;
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
// src/lib/state/layout.svelte.ts
|
|
2
|
-
import { getContext } from "svelte";
|
|
3
|
-
import { RUNE_LAB_CONTEXT } from "./context.ts";
|
|
4
|
-
import { resolveDriver } from "./persistence/provider.ts";
|
|
5
|
-
export class LayoutStore {
|
|
6
|
-
workspaces = $state([]);
|
|
7
|
-
activeWorkspaceId = $state(null);
|
|
8
|
-
activeNavItemId = $state(null);
|
|
9
|
-
navOpen = $state(true);
|
|
10
|
-
detailOpen = $state(false);
|
|
11
|
-
collapsedSections = $state(new Set());
|
|
12
|
-
#storageNamespace = "default";
|
|
13
|
-
#initialized = false;
|
|
14
|
-
#driver;
|
|
15
|
-
constructor(driver) {
|
|
16
|
-
// Use resolveDriver but allow undefined result for SSR/no-driver scenarios
|
|
17
|
-
this.#driver = driver ? resolveDriver(driver) : undefined;
|
|
18
|
-
}
|
|
19
|
-
init(options) {
|
|
20
|
-
if (this.#initialized)
|
|
21
|
-
return;
|
|
22
|
-
if (options?.namespace)
|
|
23
|
-
this.#storageNamespace = options.namespace;
|
|
24
|
-
if (options?.driver)
|
|
25
|
-
this.#driver = options.driver;
|
|
26
|
-
// If no driver was injected and no window (SSR), we just do nothing
|
|
27
|
-
if (!this.#driver && typeof window !== "undefined") {
|
|
28
|
-
this.#driver = {
|
|
29
|
-
get: (key) => localStorage.getItem(key),
|
|
30
|
-
set: (key, val) => localStorage.setItem(key, val),
|
|
31
|
-
remove: (key) => localStorage.removeItem(key),
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
if (this.#driver) {
|
|
35
|
-
const savedWorkspace = this.#driver.get(`rl:layout:${this.#storageNamespace}:workspace`);
|
|
36
|
-
if (savedWorkspace)
|
|
37
|
-
this.activeWorkspaceId = savedWorkspace;
|
|
38
|
-
const savedSections = this.#driver.get(`rl:layout:${this.#storageNamespace}:sections`);
|
|
39
|
-
if (savedSections) {
|
|
40
|
-
try {
|
|
41
|
-
this.collapsedSections = new Set(JSON.parse(savedSections));
|
|
42
|
-
}
|
|
43
|
-
catch (e) {
|
|
44
|
-
console.error("Failed to parse collapsed sections", e);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
this.#initialized = true;
|
|
49
|
-
// Set up persistence effects
|
|
50
|
-
if (this.#driver) {
|
|
51
|
-
$effect.root(() => {
|
|
52
|
-
$effect(() => {
|
|
53
|
-
if (this.activeWorkspaceId) {
|
|
54
|
-
this.#driver?.set(`rl:layout:${this.#storageNamespace}:workspace`, this.activeWorkspaceId);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
$effect(() => {
|
|
58
|
-
this.#driver?.set(`rl:layout:${this.#storageNamespace}:sections`, JSON.stringify([...this.collapsedSections]));
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
setWorkspaces(items) {
|
|
64
|
-
this.workspaces = items;
|
|
65
|
-
if (items.length > 0 && !this.activeWorkspaceId) {
|
|
66
|
-
this.activeWorkspaceId = items[0].id;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
activateWorkspace(id) {
|
|
70
|
-
this.activeWorkspaceId = id;
|
|
71
|
-
}
|
|
72
|
-
activateWorkspaceByIndex(index) {
|
|
73
|
-
const ws = this.workspaces[index];
|
|
74
|
-
if (ws) {
|
|
75
|
-
this.activateWorkspace(ws.id);
|
|
76
|
-
ws.onClick?.();
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
navigate(id) {
|
|
80
|
-
this.activeNavItemId = id;
|
|
81
|
-
}
|
|
82
|
-
toggleNav() {
|
|
83
|
-
this.navOpen = !this.navOpen;
|
|
84
|
-
}
|
|
85
|
-
toggleDetail() {
|
|
86
|
-
this.detailOpen = !this.detailOpen;
|
|
87
|
-
}
|
|
88
|
-
toggleSection(id) {
|
|
89
|
-
if (this.collapsedSections.has(id)) {
|
|
90
|
-
this.collapsedSections.delete(id);
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
this.collapsedSections.add(id);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
collapseSection(id) {
|
|
97
|
-
this.collapsedSections.add(id);
|
|
98
|
-
}
|
|
99
|
-
expandSection(id) {
|
|
100
|
-
this.collapsedSections.delete(id);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
export function createLayoutStore(driver) {
|
|
104
|
-
return new LayoutStore(driver);
|
|
105
|
-
}
|
|
106
|
-
export function getLayoutStore() {
|
|
107
|
-
return getContext(RUNE_LAB_CONTEXT.layout);
|
|
108
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { PersistenceDriver } from "@internal/core";
|
|
2
|
-
export declare function createInMemoryDriver(): PersistenceDriver;
|
|
3
|
-
export declare const inMemoryDriver: PersistenceDriver;
|
|
4
|
-
export declare const localStorageDriver: PersistenceDriver;
|
|
5
|
-
export declare const sessionStorageDriver: PersistenceDriver;
|
|
6
|
-
export declare const createCookieDriver: (options?: {
|
|
7
|
-
path?: string;
|
|
8
|
-
maxAge?: number;
|
|
9
|
-
sameSite?: "Lax" | "Strict" | "None";
|
|
10
|
-
}) => PersistenceDriver;
|
|
11
|
-
/** Default cookie driver singleton (path='/') */
|
|
12
|
-
export declare const cookieDriver: PersistenceDriver;
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { BROWSER as browser } from "esm-env";
|
|
2
|
-
export function createInMemoryDriver() {
|
|
3
|
-
const store = new Map();
|
|
4
|
-
return {
|
|
5
|
-
get: (key) => store.get(key) ?? null,
|
|
6
|
-
set: (key, value) => store.set(key, value),
|
|
7
|
-
remove: (key) => {
|
|
8
|
-
store.delete(key);
|
|
9
|
-
},
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
export const inMemoryDriver = createInMemoryDriver();
|
|
13
|
-
export const localStorageDriver = {
|
|
14
|
-
get: (key) => {
|
|
15
|
-
if (!browser)
|
|
16
|
-
return null;
|
|
17
|
-
return globalThis.localStorage.getItem(key);
|
|
18
|
-
},
|
|
19
|
-
set: (key, value) => {
|
|
20
|
-
if (!browser)
|
|
21
|
-
return;
|
|
22
|
-
globalThis.localStorage.setItem(key, value);
|
|
23
|
-
},
|
|
24
|
-
remove: (key) => {
|
|
25
|
-
if (!browser)
|
|
26
|
-
return;
|
|
27
|
-
globalThis.localStorage.removeItem(key);
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
export const sessionStorageDriver = {
|
|
31
|
-
get: (key) => {
|
|
32
|
-
if (!browser)
|
|
33
|
-
return null;
|
|
34
|
-
return globalThis.sessionStorage.getItem(key);
|
|
35
|
-
},
|
|
36
|
-
set: (key, value) => {
|
|
37
|
-
if (!browser)
|
|
38
|
-
return;
|
|
39
|
-
globalThis.sessionStorage.setItem(key, value);
|
|
40
|
-
},
|
|
41
|
-
remove: (key) => {
|
|
42
|
-
if (!browser)
|
|
43
|
-
return;
|
|
44
|
-
globalThis.sessionStorage.removeItem(key);
|
|
45
|
-
},
|
|
46
|
-
};
|
|
47
|
-
export const createCookieDriver = (options = {}) => ({
|
|
48
|
-
get: (key) => {
|
|
49
|
-
if (!browser)
|
|
50
|
-
return null;
|
|
51
|
-
const match = document.cookie.match(new RegExp(`(^| )${key}=([^;]+)`));
|
|
52
|
-
return match ? decodeURIComponent(match[2]) : null;
|
|
53
|
-
},
|
|
54
|
-
set: (key, value) => {
|
|
55
|
-
if (!browser)
|
|
56
|
-
return;
|
|
57
|
-
let cookie = `${key}=${encodeURIComponent(value)}`;
|
|
58
|
-
if (options.path)
|
|
59
|
-
cookie += `; path=${options.path}`;
|
|
60
|
-
if (options.maxAge)
|
|
61
|
-
cookie += `; max-age=${options.maxAge}`;
|
|
62
|
-
if (options.sameSite)
|
|
63
|
-
cookie += `; samesite=${options.sameSite}`;
|
|
64
|
-
document.cookie = cookie;
|
|
65
|
-
},
|
|
66
|
-
remove: (key) => {
|
|
67
|
-
if (!browser)
|
|
68
|
-
return;
|
|
69
|
-
document.cookie = `${key}=; max-age=0; path=${options.path || "/"}`;
|
|
70
|
-
},
|
|
71
|
-
});
|
|
72
|
-
/** Default cookie driver singleton (path='/') */
|
|
73
|
-
export const cookieDriver = createCookieDriver({
|
|
74
|
-
path: "/",
|
|
75
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { createInMemoryDriver, inMemoryDriver } from "./drivers.ts";
|
|
3
|
-
describe("PersistenceDriver Contract Tests", () => {
|
|
4
|
-
describe("createInMemoryDriver (factory)", () => {
|
|
5
|
-
it("should return null for missing keys", () => {
|
|
6
|
-
const driver = createInMemoryDriver();
|
|
7
|
-
expect(driver.get("nonexistent")).toBeNull();
|
|
8
|
-
});
|
|
9
|
-
it("should set and get a value", () => {
|
|
10
|
-
const driver = createInMemoryDriver();
|
|
11
|
-
driver.set("key", "value");
|
|
12
|
-
expect(driver.get("key")).toBe("value");
|
|
13
|
-
});
|
|
14
|
-
it("should overwrite existing values", () => {
|
|
15
|
-
const driver = createInMemoryDriver();
|
|
16
|
-
driver.set("key", "v1");
|
|
17
|
-
driver.set("key", "v2");
|
|
18
|
-
expect(driver.get("key")).toBe("v2");
|
|
19
|
-
});
|
|
20
|
-
it("should remove a key", () => {
|
|
21
|
-
const driver = createInMemoryDriver();
|
|
22
|
-
driver.set("key", "value");
|
|
23
|
-
driver.remove("key");
|
|
24
|
-
expect(driver.get("key")).toBeNull();
|
|
25
|
-
});
|
|
26
|
-
it("should not throw when removing a nonexistent key", () => {
|
|
27
|
-
const driver = createInMemoryDriver();
|
|
28
|
-
expect(() => driver.remove("nonexistent")).not.toThrow();
|
|
29
|
-
});
|
|
30
|
-
it("should handle empty string values", () => {
|
|
31
|
-
const driver = createInMemoryDriver();
|
|
32
|
-
driver.set("key", "");
|
|
33
|
-
expect(driver.get("key")).toBe("");
|
|
34
|
-
});
|
|
35
|
-
it("should handle JSON string values", () => {
|
|
36
|
-
const driver = createInMemoryDriver();
|
|
37
|
-
const json = JSON.stringify({ theme: "dark", fontSize: 14 });
|
|
38
|
-
driver.set("settings", json);
|
|
39
|
-
expect(JSON.parse(driver.get("settings"))).toEqual({
|
|
40
|
-
theme: "dark",
|
|
41
|
-
fontSize: 14,
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
describe("Factory isolation", () => {
|
|
46
|
-
it("should create isolated instances (no cross-contamination)", () => {
|
|
47
|
-
const driverA = createInMemoryDriver();
|
|
48
|
-
const driverB = createInMemoryDriver();
|
|
49
|
-
driverA.set("shared-key", "fromA");
|
|
50
|
-
driverB.set("shared-key", "fromB");
|
|
51
|
-
expect(driverA.get("shared-key")).toBe("fromA");
|
|
52
|
-
expect(driverB.get("shared-key")).toBe("fromB");
|
|
53
|
-
});
|
|
54
|
-
it("remove on one instance does not affect another", () => {
|
|
55
|
-
const driverA = createInMemoryDriver();
|
|
56
|
-
const driverB = createInMemoryDriver();
|
|
57
|
-
driverA.set("key", "valueA");
|
|
58
|
-
driverB.set("key", "valueB");
|
|
59
|
-
driverA.remove("key");
|
|
60
|
-
expect(driverA.get("key")).toBeNull();
|
|
61
|
-
expect(driverB.get("key")).toBe("valueB");
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
describe("inMemoryDriver singleton", () => {
|
|
65
|
-
it("should implement the full PersistenceDriver interface", () => {
|
|
66
|
-
expect(typeof inMemoryDriver.get).toBe("function");
|
|
67
|
-
expect(typeof inMemoryDriver.set).toBe("function");
|
|
68
|
-
expect(typeof inMemoryDriver.remove).toBe("function");
|
|
69
|
-
});
|
|
70
|
-
it("should function as a working driver", () => {
|
|
71
|
-
// Use unique keys to avoid test interference
|
|
72
|
-
const key = `test-${Date.now()}`;
|
|
73
|
-
inMemoryDriver.set(key, "singleton-value");
|
|
74
|
-
expect(inMemoryDriver.get(key)).toBe("singleton-value");
|
|
75
|
-
inMemoryDriver.remove(key);
|
|
76
|
-
expect(inMemoryDriver.get(key)).toBeNull();
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
});
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { PersistenceDriver } from "@internal/core";
|
|
2
|
-
/**
|
|
3
|
-
* Resolves a driver input (function or instance) into a concrete PersistenceDriver.
|
|
4
|
-
* If the input is null/undefined, returns an inMemoryDriver as the Null Object.
|
|
5
|
-
*
|
|
6
|
-
* This is the single place where function-form drivers are unwrapped.
|
|
7
|
-
*/
|
|
8
|
-
export declare function resolveDriver(driver?: PersistenceDriver | (() => PersistenceDriver | undefined) | undefined): PersistenceDriver;
|
|
9
|
-
/**
|
|
10
|
-
* Sets the persistence driver context at the RuneProvider root.
|
|
11
|
-
* Should be called exactly once, before any store factories run.
|
|
12
|
-
*
|
|
13
|
-
* @param driver - A PersistenceDriver instance, a factory function, or undefined.
|
|
14
|
-
* Undefined falls back to inMemoryDriver.
|
|
15
|
-
*/
|
|
16
|
-
export declare function setDriverContext(driver?: PersistenceDriver | (() => PersistenceDriver | undefined)): PersistenceDriver;
|
|
17
|
-
/**
|
|
18
|
-
* Retrieves the persistence driver from context.
|
|
19
|
-
* Always returns a concrete PersistenceDriver — never null or undefined.
|
|
20
|
-
*
|
|
21
|
-
* @throws Error if called outside a RuneProvider tree (no context set).
|
|
22
|
-
*/
|
|
23
|
-
export declare function getDriverContext(): PersistenceDriver;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { resolveDriver } from "./provider.ts";
|
|
3
|
-
describe("DriverProvider", () => {
|
|
4
|
-
describe("resolveDriver", () => {
|
|
5
|
-
it("should return inMemoryDriver when given undefined", () => {
|
|
6
|
-
const driver = resolveDriver(undefined);
|
|
7
|
-
expect(driver).toBeDefined();
|
|
8
|
-
expect(typeof driver.get).toBe("function");
|
|
9
|
-
expect(typeof driver.set).toBe("function");
|
|
10
|
-
expect(typeof driver.remove).toBe("function");
|
|
11
|
-
});
|
|
12
|
-
it("should pass through a concrete PersistenceDriver", () => {
|
|
13
|
-
const mockDriver = {
|
|
14
|
-
get: () => null,
|
|
15
|
-
set: () => { },
|
|
16
|
-
remove: () => { },
|
|
17
|
-
};
|
|
18
|
-
const driver = resolveDriver(mockDriver);
|
|
19
|
-
expect(driver).toBe(mockDriver);
|
|
20
|
-
});
|
|
21
|
-
it("should resolve a factory function to a concrete driver", () => {
|
|
22
|
-
const mockDriver = {
|
|
23
|
-
get: () => null,
|
|
24
|
-
set: () => { },
|
|
25
|
-
remove: () => { },
|
|
26
|
-
};
|
|
27
|
-
const driver = resolveDriver(() => mockDriver);
|
|
28
|
-
expect(driver).toBe(mockDriver);
|
|
29
|
-
});
|
|
30
|
-
it("should fall back to inMemoryDriver when factory returns undefined", () => {
|
|
31
|
-
const driver = resolveDriver(() => undefined);
|
|
32
|
-
expect(driver).toBeDefined();
|
|
33
|
-
expect(typeof driver.get).toBe("function");
|
|
34
|
-
});
|
|
35
|
-
it("inMemoryDriver fallback should be functional", () => {
|
|
36
|
-
const driver = resolveDriver(undefined);
|
|
37
|
-
driver.set("test-key", "test-value");
|
|
38
|
-
expect(driver.get("test-key")).toBe("test-value");
|
|
39
|
-
driver.remove("test-key");
|
|
40
|
-
expect(driver.get("test-key")).toBeNull();
|
|
41
|
-
});
|
|
42
|
-
it("should create isolated inMemoryDriver instances per call", () => {
|
|
43
|
-
const driverA = resolveDriver(undefined);
|
|
44
|
-
const driverB = resolveDriver(undefined);
|
|
45
|
-
driverA.set("key", "A");
|
|
46
|
-
driverB.set("key", "B");
|
|
47
|
-
expect(driverA.get("key")).toBe("A");
|
|
48
|
-
expect(driverB.get("key")).toBe("B");
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
});
|