@cdx-ui/components 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +24 -0
- package/README.md +6 -2
- package/coverage.svg +1 -1
- package/docs/components/accordion/content.md +538 -0
- package/docs/components/alert/content.md +203 -0
- package/docs/components/alert-dialog/content.md +319 -0
- package/docs/components/avatar/content.md +368 -0
- package/docs/components/avatar/design.md +202 -0
- package/docs/components/badge/content.md +235 -0
- package/docs/components/bottom-sheet/content.md +351 -0
- package/docs/components/bottom-sheet/design.md +249 -0
- package/docs/components/breadcrumbs/content.md +169 -0
- package/docs/components/button/content.md +398 -0
- package/docs/components/button/design.md +258 -0
- package/docs/components/calendar/content.md +137 -0
- package/docs/components/card/content.md +283 -0
- package/docs/components/carousel/content.md +416 -0
- package/docs/components/checkbox/content.md +236 -0
- package/docs/components/checkbox/design.md +214 -0
- package/docs/components/chip/content.md +439 -0
- package/docs/components/chip/design.md +418 -0
- package/docs/components/color-area/content.md +86 -0
- package/docs/components/color-field/content.md +134 -0
- package/docs/components/color-picker/content.md +208 -0
- package/docs/components/color-slider/content.md +120 -0
- package/docs/components/color-swatch/content.md +64 -0
- package/docs/components/color-swatch-picker/content.md +126 -0
- package/docs/components/content.md +97 -0
- package/docs/components/currency-input/content.md +205 -0
- package/docs/components/data-grid/content.md +522 -0
- package/docs/components/date-field/content.md +147 -0
- package/docs/components/date-picker/content.md +360 -0
- package/docs/components/date-range-picker/content.md +301 -0
- package/docs/components/date-time-field/content.md +157 -0
- package/docs/components/date-time-list/content.md +105 -0
- package/docs/components/date-time-picker/content.md +272 -0
- package/docs/components/dialog/content.md +436 -0
- package/docs/components/dialog/design.md +192 -0
- package/docs/components/divider/content.md +112 -0
- package/docs/components/drawer/content.md +436 -0
- package/docs/components/field/content.md +277 -0
- package/docs/components/form/content.md +62 -0
- package/docs/components/full-screen-dialog/content.md +881 -0
- package/docs/components/heading/content.md +55 -0
- package/docs/components/icon/content.md +190 -0
- package/docs/components/icon-button/content.md +200 -0
- package/docs/components/icon-button/design.md +165 -0
- package/docs/components/image/content.md +104 -0
- package/docs/components/input/content.md +281 -0
- package/docs/components/input/design.md +389 -0
- package/docs/components/insurance-disclosure/content.md +103 -0
- package/docs/components/link/content.md +180 -0
- package/docs/components/link/design.md +160 -0
- package/docs/components/list-item/content.md +695 -0
- package/docs/components/menu/content.md +1247 -0
- package/docs/components/month-calendar/content.md +84 -0
- package/docs/components/month-picker/content.md +273 -0
- package/docs/components/otp-input/content.md +327 -0
- package/docs/components/progress-bar/content.md +87 -0
- package/docs/components/progress-circle/content.md +176 -0
- package/docs/components/progress-segmented/content.md +119 -0
- package/docs/components/quick-action-button/content.md +154 -0
- package/docs/components/quick-action-button/design.md +170 -0
- package/docs/components/radio/content.md +224 -0
- package/docs/components/range-calendar/content.md +123 -0
- package/docs/components/reorderable-list/content.md +309 -0
- package/docs/components/scoped-theme/content.md +47 -0
- package/docs/components/scroll-shadow/content.md +686 -0
- package/docs/components/select/content.md +400 -0
- package/docs/components/select/design.md +301 -0
- package/docs/components/skeleton/content.md +103 -0
- package/docs/components/slider/content.md +423 -0
- package/docs/components/stack/content.md +161 -0
- package/docs/components/switch/content.md +150 -0
- package/docs/components/switch/design.md +208 -0
- package/docs/components/table/content.md +548 -0
- package/docs/components/table-pagination/content.md +177 -0
- package/docs/components/tabs/content.md +292 -0
- package/docs/components/text/content.md +142 -0
- package/docs/components/textarea/content.md +222 -0
- package/docs/components/tile/content.md +703 -0
- package/docs/components/toast/content.md +456 -0
- package/docs/components/toggle-button/content.md +505 -0
- package/docs/components/tooltip/content.md +350 -0
- package/docs/components/virtualized-list/content.md +250 -0
- package/docs/foundations/content.md +9 -0
- package/docs/foundations/expressions/icons/content.md +19 -0
- package/docs/foundations/styles/tokens/all-tokens/content.md +192 -0
- package/docs/foundations/styles/tokens/what-are-tokens/content.md +33 -0
- package/docs/foundations/styles/tokens/what-are-tokens/design.md +33 -0
- package/docs/getting-started/content.md +4 -0
- package/docs/getting-started/designers/content.md +13 -0
- package/docs/getting-started/designers/design.md +13 -0
- package/docs/getting-started/developers/accessibility/content.md +31 -0
- package/docs/getting-started/developers/content.md +612 -0
- package/docs/getting-started/developers/styling/content.md +193 -0
- package/docs/llms.txt +193 -0
- package/docs/patterns/account-management/content.md +75 -0
- package/docs/patterns/authentication/content.md +52 -0
- package/docs/patterns/content.md +10 -0
- package/docs/patterns/dashboard/content.md +39 -0
- package/docs/patterns/empty-states/content.md +31 -0
- package/docs/patterns/forms/content.md +109 -0
- package/docs/patterns/onboarding/content.md +69 -0
- package/docs/patterns/payments/content.md +35 -0
- package/docs/patterns/settings/content.md +72 -0
- package/docs/resources/content.md +9 -0
- package/docs/resources/figma-libraries/content.md +42 -0
- package/docs/resources/release-notes/0.0.1-beta.118/content.md +27 -0
- package/docs/resources/release-notes/0.0.1-beta.122/content.md +21 -0
- package/docs/resources/release-notes/0.0.1-beta.124/content.md +16 -0
- package/docs/resources/release-notes/0.0.1-beta.126/content.md +10 -0
- package/docs/resources/release-notes/0.0.1-beta.127/content.md +14 -0
- package/docs/resources/release-notes/0.0.1-beta.128/content.md +9 -0
- package/docs/resources/release-notes/0.0.1-beta.129/content.md +18 -0
- package/docs/resources/release-notes/0.0.1-beta.130/content.md +18 -0
- package/docs/resources/release-notes/0.0.1-beta.133/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.134/content.md +17 -0
- package/docs/resources/release-notes/0.0.1-beta.136/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.137/content.md +10 -0
- package/docs/resources/release-notes/0.0.1-beta.138/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.139/content.md +13 -0
- package/docs/resources/release-notes/0.0.1-beta.140/content.md +26 -0
- package/docs/resources/release-notes/0.0.1-beta.141/content.md +63 -0
- package/docs/resources/release-notes/0.0.1-beta.142/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.143/content.md +12 -0
- package/docs/resources/release-notes/0.0.1-beta.144/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.145/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.147/content.md +10 -0
- package/docs/resources/release-notes/0.0.1-beta.149/content.md +10 -0
- package/docs/resources/release-notes/0.0.1-beta.150/content.md +13 -0
- package/docs/resources/release-notes/0.0.1-beta.152/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.154/content.md +15 -0
- package/docs/resources/release-notes/0.0.1-beta.156/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.158/content.md +9 -0
- package/docs/resources/release-notes/0.0.1-beta.159/content.md +11 -0
- package/docs/resources/release-notes/0.0.1-beta.160/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.161/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.163/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.164/content.md +9 -0
- package/docs/resources/release-notes/0.0.1-beta.166/content.md +17 -0
- package/docs/resources/release-notes/0.0.1-beta.167/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.168/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.169/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.171/content.md +16 -0
- package/docs/resources/release-notes/0.0.1-beta.172/content.md +24 -0
- package/docs/resources/release-notes/0.0.1-beta.173/content.md +15 -0
- package/docs/resources/release-notes/0.0.1-beta.174/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.176/content.md +32 -0
- package/docs/resources/release-notes/0.0.1-beta.179/content.md +11 -0
- package/docs/resources/release-notes/0.0.1-beta.182/content.md +13 -0
- package/docs/resources/release-notes/0.0.1-beta.185/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.187/content.md +27 -0
- package/docs/resources/release-notes/0.1.1/content.md +23 -0
- package/docs/resources/release-notes/0.1.2/content.md +7 -0
- package/docs/resources/release-notes/0.1.4/content.md +19 -0
- package/docs/resources/release-notes/0.1.5/content.md +7 -0
- package/docs/resources/release-notes/0.1.6/content.md +7 -0
- package/docs/resources/release-notes/0.2.0/content.md +31 -0
- package/docs/resources/release-notes/0.2.1/content.md +17 -0
- package/docs/resources/release-notes/0.2.2/content.md +11 -0
- package/docs/resources/release-notes/0.2.3/content.md +15 -0
- package/docs/resources/release-notes/content.md +64 -0
- package/lib/commonjs/components/Checkbox/index.js.map +1 -1
- package/lib/commonjs/components/DateTimeList/index.js +11 -26
- package/lib/commonjs/components/DateTimeList/index.js.map +1 -1
- package/lib/commonjs/components/DateTimeList/styles.js +2 -12
- package/lib/commonjs/components/DateTimeList/styles.js.map +1 -1
- package/lib/commonjs/components/Heading/index.js.map +1 -1
- package/lib/commonjs/components/Icon/index.js.map +1 -1
- package/lib/commonjs/components/ListItem/index.js +170 -9
- package/lib/commonjs/components/ListItem/index.js.map +1 -1
- package/lib/commonjs/components/ListItem/styles.js +38 -2
- package/lib/commonjs/components/ListItem/styles.js.map +1 -1
- package/lib/commonjs/components/Menu/index.js +11 -5
- package/lib/commonjs/components/Menu/index.js.map +1 -1
- package/lib/commonjs/components/RangeCalendar/index.js.map +1 -1
- package/lib/commonjs/components/ReorderableList/ReorderableListShared.js +91 -0
- package/lib/commonjs/components/ReorderableList/ReorderableListShared.js.map +1 -0
- package/lib/commonjs/components/ReorderableList/index.js +135 -0
- package/lib/commonjs/components/ReorderableList/index.js.map +1 -0
- package/lib/commonjs/components/ReorderableList/index.web.js +233 -0
- package/lib/commonjs/components/ReorderableList/index.web.js.map +1 -0
- package/lib/commonjs/components/ReorderableList/labels.js +47 -0
- package/lib/commonjs/components/ReorderableList/labels.js.map +1 -0
- package/lib/commonjs/components/ReorderableList/reorderItems.js +16 -0
- package/lib/commonjs/components/ReorderableList/reorderItems.js.map +1 -0
- package/lib/commonjs/components/ReorderableList/rowContext.js +42 -0
- package/lib/commonjs/components/ReorderableList/rowContext.js.map +1 -0
- package/lib/commonjs/components/ReorderableList/types.js +6 -0
- package/lib/commonjs/components/ReorderableList/types.js.map +1 -0
- package/lib/commonjs/components/ReorderableList/useReorder.js +131 -0
- package/lib/commonjs/components/ReorderableList/useReorder.js.map +1 -0
- package/lib/commonjs/components/ReorderableList/webDnd.js +64 -0
- package/lib/commonjs/components/ReorderableList/webDnd.js.map +1 -0
- package/lib/commonjs/components/ScopedTheme/index.js.map +1 -1
- package/lib/commonjs/components/ScrollShadow/gradient.js +29 -0
- package/lib/commonjs/components/ScrollShadow/gradient.js.map +1 -0
- package/lib/commonjs/components/ScrollShadow/index.js +171 -44
- package/lib/commonjs/components/ScrollShadow/index.js.map +1 -1
- package/lib/commonjs/components/ScrollShadow/styles.js +58 -14
- package/lib/commonjs/components/ScrollShadow/styles.js.map +1 -1
- package/lib/commonjs/components/ScrollShadow/useComposedScrollHandler.js +63 -0
- package/lib/commonjs/components/ScrollShadow/useComposedScrollHandler.js.map +1 -0
- package/lib/commonjs/components/ScrollShadow/useScrollShadow.js +48 -8
- package/lib/commonjs/components/ScrollShadow/useScrollShadow.js.map +1 -1
- package/lib/commonjs/components/Skeleton/index.js.map +1 -1
- package/lib/commonjs/components/TablePagination/index.js.map +1 -1
- package/lib/commonjs/components/Tabs/index.js +16 -23
- package/lib/commonjs/components/Tabs/index.js.map +1 -1
- package/lib/commonjs/components/Tabs/styles.js +1 -10
- package/lib/commonjs/components/Tabs/styles.js.map +1 -1
- package/lib/commonjs/components/Text/index.js.map +1 -1
- package/lib/commonjs/components/Tile/styles.js +1 -1
- package/lib/commonjs/components/Tile/styles.js.map +1 -1
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/commonjs/figma/ListItem.SectionHeader.figma.js +20 -5
- package/lib/commonjs/figma/ListItem.SectionHeader.figma.js.map +1 -1
- package/lib/commonjs/reorderable-list.js +17 -0
- package/lib/commonjs/reorderable-list.js.map +1 -0
- package/lib/module/components/Checkbox/index.js.map +1 -1
- package/lib/module/components/DateTimeList/index.js +12 -27
- package/lib/module/components/DateTimeList/index.js.map +1 -1
- package/lib/module/components/DateTimeList/styles.js +1 -11
- package/lib/module/components/DateTimeList/styles.js.map +1 -1
- package/lib/module/components/Heading/index.js.map +1 -1
- package/lib/module/components/Icon/index.js.map +1 -1
- package/lib/module/components/ListItem/index.js +163 -14
- package/lib/module/components/ListItem/index.js.map +1 -1
- package/lib/module/components/ListItem/styles.js +37 -1
- package/lib/module/components/ListItem/styles.js.map +1 -1
- package/lib/module/components/Menu/index.js +11 -5
- package/lib/module/components/Menu/index.js.map +1 -1
- package/lib/module/components/RangeCalendar/index.js.map +1 -1
- package/lib/module/components/ReorderableList/ReorderableListShared.js +86 -0
- package/lib/module/components/ReorderableList/ReorderableListShared.js.map +1 -0
- package/lib/module/components/ReorderableList/index.js +130 -0
- package/lib/module/components/ReorderableList/index.js.map +1 -0
- package/lib/module/components/ReorderableList/index.web.js +229 -0
- package/lib/module/components/ReorderableList/index.web.js.map +1 -0
- package/lib/module/components/ReorderableList/labels.js +41 -0
- package/lib/module/components/ReorderableList/labels.js.map +1 -0
- package/lib/module/components/ReorderableList/reorderItems.js +12 -0
- package/lib/module/components/ReorderableList/reorderItems.js.map +1 -0
- package/lib/module/components/ReorderableList/rowContext.js +38 -0
- package/lib/module/components/ReorderableList/rowContext.js.map +1 -0
- package/lib/module/components/ReorderableList/types.js +4 -0
- package/lib/module/components/ReorderableList/types.js.map +1 -0
- package/lib/module/components/ReorderableList/useReorder.js +123 -0
- package/lib/module/components/ReorderableList/useReorder.js.map +1 -0
- package/lib/module/components/ReorderableList/webDnd.js +59 -0
- package/lib/module/components/ReorderableList/webDnd.js.map +1 -0
- package/lib/module/components/ScopedTheme/index.js.map +1 -1
- package/lib/module/components/ScrollShadow/gradient.js +24 -0
- package/lib/module/components/ScrollShadow/gradient.js.map +1 -0
- package/lib/module/components/ScrollShadow/index.js +170 -48
- package/lib/module/components/ScrollShadow/index.js.map +1 -1
- package/lib/module/components/ScrollShadow/styles.js +57 -13
- package/lib/module/components/ScrollShadow/styles.js.map +1 -1
- package/lib/module/components/ScrollShadow/useComposedScrollHandler.js +57 -0
- package/lib/module/components/ScrollShadow/useComposedScrollHandler.js.map +1 -0
- package/lib/module/components/ScrollShadow/useScrollShadow.js +46 -8
- package/lib/module/components/ScrollShadow/useScrollShadow.js.map +1 -1
- package/lib/module/components/Skeleton/index.js.map +1 -1
- package/lib/module/components/TablePagination/index.js.map +1 -1
- package/lib/module/components/Tabs/index.js +17 -24
- package/lib/module/components/Tabs/index.js.map +1 -1
- package/lib/module/components/Tabs/styles.js +0 -9
- package/lib/module/components/Tabs/styles.js.map +1 -1
- package/lib/module/components/Text/index.js.map +1 -1
- package/lib/module/components/Tile/styles.js +1 -1
- package/lib/module/components/Tile/styles.js.map +1 -1
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/figma/ListItem.SectionHeader.figma.js +20 -5
- package/lib/module/figma/ListItem.SectionHeader.figma.js.map +1 -1
- package/lib/module/reorderable-list.js +4 -0
- package/lib/module/reorderable-list.js.map +1 -0
- package/lib/typescript/components/Checkbox/index.d.ts +22 -0
- package/lib/typescript/components/Checkbox/index.d.ts.map +1 -1
- package/lib/typescript/components/DateTimeList/index.d.ts.map +1 -1
- package/lib/typescript/components/DateTimeList/styles.d.ts +1 -4
- package/lib/typescript/components/DateTimeList/styles.d.ts.map +1 -1
- package/lib/typescript/components/Heading/index.d.ts +20 -2
- package/lib/typescript/components/Heading/index.d.ts.map +1 -1
- package/lib/typescript/components/Icon/index.d.ts +2 -0
- package/lib/typescript/components/Icon/index.d.ts.map +1 -1
- package/lib/typescript/components/ListItem/index.d.ts +28 -5
- package/lib/typescript/components/ListItem/index.d.ts.map +1 -1
- package/lib/typescript/components/ListItem/styles.d.ts +6 -1
- package/lib/typescript/components/ListItem/styles.d.ts.map +1 -1
- package/lib/typescript/components/Menu/index.d.ts +116 -4
- package/lib/typescript/components/Menu/index.d.ts.map +1 -1
- package/lib/typescript/components/RangeCalendar/index.d.ts +2 -0
- package/lib/typescript/components/RangeCalendar/index.d.ts.map +1 -1
- package/lib/typescript/components/ReorderableList/ReorderableListShared.d.ts +31 -0
- package/lib/typescript/components/ReorderableList/ReorderableListShared.d.ts.map +1 -0
- package/lib/typescript/components/ReorderableList/index.d.ts +8 -0
- package/lib/typescript/components/ReorderableList/index.d.ts.map +1 -0
- package/lib/typescript/components/ReorderableList/index.web.d.ts +8 -0
- package/lib/typescript/components/ReorderableList/index.web.d.ts.map +1 -0
- package/lib/typescript/components/ReorderableList/labels.d.ts +16 -0
- package/lib/typescript/components/ReorderableList/labels.d.ts.map +1 -0
- package/lib/typescript/components/ReorderableList/reorderItems.d.ts +3 -0
- package/lib/typescript/components/ReorderableList/reorderItems.d.ts.map +1 -0
- package/lib/typescript/components/ReorderableList/rowContext.d.ts +57 -0
- package/lib/typescript/components/ReorderableList/rowContext.d.ts.map +1 -0
- package/lib/typescript/components/ReorderableList/types.d.ts +75 -0
- package/lib/typescript/components/ReorderableList/types.d.ts.map +1 -0
- package/lib/typescript/components/ReorderableList/useReorder.d.ts +31 -0
- package/lib/typescript/components/ReorderableList/useReorder.d.ts.map +1 -0
- package/lib/typescript/components/ReorderableList/webDnd.d.ts +27 -0
- package/lib/typescript/components/ReorderableList/webDnd.d.ts.map +1 -0
- package/lib/typescript/components/ScopedTheme/index.d.ts +6 -1
- package/lib/typescript/components/ScopedTheme/index.d.ts.map +1 -1
- package/lib/typescript/components/ScrollShadow/gradient.d.ts +7 -0
- package/lib/typescript/components/ScrollShadow/gradient.d.ts.map +1 -0
- package/lib/typescript/components/ScrollShadow/index.d.ts +57 -15
- package/lib/typescript/components/ScrollShadow/index.d.ts.map +1 -1
- package/lib/typescript/components/ScrollShadow/styles.d.ts +8 -2
- package/lib/typescript/components/ScrollShadow/styles.d.ts.map +1 -1
- package/lib/typescript/components/ScrollShadow/useComposedScrollHandler.d.ts +13 -0
- package/lib/typescript/components/ScrollShadow/useComposedScrollHandler.d.ts.map +1 -0
- package/lib/typescript/components/ScrollShadow/useScrollShadow.d.ts +15 -2
- package/lib/typescript/components/ScrollShadow/useScrollShadow.d.ts.map +1 -1
- package/lib/typescript/components/Skeleton/index.d.ts +3 -0
- package/lib/typescript/components/Skeleton/index.d.ts.map +1 -1
- package/lib/typescript/components/TablePagination/index.d.ts +54 -0
- package/lib/typescript/components/TablePagination/index.d.ts.map +1 -1
- package/lib/typescript/components/Tabs/index.d.ts.map +1 -1
- package/lib/typescript/components/Tabs/styles.d.ts +0 -7
- package/lib/typescript/components/Tabs/styles.d.ts.map +1 -1
- package/lib/typescript/components/Text/index.d.ts +12 -2
- package/lib/typescript/components/Text/index.d.ts.map +1 -1
- package/lib/typescript/components/Tile/styles.d.ts.map +1 -1
- package/lib/typescript/components/ToggleButton/styles.d.ts +1 -1
- package/lib/typescript/components/index.d.ts +1 -0
- package/lib/typescript/components/index.d.ts.map +1 -1
- package/lib/typescript/figma/ListItem.SectionHeader.figma.d.ts.map +1 -1
- package/lib/typescript/reorderable-list.d.ts +2 -0
- package/lib/typescript/reorderable-list.d.ts.map +1 -0
- package/package.json +37 -8
- package/src/components/Checkbox/index.tsx +22 -0
- package/src/components/DateTimeList/index.tsx +13 -26
- package/src/components/DateTimeList/styles.ts +1 -10
- package/src/components/Heading/index.tsx +10 -1
- package/src/components/Icon/index.tsx +2 -0
- package/src/components/ListItem/index.tsx +232 -15
- package/src/components/ListItem/styles.ts +41 -0
- package/src/components/Menu/index.tsx +128 -12
- package/src/components/RangeCalendar/index.tsx +2 -0
- package/src/components/ReorderableList/ReorderableListShared.tsx +113 -0
- package/src/components/ReorderableList/index.tsx +162 -0
- package/src/components/ReorderableList/index.web.tsx +254 -0
- package/src/components/ReorderableList/labels.ts +52 -0
- package/src/components/ReorderableList/reorderItems.ts +16 -0
- package/src/components/ReorderableList/rowContext.tsx +72 -0
- package/src/components/ReorderableList/types.ts +80 -0
- package/src/components/ReorderableList/useReorder.ts +159 -0
- package/src/components/ReorderableList/webDnd.ts +60 -0
- package/src/components/ScopedTheme/index.tsx +6 -1
- package/src/components/ScrollShadow/gradient.ts +48 -0
- package/src/components/ScrollShadow/index.tsx +300 -69
- package/src/components/ScrollShadow/styles.ts +45 -28
- package/src/components/ScrollShadow/useComposedScrollHandler.ts +58 -0
- package/src/components/ScrollShadow/useScrollShadow.ts +72 -10
- package/src/components/Skeleton/index.tsx +3 -0
- package/src/components/TablePagination/index.tsx +54 -0
- package/src/components/Tabs/index.tsx +25 -35
- package/src/components/Tabs/styles.ts +0 -9
- package/src/components/Text/index.tsx +6 -1
- package/src/components/Tile/styles.ts +4 -1
- package/src/components/index.ts +5 -0
- package/src/reorderable-list.ts +1 -0
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
# Toggle Button (https://design.candescent.com/docs/components/toggle-button)
|
|
2
|
+
|
|
3
|
+
Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/actions-togglebutton--default)
|
|
4
|
+
|
|
5
|
+
A compound component with sub-components for label, icon, and grouping. Use a toggle button when the pressed state should persist — not a [Switch](https://design.candescent.com/docs/components/switch/content.md) (a settings on/off control) and not a [Tile](https://design.candescent.com/docs/components/tile/content.md) (a pick-from-a-list card).
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { ToggleButton } from '@cdx-ui/components';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Basic
|
|
12
|
+
|
|
13
|
+
A standalone toggle. Selection is controlled here with `isSelected` and `onSelectedChange`.
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import { useState } from 'react';
|
|
17
|
+
import { ToggleButton } from '@cdx-ui/components';
|
|
18
|
+
import { Star } from '@cdx-ui/icons';
|
|
19
|
+
|
|
20
|
+
export default function ToggleButtonBasicDemo() {
|
|
21
|
+
const [favorite, setFavorite] = useState(false);
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<ToggleButton value="favorite-payee" isSelected={favorite} onSelectedChange={setFavorite}>
|
|
25
|
+
<ToggleButton.Icon as={Star} position="leading" />
|
|
26
|
+
<ToggleButton.Label>Favorite payee</ToggleButton.Label>
|
|
27
|
+
</ToggleButton>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Variants
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { ToggleButton, VStack } from '@cdx-ui/components';
|
|
36
|
+
import { BarChart, PieChart, ShowChart } from '@cdx-ui/icons';
|
|
37
|
+
|
|
38
|
+
export default function ToggleButtonVariantsDemo() {
|
|
39
|
+
return (
|
|
40
|
+
<VStack space="lg">
|
|
41
|
+
{(['default', 'outline', 'ghost'] as const).map((variant) => (
|
|
42
|
+
<ToggleButton.Group
|
|
43
|
+
key={variant}
|
|
44
|
+
type="single"
|
|
45
|
+
defaultValue="bar"
|
|
46
|
+
aria-label={`Spending chart type, ${variant} variant`}
|
|
47
|
+
>
|
|
48
|
+
<ToggleButton value="bar" variant={variant} accessibilityLabel="Bar chart">
|
|
49
|
+
<ToggleButton.Icon as={BarChart} />
|
|
50
|
+
</ToggleButton>
|
|
51
|
+
<ToggleButton value="line" variant={variant} accessibilityLabel="Line chart">
|
|
52
|
+
<ToggleButton.Icon as={ShowChart} />
|
|
53
|
+
</ToggleButton>
|
|
54
|
+
<ToggleButton value="pie" variant={variant} accessibilityLabel="Pie chart">
|
|
55
|
+
<ToggleButton.Icon as={PieChart} />
|
|
56
|
+
</ToggleButton>
|
|
57
|
+
</ToggleButton.Group>
|
|
58
|
+
))}
|
|
59
|
+
</VStack>
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Sizes
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
import { HStack, ToggleButton } from '@cdx-ui/components';
|
|
68
|
+
import { Star } from '@cdx-ui/icons';
|
|
69
|
+
|
|
70
|
+
const SIZES = [
|
|
71
|
+
{ size: 'small', label: 'Small' },
|
|
72
|
+
{ size: 'default', label: 'Default' },
|
|
73
|
+
{ size: 'large', label: 'Large' },
|
|
74
|
+
] as const;
|
|
75
|
+
|
|
76
|
+
export default function ToggleButtonSizesDemo() {
|
|
77
|
+
return (
|
|
78
|
+
<HStack space="lg">
|
|
79
|
+
{SIZES.map(({ size, label }) => (
|
|
80
|
+
<ToggleButton
|
|
81
|
+
key={size}
|
|
82
|
+
value={size}
|
|
83
|
+
defaultSelected={size === 'default'}
|
|
84
|
+
size={size}
|
|
85
|
+
className="self-center"
|
|
86
|
+
>
|
|
87
|
+
<ToggleButton.Icon as={Star} position="leading" />
|
|
88
|
+
<ToggleButton.Label>{label}</ToggleButton.Label>
|
|
89
|
+
</ToggleButton>
|
|
90
|
+
))}
|
|
91
|
+
</HStack>
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Shapes
|
|
97
|
+
|
|
98
|
+
`shape="circle"` is a pill; `shape="rounded"` uses the default corner radius.
|
|
99
|
+
|
|
100
|
+
```tsx
|
|
101
|
+
import { HStack, ToggleButton, VStack } from '@cdx-ui/components';
|
|
102
|
+
import { BarChart, ShowChart, Star } from '@cdx-ui/icons';
|
|
103
|
+
|
|
104
|
+
export default function ToggleButtonShapesDemo() {
|
|
105
|
+
return (
|
|
106
|
+
<VStack space="2xl">
|
|
107
|
+
<HStack space="md">
|
|
108
|
+
<ToggleButton value="circle" defaultSelected shape="circle">
|
|
109
|
+
<ToggleButton.Icon as={Star} position="leading" />
|
|
110
|
+
<ToggleButton.Label>Circle</ToggleButton.Label>
|
|
111
|
+
</ToggleButton>
|
|
112
|
+
<ToggleButton value="rounded" shape="rounded">
|
|
113
|
+
<ToggleButton.Icon as={Star} position="leading" />
|
|
114
|
+
<ToggleButton.Label>Rounded</ToggleButton.Label>
|
|
115
|
+
</ToggleButton>
|
|
116
|
+
</HStack>
|
|
117
|
+
<ToggleButton.Group type="single" defaultValue="bar" aria-label="Spending chart type">
|
|
118
|
+
<ToggleButton value="bar" shape="circle" accessibilityLabel="Bar chart">
|
|
119
|
+
<ToggleButton.Icon as={BarChart} />
|
|
120
|
+
</ToggleButton>
|
|
121
|
+
<ToggleButton value="line" shape="rounded" accessibilityLabel="Line chart">
|
|
122
|
+
<ToggleButton.Icon as={ShowChart} />
|
|
123
|
+
</ToggleButton>
|
|
124
|
+
</ToggleButton.Group>
|
|
125
|
+
</VStack>
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Icon only
|
|
131
|
+
|
|
132
|
+
A toggle whose only child is `ToggleButton.Icon` renders square, so `shape="circle"` is a true circle. Icon-only toggles need an `accessibilityLabel` because there is no visible text.
|
|
133
|
+
|
|
134
|
+
```tsx
|
|
135
|
+
import { useState } from 'react';
|
|
136
|
+
import { ToggleButton } from '@cdx-ui/components';
|
|
137
|
+
import { Notifications } from '@cdx-ui/icons';
|
|
138
|
+
|
|
139
|
+
export default function ToggleButtonIconOnlyDemo() {
|
|
140
|
+
const [selected, setSelected] = useState(false);
|
|
141
|
+
|
|
142
|
+
return (
|
|
143
|
+
<ToggleButton
|
|
144
|
+
value="balance-alerts"
|
|
145
|
+
isSelected={selected}
|
|
146
|
+
onSelectedChange={setSelected}
|
|
147
|
+
accessibilityLabel="Low balance alerts"
|
|
148
|
+
variant="outline"
|
|
149
|
+
>
|
|
150
|
+
<ToggleButton.Icon as={Notifications} />
|
|
151
|
+
</ToggleButton>
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Icon and label
|
|
157
|
+
|
|
158
|
+
Use `ToggleButton.Icon` with `position="leading"` or `position="trailing"` next to `ToggleButton.Label`. The toggle's size sets the gap between them. While the toggle is selected, the icon uses its filled variant.
|
|
159
|
+
|
|
160
|
+
```tsx
|
|
161
|
+
import { useState } from 'react';
|
|
162
|
+
import { ToggleButton } from '@cdx-ui/components';
|
|
163
|
+
import { Bookmark } from '@cdx-ui/icons';
|
|
164
|
+
|
|
165
|
+
export default function ToggleButtonIconAndLabelDemo() {
|
|
166
|
+
const [selected, setSelected] = useState(true);
|
|
167
|
+
|
|
168
|
+
return (
|
|
169
|
+
<ToggleButton
|
|
170
|
+
value="watchlist"
|
|
171
|
+
isSelected={selected}
|
|
172
|
+
onSelectedChange={setSelected}
|
|
173
|
+
variant="outline"
|
|
174
|
+
>
|
|
175
|
+
<ToggleButton.Icon as={Bookmark} position="leading" />
|
|
176
|
+
<ToggleButton.Label>Watchlist</ToggleButton.Label>
|
|
177
|
+
</ToggleButton>
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Single selection
|
|
183
|
+
|
|
184
|
+
`ToggleButton.Group` with `type="single"` behaves like a radio group: one selected item at a time, such as an activity period. Pressing the already-selected item does not clear it. The group's `value` is the selected button's `value`.
|
|
185
|
+
|
|
186
|
+
```tsx
|
|
187
|
+
import { useState } from 'react';
|
|
188
|
+
import { ToggleButton } from '@cdx-ui/components';
|
|
189
|
+
|
|
190
|
+
const PERIODS = [
|
|
191
|
+
{ value: '1m', label: '1M', accessibilityLabel: '1 month' },
|
|
192
|
+
{ value: '3m', label: '3M', accessibilityLabel: '3 months' },
|
|
193
|
+
{ value: '6m', label: '6M', accessibilityLabel: '6 months' },
|
|
194
|
+
{ value: '1y', label: '1Y', accessibilityLabel: '1 year' },
|
|
195
|
+
];
|
|
196
|
+
|
|
197
|
+
export default function ToggleButtonSingleDemo() {
|
|
198
|
+
const [period, setPeriod] = useState('3m');
|
|
199
|
+
|
|
200
|
+
return (
|
|
201
|
+
<ToggleButton.Group
|
|
202
|
+
type="single"
|
|
203
|
+
value={period}
|
|
204
|
+
onValueChange={setPeriod}
|
|
205
|
+
aria-label="Activity period"
|
|
206
|
+
>
|
|
207
|
+
{PERIODS.map(({ value, label, accessibilityLabel }) => (
|
|
208
|
+
<ToggleButton key={value} value={value} accessibilityLabel={accessibilityLabel}>
|
|
209
|
+
<ToggleButton.Label>{label}</ToggleButton.Label>
|
|
210
|
+
</ToggleButton>
|
|
211
|
+
))}
|
|
212
|
+
</ToggleButton.Group>
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Multiple selection
|
|
218
|
+
|
|
219
|
+
`type="multiple"` lets several buttons stay pressed, such as independent text formats in a secure message. The group's `value` is an array of selected button `value`s.
|
|
220
|
+
|
|
221
|
+
```tsx
|
|
222
|
+
import { useState } from 'react';
|
|
223
|
+
import { ToggleButton } from '@cdx-ui/components';
|
|
224
|
+
import { FormatBold, FormatItalic, FormatUnderlined } from '@cdx-ui/icons';
|
|
225
|
+
|
|
226
|
+
export default function ToggleButtonMultipleDemo() {
|
|
227
|
+
const [value, setValue] = useState<string[]>(['bold', 'underline']);
|
|
228
|
+
|
|
229
|
+
return (
|
|
230
|
+
<ToggleButton.Group
|
|
231
|
+
type="multiple"
|
|
232
|
+
value={value}
|
|
233
|
+
onValueChange={setValue}
|
|
234
|
+
aria-label="Message formatting"
|
|
235
|
+
>
|
|
236
|
+
<ToggleButton value="bold" accessibilityLabel="Bold">
|
|
237
|
+
<ToggleButton.Icon as={FormatBold} />
|
|
238
|
+
</ToggleButton>
|
|
239
|
+
<ToggleButton value="italic" accessibilityLabel="Italic">
|
|
240
|
+
<ToggleButton.Icon as={FormatItalic} />
|
|
241
|
+
</ToggleButton>
|
|
242
|
+
<ToggleButton value="underline" accessibilityLabel="Underline">
|
|
243
|
+
<ToggleButton.Icon as={FormatUnderlined} />
|
|
244
|
+
</ToggleButton>
|
|
245
|
+
</ToggleButton.Group>
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## Attached
|
|
251
|
+
|
|
252
|
+
Groups are a single segmented control by default (`isAttached`). Set `isAttached={false}` to render separate buttons with a gap.
|
|
253
|
+
|
|
254
|
+
```tsx
|
|
255
|
+
import { Text, ToggleButton, VStack } from '@cdx-ui/components';
|
|
256
|
+
|
|
257
|
+
function FrequencyGroup({ isAttached }: { isAttached: boolean }) {
|
|
258
|
+
return (
|
|
259
|
+
<ToggleButton.Group
|
|
260
|
+
type="single"
|
|
261
|
+
defaultValue="once"
|
|
262
|
+
isAttached={isAttached}
|
|
263
|
+
aria-label="Transfer frequency"
|
|
264
|
+
>
|
|
265
|
+
<ToggleButton value="once">
|
|
266
|
+
<ToggleButton.Label>One time</ToggleButton.Label>
|
|
267
|
+
</ToggleButton>
|
|
268
|
+
<ToggleButton value="weekly">
|
|
269
|
+
<ToggleButton.Label>Weekly</ToggleButton.Label>
|
|
270
|
+
</ToggleButton>
|
|
271
|
+
<ToggleButton value="monthly">
|
|
272
|
+
<ToggleButton.Label>Monthly</ToggleButton.Label>
|
|
273
|
+
</ToggleButton>
|
|
274
|
+
</ToggleButton.Group>
|
|
275
|
+
);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export default function ToggleButtonAttachedDemo() {
|
|
279
|
+
return (
|
|
280
|
+
<VStack space="lg">
|
|
281
|
+
<VStack space="sm">
|
|
282
|
+
<Text size="sm" color="secondary">
|
|
283
|
+
Attached (default)
|
|
284
|
+
</Text>
|
|
285
|
+
<FrequencyGroup isAttached />
|
|
286
|
+
</VStack>
|
|
287
|
+
<VStack space="sm">
|
|
288
|
+
<Text size="sm" color="secondary">
|
|
289
|
+
Detached
|
|
290
|
+
</Text>
|
|
291
|
+
<FrequencyGroup isAttached={false} />
|
|
292
|
+
</VStack>
|
|
293
|
+
</VStack>
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
## Controlled
|
|
299
|
+
|
|
300
|
+
Drive selection from parent state with `isSelected` and `onSelectedChange` when the toggle affects other UI, such as masking an account balance. Keep the label constant; the selected state already tells assistive technology whether it is on.
|
|
301
|
+
|
|
302
|
+
```tsx
|
|
303
|
+
import { useState } from 'react';
|
|
304
|
+
import { CurrencyInput, Heading, Text, ToggleButton, VStack } from '@cdx-ui/components';
|
|
305
|
+
import { VisibilityOff } from '@cdx-ui/icons';
|
|
306
|
+
|
|
307
|
+
export default function ToggleButtonControlledDemo() {
|
|
308
|
+
const [hideBalance, setHideBalance] = useState(false);
|
|
309
|
+
|
|
310
|
+
return (
|
|
311
|
+
<VStack space="md" className="items-center">
|
|
312
|
+
<VStack space="xs" className="items-center">
|
|
313
|
+
<Text size="sm" color="secondary">
|
|
314
|
+
Everyday Checking ••4821
|
|
315
|
+
</Text>
|
|
316
|
+
{hideBalance ? (
|
|
317
|
+
<Heading size="lg" accessibilityLabel="Balance hidden" className="py-0.5">
|
|
318
|
+
$•,•••.••
|
|
319
|
+
</Heading>
|
|
320
|
+
) : (
|
|
321
|
+
<CurrencyInput
|
|
322
|
+
accessibilityLabel="Everyday Checking balance"
|
|
323
|
+
isReadOnly
|
|
324
|
+
size="small"
|
|
325
|
+
value={4218.53}
|
|
326
|
+
/>
|
|
327
|
+
)}
|
|
328
|
+
</VStack>
|
|
329
|
+
<ToggleButton
|
|
330
|
+
value="hide-balance"
|
|
331
|
+
isSelected={hideBalance}
|
|
332
|
+
onSelectedChange={setHideBalance}
|
|
333
|
+
variant="outline"
|
|
334
|
+
size="small"
|
|
335
|
+
className="self-center"
|
|
336
|
+
>
|
|
337
|
+
<ToggleButton.Icon as={VisibilityOff} position="leading" />
|
|
338
|
+
<ToggleButton.Label>Hide balance</ToggleButton.Label>
|
|
339
|
+
</ToggleButton>
|
|
340
|
+
</VStack>
|
|
341
|
+
);
|
|
342
|
+
}
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
## Vertical
|
|
346
|
+
|
|
347
|
+
Set `orientation="vertical"` to stack the group and map arrow keys to up/down.
|
|
348
|
+
|
|
349
|
+
```tsx
|
|
350
|
+
import { ToggleButton } from '@cdx-ui/components';
|
|
351
|
+
|
|
352
|
+
export default function ToggleButtonVerticalDemo() {
|
|
353
|
+
return (
|
|
354
|
+
<ToggleButton.Group
|
|
355
|
+
type="single"
|
|
356
|
+
orientation="vertical"
|
|
357
|
+
defaultValue="statement"
|
|
358
|
+
aria-label="Payment amount"
|
|
359
|
+
>
|
|
360
|
+
<ToggleButton value="minimum" shape="rounded">
|
|
361
|
+
<ToggleButton.Label>Minimum due · $35.00</ToggleButton.Label>
|
|
362
|
+
</ToggleButton>
|
|
363
|
+
<ToggleButton value="statement" shape="rounded">
|
|
364
|
+
<ToggleButton.Label>Statement balance · $1,284.62</ToggleButton.Label>
|
|
365
|
+
</ToggleButton>
|
|
366
|
+
<ToggleButton value="current" shape="rounded">
|
|
367
|
+
<ToggleButton.Label>Current balance · $1,402.19</ToggleButton.Label>
|
|
368
|
+
</ToggleButton>
|
|
369
|
+
</ToggleButton.Group>
|
|
370
|
+
);
|
|
371
|
+
}
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
## Disabled
|
|
375
|
+
|
|
376
|
+
Set `isDisabled` on `ToggleButton.Group` to disable every item, or on a single `ToggleButton`.
|
|
377
|
+
|
|
378
|
+
```tsx
|
|
379
|
+
import { ToggleButton, VStack } from '@cdx-ui/components';
|
|
380
|
+
|
|
381
|
+
export default function ToggleButtonDisabledDemo() {
|
|
382
|
+
return (
|
|
383
|
+
<VStack space="lg">
|
|
384
|
+
<ToggleButton.Group type="single" value="monthly" aria-label="Transfer frequency" isDisabled>
|
|
385
|
+
<ToggleButton value="once">
|
|
386
|
+
<ToggleButton.Label>One time</ToggleButton.Label>
|
|
387
|
+
</ToggleButton>
|
|
388
|
+
<ToggleButton value="weekly">
|
|
389
|
+
<ToggleButton.Label>Weekly</ToggleButton.Label>
|
|
390
|
+
</ToggleButton>
|
|
391
|
+
<ToggleButton value="monthly">
|
|
392
|
+
<ToggleButton.Label>Monthly</ToggleButton.Label>
|
|
393
|
+
</ToggleButton>
|
|
394
|
+
</ToggleButton.Group>
|
|
395
|
+
<ToggleButton.Group type="single" defaultValue="3m" aria-label="Activity period">
|
|
396
|
+
<ToggleButton value="1m" accessibilityLabel="1 month">
|
|
397
|
+
<ToggleButton.Label>1M</ToggleButton.Label>
|
|
398
|
+
</ToggleButton>
|
|
399
|
+
<ToggleButton value="3m" accessibilityLabel="3 months">
|
|
400
|
+
<ToggleButton.Label>3M</ToggleButton.Label>
|
|
401
|
+
</ToggleButton>
|
|
402
|
+
<ToggleButton value="1y" isDisabled accessibilityLabel="1 year">
|
|
403
|
+
<ToggleButton.Label>1Y</ToggleButton.Label>
|
|
404
|
+
</ToggleButton>
|
|
405
|
+
</ToggleButton.Group>
|
|
406
|
+
</VStack>
|
|
407
|
+
);
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
## API
|
|
412
|
+
|
|
413
|
+
### ToggleButton
|
|
414
|
+
|
|
415
|
+
Pressable root that toggles a persisted selected state. Requires a unique `value`. Inside a `ToggleButton.Group`, selection is owned by the group (`value` / `defaultValue` match each button's `value`); standalone usage supports `isSelected` / `defaultSelected` / `onSelectedChange`.
|
|
416
|
+
|
|
417
|
+
| Prop | Type | Default | Description |
|
|
418
|
+
| --- | --- | --- | --- |
|
|
419
|
+
| `className?` | `string` | — | — |
|
|
420
|
+
| `children?` | `React.ReactNode` | — | Either children or a render prop that receives a boolean reflecting whether the component is currently pressed. |
|
|
421
|
+
| `variant?` | `'default' \| 'outline' \| 'ghost'` | `'default'` | Visual style. `default` is a muted filled surface; `outline` adds a border; `ghost` is transparent. |
|
|
422
|
+
| `shape?` | `'circle' \| 'rounded'` | `'circle'` | Corner geometry — mirrors `Avatar.shape`. |
|
|
423
|
+
| `size?` | `'default' \| 'small' \| 'large'` | `'default'` | Height and padding scale. |
|
|
424
|
+
| `asChild?` | `boolean` | — | Render the consumer's child in place of the default `Pressable` host. |
|
|
425
|
+
| `value` | `string` | — | Identifies this button within a `ToggleButtonGroup`. Must be unique within the group. Standalone buttons still require a value. |
|
|
426
|
+
| `isSelected?` | `boolean` | — | Controlled selected state (standalone only; ignored inside `ToggleButtonGroup`). |
|
|
427
|
+
| `defaultSelected?` | `boolean` | `false` | Uncontrolled initial selected state (standalone only). |
|
|
428
|
+
| `onSelectedChange?` | `((isSelected: boolean) => void)` | — | Called when standalone selected state changes. |
|
|
429
|
+
| `isDisabled?` | `boolean` | `false` | — |
|
|
430
|
+
|
|
431
|
+
Inherits all [`PressableProps`](https://reactnative.dev/docs/pressable#props) (including `onPress`).
|
|
432
|
+
|
|
433
|
+
## Sub-components
|
|
434
|
+
|
|
435
|
+
### ToggleButton.Label
|
|
436
|
+
|
|
437
|
+
Text label inside the toggle. Inherits size from the parent and selected/hover/press color from toggle state.
|
|
438
|
+
|
|
439
|
+
| Prop | Type | Default | Description |
|
|
440
|
+
| --- | --- | --- | --- |
|
|
441
|
+
| `className?` | `string` | — | — |
|
|
442
|
+
| `children?` | `React.ReactNode` | — | — |
|
|
443
|
+
| `asChild?` | `boolean` | — | Render the consumer's child in place of the default `Text` host. |
|
|
444
|
+
|
|
445
|
+
Inherits all [`TextProps`](https://reactnative.dev/docs/text#props).
|
|
446
|
+
|
|
447
|
+
### ToggleButton.Icon
|
|
448
|
+
|
|
449
|
+
Renders a Forge icon. Inherits size and selected/hover/press color from the parent. While the toggle is selected, the icon uses its filled variant; pass `filled` to override. Icon-only usage must pass `accessibilityLabel` on `ToggleButton`.
|
|
450
|
+
|
|
451
|
+
| Prop | Type | Default | Description |
|
|
452
|
+
| --- | --- | --- | --- |
|
|
453
|
+
| `className?` | `string` | — | Utility classes for size (`size-*`) and placement, merged after the defaults. |
|
|
454
|
+
| `filled?` | `boolean` | — | Render the filled icon variant. Defaults to the toggle's selected state. Icons without filled path data stay outlined. |
|
|
455
|
+
| `size?` | `string \| number` | — | Width and height of the icon, in pixels or any SVG length. The bare icon renders at 24 when omitted. |
|
|
456
|
+
| `data-testid?` | `string` | — | Test identifier forwarded to the rendered SVG. |
|
|
457
|
+
| `as?` | `ForgeIcon` | — | Forge icon component to render. |
|
|
458
|
+
| `asChild?` | `boolean` | — | Render a custom element instead of the default icon. |
|
|
459
|
+
| `position?` | `'leading' \| 'trailing'` | — | Leading or trailing placement relative to the label. |
|
|
460
|
+
|
|
461
|
+
Inherits all `ForgeIconProps` (react-native-svg `SvgProps` plus `filled` and `size`).
|
|
462
|
+
|
|
463
|
+
### ToggleButton.Group
|
|
464
|
+
|
|
465
|
+
Selection state container and layout. `type="single"` uses radio semantics (group `value` is the selected button's `value`); `type="multiple"` uses pressed-button semantics (group `value` is an array of selected `value`s). `isAttached` defaults to `true` (segmented).
|
|
466
|
+
|
|
467
|
+
| Prop | Type | Default | Description |
|
|
468
|
+
| --- | --- | --- | --- |
|
|
469
|
+
| `className?` | `string` | — | — |
|
|
470
|
+
| `children?` | `(React.ReactNode & (React.ReactElement<unknown, string \| React.JSXElementConstructor<any>> \| React.ReactElement<unknown, string \| React.JSXElementConstructor<any>>[]))` | — | — |
|
|
471
|
+
| `orientation?` | `'horizontal' \| 'vertical'` | — | — |
|
|
472
|
+
| `isAttached?` | `boolean` | — | — |
|
|
473
|
+
| `type?` | `'single' \| 'multiple'` | — | — |
|
|
474
|
+
| `value?` | `string \| string[]` | — | — |
|
|
475
|
+
| `defaultValue?` | `string \| string[]` | — | — |
|
|
476
|
+
| `onValueChange?` | `((value: string) => void) \| ((value: string[]) => void)` | — | — |
|
|
477
|
+
| `asChild?` | `boolean` | — | — |
|
|
478
|
+
| `isDisabled?` | `boolean` | — | — |
|
|
479
|
+
|
|
480
|
+
Inherits all [`ViewProps`](https://reactnative.dev/docs/view#props). `ToggleButton.Group` is a discriminated union on `type`.
|
|
481
|
+
|
|
482
|
+
| `type` | `value` shape | Item role |
|
|
483
|
+
| ------------------ | ------------- | ---------------------------- |
|
|
484
|
+
| `single` (default) | `string` | `radio` in a `radiogroup` |
|
|
485
|
+
| `multiple` | `string[]` | `button` with `aria-pressed` |
|
|
486
|
+
|
|
487
|
+
## Anatomy
|
|
488
|
+
|
|
489
|
+
| `data-slot` | Element |
|
|
490
|
+
| --------------------- | --------------- |
|
|
491
|
+
| `toggle-button` | Root pressable |
|
|
492
|
+
| `toggle-button-label` | Text label |
|
|
493
|
+
| `toggle-button-icon` | Icon |
|
|
494
|
+
| `toggle-button-group` | Selection group |
|
|
495
|
+
|
|
496
|
+
## Accessibility
|
|
497
|
+
|
|
498
|
+
| Attribute | Behavior |
|
|
499
|
+
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
500
|
+
| **Standalone role** | `button` with `aria-pressed` reflecting selected state. |
|
|
501
|
+
| **Group `type="single"`** | Group is `radiogroup`; each item is `radio` with `aria-checked`. |
|
|
502
|
+
| **Group `type="multiple"`** | Group is `group`; each item is `button` with `aria-pressed`. |
|
|
503
|
+
| **`aria-label`** | Required on the group when there is no visible group label. Required on icon-only buttons. |
|
|
504
|
+
| **Keyboard** | Standalone: Space/Enter toggles. Grouped (web): the group is a single tab stop; arrow keys (following `orientation`) and Home/End move focus, skipping disabled items. With `type="single"`, moving focus also selects the item. Space/Enter toggles the focused item. |
|
|
505
|
+
| **Disabled** | `isDisabled` on an item or the group sets `aria-disabled` and blocks press. |
|