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 @@ A region reports its own state — informational alert, empty, loading, error, o
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { Alert } from "themelia-ui/base/feedback"
|
|
18
|
-
import "themelia-ui/base/feedback.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
@@ -113,8 +112,10 @@ The alert's heading. It inherits the alert's ink.
|
|
|
113
112
|
|
|
114
113
|
Kind: type.
|
|
115
114
|
|
|
115
|
+
Semantic colour: the kit's one tone union.
|
|
116
|
+
|
|
116
117
|
```text
|
|
117
|
-
|
|
118
|
+
SemanticTone
|
|
118
119
|
```
|
|
119
120
|
|
|
120
121
|
### `AlertVariant`
|
|
@@ -207,8 +208,8 @@ How the `media` slot is dressed.
|
|
|
207
208
|
|
|
208
209
|
Kind: type.
|
|
209
210
|
|
|
210
|
-
Breathing room: `sm` for panels and cells, `
|
|
211
|
-
provider density, which already reaches
|
|
211
|
+
Breathing room: `sm` for panels and cells, `default` for a card body or a page. Not
|
|
212
|
+
derived from provider density, which already reaches the paddings through the presets.
|
|
212
213
|
|
|
213
214
|
```text
|
|
214
215
|
ComponentScale
|
|
@@ -229,7 +230,7 @@ Extends: `Omit<React.ComponentProps<"div">, "title">`.
|
|
|
229
230
|
| `description` | no | `React.ReactNode \| false` | Why it is empty, or what will fill it. `false` hides it, for a title that already tells<br>the whole story. |
|
|
230
231
|
| `action` | no | `React.ReactNode` | Buttons or links offering the next step. An empty state that only explains is a dead<br>end. |
|
|
231
232
|
| `footer` | no | `React.ReactNode` | Quiet copy under the action — a hint, a learn-more, a shortcut. |
|
|
232
|
-
| `padding` | no | `EmptyPadding` | Breathing room, on both axes: `sm` for panels and cells, `
|
|
233
|
+
| `padding` | no | `EmptyPadding` | Breathing room, on both axes: `sm` for panels and cells, `default` for a card body or a<br>page. The inline padding is what keeps copy off a dashed edge. @default "default" |
|
|
233
234
|
| `border` | no | `boolean` | The dashed outline. Off by default; use it when the empty state stands in for a card's<br>body and the edge says "something goes here". |
|
|
234
235
|
| `strings` | no | `Partial<EmptyStrings>` | Overrides this state's own copy: `title`, `description`, and `ariaLabel`. The region<br>announces through `role="status"`, so a list that empties out while the reader is on the<br>page says so. |
|
|
235
236
|
|
|
@@ -336,7 +337,7 @@ attributes are then dropped rather than reporting 0%.
|
|
|
336
337
|
Kind: callable.
|
|
337
338
|
|
|
338
339
|
A determinate ring with the reading inside it, for tiles, scores and grids of small
|
|
339
|
-
measures.
|
|
340
|
+
measures. It has one size, big enough for a percentage in the hole; there is no size prop.
|
|
340
341
|
|
|
341
342
|
```text
|
|
342
343
|
({ value, max, tone, label, children, className, style, ...props }: ProgressCircleProps) => React.JSX.Element
|
|
@@ -373,8 +374,10 @@ Extends: `Omit<React.ComponentProps<"div">, "children">`.
|
|
|
373
374
|
|
|
374
375
|
Kind: type.
|
|
375
376
|
|
|
377
|
+
The tones a measure takes: the kit's tone union, without neutral and secondary.
|
|
378
|
+
|
|
376
379
|
```text
|
|
377
|
-
"primary" | "success" | "warning" | "destructive" | "info"
|
|
380
|
+
Extract<SemanticTone, "primary" | "success" | "warning" | "destructive" | "info">
|
|
378
381
|
```
|
|
379
382
|
|
|
380
383
|
### `SearchGlassIllustration`
|
|
@@ -458,7 +461,7 @@ export default function AlertLayout() {
|
|
|
458
461
|
<AlertTitle>With an action</AlertTitle>
|
|
459
462
|
<AlertDescription>Inline space is reserved on the trailing edge.</AlertDescription>
|
|
460
463
|
<AlertAction>
|
|
461
|
-
<Button tone="neutral"
|
|
464
|
+
<Button tone="neutral" appearance="ghost">
|
|
462
465
|
Undo
|
|
463
466
|
</Button>
|
|
464
467
|
</AlertAction>
|
|
@@ -472,6 +475,56 @@ export default function AlertLayout() {
|
|
|
472
475
|
}
|
|
473
476
|
```
|
|
474
477
|
|
|
478
|
+
### Compose your own checklist
|
|
479
|
+
|
|
480
|
+
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
481
|
+
import { CheckIcon, CircleIcon } from "lucide-react"
|
|
482
|
+
|
|
483
|
+
import { Accordion } from "themelia-ui/base/accordion"
|
|
484
|
+
import { Button } from "themelia-ui/base/buttons"
|
|
485
|
+
import { IconBadge } from "themelia-ui/base/display"
|
|
486
|
+
import { Progress } from "themelia-ui/base/feedback"
|
|
487
|
+
import { Stack } from "themelia-ui/base/structure"
|
|
488
|
+
import { Text } from "themelia-ui/base/typography"
|
|
489
|
+
|
|
490
|
+
export default function ChecklistBlueprint() {
|
|
491
|
+
return (
|
|
492
|
+
<Stack style={{ maxWidth: "34rem", width: "100%" }}>
|
|
493
|
+
<Progress value={1} max={3} label="1 of 3 steps complete" />
|
|
494
|
+
<Accordion
|
|
495
|
+
media="medallion"
|
|
496
|
+
defaultValue={["invite"]}
|
|
497
|
+
items={[
|
|
498
|
+
{
|
|
499
|
+
value: "profile",
|
|
500
|
+
title: "Complete your profile",
|
|
501
|
+
icon: <IconBadge icon={CheckIcon} tone="success" shape="circle" />,
|
|
502
|
+
content: <Text type="secondary">Name, avatar and time zone are set.</Text>,
|
|
503
|
+
},
|
|
504
|
+
{
|
|
505
|
+
value: "invite",
|
|
506
|
+
title: "Invite your team",
|
|
507
|
+
icon: <IconBadge icon={CircleIcon} shape="circle" />,
|
|
508
|
+
content: (
|
|
509
|
+
<Stack gap="sm" align="start">
|
|
510
|
+
<Text type="secondary">Teammates see the same projects and saved views.</Text>
|
|
511
|
+
<Button>Send invites</Button>
|
|
512
|
+
</Stack>
|
|
513
|
+
),
|
|
514
|
+
},
|
|
515
|
+
{
|
|
516
|
+
value: "connect",
|
|
517
|
+
title: "Connect a data source",
|
|
518
|
+
icon: <IconBadge icon={CircleIcon} shape="circle" />,
|
|
519
|
+
content: <Text type="secondary">Postgres, a CSV upload or the REST API.</Text>,
|
|
520
|
+
},
|
|
521
|
+
]}
|
|
522
|
+
/>
|
|
523
|
+
</Stack>
|
|
524
|
+
)
|
|
525
|
+
}
|
|
526
|
+
```
|
|
527
|
+
|
|
475
528
|
### Empty
|
|
476
529
|
|
|
477
530
|
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
@@ -490,7 +543,7 @@ export default function EmptyExample() {
|
|
|
490
543
|
action={
|
|
491
544
|
<>
|
|
492
545
|
<Button>Create invoice</Button>
|
|
493
|
-
<Button tone="neutral"
|
|
546
|
+
<Button tone="neutral" appearance="outline">
|
|
494
547
|
Import
|
|
495
548
|
</Button>
|
|
496
549
|
</>
|
|
@@ -511,7 +564,7 @@ import { Grid } from "themelia-ui/base/structure"
|
|
|
511
564
|
|
|
512
565
|
export default function EmptyMedia() {
|
|
513
566
|
return (
|
|
514
|
-
<Grid columns={{ base: 1, md: 3 }}
|
|
567
|
+
<Grid columns={{ base: 1, md: 3 }}>
|
|
515
568
|
<Empty
|
|
516
569
|
padding="sm"
|
|
517
570
|
border
|
|
@@ -564,9 +617,9 @@ const ILLUSTRATIONS = [
|
|
|
564
617
|
|
|
565
618
|
export default function EmptyIllustrations() {
|
|
566
619
|
return (
|
|
567
|
-
<Grid columns={{ base: 1, sm: 2, lg: 3 }}
|
|
620
|
+
<Grid columns={{ base: 1, sm: 2, lg: 3 }}>
|
|
568
621
|
{ILLUSTRATIONS.map(({ name, Component, use }) => (
|
|
569
|
-
<Stack key={name} gap="
|
|
622
|
+
<Stack key={name} gap="sm" align="center">
|
|
570
623
|
<Component />
|
|
571
624
|
<Stack gap="none" align="center">
|
|
572
625
|
<Text size="sm" weight="medium">{name}</Text>
|
|
@@ -589,9 +642,9 @@ import { Stack } from "themelia-ui/base/structure"
|
|
|
589
642
|
|
|
590
643
|
export default function EmptyBorder() {
|
|
591
644
|
return (
|
|
592
|
-
<Stack
|
|
645
|
+
<Stack>
|
|
593
646
|
<Empty padding="sm" border media={<InboxIcon />} mediaVariant="icon" title="padding="sm"" description="A side panel, a table cell, a card body." />
|
|
594
|
-
<Empty
|
|
647
|
+
<Empty media={<InboxIcon />} mediaVariant="icon" title="padding="default"" description="A whole page, with no border." />
|
|
595
648
|
</Stack>
|
|
596
649
|
)
|
|
597
650
|
}
|
|
@@ -606,7 +659,7 @@ import { Stack } from "themelia-ui/base/structure"
|
|
|
606
659
|
|
|
607
660
|
export default function FormStates() {
|
|
608
661
|
return (
|
|
609
|
-
<Stack
|
|
662
|
+
<Stack>
|
|
610
663
|
<Card>
|
|
611
664
|
<CardContent>
|
|
612
665
|
<LoadingState />
|
|
@@ -640,7 +693,7 @@ import { Text } from "themelia-ui/base/typography"
|
|
|
640
693
|
export default function ProgressExample() {
|
|
641
694
|
return (
|
|
642
695
|
// Captioned: `label` is the accessible name and renders nothing.
|
|
643
|
-
<Stack
|
|
696
|
+
<Stack style={{ width: "100%" }}>
|
|
644
697
|
{[
|
|
645
698
|
{ value: 24, tone: undefined, caption: "value={24}" },
|
|
646
699
|
{ value: 64, tone: "info" as const, caption: 'value={64} tone="info"' },
|
|
@@ -648,7 +701,7 @@ export default function ProgressExample() {
|
|
|
648
701
|
{ value: 92, tone: "warning" as const, caption: 'value={92} tone="warning"' },
|
|
649
702
|
{ value: undefined, tone: undefined, caption: "no value — indeterminate" },
|
|
650
703
|
].map((row) => (
|
|
651
|
-
<Stack key={row.caption} gap="
|
|
704
|
+
<Stack key={row.caption} gap="sm">
|
|
652
705
|
<Text size="xs" type="secondary">{row.caption}</Text>
|
|
653
706
|
<Progress value={row.value} tone={row.tone} label={row.caption} />
|
|
654
707
|
</Stack>
|
|
@@ -667,7 +720,7 @@ import { Text } from "themelia-ui/base/typography"
|
|
|
667
720
|
|
|
668
721
|
export default function ProgressCircleExample() {
|
|
669
722
|
return (
|
|
670
|
-
<Stack direction="horizontal"
|
|
723
|
+
<Stack direction="horizontal" wrap>
|
|
671
724
|
{[
|
|
672
725
|
{ value: 24, tone: undefined },
|
|
673
726
|
{ value: 60, tone: "info" as const },
|
|
@@ -15,12 +15,11 @@ A numeric field carries a unit, currency or precision the input itself must enfo
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { CoordinatesInput } from "themelia-ui/base/forms-numeric"
|
|
18
|
-
import "themelia-ui/base/forms-numeric.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
22
21
|
|
|
23
|
-
This module composes `base/choice-inputs`, `base/text-inputs`.
|
|
22
|
+
This module composes `base/choice-inputs`, `base/text-inputs`, `base/typography`.
|
|
24
23
|
|
|
25
24
|
Application policy—routing, fetching, persistence, permissions, and translation—stays
|
|
26
25
|
outside the package and arrives through the public props, callbacks, slots, or accessors below.
|
|
@@ -456,7 +455,7 @@ export default function Currency() {
|
|
|
456
455
|
const [currency, setCurrency] = useState("EUR")
|
|
457
456
|
|
|
458
457
|
return (
|
|
459
|
-
<Stack
|
|
458
|
+
<Stack style={{ maxWidth: "26rem", width: "100%" }}>
|
|
460
459
|
<FormField label="Invoice total">
|
|
461
460
|
<CurrencyInput
|
|
462
461
|
value={amount}
|
|
@@ -484,7 +483,7 @@ import { Stack } from "themelia-ui/base/structure"
|
|
|
484
483
|
|
|
485
484
|
export default function Decimal() {
|
|
486
485
|
return (
|
|
487
|
-
<Stack
|
|
486
|
+
<Stack style={{ maxWidth: "26rem", width: "100%" }}>
|
|
488
487
|
<FormField label="Plain" helperText="Commas become dots; extra decimals are refused.">
|
|
489
488
|
<DecimalInput defaultValue="12.5" decimalPlaces={2} />
|
|
490
489
|
</FormField>
|
|
@@ -516,7 +515,7 @@ export default function RoundingModeExample() {
|
|
|
516
515
|
const [mode, setMode] = useState<RoundingMode>("half-even")
|
|
517
516
|
|
|
518
517
|
return (
|
|
519
|
-
<Stack
|
|
518
|
+
<Stack style={{ maxWidth: "26rem", width: "100%" }}>
|
|
520
519
|
<FormField label="Rounding" helperText="Applies to the field below.">
|
|
521
520
|
<RoundingModeSelect
|
|
522
521
|
value={mode}
|
|
@@ -542,7 +541,7 @@ import { Stack } from "themelia-ui/base/structure"
|
|
|
542
541
|
|
|
543
542
|
export default function Percentage() {
|
|
544
543
|
return (
|
|
545
|
-
<Stack
|
|
544
|
+
<Stack style={{ maxWidth: "26rem", width: "100%" }}>
|
|
546
545
|
<FormField label="VAT rate">
|
|
547
546
|
<PercentageInput defaultValue="21" />
|
|
548
547
|
</FormField>
|
|
@@ -576,7 +575,7 @@ export default function Units() {
|
|
|
576
575
|
const [coordinates, setCoordinates] = useState<CoordinatesValue>({ latitude: "52.370216", longitude: "4.895168" })
|
|
577
576
|
|
|
578
577
|
return (
|
|
579
|
-
<Stack
|
|
578
|
+
<Stack style={{ maxWidth: "34rem", width: "100%" }}>
|
|
580
579
|
<FormField label="Shipping weight">
|
|
581
580
|
<WeightInput
|
|
582
581
|
value={weight}
|
|
@@ -14,8 +14,7 @@ Assembling a form's visible structure — label, control, support text, sections
|
|
|
14
14
|
## Import
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
|
-
import {
|
|
18
|
-
import "themelia-ui/base/forms.css"
|
|
17
|
+
import { FormField, FormSection } from "themelia-ui/base/forms"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
@@ -136,6 +135,16 @@ Several fields sharing one label and one supporting line — a date range, a nam
|
|
|
136
135
|
two. A real `<fieldset>` and `<legend>`, so the legend is announced when focus enters the
|
|
137
136
|
group.
|
|
138
137
|
|
|
138
|
+
**Use when:** Related controls sharing an announced fieldset legend.
|
|
139
|
+
|
|
140
|
+
**Avoid when:** A whole independently titled subject surface.
|
|
141
|
+
|
|
142
|
+
**Compose:** Use one legend for the group and distinct FormField labels for its controls.
|
|
143
|
+
|
|
144
|
+
**Capabilities:** semantic fieldset legend; related editable controls.
|
|
145
|
+
|
|
146
|
+
**Alternatives:** FormSection.
|
|
147
|
+
|
|
139
148
|
```text
|
|
140
149
|
({ legend, description, className, children, ...props }: FieldGroupProps) => React.JSX.Element
|
|
141
150
|
```
|
|
@@ -231,6 +240,16 @@ Kind: callable.
|
|
|
231
240
|
|
|
232
241
|
A titled group of fields, on a card's surface.
|
|
233
242
|
|
|
243
|
+
**Use when:** Editable form sections, including groups inside an existing Card.
|
|
244
|
+
|
|
245
|
+
**Avoid when:** Read-only facts or a semantic fieldset with one shared legend.
|
|
246
|
+
|
|
247
|
+
**Compose:** Use flat inside a surface; flat retains Card region insets. Let its title name the section and FormField name each field.
|
|
248
|
+
|
|
249
|
+
**Capabilities:** editable form sections; existing surface grouping.
|
|
250
|
+
|
|
251
|
+
**Alternatives:** ContentBlock, FieldGroup.
|
|
252
|
+
|
|
234
253
|
```text
|
|
235
254
|
({ title, description, actions, children, footer, surface, className, }: FormSectionProps) => import("react").JSX.Element
|
|
236
255
|
```
|
|
@@ -304,7 +323,7 @@ import { Input } from "themelia-ui/base/text-inputs"
|
|
|
304
323
|
|
|
305
324
|
export default function FormFieldExample() {
|
|
306
325
|
return (
|
|
307
|
-
<Stack
|
|
326
|
+
<Stack style={{ maxWidth: "26rem", width: "100%" }}>
|
|
308
327
|
<FormField label="Email" required hint="We only use this for receipts.">
|
|
309
328
|
<Input type="email" placeholder="you@example.com" />
|
|
310
329
|
</FormField>
|
|
@@ -354,7 +373,7 @@ import { Input } from "themelia-ui/base/text-inputs"
|
|
|
354
373
|
|
|
355
374
|
export default function HorizontalFields() {
|
|
356
375
|
return (
|
|
357
|
-
<Stack
|
|
376
|
+
<Stack style={{ width: "100%" }}>
|
|
358
377
|
<FormField orientation="horizontal" label="Display name" hint="Shown on invoices.">
|
|
359
378
|
<Input defaultValue="Acme Corporation" />
|
|
360
379
|
</FormField>
|
|
@@ -378,7 +397,7 @@ export default function FieldGroupExample() {
|
|
|
378
397
|
return (
|
|
379
398
|
<div style={{ maxWidth: "34rem", width: "100%" }}>
|
|
380
399
|
<FieldGroup legend="Reporting period" description="Both ends are inclusive.">
|
|
381
|
-
<Stack direction="horizontal" gap="
|
|
400
|
+
<Stack direction="horizontal" gap="sm">
|
|
382
401
|
<FormField label="From">
|
|
383
402
|
<Input type="date" defaultValue="2026-03-01" />
|
|
384
403
|
</FormField>
|
|
@@ -392,6 +411,57 @@ export default function FieldGroupExample() {
|
|
|
392
411
|
}
|
|
393
412
|
```
|
|
394
413
|
|
|
414
|
+
### Multi-section form reference
|
|
415
|
+
|
|
416
|
+
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
417
|
+
import { useRef, useState } from "react"
|
|
418
|
+
import { Card } from "themelia-ui/base/cards"
|
|
419
|
+
import { ContentBlock } from "themelia-ui/base/display"
|
|
420
|
+
import { FieldGroup, FormField, FormSection, FormActionsBar, SubmitStateButton } from "themelia-ui/base/forms"
|
|
421
|
+
import { Stack } from "themelia-ui/base/structure"
|
|
422
|
+
import { Input } from "themelia-ui/base/text-inputs"
|
|
423
|
+
import { Text } from "themelia-ui/base/typography"
|
|
424
|
+
import { useFormFieldBinding, useStateFormControl, type FormControl } from "themelia-ui/forms"
|
|
425
|
+
|
|
426
|
+
type Draft = { firstName: string; lastName: string; company: string }
|
|
427
|
+
function BoundField({ control, name, label, error }: { control: FormControl<Draft>; name: keyof Draft; label: string; error?: string }) {
|
|
428
|
+
const field = useFormFieldBinding<string, Draft>({ control, name })
|
|
429
|
+
return <FormField label={label} error={error} hint={name === "company" ? "The name shown on invoices." : undefined}><Input required value={field.value ?? ""} onChange={event => field.onValueChange(event.target.value)} onBlur={field.onBlur} /></FormField>
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
export default function MultiSectionReference() {
|
|
433
|
+
const control = useStateFormControl<Draft>({ firstName: "Alex", lastName: "Example", company: "Example team" })
|
|
434
|
+
const [pending, setPending] = useState(false)
|
|
435
|
+
const [error, setError] = useState<string>()
|
|
436
|
+
const [rootError, setRootError] = useState<string>()
|
|
437
|
+
const [saved, setSaved] = useState(0)
|
|
438
|
+
const running = useRef(false)
|
|
439
|
+
return <Stack>
|
|
440
|
+
<Card title="Account details" description="One outer surface, editable sections with retained region insets.">
|
|
441
|
+
<form onSubmit={async event => {
|
|
442
|
+
event.preventDefault(); if (running.current) return
|
|
443
|
+
running.current = true; setPending(true); setError(undefined); setRootError(undefined)
|
|
444
|
+
try {
|
|
445
|
+
await new Promise(resolve => setTimeout(resolve, 250))
|
|
446
|
+
if (control.values.company === "offline") throw new Error("Request failed. Your values remain here.")
|
|
447
|
+
if (control.values.company.length < 3) { setError("Company must have at least three characters."); return }
|
|
448
|
+
setSaved(count => count + 1)
|
|
449
|
+
} catch (failure) { setRootError((failure as Error).message) }
|
|
450
|
+
finally { running.current = false; setPending(false) }
|
|
451
|
+
}}>
|
|
452
|
+
<Stack gap="none">
|
|
453
|
+
{rootError && <Text role="alert" type="error">{rootError}</Text>}
|
|
454
|
+
<FormSection surface="flat" title="Contact"><FieldGroup legend="Legal name" disabled={pending}><BoundField control={control} name="firstName" label="First name" /><BoundField control={control} name="lastName" label="Last name" /></FieldGroup></FormSection>
|
|
455
|
+
<FormSection surface="flat" title="Billing"><fieldset disabled={pending} style={{ border: 0, padding: 0, margin: 0 }}><BoundField control={control} name="company" label="Company" error={error} /></fieldset></FormSection>
|
|
456
|
+
<FormActionsBar leading={<Text role="status">Successful submissions {saved}</Text>}><SubmitStateButton type="submit" state={pending ? "submitting" : "idle"} strings={{ idle: "Save account" }} /></FormActionsBar>
|
|
457
|
+
</Stack>
|
|
458
|
+
</form>
|
|
459
|
+
</Card>
|
|
460
|
+
<Card title="Preferences" description="A sibling subject owns its own surface."><ContentBlock surface="plain" title="Delivery instructions"><Text>Use ContentBlock for supporting prose; FieldGroup supplies fieldset semantics for related controls.</Text></ContentBlock></Card>
|
|
461
|
+
</Stack>
|
|
462
|
+
}
|
|
463
|
+
```
|
|
464
|
+
|
|
395
465
|
### FormSection
|
|
396
466
|
|
|
397
467
|
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
@@ -403,12 +473,12 @@ import { Text } from "themelia-ui/base/typography"
|
|
|
403
473
|
|
|
404
474
|
export default function FormSectionExample() {
|
|
405
475
|
return (
|
|
406
|
-
<Stack
|
|
476
|
+
<Stack style={{ maxWidth: "34rem" }}>
|
|
407
477
|
<FormSection
|
|
408
478
|
title="Billing"
|
|
409
479
|
description="Where invoices go. Changing it does not change the shipping address."
|
|
410
480
|
actions={
|
|
411
|
-
<Button tone="neutral"
|
|
481
|
+
<Button tone="neutral" appearance="ghost">
|
|
412
482
|
Edit
|
|
413
483
|
</Button>
|
|
414
484
|
}
|
|
@@ -446,7 +516,7 @@ export default function FormActions() {
|
|
|
446
516
|
</Text>
|
|
447
517
|
}
|
|
448
518
|
>
|
|
449
|
-
<Button tone="neutral"
|
|
519
|
+
<Button tone="neutral" appearance="outline">
|
|
450
520
|
Discard
|
|
451
521
|
</Button>
|
|
452
522
|
<Button>Save</Button>
|
|
@@ -466,7 +536,7 @@ import { Stack } from "themelia-ui/base/structure"
|
|
|
466
536
|
|
|
467
537
|
export default function FormErrorSummary() {
|
|
468
538
|
return (
|
|
469
|
-
<Stack style={{ maxWidth: "34rem" }}>
|
|
539
|
+
<Stack gap="sm" style={{ maxWidth: "34rem" }}>
|
|
470
540
|
<ErrorSummary
|
|
471
541
|
errors={[
|
|
472
542
|
"Name is required.",
|
|
@@ -474,7 +544,7 @@ export default function FormErrorSummary() {
|
|
|
474
544
|
"VAT number does not match the selected country.",
|
|
475
545
|
]}
|
|
476
546
|
action={
|
|
477
|
-
<Button tone="neutral"
|
|
547
|
+
<Button tone="neutral" appearance="outline">
|
|
478
548
|
Review the first problem
|
|
479
549
|
</Button>
|
|
480
550
|
}
|
|
@@ -493,14 +563,14 @@ import { Stack } from "themelia-ui/base/structure"
|
|
|
493
563
|
|
|
494
564
|
export default function FormDirty() {
|
|
495
565
|
return (
|
|
496
|
-
<Stack
|
|
566
|
+
<Stack style={{ maxWidth: "34rem" }}>
|
|
497
567
|
{(["neutral", "info", "warning"] as const).map((tone) => (
|
|
498
568
|
<DirtyStateBanner
|
|
499
569
|
key={tone}
|
|
500
570
|
tone={tone}
|
|
501
571
|
actions={
|
|
502
572
|
<>
|
|
503
|
-
<Button tone="neutral"
|
|
573
|
+
<Button tone="neutral" appearance="outline">
|
|
504
574
|
Discard
|
|
505
575
|
</Button>
|
|
506
576
|
<Button>Save</Button>
|
|
@@ -526,13 +596,13 @@ export default function FormSubmitState() {
|
|
|
526
596
|
const [state, setState] = useState<SubmitState>("idle")
|
|
527
597
|
|
|
528
598
|
return (
|
|
529
|
-
<Stack direction="horizontal"
|
|
599
|
+
<Stack direction="horizontal" wrap align="center">
|
|
530
600
|
{(["idle", "submitting", "succeeded"] as SubmitState[]).map((s) => (
|
|
531
601
|
<SubmitStateButton key={s} state={s} />
|
|
532
602
|
))}
|
|
533
603
|
<Button
|
|
534
604
|
tone="neutral"
|
|
535
|
-
|
|
605
|
+
appearance="outline"
|
|
536
606
|
onClick={() => {
|
|
537
607
|
setState("submitting")
|
|
538
608
|
setTimeout(() => setState("succeeded"), 1200)
|
|
@@ -15,12 +15,11 @@ Hovering a reference reveals a preview the reader does not have to act on.
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { HoverCard } from "themelia-ui/base/hover-card"
|
|
18
|
-
import "themelia-ui/base/hover-card.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
22
21
|
|
|
23
|
-
This module
|
|
22
|
+
This module composes `base/typography`.
|
|
24
23
|
|
|
25
24
|
Application policy—routing, fetching, persistence, permissions, and translation—stays
|
|
26
25
|
outside the package and arrives through the public props, callbacks, slots, or accessors below.
|
|
@@ -111,11 +110,11 @@ export default function HoverCardExample() {
|
|
|
111
110
|
@jane
|
|
112
111
|
</HoverCardTrigger>
|
|
113
112
|
<HoverCardContent>
|
|
114
|
-
<Stack direction="horizontal" gap="
|
|
113
|
+
<Stack direction="horizontal" gap="sm" align="start">
|
|
115
114
|
<Avatar>
|
|
116
115
|
<AvatarFallback>JM</AvatarFallback>
|
|
117
116
|
</Avatar>
|
|
118
|
-
<Stack gap="
|
|
117
|
+
<Stack gap="sm">
|
|
119
118
|
<Text weight="medium">Jane McDonald</Text>
|
|
120
119
|
<Text size="xs" type="secondary">Billing · joined March 2024</Text>
|
|
121
120
|
</Stack>
|
|
@@ -15,7 +15,6 @@ A control needs an affix inside its border — an icon, unit, prefix button or c
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { InputGroup } from "themelia-ui/base/input-group"
|
|
18
|
-
import "themelia-ui/base/input-group.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
@@ -66,18 +65,20 @@ Kind: callable.
|
|
|
66
65
|
A quiet Button sized to sit inside the field rather than beside it.
|
|
67
66
|
|
|
68
67
|
```text
|
|
69
|
-
({ className, type, tone,
|
|
68
|
+
({ className, type, tone, appearance, iconOnly, ...props }: InputGroupButtonProps) => React.JSX.Element
|
|
70
69
|
```
|
|
71
70
|
|
|
72
71
|
### `InputGroupButtonProps`
|
|
73
72
|
|
|
74
73
|
Kind: interface.
|
|
75
74
|
|
|
76
|
-
|
|
75
|
+
One size, inset inside the field: a full-height Button would set the field's height rather
|
|
76
|
+
than fit in it. `iconOnly` makes it square.
|
|
77
|
+
|
|
78
|
+
Extends: `Omit<React.ComponentProps<typeof Button>, "type">`.
|
|
77
79
|
|
|
78
80
|
| member | required | type | description / documented default |
|
|
79
81
|
| --- | :-: | --- | --- |
|
|
80
|
-
| `size` | no | `"xs" \| "sm" \| "icon-xs" \| "icon-sm"` | The sizes that fit inside a field: two text sizes and their icon-only twins. A<br>full-height Button would set the field's height rather than fit in it, which is why<br>this is the one place the kit keeps a size prop on a control. |
|
|
81
82
|
| `type` | no | `"button" \| "submit" \| "reset"` | The native button type: `button` unless set, so pressing it never submits the form around the field. |
|
|
82
83
|
|
|
83
84
|
### `InputGroupInput`
|
|
@@ -111,8 +112,8 @@ React.ComponentProps<"div">
|
|
|
111
112
|
|
|
112
113
|
Kind: callable.
|
|
113
114
|
|
|
114
|
-
Secondary text at the
|
|
115
|
-
|
|
115
|
+
Secondary text at the field's size — a unit, a domain suffix, a counter. Text's `sm`, the
|
|
116
|
+
step every field control's value uses, so it cannot drift from the input beside it.
|
|
116
117
|
|
|
117
118
|
```text
|
|
118
119
|
({ className, ...props }: React.ComponentProps<"span">) => React.JSX.Element
|
|
@@ -161,7 +162,7 @@ import { Stack } from "themelia-ui/base/structure"
|
|
|
161
162
|
|
|
162
163
|
export default function InputGroupInline() {
|
|
163
164
|
return (
|
|
164
|
-
<Stack
|
|
165
|
+
<Stack style={{ maxWidth: "26rem" }}>
|
|
165
166
|
<InputGroup>
|
|
166
167
|
<InputGroupAddon>
|
|
167
168
|
<SearchIcon aria-hidden="true" />
|
|
@@ -182,7 +183,7 @@ export default function InputGroupInline() {
|
|
|
182
183
|
<InputGroup>
|
|
183
184
|
<InputGroupInput placeholder="Add a label" aria-label="Label" />
|
|
184
185
|
<InputGroupAddon align="inline-end">
|
|
185
|
-
<InputGroupButton
|
|
186
|
+
<InputGroupButton iconOnly aria-label="Add">
|
|
186
187
|
<ArrowRightIcon aria-hidden="true" />
|
|
187
188
|
</InputGroupButton>
|
|
188
189
|
</InputGroupAddon>
|
|
@@ -204,10 +205,10 @@ import { Stack } from "themelia-ui/base/structure"
|
|
|
204
205
|
|
|
205
206
|
export default function InputGroupBlock() {
|
|
206
207
|
return (
|
|
207
|
-
<Stack
|
|
208
|
+
<Stack style={{ maxWidth: "26rem" }}>
|
|
208
209
|
<InputGroup>
|
|
209
210
|
<InputGroupAddon align="block-start">
|
|
210
|
-
<InputGroupButton
|
|
211
|
+
<InputGroupButton iconOnly aria-label="Favourite">
|
|
211
212
|
<StarIcon aria-hidden="true" />
|
|
212
213
|
</InputGroupButton>
|
|
213
214
|
<InputGroupText>Internal note</InputGroupText>
|
|
@@ -222,7 +223,7 @@ export default function InputGroupBlock() {
|
|
|
222
223
|
}
|
|
223
224
|
```
|
|
224
225
|
|
|
225
|
-
###
|
|
226
|
+
### A button inside the shell
|
|
226
227
|
|
|
227
228
|
```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
|
|
228
229
|
import { ArrowRightIcon } from "lucide-react"
|
|
@@ -234,25 +235,21 @@ import { Stack } from "themelia-ui/base/structure"
|
|
|
234
235
|
|
|
235
236
|
export default function InputGroupButtons() {
|
|
236
237
|
return (
|
|
237
|
-
<Stack
|
|
238
|
-
|
|
239
|
-
<
|
|
240
|
-
|
|
241
|
-
<
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
</InputGroupButton>
|
|
253
|
-
</InputGroupAddon>
|
|
254
|
-
</InputGroup>
|
|
255
|
-
))}
|
|
238
|
+
<Stack style={{ maxWidth: "26rem" }}>
|
|
239
|
+
<InputGroup>
|
|
240
|
+
<InputGroupInput placeholder="A labelled button" aria-label="Coupon code" />
|
|
241
|
+
<InputGroupAddon align="inline-end">
|
|
242
|
+
<InputGroupButton>Apply</InputGroupButton>
|
|
243
|
+
</InputGroupAddon>
|
|
244
|
+
</InputGroup>
|
|
245
|
+
<InputGroup>
|
|
246
|
+
<InputGroupInput placeholder="An icon-only button" aria-label="Search" />
|
|
247
|
+
<InputGroupAddon align="inline-end">
|
|
248
|
+
<InputGroupButton iconOnly aria-label="Go">
|
|
249
|
+
<ArrowRightIcon aria-hidden="true" />
|
|
250
|
+
</InputGroupButton>
|
|
251
|
+
</InputGroupAddon>
|
|
252
|
+
</InputGroup>
|
|
256
253
|
</Stack>
|
|
257
254
|
)
|
|
258
255
|
}
|
|
@@ -15,7 +15,6 @@ A row carries identity — media, title, description and trailing actions — in
|
|
|
15
15
|
|
|
16
16
|
```tsx fragment — import-only example
|
|
17
17
|
import { Item } from "themelia-ui/base/item"
|
|
18
|
-
import "themelia-ui/base/item.css"
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Composition
|
|
@@ -31,8 +30,8 @@ outside the package and arrives through the public props, callbacks, slots, or a
|
|
|
31
30
|
|
|
32
31
|
Kind: callable.
|
|
33
32
|
|
|
34
|
-
A row — a list row, a menu row, a table row. No size prop: row height follows
|
|
35
|
-
|
|
33
|
+
A row — a list row, a menu row, a table row. No size prop: row height follows the
|
|
34
|
+
density, so use a denser scope for a denser list.
|
|
36
35
|
|
|
37
36
|
**Use when:** An identity row with a title, description, media and actions.
|
|
38
37
|
|
|
@@ -205,14 +204,14 @@ export default function ItemExample() {
|
|
|
205
204
|
import { Card } from "themelia-ui/base/cards"
|
|
206
205
|
import { Item, ItemContent, ItemDescription, ItemGroup, ItemTitle } from "themelia-ui/base/item"
|
|
207
206
|
import { Stack } from "themelia-ui/base/structure"
|
|
208
|
-
import {
|
|
207
|
+
import { UIScope } from "themelia-ui/ui-provider"
|
|
209
208
|
|
|
210
209
|
export default function CardsScale() {
|
|
211
210
|
return (
|
|
212
|
-
<Stack
|
|
213
|
-
{[
|
|
214
|
-
<
|
|
215
|
-
<Card surface="bordered" title={
|
|
211
|
+
<Stack style={{ width: "100%" }}>
|
|
212
|
+
{(["default", "compact"] as const).map((density) => (
|
|
213
|
+
<UIScope key={density} config={{ density }}>
|
|
214
|
+
<Card surface="bordered" title={`density="${density}"`}>
|
|
216
215
|
<ItemGroup>
|
|
217
216
|
<Item surface="bordered">
|
|
218
217
|
<ItemContent>
|
|
@@ -228,7 +227,7 @@ export default function CardsScale() {
|
|
|
228
227
|
</Item>
|
|
229
228
|
</ItemGroup>
|
|
230
229
|
</Card>
|
|
231
|
-
</
|
|
230
|
+
</UIScope>
|
|
232
231
|
))}
|
|
233
232
|
</Stack>
|
|
234
233
|
)
|