@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,118 @@
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 index = require('../Loader/index.js');
7
+ var TextContent = require('../TextContent/TextContent.js');
8
+
9
+ /**
10
+ * Tailwind CSS classes for theme + variant combinations.
11
+ */
12
+ const THEMED_BTN_CLASS = {
13
+ primary: {
14
+ default: 'text-white bg-[var(--ui-primary)] hover:bg-[var(--ui-primary-hover)] focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-primary-ring)] disabled:bg-[var(--ui-primary-disabled)]',
15
+ outlined: 'text-[var(--ui-primary-text)] hover:text-white border border-[var(--ui-primary)] hover:bg-[var(--ui-primary)] focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-primary-ring)] disabled:text-[var(--ui-primary-disabled)] disabled:border-[var(--ui-primary-disabled)]',
16
+ plain: 'text-[var(--ui-primary-text)] hover:bg-black/5 dark:hover:bg-gray-700 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-primary-ring)] disabled:text-[var(--ui-primary-disabled)]',
17
+ },
18
+ danger: {
19
+ default: 'text-white bg-[var(--ui-danger)] hover:bg-[var(--ui-danger-hover)] focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-danger-ring)] disabled:bg-[var(--ui-danger-disabled)]',
20
+ outlined: 'text-[var(--ui-danger-text)] hover:text-white border border-[var(--ui-danger)] hover:bg-[var(--ui-danger)] focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-danger-ring)] disabled:text-[var(--ui-danger-disabled)] disabled:border-[var(--ui-danger-disabled)]',
21
+ plain: 'text-[var(--ui-danger-text)] hover:bg-black/5 dark:hover:bg-gray-700 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-danger-ring)] disabled:text-[var(--ui-danger-disabled)]',
22
+ },
23
+ secondary: {
24
+ default: 'text-gray-700 bg-white border border-[var(--ui-border)] hover:bg-gray-100 dark:bg-gray-800 dark:text-white dark:hover:bg-gray-700 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-focus-ring)] disabled:bg-gray-200 dark:disabled:bg-gray-700',
25
+ outlined: 'text-gray-700 hover:text-white border border-[var(--ui-border)] hover:bg-gray-700 dark:text-gray-200 dark:hover:text-white dark:hover:bg-gray-600 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-focus-ring)] disabled:text-gray-400 disabled:border-[var(--ui-border-muted)]',
26
+ plain: 'text-gray-700 hover:bg-black/5 dark:text-gray-200 dark:hover:bg-gray-700 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-focus-ring)] disabled:text-gray-400',
27
+ },
28
+ success: {
29
+ default: 'text-white bg-emerald-600 hover:bg-emerald-700 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-emerald-500 disabled:bg-emerald-300 dark:disabled:bg-emerald-900',
30
+ outlined: 'text-emerald-600 hover:text-white border border-emerald-600 hover:bg-emerald-600 dark:text-emerald-400 dark:border-emerald-500 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-emerald-500 disabled:opacity-50',
31
+ plain: 'text-emerald-600 hover:bg-emerald-50 dark:text-emerald-400 dark:hover:bg-emerald-950/40 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-emerald-500 disabled:opacity-50',
32
+ },
33
+ warning: {
34
+ default: 'text-white bg-amber-500 hover:bg-amber-600 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-amber-500 disabled:bg-amber-300 dark:disabled:bg-amber-900',
35
+ outlined: 'text-amber-600 hover:text-white border border-amber-500 hover:bg-amber-500 dark:text-amber-400 dark:border-amber-500 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-amber-500 disabled:opacity-50',
36
+ plain: 'text-amber-600 hover:bg-amber-50 dark:text-amber-400 dark:hover:bg-amber-950/40 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-amber-500 disabled:opacity-50',
37
+ },
38
+ };
39
+ const LOADER_TEXT_CLASS = {
40
+ primary: {
41
+ default: 'text-white',
42
+ outlined: 'text-[var(--ui-primary-text)]',
43
+ plain: 'text-[var(--ui-primary-text)]',
44
+ },
45
+ danger: {
46
+ default: 'text-white',
47
+ outlined: 'text-[var(--ui-danger-text)]',
48
+ plain: 'text-[var(--ui-danger-text)]',
49
+ },
50
+ secondary: {
51
+ default: 'text-gray-700 dark:text-white',
52
+ outlined: 'text-gray-700 dark:text-gray-200',
53
+ plain: 'text-gray-700 dark:text-gray-200',
54
+ },
55
+ success: {
56
+ default: 'text-white',
57
+ outlined: 'text-emerald-600 dark:text-emerald-400',
58
+ plain: 'text-emerald-600 dark:text-emerald-400',
59
+ },
60
+ warning: {
61
+ default: 'text-white',
62
+ outlined: 'text-amber-600 dark:text-amber-400',
63
+ plain: 'text-amber-600 dark:text-amber-400',
64
+ },
65
+ };
66
+ /**
67
+ * Generate size classes.
68
+ */
69
+ const getBtnSizeClasses = (size, iconOnly = false) => {
70
+ switch (size) {
71
+ case 'xs':
72
+ return iconOnly ? 'h-7 w-7 p-1 rounded-sm text-xs' : 'h-7 px-2.5 rounded-sm gap-1 text-xs';
73
+ case 'sm':
74
+ return iconOnly ? 'h-8 w-8 p-1.5 rounded text-sm' : 'h-8 px-3 rounded gap-1.5 text-sm';
75
+ case 'md':
76
+ return iconOnly ? 'h-9 w-9 p-2 rounded-md text-sm' : 'h-9 px-4 rounded-md gap-2 text-sm';
77
+ case 'lg':
78
+ return iconOnly
79
+ ? 'h-10 w-10 p-2.5 rounded-lg text-base'
80
+ : 'h-10 px-5 rounded-lg gap-2 text-base';
81
+ }
82
+ };
83
+ /**
84
+ * Base shared tailwind classes.
85
+ */
86
+ const BASE_BTN_CLASS = 'font-medium flex items-center justify-center shrink-0 cursor-pointer ' +
87
+ 'disabled:cursor-not-allowed disabled:pointer-events-none disabled:opacity-75 ' +
88
+ 'active:scale-[0.98] transition-all duration-150 ease-out focus:outline-none';
89
+ const Button = React.forwardRef(({ as, type, ...props }, ref) => {
90
+ const { className = '', children, theme = 'primary', variant = 'default', size = 'md', leftIcon, rightIcon, fullWidth = false, loading = false, loadingText = '', rounded = false, disabled, iconOnly = false, noOutlineOnFocus = false, ...restProps } = props;
91
+ const Component = as || 'button';
92
+ // Accessibility guard for icon-only buttons
93
+ if (iconOnly && !restProps['aria-label']) {
94
+ console.warn('[ui] <Button iconOnly> requires aria-label for accessibility.');
95
+ }
96
+ const resolvedDisabled = disabled || loading;
97
+ // Clean invalid props when not rendering a real button
98
+ const { type: _ignoreType, disabled: _ignoreDisabled, ...cleanRest } = restProps;
99
+ const buttonSpecificProps = Component === 'button'
100
+ ? {
101
+ type: type !== null && type !== void 0 ? type : 'button',
102
+ disabled: resolvedDisabled,
103
+ }
104
+ : {};
105
+ const classes = React.useMemo(() => buildClassname.buildClassName(BASE_BTN_CLASS, THEMED_BTN_CLASS[theme][variant], getBtnSizeClasses(size, iconOnly), !noOutlineOnFocus && 'focus:outline focus:outline-2 focus:outline-offset-2', rounded && 'rounded-full', fullWidth && 'w-full', variant === 'default' && 'shadow-xs hover:shadow-none disabled:shadow-none', className), [theme, variant, size, iconOnly, rounded, fullWidth, noOutlineOnFocus, className]);
106
+ /**
107
+ * SPECIAL CASE: iconOnly + loading → show spinner only
108
+ */
109
+ if (loading && iconOnly) {
110
+ return (jsxRuntime.jsx(Component, { ref: ref, className: classes, ...buttonSpecificProps, ...cleanRest, children: jsxRuntime.jsx(index.Loader, { "data-testid": "btn-loader-icon", size: "xs", className: buildClassname.buildClassName(LOADER_TEXT_CLASS[theme][variant]) }) }));
111
+ }
112
+ const loaderIcon = (jsxRuntime.jsx(index.Loader, { "data-testid": "btn-loader-icon", size: "xs", className: buildClassname.buildClassName(LOADER_TEXT_CLASS[theme][variant]) }));
113
+ return (jsxRuntime.jsx(Component, { ref: ref, className: classes, ...buttonSpecificProps, ...cleanRest, children: loading && !loadingText ? (jsxRuntime.jsxs("span", { className: "flex items-center gap-2", "aria-live": "polite", children: [loaderIcon, children] })) : loading && loadingText ? (jsxRuntime.jsxs("span", { className: "flex items-center gap-2", "aria-live": "polite", children: [loaderIcon, jsxRuntime.jsx(TextContent.TextContent, { className: buildClassname.buildClassName(LOADER_TEXT_CLASS[theme][variant]), children: loadingText })] })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [leftIcon && jsxRuntime.jsx("span", { className: "shrink-0 flex items-center", children: leftIcon }), children, rightIcon && jsxRuntime.jsx("span", { className: "shrink-0 flex items-center", children: rightIcon })] })) }));
114
+ });
115
+ Button.displayName = 'Button';
116
+
117
+ exports.Button = Button;
118
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.js","sources":["../../../../../src/components/Button/Button.tsx"],"sourcesContent":["import React, { ElementType, forwardRef, useMemo } from 'react'\nimport { buildClassName } from '../../utils/build-classname'\nimport { Loader } from '../Loader'\nimport { TextContent } from '../TextContent'\nimport type { ButtonComponent, ButtonProps, ButtonSize, ThemedButtonClass } from './Button.types'\nimport type { PolymorphicRef } from '../common-type'\n\n/**\n * Tailwind CSS classes for theme + variant combinations.\n */\nconst THEMED_BTN_CLASS: ThemedButtonClass = {\n primary: {\n default:\n 'text-white bg-[var(--ui-primary)] hover:bg-[var(--ui-primary-hover)] focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-primary-ring)] disabled:bg-[var(--ui-primary-disabled)]',\n outlined:\n 'text-[var(--ui-primary-text)] hover:text-white border border-[var(--ui-primary)] hover:bg-[var(--ui-primary)] focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-primary-ring)] disabled:text-[var(--ui-primary-disabled)] disabled:border-[var(--ui-primary-disabled)]',\n plain:\n 'text-[var(--ui-primary-text)] hover:bg-black/5 dark:hover:bg-gray-700 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-primary-ring)] disabled:text-[var(--ui-primary-disabled)]',\n },\n danger: {\n default:\n 'text-white bg-[var(--ui-danger)] hover:bg-[var(--ui-danger-hover)] focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-danger-ring)] disabled:bg-[var(--ui-danger-disabled)]',\n outlined:\n 'text-[var(--ui-danger-text)] hover:text-white border border-[var(--ui-danger)] hover:bg-[var(--ui-danger)] focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-danger-ring)] disabled:text-[var(--ui-danger-disabled)] disabled:border-[var(--ui-danger-disabled)]',\n plain:\n 'text-[var(--ui-danger-text)] hover:bg-black/5 dark:hover:bg-gray-700 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-danger-ring)] disabled:text-[var(--ui-danger-disabled)]',\n },\n secondary: {\n default:\n 'text-gray-700 bg-white border border-[var(--ui-border)] hover:bg-gray-100 dark:bg-gray-800 dark:text-white dark:hover:bg-gray-700 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-focus-ring)] disabled:bg-gray-200 dark:disabled:bg-gray-700',\n outlined:\n 'text-gray-700 hover:text-white border border-[var(--ui-border)] hover:bg-gray-700 dark:text-gray-200 dark:hover:text-white dark:hover:bg-gray-600 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-focus-ring)] disabled:text-gray-400 disabled:border-[var(--ui-border-muted)]',\n plain:\n 'text-gray-700 hover:bg-black/5 dark:text-gray-200 dark:hover:bg-gray-700 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--ui-focus-ring)] disabled:text-gray-400',\n },\n success: {\n default:\n 'text-white bg-emerald-600 hover:bg-emerald-700 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-emerald-500 disabled:bg-emerald-300 dark:disabled:bg-emerald-900',\n outlined:\n 'text-emerald-600 hover:text-white border border-emerald-600 hover:bg-emerald-600 dark:text-emerald-400 dark:border-emerald-500 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-emerald-500 disabled:opacity-50',\n plain:\n 'text-emerald-600 hover:bg-emerald-50 dark:text-emerald-400 dark:hover:bg-emerald-950/40 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-emerald-500 disabled:opacity-50',\n },\n warning: {\n default:\n 'text-white bg-amber-500 hover:bg-amber-600 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-amber-500 disabled:bg-amber-300 dark:disabled:bg-amber-900',\n outlined:\n 'text-amber-600 hover:text-white border border-amber-500 hover:bg-amber-500 dark:text-amber-400 dark:border-amber-500 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-amber-500 disabled:opacity-50',\n plain:\n 'text-amber-600 hover:bg-amber-50 dark:text-amber-400 dark:hover:bg-amber-950/40 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-amber-500 disabled:opacity-50',\n },\n}\n\nconst LOADER_TEXT_CLASS: ThemedButtonClass = {\n primary: {\n default: 'text-white',\n outlined: 'text-[var(--ui-primary-text)]',\n plain: 'text-[var(--ui-primary-text)]',\n },\n danger: {\n default: 'text-white',\n outlined: 'text-[var(--ui-danger-text)]',\n plain: 'text-[var(--ui-danger-text)]',\n },\n secondary: {\n default: 'text-gray-700 dark:text-white',\n outlined: 'text-gray-700 dark:text-gray-200',\n plain: 'text-gray-700 dark:text-gray-200',\n },\n success: {\n default: 'text-white',\n outlined: 'text-emerald-600 dark:text-emerald-400',\n plain: 'text-emerald-600 dark:text-emerald-400',\n },\n warning: {\n default: 'text-white',\n outlined: 'text-amber-600 dark:text-amber-400',\n plain: 'text-amber-600 dark:text-amber-400',\n },\n}\n\n/**\n * Generate size classes.\n */\nconst getBtnSizeClasses = (size: ButtonSize, iconOnly = false) => {\n switch (size) {\n case 'xs':\n return iconOnly ? 'h-7 w-7 p-1 rounded-sm text-xs' : 'h-7 px-2.5 rounded-sm gap-1 text-xs'\n\n case 'sm':\n return iconOnly ? 'h-8 w-8 p-1.5 rounded text-sm' : 'h-8 px-3 rounded gap-1.5 text-sm'\n\n case 'md':\n return iconOnly ? 'h-9 w-9 p-2 rounded-md text-sm' : 'h-9 px-4 rounded-md gap-2 text-sm'\n\n case 'lg':\n return iconOnly\n ? 'h-10 w-10 p-2.5 rounded-lg text-base'\n : 'h-10 px-5 rounded-lg gap-2 text-base'\n }\n}\n\n/**\n * Base shared tailwind classes.\n */\nconst BASE_BTN_CLASS =\n 'font-medium flex items-center justify-center shrink-0 cursor-pointer ' +\n 'disabled:cursor-not-allowed disabled:pointer-events-none disabled:opacity-75 ' +\n 'active:scale-[0.98] transition-all duration-150 ease-out focus:outline-none'\n\nexport const Button = forwardRef(\n <C extends ElementType = 'button'>(\n { as, type, ...props }: ButtonProps<C>,\n ref: PolymorphicRef<C>,\n ) => {\n const {\n className = '',\n children,\n theme = 'primary',\n variant = 'default',\n size = 'md',\n leftIcon,\n rightIcon,\n fullWidth = false,\n loading = false,\n loadingText = '',\n rounded = false,\n disabled,\n iconOnly = false,\n noOutlineOnFocus = false,\n ...restProps\n } = props\n\n const Component = as || 'button'\n\n // Accessibility guard for icon-only buttons\n if (iconOnly && !(restProps as Record<string, unknown>)['aria-label']) {\n console.warn('[ui] <Button iconOnly> requires aria-label for accessibility.')\n }\n\n const resolvedDisabled = disabled || loading\n\n // Clean invalid props when not rendering a real button\n const { type: _ignoreType, disabled: _ignoreDisabled, ...cleanRest } = restProps\n\n const buttonSpecificProps =\n Component === 'button'\n ? {\n type: type ?? 'button',\n disabled: resolvedDisabled,\n }\n : {}\n\n const classes = useMemo(\n () =>\n buildClassName(\n BASE_BTN_CLASS,\n THEMED_BTN_CLASS[theme][variant],\n getBtnSizeClasses(size, iconOnly),\n !noOutlineOnFocus && 'focus:outline focus:outline-2 focus:outline-offset-2',\n rounded && 'rounded-full',\n fullWidth && 'w-full',\n variant === 'default' && 'shadow-xs hover:shadow-none disabled:shadow-none',\n className,\n ),\n [theme, variant, size, iconOnly, rounded, fullWidth, noOutlineOnFocus, className],\n )\n\n /**\n * SPECIAL CASE: iconOnly + loading → show spinner only\n */\n if (loading && iconOnly) {\n return (\n <Component ref={ref} className={classes} {...buttonSpecificProps} {...cleanRest}>\n <Loader\n data-testid=\"btn-loader-icon\"\n size=\"xs\"\n className={buildClassName(LOADER_TEXT_CLASS[theme][variant])}\n />\n </Component>\n )\n }\n\n const loaderIcon = (\n <Loader\n data-testid=\"btn-loader-icon\"\n size=\"xs\"\n className={buildClassName(LOADER_TEXT_CLASS[theme][variant])}\n />\n )\n\n return (\n <Component ref={ref} className={classes} {...buttonSpecificProps} {...cleanRest}>\n {loading && !loadingText ? (\n <span className=\"flex items-center gap-2\" aria-live=\"polite\">\n {loaderIcon}\n {children}\n </span>\n ) : loading && loadingText ? (\n <span className=\"flex items-center gap-2\" aria-live=\"polite\">\n {loaderIcon}\n <TextContent className={buildClassName(LOADER_TEXT_CLASS[theme][variant])}>\n {loadingText}\n </TextContent>\n </span>\n ) : (\n <>\n {leftIcon && <span className=\"shrink-0 flex items-center\">{leftIcon}</span>}\n {children}\n {rightIcon && <span className=\"shrink-0 flex items-center\">{rightIcon}</span>}\n </>\n )}\n </Component>\n )\n },\n) as ButtonComponent\n\nButton.displayName = 'Button'\n"],"names":["forwardRef","useMemo","buildClassName","_jsx","Loader","_jsxs","TextContent"],"mappings":"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"}
@@ -0,0 +1,100 @@
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 EDGE_ROUNDING = {
8
+ horizontal: {
9
+ xs: { first: 'rounded-l-sm rounded-r-none', last: 'rounded-r-sm rounded-l-none' },
10
+ sm: { first: 'rounded-l rounded-r-none', last: 'rounded-r rounded-l-none' },
11
+ md: { first: 'rounded-l-md rounded-r-none', last: 'rounded-r-md rounded-l-none' },
12
+ lg: { first: 'rounded-l-lg rounded-r-none', last: 'rounded-r-lg rounded-l-none' },
13
+ },
14
+ vertical: {
15
+ xs: { first: 'rounded-t-sm rounded-b-none', last: 'rounded-b-sm rounded-t-none' },
16
+ sm: { first: 'rounded-t rounded-b-none', last: 'rounded-b rounded-t-none' },
17
+ md: { first: 'rounded-t-md rounded-b-none', last: 'rounded-b-md rounded-t-none' },
18
+ lg: { first: 'rounded-t-lg rounded-b-none', last: 'rounded-b-lg rounded-t-none' },
19
+ },
20
+ };
21
+ const PILL_EDGE_ROUNDING = {
22
+ horizontal: { first: 'rounded-l-full rounded-r-none', last: 'rounded-r-full rounded-l-none' },
23
+ vertical: { first: 'rounded-t-full rounded-b-none', last: 'rounded-b-full rounded-t-none' },
24
+ };
25
+ const getEdgeRoundingClass = ({ index, count, size, orientation, pill, }) => {
26
+ if (count <= 1)
27
+ return '';
28
+ if (index !== 0 && index !== count - 1)
29
+ return 'rounded-none';
30
+ const position = index === 0 ? 'first' : 'last';
31
+ return pill
32
+ ? PILL_EDGE_ROUNDING[orientation][position]
33
+ : EDGE_ROUNDING[orientation][size][position];
34
+ };
35
+ const ButtonGroup = ({ children, orientation = 'horizontal', theme = 'secondary', variant = 'default', size = 'md', value, onChange, disabled: groupDisabled = false, rounded = false, fullWidth = false, label, className = '', }) => {
36
+ const isVertical = orientation === 'vertical';
37
+ const items = React.useMemo(() => React.Children.toArray(children).filter(React.isValidElement), [children]);
38
+ const count = items.length;
39
+ const isToggleMode = value !== undefined;
40
+ return (jsxRuntime.jsx("div", { role: "group", "aria-label": label, className: buildClassname.buildClassName('inline-flex items-stretch', isVertical ? 'flex-col' : 'flex-row', fullWidth && 'flex w-full', className), children: items.map((child, index) => {
41
+ var _a, _b, _c, _d, _e, _f, _g, _h;
42
+ const childProps = child.props;
43
+ const childSize = (_a = childProps.size) !== null && _a !== void 0 ? _a : size;
44
+ const childDisabled = (_b = childProps.disabled) !== null && _b !== void 0 ? _b : groupDisabled;
45
+ // Resolve item value for toggle mode
46
+ const itemVal = (_d = (_c = childProps.value) !== null && _c !== void 0 ? _c : childProps.id) !== null && _d !== void 0 ? _d : (typeof childProps.children === 'string' || typeof childProps.children === 'number'
47
+ ? childProps.children
48
+ : index);
49
+ const isSelected = isToggleMode
50
+ ? Array.isArray(value)
51
+ ? value.includes(itemVal)
52
+ : value === itemVal
53
+ : false;
54
+ const resolvedTheme = isToggleMode
55
+ ? isSelected
56
+ ? ((_e = childProps.theme) !== null && _e !== void 0 ? _e : 'primary')
57
+ : ((_f = childProps.theme) !== null && _f !== void 0 ? _f : 'secondary')
58
+ : ((_g = childProps.theme) !== null && _g !== void 0 ? _g : theme);
59
+ const resolvedVariant = (_h = childProps.variant) !== null && _h !== void 0 ? _h : variant;
60
+ const handleClick = (e) => {
61
+ var _a;
62
+ (_a = childProps.onClick) === null || _a === void 0 ? void 0 : _a.call(childProps, e);
63
+ if (isToggleMode && !childDisabled) {
64
+ onChange === null || onChange === void 0 ? void 0 : onChange(itemVal);
65
+ }
66
+ };
67
+ return React.cloneElement(child, {
68
+ theme: resolvedTheme,
69
+ variant: resolvedVariant,
70
+ size: childSize,
71
+ disabled: childDisabled,
72
+ ...(isToggleMode ? { 'aria-pressed': isSelected } : {}),
73
+ onClick: handleClick,
74
+ className: buildClassname.buildClassName(childProps.className, getEdgeRoundingClass({
75
+ index,
76
+ count,
77
+ size: childSize,
78
+ orientation,
79
+ pill: rounded,
80
+ }), count > 1 && [
81
+ 'relative shadow-none hover:z-10 focus:z-10 focus-visible:z-10',
82
+ isSelected && 'z-10',
83
+ index > 0 && (isVertical ? '-mt-px' : '-ml-px'),
84
+ index > 0 &&
85
+ resolvedVariant === 'default' &&
86
+ (isVertical
87
+ ? resolvedTheme === 'primary' || resolvedTheme === 'danger'
88
+ ? 'border-t border-white/25 dark:border-white/20'
89
+ : 'border-t border-[var(--ui-border)]'
90
+ : resolvedTheme === 'primary' || resolvedTheme === 'danger'
91
+ ? 'border-l border-white/25 dark:border-white/20'
92
+ : 'border-l border-[var(--ui-border)]'),
93
+ ], fullWidth && 'flex-1'),
94
+ });
95
+ }) }));
96
+ };
97
+ ButtonGroup.displayName = 'ButtonGroup';
98
+
99
+ exports.ButtonGroup = ButtonGroup;
100
+ //# sourceMappingURL=ButtonGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonGroup.js","sources":["../../../../../src/components/ButtonGroup/ButtonGroup.tsx"],"sourcesContent":["import React, { Children, cloneElement, isValidElement, useMemo } from 'react'\nimport { buildClassName } from '../../utils/build-classname'\nimport type { ButtonSize, ButtonTheme } from '../Button/Button.types'\nimport type { ButtonGroupOrientation, ButtonGroupProps } from './ButtonGroup.types'\n\nconst EDGE_ROUNDING: Record<\n ButtonGroupOrientation,\n Record<ButtonSize, { first: string; last: string }>\n> = {\n horizontal: {\n xs: { first: 'rounded-l-sm rounded-r-none', last: 'rounded-r-sm rounded-l-none' },\n sm: { first: 'rounded-l rounded-r-none', last: 'rounded-r rounded-l-none' },\n md: { first: 'rounded-l-md rounded-r-none', last: 'rounded-r-md rounded-l-none' },\n lg: { first: 'rounded-l-lg rounded-r-none', last: 'rounded-r-lg rounded-l-none' },\n },\n vertical: {\n xs: { first: 'rounded-t-sm rounded-b-none', last: 'rounded-b-sm rounded-t-none' },\n sm: { first: 'rounded-t rounded-b-none', last: 'rounded-b rounded-t-none' },\n md: { first: 'rounded-t-md rounded-b-none', last: 'rounded-b-md rounded-t-none' },\n lg: { first: 'rounded-t-lg rounded-b-none', last: 'rounded-b-lg rounded-t-none' },\n },\n}\n\nconst PILL_EDGE_ROUNDING: Record<ButtonGroupOrientation, { first: string; last: string }> = {\n horizontal: { first: 'rounded-l-full rounded-r-none', last: 'rounded-r-full rounded-l-none' },\n vertical: { first: 'rounded-t-full rounded-b-none', last: 'rounded-b-full rounded-t-none' },\n}\n\nconst getEdgeRoundingClass = ({\n index,\n count,\n size,\n orientation,\n pill,\n}: {\n index: number\n count: number\n size: ButtonSize\n orientation: ButtonGroupOrientation\n pill: boolean\n}) => {\n if (count <= 1) return ''\n if (index !== 0 && index !== count - 1) return 'rounded-none'\n\n const position = index === 0 ? 'first' : 'last'\n return pill\n ? PILL_EDGE_ROUNDING[orientation][position]\n : EDGE_ROUNDING[orientation][size][position]\n}\n\nexport const ButtonGroup: React.FC<ButtonGroupProps> = ({\n children,\n orientation = 'horizontal',\n theme = 'secondary',\n variant = 'default',\n size = 'md',\n value,\n onChange,\n disabled: groupDisabled = false,\n rounded = false,\n fullWidth = false,\n label,\n className = '',\n}) => {\n const isVertical = orientation === 'vertical'\n const items = useMemo(() => Children.toArray(children).filter(isValidElement), [children])\n const count = items.length\n const isToggleMode = value !== undefined\n\n return (\n <div\n role=\"group\"\n aria-label={label}\n className={buildClassName(\n 'inline-flex items-stretch',\n isVertical ? 'flex-col' : 'flex-row',\n fullWidth && 'flex w-full',\n className,\n )}\n >\n {items.map((child, index) => {\n const childProps = child.props as Record<string, any>\n const childSize = (childProps.size as ButtonSize) ?? size\n const childDisabled = childProps.disabled ?? groupDisabled\n\n // Resolve item value for toggle mode\n const itemVal =\n childProps.value ??\n childProps.id ??\n (typeof childProps.children === 'string' || typeof childProps.children === 'number'\n ? childProps.children\n : index)\n\n const isSelected = isToggleMode\n ? Array.isArray(value)\n ? value.includes(itemVal)\n : value === itemVal\n : false\n\n const resolvedTheme: ButtonTheme = isToggleMode\n ? isSelected\n ? (childProps.theme ?? 'primary')\n : (childProps.theme ?? 'secondary')\n : (childProps.theme ?? theme)\n\n const resolvedVariant = childProps.variant ?? variant\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n childProps.onClick?.(e)\n if (isToggleMode && !childDisabled) {\n onChange?.(itemVal)\n }\n }\n\n return cloneElement(child as React.ReactElement<Record<string, unknown>>, {\n theme: resolvedTheme,\n variant: resolvedVariant,\n size: childSize,\n disabled: childDisabled,\n ...(isToggleMode ? { 'aria-pressed': isSelected } : {}),\n onClick: handleClick,\n className: buildClassName(\n childProps.className,\n getEdgeRoundingClass({\n index,\n count,\n size: childSize,\n orientation,\n pill: rounded,\n }),\n count > 1 && [\n 'relative shadow-none hover:z-10 focus:z-10 focus-visible:z-10',\n isSelected && 'z-10',\n index > 0 && (isVertical ? '-mt-px' : '-ml-px'),\n index > 0 &&\n resolvedVariant === 'default' &&\n (isVertical\n ? resolvedTheme === 'primary' || resolvedTheme === 'danger'\n ? 'border-t border-white/25 dark:border-white/20'\n : 'border-t border-[var(--ui-border)]'\n : resolvedTheme === 'primary' || resolvedTheme === 'danger'\n ? 'border-l border-white/25 dark:border-white/20'\n : 'border-l border-[var(--ui-border)]'),\n ],\n fullWidth && 'flex-1',\n ),\n })\n })}\n </div>\n )\n}\n\nButtonGroup.displayName = 'ButtonGroup'\n"],"names":["useMemo","Children","isValidElement","_jsx","buildClassName","cloneElement"],"mappings":"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"}
@@ -0,0 +1,65 @@
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 RADIUS_CLASS = {
8
+ none: 'rounded-none',
9
+ sm: 'rounded-sm',
10
+ md: 'rounded-md',
11
+ lg: 'rounded-lg',
12
+ xl: 'rounded-xl',
13
+ '2xl': 'rounded-2xl',
14
+ };
15
+ const ASPECT_RATIO_CLASS = {
16
+ auto: 'aspect-auto',
17
+ square: 'aspect-square',
18
+ video: 'aspect-video',
19
+ wide: 'aspect-[21/9]',
20
+ };
21
+ function ChevronRightIcon({ className = 'size-4' }) {
22
+ return (jsxRuntime.jsx("svg", { className: className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) }));
23
+ }
24
+ const Card = React.forwardRef(({ as, ...props }, ref) => {
25
+ const { variant = 'outlined', radius = 'xl', hoverable = false, clickable = false, selected = false, bordered = true, compact = false, zeroPadding = false, title, subtitle, leading, trailing, badge, showChevron = false, children, onClick, ...rest } = props;
26
+ const Component = as || 'div';
27
+ const { className, ...cleanRest } = rest;
28
+ const isClickable = clickable || Boolean(onClick);
29
+ const isOutlined = variant === 'outlined' && bordered;
30
+ const isElevated = variant === 'elevated';
31
+ const isFilled = variant === 'filled';
32
+ const isGhost = variant === 'ghost';
33
+ const classes = buildClassname.buildClassName('block transition-all duration-150 select-none', RADIUS_CLASS[radius] || RADIUS_CLASS.xl, zeroPadding ? '' : compact ? 'p-3 sm:p-4' : 'p-5 sm:p-6',
34
+ // Surface variants
35
+ isOutlined && 'bg-white dark:bg-gray-900 border border-[var(--ui-border)]', isElevated &&
36
+ 'bg-white dark:bg-gray-900 border border-[var(--ui-border)] shadow-md shadow-gray-200/50 dark:shadow-none', isFilled && 'bg-gray-50/80 dark:bg-gray-800/60 border border-transparent', isGhost && 'bg-transparent border border-transparent',
37
+ // Hoverable & Clickable mobile/web touch states
38
+ hoverable && 'hover:bg-gray-100/80 dark:hover:bg-gray-800/80', isClickable &&
39
+ 'cursor-pointer hover:-translate-y-0.5 hover:shadow-lg active:scale-[0.99] active:bg-gray-100 dark:active:bg-gray-800/90', selected && 'ring-2 ring-[var(--ui-primary)] border-[var(--ui-primary)]', className);
40
+ const hasHeaderRow = title || subtitle || leading || trailing || badge || showChevron;
41
+ return (jsxRuntime.jsxs(Component, { ref: ref, className: classes, onClick: onClick, ...cleanRest, children: [hasHeaderRow && (jsxRuntime.jsxs("div", { className: buildClassname.buildClassName('flex items-center gap-3 w-full min-w-0', children && 'mb-3'), children: [leading && jsxRuntime.jsx("div", { className: "shrink-0 flex items-center justify-center", children: leading }), jsxRuntime.jsxs("div", { className: "flex-1 min-w-0 text-left", children: [jsxRuntime.jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [title && (jsxRuntime.jsx("span", { className: "text-sm font-semibold text-gray-900 dark:text-white truncate", children: title })), badge] }), subtitle && (jsxRuntime.jsx("div", { className: "text-xs text-gray-500 dark:text-gray-400 mt-0.5 truncate", children: subtitle }))] }), (trailing || showChevron) && (jsxRuntime.jsxs("div", { className: "shrink-0 flex items-center gap-2 text-xs text-gray-500 dark:text-gray-400", children: [trailing, showChevron && jsxRuntime.jsx(ChevronRightIcon, { className: "size-4 text-gray-400" })] }))] })), children] }));
42
+ });
43
+ const CardHeader = ({ className, bordered = false, children, ...props }) => (jsxRuntime.jsx("div", { className: buildClassname.buildClassName('flex items-center justify-between gap-4 mb-4', bordered && 'pb-4 border-b border-[var(--ui-border)]', className), ...props, children: children }));
44
+ const CardTitle = ({ className, as: Component = 'h3', children, ...props }) => (jsxRuntime.jsx(Component, { className: buildClassname.buildClassName('text-lg font-semibold text-gray-900 dark:text-white tracking-tight', className), ...props, children: children }));
45
+ const CardDescription = ({ className, children, ...props }) => (jsxRuntime.jsx("p", { className: buildClassname.buildClassName('text-sm text-gray-500 dark:text-gray-400 font-normal mt-1', className), ...props, children: children }));
46
+ const CardContent = ({ className, children, ...props }) => (jsxRuntime.jsx("div", { className: buildClassname.buildClassName('space-y-3', className), ...props, children: children }));
47
+ const CardFooter = ({ className, bordered = false, children, ...props }) => (jsxRuntime.jsx("div", { className: buildClassname.buildClassName('flex items-center justify-end gap-3 mt-4', bordered && 'pt-4 border-t border-[var(--ui-border)]', className), ...props, children: children }));
48
+ const CardMedia = ({ className, aspectRatio = 'video', alt = '', ...props }) => (jsxRuntime.jsx("div", { className: buildClassname.buildClassName('overflow-hidden -mx-5 -mt-5 mb-4 sm:-mx-6 sm:-mt-6', className), children: jsxRuntime.jsx("img", { alt: alt, className: buildClassname.buildClassName('w-full object-cover', ASPECT_RATIO_CLASS[aspectRatio] || ASPECT_RATIO_CLASS.video), ...props }) }));
49
+ Card.Header = CardHeader;
50
+ Card.Title = CardTitle;
51
+ Card.Description = CardDescription;
52
+ Card.Content = CardContent;
53
+ Card.Body = CardContent;
54
+ Card.Footer = CardFooter;
55
+ Card.Media = CardMedia;
56
+ Card.displayName = 'Card';
57
+
58
+ exports.Card = Card;
59
+ exports.CardContent = CardContent;
60
+ exports.CardDescription = CardDescription;
61
+ exports.CardFooter = CardFooter;
62
+ exports.CardHeader = CardHeader;
63
+ exports.CardMedia = CardMedia;
64
+ exports.CardTitle = CardTitle;
65
+ //# sourceMappingURL=Card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.js","sources":["../../../../../src/components/Card/Card.tsx"],"sourcesContent":["import { ElementType, forwardRef } from 'react'\nimport { buildClassName } from '../../utils/build-classname'\nimport type {\n CardComponent,\n CardContentProps,\n CardDescriptionProps,\n CardFooterProps,\n CardHeaderProps,\n CardMediaProps,\n CardProps,\n CardTitleProps,\n} from './Card.types'\nimport type { PolymorphicRef } from '../common-type'\n\nconst RADIUS_CLASS: Record<string, string> = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n}\n\nconst ASPECT_RATIO_CLASS: Record<string, string> = {\n auto: 'aspect-auto',\n square: 'aspect-square',\n video: 'aspect-video',\n wide: 'aspect-[21/9]',\n}\n\nfunction ChevronRightIcon({ className = 'size-4' }: { className?: string }) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n}\n\nexport const Card = forwardRef(\n <C extends ElementType = 'div'>({ as, ...props }: CardProps<C>, ref: PolymorphicRef<C>) => {\n const {\n variant = 'outlined',\n radius = 'xl',\n hoverable = false,\n clickable = false,\n selected = false,\n bordered = true,\n compact = false,\n zeroPadding = false,\n title,\n subtitle,\n leading,\n trailing,\n badge,\n showChevron = false,\n children,\n onClick,\n ...rest\n } = props\n\n const Component = as || 'div'\n const { className, ...cleanRest } = rest as { className?: string }\n\n const isClickable = clickable || Boolean(onClick)\n const isOutlined = variant === 'outlined' && bordered\n const isElevated = variant === 'elevated'\n const isFilled = variant === 'filled'\n const isGhost = variant === 'ghost'\n\n const classes = buildClassName(\n 'block transition-all duration-150 select-none',\n RADIUS_CLASS[radius] || RADIUS_CLASS.xl,\n zeroPadding ? '' : compact ? 'p-3 sm:p-4' : 'p-5 sm:p-6',\n\n // Surface variants\n isOutlined && 'bg-white dark:bg-gray-900 border border-[var(--ui-border)]',\n isElevated &&\n 'bg-white dark:bg-gray-900 border border-[var(--ui-border)] shadow-md shadow-gray-200/50 dark:shadow-none',\n isFilled && 'bg-gray-50/80 dark:bg-gray-800/60 border border-transparent',\n isGhost && 'bg-transparent border border-transparent',\n\n // Hoverable & Clickable mobile/web touch states\n hoverable && 'hover:bg-gray-100/80 dark:hover:bg-gray-800/80',\n isClickable &&\n 'cursor-pointer hover:-translate-y-0.5 hover:shadow-lg active:scale-[0.99] active:bg-gray-100 dark:active:bg-gray-800/90',\n selected && 'ring-2 ring-[var(--ui-primary)] border-[var(--ui-primary)]',\n\n className,\n )\n\n const hasHeaderRow = title || subtitle || leading || trailing || badge || showChevron\n\n return (\n <Component ref={ref} className={classes} onClick={onClick} {...cleanRest}>\n {hasHeaderRow && (\n <div\n className={buildClassName('flex items-center gap-3 w-full min-w-0', children && 'mb-3')}\n >\n {leading && <div className=\"shrink-0 flex items-center justify-center\">{leading}</div>}\n <div className=\"flex-1 min-w-0 text-left\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n {title && (\n <span className=\"text-sm font-semibold text-gray-900 dark:text-white truncate\">\n {title}\n </span>\n )}\n {badge}\n </div>\n {subtitle && (\n <div className=\"text-xs text-gray-500 dark:text-gray-400 mt-0.5 truncate\">\n {subtitle}\n </div>\n )}\n </div>\n {(trailing || showChevron) && (\n <div className=\"shrink-0 flex items-center gap-2 text-xs text-gray-500 dark:text-gray-400\">\n {trailing}\n {showChevron && <ChevronRightIcon className=\"size-4 text-gray-400\" />}\n </div>\n )}\n </div>\n )}\n {children}\n </Component>\n )\n },\n) as unknown as CardComponent\n\nexport const CardHeader = ({\n className,\n bordered = false,\n children,\n ...props\n}: CardHeaderProps) => (\n <div\n className={buildClassName(\n 'flex items-center justify-between gap-4 mb-4',\n bordered && 'pb-4 border-b border-[var(--ui-border)]',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n)\n\nexport const CardTitle = ({\n className,\n as: Component = 'h3',\n children,\n ...props\n}: CardTitleProps) => (\n <Component\n className={buildClassName(\n 'text-lg font-semibold text-gray-900 dark:text-white tracking-tight',\n className,\n )}\n {...props}\n >\n {children}\n </Component>\n)\n\nexport const CardDescription = ({ className, children, ...props }: CardDescriptionProps) => (\n <p\n className={buildClassName(\n 'text-sm text-gray-500 dark:text-gray-400 font-normal mt-1',\n className,\n )}\n {...props}\n >\n {children}\n </p>\n)\n\nexport const CardContent = ({ className, children, ...props }: CardContentProps) => (\n <div className={buildClassName('space-y-3', className)} {...props}>\n {children}\n </div>\n)\n\nexport const CardFooter = ({\n className,\n bordered = false,\n children,\n ...props\n}: CardFooterProps) => (\n <div\n className={buildClassName(\n 'flex items-center justify-end gap-3 mt-4',\n bordered && 'pt-4 border-t border-[var(--ui-border)]',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n)\n\nexport const CardMedia = ({\n className,\n aspectRatio = 'video',\n alt = '',\n ...props\n}: CardMediaProps) => (\n <div className={buildClassName('overflow-hidden -mx-5 -mt-5 mb-4 sm:-mx-6 sm:-mt-6', className)}>\n <img\n alt={alt}\n className={buildClassName(\n 'w-full object-cover',\n ASPECT_RATIO_CLASS[aspectRatio] || ASPECT_RATIO_CLASS.video,\n )}\n {...props}\n />\n </div>\n)\n\nCard.Header = CardHeader\nCard.Title = CardTitle\nCard.Description = CardDescription\nCard.Content = CardContent\nCard.Body = CardContent\nCard.Footer = CardFooter\nCard.Media = CardMedia\n\nCard.displayName = 'Card'\n"],"names":["_jsx","forwardRef","buildClassName","_jsxs"],"mappings":";;;;;;AAcA,MAAM,YAAY,GAA2B;AAC3C,IAAA,IAAI,EAAE,cAAc;AACpB,IAAA,EAAE,EAAE,YAAY;AAChB,IAAA,EAAE,EAAE,YAAY;AAChB,IAAA,EAAE,EAAE,YAAY;AAChB,IAAA,EAAE,EAAE,YAAY;AAChB,IAAA,KAAK,EAAE,aAAa;CACrB;AAED,MAAM,kBAAkB,GAA2B;AACjD,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,KAAK,EAAE,cAAc;AACrB,IAAA,IAAI,EAAE,eAAe;CACtB;AAED,SAAS,gBAAgB,CAAC,EAAE,SAAS,GAAG,QAAQ,EAA0B,EAAA;AACxE,IAAA,QACEA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,SAAS,EAAE,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,EAAA,QAAA,EAC9EA,cAAA,CAAA,MAAA,EAAA,EAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAC,cAAc,EAAA,CAAG,EAAA,CAClF;AAEV;AAEO,MAAM,IAAI,GAAGC,gBAAU,CAC5B,CAAgC,EAAE,EAAE,EAAE,GAAG,KAAK,EAAgB,EAAE,GAAsB,KAAI;IACxF,MAAM,EACJ,OAAO,GAAG,UAAU,EACpB,MAAM,GAAG,IAAI,EACb,SAAS,GAAG,KAAK,EACjB,SAAS,GAAG,KAAK,EACjB,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,IAAI,EACf,OAAO,GAAG,KAAK,EACf,WAAW,GAAG,KAAK,EACnB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,KAAK,EACL,WAAW,GAAG,KAAK,EACnB,QAAQ,EACR,OAAO,EACP,GAAG,IAAI,EACR,GAAG,KAAK;AAET,IAAA,MAAM,SAAS,GAAG,EAAE,IAAI,KAAK;IAC7B,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,GAAG,IAA8B;IAElE,MAAM,WAAW,GAAG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;AACjD,IAAA,MAAM,UAAU,GAAG,OAAO,KAAK,UAAU,IAAI,QAAQ;AACrD,IAAA,MAAM,UAAU,GAAG,OAAO,KAAK,UAAU;AACzC,IAAA,MAAM,QAAQ,GAAG,OAAO,KAAK,QAAQ;AACrC,IAAA,MAAM,OAAO,GAAG,OAAO,KAAK,OAAO;AAEnC,IAAA,MAAM,OAAO,GAAGC,6BAAc,CAC5B,+CAA+C,EAC/C,YAAY,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,EAAE,EACvC,WAAW,GAAG,EAAE,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY;;IAGxD,UAAU,IAAI,4DAA4D,EAC1E,UAAU;AACR,QAAA,0GAA0G,EAC5G,QAAQ,IAAI,6DAA6D,EACzE,OAAO,IAAI,0CAA0C;;IAGrD,SAAS,IAAI,gDAAgD,EAC7D,WAAW;AACT,QAAA,yHAAyH,EAC3H,QAAQ,IAAI,4DAA4D,EAExE,SAAS,CACV;AAED,IAAA,MAAM,YAAY,GAAG,KAAK,IAAI,QAAQ,IAAI,OAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,WAAW;IAErF,QACEC,eAAA,CAAC,SAAS,EAAA,EAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAA,GAAM,SAAS,EAAA,QAAA,EAAA,CACrE,YAAY,KACXA,eAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAED,6BAAc,CAAC,wCAAwC,EAAE,QAAQ,IAAI,MAAM,CAAC,EAAA,QAAA,EAAA,CAEtF,OAAO,IAAIF,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,2CAA2C,EAAA,QAAA,EAAE,OAAO,GAAO,EACtFG,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0BAA0B,EAAA,QAAA,EAAA,CACvCA,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAC/C,KAAK,KACJH,yBAAM,SAAS,EAAC,8DAA8D,EAAA,QAAA,EAC3E,KAAK,EAAA,CACD,CACR,EACA,KAAK,CAAA,EAAA,CACF,EACL,QAAQ,KACPA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0DAA0D,EAAA,QAAA,EACtE,QAAQ,EAAA,CACL,CACP,CAAA,EAAA,CACG,EACL,CAAC,QAAQ,IAAI,WAAW,MACvBG,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,2EAA2E,aACvF,QAAQ,EACR,WAAW,IAAIH,cAAA,CAAC,gBAAgB,IAAC,SAAS,EAAC,sBAAsB,EAAA,CAAG,CAAA,EAAA,CACjE,CACP,CAAA,EAAA,CACG,CACP,EACA,QAAQ,CAAA,EAAA,CACC;AAEhB,CAAC;AAGI,MAAM,UAAU,GAAG,CAAC,EACzB,SAAS,EACT,QAAQ,GAAG,KAAK,EAChB,QAAQ,EACR,GAAG,KAAK,EACQ,MAChBA,cAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAEE,6BAAc,CACvB,8CAA8C,EAC9C,QAAQ,IAAI,yCAAyC,EACrD,SAAS,CACV,EAAA,GACG,KAAK,YAER,QAAQ,EAAA,CACL;AAGD,MAAM,SAAS,GAAG,CAAC,EACxB,SAAS,EACT,EAAE,EAAE,SAAS,GAAG,IAAI,EACpB,QAAQ,EACR,GAAG,KAAK,EACO,MACfF,cAAA,CAAC,SAAS,IACR,SAAS,EAAEE,6BAAc,CACvB,oEAAoE,EACpE,SAAS,CACV,EAAA,GACG,KAAK,YAER,QAAQ,EAAA,CACC;AAGP,MAAM,eAAe,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAwB,MACrFF,cAAA,CAAA,GAAA,EAAA,EACE,SAAS,EAAEE,6BAAc,CACvB,2DAA2D,EAC3D,SAAS,CACV,EAAA,GACG,KAAK,EAAA,QAAA,EAER,QAAQ,EAAA,CACP;AAGC,MAAM,WAAW,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAoB,MAC7EF,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEE,6BAAc,CAAC,WAAW,EAAE,SAAS,CAAC,EAAA,GAAM,KAAK,EAAA,QAAA,EAC9D,QAAQ,EAAA,CACL;AAGD,MAAM,UAAU,GAAG,CAAC,EACzB,SAAS,EACT,QAAQ,GAAG,KAAK,EAChB,QAAQ,EACR,GAAG,KAAK,EACQ,MAChBF,cAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAEE,6BAAc,CACvB,0CAA0C,EAC1C,QAAQ,IAAI,yCAAyC,EACrD,SAAS,CACV,EAAA,GACG,KAAK,YAER,QAAQ,EAAA,CACL;AAGD,MAAM,SAAS,GAAG,CAAC,EACxB,SAAS,EACT,WAAW,GAAG,OAAO,EACrB,GAAG,GAAG,EAAE,EACR,GAAG,KAAK,EACO,MACfF,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEE,6BAAc,CAAC,oDAAoD,EAAE,SAAS,CAAC,EAAA,QAAA,EAC7FF,cAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAEE,6BAAc,CACvB,qBAAqB,EACrB,kBAAkB,CAAC,WAAW,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAC5D,EAAA,GACG,KAAK,EAAA,CACT,EAAA,CACE;AAGR,IAAI,CAAC,MAAM,GAAG,UAAU;AACxB,IAAI,CAAC,KAAK,GAAG,SAAS;AACtB,IAAI,CAAC,WAAW,GAAG,eAAe;AAClC,IAAI,CAAC,OAAO,GAAG,WAAW;AAC1B,IAAI,CAAC,IAAI,GAAG,WAAW;AACvB,IAAI,CAAC,MAAM,GAAG,UAAU;AACxB,IAAI,CAAC,KAAK,GAAG,SAAS;AAEtB,IAAI,CAAC,WAAW,GAAG,MAAM;;;;;;;;;;"}
@@ -0,0 +1,64 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var Label = require('../Label/Label.js');
6
+ var buildClassname = require('../../utils/build-classname.js');
7
+ var TextContent = require('../TextContent/TextContent.js');
8
+
9
+ const sizeStyles = {
10
+ sm: {
11
+ box: 'size-3.5',
12
+ svg: 'size-2.75',
13
+ text: 'text-xs',
14
+ subtext: 'text-[11px]',
15
+ },
16
+ md: {
17
+ box: 'size-4.5',
18
+ svg: 'size-3.5',
19
+ text: 'text-sm',
20
+ subtext: 'text-xs',
21
+ },
22
+ lg: {
23
+ box: 'size-5.5',
24
+ svg: 'size-4.25',
25
+ text: 'text-base',
26
+ subtext: 'text-sm',
27
+ },
28
+ };
29
+ const Checkbox = React.forwardRef((props, ref) => {
30
+ var _a;
31
+ const { id, name, label, labelClass = '', wrapperClass = '', containerClass = '', error, helperText, disabled = false, indeterminate = false, size = 'md', variant = 'default', description, className = '', checked, onChange, ...rest } = props;
32
+ const generatedId = React.useId();
33
+ const checkboxId = (_a = id !== null && id !== void 0 ? id : name) !== null && _a !== void 0 ? _a : generatedId;
34
+ const innerRef = React.useRef(null);
35
+ React.useImperativeHandle(ref, () => innerRef.current);
36
+ React.useEffect(() => {
37
+ if (innerRef.current) {
38
+ innerRef.current.indeterminate = Boolean(indeterminate);
39
+ }
40
+ }, [indeterminate]);
41
+ const currentSize = sizeStyles[size] || sizeStyles.md;
42
+ const isCard = variant === 'card';
43
+ return (jsxRuntime.jsxs("div", { className: buildClassname.buildClassName(wrapperClass), children: [jsxRuntime.jsx("div", { className: buildClassname.buildClassName(isCard
44
+ ? 'rounded-xl border p-3.5 transition-all duration-150 relative'
45
+ : 'flex items-center', isCard &&
46
+ (disabled
47
+ ? 'border-[var(--ui-border-muted)] bg-gray-50/50 dark:bg-gray-900/40 opacity-70'
48
+ : checked || indeterminate
49
+ ? 'border-blue-500/80 bg-blue-50/30 dark:bg-blue-950/20 dark:border-blue-500/60 shadow-xs'
50
+ : 'border-[var(--ui-border)] bg-white dark:bg-gray-900 hover:border-gray-300 dark:hover:border-gray-700 shadow-2xs'), containerClass), children: jsxRuntime.jsxs("label", { htmlFor: checkboxId, className: buildClassname.buildClassName('inline-flex relative select-none w-full', description ? 'items-start' : 'items-center', disabled ? 'cursor-not-allowed opacity-70' : 'cursor-pointer'), children: [jsxRuntime.jsxs("div", { className: "relative inline-flex items-center justify-center shrink-0", children: [jsxRuntime.jsx("input", { ref: innerRef, ...rest, id: checkboxId, name: name, type: "checkbox", disabled: disabled, checked: checked, onChange: onChange, "aria-checked": indeterminate ? 'mixed' : checked, className: buildClassname.buildClassName('peer cursor-pointer transition-all appearance-none rounded', currentSize.box, 'border focus:ring-2 focus:ring-offset-2', 'checked:bg-blue-600 checked:border-blue-600 dark:checked:bg-blue-600 dark:checked:border-blue-600', 'focus:ring-[var(--ui-focus-ring)] dark:focus:ring-offset-gray-900', disabled
51
+ ? 'border-[var(--ui-border-muted)] bg-gray-100 dark:bg-gray-800 pointer-events-none'
52
+ : 'bg-white dark:bg-gray-700 border-[var(--ui-border)] hover:border-gray-400 dark:hover:border-gray-500', indeterminate &&
53
+ '!bg-blue-600 !border-blue-600 dark:!bg-blue-600 dark:!border-blue-600', className) }), !indeterminate && (jsxRuntime.jsx("span", { className: buildClassname.buildClassName('absolute inset-0 flex items-center justify-center text-white pointer-events-none transition-opacity', checked !== undefined
54
+ ? checked
55
+ ? 'opacity-100'
56
+ : 'opacity-0'
57
+ : 'opacity-0 peer-checked:opacity-100'), children: jsxRuntime.jsx("svg", { className: currentSize.svg, viewBox: "0 0 20 20", fill: "currentColor", children: jsxRuntime.jsx("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }) }) })), indeterminate && (jsxRuntime.jsx("span", { className: "absolute inset-0 flex items-center justify-center text-white pointer-events-none opacity-100 z-10", children: jsxRuntime.jsx("svg", { className: currentSize.svg, viewBox: "0 0 20 20", fill: "currentColor", children: jsxRuntime.jsx("path", { fillRule: "evenodd", d: "M4 10a1 1 0 011-1h10a1 1 0 110 2H5a1 1 0 01-1-1z", clipRule: "evenodd" }) }) }))] }), (label || description) && (jsxRuntime.jsxs("div", { className: "ml-2.5 flex flex-col justify-center min-w-0 flex-1", children: [label && (jsxRuntime.jsx(Label.Label, { htmlFor: checkboxId, className: buildClassname.buildClassName(disabled
58
+ ? 'cursor-not-allowed text-gray-400 dark:text-gray-500'
59
+ : 'cursor-pointer text-gray-800 dark:text-gray-200 font-medium', currentSize.text, labelClass), children: label })), description && (jsxRuntime.jsx("span", { className: buildClassname.buildClassName('mt-0.5 text-gray-500 dark:text-gray-400 font-normal leading-normal', currentSize.subtext), children: description }))] }))] }) }), (error || helperText) && (jsxRuntime.jsx("div", { className: "mt-1.5 ml-0.5", children: error ? (jsxRuntime.jsx(TextContent.TextContent, { error: true, small: true, children: error })) : (jsxRuntime.jsx(TextContent.TextContent, { muted: true, small: true, children: helperText })) }))] }));
60
+ });
61
+ Checkbox.displayName = 'Checkbox';
62
+
63
+ exports.Checkbox = Checkbox;
64
+ //# sourceMappingURL=Checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.js","sources":["../../../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["import { forwardRef, useEffect, useId, useRef, useImperativeHandle } from 'react'\nimport { Label } from '../Label'\nimport { buildClassName } from '../../utils/build-classname'\nimport type { CheckboxProps, CheckboxSize } from './Checkbox.types'\nimport { TextContent } from '../TextContent'\n\nconst sizeStyles: Record<\n CheckboxSize,\n { box: string; svg: string; text: string; subtext: string }\n> = {\n sm: {\n box: 'size-3.5',\n svg: 'size-2.75',\n text: 'text-xs',\n subtext: 'text-[11px]',\n },\n md: {\n box: 'size-4.5',\n svg: 'size-3.5',\n text: 'text-sm',\n subtext: 'text-xs',\n },\n lg: {\n box: 'size-5.5',\n svg: 'size-4.25',\n text: 'text-base',\n subtext: 'text-sm',\n },\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>((props, ref) => {\n const {\n id,\n name,\n label,\n labelClass = '',\n wrapperClass = '',\n containerClass = '',\n error,\n helperText,\n disabled = false,\n indeterminate = false,\n size = 'md',\n variant = 'default',\n description,\n className = '',\n checked,\n onChange,\n ...rest\n } = props\n\n const generatedId = useId()\n const checkboxId = id ?? name ?? generatedId\n\n const innerRef = useRef<HTMLInputElement>(null)\n useImperativeHandle(ref, () => innerRef.current as HTMLInputElement)\n\n useEffect(() => {\n if (innerRef.current) {\n innerRef.current.indeterminate = Boolean(indeterminate)\n }\n }, [indeterminate])\n\n const currentSize = sizeStyles[size] || sizeStyles.md\n const isCard = variant === 'card'\n\n return (\n <div className={buildClassName(wrapperClass)}>\n <div\n className={buildClassName(\n isCard\n ? 'rounded-xl border p-3.5 transition-all duration-150 relative'\n : 'flex items-center',\n isCard &&\n (disabled\n ? 'border-[var(--ui-border-muted)] bg-gray-50/50 dark:bg-gray-900/40 opacity-70'\n : checked || indeterminate\n ? 'border-blue-500/80 bg-blue-50/30 dark:bg-blue-950/20 dark:border-blue-500/60 shadow-xs'\n : 'border-[var(--ui-border)] bg-white dark:bg-gray-900 hover:border-gray-300 dark:hover:border-gray-700 shadow-2xs'),\n containerClass,\n )}\n >\n <label\n htmlFor={checkboxId}\n className={buildClassName(\n 'inline-flex relative select-none w-full',\n description ? 'items-start' : 'items-center',\n disabled ? 'cursor-not-allowed opacity-70' : 'cursor-pointer',\n )}\n >\n {/* Custom Checkbox Input Container */}\n <div className=\"relative inline-flex items-center justify-center shrink-0\">\n <input\n ref={innerRef}\n {...rest}\n id={checkboxId}\n name={name}\n type=\"checkbox\"\n disabled={disabled}\n checked={checked}\n onChange={onChange}\n aria-checked={indeterminate ? 'mixed' : checked}\n className={buildClassName(\n 'peer cursor-pointer transition-all appearance-none rounded',\n currentSize.box,\n 'border focus:ring-2 focus:ring-offset-2',\n 'checked:bg-blue-600 checked:border-blue-600 dark:checked:bg-blue-600 dark:checked:border-blue-600',\n 'focus:ring-[var(--ui-focus-ring)] dark:focus:ring-offset-gray-900',\n disabled\n ? 'border-[var(--ui-border-muted)] bg-gray-100 dark:bg-gray-800 pointer-events-none'\n : 'bg-white dark:bg-gray-700 border-[var(--ui-border)] hover:border-gray-400 dark:hover:border-gray-500',\n indeterminate &&\n '!bg-blue-600 !border-blue-600 dark:!bg-blue-600 dark:!border-blue-600',\n className,\n )}\n />\n\n {/* Checkmark SVG Icon — Rendered only when NOT indeterminate */}\n {!indeterminate && (\n <span\n className={buildClassName(\n 'absolute inset-0 flex items-center justify-center text-white pointer-events-none transition-opacity',\n checked !== undefined\n ? checked\n ? 'opacity-100'\n : 'opacity-0'\n : 'opacity-0 peer-checked:opacity-100',\n )}\n >\n <svg className={currentSize.svg} viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </span>\n )}\n\n {/* Indeterminate Minus SVG Icon — Rendered only when indeterminate */}\n {indeterminate && (\n <span className=\"absolute inset-0 flex items-center justify-center text-white pointer-events-none opacity-100 z-10\">\n <svg className={currentSize.svg} viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M4 10a1 1 0 011-1h10a1 1 0 110 2H5a1 1 0 01-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </span>\n )}\n </div>\n\n {/* Label & Description Column */}\n {(label || description) && (\n <div className=\"ml-2.5 flex flex-col justify-center min-w-0 flex-1\">\n {label && (\n <Label\n htmlFor={checkboxId}\n className={buildClassName(\n disabled\n ? 'cursor-not-allowed text-gray-400 dark:text-gray-500'\n : 'cursor-pointer text-gray-800 dark:text-gray-200 font-medium',\n currentSize.text,\n labelClass,\n )}\n >\n {label}\n </Label>\n )}\n\n {description && (\n <span\n className={buildClassName(\n 'mt-0.5 text-gray-500 dark:text-gray-400 font-normal leading-normal',\n currentSize.subtext,\n )}\n >\n {description}\n </span>\n )}\n </div>\n )}\n </label>\n </div>\n\n {/* Helper text or error message */}\n {(error || helperText) && (\n <div className=\"mt-1.5 ml-0.5\">\n {error ? (\n <TextContent error small>\n {error}\n </TextContent>\n ) : (\n <TextContent muted small>\n {helperText}\n </TextContent>\n )}\n </div>\n )}\n </div>\n )\n})\n\nCheckbox.displayName = 'Checkbox'\n"],"names":["forwardRef","useId","useRef","useImperativeHandle","useEffect","_jsxs","buildClassName","_jsx","Label","TextContent"],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var Checkbox = require('../Checkbox/Checkbox.js');
6
+ var Label = require('../Label/Label.js');
7
+ var BodyText = require('../BodyText/BodyText.js');
8
+ var TextContent = require('../TextContent/TextContent.js');
9
+ var buildClassname = require('../../utils/build-classname.js');
10
+
11
+ const columnClasses = {
12
+ 1: 'grid grid-cols-1 gap-3',
13
+ 2: 'grid grid-cols-1 sm:grid-cols-2 gap-3',
14
+ 3: 'grid grid-cols-1 sm:grid-cols-3 gap-3',
15
+ 4: 'grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-3',
16
+ };
17
+ const CheckboxGroup = (props) => {
18
+ const { name, options, label, labelClass = '', labelWrapperClass = '', labelHint, containerClass = '', value: controlledValue, defaultValue, onChange, inline = false, columns, size = 'md', variant = 'default', showSelectAll = false, selectAllLabel = 'Select All', error, helperText, disabled = false, } = props;
19
+ const groupId = React.useId();
20
+ const [internalValue, setInternalValue] = React.useState(defaultValue || []);
21
+ const isControlled = controlledValue !== undefined;
22
+ const currentValue = isControlled ? controlledValue : internalValue;
23
+ const items = React.useMemo(() => options.map((opt) => typeof opt === 'string' ? { label: opt, value: opt } : opt), [options]);
24
+ const enabledItems = React.useMemo(() => items.filter((i) => !i.disabled && !disabled), [items, disabled]);
25
+ // Select All State calculation
26
+ const allSelected = React.useMemo(() => {
27
+ if (!enabledItems.length)
28
+ return false;
29
+ return enabledItems.every((item) => currentValue.includes(item.value));
30
+ }, [enabledItems, currentValue]);
31
+ const isIndeterminate = React.useMemo(() => {
32
+ if (allSelected)
33
+ return false;
34
+ return enabledItems.some((item) => currentValue.includes(item.value));
35
+ }, [allSelected, enabledItems, currentValue]);
36
+ const handleSelectAllChange = (e) => {
37
+ let updated;
38
+ if (allSelected || isIndeterminate) {
39
+ const enabledValues = new Set(enabledItems.map((i) => i.value));
40
+ updated = currentValue.filter((v) => !enabledValues.has(v));
41
+ }
42
+ else {
43
+ const enabledValues = enabledItems.map((i) => i.value);
44
+ const uniqueSet = new Set([...currentValue, ...enabledValues]);
45
+ updated = Array.from(uniqueSet);
46
+ }
47
+ if (!isControlled) {
48
+ setInternalValue(updated);
49
+ }
50
+ onChange === null || onChange === void 0 ? void 0 : onChange(updated, e);
51
+ };
52
+ const handleGroupChange = (e) => {
53
+ const raw = e.target.value;
54
+ const checked = e.target.checked;
55
+ const matched = items.find((i) => String(i.value) === raw);
56
+ const itemValue = matched ? matched.value : raw;
57
+ let updated;
58
+ if (checked) {
59
+ updated = [...currentValue, itemValue];
60
+ }
61
+ else {
62
+ updated = currentValue.filter((v) => v !== itemValue);
63
+ }
64
+ if (!isControlled) {
65
+ setInternalValue(updated);
66
+ }
67
+ onChange === null || onChange === void 0 ? void 0 : onChange(updated, e);
68
+ };
69
+ const layoutClass = columns
70
+ ? columnClasses[columns]
71
+ : inline
72
+ ? 'flex flex-wrap gap-3'
73
+ : 'flex flex-col gap-3';
74
+ return (jsxRuntime.jsxs("div", { className: buildClassname.buildClassName('mb-3 space-y-3', containerClass), children: [label && (jsxRuntime.jsxs("div", { className: buildClassname.buildClassName('flex items-center justify-between', labelWrapperClass), children: [jsxRuntime.jsx(Label.Label, { className: labelClass, children: label }), labelHint && (jsxRuntime.jsx(BodyText.BodyText, { muted: true, small: true, children: labelHint }))] })), showSelectAll && items.length > 0 && (jsxRuntime.jsx("div", { className: "pb-1 border-b border-[var(--ui-border)]", children: jsxRuntime.jsx(Checkbox.Checkbox, { id: `${groupId}-select-all`, label: selectAllLabel, size: size, variant: variant, checked: allSelected, indeterminate: isIndeterminate, disabled: disabled || enabledItems.length === 0, onChange: handleSelectAllChange }) })), jsxRuntime.jsx("div", { className: layoutClass, children: items.map((item, index) => {
75
+ const key = typeof item.value === 'string' || typeof item.value === 'number' ? item.value : index;
76
+ return (jsxRuntime.jsx(Checkbox.Checkbox, { name: name, id: `${groupId}-${String(item.value)}`, label: item.label, description: item.description, value: String(item.value), size: size, variant: variant, disabled: disabled || item.disabled, checked: currentValue.includes(item.value), onChange: handleGroupChange }, key));
77
+ }) }), (error || helperText) && (jsxRuntime.jsx("div", { className: "mt-1.5 ml-0.5", children: error ? (jsxRuntime.jsx(TextContent.TextContent, { error: true, small: true, children: error })) : (jsxRuntime.jsx(TextContent.TextContent, { muted: true, small: true, children: helperText })) }))] }));
78
+ };
79
+ CheckboxGroup.displayName = 'CheckboxGroup';
80
+
81
+ exports.CheckboxGroup = CheckboxGroup;
82
+ //# sourceMappingURL=CheckboxGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckboxGroup.js","sources":["../../../../../src/components/CheckboxGroup/CheckboxGroup.tsx"],"sourcesContent":["import { useId, useMemo, useState, type ChangeEvent } from 'react'\nimport { Checkbox } from '../Checkbox'\nimport { Label } from '../Label'\nimport { BodyText } from '../BodyText'\nimport { TextContent } from '../TextContent'\nimport { buildClassName } from '../../utils/build-classname'\nimport type { CheckboxGroupItem, CheckboxGroupProps } from './CheckboxGroup.types'\n\nconst columnClasses: Record<number, string> = {\n 1: 'grid grid-cols-1 gap-3',\n 2: 'grid grid-cols-1 sm:grid-cols-2 gap-3',\n 3: 'grid grid-cols-1 sm:grid-cols-3 gap-3',\n 4: 'grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-3',\n}\n\nexport const CheckboxGroup = <T,>(props: CheckboxGroupProps<T>) => {\n const {\n name,\n options,\n label,\n labelClass = '',\n labelWrapperClass = '',\n labelHint,\n containerClass = '',\n value: controlledValue,\n defaultValue,\n onChange,\n inline = false,\n columns,\n size = 'md',\n variant = 'default',\n showSelectAll = false,\n selectAllLabel = 'Select All',\n error,\n helperText,\n disabled = false,\n } = props\n\n const groupId = useId()\n const [internalValue, setInternalValue] = useState<T[]>(defaultValue || [])\n\n const isControlled = controlledValue !== undefined\n const currentValue = isControlled ? controlledValue : internalValue\n\n const items = useMemo(\n () =>\n options.map((opt) =>\n typeof opt === 'string' ? ({ label: opt, value: opt } as CheckboxGroupItem<T>) : opt,\n ),\n [options],\n )\n\n const enabledItems = useMemo(\n () => items.filter((i) => !i.disabled && !disabled),\n [items, disabled],\n )\n\n // Select All State calculation\n const allSelected = useMemo(() => {\n if (!enabledItems.length) return false\n return enabledItems.every((item) => currentValue.includes(item.value))\n }, [enabledItems, currentValue])\n\n const isIndeterminate = useMemo(() => {\n if (allSelected) return false\n return enabledItems.some((item) => currentValue.includes(item.value))\n }, [allSelected, enabledItems, currentValue])\n\n const handleSelectAllChange = (e: ChangeEvent<HTMLInputElement>) => {\n let updated: T[]\n if (allSelected || isIndeterminate) {\n const enabledValues = new Set(enabledItems.map((i) => i.value))\n updated = currentValue.filter((v) => !enabledValues.has(v))\n } else {\n const enabledValues = enabledItems.map((i) => i.value)\n const uniqueSet = new Set([...currentValue, ...enabledValues])\n updated = Array.from(uniqueSet)\n }\n\n if (!isControlled) {\n setInternalValue(updated)\n }\n onChange?.(updated, e)\n }\n\n const handleGroupChange = (e: ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value\n const checked = e.target.checked\n\n const matched = items.find((i) => String(i.value) === raw)\n const itemValue = matched ? matched.value : (raw as unknown as T)\n\n let updated: T[]\n if (checked) {\n updated = [...currentValue, itemValue]\n } else {\n updated = currentValue.filter((v) => v !== itemValue)\n }\n\n if (!isControlled) {\n setInternalValue(updated)\n }\n onChange?.(updated, e)\n }\n\n const layoutClass = columns\n ? columnClasses[columns]\n : inline\n ? 'flex flex-wrap gap-3'\n : 'flex flex-col gap-3'\n\n return (\n <div className={buildClassName('mb-3 space-y-3', containerClass)}>\n {label && (\n <div className={buildClassName('flex items-center justify-between', labelWrapperClass)}>\n <Label className={labelClass}>{label}</Label>\n {labelHint && (\n <BodyText muted small>\n {labelHint}\n </BodyText>\n )}\n </div>\n )}\n\n {/* Select All Checkbox Header */}\n {showSelectAll && items.length > 0 && (\n <div className=\"pb-1 border-b border-[var(--ui-border)]\">\n <Checkbox\n id={`${groupId}-select-all`}\n label={selectAllLabel}\n size={size}\n variant={variant}\n checked={allSelected}\n indeterminate={isIndeterminate}\n disabled={disabled || enabledItems.length === 0}\n onChange={handleSelectAllChange}\n />\n </div>\n )}\n\n {/* Group Items Layout */}\n <div className={layoutClass}>\n {items.map((item, index) => {\n const key =\n typeof item.value === 'string' || typeof item.value === 'number' ? item.value : index\n\n return (\n <Checkbox\n key={key}\n name={name}\n id={`${groupId}-${String(item.value)}`}\n label={item.label}\n description={item.description}\n value={String(item.value)}\n size={size}\n variant={variant}\n disabled={disabled || item.disabled}\n checked={currentValue.includes(item.value)}\n onChange={handleGroupChange}\n />\n )\n })}\n </div>\n\n {/* Group-level Error or Helper Text */}\n {(error || helperText) && (\n <div className=\"mt-1.5 ml-0.5\">\n {error ? (\n <TextContent error small>\n {error}\n </TextContent>\n ) : (\n <TextContent muted small>\n {helperText}\n </TextContent>\n )}\n </div>\n )}\n </div>\n )\n}\n\nCheckboxGroup.displayName = 'CheckboxGroup'\n"],"names":["useId","useState","useMemo","_jsxs","buildClassName","_jsx","Label","BodyText","Checkbox","TextContent"],"mappings":"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"}