@flowstack-ui/brick 0.1.9 → 0.1.12
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 +9 -6
- package/dist/agents/accordion.json +8 -2
- package/dist/agents/accordion.md +3 -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/blockquote.json +68 -0
- package/dist/agents/blockquote.md +42 -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 +92 -0
- package/dist/agents/code-block.md +52 -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 +25591 -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/em.json +57 -0
- package/dist/agents/em.md +39 -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/highlight.json +73 -0
- package/dist/agents/highlight.md +43 -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 +224 -18
- package/dist/agents/interface-composition.md +10 -0
- package/dist/agents/kbd.json +62 -0
- package/dist/agents/kbd.md +40 -0
- package/dist/agents/layer-selection.json +1294 -11
- package/dist/agents/layer-selection.md +94 -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 +327 -2
- package/dist/agents/mark.json +56 -0
- package/dist/agents/mark.md +38 -0
- 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/prose.json +82 -0
- package/dist/agents/prose.md +50 -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 +32 -3
- package/dist/agents/surface.md +9 -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/blockquote.d.ts +2 -0
- package/dist/blockquote.d.ts.map +1 -0
- package/dist/blockquote.js +2 -0
- package/dist/blockquote.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/blockquote/Blockquote.d.ts +33 -0
- package/dist/components/blockquote/Blockquote.d.ts.map +1 -0
- package/dist/components/blockquote/Blockquote.js +36 -0
- package/dist/components/blockquote/Blockquote.js.map +1 -0
- package/dist/components/blockquote/index.d.ts +2 -0
- package/dist/components/blockquote/index.d.ts.map +1 -0
- package/dist/components/blockquote/index.js +2 -0
- package/dist/components/blockquote/index.js.map +1 -0
- package/dist/components/code-block/CodeBlock.d.ts +33 -0
- package/dist/components/code-block/CodeBlock.d.ts.map +1 -1
- package/dist/components/code-block/CodeBlock.js +60 -6
- package/dist/components/code-block/CodeBlock.js.map +1 -1
- package/dist/components/code-block/context.d.ts +2 -0
- package/dist/components/code-block/context.d.ts.map +1 -1
- package/dist/components/code-block/context.js.map +1 -1
- package/dist/components/code-block/index.d.ts +1 -1
- package/dist/components/code-block/index.d.ts.map +1 -1
- package/dist/components/code-block/index.js +1 -1
- package/dist/components/code-block/index.js.map +1 -1
- 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/em/Em.d.ts +9 -0
- package/dist/components/em/Em.d.ts.map +1 -0
- package/dist/components/em/Em.js +10 -0
- package/dist/components/em/Em.js.map +1 -0
- package/dist/components/em/index.d.ts +2 -0
- package/dist/components/em/index.d.ts.map +1 -0
- package/dist/components/em/index.js +2 -0
- package/dist/components/em/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/highlight/Highlight.d.ts +9 -0
- package/dist/components/highlight/Highlight.d.ts.map +1 -0
- package/dist/components/highlight/Highlight.js +10 -0
- package/dist/components/highlight/Highlight.js.map +1 -0
- package/dist/components/highlight/index.d.ts +2 -0
- package/dist/components/highlight/index.d.ts.map +1 -0
- package/dist/components/highlight/index.js +2 -0
- package/dist/components/highlight/index.js.map +1 -0
- package/dist/components/kbd/Kbd.d.ts +13 -0
- package/dist/components/kbd/Kbd.d.ts.map +1 -0
- package/dist/components/kbd/Kbd.js +8 -0
- package/dist/components/kbd/Kbd.js.map +1 -0
- package/dist/components/kbd/index.d.ts +2 -0
- package/dist/components/kbd/index.d.ts.map +1 -0
- package/dist/components/kbd/index.js +2 -0
- package/dist/components/kbd/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/mark/Mark.d.ts +13 -0
- package/dist/components/mark/Mark.d.ts.map +1 -0
- package/dist/components/mark/Mark.js +8 -0
- package/dist/components/mark/Mark.js.map +1 -0
- package/dist/components/mark/index.d.ts +2 -0
- package/dist/components/mark/index.d.ts.map +1 -0
- package/dist/components/mark/index.js +2 -0
- package/dist/components/mark/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/prose/Prose.d.ts +12 -0
- package/dist/components/prose/Prose.d.ts.map +1 -0
- package/dist/components/prose/Prose.js +19 -0
- package/dist/components/prose/Prose.js.map +1 -0
- package/dist/components/prose/index.d.ts +2 -0
- package/dist/components/prose/index.d.ts.map +1 -0
- package/dist/components/prose/index.js +2 -0
- package/dist/components/prose/index.js.map +1 -0
- 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/em.d.ts +2 -0
- package/dist/em.d.ts.map +1 -0
- package/dist/em.js +2 -0
- package/dist/em.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/highlight.d.ts +2 -0
- package/dist/highlight.d.ts.map +1 -0
- package/dist/highlight.js +2 -0
- package/dist/highlight.js.map +1 -0
- package/dist/index.d.ts +25 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -2
- package/dist/index.js.map +1 -1
- package/dist/kbd.d.ts +2 -0
- package/dist/kbd.d.ts.map +1 -0
- package/dist/kbd.js +2 -0
- package/dist/kbd.js.map +1 -0
- 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/mark.d.ts +2 -0
- package/dist/mark.d.ts.map +1 -0
- package/dist/mark.js +2 -0
- package/dist/mark.js.map +1 -0
- package/dist/prose.d.ts +2 -0
- package/dist/prose.d.ts.map +1 -0
- package/dist/prose.js +2 -0
- package/dist/prose.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/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/blockquote.css +2 -0
- package/dist/styles/blockquote.css.map +1 -0
- package/dist/styles/bottom-navigation.css +1 -1
- package/dist/styles/bottom-navigation.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/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/code-block.css +1 -1
- package/dist/styles/code-block.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/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/em.css +2 -0
- package/dist/styles/em.css.map +1 -0
- package/dist/styles/feed.css +1 -1
- package/dist/styles/feed.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/highlight.css +2 -0
- package/dist/styles/highlight.css.map +1 -0
- package/dist/styles/icon-button.css +1 -1
- package/dist/styles/icon-button.css.map +1 -1
- package/dist/styles/input.css +1 -1
- package/dist/styles/input.css.map +1 -1
- package/dist/styles/kbd.css +2 -0
- package/dist/styles/kbd.css.map +1 -0
- 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/mark.css +2 -0
- package/dist/styles/mark.css.map +1 -0
- 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/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/prose.css +2 -0
- package/dist/styles/prose.css.map +1 -0
- 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/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/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/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/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/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 +10519 -6018
- 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 +5 -0
- 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 +26 -12
- package/package.json +79 -7
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Menubar agent guide
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Present a finished persistent application command strip with coordinated top-level menus while Atom owns menubar semantics, roving focus, adjacent-menu handoff, and shared Menu behavior.
|
|
6
|
+
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
- A desktop-like application has several persistent command categories such as File, Edit, and View that must behave as one keyboard menubar.
|
|
10
|
+
|
|
11
|
+
## Choose something else when
|
|
12
|
+
|
|
13
|
+
- There is one temporary command menu, ordinary website navigation, a route list, or a toolbar of immediately executable controls. Use DropdownMenu, NavigationMenu or NavList, or Toolbar.
|
|
14
|
+
- The application needs responsive mobile replacement or overflow orchestration. Use An application-owned composition using DropdownMenu, Drawer, or another appropriate command surface.
|
|
15
|
+
|
|
16
|
+
## Required composition
|
|
17
|
+
|
|
18
|
+
- Give Menubar.Root an accessible name and compose one or more uniquely valued Menubar.Menu scopes, each containing Menubar.Trigger and portalled Menubar.Content. Build Content from the shared command, selection, grouping, separator, static row, and paired submenu anatomy.
|
|
19
|
+
- Root owns sm, md, or lg density and horizontal or vertical orientation; Content and SubContent inherit that density. Reproduce any local Appearance scope on each portalled visual root.
|
|
20
|
+
|
|
21
|
+
## Rules
|
|
22
|
+
|
|
23
|
+
- **MUST:** Use Menubar only for persistent application command categories, not website navigation, page tabs, route-current state, or a responsive application shell.
|
|
24
|
+
- **MUST:** Give the role=menubar Root an accessible name and keep every top-level Trigger as its role=menuitem child with one Atom-owned roving tab stop.
|
|
25
|
+
- **MUST:** Give every top-level Menu a unique value and keep its Trigger and Content within that Menu scope so controlled value and adjacent-menu handoff remain deterministic.
|
|
26
|
+
- **MUST:** Match orientation to the visible Root arrangement and preserve direction-aware Arrow movement, Home/End, first and last item opening, adjacent handoff, and nested submenu keys in LTR and RTL.
|
|
27
|
+
- **MUST:** Preserve uniquely valued item roles, real focus, typeahead, disabled navigation, checkbox and radio state, closeOnSelect, paired submenus, whole-root Tab exit, Escape restoration, and parent-modal ownership.
|
|
28
|
+
- **MUST:** Use Leading, ItemLabel, Description, Shortcut, ItemIndicator, and tone=danger for their documented jobs; shortcuts are visual hints and Menubar does not register global commands.
|
|
29
|
+
- **MUST:** Do not automatically wrap, collapse, or change Menubar semantics at a breakpoint; applications own an explicit scrolling region or a separately selected mobile command surface.
|
|
30
|
+
- **MUST:** When Content leaves a local Appearance scope through Portal, reproduce that scope on the portalled visual root or target a container inside it.
|
|
31
|
+
- **MUST:** Load styles.css or core.css plus menubar.css and every composed child component stylesheet.
|
|
32
|
+
|
|
33
|
+
## Common mistakes
|
|
34
|
+
|
|
35
|
+
- **Avoid:** Using Menubar as styled website navigation, omitting Root's name, duplicating top-level values, or implementing each heading as an independent dropdown. **Instead:** Use Menubar only for application commands and preserve its named, uniquely valued, orientation-aware top-level ownership.
|
|
36
|
+
- **Avoid:** Hiding or collapsing the command strip at a Brick breakpoint or treating Shortcut text as registered keyboard behavior. **Instead:** Let the application select a responsive alternative and keep shortcut execution in application code.
|
|
37
|
+
|
|
38
|
+
## Validation checklist
|
|
39
|
+
|
|
40
|
+
- Verify Root naming and orientation, unique Menu values, one top-level tab stop, Home/End, horizontal and vertical Arrow movement, LTR and RTL, pointer and touch opening, keyboard first and last opening, hover switching, controlled active value, disabled triggers, and adjacent-menu focus ownership.
|
|
41
|
+
- Verify shared item focus and typeahead, checkbox mixed and radio state, submenus, selection close policy, whole-root Tab exit, top-layer Escape, focus return, portals, parent-modal ownership, and asChild or render composition.
|
|
42
|
+
- Verify three densities, persistent Root and open-trigger paint, constrained popup scrolling, danger meaning, narrow overflow policy, zoom, long localization, reduced motion, forced colors, portalled appearance, and complete CSS.
|
|
43
|
+
|
|
44
|
+
## Related guidance
|
|
45
|
+
|
|
46
|
+
- `@flowstack-ui/atom/agents/menubar`
|
|
47
|
+
- `@flowstack-ui/atom/agents/menu`
|
|
48
|
+
- `dropdown-menu`
|
|
49
|
+
- `context-menu`
|
|
50
|
+
- `navigation-menu`
|
|
51
|
+
- `nav-list`
|
|
52
|
+
- `toolbar`
|
|
53
|
+
- `drawer`
|
|
54
|
+
- `appearance`
|
|
@@ -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`
|