@pk-design/react-tailwind 1.5.4 → 1.7.0
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/dist/cjs/components/Accordion/Accordion.js +61 -0
- package/dist/cjs/components/Accordion/Accordion.js.map +1 -0
- package/dist/cjs/components/ActionSheet/ActionSheet.js +38 -0
- package/dist/cjs/components/ActionSheet/ActionSheet.js.map +1 -0
- package/dist/cjs/components/Alert/Alert.js +34 -0
- package/dist/cjs/components/Alert/Alert.js.map +1 -0
- package/dist/cjs/components/Badge/Badge.js +33 -0
- package/dist/cjs/components/Badge/Badge.js.map +1 -0
- package/dist/cjs/components/Banner/Banner.js +41 -0
- package/dist/cjs/components/Banner/Banner.js.map +1 -0
- package/dist/cjs/components/BodyText/BodyText.js +59 -0
- package/dist/cjs/components/BodyText/BodyText.js.map +1 -0
- package/dist/cjs/components/BottomNavigation/BottomNavigation.js +52 -0
- package/dist/cjs/components/BottomNavigation/BottomNavigation.js.map +1 -0
- package/dist/cjs/components/Breadcrumb/Breadcrumb.js +63 -0
- package/dist/cjs/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/cjs/components/Button/Button.js +118 -0
- package/dist/cjs/components/Button/Button.js.map +1 -0
- package/dist/cjs/components/ButtonGroup/ButtonGroup.js +100 -0
- package/dist/cjs/components/ButtonGroup/ButtonGroup.js.map +1 -0
- package/dist/cjs/components/Card/Card.js +65 -0
- package/dist/cjs/components/Card/Card.js.map +1 -0
- package/dist/cjs/components/Checkbox/Checkbox.js +64 -0
- package/dist/cjs/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/cjs/components/CheckboxGroup/CheckboxGroup.js +82 -0
- package/dist/cjs/components/CheckboxGroup/CheckboxGroup.js.map +1 -0
- package/dist/cjs/components/DataList/DataList.js +287 -0
- package/dist/cjs/components/DataList/DataList.js.map +1 -0
- package/dist/cjs/components/DataTable/DataTable.icons.js +20 -0
- package/dist/cjs/components/DataTable/DataTable.icons.js.map +1 -0
- package/dist/cjs/components/DataTable/DataTable.js +110 -0
- package/dist/cjs/components/DataTable/DataTable.js.map +1 -0
- package/dist/cjs/components/DataTable/DataTable.utils.js +87 -0
- package/dist/cjs/components/DataTable/DataTable.utils.js.map +1 -0
- package/dist/cjs/components/DetailedInformation/DetailedInformation.js +67 -0
- package/dist/cjs/components/DetailedInformation/DetailedInformation.js.map +1 -0
- package/dist/cjs/components/Dot/index.js +12 -0
- package/dist/cjs/components/Dot/index.js.map +1 -0
- package/dist/cjs/components/Drawer/Drawer.js +67 -0
- package/dist/cjs/components/Drawer/Drawer.js.map +1 -0
- package/dist/cjs/components/Dropdown/Dropdown.js +50 -0
- package/dist/cjs/components/Dropdown/Dropdown.js.map +1 -0
- package/dist/cjs/components/EmptyState/index.js +14 -0
- package/dist/cjs/components/EmptyState/index.js.map +1 -0
- package/dist/cjs/components/Flex/Flex.js +25 -0
- package/dist/cjs/components/Flex/Flex.js.map +1 -0
- package/dist/cjs/components/FloatingActionButton/FloatingActionButton.js +71 -0
- package/dist/cjs/components/FloatingActionButton/FloatingActionButton.js.map +1 -0
- package/dist/cjs/components/Grid/Grid.js +33 -0
- package/dist/cjs/components/Grid/Grid.js.map +1 -0
- package/dist/cjs/components/HeadingText/HeadingText.js +89 -0
- package/dist/cjs/components/HeadingText/HeadingText.js.map +1 -0
- package/dist/cjs/components/Icons/ArrowDownAZ.svg.js +46 -0
- package/dist/cjs/components/Icons/ArrowDownAZ.svg.js.map +1 -0
- package/dist/cjs/components/Icons/ArrowDownNarrowWide.svg.js +46 -0
- package/dist/cjs/components/Icons/ArrowDownNarrowWide.svg.js.map +1 -0
- package/dist/cjs/components/Icons/ArrowDownWideNarrow.svg.js +46 -0
- package/dist/cjs/components/Icons/ArrowDownWideNarrow.svg.js.map +1 -0
- package/dist/cjs/components/Icons/ArrowDownZA.svg.js +46 -0
- package/dist/cjs/components/Icons/ArrowDownZA.svg.js.map +1 -0
- package/dist/cjs/components/Icons/ArrowUpDown.svg.js +46 -0
- package/dist/cjs/components/Icons/ArrowUpDown.svg.js.map +1 -0
- package/dist/cjs/components/Icons/BadgeCheck.svg.js +48 -0
- package/dist/cjs/components/Icons/BadgeCheck.svg.js.map +1 -0
- package/dist/cjs/components/Icons/Check.svg.js +46 -0
- package/dist/cjs/components/Icons/Check.svg.js.map +1 -0
- package/dist/cjs/components/Icons/ChevronDown.svg.js +46 -0
- package/dist/cjs/components/Icons/ChevronDown.svg.js.map +1 -0
- package/dist/cjs/components/Icons/ChevronLeft.svg.js +46 -0
- package/dist/cjs/components/Icons/ChevronLeft.svg.js.map +1 -0
- package/dist/cjs/components/Icons/ChevronRight.svg.js +46 -0
- package/dist/cjs/components/Icons/ChevronRight.svg.js.map +1 -0
- package/dist/cjs/components/Icons/CircleAlert.svg.js +50 -0
- package/dist/cjs/components/Icons/CircleAlert.svg.js.map +1 -0
- package/dist/cjs/components/Icons/CircleCheck.svg.js +50 -0
- package/dist/cjs/components/Icons/CircleCheck.svg.js.map +1 -0
- package/dist/cjs/components/Icons/CirclePlus.svg.js +50 -0
- package/dist/cjs/components/Icons/CirclePlus.svg.js.map +1 -0
- package/dist/cjs/components/Icons/CircleX.svg.js +50 -0
- package/dist/cjs/components/Icons/CircleX.svg.js.map +1 -0
- package/dist/cjs/components/Icons/FolderPlus.svg.js +46 -0
- package/dist/cjs/components/Icons/FolderPlus.svg.js.map +1 -0
- package/dist/cjs/components/Icons/Info.svg.js +50 -0
- package/dist/cjs/components/Icons/Info.svg.js.map +1 -0
- package/dist/cjs/components/Icons/Search.svg.js +50 -0
- package/dist/cjs/components/Icons/Search.svg.js.map +1 -0
- package/dist/cjs/components/Icons/Slash.svg.js +46 -0
- package/dist/cjs/components/Icons/Slash.svg.js.map +1 -0
- package/dist/cjs/components/Icons/TriangleAlert.svg.js +46 -0
- package/dist/cjs/components/Icons/TriangleAlert.svg.js.map +1 -0
- package/dist/cjs/components/Icons/X.svg.js +46 -0
- package/dist/cjs/components/Icons/X.svg.js.map +1 -0
- package/dist/cjs/components/Input/Input.js +85 -0
- package/dist/cjs/components/Input/Input.js.map +1 -0
- package/dist/cjs/components/Label/Label.js +14 -0
- package/dist/cjs/components/Label/Label.js.map +1 -0
- package/dist/cjs/components/Loader/index.js +18 -0
- package/dist/cjs/components/Loader/index.js.map +1 -0
- package/dist/cjs/components/MobileHeader/MobileHeader.js +45 -0
- package/dist/cjs/components/MobileHeader/MobileHeader.js.map +1 -0
- package/dist/cjs/components/MobilePicker/MobilePicker.js +368 -0
- package/dist/cjs/components/MobilePicker/MobilePicker.js.map +1 -0
- package/dist/cjs/components/MobileStepper/MobileStepper.js +33 -0
- package/dist/cjs/components/MobileStepper/MobileStepper.js.map +1 -0
- package/dist/cjs/components/Pagination/Pagination.js +33 -0
- package/dist/cjs/components/Pagination/Pagination.js.map +1 -0
- package/dist/cjs/components/Pagination/usePagination.js +33 -0
- package/dist/cjs/components/Pagination/usePagination.js.map +1 -0
- package/dist/cjs/components/PasswordInput/PasswordInput.js +56 -0
- package/dist/cjs/components/PasswordInput/PasswordInput.js.map +1 -0
- package/dist/cjs/components/PinInput/PinInput.js +98 -0
- package/dist/cjs/components/PinInput/PinInput.js.map +1 -0
- package/dist/cjs/components/PullToRefresh/PullToRefresh.js +83 -0
- package/dist/cjs/components/PullToRefresh/PullToRefresh.js.map +1 -0
- package/dist/cjs/components/QuantityStepper/QuantityStepper.js +77 -0
- package/dist/cjs/components/QuantityStepper/QuantityStepper.js.map +1 -0
- package/dist/cjs/components/Radio/Radio.js +34 -0
- package/dist/cjs/components/Radio/Radio.js.map +1 -0
- package/dist/cjs/components/RadioGroup/RadioGroup.js +50 -0
- package/dist/cjs/components/RadioGroup/RadioGroup.js.map +1 -0
- package/dist/cjs/components/RadioSwitch/RadioSwitch.js +116 -0
- package/dist/cjs/components/RadioSwitch/RadioSwitch.js.map +1 -0
- package/dist/cjs/components/RangeInput/RangeInput.js +66 -0
- package/dist/cjs/components/RangeInput/RangeInput.js.map +1 -0
- package/dist/cjs/components/RangeSlider/RangeSlider.js +167 -0
- package/dist/cjs/components/RangeSlider/RangeSlider.js.map +1 -0
- package/dist/cjs/components/SegmentedControl/SegmentedControl.js +64 -0
- package/dist/cjs/components/SegmentedControl/SegmentedControl.js.map +1 -0
- package/dist/cjs/components/SelectBox/SelectBox.js +305 -0
- package/dist/cjs/components/SelectBox/SelectBox.js.map +1 -0
- package/dist/cjs/components/Skeleton/Skeleton.js +36 -0
- package/dist/cjs/components/Skeleton/Skeleton.js.map +1 -0
- package/dist/cjs/components/StatusPill/StatusPill.js +46 -0
- package/dist/cjs/components/StatusPill/StatusPill.js.map +1 -0
- package/dist/cjs/components/StickyActionBar/StickyActionBar.js +22 -0
- package/dist/cjs/components/StickyActionBar/StickyActionBar.js.map +1 -0
- package/dist/cjs/components/SwipeableRow/SwipeableRow.js +187 -0
- package/dist/cjs/components/SwipeableRow/SwipeableRow.js.map +1 -0
- package/dist/cjs/components/SwipeableTabs/SwipeableTabs.js +91 -0
- package/dist/cjs/components/SwipeableTabs/SwipeableTabs.js.map +1 -0
- package/dist/cjs/components/Table/Table.js +57 -0
- package/dist/cjs/components/Table/Table.js.map +1 -0
- package/dist/cjs/components/Tabs/Tabs.js +53 -0
- package/dist/cjs/components/Tabs/Tabs.js.map +1 -0
- package/dist/cjs/components/TextContent/TextContent.js +47 -0
- package/dist/cjs/components/TextContent/TextContent.js.map +1 -0
- package/dist/cjs/components/Textarea/Textarea.js +64 -0
- package/dist/cjs/components/Textarea/Textarea.js.map +1 -0
- package/dist/cjs/components/Toast/Toast.js +96 -0
- package/dist/cjs/components/Toast/Toast.js.map +1 -0
- package/dist/cjs/components/Toast/ToastProvider.js +151 -0
- package/dist/cjs/components/Toast/ToastProvider.js.map +1 -0
- package/dist/cjs/components/VirtualizedDataTable/VirtualizedDataTable.js +122 -0
- package/dist/cjs/components/VirtualizedDataTable/VirtualizedDataTable.js.map +1 -0
- package/dist/cjs/components/VirtualizedDataTable/VirtualizedRow.js +48 -0
- package/dist/cjs/components/VirtualizedDataTable/VirtualizedRow.js.map +1 -0
- package/dist/cjs/components/WheelPicker/WheelPicker.js +82 -0
- package/dist/cjs/components/WheelPicker/WheelPicker.js.map +1 -0
- package/dist/cjs/components/common-responsive.js +310 -0
- package/dist/cjs/components/common-responsive.js.map +1 -0
- package/dist/cjs/hooks/use-debounce.js +31 -0
- package/dist/cjs/hooks/use-debounce.js.map +1 -0
- package/dist/cjs/hooks/use-is-mobile.js +24 -0
- package/dist/cjs/hooks/use-is-mobile.js.map +1 -0
- package/dist/cjs/hooks/use-is-tablet-or-mobile.js +13 -0
- package/dist/cjs/hooks/use-is-tablet-or-mobile.js.map +1 -0
- package/dist/cjs/hooks/use-is-tablet.js +21 -0
- package/dist/cjs/hooks/use-is-tablet.js.map +1 -0
- package/dist/cjs/index.js +163 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/react-tailwind.css +2 -0
- package/dist/cjs/react-tailwind.css.map +1 -0
- package/dist/cjs/utils/build-classname.js +8 -0
- package/dist/cjs/utils/build-classname.js.map +1 -0
- package/dist/cjs/utils/get.js +20 -0
- package/dist/cjs/utils/get.js.map +1 -0
- package/dist/cjs/utils/is-array.js +12 -0
- package/dist/cjs/utils/is-array.js.map +1 -0
- package/dist/cjs/utils/is-empty.js +26 -0
- package/dist/cjs/utils/is-empty.js.map +1 -0
- package/dist/es/components/Accordion/Accordion.js +59 -0
- package/dist/es/components/Accordion/Accordion.js.map +1 -0
- package/dist/es/components/ActionSheet/ActionSheet.js +36 -0
- package/dist/es/components/ActionSheet/ActionSheet.js.map +1 -0
- package/dist/es/components/Alert/Alert.js +32 -0
- package/dist/es/components/Alert/Alert.js.map +1 -0
- package/dist/es/components/Badge/Badge.js +31 -0
- package/dist/es/components/Badge/Badge.js.map +1 -0
- package/dist/es/components/Banner/Banner.js +39 -0
- package/dist/es/components/Banner/Banner.js.map +1 -0
- package/dist/es/components/BodyText/BodyText.js +57 -0
- package/dist/es/components/BodyText/BodyText.js.map +1 -0
- package/dist/es/components/BottomNavigation/BottomNavigation.js +50 -0
- package/dist/es/components/BottomNavigation/BottomNavigation.js.map +1 -0
- package/dist/es/components/Breadcrumb/Breadcrumb.js +61 -0
- package/dist/es/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/es/components/Button/Button.js +116 -0
- package/dist/es/components/Button/Button.js.map +1 -0
- package/dist/es/components/ButtonGroup/ButtonGroup.js +98 -0
- package/dist/es/components/ButtonGroup/ButtonGroup.js.map +1 -0
- package/dist/es/components/Card/Card.js +57 -0
- package/dist/es/components/Card/Card.js.map +1 -0
- package/dist/es/components/Checkbox/Checkbox.js +62 -0
- package/dist/es/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/es/components/CheckboxGroup/CheckboxGroup.js +80 -0
- package/dist/es/components/CheckboxGroup/CheckboxGroup.js.map +1 -0
- package/dist/es/components/DataList/DataList.js +285 -0
- package/dist/es/components/DataList/DataList.js.map +1 -0
- package/dist/es/components/DataTable/DataTable.icons.js +17 -0
- package/dist/es/components/DataTable/DataTable.icons.js.map +1 -0
- package/dist/es/components/DataTable/DataTable.js +108 -0
- package/dist/es/components/DataTable/DataTable.js.map +1 -0
- package/dist/es/components/DataTable/DataTable.utils.js +83 -0
- package/dist/es/components/DataTable/DataTable.utils.js.map +1 -0
- package/dist/es/components/DetailedInformation/DetailedInformation.js +65 -0
- package/dist/es/components/DetailedInformation/DetailedInformation.js.map +1 -0
- package/dist/es/components/Dot/index.js +10 -0
- package/dist/es/components/Dot/index.js.map +1 -0
- package/dist/es/components/Drawer/Drawer.js +65 -0
- package/dist/es/components/Drawer/Drawer.js.map +1 -0
- package/dist/es/components/Dropdown/Dropdown.js +48 -0
- package/dist/es/components/Dropdown/Dropdown.js.map +1 -0
- package/dist/es/components/EmptyState/index.js +12 -0
- package/dist/es/components/EmptyState/index.js.map +1 -0
- package/dist/es/components/Flex/Flex.js +22 -0
- package/dist/es/components/Flex/Flex.js.map +1 -0
- package/dist/es/components/FloatingActionButton/FloatingActionButton.js +69 -0
- package/dist/es/components/FloatingActionButton/FloatingActionButton.js.map +1 -0
- package/dist/es/components/Grid/Grid.js +30 -0
- package/dist/es/components/Grid/Grid.js.map +1 -0
- package/dist/es/components/HeadingText/HeadingText.js +87 -0
- package/dist/es/components/HeadingText/HeadingText.js.map +1 -0
- package/dist/es/components/Icons/ArrowDownAZ.svg.js +23 -0
- package/dist/es/components/Icons/ArrowDownAZ.svg.js.map +1 -0
- package/dist/es/components/Icons/ArrowDownNarrowWide.svg.js +23 -0
- package/dist/es/components/Icons/ArrowDownNarrowWide.svg.js.map +1 -0
- package/dist/es/components/Icons/ArrowDownWideNarrow.svg.js +23 -0
- package/dist/es/components/Icons/ArrowDownWideNarrow.svg.js.map +1 -0
- package/dist/es/components/Icons/ArrowDownZA.svg.js +23 -0
- package/dist/es/components/Icons/ArrowDownZA.svg.js.map +1 -0
- package/dist/es/components/Icons/ArrowUpDown.svg.js +23 -0
- package/dist/es/components/Icons/ArrowUpDown.svg.js.map +1 -0
- package/dist/es/components/Icons/BadgeCheck.svg.js +25 -0
- package/dist/es/components/Icons/BadgeCheck.svg.js.map +1 -0
- package/dist/es/components/Icons/Check.svg.js +23 -0
- package/dist/es/components/Icons/Check.svg.js.map +1 -0
- package/dist/es/components/Icons/ChevronDown.svg.js +23 -0
- package/dist/es/components/Icons/ChevronDown.svg.js.map +1 -0
- package/dist/es/components/Icons/ChevronLeft.svg.js +23 -0
- package/dist/es/components/Icons/ChevronLeft.svg.js.map +1 -0
- package/dist/es/components/Icons/ChevronRight.svg.js +23 -0
- package/dist/es/components/Icons/ChevronRight.svg.js.map +1 -0
- package/dist/es/components/Icons/CircleAlert.svg.js +27 -0
- package/dist/es/components/Icons/CircleAlert.svg.js.map +1 -0
- package/dist/es/components/Icons/CircleCheck.svg.js +27 -0
- package/dist/es/components/Icons/CircleCheck.svg.js.map +1 -0
- package/dist/es/components/Icons/CirclePlus.svg.js +27 -0
- package/dist/es/components/Icons/CirclePlus.svg.js.map +1 -0
- package/dist/es/components/Icons/CircleX.svg.js +27 -0
- package/dist/es/components/Icons/CircleX.svg.js.map +1 -0
- package/dist/es/components/Icons/FolderPlus.svg.js +23 -0
- package/dist/es/components/Icons/FolderPlus.svg.js.map +1 -0
- package/dist/es/components/Icons/Info.svg.js +27 -0
- package/dist/es/components/Icons/Info.svg.js.map +1 -0
- package/dist/es/components/Icons/Search.svg.js +27 -0
- package/dist/es/components/Icons/Search.svg.js.map +1 -0
- package/dist/es/components/Icons/Slash.svg.js +23 -0
- package/dist/es/components/Icons/Slash.svg.js.map +1 -0
- package/dist/es/components/Icons/TriangleAlert.svg.js +23 -0
- package/dist/es/components/Icons/TriangleAlert.svg.js.map +1 -0
- package/dist/es/components/Icons/X.svg.js +23 -0
- package/dist/es/components/Icons/X.svg.js.map +1 -0
- package/dist/es/components/Input/Input.js +82 -0
- package/dist/es/components/Input/Input.js.map +1 -0
- package/dist/es/components/Label/Label.js +12 -0
- package/dist/es/components/Label/Label.js.map +1 -0
- package/dist/es/components/Loader/index.js +16 -0
- package/dist/es/components/Loader/index.js.map +1 -0
- package/dist/es/components/MobileHeader/MobileHeader.js +43 -0
- package/dist/es/components/MobileHeader/MobileHeader.js.map +1 -0
- package/dist/es/components/MobilePicker/MobilePicker.js +366 -0
- package/dist/es/components/MobilePicker/MobilePicker.js.map +1 -0
- package/dist/es/components/MobileStepper/MobileStepper.js +31 -0
- package/dist/es/components/MobileStepper/MobileStepper.js.map +1 -0
- package/dist/es/components/Pagination/Pagination.js +31 -0
- package/dist/es/components/Pagination/Pagination.js.map +1 -0
- package/dist/es/components/Pagination/usePagination.js +30 -0
- package/dist/es/components/Pagination/usePagination.js.map +1 -0
- package/dist/es/components/PasswordInput/PasswordInput.js +51 -0
- package/dist/es/components/PasswordInput/PasswordInput.js.map +1 -0
- package/dist/es/components/PinInput/PinInput.js +96 -0
- package/dist/es/components/PinInput/PinInput.js.map +1 -0
- package/dist/es/components/PullToRefresh/PullToRefresh.js +81 -0
- package/dist/es/components/PullToRefresh/PullToRefresh.js.map +1 -0
- package/dist/es/components/QuantityStepper/QuantityStepper.js +75 -0
- package/dist/es/components/QuantityStepper/QuantityStepper.js.map +1 -0
- package/dist/es/components/Radio/Radio.js +32 -0
- package/dist/es/components/Radio/Radio.js.map +1 -0
- package/dist/es/components/RadioGroup/RadioGroup.js +48 -0
- package/dist/es/components/RadioGroup/RadioGroup.js.map +1 -0
- package/dist/es/components/RadioSwitch/RadioSwitch.js +114 -0
- package/dist/es/components/RadioSwitch/RadioSwitch.js.map +1 -0
- package/dist/es/components/RangeInput/RangeInput.js +64 -0
- package/dist/es/components/RangeInput/RangeInput.js.map +1 -0
- package/dist/es/components/RangeSlider/RangeSlider.js +165 -0
- package/dist/es/components/RangeSlider/RangeSlider.js.map +1 -0
- package/dist/es/components/SegmentedControl/SegmentedControl.js +62 -0
- package/dist/es/components/SegmentedControl/SegmentedControl.js.map +1 -0
- package/dist/es/components/SelectBox/SelectBox.js +303 -0
- package/dist/es/components/SelectBox/SelectBox.js.map +1 -0
- package/dist/es/components/Skeleton/Skeleton.js +34 -0
- package/dist/es/components/Skeleton/Skeleton.js.map +1 -0
- package/dist/es/components/StatusPill/StatusPill.js +44 -0
- package/dist/es/components/StatusPill/StatusPill.js.map +1 -0
- package/dist/es/components/StickyActionBar/StickyActionBar.js +20 -0
- package/dist/es/components/StickyActionBar/StickyActionBar.js.map +1 -0
- package/dist/es/components/SwipeableRow/SwipeableRow.js +185 -0
- package/dist/es/components/SwipeableRow/SwipeableRow.js.map +1 -0
- package/dist/es/components/SwipeableTabs/SwipeableTabs.js +89 -0
- package/dist/es/components/SwipeableTabs/SwipeableTabs.js.map +1 -0
- package/dist/es/components/Table/Table.js +48 -0
- package/dist/es/components/Table/Table.js.map +1 -0
- package/dist/es/components/Tabs/Tabs.js +51 -0
- package/dist/es/components/Tabs/Tabs.js.map +1 -0
- package/dist/es/components/TextContent/TextContent.js +45 -0
- package/dist/es/components/TextContent/TextContent.js.map +1 -0
- package/dist/es/components/Textarea/Textarea.js +62 -0
- package/dist/es/components/Textarea/Textarea.js.map +1 -0
- package/dist/es/components/Toast/Toast.js +94 -0
- package/dist/es/components/Toast/Toast.js.map +1 -0
- package/dist/es/components/Toast/ToastProvider.js +148 -0
- package/dist/es/components/Toast/ToastProvider.js.map +1 -0
- package/dist/es/components/VirtualizedDataTable/VirtualizedDataTable.js +120 -0
- package/dist/es/components/VirtualizedDataTable/VirtualizedDataTable.js.map +1 -0
- package/dist/es/components/VirtualizedDataTable/VirtualizedRow.js +46 -0
- package/dist/es/components/VirtualizedDataTable/VirtualizedRow.js.map +1 -0
- package/dist/es/components/WheelPicker/WheelPicker.js +80 -0
- package/dist/es/components/WheelPicker/WheelPicker.js.map +1 -0
- package/dist/es/components/common-responsive.js +287 -0
- package/dist/es/components/common-responsive.js.map +1 -0
- package/dist/es/hooks/use-debounce.js +28 -0
- package/dist/es/hooks/use-debounce.js.map +1 -0
- package/dist/es/hooks/use-is-mobile.js +22 -0
- package/dist/es/hooks/use-is-mobile.js.map +1 -0
- package/dist/es/hooks/use-is-tablet-or-mobile.js +11 -0
- package/dist/es/hooks/use-is-tablet-or-mobile.js.map +1 -0
- package/dist/es/hooks/use-is-tablet.js +19 -0
- package/dist/es/hooks/use-is-tablet.js.map +1 -0
- package/dist/es/index.js +67 -0
- package/dist/es/index.js.map +1 -0
- package/dist/es/react-tailwind.css +2 -0
- package/dist/es/react-tailwind.css.map +1 -0
- package/dist/es/utils/build-classname.js +6 -0
- package/dist/es/utils/build-classname.js.map +1 -0
- package/dist/es/utils/get.js +18 -0
- package/dist/es/utils/get.js.map +1 -0
- package/dist/es/utils/is-array.js +10 -0
- package/dist/es/utils/is-array.js.map +1 -0
- package/dist/es/utils/is-empty.js +24 -0
- package/dist/es/utils/is-empty.js.map +1 -0
- package/dist/react-tailwind.cjs.js +3596 -630
- package/dist/react-tailwind.cjs.js.map +1 -1
- package/dist/react-tailwind.es.js +3561 -623
- package/dist/react-tailwind.es.js.map +1 -1
- package/dist/types/components/ActionSheet/ActionSheet.d.ts +5 -0
- package/dist/types/components/ActionSheet/ActionSheet.test.d.ts +1 -0
- package/dist/types/components/ActionSheet/ActionSheet.types.d.ts +44 -0
- package/dist/types/components/ActionSheet/index.d.ts +2 -0
- package/dist/types/components/Badge/Badge.types.d.ts +1 -1
- package/dist/types/components/BodyText/BodyText.d.ts +1 -1
- package/dist/types/components/BodyText/BodyText.types.d.ts +47 -8
- package/dist/types/components/BottomNavigation/BottomNavigation.d.ts +5 -0
- package/dist/types/components/BottomNavigation/BottomNavigation.test.d.ts +1 -0
- package/dist/types/components/BottomNavigation/BottomNavigation.types.d.ts +41 -0
- package/dist/types/components/BottomNavigation/index.d.ts +2 -0
- package/dist/types/components/Breadcrumb/Breadcrumb.d.ts +2 -3
- package/dist/types/components/Breadcrumb/Breadcrumb.types.d.ts +43 -10
- package/dist/types/components/Button/Button.types.d.ts +17 -63
- package/dist/types/components/ButtonGroup/ButtonGroup.types.d.ts +16 -0
- package/dist/types/components/Card/Card.d.ts +7 -1
- package/dist/types/components/Card/Card.types.d.ts +73 -42
- package/dist/types/components/Checkbox/Checkbox.types.d.ts +28 -1
- package/dist/types/components/CheckboxGroup/CheckboxGroup.types.d.ts +53 -1
- package/dist/types/components/DataList/DataList.d.ts +5 -0
- package/dist/types/components/DataList/DataList.test.d.ts +1 -0
- package/dist/types/components/DataList/DataList.types.d.ts +81 -0
- package/dist/types/components/DataList/index.d.ts +2 -0
- package/dist/types/components/DataTable/DataTable.d.ts +1 -1
- package/dist/types/components/DataTable/DataTable.types.d.ts +10 -0
- package/dist/types/components/DetailedInformation/DetailedInformation.d.ts +1 -1
- package/dist/types/components/DetailedInformation/DetailedInformation.types.d.ts +47 -3
- package/dist/types/components/Drawer/Drawer.types.d.ts +37 -13
- package/dist/types/components/Dropdown/Dropdown.types.d.ts +17 -1
- package/dist/types/components/Flex/Flex.d.ts +3 -0
- package/dist/types/components/Flex/Flex.test.d.ts +1 -0
- package/dist/types/components/Flex/Flex.types.d.ts +92 -0
- package/dist/types/components/Flex/index.d.ts +2 -0
- package/dist/types/components/FloatingActionButton/FloatingActionButton.d.ts +5 -0
- package/dist/types/components/FloatingActionButton/FloatingActionButton.test.d.ts +1 -0
- package/dist/types/components/FloatingActionButton/FloatingActionButton.types.d.ts +48 -0
- package/dist/types/components/FloatingActionButton/index.d.ts +2 -0
- package/dist/types/components/Grid/Grid.d.ts +3 -0
- package/dist/types/components/Grid/Grid.test.d.ts +1 -0
- package/dist/types/components/Grid/Grid.types.d.ts +136 -0
- package/dist/types/components/Grid/index.d.ts +2 -0
- package/dist/types/components/HeadingText/HeadingText.d.ts +7 -7
- package/dist/types/components/HeadingText/HeadingText.test.d.ts +1 -0
- package/dist/types/components/HeadingText/HeadingText.types.d.ts +56 -3
- package/dist/types/components/Input/Input.d.ts +4 -2
- package/dist/types/components/Input/Input.types.d.ts +36 -3
- package/dist/types/components/Loader/index.d.ts +1 -1
- package/dist/types/components/MobileHeader/MobileHeader.d.ts +5 -0
- package/dist/types/components/MobileHeader/MobileHeader.test.d.ts +1 -0
- package/dist/types/components/MobileHeader/MobileHeader.types.d.ts +49 -0
- package/dist/types/components/MobileHeader/index.d.ts +2 -0
- package/dist/types/components/MobilePicker/MobilePicker.d.ts +6 -0
- package/dist/types/components/MobilePicker/MobilePicker.test.d.ts +1 -0
- package/dist/types/components/MobilePicker/MobilePicker.types.d.ts +90 -0
- package/dist/types/components/MobilePicker/index.d.ts +2 -0
- package/dist/types/components/MobileStepper/MobileStepper.d.ts +5 -0
- package/dist/types/components/MobileStepper/MobileStepper.test.d.ts +1 -0
- package/dist/types/components/MobileStepper/MobileStepper.types.d.ts +28 -0
- package/dist/types/components/MobileStepper/index.d.ts +2 -0
- package/dist/types/components/PasswordInput/PasswordInput.d.ts +8 -4
- package/dist/types/components/PasswordInput/PasswordInput.types.d.ts +8 -0
- package/dist/types/components/PinInput/PinInput.d.ts +5 -0
- package/dist/types/components/PinInput/PinInput.test.d.ts +1 -0
- package/dist/types/components/PinInput/PinInput.types.d.ts +29 -0
- package/dist/types/components/PinInput/index.d.ts +2 -0
- package/dist/types/components/PullToRefresh/PullToRefresh.d.ts +5 -0
- package/dist/types/components/PullToRefresh/PullToRefresh.test.d.ts +1 -0
- package/dist/types/components/PullToRefresh/PullToRefresh.types.d.ts +23 -0
- package/dist/types/components/PullToRefresh/index.d.ts +2 -0
- package/dist/types/components/QuantityStepper/QuantityStepper.d.ts +3 -0
- package/dist/types/components/QuantityStepper/QuantityStepper.test.d.ts +1 -0
- package/dist/types/components/QuantityStepper/QuantityStepper.types.d.ts +66 -0
- package/dist/types/components/QuantityStepper/index.d.ts +2 -0
- package/dist/types/components/Radio/Radio.d.ts +1 -1
- package/dist/types/components/Radio/Radio.types.d.ts +12 -2
- package/dist/types/components/RadioGroup/RadioGroup.d.ts +1 -1
- package/dist/types/components/RadioGroup/RadioGroup.types.d.ts +41 -13
- package/dist/types/components/RadioSwitch/RadioSwitch.d.ts +0 -4
- package/dist/types/components/RadioSwitch/RadioSwitch.types.d.ts +6 -31
- package/dist/types/components/RangeInput/RangeInput.d.ts +1 -1
- package/dist/types/components/RangeInput/RangeInput.types.d.ts +14 -1
- package/dist/types/components/RangeSlider/RangeSlider.d.ts +1 -1
- package/dist/types/components/RangeSlider/RangeSlider.types.d.ts +28 -13
- package/dist/types/components/SegmentedControl/SegmentedControl.d.ts +3 -0
- package/dist/types/components/SegmentedControl/SegmentedControl.test.d.ts +1 -0
- package/dist/types/components/SegmentedControl/SegmentedControl.types.d.ts +53 -0
- package/dist/types/components/SegmentedControl/index.d.ts +2 -0
- package/dist/types/components/SelectBox/SelectBox.types.d.ts +32 -14
- package/dist/types/components/Skeleton/Skeleton.d.ts +2 -0
- package/dist/types/components/Skeleton/Skeleton.test.d.ts +1 -0
- package/dist/types/components/Skeleton/Skeleton.types.d.ts +38 -0
- package/dist/types/components/Skeleton/index.d.ts +2 -0
- package/dist/types/components/StatusPill/StatusPill.d.ts +2 -0
- package/dist/types/components/StatusPill/StatusPill.test.d.ts +1 -0
- package/dist/types/components/StatusPill/StatusPill.types.d.ts +29 -0
- package/dist/types/components/StatusPill/index.d.ts +2 -0
- package/dist/types/components/StickyActionBar/StickyActionBar.d.ts +2 -0
- package/dist/types/components/StickyActionBar/StickyActionBar.test.d.ts +1 -0
- package/dist/types/components/StickyActionBar/StickyActionBar.types.d.ts +30 -0
- package/dist/types/components/StickyActionBar/index.d.ts +2 -0
- package/dist/types/components/SwipeableRow/SwipeableRow.d.ts +3 -0
- package/dist/types/components/SwipeableRow/SwipeableRow.test.d.ts +1 -0
- package/dist/types/components/SwipeableRow/SwipeableRow.types.d.ts +42 -0
- package/dist/types/components/SwipeableRow/index.d.ts +2 -0
- package/dist/types/components/SwipeableTabs/SwipeableTabs.d.ts +5 -0
- package/dist/types/components/SwipeableTabs/SwipeableTabs.test.d.ts +1 -0
- package/dist/types/components/SwipeableTabs/SwipeableTabs.types.d.ts +38 -0
- package/dist/types/components/SwipeableTabs/index.d.ts +2 -0
- package/dist/types/components/TextContent/TextContent.d.ts +2 -2
- package/dist/types/components/TextContent/TextContent.types.d.ts +47 -7
- package/dist/types/components/Textarea/Textarea.types.d.ts +37 -3
- package/dist/types/components/Toast/Toast.d.ts +1 -1
- package/dist/types/components/Toast/Toast.types.d.ts +117 -43
- package/dist/types/components/Toast/ToastProvider.d.ts +3 -6
- package/dist/types/components/WheelPicker/WheelPicker.d.ts +5 -0
- package/dist/types/components/WheelPicker/WheelPicker.test.d.ts +1 -0
- package/dist/types/components/WheelPicker/WheelPicker.types.d.ts +35 -0
- package/dist/types/components/WheelPicker/index.d.ts +2 -0
- package/dist/types/components/common-responsive.d.ts +57 -0
- package/dist/types/index.d.ts +19 -0
- package/package.json +11 -3
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var SwipeableRow = require('../SwipeableRow/SwipeableRow.js');
|
|
6
|
+
var Checkbox = require('../Checkbox/Checkbox.js');
|
|
7
|
+
var Pagination = require('../Pagination/Pagination.js');
|
|
8
|
+
var Input = require('../Input/Input.js');
|
|
9
|
+
var Drawer = require('../Drawer/Drawer.js');
|
|
10
|
+
var Button = require('../Button/Button.js');
|
|
11
|
+
var get = require('../../utils/get.js');
|
|
12
|
+
var buildClassname = require('../../utils/build-classname.js');
|
|
13
|
+
|
|
14
|
+
function SearchIcon() {
|
|
15
|
+
return (jsxRuntime.jsx("svg", { className: "size-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }));
|
|
16
|
+
}
|
|
17
|
+
function FilterIcon() {
|
|
18
|
+
return (jsxRuntime.jsx("svg", { className: "size-3.5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z" }) }));
|
|
19
|
+
}
|
|
20
|
+
function SortIcon() {
|
|
21
|
+
return (jsxRuntime.jsx("svg", { className: "size-3.5 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4" }) }));
|
|
22
|
+
}
|
|
23
|
+
function CheckIcon() {
|
|
24
|
+
return (jsxRuntime.jsx("svg", { className: "size-4 text-blue-600 dark:text-blue-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2.5, d: "M5 13l4 4L19 7" }) }));
|
|
25
|
+
}
|
|
26
|
+
const parseNumericValue = (val) => {
|
|
27
|
+
if (typeof val === 'number')
|
|
28
|
+
return val;
|
|
29
|
+
if (val === null || val === undefined)
|
|
30
|
+
return NaN;
|
|
31
|
+
const cleaned = String(val).replace(/[^0-9.-]/g, '');
|
|
32
|
+
return cleaned !== '' ? Number(cleaned) : NaN;
|
|
33
|
+
};
|
|
34
|
+
function DataList({ items, columns, renderItem, searchable = false, searchQuery: externalSearchQuery, onSearchChange, searchFields, filterFields, selectedFilters: externalFilters, onFilterChange, sorting: externalSorting, onSortChange, swipeableActions, rowKey = 'id', selectable = false, selectedKeys = [], onSelectionChange, onItemClick, loading = false, emptyMessage = 'No items found', pagination, setPagination, containerClass = '', itemClass = '', }) {
|
|
35
|
+
// Internal Search State
|
|
36
|
+
const [internalSearchQuery, setInternalSearchQuery] = React.useState('');
|
|
37
|
+
const searchQuery = externalSearchQuery !== undefined ? externalSearchQuery : internalSearchQuery;
|
|
38
|
+
const handleSearchInput = (query) => {
|
|
39
|
+
onSearchChange ? onSearchChange(query) : setInternalSearchQuery(query);
|
|
40
|
+
};
|
|
41
|
+
// Internal Filter State
|
|
42
|
+
const [internalFilters, setInternalFilters] = React.useState({});
|
|
43
|
+
const selectedFilters = externalFilters !== undefined ? externalFilters : internalFilters;
|
|
44
|
+
// Mobile Bottom Sheet Filter Drawer State
|
|
45
|
+
const [isFilterSheetOpen, setIsFilterSheetOpen] = React.useState(false);
|
|
46
|
+
const [draftFilters, setDraftFilters] = React.useState({});
|
|
47
|
+
// Mobile Bottom Sheet Sort Drawer State
|
|
48
|
+
const [isSortSheetOpen, setIsSortSheetOpen] = React.useState(false);
|
|
49
|
+
// Active Filter Count Calculation
|
|
50
|
+
const activeFilterCount = React.useMemo(() => {
|
|
51
|
+
let count = 0;
|
|
52
|
+
Object.values(selectedFilters).forEach((val) => {
|
|
53
|
+
if (Array.isArray(val)) {
|
|
54
|
+
count += val.length;
|
|
55
|
+
}
|
|
56
|
+
else if (val !== '' && val !== null && val !== undefined && val !== 'all') {
|
|
57
|
+
count += 1;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
return count;
|
|
61
|
+
}, [selectedFilters]);
|
|
62
|
+
// Internal Sort State
|
|
63
|
+
const [internalSort, setInternalSort] = React.useState(() => {
|
|
64
|
+
if (externalSorting && Object.keys(externalSorting).length > 0) {
|
|
65
|
+
const field = Object.keys(externalSorting)[0];
|
|
66
|
+
return { field, dir: externalSorting[field] };
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
});
|
|
70
|
+
React.useEffect(() => {
|
|
71
|
+
if (externalSorting !== undefined) {
|
|
72
|
+
if (Object.keys(externalSorting).length > 0) {
|
|
73
|
+
const field = Object.keys(externalSorting)[0];
|
|
74
|
+
setInternalSort({ field, dir: externalSorting[field] });
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
setInternalSort(null);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}, [externalSorting]);
|
|
81
|
+
const activeSort = internalSort;
|
|
82
|
+
const sortableColumns = React.useMemo(() => (columns === null || columns === void 0 ? void 0 : columns.filter((c) => c.sortable)) || [], [columns]);
|
|
83
|
+
const sortOptions = React.useMemo(() => {
|
|
84
|
+
const opts = [{ label: 'Default Order', value: '' }];
|
|
85
|
+
sortableColumns.forEach((col) => {
|
|
86
|
+
const isNum = col.type === 'number';
|
|
87
|
+
const isDate = col.type === 'date';
|
|
88
|
+
const lowHigh = isNum
|
|
89
|
+
? `${col.label} (Low to High)`
|
|
90
|
+
: isDate
|
|
91
|
+
? `${col.label} (Oldest First)`
|
|
92
|
+
: `${col.label} (A to Z)`;
|
|
93
|
+
const highLow = isNum
|
|
94
|
+
? `${col.label} (High to Low)`
|
|
95
|
+
: isDate
|
|
96
|
+
? `${col.label} (Newest First)`
|
|
97
|
+
: `${col.label} (Z to A)`;
|
|
98
|
+
opts.push({ label: lowHigh, value: `${col.name}:asc` });
|
|
99
|
+
opts.push({ label: highLow, value: `${col.name}:desc` });
|
|
100
|
+
});
|
|
101
|
+
return opts;
|
|
102
|
+
}, [sortableColumns]);
|
|
103
|
+
const handleSortSelect = (val) => {
|
|
104
|
+
if (!val) {
|
|
105
|
+
setInternalSort(null);
|
|
106
|
+
onSortChange === null || onSortChange === void 0 ? void 0 : onSortChange({});
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const [field, dir] = val.split(':');
|
|
110
|
+
const sortObj = { [field]: dir };
|
|
111
|
+
setInternalSort({ field, dir: dir });
|
|
112
|
+
onSortChange === null || onSortChange === void 0 ? void 0 : onSortChange(sortObj);
|
|
113
|
+
};
|
|
114
|
+
const activeSortLabel = React.useMemo(() => {
|
|
115
|
+
if (!activeSort)
|
|
116
|
+
return 'Sort';
|
|
117
|
+
const currVal = `${activeSort.field}:${activeSort.dir}`;
|
|
118
|
+
const match = sortOptions.find((o) => o.value === currVal);
|
|
119
|
+
if (!match || !match.value)
|
|
120
|
+
return 'Sort';
|
|
121
|
+
return `Sort: ${match.label}`;
|
|
122
|
+
}, [activeSort, sortOptions]);
|
|
123
|
+
// Processed Items (Filter + Search + Sort)
|
|
124
|
+
const processedItems = React.useMemo(() => {
|
|
125
|
+
let result = [...items];
|
|
126
|
+
// 1. Apply Search
|
|
127
|
+
if (searchQuery.trim()) {
|
|
128
|
+
const q = searchQuery.toLowerCase().trim();
|
|
129
|
+
const fieldsToSearch = searchFields || (columns === null || columns === void 0 ? void 0 : columns.map((c) => c.name)) || ['id', 'name', 'title'];
|
|
130
|
+
result = result.filter((item) => fieldsToSearch.some((field) => {
|
|
131
|
+
const val = get.get(item, field);
|
|
132
|
+
return val !== null && val !== undefined && String(val).toLowerCase().includes(q);
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
// 2. Apply Filters (supporting array checkboxes or single values)
|
|
136
|
+
const filterKeys = Object.keys(selectedFilters);
|
|
137
|
+
if (filterKeys.length > 0) {
|
|
138
|
+
result = result.filter((item) => filterKeys.every((key) => {
|
|
139
|
+
const filterVal = selectedFilters[key];
|
|
140
|
+
if (filterVal === undefined || filterVal === null || filterVal === '')
|
|
141
|
+
return true;
|
|
142
|
+
const actual = String(get.get(item, key));
|
|
143
|
+
if (Array.isArray(filterVal)) {
|
|
144
|
+
if (filterVal.length === 0)
|
|
145
|
+
return true;
|
|
146
|
+
return filterVal.map(String).includes(actual);
|
|
147
|
+
}
|
|
148
|
+
return actual === String(filterVal);
|
|
149
|
+
}));
|
|
150
|
+
}
|
|
151
|
+
// 3. Apply Auto Sorting
|
|
152
|
+
if (activeSort) {
|
|
153
|
+
const { field, dir } = activeSort;
|
|
154
|
+
const colDef = columns === null || columns === void 0 ? void 0 : columns.find((c) => c.name === field);
|
|
155
|
+
const isAsc = dir === 'asc' || dir === '1';
|
|
156
|
+
result.sort((a, b) => {
|
|
157
|
+
const valA = get.get(a, field);
|
|
158
|
+
const valB = get.get(b, field);
|
|
159
|
+
const numA = parseNumericValue(valA);
|
|
160
|
+
const numB = parseNumericValue(valB);
|
|
161
|
+
if ((colDef === null || colDef === void 0 ? void 0 : colDef.type) === 'number' || (!isNaN(numA) && !isNaN(numB))) {
|
|
162
|
+
return isAsc ? numA - numB : numB - numA;
|
|
163
|
+
}
|
|
164
|
+
if ((colDef === null || colDef === void 0 ? void 0 : colDef.type) === 'date') {
|
|
165
|
+
const dA = new Date(valA).getTime();
|
|
166
|
+
const dB = new Date(valB).getTime();
|
|
167
|
+
if (!isNaN(dA) && !isNaN(dB)) {
|
|
168
|
+
return isAsc ? dA - dB : dB - dA;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const strA = String(valA !== null && valA !== void 0 ? valA : '');
|
|
172
|
+
const strB = String(valB !== null && valB !== void 0 ? valB : '');
|
|
173
|
+
return isAsc
|
|
174
|
+
? strA.localeCompare(strB, undefined, { numeric: true })
|
|
175
|
+
: strB.localeCompare(strA, undefined, { numeric: true });
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
return result;
|
|
179
|
+
}, [items, searchQuery, searchFields, columns, selectedFilters, activeSort]);
|
|
180
|
+
// Draft Filters Matching Count
|
|
181
|
+
const draftMatchingCount = React.useMemo(() => {
|
|
182
|
+
let result = [...items];
|
|
183
|
+
const filterKeys = Object.keys(draftFilters);
|
|
184
|
+
if (filterKeys.length > 0) {
|
|
185
|
+
result = result.filter((item) => filterKeys.every((key) => {
|
|
186
|
+
const filterVal = draftFilters[key];
|
|
187
|
+
if (filterVal === undefined || filterVal === null || filterVal === '')
|
|
188
|
+
return true;
|
|
189
|
+
const actual = String(get.get(item, key));
|
|
190
|
+
if (Array.isArray(filterVal)) {
|
|
191
|
+
if (filterVal.length === 0)
|
|
192
|
+
return true;
|
|
193
|
+
return filterVal.map(String).includes(actual);
|
|
194
|
+
}
|
|
195
|
+
return actual === String(filterVal);
|
|
196
|
+
}));
|
|
197
|
+
}
|
|
198
|
+
return result.length;
|
|
199
|
+
}, [items, draftFilters]);
|
|
200
|
+
const getKey = (item, idx) => {
|
|
201
|
+
var _a;
|
|
202
|
+
if (typeof rowKey === 'function')
|
|
203
|
+
return rowKey(item);
|
|
204
|
+
return (_a = item[rowKey]) !== null && _a !== void 0 ? _a : idx;
|
|
205
|
+
};
|
|
206
|
+
const isSelected = (key) => selectedKeys.includes(key);
|
|
207
|
+
const toggleSelectAll = () => {
|
|
208
|
+
if (selectedKeys.length === processedItems.length) {
|
|
209
|
+
onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange([], []);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
const allKeys = processedItems.map(getKey);
|
|
213
|
+
onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange(allKeys, processedItems);
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
const toggleItemSelect = (key, item) => {
|
|
217
|
+
const nextKeys = isSelected(key)
|
|
218
|
+
? selectedKeys.filter((k) => k !== key)
|
|
219
|
+
: [...selectedKeys, key];
|
|
220
|
+
const nextItems = processedItems.filter((it, idx) => nextKeys.includes(getKey(it, idx)));
|
|
221
|
+
onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange(nextKeys, nextItems);
|
|
222
|
+
};
|
|
223
|
+
const getItemClassStr = (item, idx) => {
|
|
224
|
+
if (typeof itemClass === 'function')
|
|
225
|
+
return itemClass(item, idx);
|
|
226
|
+
return itemClass;
|
|
227
|
+
};
|
|
228
|
+
return (jsxRuntime.jsxs("div", { className: buildClassname.buildClassName('w-full space-y-3', containerClass), "data-testid": "data-list", children: [(searchable || (filterFields && filterFields.length > 0) || sortableColumns.length > 0) && (jsxRuntime.jsxs("div", { className: "p-3 bg-gray-50 dark:bg-gray-800/80 rounded-xl border border-[var(--ui-border)] space-y-3", children: [searchable && (jsxRuntime.jsx(Input.Input, { value: searchQuery, onChange: (e) => handleSearchInput(e.target.value), placeholder: "Search items...", leftGroup: jsxRuntime.jsx(SearchIcon, {}), clearable: true, onClear: () => handleSearchInput(''), className: "w-full text-xs", size: "sm" })), ((filterFields && filterFields.length > 0) || sortableColumns.length > 0) && (jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [filterFields && filterFields.length > 0 && (jsxRuntime.jsxs(Button.Button, { theme: "secondary", size: "sm", onClick: () => {
|
|
229
|
+
setDraftFilters(selectedFilters);
|
|
230
|
+
setIsFilterSheetOpen(true);
|
|
231
|
+
}, className: "flex items-center gap-1.5 text-xs font-semibold flex-1 justify-center", "data-testid": "data-list-filter-btn", children: [jsxRuntime.jsx(FilterIcon, {}), jsxRuntime.jsx("span", { children: "Filters" }), activeFilterCount > 0 && (jsxRuntime.jsx("span", { className: "ml-1 size-4 rounded-full bg-blue-600 text-white text-[10px] font-bold flex items-center justify-center", children: activeFilterCount }))] })), sortableColumns.length > 0 && (jsxRuntime.jsxs(Button.Button, { theme: "secondary", size: "sm", onClick: () => setIsSortSheetOpen(true), className: "flex items-center gap-1.5 text-xs font-semibold flex-1 justify-center", "data-testid": "data-list-sort-btn", children: [jsxRuntime.jsx(SortIcon, {}), jsxRuntime.jsx("span", { children: activeSortLabel })] }))] }))] })), filterFields && filterFields.length > 0 && (jsxRuntime.jsx(Drawer.Drawer, { isOpen: isFilterSheetOpen, onClose: () => setIsFilterSheetOpen(false), align: "bottom", title: "Filter Items", dragHandle: true, panelClass: "max-h-[85vh] rounded-t-2xl", footer: jsxRuntime.jsxs("div", { className: "flex items-center gap-3 w-full", children: [jsxRuntime.jsx(Button.Button, { theme: "secondary", size: "md", onClick: () => setDraftFilters({}), className: "flex-1 text-xs", children: "Clear All" }), jsxRuntime.jsxs(Button.Button, { theme: "primary", size: "md", onClick: () => {
|
|
232
|
+
onFilterChange ? onFilterChange(draftFilters) : setInternalFilters(draftFilters);
|
|
233
|
+
setIsFilterSheetOpen(false);
|
|
234
|
+
}, className: "flex-1 text-xs font-semibold", "data-testid": "data-list-apply-filters-btn", children: ["Apply Filters (", draftMatchingCount, ")"] })] }), footerSticky: true, children: jsxRuntime.jsx("div", { className: "space-y-6 py-2", children: filterFields.map((field) => {
|
|
235
|
+
const selectedArray = Array.isArray(draftFilters[field.name])
|
|
236
|
+
? draftFilters[field.name]
|
|
237
|
+
: draftFilters[field.name] !== undefined && draftFilters[field.name] !== ''
|
|
238
|
+
? [draftFilters[field.name]]
|
|
239
|
+
: [];
|
|
240
|
+
return (jsxRuntime.jsxs("div", { className: "space-y-2.5", children: [jsxRuntime.jsx("h4", { className: "text-xs font-bold uppercase tracking-wider text-gray-500 dark:text-gray-400 px-1", children: field.label }), jsxRuntime.jsx("div", { className: "space-y-1.5 bg-gray-50 dark:bg-gray-800/60 p-2.5 rounded-xl border border-[var(--ui-border-muted)]", children: field.options.map((opt) => {
|
|
241
|
+
const checked = selectedArray.includes(opt.value);
|
|
242
|
+
return (jsxRuntime.jsxs("label", { className: "flex items-center justify-between p-2 rounded-lg hover:bg-white dark:hover:bg-gray-800 cursor-pointer transition-colors", children: [jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-800 dark:text-gray-200", children: opt.label }), jsxRuntime.jsx(Checkbox.Checkbox, { checked: checked, onChange: () => {
|
|
243
|
+
const next = checked
|
|
244
|
+
? selectedArray.filter((v) => v !== opt.value)
|
|
245
|
+
: [...selectedArray, opt.value];
|
|
246
|
+
setDraftFilters((prev) => ({
|
|
247
|
+
...prev,
|
|
248
|
+
[field.name]: next,
|
|
249
|
+
}));
|
|
250
|
+
} })] }, String(opt.value)));
|
|
251
|
+
}) })] }, field.name));
|
|
252
|
+
}) }) })), sortableColumns.length > 0 && (jsxRuntime.jsx(Drawer.Drawer, { isOpen: isSortSheetOpen, onClose: () => setIsSortSheetOpen(false), align: "bottom", title: "Sort Items By", dragHandle: true, panelClass: "max-h-[70vh] rounded-t-2xl", children: jsxRuntime.jsx("div", { className: "space-y-1 py-2", children: sortOptions.map((opt) => {
|
|
253
|
+
const isSelected = (activeSort ? `${activeSort.field}:${activeSort.dir}` : '') === opt.value;
|
|
254
|
+
return (jsxRuntime.jsxs("button", { type: "button", onClick: () => {
|
|
255
|
+
handleSortSelect(opt.value);
|
|
256
|
+
setIsSortSheetOpen(false);
|
|
257
|
+
}, className: buildClassname.buildClassName('w-full flex items-center justify-between p-3.5 rounded-xl text-left transition-colors cursor-pointer', isSelected
|
|
258
|
+
? 'bg-blue-50 dark:bg-blue-950/40 text-blue-600 dark:text-blue-400 font-semibold'
|
|
259
|
+
: 'hover:bg-gray-100 dark:hover:bg-gray-800 text-gray-700 dark:text-gray-200 font-medium'), "data-testid": `data-list-sort-opt-${opt.value || 'default'}`, children: [jsxRuntime.jsx("span", { className: "text-sm", children: opt.label }), isSelected && jsxRuntime.jsx(CheckIcon, {})] }, opt.value));
|
|
260
|
+
}) }) })), selectable && processedItems.length > 0 && (jsxRuntime.jsxs("div", { className: "p-3 bg-gray-50 dark:bg-gray-800/80 rounded-xl border border-[var(--ui-border)] flex items-center justify-between text-xs", children: [jsxRuntime.jsxs("label", { className: "flex items-center gap-2 font-medium text-gray-700 dark:text-gray-300 cursor-pointer", children: [jsxRuntime.jsx(Checkbox.Checkbox, { checked: processedItems.length > 0 && selectedKeys.length === processedItems.length, onChange: toggleSelectAll }), jsxRuntime.jsx("span", { children: "Select All Items" })] }), jsxRuntime.jsxs("span", { className: "text-gray-400 font-semibold", children: [selectedKeys.length, " of ", processedItems.length] })] })), jsxRuntime.jsx("div", { className: "space-y-3", children: loading ? (jsxRuntime.jsx("div", { className: "p-8 text-center text-sm text-gray-500 bg-white dark:bg-gray-800 rounded-xl border border-[var(--ui-border)]", children: "Loading items..." })) : processedItems.length === 0 ? (jsxRuntime.jsx("div", { className: "p-8 text-center text-sm text-gray-500 bg-white dark:bg-gray-800 rounded-xl border border-[var(--ui-border)]", children: emptyMessage })) : (processedItems.map((item, idx) => {
|
|
261
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
262
|
+
const key = getKey(item, idx);
|
|
263
|
+
const selected = isSelected(key);
|
|
264
|
+
const actions = swipeableActions === null || swipeableActions === void 0 ? void 0 : swipeableActions(item);
|
|
265
|
+
const customClass = getItemClassStr(item, idx);
|
|
266
|
+
const contentNode = renderItem ? (renderItem(item, idx)) : (jsxRuntime.jsxs("div", { onClick: () => onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, idx), className: buildClassname.buildClassName('p-4 bg-white dark:bg-gray-800 rounded-xl border border-[var(--ui-border)] shadow-xs space-y-3 transition-colors', onItemClick && 'cursor-pointer hover:border-blue-500/50', selected && 'ring-2 ring-blue-500/50 bg-blue-50/20 dark:bg-blue-950/20', customClass), "data-testid": `data-list-item-${key}`, children: [jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-3 border-b border-[var(--ui-border-muted)] pb-2.5", children: [jsxRuntime.jsx("div", { className: "flex items-center gap-2.5 min-w-0 flex-1", children: selectable ? (jsxRuntime.jsx(Checkbox.Checkbox, { checked: selected, onChange: () => toggleItemSelect(key), "aria-label": `Select item ${key}`, label: jsxRuntime.jsx("span", { className: "font-bold text-sm text-gray-900 dark:text-white truncate block", children: columns && ((_a = columns[0]) === null || _a === void 0 ? void 0 : _a.render)
|
|
267
|
+
? columns[0].render(item)
|
|
268
|
+
: String((_d = get.get(item, (_c = (_b = columns === null || columns === void 0 ? void 0 : columns[0]) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : 'title')) !== null && _d !== void 0 ? _d : '') }) })) : (jsxRuntime.jsx("div", { className: "font-bold text-sm text-gray-900 dark:text-white truncate", children: columns && ((_e = columns[0]) === null || _e === void 0 ? void 0 : _e.render)
|
|
269
|
+
? columns[0].render(item)
|
|
270
|
+
: String((_h = get.get(item, (_g = (_f = columns === null || columns === void 0 ? void 0 : columns[0]) === null || _f === void 0 ? void 0 : _f.name) !== null && _g !== void 0 ? _g : 'title')) !== null && _h !== void 0 ? _h : '') })) }), columns && columns[1] && (jsxRuntime.jsx("div", { className: "shrink-0 text-xs", children: columns[1].render
|
|
271
|
+
? columns[1].render(item)
|
|
272
|
+
: String((_j = get.get(item, columns[1].name)) !== null && _j !== void 0 ? _j : '') }))] }), columns && columns.length > 2 && (jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-2 text-xs pt-1", children: columns.slice(2).map((col) => {
|
|
273
|
+
const val = col.render ? col.render(item) : get.get(item, col.name);
|
|
274
|
+
if (val === null || val === undefined || val === '')
|
|
275
|
+
return null;
|
|
276
|
+
return (jsxRuntime.jsxs("div", { className: "min-w-0", children: [jsxRuntime.jsx("span", { className: "text-gray-400 dark:text-gray-500 font-medium block truncate", children: col.label }), jsxRuntime.jsx("span", { className: "text-gray-800 dark:text-gray-200 font-semibold block truncate mt-0.5", children: val })] }, String(col.name)));
|
|
277
|
+
}) }))] }));
|
|
278
|
+
if (actions && (((_k = actions.leftActions) === null || _k === void 0 ? void 0 : _k.length) || ((_l = actions.rightActions) === null || _l === void 0 ? void 0 : _l.length))) {
|
|
279
|
+
return (jsxRuntime.jsx(SwipeableRow.SwipeableRow, { leftActions: actions.leftActions, rightActions: actions.rightActions, children: contentNode }, key));
|
|
280
|
+
}
|
|
281
|
+
return jsxRuntime.jsx("div", { children: contentNode }, key);
|
|
282
|
+
})) }), pagination && pagination.total > 0 && (jsxRuntime.jsx("div", { className: "pt-2 flex justify-center", children: jsxRuntime.jsx(Pagination.Pagination, { ...pagination, onChange: (newPag) => setPagination === null || setPagination === void 0 ? void 0 : setPagination(newPag) }) }))] }));
|
|
283
|
+
}
|
|
284
|
+
DataList.displayName = 'DataList';
|
|
285
|
+
|
|
286
|
+
exports.DataList = DataList;
|
|
287
|
+
//# sourceMappingURL=DataList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataList.js","sources":["../../../../../src/components/DataList/DataList.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react'\nimport type { DataListProps, DataListSortDirection } from './DataList.types'\nimport { SwipeableRow } from '../SwipeableRow'\nimport { Checkbox } from '../Checkbox'\nimport { Pagination } from '../Pagination'\nimport { Input } from '../Input'\nimport { Drawer } from '../Drawer'\nimport { Button } from '../Button'\nimport { get } from '../../utils/get'\nimport { buildClassName } from '../../utils/build-classname'\n\nfunction SearchIcon() {\n return (\n <svg className=\"size-4 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n )\n}\n\nfunction FilterIcon() {\n return (\n <svg className=\"size-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z\"\n />\n </svg>\n )\n}\n\nfunction SortIcon() {\n return (\n <svg className=\"size-3.5 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4\"\n />\n </svg>\n )\n}\n\nfunction CheckIcon() {\n return (\n <svg\n className=\"size-4 text-blue-600 dark:text-blue-400 shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2.5} d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n}\n\nconst parseNumericValue = (val: any): number => {\n if (typeof val === 'number') return val\n if (val === null || val === undefined) return NaN\n const cleaned = String(val).replace(/[^0-9.-]/g, '')\n return cleaned !== '' ? Number(cleaned) : NaN\n}\n\nexport function DataList<T extends Record<string, any> = Record<string, any>>({\n items,\n columns,\n renderItem,\n searchable = false,\n searchQuery: externalSearchQuery,\n onSearchChange,\n searchFields,\n filterFields,\n selectedFilters: externalFilters,\n onFilterChange,\n sorting: externalSorting,\n onSortChange,\n swipeableActions,\n rowKey = 'id',\n selectable = false,\n selectedKeys = [],\n onSelectionChange,\n onItemClick,\n loading = false,\n emptyMessage = 'No items found',\n pagination,\n setPagination,\n containerClass = '',\n itemClass = '',\n}: DataListProps<T>) {\n // Internal Search State\n const [internalSearchQuery, setInternalSearchQuery] = useState('')\n const searchQuery = externalSearchQuery !== undefined ? externalSearchQuery : internalSearchQuery\n\n const handleSearchInput = (query: string) => {\n onSearchChange ? onSearchChange(query) : setInternalSearchQuery(query)\n }\n\n // Internal Filter State\n const [internalFilters, setInternalFilters] = useState<\n Record<string, Array<string | number> | string | number>\n >({})\n const selectedFilters = externalFilters !== undefined ? externalFilters : internalFilters\n\n // Mobile Bottom Sheet Filter Drawer State\n const [isFilterSheetOpen, setIsFilterSheetOpen] = useState(false)\n const [draftFilters, setDraftFilters] = useState<\n Record<string, Array<string | number> | string | number>\n >({})\n\n // Mobile Bottom Sheet Sort Drawer State\n const [isSortSheetOpen, setIsSortSheetOpen] = useState(false)\n\n // Active Filter Count Calculation\n const activeFilterCount = useMemo(() => {\n let count = 0\n Object.values(selectedFilters).forEach((val) => {\n if (Array.isArray(val)) {\n count += val.length\n } else if (val !== '' && val !== null && val !== undefined && val !== 'all') {\n count += 1\n }\n })\n return count\n }, [selectedFilters])\n\n // Internal Sort State\n const [internalSort, setInternalSort] = useState<{\n field: string\n dir: DataListSortDirection\n } | null>(() => {\n if (externalSorting && Object.keys(externalSorting).length > 0) {\n const field = Object.keys(externalSorting)[0]\n return { field, dir: externalSorting[field] }\n }\n return null\n })\n\n React.useEffect(() => {\n if (externalSorting !== undefined) {\n if (Object.keys(externalSorting).length > 0) {\n const field = Object.keys(externalSorting)[0]\n setInternalSort({ field, dir: externalSorting[field] })\n } else {\n setInternalSort(null)\n }\n }\n }, [externalSorting])\n\n const activeSort = internalSort\n\n const sortableColumns = useMemo(() => columns?.filter((c) => c.sortable) || [], [columns])\n\n const sortOptions = useMemo(() => {\n const opts: Array<{ label: string; value: string }> = [{ label: 'Default Order', value: '' }]\n sortableColumns.forEach((col) => {\n const isNum = col.type === 'number'\n const isDate = col.type === 'date'\n const lowHigh = isNum\n ? `${col.label} (Low to High)`\n : isDate\n ? `${col.label} (Oldest First)`\n : `${col.label} (A to Z)`\n const highLow = isNum\n ? `${col.label} (High to Low)`\n : isDate\n ? `${col.label} (Newest First)`\n : `${col.label} (Z to A)`\n\n opts.push({ label: lowHigh, value: `${col.name}:asc` })\n opts.push({ label: highLow, value: `${col.name}:desc` })\n })\n return opts\n }, [sortableColumns])\n\n const handleSortSelect = (val: string) => {\n if (!val) {\n setInternalSort(null)\n onSortChange?.({})\n return\n }\n const [field, dir] = val.split(':')\n const sortObj = { [field]: dir as DataListSortDirection }\n setInternalSort({ field, dir: dir as DataListSortDirection })\n onSortChange?.(sortObj)\n }\n\n const activeSortLabel = useMemo(() => {\n if (!activeSort) return 'Sort'\n const currVal = `${activeSort.field}:${activeSort.dir}`\n const match = sortOptions.find((o) => o.value === currVal)\n if (!match || !match.value) return 'Sort'\n return `Sort: ${match.label}`\n }, [activeSort, sortOptions])\n\n // Processed Items (Filter + Search + Sort)\n const processedItems = useMemo(() => {\n let result = [...items]\n\n // 1. Apply Search\n if (searchQuery.trim()) {\n const q = searchQuery.toLowerCase().trim()\n const fieldsToSearch = searchFields || columns?.map((c) => c.name) || ['id', 'name', 'title']\n result = result.filter((item) =>\n fieldsToSearch.some((field) => {\n const val = get(item, field)\n return val !== null && val !== undefined && String(val).toLowerCase().includes(q)\n }),\n )\n }\n\n // 2. Apply Filters (supporting array checkboxes or single values)\n const filterKeys = Object.keys(selectedFilters)\n if (filterKeys.length > 0) {\n result = result.filter((item) =>\n filterKeys.every((key) => {\n const filterVal = selectedFilters[key]\n if (filterVal === undefined || filterVal === null || filterVal === '') return true\n const actual = String(get(item, key))\n if (Array.isArray(filterVal)) {\n if (filterVal.length === 0) return true\n return filterVal.map(String).includes(actual)\n }\n return actual === String(filterVal)\n }),\n )\n }\n\n // 3. Apply Auto Sorting\n if (activeSort) {\n const { field, dir } = activeSort\n const colDef = columns?.find((c) => c.name === field)\n const isAsc = dir === 'asc' || dir === '1'\n\n result.sort((a, b) => {\n const valA = get(a, field)\n const valB = get(b, field)\n\n const numA = parseNumericValue(valA)\n const numB = parseNumericValue(valB)\n\n if (colDef?.type === 'number' || (!isNaN(numA) && !isNaN(numB))) {\n return isAsc ? numA - numB : numB - numA\n }\n\n if (colDef?.type === 'date') {\n const dA = new Date(valA).getTime()\n const dB = new Date(valB).getTime()\n if (!isNaN(dA) && !isNaN(dB)) {\n return isAsc ? dA - dB : dB - dA\n }\n }\n\n const strA = String(valA ?? '')\n const strB = String(valB ?? '')\n return isAsc\n ? strA.localeCompare(strB, undefined, { numeric: true })\n : strB.localeCompare(strA, undefined, { numeric: true })\n })\n }\n\n return result\n }, [items, searchQuery, searchFields, columns, selectedFilters, activeSort])\n\n // Draft Filters Matching Count\n const draftMatchingCount = useMemo(() => {\n let result = [...items]\n const filterKeys = Object.keys(draftFilters)\n if (filterKeys.length > 0) {\n result = result.filter((item) =>\n filterKeys.every((key) => {\n const filterVal = draftFilters[key]\n if (filterVal === undefined || filterVal === null || filterVal === '') return true\n const actual = String(get(item, key))\n if (Array.isArray(filterVal)) {\n if (filterVal.length === 0) return true\n return filterVal.map(String).includes(actual)\n }\n return actual === String(filterVal)\n }),\n )\n }\n return result.length\n }, [items, draftFilters])\n\n const getKey = (item: T, idx: number): string | number => {\n if (typeof rowKey === 'function') return rowKey(item)\n return (item as any)[rowKey] ?? idx\n }\n\n const isSelected = (key: string | number) => selectedKeys.includes(key)\n\n const toggleSelectAll = () => {\n if (selectedKeys.length === processedItems.length) {\n onSelectionChange?.([], [])\n } else {\n const allKeys = processedItems.map(getKey)\n onSelectionChange?.(allKeys, processedItems)\n }\n }\n\n const toggleItemSelect = (key: string | number, item: T) => {\n const nextKeys = isSelected(key)\n ? selectedKeys.filter((k) => k !== key)\n : [...selectedKeys, key]\n const nextItems = processedItems.filter((it, idx) => nextKeys.includes(getKey(it, idx)))\n onSelectionChange?.(nextKeys, nextItems)\n }\n\n const getItemClassStr = (item: T, idx: number): string => {\n if (typeof itemClass === 'function') return itemClass(item, idx)\n return itemClass\n }\n\n return (\n <div className={buildClassName('w-full space-y-3', containerClass)} data-testid=\"data-list\">\n {/* Top Search, Filter, Sort Toolbar */}\n {(searchable || (filterFields && filterFields.length > 0) || sortableColumns.length > 0) && (\n <div className=\"p-3 bg-gray-50 dark:bg-gray-800/80 rounded-xl border border-[var(--ui-border)] space-y-3\">\n {searchable && (\n <Input\n value={searchQuery}\n onChange={(e) => handleSearchInput(e.target.value)}\n placeholder=\"Search items...\"\n leftGroup={<SearchIcon />}\n clearable\n onClear={() => handleSearchInput('')}\n className=\"w-full text-xs\"\n size=\"sm\"\n />\n )}\n\n {((filterFields && filterFields.length > 0) || sortableColumns.length > 0) && (\n <div className=\"flex items-center gap-2\">\n {filterFields && filterFields.length > 0 && (\n <Button\n theme=\"secondary\"\n size=\"sm\"\n onClick={() => {\n setDraftFilters(selectedFilters)\n setIsFilterSheetOpen(true)\n }}\n className=\"flex items-center gap-1.5 text-xs font-semibold flex-1 justify-center\"\n data-testid=\"data-list-filter-btn\"\n >\n <FilterIcon />\n <span>Filters</span>\n {activeFilterCount > 0 && (\n <span className=\"ml-1 size-4 rounded-full bg-blue-600 text-white text-[10px] font-bold flex items-center justify-center\">\n {activeFilterCount}\n </span>\n )}\n </Button>\n )}\n\n {sortableColumns.length > 0 && (\n <Button\n theme=\"secondary\"\n size=\"sm\"\n onClick={() => setIsSortSheetOpen(true)}\n className=\"flex items-center gap-1.5 text-xs font-semibold flex-1 justify-center\"\n data-testid=\"data-list-sort-btn\"\n >\n <SortIcon />\n <span>{activeSortLabel}</span>\n </Button>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Mobile Bottom Sheet Filter Drawer */}\n {filterFields && filterFields.length > 0 && (\n <Drawer\n isOpen={isFilterSheetOpen}\n onClose={() => setIsFilterSheetOpen(false)}\n align=\"bottom\"\n title=\"Filter Items\"\n dragHandle\n panelClass=\"max-h-[85vh] rounded-t-2xl\"\n footer={\n <div className=\"flex items-center gap-3 w-full\">\n <Button\n theme=\"secondary\"\n size=\"md\"\n onClick={() => setDraftFilters({})}\n className=\"flex-1 text-xs\"\n >\n Clear All\n </Button>\n <Button\n theme=\"primary\"\n size=\"md\"\n onClick={() => {\n onFilterChange ? onFilterChange(draftFilters) : setInternalFilters(draftFilters)\n setIsFilterSheetOpen(false)\n }}\n className=\"flex-1 text-xs font-semibold\"\n data-testid=\"data-list-apply-filters-btn\"\n >\n Apply Filters ({draftMatchingCount})\n </Button>\n </div>\n }\n footerSticky\n >\n <div className=\"space-y-6 py-2\">\n {filterFields.map((field) => {\n const selectedArray = Array.isArray(draftFilters[field.name])\n ? (draftFilters[field.name] as Array<string | number>)\n : draftFilters[field.name] !== undefined && draftFilters[field.name] !== ''\n ? [draftFilters[field.name] as string | number]\n : []\n\n return (\n <div key={field.name} className=\"space-y-2.5\">\n <h4 className=\"text-xs font-bold uppercase tracking-wider text-gray-500 dark:text-gray-400 px-1\">\n {field.label}\n </h4>\n <div className=\"space-y-1.5 bg-gray-50 dark:bg-gray-800/60 p-2.5 rounded-xl border border-[var(--ui-border-muted)]\">\n {field.options.map((opt) => {\n const checked = selectedArray.includes(opt.value)\n return (\n <label\n key={String(opt.value)}\n className=\"flex items-center justify-between p-2 rounded-lg hover:bg-white dark:hover:bg-gray-800 cursor-pointer transition-colors\"\n >\n <span className=\"text-sm font-medium text-gray-800 dark:text-gray-200\">\n {opt.label}\n </span>\n <Checkbox\n checked={checked}\n onChange={() => {\n const next = checked\n ? selectedArray.filter((v) => v !== opt.value)\n : [...selectedArray, opt.value]\n setDraftFilters((prev) => ({\n ...prev,\n [field.name]: next,\n }))\n }}\n />\n </label>\n )\n })}\n </div>\n </div>\n )\n })}\n </div>\n </Drawer>\n )}\n\n {/* Mobile Bottom Sheet Sort Drawer */}\n {sortableColumns.length > 0 && (\n <Drawer\n isOpen={isSortSheetOpen}\n onClose={() => setIsSortSheetOpen(false)}\n align=\"bottom\"\n title=\"Sort Items By\"\n dragHandle\n panelClass=\"max-h-[70vh] rounded-t-2xl\"\n >\n <div className=\"space-y-1 py-2\">\n {sortOptions.map((opt) => {\n const isSelected =\n (activeSort ? `${activeSort.field}:${activeSort.dir}` : '') === opt.value\n return (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => {\n handleSortSelect(opt.value)\n setIsSortSheetOpen(false)\n }}\n className={buildClassName(\n 'w-full flex items-center justify-between p-3.5 rounded-xl text-left transition-colors cursor-pointer',\n isSelected\n ? 'bg-blue-50 dark:bg-blue-950/40 text-blue-600 dark:text-blue-400 font-semibold'\n : 'hover:bg-gray-100 dark:hover:bg-gray-800 text-gray-700 dark:text-gray-200 font-medium',\n )}\n data-testid={`data-list-sort-opt-${opt.value || 'default'}`}\n >\n <span className=\"text-sm\">{opt.label}</span>\n {isSelected && <CheckIcon />}\n </button>\n )\n })}\n </div>\n </Drawer>\n )}\n\n {/* Select All Toolbar */}\n {selectable && processedItems.length > 0 && (\n <div className=\"p-3 bg-gray-50 dark:bg-gray-800/80 rounded-xl border border-[var(--ui-border)] flex items-center justify-between text-xs\">\n <label className=\"flex items-center gap-2 font-medium text-gray-700 dark:text-gray-300 cursor-pointer\">\n <Checkbox\n checked={processedItems.length > 0 && selectedKeys.length === processedItems.length}\n onChange={toggleSelectAll}\n />\n <span>Select All Items</span>\n </label>\n <span className=\"text-gray-400 font-semibold\">\n {selectedKeys.length} of {processedItems.length}\n </span>\n </div>\n )}\n\n {/* Items List */}\n <div className=\"space-y-3\">\n {loading ? (\n <div className=\"p-8 text-center text-sm text-gray-500 bg-white dark:bg-gray-800 rounded-xl border border-[var(--ui-border)]\">\n Loading items...\n </div>\n ) : processedItems.length === 0 ? (\n <div className=\"p-8 text-center text-sm text-gray-500 bg-white dark:bg-gray-800 rounded-xl border border-[var(--ui-border)]\">\n {emptyMessage}\n </div>\n ) : (\n processedItems.map((item, idx) => {\n const key = getKey(item, idx)\n const selected = isSelected(key)\n const actions = swipeableActions?.(item)\n const customClass = getItemClassStr(item, idx)\n\n const contentNode = renderItem ? (\n renderItem(item, idx)\n ) : (\n <div\n onClick={() => onItemClick?.(item, idx)}\n className={buildClassName(\n 'p-4 bg-white dark:bg-gray-800 rounded-xl border border-[var(--ui-border)] shadow-xs space-y-3 transition-colors',\n onItemClick && 'cursor-pointer hover:border-blue-500/50',\n selected && 'ring-2 ring-blue-500/50 bg-blue-50/20 dark:bg-blue-950/20',\n customClass,\n )}\n data-testid={`data-list-item-${key}`}\n >\n {/* Card Header Row */}\n <div className=\"flex items-center justify-between gap-3 border-b border-[var(--ui-border-muted)] pb-2.5\">\n <div className=\"flex items-center gap-2.5 min-w-0 flex-1\">\n {selectable ? (\n <Checkbox\n checked={selected}\n onChange={() => toggleItemSelect(key, item)}\n aria-label={`Select item ${key}`}\n label={\n <span className=\"font-bold text-sm text-gray-900 dark:text-white truncate block\">\n {columns && columns[0]?.render\n ? columns[0].render(item)\n : String(get(item, columns?.[0]?.name ?? 'title') ?? '')}\n </span>\n }\n />\n ) : (\n <div className=\"font-bold text-sm text-gray-900 dark:text-white truncate\">\n {columns && columns[0]?.render\n ? columns[0].render(item)\n : String(get(item, columns?.[0]?.name ?? 'title') ?? '')}\n </div>\n )}\n </div>\n {columns && columns[1] && (\n <div className=\"shrink-0 text-xs\">\n {columns[1].render\n ? columns[1].render(item)\n : String(get(item, columns[1].name) ?? '')}\n </div>\n )}\n </div>\n\n {/* Key-Value Details Grid */}\n {columns && columns.length > 2 && (\n <div className=\"grid grid-cols-2 gap-2 text-xs pt-1\">\n {columns.slice(2).map((col) => {\n const val = col.render ? col.render(item) : get(item, col.name)\n if (val === null || val === undefined || val === '') return null\n return (\n <div key={String(col.name)} className=\"min-w-0\">\n <span className=\"text-gray-400 dark:text-gray-500 font-medium block truncate\">\n {col.label}\n </span>\n <span className=\"text-gray-800 dark:text-gray-200 font-semibold block truncate mt-0.5\">\n {val}\n </span>\n </div>\n )\n })}\n </div>\n )}\n </div>\n )\n\n if (actions && (actions.leftActions?.length || actions.rightActions?.length)) {\n return (\n <SwipeableRow\n key={key}\n leftActions={actions.leftActions}\n rightActions={actions.rightActions}\n >\n {contentNode}\n </SwipeableRow>\n )\n }\n\n return <div key={key}>{contentNode}</div>\n })\n )}\n </div>\n\n {/* Pagination Footer */}\n {pagination && pagination.total > 0 && (\n <div className=\"pt-2 flex justify-center\">\n <Pagination {...pagination} onChange={(newPag) => setPagination?.(newPag)} />\n </div>\n )}\n </div>\n )\n}\n\nDataList.displayName = 'DataList'\n"],"names":["_jsx","useState","useMemo","get","_jsxs","buildClassName","Input","Button","Drawer","Checkbox","SwipeableRow","Pagination"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var ArrowDownWideNarrow = require('../Icons/ArrowDownWideNarrow.svg.js');
|
|
5
|
+
var ArrowDownNarrowWide = require('../Icons/ArrowDownNarrowWide.svg.js');
|
|
6
|
+
var ArrowDownAZ = require('../Icons/ArrowDownAZ.svg.js');
|
|
7
|
+
var ArrowDownZA = require('../Icons/ArrowDownZA.svg.js');
|
|
8
|
+
var ArrowUpDown = require('../Icons/ArrowUpDown.svg.js');
|
|
9
|
+
|
|
10
|
+
const SortIconMap = {
|
|
11
|
+
'1': (jsxRuntime.jsx(ArrowDownNarrowWide.default, { className: "size-4 text-gray-400 shrink-0 group-hover:text-gray-800 dark:group-hover:text-white" })),
|
|
12
|
+
asc: (jsxRuntime.jsx(ArrowDownAZ.default, { className: "size-4 text-gray-400 shrink-0 group-hover:text-gray-800 dark:group-hover:text-white" })),
|
|
13
|
+
'-1': (jsxRuntime.jsx(ArrowDownWideNarrow.default, { className: "size-4 text-gray-400 shrink-0 group-hover:text-gray-800 dark:group-hover:text-white" })),
|
|
14
|
+
desc: (jsxRuntime.jsx(ArrowDownZA.default, { className: "size-4 text-gray-400 shrink-0 group-hover:text-gray-800 dark:group-hover:text-white" })),
|
|
15
|
+
};
|
|
16
|
+
const getSortIcon = (sort) => sort ? (SortIconMap[sort]) : (jsxRuntime.jsx(ArrowUpDown.default, { className: "size-4 text-gray-400 shrink-0 group-hover:text-gray-800 dark:group-hover:text-white" }));
|
|
17
|
+
|
|
18
|
+
exports.SortIconMap = SortIconMap;
|
|
19
|
+
exports.getSortIcon = getSortIcon;
|
|
20
|
+
//# sourceMappingURL=DataTable.icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTable.icons.js","sources":["../../../../../src/components/DataTable/DataTable.icons.tsx"],"sourcesContent":["import type { SortIconKey, Sorting } from './DataTable.types'\nimport type { ReactNode } from 'react'\n/* Icons */\nimport ArrowDownWideNarrow from '../Icons/ArrowDownWideNarrow.svg'\nimport ArrowDownNarrowWide from '../Icons/ArrowDownNarrowWide.svg'\nimport ArrowDownAZ from '../Icons/ArrowDownAZ.svg'\nimport ArrowDownZA from '../Icons/ArrowDownZA.svg'\nimport ArrowUpDown from '../Icons/ArrowUpDown.svg'\n\nexport const SortIconMap: Record<SortIconKey, ReactNode> = {\n '1': (\n <ArrowDownNarrowWide className=\"size-4 text-gray-400 shrink-0 group-hover:text-gray-800 dark:group-hover:text-white\" />\n ),\n asc: (\n <ArrowDownAZ className=\"size-4 text-gray-400 shrink-0 group-hover:text-gray-800 dark:group-hover:text-white\" />\n ),\n '-1': (\n <ArrowDownWideNarrow className=\"size-4 text-gray-400 shrink-0 group-hover:text-gray-800 dark:group-hover:text-white\" />\n ),\n desc: (\n <ArrowDownZA className=\"size-4 text-gray-400 shrink-0 group-hover:text-gray-800 dark:group-hover:text-white\" />\n ),\n}\n\nexport const getSortIcon = (sort?: Sorting) =>\n sort ? (\n SortIconMap[sort as SortIconKey]\n ) : (\n <ArrowUpDown className=\"size-4 text-gray-400 shrink-0 group-hover:text-gray-800 dark:group-hover:text-white\" />\n )\n"],"names":["_jsx","ArrowDownNarrowWide","ArrowDownAZ","ArrowDownWideNarrow","ArrowDownZA","ArrowUpDown"],"mappings":";;;;;;;;;AASO,MAAM,WAAW,GAAmC;IACzD,GAAG,GACDA,cAAA,CAACC,2BAAmB,IAAC,SAAS,EAAC,qFAAqF,EAAA,CAAG,CACxH;IACD,GAAG,GACDD,cAAA,CAACE,mBAAW,IAAC,SAAS,EAAC,qFAAqF,EAAA,CAAG,CAChH;IACD,IAAI,GACFF,cAAA,CAACG,2BAAmB,IAAC,SAAS,EAAC,qFAAqF,EAAA,CAAG,CACxH;IACD,IAAI,GACFH,cAAA,CAACI,mBAAW,IAAC,SAAS,EAAC,qFAAqF,EAAA,CAAG,CAChH;;AAGI,MAAM,WAAW,GAAG,CAAC,IAAc,KACxC,IAAI,IACF,WAAW,CAAC,IAAmB,CAAC,KAEhCJ,cAAA,CAACK,mBAAW,EAAA,EAAC,SAAS,EAAC,qFAAqF,EAAA,CAAG;;;;;"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var Table = require('../Table/Table.js');
|
|
6
|
+
var buildClassname = require('../../utils/build-classname.js');
|
|
7
|
+
var TextContent = require('../TextContent/TextContent.js');
|
|
8
|
+
var Pagination = require('../Pagination/Pagination.js');
|
|
9
|
+
var Checkbox = require('../Checkbox/Checkbox.js');
|
|
10
|
+
var get = require('../../utils/get.js');
|
|
11
|
+
var DataTable_utils = require('./DataTable.utils.js');
|
|
12
|
+
var DataTable_icons = require('./DataTable.icons.js');
|
|
13
|
+
|
|
14
|
+
const DENSITY_CELL_CLASS = {
|
|
15
|
+
compact: 'px-2 py-1.5',
|
|
16
|
+
default: '',
|
|
17
|
+
spacious: 'px-4 py-4',
|
|
18
|
+
};
|
|
19
|
+
const autoSortItems = (items, column, sort) => {
|
|
20
|
+
const path = column.name;
|
|
21
|
+
return [...items].sort((a, b) => {
|
|
22
|
+
const valueA = get.get(a, path);
|
|
23
|
+
const valueB = get.get(b, path);
|
|
24
|
+
if (column.type === 'number') {
|
|
25
|
+
const nA = Number(valueA);
|
|
26
|
+
const nB = Number(valueB);
|
|
27
|
+
return sort === 'asc' || sort === '1' ? nA - nB : nB - nA;
|
|
28
|
+
}
|
|
29
|
+
if (column.type === 'date') {
|
|
30
|
+
const dA = new Date(valueA).getTime();
|
|
31
|
+
const dB = new Date(valueB).getTime();
|
|
32
|
+
return sort === 'asc' || sort === '1' ? dA - dB : dB - dA;
|
|
33
|
+
}
|
|
34
|
+
const sA = String(valueA).toLowerCase();
|
|
35
|
+
const sB = String(valueB).toLowerCase();
|
|
36
|
+
if (sA < sB)
|
|
37
|
+
return sort === 'asc' || sort === '1' ? -1 : 1;
|
|
38
|
+
if (sA > sB)
|
|
39
|
+
return sort === 'asc' || sort === '1' ? 1 : -1;
|
|
40
|
+
return 0;
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
function DataTable({ items, columns, sorting = {}, onSort, loading, pagination, setPagination = () => { }, emptyMessage = 'No data found', containerClass = '', wrapperClass = '', tableClass = '', headClass = '', footerRow, rowKey = 'id', onRowClick, rowClass, density = 'default', striped = false, layout = 'auto', selectable = false, selectedRowKeys, defaultSelectedRowKeys, onSelectionChange, isRowSelectable, stickyHeader = true, stickyPagination = true, paginationContainerClass, }) {
|
|
44
|
+
const internalSorting = React.useRef({});
|
|
45
|
+
const [sortedItems, setSortedItems] = React.useState(items);
|
|
46
|
+
React.useEffect(() => {
|
|
47
|
+
setSortedItems(items);
|
|
48
|
+
}, [items]);
|
|
49
|
+
const doAutoSort = (column) => {
|
|
50
|
+
internalSorting.current = DataTable_utils.updateSortQuery(internalSorting.current, column.name, column.type);
|
|
51
|
+
setSortedItems(autoSortItems(items, column, internalSorting.current[column.name]));
|
|
52
|
+
};
|
|
53
|
+
const handleSort = (column) => {
|
|
54
|
+
if (!column.sortable)
|
|
55
|
+
return;
|
|
56
|
+
onSort ? onSort(column) : doAutoSort(column);
|
|
57
|
+
};
|
|
58
|
+
const getKey = (item, idx) => {
|
|
59
|
+
var _a;
|
|
60
|
+
if (typeof rowKey === 'function')
|
|
61
|
+
return rowKey(item);
|
|
62
|
+
return (_a = item[rowKey]) !== null && _a !== void 0 ? _a : idx;
|
|
63
|
+
};
|
|
64
|
+
const getRowClass = (item, idx) => {
|
|
65
|
+
if (!rowClass)
|
|
66
|
+
return '';
|
|
67
|
+
if (typeof rowClass === 'function')
|
|
68
|
+
return rowClass(item, idx);
|
|
69
|
+
return rowClass;
|
|
70
|
+
};
|
|
71
|
+
const getCellClass = (column, item) => {
|
|
72
|
+
if (!column.cellClass)
|
|
73
|
+
return '';
|
|
74
|
+
if (typeof column.cellClass === 'function')
|
|
75
|
+
return column.cellClass(item);
|
|
76
|
+
return column.cellClass;
|
|
77
|
+
};
|
|
78
|
+
const { isSelected, toggleRow, toggleAll, allSelected, someSelected } = DataTable_utils.useRowSelection({
|
|
79
|
+
items: sortedItems,
|
|
80
|
+
getKey,
|
|
81
|
+
selectedRowKeys,
|
|
82
|
+
defaultSelectedRowKeys,
|
|
83
|
+
onSelectionChange,
|
|
84
|
+
isRowSelectable,
|
|
85
|
+
});
|
|
86
|
+
const densityCellClass = DENSITY_CELL_CLASS[density];
|
|
87
|
+
const colSize = columns.length + (selectable ? 1 : 0);
|
|
88
|
+
const wrapperHasOverflow = /\boverflow-(x-|y-)?(auto|hidden|scroll|visible|clip)\b/.test(wrapperClass);
|
|
89
|
+
return (jsxRuntime.jsxs("div", { className: buildClassname.buildClassName('w-full rounded-lg relative', containerClass), children: [jsxRuntime.jsx("div", { className: buildClassname.buildClassName(!wrapperHasOverflow && 'overflow-x-auto', 'rounded-lg border border-[var(--ui-border)]', wrapperClass, pagination && 'rounded-b-none border-b-0'), children: jsxRuntime.jsxs(Table.Table, { className: buildClassname.buildClassName('relative w-full max-w-full h-fit', tableClass), layout: layout, children: [jsxRuntime.jsxs(Table.TableHead, { className: headClass, children: [selectable && (jsxRuntime.jsx(Table.TableHeaderCell, { className: buildClassname.buildClassName('bg-gray-50 dark:bg-gray-800 w-px', densityCellClass, stickyHeader && 'sticky top-0 z-20 shadow-[0_1px_2px_rgba(0,0,0,0.06)]'), children: jsxRuntime.jsx(Checkbox.Checkbox, { "aria-label": "Select all rows", checked: allSelected, ref: (el) => {
|
|
90
|
+
if (el)
|
|
91
|
+
el.indeterminate = someSelected;
|
|
92
|
+
}, onChange: toggleAll }) })), columns.map((column) => (jsxRuntime.jsx(Table.TableHeaderCell, { align: column.headerAlign, style: { width: column.width || 'auto' }, className: buildClassname.buildClassName('bg-gray-50 dark:bg-gray-800', densityCellClass, stickyHeader && 'sticky top-0 z-20 shadow-[0_1px_2px_rgba(0,0,0,0.06)]', column.sticky === 'left' &&
|
|
93
|
+
'sticky left-0 z-30 shadow-[2px_0_6px_rgba(0,0,0,0.06)]', column.sticky === 'right' &&
|
|
94
|
+
'sticky right-0 z-30 shadow-[-2px_0_6px_rgba(0,0,0,0.06)]', column.headerClass), children: jsxRuntime.jsxs(TextContent.TextContent, { role: column.sortable ? 'button' : undefined, className: buildClassname.buildClassName('group', column.sortable && 'inline-flex items-center gap-2 cursor-pointer select-none'), onClick: () => handleSort(column), children: [jsxRuntime.jsx(TextContent.TextContent, { className: "shrink-0", children: column.label }), column.sortable ? DataTable_icons.getSortIcon(sorting[column.name]) : null] }) }, column.name)))] }), jsxRuntime.jsx(Table.TableBody, { loading: loading, colSize: colSize, rowSize: (pagination === null || pagination === void 0 ? void 0 : pagination.limit) || 5, children: !loading && sortedItems.length === 0 ? (jsxRuntime.jsx(Table.EmptyTableRow, { colSpan: colSize, children: emptyMessage })) : (sortedItems.map((item, idx) => {
|
|
95
|
+
const key = getKey(item, idx);
|
|
96
|
+
const rowSelectable = !isRowSelectable || isRowSelectable(item);
|
|
97
|
+
return (jsxRuntime.jsxs(Table.TableRow, { className: buildClassname.buildClassName('group', onRowClick && 'cursor-pointer', striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40', getRowClass(item, idx)), onClick: onRowClick ? () => onRowClick(item, idx) : undefined, children: [selectable && (jsxRuntime.jsx(Table.TableCell, { className: buildClassname.buildClassName(densityCellClass, striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40'), children: jsxRuntime.jsx("span", { onClick: (e) => e.stopPropagation(), children: jsxRuntime.jsx(Checkbox.Checkbox, { "aria-label": "Select row", checked: isSelected(key), disabled: !rowSelectable, onChange: () => toggleRow(key) }) }) })), columns.map((column) => {
|
|
98
|
+
var _a;
|
|
99
|
+
return (jsxRuntime.jsx(Table.TableCell, { align: column.align, className: buildClassname.buildClassName(densityCellClass, striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40', column.sticky === 'left' &&
|
|
100
|
+
'sticky left-0 z-10 shadow-[2px_0_6px_rgba(0,0,0,0.06)]', column.sticky === 'right' &&
|
|
101
|
+
'sticky right-0 z-10 shadow-[-2px_0_6px_rgba(0,0,0,0.06)]', getCellClass(column, item)), children: column.render
|
|
102
|
+
? column.render(item)
|
|
103
|
+
: ((_a = get.get(item, column.name)) !== null && _a !== void 0 ? _a : 'Not set') }, column.name));
|
|
104
|
+
})] }, key));
|
|
105
|
+
})) }), footerRow && jsxRuntime.jsx(Table.TableFoot, { children: footerRow })] }) }), pagination && (jsxRuntime.jsx(Pagination.Pagination, { ...pagination, className: buildClassname.buildClassName('rounded-b-lg border border-[var(--ui-border)]', stickyPagination && 'sticky bottom-0 z-20 bg-white dark:bg-gray-800', paginationContainerClass), onChange: setPagination }))] }));
|
|
106
|
+
}
|
|
107
|
+
DataTable.displayName = 'DataTable';
|
|
108
|
+
|
|
109
|
+
exports.DataTable = DataTable;
|
|
110
|
+
//# sourceMappingURL=DataTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTable.js","sources":["../../../../../src/components/DataTable/DataTable.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport {\n EmptyTableRow,\n Table,\n TableBody,\n TableCell,\n TableFoot,\n TableHead,\n TableHeaderCell,\n TableRow,\n} from '../Table'\nimport { buildClassName } from '../../utils/build-classname'\nimport type {\n DataTableProps,\n DataTableColumn,\n DataTableDensity,\n Sorting,\n SortQuery,\n} from './DataTable.types'\nimport { TextContent } from '../TextContent'\nimport { Pagination } from '../Pagination'\nimport { Checkbox } from '../Checkbox'\nimport { get } from '../../utils/get'\nimport { updateSortQuery, useRowSelection } from './DataTable.utils'\nimport { getSortIcon } from './DataTable.icons'\n\nconst DENSITY_CELL_CLASS: Record<DataTableDensity, string> = {\n compact: 'px-2 py-1.5',\n default: '',\n spacious: 'px-4 py-4',\n}\n\nconst autoSortItems = <T,>(items: T[], column: DataTableColumn<T>, sort: Sorting): T[] => {\n const path = column.name\n return [...items].sort((a, b) => {\n const valueA = get(a as Record<string, any>, path)\n const valueB = get(b as Record<string, any>, path)\n\n if (column.type === 'number') {\n const nA = Number(valueA)\n const nB = Number(valueB)\n return sort === 'asc' || sort === '1' ? nA - nB : nB - nA\n }\n\n if (column.type === 'date') {\n const dA = new Date(valueA).getTime()\n const dB = new Date(valueB).getTime()\n return sort === 'asc' || sort === '1' ? dA - dB : dB - dA\n }\n\n const sA = String(valueA).toLowerCase()\n const sB = String(valueB).toLowerCase()\n if (sA < sB) return sort === 'asc' || sort === '1' ? -1 : 1\n if (sA > sB) return sort === 'asc' || sort === '1' ? 1 : -1\n return 0\n })\n}\n\nexport function DataTable<T extends Record<string, any> = Record<string, any>>({\n items,\n columns,\n sorting = {},\n onSort,\n loading,\n pagination,\n setPagination = () => {},\n emptyMessage = 'No data found',\n containerClass = '',\n wrapperClass = '',\n tableClass = '',\n headClass = '',\n footerRow,\n rowKey = 'id',\n onRowClick,\n rowClass,\n density = 'default',\n striped = false,\n layout = 'auto',\n selectable = false,\n selectedRowKeys,\n defaultSelectedRowKeys,\n onSelectionChange,\n isRowSelectable,\n stickyHeader = true,\n stickyPagination = true,\n paginationContainerClass,\n}: DataTableProps<T>) {\n const internalSorting = useRef<SortQuery>({})\n const [sortedItems, setSortedItems] = useState(items)\n\n useEffect(() => {\n setSortedItems(items)\n }, [items])\n\n const doAutoSort = (column: DataTableColumn<T>) => {\n internalSorting.current = updateSortQuery(internalSorting.current, column.name, column.type)\n setSortedItems(autoSortItems(items, column, internalSorting.current[column.name]))\n }\n\n const handleSort = (column: DataTableColumn<T>) => {\n if (!column.sortable) return\n onSort ? onSort(column) : doAutoSort(column)\n }\n\n const getKey = (item: T, idx: number): string | number => {\n if (typeof rowKey === 'function') return rowKey(item)\n return (item as any)[rowKey] ?? idx\n }\n\n const getRowClass = (item: T, idx: number): string => {\n if (!rowClass) return ''\n if (typeof rowClass === 'function') return rowClass(item, idx)\n return rowClass\n }\n\n const getCellClass = (column: DataTableColumn<T>, item: T): string => {\n if (!column.cellClass) return ''\n if (typeof column.cellClass === 'function') return column.cellClass(item)\n return column.cellClass\n }\n\n const { isSelected, toggleRow, toggleAll, allSelected, someSelected } = useRowSelection({\n items: sortedItems,\n getKey,\n selectedRowKeys,\n defaultSelectedRowKeys,\n onSelectionChange,\n isRowSelectable,\n })\n\n const densityCellClass = DENSITY_CELL_CLASS[density]\n const colSize = columns.length + (selectable ? 1 : 0)\n const wrapperHasOverflow = /\\boverflow-(x-|y-)?(auto|hidden|scroll|visible|clip)\\b/.test(\n wrapperClass,\n )\n\n return (\n <div className={buildClassName('w-full rounded-lg relative', containerClass)}>\n <div\n className={buildClassName(\n !wrapperHasOverflow && 'overflow-x-auto',\n 'rounded-lg border border-[var(--ui-border)]',\n wrapperClass,\n pagination && 'rounded-b-none border-b-0',\n )}\n >\n <Table\n className={buildClassName('relative w-full max-w-full h-fit', tableClass)}\n layout={layout}\n >\n <TableHead className={headClass}>\n {selectable && (\n <TableHeaderCell\n className={buildClassName(\n 'bg-gray-50 dark:bg-gray-800 w-px',\n densityCellClass,\n stickyHeader && 'sticky top-0 z-20 shadow-[0_1px_2px_rgba(0,0,0,0.06)]',\n )}\n >\n <Checkbox\n aria-label=\"Select all rows\"\n checked={allSelected}\n ref={(el) => {\n if (el) el.indeterminate = someSelected\n }}\n onChange={toggleAll}\n />\n </TableHeaderCell>\n )}\n {columns.map((column) => (\n <TableHeaderCell\n key={column.name}\n align={column.headerAlign}\n style={{ width: column.width || 'auto' }}\n className={buildClassName(\n 'bg-gray-50 dark:bg-gray-800',\n densityCellClass,\n stickyHeader && 'sticky top-0 z-20 shadow-[0_1px_2px_rgba(0,0,0,0.06)]',\n column.sticky === 'left' &&\n 'sticky left-0 z-30 shadow-[2px_0_6px_rgba(0,0,0,0.06)]',\n column.sticky === 'right' &&\n 'sticky right-0 z-30 shadow-[-2px_0_6px_rgba(0,0,0,0.06)]',\n column.headerClass,\n )}\n >\n <TextContent\n role={column.sortable ? 'button' : undefined}\n className={buildClassName(\n 'group',\n column.sortable && 'inline-flex items-center gap-2 cursor-pointer select-none',\n )}\n onClick={() => handleSort(column)}\n >\n <TextContent className=\"shrink-0\">{column.label}</TextContent>\n {column.sortable ? getSortIcon(sorting[column.name]) : null}\n </TextContent>\n </TableHeaderCell>\n ))}\n </TableHead>\n\n <TableBody loading={loading} colSize={colSize} rowSize={pagination?.limit || 5}>\n {!loading && sortedItems.length === 0 ? (\n <EmptyTableRow colSpan={colSize}>{emptyMessage}</EmptyTableRow>\n ) : (\n sortedItems.map((item, idx) => {\n const key = getKey(item, idx)\n const rowSelectable = !isRowSelectable || isRowSelectable(item)\n\n return (\n <TableRow\n key={key}\n className={buildClassName(\n 'group',\n onRowClick && 'cursor-pointer',\n striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40',\n getRowClass(item, idx),\n )}\n onClick={onRowClick ? () => onRowClick(item, idx) : undefined}\n >\n {selectable && (\n <TableCell\n className={buildClassName(\n densityCellClass,\n striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40',\n )}\n >\n <span onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label=\"Select row\"\n checked={isSelected(key)}\n disabled={!rowSelectable}\n onChange={() => toggleRow(key)}\n />\n </span>\n </TableCell>\n )}\n {columns.map((column) => (\n <TableCell\n key={column.name}\n align={column.align}\n className={buildClassName(\n densityCellClass,\n striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40',\n column.sticky === 'left' &&\n 'sticky left-0 z-10 shadow-[2px_0_6px_rgba(0,0,0,0.06)]',\n column.sticky === 'right' &&\n 'sticky right-0 z-10 shadow-[-2px_0_6px_rgba(0,0,0,0.06)]',\n getCellClass(column, item),\n )}\n >\n {column.render\n ? column.render(item)\n : ((get(item, column.name) as any) ?? 'Not set')}\n </TableCell>\n ))}\n </TableRow>\n )\n })\n )}\n </TableBody>\n\n {footerRow && <TableFoot>{footerRow}</TableFoot>}\n </Table>\n </div>\n\n {pagination && (\n <Pagination\n {...pagination}\n className={buildClassName(\n 'rounded-b-lg border border-[var(--ui-border)]',\n stickyPagination && 'sticky bottom-0 z-20 bg-white dark:bg-gray-800',\n paginationContainerClass,\n )}\n onChange={setPagination}\n />\n )}\n </div>\n )\n}\n\nDataTable.displayName = 'DataTable'\n"],"names":["get","useRef","useState","useEffect","updateSortQuery","useRowSelection","_jsxs","buildClassName","_jsx","Table","TableHead","TableHeaderCell","Checkbox","TextContent","getSortIcon","TableBody","EmptyTableRow","TableRow","TableCell","TableFoot","Pagination"],"mappings":"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"}
|