themelia-ui 3.0.0 → 3.2.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/skills/themelia-ui/SKILL.md +60 -33
- package/.agents/skills/themelia-ui/manifest.json +23 -0
- package/.agents/skills/themelia-ui/references/api-compatibility.md +5 -4
- package/.agents/skills/themelia-ui/references/blocks.md +123 -0
- package/.agents/skills/themelia-ui/references/composition-ladder.md +8 -8
- package/.agents/skills/themelia-ui/references/composition.md +100 -19
- package/.agents/skills/themelia-ui/references/forms.md +23 -3
- package/.agents/skills/themelia-ui/references/framework-wiring.md +41 -13
- package/.agents/skills/themelia-ui/references/i18n.md +4 -2
- package/.agents/skills/themelia-ui/references/imports.md +104 -104
- package/.agents/skills/themelia-ui/references/installation.md +60 -31
- package/.agents/skills/themelia-ui/references/migration.md +156 -5
- package/.agents/skills/themelia-ui/references/provider-and-scoping.md +37 -25
- package/.agents/skills/themelia-ui/references/reference-workflows.md +43 -0
- package/.agents/skills/themelia-ui/references/structure-and-spacing.md +147 -0
- package/.agents/skills/themelia-ui/references/theming.md +174 -131
- package/.agents/skills/themelia-ui/references/troubleshooting.md +88 -30
- package/.agents/skills/themelia-ui/references/verification.md +60 -5
- package/CHANGELOG.md +212 -0
- package/README.md +48 -60
- package/dist/accordion-CHuzMmWL.js +143 -0
- package/dist/{action-menu-BNLURfMK.js → action-menu-BwiL_F6I.js} +35 -33
- package/dist/{alert-dialog-BMVo6Z-8.js → alert-dialog-Cg2HhuBe.js} +1 -1
- package/dist/avatar-Dc_BNYfB.js +93 -0
- package/dist/badge-VlJVZjdm.js +45 -0
- package/dist/base/accordion.js +1 -1
- package/dist/base/action-menu.js +1 -1
- package/dist/base/alert-dialog.js +1 -1
- package/dist/base/aspect-ratio.js +3 -1
- package/dist/base/avatar.js +1 -1
- package/dist/base/badge.js +2 -2
- package/dist/base/batch-action-bar.js +1 -1
- package/dist/base/buttons.js +1 -1
- package/dist/base/cards.js +1 -1
- package/dist/base/carousel.js +6 -4
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +1 -1
- package/dist/base/combobox.js +1 -1
- package/dist/base/command.js +1 -1
- package/dist/base/context-menu.js +22 -21
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +1 -1
- package/dist/base/dialog.js +1 -1
- package/dist/base/display.js +1 -1
- package/dist/base/dropdown-menu.js +1 -1
- package/dist/base/feedback.js +1 -1
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +1 -1
- package/dist/base/hover-card.js +26 -23
- package/dist/base/input-group.js +1 -1
- package/dist/base/item.js +1 -1
- package/dist/base/label.js +1 -1
- package/dist/base/menubar.js +20 -14
- package/dist/base/navigation-menu.js +47 -38
- package/dist/base/navigation.js +1 -1
- package/dist/base/otp-input.js +36 -30
- package/dist/base/overlay.js +1 -1
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/qr-code.js +51 -47
- package/dist/base/repeaters.js +1 -1
- package/dist/base/resizable.js +2 -0
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +1 -1
- package/dist/base/structure.js +1 -1
- package/dist/base/table.js +1 -1
- package/dist/base/text-inputs.js +1 -1
- package/dist/base/timeline.js +1 -1
- package/dist/base/toaster.js +1 -1
- package/dist/base/toggle.js +21 -15
- package/dist/base/toolbar.js +1 -1
- package/dist/base/tooltip.js +1 -1
- package/dist/base/typography.js +2 -2
- package/dist/base/upload.js +1 -1
- package/dist/base/value-inputs.js +1 -1
- package/dist/{batch-action-bar-BZYNKXdV.js → batch-action-bar-DZVMVW83.js} +11 -8
- package/dist/{admin/patterns → blocks/admin}/access.js +79 -76
- package/dist/blocks/admin/commerce.js +2493 -0
- package/dist/{patterns → blocks}/analytics.js +312 -303
- package/dist/{patterns → blocks}/onboarding.js +27 -23
- package/dist/{patterns → blocks}/timelines.js +1 -1
- package/dist/buttons-BX2JfL5X.js +173 -0
- package/dist/cards-Ddhz43Bz.js +279 -0
- package/dist/chart-BkK3Xm10.js +201 -0
- package/dist/choice-inputs-NwRxvmZN.js +694 -0
- package/dist/combobox-519ubijc.js +292 -0
- package/dist/command-JjApYFds.js +156 -0
- package/dist/comments-CCQ2QRaU.js +1443 -0
- package/dist/components/base/action-menu/action-menu.d.ts +1 -1
- package/dist/components/base/action-menu/action-menu.types.d.ts +2 -2
- package/dist/components/base/avatar/avatar.d.ts +5 -2
- package/dist/components/base/badge/badge.d.ts +10 -10
- package/dist/components/base/badge/badge.variants.d.ts +1 -2
- package/dist/components/base/badge/index.d.ts +1 -2
- package/dist/components/base/buttons/button.d.ts +9 -8
- package/dist/components/base/buttons/button.types.d.ts +2 -2
- package/dist/components/base/buttons/index.d.ts +1 -1
- package/dist/components/base/buttons/text-button.d.ts +1 -1
- package/dist/components/base/cards/card-actions.d.ts +1 -1
- package/dist/components/base/cards/card.d.ts +3 -1
- package/dist/components/base/cards/partials/card-header.d.ts +2 -1
- package/dist/components/base/choice-inputs/choice.types.d.ts +2 -2
- package/dist/components/base/choice-inputs/partials/choice-parts.d.ts +3 -3
- package/dist/components/base/command/command.d.ts +5 -2
- package/dist/components/base/display/icon-badge.d.ts +5 -3
- package/dist/components/base/display/index.d.ts +1 -1
- package/dist/components/base/display/metadata-list.d.ts +6 -6
- package/dist/components/base/display/metadata-value.d.ts +1 -1
- package/dist/components/base/display/separator.d.ts +2 -2
- package/dist/components/base/feedback/alert.d.ts +3 -2
- package/dist/components/base/feedback/empty.d.ts +5 -4
- package/dist/components/base/feedback/progress-circle.d.ts +2 -2
- package/dist/components/base/feedback/progress.d.ts +3 -1
- package/dist/components/base/forms/form-field.d.ts +2 -2
- package/dist/components/base/input-group/input-group.d.ts +8 -10
- package/dist/components/base/item/item.d.ts +2 -2
- package/dist/components/base/overlay/index.d.ts +1 -1
- package/dist/components/base/overlay/overlay.types.d.ts +7 -5
- package/dist/components/base/qr-code/qr-code.d.ts +4 -4
- package/dist/components/base/sheet/sheet.d.ts +1 -1
- package/dist/components/base/sidebar/sidebar.d.ts +9 -13
- package/dist/components/base/spinner/spinner.d.ts +2 -2
- package/dist/components/base/structure/adaptive-grid.d.ts +3 -3
- package/dist/components/base/structure/bleed.d.ts +4 -2
- package/dist/components/base/structure/grid.d.ts +10 -4
- package/dist/components/base/structure/index.d.ts +1 -1
- package/dist/components/base/structure/split.d.ts +4 -3
- package/dist/components/base/structure/stack.d.ts +5 -5
- package/dist/components/base/structure/structure.maps.d.ts +2 -1
- package/dist/components/base/structure/structure.types.d.ts +10 -4
- package/dist/components/base/toggle/toggle.d.ts +2 -2
- package/dist/components/base/toolbar/toolbar.d.ts +3 -3
- package/dist/components/base/typography/index.d.ts +2 -0
- package/dist/components/base/typography/rich-text/rich-text.variants.d.ts +9 -0
- package/dist/components/base/typography/text/index.d.ts +1 -0
- package/dist/components/base/typography/text/text.d.ts +15 -8
- package/dist/components/base/typography/text/text.variants.d.ts +41 -0
- package/dist/components/base/value-inputs/color-input.d.ts +1 -7
- package/dist/components/base/value-inputs/slider.d.ts +2 -7
- package/dist/components/{admin/patterns → blocks/admin}/commerce/vendor-profile.d.ts +2 -1
- package/dist/components/{patterns → blocks}/analytics/analytics.strings.d.ts +2 -5
- package/dist/components/features/actions/action-adapters.d.ts +3 -3
- package/dist/components/features/actions/actions.types.d.ts +3 -5
- package/dist/components/features/actions/index.d.ts +1 -1
- package/dist/components/features/activities/activities-feed.d.ts +1 -1
- package/dist/components/features/activities/activities.types.d.ts +4 -4
- package/dist/components/features/activities/activity-parts.d.ts +3 -3
- package/dist/components/features/activities/activity-row.d.ts +4 -4
- package/dist/components/features/activities/index.d.ts +1 -1
- package/dist/components/features/ai-chat/ai-chat.types.d.ts +10 -3
- package/dist/components/features/ai-chat/ai-message-surfaces.d.ts +1 -1
- package/dist/components/features/ai-chat/ai-work-surfaces.d.ts +1 -1
- package/dist/components/features/combobox/combobox.strings.d.ts +2 -2
- package/dist/components/features/combobox/fetching-combobox.d.ts +2 -1
- package/dist/components/features/combobox/resource-combobox.d.ts +3 -0
- package/dist/components/features/combobox/use-suggestions.d.ts +7 -0
- package/dist/components/features/event-calendar/event-calendar.types.d.ts +3 -0
- package/dist/components/features/media-library/index.d.ts +1 -1
- package/dist/components/features/media-library/media-library-parts.d.ts +4 -3
- package/dist/components/features/media-library/media-library-views.d.ts +4 -3
- package/dist/components/features/media-library/media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.strings.d.ts +12 -13
- package/dist/components/features/media-library/media-library.types.d.ts +11 -9
- package/dist/components/features/media-library/media-resource-gallery.d.ts +1 -1
- package/dist/components/features/media-library/use-media-library.d.ts +1 -4
- package/dist/components/features/overlays/action-overlay-frame.d.ts +1 -1
- package/dist/components/features/overlays/index.d.ts +1 -1
- package/dist/components/features/overlays/overlay-parts.d.ts +3 -3
- package/dist/components/features/overlays/overlays.types.d.ts +8 -7
- package/dist/components/features/rich-text-editor/index.d.ts +0 -1
- package/dist/components/features/table/data-table-body.d.ts +1 -1
- package/dist/components/features/table/data-table-expanded-row.d.ts +27 -0
- package/dist/components/features/table/data-table-header.d.ts +1 -1
- package/dist/components/features/table/data-table-size.d.ts +1 -1
- package/dist/components/features/table/data-table.d.ts +1 -1
- package/dist/components/features/table/index.d.ts +1 -1
- package/dist/components/features/table/table-helpers.d.ts +9 -3
- package/dist/components/features/table/table.strings.d.ts +11 -0
- package/dist/components/features/table/table.types.d.ts +60 -2
- package/dist/components/features/theme-tweaker/index.d.ts +1 -1
- package/dist/components/features/theme-tweaker/theme-tweaker.strings.d.ts +1 -1
- package/dist/components/features/theme-tweaker/theme-tweaker.types.d.ts +6 -10
- package/dist/components/features/theme-tweaker/theme-tweaker.utils.d.ts +22 -6
- package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
- package/dist/components/layout/auth/auth.d.ts +1 -1
- package/dist/components/layout/auth/auth.types.d.ts +1 -1
- package/dist/components/primitives/value.d.ts +3 -1
- package/dist/containers-B8d8U9GS.js +2 -0
- package/dist/{copyable-H1TUEY-H.js → copyable-D9Okb1w6.js} +12 -11
- package/dist/core.css +2 -2
- package/dist/css/access.css +2 -1
- package/dist/css/accordion.css +2 -1
- package/dist/css/action-menu.css +2 -1
- package/dist/css/activities.css +2 -1
- package/dist/css/ai-chat.css +2 -1
- package/dist/css/analytics.css +2 -1
- package/dist/css/app-shell.css +2 -1
- package/dist/css/aspect-ratio.css +2 -1
- package/dist/css/async-preview.css +2 -1
- package/dist/css/auth.css +2 -1
- package/dist/css/avatar.css +2 -1
- package/dist/css/badge.css +2 -1
- package/dist/css/batch-action-bar.css +2 -1
- package/dist/css/buttons.css +2 -1
- package/dist/css/cards.css +2 -1
- package/dist/css/carousel.css +2 -1
- package/dist/css/chart.css +2 -1
- package/dist/css/choice-inputs.css +2 -1
- package/dist/css/combobox.css +2 -1
- package/dist/css/combobox2.css +2 -1
- package/dist/css/command.css +2 -1
- package/dist/css/comments.css +2 -1
- package/dist/css/commerce.css +2 -1
- package/dist/css/containers.css +2 -1
- package/dist/css/copyable.css +2 -1
- package/dist/css/data-view.css +2 -1
- package/dist/css/date-pickers.css +2 -1
- package/dist/css/display.css +2 -1
- package/dist/css/dropdown-menu.css +2 -1
- package/dist/css/event-calendar.css +2 -1
- package/dist/css/feedback.css +2 -1
- package/dist/css/filters.css +2 -1
- package/dist/css/forms-numeric.css +2 -1
- package/dist/css/forms.css +2 -1
- package/dist/css/global-search.css +2 -1
- package/dist/css/header.css +2 -1
- package/dist/css/hover-card.css +2 -1
- package/dist/css/input-group.css +2 -1
- package/dist/css/item.css +2 -1
- package/dist/css/kanban.css +2 -1
- package/dist/css/label.css +2 -1
- package/dist/css/map.css +2 -1
- package/dist/css/media-library.css +2 -1
- package/dist/css/mentions.css +2 -1
- package/dist/css/menubar.css +2 -1
- package/dist/css/navigation-menu.css +2 -1
- package/dist/css/navigation.css +2 -1
- package/dist/css/navigation2.css +2 -1
- package/dist/css/onboarding.css +2 -1
- package/dist/css/otp-input.css +2 -1
- package/dist/css/overlay.css +2 -1
- package/dist/css/overlays.css +2 -1
- package/dist/css/page.css +2 -1
- package/dist/css/popover-menu.css +2 -1
- package/dist/css/popover.css +2 -1
- package/dist/css/primitives.css +2 -1
- package/dist/css/products.css +2 -1
- package/dist/css/qr-code.css +2 -1
- package/dist/css/repeaters.css +2 -1
- package/dist/css/resizable.css +2 -1
- package/dist/css/resource-assignment.css +2 -1
- package/dist/css/resource.css +2 -1
- package/dist/css/rich-text-editor.css +2 -1
- package/dist/css/schema-form.css +2 -1
- package/dist/css/sidebar.css +2 -1
- package/dist/css/sidebar2.css +2 -1
- package/dist/css/skeleton.css +2 -1
- package/dist/css/spinner.css +2 -1
- package/dist/css/structure.css +2 -1
- package/dist/css/sync.css +2 -1
- package/dist/css/table.css +2 -1
- package/dist/css/table2.css +2 -1
- package/dist/css/text-inputs.css +2 -1
- package/dist/css/theme-tweaker.css +2 -1
- package/dist/css/timeline.css +2 -1
- package/dist/css/timelines.css +2 -1
- package/dist/css/toaster.css +2 -1
- package/dist/css/toggle.css +2 -1
- package/dist/css/toolbar.css +2 -1
- package/dist/css/tooltip.css +2 -1
- package/dist/css/typography.css +2 -1
- package/dist/css/upload.css +2 -1
- package/dist/css/value-inputs.css +2 -1
- package/dist/css/workspace.css +2 -1
- package/dist/css-graph.json +1027 -0
- package/dist/date-pickers-BwCwKIVM.js +685 -0
- package/dist/{dialog-CtFCuTUF.js → dialog-CAnwRNrm.js} +1 -1
- package/dist/display-a7AoX_u7.js +664 -0
- package/dist/dropdown-menu-Br8kvjrF.js +235 -0
- package/dist/empty.js +0 -0
- package/dist/features/actions.js +6 -6
- package/dist/features/activities.js +219 -216
- package/dist/features/ai-chat.js +593 -565
- package/dist/features/async-preview.js +105 -286
- package/dist/features/combobox.js +328 -314
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +56 -55
- package/dist/features/event-calendar.js +189 -185
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +259 -260
- package/dist/features/kanban.js +39 -37
- package/dist/features/map.js +357 -354
- package/dist/features/media-library.js +931 -931
- package/dist/features/mentions.js +1 -1
- package/dist/features/overlays.js +1 -1
- package/dist/features/products.js +950 -942
- package/dist/features/resource-assignment.js +39 -37
- package/dist/features/resource.js +70 -71
- package/dist/features/rich-text-editor.js +2 -2
- package/dist/features/schema-form.js +342 -338
- package/dist/features/sync.js +14 -12
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +1002 -962
- package/dist/feedback-D4qVsKlD.js +430 -0
- package/dist/{filters-DOLKRSmb.js → filters-BhsTkWpZ.js} +386 -383
- package/dist/forms-C0WeNPFF.js +250 -0
- package/dist/forms-numeric-IwQ1ltNf.js +582 -0
- package/dist/hooks/use-native-dialog.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/input-group-HS_Z0Ei_.js +119 -0
- package/dist/item-M2pmpWXh.js +150 -0
- package/dist/{label-DumoMDm6.js → label-HOBXAscw.js} +7 -5
- package/dist/layout/app-shell.js +4 -2
- package/dist/layout/auth.js +102 -100
- package/dist/layout/header.js +190 -180
- package/dist/layout/navigation.js +1 -1
- package/dist/layout/page.js +18 -16
- package/dist/layout/settings.js +2 -2
- package/dist/layout/sidebar.js +50 -46
- package/dist/layout/workspace.js +71 -69
- package/dist/lib/action-presentation.d.ts +3 -3
- package/dist/lib/component-vocabulary.d.ts +2 -2
- package/dist/lib/css-length.d.ts +2 -0
- package/dist/lib/responsive.d.ts +1 -1
- package/dist/lib/theming/index.d.ts +1 -0
- package/dist/lib/theming/recipes.d.ts +2 -2
- package/dist/lib/theming/themes/dense.d.ts +3 -0
- package/dist/lib/theming/themes/editorial.d.ts +3 -0
- package/dist/lib/theming/themes/index.d.ts +8 -0
- package/dist/lib/theming/themes/pair.d.ts +7 -0
- package/dist/lib/theming/themes/sharp.d.ts +3 -0
- package/dist/lib/theming/themes/soft.d.ts +3 -0
- package/dist/lib/theming/themes/types.d.ts +12 -0
- package/dist/lib/ui-provider/index.d.ts +1 -1
- package/dist/lib/ui-provider/scope.d.ts +5 -8
- package/dist/lib/ui-provider/tokens.d.ts +11 -3
- package/dist/lib/ui-provider/tokens.generated.d.ts +6 -4
- package/dist/lib/ui-provider/types.d.ts +17 -19
- package/dist/lib/ui-provider/ui-scope.d.ts +1 -1
- package/dist/{mentions-BbsEHlcH.js → mentions-BOxbigwp.js} +113 -111
- package/dist/navigation-Bgu7Vc0M.js +622 -0
- package/dist/navigation-DiYACqpE.js +216 -0
- package/dist/overlay-BuQOl8aP.js +356 -0
- package/dist/{overlays-DvVoS3td.js → overlays-1sULyytH.js} +77 -75
- package/dist/popover-CA7SP_iz.js +127 -0
- package/dist/popover-menu-QXgQeWeG.js +192 -0
- package/dist/{primitives-D0bdDozz.js → primitives-BskKlf35.js} +181 -178
- package/dist/primitives.js +1 -1
- package/dist/profiles/admin.json +6 -36
- package/dist/profiles/general.json +6 -96
- package/dist/repeaters-CeH20dvr.js +445 -0
- package/dist/rich-text-editor-D_Ppm8yh.js +491 -0
- package/dist/{sheet-CKcmRbJ9.js → sheet-CJ1-OAla.js} +3 -3
- package/dist/sidebar-D8uGqxio.js +421 -0
- package/dist/skeleton-BTKNKTdj.js +173 -0
- package/dist/spinner-Tc1QCnxM.js +30 -0
- package/dist/{structure-D0WGQAP3.js → structure-CynEZ-OY.js} +15 -23
- package/dist/style.css +1 -1
- package/dist/styles/TOKENS.md +116 -275
- package/dist/styles/animation.css +114 -0
- package/dist/styles/base.css +7 -6
- package/dist/styles/fields.css +45 -63
- package/dist/styles/focus.css +12 -0
- package/dist/styles/forced-colors.css +11 -10
- package/dist/styles/index.css +23 -30
- package/dist/styles/map.css +45 -34
- package/dist/styles/mentions.css +14 -52
- package/dist/styles/overlays.css +7 -7
- package/dist/styles/tailwind.css +76 -127
- package/dist/styles/targets.css +3 -3
- package/dist/styles/theme/colour.css +86 -0
- package/dist/styles/theme/density.css +31 -0
- package/dist/styles/theme/elevation.css +9 -0
- package/dist/styles/theme/layout.css +18 -0
- package/dist/styles/theme/motion.css +18 -0
- package/dist/styles/theme/shape.css +12 -0
- package/dist/styles/theme/size.css +10 -0
- package/dist/styles/theme/spacing.css +11 -0
- package/dist/styles/theme/typography.css +20 -0
- package/dist/styles/tone.css +61 -0
- package/dist/table-B7dtIFUx.js +1262 -0
- package/dist/table-Ds_eO9av.js +191 -0
- package/dist/tailwind.css +76 -127
- package/dist/text-inputs-BboE77nZ.js +395 -0
- package/dist/theming-C5ygF5uf.js +292 -0
- package/dist/theming.js +2 -2
- package/dist/{timeline-BdaGRyj-.js → timeline-BR_jNgvz.js} +57 -49
- package/dist/{timelines-BB7550mz.js → timelines-DXG1BfIN.js} +69 -67
- package/dist/{toaster-bBMgXm8z.js → toaster-CXL8L7Mm.js} +106 -99
- package/dist/tokens.json +1027 -636
- package/dist/toolbar-DBK-c4yy.js +74 -0
- package/dist/tooltip-BPYP-jUm.js +76 -0
- package/dist/{typography-BkxEiwQ1.js → typography-DmeR05Er.js} +87 -53
- package/dist/{ui-provider-Cmoq6i_D.js → ui-provider-DpzLUD12.js} +117 -69
- package/dist/ui-provider.js +1 -1
- package/dist/upload-CYuoJykZ.js +968 -0
- package/dist/use-async-preview-BFwf9ElY.js +188 -0
- package/dist/value-inputs-ng8aVJJZ.js +728 -0
- package/docs/README.md +13 -3
- package/docs/build/browser-composition-fixture.ts +28 -0
- package/docs/build/recipes.md +11484 -10723
- package/docs/generated/component-index.json +9809 -9169
- package/docs/generated/components/INDEX.md +5 -5
- package/docs/generated/components/base--accordion.md +51 -2
- package/docs/generated/components/base--action-menu.md +14 -15
- package/docs/generated/components/base--alert-dialog.md +3 -4
- package/docs/generated/components/base--aspect-ratio.md +3 -4
- package/docs/generated/components/base--avatar.md +7 -7
- package/docs/generated/components/base--badge.md +159 -27
- package/docs/generated/components/base--batch-action-bar.md +6 -7
- package/docs/generated/components/base--buttons.md +151 -47
- package/docs/generated/components/base--cards.md +107 -14
- package/docs/generated/components/base--carousel.md +1 -2
- package/docs/generated/components/base--chart.md +44 -8
- package/docs/generated/components/base--choice-inputs.md +10 -11
- package/docs/generated/components/base--combobox.md +3 -4
- package/docs/generated/components/base--command.md +6 -6
- package/docs/generated/components/base--context-menu.md +1 -2
- package/docs/generated/components/base--copyable.md +6 -7
- package/docs/generated/components/base--date-pickers.md +6 -7
- package/docs/generated/components/base--dialog.md +6 -7
- package/docs/generated/components/base--direction.md +1 -1
- package/docs/generated/components/base--display.md +234 -54
- package/docs/generated/components/base--dropdown-menu.md +6 -7
- package/docs/generated/components/base--feedback.md +71 -18
- package/docs/generated/components/base--forms-numeric.md +6 -7
- package/docs/generated/components/base--forms.md +84 -14
- package/docs/generated/components/base--hover-card.md +3 -4
- package/docs/generated/components/base--input-group.md +27 -30
- package/docs/generated/components/base--item.md +8 -9
- package/docs/generated/components/base--label.md +2 -3
- package/docs/generated/components/base--menubar.md +2 -4
- package/docs/generated/components/base--navigation-menu.md +2 -3
- package/docs/generated/components/base--navigation.md +2 -3
- package/docs/generated/components/base--otp-input.md +3 -4
- package/docs/generated/components/base--overlay.md +56 -47
- package/docs/generated/components/base--popover-menu.md +7 -8
- package/docs/generated/components/base--popover.md +9 -10
- package/docs/generated/components/base--qr-code.md +7 -8
- package/docs/generated/components/base--repeaters.md +6 -7
- package/docs/generated/components/base--resizable.md +2 -3
- package/docs/generated/components/base--sheet.md +12 -13
- package/docs/generated/components/base--sidebar.md +9 -11
- package/docs/generated/components/base--skeleton.md +6 -7
- package/docs/generated/components/base--slot.md +1 -1
- package/docs/generated/components/base--spinner.md +5 -7
- package/docs/generated/components/base--structure.md +320 -70
- package/docs/generated/components/base--table.md +61 -3
- package/docs/generated/components/base--text-inputs.md +17 -18
- package/docs/generated/components/base--timeline.md +45 -4
- package/docs/generated/components/base--toaster.md +43 -12
- package/docs/generated/components/base--toggle.md +11 -12
- package/docs/generated/components/base--toolbar.md +7 -8
- package/docs/generated/components/base--tooltip.md +5 -6
- package/docs/generated/components/base--typography.md +317 -32
- package/docs/generated/components/base--upload.md +8 -9
- package/docs/generated/components/base--value-inputs.md +9 -38
- package/docs/generated/components/{admin--patterns--access.md → blocks--admin--access.md} +15 -6
- package/docs/generated/components/{admin--patterns--commerce.md → blocks--admin--commerce.md} +40 -41
- package/docs/generated/components/{patterns--analytics.md → blocks--analytics.md} +57 -14
- package/docs/generated/components/{patterns--onboarding.md → blocks--onboarding.md} +6 -7
- package/docs/generated/components/{patterns--timelines.md → blocks--timelines.md} +6 -7
- package/docs/generated/components/features--actions.md +8 -18
- package/docs/generated/components/features--activities.md +31 -32
- package/docs/generated/components/features--ai-chat.md +15 -15
- package/docs/generated/components/features--async-preview.md +5 -6
- package/docs/generated/components/features--combobox.md +71 -5
- package/docs/generated/components/features--comments.md +0 -1
- package/docs/generated/components/features--data-view.md +63 -8
- package/docs/generated/components/features--event-calendar.md +1 -2
- package/docs/generated/components/features--filters.md +11 -2
- package/docs/generated/components/features--global-search.md +1 -2
- package/docs/generated/components/features--kanban.md +1 -2
- package/docs/generated/components/features--map.md +1 -2
- package/docs/generated/components/features--media-library.md +105 -38
- package/docs/generated/components/features--mentions.md +7 -7
- package/docs/generated/components/features--overlays.md +75 -22
- package/docs/generated/components/features--products.md +10 -11
- package/docs/generated/components/features--resource-assignment.md +2 -3
- package/docs/generated/components/features--resource.md +3 -4
- package/docs/generated/components/features--rich-text-editor.md +42 -13
- package/docs/generated/components/features--schema-form.md +1 -2
- package/docs/generated/components/features--sync.md +2 -3
- package/docs/generated/components/features--table.md +162 -12
- package/docs/generated/components/features--theme-tweaker.md +30 -15
- package/docs/generated/components/forms.md +2 -2
- package/docs/generated/components/layout--app-shell.md +41 -11
- package/docs/generated/components/layout--auth.md +8 -9
- package/docs/generated/components/layout--containers.md +40 -1
- package/docs/generated/components/layout--header.md +2 -3
- package/docs/generated/components/layout--navigation.md +0 -1
- package/docs/generated/components/layout--page.md +33 -5
- package/docs/generated/components/layout--settings.md +0 -1
- package/docs/generated/components/layout--sidebar.md +47 -7
- package/docs/generated/components/layout--workspace.md +3 -4
- package/docs/generated/components/primitives.md +128 -17
- package/docs/generated/components/theming.md +147 -4
- package/docs/generated/components/ui-provider.md +96 -78
- package/docs/generated/composition-ladder.md +8 -8
- package/docs/generated/consumer-contract.json +5736 -0
- package/docs/generated/imports.md +104 -104
- package/docs/generated/migration-broad-imports.json +267 -90
- package/docs/generated/migration-broad-imports.md +266 -101
- package/docs/generated/migration-codemod.json +365 -70
- package/docs/generated/migration.md +665 -95
- package/docs/generated/profiles.md +27 -27
- package/docs/generated/public-api.md +104 -102
- package/docs/generated/recipes.json +755 -810
- package/docs/generated/workflows/communications-overview/analytics/communications-reference.tsx +19 -0
- package/docs/generated/workflows/index.json +691 -0
- package/docs/generated/workflows/media-picking/media-library/media-picking-reference.tsx +63 -0
- package/docs/generated/workflows/media-picking/media-library/reference-data.ts +3 -0
- package/docs/generated/workflows/multi-section-form/form-workflow/multi-section-reference.tsx +46 -0
- package/docs/generated/workflows/nested-action-flow/action-overlays/nested-action-reference.tsx +39 -0
- package/docs/generated/workflows/record-detail/page-layout/record-detail-reference.tsx +24 -0
- package/docs/generated/workflows/resource-index/data-view/resource-index-reference.tsx +51 -0
- package/docs/generated/workflows/scoped-resource-selection/combobox/scoped-resource-reference.tsx +50 -0
- package/docs/generated/workflows/website-content-editor/media-library/reference-data.ts +3 -0
- package/docs/generated/workflows/website-content-editor/rich-text-editor/website-content-reference.tsx +33 -0
- package/docs/generated/workflows/workspace-navigation/app-shell/workspace-navigation-reference.tsx +26 -0
- package/docs/learn/api-compatibility.md +5 -4
- package/docs/learn/blocks.md +123 -0
- package/docs/learn/composition.md +100 -19
- package/docs/learn/forms.md +23 -3
- package/docs/learn/framework-wiring.md +41 -13
- package/docs/learn/i18n.md +4 -2
- package/docs/learn/installation.md +60 -31
- package/docs/learn/migration.md +156 -5
- package/docs/learn/provider-and-scoping.md +37 -25
- package/docs/learn/reference-workflows.md +43 -0
- package/docs/learn/structure-and-spacing.md +147 -0
- package/docs/learn/theming.md +174 -131
- package/docs/learn/troubleshooting.md +88 -30
- package/docs/learn/verification.md +60 -5
- package/package.json +42 -473
- package/scripts/consumer/codemod.mjs +50 -32
- package/scripts/consumer/contract-reader.mjs +42 -0
- package/scripts/consumer/css-scan.mjs +51 -0
- package/scripts/consumer/diagnose.mjs +136 -0
- package/scripts/consumer/find-component.mjs +30 -17
- package/scripts/consumer/install-skill.mjs +93 -11
- package/src/styles/TOKENS.md +116 -275
- package/dist/accordion-6YPJ9XRO.js +0 -135
- package/dist/admin/patterns/access.css +0 -15
- package/dist/admin/patterns/commerce.css +0 -29
- package/dist/admin/patterns/commerce.js +0 -2493
- package/dist/avatar-CS7zow2q.js +0 -85
- package/dist/badge-CxOuTfVr.js +0 -63
- package/dist/base/accordion.css +0 -3
- package/dist/base/action-menu.css +0 -6
- package/dist/base/alert-dialog.css +0 -4
- package/dist/base/aspect-ratio.css +0 -2
- package/dist/base/avatar.css +0 -4
- package/dist/base/badge.css +0 -2
- package/dist/base/batch-action-bar.css +0 -5
- package/dist/base/buttons.css +0 -4
- package/dist/base/cards.css +0 -13
- package/dist/base/carousel.css +0 -5
- package/dist/base/chart.css +0 -2
- package/dist/base/choice-inputs.css +0 -10
- package/dist/base/combobox.css +0 -3
- package/dist/base/command.css +0 -9
- package/dist/base/context-menu.css +0 -2
- package/dist/base/copyable.css +0 -6
- package/dist/base/date-pickers.css +0 -11
- package/dist/base/dialog.css +0 -4
- package/dist/base/display.css +0 -8
- package/dist/base/dropdown-menu.css +0 -2
- package/dist/base/feedback.css +0 -5
- package/dist/base/forms-numeric.css +0 -12
- package/dist/base/forms.css +0 -14
- package/dist/base/hover-card.css +0 -2
- package/dist/base/input-group.css +0 -6
- package/dist/base/item.css +0 -9
- package/dist/base/label.css +0 -3
- package/dist/base/menubar.css +0 -2
- package/dist/base/navigation-menu.css +0 -2
- package/dist/base/navigation.css +0 -12
- package/dist/base/otp-input.css +0 -9
- package/dist/base/overlay.css +0 -4
- package/dist/base/popover-menu.css +0 -11
- package/dist/base/popover.css +0 -3
- package/dist/base/qr-code.css +0 -2
- package/dist/base/repeaters.css +0 -18
- package/dist/base/resizable.css +0 -2
- package/dist/base/sheet.css +0 -4
- package/dist/base/sidebar.css +0 -12
- package/dist/base/skeleton.css +0 -9
- package/dist/base/spinner.css +0 -2
- package/dist/base/structure.css +0 -2
- package/dist/base/table.css +0 -3
- package/dist/base/text-inputs.css +0 -2
- package/dist/base/timeline.css +0 -9
- package/dist/base/toaster.css +0 -2
- package/dist/base/toggle.css +0 -2
- package/dist/base/toolbar.css +0 -5
- package/dist/base/tooltip.css +0 -2
- package/dist/base/typography.css +0 -2
- package/dist/base/upload.css +0 -10
- package/dist/base/value-inputs.css +0 -14
- package/dist/buttons-CqXKWty3.js +0 -179
- package/dist/cards-C6Ulbkw7.js +0 -271
- package/dist/chart-nomhJ87z.js +0 -193
- package/dist/choice-inputs-OUDn0kQw.js +0 -680
- package/dist/combobox-C8oP92bT.js +0 -266
- package/dist/command-Bp3B6pUu.js +0 -143
- package/dist/comments-CAnDlyXO.js +0 -1438
- package/dist/components/admin/patterns/index.d.ts +0 -2
- package/dist/components/features/rich-text-editor/exec-command-engine.d.ts +0 -2
- package/dist/components/patterns/index.d.ts +0 -3
- package/dist/css/styles.css +0 -1
- package/dist/date-pickers-DOwIT-Nk.js +0 -661
- package/dist/display-B3Q17h5z.js +0 -645
- package/dist/dropdown-menu-TyNLCLML.js +0 -223
- package/dist/features/actions.css +0 -11
- package/dist/features/activities.css +0 -25
- package/dist/features/ai-chat.css +0 -14
- package/dist/features/async-preview.css +0 -10
- package/dist/features/combobox.css +0 -12
- package/dist/features/comments.css +0 -24
- package/dist/features/data-view.css +0 -31
- package/dist/features/event-calendar.css +0 -17
- package/dist/features/filters.css +0 -24
- package/dist/features/global-search.css +0 -19
- package/dist/features/kanban.css +0 -7
- package/dist/features/map.css +0 -15
- package/dist/features/media-library.css +0 -27
- package/dist/features/mentions.css +0 -17
- package/dist/features/overlays.css +0 -11
- package/dist/features/products.css +0 -29
- package/dist/features/resource-assignment.css +0 -14
- package/dist/features/resource.css +0 -15
- package/dist/features/rich-text-editor.css +0 -8
- package/dist/features/schema-form.css +0 -22
- package/dist/features/sync.css +0 -11
- package/dist/features/table.css +0 -20
- package/dist/features/theme-tweaker.css +0 -27
- package/dist/feedback-DRerHGuV.js +0 -469
- package/dist/forms-CPrGGif_.js +0 -242
- package/dist/forms-numeric-CPVsL7Vf.js +0 -569
- package/dist/index.css +0 -3
- package/dist/input-group-BYe0rhoB.js +0 -126
- package/dist/item-B3yQ26as.js +0 -146
- package/dist/layout/app-shell.css +0 -13
- package/dist/layout/auth.css +0 -14
- package/dist/layout/containers.css +0 -2
- package/dist/layout/header.css +0 -20
- package/dist/layout/navigation.css +0 -11
- package/dist/layout/page.css +0 -15
- package/dist/layout/settings.css +0 -16
- package/dist/layout/sidebar.css +0 -16
- package/dist/layout/workspace.css +0 -15
- package/dist/navigation-CsqTA16F.js +0 -614
- package/dist/navigation-DzxzPuwg.js +0 -202
- package/dist/overlay-WQOsLd69.js +0 -345
- package/dist/patterns/analytics.css +0 -15
- package/dist/patterns/onboarding.css +0 -11
- package/dist/patterns/timelines.css +0 -11
- package/dist/popover-DriLnIFc.js +0 -123
- package/dist/popover-menu-C2UCMAe7.js +0 -189
- package/dist/primitives.css +0 -3
- package/dist/repeaters-DuP1N0nw.js +0 -438
- package/dist/rich-text-editor-BQXFe9oN.js +0 -595
- package/dist/sidebar-D0N6ckJL.js +0 -412
- package/dist/skeleton-DGR9df28.js +0 -172
- package/dist/spinner-CUAVFecI.js +0 -52
- package/dist/styles/FACTORS.md +0 -36
- package/dist/styles/SCOPES.md +0 -86
- package/dist/styles/themes/default.css +0 -164
- package/dist/styles/theming/animation.css +0 -143
- package/dist/styles/theming/colors.css +0 -97
- package/dist/styles/theming/feedback.css +0 -17
- package/dist/styles/theming/field.css +0 -21
- package/dist/styles/theming/focus.css +0 -88
- package/dist/styles/theming/layers.css +0 -13
- package/dist/styles/theming/layout.css +0 -21
- package/dist/styles/theming/motion.css +0 -42
- package/dist/styles/theming/overlay.css +0 -52
- package/dist/styles/theming/sizing.css +0 -118
- package/dist/styles/theming/text.css +0 -30
- package/dist/styles/theming/typography.css +0 -26
- package/dist/styles/tokens/components.css +0 -22
- package/dist/styles/tokens/foundation.css +0 -80
- package/dist/styles/tokens/layout.css +0 -19
- package/dist/styles/tokens/palette.css +0 -88
- package/dist/styles/tokens/primitives.css +0 -18
- package/dist/styles/tokens/states.css +0 -77
- package/dist/table-BC4qqsUb.js +0 -180
- package/dist/table-BHDpjajL.js +0 -982
- package/dist/text-inputs-DF_lD7pA.js +0 -385
- package/dist/theming-D6KRU7hO.js +0 -104
- package/dist/toolbar-DWRywF0R.js +0 -68
- package/dist/tooltip-t1VQQ2tZ.js +0 -73
- package/dist/upload-B38YZeFJ.js +0 -938
- package/dist/value-inputs-Q4ymjXlV.js +0 -716
- package/src/styles/FACTORS.md +0 -36
- package/src/styles/SCOPES.md +0 -86
- /package/dist/components/{admin/patterns → blocks/admin}/access/admin.strings.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/access/credential-list.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/access/index.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/access/role-permissions.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/access/sensitive-action.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/account.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/address-lines.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/booking.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/cart.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/commerce.strings.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/commerce.types.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/format-amount.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/index.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/inventory-section.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/invoice.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/loyalty.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-customer.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-detail.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-line-item.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-transactions.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/order.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/seo-listing.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/seo-score.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/summary-panel.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/activity-heatmap.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/analytics.types.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/chart-card.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/format-metric-value.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/index.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric-bar.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric-comparison.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric-gradient.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric-grid.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric-micro-grid.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric-skeleton.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric-trend-chip.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/time-ruler.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/onboarding/checklist.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/onboarding/index.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/onboarding/onboarding.strings.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/timelines/changelog-timeline.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/timelines/index.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/timelines/milestones-timeline.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/timelines/steps.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/timelines/timelines.strings.d.ts +0 -0
- /package/dist/styles/{theming/breakpoints.css → breakpoints.css} +0 -0
|
@@ -8,14 +8,13 @@ A resource is shared with or assigned to principals through a dialog.
|
|
|
8
8
|
|
|
9
9
|
- **Use when:** A resource is shared with or assigned to principals through a dialog.
|
|
10
10
|
- **Avoid when:** You are displaying permissions rather than changing them.
|
|
11
|
-
- **Consider instead:** `admin/
|
|
11
|
+
- **Consider instead:** `blocks/admin/access`, `features/overlays`
|
|
12
12
|
- **Stability:** stable.
|
|
13
13
|
|
|
14
14
|
## Import
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { DefaultDialogContent } from "themelia-ui/features/resource-assignment"
|
|
18
|
-
import "themelia-ui/features/resource-assignment.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
@@ -366,7 +365,7 @@ function RecoverableVenuePicker({
|
|
|
366
365
|
error,
|
|
367
366
|
}: SharedResourceSelectorProps<VenueHit, { error: string | null }>) {
|
|
368
367
|
return (
|
|
369
|
-
<Stack gap="
|
|
368
|
+
<Stack gap="sm">
|
|
370
369
|
{!!error && <Alert tone="destructive">{error}</Alert>}
|
|
371
370
|
<VenuePicker selected={selected} onSelect={onSelect} inModal />
|
|
372
371
|
</Stack>
|
|
@@ -15,7 +15,6 @@ A record's index or show page needs its standard shell — header, actions bar a
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { ResourceActionBar } from "themelia-ui/features/resource"
|
|
18
|
-
import "themelia-ui/features/resource.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
@@ -317,7 +316,7 @@ export default function ResourceIndex() {
|
|
|
317
316
|
<Button
|
|
318
317
|
key={option}
|
|
319
318
|
tone={state === option ? "primary" : "neutral"}
|
|
320
|
-
|
|
319
|
+
appearance={state === option ? "solid" : "outline"}
|
|
321
320
|
onClick={() => setState(option)}
|
|
322
321
|
>
|
|
323
322
|
{option}
|
|
@@ -330,7 +329,7 @@ export default function ResourceIndex() {
|
|
|
330
329
|
description="Everything billed on this account."
|
|
331
330
|
actions={
|
|
332
331
|
<>
|
|
333
|
-
<Button tone="neutral"
|
|
332
|
+
<Button tone="neutral" appearance="outline">
|
|
334
333
|
<DownloadIcon />
|
|
335
334
|
Export
|
|
336
335
|
</Button>
|
|
@@ -390,7 +389,7 @@ export default function ResourceShow() {
|
|
|
390
389
|
{ label: "Amount", value: { kind: "money", value: 48_200, currency: "USD" } },
|
|
391
390
|
{ label: "Terms", value: "Net 14" },
|
|
392
391
|
]} />}
|
|
393
|
-
actions={<Button tone="neutral"
|
|
392
|
+
actions={<Button tone="neutral" appearance="outline">Send reminder</Button>}
|
|
394
393
|
/>
|
|
395
394
|
),
|
|
396
395
|
aside: (
|
|
@@ -15,7 +15,6 @@ Users author formatted content with a toolbar and counts.
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { EditorCounts } from "themelia-ui/features/rich-text-editor"
|
|
18
|
-
import "themelia-ui/features/rich-text-editor.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Optional peers
|
|
@@ -35,14 +34,6 @@ outside the package and arrives through the public props, callbacks, slots, or a
|
|
|
35
34
|
|
|
36
35
|
## Public declarations
|
|
37
36
|
|
|
38
|
-
### `createExecCommandEngine`
|
|
39
|
-
|
|
40
|
-
Kind: callable.
|
|
41
|
-
|
|
42
|
-
```text
|
|
43
|
-
(element: HTMLElement) => RichTextEngine
|
|
44
|
-
```
|
|
45
|
-
|
|
46
37
|
### `defaultRichTextEditorStrings`
|
|
47
38
|
|
|
48
39
|
Kind: const.
|
|
@@ -315,6 +306,44 @@ The shape the toolbar renders. Built-ins and consumer items resolve to this.
|
|
|
315
306
|
|
|
316
307
|
Preview route: Rich text editor — `/rich-text-editor`
|
|
317
308
|
|
|
309
|
+
### Website content reference
|
|
310
|
+
|
|
311
|
+
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
312
|
+
import { useState } from "react"
|
|
313
|
+
import { Button } from "themelia-ui/base/buttons"
|
|
314
|
+
import { Card } from "themelia-ui/base/cards"
|
|
315
|
+
import { PillRadioGroup } from "themelia-ui/base/choice-inputs"
|
|
316
|
+
import { FormField } from "themelia-ui/base/forms"
|
|
317
|
+
import { Stack } from "themelia-ui/base/structure"
|
|
318
|
+
import { Input } from "themelia-ui/base/text-inputs"
|
|
319
|
+
import { RichText, Text } from "themelia-ui/base/typography"
|
|
320
|
+
import { MediaLibraryDialog, type MediaLibraryItem } from "themelia-ui/features/media-library"
|
|
321
|
+
import { RichTextEditor } from "themelia-ui/features/rich-text-editor"
|
|
322
|
+
import { SAMPLE_MEDIA } from "../media-library/reference-data"
|
|
323
|
+
|
|
324
|
+
export default function WebsiteContentReference() {
|
|
325
|
+
const [locale, setLocale] = useState("en")
|
|
326
|
+
const [drafts, setDrafts] = useState<Record<string, string>>({ en: "<p>Welcome to our workspace.</p>", ar: "<p>مرحباً بكم</p>" })
|
|
327
|
+
const [mediaOpen, setMediaOpen] = useState(false)
|
|
328
|
+
const [image, setImage] = useState<MediaLibraryItem>()
|
|
329
|
+
const [alt, setAlt] = useState("")
|
|
330
|
+
const [failed, setFailed] = useState(true)
|
|
331
|
+
const [pending, setPending] = useState(false)
|
|
332
|
+
const [message, setMessage] = useState("Drafts are local until saved")
|
|
333
|
+
return <Card title="Website content" description="Each locale owns a retained draft. Preview sanitizes HTML; the application also validates and sanitizes persisted content.">
|
|
334
|
+
<Stack>
|
|
335
|
+
<PillRadioGroup aria-label="Content locale" name="reference-content-locale" value={locale} onValueChange={value => value && setLocale(value)} options={[{ value: "en", label: "English" }, { value: "ar", label: "العربية" }]} />
|
|
336
|
+
<div dir={locale === "ar" ? "rtl" : "ltr"}><RichTextEditor value={drafts[locale] ?? ""} onValueChange={html => setDrafts(current => ({ ...current, [locale]: html }))} /></div>
|
|
337
|
+
<MediaLibraryDialog open={mediaOpen} trigger={<Button tone="neutral" appearance="outline">Choose hero media</Button>} onOpenChange={setMediaOpen} items={SAMPLE_MEDIA} selectionMode="single" confirmOnSelect allowUpload={false} onConfirm={items => { const item = items[0]; setImage(item); setAlt(item?.alt ?? ""); setMediaOpen(false) }} />
|
|
338
|
+
{image && <FormField label="Hero image alternative text" hint={image.name}><Input value={alt} onChange={event => setAlt(event.target.value)} /></FormField>}
|
|
339
|
+
<Stack direction="horizontal" wrap gap="sm"><Button disabled={pending} onClick={async () => { if (pending) return; setPending(true); await new Promise(resolve => setTimeout(resolve, 250)); setMessage(failed ? "Save failed. All locale drafts and image text remain here." : "Mock website save completed"); setPending(false) }}>Save website content</Button><Button tone="neutral" appearance="outline" onClick={() => setFailed(value => !value)}>Toggle save failure</Button></Stack>
|
|
340
|
+
<Text role="status">{message}</Text>
|
|
341
|
+
<RichText html={drafts[locale] ?? ""} />
|
|
342
|
+
</Stack>
|
|
343
|
+
</Card>
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
318
347
|
### The editor and what comes out
|
|
319
348
|
|
|
320
349
|
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
@@ -341,14 +370,14 @@ export default function Editor() {
|
|
|
341
370
|
maxLength={280}
|
|
342
371
|
/>
|
|
343
372
|
|
|
344
|
-
<Stack gap="
|
|
373
|
+
<Stack gap="sm">
|
|
345
374
|
<DisplayLabel>Emitted HTML</DisplayLabel>
|
|
346
|
-
<Text size="xs" type="secondary" className={styles.source}>
|
|
375
|
+
<Text size="xs" type="secondary" mono className={styles.source}>
|
|
347
376
|
{body || "(empty)"}
|
|
348
377
|
</Text>
|
|
349
378
|
</Stack>
|
|
350
379
|
|
|
351
|
-
<Stack gap="
|
|
380
|
+
<Stack gap="sm">
|
|
352
381
|
<DisplayLabel>Rendered through RichText</DisplayLabel>
|
|
353
382
|
<RichText html={body} />
|
|
354
383
|
</Stack>
|
|
@@ -395,7 +424,7 @@ export default function EditorCompact() {
|
|
|
395
424
|
},
|
|
396
425
|
]}
|
|
397
426
|
footerSlot={
|
|
398
|
-
<Stack direction="horizontal" align="center" justify="between" gap="
|
|
427
|
+
<Stack direction="horizontal" align="center" justify="between" gap="sm">
|
|
399
428
|
<Text size="xs" type="secondary">
|
|
400
429
|
Markdown is not parsed — use the toolbar.
|
|
401
430
|
</Text>
|
|
@@ -15,12 +15,11 @@ Fields are generated from a schema at runtime rather than written by hand.
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { SchemaForm } from "themelia-ui/features/schema-form"
|
|
18
|
-
import "themelia-ui/features/schema-form.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
22
21
|
|
|
23
|
-
This module composes `base/badge`, `base/buttons`, `base/choice-inputs`, `base/display`, `base/feedback`, `base/forms`, `base/forms-numeric`, `base/structure`, `base/text-inputs`, `base/value-inputs`.
|
|
22
|
+
This module composes `base/badge`, `base/buttons`, `base/choice-inputs`, `base/display`, `base/feedback`, `base/forms`, `base/forms-numeric`, `base/structure`, `base/text-inputs`, `base/typography`, `base/value-inputs`.
|
|
24
23
|
|
|
25
24
|
Application policy—routing, fetching, persistence, permissions, and translation—stays
|
|
26
25
|
outside the package and arrives through the public props, callbacks, slots, or accessors below.
|
|
@@ -15,7 +15,6 @@ A synchronisation run is configured over a date range.
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { SyncRangeForm } from "themelia-ui/features/sync"
|
|
18
|
-
import "themelia-ui/features/sync.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Optional peers
|
|
@@ -143,8 +142,8 @@ export default function SyncRangeFormExample() {
|
|
|
143
142
|
syncOptions={SYNC_OPTIONS}
|
|
144
143
|
onSubmit={(data) => setSubmitted(`${data.hours}h · ${data.options.join(", ") || "everything"}`)}
|
|
145
144
|
/>
|
|
146
|
-
<Stack direction="horizontal" gap="
|
|
147
|
-
<Button type="submit" form="sync-demo"
|
|
145
|
+
<Stack direction="horizontal" gap="sm" align="center">
|
|
146
|
+
<Button type="submit" form="sync-demo" appearance="outline">
|
|
148
147
|
Run sync
|
|
149
148
|
</Button>
|
|
150
149
|
{!!submitted && <Text size="sm" type="secondary">submitted: {submitted}</Text>}
|
|
@@ -15,7 +15,6 @@ A table needs columns, sorting, selection, cell renderers and a toolbar.
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { AvatarCell } from "themelia-ui/features/table"
|
|
18
|
-
import "themelia-ui/features/table.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Optional peers
|
|
@@ -28,7 +27,7 @@ npm install @tanstack/react-table
|
|
|
28
27
|
|
|
29
28
|
## Composition
|
|
30
29
|
|
|
31
|
-
This module composes `base/action-menu`, `base/avatar`, `base/badge`, `base/batch-action-bar`, `base/buttons`, `base/choice-inputs`, `base/display`, `base/feedback`, `base/navigation`, `base/table`, `base/text-inputs`, `base/toolbar`, `base/typography`.
|
|
30
|
+
This module composes `base/action-menu`, `base/avatar`, `base/badge`, `base/batch-action-bar`, `base/buttons`, `base/choice-inputs`, `base/display`, `base/feedback`, `base/navigation`, `base/skeleton`, `base/table`, `base/text-inputs`, `base/toolbar`, `base/typography`, `features/async-preview`.
|
|
32
31
|
|
|
33
32
|
Application policy—routing, fetching, persistence, permissions, and translation—stays
|
|
34
33
|
outside the package and arrives through the public props, callbacks, slots, or accessors below.
|
|
@@ -240,7 +239,7 @@ Kind: callable.
|
|
|
240
239
|
**Alternatives:** DataView.
|
|
241
240
|
|
|
242
241
|
```text
|
|
243
|
-
({ size, surface, headerTransparent, columns, data, columnGroups, enableSorting, enableFiltering, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, enableColumnVisibility, manualSorting, fullscreen: controlledFullscreen, defaultFullscreen, onFullscreenChange, showFullscreenToggle, stickyHeader, stickyToolbar, stickyFirstColumn, maxBodyHeight, fillAvailableHeight, striped, emptyStateMessage, emptyStateAction, className, rowClassName, cellClassName, headerClassName, wrapperClassName, tableContainerClassName, strings: stringsOverride, filterColumn, filterPlaceholder, topbarContent, topbarEnd, topbarClassName, toolbarLabelVisibility, footerContent, selectionToolbar, bulkActions, selectionToolbarClassName, rowActions, rowActionsMenuLabel, rowActionsDisplayMode, rowActionsBreakpoint, pageCount, page, onPageChange, totalRowCount, pageSize, onRowClick, onRowSelectionChange, onSortingChange, onColumnVisibilityChange, onColumnFiltersChange, getRowId, rowSelection: controlledRowSelection, sorting: controlledSorting, defaultSorting, columnVisibility: controlledColumnVisibility, defaultColumnVisibility, initialState, storageKey, style, }: DataTableProps<TData, TValue>) => import("react").JSX.Element
|
|
242
|
+
({ size, surface, headerTransparent, columns, data, columnGroups, enableSorting, enableFiltering, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, enableColumnVisibility, manualSorting, fullscreen: controlledFullscreen, defaultFullscreen, onFullscreenChange, showFullscreenToggle, stickyHeader, stickyToolbar, stickyFirstColumn, maxBodyHeight, fillAvailableHeight, striped, emptyStateMessage, emptyStateAction, className, rowClassName, cellClassName, headerClassName, wrapperClassName, tableContainerClassName, strings: stringsOverride, filterColumn, filterPlaceholder, topbarContent, topbarEnd, topbarClassName, toolbarLabelVisibility, footerContent, selectionToolbar, bulkActions, selectionToolbarClassName, rowActions, rowActionsMenuLabel, rowActionsDisplayMode, rowActionsBreakpoint, pageCount, page, onPageChange, totalRowCount, pageSize, onRowClick, expandedRow, onRowSelectionChange, onSortingChange, onColumnVisibilityChange, onColumnFiltersChange, getRowId, rowSelection: controlledRowSelection, sorting: controlledSorting, defaultSorting, columnVisibility: controlledColumnVisibility, defaultColumnVisibility, initialState, storageKey, style, }: DataTableProps<TData, TValue, TDetail>) => import("react").JSX.Element
|
|
244
243
|
```
|
|
245
244
|
|
|
246
245
|
### `DataTableActions`
|
|
@@ -274,7 +273,7 @@ Kind: callable.
|
|
|
274
273
|
The body rows, and the row that stands in for all of them when there are none.
|
|
275
274
|
|
|
276
275
|
```text
|
|
277
|
-
({ table, onRowClick, emptyStateMessage, emptyStateAction, cellClassName, rowClassName, stickyFirstColumn, hasSelectionColumn, striped, strings, }: DataTableBodyProps<TData>) => import("react").JSX.Element
|
|
276
|
+
({ table, onRowClick, emptyStateMessage, emptyStateAction, cellClassName, rowClassName, stickyFirstColumn, hasSelectionColumn, hasExpandColumn, expandedRow, expansionId, striped, strings, }: DataTableBodyProps<TData>) => import("react").JSX.Element
|
|
278
277
|
```
|
|
279
278
|
|
|
280
279
|
### `DataTableBodyProps`
|
|
@@ -291,9 +290,41 @@ Kind: interface.
|
|
|
291
290
|
| `rowClassName` | no | `string \| ((row: Row<TData>, index: number) => string)` | |
|
|
292
291
|
| `stickyFirstColumn` | no | `boolean` | |
|
|
293
292
|
| `hasSelectionColumn` | no | `boolean` | Whether column 0 is the selection checkbox, so the pinned pair covers the identity column too. |
|
|
293
|
+
| `hasExpandColumn` | no | `boolean` | Whether the expand toggle column leads the row (after any checkbox), for the pinned group. |
|
|
294
|
+
| `expandedRow` | no | `DataTableExpandedRow<TData, unknown>` | The expanded-row config. Open rows render its panel under them. |
|
|
295
|
+
| `expansionId` | no | `string` | Prefixes each panel's id and cache key, so two tables never share either. |
|
|
294
296
|
| `striped` | no | `boolean` | |
|
|
295
297
|
| `strings` | no | `DataTableStrings` | |
|
|
296
298
|
|
|
299
|
+
### `DataTableExpandedRow`
|
|
300
|
+
|
|
301
|
+
Kind: interface.
|
|
302
|
+
|
|
303
|
+
Expandable rows: a panel under an open row, opened by a toggle at the row's start. Passing
|
|
304
|
+
`expandedRow` at all turns it on; `render` is the one required field.
|
|
305
|
+
|
|
306
|
+
| member | required | type | description / documented default |
|
|
307
|
+
| --- | :-: | --- | --- |
|
|
308
|
+
| `render` | yes | `(row: TData, context: DataTableExpandedRowContext<TDetail>) => ReactNode` | The panel under an open row. |
|
|
309
|
+
| `onLoad` | no | `(row: TData, args: { signal: AbortSignal; }) => Promise<TDetail \| null \| undefined>` | Fetches what the panel shows when its row opens. The table shows a skeleton meanwhile,<br>aborts the request (`signal`) when the row closes, offers Retry on failure and keeps the<br>result for five minutes per row. `null` or `undefined` means the row has no details.<br>Write it before `render`: TypeScript types `detail` from it, left to right. |
|
|
310
|
+
| `canExpand` | no | `(row: TData) => boolean` | Rows it refuses get no toggle and never open. |
|
|
311
|
+
| `multiple` | no | `boolean` | Several rows open at once. `false` closes the open row when another opens. @default true |
|
|
312
|
+
| `expanded` | no | `Record<string, boolean>` | The open rows, keyed by row id. Controlled: rendered as given, even several under<br>`multiple: false`. Supply `getRowId` when `data` can reorder or page, or an open panel<br>follows a position rather than a record. |
|
|
313
|
+
| `defaultExpanded` | no | `Record<string, boolean>` | The rows open at first, keyed by row id. |
|
|
314
|
+
| `onExpandedChange` | no | `(expanded: Record<string, boolean>) => void` | |
|
|
315
|
+
|
|
316
|
+
### `DataTableExpandedRowContext`
|
|
317
|
+
|
|
318
|
+
Kind: interface.
|
|
319
|
+
|
|
320
|
+
What an open row's `render` is handed beside the row's data.
|
|
321
|
+
|
|
322
|
+
| member | required | type | description / documented default |
|
|
323
|
+
| --- | :-: | --- | --- |
|
|
324
|
+
| `detail` | yes | `TDetail` | What `onLoad` resolved to. `undefined` when there is no `onLoad`. |
|
|
325
|
+
| `refresh` | yes | `() => void` | Loads again, skipping the cache. Does nothing without `onLoad`. |
|
|
326
|
+
| `collapse` | yes | `() => void` | Closes this row's panel — after a save inside it, say. |
|
|
327
|
+
|
|
297
328
|
### `DataTableHeader`
|
|
298
329
|
|
|
299
330
|
Kind: callable.
|
|
@@ -302,7 +333,7 @@ The header rows — an optional band of column groups, then the columns. Sorting
|
|
|
302
333
|
doing the work; this only translates the column's state into it.
|
|
303
334
|
|
|
304
335
|
```text
|
|
305
|
-
({ table, stickyHeader, headerClassName, cellClassName, stickyFirstColumn, hasSelectionColumn, columnGroups, headerTransparent, }: DataTableHeaderProps<TData>) => import("react").JSX.Element
|
|
336
|
+
({ table, stickyHeader, headerClassName, cellClassName, stickyFirstColumn, hasSelectionColumn, hasExpandColumn, columnGroups, headerTransparent, }: DataTableHeaderProps<TData>) => import("react").JSX.Element
|
|
306
337
|
```
|
|
307
338
|
|
|
308
339
|
### `DataTableHeaderProps`
|
|
@@ -317,6 +348,7 @@ Kind: interface.
|
|
|
317
348
|
| `cellClassName` | no | `ClassNameFor<TData>` | |
|
|
318
349
|
| `stickyFirstColumn` | no | `boolean` | |
|
|
319
350
|
| `hasSelectionColumn` | no | `boolean` | Whether column 0 is the selection checkbox, so the pinned pair covers the identity column too. |
|
|
351
|
+
| `hasExpandColumn` | no | `boolean` | Whether the expand toggle column leads the row (after any checkbox), for the pinned group. |
|
|
320
352
|
| `columnGroups` | no | `ColumnGroup[]` | |
|
|
321
353
|
| `headerTransparent` | no | `boolean` | |
|
|
322
354
|
|
|
@@ -378,6 +410,7 @@ Kind: interface.
|
|
|
378
410
|
| `totalRowCount` | no | `number` | The result-count line beside the pager. |
|
|
379
411
|
| `pageSize` | no | `number` | |
|
|
380
412
|
| `onRowClick` | no | `RowClickHandler<TData>` | |
|
|
413
|
+
| `expandedRow` | no | `DataTableExpandedRow<TData, TDetail>` | Turns on expandable rows: a toggle column at the row's start AND the panel it opens,<br>with the state behind them. Without it the table has neither. |
|
|
381
414
|
| `onRowSelectionChange` | no | `RowSelectionHandler` | |
|
|
382
415
|
| `onSortingChange` | no | `SortingHandler` | |
|
|
383
416
|
| `onColumnVisibilityChange` | no | `ColumnVisibilityHandler` | |
|
|
@@ -409,7 +442,8 @@ Kind: interface.
|
|
|
409
442
|
|
|
410
443
|
Kind: type.
|
|
411
444
|
|
|
412
|
-
|
|
445
|
+
Row spacing for the whole table, not type size. Unset, a compact provider density picks
|
|
446
|
+
`sm`.
|
|
413
447
|
|
|
414
448
|
```text
|
|
415
449
|
ComponentScale
|
|
@@ -434,6 +468,7 @@ DataTable copy, nested per surface (toolbar, header, body, pager, selection bar)
|
|
|
434
468
|
| `pagination` | yes | `{ label: string; previous: string; next: string; page: (page: number) => string; morePages: string; summary: (from: number, to: number, total: number) => string; }` | |
|
|
435
469
|
| `selection` | yes | `{ summary: (selected: number, total: number) => string; row: (index: number) => string; selectAll: string; clear: string; }` | |
|
|
436
470
|
| `accessibility` | yes | `{ scrollRegion: string; fullscreenRegion: string; }` | |
|
|
471
|
+
| `expansion` | yes | `{ column: string; show: (index: number) => string; hide: (index: number) => string; loading: string; error: string; retry: string; empty: string; }` | Expandable rows: the toggle, and the panel's loading, error and empty states. |
|
|
437
472
|
|
|
438
473
|
### `DataTableStringsOverride`
|
|
439
474
|
|
|
@@ -641,11 +676,11 @@ string | number | Date | null | undefined
|
|
|
641
676
|
|
|
642
677
|
Kind: callable.
|
|
643
678
|
|
|
644
|
-
Which cells stay put when the table scrolls sideways
|
|
645
|
-
|
|
679
|
+
Which cells stay put when the table scrolls sideways: the leading checkbox and expand toggle,
|
|
680
|
+
when there are any, and the identity column after them, so a row never loses its name.
|
|
646
681
|
|
|
647
682
|
```text
|
|
648
|
-
(columnId: string, row: LegacyRow<TData> | null, cellClassName: ClassNameFor<TData> | undefined, stickyFirstColumn: boolean, cellIndex: number, hasSelectionColumn?: boolean) => string
|
|
683
|
+
(columnId: string, row: LegacyRow<TData> | null, cellClassName: ClassNameFor<TData> | undefined, stickyFirstColumn: boolean, cellIndex: number, hasSelectionColumn?: boolean, hasExpandColumn?: boolean) => string
|
|
649
684
|
```
|
|
650
685
|
|
|
651
686
|
### `ResourceCell`
|
|
@@ -907,7 +942,7 @@ export default function Table() {
|
|
|
907
942
|
},
|
|
908
943
|
]}
|
|
909
944
|
bulkActions={({ selectedRowCount }) => (
|
|
910
|
-
<Button type="button" tone="neutral"
|
|
945
|
+
<Button type="button" tone="neutral" appearance="outline" onClick={() => setNote(`archive ${selectedRowCount}`)}>
|
|
911
946
|
Archive selected
|
|
912
947
|
</Button>
|
|
913
948
|
)}
|
|
@@ -1008,7 +1043,7 @@ export default function TableSelection() {
|
|
|
1008
1043
|
<Button
|
|
1009
1044
|
type="button"
|
|
1010
1045
|
tone="neutral"
|
|
1011
|
-
|
|
1046
|
+
appearance="outline"
|
|
1012
1047
|
onClick={() => setNote(`archive ${selectedRowCount}`)}
|
|
1013
1048
|
>
|
|
1014
1049
|
Archive selected
|
|
@@ -1022,6 +1057,121 @@ export default function TableSelection() {
|
|
|
1022
1057
|
}
|
|
1023
1058
|
```
|
|
1024
1059
|
|
|
1060
|
+
### Expandable rows
|
|
1061
|
+
|
|
1062
|
+
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
1063
|
+
import { MetadataList } from "themelia-ui/base/display"
|
|
1064
|
+
import { DataTable } from "themelia-ui/features/table"
|
|
1065
|
+
import { Money } from "themelia-ui/primitives"
|
|
1066
|
+
|
|
1067
|
+
import { tableColumns } from "./_shared"
|
|
1068
|
+
import { BOOKINGS } from "./data"
|
|
1069
|
+
|
|
1070
|
+
/* Everything the panel shows is already on the row, so `render` is the whole configuration. */
|
|
1071
|
+
export default function TableExpandable() {
|
|
1072
|
+
return (
|
|
1073
|
+
<DataTable
|
|
1074
|
+
columns={tableColumns}
|
|
1075
|
+
data={BOOKINGS.slice(0, 4)}
|
|
1076
|
+
getRowId={(row) => row.id}
|
|
1077
|
+
expandedRow={{
|
|
1078
|
+
defaultExpanded: { b1: true },
|
|
1079
|
+
render: (booking) => (
|
|
1080
|
+
<MetadataList
|
|
1081
|
+
layout="grid"
|
|
1082
|
+
columns={4}
|
|
1083
|
+
items={[
|
|
1084
|
+
{ label: "Reference", value: booking.reference },
|
|
1085
|
+
{ label: "Guests", value: String(booking.guests) },
|
|
1086
|
+
{ label: "Total", value: <Money amount={booking.total} currency="EUR" /> },
|
|
1087
|
+
{ label: "Contact", value: booking.customerEmail },
|
|
1088
|
+
]}
|
|
1089
|
+
/>
|
|
1090
|
+
),
|
|
1091
|
+
}}
|
|
1092
|
+
/>
|
|
1093
|
+
)
|
|
1094
|
+
}
|
|
1095
|
+
```
|
|
1096
|
+
|
|
1097
|
+
### Details on demand
|
|
1098
|
+
|
|
1099
|
+
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
1100
|
+
import { MetadataList } from "themelia-ui/base/display"
|
|
1101
|
+
import { Stack } from "themelia-ui/base/structure"
|
|
1102
|
+
import { Text } from "themelia-ui/base/typography"
|
|
1103
|
+
import { DataTable } from "themelia-ui/features/table"
|
|
1104
|
+
|
|
1105
|
+
import { tableColumns } from "./_shared"
|
|
1106
|
+
import { BOOKINGS, type Booking } from "./data"
|
|
1107
|
+
|
|
1108
|
+
interface BookingDetail {
|
|
1109
|
+
event: string
|
|
1110
|
+
deposit: string
|
|
1111
|
+
arrival: string
|
|
1112
|
+
notes: string
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
const DETAILS: Record<string, BookingDetail> = {
|
|
1116
|
+
b1: { event: "Autumn gala", deposit: "€2,400 paid", arrival: "17:00, main entrance", notes: "Needs step-free access to the terrace." },
|
|
1117
|
+
b2: { event: "Book launch", deposit: "Awaiting payment", arrival: "18:30, side door", notes: "A signing table by the window." },
|
|
1118
|
+
b3: { event: "Wedding reception", deposit: "€5,000 paid", arrival: "14:00, river gate", notes: "The band loads in through the courtyard." },
|
|
1119
|
+
b5: { event: "Team offsite", deposit: "€420 paid", arrival: "09:00, main entrance", notes: "A projector and two flip charts." },
|
|
1120
|
+
b6: { event: "Charity dinner", deposit: "Awaiting payment", arrival: "19:00, main entrance", notes: "Auction tables along the east wall." },
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
const attempts = new Map<string, number>()
|
|
1124
|
+
|
|
1125
|
+
/** A stand-in API: some latency, and The Old Granary's first load fails, so Retry has something to recover. */
|
|
1126
|
+
function fetchBookingDetail(booking: Booking, signal: AbortSignal): Promise<BookingDetail | null> {
|
|
1127
|
+
return new Promise((resolve, reject) => {
|
|
1128
|
+
const timer = window.setTimeout(() => {
|
|
1129
|
+
const attempt = (attempts.get(booking.id) ?? 0) + 1
|
|
1130
|
+
attempts.set(booking.id, attempt)
|
|
1131
|
+
if (booking.id === "b2" && attempt === 1) reject(new Error("The booking service timed out."))
|
|
1132
|
+
else resolve(DETAILS[booking.id] ?? null)
|
|
1133
|
+
}, 700)
|
|
1134
|
+
// Closing the row aborts: the request stops, and nothing is written after it.
|
|
1135
|
+
signal.addEventListener("abort", () => {
|
|
1136
|
+
window.clearTimeout(timer)
|
|
1137
|
+
reject(new DOMException("Aborted", "AbortError"))
|
|
1138
|
+
})
|
|
1139
|
+
})
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
export default function TableExpandableAsync() {
|
|
1143
|
+
return (
|
|
1144
|
+
<DataTable
|
|
1145
|
+
columns={tableColumns}
|
|
1146
|
+
data={BOOKINGS}
|
|
1147
|
+
getRowId={(row) => row.id}
|
|
1148
|
+
enableRowSelection
|
|
1149
|
+
stickyFirstColumn
|
|
1150
|
+
expandedRow={{
|
|
1151
|
+
onLoad: (booking, { signal }) => fetchBookingDetail(booking, signal),
|
|
1152
|
+
render: (_booking, { detail }) => (
|
|
1153
|
+
<Stack gap="sm">
|
|
1154
|
+
<MetadataList
|
|
1155
|
+
layout="grid"
|
|
1156
|
+
columns={3}
|
|
1157
|
+
items={[
|
|
1158
|
+
{ label: "Event", value: detail.event },
|
|
1159
|
+
{ label: "Deposit", value: detail.deposit },
|
|
1160
|
+
{ label: "Arrival", value: detail.arrival },
|
|
1161
|
+
]}
|
|
1162
|
+
/>
|
|
1163
|
+
<Text size="sm" type="secondary">{detail.notes}</Text>
|
|
1164
|
+
</Stack>
|
|
1165
|
+
),
|
|
1166
|
+
// A cancelled booking has nothing left to show.
|
|
1167
|
+
canExpand: (booking) => booking.status !== "cancelled",
|
|
1168
|
+
multiple: false,
|
|
1169
|
+
}}
|
|
1170
|
+
/>
|
|
1171
|
+
)
|
|
1172
|
+
}
|
|
1173
|
+
```
|
|
1174
|
+
|
|
1025
1175
|
### Nothing to show
|
|
1026
1176
|
|
|
1027
1177
|
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
@@ -1038,7 +1188,7 @@ export default function TableEmpty() {
|
|
|
1038
1188
|
columns={tableColumns.slice(0, 3)}
|
|
1039
1189
|
data={[]}
|
|
1040
1190
|
emptyStateMessage="No bookings match these filters."
|
|
1041
|
-
emptyStateAction={<Button type="button" tone="neutral"
|
|
1191
|
+
emptyStateAction={<Button type="button" tone="neutral" appearance="outline">Clear filters</Button>}
|
|
1042
1192
|
/>
|
|
1043
1193
|
)
|
|
1044
1194
|
}
|
|
@@ -15,7 +15,6 @@ Users change theme, density or scale at runtime and the result must persist.
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { ThemeScope } from "themelia-ui/features/theme-tweaker"
|
|
18
|
-
import "themelia-ui/features/theme-tweaker.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
@@ -31,6 +30,8 @@ outside the package and arrives through the public props, callbacks, slots, or a
|
|
|
31
30
|
|
|
32
31
|
Kind: callable.
|
|
33
32
|
|
|
33
|
+
How many variables the theme changes; a colour edited in both modes counts once.
|
|
34
|
+
|
|
34
35
|
```text
|
|
35
36
|
(theme: ThemeDefinition) => number
|
|
36
37
|
```
|
|
@@ -39,8 +40,7 @@ Kind: callable.
|
|
|
39
40
|
|
|
40
41
|
Kind: callable.
|
|
41
42
|
|
|
42
|
-
|
|
43
|
-
the class, and the scope inside an element that carries it).
|
|
43
|
+
The selector that scopes a theme to one subtree instead of the document.
|
|
44
44
|
|
|
45
45
|
```text
|
|
46
46
|
(scopeSelector: string) => ThemeSelectors
|
|
@@ -119,8 +119,8 @@ UIConfigSettingsStrings
|
|
|
119
119
|
|
|
120
120
|
Kind: callable.
|
|
121
121
|
|
|
122
|
-
The
|
|
123
|
-
|
|
122
|
+
The two shadows from one intensity: the default theme's geometry, with every layer's ink
|
|
123
|
+
scaled so 0.8 reproduces it exactly.
|
|
124
124
|
|
|
125
125
|
```text
|
|
126
126
|
({ intensity }: ThemeElevationRecipe) => ThemeOverrides
|
|
@@ -164,7 +164,8 @@ Kind: callable.
|
|
|
164
164
|
|
|
165
165
|
Kind: callable.
|
|
166
166
|
|
|
167
|
-
|
|
167
|
+
The values the theme gives in one mode: shared first, then that mode's colour halves. For
|
|
168
|
+
showing a value; the element's `color-scheme` is what picks the half on the page.
|
|
168
169
|
|
|
169
170
|
```text
|
|
170
171
|
(theme: ThemeDefinition, mode?: ThemeMode) => ThemeOverrides
|
|
@@ -240,6 +241,18 @@ Kind: interface.
|
|
|
240
241
|
| `providerConfig` | yes | `UIConfig` | |
|
|
241
242
|
| `providerConfigText` | yes | `string` | TypeScript source exporting `uiConfig`. |
|
|
242
243
|
|
|
244
|
+
### `themeFromConfig`
|
|
245
|
+
|
|
246
|
+
Kind: callable.
|
|
247
|
+
|
|
248
|
+
A provider theme, such as one of `themes` from `themelia-ui/theming`, as a definition the
|
|
249
|
+
tweaker can edit and export: each `light-dark()` colour split into its two halves, a single
|
|
250
|
+
colour kept for both modes, the radii and extra variables shared.
|
|
251
|
+
|
|
252
|
+
```text
|
|
253
|
+
(config: ThemeConfig, mode?: ThemeMode) => ThemeDefinition
|
|
254
|
+
```
|
|
255
|
+
|
|
243
256
|
### `ThemeMode`
|
|
244
257
|
|
|
245
258
|
Kind: type.
|
|
@@ -294,13 +307,12 @@ Extends: `Omit<HTMLAttributes<HTMLDivElement>, "children">`.
|
|
|
294
307
|
|
|
295
308
|
Kind: interface.
|
|
296
309
|
|
|
310
|
+
Where a serialised theme is declared. One selector: a colour carries both modes in its
|
|
311
|
+
`light-dark()` value, and the element's `color-scheme` picks the half.
|
|
312
|
+
|
|
297
313
|
| member | required | type | description / documented default |
|
|
298
314
|
| --- | :-: | --- | --- |
|
|
299
|
-
| `shared` | yes | `string` |
|
|
300
|
-
| `light` | yes | `string` | Explicit light: a `.light` or `data-theme="light"` element and the boundaries inside it. |
|
|
301
|
-
| `dark` | yes | `string` | Explicit dark: a `.dark` or `data-theme="dark"` element and the boundaries inside it. |
|
|
302
|
-
| `systemLight` | no | `string` | Light by OS preference (no explicit theme), emitted under `prefers-color-scheme: light`. |
|
|
303
|
-
| `systemDark` | no | `string` | Dark by OS preference (no explicit theme), emitted under `prefers-color-scheme: dark`. |
|
|
315
|
+
| `shared` | yes | `string` | `:root` for the whole application, or a scope's own selector. |
|
|
304
316
|
|
|
305
317
|
### `ThemeStyle`
|
|
306
318
|
|
|
@@ -316,8 +328,11 @@ CSSProperties & Partial<Record<ThemeVariableName, string>>
|
|
|
316
328
|
|
|
317
329
|
Kind: callable.
|
|
318
330
|
|
|
331
|
+
The theme as an inline style: shared values and each colour's `light-dark()` pair. The
|
|
332
|
+
element's `color-scheme` (set by `.light`, `.dark` or `data-theme`) picks the half.
|
|
333
|
+
|
|
319
334
|
```text
|
|
320
|
-
(theme: ThemeDefinition
|
|
335
|
+
(theme: ThemeDefinition) => ThemeStyle
|
|
321
336
|
```
|
|
322
337
|
|
|
323
338
|
### `ThemeTweaker`
|
|
@@ -432,7 +447,7 @@ A slider and a numeric box, for a variable with real bounds.
|
|
|
432
447
|
Kind: type.
|
|
433
448
|
|
|
434
449
|
```text
|
|
435
|
-
"surfaces-content" | "brand-actions" | "charts" | "sidebar" | "semantic-feedback" | "
|
|
450
|
+
"surfaces-content" | "brand-actions" | "charts" | "sidebar" | "semantic-feedback" | "tints" | "font-families" | "type-scale" | "radius" | "elevation" | "spacing" | "controls" | "motion" | "application-shell"
|
|
436
451
|
```
|
|
437
452
|
|
|
438
453
|
### `ThemeTweakerStrings`
|
|
@@ -500,7 +515,7 @@ Kind: interface.
|
|
|
500
515
|
| `providerSettings` | yes | `UIConfigSettingsStrings` | |
|
|
501
516
|
| `groups` | yes | `Record<"colors" \| "states" \| "typography" \| "shape" \| "structure" \| "defaults", string>` | |
|
|
502
517
|
| `groupDescriptions` | yes | `Record<"colors" \| "states" \| "typography" \| "shape" \| "structure" \| "defaults", string>` | |
|
|
503
|
-
| `sections` | yes | `Record<"surfaces-content" \| "brand-actions" \| "charts" \| "sidebar" \| "semantic-feedback" \| "
|
|
518
|
+
| `sections` | yes | `Record<"surfaces-content" \| "brand-actions" \| "charts" \| "sidebar" \| "semantic-feedback" \| "tints" \| "font-families" \| "type-scale" \| "radius" \| "elevation" \| "spacing" \| "controls" \| "motion" \| "application-shell", string>` | |
|
|
504
519
|
|
|
505
520
|
### `ThemeTweakerTarget`
|
|
506
521
|
|
|
@@ -602,7 +617,7 @@ const SQUARE_CORNERS = createTheme({ shared: { "--radius": "0.25rem", "--radius-
|
|
|
602
617
|
|
|
603
618
|
export default function IsolatedThemeScope() {
|
|
604
619
|
return (
|
|
605
|
-
<Grid
|
|
620
|
+
<Grid>
|
|
606
621
|
<Card
|
|
607
622
|
title="App theme"
|
|
608
623
|
description="The corners every other region uses."
|
|
@@ -147,14 +147,14 @@ export default function FormBindingState() {
|
|
|
147
147
|
)
|
|
148
148
|
|
|
149
149
|
return (
|
|
150
|
-
<Stack
|
|
150
|
+
<Stack style={{ maxWidth: "26rem", width: "100%" }}>
|
|
151
151
|
<BoundInput name="email" label="Email" control={control} type="email" />
|
|
152
152
|
<BoundInput name="workspace" label="Workspace" control={control} />
|
|
153
153
|
<Stack direction="horizontal" gap="sm" align="center">
|
|
154
154
|
<Button onClick={() => setSubmitted(JSON.stringify(control.values))}>
|
|
155
155
|
Submit
|
|
156
156
|
</Button>
|
|
157
|
-
<Button
|
|
157
|
+
<Button appearance="outline" onClick={() => control.reset()}>
|
|
158
158
|
Reset
|
|
159
159
|
</Button>
|
|
160
160
|
</Stack>
|