@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.
Files changed (485) hide show
  1. package/dist/cjs/components/Accordion/Accordion.js +61 -0
  2. package/dist/cjs/components/Accordion/Accordion.js.map +1 -0
  3. package/dist/cjs/components/ActionSheet/ActionSheet.js +38 -0
  4. package/dist/cjs/components/ActionSheet/ActionSheet.js.map +1 -0
  5. package/dist/cjs/components/Alert/Alert.js +34 -0
  6. package/dist/cjs/components/Alert/Alert.js.map +1 -0
  7. package/dist/cjs/components/Badge/Badge.js +33 -0
  8. package/dist/cjs/components/Badge/Badge.js.map +1 -0
  9. package/dist/cjs/components/Banner/Banner.js +41 -0
  10. package/dist/cjs/components/Banner/Banner.js.map +1 -0
  11. package/dist/cjs/components/BodyText/BodyText.js +59 -0
  12. package/dist/cjs/components/BodyText/BodyText.js.map +1 -0
  13. package/dist/cjs/components/BottomNavigation/BottomNavigation.js +52 -0
  14. package/dist/cjs/components/BottomNavigation/BottomNavigation.js.map +1 -0
  15. package/dist/cjs/components/Breadcrumb/Breadcrumb.js +63 -0
  16. package/dist/cjs/components/Breadcrumb/Breadcrumb.js.map +1 -0
  17. package/dist/cjs/components/Button/Button.js +118 -0
  18. package/dist/cjs/components/Button/Button.js.map +1 -0
  19. package/dist/cjs/components/ButtonGroup/ButtonGroup.js +100 -0
  20. package/dist/cjs/components/ButtonGroup/ButtonGroup.js.map +1 -0
  21. package/dist/cjs/components/Card/Card.js +65 -0
  22. package/dist/cjs/components/Card/Card.js.map +1 -0
  23. package/dist/cjs/components/Checkbox/Checkbox.js +64 -0
  24. package/dist/cjs/components/Checkbox/Checkbox.js.map +1 -0
  25. package/dist/cjs/components/CheckboxGroup/CheckboxGroup.js +82 -0
  26. package/dist/cjs/components/CheckboxGroup/CheckboxGroup.js.map +1 -0
  27. package/dist/cjs/components/DataList/DataList.js +287 -0
  28. package/dist/cjs/components/DataList/DataList.js.map +1 -0
  29. package/dist/cjs/components/DataTable/DataTable.icons.js +20 -0
  30. package/dist/cjs/components/DataTable/DataTable.icons.js.map +1 -0
  31. package/dist/cjs/components/DataTable/DataTable.js +110 -0
  32. package/dist/cjs/components/DataTable/DataTable.js.map +1 -0
  33. package/dist/cjs/components/DataTable/DataTable.utils.js +87 -0
  34. package/dist/cjs/components/DataTable/DataTable.utils.js.map +1 -0
  35. package/dist/cjs/components/DetailedInformation/DetailedInformation.js +67 -0
  36. package/dist/cjs/components/DetailedInformation/DetailedInformation.js.map +1 -0
  37. package/dist/cjs/components/Dot/index.js +12 -0
  38. package/dist/cjs/components/Dot/index.js.map +1 -0
  39. package/dist/cjs/components/Drawer/Drawer.js +67 -0
  40. package/dist/cjs/components/Drawer/Drawer.js.map +1 -0
  41. package/dist/cjs/components/Dropdown/Dropdown.js +50 -0
  42. package/dist/cjs/components/Dropdown/Dropdown.js.map +1 -0
  43. package/dist/cjs/components/EmptyState/index.js +14 -0
  44. package/dist/cjs/components/EmptyState/index.js.map +1 -0
  45. package/dist/cjs/components/Flex/Flex.js +25 -0
  46. package/dist/cjs/components/Flex/Flex.js.map +1 -0
  47. package/dist/cjs/components/FloatingActionButton/FloatingActionButton.js +71 -0
  48. package/dist/cjs/components/FloatingActionButton/FloatingActionButton.js.map +1 -0
  49. package/dist/cjs/components/Grid/Grid.js +33 -0
  50. package/dist/cjs/components/Grid/Grid.js.map +1 -0
  51. package/dist/cjs/components/HeadingText/HeadingText.js +89 -0
  52. package/dist/cjs/components/HeadingText/HeadingText.js.map +1 -0
  53. package/dist/cjs/components/Icons/ArrowDownAZ.svg.js +46 -0
  54. package/dist/cjs/components/Icons/ArrowDownAZ.svg.js.map +1 -0
  55. package/dist/cjs/components/Icons/ArrowDownNarrowWide.svg.js +46 -0
  56. package/dist/cjs/components/Icons/ArrowDownNarrowWide.svg.js.map +1 -0
  57. package/dist/cjs/components/Icons/ArrowDownWideNarrow.svg.js +46 -0
  58. package/dist/cjs/components/Icons/ArrowDownWideNarrow.svg.js.map +1 -0
  59. package/dist/cjs/components/Icons/ArrowDownZA.svg.js +46 -0
  60. package/dist/cjs/components/Icons/ArrowDownZA.svg.js.map +1 -0
  61. package/dist/cjs/components/Icons/ArrowUpDown.svg.js +46 -0
  62. package/dist/cjs/components/Icons/ArrowUpDown.svg.js.map +1 -0
  63. package/dist/cjs/components/Icons/BadgeCheck.svg.js +48 -0
  64. package/dist/cjs/components/Icons/BadgeCheck.svg.js.map +1 -0
  65. package/dist/cjs/components/Icons/Check.svg.js +46 -0
  66. package/dist/cjs/components/Icons/Check.svg.js.map +1 -0
  67. package/dist/cjs/components/Icons/ChevronDown.svg.js +46 -0
  68. package/dist/cjs/components/Icons/ChevronDown.svg.js.map +1 -0
  69. package/dist/cjs/components/Icons/ChevronLeft.svg.js +46 -0
  70. package/dist/cjs/components/Icons/ChevronLeft.svg.js.map +1 -0
  71. package/dist/cjs/components/Icons/ChevronRight.svg.js +46 -0
  72. package/dist/cjs/components/Icons/ChevronRight.svg.js.map +1 -0
  73. package/dist/cjs/components/Icons/CircleAlert.svg.js +50 -0
  74. package/dist/cjs/components/Icons/CircleAlert.svg.js.map +1 -0
  75. package/dist/cjs/components/Icons/CircleCheck.svg.js +50 -0
  76. package/dist/cjs/components/Icons/CircleCheck.svg.js.map +1 -0
  77. package/dist/cjs/components/Icons/CirclePlus.svg.js +50 -0
  78. package/dist/cjs/components/Icons/CirclePlus.svg.js.map +1 -0
  79. package/dist/cjs/components/Icons/CircleX.svg.js +50 -0
  80. package/dist/cjs/components/Icons/CircleX.svg.js.map +1 -0
  81. package/dist/cjs/components/Icons/FolderPlus.svg.js +46 -0
  82. package/dist/cjs/components/Icons/FolderPlus.svg.js.map +1 -0
  83. package/dist/cjs/components/Icons/Info.svg.js +50 -0
  84. package/dist/cjs/components/Icons/Info.svg.js.map +1 -0
  85. package/dist/cjs/components/Icons/Search.svg.js +50 -0
  86. package/dist/cjs/components/Icons/Search.svg.js.map +1 -0
  87. package/dist/cjs/components/Icons/Slash.svg.js +46 -0
  88. package/dist/cjs/components/Icons/Slash.svg.js.map +1 -0
  89. package/dist/cjs/components/Icons/TriangleAlert.svg.js +46 -0
  90. package/dist/cjs/components/Icons/TriangleAlert.svg.js.map +1 -0
  91. package/dist/cjs/components/Icons/X.svg.js +46 -0
  92. package/dist/cjs/components/Icons/X.svg.js.map +1 -0
  93. package/dist/cjs/components/Input/Input.js +85 -0
  94. package/dist/cjs/components/Input/Input.js.map +1 -0
  95. package/dist/cjs/components/Label/Label.js +14 -0
  96. package/dist/cjs/components/Label/Label.js.map +1 -0
  97. package/dist/cjs/components/Loader/index.js +18 -0
  98. package/dist/cjs/components/Loader/index.js.map +1 -0
  99. package/dist/cjs/components/MobileHeader/MobileHeader.js +45 -0
  100. package/dist/cjs/components/MobileHeader/MobileHeader.js.map +1 -0
  101. package/dist/cjs/components/MobilePicker/MobilePicker.js +368 -0
  102. package/dist/cjs/components/MobilePicker/MobilePicker.js.map +1 -0
  103. package/dist/cjs/components/MobileStepper/MobileStepper.js +33 -0
  104. package/dist/cjs/components/MobileStepper/MobileStepper.js.map +1 -0
  105. package/dist/cjs/components/Pagination/Pagination.js +33 -0
  106. package/dist/cjs/components/Pagination/Pagination.js.map +1 -0
  107. package/dist/cjs/components/Pagination/usePagination.js +33 -0
  108. package/dist/cjs/components/Pagination/usePagination.js.map +1 -0
  109. package/dist/cjs/components/PasswordInput/PasswordInput.js +56 -0
  110. package/dist/cjs/components/PasswordInput/PasswordInput.js.map +1 -0
  111. package/dist/cjs/components/PinInput/PinInput.js +98 -0
  112. package/dist/cjs/components/PinInput/PinInput.js.map +1 -0
  113. package/dist/cjs/components/PullToRefresh/PullToRefresh.js +83 -0
  114. package/dist/cjs/components/PullToRefresh/PullToRefresh.js.map +1 -0
  115. package/dist/cjs/components/QuantityStepper/QuantityStepper.js +77 -0
  116. package/dist/cjs/components/QuantityStepper/QuantityStepper.js.map +1 -0
  117. package/dist/cjs/components/Radio/Radio.js +34 -0
  118. package/dist/cjs/components/Radio/Radio.js.map +1 -0
  119. package/dist/cjs/components/RadioGroup/RadioGroup.js +50 -0
  120. package/dist/cjs/components/RadioGroup/RadioGroup.js.map +1 -0
  121. package/dist/cjs/components/RadioSwitch/RadioSwitch.js +116 -0
  122. package/dist/cjs/components/RadioSwitch/RadioSwitch.js.map +1 -0
  123. package/dist/cjs/components/RangeInput/RangeInput.js +66 -0
  124. package/dist/cjs/components/RangeInput/RangeInput.js.map +1 -0
  125. package/dist/cjs/components/RangeSlider/RangeSlider.js +167 -0
  126. package/dist/cjs/components/RangeSlider/RangeSlider.js.map +1 -0
  127. package/dist/cjs/components/SegmentedControl/SegmentedControl.js +64 -0
  128. package/dist/cjs/components/SegmentedControl/SegmentedControl.js.map +1 -0
  129. package/dist/cjs/components/SelectBox/SelectBox.js +305 -0
  130. package/dist/cjs/components/SelectBox/SelectBox.js.map +1 -0
  131. package/dist/cjs/components/Skeleton/Skeleton.js +36 -0
  132. package/dist/cjs/components/Skeleton/Skeleton.js.map +1 -0
  133. package/dist/cjs/components/StatusPill/StatusPill.js +46 -0
  134. package/dist/cjs/components/StatusPill/StatusPill.js.map +1 -0
  135. package/dist/cjs/components/StickyActionBar/StickyActionBar.js +22 -0
  136. package/dist/cjs/components/StickyActionBar/StickyActionBar.js.map +1 -0
  137. package/dist/cjs/components/SwipeableRow/SwipeableRow.js +187 -0
  138. package/dist/cjs/components/SwipeableRow/SwipeableRow.js.map +1 -0
  139. package/dist/cjs/components/SwipeableTabs/SwipeableTabs.js +91 -0
  140. package/dist/cjs/components/SwipeableTabs/SwipeableTabs.js.map +1 -0
  141. package/dist/cjs/components/Table/Table.js +57 -0
  142. package/dist/cjs/components/Table/Table.js.map +1 -0
  143. package/dist/cjs/components/Tabs/Tabs.js +53 -0
  144. package/dist/cjs/components/Tabs/Tabs.js.map +1 -0
  145. package/dist/cjs/components/TextContent/TextContent.js +47 -0
  146. package/dist/cjs/components/TextContent/TextContent.js.map +1 -0
  147. package/dist/cjs/components/Textarea/Textarea.js +64 -0
  148. package/dist/cjs/components/Textarea/Textarea.js.map +1 -0
  149. package/dist/cjs/components/Toast/Toast.js +96 -0
  150. package/dist/cjs/components/Toast/Toast.js.map +1 -0
  151. package/dist/cjs/components/Toast/ToastProvider.js +151 -0
  152. package/dist/cjs/components/Toast/ToastProvider.js.map +1 -0
  153. package/dist/cjs/components/VirtualizedDataTable/VirtualizedDataTable.js +122 -0
  154. package/dist/cjs/components/VirtualizedDataTable/VirtualizedDataTable.js.map +1 -0
  155. package/dist/cjs/components/VirtualizedDataTable/VirtualizedRow.js +48 -0
  156. package/dist/cjs/components/VirtualizedDataTable/VirtualizedRow.js.map +1 -0
  157. package/dist/cjs/components/WheelPicker/WheelPicker.js +82 -0
  158. package/dist/cjs/components/WheelPicker/WheelPicker.js.map +1 -0
  159. package/dist/cjs/components/common-responsive.js +310 -0
  160. package/dist/cjs/components/common-responsive.js.map +1 -0
  161. package/dist/cjs/hooks/use-debounce.js +31 -0
  162. package/dist/cjs/hooks/use-debounce.js.map +1 -0
  163. package/dist/cjs/hooks/use-is-mobile.js +24 -0
  164. package/dist/cjs/hooks/use-is-mobile.js.map +1 -0
  165. package/dist/cjs/hooks/use-is-tablet-or-mobile.js +13 -0
  166. package/dist/cjs/hooks/use-is-tablet-or-mobile.js.map +1 -0
  167. package/dist/cjs/hooks/use-is-tablet.js +21 -0
  168. package/dist/cjs/hooks/use-is-tablet.js.map +1 -0
  169. package/dist/cjs/index.js +163 -0
  170. package/dist/cjs/index.js.map +1 -0
  171. package/dist/cjs/react-tailwind.css +2 -0
  172. package/dist/cjs/react-tailwind.css.map +1 -0
  173. package/dist/cjs/utils/build-classname.js +8 -0
  174. package/dist/cjs/utils/build-classname.js.map +1 -0
  175. package/dist/cjs/utils/get.js +20 -0
  176. package/dist/cjs/utils/get.js.map +1 -0
  177. package/dist/cjs/utils/is-array.js +12 -0
  178. package/dist/cjs/utils/is-array.js.map +1 -0
  179. package/dist/cjs/utils/is-empty.js +26 -0
  180. package/dist/cjs/utils/is-empty.js.map +1 -0
  181. package/dist/es/components/Accordion/Accordion.js +59 -0
  182. package/dist/es/components/Accordion/Accordion.js.map +1 -0
  183. package/dist/es/components/ActionSheet/ActionSheet.js +36 -0
  184. package/dist/es/components/ActionSheet/ActionSheet.js.map +1 -0
  185. package/dist/es/components/Alert/Alert.js +32 -0
  186. package/dist/es/components/Alert/Alert.js.map +1 -0
  187. package/dist/es/components/Badge/Badge.js +31 -0
  188. package/dist/es/components/Badge/Badge.js.map +1 -0
  189. package/dist/es/components/Banner/Banner.js +39 -0
  190. package/dist/es/components/Banner/Banner.js.map +1 -0
  191. package/dist/es/components/BodyText/BodyText.js +57 -0
  192. package/dist/es/components/BodyText/BodyText.js.map +1 -0
  193. package/dist/es/components/BottomNavigation/BottomNavigation.js +50 -0
  194. package/dist/es/components/BottomNavigation/BottomNavigation.js.map +1 -0
  195. package/dist/es/components/Breadcrumb/Breadcrumb.js +61 -0
  196. package/dist/es/components/Breadcrumb/Breadcrumb.js.map +1 -0
  197. package/dist/es/components/Button/Button.js +116 -0
  198. package/dist/es/components/Button/Button.js.map +1 -0
  199. package/dist/es/components/ButtonGroup/ButtonGroup.js +98 -0
  200. package/dist/es/components/ButtonGroup/ButtonGroup.js.map +1 -0
  201. package/dist/es/components/Card/Card.js +57 -0
  202. package/dist/es/components/Card/Card.js.map +1 -0
  203. package/dist/es/components/Checkbox/Checkbox.js +62 -0
  204. package/dist/es/components/Checkbox/Checkbox.js.map +1 -0
  205. package/dist/es/components/CheckboxGroup/CheckboxGroup.js +80 -0
  206. package/dist/es/components/CheckboxGroup/CheckboxGroup.js.map +1 -0
  207. package/dist/es/components/DataList/DataList.js +285 -0
  208. package/dist/es/components/DataList/DataList.js.map +1 -0
  209. package/dist/es/components/DataTable/DataTable.icons.js +17 -0
  210. package/dist/es/components/DataTable/DataTable.icons.js.map +1 -0
  211. package/dist/es/components/DataTable/DataTable.js +108 -0
  212. package/dist/es/components/DataTable/DataTable.js.map +1 -0
  213. package/dist/es/components/DataTable/DataTable.utils.js +83 -0
  214. package/dist/es/components/DataTable/DataTable.utils.js.map +1 -0
  215. package/dist/es/components/DetailedInformation/DetailedInformation.js +65 -0
  216. package/dist/es/components/DetailedInformation/DetailedInformation.js.map +1 -0
  217. package/dist/es/components/Dot/index.js +10 -0
  218. package/dist/es/components/Dot/index.js.map +1 -0
  219. package/dist/es/components/Drawer/Drawer.js +65 -0
  220. package/dist/es/components/Drawer/Drawer.js.map +1 -0
  221. package/dist/es/components/Dropdown/Dropdown.js +48 -0
  222. package/dist/es/components/Dropdown/Dropdown.js.map +1 -0
  223. package/dist/es/components/EmptyState/index.js +12 -0
  224. package/dist/es/components/EmptyState/index.js.map +1 -0
  225. package/dist/es/components/Flex/Flex.js +22 -0
  226. package/dist/es/components/Flex/Flex.js.map +1 -0
  227. package/dist/es/components/FloatingActionButton/FloatingActionButton.js +69 -0
  228. package/dist/es/components/FloatingActionButton/FloatingActionButton.js.map +1 -0
  229. package/dist/es/components/Grid/Grid.js +30 -0
  230. package/dist/es/components/Grid/Grid.js.map +1 -0
  231. package/dist/es/components/HeadingText/HeadingText.js +87 -0
  232. package/dist/es/components/HeadingText/HeadingText.js.map +1 -0
  233. package/dist/es/components/Icons/ArrowDownAZ.svg.js +23 -0
  234. package/dist/es/components/Icons/ArrowDownAZ.svg.js.map +1 -0
  235. package/dist/es/components/Icons/ArrowDownNarrowWide.svg.js +23 -0
  236. package/dist/es/components/Icons/ArrowDownNarrowWide.svg.js.map +1 -0
  237. package/dist/es/components/Icons/ArrowDownWideNarrow.svg.js +23 -0
  238. package/dist/es/components/Icons/ArrowDownWideNarrow.svg.js.map +1 -0
  239. package/dist/es/components/Icons/ArrowDownZA.svg.js +23 -0
  240. package/dist/es/components/Icons/ArrowDownZA.svg.js.map +1 -0
  241. package/dist/es/components/Icons/ArrowUpDown.svg.js +23 -0
  242. package/dist/es/components/Icons/ArrowUpDown.svg.js.map +1 -0
  243. package/dist/es/components/Icons/BadgeCheck.svg.js +25 -0
  244. package/dist/es/components/Icons/BadgeCheck.svg.js.map +1 -0
  245. package/dist/es/components/Icons/Check.svg.js +23 -0
  246. package/dist/es/components/Icons/Check.svg.js.map +1 -0
  247. package/dist/es/components/Icons/ChevronDown.svg.js +23 -0
  248. package/dist/es/components/Icons/ChevronDown.svg.js.map +1 -0
  249. package/dist/es/components/Icons/ChevronLeft.svg.js +23 -0
  250. package/dist/es/components/Icons/ChevronLeft.svg.js.map +1 -0
  251. package/dist/es/components/Icons/ChevronRight.svg.js +23 -0
  252. package/dist/es/components/Icons/ChevronRight.svg.js.map +1 -0
  253. package/dist/es/components/Icons/CircleAlert.svg.js +27 -0
  254. package/dist/es/components/Icons/CircleAlert.svg.js.map +1 -0
  255. package/dist/es/components/Icons/CircleCheck.svg.js +27 -0
  256. package/dist/es/components/Icons/CircleCheck.svg.js.map +1 -0
  257. package/dist/es/components/Icons/CirclePlus.svg.js +27 -0
  258. package/dist/es/components/Icons/CirclePlus.svg.js.map +1 -0
  259. package/dist/es/components/Icons/CircleX.svg.js +27 -0
  260. package/dist/es/components/Icons/CircleX.svg.js.map +1 -0
  261. package/dist/es/components/Icons/FolderPlus.svg.js +23 -0
  262. package/dist/es/components/Icons/FolderPlus.svg.js.map +1 -0
  263. package/dist/es/components/Icons/Info.svg.js +27 -0
  264. package/dist/es/components/Icons/Info.svg.js.map +1 -0
  265. package/dist/es/components/Icons/Search.svg.js +27 -0
  266. package/dist/es/components/Icons/Search.svg.js.map +1 -0
  267. package/dist/es/components/Icons/Slash.svg.js +23 -0
  268. package/dist/es/components/Icons/Slash.svg.js.map +1 -0
  269. package/dist/es/components/Icons/TriangleAlert.svg.js +23 -0
  270. package/dist/es/components/Icons/TriangleAlert.svg.js.map +1 -0
  271. package/dist/es/components/Icons/X.svg.js +23 -0
  272. package/dist/es/components/Icons/X.svg.js.map +1 -0
  273. package/dist/es/components/Input/Input.js +82 -0
  274. package/dist/es/components/Input/Input.js.map +1 -0
  275. package/dist/es/components/Label/Label.js +12 -0
  276. package/dist/es/components/Label/Label.js.map +1 -0
  277. package/dist/es/components/Loader/index.js +16 -0
  278. package/dist/es/components/Loader/index.js.map +1 -0
  279. package/dist/es/components/MobileHeader/MobileHeader.js +43 -0
  280. package/dist/es/components/MobileHeader/MobileHeader.js.map +1 -0
  281. package/dist/es/components/MobilePicker/MobilePicker.js +366 -0
  282. package/dist/es/components/MobilePicker/MobilePicker.js.map +1 -0
  283. package/dist/es/components/MobileStepper/MobileStepper.js +31 -0
  284. package/dist/es/components/MobileStepper/MobileStepper.js.map +1 -0
  285. package/dist/es/components/Pagination/Pagination.js +31 -0
  286. package/dist/es/components/Pagination/Pagination.js.map +1 -0
  287. package/dist/es/components/Pagination/usePagination.js +30 -0
  288. package/dist/es/components/Pagination/usePagination.js.map +1 -0
  289. package/dist/es/components/PasswordInput/PasswordInput.js +51 -0
  290. package/dist/es/components/PasswordInput/PasswordInput.js.map +1 -0
  291. package/dist/es/components/PinInput/PinInput.js +96 -0
  292. package/dist/es/components/PinInput/PinInput.js.map +1 -0
  293. package/dist/es/components/PullToRefresh/PullToRefresh.js +81 -0
  294. package/dist/es/components/PullToRefresh/PullToRefresh.js.map +1 -0
  295. package/dist/es/components/QuantityStepper/QuantityStepper.js +75 -0
  296. package/dist/es/components/QuantityStepper/QuantityStepper.js.map +1 -0
  297. package/dist/es/components/Radio/Radio.js +32 -0
  298. package/dist/es/components/Radio/Radio.js.map +1 -0
  299. package/dist/es/components/RadioGroup/RadioGroup.js +48 -0
  300. package/dist/es/components/RadioGroup/RadioGroup.js.map +1 -0
  301. package/dist/es/components/RadioSwitch/RadioSwitch.js +114 -0
  302. package/dist/es/components/RadioSwitch/RadioSwitch.js.map +1 -0
  303. package/dist/es/components/RangeInput/RangeInput.js +64 -0
  304. package/dist/es/components/RangeInput/RangeInput.js.map +1 -0
  305. package/dist/es/components/RangeSlider/RangeSlider.js +165 -0
  306. package/dist/es/components/RangeSlider/RangeSlider.js.map +1 -0
  307. package/dist/es/components/SegmentedControl/SegmentedControl.js +62 -0
  308. package/dist/es/components/SegmentedControl/SegmentedControl.js.map +1 -0
  309. package/dist/es/components/SelectBox/SelectBox.js +303 -0
  310. package/dist/es/components/SelectBox/SelectBox.js.map +1 -0
  311. package/dist/es/components/Skeleton/Skeleton.js +34 -0
  312. package/dist/es/components/Skeleton/Skeleton.js.map +1 -0
  313. package/dist/es/components/StatusPill/StatusPill.js +44 -0
  314. package/dist/es/components/StatusPill/StatusPill.js.map +1 -0
  315. package/dist/es/components/StickyActionBar/StickyActionBar.js +20 -0
  316. package/dist/es/components/StickyActionBar/StickyActionBar.js.map +1 -0
  317. package/dist/es/components/SwipeableRow/SwipeableRow.js +185 -0
  318. package/dist/es/components/SwipeableRow/SwipeableRow.js.map +1 -0
  319. package/dist/es/components/SwipeableTabs/SwipeableTabs.js +89 -0
  320. package/dist/es/components/SwipeableTabs/SwipeableTabs.js.map +1 -0
  321. package/dist/es/components/Table/Table.js +48 -0
  322. package/dist/es/components/Table/Table.js.map +1 -0
  323. package/dist/es/components/Tabs/Tabs.js +51 -0
  324. package/dist/es/components/Tabs/Tabs.js.map +1 -0
  325. package/dist/es/components/TextContent/TextContent.js +45 -0
  326. package/dist/es/components/TextContent/TextContent.js.map +1 -0
  327. package/dist/es/components/Textarea/Textarea.js +62 -0
  328. package/dist/es/components/Textarea/Textarea.js.map +1 -0
  329. package/dist/es/components/Toast/Toast.js +94 -0
  330. package/dist/es/components/Toast/Toast.js.map +1 -0
  331. package/dist/es/components/Toast/ToastProvider.js +148 -0
  332. package/dist/es/components/Toast/ToastProvider.js.map +1 -0
  333. package/dist/es/components/VirtualizedDataTable/VirtualizedDataTable.js +120 -0
  334. package/dist/es/components/VirtualizedDataTable/VirtualizedDataTable.js.map +1 -0
  335. package/dist/es/components/VirtualizedDataTable/VirtualizedRow.js +46 -0
  336. package/dist/es/components/VirtualizedDataTable/VirtualizedRow.js.map +1 -0
  337. package/dist/es/components/WheelPicker/WheelPicker.js +80 -0
  338. package/dist/es/components/WheelPicker/WheelPicker.js.map +1 -0
  339. package/dist/es/components/common-responsive.js +287 -0
  340. package/dist/es/components/common-responsive.js.map +1 -0
  341. package/dist/es/hooks/use-debounce.js +28 -0
  342. package/dist/es/hooks/use-debounce.js.map +1 -0
  343. package/dist/es/hooks/use-is-mobile.js +22 -0
  344. package/dist/es/hooks/use-is-mobile.js.map +1 -0
  345. package/dist/es/hooks/use-is-tablet-or-mobile.js +11 -0
  346. package/dist/es/hooks/use-is-tablet-or-mobile.js.map +1 -0
  347. package/dist/es/hooks/use-is-tablet.js +19 -0
  348. package/dist/es/hooks/use-is-tablet.js.map +1 -0
  349. package/dist/es/index.js +67 -0
  350. package/dist/es/index.js.map +1 -0
  351. package/dist/es/react-tailwind.css +2 -0
  352. package/dist/es/react-tailwind.css.map +1 -0
  353. package/dist/es/utils/build-classname.js +6 -0
  354. package/dist/es/utils/build-classname.js.map +1 -0
  355. package/dist/es/utils/get.js +18 -0
  356. package/dist/es/utils/get.js.map +1 -0
  357. package/dist/es/utils/is-array.js +10 -0
  358. package/dist/es/utils/is-array.js.map +1 -0
  359. package/dist/es/utils/is-empty.js +24 -0
  360. package/dist/es/utils/is-empty.js.map +1 -0
  361. package/dist/react-tailwind.cjs.js +3596 -630
  362. package/dist/react-tailwind.cjs.js.map +1 -1
  363. package/dist/react-tailwind.es.js +3561 -623
  364. package/dist/react-tailwind.es.js.map +1 -1
  365. package/dist/types/components/ActionSheet/ActionSheet.d.ts +5 -0
  366. package/dist/types/components/ActionSheet/ActionSheet.test.d.ts +1 -0
  367. package/dist/types/components/ActionSheet/ActionSheet.types.d.ts +44 -0
  368. package/dist/types/components/ActionSheet/index.d.ts +2 -0
  369. package/dist/types/components/Badge/Badge.types.d.ts +1 -1
  370. package/dist/types/components/BodyText/BodyText.d.ts +1 -1
  371. package/dist/types/components/BodyText/BodyText.types.d.ts +47 -8
  372. package/dist/types/components/BottomNavigation/BottomNavigation.d.ts +5 -0
  373. package/dist/types/components/BottomNavigation/BottomNavigation.test.d.ts +1 -0
  374. package/dist/types/components/BottomNavigation/BottomNavigation.types.d.ts +41 -0
  375. package/dist/types/components/BottomNavigation/index.d.ts +2 -0
  376. package/dist/types/components/Breadcrumb/Breadcrumb.d.ts +2 -3
  377. package/dist/types/components/Breadcrumb/Breadcrumb.types.d.ts +43 -10
  378. package/dist/types/components/Button/Button.types.d.ts +17 -63
  379. package/dist/types/components/ButtonGroup/ButtonGroup.types.d.ts +16 -0
  380. package/dist/types/components/Card/Card.d.ts +7 -1
  381. package/dist/types/components/Card/Card.types.d.ts +73 -42
  382. package/dist/types/components/Checkbox/Checkbox.types.d.ts +28 -1
  383. package/dist/types/components/CheckboxGroup/CheckboxGroup.types.d.ts +53 -1
  384. package/dist/types/components/DataList/DataList.d.ts +5 -0
  385. package/dist/types/components/DataList/DataList.test.d.ts +1 -0
  386. package/dist/types/components/DataList/DataList.types.d.ts +81 -0
  387. package/dist/types/components/DataList/index.d.ts +2 -0
  388. package/dist/types/components/DataTable/DataTable.d.ts +1 -1
  389. package/dist/types/components/DataTable/DataTable.types.d.ts +10 -0
  390. package/dist/types/components/DetailedInformation/DetailedInformation.d.ts +1 -1
  391. package/dist/types/components/DetailedInformation/DetailedInformation.types.d.ts +47 -3
  392. package/dist/types/components/Drawer/Drawer.types.d.ts +37 -13
  393. package/dist/types/components/Dropdown/Dropdown.types.d.ts +17 -1
  394. package/dist/types/components/Flex/Flex.d.ts +3 -0
  395. package/dist/types/components/Flex/Flex.test.d.ts +1 -0
  396. package/dist/types/components/Flex/Flex.types.d.ts +92 -0
  397. package/dist/types/components/Flex/index.d.ts +2 -0
  398. package/dist/types/components/FloatingActionButton/FloatingActionButton.d.ts +5 -0
  399. package/dist/types/components/FloatingActionButton/FloatingActionButton.test.d.ts +1 -0
  400. package/dist/types/components/FloatingActionButton/FloatingActionButton.types.d.ts +48 -0
  401. package/dist/types/components/FloatingActionButton/index.d.ts +2 -0
  402. package/dist/types/components/Grid/Grid.d.ts +3 -0
  403. package/dist/types/components/Grid/Grid.test.d.ts +1 -0
  404. package/dist/types/components/Grid/Grid.types.d.ts +136 -0
  405. package/dist/types/components/Grid/index.d.ts +2 -0
  406. package/dist/types/components/HeadingText/HeadingText.d.ts +7 -7
  407. package/dist/types/components/HeadingText/HeadingText.test.d.ts +1 -0
  408. package/dist/types/components/HeadingText/HeadingText.types.d.ts +56 -3
  409. package/dist/types/components/Input/Input.d.ts +4 -2
  410. package/dist/types/components/Input/Input.types.d.ts +36 -3
  411. package/dist/types/components/Loader/index.d.ts +1 -1
  412. package/dist/types/components/MobileHeader/MobileHeader.d.ts +5 -0
  413. package/dist/types/components/MobileHeader/MobileHeader.test.d.ts +1 -0
  414. package/dist/types/components/MobileHeader/MobileHeader.types.d.ts +49 -0
  415. package/dist/types/components/MobileHeader/index.d.ts +2 -0
  416. package/dist/types/components/MobilePicker/MobilePicker.d.ts +6 -0
  417. package/dist/types/components/MobilePicker/MobilePicker.test.d.ts +1 -0
  418. package/dist/types/components/MobilePicker/MobilePicker.types.d.ts +90 -0
  419. package/dist/types/components/MobilePicker/index.d.ts +2 -0
  420. package/dist/types/components/MobileStepper/MobileStepper.d.ts +5 -0
  421. package/dist/types/components/MobileStepper/MobileStepper.test.d.ts +1 -0
  422. package/dist/types/components/MobileStepper/MobileStepper.types.d.ts +28 -0
  423. package/dist/types/components/MobileStepper/index.d.ts +2 -0
  424. package/dist/types/components/PasswordInput/PasswordInput.d.ts +8 -4
  425. package/dist/types/components/PasswordInput/PasswordInput.types.d.ts +8 -0
  426. package/dist/types/components/PinInput/PinInput.d.ts +5 -0
  427. package/dist/types/components/PinInput/PinInput.test.d.ts +1 -0
  428. package/dist/types/components/PinInput/PinInput.types.d.ts +29 -0
  429. package/dist/types/components/PinInput/index.d.ts +2 -0
  430. package/dist/types/components/PullToRefresh/PullToRefresh.d.ts +5 -0
  431. package/dist/types/components/PullToRefresh/PullToRefresh.test.d.ts +1 -0
  432. package/dist/types/components/PullToRefresh/PullToRefresh.types.d.ts +23 -0
  433. package/dist/types/components/PullToRefresh/index.d.ts +2 -0
  434. package/dist/types/components/QuantityStepper/QuantityStepper.d.ts +3 -0
  435. package/dist/types/components/QuantityStepper/QuantityStepper.test.d.ts +1 -0
  436. package/dist/types/components/QuantityStepper/QuantityStepper.types.d.ts +66 -0
  437. package/dist/types/components/QuantityStepper/index.d.ts +2 -0
  438. package/dist/types/components/Radio/Radio.d.ts +1 -1
  439. package/dist/types/components/Radio/Radio.types.d.ts +12 -2
  440. package/dist/types/components/RadioGroup/RadioGroup.d.ts +1 -1
  441. package/dist/types/components/RadioGroup/RadioGroup.types.d.ts +41 -13
  442. package/dist/types/components/RadioSwitch/RadioSwitch.d.ts +0 -4
  443. package/dist/types/components/RadioSwitch/RadioSwitch.types.d.ts +6 -31
  444. package/dist/types/components/RangeInput/RangeInput.d.ts +1 -1
  445. package/dist/types/components/RangeInput/RangeInput.types.d.ts +14 -1
  446. package/dist/types/components/RangeSlider/RangeSlider.d.ts +1 -1
  447. package/dist/types/components/RangeSlider/RangeSlider.types.d.ts +28 -13
  448. package/dist/types/components/SegmentedControl/SegmentedControl.d.ts +3 -0
  449. package/dist/types/components/SegmentedControl/SegmentedControl.test.d.ts +1 -0
  450. package/dist/types/components/SegmentedControl/SegmentedControl.types.d.ts +53 -0
  451. package/dist/types/components/SegmentedControl/index.d.ts +2 -0
  452. package/dist/types/components/SelectBox/SelectBox.types.d.ts +32 -14
  453. package/dist/types/components/Skeleton/Skeleton.d.ts +2 -0
  454. package/dist/types/components/Skeleton/Skeleton.test.d.ts +1 -0
  455. package/dist/types/components/Skeleton/Skeleton.types.d.ts +38 -0
  456. package/dist/types/components/Skeleton/index.d.ts +2 -0
  457. package/dist/types/components/StatusPill/StatusPill.d.ts +2 -0
  458. package/dist/types/components/StatusPill/StatusPill.test.d.ts +1 -0
  459. package/dist/types/components/StatusPill/StatusPill.types.d.ts +29 -0
  460. package/dist/types/components/StatusPill/index.d.ts +2 -0
  461. package/dist/types/components/StickyActionBar/StickyActionBar.d.ts +2 -0
  462. package/dist/types/components/StickyActionBar/StickyActionBar.test.d.ts +1 -0
  463. package/dist/types/components/StickyActionBar/StickyActionBar.types.d.ts +30 -0
  464. package/dist/types/components/StickyActionBar/index.d.ts +2 -0
  465. package/dist/types/components/SwipeableRow/SwipeableRow.d.ts +3 -0
  466. package/dist/types/components/SwipeableRow/SwipeableRow.test.d.ts +1 -0
  467. package/dist/types/components/SwipeableRow/SwipeableRow.types.d.ts +42 -0
  468. package/dist/types/components/SwipeableRow/index.d.ts +2 -0
  469. package/dist/types/components/SwipeableTabs/SwipeableTabs.d.ts +5 -0
  470. package/dist/types/components/SwipeableTabs/SwipeableTabs.test.d.ts +1 -0
  471. package/dist/types/components/SwipeableTabs/SwipeableTabs.types.d.ts +38 -0
  472. package/dist/types/components/SwipeableTabs/index.d.ts +2 -0
  473. package/dist/types/components/TextContent/TextContent.d.ts +2 -2
  474. package/dist/types/components/TextContent/TextContent.types.d.ts +47 -7
  475. package/dist/types/components/Textarea/Textarea.types.d.ts +37 -3
  476. package/dist/types/components/Toast/Toast.d.ts +1 -1
  477. package/dist/types/components/Toast/Toast.types.d.ts +117 -43
  478. package/dist/types/components/Toast/ToastProvider.d.ts +3 -6
  479. package/dist/types/components/WheelPicker/WheelPicker.d.ts +5 -0
  480. package/dist/types/components/WheelPicker/WheelPicker.test.d.ts +1 -0
  481. package/dist/types/components/WheelPicker/WheelPicker.types.d.ts +35 -0
  482. package/dist/types/components/WheelPicker/index.d.ts +2 -0
  483. package/dist/types/components/common-responsive.d.ts +57 -0
  484. package/dist/types/index.d.ts +19 -0
  485. 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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"}