@flowstack-ui/brick 0.1.6 → 0.1.11
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/README.md +13 -7
- package/dist/agents/accordion.json +17 -2
- package/dist/agents/accordion.md +5 -1
- package/dist/agents/alert-dialog.json +111 -0
- package/dist/agents/alert-dialog.md +53 -0
- package/dist/agents/app-bar.json +5 -4
- package/dist/agents/app-bar.md +4 -3
- package/dist/agents/aspect-ratio.json +80 -0
- package/dist/agents/aspect-ratio.md +45 -0
- package/dist/agents/avatar.json +92 -0
- package/dist/agents/avatar.md +49 -0
- package/dist/agents/badge.json +26 -8
- package/dist/agents/badge.md +11 -6
- package/dist/agents/bleed.json +54 -0
- package/dist/agents/bleed.md +39 -0
- package/dist/agents/button.json +7 -2
- package/dist/agents/button.md +1 -1
- package/dist/agents/card.json +21 -1
- package/dist/agents/card.md +7 -1
- package/dist/agents/checkbox-group.json +108 -0
- package/dist/agents/checkbox-group.md +56 -0
- package/dist/agents/checkbox.json +6 -1
- package/dist/agents/chip.json +73 -0
- package/dist/agents/chip.md +44 -0
- package/dist/agents/code-block.json +76 -0
- package/dist/agents/code-block.md +47 -0
- package/dist/agents/code.json +67 -0
- package/dist/agents/code.md +42 -0
- package/dist/agents/collapsible.json +34 -3
- package/dist/agents/collapsible.md +10 -3
- package/dist/agents/color-picker.json +78 -0
- package/dist/agents/color-picker.md +46 -0
- package/dist/agents/color-swatch.json +51 -0
- package/dist/agents/color-swatch.md +36 -0
- package/dist/agents/combobox.json +95 -0
- package/dist/agents/combobox.md +51 -0
- package/dist/agents/context-menu.json +109 -0
- package/dist/agents/context-menu.md +54 -0
- package/dist/agents/coverage.json +24579 -0
- package/dist/agents/data-grid.json +127 -0
- package/dist/agents/data-grid.md +61 -0
- package/dist/agents/data-list.json +63 -0
- package/dist/agents/data-list.md +41 -0
- package/dist/agents/dialog.json +112 -0
- package/dist/agents/dialog.md +53 -0
- package/dist/agents/dropdown-menu.json +112 -0
- package/dist/agents/dropdown-menu.md +56 -0
- package/dist/agents/feed.json +84 -0
- package/dist/agents/feed.md +48 -0
- package/dist/agents/field.json +6 -1
- package/dist/agents/fieldset.json +6 -1
- package/dist/agents/file-upload.json +93 -0
- package/dist/agents/file-upload.md +50 -0
- package/dist/agents/form.json +11 -2
- package/dist/agents/form.md +2 -1
- package/dist/agents/grid.json +18 -1
- package/dist/agents/grid.md +6 -0
- package/dist/agents/group.json +77 -0
- package/dist/agents/group.md +48 -0
- package/dist/agents/hide.json +14 -0
- package/dist/agents/hide.md +3 -0
- package/dist/agents/hover-card.json +94 -0
- package/dist/agents/hover-card.md +51 -0
- package/dist/agents/icon-button.json +23 -12
- package/dist/agents/icon-button.md +12 -8
- package/dist/agents/image.json +33 -7
- package/dist/agents/image.md +11 -4
- package/dist/agents/input.json +7 -2
- package/dist/agents/input.md +1 -1
- package/dist/agents/interface-composition.json +216 -17
- package/dist/agents/interface-composition.md +7 -0
- package/dist/agents/layer-selection.json +1174 -11
- package/dist/agents/layer-selection.md +84 -1
- package/dist/agents/link-box.json +97 -0
- package/dist/agents/link-box.md +53 -0
- package/dist/agents/link.json +34 -5
- package/dist/agents/link.md +12 -2
- package/dist/agents/list.json +1 -1
- package/dist/agents/list.md +1 -1
- package/dist/agents/manifest.json +291 -2
- package/dist/agents/menubar.json +109 -0
- package/dist/agents/menubar.md +54 -0
- package/dist/agents/multi-select.json +93 -0
- package/dist/agents/multi-select.md +49 -0
- package/dist/agents/nav-list.json +15 -5
- package/dist/agents/nav-list.md +6 -4
- package/dist/agents/notification-badge.json +88 -0
- package/dist/agents/notification-badge.md +49 -0
- package/dist/agents/number-input.json +89 -0
- package/dist/agents/number-input.md +50 -0
- package/dist/agents/otp-field.json +87 -0
- package/dist/agents/otp-field.md +48 -0
- package/dist/agents/pagination.json +26 -5
- package/dist/agents/pagination.md +11 -4
- package/dist/agents/password-toggle-field.json +87 -0
- package/dist/agents/password-toggle-field.md +48 -0
- package/dist/agents/popover.json +114 -0
- package/dist/agents/popover.md +56 -0
- package/dist/agents/progress-circle.json +85 -0
- package/dist/agents/progress-circle.md +46 -0
- package/dist/agents/progress.json +91 -0
- package/dist/agents/progress.md +48 -0
- package/dist/agents/radio-group.json +92 -0
- package/dist/agents/radio-group.md +49 -0
- package/dist/agents/rating.json +91 -0
- package/dist/agents/rating.md +49 -0
- package/dist/agents/reorderable-list.json +74 -0
- package/dist/agents/reorderable-list.md +45 -0
- package/dist/agents/segment-group.json +62 -0
- package/dist/agents/segment-group.md +43 -0
- package/dist/agents/select.json +95 -0
- package/dist/agents/select.md +51 -0
- package/dist/agents/show.json +14 -0
- package/dist/agents/show.md +3 -0
- package/dist/agents/sidebar.json +16 -3
- package/dist/agents/sidebar.md +6 -1
- package/dist/agents/skeleton.json +73 -0
- package/dist/agents/skeleton.md +43 -0
- package/dist/agents/slider.json +88 -0
- package/dist/agents/slider.md +48 -0
- package/dist/agents/stack.json +19 -1
- package/dist/agents/stack.md +7 -0
- package/dist/agents/status.json +59 -0
- package/dist/agents/status.md +40 -0
- package/dist/agents/surface.json +42 -3
- package/dist/agents/surface.md +12 -2
- package/dist/agents/swipeable-item.json +93 -0
- package/dist/agents/swipeable-item.md +50 -0
- package/dist/agents/switch.json +92 -0
- package/dist/agents/switch.md +49 -0
- package/dist/agents/table.json +113 -0
- package/dist/agents/table.md +59 -0
- package/dist/agents/tabs.json +9 -2
- package/dist/agents/tabs.md +4 -1
- package/dist/agents/text.json +23 -8
- package/dist/agents/text.md +10 -7
- package/dist/agents/textarea.json +6 -1
- package/dist/agents/toast.json +91 -0
- package/dist/agents/toast.md +48 -0
- package/dist/agents/toggle-group.json +89 -0
- package/dist/agents/toggle-group.md +49 -0
- package/dist/agents/toggle.json +82 -0
- package/dist/agents/toggle.md +47 -0
- package/dist/agents/toolbar.json +11 -1
- package/dist/agents/toolbar.md +3 -1
- package/dist/agents/tooltip.json +96 -0
- package/dist/agents/tooltip.md +49 -0
- package/dist/agents/tree-grid.json +98 -0
- package/dist/agents/tree-grid.md +51 -0
- package/dist/agents/tree.json +94 -0
- package/dist/agents/tree.md +51 -0
- package/dist/agents/visually-hidden.json +70 -0
- package/dist/agents/visually-hidden.md +42 -0
- package/dist/agents/z-stack.json +21 -1
- package/dist/agents/z-stack.md +5 -0
- package/dist/bleed.d.ts +2 -0
- package/dist/bleed.d.ts.map +1 -0
- package/dist/bleed.js +2 -0
- package/dist/bleed.js.map +1 -0
- package/dist/color-picker.d.ts +2 -0
- package/dist/color-picker.d.ts.map +1 -0
- package/dist/color-picker.js +2 -0
- package/dist/color-picker.js.map +1 -0
- package/dist/color-swatch.d.ts +2 -0
- package/dist/color-swatch.d.ts.map +1 -0
- package/dist/color-swatch.js +2 -0
- package/dist/color-swatch.js.map +1 -0
- package/dist/components/_responsive-value/ResponsiveValue.d.ts.map +1 -1
- package/dist/components/_responsive-value/ResponsiveValue.js +3 -1
- package/dist/components/_responsive-value/ResponsiveValue.js.map +1 -1
- package/dist/components/_spacing-value/SpacingValue.d.ts +8 -0
- package/dist/components/_spacing-value/SpacingValue.d.ts.map +1 -0
- package/dist/components/_spacing-value/SpacingValue.js +46 -0
- package/dist/components/_spacing-value/SpacingValue.js.map +1 -0
- package/dist/components/accordion/Accordion.js +1 -1
- package/dist/components/app-bar/AppBar.d.ts +7 -3
- package/dist/components/app-bar/AppBar.d.ts.map +1 -1
- package/dist/components/app-bar/AppBar.js +2 -2
- package/dist/components/app-bar/AppBar.js.map +1 -1
- package/dist/components/app-bar/index.d.ts +1 -1
- package/dist/components/app-bar/index.d.ts.map +1 -1
- package/dist/components/app-bar/index.js.map +1 -1
- package/dist/components/avatar/Avatar.d.ts +1 -1
- package/dist/components/avatar/Avatar.d.ts.map +1 -1
- package/dist/components/avatar/Avatar.js.map +1 -1
- package/dist/components/badge/Badge.d.ts +2 -2
- package/dist/components/badge/Badge.d.ts.map +1 -1
- package/dist/components/bleed/Bleed.d.ts +28 -0
- package/dist/components/bleed/Bleed.d.ts.map +1 -0
- package/dist/components/bleed/Bleed.js +92 -0
- package/dist/components/bleed/Bleed.js.map +1 -0
- package/dist/components/bleed/index.d.ts +2 -0
- package/dist/components/bleed/index.d.ts.map +1 -0
- package/dist/components/bleed/index.js +2 -0
- package/dist/components/bleed/index.js.map +1 -0
- package/dist/components/collapsible/Collapsible.d.ts +9 -3
- package/dist/components/collapsible/Collapsible.d.ts.map +1 -1
- package/dist/components/collapsible/Collapsible.js +3 -3
- package/dist/components/collapsible/Collapsible.js.map +1 -1
- package/dist/components/color-picker/ColorPicker.d.ts +42 -0
- package/dist/components/color-picker/ColorPicker.d.ts.map +1 -0
- package/dist/components/color-picker/ColorPicker.js +52 -0
- package/dist/components/color-picker/ColorPicker.js.map +1 -0
- package/dist/components/color-picker/index.d.ts +2 -0
- package/dist/components/color-picker/index.d.ts.map +1 -0
- package/dist/components/color-picker/index.js +2 -0
- package/dist/components/color-picker/index.js.map +1 -0
- package/dist/components/color-swatch/ColorSwatch.d.ts +21 -0
- package/dist/components/color-swatch/ColorSwatch.d.ts.map +1 -0
- package/dist/components/color-swatch/ColorSwatch.js +25 -0
- package/dist/components/color-swatch/ColorSwatch.js.map +1 -0
- package/dist/components/color-swatch/index.d.ts +2 -0
- package/dist/components/color-swatch/index.d.ts.map +1 -0
- package/dist/components/color-swatch/index.js +2 -0
- package/dist/components/color-swatch/index.js.map +1 -0
- package/dist/components/data-list/DataList.d.ts +48 -0
- package/dist/components/data-list/DataList.d.ts.map +1 -0
- package/dist/components/data-list/DataList.js +31 -0
- package/dist/components/data-list/DataList.js.map +1 -0
- package/dist/components/data-list/index.d.ts +2 -0
- package/dist/components/data-list/index.d.ts.map +1 -0
- package/dist/components/data-list/index.js +2 -0
- package/dist/components/data-list/index.js.map +1 -0
- package/dist/components/feed/Feed.d.ts +2 -0
- package/dist/components/feed/Feed.d.ts.map +1 -1
- package/dist/components/feed/Feed.js +2 -2
- package/dist/components/feed/Feed.js.map +1 -1
- package/dist/components/feed/index.d.ts +1 -1
- package/dist/components/feed/index.d.ts.map +1 -1
- package/dist/components/grid/Grid.d.ts +3 -1
- package/dist/components/grid/Grid.d.ts.map +1 -1
- package/dist/components/grid/Grid.js +11 -1
- package/dist/components/grid/Grid.js.map +1 -1
- package/dist/components/grid/index.d.ts +1 -1
- package/dist/components/grid/index.d.ts.map +1 -1
- package/dist/components/grid/index.js.map +1 -1
- package/dist/components/group/Group.d.ts +19 -0
- package/dist/components/group/Group.d.ts.map +1 -0
- package/dist/components/group/Group.js +23 -0
- package/dist/components/group/Group.js.map +1 -0
- package/dist/components/group/index.d.ts +2 -0
- package/dist/components/group/index.d.ts.map +1 -0
- package/dist/components/group/index.js +2 -0
- package/dist/components/group/index.js.map +1 -0
- package/dist/components/link/Link.d.ts +1 -1
- package/dist/components/link/Link.d.ts.map +1 -1
- package/dist/components/link/Link.js +1 -1
- package/dist/components/link/Link.js.map +1 -1
- package/dist/components/link-box/LinkBox.d.ts +22 -0
- package/dist/components/link-box/LinkBox.d.ts.map +1 -0
- package/dist/components/link-box/LinkBox.js +30 -0
- package/dist/components/link-box/LinkBox.js.map +1 -0
- package/dist/components/link-box/index.d.ts +2 -0
- package/dist/components/link-box/index.d.ts.map +1 -0
- package/dist/components/link-box/index.js +2 -0
- package/dist/components/link-box/index.js.map +1 -0
- package/dist/components/nav-list/NavList.d.ts +15 -2
- package/dist/components/nav-list/NavList.d.ts.map +1 -1
- package/dist/components/nav-list/NavList.js +4 -3
- package/dist/components/nav-list/NavList.js.map +1 -1
- package/dist/components/pagination/Pagination.d.ts +9 -6
- package/dist/components/pagination/Pagination.d.ts.map +1 -1
- package/dist/components/pagination/Pagination.js +2 -2
- package/dist/components/pagination/Pagination.js.map +1 -1
- package/dist/components/pagination/index.d.ts +1 -1
- package/dist/components/pagination/index.d.ts.map +1 -1
- package/dist/components/pagination/index.js.map +1 -1
- package/dist/components/popover/Popover.d.ts +3 -0
- package/dist/components/popover/Popover.d.ts.map +1 -1
- package/dist/components/popover/Popover.js +2 -2
- package/dist/components/popover/Popover.js.map +1 -1
- package/dist/components/popover/index.d.ts +1 -1
- package/dist/components/popover/index.d.ts.map +1 -1
- package/dist/components/popover/index.js.map +1 -1
- package/dist/components/rating/Rating.d.ts +37 -1
- package/dist/components/rating/Rating.d.ts.map +1 -1
- package/dist/components/rating/Rating.js +25 -2
- package/dist/components/rating/Rating.js.map +1 -1
- package/dist/components/rating/index.d.ts +1 -1
- package/dist/components/rating/index.d.ts.map +1 -1
- package/dist/components/rating/index.js +1 -1
- package/dist/components/rating/index.js.map +1 -1
- package/dist/components/reorderable-list/ReorderableList.d.ts +89 -0
- package/dist/components/reorderable-list/ReorderableList.d.ts.map +1 -0
- package/dist/components/reorderable-list/ReorderableList.js +54 -0
- package/dist/components/reorderable-list/ReorderableList.js.map +1 -0
- package/dist/components/reorderable-list/index.d.ts +2 -0
- package/dist/components/reorderable-list/index.d.ts.map +1 -0
- package/dist/components/reorderable-list/index.js +2 -0
- package/dist/components/reorderable-list/index.js.map +1 -0
- package/dist/components/segment-group/SegmentGroup.d.ts +30 -0
- package/dist/components/segment-group/SegmentGroup.d.ts.map +1 -0
- package/dist/components/segment-group/SegmentGroup.js +67 -0
- package/dist/components/segment-group/SegmentGroup.js.map +1 -0
- package/dist/components/segment-group/index.d.ts +2 -0
- package/dist/components/segment-group/index.d.ts.map +1 -0
- package/dist/components/segment-group/index.js +2 -0
- package/dist/components/segment-group/index.js.map +1 -0
- package/dist/components/show/Show.d.ts.map +1 -1
- package/dist/components/show/Show.js +7 -1
- package/dist/components/show/Show.js.map +1 -1
- package/dist/components/sidebar/Sidebar.d.ts +4 -0
- package/dist/components/sidebar/Sidebar.d.ts.map +1 -1
- package/dist/components/sidebar/Sidebar.js +3 -2
- package/dist/components/sidebar/Sidebar.js.map +1 -1
- package/dist/components/slider/Slider.d.ts.map +1 -1
- package/dist/components/slider/Slider.js +3 -1
- package/dist/components/slider/Slider.js.map +1 -1
- package/dist/components/stack/Stack.d.ts +3 -1
- package/dist/components/stack/Stack.d.ts.map +1 -1
- package/dist/components/stack/Stack.js +9 -1
- package/dist/components/stack/Stack.js.map +1 -1
- package/dist/components/stack/index.d.ts +1 -1
- package/dist/components/stack/index.d.ts.map +1 -1
- package/dist/components/stack/index.js.map +1 -1
- package/dist/components/status/Status.d.ts +22 -0
- package/dist/components/status/Status.d.ts.map +1 -0
- package/dist/components/status/Status.js +23 -0
- package/dist/components/status/Status.js.map +1 -0
- package/dist/components/status/index.d.ts +2 -0
- package/dist/components/status/index.d.ts.map +1 -0
- package/dist/components/status/index.js +2 -0
- package/dist/components/status/index.js.map +1 -0
- package/dist/components/surface/Surface.d.ts +5 -2
- package/dist/components/surface/Surface.d.ts.map +1 -1
- package/dist/components/surface/Surface.js +4 -2
- package/dist/components/surface/Surface.js.map +1 -1
- package/dist/components/surface/index.d.ts +1 -1
- package/dist/components/surface/index.d.ts.map +1 -1
- package/dist/components/surface/index.js.map +1 -1
- package/dist/components/text/Text.d.ts +25 -4
- package/dist/components/text/Text.d.ts.map +1 -1
- package/dist/components/text/Text.js +22 -3
- package/dist/components/text/Text.js.map +1 -1
- package/dist/components/text/index.d.ts +1 -1
- package/dist/components/text/index.d.ts.map +1 -1
- package/dist/components/text/index.js +1 -1
- package/dist/components/text/index.js.map +1 -1
- package/dist/components/toggle/Toggle.d.ts +5 -0
- package/dist/components/toggle/Toggle.d.ts.map +1 -1
- package/dist/components/toggle/Toggle.js +2 -2
- package/dist/components/toggle/Toggle.js.map +1 -1
- package/dist/components/toggle/index.d.ts +1 -1
- package/dist/components/toggle/index.d.ts.map +1 -1
- package/dist/components/toggle/index.js.map +1 -1
- package/dist/components/toggle-group/ToggleGroup.d.ts +3 -1
- package/dist/components/toggle-group/ToggleGroup.d.ts.map +1 -1
- package/dist/components/toggle-group/ToggleGroup.js +2 -1
- package/dist/components/toggle-group/ToggleGroup.js.map +1 -1
- package/dist/components/toolbar/Toolbar.d.ts +9 -2
- package/dist/components/toolbar/Toolbar.d.ts.map +1 -1
- package/dist/components/toolbar/Toolbar.js +2 -2
- package/dist/components/toolbar/Toolbar.js.map +1 -1
- package/dist/components/toolbar/index.d.ts +1 -1
- package/dist/components/toolbar/index.d.ts.map +1 -1
- package/dist/components/z-stack/ZStack.d.ts +7 -0
- package/dist/components/z-stack/ZStack.d.ts.map +1 -1
- package/dist/components/z-stack/ZStack.js +14 -3
- package/dist/components/z-stack/ZStack.js.map +1 -1
- package/dist/components/z-stack/index.d.ts +1 -1
- package/dist/components/z-stack/index.d.ts.map +1 -1
- package/dist/components/z-stack/index.js.map +1 -1
- package/dist/data-list.d.ts +2 -0
- package/dist/data-list.d.ts.map +1 -0
- package/dist/data-list.js +2 -0
- package/dist/data-list.js.map +1 -0
- package/dist/feed.d.ts +1 -1
- package/dist/feed.d.ts.map +1 -1
- package/dist/grid.d.ts +1 -1
- package/dist/grid.d.ts.map +1 -1
- package/dist/grid.js.map +1 -1
- package/dist/group.d.ts +2 -0
- package/dist/group.d.ts.map +1 -0
- package/dist/group.js +2 -0
- package/dist/group.js.map +1 -0
- package/dist/index.d.ts +18 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/link-box.d.ts +2 -0
- package/dist/link-box.d.ts.map +1 -0
- package/dist/link-box.js +2 -0
- package/dist/link-box.js.map +1 -0
- package/dist/reorderable-list.d.ts +2 -0
- package/dist/reorderable-list.d.ts.map +1 -0
- package/dist/reorderable-list.js +2 -0
- package/dist/reorderable-list.js.map +1 -0
- package/dist/reset.css +1 -1
- package/dist/reset.css.map +1 -1
- package/dist/segment-group.d.ts +2 -0
- package/dist/segment-group.d.ts.map +1 -0
- package/dist/segment-group.js +2 -0
- package/dist/segment-group.js.map +1 -0
- package/dist/stack.d.ts +1 -1
- package/dist/stack.d.ts.map +1 -1
- package/dist/stack.js.map +1 -1
- package/dist/status.d.ts +2 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +2 -0
- package/dist/status.js.map +1 -0
- package/dist/styles/accordion.css +1 -1
- package/dist/styles/accordion.css.map +1 -1
- package/dist/styles/alert-dialog.css +1 -1
- package/dist/styles/alert-dialog.css.map +1 -1
- package/dist/styles/app-bar.css +1 -1
- package/dist/styles/app-bar.css.map +1 -1
- package/dist/styles/appearance.css +1 -1
- package/dist/styles/appearance.css.map +1 -1
- package/dist/styles/aspect-ratio.css +1 -1
- package/dist/styles/aspect-ratio.css.map +1 -1
- package/dist/styles/avatar.css +1 -1
- package/dist/styles/avatar.css.map +1 -1
- package/dist/styles/badge.css +1 -1
- package/dist/styles/badge.css.map +1 -1
- package/dist/styles/bleed.css +2 -0
- package/dist/styles/bleed.css.map +1 -0
- package/dist/styles/bottom-navigation.css +1 -1
- package/dist/styles/bottom-navigation.css.map +1 -1
- package/dist/styles/breadcrumb.css +1 -1
- package/dist/styles/breadcrumb.css.map +1 -1
- package/dist/styles/button.css +1 -1
- package/dist/styles/button.css.map +1 -1
- package/dist/styles/card.css +1 -1
- package/dist/styles/card.css.map +1 -1
- package/dist/styles/carousel.css +1 -1
- package/dist/styles/carousel.css.map +1 -1
- package/dist/styles/checkbox-group.css +1 -1
- package/dist/styles/checkbox-group.css.map +1 -1
- package/dist/styles/checkbox.css +1 -1
- package/dist/styles/checkbox.css.map +1 -1
- package/dist/styles/chip.css +1 -1
- package/dist/styles/chip.css.map +1 -1
- package/dist/styles/code-block.css +1 -1
- package/dist/styles/code-block.css.map +1 -1
- package/dist/styles/code.css +1 -1
- package/dist/styles/code.css.map +1 -1
- package/dist/styles/collapsible.css +1 -1
- package/dist/styles/collapsible.css.map +1 -1
- package/dist/styles/color-picker.css +2 -0
- package/dist/styles/color-picker.css.map +1 -0
- package/dist/styles/color-swatch.css +2 -0
- package/dist/styles/color-swatch.css.map +1 -0
- package/dist/styles/combobox.css +1 -1
- package/dist/styles/combobox.css.map +1 -1
- package/dist/styles/container.css +1 -1
- package/dist/styles/container.css.map +1 -1
- package/dist/styles/context-menu.css +1 -1
- package/dist/styles/context-menu.css.map +1 -1
- package/dist/styles/core.css +1 -1
- package/dist/styles/core.css.map +1 -1
- package/dist/styles/data-grid.css +1 -1
- package/dist/styles/data-grid.css.map +1 -1
- package/dist/styles/data-list.css +2 -0
- package/dist/styles/data-list.css.map +1 -0
- package/dist/styles/dialog.css +1 -1
- package/dist/styles/dialog.css.map +1 -1
- package/dist/styles/divider.css +1 -1
- package/dist/styles/divider.css.map +1 -1
- package/dist/styles/drawer.css +1 -1
- package/dist/styles/drawer.css.map +1 -1
- package/dist/styles/dropdown-menu.css +1 -1
- package/dist/styles/dropdown-menu.css.map +1 -1
- package/dist/styles/feed.css +1 -1
- package/dist/styles/feed.css.map +1 -1
- package/dist/styles/field.css +1 -1
- package/dist/styles/field.css.map +1 -1
- package/dist/styles/fieldset.css +1 -1
- package/dist/styles/fieldset.css.map +1 -1
- package/dist/styles/file-upload.css +1 -1
- package/dist/styles/file-upload.css.map +1 -1
- package/dist/styles/form.css +1 -1
- package/dist/styles/form.css.map +1 -1
- package/dist/styles/frame.css +1 -1
- package/dist/styles/frame.css.map +1 -1
- package/dist/styles/grid.css +1 -1
- package/dist/styles/grid.css.map +1 -1
- package/dist/styles/group.css +2 -0
- package/dist/styles/group.css.map +1 -0
- package/dist/styles/hide.css +1 -1
- package/dist/styles/hide.css.map +1 -1
- package/dist/styles/hover-card.css +1 -1
- package/dist/styles/hover-card.css.map +1 -1
- package/dist/styles/icon-button.css +1 -1
- package/dist/styles/icon-button.css.map +1 -1
- package/dist/styles/icon.css +1 -1
- package/dist/styles/icon.css.map +1 -1
- package/dist/styles/image.css +1 -1
- package/dist/styles/image.css.map +1 -1
- package/dist/styles/input.css +1 -1
- package/dist/styles/input.css.map +1 -1
- package/dist/styles/link-box.css +2 -0
- package/dist/styles/link-box.css.map +1 -0
- package/dist/styles/link.css +1 -1
- package/dist/styles/link.css.map +1 -1
- package/dist/styles/list.css +1 -1
- package/dist/styles/list.css.map +1 -1
- package/dist/styles/menubar.css +1 -1
- package/dist/styles/menubar.css.map +1 -1
- package/dist/styles/multi-select.css +1 -1
- package/dist/styles/multi-select.css.map +1 -1
- package/dist/styles/nav-list.css +1 -1
- package/dist/styles/nav-list.css.map +1 -1
- package/dist/styles/navigation-menu.css +1 -1
- package/dist/styles/navigation-menu.css.map +1 -1
- package/dist/styles/number-input.css +1 -1
- package/dist/styles/number-input.css.map +1 -1
- package/dist/styles/otp-field.css +1 -1
- package/dist/styles/otp-field.css.map +1 -1
- package/dist/styles/pagination.css +1 -1
- package/dist/styles/pagination.css.map +1 -1
- package/dist/styles/password-toggle-field.css +1 -1
- package/dist/styles/password-toggle-field.css.map +1 -1
- package/dist/styles/popover.css +1 -1
- package/dist/styles/popover.css.map +1 -1
- package/dist/styles/progress-circle.css +1 -1
- package/dist/styles/progress-circle.css.map +1 -1
- package/dist/styles/progress.css +1 -1
- package/dist/styles/progress.css.map +1 -1
- package/dist/styles/radio-group.css +1 -1
- package/dist/styles/radio-group.css.map +1 -1
- package/dist/styles/rating.css +1 -1
- package/dist/styles/rating.css.map +1 -1
- package/dist/styles/reorderable-list.css +2 -0
- package/dist/styles/reorderable-list.css.map +1 -0
- package/dist/styles/scroll-area.css +1 -1
- package/dist/styles/scroll-area.css.map +1 -1
- package/dist/styles/section.css +1 -1
- package/dist/styles/section.css.map +1 -1
- package/dist/styles/segment-group.css +2 -0
- package/dist/styles/segment-group.css.map +1 -0
- package/dist/styles/select.css +1 -1
- package/dist/styles/select.css.map +1 -1
- package/dist/styles/show.css +1 -1
- package/dist/styles/show.css.map +1 -1
- package/dist/styles/sidebar.css +1 -1
- package/dist/styles/sidebar.css.map +1 -1
- package/dist/styles/skeleton.css +1 -1
- package/dist/styles/skeleton.css.map +1 -1
- package/dist/styles/skip-link.css +1 -1
- package/dist/styles/skip-link.css.map +1 -1
- package/dist/styles/slider.css +1 -1
- package/dist/styles/slider.css.map +1 -1
- package/dist/styles/stack.css +1 -1
- package/dist/styles/stack.css.map +1 -1
- package/dist/styles/status.css +2 -0
- package/dist/styles/status.css.map +1 -0
- package/dist/styles/surface.css +1 -1
- package/dist/styles/surface.css.map +1 -1
- package/dist/styles/swipeable-item.css +1 -1
- package/dist/styles/swipeable-item.css.map +1 -1
- package/dist/styles/switch.css +1 -1
- package/dist/styles/switch.css.map +1 -1
- package/dist/styles/table.css +1 -1
- package/dist/styles/table.css.map +1 -1
- package/dist/styles/tabs.css +1 -1
- package/dist/styles/tabs.css.map +1 -1
- package/dist/styles/text.css +1 -1
- package/dist/styles/text.css.map +1 -1
- package/dist/styles/textarea.css +1 -1
- package/dist/styles/textarea.css.map +1 -1
- package/dist/styles/toast.css +1 -1
- package/dist/styles/toast.css.map +1 -1
- package/dist/styles/toggle-group.css +1 -1
- package/dist/styles/toggle-group.css.map +1 -1
- package/dist/styles/toggle.css +1 -1
- package/dist/styles/toggle.css.map +1 -1
- package/dist/styles/toolbar.css +1 -1
- package/dist/styles/toolbar.css.map +1 -1
- package/dist/styles/tooltip.css +1 -1
- package/dist/styles/tooltip.css.map +1 -1
- package/dist/styles/tree-grid.css +1 -1
- package/dist/styles/tree-grid.css.map +1 -1
- package/dist/styles/tree.css +1 -1
- package/dist/styles/tree.css.map +1 -1
- package/dist/styles/visually-hidden.css +1 -1
- package/dist/styles/visually-hidden.css.map +1 -1
- package/dist/styles/z-stack.css +1 -1
- package/dist/styles/z-stack.css.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/styles.css.map +1 -1
- package/dist/surface.d.ts +1 -1
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js.map +1 -1
- package/dist/text.d.ts +1 -1
- package/dist/text.d.ts.map +1 -1
- package/dist/text.js +1 -1
- package/dist/text.js.map +1 -1
- package/dist/theme-contract.json +26846 -0
- package/dist/toggle.d.ts +1 -1
- package/dist/toggle.d.ts.map +1 -1
- package/dist/toggle.js.map +1 -1
- package/dist/tokens.css +1 -1
- package/dist/tokens.css.map +1 -1
- package/dist/toolbar.d.ts +1 -1
- package/dist/toolbar.d.ts.map +1 -1
- package/docs/guides/agent-knowledge.md +19 -0
- package/docs/guides/appearance-and-tokens.md +16 -5
- package/docs/guides/browser-support.md +21 -0
- package/docs/guides/control-sizing.md +55 -0
- package/docs/guides/installation.md +5 -2
- package/docs/guides/theme-contract.md +86 -0
- package/package.json +51 -7
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "flowstack.agent-component.v1",
|
|
3
|
+
"id": "multi-select",
|
|
4
|
+
"name": "MultiSelect",
|
|
5
|
+
"package": "@flowstack-ui/brick",
|
|
6
|
+
"layer": "brick",
|
|
7
|
+
"kind": "component",
|
|
8
|
+
"purpose": "Present several selected predefined values in a compact finished control while Atom owns array state, popup listbox focus, persistent toggling, positioning, validation, and native multiple-select submission.",
|
|
9
|
+
"useWhen": [
|
|
10
|
+
"A person chooses zero or more values from a predefined moderate collection that should remain collapsed until requested."
|
|
11
|
+
],
|
|
12
|
+
"avoidWhen": [
|
|
13
|
+
{
|
|
14
|
+
"condition": "A short choice set should stay visible, only one value is allowed, or editable filtering, arbitrary tags, creation, range selection, or virtualization is required.",
|
|
15
|
+
"useInstead": "CheckboxGroup, Select, Combobox, or a documented Brick gap or higher-layer specialized control"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"composition": [
|
|
19
|
+
"Compose MultiSelect.Root with a named button Trigger containing Value and optional Icon, then exactly one Content or Listbox with stable uniquely valued Items and ItemText. Add Portal, Viewport, groups and labels, separators, scroll buttons, indicators, and a direct Arrow only as required.",
|
|
20
|
+
"Use sm, md, or lg consistently with adjacent button-like controls. Keep selected values, persistence, remote data, and application effects at the application boundary."
|
|
21
|
+
],
|
|
22
|
+
"rules": [
|
|
23
|
+
{
|
|
24
|
+
"id": "multi-select-predefined-values",
|
|
25
|
+
"level": "must",
|
|
26
|
+
"statement": "Use MultiSelect only for several predefined values; do not add editable filtering, arbitrary tags, commands, destinations, range selection, or virtualization."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "multi-select-semantics",
|
|
30
|
+
"level": "must",
|
|
31
|
+
"statement": "Keep Trigger a separately named button rather than role=combobox and keep Content or Listbox as the focusable aria-multiselectable owner of required and read-only semantics."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "multi-select-array-state",
|
|
35
|
+
"level": "must",
|
|
36
|
+
"statement": "Use deduplicated arrays for value and defaultValue, route controlled changes through onValueChange, and keep the popup open while Items toggle."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "multi-select-item-text",
|
|
40
|
+
"level": "must",
|
|
41
|
+
"statement": "Give every Item a stable unique value and ItemText or label so summaries, option names, typeahead, and native options remain complete while the popup is closed."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "multi-select-keyboard-form",
|
|
45
|
+
"level": "must",
|
|
46
|
+
"statement": "Preserve popup focus, Arrow/Home/End, typeahead, Space/Enter toggling without close, Escape focus restoration, Tab dismissal, disabled skipping, native repeated-value submission, required validity, external form, and reset."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "multi-select-responsive",
|
|
50
|
+
"level": "must",
|
|
51
|
+
"statement": "Keep Trigger, summaries, and collision-aware popup contained under long localization, narrow widths, zoom, and RTL; do not place removal buttons inside the v1 button Trigger."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "multi-select-css",
|
|
55
|
+
"level": "must",
|
|
56
|
+
"statement": "Load styles.css or core.css plus multi-select.css and Field CSS when composed."
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"commonMistakes": [
|
|
60
|
+
{
|
|
61
|
+
"mistake": "Giving Trigger combobox semantics, using selected summary as its name, closing after each toggle, or deriving native options only from an open popup.",
|
|
62
|
+
"correction": "Preserve the named button/listbox model, persistent toggling, static Item registration, and complete native option contract."
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"mistake": "Adding text entry, arbitrary tag creation, interactive descendants, or application persistence inside the component.",
|
|
66
|
+
"correction": "Keep predefined noninteractive Items and choose an approved editable higher-layer pattern or record the missing Brick capability."
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"validation": [
|
|
70
|
+
"Verify Trigger and listbox names, controlled and uncontrolled arrays and open state, deduplication, zero/one/many summaries and renderValue, popup focus, Arrow/Home/End, typeahead, Space/Enter without close, disabled Items, Escape, Tab, outside activation, and focus restoration.",
|
|
71
|
+
"Verify read-only on the listbox, Field relationships, hidden multiple-select options and repeated submission, required inline/native validation, external form, reset, groups, indicators, Viewport, scroll buttons, Portal, direction, collision placement, and nested modal behavior.",
|
|
72
|
+
"Verify all sizes, long summaries and option labels, narrow widths, zoom, RTL, touch targets, light and dark appearance, forced colors, and button-like control alignment."
|
|
73
|
+
],
|
|
74
|
+
"related": [
|
|
75
|
+
{
|
|
76
|
+
"kind": "package",
|
|
77
|
+
"package": "@flowstack-ui/atom",
|
|
78
|
+
"id": "multi-select",
|
|
79
|
+
"versionPolicy": "installed-exact"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"kind": "package",
|
|
83
|
+
"package": "@flowstack-ui/atom",
|
|
84
|
+
"id": "listbox",
|
|
85
|
+
"versionPolicy": "installed-exact"
|
|
86
|
+
},
|
|
87
|
+
"field",
|
|
88
|
+
"form",
|
|
89
|
+
"select",
|
|
90
|
+
"combobox",
|
|
91
|
+
"checkbox-group"
|
|
92
|
+
]
|
|
93
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# MultiSelect agent guide
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Present several selected predefined values in a compact finished control while Atom owns array state, popup listbox focus, persistent toggling, positioning, validation, and native multiple-select submission.
|
|
6
|
+
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
- A person chooses zero or more values from a predefined moderate collection that should remain collapsed until requested.
|
|
10
|
+
|
|
11
|
+
## Choose something else when
|
|
12
|
+
|
|
13
|
+
- A short choice set should stay visible, only one value is allowed, or editable filtering, arbitrary tags, creation, range selection, or virtualization is required. Use CheckboxGroup, Select, Combobox, or a documented Brick gap or higher-layer specialized control.
|
|
14
|
+
|
|
15
|
+
## Required composition
|
|
16
|
+
|
|
17
|
+
- Compose MultiSelect.Root with a named button Trigger containing Value and optional Icon, then exactly one Content or Listbox with stable uniquely valued Items and ItemText. Add Portal, Viewport, groups and labels, separators, scroll buttons, indicators, and a direct Arrow only as required.
|
|
18
|
+
- Use sm, md, or lg consistently with adjacent button-like controls. Keep selected values, persistence, remote data, and application effects at the application boundary.
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
|
|
22
|
+
- **MUST:** Use MultiSelect only for several predefined values; do not add editable filtering, arbitrary tags, commands, destinations, range selection, or virtualization.
|
|
23
|
+
- **MUST:** Keep Trigger a separately named button rather than role=combobox and keep Content or Listbox as the focusable aria-multiselectable owner of required and read-only semantics.
|
|
24
|
+
- **MUST:** Use deduplicated arrays for value and defaultValue, route controlled changes through onValueChange, and keep the popup open while Items toggle.
|
|
25
|
+
- **MUST:** Give every Item a stable unique value and ItemText or label so summaries, option names, typeahead, and native options remain complete while the popup is closed.
|
|
26
|
+
- **MUST:** Preserve popup focus, Arrow/Home/End, typeahead, Space/Enter toggling without close, Escape focus restoration, Tab dismissal, disabled skipping, native repeated-value submission, required validity, external form, and reset.
|
|
27
|
+
- **MUST:** Keep Trigger, summaries, and collision-aware popup contained under long localization, narrow widths, zoom, and RTL; do not place removal buttons inside the v1 button Trigger.
|
|
28
|
+
- **MUST:** Load styles.css or core.css plus multi-select.css and Field CSS when composed.
|
|
29
|
+
|
|
30
|
+
## Common mistakes
|
|
31
|
+
|
|
32
|
+
- **Avoid:** Giving Trigger combobox semantics, using selected summary as its name, closing after each toggle, or deriving native options only from an open popup. **Instead:** Preserve the named button/listbox model, persistent toggling, static Item registration, and complete native option contract.
|
|
33
|
+
- **Avoid:** Adding text entry, arbitrary tag creation, interactive descendants, or application persistence inside the component. **Instead:** Keep predefined noninteractive Items and choose an approved editable higher-layer pattern or record the missing Brick capability.
|
|
34
|
+
|
|
35
|
+
## Validation checklist
|
|
36
|
+
|
|
37
|
+
- Verify Trigger and listbox names, controlled and uncontrolled arrays and open state, deduplication, zero/one/many summaries and renderValue, popup focus, Arrow/Home/End, typeahead, Space/Enter without close, disabled Items, Escape, Tab, outside activation, and focus restoration.
|
|
38
|
+
- Verify read-only on the listbox, Field relationships, hidden multiple-select options and repeated submission, required inline/native validation, external form, reset, groups, indicators, Viewport, scroll buttons, Portal, direction, collision placement, and nested modal behavior.
|
|
39
|
+
- Verify all sizes, long summaries and option labels, narrow widths, zoom, RTL, touch targets, light and dark appearance, forced colors, and button-like control alignment.
|
|
40
|
+
|
|
41
|
+
## Related guidance
|
|
42
|
+
|
|
43
|
+
- `@flowstack-ui/atom/agents/multi-select`
|
|
44
|
+
- `@flowstack-ui/atom/agents/listbox`
|
|
45
|
+
- `field`
|
|
46
|
+
- `form`
|
|
47
|
+
- `select`
|
|
48
|
+
- `combobox`
|
|
49
|
+
- `checkbox-group`
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
}
|
|
17
17
|
],
|
|
18
18
|
"composition": [
|
|
19
|
-
"Compose Root > List > Item > Link; use SectionLabel for static groups and add SectionTrigger plus SectionContent only for real collapsible groups. When repeated rows need Dividers, each Item owns its complete row or collapsible Section before the following boundary."
|
|
19
|
+
"Compose Root > List > Item > Link; use SectionLabel for static groups and add SectionTrigger plus SectionContent only for real collapsible groups. Pass decorative artwork directly to Link or SectionTrigger startIcon so NavList owns its size and alignment. When repeated rows need Dividers, each Item owns its complete row or collapsible Section before the following boundary."
|
|
20
20
|
],
|
|
21
21
|
"rules": [
|
|
22
22
|
{
|
|
@@ -29,6 +29,16 @@
|
|
|
29
29
|
"level": "must",
|
|
30
30
|
"statement": "Use NavList's section and item anatomy rather than rebuilding rows, badges, icons, and collapse behavior with arbitrary divs."
|
|
31
31
|
},
|
|
32
|
+
{
|
|
33
|
+
"id": "nav-list-icons",
|
|
34
|
+
"level": "must",
|
|
35
|
+
"statement": "Pass decorative artwork directly to Link or SectionTrigger startIcon; those parts own the wrapper, size, and first-label-line alignment. Do not compensate with consumer margins or transforms."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "nav-list-meaningful-content",
|
|
39
|
+
"level": "must",
|
|
40
|
+
"statement": "Keep decorative artwork in startIcon/endIcon; when a count or Badge is meaningful content, compose it with the label inside one Brick HStack within Link so the complete row remains one destination."
|
|
41
|
+
},
|
|
32
42
|
{
|
|
33
43
|
"id": "nav-list-group-boundary",
|
|
34
44
|
"level": "must",
|
|
@@ -37,7 +47,7 @@
|
|
|
37
47
|
{
|
|
38
48
|
"id": "nav-list-shell-alignment",
|
|
39
49
|
"level": "must",
|
|
40
|
-
"statement": "
|
|
50
|
+
"statement": "Let SectionLabel use NavList's size-aware typography and logical leading-column alignment; use the logical row-padding tokens only when navigation rows need independent alignment with a surrounding shell, and do not shift indicators with margins or transforms."
|
|
41
51
|
},
|
|
42
52
|
{
|
|
43
53
|
"id": "nav-list-css",
|
|
@@ -47,12 +57,12 @@
|
|
|
47
57
|
],
|
|
48
58
|
"commonMistakes": [
|
|
49
59
|
{
|
|
50
|
-
"mistake": "Using buttons for routes, adding a collapsible trigger that controls no content, placing a Divider between a trigger and
|
|
51
|
-
"correction": "Use Link for destinations,
|
|
60
|
+
"mistake": "Using buttons for routes, wrapping decorative artwork in a second Icon size owner, placing meaningful metadata in aria-hidden icon slots, adding a collapsible trigger that controls no content, placing a Divider between a trigger and the SectionContent that trigger controls, or moving disclosure indicators with positional CSS.",
|
|
61
|
+
"correction": "Use Link for destinations, pass raw decorative artwork to startIcon, compose meaningful row content inside Link, keep a collapsible Section intact before its boundary, and let SectionLabel own group-title alignment."
|
|
52
62
|
}
|
|
53
63
|
],
|
|
54
64
|
"validation": [
|
|
55
|
-
"Check current, hover, focus, collapsed, expanded, complete-group divider placement, long labels, icons, counts, zoom, narrow widths, and RTL.",
|
|
65
|
+
"Check current, hover, focus, collapsed, expanded, disclosure motion, section-label alignment, complete-group divider placement, long labels, icons, counts, zoom, narrow widths, and RTL.",
|
|
56
66
|
"Confirm links and section relationships remain semantic and CSS is loaded."
|
|
57
67
|
],
|
|
58
68
|
"related": [
|
package/dist/agents/nav-list.md
CHANGED
|
@@ -14,23 +14,25 @@ Style persistent route navigation with current state, optional section labels, a
|
|
|
14
14
|
|
|
15
15
|
## Required composition
|
|
16
16
|
|
|
17
|
-
- Compose Root > List > Item > Link; use SectionLabel for static groups and add SectionTrigger plus SectionContent only for real collapsible groups. When repeated rows need Dividers, each Item owns its complete row or collapsible Section before the following boundary.
|
|
17
|
+
- Compose Root > List > Item > Link; use SectionLabel for static groups and add SectionTrigger plus SectionContent only for real collapsible groups. Pass decorative artwork directly to Link or SectionTrigger startIcon so NavList owns its size and alignment. When repeated rows need Dividers, each Item owns its complete row or collapsible Section before the following boundary.
|
|
18
18
|
|
|
19
19
|
## Rules
|
|
20
20
|
|
|
21
21
|
- **MUST:** Set current destination state from the route and keep route items as links.
|
|
22
22
|
- **MUST:** Use NavList's section and item anatomy rather than rebuilding rows, badges, icons, and collapse behavior with arbitrary divs.
|
|
23
|
+
- **MUST:** Pass decorative artwork directly to Link or SectionTrigger startIcon; those parts own the wrapper, size, and first-label-line alignment. Do not compensate with consumer margins or transforms.
|
|
24
|
+
- **MUST:** Keep decorative artwork in startIcon/endIcon; when a count or Badge is meaningful content, compose it with the label inside one Brick HStack within Link so the complete row remains one destination.
|
|
23
25
|
- **MUST:** Place a Divider after the complete navigation item or collapsible section it separates; never place it between a SectionTrigger and the SectionContent that trigger controls, and keep repeated boundaries under one consistent layout owner.
|
|
24
|
-
- **MUST:**
|
|
26
|
+
- **MUST:** Let SectionLabel use NavList's size-aware typography and logical leading-column alignment; use the logical row-padding tokens only when navigation rows need independent alignment with a surrounding shell, and do not shift indicators with margins or transforms.
|
|
25
27
|
- **MUST:** Load styles.css or core.css plus nav-list.css.
|
|
26
28
|
|
|
27
29
|
## Common mistakes
|
|
28
30
|
|
|
29
|
-
- **Avoid:** Using buttons for routes, adding a collapsible trigger that controls no content, placing a Divider between a trigger and
|
|
31
|
+
- **Avoid:** Using buttons for routes, wrapping decorative artwork in a second Icon size owner, placing meaningful metadata in aria-hidden icon slots, adding a collapsible trigger that controls no content, placing a Divider between a trigger and the SectionContent that trigger controls, or moving disclosure indicators with positional CSS. **Instead:** Use Link for destinations, pass raw decorative artwork to startIcon, compose meaningful row content inside Link, keep a collapsible Section intact before its boundary, and let SectionLabel own group-title alignment.
|
|
30
32
|
|
|
31
33
|
## Validation checklist
|
|
32
34
|
|
|
33
|
-
- Check current, hover, focus, collapsed, expanded, complete-group divider placement, long labels, icons, counts, zoom, narrow widths, and RTL.
|
|
35
|
+
- Check current, hover, focus, collapsed, expanded, disclosure motion, section-label alignment, complete-group divider placement, long labels, icons, counts, zoom, narrow widths, and RTL.
|
|
34
36
|
- Confirm links and section relationships remain semantic and CSS is loaded.
|
|
35
37
|
|
|
36
38
|
## Related guidance
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "flowstack.agent-component.v1",
|
|
3
|
+
"id": "notification-badge",
|
|
4
|
+
"name": "NotificationBadge",
|
|
5
|
+
"package": "@flowstack-ui/brick",
|
|
6
|
+
"layer": "brick",
|
|
7
|
+
"kind": "component",
|
|
8
|
+
"purpose": "Overlay a Brick-owned visual count or dot on exactly one element while Atom Badge supplies only the passive span host and the child or nearby content owns all accessible notification meaning.",
|
|
9
|
+
"useWhen": [
|
|
10
|
+
"One icon, Avatar, Button, or other single element needs compact visual notification metadata whose full meaning is present in the owning control name or nearby text."
|
|
11
|
+
],
|
|
12
|
+
"avoidWhen": [
|
|
13
|
+
{
|
|
14
|
+
"condition": "The content is an inline label or status, must announce automatically, performs an action itself, or the count would be the only accessible notification meaning.",
|
|
15
|
+
"useInstead": "Badge, Status, a deliberately chosen live-region pattern, Button, or visible Text"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"composition": [
|
|
19
|
+
"Wrap exactly one React element in NotificationBadge and choose either count mode or dot mode, then choose tone, size, logical placement, and overlap for the child's shape. Include count or status meaning in the child control's accessible name or nearby visible status text.",
|
|
20
|
+
"Use count with a finite non-negative integer and deliberate max/showZero policy, or dot=true without count-only props. Keep child sizing, clipping, responsive placement, live announcements, and state effects outside NotificationBadge."
|
|
21
|
+
],
|
|
22
|
+
"rules": [
|
|
23
|
+
{
|
|
24
|
+
"id": "notification-badge-one-child",
|
|
25
|
+
"level": "must",
|
|
26
|
+
"statement": "Wrap exactly one React element and keep NotificationBadge passive; the child retains its own element, interaction, focus, semantics, and accessible name."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "notification-badge-brick-owner",
|
|
30
|
+
"level": "must",
|
|
31
|
+
"statement": "Treat the visual indicator, count normalization, maximum formatting, visibility, logical placement, overlap, and overlay geometry as Brick-owned; Atom Badge supplies only a passive span root, not notification behavior."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "notification-badge-mode",
|
|
35
|
+
"level": "must",
|
|
36
|
+
"statement": "Choose either dot mode or count mode; use only finite non-negative integer counts, understand invalid max falls back to 99, and use showZero deliberately because zero otherwise hides."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "notification-badge-accessible-context",
|
|
40
|
+
"level": "must",
|
|
41
|
+
"statement": "Keep the private indicator aria-hidden and include meaningful count or status in the owning control's accessible name/description or nearby visible text because an overlaid sibling is not incorporated automatically."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "notification-badge-live-boundary",
|
|
45
|
+
"level": "must",
|
|
46
|
+
"statement": "Do not assume changing count announces or add live semantics to the private indicator; use one deliberate application-owned live path only when urgency and frequency justify it."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "notification-badge-responsive",
|
|
50
|
+
"level": "must",
|
|
51
|
+
"statement": "Choose circular or rectangular overlap from the child geometry, preserve logical placement in RTL, and verify child clipping, focus rings, count growth, zoom, and responsive size without using physical offsets."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "notification-badge-css",
|
|
55
|
+
"level": "must",
|
|
56
|
+
"statement": "Load styles.css or core.css plus badge.css and the stylesheet for the wrapped Brick child."
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"commonMistakes": [
|
|
60
|
+
{
|
|
61
|
+
"mistake": "Using the visual count as the only name, expecting it to announce, making the wrapper interactive, or passing count and dot together.",
|
|
62
|
+
"correction": "Name the owning control or provide visible text, keep announcements application-owned, leave interaction on the child, and choose one visual mode."
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"mistake": "Using physical placement for RTL, circular overlap on a rectangular child by habit, or allowing the child to clip the indicator or focus ring.",
|
|
66
|
+
"correction": "Choose logical placement and overlap from actual geometry and verify the complete composed boundary at responsive sizes."
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"validation": [
|
|
70
|
+
"Verify one child; count and dot modes; valid, zero, invalid, and above-max counts; fallback max; showZero; invisible; all tones/sizes/placements/overlaps; root ref; native span props; and absence of unsupported asChild.",
|
|
71
|
+
"Verify indicator is aria-hidden, child semantics and focus remain intact, count meaning appears exactly once in the owning name/description or visible text, updates do not announce implicitly, and any application live path is not duplicated.",
|
|
72
|
+
"Verify single-digit circles and multi-digit pills, logical RTL placement, rectangular/circular overlap, child clipping, focus visibility, narrow layout, zoom, light/dark appearance, forced colors, and wrapped Avatar/Button/Icon geometry."
|
|
73
|
+
],
|
|
74
|
+
"related": [
|
|
75
|
+
{
|
|
76
|
+
"kind": "package",
|
|
77
|
+
"package": "@flowstack-ui/atom",
|
|
78
|
+
"id": "badge",
|
|
79
|
+
"versionPolicy": "installed-exact"
|
|
80
|
+
},
|
|
81
|
+
"badge",
|
|
82
|
+
"avatar",
|
|
83
|
+
"button",
|
|
84
|
+
"icon-button",
|
|
85
|
+
"status",
|
|
86
|
+
"text"
|
|
87
|
+
]
|
|
88
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# NotificationBadge agent guide
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Overlay a Brick-owned visual count or dot on exactly one element while Atom Badge supplies only the passive span host and the child or nearby content owns all accessible notification meaning.
|
|
6
|
+
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
- One icon, Avatar, Button, or other single element needs compact visual notification metadata whose full meaning is present in the owning control name or nearby text.
|
|
10
|
+
|
|
11
|
+
## Choose something else when
|
|
12
|
+
|
|
13
|
+
- The content is an inline label or status, must announce automatically, performs an action itself, or the count would be the only accessible notification meaning. Use Badge, Status, a deliberately chosen live-region pattern, Button, or visible Text.
|
|
14
|
+
|
|
15
|
+
## Required composition
|
|
16
|
+
|
|
17
|
+
- Wrap exactly one React element in NotificationBadge and choose either count mode or dot mode, then choose tone, size, logical placement, and overlap for the child's shape. Include count or status meaning in the child control's accessible name or nearby visible status text.
|
|
18
|
+
- Use count with a finite non-negative integer and deliberate max/showZero policy, or dot=true without count-only props. Keep child sizing, clipping, responsive placement, live announcements, and state effects outside NotificationBadge.
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
|
|
22
|
+
- **MUST:** Wrap exactly one React element and keep NotificationBadge passive; the child retains its own element, interaction, focus, semantics, and accessible name.
|
|
23
|
+
- **MUST:** Treat the visual indicator, count normalization, maximum formatting, visibility, logical placement, overlap, and overlay geometry as Brick-owned; Atom Badge supplies only a passive span root, not notification behavior.
|
|
24
|
+
- **MUST:** Choose either dot mode or count mode; use only finite non-negative integer counts, understand invalid max falls back to 99, and use showZero deliberately because zero otherwise hides.
|
|
25
|
+
- **MUST:** Keep the private indicator aria-hidden and include meaningful count or status in the owning control's accessible name/description or nearby visible text because an overlaid sibling is not incorporated automatically.
|
|
26
|
+
- **MUST:** Do not assume changing count announces or add live semantics to the private indicator; use one deliberate application-owned live path only when urgency and frequency justify it.
|
|
27
|
+
- **MUST:** Choose circular or rectangular overlap from the child geometry, preserve logical placement in RTL, and verify child clipping, focus rings, count growth, zoom, and responsive size without using physical offsets.
|
|
28
|
+
- **MUST:** Load styles.css or core.css plus badge.css and the stylesheet for the wrapped Brick child.
|
|
29
|
+
|
|
30
|
+
## Common mistakes
|
|
31
|
+
|
|
32
|
+
- **Avoid:** Using the visual count as the only name, expecting it to announce, making the wrapper interactive, or passing count and dot together. **Instead:** Name the owning control or provide visible text, keep announcements application-owned, leave interaction on the child, and choose one visual mode.
|
|
33
|
+
- **Avoid:** Using physical placement for RTL, circular overlap on a rectangular child by habit, or allowing the child to clip the indicator or focus ring. **Instead:** Choose logical placement and overlap from actual geometry and verify the complete composed boundary at responsive sizes.
|
|
34
|
+
|
|
35
|
+
## Validation checklist
|
|
36
|
+
|
|
37
|
+
- Verify one child; count and dot modes; valid, zero, invalid, and above-max counts; fallback max; showZero; invisible; all tones/sizes/placements/overlaps; root ref; native span props; and absence of unsupported asChild.
|
|
38
|
+
- Verify indicator is aria-hidden, child semantics and focus remain intact, count meaning appears exactly once in the owning name/description or visible text, updates do not announce implicitly, and any application live path is not duplicated.
|
|
39
|
+
- Verify single-digit circles and multi-digit pills, logical RTL placement, rectangular/circular overlap, child clipping, focus visibility, narrow layout, zoom, light/dark appearance, forced colors, and wrapped Avatar/Button/Icon geometry.
|
|
40
|
+
|
|
41
|
+
## Related guidance
|
|
42
|
+
|
|
43
|
+
- `@flowstack-ui/atom/agents/badge`
|
|
44
|
+
- `badge`
|
|
45
|
+
- `avatar`
|
|
46
|
+
- `button`
|
|
47
|
+
- `icon-button`
|
|
48
|
+
- `status`
|
|
49
|
+
- `text`
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "flowstack.agent-component.v1",
|
|
3
|
+
"id": "number-input",
|
|
4
|
+
"name": "NumberInput",
|
|
5
|
+
"package": "@flowstack-ui/brick",
|
|
6
|
+
"layer": "brick",
|
|
7
|
+
"kind": "component",
|
|
8
|
+
"purpose": "Present finished exact numeric entry with typing and step actions while Atom owns parsing, formatting, limits, spinbutton keyboard behavior, validation, and numeric form submission.",
|
|
9
|
+
"useWhen": [
|
|
10
|
+
"A value is genuinely numeric and a person should type an exact value or adjust it in known increments."
|
|
11
|
+
],
|
|
12
|
+
"avoidWhen": [
|
|
13
|
+
{
|
|
14
|
+
"condition": "Digits identify something, adjustment by feel is primary, a small fixed set is valid, or the value is read-only completion.",
|
|
15
|
+
"useInstead": "Input, Slider, Select or RadioGroup, or Progress"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"composition": [
|
|
19
|
+
"Compose a visibly labelled Field with NumberInput.Root containing exactly one NumberInput.Input plus optional NumberInput.Increment and NumberInput.Decrement. Name both step actions because their default artwork is decorative.",
|
|
20
|
+
"Choose outline, soft, or underline plus sm, md, or lg and an allowed shape on Root. Keep formatter and parser reversible, use number or null controlled state, and keep units and application quantity policy outside the component."
|
|
21
|
+
],
|
|
22
|
+
"rules": [
|
|
23
|
+
{
|
|
24
|
+
"id": "number-input-numeric-domain",
|
|
25
|
+
"level": "must",
|
|
26
|
+
"statement": "Use NumberInput only for values that can be meaningfully stepped and clamped; postal codes, phone numbers, account numbers, and similar identifiers remain Input values."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "number-input-one-input",
|
|
30
|
+
"level": "must",
|
|
31
|
+
"statement": "Render exactly one NumberInput.Input inside Root and keep Increment and Decrement inside that same Root so Atom retains numeric state, focus, limits, and aria-controls ownership."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "number-input-state-format",
|
|
35
|
+
"level": "must",
|
|
36
|
+
"statement": "Use number or null with value and onValueChange for controlled state, preserve intermediate editing, keep formatter and parser reversible, choose positive step and suitable precision, and decide clampOnBlur deliberately."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "number-input-accessibility",
|
|
40
|
+
"level": "must",
|
|
41
|
+
"statement": "Give Input a visible Field label or equivalent accessible name and give Increment and Decrement localized action names while preserving spinbutton ARIA, Arrow/Page/Home/End keys, native validity, and pointer focus retention."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "number-input-form",
|
|
45
|
+
"level": "must",
|
|
46
|
+
"statement": "Keep the visible Input as validity owner and Root's named parsed value as the submission contract, including external form association, Field reporting, reset, disabled, read-only, required, and invalid state."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "number-input-responsive",
|
|
50
|
+
"level": "must",
|
|
51
|
+
"statement": "Keep the shrinkable input and fixed logical-end action column contained at narrow widths and in RTL; preserve coarse-pointer step targets and do not use viewport width as a touch proxy."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "number-input-css",
|
|
55
|
+
"level": "must",
|
|
56
|
+
"statement": "Load styles.css or core.css plus number-input.css and Field CSS when composed."
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"commonMistakes": [
|
|
60
|
+
{
|
|
61
|
+
"mistake": "Using NumberInput for digit-like identifiers, rendering more than one Input, formatting without a matching parser, or submitting display text as the numeric value.",
|
|
62
|
+
"correction": "Choose Input for identifiers, keep one compound Input, make parsing and formatting symmetric, and preserve Atom's parsed form contract."
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"mistake": "Leaving decorative step buttons unnamed or adding unit selection and business limits inside the component.",
|
|
66
|
+
"correction": "Name both actions and keep units, inventory rules, calculations, and other application policy at the application boundary."
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"validation": [
|
|
70
|
+
"Verify controlled number and null state, uncontrolled default, intermediate typing, parsing, formatting, precision, min/max, clampOnBlur, step and largeStep, Arrow/Page/Home/End, empty state, boundary action state, and pointer/touch focus preservation.",
|
|
71
|
+
"Verify visible naming, localized step-action names, required and numeric native validity, Field reporting, named parsed submission, external form, reset, disabled/read-only behavior, refs, native props, and custom action children.",
|
|
72
|
+
"Verify outline, soft, and underline recipes; all sizes and allowed shapes; full-width and intrinsic layouts; narrow width, coarse pointer, RTL, zoom, forced colors, light and dark appearance, focus, invalid, and disabled paint."
|
|
73
|
+
],
|
|
74
|
+
"related": [
|
|
75
|
+
{
|
|
76
|
+
"kind": "package",
|
|
77
|
+
"package": "@flowstack-ui/atom",
|
|
78
|
+
"id": "number-input",
|
|
79
|
+
"versionPolicy": "installed-exact"
|
|
80
|
+
},
|
|
81
|
+
"input",
|
|
82
|
+
"slider",
|
|
83
|
+
"progress",
|
|
84
|
+
"select",
|
|
85
|
+
"radio-group",
|
|
86
|
+
"field",
|
|
87
|
+
"form"
|
|
88
|
+
]
|
|
89
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# NumberInput agent guide
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Present finished exact numeric entry with typing and step actions while Atom owns parsing, formatting, limits, spinbutton keyboard behavior, validation, and numeric form submission.
|
|
6
|
+
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
- A value is genuinely numeric and a person should type an exact value or adjust it in known increments.
|
|
10
|
+
|
|
11
|
+
## Choose something else when
|
|
12
|
+
|
|
13
|
+
- Digits identify something, adjustment by feel is primary, a small fixed set is valid, or the value is read-only completion. Use Input, Slider, Select or RadioGroup, or Progress.
|
|
14
|
+
|
|
15
|
+
## Required composition
|
|
16
|
+
|
|
17
|
+
- Compose a visibly labelled Field with NumberInput.Root containing exactly one NumberInput.Input plus optional NumberInput.Increment and NumberInput.Decrement. Name both step actions because their default artwork is decorative.
|
|
18
|
+
- Choose outline, soft, or underline plus sm, md, or lg and an allowed shape on Root. Keep formatter and parser reversible, use number or null controlled state, and keep units and application quantity policy outside the component.
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
|
|
22
|
+
- **MUST:** Use NumberInput only for values that can be meaningfully stepped and clamped; postal codes, phone numbers, account numbers, and similar identifiers remain Input values.
|
|
23
|
+
- **MUST:** Render exactly one NumberInput.Input inside Root and keep Increment and Decrement inside that same Root so Atom retains numeric state, focus, limits, and aria-controls ownership.
|
|
24
|
+
- **MUST:** Use number or null with value and onValueChange for controlled state, preserve intermediate editing, keep formatter and parser reversible, choose positive step and suitable precision, and decide clampOnBlur deliberately.
|
|
25
|
+
- **MUST:** Give Input a visible Field label or equivalent accessible name and give Increment and Decrement localized action names while preserving spinbutton ARIA, Arrow/Page/Home/End keys, native validity, and pointer focus retention.
|
|
26
|
+
- **MUST:** Keep the visible Input as validity owner and Root's named parsed value as the submission contract, including external form association, Field reporting, reset, disabled, read-only, required, and invalid state.
|
|
27
|
+
- **MUST:** Keep the shrinkable input and fixed logical-end action column contained at narrow widths and in RTL; preserve coarse-pointer step targets and do not use viewport width as a touch proxy.
|
|
28
|
+
- **MUST:** Load styles.css or core.css plus number-input.css and Field CSS when composed.
|
|
29
|
+
|
|
30
|
+
## Common mistakes
|
|
31
|
+
|
|
32
|
+
- **Avoid:** Using NumberInput for digit-like identifiers, rendering more than one Input, formatting without a matching parser, or submitting display text as the numeric value. **Instead:** Choose Input for identifiers, keep one compound Input, make parsing and formatting symmetric, and preserve Atom's parsed form contract.
|
|
33
|
+
- **Avoid:** Leaving decorative step buttons unnamed or adding unit selection and business limits inside the component. **Instead:** Name both actions and keep units, inventory rules, calculations, and other application policy at the application boundary.
|
|
34
|
+
|
|
35
|
+
## Validation checklist
|
|
36
|
+
|
|
37
|
+
- Verify controlled number and null state, uncontrolled default, intermediate typing, parsing, formatting, precision, min/max, clampOnBlur, step and largeStep, Arrow/Page/Home/End, empty state, boundary action state, and pointer/touch focus preservation.
|
|
38
|
+
- Verify visible naming, localized step-action names, required and numeric native validity, Field reporting, named parsed submission, external form, reset, disabled/read-only behavior, refs, native props, and custom action children.
|
|
39
|
+
- Verify outline, soft, and underline recipes; all sizes and allowed shapes; full-width and intrinsic layouts; narrow width, coarse pointer, RTL, zoom, forced colors, light and dark appearance, focus, invalid, and disabled paint.
|
|
40
|
+
|
|
41
|
+
## Related guidance
|
|
42
|
+
|
|
43
|
+
- `@flowstack-ui/atom/agents/number-input`
|
|
44
|
+
- `input`
|
|
45
|
+
- `slider`
|
|
46
|
+
- `progress`
|
|
47
|
+
- `select`
|
|
48
|
+
- `radio-group`
|
|
49
|
+
- `field`
|
|
50
|
+
- `form`
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "flowstack.agent-component.v1",
|
|
3
|
+
"id": "otp-field",
|
|
4
|
+
"name": "OTPField",
|
|
5
|
+
"package": "@flowstack-ui/brick",
|
|
6
|
+
"layer": "brick",
|
|
7
|
+
"kind": "component",
|
|
8
|
+
"purpose": "Present one short verification, recovery, or pairing code as finished segmented entry while Atom owns filtering, paste distribution, roving focus, completion, validation, reset, and combined-value submission.",
|
|
9
|
+
"useWhen": [
|
|
10
|
+
"A person enters or pastes a short one-time code supplied through another channel into visually separated cells."
|
|
11
|
+
],
|
|
12
|
+
"avoidWhen": [
|
|
13
|
+
{
|
|
14
|
+
"condition": "The value is a reusable password, permanent PIN, numeric quantity, arbitrary identifier, or ordinary variable-length text.",
|
|
15
|
+
"useInstead": "PasswordToggleField, NumberInput, or Input according to the actual entry job"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"composition": [
|
|
19
|
+
"Compose one visibly labelled Field with OTPField.Root, then render exactly one OTPField.Input for each normalized length position in stable logical source order. Add aria-hidden Separator only for deliberate visual grouping; layout wrappers may group cells without creating separate values.",
|
|
20
|
+
"Give Root one accessible group name, character type, length, and submission name. Localize getInputLabel for every position and treat autoSubmit and autoFocus as explicit application workflow decisions."
|
|
21
|
+
],
|
|
22
|
+
"rules": [
|
|
23
|
+
{
|
|
24
|
+
"id": "otp-field-one-value",
|
|
25
|
+
"level": "must",
|
|
26
|
+
"statement": "Treat all cells as one logical code, match visible Input count and order to Root length, and never create independent application state, validation, or submission names for each cell."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "otp-field-filter",
|
|
30
|
+
"level": "must",
|
|
31
|
+
"statement": "Choose numeric, alphabetic, alphanumeric, or a safe custom pattern that accepts exactly the intended characters and preserve the same filtering for typing and paste."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "otp-field-labels",
|
|
35
|
+
"level": "must",
|
|
36
|
+
"statement": "Name Root through Field or native ARIA, localize every generated position label, keep Separator decorative, and do not add unsupported aria-required to role=group."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "otp-field-focus-input",
|
|
40
|
+
"level": "must",
|
|
41
|
+
"statement": "Preserve one roving Tab stop, render-order registration, replacement and advance, Arrow/Home/End, Backspace/Delete, complete-code paste, disabled/read-only state, and logical source order in RTL."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "otp-field-completion",
|
|
45
|
+
"level": "must",
|
|
46
|
+
"statement": "Enable autoSubmit only when a complete accepted code should intentionally submit the associated form, with application-owned pending, verification, error, retry, and focus recovery behavior; choose autoFocus just as deliberately."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "otp-field-form",
|
|
50
|
+
"level": "must",
|
|
51
|
+
"statement": "Keep required validity on the first visible cell and Root's named combined value submission-only, including Field invalid mirroring, external form association, and uncontrolled reset."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "otp-field-css",
|
|
55
|
+
"level": "must",
|
|
56
|
+
"statement": "Load styles.css or core.css plus otp-field.css and Field CSS when composed."
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"commonMistakes": [
|
|
60
|
+
{
|
|
61
|
+
"mistake": "Building unrelated character inputs, rendering a different cell count than length, blocking paste, reversing cells in RTL, leaving generated labels unlocalized, or auto-submitting by habit.",
|
|
62
|
+
"correction": "Use one named OTPField value, align cells to length and logical order, preserve Atom entry behavior, localize labels, and make submission an explicit application decision."
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"mistake": "Putting code delivery, expiry, resend, attempt limits, rate limiting, or verification inside the component.",
|
|
66
|
+
"correction": "Keep security and workflow policy in the application or service and let OTPField report value and completion only."
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"validation": [
|
|
70
|
+
"Verify controlled and uncontrolled full value, length, render-order and explicit indices, all filters, typing replacement, accepted paste distribution, Backspace/Delete, Arrow/Home/End, one roving Tab stop, deliberate autoFocus, mask display, disabled/read-only behavior, and localized cell labels.",
|
|
71
|
+
"Verify onComplete timing, intentional autoSubmit, Root and Field naming/descriptions, required validity on the first cell, invalid state across cells, inline/native validation focus, combined named value, external form, reset, separators, native props, render composition, and refs.",
|
|
72
|
+
"Verify deliberate wrapping and grouping, 320 CSS pixels, 200% text, 400% zoom, RTL logical order, touch targets, long localized labels, focus visibility, forced colors, and every supported appearance."
|
|
73
|
+
],
|
|
74
|
+
"related": [
|
|
75
|
+
{
|
|
76
|
+
"kind": "package",
|
|
77
|
+
"package": "@flowstack-ui/atom",
|
|
78
|
+
"id": "otp-field",
|
|
79
|
+
"versionPolicy": "installed-exact"
|
|
80
|
+
},
|
|
81
|
+
"password-toggle-field",
|
|
82
|
+
"number-input",
|
|
83
|
+
"input",
|
|
84
|
+
"field",
|
|
85
|
+
"form"
|
|
86
|
+
]
|
|
87
|
+
}
|