rune-lab 0.4.8 → 0.5.0-rc.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/LICENSE +21 -0
- package/README.md +309 -0
- package/dist/src/core/cells/define-cell.d.ts +13 -0
- package/dist/src/core/cells/define-cell.js +42 -0
- package/dist/src/core/cells/persisted-cell.d.ts +9 -0
- package/dist/src/core/cells/persisted-cell.js +57 -0
- package/dist/src/core/config/config-store.d.ts +31 -0
- package/dist/src/core/config/config-store.js +79 -0
- package/dist/src/core/forge/define-contribution.d.ts +21 -0
- package/dist/src/core/forge/define-contribution.js +7 -0
- package/dist/src/core/forge/define-plugin.d.ts +33 -0
- package/dist/src/core/forge/define-plugin.js +21 -0
- package/dist/src/core/forge/define-settings.d.ts +33 -0
- package/dist/src/core/forge/define-settings.js +52 -0
- package/dist/src/core/forge/define-slot.d.ts +34 -0
- package/dist/src/core/forge/define-slot.js +3 -0
- package/dist/src/core/forge/descriptors.d.ts +15 -0
- package/dist/src/core/forge/descriptors.js +9 -0
- package/dist/src/core/kernel/kernel.d.ts +38 -0
- package/dist/src/core/kernel/kernel.js +157 -0
- package/dist/src/core/kernel/wiring.d.ts +39 -0
- package/dist/src/core/kernel/wiring.js +253 -0
- package/dist/src/core/mod.d.ts +62 -0
- package/dist/src/core/mod.js +19 -0
- package/dist/src/core/persistence/memory.d.ts +1 -0
- package/dist/src/core/persistence/memory.js +1 -0
- package/dist/src/core/ports/locale.d.ts +5 -0
- package/dist/src/core/ports/memory.d.ts +7 -0
- package/dist/src/core/ports/memory.js +20 -0
- package/dist/src/core/ports/persistence.d.ts +5 -0
- package/dist/src/core/ports/text-fake.d.ts +83 -0
- package/dist/src/core/ports/text-fake.js +231 -0
- package/dist/src/core/ports/text.d.ts +146 -0
- package/dist/src/core/services/layers.d.ts +17 -0
- package/dist/src/core/services/layers.js +38 -0
- package/dist/src/core/utils/graph.d.ts +5 -0
- package/dist/src/core/utils/graph.js +30 -0
- package/dist/src/plugins/i18n/accessors.d.ts +6 -0
- package/dist/src/plugins/i18n/accessors.js +22 -0
- package/dist/src/plugins/i18n/lang/components/LanguageSelector.svelte +44 -0
- package/dist/{runes/layout/src → src/plugins/i18n/lang/components}/LanguageSelector.svelte.d.ts +5 -6
- package/dist/{i18n → src/plugins/i18n/lang}/message-resolver.d.ts +17 -18
- package/dist/src/plugins/i18n/lang/message-resolver.js +49 -0
- package/dist/src/plugins/i18n/lang/messages.d.ts +1 -0
- package/dist/{i18n → src/plugins/i18n/lang}/messages.js +3 -3
- package/dist/src/plugins/i18n/lang/mod.d.ts +15 -0
- package/dist/src/plugins/i18n/lang/mod.js +30 -0
- package/dist/{i18n → src/plugins/i18n/lang}/paraglide/.prettierignore +1 -1
- package/dist/{i18n → src/plugins/i18n/lang}/paraglide/README.md +22 -50
- package/dist/src/plugins/i18n/lang/paraglide/messages/_index.d.ts +69 -0
- package/dist/{i18n → src/plugins/i18n/lang}/paraglide/messages/_index.js +55 -54
- package/dist/src/plugins/i18n/lang/paraglide/messages/abyss.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/abyss.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/acid.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/acid.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/aed3.d.ts +51 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/aed3.js +89 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/all_currencies.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/all_currencies.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/all_languages.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/all_languages.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/all_themes.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/all_themes.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/aqua.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/aqua.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/ar.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/ar.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/autumn.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/autumn.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/black.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/black.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/brl3.d.ts +51 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/brl3.js +89 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/bumblebee.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/bumblebee.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/business.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/business.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/cad3.d.ts +51 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/cad3.js +89 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/caramellatte.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/caramellatte.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/cmyk.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/cmyk.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/cny3.d.ts +51 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/cny3.js +89 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/coffee.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/coffee.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/corporate.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/corporate.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/cupcake.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/cupcake.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/currency.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/currency.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/cyberpunk.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/cyberpunk.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/dark.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/dark.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/de.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/de.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/dim.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/dim.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/dracula.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/dracula.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/emerald.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/emerald.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/en.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/en.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/es.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/es.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/eur3.d.ts +51 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/eur3.js +89 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/fantasy.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/fantasy.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/forest.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/forest.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/fr.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/fr.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/garden.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/garden.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/gbp3.d.ts +51 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/gbp3.js +89 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/halloween.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/halloween.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/hello_world.d.ts +52 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/hello_world.js +104 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/hi.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/hi.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/inr3.d.ts +51 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/inr3.js +89 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/it.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/it.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/ja.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/ja.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/jpy3.d.ts +51 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/jpy3.js +89 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/ko.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/ko.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/krw3.d.ts +51 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/krw3.js +89 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/languages.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/languages.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/lemonade.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/lemonade.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/light.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/light.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/lofi.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/lofi.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/luxury.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/luxury.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/mxn3.d.ts +51 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/mxn3.js +89 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/night.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/night.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/nord.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/nord.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/package.json +4 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/pastel.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/pastel.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/pt.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/pt.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/retro.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/retro.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/ru.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/ru.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/silk.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/silk.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/sunset.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/sunset.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/synthwave.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/synthwave.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/system.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/system.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/theme.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/theme.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/themes.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/themes.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/usd3.d.ts +51 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/usd3.js +89 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/valentine.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/valentine.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/vi.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/vi.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/winter.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/winter.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/wireframe.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/wireframe.js +100 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/zh.d.ts +50 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages/zh.js +87 -0
- package/dist/src/plugins/i18n/lang/paraglide/messages.d.ts +2 -0
- package/dist/src/plugins/i18n/lang/paraglide/registry.d.ts +66 -0
- package/dist/src/plugins/i18n/lang/paraglide/registry.js +51 -0
- package/dist/src/plugins/i18n/lang/paraglide/runtime.d.ts +847 -0
- package/dist/{i18n → src/plugins/i18n/lang}/paraglide/runtime.js +904 -928
- package/dist/src/plugins/i18n/lang/paraglide/server.d.ts +100 -0
- package/dist/{i18n → src/plugins/i18n/lang}/paraglide/server.js +156 -151
- package/dist/src/plugins/i18n/lang/store.svelte.d.ts +63 -0
- package/dist/src/plugins/i18n/lang/store.svelte.js +50 -0
- package/dist/src/plugins/i18n/mod.d.ts +9 -0
- package/dist/src/plugins/i18n/mod.js +9 -0
- package/dist/src/plugins/i18n/money/components/CurrencySelector.svelte +45 -0
- package/dist/{runes/plugins/money/src → src/plugins/i18n/money/components}/CurrencySelector.svelte.d.ts +6 -6
- package/dist/src/plugins/i18n/money/components/MoneyDisplay.svelte +118 -0
- package/dist/src/plugins/i18n/money/components/MoneyDisplay.svelte.d.ts +22 -0
- package/dist/src/plugins/i18n/money/components/MoneyInput.svelte +174 -0
- package/dist/src/plugins/i18n/money/components/MoneyInput.svelte.d.ts +21 -0
- package/dist/src/plugins/i18n/money/mod.d.ts +11 -0
- package/dist/src/plugins/i18n/money/mod.js +11 -0
- package/dist/src/plugins/i18n/money/primitives/money-primitive.d.ts +106 -0
- package/dist/src/plugins/i18n/money/primitives/money-primitive.js +180 -0
- package/dist/{runes/plugins/money/src → src/plugins/i18n/money/primitives}/money.d.ts +46 -46
- package/dist/src/plugins/i18n/money/primitives/money.js +287 -0
- package/dist/{runes/plugins/money/src → src/plugins/i18n/money/primitives}/strategies.d.ts +3 -3
- package/dist/{runes/plugins/money/src → src/plugins/i18n/money/primitives}/strategies.js +24 -24
- package/dist/src/plugins/i18n/money/stores/currency.svelte.d.ts +23 -0
- package/dist/src/plugins/i18n/money/stores/currency.svelte.js +82 -0
- package/dist/src/plugins/i18n/money/stores/exchange-rate.svelte.d.ts +16 -0
- package/dist/src/plugins/i18n/money/stores/exchange-rate.svelte.js +120 -0
- package/dist/src/plugins/i18n/money/types.d.ts +32 -0
- package/dist/src/plugins/i18n/money/types.js +21 -0
- package/dist/src/plugins/i18n/money/use/useMoney.d.ts +65 -0
- package/dist/src/plugins/i18n/money/use/useMoney.js +125 -0
- package/dist/src/plugins/i18n/money/use/useMoneyFilter.svelte.d.ts +23 -0
- package/dist/src/plugins/i18n/money/use/useMoneyFilter.svelte.js +97 -0
- package/dist/src/plugins/i18n/plugin.d.ts +39 -0
- package/dist/src/plugins/i18n/plugin.js +70 -0
- package/dist/src/plugins/i18n/settings.d.ts +2 -0
- package/dist/src/plugins/i18n/settings.js +56 -0
- package/dist/src/plugins/layout/components/AppSettingSelector.svelte +35 -0
- package/dist/src/plugins/layout/components/AppSettingSelector.svelte.d.ts +45 -0
- package/dist/src/plugins/layout/components/ConnectedNavigationPanel.svelte +28 -0
- package/dist/{runes/layout/src → src/plugins/layout/components}/ConnectedNavigationPanel.svelte.d.ts +8 -7
- package/dist/src/plugins/layout/components/ConnectedWorkspaceStrip.svelte +24 -0
- package/dist/{runes/layout/src → src/plugins/layout/components}/ConnectedWorkspaceStrip.svelte.d.ts +7 -6
- package/dist/src/plugins/layout/components/ContentArea.svelte +23 -0
- package/dist/{runes/layout/src → src/plugins/layout/components}/ContentArea.svelte.d.ts +3 -2
- package/dist/src/plugins/layout/components/ContentAreaZone.svelte +15 -0
- package/dist/src/plugins/layout/components/ContentAreaZone.svelte.d.ts +12 -0
- package/dist/src/plugins/layout/components/DesktopDropdown.svelte +84 -0
- package/dist/src/plugins/layout/components/DesktopDropdown.svelte.d.ts +44 -0
- package/dist/src/plugins/layout/components/DetailPanel.svelte +13 -0
- package/dist/src/plugins/layout/components/DetailPanel.svelte.d.ts +7 -0
- package/dist/src/plugins/layout/components/DetailPanelZone.svelte +45 -0
- package/dist/src/plugins/layout/components/DetailPanelZone.svelte.d.ts +12 -0
- package/dist/src/plugins/layout/components/Icon.svelte +5 -0
- package/dist/src/plugins/layout/components/Icon.svelte.d.ts +7 -0
- package/dist/src/plugins/layout/components/MobileModal.svelte +62 -0
- package/dist/src/plugins/layout/components/MobileModal.svelte.d.ts +42 -0
- package/dist/src/plugins/layout/components/NavigationItemRenderer.svelte +48 -0
- package/dist/src/plugins/layout/components/NavigationItemRenderer.svelte.d.ts +15 -0
- package/dist/src/plugins/layout/components/NavigationPanel.svelte +64 -0
- package/dist/src/plugins/layout/components/NavigationPanel.svelte.d.ts +15 -0
- package/dist/src/plugins/layout/components/NavigationPanelZone.svelte +52 -0
- package/dist/src/plugins/layout/components/NavigationPanelZone.svelte.d.ts +13 -0
- package/dist/src/plugins/layout/components/ResourceSelector.svelte +79 -0
- package/dist/src/plugins/layout/components/ResourceSelector.svelte.d.ts +55 -0
- package/dist/src/plugins/layout/components/StatusbarDropdown.svelte +23 -0
- package/dist/src/plugins/layout/components/StatusbarDropdown.svelte.d.ts +12 -0
- package/dist/src/plugins/layout/components/StatusbarOverflow.svelte +90 -0
- package/dist/src/plugins/layout/components/StatusbarOverflow.svelte.d.ts +16 -0
- package/dist/src/plugins/layout/components/StatusbarZone.svelte +19 -0
- package/dist/src/plugins/layout/components/StatusbarZone.svelte.d.ts +12 -0
- package/dist/src/plugins/layout/components/ThemeSelector.svelte +52 -0
- package/dist/{runes/layout/src → src/plugins/layout/components}/ThemeSelector.svelte.d.ts +6 -6
- package/dist/src/plugins/layout/components/WorkspaceLayout.svelte +92 -0
- package/dist/src/plugins/layout/components/WorkspaceLayout.svelte.d.ts +19 -0
- package/dist/src/plugins/layout/components/WorkspaceStrip.svelte +69 -0
- package/dist/{runes/layout/src → src/plugins/layout/components}/WorkspaceStrip.svelte.d.ts +6 -5
- package/dist/src/plugins/layout/components/WorkspaceStripZone.svelte +27 -0
- package/dist/src/plugins/layout/components/WorkspaceStripZone.svelte.d.ts +12 -0
- package/dist/src/plugins/layout/components/connection-factory.d.ts +24 -0
- package/dist/src/plugins/layout/components/connection-factory.js +32 -0
- package/dist/src/plugins/layout/components/text/RichText.svelte +108 -0
- package/dist/src/plugins/layout/components/text/RichText.svelte.d.ts +17 -0
- package/dist/src/plugins/layout/components/text/Text.svelte +85 -0
- package/dist/src/plugins/layout/components/text/Text.svelte.d.ts +19 -0
- package/dist/src/plugins/layout/components/text/TextLine.svelte +16 -0
- package/dist/src/plugins/layout/components/text/TextLine.svelte.d.ts +8 -0
- package/dist/src/plugins/layout/contributions.d.ts +3 -0
- package/dist/src/plugins/layout/contributions.js +2 -0
- package/dist/src/plugins/layout/mod.d.ts +23 -0
- package/dist/src/plugins/layout/mod.js +23 -0
- package/dist/src/plugins/layout/plugin.d.ts +15 -0
- package/dist/src/plugins/layout/plugin.js +33 -0
- package/dist/src/plugins/layout/presets.d.ts +2 -0
- package/dist/src/plugins/layout/presets.js +26 -0
- package/dist/src/plugins/layout/settings.d.ts +2 -0
- package/dist/src/plugins/layout/settings.js +70 -0
- package/dist/src/plugins/layout/stores/layout.svelte.d.ts +31 -0
- package/dist/src/plugins/layout/stores/layout.svelte.js +80 -0
- package/dist/src/plugins/layout/stores/text.svelte.d.ts +12 -0
- package/dist/src/plugins/layout/stores/text.svelte.js +56 -0
- package/dist/src/plugins/layout/stores/theme.svelte.d.ts +8 -0
- package/dist/src/plugins/layout/stores/theme.svelte.js +64 -0
- package/dist/src/plugins/layout/text/adapter.d.ts +81 -0
- package/dist/src/plugins/layout/text/adapter.js +72 -0
- package/dist/src/plugins/layout/text/fonts.d.ts +1 -0
- package/dist/src/plugins/layout/text/fonts.js +17 -0
- package/dist/src/plugins/layout/text/resize.d.ts +8 -0
- package/dist/src/plugins/layout/text/resize.js +16 -0
- package/dist/src/plugins/layout/types.d.ts +67 -0
- package/dist/src/plugins/layout/types.js +20 -0
- package/dist/src/plugins/observer/CapabilitiesSettings.svelte +103 -0
- package/dist/src/plugins/observer/CapabilitiesSettings.svelte.d.ts +7 -0
- package/dist/src/plugins/observer/ObserverPanel.svelte +215 -0
- package/dist/src/plugins/observer/ObserverPanel.svelte.d.ts +7 -0
- package/dist/src/plugins/observer/mod.d.ts +12 -0
- package/dist/src/plugins/observer/mod.js +20 -0
- package/dist/src/plugins/palettes/SettingsModal.svelte +92 -0
- package/dist/src/plugins/palettes/SettingsModal.svelte.d.ts +7 -0
- package/dist/src/plugins/palettes/accessors.d.ts +8 -0
- package/dist/src/plugins/palettes/accessors.js +15 -0
- package/dist/src/plugins/palettes/commands/mod.d.ts +2 -0
- package/dist/src/plugins/palettes/commands/mod.js +2 -0
- package/dist/src/plugins/palettes/commands/store.svelte.d.ts +22 -0
- package/dist/src/plugins/palettes/commands/store.svelte.js +64 -0
- package/dist/src/plugins/palettes/host/PaletteHost.svelte +73 -0
- package/dist/src/plugins/palettes/host/PaletteHost.svelte.d.ts +7 -0
- package/dist/src/plugins/palettes/host/hotkeys.svelte.d.ts +17 -0
- package/dist/src/plugins/palettes/host/hotkeys.svelte.js +32 -0
- package/dist/src/plugins/palettes/mod.d.ts +15 -0
- package/dist/src/plugins/palettes/mod.js +15 -0
- package/dist/src/plugins/palettes/notifications/NotificationBell.svelte +87 -0
- package/dist/src/plugins/palettes/notifications/NotificationBell.svelte.d.ts +15 -0
- package/dist/{runes/palettes/src → src/plugins/palettes}/notifications/Toaster.svelte +42 -40
- package/dist/src/plugins/palettes/notifications/Toaster.svelte.d.ts +35 -0
- package/dist/{runes/palettes/src → src/plugins/palettes}/notifications/mod.d.ts +1 -2
- package/dist/{runes/palettes/src → src/plugins/palettes}/notifications/mod.js +1 -2
- package/dist/src/plugins/palettes/notifications/store.svelte.d.ts +31 -0
- package/dist/src/plugins/palettes/notifications/store.svelte.js +93 -0
- package/dist/src/plugins/palettes/palettes/commands/CommandPalette.svelte +165 -0
- package/dist/src/plugins/palettes/palettes/commands/CommandPalette.svelte.d.ts +7 -0
- package/dist/src/plugins/palettes/palettes/shortcuts/ShortcutPalette.svelte +171 -0
- package/dist/{runes/palettes/src → src/plugins/palettes/palettes}/shortcuts/ShortcutPalette.svelte.d.ts +3 -6
- package/dist/src/plugins/palettes/plugin.d.ts +16 -0
- package/dist/src/plugins/palettes/plugin.js +68 -0
- package/dist/src/plugins/palettes/registry/registry.svelte.d.ts +18 -0
- package/dist/src/plugins/palettes/registry/registry.svelte.js +25 -0
- package/dist/src/plugins/palettes/settings-modal/SettingsSearchResults.svelte +48 -0
- package/dist/src/plugins/palettes/settings-modal/SettingsSearchResults.svelte.d.ts +14 -0
- package/dist/src/plugins/palettes/settings-modal/SettingsSectionContent.svelte +16 -0
- package/dist/src/plugins/palettes/settings-modal/SettingsSectionContent.svelte.d.ts +12 -0
- package/dist/src/plugins/palettes/settings-modal/SettingsSidebar.svelte +53 -0
- package/dist/src/plugins/palettes/settings-modal/SettingsSidebar.svelte.d.ts +16 -0
- package/dist/src/plugins/palettes/settings-modal/hash-routing.d.ts +8 -0
- package/dist/src/plugins/palettes/settings-modal/hash-routing.js +40 -0
- package/dist/src/plugins/palettes/settings-modal/search.d.ts +24 -0
- package/dist/src/plugins/palettes/settings-modal/search.js +77 -0
- package/dist/src/plugins/palettes/shortcuts/ShortcutSettings.svelte +197 -0
- package/dist/src/plugins/palettes/shortcuts/ShortcutSettings.svelte.d.ts +7 -0
- package/dist/src/plugins/palettes/shortcuts/grouping.d.ts +6 -0
- package/dist/src/plugins/palettes/shortcuts/grouping.js +32 -0
- package/dist/src/plugins/palettes/shortcuts/mod.d.ts +5 -0
- package/dist/src/plugins/palettes/shortcuts/mod.js +5 -0
- package/dist/src/plugins/palettes/shortcuts/store.svelte.d.ts +33 -0
- package/dist/src/plugins/palettes/shortcuts/store.svelte.js +58 -0
- package/dist/src/plugins/palettes/shortcuts/types.d.ts +1 -0
- package/dist/{runes/palettes/src → src/plugins/palettes}/shortcuts/useShortcuts.svelte.d.ts +1 -18
- package/dist/src/plugins/palettes/shortcuts/useShortcuts.svelte.js +58 -0
- package/dist/src/plugins/palettes/types.d.ts +27 -0
- package/dist/src/ui/RuneProvider.svelte +130 -0
- package/dist/src/ui/RuneProvider.svelte.d.ts +31 -0
- package/dist/{kernel/src → src/ui}/actions/portal.d.ts +4 -4
- package/dist/src/ui/actions/portal.js +33 -0
- package/dist/src/ui/define/plugin-kit.d.ts +14 -0
- package/dist/src/ui/define/plugin-kit.js +24 -0
- package/dist/src/ui/mod.d.ts +23 -0
- package/dist/src/ui/mod.js +18 -0
- package/dist/src/ui/persistence/createConfigStore.svelte.d.ts +5 -0
- package/dist/src/ui/persistence/createConfigStore.svelte.js +52 -0
- package/dist/src/ui/persistence/drivers.d.ts +18 -0
- package/dist/src/ui/persistence/drivers.js +86 -0
- package/dist/{kernel/src → src/ui}/persistence/usePersistence.d.ts +1 -1
- package/dist/src/ui/persistence/usePersistence.js +5 -0
- package/dist/src/ui/provider/context.d.ts +25 -0
- package/dist/src/ui/provider/context.js +38 -0
- package/dist/src/ui/reactivity/app.svelte.d.ts +22 -0
- package/dist/src/ui/reactivity/app.svelte.js +59 -0
- package/dist/src/ui/reactivity/use-cell.svelte.d.ts +18 -0
- package/dist/src/ui/reactivity/use-cell.svelte.js +30 -0
- package/dist/src/ui/settings/SettingsFields.svelte +180 -0
- package/dist/src/ui/settings/SettingsFields.svelte.d.ts +12 -0
- package/dist/src/ui/static/attributions.md +11 -0
- package/dist/src/ui/static/img/rune.png +0 -0
- package/package.json +60 -46
- package/dist/RuneProvider.svelte +0 -147
- package/dist/RuneProvider.svelte.d.ts +0 -29
- package/dist/i18n/message-resolver.js +0 -49
- package/dist/i18n/messages.d.ts +0 -2
- package/dist/i18n/paraglide/messages/abyss.js +0 -88
- package/dist/i18n/paraglide/messages/acid.js +0 -88
- package/dist/i18n/paraglide/messages/aed3.js +0 -89
- package/dist/i18n/paraglide/messages/all_currencies.js +0 -101
- package/dist/i18n/paraglide/messages/all_languages.js +0 -101
- package/dist/i18n/paraglide/messages/all_themes.js +0 -101
- package/dist/i18n/paraglide/messages/aqua.js +0 -88
- package/dist/i18n/paraglide/messages/ar.js +0 -88
- package/dist/i18n/paraglide/messages/autumn.js +0 -101
- package/dist/i18n/paraglide/messages/black.js +0 -88
- package/dist/i18n/paraglide/messages/brl3.js +0 -89
- package/dist/i18n/paraglide/messages/bumblebee.js +0 -101
- package/dist/i18n/paraglide/messages/business.js +0 -101
- package/dist/i18n/paraglide/messages/cad3.js +0 -89
- package/dist/i18n/paraglide/messages/caramellatte.js +0 -101
- package/dist/i18n/paraglide/messages/cmyk.js +0 -88
- package/dist/i18n/paraglide/messages/cny3.js +0 -89
- package/dist/i18n/paraglide/messages/coffee.js +0 -101
- package/dist/i18n/paraglide/messages/corporate.js +0 -101
- package/dist/i18n/paraglide/messages/cupcake.js +0 -101
- package/dist/i18n/paraglide/messages/currency.js +0 -101
- package/dist/i18n/paraglide/messages/cyberpunk.js +0 -101
- package/dist/i18n/paraglide/messages/dark.js +0 -88
- package/dist/i18n/paraglide/messages/de.js +0 -88
- package/dist/i18n/paraglide/messages/dim.js +0 -88
- package/dist/i18n/paraglide/messages/dracula.js +0 -101
- package/dist/i18n/paraglide/messages/emerald.js +0 -101
- package/dist/i18n/paraglide/messages/en.js +0 -88
- package/dist/i18n/paraglide/messages/es.js +0 -88
- package/dist/i18n/paraglide/messages/eur3.js +0 -89
- package/dist/i18n/paraglide/messages/fantasy.js +0 -101
- package/dist/i18n/paraglide/messages/forest.js +0 -101
- package/dist/i18n/paraglide/messages/fr.js +0 -88
- package/dist/i18n/paraglide/messages/garden.js +0 -101
- package/dist/i18n/paraglide/messages/gbp3.js +0 -89
- package/dist/i18n/paraglide/messages/halloween.js +0 -101
- package/dist/i18n/paraglide/messages/hello_world.js +0 -101
- package/dist/i18n/paraglide/messages/hi.js +0 -88
- package/dist/i18n/paraglide/messages/inr3.js +0 -89
- package/dist/i18n/paraglide/messages/it.js +0 -88
- package/dist/i18n/paraglide/messages/ja.js +0 -88
- package/dist/i18n/paraglide/messages/jpy3.js +0 -89
- package/dist/i18n/paraglide/messages/ko.js +0 -88
- package/dist/i18n/paraglide/messages/krw3.js +0 -89
- package/dist/i18n/paraglide/messages/languages.js +0 -101
- package/dist/i18n/paraglide/messages/lemonade.js +0 -101
- package/dist/i18n/paraglide/messages/light.js +0 -88
- package/dist/i18n/paraglide/messages/lofi.js +0 -88
- package/dist/i18n/paraglide/messages/luxury.js +0 -101
- package/dist/i18n/paraglide/messages/mxn3.js +0 -89
- package/dist/i18n/paraglide/messages/night.js +0 -88
- package/dist/i18n/paraglide/messages/nord.js +0 -88
- package/dist/i18n/paraglide/messages/pastel.js +0 -101
- package/dist/i18n/paraglide/messages/pt.js +0 -88
- package/dist/i18n/paraglide/messages/retro.js +0 -88
- package/dist/i18n/paraglide/messages/ru.js +0 -88
- package/dist/i18n/paraglide/messages/silk.js +0 -88
- package/dist/i18n/paraglide/messages/sunset.js +0 -101
- package/dist/i18n/paraglide/messages/synthwave.js +0 -101
- package/dist/i18n/paraglide/messages/system.js +0 -101
- package/dist/i18n/paraglide/messages/theme.js +0 -88
- package/dist/i18n/paraglide/messages/themes.js +0 -101
- package/dist/i18n/paraglide/messages/usd3.js +0 -89
- package/dist/i18n/paraglide/messages/valentine.js +0 -101
- package/dist/i18n/paraglide/messages/vi.js +0 -88
- package/dist/i18n/paraglide/messages/winter.js +0 -101
- package/dist/i18n/paraglide/messages/wireframe.js +0 -101
- package/dist/i18n/paraglide/messages/zh.js +0 -88
- package/dist/i18n/paraglide/registry.js +0 -33
- package/dist/kernel/src/actions/portal.js +0 -33
- package/dist/kernel/src/actions/shortcut-listener.svelte.d.ts +0 -18
- package/dist/kernel/src/actions/shortcut-listener.svelte.js +0 -35
- package/dist/kernel/src/context/accessors.test.js +0 -68
- package/dist/kernel/src/context/app.svelte.d.ts +0 -45
- package/dist/kernel/src/context/app.svelte.js +0 -95
- package/dist/kernel/src/context/context.d.ts +0 -15
- package/dist/kernel/src/context/context.js +0 -16
- package/dist/kernel/src/context/stores.svelte.d.ts +0 -69
- package/dist/kernel/src/context/stores.svelte.js +0 -91
- package/dist/kernel/src/context/types.d.ts +0 -98
- package/dist/kernel/src/context/useRuneLab.d.ts +0 -25
- package/dist/kernel/src/context/useRuneLab.js +0 -26
- package/dist/kernel/src/mod.d.ts +0 -13
- package/dist/kernel/src/mod.js +0 -13
- package/dist/kernel/src/persistence/createConfigStore.svelte.d.ts +0 -42
- package/dist/kernel/src/persistence/createConfigStore.svelte.js +0 -121
- package/dist/kernel/src/persistence/drivers.d.ts +0 -25
- package/dist/kernel/src/persistence/drivers.js +0 -105
- package/dist/kernel/src/persistence/drivers.test.js +0 -79
- package/dist/kernel/src/persistence/provider.d.ts +0 -30
- package/dist/kernel/src/persistence/provider.js +0 -45
- package/dist/kernel/src/persistence/provider.test.d.ts +0 -1
- package/dist/kernel/src/persistence/provider.test.js +0 -51
- package/dist/kernel/src/persistence/types.d.ts +0 -17
- package/dist/kernel/src/persistence/types.js +0 -2
- package/dist/kernel/src/persistence/usePersistence.js +0 -5
- package/dist/kernel/src/registry/mod.d.ts +0 -119
- package/dist/kernel/src/registry/mod.js +0 -144
- package/dist/kernel/src/registry/registry.test.d.ts +0 -1
- package/dist/kernel/src/registry/registry.test.js +0 -121
- package/dist/kernel/src/tokens/props.d.ts +0 -67
- package/dist/kernel/src/tokens/props.js +0 -35
- package/dist/mod.d.ts +0 -6
- package/dist/mod.js +0 -7
- package/dist/runes/layout/src/APP_CONFIGURATIONS.d.ts +0 -29
- package/dist/runes/layout/src/APP_CONFIGURATIONS.js +0 -38
- package/dist/runes/layout/src/AppSettingSelector.svelte +0 -216
- package/dist/runes/layout/src/AppSettingSelector.svelte.d.ts +0 -48
- package/dist/runes/layout/src/ConnectedNavigationPanel.svelte +0 -28
- package/dist/runes/layout/src/ConnectedWorkspaceStrip.svelte +0 -24
- package/dist/runes/layout/src/ContentArea.svelte +0 -19
- package/dist/runes/layout/src/DetailPanel.svelte +0 -12
- package/dist/runes/layout/src/DetailPanel.svelte.d.ts +0 -7
- package/dist/runes/layout/src/Icon.svelte +0 -11
- package/dist/runes/layout/src/Icon.svelte.d.ts +0 -7
- package/dist/runes/layout/src/LanguageSelector.svelte +0 -47
- package/dist/runes/layout/src/NavigationPanel.svelte +0 -119
- package/dist/runes/layout/src/NavigationPanel.svelte.d.ts +0 -17
- package/dist/runes/layout/src/ResourceSelector.svelte +0 -81
- package/dist/runes/layout/src/ResourceSelector.svelte.d.ts +0 -57
- package/dist/runes/layout/src/ThemeSelector.svelte +0 -53
- package/dist/runes/layout/src/WorkspaceLayout.svelte +0 -252
- package/dist/runes/layout/src/WorkspaceLayout.svelte.d.ts +0 -36
- package/dist/runes/layout/src/WorkspaceStrip.svelte +0 -74
- package/dist/runes/layout/src/connection-factory.d.ts +0 -61
- package/dist/runes/layout/src/connection-factory.js +0 -58
- package/dist/runes/layout/src/language.svelte.d.ts +0 -58
- package/dist/runes/layout/src/language.svelte.js +0 -41
- package/dist/runes/layout/src/mod.d.ts +0 -23
- package/dist/runes/layout/src/mod.js +0 -73
- package/dist/runes/layout/src/store.svelte.d.ts +0 -37
- package/dist/runes/layout/src/store.svelte.js +0 -117
- package/dist/runes/layout/src/theme.svelte.d.ts +0 -13
- package/dist/runes/layout/src/theme.svelte.js +0 -71
- package/dist/runes/layout/src/types.d.ts +0 -6
- package/dist/runes/layout/src/types.js +0 -8
- package/dist/runes/palettes/src/commands/CommandPalette.svelte +0 -231
- package/dist/runes/palettes/src/commands/CommandPalette.svelte.d.ts +0 -6
- package/dist/runes/palettes/src/commands/mod.d.ts +0 -2
- package/dist/runes/palettes/src/commands/mod.js +0 -2
- package/dist/runes/palettes/src/commands/store.svelte.d.ts +0 -37
- package/dist/runes/palettes/src/commands/store.svelte.js +0 -68
- package/dist/runes/palettes/src/mod.d.ts +0 -9
- package/dist/runes/palettes/src/mod.js +0 -47
- package/dist/runes/palettes/src/notifications/NotificationBell.svelte +0 -89
- package/dist/runes/palettes/src/notifications/NotificationBell.svelte.d.ts +0 -15
- package/dist/runes/palettes/src/notifications/Toaster.svelte.d.ts +0 -32
- package/dist/runes/palettes/src/notifications/bridge.d.ts +0 -33
- package/dist/runes/palettes/src/notifications/bridge.js +0 -44
- package/dist/runes/palettes/src/notifications/store.svelte.d.ts +0 -32
- package/dist/runes/palettes/src/notifications/store.svelte.js +0 -94
- package/dist/runes/palettes/src/notifications/store.test.d.ts +0 -1
- package/dist/runes/palettes/src/notifications/store.test.js +0 -83
- package/dist/runes/palettes/src/shortcuts/ShortcutPalette.svelte +0 -244
- package/dist/runes/palettes/src/shortcuts/mod.d.ts +0 -4
- package/dist/runes/palettes/src/shortcuts/mod.js +0 -4
- package/dist/runes/palettes/src/shortcuts/store.svelte.d.ts +0 -43
- package/dist/runes/palettes/src/shortcuts/store.svelte.js +0 -95
- package/dist/runes/palettes/src/shortcuts/types.d.ts +0 -1
- package/dist/runes/palettes/src/shortcuts/useShortcuts.svelte.js +0 -76
- package/dist/runes/plugins/money/src/CurrencySelector.svelte +0 -45
- package/dist/runes/plugins/money/src/MoneyDisplay.svelte +0 -142
- package/dist/runes/plugins/money/src/MoneyDisplay.svelte.d.ts +0 -37
- package/dist/runes/plugins/money/src/MoneyInput.svelte +0 -208
- package/dist/runes/plugins/money/src/MoneyInput.svelte.d.ts +0 -38
- package/dist/runes/plugins/money/src/currency.svelte.d.ts +0 -36
- package/dist/runes/plugins/money/src/currency.svelte.js +0 -87
- package/dist/runes/plugins/money/src/currency.test.d.ts +0 -1
- package/dist/runes/plugins/money/src/currency.test.js +0 -32
- package/dist/runes/plugins/money/src/exchange-rate.svelte.d.ts +0 -43
- package/dist/runes/plugins/money/src/exchange-rate.svelte.js +0 -163
- package/dist/runes/plugins/money/src/exchange-rate.test.d.ts +0 -1
- package/dist/runes/plugins/money/src/exchange-rate.test.js +0 -74
- package/dist/runes/plugins/money/src/mod.d.ts +0 -16
- package/dist/runes/plugins/money/src/mod.js +0 -59
- package/dist/runes/plugins/money/src/money-primitive.d.ts +0 -106
- package/dist/runes/plugins/money/src/money-primitive.js +0 -178
- package/dist/runes/plugins/money/src/money-primitive.test.d.ts +0 -1
- package/dist/runes/plugins/money/src/money-primitive.test.js +0 -177
- package/dist/runes/plugins/money/src/money.js +0 -285
- package/dist/runes/plugins/money/src/money.test.d.ts +0 -1
- package/dist/runes/plugins/money/src/money.test.js +0 -154
- package/dist/runes/plugins/money/src/strategies.test.d.ts +0 -1
- package/dist/runes/plugins/money/src/strategies.test.js +0 -115
- package/dist/runes/plugins/money/src/types.d.ts +0 -27
- package/dist/runes/plugins/money/src/types.js +0 -21
- package/dist/runes/plugins/money/src/useMoney.d.ts +0 -69
- package/dist/runes/plugins/money/src/useMoney.js +0 -157
- package/dist/runes/plugins/money/src/useMoneyFilter.svelte.d.ts +0 -23
- package/dist/runes/plugins/money/src/useMoneyFilter.svelte.js +0 -97
- /package/dist/{i18n/message-resolver.test.d.ts → src/core/ports/locale.js} +0 -0
- /package/dist/{kernel/src/context/accessors.test.d.ts → src/core/ports/persistence.js} +0 -0
- /package/dist/{kernel/src/context/types.js → src/core/ports/text.js} +0 -0
- /package/dist/{i18n → src/plugins/i18n/lang}/paraglide/messages.js +0 -0
- /package/dist/{runes/palettes/src → src/plugins/palettes}/shortcuts/types.js +0 -0
- /package/dist/{kernel/src/persistence/drivers.test.d.ts → src/plugins/palettes/types.js} +0 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Fernando Bryan Reza Campos
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
<h1 align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/Yrrrrrf/rune-lab/refs/heads/main/src/package/src/static/img/rune.png" alt="Rune Lab Icon" width="128" height="128" description="Icon representing the Svelte Runes system">
|
|
3
|
+
<div align="center">Rune Lab</div>
|
|
4
|
+
</h1>
|
|
5
|
+
|
|
6
|
+
<div align="center">
|
|
7
|
+
|
|
8
|
+
[](https://jsr.io/@yrrrrrf/rune-lab)
|
|
9
|
+
[](https://www.npmjs.com/package/rune-lab)
|
|
10
|
+
[](https://github.com/Yrrrrrf/rune-lab)
|
|
11
|
+
[](https://choosealicense.com/licenses/mit/)
|
|
12
|
+
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
**Rune Lab** is a modern, extensible **plugin-based UI shell** for **Svelte 5**
|
|
18
|
+
applications. Harnessing the power of Svelte's new **Runes** system, it provides
|
|
19
|
+
a complete application skeleton with built-in layout management, dynamic
|
|
20
|
+
theming, i18n, keyboard shortcuts, a command palette, toast notifications, and a
|
|
21
|
+
highly precise money/currency subsystem.
|
|
22
|
+
|
|
23
|
+
Everything is wired through a centralized **Provider + Registry + Context**
|
|
24
|
+
architecture, ensuring clean dependency injection and state isolation across
|
|
25
|
+
your app.
|
|
26
|
+
|
|
27
|
+
## Key Features
|
|
28
|
+
|
|
29
|
+
- **✨ Svelte 5 Runes-First:** Built from the ground up using `$state`,
|
|
30
|
+
`$derived`, and `$effect`. No legacy Svelte 4 stores.
|
|
31
|
+
- **🧩 Extensible Plugin Architecture:** Features are isolated into plugins
|
|
32
|
+
(`LayoutPlugin`, `PalettesPlugin`, `MoneyPlugin`). Only load what you need.
|
|
33
|
+
- **🎨 Dynamic Theming & i18n:** 32 DaisyUI themes and 13 pre-configured locales
|
|
34
|
+
powered by Paraglide JS, with zero-flash SSR persistence.
|
|
35
|
+
- **🔗 Declarative Callbacks:** Bridge store changes (theme, language, currency)
|
|
36
|
+
to your own system hooks via `RuneProvider` props.
|
|
37
|
+
- **💾 Abstract Persistence Layer:** Swap between cookies, localStorage,
|
|
38
|
+
sessionStorage, or in-memory state seamlessly via generic drivers.
|
|
39
|
+
- **💸 Robust Money Subsystem:** Backed by Dinero.js for floating-point-safe
|
|
40
|
+
precision arithmetic, complete with exchange rate strategies and masked
|
|
41
|
+
currency inputs.
|
|
42
|
+
- **⌨️ Developer & Power-User Friendly:** Out-of-the-box Command Palette
|
|
43
|
+
(`Ctrl+K`) and interactive Shortcuts Palette (`Ctrl+/`).
|
|
44
|
+
|
|
45
|
+
## Installation
|
|
46
|
+
|
|
47
|
+
### Using NPM / Bun
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npm install rune-lab
|
|
51
|
+
# or
|
|
52
|
+
bun install rune-lab
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Project Configuration (Required)
|
|
56
|
+
|
|
57
|
+
After installing, two configuration steps are required to ensure the framework's
|
|
58
|
+
components are compiled and styled correctly in your consuming project.
|
|
59
|
+
|
|
60
|
+
### Step 1 — Vite: Process `rune-lab` through the Svelte compiler
|
|
61
|
+
|
|
62
|
+
By default, Vite externalizes `node_modules` during SSR, bypassing the Svelte
|
|
63
|
+
compiler. Add the following to your `vite.config.ts` to process `rune-lab`
|
|
64
|
+
properly:
|
|
65
|
+
|
|
66
|
+
```ts
|
|
67
|
+
// vite.config.ts
|
|
68
|
+
import { defineConfig } from "vite";
|
|
69
|
+
import { sveltekit } from "@sveltejs/kit/vite";
|
|
70
|
+
|
|
71
|
+
export default defineConfig({
|
|
72
|
+
plugins: [sveltekit()],
|
|
73
|
+
ssr: {
|
|
74
|
+
noExternal: ["rune-lab"], // 👈 CRITICAL for Svelte 5 components in node_modules
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Step 2 — Tailwind CSS v4: Scan `rune-lab` for utility classes
|
|
80
|
+
|
|
81
|
+
Tailwind only generates CSS for classes it finds by scanning your source files.
|
|
82
|
+
Add a `@source` directive to your project's main CSS file so Tailwind compiles
|
|
83
|
+
the DaisyUI classes used internally by `rune-lab`:
|
|
84
|
+
|
|
85
|
+
```css
|
|
86
|
+
/* app.css / layout.css / global.css */
|
|
87
|
+
@import "tailwindcss";
|
|
88
|
+
@source "../node_modules/rune-lab/dist"; /* 👈 add this */
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Quick Start
|
|
92
|
+
|
|
93
|
+
Get your application shell running in less than 40 lines. Inside your
|
|
94
|
+
`+layout.svelte`:
|
|
95
|
+
|
|
96
|
+
```svelte
|
|
97
|
+
<script lang="ts">
|
|
98
|
+
import {
|
|
99
|
+
ConnectedNavigationPanel,
|
|
100
|
+
cookieDriver,
|
|
101
|
+
LayoutPlugin,
|
|
102
|
+
PalettesPlugin,
|
|
103
|
+
RuneProvider,
|
|
104
|
+
WorkspaceLayout,
|
|
105
|
+
} from "rune-lab";
|
|
106
|
+
import type { NavigationSection } from "rune-lab";
|
|
107
|
+
import { setLocale } from "$lib/i18n/paraglide/runtime.js";
|
|
108
|
+
|
|
109
|
+
let { children } = $props();
|
|
110
|
+
|
|
111
|
+
const sections: NavigationSection[] = [
|
|
112
|
+
{
|
|
113
|
+
id: "main",
|
|
114
|
+
title: "Main Menu",
|
|
115
|
+
items: [
|
|
116
|
+
{ id: "home", label: "Dashboard", icon: "🏠" },
|
|
117
|
+
{ id: "settings", label: "Settings", icon: "⚙️" },
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
];
|
|
121
|
+
</script>
|
|
122
|
+
|
|
123
|
+
<!-- Initialize the system with your required plugins and callbacks -->
|
|
124
|
+
<RuneProvider
|
|
125
|
+
config={{
|
|
126
|
+
app: { name: "My Startup", version: "1.0.0" },
|
|
127
|
+
persistence: cookieDriver,
|
|
128
|
+
}}
|
|
129
|
+
plugins={[LayoutPlugin, PalettesPlugin]}
|
|
130
|
+
onLanguageChange={(l) => setLocale(l.code)}
|
|
131
|
+
onThemeChange={(t) => console.log(`Theme changed to ${t.name}`)}
|
|
132
|
+
>
|
|
133
|
+
<WorkspaceLayout>
|
|
134
|
+
{#snippet navigationPanel()}
|
|
135
|
+
<!-- Auto-wires to LayoutStore state -->
|
|
136
|
+
<ConnectedNavigationPanel {sections} />
|
|
137
|
+
{/snippet}
|
|
138
|
+
|
|
139
|
+
{#snippet content()}
|
|
140
|
+
<div class="p-8">
|
|
141
|
+
{@render children()}
|
|
142
|
+
</div>
|
|
143
|
+
{/snippet}
|
|
144
|
+
</WorkspaceLayout>
|
|
145
|
+
</RuneProvider>
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
You now have a fully reactive layout, a keyboard command palette, a toast
|
|
149
|
+
notification system, and theme/language switchers.
|
|
150
|
+
|
|
151
|
+
## Money & Currency Plugin
|
|
152
|
+
|
|
153
|
+
Rune Lab provides a robust money layer that handles precision arithmetic,
|
|
154
|
+
formatting, and live exchange-rate triangulation. To use it, simply register the
|
|
155
|
+
`MoneyPlugin`:
|
|
156
|
+
|
|
157
|
+
```svelte
|
|
158
|
+
<script lang="ts">
|
|
159
|
+
import { MoneyPlugin } from "rune-lab";
|
|
160
|
+
</script>
|
|
161
|
+
|
|
162
|
+
<RuneProvider
|
|
163
|
+
config={{
|
|
164
|
+
"rune-lab.money": {
|
|
165
|
+
defaultCurrency: "USD",
|
|
166
|
+
exchangeRates: {
|
|
167
|
+
base: "USD",
|
|
168
|
+
rates: { MXN: 17.23, EUR: 0.91 },
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
}}
|
|
172
|
+
plugins={[LayoutPlugin, PalettesPlugin, MoneyPlugin]}
|
|
173
|
+
>
|
|
174
|
+
<!-- App Content -->
|
|
175
|
+
</RuneProvider>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Displaying & Inputting Money
|
|
179
|
+
|
|
180
|
+
```svelte
|
|
181
|
+
<script lang="ts">
|
|
182
|
+
import { CurrencySelector, MoneyDisplay, MoneyInput, useMoney } from "rune-lab";
|
|
183
|
+
|
|
184
|
+
let price = $state(15000); // Minor units (e.g., cents) -> $150.00
|
|
185
|
+
const { convert, format } = useMoney();
|
|
186
|
+
</script>
|
|
187
|
+
|
|
188
|
+
<!-- Select from available currencies -->
|
|
189
|
+
<CurrencySelector />
|
|
190
|
+
|
|
191
|
+
<!-- Formats safely and localizes based on the active LanguageStore -->
|
|
192
|
+
<MoneyDisplay amount={price} currency="USD" />
|
|
193
|
+
|
|
194
|
+
<!-- Compact notation ($1.5M) -->
|
|
195
|
+
<MoneyDisplay amount={150000000} currency="USD" compact />
|
|
196
|
+
|
|
197
|
+
<!-- Integer-backed masked input (prevents floating point errors) -->
|
|
198
|
+
<MoneyInput bind:amount={price} currency="USD" />
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Persistence Drivers
|
|
202
|
+
|
|
203
|
+
Rune Lab provides generic drivers to remember user preferences across reloads.
|
|
204
|
+
Pass one to `config.persistence` on `<RuneProvider>`:
|
|
205
|
+
|
|
206
|
+
- `cookieDriver`: Best for SSR applications (like SvelteKit) to prevent "theme
|
|
207
|
+
flash" on initial load.
|
|
208
|
+
- `localStorageDriver`: Best for client-only applications (SPAs).
|
|
209
|
+
- `sessionStorageDriver`: For preferences that should clear when the browser tab
|
|
210
|
+
closes.
|
|
211
|
+
|
|
212
|
+
```svelte
|
|
213
|
+
<script lang="ts">
|
|
214
|
+
import { cookieDriver } from "rune-lab";
|
|
215
|
+
</script>
|
|
216
|
+
|
|
217
|
+
<RuneProvider config={{ persistence: cookieDriver }} plugins={[...]}>
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Advanced Patterns
|
|
221
|
+
|
|
222
|
+
### Store Observers (`onChange`)
|
|
223
|
+
|
|
224
|
+
Beyond the `RuneProvider` props, you can imperatively subscribe to any
|
|
225
|
+
`ConfigStore` (theme, language, currency) from your own services or components.
|
|
226
|
+
Callbacks include `try/catch` protection so they never crash the store.
|
|
227
|
+
|
|
228
|
+
```ts
|
|
229
|
+
import { getThemeStore } from "rune-lab";
|
|
230
|
+
|
|
231
|
+
const themeStore = getThemeStore();
|
|
232
|
+
|
|
233
|
+
// Returns an unsubscribe function
|
|
234
|
+
const unsub = themeStore.onChange((newId, oldId) => {
|
|
235
|
+
console.log(`Theme swapped from ${oldId} to ${newId}`);
|
|
236
|
+
});
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Keyboard Shortcuts (Auto-Cleanup)
|
|
240
|
+
|
|
241
|
+
Any component deep in your tree can register its own keyboard shortcuts using
|
|
242
|
+
the `useShortcuts` composable. It handles Svelte's `$effect` lifecycle
|
|
243
|
+
internally, ensuring shortcuts unregister when the component unmounts:
|
|
244
|
+
|
|
245
|
+
```svelte
|
|
246
|
+
<script lang="ts">
|
|
247
|
+
import { getToastStore, useShortcuts } from "rune-lab";
|
|
248
|
+
|
|
249
|
+
const toasts = getToastStore();
|
|
250
|
+
|
|
251
|
+
useShortcuts([
|
|
252
|
+
{
|
|
253
|
+
id: "feature.save",
|
|
254
|
+
keys: "ctrl+s, cmd+s", // Comma-separated alternative keys
|
|
255
|
+
label: "Save Document",
|
|
256
|
+
category: "Editor",
|
|
257
|
+
scope: "global",
|
|
258
|
+
handler: (e) => {
|
|
259
|
+
e.preventDefault();
|
|
260
|
+
toasts.success("Document Saved!");
|
|
261
|
+
},
|
|
262
|
+
},
|
|
263
|
+
]);
|
|
264
|
+
</script>
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### SvelteKit Route Syncing
|
|
268
|
+
|
|
269
|
+
To keep your layout's active navigation state synchronized with the SvelteKit
|
|
270
|
+
router, use an `$effect` inside your `+layout.svelte` right after the provider:
|
|
271
|
+
|
|
272
|
+
```svelte
|
|
273
|
+
<script lang="ts">
|
|
274
|
+
import { page } from "$app/state";
|
|
275
|
+
import { getLayoutStore } from "rune-lab";
|
|
276
|
+
|
|
277
|
+
const layoutStore = getLayoutStore();
|
|
278
|
+
|
|
279
|
+
$effect(() => {
|
|
280
|
+
// Automatically open the correct nav tree branch
|
|
281
|
+
const segment = page.url.pathname.split("/")[1] || "home";
|
|
282
|
+
layoutStore.navigate(segment);
|
|
283
|
+
});
|
|
284
|
+
</script>
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### Calling Toasts from Outside Svelte Components
|
|
288
|
+
|
|
289
|
+
If you need to trigger a toast from a pure `.ts` file (like a fetching utility
|
|
290
|
+
or global error handler), you can use the Toast Bridge:
|
|
291
|
+
|
|
292
|
+
```ts
|
|
293
|
+
import { createToastBridge } from "rune-lab";
|
|
294
|
+
|
|
295
|
+
const { notify } = createToastBridge();
|
|
296
|
+
|
|
297
|
+
export async function fetchUser() {
|
|
298
|
+
try {
|
|
299
|
+
// ...
|
|
300
|
+
} catch (err) {
|
|
301
|
+
// Safely queues the toast if the UI hasn't mounted yet
|
|
302
|
+
notify("Failed to fetch user data", "error");
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
## License
|
|
308
|
+
|
|
309
|
+
MIT License - See [LICENSE](LICENSE) for details.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { SubscriptionRef } from "effect";
|
|
2
|
+
export declare class StateCell<T> {
|
|
3
|
+
ref: SubscriptionRef.SubscriptionRef<T>;
|
|
4
|
+
version: number;
|
|
5
|
+
private listeners;
|
|
6
|
+
constructor(ref: SubscriptionRef.SubscriptionRef<T>);
|
|
7
|
+
get(): T;
|
|
8
|
+
set(value: T): void;
|
|
9
|
+
getVersion(): number;
|
|
10
|
+
subscribe(listener: () => void): () => void;
|
|
11
|
+
private pendingNotify;
|
|
12
|
+
notify(): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Effect, SubscriptionRef } from "effect";
|
|
2
|
+
export class StateCell {
|
|
3
|
+
ref;
|
|
4
|
+
version = 0;
|
|
5
|
+
listeners = new Set();
|
|
6
|
+
constructor(ref) {
|
|
7
|
+
this.ref = ref;
|
|
8
|
+
}
|
|
9
|
+
get() {
|
|
10
|
+
return Effect.runSync(SubscriptionRef.get(this.ref));
|
|
11
|
+
}
|
|
12
|
+
set(value) {
|
|
13
|
+
Effect.runSync(SubscriptionRef.set(this.ref, value));
|
|
14
|
+
}
|
|
15
|
+
getVersion() {
|
|
16
|
+
return this.version;
|
|
17
|
+
}
|
|
18
|
+
subscribe(listener) {
|
|
19
|
+
this.listeners.add(listener);
|
|
20
|
+
return () => {
|
|
21
|
+
this.listeners.delete(listener);
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
pendingNotify = false;
|
|
25
|
+
notify() {
|
|
26
|
+
this.version++;
|
|
27
|
+
if (this.pendingNotify) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
this.pendingNotify = true;
|
|
31
|
+
queueMicrotask(() => {
|
|
32
|
+
this.pendingNotify = false;
|
|
33
|
+
for (const listener of this.listeners) {
|
|
34
|
+
try {
|
|
35
|
+
listener();
|
|
36
|
+
} catch (e) {
|
|
37
|
+
console.error(`[StateCell] Listener error:`, e);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import type { PersistenceHandle } from "../forge/descriptors.js";
|
|
3
|
+
import { StateCell } from "./define-cell.js";
|
|
4
|
+
export declare function createPersistedCell<T, TEncoded = T>(
|
|
5
|
+
schema: Schema.Schema<T, TEncoded, never>,
|
|
6
|
+
handle: PersistenceHandle,
|
|
7
|
+
initialValue: T,
|
|
8
|
+
key?: string,
|
|
9
|
+
): StateCell<T>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Effect, Schema, SubscriptionRef } from "effect";
|
|
2
|
+
import { StateCell } from "./define-cell.js";
|
|
3
|
+
export function createPersistedCell(schema, handle, initialValue, key = "") {
|
|
4
|
+
const ref = SubscriptionRef.make(initialValue).pipe(Effect.runSync);
|
|
5
|
+
const cell = new StateCell(ref);
|
|
6
|
+
const applyValue = (val) => {
|
|
7
|
+
if (val !== null && val !== undefined) {
|
|
8
|
+
try {
|
|
9
|
+
const parsed = JSON.parse(val);
|
|
10
|
+
const decoded = Schema.decodeUnknownSync(schema)(parsed);
|
|
11
|
+
cell.set(decoded);
|
|
12
|
+
} catch {
|
|
13
|
+
try {
|
|
14
|
+
const decoded = Schema.decodeUnknownSync(schema)(val);
|
|
15
|
+
cell.set(decoded);
|
|
16
|
+
} catch {
|
|
17
|
+
// ignore decoding errors, keep initial value
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const saved = handle.get(key);
|
|
23
|
+
if (saved instanceof Promise) {
|
|
24
|
+
saved.then(applyValue).catch(() => {});
|
|
25
|
+
} else {
|
|
26
|
+
applyValue(saved);
|
|
27
|
+
}
|
|
28
|
+
const originalSet = cell.set.bind(cell);
|
|
29
|
+
cell.set = (value) => {
|
|
30
|
+
const oldValue = cell.get();
|
|
31
|
+
originalSet(value);
|
|
32
|
+
try {
|
|
33
|
+
const encoded = Schema.encodeSync(schema)(value);
|
|
34
|
+
const stringValue =
|
|
35
|
+
typeof encoded === "string" ? encoded : JSON.stringify(encoded);
|
|
36
|
+
const res = handle.set(key, stringValue);
|
|
37
|
+
if (res instanceof Promise) {
|
|
38
|
+
return res.catch((e) => {
|
|
39
|
+
originalSet(oldValue);
|
|
40
|
+
console.error(
|
|
41
|
+
`[PersistedCell] Failed to save value (reverted to old value):`,
|
|
42
|
+
e,
|
|
43
|
+
);
|
|
44
|
+
throw e;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
} catch (e) {
|
|
48
|
+
originalSet(oldValue);
|
|
49
|
+
console.error(
|
|
50
|
+
`[PersistedCell] Failed to save value (reverted to old value):`,
|
|
51
|
+
e,
|
|
52
|
+
);
|
|
53
|
+
throw e;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
return cell;
|
|
57
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { PersistenceDriver } from "../ports/persistence.js";
|
|
2
|
+
export type ConfigStore<T, K extends keyof T = keyof T> = {
|
|
3
|
+
current: T[K];
|
|
4
|
+
available: T[];
|
|
5
|
+
set(id: T[K]): void;
|
|
6
|
+
get(id: T[K]): T | undefined;
|
|
7
|
+
getProp<P extends keyof T>(prop: P, id?: T[K]): T[P] | undefined;
|
|
8
|
+
addItems(newItems: T[]): void;
|
|
9
|
+
onChange: (cb: (newId: T[K], oldId: T[K]) => void) => () => void;
|
|
10
|
+
setDriver: (driver: PersistenceDriver) => void;
|
|
11
|
+
};
|
|
12
|
+
export interface ConfigStoreOptions<T, K extends keyof T = keyof T> {
|
|
13
|
+
items: readonly T[];
|
|
14
|
+
storageKey: string;
|
|
15
|
+
displayName: string;
|
|
16
|
+
idKey: K;
|
|
17
|
+
icon?: string;
|
|
18
|
+
driver?: PersistenceDriver;
|
|
19
|
+
}
|
|
20
|
+
export declare class ConfigStoreImpl<T, K extends keyof T> {
|
|
21
|
+
#private;
|
|
22
|
+
current: T[K];
|
|
23
|
+
available: T[];
|
|
24
|
+
constructor(options: ConfigStoreOptions<T, K>);
|
|
25
|
+
setDriver(driver: PersistenceDriver): void;
|
|
26
|
+
set(id: T[K]): void;
|
|
27
|
+
onChange(cb: (newId: T[K], oldId: T[K]) => void): () => void;
|
|
28
|
+
get(id: T[K]): T | undefined;
|
|
29
|
+
getProp<P extends keyof T>(prop: P, id?: T[K]): T[P] | undefined;
|
|
30
|
+
addItems(newItems: T[]): void;
|
|
31
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { createInMemoryDriver } from "../persistence/memory.js";
|
|
2
|
+
export class ConfigStoreImpl {
|
|
3
|
+
current = null;
|
|
4
|
+
available = [];
|
|
5
|
+
#options;
|
|
6
|
+
#driver;
|
|
7
|
+
#callbacks = new Set();
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this.#options = options;
|
|
10
|
+
const { items, idKey, driver = createInMemoryDriver() } = options;
|
|
11
|
+
this.#driver = driver;
|
|
12
|
+
this.available = [...items];
|
|
13
|
+
this.current = items[0][idKey];
|
|
14
|
+
this.#loadFromDriver(this.#driver);
|
|
15
|
+
}
|
|
16
|
+
#loadFromDriver(driver) {
|
|
17
|
+
const saved = driver.get(this.#options.storageKey);
|
|
18
|
+
if (saved instanceof Promise) {
|
|
19
|
+
saved
|
|
20
|
+
.then((val) => {
|
|
21
|
+
if (val && this.get(val)) {
|
|
22
|
+
const old = this.current;
|
|
23
|
+
this.current = val;
|
|
24
|
+
this.#notify(val, old);
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
.catch(() => {});
|
|
28
|
+
} else if (saved && this.get(saved)) {
|
|
29
|
+
this.current = saved;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
setDriver(driver) {
|
|
33
|
+
this.#driver = driver;
|
|
34
|
+
this.#loadFromDriver(driver);
|
|
35
|
+
}
|
|
36
|
+
set(id) {
|
|
37
|
+
const item = this.get(id);
|
|
38
|
+
if (!item) {
|
|
39
|
+
console.warn(`${this.#options.displayName} "${id}" not found`);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const old = this.current;
|
|
43
|
+
this.current = id;
|
|
44
|
+
this.#driver.set(this.#options.storageKey, String(id));
|
|
45
|
+
this.#notify(id, old);
|
|
46
|
+
}
|
|
47
|
+
#notify(newId, oldId) {
|
|
48
|
+
this.#callbacks.forEach((cb) => {
|
|
49
|
+
try {
|
|
50
|
+
cb(newId, oldId);
|
|
51
|
+
} catch (err) {
|
|
52
|
+
console.error(
|
|
53
|
+
`[rune-lab/core] Error in ${this.#options.displayName} onChange callback:`,
|
|
54
|
+
err,
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
onChange(cb) {
|
|
60
|
+
this.#callbacks.add(cb);
|
|
61
|
+
return () => this.#callbacks.delete(cb);
|
|
62
|
+
}
|
|
63
|
+
get(id) {
|
|
64
|
+
const idKey = this.#options.idKey;
|
|
65
|
+
return this.available.find((item) => item[idKey] === id);
|
|
66
|
+
}
|
|
67
|
+
getProp(prop, id) {
|
|
68
|
+
const targetId = id ?? this.current;
|
|
69
|
+
return this.get(targetId)?.[prop];
|
|
70
|
+
}
|
|
71
|
+
addItems(newItems) {
|
|
72
|
+
const idKey = this.#options.idKey;
|
|
73
|
+
for (const item of newItems) {
|
|
74
|
+
if (!this.get(item[idKey])) {
|
|
75
|
+
this.available.push(item);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ContributionKey<T> {
|
|
2
|
+
readonly id: string;
|
|
3
|
+
readonly __brand?: T;
|
|
4
|
+
}
|
|
5
|
+
export interface ContributionEntry<T = unknown> {
|
|
6
|
+
readonly key: ContributionKey<T>;
|
|
7
|
+
readonly items: T[];
|
|
8
|
+
}
|
|
9
|
+
export declare function defineContribution<T>(id: string): ContributionKey<T>;
|
|
10
|
+
export declare function contribute<T>(
|
|
11
|
+
key: ContributionKey<T>,
|
|
12
|
+
...items: T[]
|
|
13
|
+
): ContributionEntry<T>;
|
|
14
|
+
export interface SettingsSectionContribution {
|
|
15
|
+
id: string;
|
|
16
|
+
label: string;
|
|
17
|
+
icon?: string;
|
|
18
|
+
fields?: unknown[];
|
|
19
|
+
component?: unknown;
|
|
20
|
+
}
|
|
21
|
+
export declare const settingsSections: ContributionKey<SettingsSectionContribution>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ContributionEntry } from "./define-contribution.js";
|
|
2
|
+
import type { SettingsSchema } from "./define-settings.js";
|
|
3
|
+
import type { BaseSlotSpec } from "./define-slot.js";
|
|
4
|
+
import { type SlotDescriptor } from "./descriptors.js";
|
|
5
|
+
export interface ForgedPlugin<
|
|
6
|
+
TId extends string = string,
|
|
7
|
+
TSlots extends Record<string, BaseSlotSpec> = Record<string, BaseSlotSpec>,
|
|
8
|
+
> {
|
|
9
|
+
id: TId;
|
|
10
|
+
requires?: string[];
|
|
11
|
+
slots: TSlots;
|
|
12
|
+
settings?: SettingsSchema;
|
|
13
|
+
overlays?: unknown[];
|
|
14
|
+
contributions?: ContributionEntry<unknown>[];
|
|
15
|
+
descriptors: Record<keyof TSlots, SlotDescriptor>;
|
|
16
|
+
}
|
|
17
|
+
export type PluginInput =
|
|
18
|
+
| ForgedPlugin<string, Record<string, BaseSlotSpec>>
|
|
19
|
+
| PluginInput[]
|
|
20
|
+
| null
|
|
21
|
+
| undefined
|
|
22
|
+
| boolean;
|
|
23
|
+
export declare function definePlugin<
|
|
24
|
+
TId extends string,
|
|
25
|
+
TSlots extends Record<string, BaseSlotSpec>,
|
|
26
|
+
>(spec: {
|
|
27
|
+
id: TId;
|
|
28
|
+
requires?: string[];
|
|
29
|
+
slots?: TSlots;
|
|
30
|
+
settings?: SettingsSchema;
|
|
31
|
+
overlays?: unknown[];
|
|
32
|
+
contributions?: ContributionEntry<unknown>[];
|
|
33
|
+
}): ForgedPlugin<TId, TSlots>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { getAccessorName, getContextSymbol } from "./descriptors.js";
|
|
2
|
+
export function definePlugin(spec) {
|
|
3
|
+
const slots = spec.slots || {};
|
|
4
|
+
const descriptors = {};
|
|
5
|
+
for (const slotName of Object.keys(slots)) {
|
|
6
|
+
descriptors[slotName] = {
|
|
7
|
+
slotName,
|
|
8
|
+
contextKey: getContextSymbol(spec.id, slotName),
|
|
9
|
+
accessorName: getAccessorName(slotName),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
return {
|
|
13
|
+
id: spec.id,
|
|
14
|
+
requires: spec.requires,
|
|
15
|
+
slots: slots,
|
|
16
|
+
settings: spec.settings,
|
|
17
|
+
overlays: spec.overlays,
|
|
18
|
+
contributions: spec.contributions,
|
|
19
|
+
descriptors: descriptors,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface SettingsFieldSchema {
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
type: "select" | "toggle" | "text" | "number" | "range" | "color" | "custom";
|
|
5
|
+
component?: unknown;
|
|
6
|
+
options?: {
|
|
7
|
+
value: unknown;
|
|
8
|
+
label: string;
|
|
9
|
+
}[];
|
|
10
|
+
min?: number;
|
|
11
|
+
max?: number;
|
|
12
|
+
step?: number;
|
|
13
|
+
target:
|
|
14
|
+
| {
|
|
15
|
+
type: "cell";
|
|
16
|
+
name: string;
|
|
17
|
+
}
|
|
18
|
+
| {
|
|
19
|
+
type: "store";
|
|
20
|
+
storeId: string;
|
|
21
|
+
property: string;
|
|
22
|
+
}
|
|
23
|
+
| {
|
|
24
|
+
type: "callback";
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export interface SettingsSchema {
|
|
28
|
+
id: string;
|
|
29
|
+
label: string;
|
|
30
|
+
icon?: string;
|
|
31
|
+
fields: SettingsFieldSchema[];
|
|
32
|
+
}
|
|
33
|
+
export declare function defineSettings(schema: SettingsSchema): SettingsSchema;
|