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
|
@@ -15,7 +15,6 @@ The application needs its outermost frame — a sidebar with an inset, a stacked
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { SidebarInsetLayout } from "themelia-ui/layout/app-shell"
|
|
18
|
-
import "themelia-ui/layout/app-shell.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
@@ -106,7 +105,7 @@ Extends: `Omit<ComponentProps<"div">, "children" | "title">`.
|
|
|
106
105
|
| `children` | no | `ReactNode` | |
|
|
107
106
|
| `sidebarSide` | no | `TopbarSidebarSide` | Which side the rail sits on. Match the Sidebar's own `side` to it. |
|
|
108
107
|
| `mobileSidebarMode` | no | `TopbarSidebarMobileMode` | `drawer` hides the sidebar column below md and uses the Sidebar's mobile sheet, which<br>the trigger opens. `inline` stacks static navigation above the content; pair it with<br>`collapsible="none"` and `sidebarTrigger={false}`. |
|
|
109
|
-
| `headerHeight` | no | `string` | Any CSS length. Falls back to the
|
|
108
|
+
| `headerHeight` | no | `string` | Any CSS length. Falls back to the theme's `--header-height`. |
|
|
110
109
|
| `sidebarWidth` | no | `string` | |
|
|
111
110
|
| `sidebarTrigger` | no | `ReactNode` | Shorthands for the matching `slots` entry, for a shell with only a few regions. |
|
|
112
111
|
| `logo` | no | `ReactNode` | |
|
|
@@ -160,6 +159,37 @@ Kind: type.
|
|
|
160
159
|
|
|
161
160
|
Preview route: App shell — `/app-shell`
|
|
162
161
|
|
|
162
|
+
### Workspace navigation reference
|
|
163
|
+
|
|
164
|
+
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
165
|
+
import { useState } from "react"
|
|
166
|
+
import { Text } from "themelia-ui/base/typography"
|
|
167
|
+
import { TopbarSidebarLayout } from "themelia-ui/layout/app-shell"
|
|
168
|
+
import { AppSidebar, type LinkRenderer } from "themelia-ui/layout/sidebar"
|
|
169
|
+
|
|
170
|
+
export default function WorkspaceNavigationReference() {
|
|
171
|
+
const [route, setRoute] = useState("/a/overview")
|
|
172
|
+
const [navigations, setNavigations] = useState(0)
|
|
173
|
+
const workspace = route.startsWith("/b/") ? "B" : "A"
|
|
174
|
+
const renderLink: LinkRenderer = ({ href, children, external, active, disabled, onClick, ...props }) => {
|
|
175
|
+
void active
|
|
176
|
+
if (disabled || !href) return <span {...props}>{children}</span>
|
|
177
|
+
return <a {...props} href={href} target={props.target ?? (external ? "_blank" : undefined)} rel={props.rel ?? (external ? "noopener noreferrer" : undefined)} onClick={event => {
|
|
178
|
+
onClick?.(event)
|
|
179
|
+
if (event.defaultPrevented || external || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return
|
|
180
|
+
event.preventDefault(); setRoute(href); setNavigations(count => count + 1)
|
|
181
|
+
}}>{children}</a>
|
|
182
|
+
}
|
|
183
|
+
return <div style={{ width: "100%", height: "28rem", minWidth: 0 }}>
|
|
184
|
+
<TopbarSidebarLayout contained contentRender={<div />} logo="Reference workspace" sidebarProviderProps={{ persist: false, keyboardShortcut: false }} sidebar={<AppSidebar logo={`Workspace ${workspace}`} renderLink={renderLink} currentUrl={route}
|
|
185
|
+
workspaceLinks={[{ label: "Workspace A home", url: "/a/overview", external: false }, { label: "Workspace B home", url: "/b/overview", external: false }, { label: "External workspace", url: "https://example.com" }]}
|
|
186
|
+
navigationGroups={{ "": [{ label: `${workspace} overview`, href: `/${workspace.toLowerCase()}/overview` }, { label: `${workspace} settings`, href: `/${workspace.toLowerCase()}/settings` }] }} />}>
|
|
187
|
+
<Text role="status">Workspace {workspace}; route {route}; navigations {navigations}</Text>
|
|
188
|
+
</TopbarSidebarLayout>
|
|
189
|
+
</div>
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
163
193
|
### The shell
|
|
164
194
|
|
|
165
195
|
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
@@ -194,9 +224,9 @@ export default function SidebarShell() {
|
|
|
194
224
|
const [collapsible, setCollapsible] = useState<string | null>("icon")
|
|
195
225
|
|
|
196
226
|
return (
|
|
197
|
-
<Stack
|
|
198
|
-
<Stack direction="horizontal"
|
|
199
|
-
<Stack gap="
|
|
227
|
+
<Stack style={{ width: "100%" }}>
|
|
228
|
+
<Stack direction="horizontal" wrap>
|
|
229
|
+
<Stack gap="sm">
|
|
200
230
|
<Text size="xs" type="secondary">
|
|
201
231
|
variant
|
|
202
232
|
</Text>
|
|
@@ -212,7 +242,7 @@ export default function SidebarShell() {
|
|
|
212
242
|
]}
|
|
213
243
|
/>
|
|
214
244
|
</Stack>
|
|
215
|
-
<Stack gap="
|
|
245
|
+
<Stack gap="sm">
|
|
216
246
|
<Text size="xs" type="secondary">
|
|
217
247
|
collapsible
|
|
218
248
|
</Text>
|
|
@@ -262,7 +292,7 @@ function TopbarDemo() {
|
|
|
262
292
|
const sidebarSide = side === "right" ? "right" : "left"
|
|
263
293
|
|
|
264
294
|
return (
|
|
265
|
-
<Stack
|
|
295
|
+
<Stack style={{ width: "100%", minWidth: 0 }}>
|
|
266
296
|
<PillRadioGroup
|
|
267
297
|
aria-label="Navigation side"
|
|
268
298
|
name="topbar-sidebar-side"
|
|
@@ -288,7 +318,7 @@ function TopbarDemo() {
|
|
|
288
318
|
/>
|
|
289
319
|
}
|
|
290
320
|
>
|
|
291
|
-
<Stack
|
|
321
|
+
<Stack>
|
|
292
322
|
{currentUrl === "/app/invoices" && (
|
|
293
323
|
<Input type="search" aria-label="Search invoices" placeholder="Search invoices…" value={query} onChange={event => setQuery(event.target.value)} />
|
|
294
324
|
)}
|
|
@@ -330,15 +360,15 @@ function StackedDemo() {
|
|
|
330
360
|
boundContent={false}
|
|
331
361
|
contentRender={<div />}
|
|
332
362
|
header={
|
|
333
|
-
<Stack direction="horizontal" gap="
|
|
363
|
+
<Stack direction="horizontal" gap="sm" align="center" wrap>
|
|
334
364
|
<Brand />
|
|
335
365
|
<nav aria-label="Primary navigation (stacked example)">
|
|
336
|
-
<Stack direction="horizontal" gap="
|
|
366
|
+
<Stack direction="horizontal" gap="sm" wrap>
|
|
337
367
|
{destinations.map(([path, label]) => (
|
|
338
368
|
<Button
|
|
339
369
|
key={path}
|
|
340
370
|
tone="neutral"
|
|
341
|
-
|
|
371
|
+
appearance={currentUrl === path ? "solid" : "ghost"}
|
|
342
372
|
aria-current={currentUrl === path ? "page" : undefined}
|
|
343
373
|
onClick={() => setCurrentUrl(path)}
|
|
344
374
|
>{label}</Button>
|
|
@@ -15,7 +15,6 @@ Sign-in, registration and recovery pages share a centred card and optional split
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { AuthCard } from "themelia-ui/layout/auth"
|
|
18
|
-
import "themelia-ui/layout/auth.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
@@ -144,7 +143,7 @@ Extends: `LayoutNavigationAdapter`, `Omit<ComponentProps<"div">, "title">`.
|
|
|
144
143
|
| `policyLinks` | no | `AuthLink[]` | Terms, privacy, cookies: a named row of links that wraps with the available width,<br>rendered as its own row so screen readers can skip it. |
|
|
145
144
|
| `languageLinks` | no | `AuthLink[]` | The languages, as a named row of links that wraps with the available width. |
|
|
146
145
|
| `languageSwitcher` | no | `ReactNode` | A rendered control, when a link row is not the right shape for it. |
|
|
147
|
-
| `size` | no | `AuthShellSize` | The surface width. |
|
|
146
|
+
| `size` | no | `AuthShellSize` | The surface width: `default`, or `sm` for a single short form such as a code entry. |
|
|
148
147
|
| `variant` | no | `AuthShellVariant` | `card` (default) puts the content on a raised surface; `bare` does not; `split` puts<br>a panel beside it. |
|
|
149
148
|
| `align` | no | `"center" \| "start"` | `center` uses spare height and lets tall content grow; `start` keeps the form at the top. |
|
|
150
149
|
| `splitPanel` | no | `ReactNode` | The panel, for `variant="split"`. |
|
|
@@ -158,7 +157,7 @@ Extends: `LayoutNavigationAdapter`, `Omit<ComponentProps<"div">, "title">`.
|
|
|
158
157
|
Kind: type.
|
|
159
158
|
|
|
160
159
|
```text
|
|
161
|
-
"
|
|
160
|
+
"default" | "sm"
|
|
162
161
|
```
|
|
163
162
|
|
|
164
163
|
### `AuthShellStrings`
|
|
@@ -361,12 +360,12 @@ import { SignInDemo } from "./_shared"
|
|
|
361
360
|
function WorkspacePanel() {
|
|
362
361
|
return (
|
|
363
362
|
<>
|
|
364
|
-
<Stack
|
|
363
|
+
<Stack>
|
|
365
364
|
<DisplayLabel>Built for your team</DisplayLabel>
|
|
366
365
|
<Heading level={3} size="2xl">A clearer start to your working day.</Heading>
|
|
367
366
|
<Text type="secondary" lineHeight="relaxed">Bring your people, projects, and decisions into one shared workspace.</Text>
|
|
368
367
|
</Stack>
|
|
369
|
-
<Stack
|
|
368
|
+
<Stack>
|
|
370
369
|
<Text type="inherit" size="lg" lineHeight="relaxed">“Everything we need is ready when we sign in. We spend more time doing the work together.”</Text>
|
|
371
370
|
<Text type="secondary" size="sm">Jordan Lee · Operations at Northwind</Text>
|
|
372
371
|
</Stack>
|
|
@@ -403,10 +402,10 @@ export default function AuthSplit() {
|
|
|
403
402
|
|
|
404
403
|
return (
|
|
405
404
|
<>
|
|
406
|
-
<Stack direction="horizontal" align="center" justify="between"
|
|
405
|
+
<Stack direction="horizontal" align="center" justify="between" wrap>
|
|
407
406
|
<Checkbox label="Show the panel on small screens" checked={stackedPanel} onChange={(event) => setStackedPanel(event.target.checked)} />
|
|
408
407
|
<Overlay>
|
|
409
|
-
<OverlayTrigger render={<Button tone="neutral"
|
|
408
|
+
<OverlayTrigger render={<Button tone="neutral" appearance="outline" />}>Expand split preview</OverlayTrigger>
|
|
410
409
|
<DialogContent className={styles.expandedDialog} aria-labelledby={expandedTitleId} aria-describedby={expandedDescriptionId}>
|
|
411
410
|
<OverlayHeader>
|
|
412
411
|
<OverlayTitle id={expandedTitleId}>Split auth preview</OverlayTitle>
|
|
@@ -449,7 +448,7 @@ export default function AuthComposed() {
|
|
|
449
448
|
className={styles.composed}
|
|
450
449
|
panelMobile="stacked"
|
|
451
450
|
form={
|
|
452
|
-
<Stack
|
|
451
|
+
<Stack className={styles.formColumn}>
|
|
453
452
|
<AuthCard
|
|
454
453
|
level={3}
|
|
455
454
|
title="Join your team"
|
|
@@ -463,7 +462,7 @@ export default function AuthComposed() {
|
|
|
463
462
|
</Stack>
|
|
464
463
|
}
|
|
465
464
|
panel={
|
|
466
|
-
<Stack
|
|
465
|
+
<Stack>
|
|
467
466
|
<DisplayLabel>Northwind workspace</DisplayLabel>
|
|
468
467
|
<Heading level={3} size="xl">Your next chapter starts together.</Heading>
|
|
469
468
|
<Text type="secondary" lineHeight="relaxed">You have been invited to collaborate with the operations team. Your projects and conversations will be waiting.</Text>
|
|
@@ -15,7 +15,6 @@ A page region needs width constraint, a titled section, or a two-column split.
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { Container } from "themelia-ui/layout/containers"
|
|
18
|
-
import "themelia-ui/layout/containers.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
@@ -31,6 +30,16 @@ outside the package and arrives through the public props, callbacks, slots, or a
|
|
|
31
30
|
|
|
32
31
|
Kind: const.
|
|
33
32
|
|
|
33
|
+
**Use when:** A region needs centred reading width and an inline gutter without a page header.
|
|
34
|
+
|
|
35
|
+
**Avoid when:** Page or another shell already owns that width and gutter.
|
|
36
|
+
|
|
37
|
+
**Compose:** Use maxWidth and gutter from the Container contract; its values differ from Stack/Grid widths. It owns no scrolling or heading.
|
|
38
|
+
|
|
39
|
+
**Capabilities:** reading width; centred content; inline gutter.
|
|
40
|
+
|
|
41
|
+
**Alternatives:** Page, Stack.
|
|
42
|
+
|
|
34
43
|
```text
|
|
35
44
|
React.ForwardRefExoticComponent<Omit<ContainerProps, "ref"> & React.RefAttributes<HTMLDivElement>>
|
|
36
45
|
```
|
|
@@ -66,6 +75,16 @@ Extends: `React.ComponentProps<"div">`.
|
|
|
66
75
|
|
|
67
76
|
Kind: const.
|
|
68
77
|
|
|
78
|
+
**Use when:** A bounded app shell needs its single page scroller and query-container boundary.
|
|
79
|
+
|
|
80
|
+
**Avoid when:** The shell already supplies a scroller, or the document owns scrolling.
|
|
81
|
+
|
|
82
|
+
**Compose:** Use once at the scroll boundary. Preserve its keyboard focusability; it supplies neither the main landmark nor the page gutter.
|
|
83
|
+
|
|
84
|
+
**Capabilities:** page scroll owner; keyboard scrolling; inline size containment.
|
|
85
|
+
|
|
86
|
+
**Alternatives:** Page.
|
|
87
|
+
|
|
69
88
|
```text
|
|
70
89
|
React.ForwardRefExoticComponent<Omit<PageViewportProps, "ref"> & React.RefAttributes<HTMLDivElement>>
|
|
71
90
|
```
|
|
@@ -82,6 +101,16 @@ No own members are present in the normalized public snapshot.
|
|
|
82
101
|
|
|
83
102
|
Kind: const.
|
|
84
103
|
|
|
104
|
+
**Use when:** A semantic page section needs consistent rhythm between groups.
|
|
105
|
+
|
|
106
|
+
**Avoid when:** Only needing passive spacing, or another component already owns the section.
|
|
107
|
+
|
|
108
|
+
**Compose:** Supply a heading or accessible name; Section supplies the section element and shared group rhythm, not a heading or inset.
|
|
109
|
+
|
|
110
|
+
**Capabilities:** semantic section; page group rhythm.
|
|
111
|
+
|
|
112
|
+
**Alternatives:** Stack, ContentBlock.
|
|
113
|
+
|
|
85
114
|
```text
|
|
86
115
|
React.ForwardRefExoticComponent<Omit<SectionProps, "ref"> & React.RefAttributes<HTMLElement>>
|
|
87
116
|
```
|
|
@@ -98,6 +127,16 @@ No own members are present in the normalized public snapshot.
|
|
|
98
127
|
|
|
99
128
|
Kind: const.
|
|
100
129
|
|
|
130
|
+
**Use when:** Primary work needs a secondary summary with semantic aside and optional spanning header/footer.
|
|
131
|
+
|
|
132
|
+
**Avoid when:** Needing equal columns or a custom rail width and collapse breakpoint.
|
|
133
|
+
|
|
134
|
+
**Compose:** The viewport lg step enables two columns; the aside remains second in the DOM. Keep sticky opt-in for content that fits the viewport.
|
|
135
|
+
|
|
136
|
+
**Capabilities:** main aside layout; responsive summary rail; sticky aside.
|
|
137
|
+
|
|
138
|
+
**Alternatives:** Split, Grid.
|
|
139
|
+
|
|
101
140
|
```text
|
|
102
141
|
React.ForwardRefExoticComponent<Omit<TwoColumnLayoutProps, "ref"> & React.RefAttributes<HTMLDivElement>>
|
|
103
142
|
```
|
|
@@ -15,7 +15,6 @@ The application header carries breadcrumbs, search, notifications and the user m
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { Header } from "themelia-ui/layout/header"
|
|
18
|
-
import "themelia-ui/layout/header.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
@@ -421,11 +420,11 @@ export default function HeaderExample() {
|
|
|
421
420
|
center: <SearchInput placeholder="Search invoices…" />,
|
|
422
421
|
right: (
|
|
423
422
|
<>
|
|
424
|
-
<Button tone="neutral"
|
|
423
|
+
<Button tone="neutral" appearance="outline">
|
|
425
424
|
<PlusIcon />
|
|
426
425
|
New
|
|
427
426
|
</Button>
|
|
428
|
-
<Button iconOnly tone="neutral"
|
|
427
|
+
<Button iconOnly tone="neutral" appearance="ghost" aria-label="Notifications">
|
|
429
428
|
<BellIcon />
|
|
430
429
|
</Button>
|
|
431
430
|
<Avatar size="sm">
|
|
@@ -15,7 +15,6 @@ The shell's own navigation — side, section or category — positions destinati
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { BreadcrumbProgress } from "themelia-ui/layout/navigation"
|
|
18
|
-
import "themelia-ui/layout/navigation.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
@@ -7,7 +7,7 @@ A page needs its title, description and primary actions in the standard arrangem
|
|
|
7
7
|
## Selection
|
|
8
8
|
|
|
9
9
|
- **Use when:** A page needs its title, description and primary actions in the standard arrangement.
|
|
10
|
-
- **Avoid when:** The
|
|
10
|
+
- **Avoid when:** The task needs standard loading, empty and error presentation already supplied by ResourceIndexShell or ResourceShowShell.
|
|
11
11
|
- **Consider instead:** `features/resource`, `layout/containers`
|
|
12
12
|
- **Stability:** stable.
|
|
13
13
|
|
|
@@ -15,7 +15,6 @@ A page needs its title, description and primary actions in the standard arrangem
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { Page } from "themelia-ui/layout/page"
|
|
18
|
-
import "themelia-ui/layout/page.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
@@ -216,6 +215,35 @@ Extends: `Omit<React.ComponentProps<"div">, "title">`.
|
|
|
216
215
|
|
|
217
216
|
Preview route: Page & page header — `/page`
|
|
218
217
|
|
|
218
|
+
### Record detail reference
|
|
219
|
+
|
|
220
|
+
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
221
|
+
import { useState } from "react"
|
|
222
|
+
import { Button } from "themelia-ui/base/buttons"
|
|
223
|
+
import { Card, CardContent, CardHeader } from "themelia-ui/base/cards"
|
|
224
|
+
import { ContentBlock, MetadataList } from "themelia-ui/base/display"
|
|
225
|
+
import { Stack } from "themelia-ui/base/structure"
|
|
226
|
+
import { Text } from "themelia-ui/base/typography"
|
|
227
|
+
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "themelia-ui/base/table"
|
|
228
|
+
import { Page } from "themelia-ui/layout/page"
|
|
229
|
+
|
|
230
|
+
export default function RecordDetailReference() {
|
|
231
|
+
const [activity, setActivity] = useState("No commands yet")
|
|
232
|
+
return <Page header={{ title: "Record R-104", description: "A record with independent subjects and related records.", actions: <Button onClick={() => setActivity("Route command: export R-104")}>Export record</Button> }}>
|
|
233
|
+
<Stack>
|
|
234
|
+
<Card title="Identity" titleLevel={2} headerAction={<Button tone="neutral" appearance="outline" onClick={() => setActivity("Identity command: edit R-104")}>Edit identity</Button>}>
|
|
235
|
+
<MetadataList items={[{ id: "owner", label: "Owner", value: "Example team" }, { id: "state", label: "State", value: "Active" }]} />
|
|
236
|
+
<ContentBlock title="Notes" surface="plain"><Text>A long description belongs to prose, while the name and status above are facts. Commands stay beside the subject they affect. Repeated records can each have their own headings without repeating the route heading.</Text></ContentBlock>
|
|
237
|
+
</Card>
|
|
238
|
+
<Card><CardHeader title="Related records" titleLevel={2} description="The header is composed from parts; omit Card title props when supplying it." /><CardContent>
|
|
239
|
+
<Table aria-label="Related records"><TableHeader><TableRow><TableHead>Record</TableHead><TableHead>Relationship</TableHead></TableRow></TableHeader><TableBody><TableRow><TableCell>R-105</TableCell><TableCell>Follow-up</TableCell></TableRow></TableBody></Table>
|
|
240
|
+
</CardContent></Card>
|
|
241
|
+
<Text role="status">{activity}</Text>
|
|
242
|
+
</Stack>
|
|
243
|
+
</Page>
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
219
247
|
### PageHeader
|
|
220
248
|
|
|
221
249
|
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
@@ -254,14 +282,14 @@ import { RECORD_ACTIONS } from "./data"
|
|
|
254
282
|
|
|
255
283
|
export default function PageActionsExample() {
|
|
256
284
|
return (
|
|
257
|
-
<div style={{ width: "100%", display: "grid", gap: "var(--
|
|
285
|
+
<div style={{ width: "100%", display: "grid", gap: "var(--gap)" }}>
|
|
258
286
|
{[4, 2, 1].map((max) => (
|
|
259
|
-
<div key={max} style={{ display: "grid", gap: "var(--
|
|
287
|
+
<div key={max} style={{ display: "grid", gap: "var(--gap-sm)" }}>
|
|
260
288
|
<Text size="xs" type="secondary">maxInlineActions={max}</Text>
|
|
261
289
|
<PageActions actions={RECORD_ACTIONS} display="inline" maxInlineActions={max} />
|
|
262
290
|
</div>
|
|
263
291
|
))}
|
|
264
|
-
<div style={{ display: "grid", gap: "var(--
|
|
292
|
+
<div style={{ display: "grid", gap: "var(--gap-sm)" }}>
|
|
265
293
|
<Text size="xs" type="secondary">display="menu"</Text>
|
|
266
294
|
<PageActions actions={RECORD_ACTIONS} display="menu" />
|
|
267
295
|
</div>
|
|
@@ -15,7 +15,6 @@ The assembled application sidebar with logo, workspace switcher and user footer.
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { AppSidebar } from "themelia-ui/layout/sidebar"
|
|
18
|
-
import "themelia-ui/layout/sidebar.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
@@ -261,6 +260,16 @@ Kind: callable.
|
|
|
261
260
|
The rail’s header as a workspace switcher. The whole header row is the trigger, not a
|
|
262
261
|
chevron beside a decorative name — the name is what a reader aims at.
|
|
263
262
|
|
|
263
|
+
**Use when:** Workspace destinations from the rail header, including mobile navigation.
|
|
264
|
+
|
|
265
|
+
**Avoid when:** A logo without destinations or application business switching policy.
|
|
266
|
+
|
|
267
|
+
**Compose:** Disclosure keeps the sheet open; same-app destination selection dismisses it. The link adapter preserves native external targets.
|
|
268
|
+
|
|
269
|
+
**Capabilities:** workspace navigation; mobile workspace switcher.
|
|
270
|
+
|
|
271
|
+
**Alternatives:** SidebarLogo.
|
|
272
|
+
|
|
264
273
|
```text
|
|
265
274
|
({ logo, collapsedLogo, workspaceLinks, renderLink, strings, contentClassName, }: SidebarWorkspaceProps) => import("react").JSX.Element
|
|
266
275
|
```
|
|
@@ -313,6 +322,37 @@ Kind: interface.
|
|
|
313
322
|
|
|
314
323
|
Preview route: App shell — `/app-shell`
|
|
315
324
|
|
|
325
|
+
### Workspace navigation reference
|
|
326
|
+
|
|
327
|
+
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
328
|
+
import { useState } from "react"
|
|
329
|
+
import { Text } from "themelia-ui/base/typography"
|
|
330
|
+
import { TopbarSidebarLayout } from "themelia-ui/layout/app-shell"
|
|
331
|
+
import { AppSidebar, type LinkRenderer } from "themelia-ui/layout/sidebar"
|
|
332
|
+
|
|
333
|
+
export default function WorkspaceNavigationReference() {
|
|
334
|
+
const [route, setRoute] = useState("/a/overview")
|
|
335
|
+
const [navigations, setNavigations] = useState(0)
|
|
336
|
+
const workspace = route.startsWith("/b/") ? "B" : "A"
|
|
337
|
+
const renderLink: LinkRenderer = ({ href, children, external, active, disabled, onClick, ...props }) => {
|
|
338
|
+
void active
|
|
339
|
+
if (disabled || !href) return <span {...props}>{children}</span>
|
|
340
|
+
return <a {...props} href={href} target={props.target ?? (external ? "_blank" : undefined)} rel={props.rel ?? (external ? "noopener noreferrer" : undefined)} onClick={event => {
|
|
341
|
+
onClick?.(event)
|
|
342
|
+
if (event.defaultPrevented || external || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return
|
|
343
|
+
event.preventDefault(); setRoute(href); setNavigations(count => count + 1)
|
|
344
|
+
}}>{children}</a>
|
|
345
|
+
}
|
|
346
|
+
return <div style={{ width: "100%", height: "28rem", minWidth: 0 }}>
|
|
347
|
+
<TopbarSidebarLayout contained contentRender={<div />} logo="Reference workspace" sidebarProviderProps={{ persist: false, keyboardShortcut: false }} sidebar={<AppSidebar logo={`Workspace ${workspace}`} renderLink={renderLink} currentUrl={route}
|
|
348
|
+
workspaceLinks={[{ label: "Workspace A home", url: "/a/overview", external: false }, { label: "Workspace B home", url: "/b/overview", external: false }, { label: "External workspace", url: "https://example.com" }]}
|
|
349
|
+
navigationGroups={{ "": [{ label: `${workspace} overview`, href: `/${workspace.toLowerCase()}/overview` }, { label: `${workspace} settings`, href: `/${workspace.toLowerCase()}/settings` }] }} />}>
|
|
350
|
+
<Text role="status">Workspace {workspace}; route {route}; navigations {navigations}</Text>
|
|
351
|
+
</TopbarSidebarLayout>
|
|
352
|
+
</div>
|
|
353
|
+
}
|
|
354
|
+
```
|
|
355
|
+
|
|
316
356
|
### The shell
|
|
317
357
|
|
|
318
358
|
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
@@ -347,9 +387,9 @@ export default function SidebarShell() {
|
|
|
347
387
|
const [collapsible, setCollapsible] = useState<string | null>("icon")
|
|
348
388
|
|
|
349
389
|
return (
|
|
350
|
-
<Stack
|
|
351
|
-
<Stack direction="horizontal"
|
|
352
|
-
<Stack gap="
|
|
390
|
+
<Stack style={{ width: "100%" }}>
|
|
391
|
+
<Stack direction="horizontal" wrap>
|
|
392
|
+
<Stack gap="sm">
|
|
353
393
|
<Text size="xs" type="secondary">
|
|
354
394
|
variant
|
|
355
395
|
</Text>
|
|
@@ -365,7 +405,7 @@ export default function SidebarShell() {
|
|
|
365
405
|
]}
|
|
366
406
|
/>
|
|
367
407
|
</Stack>
|
|
368
|
-
<Stack gap="
|
|
408
|
+
<Stack gap="sm">
|
|
369
409
|
<Text size="xs" type="secondary">
|
|
370
410
|
collapsible
|
|
371
411
|
</Text>
|
|
@@ -415,7 +455,7 @@ function TopbarDemo() {
|
|
|
415
455
|
const sidebarSide = side === "right" ? "right" : "left"
|
|
416
456
|
|
|
417
457
|
return (
|
|
418
|
-
<Stack
|
|
458
|
+
<Stack style={{ width: "100%", minWidth: 0 }}>
|
|
419
459
|
<PillRadioGroup
|
|
420
460
|
aria-label="Navigation side"
|
|
421
461
|
name="topbar-sidebar-side"
|
|
@@ -441,7 +481,7 @@ function TopbarDemo() {
|
|
|
441
481
|
/>
|
|
442
482
|
}
|
|
443
483
|
>
|
|
444
|
-
<Stack
|
|
484
|
+
<Stack>
|
|
445
485
|
{currentUrl === "/app/invoices" && (
|
|
446
486
|
<Input type="search" aria-label="Search invoices" placeholder="Search invoices…" value={query} onChange={event => setQuery(event.target.value)} />
|
|
447
487
|
)}
|
|
@@ -15,7 +15,6 @@ The whole authenticated shell — sidebar, header and content — is assembled a
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { WorkspaceLayout } from "themelia-ui/layout/workspace"
|
|
18
|
-
import "themelia-ui/layout/workspace.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
@@ -333,7 +332,7 @@ export default function RecordHeader() {
|
|
|
333
332
|
title="Invoice #4417"
|
|
334
333
|
description="Northwind Traders — issued 1 September 2026."
|
|
335
334
|
media={
|
|
336
|
-
<Avatar
|
|
335
|
+
<Avatar>
|
|
337
336
|
<AvatarFallback>NT</AvatarFallback>
|
|
338
337
|
</Avatar>
|
|
339
338
|
}
|
|
@@ -345,7 +344,7 @@ export default function RecordHeader() {
|
|
|
345
344
|
]}
|
|
346
345
|
actions={
|
|
347
346
|
<>
|
|
348
|
-
<Button tone="neutral"
|
|
347
|
+
<Button tone="neutral" appearance="outline">Duplicate</Button>
|
|
349
348
|
<Button>Edit</Button>
|
|
350
349
|
</>
|
|
351
350
|
}
|
|
@@ -393,7 +392,7 @@ export default function RecordHeaderSecondary() {
|
|
|
393
392
|
{ label: "Branch", value: "main" },
|
|
394
393
|
{ label: "Author", value: "Raj Patel" },
|
|
395
394
|
]}
|
|
396
|
-
actions={<Button tone="neutral"
|
|
395
|
+
actions={<Button tone="neutral" appearance="outline">Cancel</Button>}
|
|
397
396
|
secondaryActions={<ViewSwitch />}
|
|
398
397
|
/>
|
|
399
398
|
</Card>
|