@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
|
@@ -1,5 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
Children,
|
|
3
|
+
createContext,
|
|
4
|
+
forwardRef,
|
|
5
|
+
isValidElement,
|
|
6
|
+
useContext,
|
|
7
|
+
useEffect,
|
|
8
|
+
useMemo,
|
|
9
|
+
type ReactElement,
|
|
10
|
+
type ReactNode,
|
|
11
|
+
} from 'react';
|
|
12
|
+
import { Platform, Text, View, type TextProps, type ViewProps } from 'react-native';
|
|
13
|
+
import { DragIndicator } from '@cdx-ui/icons';
|
|
3
14
|
import {
|
|
4
15
|
ListItemRoot as ListItemRootPrimitive,
|
|
5
16
|
Slot,
|
|
@@ -8,12 +19,23 @@ import {
|
|
|
8
19
|
type IListItemProps,
|
|
9
20
|
type ListItemCrossAlign,
|
|
10
21
|
} from '@cdx-ui/primitives';
|
|
11
|
-
import {
|
|
22
|
+
import {
|
|
23
|
+
cn,
|
|
24
|
+
composeEventHandlers,
|
|
25
|
+
mergeRefs,
|
|
26
|
+
ParentContext,
|
|
27
|
+
useParentContext,
|
|
28
|
+
useStyleContext,
|
|
29
|
+
} from '@cdx-ui/utils';
|
|
30
|
+
import { Icon } from '../Icon';
|
|
31
|
+
import { useReorderableRow } from '../ReorderableList/rowContext';
|
|
12
32
|
import {
|
|
13
33
|
listItemContentVariants,
|
|
14
34
|
listItemDescriptionVariants,
|
|
35
|
+
listItemDragHandleVariants,
|
|
15
36
|
listItemLeadingSlotVariants,
|
|
16
37
|
listItemMetaVariants,
|
|
38
|
+
listItemPressableRegionVariants,
|
|
17
39
|
listItemRootVariants,
|
|
18
40
|
listItemSectionHeaderLabelVariants,
|
|
19
41
|
listItemSectionHeaderVariants,
|
|
@@ -34,6 +56,40 @@ const useListItemStyleContext = (): Pick<ListItemVariantProps, 'crossAlign'> =>
|
|
|
34
56
|
// ROOT
|
|
35
57
|
// =============================================================================
|
|
36
58
|
|
|
59
|
+
/**
|
|
60
|
+
* `true` inside a pressable row's interactive element. `ListItem.DragHandle` reads it to warn when it
|
|
61
|
+
* is nested there instead of being a direct child of the row.
|
|
62
|
+
*/
|
|
63
|
+
const ListItemPressableContext = createContext(false);
|
|
64
|
+
|
|
65
|
+
interface DragHandlePartition {
|
|
66
|
+
handle: ReactElement;
|
|
67
|
+
position: 'start' | 'end';
|
|
68
|
+
rest: ReactNode[];
|
|
69
|
+
misplaced: boolean;
|
|
70
|
+
extra: boolean;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Finds a direct-child `ListItem.DragHandle` (matched by identity) of a pressable row. */
|
|
74
|
+
function partitionDragHandle(children: ReactNode): DragHandlePartition | undefined {
|
|
75
|
+
const items = Children.toArray(children);
|
|
76
|
+
const handleIndexes: number[] = [];
|
|
77
|
+
items.forEach((child, index) => {
|
|
78
|
+
if (isValidElement(child) && child.type === ListItemDragHandle) handleIndexes.push(index);
|
|
79
|
+
});
|
|
80
|
+
if (handleIndexes.length === 0) return undefined;
|
|
81
|
+
const [first] = handleIndexes;
|
|
82
|
+
return {
|
|
83
|
+
handle: items[first] as ReactElement,
|
|
84
|
+
position: first === 0 ? 'start' : 'end',
|
|
85
|
+
rest: items.filter((_, index) => !handleIndexes.includes(index)),
|
|
86
|
+
misplaced: first !== 0 && first !== items.length - 1,
|
|
87
|
+
extra: handleIndexes.length > 1,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
let hasWarnedDragHandlePlacement = false;
|
|
92
|
+
|
|
37
93
|
export interface ListItemProps extends Omit<IListItemProps, 'crossAlign'>, ListItemVariantProps {
|
|
38
94
|
/**
|
|
39
95
|
* Vertical density. `compact` reduces padding and min-height; typography stays the same.
|
|
@@ -60,6 +116,13 @@ export interface ListItemProps extends Omit<IListItemProps, 'crossAlign'>, ListI
|
|
|
60
116
|
className?: string;
|
|
61
117
|
}
|
|
62
118
|
|
|
119
|
+
/**
|
|
120
|
+
* A pressable row (`onPress`, or `asChild`) with a `ListItem.DragHandle` as its first or last
|
|
121
|
+
* direct child renders the handle beside the pressable element instead of inside it. The handle
|
|
122
|
+
* is matched by identity, so a `memo()` or wrapper component around it is not recognized. Under
|
|
123
|
+
* `asChild`, pass the handle and the single interactive element as siblings:
|
|
124
|
+
* `<ListItem asChild><ListItem.DragHandle /><Link>…</Link></ListItem>`.
|
|
125
|
+
*/
|
|
63
126
|
const ListItemRoot = forwardRef<View, ListItemProps>(
|
|
64
127
|
(
|
|
65
128
|
{
|
|
@@ -68,6 +131,7 @@ const ListItemRoot = forwardRef<View, ListItemProps>(
|
|
|
68
131
|
crossAlign: crossAlignProp = 'center',
|
|
69
132
|
className,
|
|
70
133
|
style,
|
|
134
|
+
children,
|
|
71
135
|
...props
|
|
72
136
|
},
|
|
73
137
|
ref,
|
|
@@ -75,22 +139,60 @@ const ListItemRoot = forwardRef<View, ListItemProps>(
|
|
|
75
139
|
const crossAlign: ListItemCrossAlign = crossAlignProp ?? 'center';
|
|
76
140
|
const parent = useParentContext();
|
|
77
141
|
const ctx = useMemo(() => ({ ...parent, [SCOPE]: { crossAlign } }), [parent, crossAlign]);
|
|
142
|
+
const isDragging = useReorderableRow()?.isDragging ?? false;
|
|
143
|
+
const isPressable = props.onPress != null || !!props.asChild;
|
|
144
|
+
const partition = isPressable ? partitionDragHandle(children) : undefined;
|
|
145
|
+
const misplacedHandle = !!partition && (partition.misplaced || partition.extra);
|
|
146
|
+
|
|
147
|
+
useEffect(() => {
|
|
148
|
+
if (__DEV__ && misplacedHandle && !hasWarnedDragHandlePlacement) {
|
|
149
|
+
hasWarnedDragHandlePlacement = true;
|
|
150
|
+
console.warn(
|
|
151
|
+
'[ListItem] Place one ListItem.DragHandle as the first or last child of a pressable ListItem. A handle elsewhere is moved to the end, and extra handles are dropped.',
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
}, [misplacedHandle]);
|
|
78
155
|
|
|
79
156
|
const computedClassName = cn(
|
|
80
157
|
listItemRootVariants({ size, showSeparator, crossAlign }),
|
|
81
158
|
className,
|
|
82
159
|
);
|
|
83
160
|
|
|
161
|
+
const splitProps = partition && {
|
|
162
|
+
accessory: (
|
|
163
|
+
<ListItemPressableContext.Provider value={false}>
|
|
164
|
+
{partition.handle}
|
|
165
|
+
</ListItemPressableContext.Provider>
|
|
166
|
+
),
|
|
167
|
+
accessoryPosition: partition.position,
|
|
168
|
+
pressableClassName: listItemPressableRegionVariants({
|
|
169
|
+
size: size ?? 'default',
|
|
170
|
+
handlePosition: partition.position,
|
|
171
|
+
}),
|
|
172
|
+
};
|
|
173
|
+
const regionChildren =
|
|
174
|
+
partition && props.asChild && partition.rest.length === 1
|
|
175
|
+
? partition.rest[0]
|
|
176
|
+
: partition?.rest;
|
|
177
|
+
|
|
84
178
|
return (
|
|
85
179
|
<ParentContext.Provider value={ctx}>
|
|
86
|
-
<
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
180
|
+
<ListItemPressableContext.Provider value={isPressable}>
|
|
181
|
+
<ListItemRootPrimitive
|
|
182
|
+
ref={ref}
|
|
183
|
+
className={computedClassName}
|
|
184
|
+
crossAlign={crossAlign}
|
|
185
|
+
style={style}
|
|
186
|
+
{...props}
|
|
187
|
+
{...splitProps}
|
|
188
|
+
{...mergeDataAttributes(
|
|
189
|
+
props,
|
|
190
|
+
dataAttributes({ slot: 'list-item', dragging: isDragging }),
|
|
191
|
+
)}
|
|
192
|
+
>
|
|
193
|
+
{partition ? regionChildren : children}
|
|
194
|
+
</ListItemRootPrimitive>
|
|
195
|
+
</ListItemPressableContext.Provider>
|
|
94
196
|
</ParentContext.Provider>
|
|
95
197
|
);
|
|
96
198
|
},
|
|
@@ -263,6 +365,116 @@ const ListItemTrailingSlot = forwardRef<View, ListItemTrailingSlotProps>(
|
|
|
263
365
|
|
|
264
366
|
ListItemTrailingSlot.displayName = 'ListItem.TrailingSlot';
|
|
265
367
|
|
|
368
|
+
function DefaultDragHandleGrip() {
|
|
369
|
+
return <Icon as={DragIndicator} className="size-5 text-content-secondary" />;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Screen reader hint for the default handle. Web omits it: react-native-web drops
|
|
374
|
+
* `accessibilityHint`, and dnd-kit describes the keyboard controls through `aria-describedby`.
|
|
375
|
+
*/
|
|
376
|
+
const DEFAULT_DRAG_HANDLE_HINT = Platform.select<string | undefined>({
|
|
377
|
+
ios: 'Drag to reorder, or swipe up or down to choose a move action.',
|
|
378
|
+
android: 'Drag to reorder, or open the actions menu to move this item.',
|
|
379
|
+
default: undefined,
|
|
380
|
+
});
|
|
381
|
+
|
|
382
|
+
const dragHandleOuterStyle = { flexShrink: 0 as const };
|
|
383
|
+
|
|
384
|
+
let hasWarnedDragHandleOutsideList = false;
|
|
385
|
+
let hasWarnedNestedDragHandle = false;
|
|
386
|
+
|
|
387
|
+
export interface ListItemDragHandleProps extends ViewProps {
|
|
388
|
+
/**
|
|
389
|
+
* Merges the handle onto the consumer's single child (for example an `IconButton`) so that
|
|
390
|
+
* element is the one focusable handle.
|
|
391
|
+
*/
|
|
392
|
+
asChild?: boolean;
|
|
393
|
+
className?: string;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* Drag activator for a row rendered by `ReorderableList`. Renders `null` outside a list. On a
|
|
398
|
+
* pressable `ListItem`, place it as the first or last direct child so it sits beside the row's
|
|
399
|
+
* pressable element rather than inside it.
|
|
400
|
+
*/
|
|
401
|
+
const ListItemDragHandle = forwardRef<View, ListItemDragHandleProps>(
|
|
402
|
+
(
|
|
403
|
+
{
|
|
404
|
+
asChild,
|
|
405
|
+
className,
|
|
406
|
+
style,
|
|
407
|
+
children,
|
|
408
|
+
accessibilityLabel = 'Reorder',
|
|
409
|
+
accessibilityHint,
|
|
410
|
+
accessibilityActions,
|
|
411
|
+
onAccessibilityAction,
|
|
412
|
+
...props
|
|
413
|
+
},
|
|
414
|
+
ref,
|
|
415
|
+
) => {
|
|
416
|
+
const row = useReorderableRow();
|
|
417
|
+
const insidePressable = useContext(ListItemPressableContext);
|
|
418
|
+
const isOutsideList = row === null;
|
|
419
|
+
|
|
420
|
+
useEffect(() => {
|
|
421
|
+
if (!__DEV__) return;
|
|
422
|
+
if (isOutsideList && !hasWarnedDragHandleOutsideList) {
|
|
423
|
+
hasWarnedDragHandleOutsideList = true;
|
|
424
|
+
console.warn(
|
|
425
|
+
'[ListItem.DragHandle] Rendered outside a ReorderableList row, so it renders nothing. Use it inside ReorderableList renderItem.',
|
|
426
|
+
);
|
|
427
|
+
}
|
|
428
|
+
if (insidePressable && !hasWarnedNestedDragHandle) {
|
|
429
|
+
hasWarnedNestedDragHandle = true;
|
|
430
|
+
console.warn(
|
|
431
|
+
"[ListItem.DragHandle] Nested inside a pressable ListItem, so it is part of the row's pressable element. Make it the first or last direct child of ListItem so it renders beside it.",
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
}, [isOutsideList, insidePressable]);
|
|
435
|
+
|
|
436
|
+
const handleRef = row?.handle.ref;
|
|
437
|
+
const hostRef = useMemo(() => mergeRefs(ref, handleRef), [ref, handleRef]);
|
|
438
|
+
|
|
439
|
+
if (!row) return null;
|
|
440
|
+
|
|
441
|
+
const { handle } = row;
|
|
442
|
+
const handleProps = {
|
|
443
|
+
...handle.props,
|
|
444
|
+
accessible: true,
|
|
445
|
+
accessibilityRole: 'button' as const,
|
|
446
|
+
accessibilityLabel,
|
|
447
|
+
accessibilityHint:
|
|
448
|
+
accessibilityHint ??
|
|
449
|
+
(row.accessibilityActions.length > 0 ? DEFAULT_DRAG_HANDLE_HINT : undefined),
|
|
450
|
+
accessibilityActions: [...row.accessibilityActions, ...(accessibilityActions ?? [])],
|
|
451
|
+
onAccessibilityAction: composeEventHandlers(onAccessibilityAction, row.onAccessibilityAction),
|
|
452
|
+
className: cn(listItemDragHandleVariants(), className),
|
|
453
|
+
...props,
|
|
454
|
+
...mergeDataAttributes(props, dataAttributes({ slot: 'list-item-drag-handle' })),
|
|
455
|
+
style: [handle.props.style, style],
|
|
456
|
+
};
|
|
457
|
+
|
|
458
|
+
if (asChild) {
|
|
459
|
+
return handle.wrap(
|
|
460
|
+
<Slot ref={hostRef} {...handleProps}>
|
|
461
|
+
{children}
|
|
462
|
+
</Slot>,
|
|
463
|
+
dragHandleOuterStyle,
|
|
464
|
+
);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
return handle.wrap(
|
|
468
|
+
<View ref={hostRef} {...handleProps}>
|
|
469
|
+
{children ?? <DefaultDragHandleGrip />}
|
|
470
|
+
</View>,
|
|
471
|
+
dragHandleOuterStyle,
|
|
472
|
+
);
|
|
473
|
+
},
|
|
474
|
+
);
|
|
475
|
+
|
|
476
|
+
ListItemDragHandle.displayName = 'ListItem.DragHandle';
|
|
477
|
+
|
|
266
478
|
const wrapSectionHeaderLabel = (children: ReactNode): ReactNode => {
|
|
267
479
|
if (typeof children === 'string' || typeof children === 'number') {
|
|
268
480
|
return <Text className={cn(listItemSectionHeaderLabelVariants())}>{children}</Text>;
|
|
@@ -310,11 +522,12 @@ export interface ListItemSectionHeaderProps extends ViewProps {
|
|
|
310
522
|
trailing?: ReactNode;
|
|
311
523
|
/**
|
|
312
524
|
* Background treatment. `ghost` has no fill and a bottom border; `subtle` adds a neutral fill
|
|
313
|
-
* (matching `subtle` on Avatar, Chip, and IconButton) and drops the bottom border.
|
|
314
|
-
*
|
|
525
|
+
* (matching `subtle` on Avatar, Chip, and IconButton) and drops the bottom border. `gradient`
|
|
526
|
+
* fades from the primary surface into a brand tint, left to right, and keeps the bottom border.
|
|
527
|
+
* Label typography is the same for all three.
|
|
315
528
|
* @default 'ghost'
|
|
316
|
-
* @remarks `'ghost' | 'subtle'`
|
|
317
|
-
* @fumadocsType `'ghost' | 'subtle'`
|
|
529
|
+
* @remarks `'ghost' | 'subtle' | 'gradient'`
|
|
530
|
+
* @fumadocsType `'ghost' | 'subtle' | 'gradient'`
|
|
318
531
|
*/
|
|
319
532
|
variant?: ListItemSectionHeaderVariant;
|
|
320
533
|
/**
|
|
@@ -367,6 +580,7 @@ ListItemSectionHeader.displayName = 'ListItem.SectionHeader';
|
|
|
367
580
|
|
|
368
581
|
type ListItemCompound = typeof ListItemRoot & {
|
|
369
582
|
LeadingSlot: typeof ListItemLeadingSlot;
|
|
583
|
+
DragHandle: typeof ListItemDragHandle;
|
|
370
584
|
Content: typeof ListItemContent;
|
|
371
585
|
Title: typeof ListItemTitle;
|
|
372
586
|
Description: typeof ListItemDescription;
|
|
@@ -377,6 +591,7 @@ type ListItemCompound = typeof ListItemRoot & {
|
|
|
377
591
|
|
|
378
592
|
export const ListItem = Object.assign(ListItemRoot, {
|
|
379
593
|
LeadingSlot: ListItemLeadingSlot,
|
|
594
|
+
DragHandle: ListItemDragHandle,
|
|
380
595
|
Content: ListItemContent,
|
|
381
596
|
Title: ListItemTitle,
|
|
382
597
|
Description: ListItemDescription,
|
|
@@ -389,8 +604,10 @@ export type { ListItemCrossAlign, ListItemSectionHeaderVariantProps, ListItemVar
|
|
|
389
604
|
export {
|
|
390
605
|
listItemContentVariants,
|
|
391
606
|
listItemDescriptionVariants,
|
|
607
|
+
listItemDragHandleVariants,
|
|
392
608
|
listItemLeadingSlotVariants,
|
|
393
609
|
listItemMetaVariants,
|
|
610
|
+
listItemPressableRegionVariants,
|
|
394
611
|
listItemRootVariants,
|
|
395
612
|
listItemSectionHeaderLabelVariants,
|
|
396
613
|
listItemSectionHeaderVariants,
|
|
@@ -31,6 +31,10 @@ export const listItemRootVariants = cva(
|
|
|
31
31
|
].join(' '),
|
|
32
32
|
default: 'data-[active=true]:bg-surface-primary-hover',
|
|
33
33
|
}),
|
|
34
|
+
'data-[dragging=true]:bg-surface-secondary',
|
|
35
|
+
// Native: changing the dragged row's zIndex mid-drag cancels the handle's pan on Fabric iOS;
|
|
36
|
+
// the drag engine stacks the active row itself.
|
|
37
|
+
Platform.select({ web: 'data-[dragging=true]:z-20', default: '' }),
|
|
34
38
|
],
|
|
35
39
|
{
|
|
36
40
|
variants: {
|
|
@@ -58,6 +62,37 @@ export const listItemRootVariants = cva(
|
|
|
58
62
|
},
|
|
59
63
|
);
|
|
60
64
|
|
|
65
|
+
// ── Pressable region (pressable row with a direct-child DragHandle) ─────────
|
|
66
|
+
//
|
|
67
|
+
// The root becomes a non-interactive container and keeps every visual above: the primitive
|
|
68
|
+
// mirrors the region's hover/active/focus state onto it, so the overlay, focus ring, and native
|
|
69
|
+
// tint still span the whole row. The region itself is transparent; negative margins extend it
|
|
70
|
+
// over the container's padding (and the gap beside the handle) so the hit area matches a row
|
|
71
|
+
// without a handle. A consumer `className` that changes the row's padding is not mirrored here.
|
|
72
|
+
|
|
73
|
+
export const listItemPressableRegionVariants = cva(
|
|
74
|
+
[
|
|
75
|
+
'relative flex-1 min-w-0 flex-row self-stretch gap-3 bg-transparent',
|
|
76
|
+
Platform.select({ web: 'outline-none', default: '' }),
|
|
77
|
+
],
|
|
78
|
+
{
|
|
79
|
+
variants: {
|
|
80
|
+
size: {
|
|
81
|
+
default: '-my-3 py-3',
|
|
82
|
+
compact: '-my-2 py-2',
|
|
83
|
+
},
|
|
84
|
+
handlePosition: {
|
|
85
|
+
start: '-ms-3 ps-3 -me-5 pe-5',
|
|
86
|
+
end: '-ms-5 ps-5 -me-3 pe-3',
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
defaultVariants: {
|
|
90
|
+
size: 'default',
|
|
91
|
+
handlePosition: 'start',
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
);
|
|
95
|
+
|
|
61
96
|
// ── Leading / trailing slots ─────────────────────────────────────────────────
|
|
62
97
|
|
|
63
98
|
export const listItemLeadingSlotVariants = cva([
|
|
@@ -79,6 +114,11 @@ export const listItemTrailingSlotVariants = cva(
|
|
|
79
114
|
},
|
|
80
115
|
);
|
|
81
116
|
|
|
117
|
+
export const listItemDragHandleVariants = cva([
|
|
118
|
+
'relative z-10 flex shrink-0 self-stretch items-center justify-center',
|
|
119
|
+
'web:cursor-grab web:active:cursor-grabbing',
|
|
120
|
+
]);
|
|
121
|
+
|
|
82
122
|
// ── Content stack (title / description / meta) ───────────────────────────────
|
|
83
123
|
|
|
84
124
|
export const listItemContentVariants = cva('relative z-10 flex min-w-0 flex-1 flex-col gap-1', {
|
|
@@ -114,6 +154,7 @@ export const listItemSectionHeaderVariants = cva(
|
|
|
114
154
|
ghost: [],
|
|
115
155
|
// The fill separates the header from its rows, so the bottom border is dropped.
|
|
116
156
|
subtle: 'bg-surface-neutral-subtle border-b-0',
|
|
157
|
+
gradient: 'bg-gradient-to-r from-surface-primary to-surface-brand-tint',
|
|
117
158
|
},
|
|
118
159
|
showDivider: {
|
|
119
160
|
true: ['border-t-4 border-solid border-t-surface-brand-strong/40', 'border-x-0'],
|