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
|
@@ -3,6 +3,154 @@
|
|
|
3
3
|
What changes between versions, what to do when you upgrade, and which changes a stable major
|
|
4
4
|
allows.
|
|
5
5
|
|
|
6
|
+
## Upgrading to 3.2
|
|
7
|
+
|
|
8
|
+
3.2 adds consumer diagnostics, complete reference workflows and optional `scopeKey` support
|
|
9
|
+
for asynchronous combobox lookups, alongside responsive grid, dialog and navigation fixes.
|
|
10
|
+
Applications already on 3.1 need no new codemod replacements. Applications upgrading from
|
|
11
|
+
3.0 or earlier must also follow [Upgrading to 3.1](#upgrading-to-31).
|
|
12
|
+
|
|
13
|
+
After updating the package, refresh the installed consumer skill with the
|
|
14
|
+
[packaged installer](verification.md#offline-diagnosis-and-skill-freshness). Review any
|
|
15
|
+
local edits before replacing them, then run the read-only diagnostics and your application's
|
|
16
|
+
type, build and interaction checks. The [structural guide](structure-and-spacing.md),
|
|
17
|
+
[blocks guide](blocks.md) and [complete workflows](reference-workflows.md) describe the
|
|
18
|
+
public composition contracts.
|
|
19
|
+
|
|
20
|
+
For lookups whose results depend on a workspace, tenant or similar context, pass a stable
|
|
21
|
+
`scopeKey` that changes with that context. The lookup aborts and invalidates old responses;
|
|
22
|
+
the application still owns clearing a selection or query that is no longer valid. See the
|
|
23
|
+
[scoped resource selection workflow](reference-workflows.md).
|
|
24
|
+
|
|
25
|
+
## Upgrading to 3.1
|
|
26
|
+
|
|
27
|
+
3.1 renames and removes public API as well as adding to it. Upgrade deliberately, not
|
|
28
|
+
through a caret range: pin `themelia-ui` to `~3.0.0` until you have run the codemod and fixed
|
|
29
|
+
what TypeScript reports.
|
|
30
|
+
|
|
31
|
+
**Blocks are published under `blocks/`.** The tier the documentation, the component index
|
|
32
|
+
and the finder call Blocks now has subpaths that say so:
|
|
33
|
+
|
|
34
|
+
| was | is |
|
|
35
|
+
| --- | --- |
|
|
36
|
+
| `themelia-ui/patterns/analytics` | `themelia-ui/blocks/analytics` |
|
|
37
|
+
| `themelia-ui/patterns/onboarding` | `themelia-ui/blocks/onboarding` |
|
|
38
|
+
| `themelia-ui/patterns/timelines` | `themelia-ui/blocks/timelines` |
|
|
39
|
+
| `themelia-ui/admin/patterns/access` | `themelia-ui/blocks/admin/access` |
|
|
40
|
+
| `themelia-ui/admin/patterns/commerce` | `themelia-ui/blocks/admin/commerce` |
|
|
41
|
+
|
|
42
|
+
Module stylesheet subpaths are removed. Importing a component in a bundled app brings its CSS.
|
|
43
|
+
|
|
44
|
+
**Components bring their own CSS.** In a bundled app, importing a component now brings its
|
|
45
|
+
stylesheet, once, and a module you never import brings none. To upgrade:
|
|
46
|
+
|
|
47
|
+
1. Run the codemod over each directory that holds application code: `src/`, and `app/` or
|
|
48
|
+
`.storybook/` where you have them.
|
|
49
|
+
It removes JavaScript imports of `themelia-ui/style.css` and of module stylesheets, which would
|
|
50
|
+
now load the CSS twice.
|
|
51
|
+
2. The codemod removes obsolete module CSS `@import`s. Review any remaining stylesheet
|
|
52
|
+
references it reports. With Tailwind, keep `@import "tailwindcss"` and the bridge, and drop
|
|
53
|
+
`@import "themelia-ui/style.css"` or `@import "themelia-ui/core.css"` from the Tailwind entry.
|
|
54
|
+
3. If the application renders on the server with Vite (Astro, React Router, TanStack Start, Vike),
|
|
55
|
+
list `themelia-ui`, and any installed package that imports it, in `ssr.noExternal`; Astro
|
|
56
|
+
renders the kit unstyled without it. See
|
|
57
|
+
[Server rendering with Vite](installation.md#server-rendering-with-vite).
|
|
58
|
+
4. If your bundler config sets its own resolve conditions, keep `module` in them.
|
|
59
|
+
5. Pages that link stylesheets without a bundler link `style.css`.
|
|
60
|
+
|
|
61
|
+
**Fill style is `appearance`.** `tone` is colour, `appearance` is fill and `variant` is
|
|
62
|
+
structure, on every component. TypeScript reports each rename:
|
|
63
|
+
|
|
64
|
+
| was | is |
|
|
65
|
+
| --- | --- |
|
|
66
|
+
| `buttonStyle` on a Button, a Button-like component or an action definition | `appearance` |
|
|
67
|
+
| `ButtonStyle`, `ActionButtonStyle` | `ButtonAppearance`, `ActionAppearance` |
|
|
68
|
+
| `defaults: { button: { buttonStyle } }` | `defaults: { button: { appearance } }` |
|
|
69
|
+
| `variant` on `Badge`, `Toggle` and `SidebarMenuButton` | `appearance` |
|
|
70
|
+
| `BadgeVariant` | `BadgeAppearance` |
|
|
71
|
+
| `badgeVariants({ tone, variant })` on your own element | `<Badge tone appearance render={<a … />}>` |
|
|
72
|
+
| `badgeVariant` on a metadata badge value | `badgeAppearance` |
|
|
73
|
+
| `confirmStyle` on an overlay or an action modality | `confirmAppearance` |
|
|
74
|
+
|
|
75
|
+
Button renders `data-appearance` instead of `data-style`, and Toggle `data-appearance`
|
|
76
|
+
instead of `data-variant`: update CSS that selects either.
|
|
77
|
+
|
|
78
|
+
**Two steps for every size.** A size, padding or gap prop offers `default` and `sm`. `md` is
|
|
79
|
+
`default`, which is also what leaving the prop out gives you; a step larger than the default
|
|
80
|
+
is gone. The gaps map like this:
|
|
81
|
+
|
|
82
|
+
| was | is |
|
|
83
|
+
| --- | --- |
|
|
84
|
+
| `gap="2xs"`, `"xs"`, `"sm"`, `"md"` | `gap="sm"` (8px) |
|
|
85
|
+
| `gap="lg"`, `"xl"`, `"2xl"` | `gap="default"` (16px), or no `gap` |
|
|
86
|
+
| no `gap` on a `Stack` or `Split` (8px) | 16px; write `gap="sm"` to keep 8px |
|
|
87
|
+
|
|
88
|
+
Widths take `default`, `sm`, `full`, `none` or a CSS length such as `"48rem"`, and a free
|
|
89
|
+
string no longer type-checks. `Slider` and `SliderField` lose `size`, `InputGroupButton`
|
|
90
|
+
takes `iconOnly` instead of its icon sizes, and an action modality's `size`, which nothing
|
|
91
|
+
read, is gone.
|
|
92
|
+
|
|
93
|
+
**`density` belongs to the provider.** `MetadataList density="compact"` becomes
|
|
94
|
+
`size="sm"`, `MediaLibrary density="compact"` becomes `size="sm"`, `ActivityFeed density`
|
|
95
|
+
becomes `variant`, and `AiTask density="expanded"` becomes `defaultExpanded`. CSS that
|
|
96
|
+
selects `[data-row-density]`, `[data-media-density]` or `[data-activity-density]` selects
|
|
97
|
+
`[data-size]` or `[data-variant]`.
|
|
98
|
+
|
|
99
|
+
`Text` drops `size="xxs"` and `weight="regular"`: write `xs` and `normal`.
|
|
100
|
+
|
|
101
|
+
**The theme is one level.** It is about eighty variables, declared once at `:root`, each
|
|
102
|
+
colour a `light-dark(light, dark)` pair. For a theme of your own:
|
|
103
|
+
|
|
104
|
+
- Declare it on `:root` alone. The selector list 3.0 asked for (`:root, [data-ui-scope],
|
|
105
|
+
[data-density], [data-theme], .light, .dark`) is not needed: component styles inherit the
|
|
106
|
+
root defaults. Explicit regional overrides and density presets replace their corresponding
|
|
107
|
+
inherited values; set a preset-specific spacing override on that preset.
|
|
108
|
+
- Write a dark value into the colour's pair, `--primary: light-dark(#2563eb, #60a5fa)`, rather
|
|
109
|
+
than a `.dark { … }` block, which colours a dark page but misses a dark region inside a light
|
|
110
|
+
one.
|
|
111
|
+
- The palette, the alpha steps, the spacing ladder, the control, icon and avatar ladders, the
|
|
112
|
+
derived role variables and the scale factors are gone. The codemod renames a variable that
|
|
113
|
+
has a successor and reports the rest:
|
|
114
|
+
|
|
115
|
+
| was | is |
|
|
116
|
+
| --- | --- |
|
|
117
|
+
| `--space-2xs` to `--space-md` | `--gap-sm` between things, `--padding-sm` for an inset |
|
|
118
|
+
| `--space-lg` to `--space-2xl` | `--gap` between things, `--padding` for an inset |
|
|
119
|
+
| `--surface-px`, `--surface-py`; `--row-px`, `--row-py` | `--padding`; `--padding-sm` |
|
|
120
|
+
| `--control-h`, `--control-h-sm` | `--control-height`, `--control-height-sm` |
|
|
121
|
+
| `--size-icon`, `--size-icon-sm` | `--icon-size`, `--icon-size-sm` |
|
|
122
|
+
| `--primary-10` and every other alpha step | `color-mix(in oklab, var(--primary) var(--tint), transparent)`; a line takes `--tint-strong` |
|
|
123
|
+
| `--accent-50`, `--border-60`, `--muted-50` | `--accent`, `--border`, `--muted` |
|
|
124
|
+
| `--control-border`, `--focus-ring-color`, `--link-color` | `--input`, `--ring`, `--link` |
|
|
125
|
+
| `--shadow-xs`, `--shadow-sm`; `--shadow-md` to `--shadow-2xl`, `--popover-shadow` | `--shadow`; `--shadow-lg` |
|
|
126
|
+
| `--duration-normal`, `--duration-instant`, `--ease-out` | `--duration`, `--duration-fast`, `--ease` |
|
|
127
|
+
| `--leading-*`, `--weight-*`, `--tracking-*` | Text's `lineHeight`, `weight` and `caps` |
|
|
128
|
+
| `--scale`, `--density-scale` | the provider's `scale` and `density` |
|
|
129
|
+
| `--inverse-*` | a nested provider with `colorScheme: "dark"` |
|
|
130
|
+
| `--animate-spin` and the other `--animate-*` | `--keyframes-spin` and the others, which hold the name alone: `animation: var(--keyframes-spin) 1s linear infinite` |
|
|
131
|
+
|
|
132
|
+
`--text-scale` stays, and Text multiplies each step by it. A component variable you set from
|
|
133
|
+
outside, such as `--content-block-p`, `--overlay-region-p`, `--field-label-width` or
|
|
134
|
+
`--chart-aspect`, is the component's own now: set the theme variable it reads, or style the
|
|
135
|
+
component through `className`. With Tailwind, `p-padding` and `gap-gap-sm` replace `p-md` and
|
|
136
|
+
the other spacing keys, and `rounded` is the container radius.
|
|
137
|
+
|
|
138
|
+
**A browser floor for `light-dark()`.** Safari 17.5 or newer; Chrome and Edge 125 and Firefox
|
|
139
|
+
121 are unchanged.
|
|
140
|
+
|
|
141
|
+
Run the codemod from your project over each directory that holds application code, dry
|
|
142
|
+
first; the commands below show `src/`. It rewrites the moved subpaths, removes the
|
|
143
|
+
stylesheet imports components now bring, renames each theme variable that has a successor,
|
|
144
|
+
and reports the rest:
|
|
145
|
+
|
|
146
|
+
```sh
|
|
147
|
+
node node_modules/themelia-ui/scripts/consumer/codemod.mjs --dry-run src/
|
|
148
|
+
node node_modules/themelia-ui/scripts/consumer/codemod.mjs src/
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Every change with its replacement is listed in the
|
|
152
|
+
migration reference (`node_modules/themelia-ui/docs/generated/migration.md`).
|
|
153
|
+
|
|
6
154
|
## Upgrading to 3.0
|
|
7
155
|
|
|
8
156
|
3.0 changes how the package loads, and gives a few props one shape.
|
|
@@ -16,6 +164,9 @@ the package as it is. Server rendering and test runners need no configuration fo
|
|
|
16
164
|
CommonJS code on Node 20.19 or later can `require()` it. Jest still needs the package
|
|
17
165
|
exempted in `transformIgnorePatterns`.
|
|
18
166
|
|
|
167
|
+
From 3.1, components bring their own CSS again, and server rendering with Vite lists the
|
|
168
|
+
package in `ssr.noExternal`; see [Upgrading to 3.1](#upgrading-to-31).
|
|
169
|
+
|
|
19
170
|
TypeScript flags the rest:
|
|
20
171
|
|
|
21
172
|
- `Scope` takes `render` instead of `as`: `<Scope vars={vars} render={<section />}>`.
|
|
@@ -201,14 +352,14 @@ Every change is one of:
|
|
|
201
352
|
- **additive**: a new export, a new optional prop
|
|
202
353
|
- **documentation-only**: no runtime or type change
|
|
203
354
|
- **behaviour-preserving internal**: a refactor whose observable behaviour is identical
|
|
204
|
-
- **deprecation**:
|
|
355
|
+
- **deprecation**: an old name still works while a replacement is available
|
|
205
356
|
- **breaking**: anything else
|
|
206
357
|
|
|
207
|
-
##
|
|
358
|
+
## Upgrade policy
|
|
208
359
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
360
|
+
3.1 removes obsolete aliases and adapters without retaining them for another release. Pin the
|
|
361
|
+
installed version until the application is ready to apply the migration guide, type-check and
|
|
362
|
+
build. Breaking changes are recorded before the API snapshot is updated.
|
|
212
363
|
|
|
213
364
|
## Import paths
|
|
214
365
|
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Provider and scoping
|
|
2
2
|
|
|
3
|
+
Choose one document density owner, then use UIScope for a deliberately different region.
|
|
4
|
+
Changing density changes spacing; keep primary copy in Text and headings in Heading or their
|
|
5
|
+
component owners. Check the last field/next heading together: CardContent, FormSection and
|
|
6
|
+
Stack can each contribute separation. A portal must stay inside its intended token scope;
|
|
7
|
+
UIPortalHost provides that boundary. Test open popups as well as the page beneath them.
|
|
8
|
+
|
|
3
9
|
Three components, and the difference between them is what they are allowed to touch.
|
|
4
10
|
|
|
5
11
|
| | Renders | Reaches | Use for |
|
|
@@ -65,43 +71,40 @@ below a slice as well as at it:
|
|
|
65
71
|
</UIProvider>
|
|
66
72
|
```
|
|
67
73
|
|
|
68
|
-
This applies to every record-shaped field: `theme.colors`, `theme.
|
|
69
|
-
`typography.
|
|
70
|
-
|
|
74
|
+
This applies to every record-shaped field: `theme.colors`, `theme.vars`, `typography.fonts`,
|
|
75
|
+
`typography.sizes` and `motion.durations`. Below them a record is a flat map of variable to
|
|
76
|
+
value, and a value is replaced, not merged.
|
|
71
77
|
|
|
72
78
|
That is the configuration components read, and the CSS follows it: each scope writes the
|
|
73
79
|
merged overrides on its element, so inside the nested scope above `--primary` is red and
|
|
74
|
-
`--secondary` is green.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
80
|
+
`--secondary` is green. Component styles inherit global tokens rather than redeclaring
|
|
81
|
+
theme defaults. Explicit Scope/UIScope overrides replace inherited values; a density preset
|
|
82
|
+
also resets its spacing and control heights on that region. A value outside that boundary
|
|
83
|
+
does not override its local declaration; see
|
|
84
|
+
[Theming](theming.md#setting-a-theme).
|
|
79
85
|
|
|
80
86
|
## Scope — tokens only
|
|
81
87
|
|
|
82
|
-
|
|
88
|
+
`Scope` sets theme variables on a region, without the config machinery:
|
|
83
89
|
|
|
84
90
|
```tsx fragment — shape only, not a program
|
|
85
|
-
<Scope vars={{ "--
|
|
91
|
+
<Scope vars={{ "--control-height": "2.5rem" }}>
|
|
86
92
|
<Toolbar />
|
|
87
93
|
</Scope>
|
|
88
94
|
```
|
|
89
95
|
|
|
90
|
-
`Scope` renders a `div` without layout. `render` picks another element
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
`<div style={{ "--density-scale": 0.8 }}>` sets the variable and nothing reads it: the
|
|
96
|
-
measurements above it already resolved against the old value. `Scope` renders
|
|
97
|
-
`data-ui-scope`, which puts the element on that list and makes every derived token
|
|
98
|
-
re-compute.
|
|
96
|
+
`Scope` renders a `div` without layout. Its `render` prop picks another element
|
|
97
|
+
(`render={<section />}`), and `transparent={false}` gives it a box. Every
|
|
98
|
+
component inside reads the variables it sets, because components compute from the theme where
|
|
99
|
+
they use it; any element with a `style` does the same, and `Scope` only adds the missing
|
|
100
|
+
layout rule and the `data-ui-scope` marker.
|
|
99
101
|
|
|
100
102
|
## Portals and scopes
|
|
101
103
|
|
|
102
|
-
A scope
|
|
103
|
-
|
|
104
|
-
|
|
104
|
+
A scope uses CSS custom properties; its `data-density` and `data-theme` attributes establish
|
|
105
|
+
spacing and colour-scheme values that inherit through the DOM subtree. The attributes
|
|
106
|
+
themselves are not copied to descendants. A portal renders elsewhere in the document, so
|
|
107
|
+
those inherited values do not follow it by default:
|
|
105
108
|
|
|
106
109
|
```tsx fragment — a template with a hole in it
|
|
107
110
|
<UIScope config={{ density: "compact" }}>
|
|
@@ -142,7 +145,7 @@ in — a shadow root, or a positioned overlay element it manages itself.
|
|
|
142
145
|
|
|
143
146
|
## Strict Content Security Policy
|
|
144
147
|
|
|
145
|
-
Some Base UI-backed controls emit a tiny inline style or pre-hydration script for behavior
|
|
148
|
+
Some Base UI-backed controls emit a tiny inline style element or pre-hydration script for behavior
|
|
146
149
|
the component stylesheet cannot express. Put `CSPProvider` at the same application boundary
|
|
147
150
|
as `UIRoot` and pass the request nonce through:
|
|
148
151
|
|
|
@@ -160,7 +163,7 @@ React 19 hoists styles that carry `precedence`. During streaming SSR, configure
|
|
|
160
163
|
renderer with the same style nonce as the provider; otherwise React omits the attribute and
|
|
161
164
|
warns about the mismatch.
|
|
162
165
|
|
|
163
|
-
When the policy
|
|
166
|
+
When the policy forbids inline style elements, suppress Base UI's style elements and
|
|
164
167
|
ship the scrollbar rule in the consuming application's stylesheet:
|
|
165
168
|
|
|
166
169
|
```tsx fragment — App comes from the consuming application
|
|
@@ -175,7 +178,16 @@ ship the scrollbar rule in the consuming application's stylesheet:
|
|
|
175
178
|
```
|
|
176
179
|
|
|
177
180
|
`disableStyleElements` does not disable kit behavior; it moves those small rules into the
|
|
178
|
-
consuming app. It does not
|
|
181
|
+
consuming app. It does not change how the kit's CSS loads.
|
|
182
|
+
|
|
183
|
+
This option does not remove inline scripts or `style` attributes. A nonce authorizes the
|
|
184
|
+
matching style/script elements; it does not authorize style attributes in server-rendered
|
|
185
|
+
HTML. Providers, responsive structure and popup positioning can use style attributes, so
|
|
186
|
+
a policy that blocks them needs a separate SSR strategy for the adopted components.
|
|
187
|
+
Inspect the rendered HTML and browser CSP reports; `disableStyleElements` alone does not
|
|
188
|
+
establish compatibility with that policy. See the
|
|
189
|
+
[Base UI CSP reference](https://base-ui.com/react/utils/csp-provider#inline-style-attributes)
|
|
190
|
+
for the distinction and available integration strategies.
|
|
179
191
|
|
|
180
192
|
## Reading the config
|
|
181
193
|
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Complete reference workflows
|
|
2
|
+
|
|
3
|
+
These sources use public package imports and fixed local mock operations. Copy the complete
|
|
4
|
+
workflow directory, including relative helpers, then replace its transport and policy with
|
|
5
|
+
your application's. The versioned inventory (`node_modules/themelia-ui/docs/generated/workflows/index.json`) lists every
|
|
6
|
+
file, import and API reference. Its package version must match the installed package.
|
|
7
|
+
|
|
8
|
+
| Workflow | Owners and application seam | Complete entry source |
|
|
9
|
+
| --- | --- | --- |
|
|
10
|
+
| Record detail | Page owns route heading; sibling Cards own subjects; MetadataList owns facts; app owns record commands | Record detail (`node_modules/themelia-ui/docs/generated/workflows/record-detail/page-layout/record-detail-reference.tsx`) |
|
|
11
|
+
| Server resource index | DataView owns browser presentation; app owns server matching, unknown totals, cursor and page selection | Resource index (`node_modules/themelia-ui/docs/generated/workflows/resource-index/data-view/resource-index-reference.tsx`) |
|
|
12
|
+
| Multi-section form | Card owns surface; flat FormSections retain insets; FieldGroup and FormField own names; app owns validation and completion | Form (`node_modules/themelia-ui/docs/generated/workflows/multi-section-form/form-workflow/multi-section-reference.tsx`) |
|
|
13
|
+
| Scoped resource selection | ResourceCombobox owns lookup; app owns scopeKey and selection validity; Overlay owns task | Selector (`node_modules/themelia-ui/docs/generated/workflows/scoped-resource-selection/combobox/scoped-resource-reference.tsx`) |
|
|
14
|
+
| Nested action flow | Parent owns draft; child owns confirmation; app closes explicitly after successful mutation | Nested action (`node_modules/themelia-ui/docs/generated/workflows/nested-action-flow/action-overlays/nested-action-reference.tsx`) |
|
|
15
|
+
| Workspace navigation | Shell owns geometry; workspace owns disclosure; app owns router and same-app policy | Workspace (`node_modules/themelia-ui/docs/generated/workflows/workspace-navigation/app-shell/workspace-navigation-reference.tsx`) |
|
|
16
|
+
| Media picking | MediaLibraryDialog owns query/picking UI; app commits a separate picker draft on confirmation, pages through footer slots, hydrates saved ids independently, reports unavailable selection and authorizes fetches | Media (`node_modules/themelia-ui/docs/generated/workflows/media-picking/media-library/media-picking-reference.tsx`) |
|
|
17
|
+
| Communications overview | MetricGrid owns quantities; MetadataList owns prose facts; app owns period, delivery state and retry | Communications (`node_modules/themelia-ui/docs/generated/workflows/communications-overview/analytics/communications-reference.tsx`) |
|
|
18
|
+
| Website editor | RichTextEditor owns editing; app retains locale drafts and alt text; RichText sanitizes preview | Website editor (`node_modules/themelia-ui/docs/generated/workflows/website-content-editor/rich-text-editor/website-content-reference.tsx`) |
|
|
19
|
+
|
|
20
|
+
Forms using plain state need no form peer. The optional forms-rhf adapter connects existing
|
|
21
|
+
React Hook Form state without duplicating it. The resource-index workflow uses features/table and
|
|
22
|
+
needs its table peer; record-detail uses peer-free base/table; analytics and rich editing require the peers listed in their generated
|
|
23
|
+
API pages. The general reference consumer stays free of optional peers; the admin reference
|
|
24
|
+
consumer demonstrates adopted adapters.
|
|
25
|
+
|
|
26
|
+
Pending, empty, failed refresh, unavailable selection and resolved validation errors are
|
|
27
|
+
different states. These fixtures demonstrate local feedback and retained drafts. They do
|
|
28
|
+
not establish real persistence, permissions, cache invalidation or backend sanitization.
|
|
29
|
+
Exercise the named cases in your app; [record the evidence](verification.md#completion-record)
|
|
30
|
+
and identify conditions you could not inspect.
|
|
31
|
+
|
|
32
|
+
The inventory's `verification` entries map required cases to behavioral tests or visual
|
|
33
|
+
inspection conditions. They specify coverage to run, not a claim that your application passed.
|
|
34
|
+
`repositoryFile` identifies a maintainer test in the source repository; copy workflow files
|
|
35
|
+
from the inventory's generated source list and adapt the named behaviors to your test runner.
|
|
36
|
+
The browser cases use explicit mock actions; the read-only observer supplies advisory geometry
|
|
37
|
+
findings. Review screenshots and semantics separately in both themes and densities at mobile,
|
|
38
|
+
desktop and wide widths, including long copy and RTL. Build/type checks prove the complete
|
|
39
|
+
sources and public imports; rich-text security tests exercise the sanitization boundary.
|
|
40
|
+
|
|
41
|
+
When embedding a contained app shell in an existing main landmark, use `contentRender={<div />}`
|
|
42
|
+
so the composition keeps one main. For a shell that owns the application's main, omit that
|
|
43
|
+
override. The reference uses the embedded form because it also appears inside a documentation page.
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Structure and spacing
|
|
2
|
+
|
|
3
|
+
Choose the semantic owner first, then arrange its siblings. A Page owns route geometry;
|
|
4
|
+
Card owns an independent subject; ContentBlock owns supporting content; FormSection owns
|
|
5
|
+
an editable region. Stack and Grid arrange those owners without adding a heading, landmark,
|
|
6
|
+
surface or inset. See [Composition](composition.md#decide-the-owners-before-jsx) for names,
|
|
7
|
+
commands and field ownership, and [Blocks](blocks.md) for ready subject arrangements.
|
|
8
|
+
|
|
9
|
+
## Choose a structural block
|
|
10
|
+
|
|
11
|
+
| Need | Public owner | What it supplies |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| Route title, description and commands | `Page` from `layout/page` | Container, page header and body rhythm. It does not create a main landmark or own scrolling. |
|
|
14
|
+
| Page scroll inside a bounded shell | `PageViewport` from `layout/containers` | Scroll region and an inline-size query container. Focusable by default for keyboard scrolling. |
|
|
15
|
+
| Centred width and inline gutter | `Container` from `layout/containers` | Width and gutter only. Page already includes it. |
|
|
16
|
+
| Semantic section with rhythm between groups | `Section` from `layout/containers` | A native section and twice the group gap; supply its heading or accessible name. |
|
|
17
|
+
| Primary work beside a secondary summary | `TwoColumnLayout` from `layout/containers` | Main/aside arrangement, optional full-width header/footer; stacks below `lg`. Aside stays second in the DOM. |
|
|
18
|
+
| One row or column of passive siblings | `Stack` from `base/structure` | Direction, gap, alignment, distribution and optional wrapping. No padding prop. |
|
|
19
|
+
| An explicit column count | `Grid` and `GridCell` from `base/structure` | One to four columns, responsive gaps and cell spans. |
|
|
20
|
+
| As many equal columns as fit | `AdaptiveGrid` from `base/structure` | Auto-fit tracks; `minColumnWidth` is `default` (16rem), `sm` (12rem) or a CSS length. |
|
|
21
|
+
| A fluid main region and a constrained rail | `Split` from `base/structure` | Two direct children: main first, side second. `sideWidth` defaults to 18rem; `collapseBelow` defaults to `md`. |
|
|
22
|
+
| Intentional edge-to-edge content in an inset | `Bleed` from `base/structure` | Negative margins on the selected axis. Match `amount` to the inset it cancels. |
|
|
23
|
+
|
|
24
|
+
Read the exact structure API (`node_modules/themelia-ui/docs/generated/components/base--structure.md`),
|
|
25
|
+
containers API (`node_modules/themelia-ui/docs/generated/components/layout--containers.md`) and
|
|
26
|
+
page API (`node_modules/themelia-ui/docs/generated/components/layout--page.md`) before adding props. Container's
|
|
27
|
+
`maxWidth` (`sm`, `md`, `lg`, `xl`, `2xl`, `full`) and `gutter` (`none`, `sm`, `md`, `lg`)
|
|
28
|
+
are a different contract from Stack/Grid widths (`default`, `sm`, `full`, `none` or a CSS
|
|
29
|
+
length). Container gutters are zero, one, one-and-a-half or twice `--padding`; they do not
|
|
30
|
+
add spacing tokens. Stack/Grid `maxWidth` caps width without centring it or adding a gutter.
|
|
31
|
+
|
|
32
|
+
An app shell normally owns the single main landmark and page scroller. Do not add another
|
|
33
|
+
PageViewport around each section. For document scrolling without a bounded shell, Page can
|
|
34
|
+
live in the application's existing main. When embedding a shell inside another main, use
|
|
35
|
+
its documented `contentRender` seam; see [complete workflows](reference-workflows.md).
|
|
36
|
+
|
|
37
|
+
## Use the two spacing roles
|
|
38
|
+
|
|
39
|
+
| Role | Public tokens | Typical use |
|
|
40
|
+
| --- | --- | --- |
|
|
41
|
+
| Container inset | `--padding` | Card regions and decorated ContentBlocks |
|
|
42
|
+
| Item inset | `--padding-sm` | Rows, cells and compact items |
|
|
43
|
+
| Between groups | `--gap`, `gap="default"` | Fields, sibling Cards, sections |
|
|
44
|
+
| Within a group | `--gap-sm`, `gap="sm"` | Title/description, icon/label, toolbar controls |
|
|
45
|
+
|
|
46
|
+
The omitted structure gap is `default`. `gap="none"` removes separation; it is not a third
|
|
47
|
+
spacing step. Insets belong to the child surface and gaps to the parent arrangement. Avoid
|
|
48
|
+
giving both the same separation job. Density changes these lengths together; it does not
|
|
49
|
+
choose smaller text roles. [Theming](theming.md#scale-and-density) explains density, scale
|
|
50
|
+
and typography scale, including overriding a preset's values.
|
|
51
|
+
|
|
52
|
+
CardContent supplies its inset and a group gap between direct children; it drops its top
|
|
53
|
+
padding after an undivided CardHeader. Card `surface="flat"` removes decoration and retains
|
|
54
|
+
region insets. FormSection is a Card composition, so a flat FormSection inside CardContent
|
|
55
|
+
still adds its own inset. Use `Stack gap="none"` between such sections when their insets
|
|
56
|
+
already supply the intended rhythm; do not assume flat means flush.
|
|
57
|
+
|
|
58
|
+
ContentBlock is different: its default `surface="plain"` supplies heading/content spacing
|
|
59
|
+
without an inset or frame. Its `bordered`, `muted` and `card` surfaces add an inset.
|
|
60
|
+
`flush` drops that decorated surface's inset for children that own their own padding.
|
|
61
|
+
Neither flat nor flush changes field associations or heading semantics.
|
|
62
|
+
|
|
63
|
+
```tsx compile
|
|
64
|
+
import { Card } from "themelia-ui/base/cards"
|
|
65
|
+
import { ContentBlock, MetadataList } from "themelia-ui/base/display"
|
|
66
|
+
import { Grid, Stack } from "themelia-ui/base/structure"
|
|
67
|
+
import { Text } from "themelia-ui/base/typography"
|
|
68
|
+
import { Page } from "themelia-ui/layout/page"
|
|
69
|
+
import { TwoColumnLayout } from "themelia-ui/layout/containers"
|
|
70
|
+
|
|
71
|
+
export function AccountOverview() {
|
|
72
|
+
return <Page header={{ title: "Account" }} maxWidth="lg">
|
|
73
|
+
<TwoColumnLayout
|
|
74
|
+
main={<Stack>
|
|
75
|
+
<Grid columns={{ base: 1, md: 2 }}>
|
|
76
|
+
<Card title="Contact" titleLevel={2}>
|
|
77
|
+
<MetadataList items={[{ id: "email", label: "Email", value: "alex@example.com" }]} />
|
|
78
|
+
</Card>
|
|
79
|
+
<Card title="Billing" titleLevel={2}>
|
|
80
|
+
<MetadataList items={[{ id: "status", label: "Status", value: "Active" }]} />
|
|
81
|
+
</Card>
|
|
82
|
+
</Grid>
|
|
83
|
+
<Card title="Notes" titleLevel={2}>
|
|
84
|
+
<ContentBlock description="Context for the next account review.">
|
|
85
|
+
<Text>The customer prefers email updates.</Text>
|
|
86
|
+
</ContentBlock>
|
|
87
|
+
</Card>
|
|
88
|
+
</Stack>}
|
|
89
|
+
aside={<Card title="Summary" titleLevel={2}><Text>Review due next month.</Text></Card>}
|
|
90
|
+
/>
|
|
91
|
+
</Page>
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The example has one route heading, three independent subjects in the main region and a
|
|
96
|
+
secondary summary. Page supplies the gutter; TwoColumnLayout supplies main/aside separation;
|
|
97
|
+
Stack/Grid separate subjects; each Card supplies its inset. The complete record and form
|
|
98
|
+
workflows add application-owned commands, validation and asynchronous states.
|
|
99
|
+
|
|
100
|
+
## Know which width drives responsiveness
|
|
101
|
+
|
|
102
|
+
A responsive structure prop accepts a single value or an object such as
|
|
103
|
+
`gap={{ base: "sm", md: "default" }}`. Values carry forward until another named step replaces
|
|
104
|
+
them; omitted lower steps use the component's defaults. `sm` as a gap value means the small
|
|
105
|
+
gap; `sm` as an object key means a breakpoint.
|
|
106
|
+
|
|
107
|
+
| Step | Viewport minimum | Grid's nearest query-container minimum |
|
|
108
|
+
| --- | --- | --- |
|
|
109
|
+
| `base` | All widths | All widths |
|
|
110
|
+
| `sm` | 40rem | 24rem |
|
|
111
|
+
| `md` | 48rem | 32rem |
|
|
112
|
+
| `lg` | 64rem | 40rem |
|
|
113
|
+
| `xl` | 80rem | 52rem |
|
|
114
|
+
| `2xl` | 96rem | 64rem |
|
|
115
|
+
|
|
116
|
+
Grid uses viewport steps when no ancestor establishes inline-size containment. With a query
|
|
117
|
+
container, such as PageViewport or ContentBlock, Grid's columns, gaps, alignment and maximum
|
|
118
|
+
width use the nearest container and the smaller thresholds above. Grid does not create its
|
|
119
|
+
own query container. Stack, Split, Bleed, AdaptiveGrid's responsive gap/alignment and
|
|
120
|
+
GridCell spans use viewport steps. AdaptiveGrid's **column count** always follows available
|
|
121
|
+
width through auto-fit. TwoColumnLayout stacks below the viewport's `lg` step.
|
|
122
|
+
|
|
123
|
+
Grid defaults to one column and two from `md`; `columns={1}` stays one at every width.
|
|
124
|
+
Use `GridCell span="full"` for a full row at every width. Numeric spans must fit the current
|
|
125
|
+
column count; `span={{ base: 1, md: "full", xl: 2 }}` can switch between numeric and full
|
|
126
|
+
placement. Coordinate responsive spans with the Grid, especially inside a query
|
|
127
|
+
container where their thresholds differ. Prefer AdaptiveGrid when the available panel width
|
|
128
|
+
should decide the count without coordinating breakpoints. Visual side positioning in Split
|
|
129
|
+
or TwoColumnLayout does not change reading or keyboard order.
|
|
130
|
+
|
|
131
|
+
## Bleed, custom CSS and verification
|
|
132
|
+
|
|
133
|
+
Bleed's default amount is `none` and its default axis is `inline`. An intentional image
|
|
134
|
+
escape can use `amount="default"` inside an inset of `--padding`, or `sm` inside
|
|
135
|
+
`--padding-sm`. The shipped spacing pairs have matching padding/gap values; a custom theme
|
|
136
|
+
that separates those values must account for the actual inset. Bleed does not create a
|
|
137
|
+
surface or crop media. Check edges and focus visibility in the surrounding surface.
|
|
138
|
+
|
|
139
|
+
Application-specific geometry can use `className` and CSS over public tokens; use the
|
|
140
|
+
documented props first. Do not target private `--_…` variables or CSS Module hashes. Keep
|
|
141
|
+
copy in Text/Heading and field labels in FormField rather than setting local type styles.
|
|
142
|
+
For product CSS, prefer logical properties so inline start/end follow RTL.
|
|
143
|
+
|
|
144
|
+
Check a narrow **parent** as well as a narrow viewport, long headings and translated labels,
|
|
145
|
+
both themes and densities, and keyboard access to the scroller. Verify that additional
|
|
146
|
+
surfaces or gaps serve an independent subject. [Consumer verification](verification.md)
|
|
147
|
+
separates compiled examples, interaction evidence and visual inspection.
|