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
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// sdk/ui/src/lib/features/config/APP_CONFIGURATIONS.ts
|
|
2
|
+
// Single source of truth for all configuration dimensions.
|
|
3
|
+
// Frozen at import time — must not be mutated at runtime.
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Describes a single configuration dimension
|
|
7
|
+
* (e.g., theme, language, currency) for the generic selector system.
|
|
8
|
+
*/
|
|
9
|
+
export interface ConfigDimension {
|
|
10
|
+
/** Unique key matching the RUNE_LAB_CONTEXT key */
|
|
11
|
+
readonly key: string;
|
|
12
|
+
/** Key used to look up the ConfigStore from context */
|
|
13
|
+
readonly storeKey: string;
|
|
14
|
+
/** Property name used as the item identifier */
|
|
15
|
+
readonly idKey: string;
|
|
16
|
+
/** Emoji used for display / logging */
|
|
17
|
+
readonly icon: string;
|
|
18
|
+
/** Human-readable label for settings panels */
|
|
19
|
+
readonly label: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* All built-in configuration dimensions.
|
|
24
|
+
* Used by `AppSettingSelector` and settings panels to enumerate available
|
|
25
|
+
* config pickers without hard-coding them.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```svelte
|
|
29
|
+
* {#each APP_CONFIGURATIONS as dim}
|
|
30
|
+
* <ResourceSelector store={stores[dim.storeKey]} idKey={dim.idKey} ... />
|
|
31
|
+
* {/each}
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export const APP_CONFIGURATIONS: readonly ConfigDimension[] = Object.freeze([
|
|
35
|
+
{
|
|
36
|
+
key: "theme",
|
|
37
|
+
storeKey: "theme",
|
|
38
|
+
idKey: "name",
|
|
39
|
+
icon: "🎨",
|
|
40
|
+
label: "Theme",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
key: "language",
|
|
44
|
+
storeKey: "language",
|
|
45
|
+
idKey: "code",
|
|
46
|
+
icon: "🌍",
|
|
47
|
+
label: "Language",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
key: "currency",
|
|
51
|
+
storeKey: "currency",
|
|
52
|
+
idKey: "code",
|
|
53
|
+
icon: "💰",
|
|
54
|
+
label: "Currency",
|
|
55
|
+
},
|
|
56
|
+
]);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<!-- src/lib/features/layout/smart/ConnectedNavigationPanel.svelte -->
|
|
2
2
|
<script lang="ts">
|
|
3
|
-
import { getLayoutStore, type NavigationSection } from "@
|
|
3
|
+
import { getLayoutStore, type NavigationSection } from "@rune-lab/kernel";
|
|
4
4
|
import NavigationPanel from "./NavigationPanel.svelte";
|
|
5
5
|
import { createNavigationConnection } from "./connection-factory.ts";
|
|
6
6
|
import type { Snippet } from "svelte";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<!-- src/lib/features/layout/smart/ConnectedWorkspaceStrip.svelte -->
|
|
2
2
|
<script lang="ts">
|
|
3
|
-
import { getLayoutStore, type WorkspaceItem } from "@
|
|
3
|
+
import { getLayoutStore, type WorkspaceItem } from "@rune-lab/kernel";
|
|
4
4
|
import WorkspaceStrip from "./WorkspaceStrip.svelte";
|
|
5
5
|
import { createWorkspaceConnection } from "./connection-factory.ts";
|
|
6
6
|
import type { Snippet } from "svelte";
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import ResourceSelector from "./ResourceSelector.svelte";
|
|
3
|
-
import { getLanguageStore } from "@
|
|
4
|
-
import { setLocale } from "
|
|
3
|
+
import { getLanguageStore } from "@rune-lab/kernel";
|
|
4
|
+
import { setLocale } from "@rune-lab/i18n/paraglide/runtime.js";
|
|
5
5
|
|
|
6
6
|
const languageStore = getLanguageStore();
|
|
7
7
|
|
|
8
8
|
let {
|
|
9
|
-
languages: allowedLocales = languageStore.available.map((l) =>
|
|
10
|
-
|
|
9
|
+
languages: allowedLocales = languageStore.available.map((l) =>
|
|
10
|
+
String(l.code),
|
|
11
|
+
),
|
|
12
|
+
current = $bindable(String(languageStore.current)),
|
|
11
13
|
onchange,
|
|
12
14
|
}: {
|
|
13
|
-
languages?:
|
|
15
|
+
languages?: string[];
|
|
14
16
|
current?: string;
|
|
15
17
|
onchange?: (value: string) => void;
|
|
16
18
|
} = $props();
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
<!-- src/lib/layout/NavigationPanel.svelte -->
|
|
2
2
|
<script lang="ts">
|
|
3
3
|
import type { Snippet } from "svelte";
|
|
4
|
-
import type {
|
|
5
|
-
NavigationItem,
|
|
6
|
-
NavigationSection,
|
|
7
|
-
} from "@internal/state";
|
|
4
|
+
import type { NavigationItem, NavigationSection } from "@rune-lab/kernel";
|
|
8
5
|
|
|
9
6
|
let {
|
|
10
7
|
header,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import AppSettingSelector from "./AppSettingSelector.svelte";
|
|
3
|
-
import type { ConfigStore } from "@
|
|
4
|
-
import * as rlMessages from "
|
|
3
|
+
import type { ConfigStore } from "@rune-lab/kernel";
|
|
4
|
+
import * as rlMessages from "@rune-lab/i18n/paraglide/messages.js";
|
|
5
5
|
import { getContext, type Snippet } from "svelte";
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -62,9 +62,7 @@
|
|
|
62
62
|
return key;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
let active = $derived(
|
|
66
|
-
store.get(store.current) ?? store.available[0],
|
|
67
|
-
);
|
|
65
|
+
let active = $derived(store.get(store.current) ?? store.available[0]);
|
|
68
66
|
|
|
69
67
|
let available = $derived(
|
|
70
68
|
filterKeys.length > 0
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import ResourceSelector from "./ResourceSelector.svelte";
|
|
3
|
-
import { getThemeStore, type Theme } from "@
|
|
3
|
+
import { getThemeStore, type Theme } from "@rune-lab/kernel";
|
|
4
4
|
|
|
5
5
|
const themeStore = getThemeStore();
|
|
6
6
|
|
|
7
7
|
let {
|
|
8
8
|
themes = [],
|
|
9
|
-
current = $bindable(themeStore.current),
|
|
9
|
+
current = $bindable(String(themeStore.current)),
|
|
10
10
|
onchange,
|
|
11
11
|
}: {
|
|
12
12
|
themes?: string[];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- src/lib/layout/WorkspaceLayout.svelte -->
|
|
2
2
|
<script module lang="ts">
|
|
3
3
|
import type { Snippet } from "svelte";
|
|
4
|
-
import type { LayoutConfig } from "
|
|
4
|
+
import type { LayoutConfig } from "./types.ts";
|
|
5
5
|
|
|
6
6
|
export interface WorkspaceLayoutProps {
|
|
7
7
|
/** Content for the far-left vertical strip */
|
|
@@ -38,11 +38,13 @@
|
|
|
38
38
|
<script lang="ts">
|
|
39
39
|
import {
|
|
40
40
|
getLayoutStore,
|
|
41
|
-
getShortcutStore,
|
|
42
41
|
getLanguageStore,
|
|
42
|
+
} from "./mod.ts";
|
|
43
|
+
import { LAYOUT_SHORTCUTS } from "./types.ts";
|
|
44
|
+
import {
|
|
45
|
+
getShortcutStore,
|
|
43
46
|
shortcutListener,
|
|
44
|
-
|
|
45
|
-
} from "@internal/state";
|
|
47
|
+
} from "@rune-lab/palettes";
|
|
46
48
|
import { onMount } from "svelte";
|
|
47
49
|
|
|
48
50
|
/**
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// sdk/ui/src/lib/layout/connection-factory.ts
|
|
2
|
+
// Connection functions that generate reactive prop bindings from LayoutStore.
|
|
3
|
+
// Svelte 5 doesn't support React-style HOCs — this is the idiomatic alternative.
|
|
4
|
+
|
|
5
|
+
import type { LayoutStore } from "./store.svelte.ts";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Reactive prop binding for the NavigationPanel component.
|
|
9
|
+
*/
|
|
10
|
+
export interface NavigationConnection {
|
|
11
|
+
/** Currently active navigation item ID */
|
|
12
|
+
readonly activeId: string | null;
|
|
13
|
+
/** Set of collapsed section IDs */
|
|
14
|
+
readonly collapsedIds: Set<string>;
|
|
15
|
+
/** Handler for when a navigation item is selected */
|
|
16
|
+
onSelect: (item: { id?: string }) => void;
|
|
17
|
+
/** Handler for when a section is toggled */
|
|
18
|
+
onToggle: (id: string, isOpen: boolean) => void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Reactive prop binding for the WorkspaceStrip component.
|
|
23
|
+
*/
|
|
24
|
+
export interface WorkspaceConnection {
|
|
25
|
+
/** Currently active workspace ID */
|
|
26
|
+
readonly activeId: string | null;
|
|
27
|
+
/** Handler for when a workspace is selected */
|
|
28
|
+
onSelect: (id: string) => void;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Creates reactive prop bindings for connecting NavigationPanel to LayoutStore.
|
|
33
|
+
* Returns an object with getter properties that track LayoutStore state.
|
|
34
|
+
*
|
|
35
|
+
* @param layoutStore - The LayoutStore instance from context
|
|
36
|
+
* @returns Prop bindings compatible with NavigationPanel
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```svelte
|
|
40
|
+
* <script>
|
|
41
|
+
* const layoutStore = getLayoutStore();
|
|
42
|
+
* const nav = createNavigationConnection(layoutStore);
|
|
43
|
+
* </script>
|
|
44
|
+
* <NavigationPanel {sections} activeId={nav.activeId} collapsedIds={nav.collapsedIds}
|
|
45
|
+
* onSelect={nav.onSelect} onToggle={nav.onToggle} />
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export function createNavigationConnection(
|
|
49
|
+
layoutStore: Pick<
|
|
50
|
+
LayoutStore,
|
|
51
|
+
| "activeNavItemId"
|
|
52
|
+
| "collapsedSections"
|
|
53
|
+
| "navigate"
|
|
54
|
+
| "expandSection"
|
|
55
|
+
| "collapseSection"
|
|
56
|
+
>,
|
|
57
|
+
): NavigationConnection {
|
|
58
|
+
return {
|
|
59
|
+
get activeId() {
|
|
60
|
+
return layoutStore.activeNavItemId;
|
|
61
|
+
},
|
|
62
|
+
get collapsedIds() {
|
|
63
|
+
return layoutStore.collapsedSections;
|
|
64
|
+
},
|
|
65
|
+
onSelect(item: { id?: string }) {
|
|
66
|
+
if (item.id) layoutStore.navigate(item.id);
|
|
67
|
+
},
|
|
68
|
+
onToggle(id: string, isOpen: boolean) {
|
|
69
|
+
if (isOpen) {
|
|
70
|
+
layoutStore.expandSection(id);
|
|
71
|
+
} else {
|
|
72
|
+
layoutStore.collapseSection(id);
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Creates reactive prop bindings for connecting WorkspaceStrip to LayoutStore.
|
|
80
|
+
*
|
|
81
|
+
* @param layoutStore - The LayoutStore instance from context
|
|
82
|
+
* @returns Prop bindings compatible with WorkspaceStrip
|
|
83
|
+
*/
|
|
84
|
+
export function createWorkspaceConnection(
|
|
85
|
+
layoutStore: Pick<LayoutStore, "activeWorkspaceId" | "activateWorkspace">,
|
|
86
|
+
): WorkspaceConnection {
|
|
87
|
+
return {
|
|
88
|
+
get activeId() {
|
|
89
|
+
return layoutStore.activeWorkspaceId;
|
|
90
|
+
},
|
|
91
|
+
onSelect(id: string) {
|
|
92
|
+
layoutStore.activateWorkspace(id);
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// sdk/state/src/language.svelte.ts
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
type ConfigStore,
|
|
5
|
+
createConfigStore,
|
|
6
|
+
getLanguageStore,
|
|
7
|
+
} from "@rune-lab/kernel";
|
|
8
|
+
import type { Language } from "@rune-lab/kernel";
|
|
9
|
+
|
|
10
|
+
export type { Language };
|
|
11
|
+
|
|
12
|
+
export const LANGUAGES = [
|
|
13
|
+
// --- INDOEUROPEAS (Rama Romance / Latín) ---
|
|
14
|
+
{ code: "es", flag: "🇲🇽" },
|
|
15
|
+
{ code: "fr", flag: "🇫🇷" },
|
|
16
|
+
{ code: "it", flag: "🇮🇹" },
|
|
17
|
+
{ code: "pt", flag: "🇧🇷" },
|
|
18
|
+
// --- INDOEUROPEAS (Rama Germánica) ---
|
|
19
|
+
{ code: "en", flag: "🇺🇸" },
|
|
20
|
+
{ code: "de", flag: "🇩🇪" },
|
|
21
|
+
// --- INDOEUROPEAS (Otras Ramas) ---
|
|
22
|
+
{ code: "ru", flag: "🇷🇺" },
|
|
23
|
+
{ code: "hi", flag: "🇮🇳" },
|
|
24
|
+
// --- AFROASIÁTICAS ---
|
|
25
|
+
{ code: "ar", flag: "🇸🇦" },
|
|
26
|
+
// --- FAMILIAS ASIÁTICAS INDEPENDIENTES ---
|
|
27
|
+
{ code: "zh", flag: "🇨🇳" },
|
|
28
|
+
{ code: "ja", flag: "🇯🇵" },
|
|
29
|
+
{ code: "ko", flag: "🇰🇷" },
|
|
30
|
+
{ code: "vi", flag: "🇻🇳" },
|
|
31
|
+
] as const;
|
|
32
|
+
|
|
33
|
+
export const languageStore: ConfigStore<Language> = createConfigStore<Language>(
|
|
34
|
+
{
|
|
35
|
+
items: LANGUAGES,
|
|
36
|
+
storageKey: "language",
|
|
37
|
+
displayName: "Language",
|
|
38
|
+
idKey: "code",
|
|
39
|
+
icon: "🌍",
|
|
40
|
+
},
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
export type LanguageStore = ReturnType<typeof createConfigStore<Language>>;
|
|
44
|
+
export { getLanguageStore };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { defineRune, RUNE_LAB_CONTEXT } from "@rune-lab/kernel";
|
|
2
|
+
import type { PersistenceDriver, RunePlugin } from "@rune-lab/kernel";
|
|
3
|
+
import { createLayoutStore } from "./store.svelte.ts";
|
|
4
|
+
import { type Theme, themeStore } from "./theme.svelte.ts";
|
|
5
|
+
import { languageStore } from "./language.svelte.ts";
|
|
6
|
+
|
|
7
|
+
export * from "./store.svelte.ts";
|
|
8
|
+
export * from "./types.ts";
|
|
9
|
+
export { default as WorkspaceLayout } from "./WorkspaceLayout.svelte";
|
|
10
|
+
export * from "./language.svelte.ts";
|
|
11
|
+
export * from "./theme.svelte.ts";
|
|
12
|
+
export * from "./APP_CONFIGURATIONS.ts";
|
|
13
|
+
export * from "./connection-factory.ts";
|
|
14
|
+
export { default as LanguageSelector } from "./LanguageSelector.svelte";
|
|
15
|
+
export { default as ThemeSelector } from "./ThemeSelector.svelte";
|
|
16
|
+
export { default as ResourceSelector } from "./ResourceSelector.svelte";
|
|
17
|
+
export { default as AppSettingSelector } from "./AppSettingSelector.svelte";
|
|
18
|
+
export { default as NavigationPanel } from "./NavigationPanel.svelte";
|
|
19
|
+
export { default as WorkspaceStrip } from "./WorkspaceStrip.svelte";
|
|
20
|
+
export { default as ContentArea } from "./ContentArea.svelte";
|
|
21
|
+
export { default as DetailPanel } from "./DetailPanel.svelte";
|
|
22
|
+
export { default as Icon } from "./Icon.svelte";
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Layout Plugin — manages the primary workspace layout, theme, and language.
|
|
26
|
+
* Always included by default in RuneProvider.
|
|
27
|
+
*/
|
|
28
|
+
export const LayoutPlugin: RunePlugin = defineRune({
|
|
29
|
+
id: "rune-lab.layout",
|
|
30
|
+
stores: [
|
|
31
|
+
{
|
|
32
|
+
id: "layout",
|
|
33
|
+
contextKey: RUNE_LAB_CONTEXT.layout,
|
|
34
|
+
factory: (_config: unknown, driver: PersistenceDriver) =>
|
|
35
|
+
createLayoutStore(driver),
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: "theme",
|
|
39
|
+
contextKey: RUNE_LAB_CONTEXT.theme,
|
|
40
|
+
factory: (config: unknown, _driver: PersistenceDriver) => {
|
|
41
|
+
const c = config as Record<string, unknown>;
|
|
42
|
+
if (c.customThemes) {
|
|
43
|
+
themeStore.addItems(c.customThemes as Theme[]);
|
|
44
|
+
}
|
|
45
|
+
if (
|
|
46
|
+
c.defaultTheme &&
|
|
47
|
+
!(themeStore as unknown as { current: unknown }).current
|
|
48
|
+
) {
|
|
49
|
+
if (themeStore.get(c.defaultTheme as never)) {
|
|
50
|
+
themeStore.set(c.defaultTheme as never);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return themeStore;
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: "language",
|
|
58
|
+
contextKey: RUNE_LAB_CONTEXT.language,
|
|
59
|
+
factory: (config: unknown, _driver: PersistenceDriver) => {
|
|
60
|
+
const c = config as Record<string, unknown>;
|
|
61
|
+
if (c.locales) {
|
|
62
|
+
const localesToKeep = c.locales as string[];
|
|
63
|
+
languageStore.available = languageStore.available.filter(
|
|
64
|
+
(l) => localesToKeep.includes(l.code),
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
return languageStore;
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
});
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
// src/lib/state/layout.svelte.ts
|
|
2
|
+
import { getLayoutStore } from "@rune-lab/kernel";
|
|
3
|
+
import type {
|
|
4
|
+
NavigationItem,
|
|
5
|
+
NavigationSection,
|
|
6
|
+
PersistenceDriver,
|
|
7
|
+
WorkspaceItem,
|
|
8
|
+
} from "@rune-lab/kernel";
|
|
9
|
+
import { resolveDriver } from "@rune-lab/kernel";
|
|
10
|
+
|
|
11
|
+
export type { NavigationItem, NavigationSection, WorkspaceItem };
|
|
12
|
+
|
|
13
|
+
export class LayoutStore {
|
|
14
|
+
workspaces: WorkspaceItem[] = $state<WorkspaceItem[]>([]);
|
|
15
|
+
activeWorkspaceId: string | null = $state<string | null>(null);
|
|
16
|
+
activeNavItemId: string | null = $state<string | null>(null);
|
|
17
|
+
navOpen: boolean = $state(true);
|
|
18
|
+
detailOpen: boolean = $state(false);
|
|
19
|
+
collapsedSections: Set<string> = $state<Set<string>>(new Set());
|
|
20
|
+
|
|
21
|
+
#storageNamespace = "default";
|
|
22
|
+
#initialized = false;
|
|
23
|
+
#driver: PersistenceDriver | undefined;
|
|
24
|
+
|
|
25
|
+
constructor(
|
|
26
|
+
driver?: PersistenceDriver | (() => PersistenceDriver | undefined),
|
|
27
|
+
) {
|
|
28
|
+
// Use resolveDriver but allow undefined result for SSR/no-driver scenarios
|
|
29
|
+
this.#driver = driver ? resolveDriver(driver) : undefined;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
init(options?: { namespace?: string; driver?: PersistenceDriver }) {
|
|
33
|
+
if (this.#initialized) return;
|
|
34
|
+
if (options?.namespace) this.#storageNamespace = options.namespace;
|
|
35
|
+
if (options?.driver) this.#driver = options.driver;
|
|
36
|
+
|
|
37
|
+
// If no driver was injected and no window (SSR), we just do nothing
|
|
38
|
+
if (!this.#driver && typeof window !== "undefined") {
|
|
39
|
+
this.#driver = {
|
|
40
|
+
get: (key: string) => localStorage.getItem(key),
|
|
41
|
+
set: (key: string, val: string) => localStorage.setItem(key, val),
|
|
42
|
+
remove: (key: string) => localStorage.removeItem(key),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (this.#driver) {
|
|
47
|
+
const savedWorkspace = this.#driver.get(
|
|
48
|
+
`rl:layout:${this.#storageNamespace}:workspace`,
|
|
49
|
+
);
|
|
50
|
+
if (savedWorkspace) this.activeWorkspaceId = savedWorkspace;
|
|
51
|
+
|
|
52
|
+
const savedSections = this.#driver.get(
|
|
53
|
+
`rl:layout:${this.#storageNamespace}:sections`,
|
|
54
|
+
);
|
|
55
|
+
if (savedSections) {
|
|
56
|
+
try {
|
|
57
|
+
this.collapsedSections = new Set(JSON.parse(savedSections));
|
|
58
|
+
} catch (e) {
|
|
59
|
+
console.error("Failed to parse collapsed sections", e);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
this.#initialized = true;
|
|
65
|
+
|
|
66
|
+
// Set up persistence effects
|
|
67
|
+
if (this.#driver) {
|
|
68
|
+
$effect.root(() => {
|
|
69
|
+
$effect(() => {
|
|
70
|
+
if (this.activeWorkspaceId) {
|
|
71
|
+
this.#driver?.set(
|
|
72
|
+
`rl:layout:${this.#storageNamespace}:workspace`,
|
|
73
|
+
this.activeWorkspaceId,
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
$effect(() => {
|
|
79
|
+
this.#driver?.set(
|
|
80
|
+
`rl:layout:${this.#storageNamespace}:sections`,
|
|
81
|
+
JSON.stringify([...this.collapsedSections]),
|
|
82
|
+
);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
setWorkspaces(items: WorkspaceItem[]) {
|
|
89
|
+
this.workspaces = items;
|
|
90
|
+
if (items.length > 0 && !this.activeWorkspaceId) {
|
|
91
|
+
this.activeWorkspaceId = items[0].id;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
activateWorkspace(id: string) {
|
|
96
|
+
this.activeWorkspaceId = id;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
activateWorkspaceByIndex(index: number) {
|
|
100
|
+
const ws = this.workspaces[index];
|
|
101
|
+
if (ws) {
|
|
102
|
+
this.activateWorkspace(ws.id);
|
|
103
|
+
ws.onClick?.();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
navigate(id: string) {
|
|
108
|
+
this.activeNavItemId = id;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
toggleNav() {
|
|
112
|
+
this.navOpen = !this.navOpen;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
toggleDetail() {
|
|
116
|
+
this.detailOpen = !this.detailOpen;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
toggleSection(id: string) {
|
|
120
|
+
if (this.collapsedSections.has(id)) {
|
|
121
|
+
this.collapsedSections.delete(id);
|
|
122
|
+
} else {
|
|
123
|
+
this.collapsedSections.add(id);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
collapseSection(id: string) {
|
|
128
|
+
this.collapsedSections.add(id);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
expandSection(id: string) {
|
|
132
|
+
this.collapsedSections.delete(id);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export function createLayoutStore(
|
|
137
|
+
driver?: PersistenceDriver | (() => PersistenceDriver | undefined),
|
|
138
|
+
): LayoutStore {
|
|
139
|
+
return new LayoutStore(driver);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export { getLayoutStore };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// @ts-nocheck: legacy daisyui imports and complex ConfigStore typing
|
|
2
|
+
// client/packages/ui/src/state/theme-config.svelte.ts
|
|
3
|
+
|
|
4
|
+
import { createConfigStore, getThemeStore } from "@rune-lab/kernel";
|
|
5
|
+
import type { Theme } from "@rune-lab/kernel";
|
|
6
|
+
import { BROWSER } from "esm-env";
|
|
7
|
+
|
|
8
|
+
export type { Theme };
|
|
9
|
+
|
|
10
|
+
// Icon map for known themes - unknown ones fall back to 🎨
|
|
11
|
+
const THEME_ICONS: Record<string, string> = {
|
|
12
|
+
light: "🌞",
|
|
13
|
+
dark: "🌙",
|
|
14
|
+
cupcake: "🧁",
|
|
15
|
+
bumblebee: "🐝",
|
|
16
|
+
emerald: "💚",
|
|
17
|
+
corporate: "🏢",
|
|
18
|
+
synthwave: "🌆",
|
|
19
|
+
retro: "📺",
|
|
20
|
+
cyberpunk: "🤖",
|
|
21
|
+
valentine: "💝",
|
|
22
|
+
halloween: "🎃",
|
|
23
|
+
garden: "🌷",
|
|
24
|
+
forest: "🌲",
|
|
25
|
+
aqua: "💧",
|
|
26
|
+
lofi: "🎵",
|
|
27
|
+
pastel: "🎨",
|
|
28
|
+
fantasy: "🔮",
|
|
29
|
+
wireframe: "📝",
|
|
30
|
+
black: "⚫",
|
|
31
|
+
luxury: "👑",
|
|
32
|
+
dracula: "🧛",
|
|
33
|
+
cmyk: "🖨️",
|
|
34
|
+
autumn: "🍂",
|
|
35
|
+
business: "💼",
|
|
36
|
+
acid: "🧪",
|
|
37
|
+
lemonade: "🍋",
|
|
38
|
+
night: "🌃",
|
|
39
|
+
coffee: "☕",
|
|
40
|
+
winter: "❄️",
|
|
41
|
+
dim: "🔅",
|
|
42
|
+
nord: "🧊",
|
|
43
|
+
sunset: "🌅",
|
|
44
|
+
caramellatte: "🍮",
|
|
45
|
+
abyss: "🌌",
|
|
46
|
+
silk: "🎀",
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const THEMES: Theme[] = Object.keys(THEME_ICONS).map((name: string) => ({
|
|
50
|
+
name,
|
|
51
|
+
icon: THEME_ICONS[name] ?? "🎨",
|
|
52
|
+
}));
|
|
53
|
+
|
|
54
|
+
export const themeStore: ConfigStore<Theme> = createConfigStore<Theme>({
|
|
55
|
+
items: THEMES,
|
|
56
|
+
storageKey: "theme",
|
|
57
|
+
displayName: "Theme",
|
|
58
|
+
idKey: "name",
|
|
59
|
+
icon: "🎨",
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// System preference detection — only if no persisted value was loaded
|
|
63
|
+
if (!themeStore.current && BROWSER) {
|
|
64
|
+
const prefersDark =
|
|
65
|
+
globalThis.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
66
|
+
const systemDefault = prefersDark ? "dark" : "light";
|
|
67
|
+
if (themeStore.get(systemDefault as never)) {
|
|
68
|
+
themeStore.set(systemDefault as never);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export type ThemeStore = ReturnType<typeof createConfigStore<Theme>>;
|
|
73
|
+
export { getThemeStore };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// sdk/core/src/layout/types.ts
|
|
2
|
+
// Framework-agnostic layout configuration types.
|
|
3
|
+
// No Svelte dependency — `component` is typed as `unknown` (resolved by sdk/ui).
|
|
4
|
+
|
|
5
|
+
export type { LayoutConfig, LayoutZone } from "@rune-lab/kernel";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Standard layout shortcuts
|
|
9
|
+
* Re-exported from kernel
|
|
10
|
+
*/
|
|
11
|
+
export { LAYOUT_SHORTCUTS } from "@rune-lab/kernel";
|
package/{dist/ui/features/command-palette → src/runes/palettes/src/commands}/CommandPalette.svelte
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<!-- src/client/sdk/ui/src/features/config/CommandPalette.svelte -->
|
|
2
2
|
<script lang="ts">
|
|
3
|
-
import {
|
|
4
|
-
import { getCommandStore, type Command } from "@
|
|
5
|
-
import { getShortcutStore } from "@
|
|
6
|
-
import { Icon } from "../../../mod";
|
|
3
|
+
import { tick } from "svelte";
|
|
4
|
+
import { getCommandStore, type Command } from "@rune-lab/kernel";
|
|
5
|
+
import { getShortcutStore } from "@rune-lab/kernel";
|
|
6
|
+
import { Icon } from "../../../layout/src/mod.ts";
|
|
7
7
|
|
|
8
8
|
let { shortcutKey = "shift+k" } = $props<{ shortcutKey?: string }>();
|
|
9
9
|
|