@etus/ui 0.4.0-beta.16 → 0.4.0-beta.18

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 (269) hide show
  1. package/dist/{chunk-U6EOAIPK.js → chunk-2X35C55E.js} +3 -3
  2. package/dist/chunk-2X35C55E.js.map +1 -0
  3. package/dist/{chunk-UYC7M3FM.js → chunk-34WNJNPL.js} +5 -5
  4. package/dist/{chunk-UYC7M3FM.js.map → chunk-34WNJNPL.js.map} +1 -1
  5. package/dist/{chunk-VORFH6HQ.js → chunk-37KLBMFQ.js} +3 -3
  6. package/dist/chunk-37KLBMFQ.js.map +1 -0
  7. package/dist/{chunk-N4UTBJRY.js → chunk-3NHH7VPI.js} +3 -3
  8. package/dist/{chunk-N4UTBJRY.js.map → chunk-3NHH7VPI.js.map} +1 -1
  9. package/dist/{chunk-OEXQ2MOY.js → chunk-45YJLE4R.js} +3 -3
  10. package/dist/{chunk-OEXQ2MOY.js.map → chunk-45YJLE4R.js.map} +1 -1
  11. package/dist/{chunk-66TBTTZO.js → chunk-46SUPGQV.js} +14 -14
  12. package/dist/chunk-46SUPGQV.js.map +1 -0
  13. package/dist/{chunk-3W7FXRO5.js → chunk-56TC4CPT.js} +4 -4
  14. package/dist/{chunk-3W7FXRO5.js.map → chunk-56TC4CPT.js.map} +1 -1
  15. package/dist/{chunk-NCT5WXKG.js → chunk-5ACHKT35.js} +3 -3
  16. package/dist/{chunk-NCT5WXKG.js.map → chunk-5ACHKT35.js.map} +1 -1
  17. package/dist/{chunk-GGUWEAYD.js → chunk-5E44I7PB.js} +3 -3
  18. package/dist/{chunk-GGUWEAYD.js.map → chunk-5E44I7PB.js.map} +1 -1
  19. package/dist/{chunk-T6XRYT6Q.js → chunk-5K2SOCOX.js} +3 -3
  20. package/dist/{chunk-T6XRYT6Q.js.map → chunk-5K2SOCOX.js.map} +1 -1
  21. package/dist/{chunk-VT4IMHGE.js → chunk-5TABQJDW.js} +4 -4
  22. package/dist/chunk-5TABQJDW.js.map +1 -0
  23. package/dist/{chunk-4GVOOXYD.js → chunk-6ABGMOE2.js} +5 -5
  24. package/dist/chunk-6ABGMOE2.js.map +1 -0
  25. package/dist/{chunk-Q43KJP5A.js → chunk-6F5NWXZF.js} +7 -7
  26. package/dist/{chunk-Q43KJP5A.js.map → chunk-6F5NWXZF.js.map} +1 -1
  27. package/dist/{chunk-4RSHPKHB.js → chunk-6KMRMXR6.js} +3 -3
  28. package/dist/{chunk-4RSHPKHB.js.map → chunk-6KMRMXR6.js.map} +1 -1
  29. package/dist/{chunk-7J5OM4ZD.js → chunk-7CMOCWFX.js} +4 -4
  30. package/dist/{chunk-7J5OM4ZD.js.map → chunk-7CMOCWFX.js.map} +1 -1
  31. package/dist/{chunk-G7PBPX3K.js → chunk-7VGF6ZVE.js} +4 -4
  32. package/dist/{chunk-G7PBPX3K.js.map → chunk-7VGF6ZVE.js.map} +1 -1
  33. package/dist/{chunk-E2TI5V67.js → chunk-A4O3USMA.js} +3 -3
  34. package/dist/{chunk-E2TI5V67.js.map → chunk-A4O3USMA.js.map} +1 -1
  35. package/dist/{chunk-UPK5B2FL.js → chunk-AKRVZ2YW.js} +6 -6
  36. package/dist/chunk-AKRVZ2YW.js.map +1 -0
  37. package/dist/{chunk-VBJ26PZJ.js → chunk-AP3T3KMY.js} +3 -3
  38. package/dist/{chunk-VBJ26PZJ.js.map → chunk-AP3T3KMY.js.map} +1 -1
  39. package/dist/{chunk-X3AXEE3S.js → chunk-AR7K7Y4L.js} +3 -3
  40. package/dist/{chunk-X3AXEE3S.js.map → chunk-AR7K7Y4L.js.map} +1 -1
  41. package/dist/{chunk-WKWLKGNI.js → chunk-ARYBNQNS.js} +4 -4
  42. package/dist/chunk-ARYBNQNS.js.map +1 -0
  43. package/dist/{chunk-P27ERD6W.js → chunk-B2OCNHUW.js} +8 -8
  44. package/dist/{chunk-P27ERD6W.js.map → chunk-B2OCNHUW.js.map} +1 -1
  45. package/dist/{chunk-3NLWCX2F.js → chunk-DI3AISAZ.js} +3 -3
  46. package/dist/{chunk-3NLWCX2F.js.map → chunk-DI3AISAZ.js.map} +1 -1
  47. package/dist/{chunk-COZXTBIU.js → chunk-DSCLJ3GK.js} +30 -11
  48. package/dist/chunk-DSCLJ3GK.js.map +1 -0
  49. package/dist/{chunk-3KOLK3OB.js → chunk-EC5YEK3C.js} +3 -3
  50. package/dist/{chunk-3KOLK3OB.js.map → chunk-EC5YEK3C.js.map} +1 -1
  51. package/dist/{chunk-YUHPTV2A.js → chunk-EDSDAX56.js} +3 -3
  52. package/dist/{chunk-YUHPTV2A.js.map → chunk-EDSDAX56.js.map} +1 -1
  53. package/dist/{chunk-IRIIK3BU.js → chunk-F4EX3622.js} +10 -10
  54. package/dist/chunk-F4EX3622.js.map +1 -0
  55. package/dist/{chunk-XYYOV5GW.js → chunk-F5X2BBGU.js} +4 -4
  56. package/dist/{chunk-XYYOV5GW.js.map → chunk-F5X2BBGU.js.map} +1 -1
  57. package/dist/{chunk-BS5XDYOE.js → chunk-FLERVSKG.js} +5 -5
  58. package/dist/{chunk-BS5XDYOE.js.map → chunk-FLERVSKG.js.map} +1 -1
  59. package/dist/{chunk-TAZPML2P.js → chunk-G2CMEHW6.js} +3 -3
  60. package/dist/{chunk-TAZPML2P.js.map → chunk-G2CMEHW6.js.map} +1 -1
  61. package/dist/{chunk-TQBUBD3E.js → chunk-H7JHFBFD.js} +3 -3
  62. package/dist/{chunk-TQBUBD3E.js.map → chunk-H7JHFBFD.js.map} +1 -1
  63. package/dist/{chunk-Y4RKKQMB.js → chunk-HA5YVDHW.js} +3 -3
  64. package/dist/chunk-HA5YVDHW.js.map +1 -0
  65. package/dist/{chunk-ZKK7L7H7.js → chunk-HP7LEQJR.js} +3 -3
  66. package/dist/{chunk-ZKK7L7H7.js.map → chunk-HP7LEQJR.js.map} +1 -1
  67. package/dist/{chunk-W7S7GPU5.js → chunk-HV2ZZXFN.js} +4 -4
  68. package/dist/{chunk-W7S7GPU5.js.map → chunk-HV2ZZXFN.js.map} +1 -1
  69. package/dist/{chunk-K45MMHLA.js → chunk-HVFACGNK.js} +4 -4
  70. package/dist/{chunk-K45MMHLA.js.map → chunk-HVFACGNK.js.map} +1 -1
  71. package/dist/{chunk-R3HUGCGR.js → chunk-HZ47LQFJ.js} +4 -4
  72. package/dist/{chunk-R3HUGCGR.js.map → chunk-HZ47LQFJ.js.map} +1 -1
  73. package/dist/{chunk-FCIF6H6E.js → chunk-IA24GUNV.js} +24 -24
  74. package/dist/chunk-IA24GUNV.js.map +1 -0
  75. package/dist/{chunk-D6TH3EGA.js → chunk-IQKKPOI7.js} +4 -4
  76. package/dist/{chunk-D6TH3EGA.js.map → chunk-IQKKPOI7.js.map} +1 -1
  77. package/dist/{chunk-WXBC3D2N.js → chunk-IRFAIJLV.js} +4 -4
  78. package/dist/{chunk-WXBC3D2N.js.map → chunk-IRFAIJLV.js.map} +1 -1
  79. package/dist/{chunk-SXPBKGLT.js → chunk-J62NPPDO.js} +3 -3
  80. package/dist/{chunk-SXPBKGLT.js.map → chunk-J62NPPDO.js.map} +1 -1
  81. package/dist/{chunk-5U5XAOES.js → chunk-JDG5A44W.js} +73 -34
  82. package/dist/chunk-JDG5A44W.js.map +1 -0
  83. package/dist/{chunk-Z4KW5VW6.js → chunk-JRVUEOKT.js} +5 -5
  84. package/dist/{chunk-Z4KW5VW6.js.map → chunk-JRVUEOKT.js.map} +1 -1
  85. package/dist/{chunk-NXQ25PKF.js → chunk-K43MPWTO.js} +7 -7
  86. package/dist/chunk-K43MPWTO.js.map +1 -0
  87. package/dist/{chunk-2ROFZG3A.js → chunk-KA7747GR.js} +3 -3
  88. package/dist/{chunk-2ROFZG3A.js.map → chunk-KA7747GR.js.map} +1 -1
  89. package/dist/{chunk-OBRJXVWO.js → chunk-KYURFRCH.js} +4 -4
  90. package/dist/{chunk-OBRJXVWO.js.map → chunk-KYURFRCH.js.map} +1 -1
  91. package/dist/{chunk-EYSTEGV5.js → chunk-LR56MGWT.js} +7 -7
  92. package/dist/{chunk-EYSTEGV5.js.map → chunk-LR56MGWT.js.map} +1 -1
  93. package/dist/{chunk-6ZAMTPGN.js → chunk-M6VBDPNQ.js} +3 -3
  94. package/dist/{chunk-6ZAMTPGN.js.map → chunk-M6VBDPNQ.js.map} +1 -1
  95. package/dist/{chunk-JPA2VQRW.js → chunk-MAM5PTRV.js} +3 -3
  96. package/dist/{chunk-JPA2VQRW.js.map → chunk-MAM5PTRV.js.map} +1 -1
  97. package/dist/{chunk-3L5G7VI2.js → chunk-MAM6VUKD.js} +3 -3
  98. package/dist/chunk-MAM6VUKD.js.map +1 -0
  99. package/dist/{chunk-LLI3JFJL.js → chunk-MLSIZ6JU.js} +4 -4
  100. package/dist/{chunk-LLI3JFJL.js.map → chunk-MLSIZ6JU.js.map} +1 -1
  101. package/dist/{chunk-U2R47SPY.js → chunk-NULX3RRN.js} +4 -4
  102. package/dist/{chunk-U2R47SPY.js.map → chunk-NULX3RRN.js.map} +1 -1
  103. package/dist/{chunk-GL56KIFL.js → chunk-OG3M4CMJ.js} +3 -3
  104. package/dist/{chunk-GL56KIFL.js.map → chunk-OG3M4CMJ.js.map} +1 -1
  105. package/dist/{chunk-7EGN7IGY.js → chunk-OR3NPCY2.js} +3 -3
  106. package/dist/{chunk-7EGN7IGY.js.map → chunk-OR3NPCY2.js.map} +1 -1
  107. package/dist/{chunk-5I7AXWJU.js → chunk-PGRMKSVA.js} +4 -4
  108. package/dist/{chunk-5I7AXWJU.js.map → chunk-PGRMKSVA.js.map} +1 -1
  109. package/dist/{chunk-VZZ3HP7G.js → chunk-PM344VOQ.js} +3 -3
  110. package/dist/{chunk-VZZ3HP7G.js.map → chunk-PM344VOQ.js.map} +1 -1
  111. package/dist/{chunk-46ESMCEQ.js → chunk-QBLU7J34.js} +5 -5
  112. package/dist/chunk-QBLU7J34.js.map +1 -0
  113. package/dist/{chunk-U74PNG4S.js → chunk-SMVH56FQ.js} +3 -3
  114. package/dist/{chunk-U74PNG4S.js.map → chunk-SMVH56FQ.js.map} +1 -1
  115. package/dist/{chunk-DYDXGWH2.js → chunk-T3LWBCVR.js} +4 -4
  116. package/dist/chunk-T3LWBCVR.js.map +1 -0
  117. package/dist/{chunk-ZP4HYVDG.js → chunk-TA4HCLP3.js} +3 -3
  118. package/dist/{chunk-ZP4HYVDG.js.map → chunk-TA4HCLP3.js.map} +1 -1
  119. package/dist/{chunk-7HT32DZG.js → chunk-TGLALXPU.js} +3 -3
  120. package/dist/{chunk-7HT32DZG.js.map → chunk-TGLALXPU.js.map} +1 -1
  121. package/dist/{chunk-5GE3BQA7.js → chunk-USPITOG4.js} +5 -5
  122. package/dist/chunk-USPITOG4.js.map +1 -0
  123. package/dist/{chunk-XLTSCY22.js → chunk-UYPYAOET.js} +4 -4
  124. package/dist/chunk-UYPYAOET.js.map +1 -0
  125. package/dist/{chunk-P7D6S6GX.js → chunk-V7O4X3AE.js} +38 -4
  126. package/dist/chunk-V7O4X3AE.js.map +1 -0
  127. package/dist/{chunk-2YSZPUQZ.js → chunk-VTDSGJ4R.js} +3 -3
  128. package/dist/{chunk-2YSZPUQZ.js.map → chunk-VTDSGJ4R.js.map} +1 -1
  129. package/dist/{chunk-4Y72SPNL.js → chunk-VUHJTTPV.js} +4 -4
  130. package/dist/chunk-VUHJTTPV.js.map +1 -0
  131. package/dist/{chunk-VLDAHAG6.js → chunk-VV6QE3M2.js} +4 -4
  132. package/dist/{chunk-VLDAHAG6.js.map → chunk-VV6QE3M2.js.map} +1 -1
  133. package/dist/{chunk-H5N3VPBG.js → chunk-WBERMEN7.js} +3 -3
  134. package/dist/{chunk-H5N3VPBG.js.map → chunk-WBERMEN7.js.map} +1 -1
  135. package/dist/{chunk-OXDWUKGP.js → chunk-WCMRVCIM.js} +4 -4
  136. package/dist/chunk-WCMRVCIM.js.map +1 -0
  137. package/dist/{chunk-IFHF4UES.js → chunk-WQI2USN7.js} +11 -11
  138. package/dist/chunk-WQI2USN7.js.map +1 -0
  139. package/dist/{chunk-CKD4UBV6.js → chunk-WVFQKBDB.js} +3 -3
  140. package/dist/{chunk-CKD4UBV6.js.map → chunk-WVFQKBDB.js.map} +1 -1
  141. package/dist/{chunk-3NSIUZGP.js → chunk-WZ2J4ALB.js} +3 -3
  142. package/dist/{chunk-3NSIUZGP.js.map → chunk-WZ2J4ALB.js.map} +1 -1
  143. package/dist/{chunk-7TF5PVEU.js → chunk-X5XP5QVO.js} +5 -5
  144. package/dist/chunk-X5XP5QVO.js.map +1 -0
  145. package/dist/{chunk-7Y2UQMX6.js → chunk-XKO6G5H2.js} +36 -36
  146. package/dist/chunk-XKO6G5H2.js.map +1 -0
  147. package/dist/{chunk-SUU3HNOX.js → chunk-XORDGKZI.js} +4 -4
  148. package/dist/{chunk-SUU3HNOX.js.map → chunk-XORDGKZI.js.map} +1 -1
  149. package/dist/{chunk-VAVE4ZJF.js → chunk-YGLD22TU.js} +3 -3
  150. package/dist/chunk-YGLD22TU.js.map +1 -0
  151. package/dist/{chunk-XOGMDABS.js → chunk-ZHUW6UYD.js} +8 -8
  152. package/dist/chunk-ZHUW6UYD.js.map +1 -0
  153. package/dist/{chunk-PWCMCMDN.js → chunk-ZMUUEXVD.js} +3 -3
  154. package/dist/{chunk-PWCMCMDN.js.map → chunk-ZMUUEXVD.js.map} +1 -1
  155. package/dist/components/advanced/Calendar/index.js +5 -5
  156. package/dist/components/advanced/EventCalendar/index.js +5 -5
  157. package/dist/components/advanced/FilterBuilder/index.js +7 -7
  158. package/dist/components/advanced/MarkdownEditor/index.js +2 -2
  159. package/dist/components/advanced/ReportBuilder/index.js +3 -3
  160. package/dist/components/advanced/RichTextEditor/index.js +2 -2
  161. package/dist/components/advanced/index.js +18 -18
  162. package/dist/components/data-display/Callout/index.js +1 -1
  163. package/dist/components/data-display/Carousel/index.js +5 -5
  164. package/dist/components/data-display/ChartCard/index.js +2 -2
  165. package/dist/components/data-display/DataTable/FilterBuilder/index.js +7 -7
  166. package/dist/components/data-display/DataTable/index.js +10 -10
  167. package/dist/components/data-display/ImageGallery/index.js +6 -6
  168. package/dist/components/data-display/Item/index.js +2 -2
  169. package/dist/components/data-display/KPICard/index.js +3 -3
  170. package/dist/components/data-display/List/index.js +2 -2
  171. package/dist/components/data-display/SingleStat/index.js +1 -1
  172. package/dist/components/data-display/index.js +26 -26
  173. package/dist/components/feedback/AlertDialog/index.js +5 -5
  174. package/dist/components/feedback/ConfirmModal/index.js +6 -6
  175. package/dist/components/feedback/Modal/index.js +1 -1
  176. package/dist/components/feedback/UpdatesWidget/index.js +1 -1
  177. package/dist/components/feedback/index.js +9 -9
  178. package/dist/components/forms/ColorPicker/index.js +1 -1
  179. package/dist/components/forms/Combobox/index.js +1 -1
  180. package/dist/components/forms/DatePicker/index.js +6 -6
  181. package/dist/components/forms/DateRangePicker/index.js +6 -6
  182. package/dist/components/forms/EmailInput/index.js +3 -3
  183. package/dist/components/forms/Field/index.js +3 -3
  184. package/dist/components/forms/Form/index.js +2 -2
  185. package/dist/components/forms/InputGroup/index.js +8 -8
  186. package/dist/components/forms/InputOTPField/index.js +4 -4
  187. package/dist/components/forms/NativeSelect/index.js +1 -1
  188. package/dist/components/forms/NumberInput/index.js +2 -2
  189. package/dist/components/forms/PasswordInput/index.js +3 -3
  190. package/dist/components/forms/PaymentInput/index.js +1 -1
  191. package/dist/components/forms/PhoneInput/index.js +1 -1
  192. package/dist/components/forms/RadioButton/index.js +1 -1
  193. package/dist/components/forms/SearchInput/index.js +3 -3
  194. package/dist/components/forms/Slider/index.js +1 -1
  195. package/dist/components/forms/TagsInput/index.js +2 -2
  196. package/dist/components/forms/TextInput/index.js +2 -2
  197. package/dist/components/forms/Textarea/index.js +1 -1
  198. package/dist/components/forms/TextareaField/index.js +5 -5
  199. package/dist/components/forms/URLInput/index.js +3 -3
  200. package/dist/components/forms/index.js +33 -33
  201. package/dist/components/index.js +111 -111
  202. package/dist/components/layout/Card/index.js +1 -1
  203. package/dist/components/layout/Section/index.js +1 -1
  204. package/dist/components/layout/index.js +5 -5
  205. package/dist/components/navigation/AccountSwitch/index.js +3 -3
  206. package/dist/components/navigation/ContextMenu/index.js +1 -1
  207. package/dist/components/navigation/DropdownMenu/index.js +1 -1
  208. package/dist/components/navigation/FileTree/index.js +1 -1
  209. package/dist/components/navigation/LogoConta/index.js +1 -1
  210. package/dist/components/navigation/Menu/index.js +1 -1
  211. package/dist/components/navigation/Menubar/index.js +1 -1
  212. package/dist/components/navigation/Navbar/index.js +1 -1
  213. package/dist/components/navigation/Pagination/index.js +5 -5
  214. package/dist/components/navigation/Sidebar/index.js +7 -7
  215. package/dist/components/navigation/Toolbar/index.js +1 -1
  216. package/dist/components/navigation/index.js +21 -21
  217. package/dist/components/primitives/Badge/index.js +1 -1
  218. package/dist/components/primitives/Button/index.js +4 -4
  219. package/dist/components/primitives/ButtonGroup/index.js +2 -2
  220. package/dist/components/primitives/ConfirmButton/index.js +6 -6
  221. package/dist/components/primitives/Divider/index.js +1 -1
  222. package/dist/components/primitives/FolderStack/index.js +1 -1
  223. package/dist/components/primitives/Image/index.js +1 -1
  224. package/dist/components/primitives/Label/index.js +1 -1
  225. package/dist/components/primitives/SplitButton/index.js +2 -2
  226. package/dist/components/primitives/StatusIndicator/index.js +1 -1
  227. package/dist/components/primitives/Tag/index.js +1 -1
  228. package/dist/components/primitives/Thumbnail/index.js +2 -2
  229. package/dist/components/primitives/index.js +17 -17
  230. package/dist/components/workflow/ApprovalFlow/index.js +5 -5
  231. package/dist/components/workflow/CommentSystem/index.js +6 -6
  232. package/dist/components/workflow/Dashboard/index.js +5 -5
  233. package/dist/components/workflow/DashboardBuilder/index.js +8 -8
  234. package/dist/components/workflow/KanbanBoard/index.js +5 -5
  235. package/dist/components/workflow/ReportGenerator/index.js +6 -6
  236. package/dist/components/workflow/Stepper/index.js +1 -1
  237. package/dist/components/workflow/TaskStatus/index.js +2 -2
  238. package/dist/components/workflow/Wizard/index.js +6 -6
  239. package/dist/components/workflow/index.js +19 -19
  240. package/dist/index.d.ts +41 -12
  241. package/dist/index.js +111 -111
  242. package/dist/styles.css +27 -703
  243. package/package.json +2 -2
  244. package/dist/chunk-3L5G7VI2.js.map +0 -1
  245. package/dist/chunk-46ESMCEQ.js.map +0 -1
  246. package/dist/chunk-4GVOOXYD.js.map +0 -1
  247. package/dist/chunk-4Y72SPNL.js.map +0 -1
  248. package/dist/chunk-5GE3BQA7.js.map +0 -1
  249. package/dist/chunk-5U5XAOES.js.map +0 -1
  250. package/dist/chunk-66TBTTZO.js.map +0 -1
  251. package/dist/chunk-7TF5PVEU.js.map +0 -1
  252. package/dist/chunk-7Y2UQMX6.js.map +0 -1
  253. package/dist/chunk-COZXTBIU.js.map +0 -1
  254. package/dist/chunk-DYDXGWH2.js.map +0 -1
  255. package/dist/chunk-FCIF6H6E.js.map +0 -1
  256. package/dist/chunk-IFHF4UES.js.map +0 -1
  257. package/dist/chunk-IRIIK3BU.js.map +0 -1
  258. package/dist/chunk-NXQ25PKF.js.map +0 -1
  259. package/dist/chunk-OXDWUKGP.js.map +0 -1
  260. package/dist/chunk-P7D6S6GX.js.map +0 -1
  261. package/dist/chunk-U6EOAIPK.js.map +0 -1
  262. package/dist/chunk-UPK5B2FL.js.map +0 -1
  263. package/dist/chunk-VAVE4ZJF.js.map +0 -1
  264. package/dist/chunk-VORFH6HQ.js.map +0 -1
  265. package/dist/chunk-VT4IMHGE.js.map +0 -1
  266. package/dist/chunk-WKWLKGNI.js.map +0 -1
  267. package/dist/chunk-XLTSCY22.js.map +0 -1
  268. package/dist/chunk-XOGMDABS.js.map +0 -1
  269. package/dist/chunk-Y4RKKQMB.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/Tag/Tag.variants.ts","../src/components/primitives/Tag/TagGroup.tsx","../src/components/primitives/Tag/Tag.tsx"],"names":["jsx","React2"],"mappings":"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","file":"chunk-HA5YVDHW.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * Tag style variants using CVA\n *\n * @see https://cva.style/docs\n */\nexport const tagVariants = cva(\n // Base styles (always applied)\n [\n \"inline-flex items-center justify-center\",\n \"font-medium whitespace-nowrap shrink-0 gap-[var(--tag-size-gap-default)]\",\n \"rounded-[var(--tag-radius)] border bg-background text-foreground\",\n \"transition-colors duration-200\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n ],\n {\n variants: {\n size: {\n sm: \"h-[var(--tag-size-height-sm)] px-[var(--tag-size-padding-x-sm)] text-[length:var(--tag-size-text-sm)] [&_[data-slot='tag-checkbox']]:size-[var(--tag-size-checkbox-sm)]\",\n md: \"h-[var(--tag-size-height-md)] px-[var(--tag-size-padding-x-md)] text-[length:var(--tag-size-text-md)] [&_[data-slot='tag-checkbox']]:size-[var(--tag-size-checkbox-md)]\",\n lg: \"h-[var(--tag-size-height-lg)] px-[var(--tag-size-padding-x-lg)] text-[length:var(--tag-size-text-lg)] [&_[data-slot='tag-checkbox']]:size-[var(--tag-size-checkbox-lg)]\",\n },\n checked: {\n true: \"border-[color:var(--tag-color-border-checked)] bg-[color:var(--tag-color-bg-checked)]\",\n false: \"border-[color:var(--tag-color-border-default)] bg-[color:var(--tag-color-bg-default)]\",\n },\n disabled: {\n true: \"opacity-50 pointer-events-none\",\n false: \"\",\n },\n interactive: {\n true: \"cursor-pointer hover:bg-[color:var(--tag-color-bg-hover)]\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n checked: false,\n disabled: false,\n interactive: false,\n },\n }\n)\n\n/**\n * Tag count pill styles\n */\nexport const tagCountVariants = cva(\n [\n \"inline-flex items-center justify-center\",\n \"rounded-[var(--tag-count-radius)] bg-muted text-muted-foreground font-medium\",\n ],\n {\n variants: {\n size: {\n sm: \"h-[var(--tag-size-count-height-sm)] min-w-[var(--tag-size-count-min-width-sm)] px-1 text-[length:var(--tag-size-count-text-sm)]\",\n md: \"h-[var(--tag-size-count-height-md)] min-w-[var(--tag-size-count-min-width-md)] px-1.5 text-[length:var(--tag-size-count-text-md)]\",\n lg: \"h-[var(--tag-size-count-height-lg)] min-w-[var(--tag-size-count-min-width-lg)] px-1.5 text-[length:var(--tag-size-count-text-lg)]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\n/**\n * Tag checkbox styles\n */\nexport const tagCheckboxVariants = cva(\n [\n \"inline-flex items-center justify-center shrink-0\",\n \"rounded border transition-colors\",\n ],\n {\n variants: {\n size: {\n sm: \"size-[var(--tag-size-checkbox-sm)]\",\n md: \"size-[var(--tag-size-checkbox-md)]\",\n lg: \"size-[var(--tag-size-checkbox-lg)]\",\n },\n checked: {\n true: \"bg-[color:var(--tag-checkbox-bg-checked)] border-[color:var(--tag-checkbox-border-checked)] text-[color:var(--tag-checkbox-text-checked)]\",\n false: \"border-[color:var(--tag-checkbox-border-default)] bg-[color:var(--tag-checkbox-bg-default)]\",\n },\n disabled: {\n true: \"opacity-50\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n checked: false,\n disabled: false,\n },\n }\n)\n\nexport type TagVariantProps = VariantProps<typeof tagVariants>\n\n/**\n * TagGroup layout variants\n */\nexport const tagGroupVariants = cva(\"inline-flex\", {\n variants: {\n /**\n * Layout mode for tags\n */\n layout: {\n /** Single line with scroll */\n inline: \"flex-nowrap overflow-x-auto\",\n /** Wrap to multiple lines */\n wrap: \"flex-wrap\",\n /** Vertical stack */\n stack: \"flex-col\",\n },\n /**\n * Gap between tags\n */\n gap: {\n none: \"gap-0\",\n xs: \"gap-1\",\n sm: \"gap-1.5\",\n md: \"gap-2\",\n lg: \"gap-3\",\n },\n /**\n * Alignment of tags\n */\n align: {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n },\n },\n defaultVariants: {\n layout: \"wrap\",\n gap: \"sm\",\n align: \"center\",\n },\n})\n\nexport type TagGroupVariantProps = VariantProps<typeof tagGroupVariants>\n","\"use client\"\n\nimport type { TagGroupContextValue, TagGroupProps } from \"./Tag.types\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { tagGroupVariants } from \"./Tag.variants\"\n\n/**\n * Context for TagGroup to pass props to child Tags\n */\nconst TagGroupContext = React.createContext<null | TagGroupContextValue>(null)\n\n/**\n * Hook to access TagGroup context\n */\nexport function useTagGroup(): null | TagGroupContextValue {\n return React.use(TagGroupContext)\n}\n\n/**\n * TagGroup - Container for grouping multiple Tag components\n *\n * Provides layout control, gap spacing, and can pass size/disabled\n * props to all child Tags via context.\n *\n * @example\n * ```tsx\n * // Basic grouping with wrap layout\n * <TagGroup>\n * <Tag>React</Tag>\n * <Tag>TypeScript</Tag>\n * <Tag>Tailwind</Tag>\n * </TagGroup>\n *\n * // Inline scrollable\n * <TagGroup layout=\"inline\" gap=\"md\">\n * {tags.map(tag => <Tag key={tag}>{tag}</Tag>)}\n * </TagGroup>\n *\n * // With size inheritance\n * <TagGroup size=\"sm\">\n * <Tag checkbox>Option 1</Tag>\n * <Tag checkbox>Option 2</Tag>\n * </TagGroup>\n *\n * // Vertical stack\n * <TagGroup layout=\"stack\" align=\"start\">\n * <Tag>First</Tag>\n * <Tag>Second</Tag>\n * <Tag>Third</Tag>\n * </TagGroup>\n * ```\n */\nexport function TagGroup({\n children,\n className,\n layout,\n gap,\n align,\n size,\n disabled,\n ...props\n}: TagGroupProps) {\n // Memoize context value to prevent unnecessary re-renders\n const contextValue = React.useMemo<TagGroupContextValue>(\n () => ({\n size,\n disabled,\n }),\n [size, disabled]\n )\n\n return (\n <TagGroupContext value={contextValue}>\n <div\n className={cn(tagGroupVariants({ layout, gap, align }), className)}\n data-slot=\"tag-group\"\n role=\"group\"\n {...props}\n >\n {children}\n </div>\n </TagGroupContext>\n )\n}\n\nTagGroup.displayName = \"TagGroup\"\n","\"use client\"\n\nimport type { TagAvatarProps, TagDotColor, TagProps } from \"./Tag.types\"\n\nimport { Check, X } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { tagCheckboxVariants, tagCountVariants, tagVariants } from \"./Tag.variants\"\nimport { useTagGroup } from \"./TagGroup\"\n\n// Internal checkbox component\nfunction TagCheckbox({\n checked,\n disabled,\n size,\n}: {\n checked: boolean\n disabled?: boolean\n size: \"lg\" | \"md\" | \"sm\"\n}) {\n return (\n <span\n className={cn(tagCheckboxVariants({ size, checked, disabled }))}\n data-slot=\"tag-checkbox\"\n >\n {checked && <Check className=\"size-3\" strokeWidth={3} />}\n </span>\n )\n}\n\n// Internal count pill component\nfunction TagCount({ count, size }: { count: number; size: \"lg\" | \"md\" | \"sm\" }) {\n return (\n <span className={cn(tagCountVariants({ size }))} data-slot=\"tag-count\">\n {count > 999 ? \"999+\" : count}\n </span>\n )\n}\n\n// Dismiss button size mapping (Figma: sm=10px, md=12px, lg=14px icons)\nconst dismissSizeMap = {\n sm: { button: \"size-3.5\", icon: \"size-2.5\" }, // 14px button, 10px icon\n md: { button: \"size-4\", icon: \"size-3\" }, // 16px button, 12px icon\n lg: { button: \"size-4.5\", icon: \"size-3.5\" }, // 18px button, 14px icon\n}\n\n// Internal dismiss button component\nfunction TagDismiss({\n onClick,\n disabled,\n size = \"md\",\n}: {\n disabled?: boolean\n onClick: () => void\n size?: \"lg\" | \"md\" | \"sm\"\n}) {\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation()\n if (!disabled) {\n onClick()\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if ((e.key === \"Enter\" || e.key === \" \") && !disabled) {\n e.preventDefault()\n e.stopPropagation()\n onClick()\n }\n }\n\n const sizeClasses = dismissSizeMap[size]\n\n return (\n <button\n className={cn(\n sizeClasses.button,\n \"-mr-0.5 rounded-sm inline-flex items-center justify-center shrink-0\",\n \"text-muted-foreground hover:text-foreground hover:bg-muted\",\n \"transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n disabled && \"pointer-events-none\"\n )}\n aria-label=\"Remove tag\"\n data-slot=\"tag-dismiss\"\n disabled={disabled}\n tabIndex={-1}\n type=\"button\"\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n <X className={sizeClasses.icon} />\n </button>\n )\n}\n\n// Internal avatar component\nfunction TagAvatar({ src, fallback, alt }: TagAvatarProps) {\n const [imageError, setImageError] = React.useState(false)\n\n const initials = fallback\n .split(\" \")\n .map((word) => word[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n\n return (\n <span\n className=\"size-4 -ml-0.5 rounded-full shrink-0 inline-flex items-center justify-center overflow-hidden bg-muted text-3xs font-medium\"\n data-slot=\"tag-avatar\"\n >\n {src && !imageError ? (\n <img\n alt={alt ?? fallback}\n className=\"size-full object-cover\"\n src={src}\n onError={() => {\n setImageError(true)\n }}\n />\n ) : (\n <span aria-label={alt ?? fallback}>{initials}</span>\n )}\n </span>\n )\n}\n\n// Internal dot component\nconst TAG_DOT_COLOR_CLASS: Record<TagDotColor, string> = {\n brand: \"bg-[color:var(--tag-color-dot)]\",\n neutral: \"bg-[color:var(--tag-color-dot-neutral)]\",\n success: \"bg-[color:var(--tag-color-dot-success)]\",\n warning: \"bg-[color:var(--tag-color-dot-warning)]\",\n destructive: \"bg-[color:var(--tag-color-dot-destructive)]\",\n info: \"bg-[color:var(--tag-color-dot-info)]\",\n}\n\nfunction TagDot({ color = \"success\" }: { color?: TagDotColor }) {\n return (\n <span\n className={cn(\"size-1.5 rounded-full shrink-0\", TAG_DOT_COLOR_CLASS[color])}\n data-slot=\"tag-dot\"\n />\n )\n}\n\n// Internal country flag component\nfunction TagCountry({ code }: { code: string }) {\n const countryToFlag = (countryCode: string) => {\n // eslint-disable-next-line unicorn/prefer-spread -- Array.from handles Unicode correctly for country codes\n const codePoints = Array.from(countryCode.toUpperCase()).map(\n (char) => 127397 + char.charCodeAt(0)\n )\n return String.fromCodePoint(...codePoints)\n }\n\n return (\n <span\n aria-label={`Flag of ${code}`}\n className=\"text-base -ml-0.5 shrink-0 leading-none\"\n data-slot=\"tag-country\"\n role=\"img\"\n >\n {countryToFlag(code)}\n </span>\n )\n}\n\n/**\n * Tag - Interactive selectable/filterable component\n *\n * Used for filtering, categorization, and selection with optional\n * checkbox, count, avatar, country flag, and dismiss functionality.\n *\n * @example\n * ```tsx\n * // Basic tag\n * <Tag>Label</Tag>\n *\n * // With checkbox\n * <Tag checkbox checked={selected} onCheckedChange={setSelected}>\n * React\n * </Tag>\n *\n * // With count and dismiss\n * <Tag count={5} onDismiss={() => {}}>\n * Notifications\n * </Tag>\n * ```\n */\nexport function Tag({\n children,\n className,\n size: sizeProp,\n checkbox,\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n dot,\n dotColor,\n icon,\n avatar,\n country,\n count,\n onDismiss,\n disabled: disabledProp,\n onClick,\n onKeyDown,\n ...props\n}: TagProps) {\n // Get context from TagGroup (if present)\n const groupContext = useTagGroup()\n\n // Merge with context values\n const size = sizeProp ?? groupContext?.size ?? \"md\"\n const disabled = disabledProp ?? groupContext?.disabled\n\n // Uncontrolled state for checkbox\n const [internalChecked, setInternalChecked] = React.useState(defaultChecked)\n\n // Use controlled or uncontrolled checked value\n const isChecked = controlledChecked ?? internalChecked\n const isInteractive = Boolean(checkbox) || Boolean(onClick)\n\n // Handle checkbox toggle\n const handleToggle = () => {\n if (disabled) return\n\n const newChecked = !isChecked\n setInternalChecked(newChecked)\n onCheckedChange?.(newChecked)\n }\n\n // Handle click\n const handleClick = (e: React.MouseEvent<HTMLSpanElement>) => {\n if (disabled) return\n\n if (checkbox) {\n handleToggle()\n }\n\n onClick?.(e)\n }\n\n // Handle keyboard\n const handleKeyDown = (e: React.KeyboardEvent<HTMLSpanElement>) => {\n if (disabled) return\n\n // Toggle on Space/Enter for checkbox\n if (checkbox && (e.key === \" \" || e.key === \"Enter\")) {\n e.preventDefault()\n handleToggle()\n }\n\n // Dismiss on Delete/Backspace\n if (onDismiss && (e.key === \"Delete\" || e.key === \"Backspace\")) {\n e.preventDefault()\n onDismiss()\n }\n\n onKeyDown?.(e)\n }\n\n // Render leading content (checkbox, avatar, country, icon, or dot)\n const renderLeading = () => {\n if (checkbox) {\n return <TagCheckbox checked={isChecked} disabled={disabled} size={size} />\n }\n if (avatar) return <TagAvatar {...avatar} />\n if (country) return <TagCountry code={country} />\n if (icon) return <span className=\"shrink-0 [&_svg]:size-3.5\" data-slot=\"tag-icon\">{icon}</span>\n if (dot) return <TagDot color={dotColor} />\n return null\n }\n\n // Render trailing content (count, dismiss)\n const renderTrailing = () => {\n return (\n <>\n {count !== undefined && <TagCount count={count} size={size} />}\n {onDismiss && <TagDismiss disabled={disabled} size={size} onClick={onDismiss} />}\n </>\n )\n }\n\n return (\n <span\n className={cn(\n tagVariants({\n size,\n checked: isChecked,\n disabled,\n interactive: isInteractive,\n }),\n className\n )}\n aria-checked={checkbox ? isChecked : undefined}\n aria-disabled={disabled}\n data-slot=\"tag\"\n role={checkbox ? \"checkbox\" : undefined}\n tabIndex={isInteractive && !disabled ? 0 : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {renderLeading()}\n <span data-slot=\"tag-content\">{children}</span>\n {renderTrailing()}\n </span>\n )\n}\n\nTag.displayName = \"Tag\"\n"]}
@@ -1,4 +1,4 @@
1
- import { TextInput } from './chunk-PWCMCMDN.js';
1
+ import { TextInput } from './chunk-ZMUUEXVD.js';
2
2
  import { EyeOffIcon, EyeIcon } from 'lucide-react';
3
3
  import * as React from 'react';
4
4
  import { cva } from 'class-variance-authority';
@@ -74,5 +74,5 @@ function PasswordInput({
74
74
  }
75
75
 
76
76
  export { PasswordInput, passwordToggleVariants };
77
- //# sourceMappingURL=chunk-ZKK7L7H7.js.map
78
- //# sourceMappingURL=chunk-ZKK7L7H7.js.map
77
+ //# sourceMappingURL=chunk-HP7LEQJR.js.map
78
+ //# sourceMappingURL=chunk-HP7LEQJR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/forms/PasswordInput/PasswordInput.variants.ts","../src/components/forms/PasswordInput/PasswordInput.tsx"],"names":[],"mappings":";;;;;;AAMO,IAAM,sBAAA,GAAyB,GAAA;AAAA;AAAA,EAEpC;AAAA,IACE,2CAAA;AAAA,IACA,kCAAA;AAAA,IACA,6CAAA;AAAA,IACA,mBAAA;AAAA,IACA,kDAAA;AAAA,IACA,qGAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,kCAAA;AAAA,QACJ,EAAA,EAAI,kCAAA;AAAA,QACJ,EAAA,EAAI,kCAAA;AAAA,QACJ,EAAA,EAAI,oCAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;ACZA,SAAS,aAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,SAAA;AAAA,EACV,UAAA,GAAa,IAAA;AAAA,EACb,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAU,eAAS,KAAK,CAAA;AAE5D,EAAA,MAAM,gBAAA,GAAyB,kBAAY,MAAM;AAC/C,IAAA,eAAA,CAAgB,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,EACjC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAe,UAAA,mBACnB,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,eAAe,eAAA,GAAkB,eAAA;AAAA,MAC7C,SAAA,EAAW,sBAAA,CAAuB,EAAE,IAAA,EAAM,CAAA;AAAA,MAC1C,WAAA,EAAU,iBAAA;AAAA,MACV,QAAA;AAAA,MACA,QAAA,EAAU,EAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,gBAAA;AAAA,MAER,QAAA,EAAA,YAAA,GACI,QAAA,oBAAY,GAAA,CAAC,UAAA,EAAA,EAAW,aAAA,EAAY,MAAA,EAAO,CAAA,GAC3C,QAAA,oBAAY,GAAA,CAAC,OAAA,EAAA,EAAQ,aAAA,EAAY,MAAA,EAAO;AAAA;AAAA,GAC/C,GACE,MAAA;AAEJ,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,WAAA,EAAU,gBAAA;AAAA,MACV,QAAA;AAAA,MACA,IAAA;AAAA,MACA,YAAA,EAAc,YAAA;AAAA,MACd,uBAAA,EAAyB,IAAA;AAAA,MACzB,IAAA,EAAM,eAAe,MAAA,GAAS,UAAA;AAAA,MAC9B,OAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-ZKK7L7H7.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * Password toggle button variant styles using CVA\n * Sizes match the input sizes for proper alignment\n */\nexport const passwordToggleVariants = cva(\n // Base styles\n [\n \"absolute right-0 top-1/2 -translate-y-1/2\",\n \"flex items-center justify-center\",\n \"text-muted-foreground hover:text-foreground\",\n \"transition-colors\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"rounded-sm\",\n ],\n {\n variants: {\n size: {\n xs: \"h-5 w-5 right-1.5 [&_svg]:size-3\",\n sm: \"h-6 w-6 right-2 [&_svg]:size-3.5\",\n md: \"h-7 w-7 right-2.5 [&_svg]:size-4\",\n lg: \"h-8 w-8 right-2.5 [&_svg]:size-4.5\",\n xl: \"h-9 w-9 right-3 [&_svg]:size-5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\nexport type PasswordToggleVariantProps = VariantProps<typeof passwordToggleVariants>\n","\"use client\"\n\nimport type { PasswordInputProps } from \"./PasswordInput.types\"\n\nimport { EyeIcon, EyeOffIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { TextInput } from \"../TextInput\"\nimport { passwordToggleVariants } from \"./PasswordInput.variants\"\n\n/**\n * PasswordInput component with visibility toggle.\n * Now uses TextInput internally for consistency.\n *\n * @example\n * ```tsx\n * <PasswordInput placeholder=\"Enter password\" />\n * ```\n */\nfunction PasswordInput({\n className,\n size = \"md\",\n variant = \"default\",\n showToggle = true,\n showIcon,\n hideIcon,\n disabled,\n ...props\n}: PasswordInputProps) {\n const [showPassword, setShowPassword] = React.useState(false)\n\n const toggleVisibility = React.useCallback(() => {\n setShowPassword((prev) => !prev)\n }, [])\n\n const toggleButton = showToggle ? (\n <button\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\n className={passwordToggleVariants({ size })}\n data-slot=\"password-toggle\"\n disabled={disabled}\n tabIndex={-1}\n type=\"button\"\n onClick={toggleVisibility}\n >\n {showPassword\n ? (hideIcon ?? <EyeOffIcon aria-hidden=\"true\" />)\n : (showIcon ?? <EyeIcon aria-hidden=\"true\" />)}\n </button>\n ) : undefined\n\n return (\n <TextInput\n className={className}\n data-slot=\"password-input\"\n disabled={disabled}\n size={size}\n trailingIcon={toggleButton}\n trailingIconInteractive={true}\n type={showPassword ? \"text\" : \"password\"}\n variant={variant}\n {...props}\n />\n )\n}\n\nexport { PasswordInput }"]}
1
+ {"version":3,"sources":["../src/components/forms/PasswordInput/PasswordInput.variants.ts","../src/components/forms/PasswordInput/PasswordInput.tsx"],"names":[],"mappings":";;;;;;AAMO,IAAM,sBAAA,GAAyB,GAAA;AAAA;AAAA,EAEpC;AAAA,IACE,2CAAA;AAAA,IACA,kCAAA;AAAA,IACA,6CAAA;AAAA,IACA,mBAAA;AAAA,IACA,kDAAA;AAAA,IACA,qGAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,kCAAA;AAAA,QACJ,EAAA,EAAI,kCAAA;AAAA,QACJ,EAAA,EAAI,kCAAA;AAAA,QACJ,EAAA,EAAI,oCAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;ACZA,SAAS,aAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,SAAA;AAAA,EACV,UAAA,GAAa,IAAA;AAAA,EACb,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAU,eAAS,KAAK,CAAA;AAE5D,EAAA,MAAM,gBAAA,GAAyB,kBAAY,MAAM;AAC/C,IAAA,eAAA,CAAgB,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,EACjC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAe,UAAA,mBACnB,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,eAAe,eAAA,GAAkB,eAAA;AAAA,MAC7C,SAAA,EAAW,sBAAA,CAAuB,EAAE,IAAA,EAAM,CAAA;AAAA,MAC1C,WAAA,EAAU,iBAAA;AAAA,MACV,QAAA;AAAA,MACA,QAAA,EAAU,EAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,gBAAA;AAAA,MAER,QAAA,EAAA,YAAA,GACI,QAAA,oBAAY,GAAA,CAAC,UAAA,EAAA,EAAW,aAAA,EAAY,MAAA,EAAO,CAAA,GAC3C,QAAA,oBAAY,GAAA,CAAC,OAAA,EAAA,EAAQ,aAAA,EAAY,MAAA,EAAO;AAAA;AAAA,GAC/C,GACE,MAAA;AAEJ,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,WAAA,EAAU,gBAAA;AAAA,MACV,QAAA;AAAA,MACA,IAAA;AAAA,MACA,YAAA,EAAc,YAAA;AAAA,MACd,uBAAA,EAAyB,IAAA;AAAA,MACzB,IAAA,EAAM,eAAe,MAAA,GAAS,UAAA;AAAA,MAC9B,OAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-HP7LEQJR.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * Password toggle button variant styles using CVA\n * Sizes match the input sizes for proper alignment\n */\nexport const passwordToggleVariants = cva(\n // Base styles\n [\n \"absolute right-0 top-1/2 -translate-y-1/2\",\n \"flex items-center justify-center\",\n \"text-muted-foreground hover:text-foreground\",\n \"transition-colors\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"rounded-sm\",\n ],\n {\n variants: {\n size: {\n xs: \"h-5 w-5 right-1.5 [&_svg]:size-3\",\n sm: \"h-6 w-6 right-2 [&_svg]:size-3.5\",\n md: \"h-7 w-7 right-2.5 [&_svg]:size-4\",\n lg: \"h-8 w-8 right-2.5 [&_svg]:size-4.5\",\n xl: \"h-9 w-9 right-3 [&_svg]:size-5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\nexport type PasswordToggleVariantProps = VariantProps<typeof passwordToggleVariants>\n","\"use client\"\n\nimport type { PasswordInputProps } from \"./PasswordInput.types\"\n\nimport { EyeIcon, EyeOffIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { TextInput } from \"../TextInput\"\nimport { passwordToggleVariants } from \"./PasswordInput.variants\"\n\n/**\n * PasswordInput component with visibility toggle.\n * Now uses TextInput internally for consistency.\n *\n * @example\n * ```tsx\n * <PasswordInput placeholder=\"Enter password\" />\n * ```\n */\nfunction PasswordInput({\n className,\n size = \"md\",\n variant = \"default\",\n showToggle = true,\n showIcon,\n hideIcon,\n disabled,\n ...props\n}: PasswordInputProps) {\n const [showPassword, setShowPassword] = React.useState(false)\n\n const toggleVisibility = React.useCallback(() => {\n setShowPassword((prev) => !prev)\n }, [])\n\n const toggleButton = showToggle ? (\n <button\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\n className={passwordToggleVariants({ size })}\n data-slot=\"password-toggle\"\n disabled={disabled}\n tabIndex={-1}\n type=\"button\"\n onClick={toggleVisibility}\n >\n {showPassword\n ? (hideIcon ?? <EyeOffIcon aria-hidden=\"true\" />)\n : (showIcon ?? <EyeIcon aria-hidden=\"true\" />)}\n </button>\n ) : undefined\n\n return (\n <TextInput\n className={className}\n data-slot=\"password-input\"\n disabled={disabled}\n size={size}\n trailingIcon={toggleButton}\n trailingIconInteractive={true}\n type={showPassword ? \"text\" : \"password\"}\n variant={variant}\n {...props}\n />\n )\n}\n\nexport { PasswordInput }"]}
@@ -1,6 +1,6 @@
1
1
  import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-WBE6VQOO.js';
2
- import { TextInput } from './chunk-PWCMCMDN.js';
3
- import { Button } from './chunk-7TF5PVEU.js';
2
+ import { TextInput } from './chunk-ZMUUEXVD.js';
3
+ import { Button } from './chunk-X5XP5QVO.js';
4
4
  import { cn } from './chunk-HRNDJU7D.js';
5
5
  import { XIcon, TrashIcon, PlusIcon } from 'lucide-react';
6
6
  import * as React from 'react';
@@ -924,5 +924,5 @@ function FilterBuilder({
924
924
  FilterBuilder.displayName = "FilterBuilder";
925
925
 
926
926
  export { FilterBuilder, FilterGroupComponent, FilterPreview, FilterRuleComponent, FilterToolbar, combinatorToggleVariants, emptyStateVariants, filterBuilderVariants, filterGroupHeaderVariants, filterGroupVariants, filterPreviewVariants, filterRuleVariants, filterToolbarVariants, isFilterGroup, isFilterRule, ruleFieldVariants, ruleOperatorVariants, ruleValueVariants, rulesContainerVariants };
927
- //# sourceMappingURL=chunk-W7S7GPU5.js.map
928
- //# sourceMappingURL=chunk-W7S7GPU5.js.map
927
+ //# sourceMappingURL=chunk-HV2ZZXFN.js.map
928
+ //# sourceMappingURL=chunk-HV2ZZXFN.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/advanced/FilterBuilder/FilterBuilder.types.ts","../src/components/advanced/FilterBuilder/FilterBuilder.variants.ts","../src/components/advanced/FilterBuilder/FilterBuilder.tsx"],"names":["rulesCount"],"mappings":"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","file":"chunk-W7S7GPU5.js","sourcesContent":["// FilterBuilder/FilterBuilder.types.ts\n\nimport type { filterBuilderVariants } from \"./FilterBuilder.variants\"\nimport type { VariantProps } from \"class-variance-authority\"\n\n// ============================================\n// OPERATOR TYPES\n// ============================================\n\n/**\n * Available operator types for filter rules\n */\nexport type OperatorType =\n | \"between\"\n | \"contains\"\n | \"ends_with\"\n | \"equals\"\n | \"greater_than\"\n | \"greater_than_or_equal\"\n | \"in\"\n | \"is_empty\"\n | \"is_not_empty\"\n | \"less_than\"\n | \"less_than_or_equal\"\n | \"not_equals\"\n | \"not_in\"\n | \"starts_with\"\n\n/**\n * Field types that determine available operators\n */\nexport type FieldType = \"boolean\" | \"date\" | \"number\" | \"select\" | \"string\"\n\n// ============================================\n// DATA STRUCTURES\n// ============================================\n\n/**\n * Option for select-type fields\n */\nexport interface FieldOption {\n /** Display label */\n label: string\n /** Option value */\n value: string\n}\n\n/**\n * Field definition for available filter fields\n */\nexport interface FieldDefinition {\n /** Display label */\n label: string\n /** Unique field identifier */\n name: string\n /** Override default operators for this field */\n operators?: OperatorType[]\n /** Options for select-type fields */\n options?: FieldOption[]\n /** Field data type */\n type: FieldType\n}\n\n/**\n * Individual filter rule\n */\nexport interface FilterRule {\n /** Field name to filter */\n field: string\n /** Unique rule identifier */\n id: string\n /** Operator to apply */\n operator: \"\" | OperatorType\n /** Filter value(s) */\n value: unknown\n}\n\n/**\n * Group of rules with logical combinator\n */\nexport interface FilterGroup {\n /** Logical combinator (and/or) */\n combinator: \"and\" | \"or\"\n /** Unique group identifier */\n id: string\n /** Rules and/or nested groups */\n rules: (FilterGroup | FilterRule)[]\n}\n\n// ============================================\n// EVENT PAYLOADS\n// ============================================\n\n/**\n * Event payload for filter changes\n */\nexport interface FilterBuilderEventPayload {\n /** The updated filter structure */\n filter: FilterGroup\n /** Timestamp of the event */\n timestamp: number\n}\n\n/**\n * Event payload for rule changes\n */\nexport interface FilterRuleEventPayload {\n /** Path to the rule in the filter structure */\n path: string[]\n /** The rule that changed */\n rule: FilterRule\n /** Timestamp of the event */\n timestamp: number\n}\n\n// ============================================\n// COMPONENT PROPS\n// ============================================\n\n/**\n * Props for the FilterBuilder root component\n */\nexport interface FilterBuilderProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\">,\n VariantProps<typeof filterBuilderVariants> {\n /** Additional CSS classes */\n className?: string\n /** Available fields for filtering */\n fields: FieldDefinition[]\n /** Maximum nesting depth for groups */\n maxDepth?: number\n /** Maximum number of rules allowed */\n maxRules?: number\n /** Callback when filters are applied */\n onApply?: (filter: FilterGroup) => void\n /** Callback when filter changes */\n onChange?: (filter: FilterGroup) => void\n /** Callback when filters are cleared */\n onClear?: () => void\n /** Show preview of the resulting query */\n showPreview?: boolean\n /** Current filter value (controlled) */\n value?: FilterGroup\n}\n\n/**\n * Props for FilterGroup component\n */\nexport interface FilterGroupProps {\n /** Current nesting depth */\n depth: number\n /** Available fields */\n fields: FieldDefinition[]\n /** The group data */\n group: FilterGroup\n /** Whether this is the root group */\n isRoot?: boolean\n /** Maximum nesting depth */\n maxDepth: number\n /** Maximum number of rules */\n maxRules: number\n /** Callback when group changes */\n onChange: (group: FilterGroup) => void\n /** Callback when group is removed */\n onRemove?: () => void\n /** Current total rules count */\n rulesCount: number\n}\n\n/**\n * Props for FilterRule component\n */\nexport interface FilterRuleProps {\n /** Available fields */\n fields: FieldDefinition[]\n /** Callback when rule changes */\n onChange: (rule: FilterRule) => void\n /** Callback when rule is removed */\n onRemove: () => void\n /** The rule data */\n rule: FilterRule\n}\n\n/**\n * Props for FilterToolbar component\n */\nexport interface FilterToolbarProps {\n /** Whether adding groups is disabled (max depth reached) */\n canAddGroup: boolean\n /** Whether adding rules is disabled (max reached) */\n canAddRule: boolean\n /** Whether there are rules to clear */\n hasRules: boolean\n /** Callback to add a new group */\n onAddGroup: () => void\n /** Callback to add a new rule */\n onAddRule: () => void\n /** Callback to apply filters */\n onApply?: () => void\n /** Callback to clear all rules */\n onClear?: () => void\n}\n\n/**\n * Props for FilterPreview component\n */\nexport interface FilterPreviewProps {\n /** Available fields (for label lookup) */\n fields: FieldDefinition[]\n /** The filter to preview */\n filter: FilterGroup\n}\n\n// ============================================\n// UTILITY TYPES\n// ============================================\n\n/**\n * Default operators by field type\n */\nexport type OperatorsByType = Record<FieldType, OperatorType[]>\n\n/**\n * Operator display info\n */\nexport interface OperatorInfo {\n /** Display label */\n label: string\n /** Operator value */\n value: OperatorType\n}\n\n/**\n * Check if an item is a FilterGroup\n */\nexport function isFilterGroup(\n item: FilterGroup | FilterRule\n): item is FilterGroup {\n return \"combinator\" in item && \"rules\" in item\n}\n\n/**\n * Check if an item is a FilterRule\n */\nexport function isFilterRule(\n item: FilterGroup | FilterRule\n): item is FilterRule {\n return \"field\" in item && \"operator\" in item\n}\n","// FilterBuilder/FilterBuilder.variants.ts\n\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\n// Common style constants\nconst ROUNDED_MD = \"rounded-md\"\n\n/**\n * FilterBuilder root container variants\n */\nexport const filterBuilderVariants = cva(\n [\n \"w-full\",\n \"rounded-lg\",\n \"border border-border\",\n \"bg-background\",\n ],\n {\n variants: {\n size: {\n sm: \"p-3 text-sm\",\n default: \"p-4 text-sm\",\n lg: \"p-6 text-base\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * FilterGroup container variants\n */\nexport const filterGroupVariants = cva(\n [\n \"relative\",\n ROUNDED_MD,\n \"border border-border\",\n \"bg-muted/30\",\n ],\n {\n variants: {\n size: {\n sm: \"p-2 gap-2\",\n default: \"p-4 gap-3\",\n lg: \"p-5 gap-4\",\n },\n isRoot: {\n true: \"border-0 bg-transparent p-0\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n isRoot: false,\n },\n }\n)\n\n/**\n * FilterGroup header (combinator toggle) variants\n */\nexport const filterGroupHeaderVariants = cva(\n [\n \"flex items-center\",\n \"font-medium\",\n ],\n {\n variants: {\n size: {\n sm: \"gap-1.5 text-xs mb-2\",\n default: \"gap-2 text-sm mb-3\",\n lg: \"gap-3 text-base mb-4\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Combinator toggle button variants\n */\nexport const combinatorToggleVariants = cva(\n [\n \"inline-flex items-center justify-center\",\n ROUNDED_MD,\n \"font-semibold uppercase tracking-wide\",\n \"transition-colors duration-200\",\n \"cursor-pointer\",\n \"select-none\",\n ],\n {\n variants: {\n size: {\n sm: \"px-2 py-0.5 text-xs min-w-9\",\n default: \"px-2.5 py-1 text-xs min-w-11\",\n lg: \"px-3 py-1.5 text-sm min-w-14\",\n },\n active: {\n true: \"bg-primary text-primary-foreground\",\n false: \"bg-muted text-muted-foreground hover:bg-muted/80\",\n },\n },\n defaultVariants: {\n size: \"default\",\n active: false,\n },\n }\n)\n\n/**\n * FilterRule container variants\n */\nexport const filterRuleVariants = cva(\n [\n \"flex items-start\",\n ROUNDED_MD,\n \"bg-background\",\n \"border border-border\",\n \"transition-all duration-200\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-1\",\n ],\n {\n variants: {\n size: {\n sm: \"p-2 gap-1.5\",\n default: \"p-3 gap-2\",\n lg: \"p-4 gap-3\",\n },\n invalid: {\n true: \"border-destructive\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n invalid: false,\n },\n }\n)\n\n/**\n * Rule field select variants\n */\nexport const ruleFieldVariants = cva(\n [\n \"flex-shrink-0\",\n ],\n {\n variants: {\n size: {\n sm: \"w-32\",\n default: \"w-40\",\n lg: \"w-52\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Rule operator select variants\n */\nexport const ruleOperatorVariants = cva(\n [\n \"flex-shrink-0\",\n ],\n {\n variants: {\n size: {\n sm: \"w-24\",\n default: \"w-36\",\n lg: \"w-44\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Rule value input variants\n */\nexport const ruleValueVariants = cva(\n [\n \"flex-1 min-w-0\",\n ],\n {\n variants: {\n size: {\n sm: \"\",\n default: \"\",\n lg: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Rules container variants\n */\nexport const rulesContainerVariants = cva(\n [\n \"flex flex-col\",\n ],\n {\n variants: {\n size: {\n sm: \"gap-2\",\n default: \"gap-3\",\n lg: \"gap-4\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * FilterToolbar variants\n */\nexport const filterToolbarVariants = cva(\n [\n \"flex items-center justify-between\",\n \"pt-3 mt-3\",\n \"border-t border-border\",\n ],\n {\n variants: {\n size: {\n sm: \"gap-2\",\n default: \"gap-3\",\n lg: \"gap-4\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * FilterPreview variants\n */\nexport const filterPreviewVariants = cva(\n [\n ROUNDED_MD,\n \"bg-muted/50\",\n \"font-mono\",\n \"overflow-x-auto\",\n ],\n {\n variants: {\n size: {\n sm: \"p-2 text-xs mt-3\",\n default: \"p-3 text-xs mt-4\",\n lg: \"p-4 text-sm mt-5\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Empty state variants\n */\nexport const emptyStateVariants = cva(\n [\n \"flex flex-col items-center justify-center\",\n \"text-muted-foreground\",\n \"border border-dashed border-border\",\n ROUNDED_MD,\n ],\n {\n variants: {\n size: {\n sm: \"py-4 px-3 text-xs gap-1\",\n default: \"py-6 px-4 text-sm gap-2\",\n lg: \"py-8 px-6 text-base gap-3\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n// ============================================\n// VARIANT PROP TYPES\n// ============================================\n\nexport type FilterBuilderVariantProps = VariantProps<typeof filterBuilderVariants>\nexport type FilterGroupVariantProps = VariantProps<typeof filterGroupVariants>\nexport type FilterRuleVariantProps = VariantProps<typeof filterRuleVariants>\nexport type CombinatorToggleVariantProps = VariantProps<typeof combinatorToggleVariants>\n","// FilterBuilder/FilterBuilder.tsx\n\"use client\"\n\nimport type {\n FieldDefinition,\n FilterBuilderProps,\n FilterGroup,\n FilterGroupProps,\n FilterPreviewProps,\n FilterRule,\n FilterRuleProps,\n FilterToolbarProps,\n OperatorInfo,\n OperatorsByType,\n OperatorType,\n} from \"./FilterBuilder.types\"\n\nimport { PlusIcon, TrashIcon, XIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../forms/Select\"\nimport { TextInput } from \"../../forms/TextInput\"\nimport { Button } from \"../../primitives/Button\"\nimport { isFilterGroup } from \"./FilterBuilder.types\"\nimport {\n combinatorToggleVariants,\n emptyStateVariants,\n filterBuilderVariants,\n filterGroupHeaderVariants,\n filterGroupVariants,\n filterPreviewVariants,\n filterRuleVariants,\n filterToolbarVariants,\n ruleFieldVariants,\n ruleOperatorVariants,\n rulesContainerVariants,\n ruleValueVariants,\n} from \"./FilterBuilder.variants\"\n\n// ============================================\n// CONSTANTS\n// ============================================\n\n/**\n * Default operators available for each field type\n */\nconst DEFAULT_OPERATORS_BY_TYPE: OperatorsByType = {\n boolean: [\"equals\", \"not_equals\"],\n date: [\n \"equals\",\n \"not_equals\",\n \"greater_than\",\n \"less_than\",\n \"between\",\n ],\n number: [\n \"equals\",\n \"not_equals\",\n \"greater_than\",\n \"greater_than_or_equal\",\n \"less_than\",\n \"less_than_or_equal\",\n \"between\",\n ],\n select: [\"equals\", \"not_equals\", \"in\", \"not_in\"],\n string: [\n \"equals\",\n \"not_equals\",\n \"contains\",\n \"starts_with\",\n \"ends_with\",\n \"is_empty\",\n \"is_not_empty\",\n ],\n}\n\n/**\n * Operator display labels\n */\nconst OPERATOR_LABELS: Record<OperatorType, string> = {\n between: \"between\",\n contains: \"contains\",\n ends_with: \"ends with\",\n equals: \"equals\",\n greater_than: \"greater than\",\n greater_than_or_equal: \"greater than or equal\",\n in: \"is any of\",\n is_empty: \"is empty\",\n is_not_empty: \"is not empty\",\n less_than: \"less than\",\n less_than_or_equal: \"less than or equal\",\n not_equals: \"does not equal\",\n not_in: \"is none of\",\n starts_with: \"starts with\",\n}\n\n/**\n * Generate a unique ID for rules and groups\n */\nfunction generateId(): string {\n return Math.random().toString(36).slice(2, 11)\n}\n\n/**\n * Create an empty rule\n */\nfunction createEmptyRule(): FilterRule {\n return {\n field: \"\",\n id: generateId(),\n operator: \"\",\n value: \"\",\n }\n}\n\n/**\n * Create an empty group\n */\nfunction createEmptyGroup(): FilterGroup {\n return {\n combinator: \"and\",\n id: generateId(),\n rules: [],\n }\n}\n\n/**\n * Get operators for a field\n */\nfunction getOperatorsForField(\n field: FieldDefinition | undefined\n): OperatorInfo[] {\n if (!field) return []\n\n const operators = field.operators ?? DEFAULT_OPERATORS_BY_TYPE[field.type]\n return operators.map((op) => ({\n label: OPERATOR_LABELS[op],\n value: op,\n }))\n}\n\n/**\n * Count total rules in a filter group (including nested)\n */\nfunction countRules(group: FilterGroup): number {\n return group.rules.reduce((count, item) => {\n if (isFilterGroup(item)) {\n return count + countRules(item)\n }\n return count + 1\n }, 0)\n}\n\n/**\n * Get size for input components\n */\nfunction getInputSize(size: \"default\" | \"lg\" | \"sm\"): \"lg\" | \"md\" | \"sm\" {\n if (size === \"lg\") return \"lg\"\n if (size === \"sm\") return \"sm\"\n return \"md\"\n}\n\n// ============================================\n// CONTEXT\n// ============================================\n\ninterface FilterBuilderContextValue {\n fields: FieldDefinition[]\n size: \"default\" | \"lg\" | \"sm\"\n}\n\nconst FilterBuilderContext = React.createContext<FilterBuilderContextValue>({\n fields: [],\n size: \"default\",\n})\n\nfunction useFilterBuilderContext() {\n return React.use(FilterBuilderContext)\n}\n\n// ============================================\n// VALUE INPUT COMPONENT (extracted to reduce complexity)\n// ============================================\n\ninterface ValueInputProps {\n needsSecondValue: boolean\n onChange: (value: string) => void\n selectedField: FieldDefinition | undefined\n size: \"default\" | \"lg\" | \"sm\"\n value: unknown\n}\n\nfunction ValueInput({\n needsSecondValue,\n onChange,\n selectedField,\n size,\n value,\n}: ValueInputProps) {\n const inputSize = getInputSize(size)\n\n // Select field type\n if (selectedField?.type === \"select\" && selectedField.options) {\n return (\n <Select\n value={value as string}\n onValueChange={onChange}\n >\n <SelectTrigger\n aria-label=\"Select value\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n <SelectContent>\n {selectedField.options.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n }\n\n // Boolean field type\n if (selectedField?.type === \"boolean\") {\n return (\n <Select\n value={String(value)}\n onValueChange={onChange}\n >\n <SelectTrigger\n aria-label=\"Select value\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">True</SelectItem>\n <SelectItem value=\"false\">False</SelectItem>\n </SelectContent>\n </Select>\n )\n }\n\n // Between operator (two inputs)\n if (needsSecondValue) {\n const rawArray = Array.isArray(value) ? value : [\"\", \"\"]\n const fromValue = String(rawArray[0] ?? \"\")\n const toValue = String(rawArray[1] ?? \"\")\n return (\n <div className=\"flex items-center gap-2\">\n <TextInput\n aria-label=\"From value\"\n placeholder=\"From\"\n size={inputSize}\n type={selectedField?.type === \"number\" ? \"number\" : \"text\"}\n value={fromValue}\n onChange={(e) =>\n { onChange(JSON.stringify([e.target.value, toValue])); }\n }\n />\n <span className=\"text-sm text-muted-foreground\">and</span>\n <TextInput\n aria-label=\"To value\"\n placeholder=\"To\"\n size={inputSize}\n type={selectedField?.type === \"number\" ? \"number\" : \"text\"}\n value={toValue}\n onChange={(e) =>\n { onChange(JSON.stringify([fromValue, e.target.value])); }\n }\n />\n </div>\n )\n }\n\n // Default text/number/date input\n const inputType =\n selectedField?.type === \"number\"\n ? \"number\"\n : selectedField?.type === \"date\"\n ? \"date\"\n : \"text\"\n\n return (\n <TextInput\n aria-label=\"Filter value\"\n placeholder=\"Enter value\"\n size={inputSize}\n type={inputType}\n value={value as string}\n onChange={(e) => { onChange(e.target.value); }}\n />\n )\n}\n\n// ============================================\n// FILTER RULE COMPONENT\n// ============================================\n\nfunction FilterRuleComponent({\n fields,\n onChange,\n onRemove,\n rule,\n}: FilterRuleProps) {\n const { size } = useFilterBuilderContext()\n\n const selectedField = fields.find((f) => f.name === rule.field)\n const operators = getOperatorsForField(selectedField)\n const isInvalid = Boolean(rule.field && !rule.operator)\n const inputSize = getInputSize(size)\n\n const handleFieldChange = (fieldName: string) => {\n const newField = fields.find((f) => f.name === fieldName)\n const newOperators = getOperatorsForField(newField)\n\n onChange({\n ...rule,\n field: fieldName,\n operator: newOperators[0]?.value ?? \"\",\n value: \"\",\n })\n }\n\n const handleOperatorChange = (operator: string) => {\n onChange({\n ...rule,\n operator: operator as OperatorType,\n value: [\"is_empty\", \"is_not_empty\"].includes(operator) ? \"\" : rule.value,\n })\n }\n\n const handleValueChange = (value: string) => {\n onChange({ ...rule, value })\n }\n\n const needsValue = rule.operator && ![\"is_empty\", \"is_not_empty\"].includes(rule.operator)\n const needsSecondValue = rule.operator === \"between\"\n\n return (\n <div\n aria-label={`Filter rule: ${selectedField?.label ?? \"Select field\"}`}\n className={cn(filterRuleVariants({ invalid: isInvalid, size }))}\n data-slot=\"filter-rule\"\n role=\"group\"\n >\n {/* Field Select */}\n <div className={cn(ruleFieldVariants({ size }))}>\n <Select\n value={rule.field}\n onValueChange={handleFieldChange}\n >\n <SelectTrigger\n aria-label=\"Select field\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Select field\" />\n </SelectTrigger>\n <SelectContent>\n {fields.map((field) => (\n <SelectItem key={field.name} value={field.name}>\n {field.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {/* Operator Select */}\n {rule.field && (\n <div className={cn(ruleOperatorVariants({ size }))}>\n <Select\n value={rule.operator}\n onValueChange={handleOperatorChange}\n >\n <SelectTrigger\n aria-label=\"Select operator\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Operator\" />\n </SelectTrigger>\n <SelectContent>\n {operators.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {/* Value Input */}\n {needsValue && (\n <div className={cn(ruleValueVariants({ size }))}>\n <ValueInput\n needsSecondValue={needsSecondValue}\n selectedField={selectedField}\n size={size}\n value={rule.value}\n onChange={handleValueChange}\n />\n </div>\n )}\n\n {/* Remove Button */}\n <Button\n aria-label=\"Remove rule\"\n className=\"flex-shrink-0 text-muted-foreground hover:text-destructive\"\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onRemove}\n >\n <XIcon className=\"size-4\" />\n </Button>\n </div>\n )\n}\n\n// ============================================\n// FILTER GROUP COMPONENT\n// ============================================\n\nfunction FilterGroupComponent({\n depth,\n fields,\n group,\n isRoot = false,\n maxDepth,\n maxRules,\n onChange,\n onRemove,\n rulesCount,\n}: FilterGroupProps) {\n const { size } = useFilterBuilderContext()\n\n const handleCombinatorChange = (combinator: \"and\" | \"or\") => {\n onChange({ ...group, combinator })\n }\n\n const handleAddRule = () => {\n if (rulesCount >= maxRules) return\n onChange({ ...group, rules: [...group.rules, createEmptyRule()] })\n }\n\n const handleAddGroup = () => {\n if (depth >= maxDepth || rulesCount >= maxRules) return\n onChange({ ...group, rules: [...group.rules, createEmptyGroup()] })\n }\n\n const handleRuleChange = (index: number, updatedItem: FilterGroup | FilterRule) => {\n const newRules = [...group.rules]\n newRules[index] = updatedItem\n onChange({ ...group, rules: newRules })\n }\n\n const handleRemoveItem = (index: number) => {\n onChange({ ...group, rules: group.rules.filter((_, i) => i !== index) })\n }\n\n const canAddRule = rulesCount < maxRules\n const canAddGroup = depth < maxDepth && rulesCount < maxRules\n const buttonSize = size === \"lg\" ? \"default\" : \"sm\"\n\n return (\n <div\n aria-label={`Filter group with ${group.combinator.toUpperCase()} combinator`}\n className={cn(filterGroupVariants({ isRoot, size }))}\n data-slot=\"filter-group\"\n role=\"group\"\n >\n {/* Group Header - Combinator Toggle */}\n {!isRoot && (\n <div className={cn(filterGroupHeaderVariants({ size }))}>\n <div className=\"flex items-center gap-1\">\n <button\n className={cn(\n combinatorToggleVariants({\n active: group.combinator === \"and\",\n size,\n })\n )}\n aria-pressed={group.combinator === \"and\"}\n type=\"button\"\n onClick={() => { handleCombinatorChange(\"and\"); }}\n >\n AND\n </button>\n <button\n className={cn(\n combinatorToggleVariants({\n active: group.combinator === \"or\",\n size,\n })\n )}\n aria-pressed={group.combinator === \"or\"}\n type=\"button\"\n onClick={() => { handleCombinatorChange(\"or\"); }}\n >\n OR\n </button>\n </div>\n\n {onRemove && (\n <Button\n aria-label=\"Remove group\"\n className=\"ml-auto text-muted-foreground hover:text-destructive\"\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onRemove}\n >\n <TrashIcon className=\"size-4\" />\n </Button>\n )}\n </div>\n )}\n\n {/* Rules Container */}\n <div className={cn(rulesContainerVariants({ size }))}>\n {group.rules.length === 0 ? (\n <div className={cn(emptyStateVariants({ size }))}>\n <span>No filters added</span>\n <span className=\"text-xs\">Click &quot;Add Rule&quot; to create a filter</span>\n </div>\n ) : (\n group.rules.map((item, index) => (\n <React.Fragment key={item.id}>\n {/* Combinator Label between rules (not for first item) */}\n {index > 0 && (\n <div className=\"flex items-center gap-2 pl-2\">\n <span className=\"text-xs font-medium uppercase text-muted-foreground\">\n {group.combinator}\n </span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )}\n\n {isFilterGroup(item) ? (\n <FilterGroupComponent\n depth={depth + 1}\n fields={fields}\n group={item}\n maxDepth={maxDepth}\n maxRules={maxRules}\n rulesCount={rulesCount}\n onChange={(updated) => { handleRuleChange(index, updated); }}\n onRemove={() => { handleRemoveItem(index); }}\n />\n ) : (\n <FilterRuleComponent\n fields={fields}\n rule={item}\n onChange={(updated) => { handleRuleChange(index, updated); }}\n onRemove={() => { handleRemoveItem(index); }}\n />\n )}\n </React.Fragment>\n ))\n )}\n </div>\n\n {/* Add Buttons */}\n <div className=\"mt-2 flex items-center gap-2\">\n <Button\n className=\"gap-1\"\n disabled={!canAddRule}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={handleAddRule}\n >\n <PlusIcon className=\"size-3\" />\n Add Rule\n </Button>\n\n {!isRoot && (\n <Button\n className=\"gap-1\"\n disabled={!canAddGroup}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={handleAddGroup}\n >\n <PlusIcon className=\"size-3\" />\n Add Group\n </Button>\n )}\n </div>\n </div>\n )\n}\n\n// ============================================\n// FILTER TOOLBAR COMPONENT\n// ============================================\n\nfunction FilterToolbar({\n canAddGroup,\n canAddRule,\n hasRules,\n onAddGroup,\n onAddRule,\n onApply,\n onClear,\n}: FilterToolbarProps) {\n const { size } = useFilterBuilderContext()\n const buttonSize = size === \"lg\" ? \"default\" : \"sm\"\n\n return (\n <div\n className={cn(filterToolbarVariants({ size }))}\n data-slot=\"filter-toolbar\"\n >\n <div className=\"flex items-center gap-2\">\n <Button\n className=\"gap-1\"\n disabled={!canAddRule}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={onAddRule}\n >\n <PlusIcon className=\"size-3\" />\n Add Rule\n </Button>\n\n <Button\n className=\"gap-1\"\n disabled={!canAddGroup}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={onAddGroup}\n >\n <PlusIcon className=\"size-3\" />\n Add Group\n </Button>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {onClear && hasRules && (\n <Button\n size={buttonSize}\n type=\"button\"\n variant=\"ghost\"\n onClick={onClear}\n >\n Clear All\n </Button>\n )}\n\n {onApply && (\n <Button\n size={buttonSize}\n type=\"button\"\n variant=\"default\"\n onClick={onApply}\n >\n Apply Filters\n </Button>\n )}\n </div>\n </div>\n )\n}\n\n// ============================================\n// FILTER PREVIEW COMPONENT\n// ============================================\n\nfunction FilterPreview({ fields, filter }: FilterPreviewProps) {\n const { size } = useFilterBuilderContext()\n\n const getFieldLabel = (fieldName: string): string => {\n const field = fields.find((f) => f.name === fieldName)\n return field?.label ?? fieldName\n }\n\n const formatValue = (value: unknown): string => {\n if (Array.isArray(value)) {\n return value.join(\" and \")\n }\n return String(value)\n }\n\n const renderRule = (rule: FilterRule): string => {\n if (!rule.field || !rule.operator) return \"\"\n\n const fieldLabel = getFieldLabel(rule.field)\n // After the check above, rule.operator is guaranteed to be a valid OperatorType\n const operatorLabel = OPERATOR_LABELS[rule.operator]\n\n if ([\"is_empty\", \"is_not_empty\"].includes(rule.operator)) {\n return `${fieldLabel} ${operatorLabel}`\n }\n\n return `${fieldLabel} ${operatorLabel} \"${formatValue(rule.value)}\"`\n }\n\n const renderGroup = (group: FilterGroup): string => {\n const parts = group.rules\n .map((item) => {\n if (isFilterGroup(item)) {\n return `(${renderGroup(item)})`\n }\n return renderRule(item)\n })\n .filter(Boolean)\n\n return parts.join(` ${group.combinator.toUpperCase()} `)\n }\n\n const preview = renderGroup(filter)\n\n if (!preview) {\n return (\n <div\n className={cn(filterPreviewVariants({ size }), \"italic text-muted-foreground\")}\n data-slot=\"filter-preview\"\n >\n No filters defined\n </div>\n )\n }\n\n return (\n <div\n className={cn(filterPreviewVariants({ size }))}\n data-slot=\"filter-preview\"\n >\n <code>{preview}</code>\n </div>\n )\n}\n\n// ============================================\n// MAIN FILTER BUILDER COMPONENT\n// ============================================\n\n/**\n * FilterBuilder - Advanced visual query builder component\n *\n * Allows creating complex filters with multiple conditions,\n * logical operators (AND/OR), nested groups, and various field types.\n *\n * @example\n * ```tsx\n * const fields = [\n * { name: \"name\", label: \"Name\", type: \"string\" },\n * { name: \"age\", label: \"Age\", type: \"number\" },\n * { name: \"status\", label: \"Status\", type: \"select\", options: [\n * { value: \"active\", label: \"Active\" },\n * { value: \"inactive\", label: \"Inactive\" },\n * ]},\n * ]\n *\n * <FilterBuilder\n * fields={fields}\n * value={filter}\n * onChange={setFilter}\n * onApply={(f) => console.log(\"Apply:\", f)}\n * />\n * ```\n */\nfunction FilterBuilder({\n className,\n fields,\n maxDepth = 3,\n maxRules = 20,\n onApply,\n onChange,\n onClear,\n showPreview = false,\n size = \"default\",\n value,\n ...props\n}: FilterBuilderProps) {\n const filter = value ?? createEmptyGroup()\n\n const handleChange = (updatedFilter: FilterGroup) => {\n onChange?.(updatedFilter)\n }\n\n const handleAddRule = () => {\n const rulesCount = countRules(filter)\n if (rulesCount >= maxRules) return\n handleChange({ ...filter, rules: [...filter.rules, createEmptyRule()] })\n }\n\n const handleAddGroup = () => {\n const rulesCount = countRules(filter)\n if (rulesCount >= maxRules) return\n handleChange({ ...filter, rules: [...filter.rules, createEmptyGroup()] })\n }\n\n const handleClear = () => {\n handleChange(createEmptyGroup())\n onClear?.()\n }\n\n const handleApply = () => {\n onApply?.(filter)\n }\n\n const rulesCount = countRules(filter)\n const hasRules = rulesCount > 0\n const canAddRule = rulesCount < maxRules\n const canAddGroup = rulesCount < maxRules\n\n return (\n <FilterBuilderContext value={{ fields, size: size ?? \"default\" }}>\n <div\n aria-label=\"Filter builder\"\n className={cn(filterBuilderVariants({ size }), className)}\n data-slot=\"filter-builder\"\n role=\"region\"\n {...props}\n >\n {/* Main Filter Group */}\n <FilterGroupComponent\n isRoot\n depth={0}\n fields={fields}\n group={filter}\n maxDepth={maxDepth}\n maxRules={maxRules}\n rulesCount={rulesCount}\n onChange={handleChange}\n />\n\n {/* Toolbar */}\n <FilterToolbar\n canAddGroup={canAddGroup}\n canAddRule={canAddRule}\n hasRules={hasRules}\n onAddGroup={handleAddGroup}\n onAddRule={handleAddRule}\n onApply={onApply ? handleApply : undefined}\n onClear={onClear ? handleClear : undefined}\n />\n\n {/* Preview */}\n {showPreview && (\n <FilterPreview fields={fields} filter={filter} />\n )}\n </div>\n </FilterBuilderContext>\n )\n}\n\nFilterBuilder.displayName = \"FilterBuilder\"\n\n// ============================================\n// EXPORTS\n// ============================================\n\nexport {\n FilterBuilder,\n type FilterBuilderProps,\n FilterGroupComponent as FilterGroup,\n type FilterGroupProps,\n FilterPreview,\n type FilterPreviewProps,\n FilterRuleComponent as FilterRule,\n type FilterRuleProps,\n FilterToolbar,\n type FilterToolbarProps,\n}\n"]}
1
+ {"version":3,"sources":["../src/components/advanced/FilterBuilder/FilterBuilder.types.ts","../src/components/advanced/FilterBuilder/FilterBuilder.variants.ts","../src/components/advanced/FilterBuilder/FilterBuilder.tsx"],"names":["rulesCount"],"mappings":"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","file":"chunk-HV2ZZXFN.js","sourcesContent":["// FilterBuilder/FilterBuilder.types.ts\n\nimport type { filterBuilderVariants } from \"./FilterBuilder.variants\"\nimport type { VariantProps } from \"class-variance-authority\"\n\n// ============================================\n// OPERATOR TYPES\n// ============================================\n\n/**\n * Available operator types for filter rules\n */\nexport type OperatorType =\n | \"between\"\n | \"contains\"\n | \"ends_with\"\n | \"equals\"\n | \"greater_than\"\n | \"greater_than_or_equal\"\n | \"in\"\n | \"is_empty\"\n | \"is_not_empty\"\n | \"less_than\"\n | \"less_than_or_equal\"\n | \"not_equals\"\n | \"not_in\"\n | \"starts_with\"\n\n/**\n * Field types that determine available operators\n */\nexport type FieldType = \"boolean\" | \"date\" | \"number\" | \"select\" | \"string\"\n\n// ============================================\n// DATA STRUCTURES\n// ============================================\n\n/**\n * Option for select-type fields\n */\nexport interface FieldOption {\n /** Display label */\n label: string\n /** Option value */\n value: string\n}\n\n/**\n * Field definition for available filter fields\n */\nexport interface FieldDefinition {\n /** Display label */\n label: string\n /** Unique field identifier */\n name: string\n /** Override default operators for this field */\n operators?: OperatorType[]\n /** Options for select-type fields */\n options?: FieldOption[]\n /** Field data type */\n type: FieldType\n}\n\n/**\n * Individual filter rule\n */\nexport interface FilterRule {\n /** Field name to filter */\n field: string\n /** Unique rule identifier */\n id: string\n /** Operator to apply */\n operator: \"\" | OperatorType\n /** Filter value(s) */\n value: unknown\n}\n\n/**\n * Group of rules with logical combinator\n */\nexport interface FilterGroup {\n /** Logical combinator (and/or) */\n combinator: \"and\" | \"or\"\n /** Unique group identifier */\n id: string\n /** Rules and/or nested groups */\n rules: (FilterGroup | FilterRule)[]\n}\n\n// ============================================\n// EVENT PAYLOADS\n// ============================================\n\n/**\n * Event payload for filter changes\n */\nexport interface FilterBuilderEventPayload {\n /** The updated filter structure */\n filter: FilterGroup\n /** Timestamp of the event */\n timestamp: number\n}\n\n/**\n * Event payload for rule changes\n */\nexport interface FilterRuleEventPayload {\n /** Path to the rule in the filter structure */\n path: string[]\n /** The rule that changed */\n rule: FilterRule\n /** Timestamp of the event */\n timestamp: number\n}\n\n// ============================================\n// COMPONENT PROPS\n// ============================================\n\n/**\n * Props for the FilterBuilder root component\n */\nexport interface FilterBuilderProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\">,\n VariantProps<typeof filterBuilderVariants> {\n /** Additional CSS classes */\n className?: string\n /** Available fields for filtering */\n fields: FieldDefinition[]\n /** Maximum nesting depth for groups */\n maxDepth?: number\n /** Maximum number of rules allowed */\n maxRules?: number\n /** Callback when filters are applied */\n onApply?: (filter: FilterGroup) => void\n /** Callback when filter changes */\n onChange?: (filter: FilterGroup) => void\n /** Callback when filters are cleared */\n onClear?: () => void\n /** Show preview of the resulting query */\n showPreview?: boolean\n /** Current filter value (controlled) */\n value?: FilterGroup\n}\n\n/**\n * Props for FilterGroup component\n */\nexport interface FilterGroupProps {\n /** Current nesting depth */\n depth: number\n /** Available fields */\n fields: FieldDefinition[]\n /** The group data */\n group: FilterGroup\n /** Whether this is the root group */\n isRoot?: boolean\n /** Maximum nesting depth */\n maxDepth: number\n /** Maximum number of rules */\n maxRules: number\n /** Callback when group changes */\n onChange: (group: FilterGroup) => void\n /** Callback when group is removed */\n onRemove?: () => void\n /** Current total rules count */\n rulesCount: number\n}\n\n/**\n * Props for FilterRule component\n */\nexport interface FilterRuleProps {\n /** Available fields */\n fields: FieldDefinition[]\n /** Callback when rule changes */\n onChange: (rule: FilterRule) => void\n /** Callback when rule is removed */\n onRemove: () => void\n /** The rule data */\n rule: FilterRule\n}\n\n/**\n * Props for FilterToolbar component\n */\nexport interface FilterToolbarProps {\n /** Whether adding groups is disabled (max depth reached) */\n canAddGroup: boolean\n /** Whether adding rules is disabled (max reached) */\n canAddRule: boolean\n /** Whether there are rules to clear */\n hasRules: boolean\n /** Callback to add a new group */\n onAddGroup: () => void\n /** Callback to add a new rule */\n onAddRule: () => void\n /** Callback to apply filters */\n onApply?: () => void\n /** Callback to clear all rules */\n onClear?: () => void\n}\n\n/**\n * Props for FilterPreview component\n */\nexport interface FilterPreviewProps {\n /** Available fields (for label lookup) */\n fields: FieldDefinition[]\n /** The filter to preview */\n filter: FilterGroup\n}\n\n// ============================================\n// UTILITY TYPES\n// ============================================\n\n/**\n * Default operators by field type\n */\nexport type OperatorsByType = Record<FieldType, OperatorType[]>\n\n/**\n * Operator display info\n */\nexport interface OperatorInfo {\n /** Display label */\n label: string\n /** Operator value */\n value: OperatorType\n}\n\n/**\n * Check if an item is a FilterGroup\n */\nexport function isFilterGroup(\n item: FilterGroup | FilterRule\n): item is FilterGroup {\n return \"combinator\" in item && \"rules\" in item\n}\n\n/**\n * Check if an item is a FilterRule\n */\nexport function isFilterRule(\n item: FilterGroup | FilterRule\n): item is FilterRule {\n return \"field\" in item && \"operator\" in item\n}\n","// FilterBuilder/FilterBuilder.variants.ts\n\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\n// Common style constants\nconst ROUNDED_MD = \"rounded-md\"\n\n/**\n * FilterBuilder root container variants\n */\nexport const filterBuilderVariants = cva(\n [\n \"w-full\",\n \"rounded-lg\",\n \"border border-border\",\n \"bg-background\",\n ],\n {\n variants: {\n size: {\n sm: \"p-3 text-sm\",\n default: \"p-4 text-sm\",\n lg: \"p-6 text-base\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * FilterGroup container variants\n */\nexport const filterGroupVariants = cva(\n [\n \"relative\",\n ROUNDED_MD,\n \"border border-border\",\n \"bg-muted/30\",\n ],\n {\n variants: {\n size: {\n sm: \"p-2 gap-2\",\n default: \"p-4 gap-3\",\n lg: \"p-5 gap-4\",\n },\n isRoot: {\n true: \"border-0 bg-transparent p-0\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n isRoot: false,\n },\n }\n)\n\n/**\n * FilterGroup header (combinator toggle) variants\n */\nexport const filterGroupHeaderVariants = cva(\n [\n \"flex items-center\",\n \"font-medium\",\n ],\n {\n variants: {\n size: {\n sm: \"gap-1.5 text-xs mb-2\",\n default: \"gap-2 text-sm mb-3\",\n lg: \"gap-3 text-base mb-4\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Combinator toggle button variants\n */\nexport const combinatorToggleVariants = cva(\n [\n \"inline-flex items-center justify-center\",\n ROUNDED_MD,\n \"font-semibold uppercase tracking-wide\",\n \"transition-colors duration-200\",\n \"cursor-pointer\",\n \"select-none\",\n ],\n {\n variants: {\n size: {\n sm: \"px-2 py-0.5 text-xs min-w-9\",\n default: \"px-2.5 py-1 text-xs min-w-11\",\n lg: \"px-3 py-1.5 text-sm min-w-14\",\n },\n active: {\n true: \"bg-primary text-primary-foreground\",\n false: \"bg-muted text-muted-foreground hover:bg-muted/80\",\n },\n },\n defaultVariants: {\n size: \"default\",\n active: false,\n },\n }\n)\n\n/**\n * FilterRule container variants\n */\nexport const filterRuleVariants = cva(\n [\n \"flex items-start\",\n ROUNDED_MD,\n \"bg-background\",\n \"border border-border\",\n \"transition-all duration-200\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-1\",\n ],\n {\n variants: {\n size: {\n sm: \"p-2 gap-1.5\",\n default: \"p-3 gap-2\",\n lg: \"p-4 gap-3\",\n },\n invalid: {\n true: \"border-destructive\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n invalid: false,\n },\n }\n)\n\n/**\n * Rule field select variants\n */\nexport const ruleFieldVariants = cva(\n [\n \"flex-shrink-0\",\n ],\n {\n variants: {\n size: {\n sm: \"w-32\",\n default: \"w-40\",\n lg: \"w-52\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Rule operator select variants\n */\nexport const ruleOperatorVariants = cva(\n [\n \"flex-shrink-0\",\n ],\n {\n variants: {\n size: {\n sm: \"w-24\",\n default: \"w-36\",\n lg: \"w-44\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Rule value input variants\n */\nexport const ruleValueVariants = cva(\n [\n \"flex-1 min-w-0\",\n ],\n {\n variants: {\n size: {\n sm: \"\",\n default: \"\",\n lg: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Rules container variants\n */\nexport const rulesContainerVariants = cva(\n [\n \"flex flex-col\",\n ],\n {\n variants: {\n size: {\n sm: \"gap-2\",\n default: \"gap-3\",\n lg: \"gap-4\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * FilterToolbar variants\n */\nexport const filterToolbarVariants = cva(\n [\n \"flex items-center justify-between\",\n \"pt-3 mt-3\",\n \"border-t border-border\",\n ],\n {\n variants: {\n size: {\n sm: \"gap-2\",\n default: \"gap-3\",\n lg: \"gap-4\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * FilterPreview variants\n */\nexport const filterPreviewVariants = cva(\n [\n ROUNDED_MD,\n \"bg-muted/50\",\n \"font-mono\",\n \"overflow-x-auto\",\n ],\n {\n variants: {\n size: {\n sm: \"p-2 text-xs mt-3\",\n default: \"p-3 text-xs mt-4\",\n lg: \"p-4 text-sm mt-5\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Empty state variants\n */\nexport const emptyStateVariants = cva(\n [\n \"flex flex-col items-center justify-center\",\n \"text-muted-foreground\",\n \"border border-dashed border-border\",\n ROUNDED_MD,\n ],\n {\n variants: {\n size: {\n sm: \"py-4 px-3 text-xs gap-1\",\n default: \"py-6 px-4 text-sm gap-2\",\n lg: \"py-8 px-6 text-base gap-3\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n// ============================================\n// VARIANT PROP TYPES\n// ============================================\n\nexport type FilterBuilderVariantProps = VariantProps<typeof filterBuilderVariants>\nexport type FilterGroupVariantProps = VariantProps<typeof filterGroupVariants>\nexport type FilterRuleVariantProps = VariantProps<typeof filterRuleVariants>\nexport type CombinatorToggleVariantProps = VariantProps<typeof combinatorToggleVariants>\n","// FilterBuilder/FilterBuilder.tsx\n\"use client\"\n\nimport type {\n FieldDefinition,\n FilterBuilderProps,\n FilterGroup,\n FilterGroupProps,\n FilterPreviewProps,\n FilterRule,\n FilterRuleProps,\n FilterToolbarProps,\n OperatorInfo,\n OperatorsByType,\n OperatorType,\n} from \"./FilterBuilder.types\"\n\nimport { PlusIcon, TrashIcon, XIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../forms/Select\"\nimport { TextInput } from \"../../forms/TextInput\"\nimport { Button } from \"../../primitives/Button\"\nimport { isFilterGroup } from \"./FilterBuilder.types\"\nimport {\n combinatorToggleVariants,\n emptyStateVariants,\n filterBuilderVariants,\n filterGroupHeaderVariants,\n filterGroupVariants,\n filterPreviewVariants,\n filterRuleVariants,\n filterToolbarVariants,\n ruleFieldVariants,\n ruleOperatorVariants,\n rulesContainerVariants,\n ruleValueVariants,\n} from \"./FilterBuilder.variants\"\n\n// ============================================\n// CONSTANTS\n// ============================================\n\n/**\n * Default operators available for each field type\n */\nconst DEFAULT_OPERATORS_BY_TYPE: OperatorsByType = {\n boolean: [\"equals\", \"not_equals\"],\n date: [\n \"equals\",\n \"not_equals\",\n \"greater_than\",\n \"less_than\",\n \"between\",\n ],\n number: [\n \"equals\",\n \"not_equals\",\n \"greater_than\",\n \"greater_than_or_equal\",\n \"less_than\",\n \"less_than_or_equal\",\n \"between\",\n ],\n select: [\"equals\", \"not_equals\", \"in\", \"not_in\"],\n string: [\n \"equals\",\n \"not_equals\",\n \"contains\",\n \"starts_with\",\n \"ends_with\",\n \"is_empty\",\n \"is_not_empty\",\n ],\n}\n\n/**\n * Operator display labels\n */\nconst OPERATOR_LABELS: Record<OperatorType, string> = {\n between: \"between\",\n contains: \"contains\",\n ends_with: \"ends with\",\n equals: \"equals\",\n greater_than: \"greater than\",\n greater_than_or_equal: \"greater than or equal\",\n in: \"is any of\",\n is_empty: \"is empty\",\n is_not_empty: \"is not empty\",\n less_than: \"less than\",\n less_than_or_equal: \"less than or equal\",\n not_equals: \"does not equal\",\n not_in: \"is none of\",\n starts_with: \"starts with\",\n}\n\n/**\n * Generate a unique ID for rules and groups\n */\nfunction generateId(): string {\n return Math.random().toString(36).slice(2, 11)\n}\n\n/**\n * Create an empty rule\n */\nfunction createEmptyRule(): FilterRule {\n return {\n field: \"\",\n id: generateId(),\n operator: \"\",\n value: \"\",\n }\n}\n\n/**\n * Create an empty group\n */\nfunction createEmptyGroup(): FilterGroup {\n return {\n combinator: \"and\",\n id: generateId(),\n rules: [],\n }\n}\n\n/**\n * Get operators for a field\n */\nfunction getOperatorsForField(\n field: FieldDefinition | undefined\n): OperatorInfo[] {\n if (!field) return []\n\n const operators = field.operators ?? DEFAULT_OPERATORS_BY_TYPE[field.type]\n return operators.map((op) => ({\n label: OPERATOR_LABELS[op],\n value: op,\n }))\n}\n\n/**\n * Count total rules in a filter group (including nested)\n */\nfunction countRules(group: FilterGroup): number {\n return group.rules.reduce((count, item) => {\n if (isFilterGroup(item)) {\n return count + countRules(item)\n }\n return count + 1\n }, 0)\n}\n\n/**\n * Get size for input components\n */\nfunction getInputSize(size: \"default\" | \"lg\" | \"sm\"): \"lg\" | \"md\" | \"sm\" {\n if (size === \"lg\") return \"lg\"\n if (size === \"sm\") return \"sm\"\n return \"md\"\n}\n\n// ============================================\n// CONTEXT\n// ============================================\n\ninterface FilterBuilderContextValue {\n fields: FieldDefinition[]\n size: \"default\" | \"lg\" | \"sm\"\n}\n\nconst FilterBuilderContext = React.createContext<FilterBuilderContextValue>({\n fields: [],\n size: \"default\",\n})\n\nfunction useFilterBuilderContext() {\n return React.use(FilterBuilderContext)\n}\n\n// ============================================\n// VALUE INPUT COMPONENT (extracted to reduce complexity)\n// ============================================\n\ninterface ValueInputProps {\n needsSecondValue: boolean\n onChange: (value: string) => void\n selectedField: FieldDefinition | undefined\n size: \"default\" | \"lg\" | \"sm\"\n value: unknown\n}\n\nfunction ValueInput({\n needsSecondValue,\n onChange,\n selectedField,\n size,\n value,\n}: ValueInputProps) {\n const inputSize = getInputSize(size)\n\n // Select field type\n if (selectedField?.type === \"select\" && selectedField.options) {\n return (\n <Select\n value={value as string}\n onValueChange={onChange}\n >\n <SelectTrigger\n aria-label=\"Select value\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n <SelectContent>\n {selectedField.options.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n }\n\n // Boolean field type\n if (selectedField?.type === \"boolean\") {\n return (\n <Select\n value={String(value)}\n onValueChange={onChange}\n >\n <SelectTrigger\n aria-label=\"Select value\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">True</SelectItem>\n <SelectItem value=\"false\">False</SelectItem>\n </SelectContent>\n </Select>\n )\n }\n\n // Between operator (two inputs)\n if (needsSecondValue) {\n const rawArray = Array.isArray(value) ? value : [\"\", \"\"]\n const fromValue = String(rawArray[0] ?? \"\")\n const toValue = String(rawArray[1] ?? \"\")\n return (\n <div className=\"flex items-center gap-2\">\n <TextInput\n aria-label=\"From value\"\n placeholder=\"From\"\n size={inputSize}\n type={selectedField?.type === \"number\" ? \"number\" : \"text\"}\n value={fromValue}\n onChange={(e) =>\n { onChange(JSON.stringify([e.target.value, toValue])); }\n }\n />\n <span className=\"text-sm text-muted-foreground\">and</span>\n <TextInput\n aria-label=\"To value\"\n placeholder=\"To\"\n size={inputSize}\n type={selectedField?.type === \"number\" ? \"number\" : \"text\"}\n value={toValue}\n onChange={(e) =>\n { onChange(JSON.stringify([fromValue, e.target.value])); }\n }\n />\n </div>\n )\n }\n\n // Default text/number/date input\n const inputType =\n selectedField?.type === \"number\"\n ? \"number\"\n : selectedField?.type === \"date\"\n ? \"date\"\n : \"text\"\n\n return (\n <TextInput\n aria-label=\"Filter value\"\n placeholder=\"Enter value\"\n size={inputSize}\n type={inputType}\n value={value as string}\n onChange={(e) => { onChange(e.target.value); }}\n />\n )\n}\n\n// ============================================\n// FILTER RULE COMPONENT\n// ============================================\n\nfunction FilterRuleComponent({\n fields,\n onChange,\n onRemove,\n rule,\n}: FilterRuleProps) {\n const { size } = useFilterBuilderContext()\n\n const selectedField = fields.find((f) => f.name === rule.field)\n const operators = getOperatorsForField(selectedField)\n const isInvalid = Boolean(rule.field && !rule.operator)\n const inputSize = getInputSize(size)\n\n const handleFieldChange = (fieldName: string) => {\n const newField = fields.find((f) => f.name === fieldName)\n const newOperators = getOperatorsForField(newField)\n\n onChange({\n ...rule,\n field: fieldName,\n operator: newOperators[0]?.value ?? \"\",\n value: \"\",\n })\n }\n\n const handleOperatorChange = (operator: string) => {\n onChange({\n ...rule,\n operator: operator as OperatorType,\n value: [\"is_empty\", \"is_not_empty\"].includes(operator) ? \"\" : rule.value,\n })\n }\n\n const handleValueChange = (value: string) => {\n onChange({ ...rule, value })\n }\n\n const needsValue = rule.operator && ![\"is_empty\", \"is_not_empty\"].includes(rule.operator)\n const needsSecondValue = rule.operator === \"between\"\n\n return (\n <div\n aria-label={`Filter rule: ${selectedField?.label ?? \"Select field\"}`}\n className={cn(filterRuleVariants({ invalid: isInvalid, size }))}\n data-slot=\"filter-rule\"\n role=\"group\"\n >\n {/* Field Select */}\n <div className={cn(ruleFieldVariants({ size }))}>\n <Select\n value={rule.field}\n onValueChange={handleFieldChange}\n >\n <SelectTrigger\n aria-label=\"Select field\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Select field\" />\n </SelectTrigger>\n <SelectContent>\n {fields.map((field) => (\n <SelectItem key={field.name} value={field.name}>\n {field.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {/* Operator Select */}\n {rule.field && (\n <div className={cn(ruleOperatorVariants({ size }))}>\n <Select\n value={rule.operator}\n onValueChange={handleOperatorChange}\n >\n <SelectTrigger\n aria-label=\"Select operator\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Operator\" />\n </SelectTrigger>\n <SelectContent>\n {operators.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {/* Value Input */}\n {needsValue && (\n <div className={cn(ruleValueVariants({ size }))}>\n <ValueInput\n needsSecondValue={needsSecondValue}\n selectedField={selectedField}\n size={size}\n value={rule.value}\n onChange={handleValueChange}\n />\n </div>\n )}\n\n {/* Remove Button */}\n <Button\n aria-label=\"Remove rule\"\n className=\"flex-shrink-0 text-muted-foreground hover:text-destructive\"\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onRemove}\n >\n <XIcon className=\"size-4\" />\n </Button>\n </div>\n )\n}\n\n// ============================================\n// FILTER GROUP COMPONENT\n// ============================================\n\nfunction FilterGroupComponent({\n depth,\n fields,\n group,\n isRoot = false,\n maxDepth,\n maxRules,\n onChange,\n onRemove,\n rulesCount,\n}: FilterGroupProps) {\n const { size } = useFilterBuilderContext()\n\n const handleCombinatorChange = (combinator: \"and\" | \"or\") => {\n onChange({ ...group, combinator })\n }\n\n const handleAddRule = () => {\n if (rulesCount >= maxRules) return\n onChange({ ...group, rules: [...group.rules, createEmptyRule()] })\n }\n\n const handleAddGroup = () => {\n if (depth >= maxDepth || rulesCount >= maxRules) return\n onChange({ ...group, rules: [...group.rules, createEmptyGroup()] })\n }\n\n const handleRuleChange = (index: number, updatedItem: FilterGroup | FilterRule) => {\n const newRules = [...group.rules]\n newRules[index] = updatedItem\n onChange({ ...group, rules: newRules })\n }\n\n const handleRemoveItem = (index: number) => {\n onChange({ ...group, rules: group.rules.filter((_, i) => i !== index) })\n }\n\n const canAddRule = rulesCount < maxRules\n const canAddGroup = depth < maxDepth && rulesCount < maxRules\n const buttonSize = size === \"lg\" ? \"default\" : \"sm\"\n\n return (\n <div\n aria-label={`Filter group with ${group.combinator.toUpperCase()} combinator`}\n className={cn(filterGroupVariants({ isRoot, size }))}\n data-slot=\"filter-group\"\n role=\"group\"\n >\n {/* Group Header - Combinator Toggle */}\n {!isRoot && (\n <div className={cn(filterGroupHeaderVariants({ size }))}>\n <div className=\"flex items-center gap-1\">\n <button\n className={cn(\n combinatorToggleVariants({\n active: group.combinator === \"and\",\n size,\n })\n )}\n aria-pressed={group.combinator === \"and\"}\n type=\"button\"\n onClick={() => { handleCombinatorChange(\"and\"); }}\n >\n AND\n </button>\n <button\n className={cn(\n combinatorToggleVariants({\n active: group.combinator === \"or\",\n size,\n })\n )}\n aria-pressed={group.combinator === \"or\"}\n type=\"button\"\n onClick={() => { handleCombinatorChange(\"or\"); }}\n >\n OR\n </button>\n </div>\n\n {onRemove && (\n <Button\n aria-label=\"Remove group\"\n className=\"ml-auto text-muted-foreground hover:text-destructive\"\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onRemove}\n >\n <TrashIcon className=\"size-4\" />\n </Button>\n )}\n </div>\n )}\n\n {/* Rules Container */}\n <div className={cn(rulesContainerVariants({ size }))}>\n {group.rules.length === 0 ? (\n <div className={cn(emptyStateVariants({ size }))}>\n <span>No filters added</span>\n <span className=\"text-xs\">Click &quot;Add Rule&quot; to create a filter</span>\n </div>\n ) : (\n group.rules.map((item, index) => (\n <React.Fragment key={item.id}>\n {/* Combinator Label between rules (not for first item) */}\n {index > 0 && (\n <div className=\"flex items-center gap-2 pl-2\">\n <span className=\"text-xs font-medium uppercase text-muted-foreground\">\n {group.combinator}\n </span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )}\n\n {isFilterGroup(item) ? (\n <FilterGroupComponent\n depth={depth + 1}\n fields={fields}\n group={item}\n maxDepth={maxDepth}\n maxRules={maxRules}\n rulesCount={rulesCount}\n onChange={(updated) => { handleRuleChange(index, updated); }}\n onRemove={() => { handleRemoveItem(index); }}\n />\n ) : (\n <FilterRuleComponent\n fields={fields}\n rule={item}\n onChange={(updated) => { handleRuleChange(index, updated); }}\n onRemove={() => { handleRemoveItem(index); }}\n />\n )}\n </React.Fragment>\n ))\n )}\n </div>\n\n {/* Add Buttons */}\n <div className=\"mt-2 flex items-center gap-2\">\n <Button\n className=\"gap-1\"\n disabled={!canAddRule}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={handleAddRule}\n >\n <PlusIcon className=\"size-3\" />\n Add Rule\n </Button>\n\n {!isRoot && (\n <Button\n className=\"gap-1\"\n disabled={!canAddGroup}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={handleAddGroup}\n >\n <PlusIcon className=\"size-3\" />\n Add Group\n </Button>\n )}\n </div>\n </div>\n )\n}\n\n// ============================================\n// FILTER TOOLBAR COMPONENT\n// ============================================\n\nfunction FilterToolbar({\n canAddGroup,\n canAddRule,\n hasRules,\n onAddGroup,\n onAddRule,\n onApply,\n onClear,\n}: FilterToolbarProps) {\n const { size } = useFilterBuilderContext()\n const buttonSize = size === \"lg\" ? \"default\" : \"sm\"\n\n return (\n <div\n className={cn(filterToolbarVariants({ size }))}\n data-slot=\"filter-toolbar\"\n >\n <div className=\"flex items-center gap-2\">\n <Button\n className=\"gap-1\"\n disabled={!canAddRule}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={onAddRule}\n >\n <PlusIcon className=\"size-3\" />\n Add Rule\n </Button>\n\n <Button\n className=\"gap-1\"\n disabled={!canAddGroup}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={onAddGroup}\n >\n <PlusIcon className=\"size-3\" />\n Add Group\n </Button>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {onClear && hasRules && (\n <Button\n size={buttonSize}\n type=\"button\"\n variant=\"ghost\"\n onClick={onClear}\n >\n Clear All\n </Button>\n )}\n\n {onApply && (\n <Button\n size={buttonSize}\n type=\"button\"\n variant=\"default\"\n onClick={onApply}\n >\n Apply Filters\n </Button>\n )}\n </div>\n </div>\n )\n}\n\n// ============================================\n// FILTER PREVIEW COMPONENT\n// ============================================\n\nfunction FilterPreview({ fields, filter }: FilterPreviewProps) {\n const { size } = useFilterBuilderContext()\n\n const getFieldLabel = (fieldName: string): string => {\n const field = fields.find((f) => f.name === fieldName)\n return field?.label ?? fieldName\n }\n\n const formatValue = (value: unknown): string => {\n if (Array.isArray(value)) {\n return value.join(\" and \")\n }\n return String(value)\n }\n\n const renderRule = (rule: FilterRule): string => {\n if (!rule.field || !rule.operator) return \"\"\n\n const fieldLabel = getFieldLabel(rule.field)\n // After the check above, rule.operator is guaranteed to be a valid OperatorType\n const operatorLabel = OPERATOR_LABELS[rule.operator]\n\n if ([\"is_empty\", \"is_not_empty\"].includes(rule.operator)) {\n return `${fieldLabel} ${operatorLabel}`\n }\n\n return `${fieldLabel} ${operatorLabel} \"${formatValue(rule.value)}\"`\n }\n\n const renderGroup = (group: FilterGroup): string => {\n const parts = group.rules\n .map((item) => {\n if (isFilterGroup(item)) {\n return `(${renderGroup(item)})`\n }\n return renderRule(item)\n })\n .filter(Boolean)\n\n return parts.join(` ${group.combinator.toUpperCase()} `)\n }\n\n const preview = renderGroup(filter)\n\n if (!preview) {\n return (\n <div\n className={cn(filterPreviewVariants({ size }), \"italic text-muted-foreground\")}\n data-slot=\"filter-preview\"\n >\n No filters defined\n </div>\n )\n }\n\n return (\n <div\n className={cn(filterPreviewVariants({ size }))}\n data-slot=\"filter-preview\"\n >\n <code>{preview}</code>\n </div>\n )\n}\n\n// ============================================\n// MAIN FILTER BUILDER COMPONENT\n// ============================================\n\n/**\n * FilterBuilder - Advanced visual query builder component\n *\n * Allows creating complex filters with multiple conditions,\n * logical operators (AND/OR), nested groups, and various field types.\n *\n * @example\n * ```tsx\n * const fields = [\n * { name: \"name\", label: \"Name\", type: \"string\" },\n * { name: \"age\", label: \"Age\", type: \"number\" },\n * { name: \"status\", label: \"Status\", type: \"select\", options: [\n * { value: \"active\", label: \"Active\" },\n * { value: \"inactive\", label: \"Inactive\" },\n * ]},\n * ]\n *\n * <FilterBuilder\n * fields={fields}\n * value={filter}\n * onChange={setFilter}\n * onApply={(f) => console.log(\"Apply:\", f)}\n * />\n * ```\n */\nfunction FilterBuilder({\n className,\n fields,\n maxDepth = 3,\n maxRules = 20,\n onApply,\n onChange,\n onClear,\n showPreview = false,\n size = \"default\",\n value,\n ...props\n}: FilterBuilderProps) {\n const filter = value ?? createEmptyGroup()\n\n const handleChange = (updatedFilter: FilterGroup) => {\n onChange?.(updatedFilter)\n }\n\n const handleAddRule = () => {\n const rulesCount = countRules(filter)\n if (rulesCount >= maxRules) return\n handleChange({ ...filter, rules: [...filter.rules, createEmptyRule()] })\n }\n\n const handleAddGroup = () => {\n const rulesCount = countRules(filter)\n if (rulesCount >= maxRules) return\n handleChange({ ...filter, rules: [...filter.rules, createEmptyGroup()] })\n }\n\n const handleClear = () => {\n handleChange(createEmptyGroup())\n onClear?.()\n }\n\n const handleApply = () => {\n onApply?.(filter)\n }\n\n const rulesCount = countRules(filter)\n const hasRules = rulesCount > 0\n const canAddRule = rulesCount < maxRules\n const canAddGroup = rulesCount < maxRules\n\n return (\n <FilterBuilderContext value={{ fields, size: size ?? \"default\" }}>\n <div\n aria-label=\"Filter builder\"\n className={cn(filterBuilderVariants({ size }), className)}\n data-slot=\"filter-builder\"\n role=\"region\"\n {...props}\n >\n {/* Main Filter Group */}\n <FilterGroupComponent\n isRoot\n depth={0}\n fields={fields}\n group={filter}\n maxDepth={maxDepth}\n maxRules={maxRules}\n rulesCount={rulesCount}\n onChange={handleChange}\n />\n\n {/* Toolbar */}\n <FilterToolbar\n canAddGroup={canAddGroup}\n canAddRule={canAddRule}\n hasRules={hasRules}\n onAddGroup={handleAddGroup}\n onAddRule={handleAddRule}\n onApply={onApply ? handleApply : undefined}\n onClear={onClear ? handleClear : undefined}\n />\n\n {/* Preview */}\n {showPreview && (\n <FilterPreview fields={fields} filter={filter} />\n )}\n </div>\n </FilterBuilderContext>\n )\n}\n\nFilterBuilder.displayName = \"FilterBuilder\"\n\n// ============================================\n// EXPORTS\n// ============================================\n\nexport {\n FilterBuilder,\n type FilterBuilderProps,\n FilterGroupComponent as FilterGroup,\n type FilterGroupProps,\n FilterPreview,\n type FilterPreviewProps,\n FilterRuleComponent as FilterRule,\n type FilterRuleProps,\n FilterToolbar,\n type FilterToolbarProps,\n}\n"]}
@@ -111,7 +111,7 @@ function Card({
111
111
  "button",
112
112
  {
113
113
  className: cn(
114
- "absolute top-2 left-2 z-[2] grid place-items-center w-[18px] h-[18px] rounded-sm cursor-pointer transition-[opacity,background-color,border-color]",
114
+ "absolute top-2 left-2 z-[2] grid place-items-center size-[var(--card-select-size)] rounded-sm cursor-pointer transition-[opacity,background-color,border-color]",
115
115
  "border bg-white/[0.92] border-neutral-300",
116
116
  selected ? "opacity-100 bg-[color:var(--brand-primary-500,var(--primary))] border-[color:var(--brand-primary-500,var(--primary))] text-[color:var(--brand-primary-900,var(--primary-foreground))]" : "opacity-0 text-transparent group-hover/card:opacity-100"
117
117
  ),
@@ -140,7 +140,7 @@ function Card({
140
140
  "button",
141
141
  {
142
142
  className: cn(
143
- "absolute top-1.5 right-1.5 z-[2] grid place-items-center w-[22px] h-[22px] rounded-full cursor-pointer transition-opacity",
143
+ "absolute top-1.5 right-1.5 z-[2] grid place-items-center size-[var(--card-action-size)] rounded-full cursor-pointer transition-opacity",
144
144
  pinned ? "opacity-100 bg-white/95 text-[#eab308] dark:bg-black/55" : "opacity-0 bg-white/[0.82] text-neutral-500 dark:bg-black/45 dark:text-neutral-300 group-hover/card:opacity-100"
145
145
  ),
146
146
  "aria-label": selectableProps?.pinLabel ?? "Fixar",
@@ -254,5 +254,5 @@ function CardFooter({ className, ...props }) {
254
254
  }
255
255
 
256
256
  export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardMedia, CardTitle, cardActionVariants, cardContentVariants, cardDescriptionVariants, cardFooterVariants, cardHeaderVariants, cardMediaVariants, cardTitleVariants, cardVariants };
257
- //# sourceMappingURL=chunk-K45MMHLA.js.map
258
- //# sourceMappingURL=chunk-K45MMHLA.js.map
257
+ //# sourceMappingURL=chunk-HVFACGNK.js.map
258
+ //# sourceMappingURL=chunk-HVFACGNK.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/layout/Card/Card.variants.ts","../src/components/layout/Card/Card.tsx"],"names":[],"mappings":";;;;;;AAOO,IAAM,YAAA,GAAe,GAAA;AAAA,EAC1B;AAAA,IACE;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,gHAAA;AAAA,QACT,QAAA,EAAU,4KAAA;AAAA,QACV,QAAA,EAAU,gGAAA;AAAA,QACV,KAAA,EAAO,wCAAA;AAAA,QACP,UAAA,EAAY;AAAA,UACV,oDAAA;AAAA,UACA,gDAAA;AAAA,UACA,+EAAA;AAAA,UACA,8CAAA;AAAA,UACA,4DAAA;AAAA,UACA,kIAAA;AAAA,UACA;AAAA,SACF,CAAE,KAAK,GAAG;AAAA;AACZ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AAOO,IAAM,iBAAA,GAAoB,GAAA;AAAA,EAC/B;AAAA,IACE,8EAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,eAAA;AAAA,QACR,KAAA,EAAO,cAAA;AAAA,QACP,QAAA,EAAU,cAAA;AAAA,QACV,IAAA,EAAM,cAAA;AAAA,QACN,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,MAAA,EAAQ;AAAA;AACV;AAEJ;AAMO,IAAM,qBAAqB,GAAA,CAAI;AAAA,EACpC,4IAAA;AAAA,EACA,kDAAA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,oBAAoB,GAAA,CAAI;AAAA,EACnC;AACF,CAAC;AAMM,IAAM,0BAA0B,GAAA,CAAI;AAAA,EACzC;AACF,CAAC;AAMM,IAAM,qBAAqB,GAAA,CAAI;AAAA,EACpC;AACF,CAAC;AAMM,IAAM,sBAAsB,GAAA,CAAI;AAAA,EACrC;AACF,CAAC;AAMM,IAAM,qBAAqB,GAAA,CAAI;AAAA,EACpC,qDAAA;AAAA,EACA;AACF,CAAC;AC3FD,SAAS,IAAA,CAAK;AAAA,EACZ,SAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,MAAA,GAAS,KAAA;AAAA,EACT,cAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA,EAAW,MAAA;AAAA,EACX,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuC;AACrC,EAAA,MAAM,eAAe,OAAA,KAAY,YAAA;AAEjC,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAW,EAAA,CAAG,YAAA,CAAa,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MAClD,aAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAS,MAAA;AAAA,MACT,aAAA,EAAa,YAAA,IAAgB,MAAA,GAAS,MAAA,GAAS,MAAA;AAAA,MAC/C,eAAA,EAAe,YAAA,IAAgB,QAAA,GAAW,MAAA,GAAS,MAAA;AAAA,MACnD,WAAA,EAAU,MAAA;AAAA,MACV,gBAAc,OAAA,IAAW,SAAA;AAAA,MACxB,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QACA,gCACC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,oJAAA;AAAA,gBACA,2CAAA;AAAA,gBACA,WACI,uLAAA,GACA;AAAA,eACN;AAAA,cACA,YAAA,EAAY,iBAAiB,aAAA,IAAiB,YAAA;AAAA,cAC9C,cAAA,EAAc,QAAA;AAAA,cACd,gBAAc,QAAA,IAAY,MAAA;AAAA,cAC1B,WAAA,EAAU,sBAAA;AAAA,cACV,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,gBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,gBAAA,MAAM,OAAO,CAAC,QAAA;AACd,gBAAA,cAAA;AAAA,kBACE,IAAA;AAAA,kBACA;AAAA,oBACE,GAAI,MAAA,GAAS,EAAE,EAAA,EAAI,MAAA,KAAW,EAAC;AAAA,oBAC/B,IAAA;AAAA,oBACA,SAAA,EAAW,KAAK,GAAA;AAAI,mBACtB;AAAA,kBACA;AAAA,iBACF;AAAA,cACF,CAAA;AAAA,cAEA,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG;AAAA;AAAA,WACnC;AAAA,0BACA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,2HAAA;AAAA,gBACA,SACI,yDAAA,GACA;AAAA,eACN;AAAA,cACA,YAAA,EAAY,iBAAiB,QAAA,IAAY,OAAA;AAAA,cACzC,cAAA,EAAc,MAAA;AAAA,cACd,eAAa,MAAA,IAAU,MAAA;AAAA,cACvB,WAAA,EAAU,UAAA;AAAA,cACV,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,gBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,gBAAA,MAAM,OAAO,CAAC,MAAA;AACd,gBAAA,WAAA;AAAA,kBACE,IAAA;AAAA,kBACA;AAAA,oBACE,GAAI,MAAA,GAAS,EAAE,EAAA,EAAI,MAAA,KAAW,EAAC;AAAA,oBAC/B,IAAA;AAAA,oBACA,SAAA,EAAW,KAAK,GAAA;AAAI,mBACtB;AAAA,kBACA;AAAA,iBACF;AAAA,cACF,CAAA;AAAA,cAEA,QAAA,kBAAA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAM,SAAS,cAAA,GAAiB,MAAA;AAAA,kBAChC,MAAA,EAAO,IAAA;AAAA,kBACP,MAAA,EAAO,cAAA;AAAA,kBACP,cAAA,EAAe,OAAA;AAAA,kBACf,WAAA,EAAY,KAAA;AAAA,kBACZ,OAAA,EAAQ,WAAA;AAAA,kBACR,KAAA,EAAM,IAAA;AAAA,kBAEN,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oFAAA,EAAqF;AAAA;AAAA;AAC/F;AAAA;AACF,SAAA,EACF;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAEA,SAAS,UAAU,EAAE,SAAA,EAAW,MAAA,EAAQ,GAAG,OAAM,EAAmB;AAClE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAW,EAAA,CAAG,iBAAA,CAAkB,EAAE,MAAA,EAAQ,GAAG,SAAS,CAAA;AAAA,MACtD,aAAA,EAAa,MAAA;AAAA,MACb,WAAA,EAAU,YAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoB;AAC5D,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAmB,EAAG,SAAS,CAAA;AAAA,MAC7C,WAAA,EAAU,aAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmB;AAC1D,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAkB,EAAG,SAAS,CAAA;AAAA,MAC5C,WAAA,EAAU,YAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAyB;AACtE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAwB,EAAG,SAAS,CAAA;AAAA,MAClD,WAAA,EAAU,kBAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoB;AAC5D,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAmB,EAAG,SAAS,CAAA;AAAA,MAC7C,WAAA,EAAU,aAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAqB;AAC9D,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAoB,EAAG,SAAS,CAAA;AAAA,MAC9C,WAAA,EAAU,cAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoB;AAC5D,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAmB,EAAG,SAAS,CAAA;AAAA,MAC7C,WAAA,EAAU,aAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-K45MMHLA.js","sourcesContent":["// Card/Card.variants.ts\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * Card variant styles\n * Container component for grouping related content\n */\nexport const cardVariants = cva(\n [\n \"group/card relative bg-[color:var(--card-root-background)] text-[color:var(--card-root-foreground)] flex flex-col gap-[var(--card-root-gap)] rounded-[var(--card-root-radius)] py-[var(--card-root-padding-y)] overflow-hidden\",\n ],\n {\n variants: {\n /**\n * Visual variant of the card\n * - default: Card with border and subtle shadow\n * - elevated: Card with pronounced shadow for emphasis\n * - outlined: Card with border only, no shadow\n * - ghost: Card without border or shadow, transparent background\n * - selectable: Card optimized for multi-select grids (checkbox + pin overlays on <Card.Media>)\n */\n variant: {\n default: \"border-[length:var(--card-root-border-width)] border-[color:var(--border)] shadow-[var(--card-root-shadow-sm)]\",\n elevated: \"border-[length:var(--card-root-border-width)] border-[color:var(--border)] shadow-[var(--card-root-shadow-lg)] hover:shadow-[var(--card-root-shadow-xl)] transition-shadow\",\n outlined: \"border-[length:calc(var(--card-root-border-width)*2)] border-[color:var(--border)] shadow-none\",\n ghost: \"border-none shadow-none bg-transparent\",\n selectable: [\n \"border border-[color:var(--border)] cursor-pointer\",\n \"transition-[border-color,box-shadow,transform]\",\n \"hover:border-[color:var(--neutral-300)] hover:shadow-md hover:-translate-y-px\",\n \"dark:hover:border-[color:var(--neutral-600)]\",\n \"motion-reduce:transform-none motion-reduce:transition-none\",\n \"data-[active=true]:border-[color:var(--primary)] data-[active=true]:ring-[3px] data-[active=true]:ring-[color:var(--primary)]/20\",\n \"data-[selected=true]:border-[color:var(--primary)] data-[selected=true]:ring-2 data-[selected=true]:ring-[color:var(--primary)]/20\",\n ].join(\" \"),\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\n/**\n * CardMedia variant styles\n * Full-bleed media slot at the top of the card. Aspect ratio controls the shape.\n * Bleeds to the card edges (overflow:hidden on Card root + zero padding here).\n */\nexport const cardMediaVariants = cva(\n [\n \"relative -mx-px -mt-px overflow-hidden border-b border-[color:var(--border)]\",\n \"[&_img]:size-full [&_img]:object-cover\",\n ],\n {\n variants: {\n aspect: {\n square: \"aspect-square\",\n video: \"aspect-video\",\n portrait: \"aspect-[3/4]\",\n wide: \"aspect-[4/3]\",\n auto: \"\",\n },\n },\n defaultVariants: {\n aspect: \"auto\",\n },\n },\n)\n\n/**\n * CardHeader variant styles\n * Header section with grid layout for title and actions\n */\nexport const cardHeaderVariants = cva([\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-[var(--card-header-gap)] px-[var(--card-header-padding-x)]\",\n \"has-data-[slot=card-action]:grid-cols-[1fr_auto]\",\n \"[.border-b]:pb-[var(--card-header-padding-bottom)]\",\n])\n\n/**\n * CardTitle variant styles\n * Title text styling\n */\nexport const cardTitleVariants = cva([\n \"leading-tight [font-weight:var(--card-title-weight)]\",\n])\n\n/**\n * CardDescription variant styles\n * Description/subtitle text styling\n */\nexport const cardDescriptionVariants = cva([\n \"text-[color:var(--card-description-color)] text-[length:var(--card-description-text-size)]\",\n])\n\n/**\n * CardAction variant styles\n * Action area positioned in the header grid\n */\nexport const cardActionVariants = cva([\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n])\n\n/**\n * CardContent variant styles\n * Main content area\n */\nexport const cardContentVariants = cva([\n \"px-[var(--card-content-padding-x)]\",\n])\n\n/**\n * CardFooter variant styles\n * Footer section for actions or additional info\n */\nexport const cardFooterVariants = cva([\n \"flex items-center px-[var(--card-footer-padding-x)]\",\n \"[.border-t]:pt-[var(--card-footer-padding-top)]\",\n])\n\nexport type CardVariantProps = VariantProps<typeof cardVariants>\n","import type {\n CardActionProps,\n CardContentProps,\n CardDescriptionProps,\n CardFooterProps,\n CardHeaderProps,\n CardMediaProps,\n CardProps,\n CardSelectablePayload,\n CardTitleProps,\n} from \"./Card.types\"\n\nimport { Check } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n cardActionVariants,\n cardContentVariants,\n cardDescriptionVariants,\n cardFooterVariants,\n cardHeaderVariants,\n cardMediaVariants,\n cardTitleVariants,\n cardVariants,\n} from \"./Card.variants\"\n\nfunction Card({\n className,\n variant,\n selected = false,\n pinned = false,\n onToggleSelect,\n onTogglePin,\n selectableProps,\n \"data-id\": dataId,\n children,\n ...props\n}: CardProps & { \"data-id\"?: string }) {\n const isSelectable = variant === \"selectable\"\n\n return (\n <div\n className={cn(cardVariants({ variant }), className)}\n data-active={undefined}\n data-id={dataId}\n data-pinned={isSelectable && pinned ? \"true\" : undefined}\n data-selected={isSelectable && selected ? \"true\" : undefined}\n data-slot=\"card\"\n data-variant={variant ?? \"default\"}\n {...props}\n >\n {children}\n {isSelectable && (\n <>\n <button\n className={cn(\n \"absolute top-2 left-2 z-[2] grid place-items-center w-[18px] h-[18px] rounded-sm cursor-pointer transition-[opacity,background-color,border-color]\",\n \"border bg-white/[0.92] border-neutral-300\",\n selected\n ? \"opacity-100 bg-[color:var(--brand-primary-500,var(--primary))] border-[color:var(--brand-primary-500,var(--primary))] text-[color:var(--brand-primary-900,var(--primary-foreground))]\"\n : \"opacity-0 text-transparent group-hover/card:opacity-100\",\n )}\n aria-label={selectableProps?.checkboxLabel ?? \"Selecionar\"}\n aria-pressed={selected}\n data-checked={selected || undefined}\n data-slot=\"card-select-checkbox\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n const next = !selected\n onToggleSelect?.(\n next,\n {\n ...(dataId ? { id: dataId } : {}),\n next,\n timestamp: Date.now(),\n } satisfies CardSelectablePayload,\n e,\n )\n }}\n >\n <Check size={11} strokeWidth={3} />\n </button>\n <button\n className={cn(\n \"absolute top-1.5 right-1.5 z-[2] grid place-items-center w-[22px] h-[22px] rounded-full cursor-pointer transition-opacity\",\n pinned\n ? \"opacity-100 bg-white/95 text-[#eab308] dark:bg-black/55\"\n : \"opacity-0 bg-white/[0.82] text-neutral-500 dark:bg-black/45 dark:text-neutral-300 group-hover/card:opacity-100\",\n )}\n aria-label={selectableProps?.pinLabel ?? \"Fixar\"}\n aria-pressed={pinned}\n data-pinned={pinned || undefined}\n data-slot=\"card-pin\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n const next = !pinned\n onTogglePin?.(\n next,\n {\n ...(dataId ? { id: dataId } : {}),\n next,\n timestamp: Date.now(),\n } satisfies CardSelectablePayload,\n e,\n )\n }}\n >\n <svg\n fill={pinned ? \"currentColor\" : \"none\"}\n height=\"11\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.6\"\n viewBox=\"0 0 16 16\"\n width=\"11\"\n >\n <path d=\"m8 1.5 1.95 4.18 4.55.5-3.4 3.13.94 4.5L8 11.5l-4.04 2.31.94-4.5L1.5 6.18l4.55-.5z\" />\n </svg>\n </button>\n </>\n )}\n </div>\n )\n}\n\nfunction CardMedia({ className, aspect, ...props }: CardMediaProps) {\n return (\n <div\n className={cn(cardMediaVariants({ aspect }), className)}\n data-aspect={aspect}\n data-slot=\"card-media\"\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: CardHeaderProps) {\n return (\n <div\n className={cn(cardHeaderVariants(), className)}\n data-slot=\"card-header\"\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: CardTitleProps) {\n return (\n <div\n className={cn(cardTitleVariants(), className)}\n data-slot=\"card-title\"\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: CardDescriptionProps) {\n return (\n <div\n className={cn(cardDescriptionVariants(), className)}\n data-slot=\"card-description\"\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: CardActionProps) {\n return (\n <div\n className={cn(cardActionVariants(), className)}\n data-slot=\"card-action\"\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: CardContentProps) {\n return (\n <div\n className={cn(cardContentVariants(), className)}\n data-slot=\"card-content\"\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: CardFooterProps) {\n return (\n <div\n className={cn(cardFooterVariants(), className)}\n data-slot=\"card-footer\"\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardMedia,\n CardTitle,\n}\n"]}
1
+ {"version":3,"sources":["../src/components/layout/Card/Card.variants.ts","../src/components/layout/Card/Card.tsx"],"names":[],"mappings":"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","file":"chunk-HVFACGNK.js","sourcesContent":["// Card/Card.variants.ts\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * Card variant styles\n * Container component for grouping related content\n */\nexport const cardVariants = cva(\n [\n \"group/card relative bg-[color:var(--card-root-background)] text-[color:var(--card-root-foreground)] flex flex-col gap-[var(--card-root-gap)] rounded-[var(--card-root-radius)] py-[var(--card-root-padding-y)] overflow-hidden\",\n ],\n {\n variants: {\n /**\n * Visual variant of the card\n * - default: Card with border and subtle shadow\n * - elevated: Card with pronounced shadow for emphasis\n * - outlined: Card with border only, no shadow\n * - ghost: Card without border or shadow, transparent background\n * - selectable: Card optimized for multi-select grids (checkbox + pin overlays on <Card.Media>)\n */\n variant: {\n default: \"border-[length:var(--card-root-border-width)] border-[color:var(--border)] shadow-[var(--card-root-shadow-sm)]\",\n elevated: \"border-[length:var(--card-root-border-width)] border-[color:var(--border)] shadow-[var(--card-root-shadow-lg)] hover:shadow-[var(--card-root-shadow-xl)] transition-shadow\",\n outlined: \"border-[length:calc(var(--card-root-border-width)*2)] border-[color:var(--border)] shadow-none\",\n ghost: \"border-none shadow-none bg-transparent\",\n selectable: [\n \"border border-[color:var(--border)] cursor-pointer\",\n \"transition-[border-color,box-shadow,transform]\",\n \"hover:border-[color:var(--neutral-300)] hover:shadow-md hover:-translate-y-px\",\n \"dark:hover:border-[color:var(--neutral-600)]\",\n \"motion-reduce:transform-none motion-reduce:transition-none\",\n \"data-[active=true]:border-[color:var(--primary)] data-[active=true]:ring-[3px] data-[active=true]:ring-[color:var(--primary)]/20\",\n \"data-[selected=true]:border-[color:var(--primary)] data-[selected=true]:ring-2 data-[selected=true]:ring-[color:var(--primary)]/20\",\n ].join(\" \"),\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\n/**\n * CardMedia variant styles\n * Full-bleed media slot at the top of the card. Aspect ratio controls the shape.\n * Bleeds to the card edges (overflow:hidden on Card root + zero padding here).\n */\nexport const cardMediaVariants = cva(\n [\n \"relative -mx-px -mt-px overflow-hidden border-b border-[color:var(--border)]\",\n \"[&_img]:size-full [&_img]:object-cover\",\n ],\n {\n variants: {\n aspect: {\n square: \"aspect-square\",\n video: \"aspect-video\",\n portrait: \"aspect-[3/4]\",\n wide: \"aspect-[4/3]\",\n auto: \"\",\n },\n },\n defaultVariants: {\n aspect: \"auto\",\n },\n },\n)\n\n/**\n * CardHeader variant styles\n * Header section with grid layout for title and actions\n */\nexport const cardHeaderVariants = cva([\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-[var(--card-header-gap)] px-[var(--card-header-padding-x)]\",\n \"has-data-[slot=card-action]:grid-cols-[1fr_auto]\",\n \"[.border-b]:pb-[var(--card-header-padding-bottom)]\",\n])\n\n/**\n * CardTitle variant styles\n * Title text styling\n */\nexport const cardTitleVariants = cva([\n \"leading-tight [font-weight:var(--card-title-weight)]\",\n])\n\n/**\n * CardDescription variant styles\n * Description/subtitle text styling\n */\nexport const cardDescriptionVariants = cva([\n \"text-[color:var(--card-description-color)] text-[length:var(--card-description-text-size)]\",\n])\n\n/**\n * CardAction variant styles\n * Action area positioned in the header grid\n */\nexport const cardActionVariants = cva([\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n])\n\n/**\n * CardContent variant styles\n * Main content area\n */\nexport const cardContentVariants = cva([\n \"px-[var(--card-content-padding-x)]\",\n])\n\n/**\n * CardFooter variant styles\n * Footer section for actions or additional info\n */\nexport const cardFooterVariants = cva([\n \"flex items-center px-[var(--card-footer-padding-x)]\",\n \"[.border-t]:pt-[var(--card-footer-padding-top)]\",\n])\n\nexport type CardVariantProps = VariantProps<typeof cardVariants>\n","import type {\n CardActionProps,\n CardContentProps,\n CardDescriptionProps,\n CardFooterProps,\n CardHeaderProps,\n CardMediaProps,\n CardProps,\n CardSelectablePayload,\n CardTitleProps,\n} from \"./Card.types\"\n\nimport { Check } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n cardActionVariants,\n cardContentVariants,\n cardDescriptionVariants,\n cardFooterVariants,\n cardHeaderVariants,\n cardMediaVariants,\n cardTitleVariants,\n cardVariants,\n} from \"./Card.variants\"\n\nfunction Card({\n className,\n variant,\n selected = false,\n pinned = false,\n onToggleSelect,\n onTogglePin,\n selectableProps,\n \"data-id\": dataId,\n children,\n ...props\n}: CardProps & { \"data-id\"?: string }) {\n const isSelectable = variant === \"selectable\"\n\n return (\n <div\n className={cn(cardVariants({ variant }), className)}\n data-active={undefined}\n data-id={dataId}\n data-pinned={isSelectable && pinned ? \"true\" : undefined}\n data-selected={isSelectable && selected ? \"true\" : undefined}\n data-slot=\"card\"\n data-variant={variant ?? \"default\"}\n {...props}\n >\n {children}\n {isSelectable && (\n <>\n <button\n className={cn(\n \"absolute top-2 left-2 z-[2] grid place-items-center size-[var(--card-select-size)] rounded-sm cursor-pointer transition-[opacity,background-color,border-color]\",\n \"border bg-white/[0.92] border-neutral-300\",\n selected\n ? \"opacity-100 bg-[color:var(--brand-primary-500,var(--primary))] border-[color:var(--brand-primary-500,var(--primary))] text-[color:var(--brand-primary-900,var(--primary-foreground))]\"\n : \"opacity-0 text-transparent group-hover/card:opacity-100\",\n )}\n aria-label={selectableProps?.checkboxLabel ?? \"Selecionar\"}\n aria-pressed={selected}\n data-checked={selected || undefined}\n data-slot=\"card-select-checkbox\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n const next = !selected\n onToggleSelect?.(\n next,\n {\n ...(dataId ? { id: dataId } : {}),\n next,\n timestamp: Date.now(),\n } satisfies CardSelectablePayload,\n e,\n )\n }}\n >\n <Check size={11} strokeWidth={3} />\n </button>\n <button\n className={cn(\n \"absolute top-1.5 right-1.5 z-[2] grid place-items-center size-[var(--card-action-size)] rounded-full cursor-pointer transition-opacity\",\n pinned\n ? \"opacity-100 bg-white/95 text-[#eab308] dark:bg-black/55\"\n : \"opacity-0 bg-white/[0.82] text-neutral-500 dark:bg-black/45 dark:text-neutral-300 group-hover/card:opacity-100\",\n )}\n aria-label={selectableProps?.pinLabel ?? \"Fixar\"}\n aria-pressed={pinned}\n data-pinned={pinned || undefined}\n data-slot=\"card-pin\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n const next = !pinned\n onTogglePin?.(\n next,\n {\n ...(dataId ? { id: dataId } : {}),\n next,\n timestamp: Date.now(),\n } satisfies CardSelectablePayload,\n e,\n )\n }}\n >\n <svg\n fill={pinned ? \"currentColor\" : \"none\"}\n height=\"11\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.6\"\n viewBox=\"0 0 16 16\"\n width=\"11\"\n >\n <path d=\"m8 1.5 1.95 4.18 4.55.5-3.4 3.13.94 4.5L8 11.5l-4.04 2.31.94-4.5L1.5 6.18l4.55-.5z\" />\n </svg>\n </button>\n </>\n )}\n </div>\n )\n}\n\nfunction CardMedia({ className, aspect, ...props }: CardMediaProps) {\n return (\n <div\n className={cn(cardMediaVariants({ aspect }), className)}\n data-aspect={aspect}\n data-slot=\"card-media\"\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: CardHeaderProps) {\n return (\n <div\n className={cn(cardHeaderVariants(), className)}\n data-slot=\"card-header\"\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: CardTitleProps) {\n return (\n <div\n className={cn(cardTitleVariants(), className)}\n data-slot=\"card-title\"\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: CardDescriptionProps) {\n return (\n <div\n className={cn(cardDescriptionVariants(), className)}\n data-slot=\"card-description\"\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: CardActionProps) {\n return (\n <div\n className={cn(cardActionVariants(), className)}\n data-slot=\"card-action\"\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: CardContentProps) {\n return (\n <div\n className={cn(cardContentVariants(), className)}\n data-slot=\"card-content\"\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: CardFooterProps) {\n return (\n <div\n className={cn(cardFooterVariants(), className)}\n data-slot=\"card-footer\"\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardMedia,\n CardTitle,\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { Textarea } from './chunk-U6EOAIPK.js';
1
+ import { Textarea } from './chunk-2X35C55E.js';
2
2
  import { Avatar, AvatarImage, AvatarFallback } from './chunk-3BBOSSDG.js';
3
- import { Button } from './chunk-7TF5PVEU.js';
3
+ import { Button } from './chunk-X5XP5QVO.js';
4
4
  import { cn } from './chunk-HRNDJU7D.js';
5
5
  import { Paperclip, Smile, Send, MoreHorizontal, Edit2, Trash2, CornerDownRight, X, MessageCircle } from 'lucide-react';
6
6
  import { useId, useRef, useState, useMemo, useCallback } from 'react';
@@ -1066,5 +1066,5 @@ function CommentSystem({
1066
1066
  }
1067
1067
 
1068
1068
  export { CommentInput, CommentItem, CommentReactions, CommentSystem, commentActionsVariants, commentContentVariants, commentEmptyStateVariants, commentHeaderVariants, commentInputContainerVariants, commentItemVariants, commentMentionVariants, commentReactionVariants, commentRepliesVariants, commentSystemVariants, commentThreadLineVariants, commentTimelineMarkerVariants, defaultReactions, mentionSuggestionItemVariants, mentionSuggestionsVariants };
1069
- //# sourceMappingURL=chunk-R3HUGCGR.js.map
1070
- //# sourceMappingURL=chunk-R3HUGCGR.js.map
1069
+ //# sourceMappingURL=chunk-HZ47LQFJ.js.map
1070
+ //# sourceMappingURL=chunk-HZ47LQFJ.js.map