@pk-design/react-tailwind 1.6.0 → 1.7.1
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 +2298 -472
- package/dist/react-tailwind.cjs.js.map +1 -1
- package/dist/react-tailwind.es.js +2284 -474
- 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/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/Card/Card.types.d.ts +25 -0
- 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/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/Input/Input.types.d.ts +3 -3
- 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/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.types.d.ts +18 -1
- package/dist/types/components/SelectBox/SelectBox.types.d.ts +9 -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/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 +14 -0
- package/package.json +11 -3
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var buildClassname = require('../../utils/build-classname.js');
|
|
6
|
+
var Drawer = require('../Drawer/Drawer.js');
|
|
7
|
+
|
|
8
|
+
const ChevronUpIcon = ({ className }) => (jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: className, "aria-hidden": "true", children: jsxRuntime.jsx("polyline", { points: "18 15 12 9 6 15" }) }));
|
|
9
|
+
const StickyActionBar = React.forwardRef((props, ref) => {
|
|
10
|
+
const { summaryContent, actionsContent, drawerContent, drawerTitle = 'Summary Details', position = 'fixed', containerMaxWidth = 'max-w-5xl', className, ...restProps } = props;
|
|
11
|
+
const [isDrawerOpen, setIsDrawerOpen] = React.useState(false);
|
|
12
|
+
const positionClass = position === 'fixed'
|
|
13
|
+
? 'fixed bottom-0 left-0 right-0 z-30'
|
|
14
|
+
: position === 'sticky'
|
|
15
|
+
? 'sticky bottom-0 z-30'
|
|
16
|
+
: 'relative z-10';
|
|
17
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { ref: ref, className: buildClassname.buildClassName(positionClass, 'border-t border-[var(--ui-border)] bg-white/90 p-3.5 backdrop-blur-md shadow-lg dark:bg-gray-900/90 transition-all', className), "data-testid": "sticky-action-bar", ...restProps, children: jsxRuntime.jsxs("div", { className: buildClassname.buildClassName('mx-auto flex items-center justify-between gap-3', containerMaxWidth), children: [summaryContent && (jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: drawerContent ? (jsxRuntime.jsxs("button", { type: "button", onClick: () => setIsDrawerOpen(true), className: "flex items-center gap-2 text-left transition-opacity hover:opacity-80 cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary-ring)] rounded-lg p-1 -m-1", "aria-label": "Expand summary details", "data-testid": "summary-trigger", children: [jsxRuntime.jsx("div", { children: summaryContent }), jsxRuntime.jsx(ChevronUpIcon, { className: "size-4 text-[var(--ui-primary)] dark:text-blue-400 shrink-0" })] })) : (jsxRuntime.jsx("div", { children: summaryContent })) })), actionsContent && (jsxRuntime.jsx("div", { className: "flex items-center gap-2 shrink-0 ml-auto", "data-testid": "actions-stack", children: actionsContent }))] }) }), drawerContent && (jsxRuntime.jsx(Drawer.Drawer, { isOpen: isDrawerOpen, onClose: () => setIsDrawerOpen(false), align: "bottom", size: "full", title: drawerTitle, showBackButton: true, contentClass: "px-4 pb-6 max-h-[calc(100svh-6rem)] overflow-y-auto", children: drawerContent }))] }));
|
|
18
|
+
});
|
|
19
|
+
StickyActionBar.displayName = 'StickyActionBar';
|
|
20
|
+
|
|
21
|
+
exports.StickyActionBar = StickyActionBar;
|
|
22
|
+
//# sourceMappingURL=StickyActionBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StickyActionBar.js","sources":["../../../../../src/components/StickyActionBar/StickyActionBar.tsx"],"sourcesContent":["import { forwardRef, useState } from 'react'\nimport { buildClassName } from '../../utils/build-classname'\nimport { Drawer } from '../Drawer'\nimport type { StickyActionBarProps } from './StickyActionBar.types'\n\nconst ChevronUpIcon = ({ className }: { className?: string }) => (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n)\n\nexport const StickyActionBar = forwardRef<HTMLDivElement, StickyActionBarProps>((props, ref) => {\n const {\n summaryContent,\n actionsContent,\n drawerContent,\n drawerTitle = 'Summary Details',\n position = 'fixed',\n containerMaxWidth = 'max-w-5xl',\n className,\n ...restProps\n } = props\n\n const [isDrawerOpen, setIsDrawerOpen] = useState(false)\n\n const positionClass =\n position === 'fixed'\n ? 'fixed bottom-0 left-0 right-0 z-30'\n : position === 'sticky'\n ? 'sticky bottom-0 z-30'\n : 'relative z-10'\n\n return (\n <>\n <div\n ref={ref}\n className={buildClassName(\n positionClass,\n 'border-t border-[var(--ui-border)] bg-white/90 p-3.5 backdrop-blur-md shadow-lg dark:bg-gray-900/90 transition-all',\n className,\n )}\n data-testid=\"sticky-action-bar\"\n {...restProps}\n >\n <div\n className={buildClassName(\n 'mx-auto flex items-center justify-between gap-3',\n containerMaxWidth,\n )}\n >\n {/* Summary Content Slot */}\n {summaryContent && (\n <div className=\"flex items-center gap-2\">\n {drawerContent ? (\n <button\n type=\"button\"\n onClick={() => setIsDrawerOpen(true)}\n className=\"flex items-center gap-2 text-left transition-opacity hover:opacity-80 cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary-ring)] rounded-lg p-1 -m-1\"\n aria-label=\"Expand summary details\"\n data-testid=\"summary-trigger\"\n >\n <div>{summaryContent}</div>\n <ChevronUpIcon className=\"size-4 text-[var(--ui-primary)] dark:text-blue-400 shrink-0\" />\n </button>\n ) : (\n <div>{summaryContent}</div>\n )}\n </div>\n )}\n\n {/* Actions Stack Slot */}\n {actionsContent && (\n <div className=\"flex items-center gap-2 shrink-0 ml-auto\" data-testid=\"actions-stack\">\n {actionsContent}\n </div>\n )}\n </div>\n </div>\n\n {/* Optional Expandable Details Drawer */}\n {drawerContent && (\n <Drawer\n isOpen={isDrawerOpen}\n onClose={() => setIsDrawerOpen(false)}\n align=\"bottom\"\n size=\"full\"\n title={drawerTitle}\n showBackButton\n contentClass=\"px-4 pb-6 max-h-[calc(100svh-6rem)] overflow-y-auto\"\n >\n {drawerContent}\n </Drawer>\n )}\n </>\n )\n})\n\nStickyActionBar.displayName = 'StickyActionBar'\n"],"names":["_jsx","forwardRef","useState","_jsxs","_Fragment","buildClassName","Drawer"],"mappings":";;;;;;;AAKA,MAAM,aAAa,GAAG,CAAC,EAAE,SAAS,EAA0B,MAC1DA,cAAA,CAAA,KAAA,EAAA,EACE,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,GAAG,EACf,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,SAAS,EAAE,SAAS,EAAA,aAAA,EACR,MAAM,YAElBA,cAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,iBAAiB,EAAA,CAAG,EAAA,CACjC,CACP;AAEM,MAAM,eAAe,GAAGC,gBAAU,CAAuC,CAAC,KAAK,EAAE,GAAG,KAAI;IAC7F,MAAM,EACJ,cAAc,EACd,cAAc,EACd,aAAa,EACb,WAAW,GAAG,iBAAiB,EAC/B,QAAQ,GAAG,OAAO,EAClB,iBAAiB,GAAG,WAAW,EAC/B,SAAS,EACT,GAAG,SAAS,EACb,GAAG,KAAK;IAET,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAGC,cAAQ,CAAC,KAAK,CAAC;AAEvD,IAAA,MAAM,aAAa,GACjB,QAAQ,KAAK;AACX,UAAE;UACA,QAAQ,KAAK;AACb,cAAE;cACA,eAAe;AAEvB,IAAA,QACEC,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA,CACEJ,cAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAEK,6BAAc,CACvB,aAAa,EACb,oHAAoH,EACpH,SAAS,CACV,EAAA,aAAA,EACW,mBAAmB,EAAA,GAC3B,SAAS,EAAA,QAAA,EAEbF,eAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAEE,6BAAc,CACvB,iDAAiD,EACjD,iBAAiB,CAClB,EAAA,QAAA,EAAA,CAGA,cAAc,KACbL,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,yBAAyB,EAAA,QAAA,EACrC,aAAa,IACZG,eAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,eAAe,CAAC,IAAI,CAAC,EACpC,SAAS,EAAC,8LAA8L,EAAA,YAAA,EAC7L,wBAAwB,EAAA,aAAA,EACvB,iBAAiB,aAE7BH,cAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAM,cAAc,EAAA,CAAO,EAC3BA,eAAC,aAAa,EAAA,EAAC,SAAS,EAAC,6DAA6D,EAAA,CAAG,CAAA,EAAA,CAClF,KAETA,cAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAM,cAAc,EAAA,CAAO,CAC5B,EAAA,CACG,CACP,EAGA,cAAc,KACbA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0CAA0C,EAAA,aAAA,EAAa,eAAe,YAClF,cAAc,EAAA,CACX,CACP,CAAA,EAAA,CACG,GACF,EAGL,aAAa,KACZA,eAACM,aAAM,EAAA,EACL,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,eAAe,CAAC,KAAK,CAAC,EACrC,KAAK,EAAC,QAAQ,EACd,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,WAAW,EAClB,cAAc,EAAA,IAAA,EACd,YAAY,EAAC,qDAAqD,YAEjE,aAAa,EAAA,CACP,CACV,CAAA,EAAA,CACA;AAEP,CAAC;AAED,eAAe,CAAC,WAAW,GAAG,iBAAiB;;;;"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var buildClassname = require('../../utils/build-classname.js');
|
|
6
|
+
|
|
7
|
+
const themeClasses = {
|
|
8
|
+
danger: 'bg-red-600 text-white hover:bg-red-700 active:bg-red-800',
|
|
9
|
+
primary: 'bg-blue-600 text-white hover:bg-blue-700 active:bg-blue-800',
|
|
10
|
+
success: 'bg-emerald-600 text-white hover:bg-emerald-700 active:bg-emerald-800',
|
|
11
|
+
warning: 'bg-amber-500 text-white hover:bg-amber-600 active:bg-amber-700',
|
|
12
|
+
info: 'bg-cyan-600 text-white hover:bg-cyan-700 active:bg-cyan-800',
|
|
13
|
+
secondary: 'bg-gray-600 text-white hover:bg-gray-700 active:bg-gray-800',
|
|
14
|
+
gray: 'bg-gray-500 text-white hover:bg-gray-600 active:bg-gray-700',
|
|
15
|
+
};
|
|
16
|
+
const SwipeableRow = ({ children, leftActions = [], rightActions = [], actionWidth = 76, threshold = 40, fullSwipeToExecute = false, fullSwipeThreshold = 180, disabled = false, className = '', contentClassName = '', onOpen, onClose, }) => {
|
|
17
|
+
const [offset, setOffset] = React.useState(0);
|
|
18
|
+
const [isDragging, setIsDragging] = React.useState(false);
|
|
19
|
+
const containerRef = React.useRef(null);
|
|
20
|
+
const startXRef = React.useRef(0);
|
|
21
|
+
const startYRef = React.useRef(0);
|
|
22
|
+
const initialOffsetRef = React.useRef(0);
|
|
23
|
+
const isHorizontalSwipeRef = React.useRef(null);
|
|
24
|
+
const maxLeftWidth = React.useMemo(() => leftActions.length * actionWidth, [leftActions, actionWidth]);
|
|
25
|
+
const maxRightWidth = React.useMemo(() => rightActions.length * actionWidth, [rightActions, actionWidth]);
|
|
26
|
+
const handleClose = React.useCallback(() => {
|
|
27
|
+
setOffset(0);
|
|
28
|
+
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
29
|
+
}, [onClose]);
|
|
30
|
+
const handleOpenLeft = React.useCallback(() => {
|
|
31
|
+
if (maxLeftWidth > 0) {
|
|
32
|
+
setOffset(maxLeftWidth);
|
|
33
|
+
onOpen === null || onOpen === void 0 ? void 0 : onOpen('left');
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
handleClose();
|
|
37
|
+
}
|
|
38
|
+
}, [maxLeftWidth, onOpen, handleClose]);
|
|
39
|
+
const handleOpenRight = React.useCallback(() => {
|
|
40
|
+
if (maxRightWidth > 0) {
|
|
41
|
+
setOffset(-maxRightWidth);
|
|
42
|
+
onOpen === null || onOpen === void 0 ? void 0 : onOpen('right');
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
handleClose();
|
|
46
|
+
}
|
|
47
|
+
}, [maxRightWidth, onOpen, handleClose]);
|
|
48
|
+
const handleDragStart = (clientX, clientY) => {
|
|
49
|
+
if (disabled)
|
|
50
|
+
return;
|
|
51
|
+
setIsDragging(true);
|
|
52
|
+
startXRef.current = clientX;
|
|
53
|
+
startYRef.current = clientY;
|
|
54
|
+
initialOffsetRef.current = offset;
|
|
55
|
+
isHorizontalSwipeRef.current = null;
|
|
56
|
+
};
|
|
57
|
+
const handleDragMove = (clientX, clientY) => {
|
|
58
|
+
if (!isDragging || disabled)
|
|
59
|
+
return;
|
|
60
|
+
const deltaX = clientX - startXRef.current;
|
|
61
|
+
const deltaY = clientY - startYRef.current;
|
|
62
|
+
// Lock direction once initial movement surpasses 5px
|
|
63
|
+
if (isHorizontalSwipeRef.current === null) {
|
|
64
|
+
if (Math.abs(deltaX) > 5 || Math.abs(deltaY) > 5) {
|
|
65
|
+
isHorizontalSwipeRef.current = Math.abs(deltaX) > Math.abs(deltaY);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (isHorizontalSwipeRef.current === false) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
let nextOffset = initialOffsetRef.current + deltaX;
|
|
72
|
+
// Limit drag range with resistance overscroll
|
|
73
|
+
if (nextOffset > 0) {
|
|
74
|
+
if (!leftActions.length) {
|
|
75
|
+
nextOffset = 0;
|
|
76
|
+
}
|
|
77
|
+
else if (nextOffset > maxLeftWidth && !fullSwipeToExecute) {
|
|
78
|
+
const overflow = nextOffset - maxLeftWidth;
|
|
79
|
+
nextOffset = maxLeftWidth + overflow * 0.2;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else if (nextOffset < 0) {
|
|
83
|
+
if (!rightActions.length) {
|
|
84
|
+
nextOffset = 0;
|
|
85
|
+
}
|
|
86
|
+
else if (Math.abs(nextOffset) > maxRightWidth && !fullSwipeToExecute) {
|
|
87
|
+
const overflow = Math.abs(nextOffset) - maxRightWidth;
|
|
88
|
+
nextOffset = -(maxRightWidth + overflow * 0.2);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
setOffset(nextOffset);
|
|
92
|
+
};
|
|
93
|
+
const handleDragEnd = () => {
|
|
94
|
+
if (!isDragging)
|
|
95
|
+
return;
|
|
96
|
+
setIsDragging(false);
|
|
97
|
+
if (isHorizontalSwipeRef.current === false) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Check full swipe auto-execution
|
|
101
|
+
if (fullSwipeToExecute) {
|
|
102
|
+
if (offset > fullSwipeThreshold && leftActions.length > 0) {
|
|
103
|
+
leftActions[0].onClick();
|
|
104
|
+
handleClose();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (offset < -fullSwipeThreshold && rightActions.length > 0) {
|
|
108
|
+
rightActions[0].onClick();
|
|
109
|
+
handleClose();
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Snap logic
|
|
114
|
+
if (offset > 0) {
|
|
115
|
+
if (offset > threshold) {
|
|
116
|
+
handleOpenLeft();
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
handleClose();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else if (offset < 0) {
|
|
123
|
+
if (Math.abs(offset) > threshold) {
|
|
124
|
+
handleOpenRight();
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
handleClose();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
// Touch Handlers
|
|
132
|
+
const handleTouchStart = (e) => {
|
|
133
|
+
const touch = e.touches[0];
|
|
134
|
+
handleDragStart(touch.clientX, touch.clientY);
|
|
135
|
+
};
|
|
136
|
+
const handleTouchMove = (e) => {
|
|
137
|
+
const touch = e.touches[0];
|
|
138
|
+
handleDragMove(touch.clientX, touch.clientY);
|
|
139
|
+
};
|
|
140
|
+
const handleTouchEnd = () => {
|
|
141
|
+
handleDragEnd();
|
|
142
|
+
};
|
|
143
|
+
// Pointer/Mouse Handlers
|
|
144
|
+
const handlePointerDown = (e) => {
|
|
145
|
+
if (e.pointerType === 'mouse' && e.button !== 0)
|
|
146
|
+
return;
|
|
147
|
+
handleDragStart(e.clientX, e.clientY);
|
|
148
|
+
};
|
|
149
|
+
const handlePointerMove = (e) => {
|
|
150
|
+
if (!isDragging)
|
|
151
|
+
return;
|
|
152
|
+
handleDragMove(e.clientX, e.clientY);
|
|
153
|
+
};
|
|
154
|
+
const handlePointerUp = () => {
|
|
155
|
+
handleDragEnd();
|
|
156
|
+
};
|
|
157
|
+
// Close row on click outside if swiped open
|
|
158
|
+
React.useEffect(() => {
|
|
159
|
+
if (offset === 0)
|
|
160
|
+
return;
|
|
161
|
+
const handleClickOutside = (e) => {
|
|
162
|
+
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
163
|
+
handleClose();
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
document.addEventListener('click', handleClickOutside);
|
|
167
|
+
return () => {
|
|
168
|
+
document.removeEventListener('click', handleClickOutside);
|
|
169
|
+
};
|
|
170
|
+
}, [offset, handleClose]);
|
|
171
|
+
const renderActionButton = (action) => {
|
|
172
|
+
const themeStyle = themeClasses[action.theme || 'primary'];
|
|
173
|
+
return (jsxRuntime.jsxs("button", { type: "button", style: { width: `${actionWidth}px` }, onClick: (e) => {
|
|
174
|
+
e.stopPropagation();
|
|
175
|
+
action.onClick();
|
|
176
|
+
handleClose();
|
|
177
|
+
}, className: buildClassname.buildClassName('h-full flex flex-col items-center justify-center gap-1 text-xs font-semibold shrink-0 cursor-pointer transition-colors px-2 select-none', themeStyle, action.className), "data-testid": `swipe-action-${action.id}`, children: [action.icon && jsxRuntime.jsx("span", { className: "shrink-0", children: action.icon }), action.label && jsxRuntime.jsx("span", { className: "truncate max-w-full", children: action.label })] }, action.id));
|
|
178
|
+
};
|
|
179
|
+
return (jsxRuntime.jsxs("div", { ref: containerRef, className: buildClassname.buildClassName('relative overflow-hidden rounded-xl border border-[var(--ui-border-muted)] bg-white dark:bg-gray-800 select-none touch-pan-y', className), "data-testid": "swipeable-row", children: [leftActions.length > 0 && (jsxRuntime.jsx("div", { className: "absolute left-0 top-0 bottom-0 flex items-center h-full z-0", style: { width: `${maxLeftWidth}px` }, "data-testid": "swipe-left-actions", children: leftActions.map(renderActionButton) })), rightActions.length > 0 && (jsxRuntime.jsx("div", { className: "absolute right-0 top-0 bottom-0 flex items-center justify-end h-full z-0", style: { width: `${maxRightWidth}px` }, "data-testid": "swipe-right-actions", children: rightActions.map(renderActionButton) })), jsxRuntime.jsx("div", { onTouchStart: handleTouchStart, onTouchMove: handleTouchMove, onTouchEnd: handleTouchEnd, onPointerDown: handlePointerDown, onPointerMove: handlePointerMove, onPointerUp: handlePointerUp, onPointerCancel: handlePointerUp, style: {
|
|
180
|
+
transform: `translateX(${offset}px)`,
|
|
181
|
+
transition: isDragging ? 'none' : 'transform 200ms cubic-bezier(0.2, 0.8, 0.2, 1)',
|
|
182
|
+
}, className: buildClassname.buildClassName('relative z-10 w-full bg-white dark:bg-gray-800 shadow-xs cursor-grab active:cursor-grabbing', contentClassName), "data-testid": "swipeable-row-content", children: children })] }));
|
|
183
|
+
};
|
|
184
|
+
SwipeableRow.displayName = 'SwipeableRow';
|
|
185
|
+
|
|
186
|
+
exports.SwipeableRow = SwipeableRow;
|
|
187
|
+
//# sourceMappingURL=SwipeableRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwipeableRow.js","sources":["../../../../../src/components/SwipeableRow/SwipeableRow.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useCallback, useMemo } from 'react'\nimport { SwipeableRowProps, SwipeableAction, SwipeableActionTheme } from './SwipeableRow.types'\nimport { buildClassName } from '../../utils/build-classname'\n\nconst themeClasses: Record<SwipeableActionTheme, string> = {\n danger: 'bg-red-600 text-white hover:bg-red-700 active:bg-red-800',\n primary: 'bg-blue-600 text-white hover:bg-blue-700 active:bg-blue-800',\n success: 'bg-emerald-600 text-white hover:bg-emerald-700 active:bg-emerald-800',\n warning: 'bg-amber-500 text-white hover:bg-amber-600 active:bg-amber-700',\n info: 'bg-cyan-600 text-white hover:bg-cyan-700 active:bg-cyan-800',\n secondary: 'bg-gray-600 text-white hover:bg-gray-700 active:bg-gray-800',\n gray: 'bg-gray-500 text-white hover:bg-gray-600 active:bg-gray-700',\n}\n\nexport const SwipeableRow: React.FC<SwipeableRowProps> = ({\n children,\n leftActions = [],\n rightActions = [],\n actionWidth = 76,\n threshold = 40,\n fullSwipeToExecute = false,\n fullSwipeThreshold = 180,\n disabled = false,\n className = '',\n contentClassName = '',\n onOpen,\n onClose,\n}) => {\n const [offset, setOffset] = useState(0)\n const [isDragging, setIsDragging] = useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const startXRef = useRef(0)\n const startYRef = useRef(0)\n const initialOffsetRef = useRef(0)\n const isHorizontalSwipeRef = useRef<boolean | null>(null)\n\n const maxLeftWidth = useMemo(() => leftActions.length * actionWidth, [leftActions, actionWidth])\n const maxRightWidth = useMemo(\n () => rightActions.length * actionWidth,\n [rightActions, actionWidth],\n )\n\n const handleClose = useCallback(() => {\n setOffset(0)\n onClose?.()\n }, [onClose])\n\n const handleOpenLeft = useCallback(() => {\n if (maxLeftWidth > 0) {\n setOffset(maxLeftWidth)\n onOpen?.('left')\n } else {\n handleClose()\n }\n }, [maxLeftWidth, onOpen, handleClose])\n\n const handleOpenRight = useCallback(() => {\n if (maxRightWidth > 0) {\n setOffset(-maxRightWidth)\n onOpen?.('right')\n } else {\n handleClose()\n }\n }, [maxRightWidth, onOpen, handleClose])\n\n const handleDragStart = (clientX: number, clientY: number) => {\n if (disabled) return\n setIsDragging(true)\n startXRef.current = clientX\n startYRef.current = clientY\n initialOffsetRef.current = offset\n isHorizontalSwipeRef.current = null\n }\n\n const handleDragMove = (clientX: number, clientY: number) => {\n if (!isDragging || disabled) return\n\n const deltaX = clientX - startXRef.current\n const deltaY = clientY - startYRef.current\n\n // Lock direction once initial movement surpasses 5px\n if (isHorizontalSwipeRef.current === null) {\n if (Math.abs(deltaX) > 5 || Math.abs(deltaY) > 5) {\n isHorizontalSwipeRef.current = Math.abs(deltaX) > Math.abs(deltaY)\n }\n }\n\n if (isHorizontalSwipeRef.current === false) {\n return\n }\n\n let nextOffset = initialOffsetRef.current + deltaX\n\n // Limit drag range with resistance overscroll\n if (nextOffset > 0) {\n if (!leftActions.length) {\n nextOffset = 0\n } else if (nextOffset > maxLeftWidth && !fullSwipeToExecute) {\n const overflow = nextOffset - maxLeftWidth\n nextOffset = maxLeftWidth + overflow * 0.2\n }\n } else if (nextOffset < 0) {\n if (!rightActions.length) {\n nextOffset = 0\n } else if (Math.abs(nextOffset) > maxRightWidth && !fullSwipeToExecute) {\n const overflow = Math.abs(nextOffset) - maxRightWidth\n nextOffset = -(maxRightWidth + overflow * 0.2)\n }\n }\n\n setOffset(nextOffset)\n }\n\n const handleDragEnd = () => {\n if (!isDragging) return\n setIsDragging(false)\n\n if (isHorizontalSwipeRef.current === false) {\n return\n }\n\n // Check full swipe auto-execution\n if (fullSwipeToExecute) {\n if (offset > fullSwipeThreshold && leftActions.length > 0) {\n leftActions[0].onClick()\n handleClose()\n return\n }\n if (offset < -fullSwipeThreshold && rightActions.length > 0) {\n rightActions[0].onClick()\n handleClose()\n return\n }\n }\n\n // Snap logic\n if (offset > 0) {\n if (offset > threshold) {\n handleOpenLeft()\n } else {\n handleClose()\n }\n } else if (offset < 0) {\n if (Math.abs(offset) > threshold) {\n handleOpenRight()\n } else {\n handleClose()\n }\n }\n }\n\n // Touch Handlers\n const handleTouchStart = (e: React.TouchEvent) => {\n const touch = e.touches[0]\n handleDragStart(touch.clientX, touch.clientY)\n }\n\n const handleTouchMove = (e: React.TouchEvent) => {\n const touch = e.touches[0]\n handleDragMove(touch.clientX, touch.clientY)\n }\n\n const handleTouchEnd = () => {\n handleDragEnd()\n }\n\n // Pointer/Mouse Handlers\n const handlePointerDown = (e: React.PointerEvent) => {\n if (e.pointerType === 'mouse' && e.button !== 0) return\n handleDragStart(e.clientX, e.clientY)\n }\n\n const handlePointerMove = (e: React.PointerEvent) => {\n if (!isDragging) return\n handleDragMove(e.clientX, e.clientY)\n }\n\n const handlePointerUp = () => {\n handleDragEnd()\n }\n\n // Close row on click outside if swiped open\n useEffect(() => {\n if (offset === 0) return\n\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n handleClose()\n }\n }\n\n document.addEventListener('click', handleClickOutside)\n return () => {\n document.removeEventListener('click', handleClickOutside)\n }\n }, [offset, handleClose])\n\n const renderActionButton = (action: SwipeableAction) => {\n const themeStyle = themeClasses[action.theme || 'primary']\n return (\n <button\n key={action.id}\n type=\"button\"\n style={{ width: `${actionWidth}px` }}\n onClick={(e) => {\n e.stopPropagation()\n action.onClick()\n handleClose()\n }}\n className={buildClassName(\n 'h-full flex flex-col items-center justify-center gap-1 text-xs font-semibold shrink-0 cursor-pointer transition-colors px-2 select-none',\n themeStyle,\n action.className,\n )}\n data-testid={`swipe-action-${action.id}`}\n >\n {action.icon && <span className=\"shrink-0\">{action.icon}</span>}\n {action.label && <span className=\"truncate max-w-full\">{action.label}</span>}\n </button>\n )\n }\n\n return (\n <div\n ref={containerRef}\n className={buildClassName(\n 'relative overflow-hidden rounded-xl border border-[var(--ui-border-muted)] bg-white dark:bg-gray-800 select-none touch-pan-y',\n className,\n )}\n data-testid=\"swipeable-row\"\n >\n {/* Left Actions Revealed on Right Swipe */}\n {leftActions.length > 0 && (\n <div\n className=\"absolute left-0 top-0 bottom-0 flex items-center h-full z-0\"\n style={{ width: `${maxLeftWidth}px` }}\n data-testid=\"swipe-left-actions\"\n >\n {leftActions.map(renderActionButton)}\n </div>\n )}\n\n {/* Right Actions Revealed on Left Swipe */}\n {rightActions.length > 0 && (\n <div\n className=\"absolute right-0 top-0 bottom-0 flex items-center justify-end h-full z-0\"\n style={{ width: `${maxRightWidth}px` }}\n data-testid=\"swipe-right-actions\"\n >\n {rightActions.map(renderActionButton)}\n </div>\n )}\n\n {/* Main Content Surface */}\n <div\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n style={{\n transform: `translateX(${offset}px)`,\n transition: isDragging ? 'none' : 'transform 200ms cubic-bezier(0.2, 0.8, 0.2, 1)',\n }}\n className={buildClassName(\n 'relative z-10 w-full bg-white dark:bg-gray-800 shadow-xs cursor-grab active:cursor-grabbing',\n contentClassName,\n )}\n data-testid=\"swipeable-row-content\"\n >\n {children}\n </div>\n </div>\n )\n}\n\nSwipeableRow.displayName = 'SwipeableRow'\n"],"names":["useState","useRef","useMemo","useCallback","useEffect","_jsxs","buildClassName","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var buildClassname = require('../../utils/build-classname.js');
|
|
6
|
+
|
|
7
|
+
function SwipeableTabs({ items, activeId: externalActiveId, defaultActiveId, onChange, swipeable = true, threshold = 50, headerVariant = 'default', containerClass = '', headerClass = '', contentClass = '', }) {
|
|
8
|
+
var _a;
|
|
9
|
+
const [internalActiveId, setInternalActiveId] = React.useState(defaultActiveId || ((_a = items[0]) === null || _a === void 0 ? void 0 : _a.id) || '');
|
|
10
|
+
const activeId = externalActiveId !== undefined ? externalActiveId : internalActiveId;
|
|
11
|
+
const activeIndex = Math.max(0, items.findIndex((item) => item.id === activeId));
|
|
12
|
+
const touchStartX = React.useRef(0);
|
|
13
|
+
const touchStartY = React.useRef(0);
|
|
14
|
+
const touchDeltaX = React.useRef(0);
|
|
15
|
+
const isSwipingHorizontal = React.useRef(null);
|
|
16
|
+
const handleTabChange = (item) => {
|
|
17
|
+
if (item.disabled)
|
|
18
|
+
return;
|
|
19
|
+
setInternalActiveId(item.id);
|
|
20
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(item.id);
|
|
21
|
+
};
|
|
22
|
+
const handleTouchStart = (e) => {
|
|
23
|
+
if (!swipeable)
|
|
24
|
+
return;
|
|
25
|
+
touchStartX.current = e.touches[0].clientX;
|
|
26
|
+
touchStartY.current = e.touches[0].clientY;
|
|
27
|
+
touchDeltaX.current = 0;
|
|
28
|
+
isSwipingHorizontal.current = null;
|
|
29
|
+
};
|
|
30
|
+
const handleTouchMove = (e) => {
|
|
31
|
+
if (!swipeable)
|
|
32
|
+
return;
|
|
33
|
+
const currentX = e.touches[0].clientX;
|
|
34
|
+
const currentY = e.touches[0].clientY;
|
|
35
|
+
const deltaX = currentX - touchStartX.current;
|
|
36
|
+
const deltaY = currentY - touchStartY.current;
|
|
37
|
+
if (isSwipingHorizontal.current === null) {
|
|
38
|
+
if (Math.abs(deltaX) > 8 || Math.abs(deltaY) > 8) {
|
|
39
|
+
isSwipingHorizontal.current = Math.abs(deltaX) > Math.abs(deltaY);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (isSwipingHorizontal.current) {
|
|
43
|
+
touchDeltaX.current = deltaX;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const handleTouchEnd = () => {
|
|
47
|
+
if (!swipeable || !isSwipingHorizontal.current)
|
|
48
|
+
return;
|
|
49
|
+
const deltaX = touchDeltaX.current;
|
|
50
|
+
if (Math.abs(deltaX) >= threshold) {
|
|
51
|
+
if (deltaX < 0 && activeIndex < items.length - 1) {
|
|
52
|
+
// Swiped Left -> Go to Next Tab
|
|
53
|
+
const nextItem = items[activeIndex + 1];
|
|
54
|
+
if (nextItem && !nextItem.disabled) {
|
|
55
|
+
handleTabChange(nextItem);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else if (deltaX > 0 && activeIndex > 0) {
|
|
59
|
+
// Swiped Right -> Go to Previous Tab
|
|
60
|
+
const prevItem = items[activeIndex - 1];
|
|
61
|
+
if (prevItem && !prevItem.disabled) {
|
|
62
|
+
handleTabChange(prevItem);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
touchDeltaX.current = 0;
|
|
67
|
+
isSwipingHorizontal.current = null;
|
|
68
|
+
};
|
|
69
|
+
return (jsxRuntime.jsxs("div", { className: buildClassname.buildClassName('w-full flex flex-col', containerClass), "data-testid": "swipeable-tabs", children: [jsxRuntime.jsx("div", { className: buildClassname.buildClassName('w-full flex items-center gap-1 border-b border-[var(--ui-border)] overflow-x-auto no-scrollbar select-none', headerVariant === 'segmented' &&
|
|
70
|
+
'p-1 bg-gray-100 dark:bg-gray-800/80 rounded-2xl border-none gap-0', headerClass), "data-testid": "swipeable-tabs-header", children: items.map((item) => {
|
|
71
|
+
const isActive = item.id === activeId;
|
|
72
|
+
if (headerVariant === 'segmented') {
|
|
73
|
+
return (jsxRuntime.jsxs("button", { type: "button", disabled: item.disabled, onClick: () => handleTabChange(item), className: buildClassname.buildClassName('flex-1 flex items-center justify-center gap-1.5 py-1.5 px-3 rounded-xl text-xs font-semibold transition-all duration-150 cursor-pointer', item.disabled && 'opacity-40 cursor-not-allowed pointer-events-none', isActive
|
|
74
|
+
? 'bg-white dark:bg-gray-900 text-gray-900 dark:text-white shadow-xs'
|
|
75
|
+
: 'text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white'), "data-testid": `swipeable-tab-btn-${item.id}`, children: [item.icon && jsxRuntime.jsx("span", { className: "text-sm", children: item.icon }), jsxRuntime.jsx("span", { children: item.label }), item.badge !== undefined && (jsxRuntime.jsx("span", { className: "px-1.5 py-0.5 text-[10px] rounded-full bg-blue-100 dark:bg-blue-950 text-blue-600 dark:text-blue-400 font-bold", children: item.badge }))] }, item.id));
|
|
76
|
+
}
|
|
77
|
+
if (headerVariant === 'pills') {
|
|
78
|
+
return (jsxRuntime.jsxs("button", { type: "button", disabled: item.disabled, onClick: () => handleTabChange(item), className: buildClassname.buildClassName('flex items-center justify-center gap-1.5 py-1.5 px-3.5 rounded-full text-xs font-semibold transition-all duration-150 cursor-pointer whitespace-nowrap', item.disabled && 'opacity-40 cursor-not-allowed pointer-events-none', isActive
|
|
79
|
+
? 'bg-blue-600 text-white shadow-xs'
|
|
80
|
+
: 'bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700'), "data-testid": `swipeable-tab-btn-${item.id}`, children: [item.icon && jsxRuntime.jsx("span", { className: "text-sm", children: item.icon }), jsxRuntime.jsx("span", { children: item.label }), item.badge !== undefined && (jsxRuntime.jsx("span", { className: "px-1.5 py-0.5 text-[10px] rounded-full bg-white/20 text-current font-bold", children: item.badge }))] }, item.id));
|
|
81
|
+
}
|
|
82
|
+
// Default Underline Tab Header
|
|
83
|
+
return (jsxRuntime.jsxs("button", { type: "button", disabled: item.disabled, onClick: () => handleTabChange(item), className: buildClassname.buildClassName('flex items-center justify-center gap-1.5 py-2.5 px-4 text-xs font-semibold transition-all duration-150 cursor-pointer relative whitespace-nowrap border-b-2 -mb-px', item.disabled && 'opacity-40 cursor-not-allowed pointer-events-none', isActive
|
|
84
|
+
? 'border-blue-600 dark:border-blue-400 text-blue-600 dark:text-blue-400'
|
|
85
|
+
: 'border-transparent text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white'), "data-testid": `swipeable-tab-btn-${item.id}`, children: [item.icon && jsxRuntime.jsx("span", { className: "text-sm", children: item.icon }), jsxRuntime.jsx("span", { children: item.label }), item.badge !== undefined && (jsxRuntime.jsx("span", { className: "px-1.5 py-0.5 text-[10px] rounded-full bg-blue-100 dark:bg-blue-950 text-blue-600 dark:text-blue-400 font-bold", children: item.badge }))] }, item.id));
|
|
86
|
+
}) }), jsxRuntime.jsx("div", { className: buildClassname.buildClassName('w-full overflow-hidden relative touch-pan-y', contentClass), onTouchStart: handleTouchStart, onTouchMove: handleTouchMove, onTouchEnd: handleTouchEnd, "data-testid": "swipeable-tabs-viewport", children: jsxRuntime.jsx("div", { className: "flex w-full transition-transform duration-300 ease-out", style: { transform: `translateX(-${activeIndex * 100}%)` }, "data-testid": "swipeable-tabs-track", children: items.map((item) => (jsxRuntime.jsx("div", { className: "w-full shrink-0 min-w-full", "data-testid": `swipeable-tab-panel-${item.id}`, children: item.content }, item.id))) }) })] }));
|
|
87
|
+
}
|
|
88
|
+
SwipeableTabs.displayName = 'SwipeableTabs';
|
|
89
|
+
|
|
90
|
+
exports.SwipeableTabs = SwipeableTabs;
|
|
91
|
+
//# sourceMappingURL=SwipeableTabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwipeableTabs.js","sources":["../../../../../src/components/SwipeableTabs/SwipeableTabs.tsx"],"sourcesContent":["import React, { useState, useRef } from 'react'\nimport type { SwipeableTabsProps, SwipeableTabItem } from './SwipeableTabs.types'\nimport { buildClassName } from '../../utils/build-classname'\n\nexport function SwipeableTabs({\n items,\n activeId: externalActiveId,\n defaultActiveId,\n onChange,\n swipeable = true,\n threshold = 50,\n headerVariant = 'default',\n containerClass = '',\n headerClass = '',\n contentClass = '',\n}: SwipeableTabsProps) {\n const [internalActiveId, setInternalActiveId] = useState<string>(\n defaultActiveId || items[0]?.id || '',\n )\n\n const activeId = externalActiveId !== undefined ? externalActiveId : internalActiveId\n const activeIndex = Math.max(\n 0,\n items.findIndex((item) => item.id === activeId),\n )\n\n const touchStartX = useRef<number>(0)\n const touchStartY = useRef<number>(0)\n const touchDeltaX = useRef<number>(0)\n const isSwipingHorizontal = useRef<boolean | null>(null)\n\n const handleTabChange = (item: SwipeableTabItem) => {\n if (item.disabled) return\n setInternalActiveId(item.id)\n onChange?.(item.id)\n }\n\n const handleTouchStart = (e: React.TouchEvent<HTMLDivElement>) => {\n if (!swipeable) return\n touchStartX.current = e.touches[0].clientX\n touchStartY.current = e.touches[0].clientY\n touchDeltaX.current = 0\n isSwipingHorizontal.current = null\n }\n\n const handleTouchMove = (e: React.TouchEvent<HTMLDivElement>) => {\n if (!swipeable) return\n const currentX = e.touches[0].clientX\n const currentY = e.touches[0].clientY\n const deltaX = currentX - touchStartX.current\n const deltaY = currentY - touchStartY.current\n\n if (isSwipingHorizontal.current === null) {\n if (Math.abs(deltaX) > 8 || Math.abs(deltaY) > 8) {\n isSwipingHorizontal.current = Math.abs(deltaX) > Math.abs(deltaY)\n }\n }\n\n if (isSwipingHorizontal.current) {\n touchDeltaX.current = deltaX\n }\n }\n\n const handleTouchEnd = () => {\n if (!swipeable || !isSwipingHorizontal.current) return\n\n const deltaX = touchDeltaX.current\n if (Math.abs(deltaX) >= threshold) {\n if (deltaX < 0 && activeIndex < items.length - 1) {\n // Swiped Left -> Go to Next Tab\n const nextItem = items[activeIndex + 1]\n if (nextItem && !nextItem.disabled) {\n handleTabChange(nextItem)\n }\n } else if (deltaX > 0 && activeIndex > 0) {\n // Swiped Right -> Go to Previous Tab\n const prevItem = items[activeIndex - 1]\n if (prevItem && !prevItem.disabled) {\n handleTabChange(prevItem)\n }\n }\n }\n\n touchDeltaX.current = 0\n isSwipingHorizontal.current = null\n }\n\n return (\n <div\n className={buildClassName('w-full flex flex-col', containerClass)}\n data-testid=\"swipeable-tabs\"\n >\n {/* Header Tabs Navigation Bar */}\n <div\n className={buildClassName(\n 'w-full flex items-center gap-1 border-b border-[var(--ui-border)] overflow-x-auto no-scrollbar select-none',\n headerVariant === 'segmented' &&\n 'p-1 bg-gray-100 dark:bg-gray-800/80 rounded-2xl border-none gap-0',\n headerClass,\n )}\n data-testid=\"swipeable-tabs-header\"\n >\n {items.map((item) => {\n const isActive = item.id === activeId\n\n if (headerVariant === 'segmented') {\n return (\n <button\n key={item.id}\n type=\"button\"\n disabled={item.disabled}\n onClick={() => handleTabChange(item)}\n className={buildClassName(\n 'flex-1 flex items-center justify-center gap-1.5 py-1.5 px-3 rounded-xl text-xs font-semibold transition-all duration-150 cursor-pointer',\n item.disabled && 'opacity-40 cursor-not-allowed pointer-events-none',\n isActive\n ? 'bg-white dark:bg-gray-900 text-gray-900 dark:text-white shadow-xs'\n : 'text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white',\n )}\n data-testid={`swipeable-tab-btn-${item.id}`}\n >\n {item.icon && <span className=\"text-sm\">{item.icon}</span>}\n <span>{item.label}</span>\n {item.badge !== undefined && (\n <span className=\"px-1.5 py-0.5 text-[10px] rounded-full bg-blue-100 dark:bg-blue-950 text-blue-600 dark:text-blue-400 font-bold\">\n {item.badge}\n </span>\n )}\n </button>\n )\n }\n\n if (headerVariant === 'pills') {\n return (\n <button\n key={item.id}\n type=\"button\"\n disabled={item.disabled}\n onClick={() => handleTabChange(item)}\n className={buildClassName(\n 'flex items-center justify-center gap-1.5 py-1.5 px-3.5 rounded-full text-xs font-semibold transition-all duration-150 cursor-pointer whitespace-nowrap',\n item.disabled && 'opacity-40 cursor-not-allowed pointer-events-none',\n isActive\n ? 'bg-blue-600 text-white shadow-xs'\n : 'bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700',\n )}\n data-testid={`swipeable-tab-btn-${item.id}`}\n >\n {item.icon && <span className=\"text-sm\">{item.icon}</span>}\n <span>{item.label}</span>\n {item.badge !== undefined && (\n <span className=\"px-1.5 py-0.5 text-[10px] rounded-full bg-white/20 text-current font-bold\">\n {item.badge}\n </span>\n )}\n </button>\n )\n }\n\n // Default Underline Tab Header\n return (\n <button\n key={item.id}\n type=\"button\"\n disabled={item.disabled}\n onClick={() => handleTabChange(item)}\n className={buildClassName(\n 'flex items-center justify-center gap-1.5 py-2.5 px-4 text-xs font-semibold transition-all duration-150 cursor-pointer relative whitespace-nowrap border-b-2 -mb-px',\n item.disabled && 'opacity-40 cursor-not-allowed pointer-events-none',\n isActive\n ? 'border-blue-600 dark:border-blue-400 text-blue-600 dark:text-blue-400'\n : 'border-transparent text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white',\n )}\n data-testid={`swipeable-tab-btn-${item.id}`}\n >\n {item.icon && <span className=\"text-sm\">{item.icon}</span>}\n <span>{item.label}</span>\n {item.badge !== undefined && (\n <span className=\"px-1.5 py-0.5 text-[10px] rounded-full bg-blue-100 dark:bg-blue-950 text-blue-600 dark:text-blue-400 font-bold\">\n {item.badge}\n </span>\n )}\n </button>\n )\n })}\n </div>\n\n {/* Swipeable Viewport Content Area */}\n <div\n className={buildClassName('w-full overflow-hidden relative touch-pan-y', contentClass)}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n data-testid=\"swipeable-tabs-viewport\"\n >\n <div\n className=\"flex w-full transition-transform duration-300 ease-out\"\n style={{ transform: `translateX(-${activeIndex * 100}%)` }}\n data-testid=\"swipeable-tabs-track\"\n >\n {items.map((item) => (\n <div\n key={item.id}\n className=\"w-full shrink-0 min-w-full\"\n data-testid={`swipeable-tab-panel-${item.id}`}\n >\n {item.content}\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n\nSwipeableTabs.displayName = 'SwipeableTabs'\n"],"names":["useState","useRef","_jsxs","buildClassName","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var buildClassname = require('../../utils/build-classname.js');
|
|
5
|
+
|
|
6
|
+
const TEXT_ALIGN = {
|
|
7
|
+
left: 'text-left',
|
|
8
|
+
center: 'text-center',
|
|
9
|
+
right: 'text-right',
|
|
10
|
+
};
|
|
11
|
+
const TABLE_LAYOUT = {
|
|
12
|
+
fixed: 'table-fixed',
|
|
13
|
+
auto: 'table-auto',
|
|
14
|
+
};
|
|
15
|
+
/* ----------------------------------------------
|
|
16
|
+
* Loader Rows
|
|
17
|
+
* ---------------------------------------------- */
|
|
18
|
+
const TableRowLoader = ({ colSize, rowSize }) => (jsxRuntime.jsx(jsxRuntime.Fragment, { children: Array.from({ length: rowSize }).map((_, rowIdx) => (jsxRuntime.jsx(TableRow, { className: "animate-pulse", children: Array.from({ length: colSize }).map((_, colIdx) => (jsxRuntime.jsx(TableCell, { children: jsxRuntime.jsx("div", { className: "flex items-center h-6", children: jsxRuntime.jsx("div", { className: "h-4 bg-gray-300 dark:bg-gray-700 shimmer rounded w-full" }) }) }, colIdx))) }, rowIdx))) }));
|
|
19
|
+
/* ----------------------------------------------
|
|
20
|
+
* Table
|
|
21
|
+
* ---------------------------------------------- */
|
|
22
|
+
const Table = ({ children, layout = 'auto', className = '', caption, }) => (jsxRuntime.jsxs("table", { className: buildClassname.buildClassName('border-collapse w-full divide-y divide-[var(--ui-border)]', TABLE_LAYOUT[layout], className), children: [caption && (jsxRuntime.jsx("caption", { className: "mb-2 text-sm text-left text-gray-500 dark:text-gray-400", children: caption })), children] }));
|
|
23
|
+
/* ----------------------------------------------
|
|
24
|
+
* Head
|
|
25
|
+
* ---------------------------------------------- */
|
|
26
|
+
const TableHead = ({ children, className = '' }) => (jsxRuntime.jsx("thead", { className: buildClassname.buildClassName('text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-800 dark:text-gray-300', className), children: jsxRuntime.jsx("tr", { children: children }) }));
|
|
27
|
+
/* ----------------------------------------------
|
|
28
|
+
* Body
|
|
29
|
+
* ---------------------------------------------- */
|
|
30
|
+
const TableBody = ({ children, loading, colSize = 1, rowSize = 5, className, }) => (jsxRuntime.jsx("tbody", { className: buildClassname.buildClassName('text-sm text-gray-700 dark:text-white divide-y divide-[var(--ui-border)]', className), children: loading ? jsxRuntime.jsx(TableRowLoader, { colSize: colSize, rowSize: rowSize }) : children }));
|
|
31
|
+
/* ----------------------------------------------
|
|
32
|
+
* Foot
|
|
33
|
+
* ---------------------------------------------- */
|
|
34
|
+
const TableFoot = ({ children }) => (jsxRuntime.jsx("tfoot", { children: jsxRuntime.jsx("tr", { children: children }) }));
|
|
35
|
+
/* ----------------------------------------------
|
|
36
|
+
* Rows
|
|
37
|
+
* ---------------------------------------------- */
|
|
38
|
+
const TableRow = ({ children, hoverable = false, className, ...props }) => (jsxRuntime.jsx("tr", { ...props, className: buildClassname.buildClassName('last:border-b border-[var(--ui-border)]', hoverable && 'group', className), children: children }));
|
|
39
|
+
/* ----------------------------------------------
|
|
40
|
+
* Cells
|
|
41
|
+
* ---------------------------------------------- */
|
|
42
|
+
const TableCell = ({ children, align = 'left', className, ...props }) => (jsxRuntime.jsx("td", { ...props, className: buildClassname.buildClassName('px-3 py-3 first:pl-4 last:pr-4 bg-white dark:bg-gray-900 group-hover:bg-gray-50 group-hover:dark:bg-gray-800', TEXT_ALIGN[align], className), children: jsxRuntime.jsx("div", { className: "leading-normal", children: children }) }));
|
|
43
|
+
const TableHeaderCell = ({ children, align = 'left', className, ...props }) => (jsxRuntime.jsx("th", { ...props, className: buildClassname.buildClassName('px-3 py-3 first:pl-4 last:pr-4 tracking-wider whitespace-nowrap text-gray-800 dark:text-gray-300', TEXT_ALIGN[align], className), children: children }));
|
|
44
|
+
/* ----------------------------------------------
|
|
45
|
+
* Empty Row
|
|
46
|
+
* ---------------------------------------------- */
|
|
47
|
+
const EmptyTableRow = ({ children, colSpan = 1, contentClass, }) => (jsxRuntime.jsx("tr", { className: "bg-white dark:bg-gray-900", children: jsxRuntime.jsx("td", { colSpan: colSpan, className: "px-4 py-8", children: jsxRuntime.jsx("div", { className: buildClassname.buildClassName('p-6 text-center space-y-3 flex flex-col items-center justify-center', contentClass), children: children }) }) }));
|
|
48
|
+
|
|
49
|
+
exports.EmptyTableRow = EmptyTableRow;
|
|
50
|
+
exports.Table = Table;
|
|
51
|
+
exports.TableBody = TableBody;
|
|
52
|
+
exports.TableCell = TableCell;
|
|
53
|
+
exports.TableFoot = TableFoot;
|
|
54
|
+
exports.TableHead = TableHead;
|
|
55
|
+
exports.TableHeaderCell = TableHeaderCell;
|
|
56
|
+
exports.TableRow = TableRow;
|
|
57
|
+
//# sourceMappingURL=Table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Table.js","sources":["../../../../../src/components/Table/Table.tsx"],"sourcesContent":["import React from 'react'\nimport { buildClassName } from '../../utils/build-classname'\nimport type {\n EmptyTableRowProps,\n TableProps,\n TableBodyProps,\n TableCellProps,\n TableFootProps,\n TableHeaderCellProps,\n TableHeadProps,\n TableRowLoaderProps,\n TableRowProps,\n} from './Table.types'\n\nconst TEXT_ALIGN = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n}\n\nconst TABLE_LAYOUT = {\n fixed: 'table-fixed',\n auto: 'table-auto',\n}\n\n/* ----------------------------------------------\n * Loader Rows\n * ---------------------------------------------- */\nconst TableRowLoader: React.FC<TableRowLoaderProps> = ({ colSize, rowSize }) => (\n <>\n {Array.from({ length: rowSize }).map((_, rowIdx) => (\n <TableRow key={rowIdx} className=\"animate-pulse\">\n {Array.from({ length: colSize }).map((_, colIdx) => (\n <TableCell key={colIdx}>\n <div className=\"flex items-center h-6\">\n <div className=\"h-4 bg-gray-300 dark:bg-gray-700 shimmer rounded w-full\" />\n </div>\n </TableCell>\n ))}\n </TableRow>\n ))}\n </>\n)\n\n/* ----------------------------------------------\n * Table\n * ---------------------------------------------- */\nexport const Table: React.FC<TableProps> = ({\n children,\n layout = 'auto',\n className = '',\n caption,\n}) => (\n <table\n className={buildClassName(\n 'border-collapse w-full divide-y divide-[var(--ui-border)]',\n TABLE_LAYOUT[layout],\n className,\n )}\n >\n {caption && (\n <caption className=\"mb-2 text-sm text-left text-gray-500 dark:text-gray-400\">\n {caption}\n </caption>\n )}\n {children}\n </table>\n)\n\n/* ----------------------------------------------\n * Head\n * ---------------------------------------------- */\nexport const TableHead: React.FC<TableHeadProps> = ({ children, className = '' }) => (\n <thead\n className={buildClassName(\n 'text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-800 dark:text-gray-300',\n className,\n )}\n >\n <tr>{children}</tr>\n </thead>\n)\n\n/* ----------------------------------------------\n * Body\n * ---------------------------------------------- */\nexport const TableBody: React.FC<TableBodyProps> = ({\n children,\n loading,\n colSize = 1,\n rowSize = 5,\n className,\n}) => (\n <tbody\n className={buildClassName(\n 'text-sm text-gray-700 dark:text-white divide-y divide-[var(--ui-border)]',\n className,\n )}\n >\n {loading ? <TableRowLoader colSize={colSize} rowSize={rowSize} /> : children}\n </tbody>\n)\n\n/* ----------------------------------------------\n * Foot\n * ---------------------------------------------- */\nexport const TableFoot: React.FC<TableFootProps> = ({ children }) => (\n <tfoot>\n <tr>{children}</tr>\n </tfoot>\n)\n\n/* ----------------------------------------------\n * Rows\n * ---------------------------------------------- */\nexport const TableRow: React.FC<TableRowProps> = ({\n children,\n hoverable = false,\n className,\n ...props\n}) => (\n <tr\n {...props}\n className={buildClassName(\n 'last:border-b border-[var(--ui-border)]',\n hoverable && 'group',\n className,\n )}\n >\n {children}\n </tr>\n)\n\n/* ----------------------------------------------\n * Cells\n * ---------------------------------------------- */\nexport const TableCell: React.FC<TableCellProps> = ({\n children,\n align = 'left',\n className,\n ...props\n}) => (\n <td\n {...props}\n className={buildClassName(\n 'px-3 py-3 first:pl-4 last:pr-4 bg-white dark:bg-gray-900 group-hover:bg-gray-50 group-hover:dark:bg-gray-800',\n TEXT_ALIGN[align],\n className,\n )}\n >\n <div className=\"leading-normal\">{children}</div>\n </td>\n)\n\nexport const TableHeaderCell: React.FC<TableHeaderCellProps> = ({\n children,\n align = 'left',\n className,\n ...props\n}) => (\n <th\n {...props}\n className={buildClassName(\n 'px-3 py-3 first:pl-4 last:pr-4 tracking-wider whitespace-nowrap text-gray-800 dark:text-gray-300',\n TEXT_ALIGN[align],\n className,\n )}\n >\n {children}\n </th>\n)\n\n/* ----------------------------------------------\n * Empty Row\n * ---------------------------------------------- */\nexport const EmptyTableRow: React.FC<EmptyTableRowProps> = ({\n children,\n colSpan = 1,\n contentClass,\n}) => (\n <tr className=\"bg-white dark:bg-gray-900\">\n <td colSpan={colSpan} className=\"px-4 py-8\">\n <div\n className={buildClassName(\n 'p-6 text-center space-y-3 flex flex-col items-center justify-center',\n contentClass,\n )}\n >\n {children}\n </div>\n </td>\n </tr>\n)\n"],"names":["_jsx","_jsxs","buildClassName"],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var react = require('@headlessui/react');
|
|
6
|
+
var buildClassname = require('../../utils/build-classname.js');
|
|
7
|
+
|
|
8
|
+
const Tabs = ({ tabs, defaultIndex = 0, selectedIndex, onChange, variant = 'underline', orientation = 'horizontal', stretch = false, className = '', listClass = '', panelsClass = '', }) => {
|
|
9
|
+
const isVertical = orientation === 'vertical';
|
|
10
|
+
return (jsxRuntime.jsxs(react.TabGroup, { defaultIndex: defaultIndex, selectedIndex: selectedIndex, onChange: onChange, vertical: isVertical, className: buildClassname.buildClassName(isVertical && 'flex gap-4', stretch && !isVertical && 'w-full', className), children: [jsxRuntime.jsx(react.TabList, { className: buildClassname.buildClassName(isVertical ? 'flex flex-col gap-1' : 'flex gap-2', stretch && !isVertical && 'w-full', listClass), children: tabs.map((tab, idx) => {
|
|
11
|
+
var _a;
|
|
12
|
+
return (jsxRuntime.jsx(react.Tab, { disabled: tab.disabled, as: React.Fragment, children: ({ selected }) => (jsxRuntime.jsxs("button", { disabled: tab.disabled, className: buildTabClass({
|
|
13
|
+
selected,
|
|
14
|
+
variant,
|
|
15
|
+
stretch,
|
|
16
|
+
isVertical,
|
|
17
|
+
tabClass: tab.tabClass,
|
|
18
|
+
}), children: [tab.icon && jsxRuntime.jsx("span", { className: "inline-flex shrink-0", children: tab.icon }), tab.label] })) }, (_a = tab.id) !== null && _a !== void 0 ? _a : idx));
|
|
19
|
+
}) }), jsxRuntime.jsx(react.TabPanels, { className: buildClassname.buildClassName(isVertical ? 'flex-1' : 'mt-3', panelsClass), children: tabs.map((tab, idx) => {
|
|
20
|
+
var _a;
|
|
21
|
+
return (jsxRuntime.jsx(react.TabPanel, { className: tab.panelClass !== undefined
|
|
22
|
+
? tab.panelClass
|
|
23
|
+
: 'rounded-lg bg-white dark:bg-gray-800 p-4 shadow-sm', children: tab.content }, (_a = tab.id) !== null && _a !== void 0 ? _a : idx));
|
|
24
|
+
}) })] }));
|
|
25
|
+
};
|
|
26
|
+
function buildTabClass({ selected, variant, stretch, isVertical, tabClass, }) {
|
|
27
|
+
const base = buildClassname.buildClassName('inline-flex items-center gap-1.5 text-sm font-medium transition focus:outline-none focus-visible:outline-none focus:ring-0 select-none', 'disabled:opacity-40 disabled:cursor-not-allowed disabled:pointer-events-none', stretch && !isVertical && 'flex-1 justify-center');
|
|
28
|
+
let variantClass;
|
|
29
|
+
switch (variant) {
|
|
30
|
+
case 'underline':
|
|
31
|
+
variantClass = isVertical
|
|
32
|
+
? buildClassname.buildClassName('px-3 py-2 w-full text-left border-l-2', selected
|
|
33
|
+
? 'border-[var(--ui-primary)] text-gray-900 dark:text-white'
|
|
34
|
+
: 'border-transparent text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:border-[var(--ui-border)]')
|
|
35
|
+
: buildClassname.buildClassName('px-3 py-1.5 relative text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white', selected &&
|
|
36
|
+
'text-gray-900 dark:text-white after:absolute after:z-10 after:left-0 after:right-0 after:-bottom-1 after:h-0.5 after:bg-[var(--ui-primary)]');
|
|
37
|
+
break;
|
|
38
|
+
case 'segmented':
|
|
39
|
+
variantClass = buildClassname.buildClassName('px-3 py-1.5 rounded-lg', selected
|
|
40
|
+
? 'bg-[var(--ui-primary)] text-white'
|
|
41
|
+
: 'text-gray-600 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700');
|
|
42
|
+
break;
|
|
43
|
+
case 'solid':
|
|
44
|
+
variantClass = buildClassname.buildClassName('px-3 py-1.5 rounded-md', selected
|
|
45
|
+
? 'bg-gray-900 dark:bg-gray-700 text-white'
|
|
46
|
+
: 'bg-gray-200 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-300 dark:hover:bg-gray-700');
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
return buildClassname.buildClassName(base, variantClass, tabClass);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
exports.Tabs = Tabs;
|
|
53
|
+
//# sourceMappingURL=Tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.js","sources":["../../../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import React, { Fragment } from 'react'\nimport { Tab, TabGroup, TabList, TabPanels, TabPanel } from '@headlessui/react'\nimport { buildClassName } from '../../utils/build-classname'\nimport { TabsProps } from './Tabs.types'\n\nexport const Tabs: React.FC<TabsProps> = ({\n tabs,\n defaultIndex = 0,\n selectedIndex,\n onChange,\n variant = 'underline',\n orientation = 'horizontal',\n stretch = false,\n className = '',\n listClass = '',\n panelsClass = '',\n}) => {\n const isVertical = orientation === 'vertical'\n\n return (\n <TabGroup\n defaultIndex={defaultIndex}\n selectedIndex={selectedIndex}\n onChange={onChange}\n vertical={isVertical}\n className={buildClassName(\n isVertical && 'flex gap-4',\n stretch && !isVertical && 'w-full',\n className,\n )}\n >\n <TabList\n className={buildClassName(\n isVertical ? 'flex flex-col gap-1' : 'flex gap-2',\n stretch && !isVertical && 'w-full',\n listClass,\n )}\n >\n {tabs.map((tab, idx) => (\n <Tab key={tab.id ?? idx} disabled={tab.disabled} as={Fragment}>\n {({ selected }) => (\n <button\n disabled={tab.disabled}\n className={buildTabClass({\n selected,\n variant,\n stretch,\n isVertical,\n tabClass: tab.tabClass,\n })}\n >\n {tab.icon && <span className=\"inline-flex shrink-0\">{tab.icon}</span>}\n {tab.label}\n </button>\n )}\n </Tab>\n ))}\n </TabList>\n\n <TabPanels className={buildClassName(isVertical ? 'flex-1' : 'mt-3', panelsClass)}>\n {tabs.map((tab, idx) => (\n <TabPanel\n key={tab.id ?? idx}\n className={\n tab.panelClass !== undefined\n ? tab.panelClass\n : 'rounded-lg bg-white dark:bg-gray-800 p-4 shadow-sm'\n }\n >\n {tab.content}\n </TabPanel>\n ))}\n </TabPanels>\n </TabGroup>\n )\n}\n\nfunction buildTabClass({\n selected,\n variant,\n stretch,\n isVertical,\n tabClass,\n}: {\n selected: boolean\n variant: 'underline' | 'segmented' | 'solid'\n stretch?: boolean\n isVertical?: boolean\n tabClass?: string\n}) {\n const base = buildClassName(\n 'inline-flex items-center gap-1.5 text-sm font-medium transition focus:outline-none focus-visible:outline-none focus:ring-0 select-none',\n 'disabled:opacity-40 disabled:cursor-not-allowed disabled:pointer-events-none',\n stretch && !isVertical && 'flex-1 justify-center',\n )\n\n let variantClass: string\n\n switch (variant) {\n case 'underline':\n variantClass = isVertical\n ? buildClassName(\n 'px-3 py-2 w-full text-left border-l-2',\n selected\n ? 'border-[var(--ui-primary)] text-gray-900 dark:text-white'\n : 'border-transparent text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:border-[var(--ui-border)]',\n )\n : buildClassName(\n 'px-3 py-1.5 relative text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white',\n selected &&\n 'text-gray-900 dark:text-white after:absolute after:z-10 after:left-0 after:right-0 after:-bottom-1 after:h-0.5 after:bg-[var(--ui-primary)]',\n )\n break\n\n case 'segmented':\n variantClass = buildClassName(\n 'px-3 py-1.5 rounded-lg',\n selected\n ? 'bg-[var(--ui-primary)] text-white'\n : 'text-gray-600 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700',\n )\n break\n\n case 'solid':\n variantClass = buildClassName(\n 'px-3 py-1.5 rounded-md',\n selected\n ? 'bg-gray-900 dark:bg-gray-700 text-white'\n : 'bg-gray-200 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-300 dark:hover:bg-gray-700',\n )\n break\n }\n\n return buildClassName(base, variantClass, tabClass)\n}\n"],"names":["_jsxs","TabGroup","buildClassName","_jsx","TabList","Tab","Fragment","TabPanels","TabPanel"],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var buildClassname = require('../../utils/build-classname.js');
|
|
5
|
+
|
|
6
|
+
const sizeClassMap = {
|
|
7
|
+
xs: 'text-xs/5',
|
|
8
|
+
sm: 'text-sm/6',
|
|
9
|
+
md: 'text-base/7',
|
|
10
|
+
lg: 'text-lg/8',
|
|
11
|
+
xl: 'text-xl/9',
|
|
12
|
+
};
|
|
13
|
+
const weightClassMap = {
|
|
14
|
+
light: 'font-light',
|
|
15
|
+
normal: 'font-normal',
|
|
16
|
+
medium: 'font-medium',
|
|
17
|
+
semibold: 'font-semibold',
|
|
18
|
+
bold: 'font-bold',
|
|
19
|
+
};
|
|
20
|
+
const TextContent = React.forwardRef((props, ref) => {
|
|
21
|
+
const { as = 'span', size, weight, xsmall = false, small = false, strong = false, muted = false, error = false, success = false, warning = false, info = false, invert = false, monospace = false, truncate = false, className, children, ...rest } = props;
|
|
22
|
+
const textColorClass = error
|
|
23
|
+
? 'text-[var(--ui-text-danger)]'
|
|
24
|
+
: success
|
|
25
|
+
? 'text-[var(--ui-success)]'
|
|
26
|
+
: warning
|
|
27
|
+
? 'text-[var(--ui-warning)]'
|
|
28
|
+
: info
|
|
29
|
+
? 'text-[var(--ui-info)]'
|
|
30
|
+
: muted
|
|
31
|
+
? invert
|
|
32
|
+
? 'text-gray-300 dark:text-gray-600'
|
|
33
|
+
: 'text-[var(--ui-text-muted)]'
|
|
34
|
+
: invert
|
|
35
|
+
? 'text-white dark:text-black'
|
|
36
|
+
: 'text-[var(--ui-text)]';
|
|
37
|
+
return React.createElement(as, {
|
|
38
|
+
ref,
|
|
39
|
+
className: buildClassname.buildClassName(textColorClass, size ? sizeClassMap[size] : xsmall ? 'text-xs/5' : small ? 'text-sm/6' : undefined, weight ? weightClassMap[weight] : strong ? 'font-semibold' : undefined, monospace && 'font-mono', truncate && 'truncate inline-block max-w-full', className),
|
|
40
|
+
...rest,
|
|
41
|
+
children,
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
TextContent.displayName = 'TextContent';
|
|
45
|
+
|
|
46
|
+
exports.TextContent = TextContent;
|
|
47
|
+
//# sourceMappingURL=TextContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextContent.js","sources":["../../../../../src/components/TextContent/TextContent.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { buildClassName } from '../../utils/build-classname'\nimport type { TextContentProps, TextContentSize, TextContentWeight } from './TextContent.types'\n\nconst sizeClassMap: Record<TextContentSize, string> = {\n xs: 'text-xs/5',\n sm: 'text-sm/6',\n md: 'text-base/7',\n lg: 'text-lg/8',\n xl: 'text-xl/9',\n}\n\nconst weightClassMap: Record<TextContentWeight, string> = {\n light: 'font-light',\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n}\n\nexport const TextContent = forwardRef<HTMLElement, TextContentProps>((props, ref) => {\n const {\n as = 'span',\n size,\n weight,\n xsmall = false,\n small = false,\n strong = false,\n muted = false,\n error = false,\n success = false,\n warning = false,\n info = false,\n invert = false,\n monospace = false,\n truncate = false,\n className,\n children,\n ...rest\n } = props\n\n const textColorClass = error\n ? 'text-[var(--ui-text-danger)]'\n : success\n ? 'text-[var(--ui-success)]'\n : warning\n ? 'text-[var(--ui-warning)]'\n : info\n ? 'text-[var(--ui-info)]'\n : muted\n ? invert\n ? 'text-gray-300 dark:text-gray-600'\n : 'text-[var(--ui-text-muted)]'\n : invert\n ? 'text-white dark:text-black'\n : 'text-[var(--ui-text)]'\n\n return React.createElement(as, {\n ref,\n className: buildClassName(\n textColorClass,\n size ? sizeClassMap[size] : xsmall ? 'text-xs/5' : small ? 'text-sm/6' : undefined,\n weight ? weightClassMap[weight] : strong ? 'font-semibold' : undefined,\n monospace && 'font-mono',\n truncate && 'truncate inline-block max-w-full',\n className,\n ),\n ...rest,\n children,\n })\n})\n\nTextContent.displayName = 'TextContent'\n"],"names":["forwardRef","buildClassName"],"mappings":";;;;;AAIA,MAAM,YAAY,GAAoC;AACpD,IAAA,EAAE,EAAE,WAAW;AACf,IAAA,EAAE,EAAE,WAAW;AACf,IAAA,EAAE,EAAE,aAAa;AACjB,IAAA,EAAE,EAAE,WAAW;AACf,IAAA,EAAE,EAAE,WAAW;CAChB;AAED,MAAM,cAAc,GAAsC;AACxD,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,QAAQ,EAAE,eAAe;AACzB,IAAA,IAAI,EAAE,WAAW;CAClB;AAEM,MAAM,WAAW,GAAGA,gBAAU,CAAgC,CAAC,KAAK,EAAE,GAAG,KAAI;AAClF,IAAA,MAAM,EACJ,EAAE,GAAG,MAAM,EACX,IAAI,EACJ,MAAM,EACN,MAAM,GAAG,KAAK,EACd,KAAK,GAAG,KAAK,EACb,MAAM,GAAG,KAAK,EACd,KAAK,GAAG,KAAK,EACb,KAAK,GAAG,KAAK,EACb,OAAO,GAAG,KAAK,EACf,OAAO,GAAG,KAAK,EACf,IAAI,GAAG,KAAK,EACZ,MAAM,GAAG,KAAK,EACd,SAAS,GAAG,KAAK,EACjB,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,GAAG,KAAK;IAET,MAAM,cAAc,GAAG;AACrB,UAAE;AACF,UAAE;AACA,cAAE;AACF,cAAE;AACA,kBAAE;AACF,kBAAE;AACA,sBAAE;AACF,sBAAE;AACA,0BAAE;AACA,8BAAE;AACF,8BAAE;AACJ,0BAAE;AACA,8BAAE;8BACA,uBAAuB;AAErC,IAAA,OAAO,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE;QAC7B,GAAG;AACH,QAAA,SAAS,EAAEC,6BAAc,CACvB,cAAc,EACd,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,WAAW,GAAG,KAAK,GAAG,WAAW,GAAG,SAAS,EAClF,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,eAAe,GAAG,SAAS,EACtE,SAAS,IAAI,WAAW,EACxB,QAAQ,IAAI,kCAAkC,EAC9C,SAAS,CACV;AACD,QAAA,GAAG,IAAI;QACP,QAAQ;AACT,KAAA,CAAC;AACJ,CAAC;AAED,WAAW,CAAC,WAAW,GAAG,aAAa;;;;"}
|