@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,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "flowstack.agent-component.v1",
|
|
3
|
+
"id": "feed",
|
|
4
|
+
"name": "Feed",
|
|
5
|
+
"package": "@flowstack-ui/brick",
|
|
6
|
+
"layer": "brick",
|
|
7
|
+
"kind": "component",
|
|
8
|
+
"purpose": "Present a styled dynamic stream of rich focusable articles while Atom owns feed semantics, busy state, positions, and keyboard movement.",
|
|
9
|
+
"useWhen": [
|
|
10
|
+
"Activity, news, social posts, or rich notifications may change while a person reads and article-by-article keyboard movement is useful."
|
|
11
|
+
],
|
|
12
|
+
"avoidWhen": [
|
|
13
|
+
{
|
|
14
|
+
"condition": "The sequence is static or has tabular, hierarchical, or purely visual relationships.",
|
|
15
|
+
"useInstead": "List, Table/DataGrid, Tree, or Stack/Grid according to the relationship"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"composition": [
|
|
19
|
+
"Compose direct Feed.Item articles inside one named Feed.Root; give every Item a useful heading or other accessible name, accurate position metadata, and item-local actions that do not turn the article into one whole-row control.",
|
|
20
|
+
"Compose ScrollArea outside Root only when a Frame or another parent supplies a definite bounded size.",
|
|
21
|
+
"Use dividerStrength=default only when a compact utility feed needs clearer row separation; preserve the subtle default for ordinary continuous reading."
|
|
22
|
+
],
|
|
23
|
+
"rules": [
|
|
24
|
+
{
|
|
25
|
+
"id": "feed-dynamic-owner",
|
|
26
|
+
"level": "must",
|
|
27
|
+
"statement": "Use Feed only for a dynamic rich article stream where feed semantics and article keyboard movement improve the experience."
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "feed-direct-items",
|
|
31
|
+
"level": "must",
|
|
32
|
+
"statement": "Keep Feed.Item articles as direct Root children with useful accessible names and accurate positions and totals."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "feed-busy",
|
|
36
|
+
"level": "must",
|
|
37
|
+
"statement": "Set busy only while adding or replacing Feed DOM; do not make a passive feed a live region or treat busy paint as an announcement."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "feed-actions",
|
|
41
|
+
"level": "must",
|
|
42
|
+
"statement": "Keep links, buttons, and menus as independently named descendants; do not make the entire Feed Item a hover or activation target."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "feed-scroll",
|
|
46
|
+
"level": "must",
|
|
47
|
+
"statement": "When the stream is bounded, let Frame own the definite size and ScrollArea own overflow outside Feed.Root."
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "feed-virtualization",
|
|
51
|
+
"level": "must",
|
|
52
|
+
"statement": "When an application windows articles, preserve stable identities and full logical positions, keep the focused and next keyboard target articles mounted or materialize them before focus moves, and remember that geometry utilities do not own feed loading or semantics."
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "feed-css",
|
|
56
|
+
"level": "must",
|
|
57
|
+
"statement": "Load styles.css or core.css plus feed.css and every composed child stylesheet."
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
"commonMistakes": [
|
|
61
|
+
{
|
|
62
|
+
"mistake": "Using Feed for any repeated row, putting non-article children directly in Root, or adding aria-live to a passive notification tray.",
|
|
63
|
+
"correction": "Choose Feed only for a dynamic article stream, keep direct Item anatomy, and reserve live announcements for application-owned asynchronous feedback."
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"validation": [
|
|
67
|
+
"Check Root naming, Item headings, direct article children, positions and totals, busy state, PageUp/PageDown, Control/Command+Home/End, nested control focus, and scroll reveal.",
|
|
68
|
+
"Check divided, plain, and outline boundaries at narrow widths, zoom, RTL, forced colors, reduced motion, and light/dark appearance.",
|
|
69
|
+
"For paged or windowed feeds, verify stable keys and full logical metadata and ensure the focused and next PageUp/PageDown target articles exist before focus moves."
|
|
70
|
+
],
|
|
71
|
+
"related": [
|
|
72
|
+
{
|
|
73
|
+
"kind": "package",
|
|
74
|
+
"package": "@flowstack-ui/atom",
|
|
75
|
+
"id": "feed",
|
|
76
|
+
"versionPolicy": "installed-exact"
|
|
77
|
+
},
|
|
78
|
+
"list",
|
|
79
|
+
"scroll-area",
|
|
80
|
+
"frame",
|
|
81
|
+
"button",
|
|
82
|
+
"dropdown-menu"
|
|
83
|
+
]
|
|
84
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Feed agent guide
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Present a styled dynamic stream of rich focusable articles while Atom owns feed semantics, busy state, positions, and keyboard movement.
|
|
6
|
+
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
- Activity, news, social posts, or rich notifications may change while a person reads and article-by-article keyboard movement is useful.
|
|
10
|
+
|
|
11
|
+
## Choose something else when
|
|
12
|
+
|
|
13
|
+
- The sequence is static or has tabular, hierarchical, or purely visual relationships. Use List, Table/DataGrid, Tree, or Stack/Grid according to the relationship.
|
|
14
|
+
|
|
15
|
+
## Required composition
|
|
16
|
+
|
|
17
|
+
- Compose direct Feed.Item articles inside one named Feed.Root; give every Item a useful heading or other accessible name, accurate position metadata, and item-local actions that do not turn the article into one whole-row control.
|
|
18
|
+
- Compose ScrollArea outside Root only when a Frame or another parent supplies a definite bounded size.
|
|
19
|
+
- Use dividerStrength=default only when a compact utility feed needs clearer row separation; preserve the subtle default for ordinary continuous reading.
|
|
20
|
+
|
|
21
|
+
## Rules
|
|
22
|
+
|
|
23
|
+
- **MUST:** Use Feed only for a dynamic rich article stream where feed semantics and article keyboard movement improve the experience.
|
|
24
|
+
- **MUST:** Keep Feed.Item articles as direct Root children with useful accessible names and accurate positions and totals.
|
|
25
|
+
- **MUST:** Set busy only while adding or replacing Feed DOM; do not make a passive feed a live region or treat busy paint as an announcement.
|
|
26
|
+
- **MUST:** Keep links, buttons, and menus as independently named descendants; do not make the entire Feed Item a hover or activation target.
|
|
27
|
+
- **MUST:** When the stream is bounded, let Frame own the definite size and ScrollArea own overflow outside Feed.Root.
|
|
28
|
+
- **MUST:** When an application windows articles, preserve stable identities and full logical positions, keep the focused and next keyboard target articles mounted or materialize them before focus moves, and remember that geometry utilities do not own feed loading or semantics.
|
|
29
|
+
- **MUST:** Load styles.css or core.css plus feed.css and every composed child stylesheet.
|
|
30
|
+
|
|
31
|
+
## Common mistakes
|
|
32
|
+
|
|
33
|
+
- **Avoid:** Using Feed for any repeated row, putting non-article children directly in Root, or adding aria-live to a passive notification tray. **Instead:** Choose Feed only for a dynamic article stream, keep direct Item anatomy, and reserve live announcements for application-owned asynchronous feedback.
|
|
34
|
+
|
|
35
|
+
## Validation checklist
|
|
36
|
+
|
|
37
|
+
- Check Root naming, Item headings, direct article children, positions and totals, busy state, PageUp/PageDown, Control/Command+Home/End, nested control focus, and scroll reveal.
|
|
38
|
+
- Check divided, plain, and outline boundaries at narrow widths, zoom, RTL, forced colors, reduced motion, and light/dark appearance.
|
|
39
|
+
- For paged or windowed feeds, verify stable keys and full logical metadata and ensure the focused and next PageUp/PageDown target articles exist before focus moves.
|
|
40
|
+
|
|
41
|
+
## Related guidance
|
|
42
|
+
|
|
43
|
+
- `@flowstack-ui/atom/agents/feed`
|
|
44
|
+
- `list`
|
|
45
|
+
- `scroll-area`
|
|
46
|
+
- `frame`
|
|
47
|
+
- `button`
|
|
48
|
+
- `dropdown-menu`
|
package/dist/agents/field.json
CHANGED
|
@@ -47,7 +47,12 @@
|
|
|
47
47
|
"Check vertical and horizontal layouts at narrow widths."
|
|
48
48
|
],
|
|
49
49
|
"related": [
|
|
50
|
-
|
|
50
|
+
{
|
|
51
|
+
"kind": "package",
|
|
52
|
+
"package": "@flowstack-ui/atom",
|
|
53
|
+
"id": "field",
|
|
54
|
+
"versionPolicy": "installed-exact"
|
|
55
|
+
},
|
|
51
56
|
"form",
|
|
52
57
|
"fieldset",
|
|
53
58
|
"input",
|
|
@@ -41,7 +41,12 @@
|
|
|
41
41
|
"Check group messaging, state propagation, spacing, and responsive layout."
|
|
42
42
|
],
|
|
43
43
|
"related": [
|
|
44
|
-
|
|
44
|
+
{
|
|
45
|
+
"kind": "package",
|
|
46
|
+
"package": "@flowstack-ui/atom",
|
|
47
|
+
"id": "fieldset",
|
|
48
|
+
"versionPolicy": "installed-exact"
|
|
49
|
+
},
|
|
45
50
|
"form",
|
|
46
51
|
"field",
|
|
47
52
|
"checkbox"
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "flowstack.agent-component.v1",
|
|
3
|
+
"id": "file-upload",
|
|
4
|
+
"name": "FileUpload",
|
|
5
|
+
"package": "@flowstack-ui/brick",
|
|
6
|
+
"layer": "brick",
|
|
7
|
+
"kind": "component",
|
|
8
|
+
"purpose": "Present a finished local-file picker, optional drop target, and removable selected-file list while Atom owns native picking, file state, client acceptance, Field validation, reset, and multipart form participation.",
|
|
9
|
+
"useWhen": [
|
|
10
|
+
"A form needs one or more local files selected through the native picker, optional drag and drop, review, removal, or visible client-side rejection feedback before application processing."
|
|
11
|
+
],
|
|
12
|
+
"avoidWhen": [
|
|
13
|
+
{
|
|
14
|
+
"condition": "A native file input is sufficient, the value is a textual path or URL, the asset is already remote, or the job is transfer progress, retry, persistence, preview editing, or server policy.",
|
|
15
|
+
"useInstead": "a native input type=file, Input, Progress, Toast, Image, or an application-owned upload workflow"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"composition": [
|
|
19
|
+
"Compose one Field with FileUpload.Root, exactly one HiddenInput, and an accessible Trigger. Add Dropzone only as an enhancement; use ItemGroup with one Item per accepted file and optional ItemName, ItemSize, and file-specific ItemDeleteTrigger.",
|
|
20
|
+
"State both browse and drop paths plus material constraints in visible copy. Use Root's outline or soft recipe, size, shape, and width while keeping upload transport, progress, rejection copy, and server policy outside FileUpload."
|
|
21
|
+
],
|
|
22
|
+
"rules": [
|
|
23
|
+
{
|
|
24
|
+
"id": "file-upload-native-input",
|
|
25
|
+
"level": "must",
|
|
26
|
+
"statement": "Render exactly one HiddenInput whenever picker, Trigger, required validity, name, form, accept, or multiple semantics are needed and keep it aligned with the visible control."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "file-upload-access-path",
|
|
30
|
+
"level": "must",
|
|
31
|
+
"statement": "Always provide a visible accessible Trigger for keyboard, touch, and pointer selection; Dropzone alone is not an equivalent picker, and Trigger already owns its button recipe rather than nesting Button."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "file-upload-validation",
|
|
35
|
+
"level": "must",
|
|
36
|
+
"statement": "Use accept, maxFiles, maxSize, and validateFile only for immediate client feedback, show authored localized rejection reasons, and validate type, size, content, authorization, and storage policy again on the server."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "file-upload-state",
|
|
40
|
+
"level": "must",
|
|
41
|
+
"statement": "Use files with onFilesChange or defaultFiles, choose appendFiles deliberately for multiple selection, and distinguish rejected candidates from the validity of the currently selected files."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "file-upload-drop-form",
|
|
45
|
+
"level": "must",
|
|
46
|
+
"statement": "Preserve file-only drag state, nested drag handling, document-drop protection, disabled/read-only behavior, native FileList synchronization, required focus, Field relationships, external form, same-file reselection after deletion, and uncontrolled reset."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "file-upload-items",
|
|
50
|
+
"level": "must",
|
|
51
|
+
"statement": "Keep ItemGroup and Item native list semantics, preserve each complete filename despite visual truncation, give every removal action a file-specific name, and do not nest Brick List or IconButton into the owning parts."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "file-upload-responsive",
|
|
55
|
+
"level": "must",
|
|
56
|
+
"statement": "Keep drop copy and selected-file metadata contained under long filenames, localization, narrow widths, zoom, and RTL while retaining visible focus, non-color accept/reject cues, and effective action targets."
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "file-upload-css",
|
|
60
|
+
"level": "must",
|
|
61
|
+
"statement": "Load styles.css or core.css plus file-upload.css and Field CSS when composed."
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"commonMistakes": [
|
|
65
|
+
{
|
|
66
|
+
"mistake": "Using Dropzone as the only picker, treating accept as security, hiding rejection reasons, wrapping Trigger in Button, or forgetting same-file reselection after removal.",
|
|
67
|
+
"correction": "Include HiddenInput and Trigger, validate again on the server, present rejection feedback, preserve the owning interactive parts, and let Atom synchronize native selection."
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"mistake": "Turning local file selection into an upload transport with progress, retry, preview lifecycle, storage, or malware claims.",
|
|
71
|
+
"correction": "Keep FileUpload responsible for local selection and compose application-owned transfer status and durable results beside it."
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"validation": [
|
|
75
|
+
"Verify picker opening by pointer, touch, Enter, and Space; controlled/uncontrolled files; single replacement and multiple append/replace policy; accept rules; maximum count and size; custom rejection; visible rejection feedback; disabled/read-only state; and same-file reselection.",
|
|
76
|
+
"Verify accepted/rejected and nested drag behavior, non-file drags, document-drop protection, HiddenInput name/form/required/multiple/FileList behavior, Field labels/errors, inline/native focus, reset, ItemGroup metadata, delete labels, native props, refs, and composition.",
|
|
77
|
+
"Verify both recipes, all sizes/shapes/widths, long filenames and localized copy, narrow width, zoom, RTL, touch targets, light/dark appearance, forced colors, focus, invalid, disabled, read-only, accept, and reject paint."
|
|
78
|
+
],
|
|
79
|
+
"related": [
|
|
80
|
+
{
|
|
81
|
+
"kind": "package",
|
|
82
|
+
"package": "@flowstack-ui/atom",
|
|
83
|
+
"id": "file-upload",
|
|
84
|
+
"versionPolicy": "installed-exact"
|
|
85
|
+
},
|
|
86
|
+
"input",
|
|
87
|
+
"field",
|
|
88
|
+
"form",
|
|
89
|
+
"progress",
|
|
90
|
+
"toast",
|
|
91
|
+
"image"
|
|
92
|
+
]
|
|
93
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# FileUpload agent guide
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Present a finished local-file picker, optional drop target, and removable selected-file list while Atom owns native picking, file state, client acceptance, Field validation, reset, and multipart form participation.
|
|
6
|
+
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
- A form needs one or more local files selected through the native picker, optional drag and drop, review, removal, or visible client-side rejection feedback before application processing.
|
|
10
|
+
|
|
11
|
+
## Choose something else when
|
|
12
|
+
|
|
13
|
+
- A native file input is sufficient, the value is a textual path or URL, the asset is already remote, or the job is transfer progress, retry, persistence, preview editing, or server policy. Use a native input type=file, Input, Progress, Toast, Image, or an application-owned upload workflow.
|
|
14
|
+
|
|
15
|
+
## Required composition
|
|
16
|
+
|
|
17
|
+
- Compose one Field with FileUpload.Root, exactly one HiddenInput, and an accessible Trigger. Add Dropzone only as an enhancement; use ItemGroup with one Item per accepted file and optional ItemName, ItemSize, and file-specific ItemDeleteTrigger.
|
|
18
|
+
- State both browse and drop paths plus material constraints in visible copy. Use Root's outline or soft recipe, size, shape, and width while keeping upload transport, progress, rejection copy, and server policy outside FileUpload.
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
|
|
22
|
+
- **MUST:** Render exactly one HiddenInput whenever picker, Trigger, required validity, name, form, accept, or multiple semantics are needed and keep it aligned with the visible control.
|
|
23
|
+
- **MUST:** Always provide a visible accessible Trigger for keyboard, touch, and pointer selection; Dropzone alone is not an equivalent picker, and Trigger already owns its button recipe rather than nesting Button.
|
|
24
|
+
- **MUST:** Use accept, maxFiles, maxSize, and validateFile only for immediate client feedback, show authored localized rejection reasons, and validate type, size, content, authorization, and storage policy again on the server.
|
|
25
|
+
- **MUST:** Use files with onFilesChange or defaultFiles, choose appendFiles deliberately for multiple selection, and distinguish rejected candidates from the validity of the currently selected files.
|
|
26
|
+
- **MUST:** Preserve file-only drag state, nested drag handling, document-drop protection, disabled/read-only behavior, native FileList synchronization, required focus, Field relationships, external form, same-file reselection after deletion, and uncontrolled reset.
|
|
27
|
+
- **MUST:** Keep ItemGroup and Item native list semantics, preserve each complete filename despite visual truncation, give every removal action a file-specific name, and do not nest Brick List or IconButton into the owning parts.
|
|
28
|
+
- **MUST:** Keep drop copy and selected-file metadata contained under long filenames, localization, narrow widths, zoom, and RTL while retaining visible focus, non-color accept/reject cues, and effective action targets.
|
|
29
|
+
- **MUST:** Load styles.css or core.css plus file-upload.css and Field CSS when composed.
|
|
30
|
+
|
|
31
|
+
## Common mistakes
|
|
32
|
+
|
|
33
|
+
- **Avoid:** Using Dropzone as the only picker, treating accept as security, hiding rejection reasons, wrapping Trigger in Button, or forgetting same-file reselection after removal. **Instead:** Include HiddenInput and Trigger, validate again on the server, present rejection feedback, preserve the owning interactive parts, and let Atom synchronize native selection.
|
|
34
|
+
- **Avoid:** Turning local file selection into an upload transport with progress, retry, preview lifecycle, storage, or malware claims. **Instead:** Keep FileUpload responsible for local selection and compose application-owned transfer status and durable results beside it.
|
|
35
|
+
|
|
36
|
+
## Validation checklist
|
|
37
|
+
|
|
38
|
+
- Verify picker opening by pointer, touch, Enter, and Space; controlled/uncontrolled files; single replacement and multiple append/replace policy; accept rules; maximum count and size; custom rejection; visible rejection feedback; disabled/read-only state; and same-file reselection.
|
|
39
|
+
- Verify accepted/rejected and nested drag behavior, non-file drags, document-drop protection, HiddenInput name/form/required/multiple/FileList behavior, Field labels/errors, inline/native focus, reset, ItemGroup metadata, delete labels, native props, refs, and composition.
|
|
40
|
+
- Verify both recipes, all sizes/shapes/widths, long filenames and localized copy, narrow width, zoom, RTL, touch targets, light/dark appearance, forced colors, focus, invalid, disabled, read-only, accept, and reject paint.
|
|
41
|
+
|
|
42
|
+
## Related guidance
|
|
43
|
+
|
|
44
|
+
- `@flowstack-ui/atom/agents/file-upload`
|
|
45
|
+
- `input`
|
|
46
|
+
- `field`
|
|
47
|
+
- `form`
|
|
48
|
+
- `progress`
|
|
49
|
+
- `toast`
|
|
50
|
+
- `image`
|
package/dist/agents/form.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
}
|
|
17
17
|
],
|
|
18
18
|
"composition": [
|
|
19
|
-
"Compose Form ->
|
|
19
|
+
"Compose Form -> Field for each independently labelled control -> a named submit Button; add Fieldset only when multiple controls answer one meaningful group question."
|
|
20
20
|
],
|
|
21
21
|
"rules": [
|
|
22
22
|
{
|
|
@@ -34,6 +34,10 @@
|
|
|
34
34
|
{
|
|
35
35
|
"mistake": "Treating Form as a complete login or contact workflow.",
|
|
36
36
|
"correction": "Keep business workflow in the application or a future Block; Form owns the generic visual boundary."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"mistake": "Wrapping the entire form in Fieldset only to obtain spacing, then repeating the page heading as its legend.",
|
|
40
|
+
"correction": "Let Form own ordinary field rhythm and reserve Fieldset for a real labelled subgroup."
|
|
37
41
|
}
|
|
38
42
|
],
|
|
39
43
|
"validation": [
|
|
@@ -41,7 +45,12 @@
|
|
|
41
45
|
"Inspect submitted values, invalid relationships, spacing, and narrow-layout behavior."
|
|
42
46
|
],
|
|
43
47
|
"related": [
|
|
44
|
-
|
|
48
|
+
{
|
|
49
|
+
"kind": "package",
|
|
50
|
+
"package": "@flowstack-ui/atom",
|
|
51
|
+
"id": "form",
|
|
52
|
+
"versionPolicy": "installed-exact"
|
|
53
|
+
},
|
|
45
54
|
"field",
|
|
46
55
|
"fieldset",
|
|
47
56
|
"button"
|
package/dist/agents/form.md
CHANGED
|
@@ -14,7 +14,7 @@ Provide a finished native submission boundary and consistent form rhythm while A
|
|
|
14
14
|
|
|
15
15
|
## Required composition
|
|
16
16
|
|
|
17
|
-
- Compose Form ->
|
|
17
|
+
- Compose Form -> Field for each independently labelled control -> a named submit Button; add Fieldset only when multiple controls answer one meaningful group question.
|
|
18
18
|
|
|
19
19
|
## Rules
|
|
20
20
|
|
|
@@ -24,6 +24,7 @@ Provide a finished native submission boundary and consistent form rhythm while A
|
|
|
24
24
|
## Common mistakes
|
|
25
25
|
|
|
26
26
|
- **Avoid:** Treating Form as a complete login or contact workflow. **Instead:** Keep business workflow in the application or a future Block; Form owns the generic visual boundary.
|
|
27
|
+
- **Avoid:** Wrapping the entire form in Fieldset only to obtain spacing, then repeating the page heading as its legend. **Instead:** Let Form own ordinary field rhythm and reserve Fieldset for a real labelled subgroup.
|
|
27
28
|
|
|
28
29
|
## Validation checklist
|
|
29
30
|
|
package/dist/agents/grid.json
CHANGED
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
}
|
|
17
17
|
],
|
|
18
18
|
"composition": [
|
|
19
|
-
"Choose Grid tracks from the minimum readable child size; use Grid.Item placement only when source order remains meaningful."
|
|
19
|
+
"Choose Grid tracks from the minimum readable child size; use Grid.Item placement only when source order remains meaningful.",
|
|
20
|
+
"Use as=\"ul\" or as=\"ol\" when the peers form a semantic list; Grid removes native list geometry while preserving the list relationship."
|
|
20
21
|
],
|
|
21
22
|
"rules": [
|
|
22
23
|
{
|
|
@@ -24,6 +25,16 @@
|
|
|
24
25
|
"level": "must",
|
|
25
26
|
"statement": "Keep DOM order meaningful; visual placement must not create a confusing keyboard or reading sequence."
|
|
26
27
|
},
|
|
28
|
+
{
|
|
29
|
+
"id": "grid-spacing-values",
|
|
30
|
+
"level": "must",
|
|
31
|
+
"statement": "Use non-negative numeric factors for ordinary uniform and axis gaps; reserve explicit CSS values for measured exceptions or application spacing tokens, including inside responsive objects."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "grid-semantic-list",
|
|
35
|
+
"level": "must",
|
|
36
|
+
"statement": "Use a semantic list host when the Grid children form a real set; do not add Block CSS to cancel native ul or ol margins, padding, or markers because Grid owns that host geometry."
|
|
37
|
+
},
|
|
27
38
|
{
|
|
28
39
|
"id": "grid-responsive-relationships",
|
|
29
40
|
"level": "must",
|
|
@@ -45,6 +56,10 @@
|
|
|
45
56
|
"mistake": "Keeping too many columns until cards become unreadably narrow.",
|
|
46
57
|
"correction": "Reduce columns at the content's real minimum width, not at a device-name breakpoint."
|
|
47
58
|
},
|
|
59
|
+
{
|
|
60
|
+
"mistake": "Adding local CSS only because a gap is outside the legacy zero-through-six token scale.",
|
|
61
|
+
"correction": "Use the supported numeric factor or explicit spacing value on gap, rowGap, or columnGap."
|
|
62
|
+
},
|
|
48
63
|
{
|
|
49
64
|
"mistake": "Combining a responsive Item span with explicit line placement.",
|
|
50
65
|
"correction": "Let the responsive item auto-place, or keep one deliberate static line placement."
|
|
@@ -56,6 +71,8 @@
|
|
|
56
71
|
],
|
|
57
72
|
"validation": [
|
|
58
73
|
"Test intrinsic sizing, overflow, zoom, narrow widths, source order, and RTL.",
|
|
74
|
+
"Confirm numeric, explicit, axis-specific, and responsive gaps create the intended computed geometry.",
|
|
75
|
+
"For ul and ol hosts, confirm zero native margin and padding, no visual marker, and preserved list semantics.",
|
|
59
76
|
"Confirm each child remains readable before and after track changes."
|
|
60
77
|
],
|
|
61
78
|
"related": [
|
package/dist/agents/grid.md
CHANGED
|
@@ -15,10 +15,13 @@ Arrange content on tokenized two-dimensional tracks with public column, row, gap
|
|
|
15
15
|
## Required composition
|
|
16
16
|
|
|
17
17
|
- Choose Grid tracks from the minimum readable child size; use Grid.Item placement only when source order remains meaningful.
|
|
18
|
+
- Use as="ul" or as="ol" when the peers form a semantic list; Grid removes native list geometry while preserving the list relationship.
|
|
18
19
|
|
|
19
20
|
## Rules
|
|
20
21
|
|
|
21
22
|
- **MUST:** Keep DOM order meaningful; visual placement must not create a confusing keyboard or reading sequence.
|
|
23
|
+
- **MUST:** Use non-negative numeric factors for ordinary uniform and axis gaps; reserve explicit CSS values for measured exceptions or application spacing tokens, including inside responsive objects.
|
|
24
|
+
- **MUST:** Use a semantic list host when the Grid children form a real set; do not add Block CSS to cancel native ul or ol margins, padding, or markers because Grid owns that host geometry.
|
|
22
25
|
- **MUST:** Use responsive columns, gaps, unanchored spans, and alignment when the same authored Grid changes at Brick breakpoints; keep explicit line starts and ends static.
|
|
23
26
|
- **MUST:** Use Grid.Item asChild when an existing link, Surface, or component should itself receive placement; provide exactly one element and preserve its native semantics.
|
|
24
27
|
- **MUST:** Load styles.css or core.css plus grid.css.
|
|
@@ -26,12 +29,15 @@ Arrange content on tokenized two-dimensional tracks with public column, row, gap
|
|
|
26
29
|
## Common mistakes
|
|
27
30
|
|
|
28
31
|
- **Avoid:** Keeping too many columns until cards become unreadably narrow. **Instead:** Reduce columns at the content's real minimum width, not at a device-name breakpoint.
|
|
32
|
+
- **Avoid:** Adding local CSS only because a gap is outside the legacy zero-through-six token scale. **Instead:** Use the supported numeric factor or explicit spacing value on gap, rowGap, or columnGap.
|
|
29
33
|
- **Avoid:** Combining a responsive Item span with explicit line placement. **Instead:** Let the responsive item auto-place, or keep one deliberate static line placement.
|
|
30
34
|
- **Avoid:** Adding a Grid.Item wrapper and height CSS around an element that should itself stretch as the grid item. **Instead:** Compose that one element with Grid.Item asChild.
|
|
31
35
|
|
|
32
36
|
## Validation checklist
|
|
33
37
|
|
|
34
38
|
- Test intrinsic sizing, overflow, zoom, narrow widths, source order, and RTL.
|
|
39
|
+
- Confirm numeric, explicit, axis-specific, and responsive gaps create the intended computed geometry.
|
|
40
|
+
- For ul and ol hosts, confirm zero native margin and padding, no visual marker, and preserved list semantics.
|
|
35
41
|
- Confirm each child remains readable before and after track changes.
|
|
36
42
|
|
|
37
43
|
## Related guidance
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "flowstack.agent-component.v1",
|
|
3
|
+
"id": "group",
|
|
4
|
+
"name": "Group",
|
|
5
|
+
"package": "@flowstack-ui/brick",
|
|
6
|
+
"layer": "brick",
|
|
7
|
+
"kind": "component",
|
|
8
|
+
"purpose": "Create a compact inline visual cluster and optionally attach direct children without changing their semantics or keyboard behavior.",
|
|
9
|
+
"useWhen": [
|
|
10
|
+
"Direct children need shared outside corners and joined interior borders.",
|
|
11
|
+
"A small mixed set of controls or fields needs compact inline grouping."
|
|
12
|
+
],
|
|
13
|
+
"avoidWhen": [
|
|
14
|
+
{
|
|
15
|
+
"condition": "The relationship needs responsive direction, wrapping, distribution, or ordinary block layout.",
|
|
16
|
+
"useInstead": "Stack/HStack/VStack"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"condition": "Commands need roving focus or items own pressed selection.",
|
|
20
|
+
"useInstead": "Toolbar or ToggleGroup"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"condition": "Tags, skills, social destinations, profile facts, or responsive actions form a content collection rather than one attached control silhouette.",
|
|
24
|
+
"useInstead": "List, Grid, DataList, or Stack"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"composition": [
|
|
28
|
+
"Place the intended bordered elements as direct children. Apply variants, sizes, semantics, accessible names, and events to those children."
|
|
29
|
+
],
|
|
30
|
+
"rules": [
|
|
31
|
+
{
|
|
32
|
+
"id": "group-attached-chain",
|
|
33
|
+
"level": "must",
|
|
34
|
+
"statement": "Use attached only for one unwrapped row or column whose direct children form one continuous visual silhouette."
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "group-semantics",
|
|
38
|
+
"level": "must",
|
|
39
|
+
"statement": "Author role=group and an accessible name only when the controls form a genuine accessibility relationship; Group adds neither by default."
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "group-no-behavior",
|
|
43
|
+
"level": "must",
|
|
44
|
+
"statement": "Keep keyboard behavior with the composed controls; Group never substitutes for Toolbar, ToggleGroup, or a form group."
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "group-not-content-collection",
|
|
48
|
+
"level": "must",
|
|
49
|
+
"statement": "Do not use Group for tags, skills, social destinations, profile facts, or responsive action rows; use List, Grid, DataList, or Stack unless direct children need one compact attached control silhouette."
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "group-css",
|
|
53
|
+
"level": "must",
|
|
54
|
+
"statement": "Load styles.css or core.css plus group.css and every composed child component stylesheet."
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"commonMistakes": [
|
|
58
|
+
{
|
|
59
|
+
"mistake": "Using HStack plus local negative margins, using Toolbar merely to join borders, or using Group as a generic wrapper for unrelated content.",
|
|
60
|
+
"correction": "Use Group only for the compact or attached direct-child relationship and select List, DataList, Grid, Stack, Toolbar, or ToggleGroup for the actual content or behavior."
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"validation": [
|
|
64
|
+
"Check direct-child structure, shared borders, outside logical corners, hover/focus stacking, visible focus rings, RTL, vertical orientation, zoom, forced colors, and narrow containment.",
|
|
65
|
+
"Confirm Group adds no role, name, selection, or keyboard behavior."
|
|
66
|
+
],
|
|
67
|
+
"related": [
|
|
68
|
+
"stack",
|
|
69
|
+
"data-list",
|
|
70
|
+
"list",
|
|
71
|
+
"grid",
|
|
72
|
+
"button",
|
|
73
|
+
"icon-button",
|
|
74
|
+
"toolbar",
|
|
75
|
+
"toggle-group"
|
|
76
|
+
]
|
|
77
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Group agent guide
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Create a compact inline visual cluster and optionally attach direct children without changing their semantics or keyboard behavior.
|
|
6
|
+
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
- Direct children need shared outside corners and joined interior borders.
|
|
10
|
+
- A small mixed set of controls or fields needs compact inline grouping.
|
|
11
|
+
|
|
12
|
+
## Choose something else when
|
|
13
|
+
|
|
14
|
+
- The relationship needs responsive direction, wrapping, distribution, or ordinary block layout. Use Stack/HStack/VStack.
|
|
15
|
+
- Commands need roving focus or items own pressed selection. Use Toolbar or ToggleGroup.
|
|
16
|
+
- Tags, skills, social destinations, profile facts, or responsive actions form a content collection rather than one attached control silhouette. Use List, Grid, DataList, or Stack.
|
|
17
|
+
|
|
18
|
+
## Required composition
|
|
19
|
+
|
|
20
|
+
- Place the intended bordered elements as direct children. Apply variants, sizes, semantics, accessible names, and events to those children.
|
|
21
|
+
|
|
22
|
+
## Rules
|
|
23
|
+
|
|
24
|
+
- **MUST:** Use attached only for one unwrapped row or column whose direct children form one continuous visual silhouette.
|
|
25
|
+
- **MUST:** Author role=group and an accessible name only when the controls form a genuine accessibility relationship; Group adds neither by default.
|
|
26
|
+
- **MUST:** Keep keyboard behavior with the composed controls; Group never substitutes for Toolbar, ToggleGroup, or a form group.
|
|
27
|
+
- **MUST:** Do not use Group for tags, skills, social destinations, profile facts, or responsive action rows; use List, Grid, DataList, or Stack unless direct children need one compact attached control silhouette.
|
|
28
|
+
- **MUST:** Load styles.css or core.css plus group.css and every composed child component stylesheet.
|
|
29
|
+
|
|
30
|
+
## Common mistakes
|
|
31
|
+
|
|
32
|
+
- **Avoid:** Using HStack plus local negative margins, using Toolbar merely to join borders, or using Group as a generic wrapper for unrelated content. **Instead:** Use Group only for the compact or attached direct-child relationship and select List, DataList, Grid, Stack, Toolbar, or ToggleGroup for the actual content or behavior.
|
|
33
|
+
|
|
34
|
+
## Validation checklist
|
|
35
|
+
|
|
36
|
+
- Check direct-child structure, shared borders, outside logical corners, hover/focus stacking, visible focus rings, RTL, vertical orientation, zoom, forced colors, and narrow containment.
|
|
37
|
+
- Confirm Group adds no role, name, selection, or keyboard behavior.
|
|
38
|
+
|
|
39
|
+
## Related guidance
|
|
40
|
+
|
|
41
|
+
- `stack`
|
|
42
|
+
- `data-list`
|
|
43
|
+
- `list`
|
|
44
|
+
- `grid`
|
|
45
|
+
- `button`
|
|
46
|
+
- `icon-button`
|
|
47
|
+
- `toolbar`
|
|
48
|
+
- `toggle-group`
|
package/dist/agents/hide.json
CHANGED
|
@@ -29,6 +29,16 @@
|
|
|
29
29
|
"level": "must",
|
|
30
30
|
"statement": "Do not hide the only accessible name, error, instruction, or required content at a breakpoint."
|
|
31
31
|
},
|
|
32
|
+
{
|
|
33
|
+
"id": "hide-transparent-layout",
|
|
34
|
+
"level": "must",
|
|
35
|
+
"statement": "Rely on Hide's layout-transparent visible state inside parent layouts and put paint or geometry on a child layout component."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "hide-default-props",
|
|
39
|
+
"level": "must",
|
|
40
|
+
"statement": "Omit default-valued props such as as=div; use as only for deliberate HTML semantics or valid document structure."
|
|
41
|
+
},
|
|
32
42
|
{
|
|
33
43
|
"id": "hide-css",
|
|
34
44
|
"level": "must",
|
|
@@ -36,6 +46,10 @@
|
|
|
36
46
|
}
|
|
37
47
|
],
|
|
38
48
|
"commonMistakes": [
|
|
49
|
+
{
|
|
50
|
+
"mistake": "Adding application CSS to repair Hide spacing or writing as=div even though div is the default.",
|
|
51
|
+
"correction": "Rely on Hide's layout-transparent default and specify as only when semantics require another host."
|
|
52
|
+
},
|
|
39
53
|
{
|
|
40
54
|
"mistake": "Using Hide without its modular CSS or duplicating two interactive trees with conflicting IDs.",
|
|
41
55
|
"correction": "Load hide.css and verify alternate compositions have independent valid relationships."
|
package/dist/agents/hide.md
CHANGED
|
@@ -20,10 +20,13 @@ Hide content through Brick's CSS breakpoint contract without JavaScript viewport
|
|
|
20
20
|
|
|
21
21
|
- **MUST:** Use Hide instead of JavaScript matchMedia for first-paint responsive visibility.
|
|
22
22
|
- **MUST:** Do not hide the only accessible name, error, instruction, or required content at a breakpoint.
|
|
23
|
+
- **MUST:** Rely on Hide's layout-transparent visible state inside parent layouts and put paint or geometry on a child layout component.
|
|
24
|
+
- **MUST:** Omit default-valued props such as as=div; use as only for deliberate HTML semantics or valid document structure.
|
|
23
25
|
- **MUST:** Load styles.css or core.css plus hide.css.
|
|
24
26
|
|
|
25
27
|
## Common mistakes
|
|
26
28
|
|
|
29
|
+
- **Avoid:** Adding application CSS to repair Hide spacing or writing as=div even though div is the default. **Instead:** Rely on Hide's layout-transparent default and specify as only when semantics require another host.
|
|
27
30
|
- **Avoid:** Using Hide without its modular CSS or duplicating two interactive trees with conflicting IDs. **Instead:** Load hide.css and verify alternate compositions have independent valid relationships.
|
|
28
31
|
|
|
29
32
|
## Validation checklist
|