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