@happyvertical/smrt-ui 0.30.0
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/AGENTS.md +50 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +7 -0
- package/dist/actions/__tests__/ripple.test.js +28 -0
- package/dist/actions/permission.d.ts +34 -0
- package/dist/actions/permission.d.ts.map +1 -0
- package/dist/actions/permission.js +70 -0
- package/dist/actions/ripple.d.ts +7 -0
- package/dist/actions/ripple.d.ts.map +1 -0
- package/dist/actions/ripple.js +65 -0
- package/dist/components/calendar/Calendar.svelte +520 -0
- package/dist/components/calendar/Calendar.svelte.d.ts +17 -0
- package/dist/components/calendar/Calendar.svelte.d.ts.map +1 -0
- package/dist/components/calendar/DayView.svelte +389 -0
- package/dist/components/calendar/DayView.svelte.d.ts +13 -0
- package/dist/components/calendar/DayView.svelte.d.ts.map +1 -0
- package/dist/components/calendar/index.d.ts +6 -0
- package/dist/components/calendar/index.d.ts.map +1 -0
- package/dist/components/calendar/index.js +5 -0
- package/dist/components/chat/MessageBubble.svelte +126 -0
- package/dist/components/chat/MessageBubble.svelte.d.ts +30 -0
- package/dist/components/chat/MessageBubble.svelte.d.ts.map +1 -0
- package/dist/components/chat/ReactionPicker.svelte +89 -0
- package/dist/components/chat/ReactionPicker.svelte.d.ts +19 -0
- package/dist/components/chat/ReactionPicker.svelte.d.ts.map +1 -0
- package/dist/components/chat/TypingIndicator.svelte +90 -0
- package/dist/components/chat/TypingIndicator.svelte.d.ts +17 -0
- package/dist/components/chat/TypingIndicator.svelte.d.ts.map +1 -0
- package/dist/components/chat/__tests__/chat-primitives.test.js +67 -0
- package/dist/components/chat/index.d.ts +10 -0
- package/dist/components/chat/index.d.ts.map +1 -0
- package/dist/components/chat/index.js +9 -0
- package/dist/components/data/DataTable.svelte +519 -0
- package/dist/components/data/DataTable.svelte.d.ts +49 -0
- package/dist/components/data/DataTable.svelte.d.ts.map +1 -0
- package/dist/components/data/__tests__/DataTable.test.js +48 -0
- package/dist/components/data/__tests__/data-table-helpers.test.js +36 -0
- package/dist/components/data/index.d.ts +6 -0
- package/dist/components/data/index.d.ts.map +1 -0
- package/dist/components/data/index.js +5 -0
- package/dist/components/data/types.d.ts +104 -0
- package/dist/components/data/types.d.ts.map +1 -0
- package/dist/components/data/types.js +45 -0
- package/dist/components/display/ConfidenceBadge.svelte +142 -0
- package/dist/components/display/ConfidenceBadge.svelte.d.ts +25 -0
- package/dist/components/display/ConfidenceBadge.svelte.d.ts.map +1 -0
- package/dist/components/display/CurrencyDisplay.svelte +106 -0
- package/dist/components/display/CurrencyDisplay.svelte.d.ts +30 -0
- package/dist/components/display/CurrencyDisplay.svelte.d.ts.map +1 -0
- package/dist/components/display/DateDisplay.svelte +122 -0
- package/dist/components/display/DateDisplay.svelte.d.ts +24 -0
- package/dist/components/display/DateDisplay.svelte.d.ts.map +1 -0
- package/dist/components/display/Icon.svelte +77 -0
- package/dist/components/display/Icon.svelte.d.ts +28 -0
- package/dist/components/display/Icon.svelte.d.ts.map +1 -0
- package/dist/components/display/StatusBadge.svelte +256 -0
- package/dist/components/display/StatusBadge.svelte.d.ts +24 -0
- package/dist/components/display/StatusBadge.svelte.d.ts.map +1 -0
- package/dist/components/display/__tests__/ConfidenceBadge.test.js +96 -0
- package/dist/components/display/__tests__/CurrencyDisplay.test.js +114 -0
- package/dist/components/display/__tests__/DateDisplay.test.js +114 -0
- package/dist/components/display/__tests__/Icon.test.js +93 -0
- package/dist/components/display/__tests__/StatusBadge.test.js +98 -0
- package/dist/components/display/index.d.ts +10 -0
- package/dist/components/display/index.d.ts.map +1 -0
- package/dist/components/display/index.js +9 -0
- package/dist/components/display/types.d.ts +5 -0
- package/dist/components/display/types.d.ts.map +1 -0
- package/dist/components/display/types.js +4 -0
- package/dist/components/feedback/ConfirmDialog.svelte +226 -0
- package/dist/components/feedback/ConfirmDialog.svelte.d.ts +25 -0
- package/dist/components/feedback/ConfirmDialog.svelte.d.ts.map +1 -0
- package/dist/components/feedback/LoadingOverlay.svelte +281 -0
- package/dist/components/feedback/LoadingOverlay.svelte.d.ts +31 -0
- package/dist/components/feedback/LoadingOverlay.svelte.d.ts.map +1 -0
- package/dist/components/feedback/Modal.svelte +393 -0
- package/dist/components/feedback/Modal.svelte.d.ts +46 -0
- package/dist/components/feedback/Modal.svelte.d.ts.map +1 -0
- package/dist/components/feedback/ProgressBar.svelte +162 -0
- package/dist/components/feedback/ProgressBar.svelte.d.ts +21 -0
- package/dist/components/feedback/ProgressBar.svelte.d.ts.map +1 -0
- package/dist/components/feedback/__tests__/ConfirmDialog.test.js +111 -0
- package/dist/components/feedback/__tests__/LoadingOverlay.test.js +99 -0
- package/dist/components/feedback/__tests__/Modal.test.js +72 -0
- package/dist/components/feedback/__tests__/ProgressBar.test.js +89 -0
- package/dist/components/feedback/index.d.ts +8 -0
- package/dist/components/feedback/index.d.ts.map +1 -0
- package/dist/components/feedback/index.js +10 -0
- package/dist/components/layout/Container.svelte +53 -0
- package/dist/components/layout/Container.svelte.d.ts +11 -0
- package/dist/components/layout/Container.svelte.d.ts.map +1 -0
- package/dist/components/layout/EmptyState.svelte +187 -0
- package/dist/components/layout/EmptyState.svelte.d.ts +28 -0
- package/dist/components/layout/EmptyState.svelte.d.ts.map +1 -0
- package/dist/components/layout/Footer.svelte +63 -0
- package/dist/components/layout/Footer.svelte.d.ts +8 -0
- package/dist/components/layout/Footer.svelte.d.ts.map +1 -0
- package/dist/components/layout/Grid.svelte +241 -0
- package/dist/components/layout/Grid.svelte.d.ts +56 -0
- package/dist/components/layout/Grid.svelte.d.ts.map +1 -0
- package/dist/components/layout/Header.svelte +86 -0
- package/dist/components/layout/Header.svelte.d.ts +9 -0
- package/dist/components/layout/Header.svelte.d.ts.map +1 -0
- package/dist/components/layout/Masthead.svelte +219 -0
- package/dist/components/layout/Masthead.svelte.d.ts +13 -0
- package/dist/components/layout/Masthead.svelte.d.ts.map +1 -0
- package/dist/components/layout/PageHeader.svelte +131 -0
- package/dist/components/layout/PageHeader.svelte.d.ts +26 -0
- package/dist/components/layout/PageHeader.svelte.d.ts.map +1 -0
- package/dist/components/layout/SummaryCard.svelte +203 -0
- package/dist/components/layout/SummaryCard.svelte.d.ts +20 -0
- package/dist/components/layout/SummaryCard.svelte.d.ts.map +1 -0
- package/dist/components/layout/__tests__/Container.test.js +62 -0
- package/dist/components/layout/__tests__/EmptyState.test.js +83 -0
- package/dist/components/layout/__tests__/Footer.test.js +50 -0
- package/dist/components/layout/__tests__/Grid.test.js +121 -0
- package/dist/components/layout/__tests__/Header.test.js +48 -0
- package/dist/components/layout/__tests__/Masthead.test.js +93 -0
- package/dist/components/layout/__tests__/PageHeader.test.js +80 -0
- package/dist/components/layout/__tests__/SummaryCard.test.js +82 -0
- package/dist/components/layout/index.d.ts +12 -0
- package/dist/components/layout/index.d.ts.map +1 -0
- package/dist/components/layout/index.js +11 -0
- package/dist/components/memberships/MembershipCard.svelte +163 -0
- package/dist/components/memberships/MembershipCard.svelte.d.ts +12 -0
- package/dist/components/memberships/MembershipCard.svelte.d.ts.map +1 -0
- package/dist/components/memberships/MembershipList.svelte +98 -0
- package/dist/components/memberships/MembershipList.svelte.d.ts +19 -0
- package/dist/components/memberships/MembershipList.svelte.d.ts.map +1 -0
- package/dist/components/nav/FilterChips.svelte +152 -0
- package/dist/components/nav/FilterChips.svelte.d.ts +19 -0
- package/dist/components/nav/FilterChips.svelte.d.ts.map +1 -0
- package/dist/components/nav/Tabs.svelte +252 -0
- package/dist/components/nav/Tabs.svelte.d.ts +34 -0
- package/dist/components/nav/Tabs.svelte.d.ts.map +1 -0
- package/dist/components/nav/__tests__/FilterChips.test.js +94 -0
- package/dist/components/nav/__tests__/Tabs.test.js +128 -0
- package/dist/components/nav/index.d.ts +7 -0
- package/dist/components/nav/index.d.ts.map +1 -0
- package/dist/components/nav/index.js +6 -0
- package/dist/components/nav/types.d.ts +24 -0
- package/dist/components/nav/types.d.ts.map +1 -0
- package/dist/components/nav/types.js +4 -0
- package/dist/components/permissions/PermissionCheck.svelte +45 -0
- package/dist/components/permissions/PermissionCheck.svelte.d.ts +19 -0
- package/dist/components/permissions/PermissionCheck.svelte.d.ts.map +1 -0
- package/dist/components/roles/RoleBadge.svelte +84 -0
- package/dist/components/roles/RoleBadge.svelte.d.ts +13 -0
- package/dist/components/roles/RoleBadge.svelte.d.ts.map +1 -0
- package/dist/components/roles/RoleSelector.svelte +216 -0
- package/dist/components/roles/RoleSelector.svelte.d.ts +13 -0
- package/dist/components/roles/RoleSelector.svelte.d.ts.map +1 -0
- package/dist/components/theme/ThemeProvider.svelte +71 -0
- package/dist/components/theme/ThemeProvider.svelte.d.ts +10 -0
- package/dist/components/theme/ThemeProvider.svelte.d.ts.map +1 -0
- package/dist/components/theme/context.svelte.d.ts +15 -0
- package/dist/components/theme/context.svelte.d.ts.map +1 -0
- package/dist/components/theme/context.svelte.js +42 -0
- package/dist/components/theme/index.d.ts +3 -0
- package/dist/components/theme/index.d.ts.map +1 -0
- package/dist/components/theme/index.js +2 -0
- package/dist/components/ui/Avatar.svelte +167 -0
- package/dist/components/ui/Avatar.svelte.d.ts +26 -0
- package/dist/components/ui/Avatar.svelte.d.ts.map +1 -0
- package/dist/components/ui/Badge.svelte +70 -0
- package/dist/components/ui/Badge.svelte.d.ts +12 -0
- package/dist/components/ui/Badge.svelte.d.ts.map +1 -0
- package/dist/components/ui/Button.svelte +226 -0
- package/dist/components/ui/Button.svelte.d.ts +28 -0
- package/dist/components/ui/Button.svelte.d.ts.map +1 -0
- package/dist/components/ui/Card.svelte +122 -0
- package/dist/components/ui/Card.svelte.d.ts +15 -0
- package/dist/components/ui/Card.svelte.d.ts.map +1 -0
- package/dist/components/ui/Chip.svelte +167 -0
- package/dist/components/ui/Chip.svelte.d.ts +33 -0
- package/dist/components/ui/Chip.svelte.d.ts.map +1 -0
- package/dist/components/ui/Dropdown.svelte +250 -0
- package/dist/components/ui/Dropdown.svelte.d.ts +20 -0
- package/dist/components/ui/Dropdown.svelte.d.ts.map +1 -0
- package/dist/components/ui/Pagination.svelte +294 -0
- package/dist/components/ui/Pagination.svelte.d.ts +21 -0
- package/dist/components/ui/Pagination.svelte.d.ts.map +1 -0
- package/dist/components/ui/Skeleton.svelte +113 -0
- package/dist/components/ui/Skeleton.svelte.d.ts +24 -0
- package/dist/components/ui/Skeleton.svelte.d.ts.map +1 -0
- package/dist/components/ui/Tooltip.svelte +120 -0
- package/dist/components/ui/Tooltip.svelte.d.ts +24 -0
- package/dist/components/ui/Tooltip.svelte.d.ts.map +1 -0
- package/dist/components/ui/Tree.svelte +209 -0
- package/dist/components/ui/Tree.svelte.d.ts +17 -0
- package/dist/components/ui/Tree.svelte.d.ts.map +1 -0
- package/dist/components/ui/__tests__/Badge.test.js +76 -0
- package/dist/components/ui/__tests__/Button.test.js +69 -0
- package/dist/components/ui/__tests__/Card.test.js +103 -0
- package/dist/components/ui/__tests__/Pagination.test.js +99 -0
- package/dist/components/ui/__tests__/gap-primitives-interactive.test.js +112 -0
- package/dist/components/ui/__tests__/gap-primitives.test.js +84 -0
- package/dist/components/ui/index.d.ts +14 -0
- package/dist/components/ui/index.d.ts.map +1 -0
- package/dist/components/ui/index.js +18 -0
- package/dist/i18n/Trans.svelte +29 -0
- package/dist/i18n/Trans.svelte.d.ts +24 -0
- package/dist/i18n/Trans.svelte.d.ts.map +1 -0
- package/dist/i18n/__tests__/i18n.test.js +74 -0
- package/dist/i18n/__tests__/render-parity.spec.js +37 -0
- package/dist/i18n/context.svelte.d.ts +43 -0
- package/dist/i18n/context.svelte.d.ts.map +1 -0
- package/dist/i18n/context.svelte.js +69 -0
- package/dist/i18n/index.d.ts +17 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +24 -0
- package/dist/i18n/registry.d.ts +44 -0
- package/dist/i18n/registry.d.ts.map +1 -0
- package/dist/i18n/registry.js +60 -0
- package/dist/i18n/render.d.ts +22 -0
- package/dist/i18n/render.d.ts.map +1 -0
- package/dist/i18n/render.js +44 -0
- package/dist/i18n/strings.d.ts +7 -0
- package/dist/i18n/strings.d.ts.map +1 -0
- package/dist/i18n/strings.js +19 -0
- package/dist/i18n/strings.ui.d.ts +34 -0
- package/dist/i18n/strings.ui.d.ts.map +1 -0
- package/dist/i18n/strings.ui.js +44 -0
- package/dist/i18n/use-i18n.d.ts +20 -0
- package/dist/i18n/use-i18n.d.ts.map +1 -0
- package/dist/i18n/use-i18n.js +21 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/registry/index.d.ts +6 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +4 -0
- package/dist/registry/module-registry.d.ts +58 -0
- package/dist/registry/module-registry.d.ts.map +1 -0
- package/dist/registry/module-registry.js +94 -0
- package/dist/styles/index.d.ts +4 -0
- package/dist/styles/index.d.ts.map +1 -0
- package/dist/styles/index.js +6 -0
- package/dist/styles/tokens.css +76 -0
- package/dist/test-support/a11y.d.ts +16 -0
- package/dist/test-support/a11y.d.ts.map +1 -0
- package/dist/test-support/a11y.js +32 -0
- package/dist/test-support/setup.d.ts +11 -0
- package/dist/test-support/setup.d.ts.map +1 -0
- package/dist/test-support/setup.js +33 -0
- package/dist/theme/ThemeProvider.svelte +207 -0
- package/dist/theme/ThemeProvider.svelte.d.ts +22 -0
- package/dist/theme/ThemeProvider.svelte.d.ts.map +1 -0
- package/dist/theme/context.d.ts +49 -0
- package/dist/theme/context.d.ts.map +1 -0
- package/dist/theme/context.js +32 -0
- package/dist/theme/index.d.ts +7 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +9 -0
- package/dist/theme/tokens.d.ts +309 -0
- package/dist/theme/tokens.d.ts.map +1 -0
- package/dist/theme/tokens.js +418 -0
- package/dist/themes/CUSTOM_THEME_GUIDE.md +341 -0
- package/dist/themes/README.md +675 -0
- package/dist/themes/ThemeProvider.svelte +275 -0
- package/dist/themes/ThemeProvider.svelte.d.ts +24 -0
- package/dist/themes/ThemeProvider.svelte.d.ts.map +1 -0
- package/dist/themes/__tests__/css-generator.test.js +32 -0
- package/dist/themes/__tests__/registry.test.js +43 -0
- package/dist/themes/__tests__/token-aliases.test.js +176 -0
- package/dist/themes/components/ColorSchemeToggle.svelte +205 -0
- package/dist/themes/components/ColorSchemeToggle.svelte.d.ts +14 -0
- package/dist/themes/components/ColorSchemeToggle.svelte.d.ts.map +1 -0
- package/dist/themes/components/ThemeSwitcher.svelte +188 -0
- package/dist/themes/components/ThemeSwitcher.svelte.d.ts +14 -0
- package/dist/themes/components/ThemeSwitcher.svelte.d.ts.map +1 -0
- package/dist/themes/components/index.d.ts +8 -0
- package/dist/themes/components/index.d.ts.map +1 -0
- package/dist/themes/components/index.js +7 -0
- package/dist/themes/context.svelte.d.ts +30 -0
- package/dist/themes/context.svelte.d.ts.map +1 -0
- package/dist/themes/context.svelte.js +42 -0
- package/dist/themes/create-theme.d.ts +99 -0
- package/dist/themes/create-theme.d.ts.map +1 -0
- package/dist/themes/create-theme.js +389 -0
- package/dist/themes/css-generator.d.ts +44 -0
- package/dist/themes/css-generator.d.ts.map +1 -0
- package/dist/themes/css-generator.js +226 -0
- package/dist/themes/glass/index.d.ts +14 -0
- package/dist/themes/glass/index.d.ts.map +1 -0
- package/dist/themes/glass/index.js +286 -0
- package/dist/themes/index.d.ts +31 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +37 -0
- package/dist/themes/material/index.d.ts +13 -0
- package/dist/themes/material/index.d.ts.map +1 -0
- package/dist/themes/material/index.js +269 -0
- package/dist/themes/registry.d.ts +64 -0
- package/dist/themes/registry.d.ts.map +1 -0
- package/dist/themes/registry.js +122 -0
- package/dist/themes/shared.d.ts +78 -0
- package/dist/themes/shared.d.ts.map +1 -0
- package/dist/themes/shared.js +179 -0
- package/dist/themes/studio/index.d.ts +14 -0
- package/dist/themes/studio/index.d.ts.map +1 -0
- package/dist/themes/studio/index.js +270 -0
- package/dist/themes/styles/all.css +12 -0
- package/dist/themes/styles/glass.css +432 -0
- package/dist/themes/styles/index.d.ts +22 -0
- package/dist/themes/styles/index.d.ts.map +1 -0
- package/dist/themes/styles/index.js +23 -0
- package/dist/themes/styles/material.css +364 -0
- package/dist/themes/styles/studio.css +416 -0
- package/dist/themes/types.d.ts +273 -0
- package/dist/themes/types.d.ts.map +1 -0
- package/dist/themes/types.js +15 -0
- package/dist/types-generic.d.ts +75 -0
- package/dist/types-generic.d.ts.map +1 -0
- package/dist/types-generic.js +1 -0
- package/dist/utils/forms/__tests__/formatters.test.js +27 -0
- package/dist/utils/forms/formatters.d.ts +14 -0
- package/dist/utils/forms/formatters.d.ts.map +1 -0
- package/dist/utils/forms/formatters.js +77 -0
- package/dist/utils/import-optional.d.ts +5 -0
- package/dist/utils/import-optional.d.ts.map +1 -0
- package/dist/utils/import-optional.js +7 -0
- package/dist/utils/theme/__tests__/color.test.js +72 -0
- package/dist/utils/theme/__tests__/typography.test.js +11 -0
- package/dist/utils/theme/color.d.ts +70 -0
- package/dist/utils/theme/color.d.ts.map +1 -0
- package/dist/utils/theme/color.js +221 -0
- package/dist/utils/theme/typography.d.ts +27 -0
- package/dist/utils/theme/typography.d.ts.map +1 -0
- package/dist/utils/theme/typography.js +30 -0
- package/package.json +143 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @happyvertical/smrt-ui/i18n — client i18n layer (Sweep S13 #1418).
|
|
3
|
+
*
|
|
4
|
+
* Browser-safe. Provides `defineMessages` (register a package's English code
|
|
5
|
+
* defaults), `useI18n()` / `<Trans>` (read + render translations), and the
|
|
6
|
+
* context plumbing the `Provider` uses. The server-side snapshot builder lives
|
|
7
|
+
* on the `./i18n/server` subpath (it pulls the full languages resolver).
|
|
8
|
+
*
|
|
9
|
+
* See `docs/content/architecture/i18n.md` for the design.
|
|
10
|
+
*/
|
|
11
|
+
export { createI18nContext, getI18nContext, I18nStore, setI18nContext, tryGetI18nContext, } from './context.svelte.js';
|
|
12
|
+
export { clearRegisteredMessages, defineMessages, getRegisteredDefault, getRegisteredDefaults, } from './registry.js';
|
|
13
|
+
export { default as Trans } from './Trans.svelte';
|
|
14
|
+
// Side-effect: register smrt-ui's own primitive (`ui.*`) English code defaults
|
|
15
|
+
// (DataTable etc.) so a single `@happyvertical/smrt-ui/i18n` import makes every
|
|
16
|
+
// library primitive key resolvable — including in a server snapshot built
|
|
17
|
+
// without loading the components themselves. `strings.ui.js` is registered via
|
|
18
|
+
// the `M` re-export below; this covers the `strings.ts` catalog too.
|
|
19
|
+
import './strings.js';
|
|
20
|
+
// smrt-ui primitive (`ui.*`) English code-default catalog. Re-exported so
|
|
21
|
+
// consumers (e.g. smrt-svelte composites) can register the same defaults via a
|
|
22
|
+
// single `@happyvertical/smrt-ui/i18n` import.
|
|
23
|
+
export { M } from './strings.ui.js';
|
|
24
|
+
export { useI18n } from './use-i18n.js';
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-safe message-default registry (i18n, Sweep S13 #1418).
|
|
3
|
+
*
|
|
4
|
+
* `defineMessages` records a package's English code defaults in a process-global
|
|
5
|
+
* map. This module imports nothing from `@happyvertical/smrt-languages` — it is
|
|
6
|
+
* safe in any bundle (browser included). Two consumers read the map:
|
|
7
|
+
*
|
|
8
|
+
* - The client `$t` / `<Trans>` fall back to the registered default when no
|
|
9
|
+
* server snapshot is present (standalone components, tests), so a string is
|
|
10
|
+
* never blank.
|
|
11
|
+
* - The server `buildI18nSnapshot` (`./i18n/server`) seeds
|
|
12
|
+
* `@happyvertical/smrt-languages`'s `LanguageRegistry` from these defaults
|
|
13
|
+
* before resolving the override/tenant/locale chain.
|
|
14
|
+
*
|
|
15
|
+
* Keys follow `<package>.<component>.<descriptor>` (see the i18n ADR); smrt-svelte
|
|
16
|
+
* primitives use the `ui` namespace.
|
|
17
|
+
*/
|
|
18
|
+
/** A catalog of message keys → English code default templates. */
|
|
19
|
+
export type MessageCatalog = Record<string, string>;
|
|
20
|
+
/**
|
|
21
|
+
* Register a package's English code defaults. Idempotent for an identical
|
|
22
|
+
* template; throws if a key is redefined with a different default (mirrors
|
|
23
|
+
* `LanguageRegistry.register`, surfacing accidental key collisions loudly).
|
|
24
|
+
*
|
|
25
|
+
* Returns a typed **key map** (each key mapped to itself) so call sites get
|
|
26
|
+
* autocomplete and typo-safety, and so the import is a *used* binding that
|
|
27
|
+
* tree-shaking cannot drop (which would silently skip registration):
|
|
28
|
+
*
|
|
29
|
+
* ```ts
|
|
30
|
+
* export const M = defineMessages({ 'ui.data_table.empty': 'No data available' });
|
|
31
|
+
* // M['ui.data_table.empty'] === 'ui.data_table.empty' (typed as the literal)
|
|
32
|
+
* t(M['ui.data_table.empty']);
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function defineMessages<T extends MessageCatalog>(catalog: T): {
|
|
36
|
+
readonly [K in keyof T]: K;
|
|
37
|
+
};
|
|
38
|
+
/** The registered English default for a key, or `undefined`. */
|
|
39
|
+
export declare function getRegisteredDefault(key: string): string | undefined;
|
|
40
|
+
/** A snapshot of every registered `(key, English default)` pair. */
|
|
41
|
+
export declare function getRegisteredDefaults(): Record<string, string>;
|
|
42
|
+
/** Test-only: clear the registry so module-cache tests start clean. */
|
|
43
|
+
export declare function clearRegisteredMessages(): void;
|
|
44
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/i18n/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,kEAAkE;AAClE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAIpD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,cAAc,EACrD,OAAO,EAAE,CAAC,GACT;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;CAAE,CAgBhC;AAED,gEAAgE;AAChE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEpE;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE9D;AAED,uEAAuE;AACvE,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-safe message-default registry (i18n, Sweep S13 #1418).
|
|
3
|
+
*
|
|
4
|
+
* `defineMessages` records a package's English code defaults in a process-global
|
|
5
|
+
* map. This module imports nothing from `@happyvertical/smrt-languages` — it is
|
|
6
|
+
* safe in any bundle (browser included). Two consumers read the map:
|
|
7
|
+
*
|
|
8
|
+
* - The client `$t` / `<Trans>` fall back to the registered default when no
|
|
9
|
+
* server snapshot is present (standalone components, tests), so a string is
|
|
10
|
+
* never blank.
|
|
11
|
+
* - The server `buildI18nSnapshot` (`./i18n/server`) seeds
|
|
12
|
+
* `@happyvertical/smrt-languages`'s `LanguageRegistry` from these defaults
|
|
13
|
+
* before resolving the override/tenant/locale chain.
|
|
14
|
+
*
|
|
15
|
+
* Keys follow `<package>.<component>.<descriptor>` (see the i18n ADR); smrt-svelte
|
|
16
|
+
* primitives use the `ui` namespace.
|
|
17
|
+
*/
|
|
18
|
+
const defaults = new Map();
|
|
19
|
+
/**
|
|
20
|
+
* Register a package's English code defaults. Idempotent for an identical
|
|
21
|
+
* template; throws if a key is redefined with a different default (mirrors
|
|
22
|
+
* `LanguageRegistry.register`, surfacing accidental key collisions loudly).
|
|
23
|
+
*
|
|
24
|
+
* Returns a typed **key map** (each key mapped to itself) so call sites get
|
|
25
|
+
* autocomplete and typo-safety, and so the import is a *used* binding that
|
|
26
|
+
* tree-shaking cannot drop (which would silently skip registration):
|
|
27
|
+
*
|
|
28
|
+
* ```ts
|
|
29
|
+
* export const M = defineMessages({ 'ui.data_table.empty': 'No data available' });
|
|
30
|
+
* // M['ui.data_table.empty'] === 'ui.data_table.empty' (typed as the literal)
|
|
31
|
+
* t(M['ui.data_table.empty']);
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function defineMessages(catalog) {
|
|
35
|
+
const keys = {};
|
|
36
|
+
for (const [key, template] of Object.entries(catalog)) {
|
|
37
|
+
if (!key || key.trim() === '') {
|
|
38
|
+
throw new Error('defineMessages: message keys must be non-empty');
|
|
39
|
+
}
|
|
40
|
+
const existing = defaults.get(key);
|
|
41
|
+
if (existing !== undefined && existing !== template) {
|
|
42
|
+
throw new Error(`defineMessages: message "${key}" is already registered with a different default`);
|
|
43
|
+
}
|
|
44
|
+
defaults.set(key, template);
|
|
45
|
+
keys[key] = key;
|
|
46
|
+
}
|
|
47
|
+
return keys;
|
|
48
|
+
}
|
|
49
|
+
/** The registered English default for a key, or `undefined`. */
|
|
50
|
+
export function getRegisteredDefault(key) {
|
|
51
|
+
return defaults.get(key);
|
|
52
|
+
}
|
|
53
|
+
/** A snapshot of every registered `(key, English default)` pair. */
|
|
54
|
+
export function getRegisteredDefaults() {
|
|
55
|
+
return Object.fromEntries(defaults);
|
|
56
|
+
}
|
|
57
|
+
/** Test-only: clear the registry so module-cache tests start clean. */
|
|
58
|
+
export function clearRegisteredMessages() {
|
|
59
|
+
defaults.clear();
|
|
60
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-side `{var}` interpolation (i18n, Sweep S13 #1418).
|
|
3
|
+
*
|
|
4
|
+
* A small, dependency-free copy of `@happyvertical/smrt-languages`'s
|
|
5
|
+
* `renderTemplate`. The client deliberately does NOT import the languages
|
|
6
|
+
* package: it is an optional peer with a heavy server dependency tree
|
|
7
|
+
* (smrt-core, sql, ai, jobs…), and importing it from the always-bundled client
|
|
8
|
+
* path (`Provider` → `/i18n`) would force every smrt-svelte consumer — including
|
|
9
|
+
* downstream SvelteKit apps — to install that tree. The contract is tiny and
|
|
10
|
+
* stable, so the client owns it; `__tests__/render-parity.spec.ts` pins it
|
|
11
|
+
* against the canonical languages implementation so the two never drift.
|
|
12
|
+
*/
|
|
13
|
+
/** Variables substituted into `{var}` placeholders. */
|
|
14
|
+
export type LanguageVariables = Record<string, unknown>;
|
|
15
|
+
/**
|
|
16
|
+
* Render `{var}` placeholders against the supplied variables. Matches the
|
|
17
|
+
* languages resolver's contract: `Date` → ISO string, array/object → JSON,
|
|
18
|
+
* `null` / `undefined` → empty string; an empty/absent `variables` returns the
|
|
19
|
+
* template unchanged (fast path).
|
|
20
|
+
*/
|
|
21
|
+
export declare function renderTemplate(template: string, variables?: LanguageVariables): string;
|
|
22
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/i18n/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,uDAAuD;AACvD,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAMxD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,iBAAiB,GAC5B,MAAM,CAuBR"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-side `{var}` interpolation (i18n, Sweep S13 #1418).
|
|
3
|
+
*
|
|
4
|
+
* A small, dependency-free copy of `@happyvertical/smrt-languages`'s
|
|
5
|
+
* `renderTemplate`. The client deliberately does NOT import the languages
|
|
6
|
+
* package: it is an optional peer with a heavy server dependency tree
|
|
7
|
+
* (smrt-core, sql, ai, jobs…), and importing it from the always-bundled client
|
|
8
|
+
* path (`Provider` → `/i18n`) would force every smrt-svelte consumer — including
|
|
9
|
+
* downstream SvelteKit apps — to install that tree. The contract is tiny and
|
|
10
|
+
* stable, so the client owns it; `__tests__/render-parity.spec.ts` pins it
|
|
11
|
+
* against the canonical languages implementation so the two never drift.
|
|
12
|
+
*/
|
|
13
|
+
function isPlainObject(value) {
|
|
14
|
+
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Render `{var}` placeholders against the supplied variables. Matches the
|
|
18
|
+
* languages resolver's contract: `Date` → ISO string, array/object → JSON,
|
|
19
|
+
* `null` / `undefined` → empty string; an empty/absent `variables` returns the
|
|
20
|
+
* template unchanged (fast path).
|
|
21
|
+
*/
|
|
22
|
+
export function renderTemplate(template, variables) {
|
|
23
|
+
if (!variables || Object.keys(variables).length === 0) {
|
|
24
|
+
return template;
|
|
25
|
+
}
|
|
26
|
+
return template.replace(/\{([^{}]+)\}/g, (_match, rawKey) => {
|
|
27
|
+
const value = variables[rawKey.trim()];
|
|
28
|
+
if (value === undefined || value === null) {
|
|
29
|
+
return '';
|
|
30
|
+
}
|
|
31
|
+
if (value instanceof Date) {
|
|
32
|
+
return value.toISOString();
|
|
33
|
+
}
|
|
34
|
+
if (Array.isArray(value) || isPlainObject(value)) {
|
|
35
|
+
try {
|
|
36
|
+
return JSON.stringify(value);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return '';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return String(value);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const M: {
|
|
2
|
+
readonly 'ui.data_table.select_all': "ui.data_table.select_all";
|
|
3
|
+
readonly 'ui.data_table.select_row': "ui.data_table.select_row";
|
|
4
|
+
readonly 'ui.data_table.loading': "ui.data_table.loading";
|
|
5
|
+
readonly 'ui.data_table.empty': "ui.data_table.empty";
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=strings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../src/i18n/strings.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,CAAC;;;;;CAKZ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* smrt-svelte UI primitive message catalog (S13 #1418 pilot).
|
|
3
|
+
*
|
|
4
|
+
* English code defaults for strings baked into the library's own primitives.
|
|
5
|
+
* Keys use the `ui.` namespace (see the i18n ADR). Importing this module
|
|
6
|
+
* registers the defaults so `useI18n().t` / `<Trans>` render correctly even
|
|
7
|
+
* without a server snapshot; on the server, `buildI18nSnapshot` resolves these
|
|
8
|
+
* keys through the override/tenant/locale chain.
|
|
9
|
+
*
|
|
10
|
+
* `M` is a typed key map — `M['ui.data_table.empty']` is the key literal — so
|
|
11
|
+
* component call sites stay typo-safe.
|
|
12
|
+
*/
|
|
13
|
+
import { defineMessages } from './registry.js';
|
|
14
|
+
export const M = defineMessages({
|
|
15
|
+
'ui.data_table.select_all': 'Select all rows',
|
|
16
|
+
'ui.data_table.select_row': 'Select row',
|
|
17
|
+
'ui.data_table.loading': 'Loading...',
|
|
18
|
+
'ui.data_table.empty': 'No data available',
|
|
19
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* smrt-svelte `ui`-namespace message catalog (i18n, Sweep S13 #1418).
|
|
3
|
+
*
|
|
4
|
+
* English code defaults for the `ui`, `feedback`, `layout`, `memberships`,
|
|
5
|
+
* `module`, and `calendar` component primitives. Registered through
|
|
6
|
+
* `defineMessages` (see `./registry.ts`); keys follow `<package>.<component>.<descriptor>`
|
|
7
|
+
* with the `ui` namespace for smrt-svelte primitives.
|
|
8
|
+
*/
|
|
9
|
+
export declare const M: {
|
|
10
|
+
readonly 'ui.calendar.previous_month': "ui.calendar.previous_month";
|
|
11
|
+
readonly 'ui.calendar.next_month': "ui.calendar.next_month";
|
|
12
|
+
readonly 'ui.calendar.select_month': "ui.calendar.select_month";
|
|
13
|
+
readonly 'ui.calendar.select_year': "ui.calendar.select_year";
|
|
14
|
+
readonly 'ui.day_view.back_to_calendar': "ui.day_view.back_to_calendar";
|
|
15
|
+
readonly 'ui.day_view.no_events': "ui.day_view.no_events";
|
|
16
|
+
readonly 'ui.modal.close': "ui.modal.close";
|
|
17
|
+
readonly 'ui.progress_bar.label': "ui.progress_bar.label";
|
|
18
|
+
readonly 'ui.progress_bar.over_by': "ui.progress_bar.over_by";
|
|
19
|
+
readonly 'ui.footer.all_rights_reserved': "ui.footer.all_rights_reserved";
|
|
20
|
+
readonly 'ui.masthead.home': "ui.masthead.home";
|
|
21
|
+
readonly 'ui.masthead.primary_nav': "ui.masthead.primary_nav";
|
|
22
|
+
readonly 'ui.masthead.mobile_nav': "ui.masthead.mobile_nav";
|
|
23
|
+
readonly 'ui.membership_card.change_role': "ui.membership_card.change_role";
|
|
24
|
+
readonly 'ui.membership_list.loading': "ui.membership_list.loading";
|
|
25
|
+
readonly 'ui.module_panel.component_not_registered': "ui.module_panel.component_not_registered";
|
|
26
|
+
readonly 'ui.module_panel.register_hint': "ui.module_panel.register_hint";
|
|
27
|
+
readonly 'ui.pagination.first_page': "ui.pagination.first_page";
|
|
28
|
+
readonly 'ui.pagination.previous_page': "ui.pagination.previous_page";
|
|
29
|
+
readonly 'ui.pagination.page_current': "ui.pagination.page_current";
|
|
30
|
+
readonly 'ui.pagination.go_to_page': "ui.pagination.go_to_page";
|
|
31
|
+
readonly 'ui.pagination.next_page': "ui.pagination.next_page";
|
|
32
|
+
readonly 'ui.pagination.last_page': "ui.pagination.last_page";
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=strings.ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strings.ui.d.ts","sourceRoot":"","sources":["../../src/i18n/strings.ui.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CA4CZ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* smrt-svelte `ui`-namespace message catalog (i18n, Sweep S13 #1418).
|
|
3
|
+
*
|
|
4
|
+
* English code defaults for the `ui`, `feedback`, `layout`, `memberships`,
|
|
5
|
+
* `module`, and `calendar` component primitives. Registered through
|
|
6
|
+
* `defineMessages` (see `./registry.ts`); keys follow `<package>.<component>.<descriptor>`
|
|
7
|
+
* with the `ui` namespace for smrt-svelte primitives.
|
|
8
|
+
*/
|
|
9
|
+
import { defineMessages } from './registry.js';
|
|
10
|
+
export const M = defineMessages({
|
|
11
|
+
// calendar/Calendar.svelte
|
|
12
|
+
'ui.calendar.previous_month': 'Previous month',
|
|
13
|
+
'ui.calendar.next_month': 'Next month',
|
|
14
|
+
'ui.calendar.select_month': 'Select month',
|
|
15
|
+
'ui.calendar.select_year': 'Select year',
|
|
16
|
+
// calendar/DayView.svelte
|
|
17
|
+
'ui.day_view.back_to_calendar': 'Back to Calendar',
|
|
18
|
+
'ui.day_view.no_events': 'No events scheduled for this day',
|
|
19
|
+
// feedback/Modal.svelte
|
|
20
|
+
'ui.modal.close': 'Close modal',
|
|
21
|
+
// feedback/ProgressBar.svelte
|
|
22
|
+
'ui.progress_bar.label': 'Progress',
|
|
23
|
+
'ui.progress_bar.over_by': 'Over by {amount}',
|
|
24
|
+
// layout/Footer.svelte
|
|
25
|
+
'ui.footer.all_rights_reserved': 'All rights reserved.',
|
|
26
|
+
// layout/Masthead.svelte
|
|
27
|
+
'ui.masthead.home': 'Home',
|
|
28
|
+
'ui.masthead.primary_nav': 'Primary',
|
|
29
|
+
'ui.masthead.mobile_nav': 'Mobile',
|
|
30
|
+
// memberships/MembershipCard.svelte
|
|
31
|
+
'ui.membership_card.change_role': 'Change Role',
|
|
32
|
+
// memberships/MembershipList.svelte
|
|
33
|
+
'ui.membership_list.loading': 'Loading memberships...',
|
|
34
|
+
// module/ModulePanel.svelte
|
|
35
|
+
'ui.module_panel.component_not_registered': 'Component not registered',
|
|
36
|
+
'ui.module_panel.register_hint': "Import the module's Svelte package to register components.",
|
|
37
|
+
// ui/Pagination.svelte
|
|
38
|
+
'ui.pagination.first_page': 'First page',
|
|
39
|
+
'ui.pagination.previous_page': 'Previous page',
|
|
40
|
+
'ui.pagination.page_current': 'Page {page}, current',
|
|
41
|
+
'ui.pagination.go_to_page': 'Go to page {page}',
|
|
42
|
+
'ui.pagination.next_page': 'Next page',
|
|
43
|
+
'ui.pagination.last_page': 'Last page ({totalPages})',
|
|
44
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `useI18n()` — the component-facing accessor for translations (S13 #1418).
|
|
3
|
+
*
|
|
4
|
+
* Returns the active i18n store, exposing `t(key, vars)` and a reactive
|
|
5
|
+
* `locale`. Safe to call outside a `Provider`: it falls back to a default store
|
|
6
|
+
* that resolves through registered English defaults, so primitives stay usable
|
|
7
|
+
* in isolation and in tests.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```svelte
|
|
11
|
+
* <script lang="ts">
|
|
12
|
+
* import { useI18n } from '@happyvertical/smrt-ui/i18n';
|
|
13
|
+
* const { t } = useI18n();
|
|
14
|
+
* </script>
|
|
15
|
+
* <input placeholder={t('chat.message_input.placeholder')} />
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
import { type I18nStore } from './context.svelte.js';
|
|
19
|
+
export declare function useI18n(): I18nStore;
|
|
20
|
+
//# sourceMappingURL=use-i18n.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-i18n.d.ts","sourceRoot":"","sources":["../../src/i18n/use-i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErE,wBAAgB,OAAO,IAAI,SAAS,CAEnC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `useI18n()` — the component-facing accessor for translations (S13 #1418).
|
|
3
|
+
*
|
|
4
|
+
* Returns the active i18n store, exposing `t(key, vars)` and a reactive
|
|
5
|
+
* `locale`. Safe to call outside a `Provider`: it falls back to a default store
|
|
6
|
+
* that resolves through registered English defaults, so primitives stay usable
|
|
7
|
+
* in isolation and in tests.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```svelte
|
|
11
|
+
* <script lang="ts">
|
|
12
|
+
* import { useI18n } from '@happyvertical/smrt-ui/i18n';
|
|
13
|
+
* const { t } = useI18n();
|
|
14
|
+
* </script>
|
|
15
|
+
* <input placeholder={t('chat.message_input.placeholder')} />
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
import { getI18nContext } from './context.svelte.js';
|
|
19
|
+
export function useI18n() {
|
|
20
|
+
return getI18nContext();
|
|
21
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @happyvertical/smrt-ui
|
|
3
|
+
*
|
|
4
|
+
* Domain-agnostic Svelte 5 UI runtime for SMRT: generic primitives, the i18n
|
|
5
|
+
* client, the theme system, and the module UI registry. Depends only on
|
|
6
|
+
* `svelte` (peer) and `@happyvertical/smrt-types` — no smrt domain package — so
|
|
7
|
+
* domain packages can consume the UI runtime without taking a dependency on the
|
|
8
|
+
* top-level `@happyvertical/smrt-svelte` integration layer.
|
|
9
|
+
*/
|
|
10
|
+
export { hasAllPermissions, hasAnyPermission, hasPermission, permission, } from './actions/permission.js';
|
|
11
|
+
export { ripple } from './actions/ripple.js';
|
|
12
|
+
export * from './components/calendar/index.js';
|
|
13
|
+
export * from './components/data/index.js';
|
|
14
|
+
export * from './components/display/index.js';
|
|
15
|
+
export * from './components/feedback/index.js';
|
|
16
|
+
export * from './components/layout/index.js';
|
|
17
|
+
export { default as MembershipCard } from './components/memberships/MembershipCard.svelte';
|
|
18
|
+
export { default as MembershipList } from './components/memberships/MembershipList.svelte';
|
|
19
|
+
export * from './components/nav/index.js';
|
|
20
|
+
export { default as PermissionCheck } from './components/permissions/PermissionCheck.svelte';
|
|
21
|
+
export { default as RoleBadge } from './components/roles/RoleBadge.svelte';
|
|
22
|
+
export { default as RoleSelector } from './components/roles/RoleSelector.svelte';
|
|
23
|
+
export type { ThemeMode } from './components/theme/index.js';
|
|
24
|
+
export * from './components/ui/index.js';
|
|
25
|
+
export * from './registry/index.js';
|
|
26
|
+
export * from './theme/index.js';
|
|
27
|
+
export type * from './types-generic.js';
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,UAAU,GACX,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,cAAc,gCAAgC,CAAC;AAE/C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,gCAAgC,CAAC;AAE/C,cAAc,8BAA8B,CAAC;AAE7C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAE3F,cAAc,2BAA2B,CAAC;AAE1C,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAE7F,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAEjF,YAAY,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,cAAc,0BAA0B,CAAC;AAEzC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,kBAAkB,CAAC;AAEjC,mBAAmB,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @happyvertical/smrt-ui
|
|
3
|
+
*
|
|
4
|
+
* Domain-agnostic Svelte 5 UI runtime for SMRT: generic primitives, the i18n
|
|
5
|
+
* client, the theme system, and the module UI registry. Depends only on
|
|
6
|
+
* `svelte` (peer) and `@happyvertical/smrt-types` — no smrt domain package — so
|
|
7
|
+
* domain packages can consume the UI runtime without taking a dependency on the
|
|
8
|
+
* top-level `@happyvertical/smrt-svelte` integration layer.
|
|
9
|
+
*/
|
|
10
|
+
// Actions
|
|
11
|
+
export { hasAllPermissions, hasAnyPermission, hasPermission, permission, } from './actions/permission.js';
|
|
12
|
+
export { ripple } from './actions/ripple.js';
|
|
13
|
+
// Calendar components
|
|
14
|
+
export * from './components/calendar/index.js';
|
|
15
|
+
// Data components
|
|
16
|
+
export * from './components/data/index.js';
|
|
17
|
+
// Display components
|
|
18
|
+
export * from './components/display/index.js';
|
|
19
|
+
// Feedback components
|
|
20
|
+
export * from './components/feedback/index.js';
|
|
21
|
+
// Layout components
|
|
22
|
+
export * from './components/layout/index.js';
|
|
23
|
+
// Membership components (domain-agnostic — typed against smrt-types contracts)
|
|
24
|
+
export { default as MembershipCard } from './components/memberships/MembershipCard.svelte';
|
|
25
|
+
export { default as MembershipList } from './components/memberships/MembershipList.svelte';
|
|
26
|
+
// Navigation components
|
|
27
|
+
export * from './components/nav/index.js';
|
|
28
|
+
// Permission components
|
|
29
|
+
export { default as PermissionCheck } from './components/permissions/PermissionCheck.svelte';
|
|
30
|
+
// Role components (domain-agnostic — typed against smrt-types contracts)
|
|
31
|
+
export { default as RoleBadge } from './components/roles/RoleBadge.svelte';
|
|
32
|
+
export { default as RoleSelector } from './components/roles/RoleSelector.svelte';
|
|
33
|
+
// UI components
|
|
34
|
+
export * from './components/ui/index.js';
|
|
35
|
+
// Module UI registry
|
|
36
|
+
export * from './registry/index.js';
|
|
37
|
+
// Theme system
|
|
38
|
+
export * from './theme/index.js';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry exports for SMRT module UI components
|
|
3
|
+
*/
|
|
4
|
+
export type { ModuleComponentType, ModuleUIBaseProps, ModuleUIRegistryInterface, ModuleUISlot, SmrtModuleMeta, } from '@happyvertical/smrt-types';
|
|
5
|
+
export { createModuleUIRegistry, ModuleUIRegistry } from './module-registry.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,EACzB,YAAY,EACZ,cAAc,GACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModuleUIRegistry - Global registry for module UI components
|
|
3
|
+
*
|
|
4
|
+
* This mirrors the AgentUIRegistry pattern from @happyvertical/smrt-agents
|
|
5
|
+
* but for general SMRT modules that want to provide Svelte UI components.
|
|
6
|
+
*
|
|
7
|
+
* @example Registering components (in module's svelte subpath)
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // packages/commerce/src/svelte/index.ts
|
|
10
|
+
* import { ModuleUIRegistry } from '@happyvertical/smrt-ui/registry';
|
|
11
|
+
* import { COMMERCE_MODULE_META } from '../ui.js';
|
|
12
|
+
* import InvoiceCard from './components/InvoiceCard.svelte';
|
|
13
|
+
*
|
|
14
|
+
* ModuleUIRegistry.registerModule(COMMERCE_MODULE_META);
|
|
15
|
+
* ModuleUIRegistry.register('@happyvertical/smrt-commerce', 'invoice-card', InvoiceCard);
|
|
16
|
+
*
|
|
17
|
+
* export { InvoiceCard };
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @example Using components (in host app)
|
|
21
|
+
* ```typescript
|
|
22
|
+
* // SvelteKit app
|
|
23
|
+
* import { ModuleUIRegistry } from '@happyvertical/smrt-ui/registry';
|
|
24
|
+
* import '@happyvertical/smrt-commerce/svelte'; // Auto-registers components
|
|
25
|
+
*
|
|
26
|
+
* const InvoiceCard = ModuleUIRegistry.get('@happyvertical/smrt-commerce', 'invoice-card');
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
import type { ModuleUIRegistryInterface } from '@happyvertical/smrt-types';
|
|
30
|
+
/**
|
|
31
|
+
* Create a new module UI registry
|
|
32
|
+
*
|
|
33
|
+
* Follows the same pattern as createUIRegistry() in smrt-agents.
|
|
34
|
+
*/
|
|
35
|
+
export declare function createModuleUIRegistry(): ModuleUIRegistryInterface;
|
|
36
|
+
/**
|
|
37
|
+
* Global ModuleUIRegistry singleton
|
|
38
|
+
*
|
|
39
|
+
* Module UI packages register their components here at import time,
|
|
40
|
+
* enabling discovery by host applications.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* // In module svelte package (e.g., @happyvertical/smrt-commerce/svelte)
|
|
45
|
+
* import { ModuleUIRegistry } from '@happyvertical/smrt-ui/registry';
|
|
46
|
+
* import InvoiceCard from './InvoiceCard.svelte';
|
|
47
|
+
*
|
|
48
|
+
* ModuleUIRegistry.register('@happyvertical/smrt-commerce', 'invoice-card', InvoiceCard);
|
|
49
|
+
*
|
|
50
|
+
* // In host SvelteKit app
|
|
51
|
+
* import { ModuleUIRegistry } from '@happyvertical/smrt-ui/registry';
|
|
52
|
+
* import '@happyvertical/smrt-commerce/svelte'; // Registers components
|
|
53
|
+
*
|
|
54
|
+
* const Component = ModuleUIRegistry.get('@happyvertical/smrt-commerce', 'invoice-card');
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare const ModuleUIRegistry: ModuleUIRegistryInterface;
|
|
58
|
+
//# sourceMappingURL=module-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-registry.d.ts","sourceRoot":"","sources":["../../src/registry/module-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAEV,yBAAyB,EAE1B,MAAM,2BAA2B,CAAC;AAEnC;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,yBAAyB,CAiDlE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,gBAAgB,EAAE,yBACL,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModuleUIRegistry - Global registry for module UI components
|
|
3
|
+
*
|
|
4
|
+
* This mirrors the AgentUIRegistry pattern from @happyvertical/smrt-agents
|
|
5
|
+
* but for general SMRT modules that want to provide Svelte UI components.
|
|
6
|
+
*
|
|
7
|
+
* @example Registering components (in module's svelte subpath)
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // packages/commerce/src/svelte/index.ts
|
|
10
|
+
* import { ModuleUIRegistry } from '@happyvertical/smrt-ui/registry';
|
|
11
|
+
* import { COMMERCE_MODULE_META } from '../ui.js';
|
|
12
|
+
* import InvoiceCard from './components/InvoiceCard.svelte';
|
|
13
|
+
*
|
|
14
|
+
* ModuleUIRegistry.registerModule(COMMERCE_MODULE_META);
|
|
15
|
+
* ModuleUIRegistry.register('@happyvertical/smrt-commerce', 'invoice-card', InvoiceCard);
|
|
16
|
+
*
|
|
17
|
+
* export { InvoiceCard };
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @example Using components (in host app)
|
|
21
|
+
* ```typescript
|
|
22
|
+
* // SvelteKit app
|
|
23
|
+
* import { ModuleUIRegistry } from '@happyvertical/smrt-ui/registry';
|
|
24
|
+
* import '@happyvertical/smrt-commerce/svelte'; // Auto-registers components
|
|
25
|
+
*
|
|
26
|
+
* const InvoiceCard = ModuleUIRegistry.get('@happyvertical/smrt-commerce', 'invoice-card');
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Create a new module UI registry
|
|
31
|
+
*
|
|
32
|
+
* Follows the same pattern as createUIRegistry() in smrt-agents.
|
|
33
|
+
*/
|
|
34
|
+
export function createModuleUIRegistry() {
|
|
35
|
+
// biome-ignore lint/suspicious/noExplicitAny: ComponentType needs any
|
|
36
|
+
const components = new Map();
|
|
37
|
+
const modules = new Map();
|
|
38
|
+
const makeKey = (moduleName, slotId) => `${moduleName}:${slotId}`;
|
|
39
|
+
return {
|
|
40
|
+
register(moduleName, slotId, component) {
|
|
41
|
+
components.set(makeKey(moduleName, slotId), component);
|
|
42
|
+
},
|
|
43
|
+
get(moduleName, slotId) {
|
|
44
|
+
return components.get(makeKey(moduleName, slotId));
|
|
45
|
+
},
|
|
46
|
+
has(moduleName, slotId) {
|
|
47
|
+
return components.has(makeKey(moduleName, slotId));
|
|
48
|
+
},
|
|
49
|
+
getSlots(moduleName) {
|
|
50
|
+
const prefix = `${moduleName}:`;
|
|
51
|
+
return Array.from(components.keys())
|
|
52
|
+
.filter((k) => k.startsWith(prefix))
|
|
53
|
+
.map((k) => k.slice(prefix.length));
|
|
54
|
+
},
|
|
55
|
+
getModules() {
|
|
56
|
+
return Array.from(modules.keys());
|
|
57
|
+
},
|
|
58
|
+
getModuleMeta(moduleName) {
|
|
59
|
+
return modules.get(moduleName);
|
|
60
|
+
},
|
|
61
|
+
registerModule(meta) {
|
|
62
|
+
modules.set(meta.name, meta);
|
|
63
|
+
},
|
|
64
|
+
unregister(moduleName, slotId) {
|
|
65
|
+
return components.delete(makeKey(moduleName, slotId));
|
|
66
|
+
},
|
|
67
|
+
clear() {
|
|
68
|
+
components.clear();
|
|
69
|
+
modules.clear();
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Global ModuleUIRegistry singleton
|
|
75
|
+
*
|
|
76
|
+
* Module UI packages register their components here at import time,
|
|
77
|
+
* enabling discovery by host applications.
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* // In module svelte package (e.g., @happyvertical/smrt-commerce/svelte)
|
|
82
|
+
* import { ModuleUIRegistry } from '@happyvertical/smrt-ui/registry';
|
|
83
|
+
* import InvoiceCard from './InvoiceCard.svelte';
|
|
84
|
+
*
|
|
85
|
+
* ModuleUIRegistry.register('@happyvertical/smrt-commerce', 'invoice-card', InvoiceCard);
|
|
86
|
+
*
|
|
87
|
+
* // In host SvelteKit app
|
|
88
|
+
* import { ModuleUIRegistry } from '@happyvertical/smrt-ui/registry';
|
|
89
|
+
* import '@happyvertical/smrt-commerce/svelte'; // Registers components
|
|
90
|
+
*
|
|
91
|
+
* const Component = ModuleUIRegistry.get('@happyvertical/smrt-commerce', 'invoice-card');
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export const ModuleUIRegistry = createModuleUIRegistry();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/styles/index.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|