rune-lab 0.3.1 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitignore +12 -0
- package/README.md +4 -4
- package/deno.json +50 -0
- package/justfile +5 -0
- package/package.json +3 -80
- package/scripts/build_pkg.ts +51 -0
- package/scripts/ci.just +26 -0
- package/scripts/deploy.just +21 -0
- package/scripts/dev.just +4 -0
- package/scripts/inject.just +72 -0
- package/src/RuneProvider.svelte +105 -0
- package/src/i18n/message-resolver.test.ts +103 -0
- package/src/i18n/message-resolver.ts +89 -0
- package/src/i18n/project.inlang/settings.json +26 -0
- package/src/i18n/translations/ar.json +89 -0
- package/src/i18n/translations/de.json +89 -0
- package/src/i18n/translations/en.json +89 -0
- package/src/i18n/translations/es.json +89 -0
- package/src/i18n/translations/fr.json +89 -0
- package/src/i18n/translations/hi.json +89 -0
- package/src/i18n/translations/it.json +89 -0
- package/src/i18n/translations/ja.json +89 -0
- package/src/i18n/translations/ko.json +89 -0
- package/src/i18n/translations/pt.json +89 -0
- package/src/i18n/translations/ru.json +89 -0
- package/src/i18n/translations/vi.json +89 -0
- package/src/i18n/translations/zh.json +89 -0
- package/src/kernel/deno.json +5 -0
- package/src/kernel/src/actions/portal.ts +41 -0
- package/src/kernel/src/actions/shortcut-listener.ts +50 -0
- package/src/kernel/src/context/app.svelte.ts +98 -0
- package/src/kernel/src/context/context.ts +31 -0
- package/src/kernel/src/context/stores.svelte.ts +96 -0
- package/src/kernel/src/context/types.ts +110 -0
- package/src/kernel/src/context/useRuneLab.ts +38 -0
- package/src/kernel/src/mod.ts +13 -0
- package/src/kernel/src/persistence/createConfigStore.svelte.ts +120 -0
- package/src/kernel/src/persistence/drivers.test.ts +95 -0
- package/src/kernel/src/persistence/drivers.ts +77 -0
- package/src/kernel/src/persistence/provider.test.ts +58 -0
- package/src/kernel/src/persistence/provider.ts +58 -0
- package/src/kernel/src/persistence/types.ts +19 -0
- package/src/kernel/src/persistence/usePersistence.ts +9 -0
- package/src/kernel/src/registry/mod.ts +221 -0
- package/src/kernel/src/registry/registry.test.ts +162 -0
- package/src/kernel/src/tokens/props.ts +94 -0
- package/src/mod.ts +10 -0
- package/src/runes/layout/deno.json +5 -0
- package/src/runes/layout/src/APP_CONFIGURATIONS.ts +56 -0
- package/{dist/ui/features/config → src/runes/layout/src}/AppSettingSelector.svelte +1 -1
- package/{dist/ui/layout → src/runes/layout/src}/ConnectedNavigationPanel.svelte +7 -8
- package/{dist/ui/layout → src/runes/layout/src}/ConnectedWorkspaceStrip.svelte +5 -3
- package/src/runes/layout/src/Icon.svelte +7 -0
- package/src/runes/layout/src/LanguageSelector.svelte +45 -0
- package/{dist/ui/layout → src/runes/layout/src}/NavigationPanel.svelte +1 -4
- package/src/runes/layout/src/ResourceSelector.svelte +90 -0
- package/src/runes/layout/src/ThemeSelector.svelte +50 -0
- package/{dist/ui/layout → src/runes/layout/src}/WorkspaceLayout.svelte +13 -3
- package/{dist/ui/layout → src/runes/layout/src}/WorkspaceStrip.svelte +1 -1
- package/src/runes/layout/src/connection-factory.ts +95 -0
- package/src/runes/layout/src/language.svelte.ts +44 -0
- package/src/runes/layout/src/mod.ts +71 -0
- package/src/runes/layout/src/store.svelte.ts +142 -0
- package/src/runes/layout/src/theme.svelte.ts +73 -0
- package/src/runes/layout/src/types.ts +11 -0
- package/src/runes/palettes/deno.json +8 -0
- package/{dist/ui/features/command-palette → src/runes/palettes/src/commands}/CommandPalette.svelte +4 -4
- package/src/runes/palettes/src/commands/mod.ts +2 -0
- package/src/runes/palettes/src/commands/store.svelte.ts +80 -0
- package/src/runes/palettes/src/mod.ts +51 -0
- package/{dist/ui/components → src/runes/palettes/src/notifications}/Toaster.svelte +1 -2
- package/src/runes/palettes/src/notifications/bridge.ts +56 -0
- package/src/runes/palettes/src/notifications/mod.ts +4 -0
- package/src/runes/palettes/src/notifications/store.svelte.ts +58 -0
- package/{dist/ui/features → src/runes/palettes/src}/shortcuts/ShortcutPalette.svelte +4 -4
- package/src/runes/palettes/src/shortcuts/mod.ts +4 -0
- package/src/runes/palettes/src/shortcuts/store.svelte.ts +85 -0
- package/src/runes/palettes/src/shortcuts/types.ts +4 -0
- package/src/runes/palettes/src/shortcuts/useShortcuts.ts +85 -0
- package/src/runes/plugins/money/deno.json +8 -0
- package/src/runes/plugins/money/src/CurrencySelector.svelte +41 -0
- package/src/runes/plugins/money/src/MoneyDisplay.svelte +142 -0
- package/src/runes/plugins/money/src/MoneyInput.svelte +208 -0
- package/src/runes/plugins/money/src/currency.svelte.ts +95 -0
- package/src/runes/plugins/money/src/currency.test.ts +40 -0
- package/src/runes/plugins/money/src/exchange-rate.svelte.ts +176 -0
- package/src/runes/plugins/money/src/exchange-rate.test.ts +95 -0
- package/src/runes/plugins/money/src/mod.ts +79 -0
- package/src/runes/plugins/money/src/money-primitive.test.ts +217 -0
- package/src/runes/plugins/money/src/money-primitive.ts +220 -0
- package/src/runes/plugins/money/src/money.test.ts +183 -0
- package/src/runes/plugins/money/src/money.ts +382 -0
- package/src/runes/plugins/money/src/strategies.test.ts +143 -0
- package/src/runes/plugins/money/src/strategies.ts +95 -0
- package/src/runes/plugins/money/src/types.ts +27 -0
- package/src/runes/plugins/money/src/useMoney.ts +261 -0
- package/src/runes/plugins/money/src/useMoneyFilter.ts +132 -0
- package/tsconfig.json +41 -0
- package/vite.config.ts +44 -0
- package/dist/core/index.d.ts +0 -4
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -3
- package/dist/core/internal/message-resolver.d.ts +0 -42
- package/dist/core/internal/message-resolver.d.ts.map +0 -1
- package/dist/core/internal/message-resolver.js +0 -47
- package/dist/core/money/index.d.ts +0 -2
- package/dist/core/money/index.d.ts.map +0 -1
- package/dist/core/money/index.js +0 -2
- package/dist/core/money/money.d.ts +0 -57
- package/dist/core/money/money.d.ts.map +0 -1
- package/dist/core/money/money.js +0 -132
- package/dist/core/persistence/types.d.ts +0 -18
- package/dist/core/persistence/types.d.ts.map +0 -1
- package/dist/core/persistence/types.js +0 -2
- package/dist/index.d.ts +0 -5
- package/dist/index.js +0 -5
- package/dist/state/api.svelte.d.ts +0 -26
- package/dist/state/api.svelte.js +0 -65
- package/dist/state/app.svelte.d.ts +0 -48
- package/dist/state/app.svelte.js +0 -82
- package/dist/state/auth/index.d.ts +0 -2
- package/dist/state/auth/index.js +0 -2
- package/dist/state/auth/session.svelte.d.ts +0 -40
- package/dist/state/auth/session.svelte.js +0 -57
- package/dist/state/auth/types.d.ts +0 -30
- package/dist/state/auth/types.js +0 -3
- package/dist/state/cart.svelte.d.ts +0 -64
- package/dist/state/cart.svelte.js +0 -122
- package/dist/state/commands.svelte.d.ts +0 -46
- package/dist/state/commands.svelte.js +0 -62
- package/dist/state/composables/useMoney.d.ts +0 -15
- package/dist/state/composables/useMoney.js +0 -62
- package/dist/state/composables/usePersistence.d.ts +0 -2
- package/dist/state/composables/usePersistence.js +0 -5
- package/dist/state/composables/useRuneLab.d.ts +0 -19
- package/dist/state/composables/useRuneLab.js +0 -30
- package/dist/state/context.d.ts +0 -14
- package/dist/state/context.js +0 -15
- package/dist/state/createConfigStore.svelte.d.ts +0 -55
- package/dist/state/createConfigStore.svelte.js +0 -61
- package/dist/state/currency.svelte.d.ts +0 -28
- package/dist/state/currency.svelte.js +0 -80
- package/dist/state/daisyui.d.ts +0 -4
- package/dist/state/index.d.ts +0 -19
- package/dist/state/index.js +0 -25
- package/dist/state/language.svelte.d.ts +0 -64
- package/dist/state/language.svelte.js +0 -44
- package/dist/state/layout.svelte.d.ts +0 -49
- package/dist/state/layout.svelte.js +0 -108
- package/dist/state/persistence/drivers.d.ts +0 -12
- package/dist/state/persistence/drivers.js +0 -73
- package/dist/state/shortcuts.svelte.d.ts +0 -121
- package/dist/state/shortcuts.svelte.js +0 -222
- package/dist/state/theme.svelte.d.ts +0 -22
- package/dist/state/theme.svelte.js +0 -92
- package/dist/state/toast-bridge.d.ts +0 -29
- package/dist/state/toast-bridge.js +0 -43
- package/dist/state/toast.svelte.d.ts +0 -27
- package/dist/state/toast.svelte.js +0 -43
- package/dist/ui/actions/portal.d.ts +0 -7
- package/dist/ui/actions/portal.js +0 -32
- package/dist/ui/components/ApiMonitor.svelte +0 -162
- package/dist/ui/components/ApiMonitor.svelte.d.ts +0 -3
- package/dist/ui/components/Icon.svelte +0 -108
- package/dist/ui/components/Icon.svelte.d.ts +0 -14
- package/dist/ui/components/Kyntharil.svelte +0 -48
- package/dist/ui/components/Kyntharil.svelte.d.ts +0 -6
- package/dist/ui/components/RuneProvider.svelte +0 -198
- package/dist/ui/components/RuneProvider.svelte.d.ts +0 -42
- package/dist/ui/components/Toaster.svelte.d.ts +0 -18
- package/dist/ui/components/money/MoneyDisplay.svelte +0 -69
- package/dist/ui/components/money/MoneyDisplay.svelte.d.ts +0 -21
- package/dist/ui/components/money/MoneyDisplay.svelte.test.d.ts +0 -1
- package/dist/ui/components/money/MoneyDisplay.svelte.test.js +0 -74
- package/dist/ui/components/money/MoneyInput.svelte +0 -131
- package/dist/ui/components/money/MoneyInput.svelte.d.ts +0 -25
- package/dist/ui/components/money/index.d.ts +0 -2
- package/dist/ui/components/money/index.js +0 -3
- package/dist/ui/components/user/UserAvatar.svelte +0 -66
- package/dist/ui/components/user/UserAvatar.svelte.d.ts +0 -13
- package/dist/ui/components/user/UserProfile.svelte +0 -79
- package/dist/ui/components/user/UserProfile.svelte.d.ts +0 -17
- package/dist/ui/components/user/index.d.ts +0 -2
- package/dist/ui/components/user/index.js +0 -3
- package/dist/ui/features/command-palette/CommandPalette.svelte.d.ts +0 -6
- package/dist/ui/features/config/AppSettingSelector.svelte.d.ts +0 -13
- package/dist/ui/features/config/CurrencySelector.svelte +0 -67
- package/dist/ui/features/config/CurrencySelector.svelte.d.ts +0 -8
- package/dist/ui/features/config/LanguageSelector.svelte +0 -66
- package/dist/ui/features/config/LanguageSelector.svelte.d.ts +0 -8
- package/dist/ui/features/config/ThemeSelector.svelte +0 -73
- package/dist/ui/features/config/ThemeSelector.svelte.d.ts +0 -8
- package/dist/ui/features/notifications/NotificationBell.svelte.d.ts +0 -11
- package/dist/ui/features/notifications/index.d.ts +0 -1
- package/dist/ui/features/notifications/index.js +0 -2
- package/dist/ui/features/shortcuts/ShortcutPalette.svelte.d.ts +0 -6
- package/dist/ui/index.d.ts +0 -26
- package/dist/ui/index.js +0 -41
- package/dist/ui/layout/ConnectedNavigationPanel.svelte.d.ts +0 -10
- package/dist/ui/layout/ConnectedWorkspaceStrip.svelte.d.ts +0 -9
- package/dist/ui/layout/ContentArea.svelte.d.ts +0 -8
- package/dist/ui/layout/DetailPanel.svelte.d.ts +0 -7
- package/dist/ui/layout/NavigationPanel.svelte.d.ts +0 -14
- package/dist/ui/layout/WorkspaceLayout.svelte.d.ts +0 -25
- package/dist/ui/layout/WorkspaceStrip.svelte.d.ts +0 -11
- package/dist/ui/layout/index.d.ts +0 -7
- package/dist/ui/layout/index.js +0 -7
- package/dist/ui/paraglide/README.md +0 -94
- package/dist/ui/paraglide/messages/_index.d.ts +0 -87
- package/dist/ui/paraglide/messages/_index.js +0 -88
- package/dist/ui/paraglide/messages/abyss.d.ts +0 -16
- package/dist/ui/paraglide/messages/abyss.js +0 -84
- package/dist/ui/paraglide/messages/acid.d.ts +0 -16
- package/dist/ui/paraglide/messages/acid.js +0 -84
- package/dist/ui/paraglide/messages/active_toasts.d.ts +0 -16
- package/dist/ui/paraglide/messages/active_toasts.js +0 -84
- package/dist/ui/paraglide/messages/aed3.d.ts +0 -17
- package/dist/ui/paraglide/messages/aed3.js +0 -85
- package/dist/ui/paraglide/messages/all_currencies.d.ts +0 -16
- package/dist/ui/paraglide/messages/all_currencies.js +0 -84
- package/dist/ui/paraglide/messages/all_languages.d.ts +0 -16
- package/dist/ui/paraglide/messages/all_languages.js +0 -84
- package/dist/ui/paraglide/messages/all_themes.d.ts +0 -16
- package/dist/ui/paraglide/messages/all_themes.js +0 -84
- package/dist/ui/paraglide/messages/api_status.d.ts +0 -16
- package/dist/ui/paraglide/messages/api_status.js +0 -84
- package/dist/ui/paraglide/messages/app_info.d.ts +0 -16
- package/dist/ui/paraglide/messages/app_info.js +0 -84
- package/dist/ui/paraglide/messages/appearance.d.ts +0 -16
- package/dist/ui/paraglide/messages/appearance.js +0 -84
- package/dist/ui/paraglide/messages/aqua.d.ts +0 -16
- package/dist/ui/paraglide/messages/aqua.js +0 -84
- package/dist/ui/paraglide/messages/ar.d.ts +0 -16
- package/dist/ui/paraglide/messages/ar.js +0 -84
- package/dist/ui/paraglide/messages/autumn.d.ts +0 -16
- package/dist/ui/paraglide/messages/autumn.js +0 -84
- package/dist/ui/paraglide/messages/black.d.ts +0 -16
- package/dist/ui/paraglide/messages/black.js +0 -84
- package/dist/ui/paraglide/messages/brl3.d.ts +0 -17
- package/dist/ui/paraglide/messages/brl3.js +0 -85
- package/dist/ui/paraglide/messages/bumblebee.d.ts +0 -16
- package/dist/ui/paraglide/messages/bumblebee.js +0 -84
- package/dist/ui/paraglide/messages/business.d.ts +0 -16
- package/dist/ui/paraglide/messages/business.js +0 -84
- package/dist/ui/paraglide/messages/cad3.d.ts +0 -17
- package/dist/ui/paraglide/messages/cad3.js +0 -85
- package/dist/ui/paraglide/messages/caramellatte.d.ts +0 -16
- package/dist/ui/paraglide/messages/caramellatte.js +0 -84
- package/dist/ui/paraglide/messages/cmyk.d.ts +0 -16
- package/dist/ui/paraglide/messages/cmyk.js +0 -84
- package/dist/ui/paraglide/messages/cny3.d.ts +0 -17
- package/dist/ui/paraglide/messages/cny3.js +0 -85
- package/dist/ui/paraglide/messages/coffee.d.ts +0 -16
- package/dist/ui/paraglide/messages/coffee.js +0 -84
- package/dist/ui/paraglide/messages/commands_label.d.ts +0 -16
- package/dist/ui/paraglide/messages/commands_label.js +0 -84
- package/dist/ui/paraglide/messages/corporate.d.ts +0 -16
- package/dist/ui/paraglide/messages/corporate.js +0 -84
- package/dist/ui/paraglide/messages/cupcake.d.ts +0 -16
- package/dist/ui/paraglide/messages/cupcake.js +0 -84
- package/dist/ui/paraglide/messages/currency.d.ts +0 -16
- package/dist/ui/paraglide/messages/currency.js +0 -84
- package/dist/ui/paraglide/messages/current_currency.d.ts +0 -16
- package/dist/ui/paraglide/messages/current_currency.js +0 -84
- package/dist/ui/paraglide/messages/current_language.d.ts +0 -16
- package/dist/ui/paraglide/messages/current_language.js +0 -84
- package/dist/ui/paraglide/messages/current_theme.d.ts +0 -16
- package/dist/ui/paraglide/messages/current_theme.js +0 -84
- package/dist/ui/paraglide/messages/currently_in_queue.d.ts +0 -16
- package/dist/ui/paraglide/messages/currently_in_queue.js +0 -84
- package/dist/ui/paraglide/messages/cyberpunk.d.ts +0 -16
- package/dist/ui/paraglide/messages/cyberpunk.js +0 -84
- package/dist/ui/paraglide/messages/dark.d.ts +0 -16
- package/dist/ui/paraglide/messages/dark.js +0 -84
- package/dist/ui/paraglide/messages/de.d.ts +0 -16
- package/dist/ui/paraglide/messages/de.js +0 -84
- package/dist/ui/paraglide/messages/dim.d.ts +0 -16
- package/dist/ui/paraglide/messages/dim.js +0 -84
- package/dist/ui/paraglide/messages/dracula.d.ts +0 -16
- package/dist/ui/paraglide/messages/dracula.js +0 -84
- package/dist/ui/paraglide/messages/emerald.d.ts +0 -16
- package/dist/ui/paraglide/messages/emerald.js +0 -84
- package/dist/ui/paraglide/messages/en.d.ts +0 -16
- package/dist/ui/paraglide/messages/en.js +0 -84
- package/dist/ui/paraglide/messages/es.d.ts +0 -16
- package/dist/ui/paraglide/messages/es.js +0 -84
- package/dist/ui/paraglide/messages/eur3.d.ts +0 -17
- package/dist/ui/paraglide/messages/eur3.js +0 -85
- package/dist/ui/paraglide/messages/extended_controls.d.ts +0 -16
- package/dist/ui/paraglide/messages/extended_controls.js +0 -84
- package/dist/ui/paraglide/messages/fantasy.d.ts +0 -16
- package/dist/ui/paraglide/messages/fantasy.js +0 -84
- package/dist/ui/paraglide/messages/forest.d.ts +0 -16
- package/dist/ui/paraglide/messages/forest.js +0 -84
- package/dist/ui/paraglide/messages/fr.d.ts +0 -16
- package/dist/ui/paraglide/messages/fr.js +0 -84
- package/dist/ui/paraglide/messages/garden.d.ts +0 -16
- package/dist/ui/paraglide/messages/garden.js +0 -84
- package/dist/ui/paraglide/messages/gbp3.d.ts +0 -17
- package/dist/ui/paraglide/messages/gbp3.js +0 -85
- package/dist/ui/paraglide/messages/halloween.d.ts +0 -16
- package/dist/ui/paraglide/messages/halloween.js +0 -84
- package/dist/ui/paraglide/messages/hello_world.d.ts +0 -18
- package/dist/ui/paraglide/messages/hello_world.js +0 -84
- package/dist/ui/paraglide/messages/hi.d.ts +0 -16
- package/dist/ui/paraglide/messages/hi.js +0 -84
- package/dist/ui/paraglide/messages/inr3.d.ts +0 -17
- package/dist/ui/paraglide/messages/inr3.js +0 -85
- package/dist/ui/paraglide/messages/it.d.ts +0 -16
- package/dist/ui/paraglide/messages/it.js +0 -84
- package/dist/ui/paraglide/messages/ja.d.ts +0 -16
- package/dist/ui/paraglide/messages/ja.js +0 -84
- package/dist/ui/paraglide/messages/jpy3.d.ts +0 -17
- package/dist/ui/paraglide/messages/jpy3.js +0 -85
- package/dist/ui/paraglide/messages/ko.d.ts +0 -16
- package/dist/ui/paraglide/messages/ko.js +0 -84
- package/dist/ui/paraglide/messages/krw3.d.ts +0 -17
- package/dist/ui/paraglide/messages/krw3.js +0 -85
- package/dist/ui/paraglide/messages/languages.d.ts +0 -16
- package/dist/ui/paraglide/messages/languages.js +0 -84
- package/dist/ui/paraglide/messages/lemonade.d.ts +0 -16
- package/dist/ui/paraglide/messages/lemonade.js +0 -84
- package/dist/ui/paraglide/messages/light.d.ts +0 -16
- package/dist/ui/paraglide/messages/light.js +0 -84
- package/dist/ui/paraglide/messages/live_store_dashboard.d.ts +0 -16
- package/dist/ui/paraglide/messages/live_store_dashboard.js +0 -84
- package/dist/ui/paraglide/messages/localization.d.ts +0 -16
- package/dist/ui/paraglide/messages/localization.js +0 -84
- package/dist/ui/paraglide/messages/lofi.d.ts +0 -16
- package/dist/ui/paraglide/messages/lofi.js +0 -84
- package/dist/ui/paraglide/messages/luxury.d.ts +0 -16
- package/dist/ui/paraglide/messages/luxury.js +0 -84
- package/dist/ui/paraglide/messages/mxn3.d.ts +0 -17
- package/dist/ui/paraglide/messages/mxn3.js +0 -85
- package/dist/ui/paraglide/messages/name_label.d.ts +0 -16
- package/dist/ui/paraglide/messages/name_label.js +0 -84
- package/dist/ui/paraglide/messages/night.d.ts +0 -16
- package/dist/ui/paraglide/messages/night.js +0 -84
- package/dist/ui/paraglide/messages/nord.d.ts +0 -16
- package/dist/ui/paraglide/messages/nord.js +0 -84
- package/dist/ui/paraglide/messages/pastel.d.ts +0 -16
- package/dist/ui/paraglide/messages/pastel.js +0 -84
- package/dist/ui/paraglide/messages/pt.d.ts +0 -16
- package/dist/ui/paraglide/messages/pt.js +0 -84
- package/dist/ui/paraglide/messages/real_time_monitor_desc.d.ts +0 -16
- package/dist/ui/paraglide/messages/real_time_monitor_desc.js +0 -84
- package/dist/ui/paraglide/messages/registered_in_registry.d.ts +0 -16
- package/dist/ui/paraglide/messages/registered_in_registry.js +0 -84
- package/dist/ui/paraglide/messages/retro.d.ts +0 -16
- package/dist/ui/paraglide/messages/retro.js +0 -84
- package/dist/ui/paraglide/messages/ru.d.ts +0 -16
- package/dist/ui/paraglide/messages/ru.js +0 -84
- package/dist/ui/paraglide/messages/silk.d.ts +0 -16
- package/dist/ui/paraglide/messages/silk.js +0 -84
- package/dist/ui/paraglide/messages/state_label.d.ts +0 -16
- package/dist/ui/paraglide/messages/state_label.js +0 -84
- package/dist/ui/paraglide/messages/sunset.d.ts +0 -16
- package/dist/ui/paraglide/messages/sunset.js +0 -84
- package/dist/ui/paraglide/messages/synthwave.d.ts +0 -16
- package/dist/ui/paraglide/messages/synthwave.js +0 -84
- package/dist/ui/paraglide/messages/system.d.ts +0 -16
- package/dist/ui/paraglide/messages/system.js +0 -84
- package/dist/ui/paraglide/messages/theme.d.ts +0 -16
- package/dist/ui/paraglide/messages/theme.js +0 -84
- package/dist/ui/paraglide/messages/themes.d.ts +0 -16
- package/dist/ui/paraglide/messages/themes.js +0 -84
- package/dist/ui/paraglide/messages/url_label.d.ts +0 -16
- package/dist/ui/paraglide/messages/url_label.js +0 -84
- package/dist/ui/paraglide/messages/usd3.d.ts +0 -17
- package/dist/ui/paraglide/messages/usd3.js +0 -85
- package/dist/ui/paraglide/messages/valentine.d.ts +0 -16
- package/dist/ui/paraglide/messages/valentine.js +0 -84
- package/dist/ui/paraglide/messages/version_label.d.ts +0 -16
- package/dist/ui/paraglide/messages/version_label.js +0 -84
- package/dist/ui/paraglide/messages/vi.d.ts +0 -16
- package/dist/ui/paraglide/messages/vi.js +0 -84
- package/dist/ui/paraglide/messages/winter.d.ts +0 -16
- package/dist/ui/paraglide/messages/winter.js +0 -84
- package/dist/ui/paraglide/messages/wireframe.d.ts +0 -16
- package/dist/ui/paraglide/messages/wireframe.js +0 -84
- package/dist/ui/paraglide/messages/zh.d.ts +0 -16
- package/dist/ui/paraglide/messages/zh.js +0 -84
- package/dist/ui/paraglide/messages.d.ts +0 -2
- package/dist/ui/paraglide/messages.js +0 -4
- package/dist/ui/paraglide/registry.d.ts +0 -21
- package/dist/ui/paraglide/registry.js +0 -31
- package/dist/ui/paraglide/runtime.d.ts +0 -749
- package/dist/ui/paraglide/runtime.js +0 -1777
- package/dist/ui/paraglide/server.d.ts +0 -103
- package/dist/ui/paraglide/server.js +0 -248
- package/dist/ui/primitives/DatePicker.svelte +0 -257
- package/dist/ui/primitives/DatePicker.svelte.d.ts +0 -17
- package/dist/ui/primitives/index.d.ts +0 -1
- package/dist/ui/primitives/index.js +0 -3
- /package/{dist/ui/layout → src/runes/layout/src}/ContentArea.svelte +0 -0
- /package/{dist/ui/layout → src/runes/layout/src}/DetailPanel.svelte +0 -0
- /package/{dist/ui/features → src/runes/palettes/src}/notifications/NotificationBell.svelte +0 -0
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
import hotkeys from "hotkeys-js";
|
|
2
|
-
import { getContext, untrack } from "svelte";
|
|
3
|
-
import { RUNE_LAB_CONTEXT } from "./context";
|
|
4
|
-
import { DEV } from "esm-env";
|
|
5
|
-
/**
|
|
6
|
-
* Built-in layout shortcuts
|
|
7
|
-
*/
|
|
8
|
-
export const LAYOUT_SHORTCUTS = {
|
|
9
|
-
TOGGLE_NAV: {
|
|
10
|
-
id: "rl:layout:toggle-nav",
|
|
11
|
-
keys: "ctrl+\\",
|
|
12
|
-
label: "Toggle Navigation Panel",
|
|
13
|
-
category: "Layout",
|
|
14
|
-
scope: "global",
|
|
15
|
-
},
|
|
16
|
-
TOGGLE_DETAIL: {
|
|
17
|
-
id: "rl:layout:toggle-detail",
|
|
18
|
-
keys: "ctrl+shift+\\",
|
|
19
|
-
label: "Toggle Detail Panel",
|
|
20
|
-
category: "Layout",
|
|
21
|
-
scope: "global",
|
|
22
|
-
},
|
|
23
|
-
OPEN_SHORTCUTS: {
|
|
24
|
-
id: "rl:shortcuts:open",
|
|
25
|
-
keys: "ctrl+/",
|
|
26
|
-
label: "Show Shortcut Palette",
|
|
27
|
-
category: "Help",
|
|
28
|
-
scope: "global",
|
|
29
|
-
},
|
|
30
|
-
NAV_NEXT: {
|
|
31
|
-
id: "rl:nav:next-item",
|
|
32
|
-
keys: "alt+down",
|
|
33
|
-
label: "Next navigation item",
|
|
34
|
-
category: "Navigation",
|
|
35
|
-
scope: "panel:navigation",
|
|
36
|
-
},
|
|
37
|
-
NAV_PREV: {
|
|
38
|
-
id: "rl:nav:prev-item",
|
|
39
|
-
keys: "alt+up",
|
|
40
|
-
label: "Previous navigation item",
|
|
41
|
-
category: "Navigation",
|
|
42
|
-
scope: "panel:navigation",
|
|
43
|
-
},
|
|
44
|
-
NAV_EXPAND: {
|
|
45
|
-
id: "rl:nav:expand-section",
|
|
46
|
-
keys: "alt+right",
|
|
47
|
-
label: "Expand section",
|
|
48
|
-
category: "Navigation",
|
|
49
|
-
scope: "panel:navigation",
|
|
50
|
-
},
|
|
51
|
-
NAV_COLLAPSE: {
|
|
52
|
-
id: "rl:nav:collapse-section",
|
|
53
|
-
keys: "alt+left",
|
|
54
|
-
label: "Collapse section",
|
|
55
|
-
category: "Navigation",
|
|
56
|
-
scope: "panel:navigation",
|
|
57
|
-
},
|
|
58
|
-
};
|
|
59
|
-
export class ShortcutStore {
|
|
60
|
-
/** All registered shortcuts */
|
|
61
|
-
entries = $state([]);
|
|
62
|
-
/** Whether the shortcut palette is currently visible */
|
|
63
|
-
showPalette = $state(false);
|
|
64
|
-
/** Subset of shortcuts that should be displayed in the palette */
|
|
65
|
-
active = $derived(this.entries.filter((e) => e.enabled !== false && !e.hidden));
|
|
66
|
-
/** Grouped entries for display (scope -> category -> entries) */
|
|
67
|
-
byScopeAndCategory = $derived.by(() => {
|
|
68
|
-
const groups = {};
|
|
69
|
-
for (const entry of this.active) {
|
|
70
|
-
const scope = entry.scope;
|
|
71
|
-
const category = entry.category;
|
|
72
|
-
if (!groups[scope])
|
|
73
|
-
groups[scope] = {};
|
|
74
|
-
if (!groups[scope][category])
|
|
75
|
-
groups[scope][category] = [];
|
|
76
|
-
groups[scope][category].push(entry);
|
|
77
|
-
}
|
|
78
|
-
return groups;
|
|
79
|
-
});
|
|
80
|
-
/** Scopes sorted by importance (global first, then layout, then alphabetical) */
|
|
81
|
-
sortedScopes = $derived.by(() => {
|
|
82
|
-
return Object.keys(this.byScopeAndCategory).sort((a, b) => {
|
|
83
|
-
if (a === "global")
|
|
84
|
-
return -1;
|
|
85
|
-
if (b === "global")
|
|
86
|
-
return 1;
|
|
87
|
-
if (a === "layout")
|
|
88
|
-
return -1;
|
|
89
|
-
if (b === "layout")
|
|
90
|
-
return 1;
|
|
91
|
-
return a.localeCompare(b);
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
/**
|
|
95
|
-
* Register a new shortcut
|
|
96
|
-
*/
|
|
97
|
-
register(entry) {
|
|
98
|
-
untrack(() => {
|
|
99
|
-
const existingIndex = this.entries.findIndex((e) => e.id === entry.id);
|
|
100
|
-
if (existingIndex !== -1) {
|
|
101
|
-
if (DEV) {
|
|
102
|
-
console.warn(`[ShortcutStore] Overwriting shortcut ID "${entry.id}"`, {
|
|
103
|
-
old: this.entries[existingIndex],
|
|
104
|
-
new: entry,
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
this.entries[existingIndex] = { enabled: true, ...entry };
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
// Check for collisions (keys + scope)
|
|
111
|
-
const collision = this.entries.find((e) => e.keys === entry.keys && e.scope === entry.scope);
|
|
112
|
-
if (collision && DEV) {
|
|
113
|
-
console.warn(`[ShortcutStore] Collision detected for keys "${entry.keys}" in scope "${entry.scope}". ` +
|
|
114
|
-
`ID "${entry.id}" will displace "${collision.id}".`);
|
|
115
|
-
}
|
|
116
|
-
this.entries.push({ enabled: true, ...entry });
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Unregister a shortcut by ID
|
|
121
|
-
*/
|
|
122
|
-
unregister(id) {
|
|
123
|
-
untrack(() => {
|
|
124
|
-
this.entries = this.entries.filter((e) => e.id !== id);
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Enable a shortcut
|
|
129
|
-
*/
|
|
130
|
-
enable(id) {
|
|
131
|
-
untrack(() => {
|
|
132
|
-
const entry = this.entries.find((e) => e.id === id);
|
|
133
|
-
if (entry)
|
|
134
|
-
entry.enabled = true;
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Disable a shortcut
|
|
139
|
-
*/
|
|
140
|
-
disable(id) {
|
|
141
|
-
untrack(() => {
|
|
142
|
-
const entry = this.entries.find((e) => e.id === id);
|
|
143
|
-
if (entry)
|
|
144
|
-
entry.enabled = false;
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Find conflicts for a given key combo and scope
|
|
149
|
-
*/
|
|
150
|
-
findConflicts(keys, scope) {
|
|
151
|
-
return untrack(() => this.entries.filter((e) => e.keys === keys && e.scope === scope));
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Svelte Action to listen for shortcuts registered in shortcutStore.
|
|
156
|
-
* Applied to the root element of the layout.
|
|
157
|
-
*/
|
|
158
|
-
export function shortcutListener(node, shortcutStore) {
|
|
159
|
-
// Use $effect to reactively sync shortcuts
|
|
160
|
-
const cleanup = $effect.root(() => {
|
|
161
|
-
$effect(() => {
|
|
162
|
-
// Unbind everything first to ensure clean state
|
|
163
|
-
hotkeys.unbind();
|
|
164
|
-
// We read entries here, so this effect re-runs when entries change.
|
|
165
|
-
// That's exactly what we want.
|
|
166
|
-
for (const entry of shortcutStore.entries) {
|
|
167
|
-
if (entry.enabled === false)
|
|
168
|
-
continue;
|
|
169
|
-
hotkeys(entry.keys, "all", (event, handler) => {
|
|
170
|
-
// Scoping logic: check if the event target is within the required scope
|
|
171
|
-
if (entry.scope === "global") {
|
|
172
|
-
// Hotkeys.js already filters inputs by default
|
|
173
|
-
entry.handler(event);
|
|
174
|
-
}
|
|
175
|
-
else if (entry.scope === "layout") {
|
|
176
|
-
if (node.contains(event.target)) {
|
|
177
|
-
entry.handler(event);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
else if (entry.scope.startsWith("panel:")) {
|
|
181
|
-
const panelId = entry.scope.replace("panel:", "");
|
|
182
|
-
const panel = node.querySelector(`[data-rl-panel="${panelId}"]`);
|
|
183
|
-
if (panel && panel.contains(event.target)) {
|
|
184
|
-
entry.handler(event);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
// Helper to sync hotkeys-js scope with focus
|
|
191
|
-
const handleFocusIn = (e) => {
|
|
192
|
-
const target = e.target;
|
|
193
|
-
const panel = target.closest("[data-rl-panel]");
|
|
194
|
-
if (panel) {
|
|
195
|
-
const scope = `panel:${panel.getAttribute("data-rl-panel")}`;
|
|
196
|
-
hotkeys.setScope(scope);
|
|
197
|
-
}
|
|
198
|
-
else if (node.contains(target)) {
|
|
199
|
-
hotkeys.setScope("layout");
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
hotkeys.setScope("global");
|
|
203
|
-
}
|
|
204
|
-
};
|
|
205
|
-
window.addEventListener("focusin", handleFocusIn);
|
|
206
|
-
return () => {
|
|
207
|
-
window.removeEventListener("focusin", handleFocusIn);
|
|
208
|
-
};
|
|
209
|
-
});
|
|
210
|
-
return {
|
|
211
|
-
destroy() {
|
|
212
|
-
cleanup();
|
|
213
|
-
hotkeys.unbind();
|
|
214
|
-
},
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
export function createShortcutStore() {
|
|
218
|
-
return new ShortcutStore();
|
|
219
|
-
}
|
|
220
|
-
export function getShortcutStore() {
|
|
221
|
-
return getContext(RUNE_LAB_CONTEXT.shortcut);
|
|
222
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { type ConfigStore } from "./createConfigStore.svelte";
|
|
2
|
-
export interface Theme {
|
|
3
|
-
name: string;
|
|
4
|
-
icon: string;
|
|
5
|
-
}
|
|
6
|
-
import type { PersistenceDriver } from "rune-lab/core";
|
|
7
|
-
export interface ThemeStoreOptions {
|
|
8
|
-
driver?: PersistenceDriver | (() => PersistenceDriver | undefined);
|
|
9
|
-
/** Additional custom themes to append to the built-in DaisyUI set */
|
|
10
|
-
customThemes?: Theme[];
|
|
11
|
-
/** Fallback theme if no persisted value exists (after system preference check) */
|
|
12
|
-
defaultTheme?: string;
|
|
13
|
-
}
|
|
14
|
-
export declare function createThemeStore(driverOrOptions?: PersistenceDriver | (() => PersistenceDriver | undefined) | ThemeStoreOptions): {
|
|
15
|
-
current: string;
|
|
16
|
-
available: Theme[];
|
|
17
|
-
set(id: string): void;
|
|
18
|
-
get(id: string): Theme | undefined;
|
|
19
|
-
getProp<K extends keyof Theme>(prop: K, id?: string | undefined): Theme[K] | undefined;
|
|
20
|
-
addItems(newItems: Theme[]): void;
|
|
21
|
-
};
|
|
22
|
-
export declare function getThemeStore(): ConfigStore<Theme>;
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
// client/packages/ui/src/state/theme-config.svelte.ts
|
|
2
|
-
import { createConfigStore, } from "./createConfigStore.svelte";
|
|
3
|
-
import { getContext } from "svelte";
|
|
4
|
-
import { RUNE_LAB_CONTEXT } from "./context";
|
|
5
|
-
// Icon map for known themes - unknown ones fall back to 🎨
|
|
6
|
-
const THEME_ICONS = {
|
|
7
|
-
light: "🌞",
|
|
8
|
-
dark: "🌙",
|
|
9
|
-
cupcake: "🧁",
|
|
10
|
-
bumblebee: "🐝",
|
|
11
|
-
emerald: "💚",
|
|
12
|
-
corporate: "🏢",
|
|
13
|
-
synthwave: "🌆",
|
|
14
|
-
retro: "📺",
|
|
15
|
-
cyberpunk: "🤖",
|
|
16
|
-
valentine: "💝",
|
|
17
|
-
halloween: "🎃",
|
|
18
|
-
garden: "🌷",
|
|
19
|
-
forest: "🌲",
|
|
20
|
-
aqua: "💧",
|
|
21
|
-
lofi: "🎵",
|
|
22
|
-
pastel: "🎨",
|
|
23
|
-
fantasy: "🔮",
|
|
24
|
-
wireframe: "📝",
|
|
25
|
-
black: "⚫",
|
|
26
|
-
luxury: "👑",
|
|
27
|
-
dracula: "🧛",
|
|
28
|
-
cmyk: "🖨️",
|
|
29
|
-
autumn: "🍂",
|
|
30
|
-
business: "💼",
|
|
31
|
-
acid: "🧪",
|
|
32
|
-
lemonade: "🍋",
|
|
33
|
-
night: "🌃",
|
|
34
|
-
coffee: "☕",
|
|
35
|
-
winter: "❄️",
|
|
36
|
-
dim: "🔅",
|
|
37
|
-
nord: "🧊",
|
|
38
|
-
sunset: "🌅",
|
|
39
|
-
caramellatte: "🍮",
|
|
40
|
-
abyss: "🌌",
|
|
41
|
-
silk: "🎀",
|
|
42
|
-
};
|
|
43
|
-
// Derived from daisyUI directly — stays in sync automatically
|
|
44
|
-
const THEMES = themeOrder.map((name) => ({
|
|
45
|
-
name,
|
|
46
|
-
icon: THEME_ICONS[name] ?? "🎨",
|
|
47
|
-
}));
|
|
48
|
-
import themeOrder from "daisyui/functions/themeOrder.js";
|
|
49
|
-
import { BROWSER } from "esm-env";
|
|
50
|
-
export function createThemeStore(driverOrOptions) {
|
|
51
|
-
// Normalize overloaded argument
|
|
52
|
-
const opts = driverOrOptions && typeof driverOrOptions === "object" &&
|
|
53
|
-
"driver" in driverOrOptions
|
|
54
|
-
? driverOrOptions
|
|
55
|
-
: {
|
|
56
|
-
driver: driverOrOptions,
|
|
57
|
-
};
|
|
58
|
-
const resolvedDriver = typeof opts.driver === "function"
|
|
59
|
-
? opts.driver()
|
|
60
|
-
: opts.driver;
|
|
61
|
-
const store = createConfigStore({
|
|
62
|
-
items: THEMES,
|
|
63
|
-
storageKey: "theme",
|
|
64
|
-
displayName: "Theme",
|
|
65
|
-
idKey: "name",
|
|
66
|
-
icon: "🎨",
|
|
67
|
-
driver: resolvedDriver,
|
|
68
|
-
});
|
|
69
|
-
// Append custom themes if provided
|
|
70
|
-
if (opts.customThemes?.length) {
|
|
71
|
-
store.addItems(opts.customThemes);
|
|
72
|
-
}
|
|
73
|
-
// System preference detection — only if no persisted value was loaded
|
|
74
|
-
if (!resolvedDriver?.get("theme") && BROWSER) {
|
|
75
|
-
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
76
|
-
const systemDefault = prefersDark ? "dark" : "light";
|
|
77
|
-
const chosen = opts.defaultTheme ?? systemDefault;
|
|
78
|
-
if (store.get(chosen)) {
|
|
79
|
-
store.set(chosen);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
else if (!resolvedDriver?.get("theme") && opts.defaultTheme) {
|
|
83
|
-
// SSR / non-browser: use defaultTheme if provided
|
|
84
|
-
if (store.get(opts.defaultTheme)) {
|
|
85
|
-
store.set(opts.defaultTheme);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return store;
|
|
89
|
-
}
|
|
90
|
-
export function getThemeStore() {
|
|
91
|
-
return getContext(RUNE_LAB_CONTEXT.theme);
|
|
92
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { ToastStore, ToastType } from "./toast.svelte";
|
|
2
|
-
/**
|
|
3
|
-
* Notifies the global toast system.
|
|
4
|
-
* If called before the ToastStore is initialized (e.g., in a module-level store),
|
|
5
|
-
* it queues the toast and flushes it once wired.
|
|
6
|
-
*
|
|
7
|
-
* @clientOnly — Not safe for use in SSR contexts. Module-level state persists across requests.
|
|
8
|
-
*/
|
|
9
|
-
export declare function notify(message: string, type?: ToastType, duration?: number): void;
|
|
10
|
-
/**
|
|
11
|
-
* Wires the global `notify` function to an active ToastStore instance.
|
|
12
|
-
* Automatically flushes any queued toasts.
|
|
13
|
-
*/
|
|
14
|
-
export declare function wire(store: ToastStore): void;
|
|
15
|
-
/**
|
|
16
|
-
* Escape hatch for module-level stores to send toasts without Svelte context.
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```ts
|
|
20
|
-
* import { createToastBridge } from "rune-lab";
|
|
21
|
-
* const { notify } = createToastBridge();
|
|
22
|
-
*
|
|
23
|
-
* notify("Logged in successfully", "success");
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export declare const createToastBridge: () => {
|
|
27
|
-
notify: typeof notify;
|
|
28
|
-
wire: typeof wire;
|
|
29
|
-
};
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
const queue = [];
|
|
2
|
-
let activeStore = null;
|
|
3
|
-
/**
|
|
4
|
-
* Notifies the global toast system.
|
|
5
|
-
* If called before the ToastStore is initialized (e.g., in a module-level store),
|
|
6
|
-
* it queues the toast and flushes it once wired.
|
|
7
|
-
*
|
|
8
|
-
* @clientOnly — Not safe for use in SSR contexts. Module-level state persists across requests.
|
|
9
|
-
*/
|
|
10
|
-
export function notify(message, type = "info", duration) {
|
|
11
|
-
if (typeof window === "undefined")
|
|
12
|
-
return; // No-op on server
|
|
13
|
-
if (activeStore) {
|
|
14
|
-
activeStore.send(message, type, duration ?? 3000);
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
queue.push({ message, type, duration });
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Wires the global `notify` function to an active ToastStore instance.
|
|
22
|
-
* Automatically flushes any queued toasts.
|
|
23
|
-
*/
|
|
24
|
-
export function wire(store) {
|
|
25
|
-
activeStore = store;
|
|
26
|
-
while (queue.length > 0) {
|
|
27
|
-
const next = queue.shift();
|
|
28
|
-
if (next)
|
|
29
|
-
store.send(next.message, next.type, next.duration ?? 3000);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Escape hatch for module-level stores to send toasts without Svelte context.
|
|
34
|
-
*
|
|
35
|
-
* @example
|
|
36
|
-
* ```ts
|
|
37
|
-
* import { createToastBridge } from "rune-lab";
|
|
38
|
-
* const { notify } = createToastBridge();
|
|
39
|
-
*
|
|
40
|
-
* notify("Logged in successfully", "success");
|
|
41
|
-
* ```
|
|
42
|
-
*/
|
|
43
|
-
export const createToastBridge = () => ({ notify, wire });
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Toast notification store
|
|
3
|
-
*/
|
|
4
|
-
export type ToastType = "info" | "success" | "warning" | "error";
|
|
5
|
-
export interface Toast {
|
|
6
|
-
id: string;
|
|
7
|
-
message: string;
|
|
8
|
-
type: ToastType;
|
|
9
|
-
duration?: number;
|
|
10
|
-
}
|
|
11
|
-
export declare class ToastStore {
|
|
12
|
-
toasts: Toast[];
|
|
13
|
-
/**
|
|
14
|
-
* Add a new toast
|
|
15
|
-
*/
|
|
16
|
-
send(message: string, type?: ToastType, duration?: number): void;
|
|
17
|
-
/**
|
|
18
|
-
* Remove a toast by id
|
|
19
|
-
*/
|
|
20
|
-
dismiss(id: string): void;
|
|
21
|
-
success(msg: string): void;
|
|
22
|
-
error(msg: string): void;
|
|
23
|
-
warn(msg: string): void;
|
|
24
|
-
info(msg: string): void;
|
|
25
|
-
}
|
|
26
|
-
export declare function createToastStore(): ToastStore;
|
|
27
|
-
export declare function getToastStore(): ToastStore;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { getContext } from "svelte";
|
|
2
|
-
import { RUNE_LAB_CONTEXT } from "./context";
|
|
3
|
-
export class ToastStore {
|
|
4
|
-
toasts = $state([]);
|
|
5
|
-
/**
|
|
6
|
-
* Add a new toast
|
|
7
|
-
*/
|
|
8
|
-
send(message, type = "info", duration = 3000) {
|
|
9
|
-
const id = crypto.randomUUID();
|
|
10
|
-
const toast = { id, message, type, duration };
|
|
11
|
-
this.toasts.push(toast);
|
|
12
|
-
if (duration > 0) {
|
|
13
|
-
setTimeout(() => {
|
|
14
|
-
this.dismiss(id);
|
|
15
|
-
}, duration);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Remove a toast by id
|
|
20
|
-
*/
|
|
21
|
-
dismiss(id) {
|
|
22
|
-
this.toasts = this.toasts.filter((t) => t.id !== id);
|
|
23
|
-
}
|
|
24
|
-
// Helper methods
|
|
25
|
-
success(msg) {
|
|
26
|
-
this.send(msg, "success");
|
|
27
|
-
}
|
|
28
|
-
error(msg) {
|
|
29
|
-
this.send(msg, "error");
|
|
30
|
-
}
|
|
31
|
-
warn(msg) {
|
|
32
|
-
this.send(msg, "warning");
|
|
33
|
-
}
|
|
34
|
-
info(msg) {
|
|
35
|
-
this.send(msg, "info");
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
export function createToastStore() {
|
|
39
|
-
return new ToastStore();
|
|
40
|
-
}
|
|
41
|
-
export function getToastStore() {
|
|
42
|
-
return getContext(RUNE_LAB_CONTEXT.toast);
|
|
43
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { DEV } from "esm-env";
|
|
2
|
-
/**
|
|
3
|
-
* Svelte action to teleport a DOM element to a different target (e.g. body)
|
|
4
|
-
*/
|
|
5
|
-
export function portal(node, target = "body") {
|
|
6
|
-
let targetNode;
|
|
7
|
-
let isTeleported = false;
|
|
8
|
-
function update(newTarget) {
|
|
9
|
-
if (typeof newTarget === "string") {
|
|
10
|
-
targetNode = document.querySelector(newTarget);
|
|
11
|
-
if (!targetNode && DEV) {
|
|
12
|
-
console.warn(`portal target selector "${newTarget}" not found in document.`);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
targetNode = newTarget;
|
|
17
|
-
}
|
|
18
|
-
if (targetNode) {
|
|
19
|
-
targetNode.appendChild(node);
|
|
20
|
-
isTeleported = true;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
update(target);
|
|
24
|
-
return {
|
|
25
|
-
update,
|
|
26
|
-
destroy() {
|
|
27
|
-
if (isTeleported && node.parentNode) {
|
|
28
|
-
node.parentNode.removeChild(node);
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
};
|
|
32
|
-
}
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { getApiStore } from "rune-lab/state";
|
|
3
|
-
import { getToastStore } from "rune-lab/state";
|
|
4
|
-
|
|
5
|
-
const apiStore = getApiStore();
|
|
6
|
-
const toastStore = getToastStore();
|
|
7
|
-
|
|
8
|
-
let copied = $state(false);
|
|
9
|
-
let isVisible = $state(true);
|
|
10
|
-
|
|
11
|
-
function copyToClipboard() {
|
|
12
|
-
navigator.clipboard.writeText(apiStore.URL);
|
|
13
|
-
copied = true;
|
|
14
|
-
toastStore.success("API URL copied to clipboard!");
|
|
15
|
-
setTimeout(() => (copied = false), 2000);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
function handleKeyDown(event: KeyboardEvent) {
|
|
19
|
-
if (event.key === "Enter" || event.key === " ") {
|
|
20
|
-
copyToClipboard();
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const containerClass = $derived(`
|
|
25
|
-
fixed bottom-4 left-4 z-50
|
|
26
|
-
flex items-center space-x-2
|
|
27
|
-
transition-all duration-300 transform
|
|
28
|
-
${isVisible ? "translate-y-0 opacity-100" : "translate-y-16 opacity-0"}
|
|
29
|
-
`);
|
|
30
|
-
</script>
|
|
31
|
-
|
|
32
|
-
<div class={containerClass}>
|
|
33
|
-
<div
|
|
34
|
-
class="flex items-center space-x-2 backdrop-blur-sm bg-base-300/80 rounded-xl p-1 shadow-lg border border-base-content/10"
|
|
35
|
-
>
|
|
36
|
-
<!-- API Status Indicator -->
|
|
37
|
-
{#if apiStore.IS_CONNECTED}
|
|
38
|
-
<div class="tooltip tooltip-right" data-tip="Connected">
|
|
39
|
-
<div
|
|
40
|
-
aria-label="success"
|
|
41
|
-
class="status status-success status-md"
|
|
42
|
-
></div>
|
|
43
|
-
</div>
|
|
44
|
-
{:else if apiStore.IS_LOADING}
|
|
45
|
-
<div class="tooltip tooltip-right" data-tip="Connecting...">
|
|
46
|
-
<div class="inline-grid *:[grid-area:1/1]">
|
|
47
|
-
<div class="status status-warning animate-ping"></div>
|
|
48
|
-
<div class="status status-warning"></div>
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
{:else}
|
|
52
|
-
<div class="tooltip tooltip-right" data-tip="Disconnected">
|
|
53
|
-
<div class="status status-error animate-bounce"></div>
|
|
54
|
-
</div>
|
|
55
|
-
{/if}
|
|
56
|
-
|
|
57
|
-
<!-- API Docs / Reload -->
|
|
58
|
-
{#if apiStore.connectionState === "connected"}
|
|
59
|
-
<button
|
|
60
|
-
class="btn btn-circle btn-xs btn-primary"
|
|
61
|
-
onclick={() => window.open(`${apiStore.URL}/docs`, "_blank")}
|
|
62
|
-
aria-label="Go to API Documentation"
|
|
63
|
-
>
|
|
64
|
-
<svg
|
|
65
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
66
|
-
width="14"
|
|
67
|
-
height="14"
|
|
68
|
-
viewBox="0 0 24 24"
|
|
69
|
-
fill="none"
|
|
70
|
-
stroke="currentColor"
|
|
71
|
-
stroke-width="2"
|
|
72
|
-
stroke-linecap="round"
|
|
73
|
-
stroke-linejoin="round"
|
|
74
|
-
><path
|
|
75
|
-
d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1-0-5H20"
|
|
76
|
-
/></svg
|
|
77
|
-
>
|
|
78
|
-
</button>
|
|
79
|
-
{:else}
|
|
80
|
-
<button
|
|
81
|
-
class="btn btn-circle btn-xs btn-error"
|
|
82
|
-
onclick={() => apiStore.reconnect()}
|
|
83
|
-
aria-label="Reconnect to API"
|
|
84
|
-
disabled={apiStore.connectionState === "connecting"}
|
|
85
|
-
>
|
|
86
|
-
<svg
|
|
87
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
88
|
-
width="14"
|
|
89
|
-
height="14"
|
|
90
|
-
viewBox="0 0 24 24"
|
|
91
|
-
fill="none"
|
|
92
|
-
stroke="currentColor"
|
|
93
|
-
stroke-width="2"
|
|
94
|
-
stroke-linecap="round"
|
|
95
|
-
stroke-linejoin="round"
|
|
96
|
-
class={apiStore.connectionState === "connecting"
|
|
97
|
-
? "animate-spin"
|
|
98
|
-
: ""}
|
|
99
|
-
><path
|
|
100
|
-
d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"
|
|
101
|
-
/><path d="M21 3v5h-5" /><path
|
|
102
|
-
d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"
|
|
103
|
-
/><path d="M3 21v-5h5" /></svg
|
|
104
|
-
>
|
|
105
|
-
</button>
|
|
106
|
-
{/if}
|
|
107
|
-
|
|
108
|
-
<button
|
|
109
|
-
class="group flex items-center space-x-2 px-3 py-1 rounded-lg hover:bg-base-200 transition-colors duration-200"
|
|
110
|
-
onclick={copyToClipboard}
|
|
111
|
-
onkeydown={handleKeyDown}
|
|
112
|
-
aria-label="Copy API URL"
|
|
113
|
-
>
|
|
114
|
-
<span class="text-xs font-mono"
|
|
115
|
-
>{apiStore.URL.replace(
|
|
116
|
-
/^https?:\/\//,
|
|
117
|
-
"",
|
|
118
|
-
)}/{apiStore.VERSION}</span
|
|
119
|
-
>
|
|
120
|
-
{#if copied}
|
|
121
|
-
<svg
|
|
122
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
123
|
-
width="14"
|
|
124
|
-
height="14"
|
|
125
|
-
viewBox="0 0 24 24"
|
|
126
|
-
fill="none"
|
|
127
|
-
stroke="currentColor"
|
|
128
|
-
stroke-width="2"
|
|
129
|
-
stroke-linecap="round"
|
|
130
|
-
stroke-linejoin="round"
|
|
131
|
-
class="text-success"
|
|
132
|
-
><circle cx="12" cy="12" r="10" /><path
|
|
133
|
-
d="m9 12 2 2 4-4"
|
|
134
|
-
/></svg
|
|
135
|
-
>
|
|
136
|
-
{:else}
|
|
137
|
-
<svg
|
|
138
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
139
|
-
width="14"
|
|
140
|
-
height="14"
|
|
141
|
-
viewBox="0 0 24 24"
|
|
142
|
-
fill="none"
|
|
143
|
-
stroke="currentColor"
|
|
144
|
-
stroke-width="2"
|
|
145
|
-
stroke-linecap="round"
|
|
146
|
-
stroke-linejoin="round"
|
|
147
|
-
class="opacity-50 group-hover:opacity-100 transition-all duration-200"
|
|
148
|
-
><rect
|
|
149
|
-
width="14"
|
|
150
|
-
height="14"
|
|
151
|
-
x="8"
|
|
152
|
-
y="8"
|
|
153
|
-
rx="2"
|
|
154
|
-
ry="2"
|
|
155
|
-
/><path
|
|
156
|
-
d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"
|
|
157
|
-
/></svg
|
|
158
|
-
>
|
|
159
|
-
{/if}
|
|
160
|
-
</button>
|
|
161
|
-
</div>
|
|
162
|
-
</div>
|