@etus/ui 0.4.0-beta.17 → 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 (264) 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-N4UTBJRY.js → chunk-3NHH7VPI.js} +3 -3
  6. package/dist/{chunk-N4UTBJRY.js.map → chunk-3NHH7VPI.js.map} +1 -1
  7. package/dist/{chunk-OEXQ2MOY.js → chunk-45YJLE4R.js} +3 -3
  8. package/dist/{chunk-OEXQ2MOY.js.map → chunk-45YJLE4R.js.map} +1 -1
  9. package/dist/{chunk-66TBTTZO.js → chunk-46SUPGQV.js} +14 -14
  10. package/dist/chunk-46SUPGQV.js.map +1 -0
  11. package/dist/{chunk-3W7FXRO5.js → chunk-56TC4CPT.js} +4 -4
  12. package/dist/{chunk-3W7FXRO5.js.map → chunk-56TC4CPT.js.map} +1 -1
  13. package/dist/{chunk-NCT5WXKG.js → chunk-5ACHKT35.js} +3 -3
  14. package/dist/{chunk-NCT5WXKG.js.map → chunk-5ACHKT35.js.map} +1 -1
  15. package/dist/{chunk-GGUWEAYD.js → chunk-5E44I7PB.js} +3 -3
  16. package/dist/{chunk-GGUWEAYD.js.map → chunk-5E44I7PB.js.map} +1 -1
  17. package/dist/{chunk-T6XRYT6Q.js → chunk-5K2SOCOX.js} +3 -3
  18. package/dist/{chunk-T6XRYT6Q.js.map → chunk-5K2SOCOX.js.map} +1 -1
  19. package/dist/{chunk-VT4IMHGE.js → chunk-5TABQJDW.js} +4 -4
  20. package/dist/chunk-5TABQJDW.js.map +1 -0
  21. package/dist/{chunk-4GVOOXYD.js → chunk-6ABGMOE2.js} +5 -5
  22. package/dist/chunk-6ABGMOE2.js.map +1 -0
  23. package/dist/{chunk-Q43KJP5A.js → chunk-6F5NWXZF.js} +7 -7
  24. package/dist/{chunk-Q43KJP5A.js.map → chunk-6F5NWXZF.js.map} +1 -1
  25. package/dist/{chunk-4RSHPKHB.js → chunk-6KMRMXR6.js} +3 -3
  26. package/dist/{chunk-4RSHPKHB.js.map → chunk-6KMRMXR6.js.map} +1 -1
  27. package/dist/{chunk-7J5OM4ZD.js → chunk-7CMOCWFX.js} +4 -4
  28. package/dist/{chunk-7J5OM4ZD.js.map → chunk-7CMOCWFX.js.map} +1 -1
  29. package/dist/{chunk-G7PBPX3K.js → chunk-7VGF6ZVE.js} +4 -4
  30. package/dist/{chunk-G7PBPX3K.js.map → chunk-7VGF6ZVE.js.map} +1 -1
  31. package/dist/{chunk-E2TI5V67.js → chunk-A4O3USMA.js} +3 -3
  32. package/dist/{chunk-E2TI5V67.js.map → chunk-A4O3USMA.js.map} +1 -1
  33. package/dist/{chunk-UPK5B2FL.js → chunk-AKRVZ2YW.js} +6 -6
  34. package/dist/chunk-AKRVZ2YW.js.map +1 -0
  35. package/dist/{chunk-VBJ26PZJ.js → chunk-AP3T3KMY.js} +3 -3
  36. package/dist/{chunk-VBJ26PZJ.js.map → chunk-AP3T3KMY.js.map} +1 -1
  37. package/dist/{chunk-X3AXEE3S.js → chunk-AR7K7Y4L.js} +3 -3
  38. package/dist/{chunk-X3AXEE3S.js.map → chunk-AR7K7Y4L.js.map} +1 -1
  39. package/dist/{chunk-WKWLKGNI.js → chunk-ARYBNQNS.js} +4 -4
  40. package/dist/chunk-ARYBNQNS.js.map +1 -0
  41. package/dist/{chunk-P27ERD6W.js → chunk-B2OCNHUW.js} +8 -8
  42. package/dist/{chunk-P27ERD6W.js.map → chunk-B2OCNHUW.js.map} +1 -1
  43. package/dist/{chunk-3NLWCX2F.js → chunk-DI3AISAZ.js} +3 -3
  44. package/dist/{chunk-3NLWCX2F.js.map → chunk-DI3AISAZ.js.map} +1 -1
  45. package/dist/{chunk-W3JVNX35.js → chunk-DSCLJ3GK.js} +4 -4
  46. package/dist/{chunk-W3JVNX35.js.map → chunk-DSCLJ3GK.js.map} +1 -1
  47. package/dist/{chunk-3KOLK3OB.js → chunk-EC5YEK3C.js} +3 -3
  48. package/dist/{chunk-3KOLK3OB.js.map → chunk-EC5YEK3C.js.map} +1 -1
  49. package/dist/{chunk-YUHPTV2A.js → chunk-EDSDAX56.js} +3 -3
  50. package/dist/{chunk-YUHPTV2A.js.map → chunk-EDSDAX56.js.map} +1 -1
  51. package/dist/{chunk-IRIIK3BU.js → chunk-F4EX3622.js} +10 -10
  52. package/dist/chunk-F4EX3622.js.map +1 -0
  53. package/dist/{chunk-XYYOV5GW.js → chunk-F5X2BBGU.js} +4 -4
  54. package/dist/{chunk-XYYOV5GW.js.map → chunk-F5X2BBGU.js.map} +1 -1
  55. package/dist/{chunk-BS5XDYOE.js → chunk-FLERVSKG.js} +5 -5
  56. package/dist/{chunk-BS5XDYOE.js.map → chunk-FLERVSKG.js.map} +1 -1
  57. package/dist/{chunk-TAZPML2P.js → chunk-G2CMEHW6.js} +3 -3
  58. package/dist/{chunk-TAZPML2P.js.map → chunk-G2CMEHW6.js.map} +1 -1
  59. package/dist/{chunk-TQBUBD3E.js → chunk-H7JHFBFD.js} +3 -3
  60. package/dist/{chunk-TQBUBD3E.js.map → chunk-H7JHFBFD.js.map} +1 -1
  61. package/dist/{chunk-Y4RKKQMB.js → chunk-HA5YVDHW.js} +3 -3
  62. package/dist/chunk-HA5YVDHW.js.map +1 -0
  63. package/dist/{chunk-ZKK7L7H7.js → chunk-HP7LEQJR.js} +3 -3
  64. package/dist/{chunk-ZKK7L7H7.js.map → chunk-HP7LEQJR.js.map} +1 -1
  65. package/dist/{chunk-W7S7GPU5.js → chunk-HV2ZZXFN.js} +4 -4
  66. package/dist/{chunk-W7S7GPU5.js.map → chunk-HV2ZZXFN.js.map} +1 -1
  67. package/dist/{chunk-K45MMHLA.js → chunk-HVFACGNK.js} +4 -4
  68. package/dist/{chunk-K45MMHLA.js.map → chunk-HVFACGNK.js.map} +1 -1
  69. package/dist/{chunk-R3HUGCGR.js → chunk-HZ47LQFJ.js} +4 -4
  70. package/dist/{chunk-R3HUGCGR.js.map → chunk-HZ47LQFJ.js.map} +1 -1
  71. package/dist/{chunk-4KOJTZVU.js → chunk-IA24GUNV.js} +25 -25
  72. package/dist/chunk-IA24GUNV.js.map +1 -0
  73. package/dist/{chunk-D6TH3EGA.js → chunk-IQKKPOI7.js} +4 -4
  74. package/dist/{chunk-D6TH3EGA.js.map → chunk-IQKKPOI7.js.map} +1 -1
  75. package/dist/{chunk-WXBC3D2N.js → chunk-IRFAIJLV.js} +4 -4
  76. package/dist/{chunk-WXBC3D2N.js.map → chunk-IRFAIJLV.js.map} +1 -1
  77. package/dist/{chunk-SXPBKGLT.js → chunk-J62NPPDO.js} +3 -3
  78. package/dist/{chunk-SXPBKGLT.js.map → chunk-J62NPPDO.js.map} +1 -1
  79. package/dist/{chunk-TNDW52VZ.js → chunk-JDG5A44W.js} +20 -13
  80. package/dist/chunk-JDG5A44W.js.map +1 -0
  81. package/dist/{chunk-Z4KW5VW6.js → chunk-JRVUEOKT.js} +5 -5
  82. package/dist/{chunk-Z4KW5VW6.js.map → chunk-JRVUEOKT.js.map} +1 -1
  83. package/dist/{chunk-NXQ25PKF.js → chunk-K43MPWTO.js} +7 -7
  84. package/dist/chunk-K43MPWTO.js.map +1 -0
  85. package/dist/{chunk-2ROFZG3A.js → chunk-KA7747GR.js} +3 -3
  86. package/dist/{chunk-2ROFZG3A.js.map → chunk-KA7747GR.js.map} +1 -1
  87. package/dist/{chunk-OBRJXVWO.js → chunk-KYURFRCH.js} +4 -4
  88. package/dist/{chunk-OBRJXVWO.js.map → chunk-KYURFRCH.js.map} +1 -1
  89. package/dist/{chunk-EYSTEGV5.js → chunk-LR56MGWT.js} +7 -7
  90. package/dist/{chunk-EYSTEGV5.js.map → chunk-LR56MGWT.js.map} +1 -1
  91. package/dist/{chunk-6ZAMTPGN.js → chunk-M6VBDPNQ.js} +3 -3
  92. package/dist/{chunk-6ZAMTPGN.js.map → chunk-M6VBDPNQ.js.map} +1 -1
  93. package/dist/{chunk-JPA2VQRW.js → chunk-MAM5PTRV.js} +3 -3
  94. package/dist/{chunk-JPA2VQRW.js.map → chunk-MAM5PTRV.js.map} +1 -1
  95. package/dist/{chunk-3L5G7VI2.js → chunk-MAM6VUKD.js} +3 -3
  96. package/dist/chunk-MAM6VUKD.js.map +1 -0
  97. package/dist/{chunk-LLI3JFJL.js → chunk-MLSIZ6JU.js} +4 -4
  98. package/dist/{chunk-LLI3JFJL.js.map → chunk-MLSIZ6JU.js.map} +1 -1
  99. package/dist/{chunk-U2R47SPY.js → chunk-NULX3RRN.js} +4 -4
  100. package/dist/{chunk-U2R47SPY.js.map → chunk-NULX3RRN.js.map} +1 -1
  101. package/dist/{chunk-GL56KIFL.js → chunk-OG3M4CMJ.js} +3 -3
  102. package/dist/{chunk-GL56KIFL.js.map → chunk-OG3M4CMJ.js.map} +1 -1
  103. package/dist/{chunk-7EGN7IGY.js → chunk-OR3NPCY2.js} +3 -3
  104. package/dist/{chunk-7EGN7IGY.js.map → chunk-OR3NPCY2.js.map} +1 -1
  105. package/dist/{chunk-5I7AXWJU.js → chunk-PGRMKSVA.js} +4 -4
  106. package/dist/{chunk-5I7AXWJU.js.map → chunk-PGRMKSVA.js.map} +1 -1
  107. package/dist/{chunk-VZZ3HP7G.js → chunk-PM344VOQ.js} +3 -3
  108. package/dist/{chunk-VZZ3HP7G.js.map → chunk-PM344VOQ.js.map} +1 -1
  109. package/dist/{chunk-46ESMCEQ.js → chunk-QBLU7J34.js} +5 -5
  110. package/dist/chunk-QBLU7J34.js.map +1 -0
  111. package/dist/{chunk-U74PNG4S.js → chunk-SMVH56FQ.js} +3 -3
  112. package/dist/{chunk-U74PNG4S.js.map → chunk-SMVH56FQ.js.map} +1 -1
  113. package/dist/{chunk-DYDXGWH2.js → chunk-T3LWBCVR.js} +4 -4
  114. package/dist/chunk-T3LWBCVR.js.map +1 -0
  115. package/dist/{chunk-ZP4HYVDG.js → chunk-TA4HCLP3.js} +3 -3
  116. package/dist/{chunk-ZP4HYVDG.js.map → chunk-TA4HCLP3.js.map} +1 -1
  117. package/dist/{chunk-7HT32DZG.js → chunk-TGLALXPU.js} +3 -3
  118. package/dist/{chunk-7HT32DZG.js.map → chunk-TGLALXPU.js.map} +1 -1
  119. package/dist/{chunk-5GE3BQA7.js → chunk-USPITOG4.js} +5 -5
  120. package/dist/chunk-USPITOG4.js.map +1 -0
  121. package/dist/{chunk-XLTSCY22.js → chunk-UYPYAOET.js} +4 -4
  122. package/dist/chunk-UYPYAOET.js.map +1 -0
  123. package/dist/{chunk-P7D6S6GX.js → chunk-V7O4X3AE.js} +38 -4
  124. package/dist/chunk-V7O4X3AE.js.map +1 -0
  125. package/dist/{chunk-2YSZPUQZ.js → chunk-VTDSGJ4R.js} +3 -3
  126. package/dist/{chunk-2YSZPUQZ.js.map → chunk-VTDSGJ4R.js.map} +1 -1
  127. package/dist/{chunk-4Y72SPNL.js → chunk-VUHJTTPV.js} +4 -4
  128. package/dist/chunk-VUHJTTPV.js.map +1 -0
  129. package/dist/{chunk-VLDAHAG6.js → chunk-VV6QE3M2.js} +4 -4
  130. package/dist/{chunk-VLDAHAG6.js.map → chunk-VV6QE3M2.js.map} +1 -1
  131. package/dist/{chunk-H5N3VPBG.js → chunk-WBERMEN7.js} +3 -3
  132. package/dist/{chunk-H5N3VPBG.js.map → chunk-WBERMEN7.js.map} +1 -1
  133. package/dist/{chunk-OXDWUKGP.js → chunk-WCMRVCIM.js} +4 -4
  134. package/dist/chunk-WCMRVCIM.js.map +1 -0
  135. package/dist/{chunk-IFHF4UES.js → chunk-WQI2USN7.js} +11 -11
  136. package/dist/chunk-WQI2USN7.js.map +1 -0
  137. package/dist/{chunk-CKD4UBV6.js → chunk-WVFQKBDB.js} +3 -3
  138. package/dist/{chunk-CKD4UBV6.js.map → chunk-WVFQKBDB.js.map} +1 -1
  139. package/dist/{chunk-3NSIUZGP.js → chunk-WZ2J4ALB.js} +3 -3
  140. package/dist/{chunk-3NSIUZGP.js.map → chunk-WZ2J4ALB.js.map} +1 -1
  141. package/dist/{chunk-7TF5PVEU.js → chunk-X5XP5QVO.js} +5 -5
  142. package/dist/chunk-X5XP5QVO.js.map +1 -0
  143. package/dist/{chunk-7Y2UQMX6.js → chunk-XKO6G5H2.js} +36 -36
  144. package/dist/chunk-XKO6G5H2.js.map +1 -0
  145. package/dist/{chunk-SUU3HNOX.js → chunk-XORDGKZI.js} +4 -4
  146. package/dist/{chunk-SUU3HNOX.js.map → chunk-XORDGKZI.js.map} +1 -1
  147. package/dist/{chunk-VAVE4ZJF.js → chunk-YGLD22TU.js} +3 -3
  148. package/dist/chunk-YGLD22TU.js.map +1 -0
  149. package/dist/{chunk-XOGMDABS.js → chunk-ZHUW6UYD.js} +8 -8
  150. package/dist/chunk-ZHUW6UYD.js.map +1 -0
  151. package/dist/{chunk-PWCMCMDN.js → chunk-ZMUUEXVD.js} +3 -3
  152. package/dist/{chunk-PWCMCMDN.js.map → chunk-ZMUUEXVD.js.map} +1 -1
  153. package/dist/components/advanced/Calendar/index.js +5 -5
  154. package/dist/components/advanced/EventCalendar/index.js +5 -5
  155. package/dist/components/advanced/FilterBuilder/index.js +7 -7
  156. package/dist/components/advanced/MarkdownEditor/index.js +2 -2
  157. package/dist/components/advanced/ReportBuilder/index.js +4 -4
  158. package/dist/components/advanced/RichTextEditor/index.js +2 -2
  159. package/dist/components/advanced/index.js +16 -16
  160. package/dist/components/data-display/Callout/index.js +1 -1
  161. package/dist/components/data-display/Carousel/index.js +5 -5
  162. package/dist/components/data-display/ChartCard/index.js +2 -2
  163. package/dist/components/data-display/DataTable/FilterBuilder/index.js +7 -7
  164. package/dist/components/data-display/DataTable/index.js +10 -10
  165. package/dist/components/data-display/ImageGallery/index.js +6 -6
  166. package/dist/components/data-display/Item/index.js +2 -2
  167. package/dist/components/data-display/KPICard/index.js +3 -3
  168. package/dist/components/data-display/List/index.js +2 -2
  169. package/dist/components/data-display/SingleStat/index.js +1 -1
  170. package/dist/components/data-display/index.js +31 -31
  171. package/dist/components/feedback/AlertDialog/index.js +5 -5
  172. package/dist/components/feedback/ConfirmModal/index.js +6 -6
  173. package/dist/components/feedback/Modal/index.js +1 -1
  174. package/dist/components/feedback/UpdatesWidget/index.js +1 -1
  175. package/dist/components/feedback/index.js +10 -10
  176. package/dist/components/forms/ColorPicker/index.js +1 -1
  177. package/dist/components/forms/Combobox/index.js +1 -1
  178. package/dist/components/forms/DatePicker/index.js +6 -6
  179. package/dist/components/forms/DateRangePicker/index.js +6 -6
  180. package/dist/components/forms/EmailInput/index.js +3 -3
  181. package/dist/components/forms/Field/index.js +3 -3
  182. package/dist/components/forms/Form/index.js +2 -2
  183. package/dist/components/forms/InputGroup/index.js +8 -8
  184. package/dist/components/forms/InputOTPField/index.js +4 -4
  185. package/dist/components/forms/NativeSelect/index.js +1 -1
  186. package/dist/components/forms/NumberInput/index.js +2 -2
  187. package/dist/components/forms/PasswordInput/index.js +3 -3
  188. package/dist/components/forms/PaymentInput/index.js +1 -1
  189. package/dist/components/forms/PhoneInput/index.js +1 -1
  190. package/dist/components/forms/RadioButton/index.js +1 -1
  191. package/dist/components/forms/SearchInput/index.js +3 -3
  192. package/dist/components/forms/Slider/index.js +1 -1
  193. package/dist/components/forms/TagsInput/index.js +2 -2
  194. package/dist/components/forms/TextInput/index.js +2 -2
  195. package/dist/components/forms/Textarea/index.js +1 -1
  196. package/dist/components/forms/TextareaField/index.js +5 -5
  197. package/dist/components/forms/URLInput/index.js +3 -3
  198. package/dist/components/forms/index.js +33 -33
  199. package/dist/components/index.js +132 -132
  200. package/dist/components/layout/Card/index.js +1 -1
  201. package/dist/components/layout/Section/index.js +1 -1
  202. package/dist/components/layout/index.js +6 -6
  203. package/dist/components/navigation/AccountSwitch/index.js +3 -3
  204. package/dist/components/navigation/ContextMenu/index.js +1 -1
  205. package/dist/components/navigation/DropdownMenu/index.js +1 -1
  206. package/dist/components/navigation/FileTree/index.js +1 -1
  207. package/dist/components/navigation/Menu/index.js +1 -1
  208. package/dist/components/navigation/Menubar/index.js +1 -1
  209. package/dist/components/navigation/Navbar/index.js +1 -1
  210. package/dist/components/navigation/Pagination/index.js +5 -5
  211. package/dist/components/navigation/Sidebar/index.js +7 -7
  212. package/dist/components/navigation/Toolbar/index.js +1 -1
  213. package/dist/components/navigation/index.js +20 -20
  214. package/dist/components/primitives/Badge/index.js +1 -1
  215. package/dist/components/primitives/Button/index.js +4 -4
  216. package/dist/components/primitives/ButtonGroup/index.js +2 -2
  217. package/dist/components/primitives/ConfirmButton/index.js +6 -6
  218. package/dist/components/primitives/Divider/index.js +1 -1
  219. package/dist/components/primitives/FolderStack/index.js +1 -1
  220. package/dist/components/primitives/Image/index.js +1 -1
  221. package/dist/components/primitives/Label/index.js +1 -1
  222. package/dist/components/primitives/SplitButton/index.js +2 -2
  223. package/dist/components/primitives/StatusIndicator/index.js +1 -1
  224. package/dist/components/primitives/Tag/index.js +1 -1
  225. package/dist/components/primitives/Thumbnail/index.js +2 -2
  226. package/dist/components/primitives/index.js +19 -19
  227. package/dist/components/workflow/ApprovalFlow/index.js +5 -5
  228. package/dist/components/workflow/CommentSystem/index.js +6 -6
  229. package/dist/components/workflow/Dashboard/index.js +5 -5
  230. package/dist/components/workflow/DashboardBuilder/index.js +8 -8
  231. package/dist/components/workflow/KanbanBoard/index.js +5 -5
  232. package/dist/components/workflow/ReportGenerator/index.js +6 -6
  233. package/dist/components/workflow/Stepper/index.js +1 -1
  234. package/dist/components/workflow/TaskStatus/index.js +2 -2
  235. package/dist/components/workflow/Wizard/index.js +6 -6
  236. package/dist/components/workflow/index.js +19 -19
  237. package/dist/index.d.ts +8 -1
  238. package/dist/index.js +132 -132
  239. package/dist/styles.css +27 -703
  240. package/package.json +2 -2
  241. package/dist/chunk-3L5G7VI2.js.map +0 -1
  242. package/dist/chunk-46ESMCEQ.js.map +0 -1
  243. package/dist/chunk-4GVOOXYD.js.map +0 -1
  244. package/dist/chunk-4KOJTZVU.js.map +0 -1
  245. package/dist/chunk-4Y72SPNL.js.map +0 -1
  246. package/dist/chunk-5GE3BQA7.js.map +0 -1
  247. package/dist/chunk-66TBTTZO.js.map +0 -1
  248. package/dist/chunk-7TF5PVEU.js.map +0 -1
  249. package/dist/chunk-7Y2UQMX6.js.map +0 -1
  250. package/dist/chunk-DYDXGWH2.js.map +0 -1
  251. package/dist/chunk-IFHF4UES.js.map +0 -1
  252. package/dist/chunk-IRIIK3BU.js.map +0 -1
  253. package/dist/chunk-NXQ25PKF.js.map +0 -1
  254. package/dist/chunk-OXDWUKGP.js.map +0 -1
  255. package/dist/chunk-P7D6S6GX.js.map +0 -1
  256. package/dist/chunk-TNDW52VZ.js.map +0 -1
  257. package/dist/chunk-U6EOAIPK.js.map +0 -1
  258. package/dist/chunk-UPK5B2FL.js.map +0 -1
  259. package/dist/chunk-VAVE4ZJF.js.map +0 -1
  260. package/dist/chunk-VT4IMHGE.js.map +0 -1
  261. package/dist/chunk-WKWLKGNI.js.map +0 -1
  262. package/dist/chunk-XLTSCY22.js.map +0 -1
  263. package/dist/chunk-XOGMDABS.js.map +0 -1
  264. package/dist/chunk-Y4RKKQMB.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/advanced/ReportBuilder/ReportBuilder.tsx"],"names":[],"mappings":"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","file":"chunk-IA24GUNV.js","sourcesContent":["\"use client\"\n\n// ReportBuilder — a faithful copy of Google Ad Manager's report builder bar:\n// a dimensions+metrics chip strip with an inline typeahead field, a sentence-\n// chip filter row (\"Source (src) is any of a, b\") with an inline \"Add filter\"\n// field, and the \"All dimensions and metrics\" View-all dialog (draft + Apply).\n//\n// Interaction contract (observed on the live GAM builder, 2026-06-09):\n// • Chips are inert — only their delete × reacts. The ONLY dropdown opener is\n// the inline text field; typing filters; checkboxes toggle without closing.\n// • \"Add filter\" is an inline field too: focusing lists the filter fields,\n// typing filters them, picking one opens that field's editor popup\n// (title + ✕, operator, value chips + type-to-search, blue Apply).\n// • \"View all\" opens a near-fullscreen dialog where selections are a DRAFT —\n// only Apply commits, Cancel discards.\n//\n// Visuals measured from the live GAM DOM: chips 24px + 1px #dadce0 border at\n// 12px radius, labels 13px/500 #5f6368, field glyphs 16px (#4285f4 dimension,\n// #34a853 \"123\" metric), popups 8px radius with Material's two-layer shadow,\n// internal dividers #e0e0e0, placeholders #757575, blue accents #1a73e8 /\n// #1967d2 / #e8f0fe.\n\nimport type {\n ReportBuilderField,\n ReportBuilderFieldKind,\n ReportBuilderFilter,\n ReportBuilderFilterField,\n ReportBuilderProps,\n} from \"./ReportBuilder.types\"\n\nimport { Filter, Search, Shapes, Table, X } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Dialog, DialogContent, DialogTitle } from \"../../feedback/Dialog\"\nimport { Popover, PopoverAnchor, PopoverContent } from \"../../feedback/Popover\"\nimport { Checkbox } from \"../../forms/Checkbox\"\nimport { NumberInput } from \"../../forms/NumberInput\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../forms/Select\"\n\nconst NUMBER_OPS = [\n { v: \">=\", l: \"≥\" },\n { v: \"<=\", l: \"≤\" },\n { v: \">\", l: \">\" },\n { v: \"<\", l: \"<\" },\n { v: \"=\", l: \"=\" },\n { v: \"between\", l: \"between\" },\n] as const\n\n/** GAM's blue Material checkbox — 18px, 2px #757575 border, checked #1a73e8. */\nconst GAM_CHECKBOX =\n \"size-[var(--report-builder-control-size)] rounded-xs border-2 border-[color:var(--report-builder-fg-subtle)] data-[state=checked]:border-[color:var(--report-builder-accent)] data-[state=checked]:bg-[color:var(--report-builder-accent)] data-[state=checked]:text-[color:var(--report-builder-on-accent)]\"\n\n/** GAM popup container — 8px radius, no border, Material two-layer shadow. */\nconst GAM_POPUP =\n \"rounded-lg border-0 p-0 [--report-builder-popup-shadow:0_1px_2px_0_var(--report-builder-shadow),0_2px_6px_2px_var(--report-builder-shadow-subtle)] shadow-[var(--report-builder-popup-shadow)]\"\n\nconst numFmt = (n: null | number | undefined) =>\n n == null ? \"\" : n.toLocaleString(\"en-US\")\n\n/** \"a, b, c\" up to 3 values, then \"+N\". */\nfunction listFmt(vals: string[]): string {\n const head = vals.slice(0, 3).join(\", \")\n return vals.length > 3 ? `${head} +${String(vals.length - 3)}` : head\n}\n\n/** Editor prefill for a filter field, from an existing filter if any. */\nfunction editorStateFor(existing?: ReportBuilderFilter) {\n return {\n a: existing?.a != null ? String(existing.a) : \"\",\n b: existing?.b != null ? String(existing.b) : \"\",\n op:\n existing && existing.op !== \"anyOf\" && existing.op !== \"contains\"\n ? existing.op\n : \">=\",\n text: existing?.text ?? \"\",\n vals: existing?.values ?? [],\n }\n}\n\n/** GAM shows custom keys as \"Label (key)\"; natives (label == key) plain. */\nfunction fieldLabel(label: string, key: string): string {\n return label.toLowerCase() === key.toLowerCase() ? label : `${label} (${key})`\n}\n\n/** Material \"123\" metric glyph, rendered as bold text like GAM's icon. */\nfunction MetricGlyph() {\n return (\n <span className=\"flex h-4 w-[var(--report-builder-chip-width)] items-center justify-center text-[length:var(--report-builder-chip-font-size)] font-bold leading-none tracking-tighter text-[color:var(--report-builder-positive)]\">\n 123\n </span>\n )\n}\n\n/** Material \"category\" dimension glyph — 16px, #4285f4. Lucide Shapes ≈ category. */\nfunction DimGlyph() {\n return <Shapes className=\"shrink-0 text-[color:var(--report-builder-accent-bright)]\" size={16} />\n}\n\nfunction KindGlyph({ kind }: { kind: ReportBuilderFieldKind }) {\n return kind === \"metric\" ? <MetricGlyph /> : <DimGlyph />\n}\n\n/** material-chip, measured: 24px tall (+1px border), 12px radius, #dadce0\n * outline, white bg, 12px left pad, 13px/500 #5f6368 label, 32×24 delete\n * button. `active` = GAM's blue editing highlight. */\nfunction GamChip({\n icon,\n children,\n active,\n onClick,\n onRemove,\n}: {\n active?: boolean\n children: React.ReactNode\n icon?: React.ReactNode\n onClick?: () => void\n onRemove?: () => void\n}) {\n return (\n <span\n className={cn(\n \"inline-flex h-[var(--report-builder-pill-height)] items-center rounded-xl border pl-3 text-[length:var(--report-builder-meta-font-size)] font-medium\",\n active\n ? \"border-[color:var(--report-builder-accent-border)] bg-[color:var(--report-builder-accent-bg)] text-[color:var(--report-builder-accent-hover)]\"\n : \"border-[color:var(--report-builder-border)] bg-[color:var(--report-builder-surface)] text-[color:var(--report-builder-fg-muted)]\",\n !onRemove && \"pr-3\",\n onClick && \"cursor-pointer\",\n onClick && !active && \"hover:bg-[color:var(--report-builder-surface-subtle)]\"\n )}\n onClick={onClick}\n >\n {icon && <span className=\"mr-2 flex items-center\">{icon}</span>}\n <span className=\"whitespace-nowrap\">{children}</span>\n {onRemove && (\n <button\n className={cn(\n \"flex h-6 w-8 items-center justify-center\",\n active ? \"text-[color:var(--report-builder-accent-hover)]\" : \"text-[color:var(--report-builder-fg-muted)] hover:text-[color:var(--report-builder-fg-secondary)]\"\n )}\n aria-label=\"Remove\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onRemove()\n }}\n >\n <X size={18} />\n </button>\n )}\n </span>\n )\n}\n\n// ---------------------------------------------------------------------------\n// \"All dimensions and metrics\" dialog (GAM's View-all modal)\n// ---------------------------------------------------------------------------\n\nfunction AllFieldsDialog({\n onOpenChange,\n fields,\n dimensions,\n metrics,\n onSelectionChange,\n}: {\n dimensions: string[]\n fields: ReportBuilderField[]\n metrics: string[]\n onOpenChange: (o: boolean) => void\n onSelectionChange: ReportBuilderProps[\"onSelectionChange\"]\n}) {\n // The dialog is mounted fresh on every open (see FieldsBar), so the draft\n // is simply seeded from props at mount time — no re-seeding effect needed.\n const [draftDims, setDraftDims] = React.useState<string[]>(dimensions)\n const [draftMets, setDraftMets] = React.useState<string[]>(metrics)\n const [display, setDisplay] = React.useState<\"all\" | \"dimensions\" | \"metrics\">(\"all\")\n const [category, setCategory] = React.useState<\"dimensions\" | \"metrics\" | \"popular\">(\n \"popular\"\n )\n const [search, setSearch] = React.useState(\"\")\n const [hovered, setHovered] = React.useState<null | string>(null)\n\n function toggleDraft(kind: ReportBuilderFieldKind, key: string) {\n const [cur, set] =\n kind === \"dimension\"\n ? ([draftDims, setDraftDims] as const)\n : ([draftMets, setDraftMets] as const)\n set(cur.includes(key) ? cur.filter((k) => k !== key) : [...cur, key])\n }\n\n function apply() {\n onSelectionChange(\"dimensions\", draftDims)\n onSelectionChange(\"metrics\", draftMets)\n onOpenChange(false)\n }\n\n const match = (l: string) => l.toLowerCase().includes(search.trim().toLowerCase())\n const items = fields.filter((f) => {\n if (!match(f.label)) return false\n if (display === \"dimensions\" && f.kind !== \"dimension\") return false\n if (display === \"metrics\" && f.kind !== \"metric\") return false\n if (category === \"dimensions\" && f.kind !== \"dimension\") return false\n if (category === \"metrics\" && f.kind !== \"metric\") return false\n return true\n })\n const selected = [\n ...draftDims.map((k) => fields.find((f) => f.kind === \"dimension\" && f.key === k)),\n ...draftMets.map((k) => fields.find((f) => f.kind === \"metric\" && f.key === k)),\n ].filter((f): f is ReportBuilderField => !!f)\n\n const CATS = [\n { k: \"popular\", l: \"Popular\" },\n { k: \"dimensions\", l: \"Dimensions\" },\n { k: \"metrics\", l: \"Metrics\" },\n ] as const\n const DISPLAYS = [\n { k: \"all\", l: \"All\" },\n { k: \"dimensions\", l: \"Dimensions\" },\n { k: \"metrics\", l: \"Metrics\" },\n ] as const\n\n return (\n <Dialog open onOpenChange={onOpenChange}>\n <DialogContent\n className=\"left-0 top-0 flex h-screen max-h-screen w-[min(1500px,96vw)] max-w-none translate-x-0 translate-y-0 flex-col gap-0 rounded-none border-0 bg-[color:var(--report-builder-surface)] p-0 text-[color:var(--report-builder-fg)]\"\n showCloseButton={false}\n >\n {/* header: ✕ + title + Display toggles */}\n <div className=\"flex shrink-0 items-center gap-4 px-4 py-3\">\n <button\n aria-label=\"Close\"\n className=\"rounded-full p-1.5 text-[color:var(--report-builder-fg-muted)] hover:bg-[color:var(--report-builder-surface-hover)]\"\n type=\"button\"\n onClick={() => {\n onOpenChange(false)\n }}\n >\n <X size={20} />\n </button>\n <DialogTitle className=\"text-xl font-normal text-[color:var(--report-builder-fg)]\">\n All dimensions and metrics\n </DialogTitle>\n <div className=\"flex-1\" />\n <span className=\"text-sm text-[color:var(--report-builder-fg-muted)]\">Display</span>\n <div className=\"flex gap-2\">\n {DISPLAYS.map((d) => (\n <button\n key={d.k}\n className={cn(\n \"h-8 rounded px-3 text-sm font-medium\",\n display === d.k\n ? \"bg-[color:var(--report-builder-accent-bg)] text-[color:var(--report-builder-accent-hover)]\"\n : \"border border-[color:var(--report-builder-border)] text-[color:var(--report-builder-fg-secondary)] hover:bg-[color:var(--report-builder-surface-subtle)]\"\n )}\n type=\"button\"\n onClick={() => {\n setDisplay(d.k)\n }}\n >\n {display === d.k ? \"✓ \" : \"\"}\n {d.l}\n </button>\n ))}\n </div>\n </div>\n {/* search */}\n <div className=\"flex shrink-0 items-center gap-3 border-y border-[color:var(--report-builder-border-strong)] px-4 py-2.5\">\n <Search className=\"text-[color:var(--report-builder-fg-muted)]\" size={18} />\n <input\n autoFocus\n className=\"w-full bg-transparent text-sm text-[color:var(--report-builder-fg)] outline-none placeholder:text-[color:var(--report-builder-fg-subtle)]\"\n placeholder=\"Search\"\n value={search}\n onChange={(e) => {\n setSearch(e.target.value)\n }}\n />\n </div>\n {/* body: categories | list | selected | description */}\n <div className=\"flex min-h-0 flex-1\">\n <div className=\"w-56 shrink-0 overflow-auto border-r border-[color:var(--report-builder-border-strong)] py-1\">\n {CATS.map((c) => (\n <button\n key={c.k}\n className={cn(\n \"flex h-9 w-full items-center px-4 text-left text-sm\",\n category === c.k\n ? \"bg-[color:var(--report-builder-surface-hover)] text-[color:var(--report-builder-fg)]\"\n : \"text-[color:var(--report-builder-fg-secondary)] hover:bg-[color:var(--report-builder-surface-subtle)]\"\n )}\n type=\"button\"\n onClick={() => {\n setCategory(c.k)\n }}\n >\n {c.l}\n </button>\n ))}\n </div>\n <div className=\"min-w-0 flex-[1.4] overflow-auto py-1\">\n {items.map((f) => {\n const sel =\n f.kind === \"dimension\"\n ? draftDims.includes(f.key)\n : draftMets.includes(f.key)\n return (\n <label\n key={`${f.kind}:${f.key}`}\n className=\"flex h-9 cursor-pointer items-center gap-3 px-4 text-[length:var(--report-builder-menu-font-size)] text-[color:var(--report-builder-fg-strong)] hover:bg-[color:var(--report-builder-surface-muted)]\"\n onBlur={() => {\n setHovered(null)\n }}\n // Mirror hover on keyboard focus so the description pane is\n // reachable without a mouse (WCAG 2.1 AA). Focus bubbles from\n // the inner checkbox to this label.\n onFocus={() => {\n setHovered(`${f.kind}:${f.key}`)\n }}\n onMouseEnter={() => {\n setHovered(`${f.kind}:${f.key}`)\n }}\n onMouseLeave={() => {\n setHovered(null)\n }}\n >\n <Checkbox\n checked={sel}\n className={GAM_CHECKBOX}\n onCheckedChange={() => {\n toggleDraft(f.kind, f.key)\n }}\n />\n <span className=\"flex items-center gap-2\">\n <KindGlyph kind={f.kind} />\n {f.label}\n </span>\n </label>\n )\n })}\n {items.length === 0 && (\n <div className=\"px-4 py-3 text-sm text-[color:var(--report-builder-fg-subtle)]\">No matches</div>\n )}\n </div>\n <div className=\"w-96 shrink-0 overflow-auto border-l border-[color:var(--report-builder-border-strong)]\">\n <div className=\"flex items-center justify-between px-4 py-3\">\n <span className=\"text-sm font-medium text-[color:var(--report-builder-fg)]\">\n {selected.length} Selected\n </span>\n <button\n className=\"text-sm font-medium text-[color:var(--report-builder-accent-hover)] hover:underline\"\n type=\"button\"\n onClick={() => {\n setDraftDims([])\n setDraftMets([])\n }}\n >\n Clear all\n </button>\n </div>\n {selected.map((f) => (\n <div key={`${f.kind}:${f.key}`} className=\"px-4 py-1.5\">\n <div className=\"text-xs text-[color:var(--report-builder-fg-muted)]\">\n {f.kind === \"dimension\" ? \"Dimensions\" : \"Metrics\"}\n </div>\n <div className=\"flex items-center gap-2\">\n <KindGlyph kind={f.kind} />\n <span className=\"flex-1 text-sm text-[color:var(--report-builder-fg)]\">{f.label}</span>\n <button\n aria-label={`Remove ${f.label}`}\n className=\"rounded-full p-1 text-[color:var(--report-builder-fg-muted)] hover:bg-[color:var(--report-builder-surface-hover)]\"\n type=\"button\"\n onClick={() => {\n toggleDraft(f.kind, f.key)\n }}\n >\n <X size={16} />\n </button>\n </div>\n </div>\n ))}\n </div>\n <div className=\"w-80 shrink-0 overflow-auto border-l border-[color:var(--report-builder-border-strong)] p-4 text-sm text-[color:var(--report-builder-fg)]\">\n {hovered\n ? (fields.find((f) => `${f.kind}:${f.key}` === hovered)?.description ??\n fields.find((f) => `${f.kind}:${f.key}` === hovered)?.label)\n : \"Hover over a dimension or metric to see a description\"}\n </div>\n </div>\n {/* footer: Apply / Cancel */}\n <div className=\"flex shrink-0 items-center gap-4 border-t border-[color:var(--report-builder-border-strong)] px-4 py-3\">\n <button\n className=\"rounded bg-[color:var(--report-builder-accent)] px-6 py-2 text-sm font-medium text-[color:var(--report-builder-on-accent)] hover:bg-[color:var(--report-builder-accent-hover)] disabled:cursor-not-allowed disabled:opacity-50\"\n disabled={draftDims.length === 0 || draftMets.length === 0}\n type=\"button\"\n onClick={apply}\n >\n Apply\n </button>\n <button\n className=\"rounded px-2 py-2 text-sm font-medium text-[color:var(--report-builder-accent-hover)] hover:bg-[color:var(--report-builder-accent-bg-subtle)]\"\n type=\"button\"\n onClick={() => {\n onOpenChange(false)\n }}\n >\n Cancel\n </button>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Dimensions + metrics chip strip\n// ---------------------------------------------------------------------------\n\nfunction FieldsBar({\n fields,\n dimensions,\n metrics,\n onSelectionChange,\n}: Pick<\n ReportBuilderProps,\n \"dimensions\" | \"fields\" | \"metrics\" | \"onSelectionChange\"\n>) {\n const [open, setOpen] = React.useState(false)\n const [viewAllOpen, setViewAllOpen] = React.useState(false)\n const [search, setSearch] = React.useState(\"\")\n const [hovered, setHovered] = React.useState<null | string>(null)\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n const byKey = (kind: ReportBuilderFieldKind, key: string) =>\n fields.find((f) => f.kind === kind && f.key === key)\n\n function toggle(kind: ReportBuilderFieldKind, key: string) {\n const plural = kind === \"dimension\" ? \"dimensions\" : \"metrics\"\n const cur = kind === \"dimension\" ? dimensions : metrics\n if (cur.includes(key)) {\n if (cur.length === 1) return // keep at least one of each\n onSelectionChange(plural, cur.filter((k) => k !== key))\n } else {\n onSelectionChange(plural, [...cur, key])\n }\n }\n\n const match = (l: string) => l.toLowerCase().includes(search.trim().toLowerCase())\n const items = fields.filter((f) => match(f.label))\n\n return (\n <div className=\"flex items-start border-b border-[color:var(--report-builder-border)] bg-[color:var(--report-builder-surface)] py-3\">\n <Popover\n open={open}\n onOpenChange={(o) => {\n setOpen(o)\n if (!o) {\n setSearch(\"\")\n setHovered(null)\n }\n }}\n >\n {/* anchor spans icon + strip so the dropdown is as wide as the strip */}\n <PopoverAnchor asChild>\n <div className=\"flex min-w-0 flex-1 items-start\">\n <div className=\"flex shrink-0 items-center px-3\">\n <Table className=\"text-[color:var(--report-builder-fg)]\" size={24} strokeWidth={1.5} />\n </div>\n <div className=\"min-w-0 flex-1\">\n {/* chips are NOT a click target (GAM: only their × reacts) */}\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1\">\n {dimensions.map((k) => (\n <GamChip\n key={`d:${k}`}\n icon={<DimGlyph />}\n onRemove={\n dimensions.length > 1 ? () => { toggle(\"dimension\", k); } : undefined\n }\n >\n {byKey(\"dimension\", k)?.label ?? k}\n </GamChip>\n ))}\n {metrics.map((k) => (\n <GamChip\n key={`m:${k}`}\n icon={<MetricGlyph />}\n onRemove={metrics.length > 1 ? () => { toggle(\"metric\", k); } : undefined}\n >\n {byKey(\"metric\", k)?.label ?? k}\n </GamChip>\n ))}\n </div>\n {/* the inline search field — the ONLY opener, like GAM's combobox */}\n <input\n ref={inputRef}\n className=\"mt-2 w-full max-w-md bg-transparent text-sm text-[color:var(--report-builder-fg)] outline-none placeholder:text-[color:var(--report-builder-fg-subtle)]\"\n placeholder=\"Select dimensions and metrics\"\n value={search}\n onChange={(e) => {\n setSearch(e.target.value)\n if (!open) setOpen(true)\n }}\n onFocus={() => {\n setOpen(true)\n }}\n />\n </div>\n </div>\n </PopoverAnchor>\n {/* GAM dropdown: strip-wide, two panes (list | description), View all footer */}\n <PopoverContent\n align=\"start\"\n className={GAM_POPUP}\n sideOffset={4}\n style={{ width: \"var(--radix-popper-anchor-width)\" }}\n onInteractOutside={(e) => {\n if (e.target === inputRef.current) e.preventDefault()\n }}\n onOpenAutoFocus={(e) => {\n e.preventDefault()\n }}\n >\n <div className=\"flex\">\n <div className=\"max-h-[var(--report-builder-list-max-height)] flex-[1.6] overflow-auto py-1\">\n {!search.trim() && (\n <div className=\"px-4 pb-1 pt-2 text-xs font-normal text-[color:var(--report-builder-fg-subtle)]\">\n Popular\n </div>\n )}\n {items.map((f) => {\n const sel =\n f.kind === \"dimension\"\n ? dimensions.includes(f.key)\n : metrics.includes(f.key)\n return (\n <label\n key={`${f.kind}:${f.key}`}\n className=\"flex h-8 cursor-pointer items-center gap-3 px-4 text-[length:var(--report-builder-menu-font-size)] text-[color:var(--report-builder-fg-strong)] hover:bg-[color:var(--report-builder-surface-muted)]\"\n onBlur={() => {\n setHovered(null)\n }}\n // Mirror hover on keyboard focus so the description pane is\n // reachable without a mouse (WCAG 2.1 AA). Focus bubbles\n // from the inner checkbox to this label.\n onFocus={() => {\n setHovered(`${f.kind}:${f.key}`)\n }}\n onMouseEnter={() => {\n setHovered(`${f.kind}:${f.key}`)\n }}\n onMouseLeave={() => {\n setHovered(null)\n }}\n >\n <Checkbox\n checked={sel}\n className={GAM_CHECKBOX}\n onCheckedChange={() => {\n toggle(f.kind, f.key)\n }}\n />\n <span className=\"flex items-center gap-2\">\n <KindGlyph kind={f.kind} />\n {f.label}\n </span>\n </label>\n )\n })}\n {items.length === 0 && (\n <div className=\"px-4 py-2 text-sm text-[color:var(--report-builder-fg-subtle)]\">No matches</div>\n )}\n </div>\n <div className=\"min-h-[var(--report-builder-preview-min-height)] flex-1 border-l border-[color:var(--report-builder-border-strong)] p-4 text-sm text-[color:var(--report-builder-fg)]\">\n {hovered\n ? (fields.find((f) => `${f.kind}:${f.key}` === hovered)?.description ??\n fields.find((f) => `${f.kind}:${f.key}` === hovered)?.label)\n : \"Hover over a dimension or metric to see a description\"}\n </div>\n </div>\n <div className=\"border-t border-[color:var(--report-builder-border-strong)] px-4 py-2.5\">\n <button\n aria-label=\"View all fields\"\n className=\"text-sm font-medium text-[color:var(--report-builder-accent-hover)] hover:underline\"\n type=\"button\"\n onClick={() => {\n setOpen(false)\n setViewAllOpen(true)\n }}\n >\n View all\n </button>\n </div>\n </PopoverContent>\n </Popover>\n <div className=\"flex shrink-0 items-center self-stretch border-l border-[color:var(--report-builder-border)] px-4\">\n <button\n aria-label=\"View all dimensions and metrics\"\n className=\"text-sm font-medium text-[color:var(--report-builder-accent-hover)] hover:underline\"\n type=\"button\"\n onClick={() => {\n setViewAllOpen(true)\n }}\n >\n View all\n </button>\n </div>\n {viewAllOpen && (\n <AllFieldsDialog\n dimensions={dimensions}\n fields={fields}\n metrics={metrics}\n onOpenChange={setViewAllOpen}\n onSelectionChange={onSelectionChange}\n />\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Filter chips row\n// ---------------------------------------------------------------------------\n\nfunction filterChipLabel(f: ReportBuilderFilter, ff?: ReportBuilderFilterField): string {\n const label = ff ? fieldLabel(ff.label, ff.key) : f.field\n if (f.op === \"anyOf\") return `${label} is any of ${listFmt(f.values ?? [])}`\n if (f.op === \"contains\") return `${label} contains \"${f.text ?? \"\"}\"`\n if (f.op === \"between\") return `${ff?.label ?? f.field} between ${numFmt(f.a)} and ${numFmt(f.b)}`\n const op = NUMBER_OPS.find((o) => o.v === f.op)?.l ?? f.op\n return `${ff?.label ?? f.field} ${op} ${numFmt(f.a)}`\n}\n\n/** Build the filter entry from editor state.\n * Returns the entry, `null` for an empty editor (→ remove the filter), or\n * `\"invalid\"` for unparsable numeric input (→ keep the editor open). */\nfunction buildFilterEntry(\n ff: ReportBuilderFilterField,\n s: { a: string; b: string; op: string; text: string; vals: string[] }\n): \"invalid\" | null | ReportBuilderFilter {\n if (ff.type === \"enum\") {\n return s.vals.length ? { field: ff.key, op: \"anyOf\", values: s.vals } : null\n }\n if (ff.type === \"text\") {\n const t = s.text.trim()\n return t ? { field: ff.key, op: \"contains\", text: t } : null\n }\n const na = Number.parseFloat(s.a)\n if (Number.isNaN(na)) return \"invalid\"\n const nb = s.op === \"between\" ? Number.parseFloat(s.b) : null\n if (nb != null && Number.isNaN(nb)) return \"invalid\"\n return { a: na, b: nb, field: ff.key, op: s.op as ReportBuilderFilter[\"op\"] }\n}\n\nfunction FiltersBar({\n filterFields,\n filters,\n onFiltersChange,\n}: {\n filterFields: ReportBuilderFilterField[]\n filters: ReportBuilderFilter[]\n onFiltersChange: (filters: ReportBuilderFilter[]) => void\n}) {\n const [open, setOpen] = React.useState(false)\n const [fieldKey, setFieldKey] = React.useState<null | string>(null) // null = field list\n const [editIdx, setEditIdx] = React.useState<null | number>(null)\n const [vals, setVals] = React.useState<string[]>([])\n const [text, setText] = React.useState(\"\")\n const [op, setOp] = React.useState<string>(\">=\")\n const [a, setA] = React.useState(\"\")\n const [b, setB] = React.useState(\"\")\n const [fsearch, setFsearch] = React.useState(\"\") // field-list typeahead\n const [vsearch, setVsearch] = React.useState(\"\") // value typeahead in editor\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n const fieldOf = (key: string) => filterFields.find((f) => f.key === key)\n\n function reset() {\n setFieldKey(null)\n setEditIdx(null)\n setVals([])\n setText(\"\")\n setOp(\">=\")\n setA(\"\")\n setB(\"\")\n setFsearch(\"\")\n setVsearch(\"\")\n }\n\n function openEditor(key: string, idx?: number) {\n const ff = fieldOf(key)\n if (!ff) return\n // enum/text fields keep one filter per field — editing replaces it\n const existingIdx =\n idx ?? (ff.type === \"number\" ? -1 : filters.findIndex((x) => x.field === key))\n const seed = editorStateFor(existingIdx >= 0 ? filters[existingIdx] : undefined)\n setFieldKey(key)\n setEditIdx(existingIdx >= 0 ? existingIdx : null)\n setVsearch(\"\")\n setVals(seed.vals)\n setText(seed.text)\n setOp(seed.op)\n setA(seed.a)\n setB(seed.b)\n setOpen(true)\n }\n\n function apply() {\n const ff = fieldKey ? fieldOf(fieldKey) : null\n if (!ff) return\n const entry = buildFilterEntry(ff, { a, b, op, text, vals })\n if (entry === \"invalid\") return\n const next = [...filters]\n if (editIdx != null) {\n if (entry) next[editIdx] = entry\n else next.splice(editIdx, 1)\n } else if (entry) {\n next.push(entry)\n }\n onFiltersChange(next)\n setOpen(false)\n reset()\n }\n\n const editorField = fieldKey ? fieldOf(fieldKey) : null\n const valueOptions = editorField?.options ?? []\n const valueSuggestions = valueOptions.filter(\n (v) => !vals.includes(v) && v.toLowerCase().includes(vsearch.trim().toLowerCase())\n )\n const fieldMatches = (l: string) =>\n l.toLowerCase().includes(fsearch.trim().toLowerCase())\n\n return (\n <div className=\"flex min-h-12 items-center bg-[color:var(--report-builder-surface)] py-2\">\n <div className=\"flex shrink-0 items-center px-3\">\n <Filter className=\"text-[color:var(--report-builder-accent)]\" fill=\"currentColor\" size={20} strokeWidth={0} />\n </div>\n <div className=\"flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1\">\n {filters.map((f, i) => (\n <GamChip\n // Content-based key, not the array index: number fields allow\n // duplicate filters on the same field, so an index key mis-keys\n // survivors on removal/reorder. The chip label is unique per filter.\n key={`${f.field}:${filterChipLabel(f, fieldOf(f.field))}`}\n active={open && editIdx === i}\n onClick={() => {\n openEditor(f.field, i)\n }}\n onRemove={() => {\n onFiltersChange(filters.filter((_, j) => j !== i))\n }}\n >\n {filterChipLabel(f, fieldOf(f.field))}\n </GamChip>\n ))}\n {/* \"Add filter\" inline field — the opener, like GAM's combobox */}\n <Popover\n open={open}\n onOpenChange={(o) => {\n setOpen(o)\n if (!o) reset()\n }}\n >\n <PopoverAnchor asChild>\n <input\n ref={inputRef}\n className=\"w-28 bg-transparent px-2 py-1 text-sm text-[color:var(--report-builder-fg)] outline-none placeholder:text-[color:var(--report-builder-fg-subtle)]\"\n placeholder=\"Add filter\"\n value={fsearch}\n onChange={(e) => {\n setFsearch(e.target.value)\n if (!open) setOpen(true)\n }}\n onFocus={() => {\n if (fieldKey === null) setOpen(true)\n }}\n />\n </PopoverAnchor>\n <PopoverContent\n align=\"start\"\n className={cn(fieldKey === null ? \"w-72\" : \"w-[var(--report-builder-popup-width-wide)]\", GAM_POPUP)}\n onInteractOutside={(e) => {\n if (e.target === inputRef.current) e.preventDefault()\n }}\n onOpenAutoFocus={(e) => {\n e.preventDefault()\n }}\n >\n {fieldKey === null ? (\n // step 1 — field list (filtered by the inline field's text)\n <div className=\"max-h-80 overflow-auto py-1\">\n {filterFields\n .filter((f) => fieldMatches(f.label))\n .map((f) => (\n <button\n key={f.key}\n className=\"flex h-8 w-full items-center gap-2 px-4 text-left text-[length:var(--report-builder-menu-font-size)] text-[color:var(--report-builder-fg-strong)] hover:bg-[color:var(--report-builder-surface-muted)]\"\n type=\"button\"\n onClick={() => {\n openEditor(f.key)\n }}\n >\n <KindGlyph kind={f.glyph ?? \"dimension\"} />\n {f.label}\n </button>\n ))}\n </div>\n ) : (\n // step 2 — GAM editor popup: title + ✕, operator, values, Apply\n <div>\n <div className=\"flex items-center justify-between px-3 pb-1 pt-3\">\n <span className=\"text-base text-[color:var(--report-builder-fg)]\">\n {editorField ? fieldLabel(editorField.label, editorField.key) : fieldKey}\n </span>\n <button\n aria-label=\"Close\"\n className=\"rounded-full p-1 text-[color:var(--report-builder-fg-muted)] hover:bg-[color:var(--report-builder-surface-hover)]\"\n type=\"button\"\n onClick={() => {\n setOpen(false)\n reset()\n }}\n >\n <X size={18} />\n </button>\n </div>\n {editorField?.type === \"text\" ? (\n <div className=\"px-3 py-2\">\n <div className=\"mb-2 rounded border border-[color:var(--report-builder-border)] px-3 py-2 text-[length:var(--report-builder-meta-font-size)] text-[color:var(--report-builder-fg-muted)]\">\n contains\n </div>\n <input\n autoFocus\n className=\"w-full border-b border-[color:var(--report-builder-border)] bg-transparent py-1 text-sm text-[color:var(--report-builder-fg)] outline-none placeholder:text-[color:var(--report-builder-fg-subtle)] focus:border-[color:var(--report-builder-accent)]\"\n placeholder=\"Type to search\"\n value={text}\n onChange={(e) => {\n setText(e.target.value)\n }}\n />\n </div>\n ) : editorField?.type === \"number\" ? (\n <div className=\"flex items-center gap-2 px-3 py-2\">\n <Select value={op} onValueChange={setOp}>\n <SelectTrigger className=\"w-24\" size=\"sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {NUMBER_OPS.map((o) => (\n <SelectItem key={o.v} value={o.v}>\n {o.l}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <NumberInput\n placeholder=\"value\"\n value={a}\n onChange={(e) => {\n setA(e.target.value)\n }}\n />\n {op === \"between\" && (\n <NumberInput\n placeholder=\"to\"\n value={b}\n onChange={(e) => {\n setB(e.target.value)\n }}\n />\n )}\n </div>\n ) : (\n <div className=\"px-3 py-2\">\n {/* operator box (enum fields are \"is any of\") */}\n <div className=\"mb-2 rounded border border-[color:var(--report-builder-border)] px-3 py-2 text-[length:var(--report-builder-meta-font-size)] text-[color:var(--report-builder-fg-muted)]\">\n is any of\n </div>\n {/* selected values as chips, like GAM */}\n {vals.length > 0 && (\n <div className=\"mb-1 flex flex-wrap gap-x-2 gap-y-1\">\n {vals.map((v) => (\n <GamChip\n key={v}\n onRemove={() => {\n setVals((p) => p.filter((x) => x !== v))\n }}\n >\n {v}\n </GamChip>\n ))}\n </div>\n )}\n <input\n autoFocus\n className=\"w-full border-b border-[color:var(--report-builder-border)] bg-transparent py-1 text-sm text-[color:var(--report-builder-fg)] outline-none placeholder:text-[color:var(--report-builder-fg-subtle)] focus:border-[color:var(--report-builder-accent)]\"\n placeholder=\"Type to search\"\n value={vsearch}\n onChange={(e) => {\n setVsearch(e.target.value)\n }}\n // Keyboard parity with GAM: Enter adds the first\n // suggestion, so the enum editor is operable without a\n // mouse (WCAG 2.1 AA).\n onKeyDown={(e) => {\n const first = valueSuggestions[0]\n if (e.key === \"Enter\" && first) {\n e.preventDefault()\n setVals((p) => [...p, first])\n setVsearch(\"\")\n }\n }}\n />\n <div className=\"mt-1 max-h-44 overflow-auto\">\n {valueSuggestions.map((v) => (\n <button\n key={v}\n className=\"flex h-8 w-full items-center px-2 text-left text-sm text-[color:var(--report-builder-fg-strong)] hover:bg-[color:var(--report-builder-surface-muted)]\"\n type=\"button\"\n onClick={() => {\n setVals((p) => [...p, v])\n setVsearch(\"\")\n }}\n >\n {v}\n </button>\n ))}\n </div>\n </div>\n )}\n {/* GAM's blue \"Apply\" text button */}\n <div className=\"flex justify-end px-3 pb-2 pt-1\">\n <button\n className=\"rounded px-2 py-1 text-sm font-medium text-[color:var(--report-builder-accent-hover)] hover:bg-[color:var(--report-builder-accent-bg-subtle)]\"\n type=\"button\"\n onClick={apply}\n >\n Apply\n </button>\n </div>\n </div>\n )}\n </PopoverContent>\n </Popover>\n </div>\n {filters.length > 0 && (\n <button\n aria-label=\"Clear all filters\"\n className=\"mx-2 flex shrink-0 items-center rounded-full p-2 text-[color:var(--report-builder-fg-muted)] hover:bg-[color:var(--report-builder-surface-hover)]\"\n type=\"button\"\n onClick={() => {\n onFiltersChange([])\n }}\n >\n <X size={20} />\n </button>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ReportBuilder — the bordered card with both bars\n// ---------------------------------------------------------------------------\n\n/**\n * ReportBuilder - GAM-style report builder bar\n *\n * A faithful copy of Google Ad Manager's report builder: a dimensions+metrics\n * chip strip with inline typeahead, a sentence-chip filter row with an inline\n * \"Add filter\" field and per-field editors, and the \"All dimensions and\n * metrics\" View-all dialog with draft + Apply.\n *\n * @example\n * ```tsx\n * <ReportBuilder\n * fields={[\n * { key: \"date\", label: \"Date\", kind: \"dimension\" },\n * { key: \"rev\", label: \"Revenue\", kind: \"metric\" },\n * ]}\n * dimensions={[\"date\"]}\n * metrics={[\"rev\"]}\n * onSelectionChange={(kind, keys) => { ... }}\n * filterFields={[\n * { key: \"src\", label: \"Source\", type: \"enum\", options: [\"google\", \"facebook\"] },\n * { key: \"rev\", label: \"Revenue\", type: \"number\", glyph: \"metric\" },\n * ]}\n * filters={filters}\n * onFiltersChange={setFilters}\n * />\n * ```\n */\nexport function ReportBuilder({\n fields,\n dimensions,\n metrics,\n onSelectionChange,\n filterFields,\n filters = [],\n onFiltersChange,\n className,\n ...props\n}: ReportBuilderProps) {\n return (\n <div\n className={cn(\"flex flex-col border border-[color:var(--report-builder-border)] bg-[color:var(--report-builder-surface)]\", className)}\n data-slot=\"report-builder\"\n {...props}\n >\n <FieldsBar\n dimensions={dimensions}\n fields={fields}\n metrics={metrics}\n onSelectionChange={onSelectionChange}\n />\n {filterFields && filterFields.length > 0 && onFiltersChange && (\n <FiltersBar\n filterFields={filterFields}\n filters={filters}\n onFiltersChange={onFiltersChange}\n />\n )}\n </div>\n )\n}\n"]}
@@ -153,7 +153,7 @@ function SingleStat({
153
153
  label && /* @__PURE__ */ jsx(
154
154
  "span",
155
155
  {
156
- className: "text-sm font-[number:var(--single-stat-label-weight)] text-[color:var(--single-stat-label-color)]",
156
+ className: "text-[length:var(--single-stat-label-size)] font-[number:var(--single-stat-label-weight)] text-[color:var(--single-stat-label-color)]",
157
157
  "data-slot": "single-stat-label",
158
158
  children: label
159
159
  }
@@ -174,7 +174,7 @@ function SingleStat({
174
174
  label && /* @__PURE__ */ jsx(
175
175
  "p",
176
176
  {
177
- className: "text-sm font-[number:var(--single-stat-label-weight)] text-[color:var(--single-stat-label-color)]",
177
+ className: "text-[length:var(--single-stat-label-size)] font-[number:var(--single-stat-label-weight)] text-[color:var(--single-stat-label-color)]",
178
178
  "data-slot": "single-stat-label",
179
179
  children: label
180
180
  }
@@ -200,5 +200,5 @@ function SingleStat({
200
200
  }
201
201
 
202
202
  export { SingleStat };
203
- //# sourceMappingURL=chunk-D6TH3EGA.js.map
204
- //# sourceMappingURL=chunk-D6TH3EGA.js.map
203
+ //# sourceMappingURL=chunk-IQKKPOI7.js.map
204
+ //# sourceMappingURL=chunk-IQKKPOI7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/data-display/SingleStat/SingleStat.tsx"],"names":[],"mappings":"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","file":"chunk-D6TH3EGA.js","sourcesContent":["import type { SingleStatProps, SingleStatSize } from \"./SingleStat.types\"\n\nimport { useEffect, useRef, useState } from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { SkeletonLoader } from \"../../primitives/SkeletonLoader\"\n\n/**\n * Size configuration for value typography\n */\nconst sizeClasses: Record<SingleStatSize, string> = {\n lg: \"text-[length:var(--single-stat-value-size-lg)]\",\n md: \"text-[length:var(--single-stat-value-size-md)]\",\n sm: \"text-[length:var(--single-stat-value-size-sm)]\",\n xl: \"text-[length:var(--single-stat-value-size-xl)]\",\n xs: \"text-[length:var(--single-stat-value-size-xs)]\",\n}\n\n/**\n * Skeleton height configuration by size\n */\nconst skeletonSizes: Record<SingleStatSize, string> = {\n lg: \"h-10\",\n md: \"h-8\",\n sm: \"h-7\",\n xl: \"h-14\",\n xs: \"h-6\",\n}\n\n/**\n * Hook for animated count-up effect\n */\nfunction useAnimatedCounter(\n targetValue: number,\n duration: number,\n enabled: boolean\n): number {\n // When not enabled, just return the target value directly\n const [count, setCount] = useState(0)\n const animationFrameRef = useRef<number>(0)\n const startTimeRef = useRef<null | number>(null)\n\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n startTimeRef.current = null\n\n const animate = (timestamp: number) => {\n startTimeRef.current ??= timestamp\n const progress = Math.min((timestamp - startTimeRef.current) / duration, 1)\n\n // Use easeOutQuad for smoother animation\n const eased = 1 - (1 - progress) * (1 - progress)\n setCount(Math.floor(eased * targetValue))\n\n if (progress < 1) {\n animationFrameRef.current = requestAnimationFrame(animate)\n }\n }\n\n animationFrameRef.current = requestAnimationFrame(animate)\n\n return () => {\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current)\n }\n }\n }, [targetValue, duration, enabled])\n\n // Return target value when not animating, otherwise return animated count\n return enabled ? count : targetValue\n}\n\n/**\n * SingleStat - Minimalist single metric display\n *\n * A compact component for displaying a single highlighted metric.\n * Simpler than KPICard, focused only on value and label.\n * Ideal for inline indicators or space-constrained layouts.\n *\n * @example\n * ```tsx\n * <SingleStat value={1234} label=\"Total Users\" />\n * ```\n *\n * @example\n * ```tsx\n * <SingleStat\n * value={45231}\n * prefix=\"$\"\n * label=\"Revenue\"\n * size=\"lg\"\n * />\n * ```\n */\nfunction SingleStat({\n value,\n label,\n variant = \"default\",\n size = \"md\",\n prefix,\n suffix,\n animated = false,\n animationDuration = 1000,\n loading = false,\n className,\n ...props\n}: SingleStatProps) {\n // Use animated counter for numeric values\n const numericValue = typeof value === \"number\" ? value : Number.NaN\n const isNumeric = !Number.isNaN(numericValue)\n const animatedValue = useAnimatedCounter(\n isNumeric ? numericValue : 0,\n animationDuration,\n animated && isNumeric\n )\n\n // Format the display value\n const displayValue = animated && isNumeric\n ? animatedValue.toLocaleString()\n : typeof value === \"number\"\n ? value.toLocaleString()\n : value\n\n // Loading state\n if (loading) {\n if (variant === \"compact\") {\n return (\n <SkeletonLoader\n className={cn(skeletonSizes[size], \"w-24\", className)}\n data-slot=\"single-stat\"\n {...props}\n />\n )\n }\n\n if (variant === \"inline\") {\n return (\n <div\n className={cn(\"flex items-baseline gap-2\", className)}\n data-slot=\"single-stat\"\n {...props}\n >\n <SkeletonLoader className={cn(skeletonSizes[size], \"w-20\")} />\n {label && <SkeletonLoader className=\"h-4 w-16\" />}\n </div>\n )\n }\n\n return (\n <div\n className={cn(\"space-y-1\", className)}\n data-slot=\"single-stat\"\n {...props}\n >\n {label && <SkeletonLoader className=\"h-4 w-20\" />}\n <SkeletonLoader className={cn(skeletonSizes[size], \"w-24\")} />\n </div>\n )\n }\n\n // Compact variant: value only\n if (variant === \"compact\") {\n const ariaValue = typeof displayValue === \"string\" ? displayValue : String(displayValue)\n return (\n <span\n className={cn(\n \"font-[number:var(--single-stat-value-weight)] tabular-nums text-[color:var(--single-stat-value-color)]\",\n sizeClasses[size],\n className\n )}\n aria-label={label ? `${label}: ${prefix ?? \"\"}${ariaValue}${suffix ?? \"\"}` : undefined}\n data-slot=\"single-stat\"\n role=\"text\"\n {...props}\n >\n {prefix && <span aria-hidden=\"true\">{prefix}</span>}\n {displayValue}\n {suffix && <span aria-hidden=\"true\">{suffix}</span>}\n </span>\n )\n }\n\n // Inline variant: label and value side by side\n if (variant === \"inline\") {\n return (\n <div\n aria-label={label}\n className={cn(\"flex items-baseline gap-2\", className)}\n data-slot=\"single-stat\"\n role=\"group\"\n {...props}\n >\n <span\n className={cn(\n \"font-[number:var(--single-stat-value-weight)] tabular-nums text-[color:var(--single-stat-value-color)]\",\n sizeClasses[size]\n )}\n data-slot=\"single-stat-value\"\n >\n {prefix && <span aria-hidden=\"true\">{prefix}</span>}\n {displayValue}\n {suffix && <span aria-hidden=\"true\">{suffix}</span>}\n </span>\n {label && (\n <span\n className=\"text-sm font-[number:var(--single-stat-label-weight)] text-[color:var(--single-stat-label-color)]\"\n data-slot=\"single-stat-label\"\n >\n {label}\n </span>\n )}\n </div>\n )\n }\n\n // Default variant: label above, value below\n return (\n <div\n aria-label={label}\n className={cn(\"space-y-1\", className)}\n data-slot=\"single-stat\"\n role=\"group\"\n {...props}\n >\n {label && (\n <p\n className=\"text-sm font-[number:var(--single-stat-label-weight)] text-[color:var(--single-stat-label-color)]\"\n data-slot=\"single-stat-label\"\n >\n {label}\n </p>\n )}\n <p\n className={cn(\n \"font-[number:var(--single-stat-value-weight)] tabular-nums text-[color:var(--single-stat-value-color)]\",\n sizeClasses[size]\n )}\n data-slot=\"single-stat-value\"\n >\n {prefix && <span aria-hidden=\"true\">{prefix}</span>}\n {displayValue}\n {suffix && <span aria-hidden=\"true\">{suffix}</span>}\n </p>\n </div>\n )\n}\n\nexport { SingleStat }\n"]}
1
+ {"version":3,"sources":["../src/components/data-display/SingleStat/SingleStat.tsx"],"names":[],"mappings":"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","file":"chunk-IQKKPOI7.js","sourcesContent":["import type { SingleStatProps, SingleStatSize } from \"./SingleStat.types\"\n\nimport { useEffect, useRef, useState } from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { SkeletonLoader } from \"../../primitives/SkeletonLoader\"\n\n/**\n * Size configuration for value typography\n */\nconst sizeClasses: Record<SingleStatSize, string> = {\n lg: \"text-[length:var(--single-stat-value-size-lg)]\",\n md: \"text-[length:var(--single-stat-value-size-md)]\",\n sm: \"text-[length:var(--single-stat-value-size-sm)]\",\n xl: \"text-[length:var(--single-stat-value-size-xl)]\",\n xs: \"text-[length:var(--single-stat-value-size-xs)]\",\n}\n\n/**\n * Skeleton height configuration by size\n */\nconst skeletonSizes: Record<SingleStatSize, string> = {\n lg: \"h-10\",\n md: \"h-8\",\n sm: \"h-7\",\n xl: \"h-14\",\n xs: \"h-6\",\n}\n\n/**\n * Hook for animated count-up effect\n */\nfunction useAnimatedCounter(\n targetValue: number,\n duration: number,\n enabled: boolean\n): number {\n // When not enabled, just return the target value directly\n const [count, setCount] = useState(0)\n const animationFrameRef = useRef<number>(0)\n const startTimeRef = useRef<null | number>(null)\n\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n startTimeRef.current = null\n\n const animate = (timestamp: number) => {\n startTimeRef.current ??= timestamp\n const progress = Math.min((timestamp - startTimeRef.current) / duration, 1)\n\n // Use easeOutQuad for smoother animation\n const eased = 1 - (1 - progress) * (1 - progress)\n setCount(Math.floor(eased * targetValue))\n\n if (progress < 1) {\n animationFrameRef.current = requestAnimationFrame(animate)\n }\n }\n\n animationFrameRef.current = requestAnimationFrame(animate)\n\n return () => {\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current)\n }\n }\n }, [targetValue, duration, enabled])\n\n // Return target value when not animating, otherwise return animated count\n return enabled ? count : targetValue\n}\n\n/**\n * SingleStat - Minimalist single metric display\n *\n * A compact component for displaying a single highlighted metric.\n * Simpler than KPICard, focused only on value and label.\n * Ideal for inline indicators or space-constrained layouts.\n *\n * @example\n * ```tsx\n * <SingleStat value={1234} label=\"Total Users\" />\n * ```\n *\n * @example\n * ```tsx\n * <SingleStat\n * value={45231}\n * prefix=\"$\"\n * label=\"Revenue\"\n * size=\"lg\"\n * />\n * ```\n */\nfunction SingleStat({\n value,\n label,\n variant = \"default\",\n size = \"md\",\n prefix,\n suffix,\n animated = false,\n animationDuration = 1000,\n loading = false,\n className,\n ...props\n}: SingleStatProps) {\n // Use animated counter for numeric values\n const numericValue = typeof value === \"number\" ? value : Number.NaN\n const isNumeric = !Number.isNaN(numericValue)\n const animatedValue = useAnimatedCounter(\n isNumeric ? numericValue : 0,\n animationDuration,\n animated && isNumeric\n )\n\n // Format the display value\n const displayValue = animated && isNumeric\n ? animatedValue.toLocaleString()\n : typeof value === \"number\"\n ? value.toLocaleString()\n : value\n\n // Loading state\n if (loading) {\n if (variant === \"compact\") {\n return (\n <SkeletonLoader\n className={cn(skeletonSizes[size], \"w-24\", className)}\n data-slot=\"single-stat\"\n {...props}\n />\n )\n }\n\n if (variant === \"inline\") {\n return (\n <div\n className={cn(\"flex items-baseline gap-2\", className)}\n data-slot=\"single-stat\"\n {...props}\n >\n <SkeletonLoader className={cn(skeletonSizes[size], \"w-20\")} />\n {label && <SkeletonLoader className=\"h-4 w-16\" />}\n </div>\n )\n }\n\n return (\n <div\n className={cn(\"space-y-1\", className)}\n data-slot=\"single-stat\"\n {...props}\n >\n {label && <SkeletonLoader className=\"h-4 w-20\" />}\n <SkeletonLoader className={cn(skeletonSizes[size], \"w-24\")} />\n </div>\n )\n }\n\n // Compact variant: value only\n if (variant === \"compact\") {\n const ariaValue = typeof displayValue === \"string\" ? displayValue : String(displayValue)\n return (\n <span\n className={cn(\n \"font-[number:var(--single-stat-value-weight)] tabular-nums text-[color:var(--single-stat-value-color)]\",\n sizeClasses[size],\n className\n )}\n aria-label={label ? `${label}: ${prefix ?? \"\"}${ariaValue}${suffix ?? \"\"}` : undefined}\n data-slot=\"single-stat\"\n role=\"text\"\n {...props}\n >\n {prefix && <span aria-hidden=\"true\">{prefix}</span>}\n {displayValue}\n {suffix && <span aria-hidden=\"true\">{suffix}</span>}\n </span>\n )\n }\n\n // Inline variant: label and value side by side\n if (variant === \"inline\") {\n return (\n <div\n aria-label={label}\n className={cn(\"flex items-baseline gap-2\", className)}\n data-slot=\"single-stat\"\n role=\"group\"\n {...props}\n >\n <span\n className={cn(\n \"font-[number:var(--single-stat-value-weight)] tabular-nums text-[color:var(--single-stat-value-color)]\",\n sizeClasses[size]\n )}\n data-slot=\"single-stat-value\"\n >\n {prefix && <span aria-hidden=\"true\">{prefix}</span>}\n {displayValue}\n {suffix && <span aria-hidden=\"true\">{suffix}</span>}\n </span>\n {label && (\n <span\n className=\"text-[length:var(--single-stat-label-size)] font-[number:var(--single-stat-label-weight)] text-[color:var(--single-stat-label-color)]\"\n data-slot=\"single-stat-label\"\n >\n {label}\n </span>\n )}\n </div>\n )\n }\n\n // Default variant: label above, value below\n return (\n <div\n aria-label={label}\n className={cn(\"space-y-1\", className)}\n data-slot=\"single-stat\"\n role=\"group\"\n {...props}\n >\n {label && (\n <p\n className=\"text-[length:var(--single-stat-label-size)] font-[number:var(--single-stat-label-weight)] text-[color:var(--single-stat-label-color)]\"\n data-slot=\"single-stat-label\"\n >\n {label}\n </p>\n )}\n <p\n className={cn(\n \"font-[number:var(--single-stat-value-weight)] tabular-nums text-[color:var(--single-stat-value-color)]\",\n sizeClasses[size]\n )}\n data-slot=\"single-stat-value\"\n >\n {prefix && <span aria-hidden=\"true\">{prefix}</span>}\n {displayValue}\n {suffix && <span aria-hidden=\"true\">{suffix}</span>}\n </p>\n </div>\n )\n}\n\nexport { SingleStat }\n"]}
@@ -1,7 +1,7 @@
1
- import { Calendar } from './chunk-YUHPTV2A.js';
1
+ import { Calendar } from './chunk-EDSDAX56.js';
2
2
  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from './chunk-GAMOVEZD.js';
3
3
  import { Popover, PopoverTrigger, PopoverContent } from './chunk-AFCSDND5.js';
4
- import { Button } from './chunk-7TF5PVEU.js';
4
+ import { Button } from './chunk-X5XP5QVO.js';
5
5
  import { cn } from './chunk-HRNDJU7D.js';
6
6
  import { endOfWeek, startOfWeek, endOfDay, startOfDay, endOfMonth, startOfMonth, endOfYear, startOfYear, subDays, subMonths, subYears, isBefore, isAfter, format, parse, isValid } from 'date-fns';
7
7
  import { XIcon, CalendarIcon, ArrowRightIcon } from 'lucide-react';
@@ -696,5 +696,5 @@ function DateRangeInput({
696
696
  }
697
697
 
698
698
  export { DateRangeInput, DateRangePicker, DateRangePresets, dateRangeInputContainerVariants, dateRangeInputFieldVariants, dateRangePickerFooterVariants, dateRangePickerTriggerVariants, dateRangePresetVariants, dateRangePresetsContainerVariants, defaultPresets };
699
- //# sourceMappingURL=chunk-WXBC3D2N.js.map
700
- //# sourceMappingURL=chunk-WXBC3D2N.js.map
699
+ //# sourceMappingURL=chunk-IRFAIJLV.js.map
700
+ //# sourceMappingURL=chunk-IRFAIJLV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/forms/DateRangePicker/DateRangePicker.variants.ts","../src/components/forms/DateRangePicker/DateRangePresets.tsx","../src/components/forms/DateRangePicker/presets.ts","../src/components/forms/DateRangePicker/DateRangePicker.tsx","../src/components/forms/DateRangePicker/DateRangeInput.tsx"],"names":["format","startOfMonth","formatDate","startOfDay","jsx","React2","jsxs"],"mappings":"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","file":"chunk-WXBC3D2N.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * DateRangePicker trigger variant styles using CVA\n */\nexport const dateRangePickerTriggerVariants = cva(\n // Base styles\n [\n \"inline-flex w-full items-center justify-between gap-2 rounded-[var(--date-picker-trigger-radius)] border bg-transparent font-normal transition-[color,box-shadow] outline-none\",\n \"text-left\",\n \"placeholder:text-muted-foreground\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"data-[state=open]:border-ring data-[state=open]:ring-ring/50 data-[state=open]:ring-[3px]\",\n \"min-w-[var(--date-range-picker-trigger-width)]\",\n ],\n {\n variants: {\n size: {\n sm: \"h-[var(--date-picker-trigger-height-sm)] px-[var(--date-picker-trigger-padding-x-sm)] py-[var(--date-picker-trigger-padding-y-sm)] text-[length:var(--date-picker-trigger-text-sm)]\",\n md: \"h-[var(--date-picker-trigger-height-md)] px-[var(--date-picker-trigger-padding-x-md)] py-[var(--date-picker-trigger-padding-y-md)] text-[length:var(--date-picker-trigger-text-md)]\",\n lg: \"h-[var(--date-picker-trigger-height-lg)] px-[var(--date-picker-trigger-padding-x-lg)] py-[var(--date-picker-trigger-padding-y-lg)] text-[length:var(--date-picker-trigger-text-lg)]\",\n },\n variant: {\n default: \"border-input shadow-xs dark:bg-input/30\",\n outline: \"border-input bg-transparent\",\n ghost: \"border-transparent hover:bg-accent\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n)\n\nexport type DateRangePickerTriggerVariantProps = VariantProps<typeof dateRangePickerTriggerVariants>\n\n/**\n * Preset item styles - horizontal scrollable tabs on mobile, vertical list on desktop\n */\nexport const dateRangePresetVariants = cva(\n [\n // Base - works for both orientations\n \"text-sm rounded-md transition-colors whitespace-nowrap\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"data-[selected=true]:bg-primary/10 data-[selected=true]:text-primary data-[selected=true]:font-medium\",\n // Mobile: pill-like compact tabs\n \"px-3 py-1.5 flex-shrink-0\",\n // Desktop (sm+): full-width list items\n \"sm:w-full sm:text-left sm:py-2\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\nexport type DateRangePresetVariantProps = VariantProps<typeof dateRangePresetVariants>\n\n/**\n * Presets container styles - horizontal scrollable on mobile, vertical sidebar on desktop\n */\nexport const dateRangePresetsContainerVariants = cva(\n [\n // Mobile: horizontal scrollable tabs\n \"flex flex-row gap-1 p-2 overflow-x-auto\",\n \"border-b border-border\",\n \"-webkit-overflow-scrolling-touch scrollbar-hide\",\n // Desktop (sm+): vertical sidebar\n \"sm:flex-col sm:overflow-x-visible sm:border-b-0 sm:border-r\",\n \"sm:min-w-[var(--date-picker-preset-min-width)]\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * Footer container styles (for Apply/Cancel buttons)\n */\nexport const dateRangePickerFooterVariants = cva(\n [\n \"flex items-center justify-end gap-2 border-t border-border\",\n \"p-[var(--date-picker-footer-padding)]\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * Range input container styles\n */\nexport const dateRangeInputContainerVariants = cva(\n [\n \"flex items-center gap-2\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * Range input field styles\n */\nexport const dateRangeInputFieldVariants = cva(\n [\n \"flex-1 min-w-0 rounded-md border border-input bg-transparent px-2 py-1 text-sm\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {\n size: {\n sm: \"h-7 text-xs\",\n md: \"h-8 text-sm\",\n lg: \"h-9 text-base\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\nexport type DateRangeInputFieldVariantProps = VariantProps<typeof dateRangeInputFieldVariants>\n","import type { DateRangePresetsProps } from \"./DateRangePicker.types\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n dateRangePresetsContainerVariants,\n dateRangePresetVariants,\n} from \"./DateRangePicker.variants\"\n\n/**\n * DateRangePresets component displays a list of quick-select preset date ranges\n */\nfunction DateRangePresets({\n presets,\n selectedPreset,\n onSelect,\n}: DateRangePresetsProps) {\n return (\n <div\n aria-label=\"Date range presets\"\n className={cn(dateRangePresetsContainerVariants())}\n data-slot=\"date-range-presets\"\n role=\"listbox\"\n >\n {presets.map((preset) => {\n const isSelected = selectedPreset === preset.label\n return (\n <button\n key={preset.label}\n aria-selected={isSelected}\n className={cn(dateRangePresetVariants())}\n data-selected={isSelected || undefined}\n role=\"option\"\n type=\"button\"\n onClick={() => { onSelect(preset.getValue(), preset.label); }}\n >\n {preset.label}\n </button>\n )\n })}\n </div>\n )\n}\n\nexport { DateRangePresets }\n","import type { DateRangePreset } from \"./DateRangePicker.types\"\n\nimport {\n endOfDay,\n endOfMonth,\n endOfWeek,\n endOfYear,\n startOfDay,\n startOfMonth,\n startOfWeek,\n startOfYear,\n subDays,\n subMonths,\n subYears,\n} from \"date-fns\"\n\n/**\n * Default preset options for quick date range selection.\n *\n * Each preset carries a canonical `key`; the visible label is resolved per locale via\n * {@link resolvePresetLabel} (DES-1263 — locale-driven, not hardcoded). The English `label`\n * here is the fallback. `custom` (pt: \"Fixo\") clears the range for manual selection.\n */\nexport const defaultPresets: DateRangePreset[] = [\n {\n key: \"today\",\n label: \"Today\",\n getValue: () => {\n const today = startOfDay(new Date())\n return { from: today, to: endOfDay(today) }\n },\n },\n {\n key: \"yesterday\",\n label: \"Yesterday\",\n getValue: () => {\n const yesterday = subDays(new Date(), 1)\n return { from: startOfDay(yesterday), to: endOfDay(yesterday) }\n },\n },\n {\n key: \"thisWeek\",\n label: \"This week\",\n getValue: () => ({\n from: startOfWeek(new Date(), { weekStartsOn: 0 }),\n to: endOfWeek(new Date(), { weekStartsOn: 0 }),\n }),\n },\n {\n key: \"last7Days\",\n label: \"Last 7 days\",\n getValue: () => ({\n from: startOfDay(subDays(new Date(), 6)),\n to: endOfDay(new Date()),\n }),\n },\n {\n key: \"last14Days\",\n label: \"Last 14 days\",\n getValue: () => ({\n from: startOfDay(subDays(new Date(), 13)),\n to: endOfDay(new Date()),\n }),\n },\n {\n key: \"last30Days\",\n label: \"Last 30 days\",\n getValue: () => ({\n from: startOfDay(subDays(new Date(), 29)),\n to: endOfDay(new Date()),\n }),\n },\n {\n key: \"thisMonth\",\n label: \"This month\",\n getValue: () => ({\n from: startOfMonth(new Date()),\n to: endOfMonth(new Date()),\n }),\n },\n {\n key: \"lastMonth\",\n label: \"Last month\",\n getValue: () => {\n const lastMonth = subMonths(new Date(), 1)\n return {\n from: startOfMonth(lastMonth),\n to: endOfMonth(lastMonth),\n }\n },\n },\n {\n key: \"thisYear\",\n label: \"This year\",\n getValue: () => ({\n from: startOfYear(new Date()),\n to: endOfYear(new Date()),\n }),\n },\n {\n key: \"lastYear\",\n label: \"Last year\",\n getValue: () => {\n const lastYear = subYears(new Date(), 1)\n return {\n from: startOfYear(lastYear),\n to: endOfYear(lastYear),\n }\n },\n },\n {\n key: \"allTime\",\n label: \"All time\",\n getValue: () => ({\n from: undefined,\n to: undefined,\n }),\n },\n {\n key: \"custom\",\n label: \"Custom\",\n getValue: () => ({\n from: undefined,\n to: undefined,\n }),\n },\n]\n\n/**\n * Preset label translations (DES-1263). Keyed by language code (locale.code split on \"-\").\n * English labels live on the presets themselves and act as the fallback.\n */\nconst presetLabels: Record<string, Record<string, string>> = {\n pt: {\n today: \"Hoje\",\n yesterday: \"Ontem\",\n thisWeek: \"Esta semana\",\n last7Days: \"Últimos 7 dias\",\n last14Days: \"Últimos 14 dias\",\n last30Days: \"Últimos 30 dias\",\n thisMonth: \"Este mês\",\n lastMonth: \"Mês passado\",\n thisYear: \"Este ano\",\n lastYear: \"Ano passado\",\n allTime: \"Todo o período\",\n custom: \"Fixo\",\n },\n}\n\n/**\n * Resolves a preset's display label for the given locale code (e.g. \"pt-BR\").\n * Falls back to the preset's own English `label` when no translation exists.\n */\nexport function resolvePresetLabel(preset: DateRangePreset, localeCode?: string): string {\n const lang = localeCode?.split(\"-\")[0]\n const translated = lang && preset.key ? presetLabels[lang]?.[preset.key] : undefined\n return translated ?? preset.label\n}\n","import type { DateRange } from \"../../advanced/Calendar\"\nimport type { DateRangePickerProps } from \"./DateRangePicker.types\"\n\nimport { format as formatDate, isAfter, isBefore, startOfDay, startOfMonth } from \"date-fns\"\nimport { CalendarIcon, XIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Calendar } from \"../../advanced/Calendar\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"../../feedback/Dialog\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../../feedback/Popover\"\nimport { Button } from \"../../primitives/Button\"\nimport {\n dateRangePickerFooterVariants,\n dateRangePickerTriggerVariants,\n} from \"./DateRangePicker.variants\"\nimport { DateRangePresets } from \"./DateRangePresets\"\nimport { defaultPresets, resolvePresetLabel } from \"./presets\"\n\n/**\n * DateRangePicker component for selecting a date range with optional presets\n */\nfunction DateRangePicker({\n ref,\n className,\n value,\n defaultValue,\n placeholder = \"Select date range\",\n disabled = false,\n disabledDates,\n readOnly = false,\n minDate,\n maxDate,\n format = \"PP\",\n locale,\n onChange,\n onOpenChange,\n onClear,\n size = \"md\",\n variant = \"default\",\n displayMode = \"popover\",\n modalTitle = \"Select Date Range\",\n required = false,\n invalid = false,\n clearable = false,\n numberOfMonths = 2,\n presets = defaultPresets,\n showPresets = true,\n requireConfirmation = false,\n showTodayButton = true,\n activeDates,\n calendarProps,\n id,\n name,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-describedby\": ariaDescribedby,\n ...props\n}: DateRangePickerProps) {\n const [open, setOpen] = React.useState(false)\n const [internalRange, setInternalRange] = React.useState<DateRange | undefined>(defaultValue)\n const [pendingRange, setPendingRange] = React.useState<DateRange | undefined>()\n const [selectedPreset, setSelectedPreset] = React.useState<string>()\n const [month, setMonth] = React.useState<Date | undefined>()\n\n // Use controlled value if provided, otherwise use internal state\n const selectedRange = value ?? internalRange\n\n // For confirmation mode, show pending changes until applied\n const displayRange = requireConfirmation && open ? (pendingRange ?? selectedRange) : selectedRange\n\n // Initialize pending range when opening in confirmation mode\n /* eslint-disable @eslint-react/hooks-extra/no-direct-set-state-in-use-effect, react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-event-handler */\n React.useEffect(() => {\n if (open && requireConfirmation) {\n setPendingRange(selectedRange)\n }\n }, [open, requireConfirmation, selectedRange])\n /* eslint-enable @eslint-react/hooks-extra/no-direct-set-state-in-use-effect, react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-event-handler */\n\n const handleRangeSelect = (range: DateRange | undefined) => {\n // Clear preset selection when manually selecting\n setSelectedPreset(undefined)\n\n if (requireConfirmation) {\n setPendingRange(range)\n } else {\n if (value === undefined) {\n setInternalRange(range)\n }\n onChange?.(range)\n }\n }\n\n const handlePresetSelect = (range: DateRange, label: string) => {\n setSelectedPreset(label)\n\n if (requireConfirmation) {\n setPendingRange(range)\n } else {\n if (value === undefined) {\n setInternalRange(range)\n }\n onChange?.(range)\n setOpen(false)\n }\n }\n\n const handleApply = () => {\n if (pendingRange) {\n if (value === undefined) {\n setInternalRange(pendingRange)\n }\n onChange?.(pendingRange)\n }\n setPendingRange(undefined)\n setOpen(false)\n }\n\n const handleCancel = () => {\n setPendingRange(undefined)\n setSelectedPreset(undefined)\n setOpen(false)\n }\n\n const handleOpenChange = (isOpen: boolean) => {\n // Don't open if readOnly\n if (readOnly && isOpen) return\n\n if (!isOpen && requireConfirmation) {\n // Cancel pending changes when closing without applying\n setPendingRange(undefined)\n setSelectedPreset(undefined)\n }\n\n setOpen(isOpen)\n onOpenChange?.(isOpen)\n }\n\n const handleClear = (event: React.MouseEvent) => {\n event.stopPropagation()\n if (value === undefined) {\n setInternalRange(undefined)\n }\n onChange?.()\n setSelectedPreset(undefined)\n onClear?.()\n }\n\n const handleTodayClick = () => {\n setMonth(startOfMonth(new Date()))\n }\n\n // Format display value\n const formatRange = (range: DateRange | undefined): null | string => {\n if (!range?.from) return null\n\n const formatOptions = locale ? { locale } : undefined\n const formattedFrom = formatDate(range.from, format, formatOptions)\n\n if (!range.to) {\n return formattedFrom\n }\n\n const formattedTo = formatDate(range.to, format, formatOptions)\n return `${formattedFrom} - ${formattedTo}`\n }\n\n const displayValue = formatRange(selectedRange)\n const showClearButton = clearable && selectedRange?.from && !disabled && !readOnly\n\n // Combined date disabled check\n const isDateDisabled = React.useCallback(\n (date: Date): boolean => {\n const normalizedDate = startOfDay(date)\n if (minDate && isBefore(normalizedDate, startOfDay(minDate))) return true\n if (maxDate && isAfter(normalizedDate, startOfDay(maxDate))) return true\n if (disabledDates?.(date)) return true\n return false\n },\n [minDate, maxDate, disabledDates]\n )\n\n // Compute displayed month for calendar (controlled or derived from selection)\n const calendarMonth = month ?? displayRange?.from ?? minDate\n\n // Resolve preset labels for the active locale (DES-1263 — locale-driven, not hardcoded)\n const localizedPresets = presets.map((preset) => ({\n ...preset,\n label: resolvePresetLabel(preset, locale?.code),\n }))\n\n // Shared calendar content for both popover and modal modes\n const calendarContent = (\n <div className=\"flex flex-col sm:flex-row\">\n {showPresets && presets.length > 0 && (\n <DateRangePresets\n presets={localizedPresets}\n selectedPreset={selectedPreset}\n onSelect={handlePresetSelect}\n />\n )}\n <div className=\"flex flex-col\">\n {showTodayButton && (\n <div className=\"flex justify-end border-b px-3 py-2\" data-slot=\"date-range-picker-header\">\n <Button\n className=\"h-[var(--date-range-picker-today-button-height)] text-[length:var(--date-range-picker-today-button-text-size)]\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={handleTodayClick}\n >\n Today\n </Button>\n </div>\n )}\n <Calendar\n autoFocus\n activeDates={activeDates}\n className=\"gap-[var(--date-range-picker-calendar-gap)]\"\n disabled={isDateDisabled}\n locale={locale}\n mode=\"range\"\n month={calendarMonth}\n numberOfMonths={numberOfMonths}\n selected={displayRange}\n onMonthChange={setMonth}\n onSelect={handleRangeSelect as (range: DateRange | undefined) => void}\n {...calendarProps}\n />\n {requireConfirmation && (\n <div className={cn(dateRangePickerFooterVariants())} data-slot=\"date-range-picker-footer\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={handleCancel}\n >\n Cancel\n </Button>\n <Button\n disabled={!pendingRange?.from}\n size=\"sm\"\n variant=\"primary\"\n onClick={handleApply}\n >\n Apply\n </Button>\n </div>\n )}\n </div>\n </div>\n )\n\n // Trigger button shared between modes\n const triggerButton = (\n <button\n ref={ref}\n className={cn(\n dateRangePickerTriggerVariants({ size, variant }),\n !displayValue && \"text-muted-foreground\"\n )}\n aria-describedby={ariaDescribedby}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n aria-invalid={invalid}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-readonly={readOnly}\n aria-required={required}\n data-readonly={readOnly || undefined}\n data-size={size}\n data-slot=\"date-range-picker-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n data-variant={variant}\n disabled={disabled}\n id={id}\n role=\"combobox\"\n type=\"button\"\n onClick={displayMode === \"modal\" ? () => { handleOpenChange(true); } : undefined}\n >\n <span className=\"flex-1 truncate\">\n {displayValue ?? placeholder}\n </span>\n <span className=\"flex shrink-0 items-center gap-1\">\n {showClearButton && (\n <span\n aria-label=\"Clear date range\"\n className=\"rounded-sm opacity-50 hover:opacity-100 focus:outline-none\"\n data-slot=\"date-range-picker-clear\"\n role=\"button\"\n tabIndex={0}\n onClick={handleClear}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n handleClear(e as unknown as React.MouseEvent)\n }\n }}\n >\n <XIcon className=\"size-4\" />\n </span>\n )}\n <CalendarIcon className=\"size-4 opacity-50\" />\n </span>\n </button>\n )\n\n // Hidden inputs for form submission\n const hiddenInputs = (\n <>\n {name && (\n <input\n name={`${name}-from`}\n type=\"hidden\"\n value={selectedRange?.from?.toISOString() ?? \"\"}\n />\n )}\n {name && (\n <input\n name={`${name}-to`}\n type=\"hidden\"\n value={selectedRange?.to?.toISOString() ?? \"\"}\n />\n )}\n </>\n )\n\n // Modal mode\n if (displayMode === \"modal\") {\n return (\n <div className={cn(\"relative\", className)} data-mode=\"modal\" data-slot=\"date-range-picker\" {...props}>\n {triggerButton}\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogContent\n className=\"max-w-fit p-0\"\n data-slot=\"date-range-picker-content\"\n >\n <DialogHeader className=\"border-b px-4 py-3\">\n <DialogTitle>{modalTitle}</DialogTitle>\n <DialogDescription className=\"sr-only\">\n Use the calendar to select a start and end date for your range\n </DialogDescription>\n </DialogHeader>\n <div className=\"p-0\">\n {calendarContent}\n </div>\n </DialogContent>\n </Dialog>\n {hiddenInputs}\n </div>\n )\n }\n\n // Popover mode (default)\n return (\n <div className={cn(\"relative\", className)} data-mode=\"popover\" data-slot=\"date-range-picker\" {...props}>\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n {triggerButton}\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-auto p-0\"\n data-slot=\"date-range-picker-content\"\n >\n {calendarContent}\n </PopoverContent>\n </Popover>\n {hiddenInputs}\n </div>\n )\n}\n\nexport { DateRangePicker }\n","import type { DateRangeInputProps } from \"./DateRangePicker.types\"\n\nimport { format as formatDate, isValid, parse } from \"date-fns\"\nimport { ArrowRightIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n dateRangeInputContainerVariants,\n dateRangeInputFieldVariants,\n} from \"./DateRangePicker.variants\"\n\n/**\n * DateRangeInput component provides editable text inputs for date range entry\n */\nfunction DateRangeInput({\n value,\n format,\n locale,\n onChange,\n disabled = false,\n readOnly = false,\n startPlaceholder = \"Start date\",\n endPlaceholder = \"End date\",\n}: DateRangeInputProps) {\n const [startInput, setStartInput] = React.useState(\"\")\n const [endInput, setEndInput] = React.useState(\"\")\n\n // Sync input values with prop value\n /* eslint-disable react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-adjust-state-on-prop-change, @eslint-react/hooks-extra/no-direct-set-state-in-use-effect -- Intentional: controlled input sync requires useEffect to maintain input state separate from date state for partial input handling */\n React.useEffect(() => {\n if (value?.from) {\n setStartInput(formatDate(value.from, format, locale ? { locale } : undefined))\n } else {\n setStartInput(\"\")\n }\n if (value?.to) {\n setEndInput(formatDate(value.to, format, locale ? { locale } : undefined))\n } else {\n setEndInput(\"\")\n }\n }, [value, format, locale])\n /* eslint-enable react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-adjust-state-on-prop-change, @eslint-react/hooks-extra/no-direct-set-state-in-use-effect */\n\n const parseDate = (input: string): Date | undefined => {\n if (!input.trim()) return undefined\n try {\n const parsed = parse(input, format, new Date(), locale ? { locale } : undefined)\n return isValid(parsed) ? parsed : undefined\n } catch {\n return undefined\n }\n }\n\n const handleStartBlur = () => {\n const parsedStart = parseDate(startInput)\n const currentEnd = value?.to\n\n if (parsedStart || !startInput.trim()) {\n onChange({\n from: parsedStart,\n to: currentEnd,\n })\n } else {\n // Reset to previous value if invalid\n if (value?.from) {\n setStartInput(formatDate(value.from, format, locale ? { locale } : undefined))\n } else {\n setStartInput(\"\")\n }\n }\n }\n\n const handleEndBlur = () => {\n const parsedEnd = parseDate(endInput)\n const currentStart = value?.from\n\n if (parsedEnd || !endInput.trim()) {\n onChange({\n from: currentStart,\n to: parsedEnd,\n })\n } else {\n // Reset to previous value if invalid\n if (value?.to) {\n setEndInput(formatDate(value.to, format, locale ? { locale } : undefined))\n } else {\n setEndInput(\"\")\n }\n }\n }\n\n const handleStartKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleStartBlur()\n }\n }\n\n const handleEndKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleEndBlur()\n }\n }\n\n return (\n <div\n className={cn(dateRangeInputContainerVariants())}\n data-slot=\"date-range-input\"\n >\n <input\n aria-label=\"Start date\"\n className={cn(dateRangeInputFieldVariants())}\n data-slot=\"date-range-input-start\"\n disabled={disabled}\n placeholder={startPlaceholder}\n readOnly={readOnly}\n type=\"text\"\n value={startInput}\n onBlur={handleStartBlur}\n onChange={(e) => { setStartInput(e.target.value); }}\n onKeyDown={handleStartKeyDown}\n />\n <ArrowRightIcon aria-hidden=\"true\" className=\"size-4 text-muted-foreground shrink-0\" />\n <input\n aria-label=\"End date\"\n className={cn(dateRangeInputFieldVariants())}\n data-slot=\"date-range-input-end\"\n disabled={disabled}\n placeholder={endPlaceholder}\n readOnly={readOnly}\n type=\"text\"\n value={endInput}\n onBlur={handleEndBlur}\n onChange={(e) => { setEndInput(e.target.value); }}\n onKeyDown={handleEndKeyDown}\n />\n </div>\n )\n}\n\nexport { DateRangeInput }\n"]}
1
+ {"version":3,"sources":["../src/components/forms/DateRangePicker/DateRangePicker.variants.ts","../src/components/forms/DateRangePicker/DateRangePresets.tsx","../src/components/forms/DateRangePicker/presets.ts","../src/components/forms/DateRangePicker/DateRangePicker.tsx","../src/components/forms/DateRangePicker/DateRangeInput.tsx"],"names":["format","startOfMonth","formatDate","startOfDay","jsx","React2","jsxs"],"mappings":";;;;;;;;;;;AAKO,IAAM,8BAAA,GAAiC,GAAA;AAAA;AAAA,EAE5C;AAAA,IACE,gLAAA;AAAA,IACA,WAAA;AAAA,IACA,mCAAA;AAAA,IACA,8EAAA;AAAA,IACA,+EAAA;AAAA,IACA,wGAAA;AAAA,IACA,2FAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,qLAAA;AAAA,QACJ,EAAA,EAAI,qLAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,yCAAA;AAAA,QACT,OAAA,EAAS,6BAAA;AAAA,QACT,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,IAAA;AAAA,MACN,OAAA,EAAS;AAAA;AACX;AAEJ;AAOO,IAAM,uBAAA,GAA0B,GAAA;AAAA,EACrC;AAAA;AAAA,IAEE,wDAAA;AAAA,IACA,8CAAA;AAAA,IACA,yEAAA;AAAA,IACA,uGAAA;AAAA;AAAA,IAEA,2BAAA;AAAA;AAAA,IAEA;AAAA,GACF;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,iBAAiB;AAAC;AAEtB;AAOO,IAAM,iCAAA,GAAoC,GAAA;AAAA,EAC/C;AAAA;AAAA,IAEE,yCAAA;AAAA,IACA,wBAAA;AAAA,IACA,iDAAA;AAAA;AAAA,IAEA,6DAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,iBAAiB;AAAC;AAEtB;AAKO,IAAM,6BAAA,GAAgC,GAAA;AAAA,EAC3C;AAAA,IACE,4DAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,iBAAiB;AAAC;AAEtB;AAKO,IAAM,+BAAA,GAAkC,GAAA;AAAA,EAC7C;AAAA,IACE;AAAA,GACF;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,iBAAiB;AAAC;AAEtB;AAKO,IAAM,2BAAA,GAA8B,GAAA;AAAA,EACzC;AAAA,IACE,gFAAA;AAAA,IACA,mCAAA;AAAA,IACA,mGAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,aAAA;AAAA,QACJ,EAAA,EAAI,aAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;ACvHA,SAAS,gBAAA,CAAiB;AAAA,EACxB,OAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,oBAAA;AAAA,MACX,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,CAAA;AAAA,MACjD,WAAA,EAAU,oBAAA;AAAA,MACV,IAAA,EAAK,SAAA;AAAA,MAEJ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AACvB,QAAA,MAAM,UAAA,GAAa,mBAAmB,MAAA,CAAO,KAAA;AAC7C,QAAA,uBACE,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,eAAA,EAAe,UAAA;AAAA,YACf,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,CAAA;AAAA,YACvC,iBAAe,UAAA,IAAc,MAAA;AAAA,YAC7B,IAAA,EAAK,QAAA;AAAA,YACL,IAAA,EAAK,QAAA;AAAA,YACL,SAAS,MAAM;AAAE,cAAA,QAAA,CAAS,MAAA,CAAO,QAAA,EAAS,EAAG,MAAA,CAAO,KAAK,CAAA;AAAA,YAAG,CAAA;AAAA,YAE3D,QAAA,EAAA,MAAA,CAAO;AAAA,WAAA;AAAA,UARH,MAAA,CAAO;AAAA,SASd;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH;AAEJ;AClBO,IAAM,cAAA,GAAoC;AAAA,EAC/C;AAAA,IACE,GAAA,EAAK,OAAA;AAAA,IACL,KAAA,EAAO,OAAA;AAAA,IACP,UAAU,MAAM;AACd,MAAA,MAAM,KAAA,GAAQ,UAAA,iBAAW,IAAI,IAAA,EAAM,CAAA;AACnC,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,QAAA,CAAS,KAAK,CAAA,EAAE;AAAA,IAC5C;AAAA,GACF;AAAA,EACA;AAAA,IACE,GAAA,EAAK,WAAA;AAAA,IACL,KAAA,EAAO,WAAA;AAAA,IACP,UAAU,MAAM;AACd,MAAA,MAAM,SAAA,GAAY,OAAA,iBAAQ,IAAI,IAAA,IAAQ,CAAC,CAAA;AACvC,MAAA,OAAO,EAAE,MAAM,UAAA,CAAW,SAAS,GAAG,EAAA,EAAI,QAAA,CAAS,SAAS,CAAA,EAAE;AAAA,IAChE;AAAA,GACF;AAAA,EACA;AAAA,IACE,GAAA,EAAK,UAAA;AAAA,IACL,KAAA,EAAO,WAAA;AAAA,IACP,UAAU,OAAO;AAAA,MACf,IAAA,EAAM,4BAAY,IAAI,IAAA,IAAQ,EAAE,YAAA,EAAc,GAAG,CAAA;AAAA,MACjD,EAAA,EAAI,0BAAU,IAAI,IAAA,IAAQ,EAAE,YAAA,EAAc,GAAG;AAAA,KAC/C;AAAA,GACF;AAAA,EACA;AAAA,IACE,GAAA,EAAK,WAAA;AAAA,IACL,KAAA,EAAO,aAAA;AAAA,IACP,UAAU,OAAO;AAAA,MACf,MAAM,UAAA,CAAW,OAAA,qBAAY,IAAA,EAAK,EAAG,CAAC,CAAC,CAAA;AAAA,MACvC,EAAA,EAAI,QAAA,iBAAS,IAAI,IAAA,EAAM;AAAA,KACzB;AAAA,GACF;AAAA,EACA;AAAA,IACE,GAAA,EAAK,YAAA;AAAA,IACL,KAAA,EAAO,cAAA;AAAA,IACP,UAAU,OAAO;AAAA,MACf,MAAM,UAAA,CAAW,OAAA,qBAAY,IAAA,EAAK,EAAG,EAAE,CAAC,CAAA;AAAA,MACxC,EAAA,EAAI,QAAA,iBAAS,IAAI,IAAA,EAAM;AAAA,KACzB;AAAA,GACF;AAAA,EACA;AAAA,IACE,GAAA,EAAK,YAAA;AAAA,IACL,KAAA,EAAO,cAAA;AAAA,IACP,UAAU,OAAO;AAAA,MACf,MAAM,UAAA,CAAW,OAAA,qBAAY,IAAA,EAAK,EAAG,EAAE,CAAC,CAAA;AAAA,MACxC,EAAA,EAAI,QAAA,iBAAS,IAAI,IAAA,EAAM;AAAA,KACzB;AAAA,GACF;AAAA,EACA;AAAA,IACE,GAAA,EAAK,WAAA;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,UAAU,OAAO;AAAA,MACf,IAAA,EAAM,YAAA,iBAAa,IAAI,IAAA,EAAM,CAAA;AAAA,MAC7B,EAAA,EAAI,UAAA,iBAAW,IAAI,IAAA,EAAM;AAAA,KAC3B;AAAA,GACF;AAAA,EACA;AAAA,IACE,GAAA,EAAK,WAAA;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,UAAU,MAAM;AACd,MAAA,MAAM,SAAA,GAAY,SAAA,iBAAU,IAAI,IAAA,IAAQ,CAAC,CAAA;AACzC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,aAAa,SAAS,CAAA;AAAA,QAC5B,EAAA,EAAI,WAAW,SAAS;AAAA,OAC1B;AAAA,IACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,GAAA,EAAK,UAAA;AAAA,IACL,KAAA,EAAO,WAAA;AAAA,IACP,UAAU,OAAO;AAAA,MACf,IAAA,EAAM,WAAA,iBAAY,IAAI,IAAA,EAAM,CAAA;AAAA,MAC5B,EAAA,EAAI,SAAA,iBAAU,IAAI,IAAA,EAAM;AAAA,KAC1B;AAAA,GACF;AAAA,EACA;AAAA,IACE,GAAA,EAAK,UAAA;AAAA,IACL,KAAA,EAAO,WAAA;AAAA,IACP,UAAU,MAAM;AACd,MAAA,MAAM,QAAA,GAAW,QAAA,iBAAS,IAAI,IAAA,IAAQ,CAAC,CAAA;AACvC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,YAAY,QAAQ,CAAA;AAAA,QAC1B,EAAA,EAAI,UAAU,QAAQ;AAAA,OACxB;AAAA,IACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,GAAA,EAAK,SAAA;AAAA,IACL,KAAA,EAAO,UAAA;AAAA,IACP,UAAU,OAAO;AAAA,MACf,IAAA,EAAM,MAAA;AAAA,MACN,EAAA,EAAI;AAAA,KACN;AAAA,GACF;AAAA,EACA;AAAA,IACE,GAAA,EAAK,QAAA;AAAA,IACL,KAAA,EAAO,QAAA;AAAA,IACP,UAAU,OAAO;AAAA,MACf,IAAA,EAAM,MAAA;AAAA,MACN,EAAA,EAAI;AAAA,KACN;AAAA;AAEJ;AAMA,IAAM,YAAA,GAAuD;AAAA,EAC3D,EAAA,EAAI;AAAA,IACF,KAAA,EAAO,MAAA;AAAA,IACP,SAAA,EAAW,OAAA;AAAA,IACX,QAAA,EAAU,aAAA;AAAA,IACV,SAAA,EAAW,mBAAA;AAAA,IACX,UAAA,EAAY,oBAAA;AAAA,IACZ,UAAA,EAAY,oBAAA;AAAA,IACZ,SAAA,EAAW,aAAA;AAAA,IACX,SAAA,EAAW,gBAAA;AAAA,IACX,QAAA,EAAU,UAAA;AAAA,IACV,QAAA,EAAU,aAAA;AAAA,IACV,OAAA,EAAS,mBAAA;AAAA,IACT,MAAA,EAAQ;AAAA;AAEZ,CAAA;AAMO,SAAS,kBAAA,CAAmB,QAAyB,UAAA,EAA6B;AACvF,EAAA,MAAM,IAAA,GAAO,UAAA,EAAY,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACrC,EAAA,MAAM,UAAA,GAAa,QAAQ,MAAA,CAAO,GAAA,GAAM,aAAa,IAAI,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA;AAC3E,EAAA,OAAO,cAAc,MAAA,CAAO,KAAA;AAC9B;AC7HA,SAAS,eAAA,CAAgB;AAAA,EACvB,GAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA,GAAc,mBAAA;AAAA,EACd,QAAA,GAAW,KAAA;AAAA,EACX,aAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,OAAA;AAAA,EACA,OAAA;AAAA,UACAA,QAAA,GAAS,IAAA;AAAA,EACT,MAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,SAAA;AAAA,EACV,WAAA,GAAc,SAAA;AAAA,EACd,UAAA,GAAa,mBAAA;AAAA,EACb,QAAA,GAAW,KAAA;AAAA,EACX,OAAA,GAAU,KAAA;AAAA,EACV,SAAA,GAAY,KAAA;AAAA,EACZ,cAAA,GAAiB,CAAA;AAAA,EACjB,OAAA,GAAU,cAAA;AAAA,EACV,WAAA,GAAc,IAAA;AAAA,EACd,mBAAA,GAAsB,KAAA;AAAA,EACtB,eAAA,GAAkB,IAAA;AAAA,EAClB,WAAA;AAAA,EACA,aAAA;AAAA,EACA,EAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd,iBAAA,EAAmB,cAAA;AAAA,EACnB,kBAAA,EAAoB,eAAA;AAAA,EACpB,GAAG;AACL,CAAA,EAAyB;AACvB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAU,eAAgC,YAAY,CAAA;AAC5F,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAU,KAAA,CAAA,QAAA,EAAgC;AAC9E,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAU,KAAA,CAAA,QAAA,EAAiB;AACnE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,KAAA,CAAA,QAAA,EAA2B;AAG3D,EAAA,MAAM,gBAAgB,KAAA,IAAS,aAAA;AAG/B,EAAA,MAAM,YAAA,GAAe,mBAAA,IAAuB,IAAA,GAAQ,YAAA,IAAgB,aAAA,GAAiB,aAAA;AAIrF,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,QAAQ,mBAAA,EAAqB;AAC/B,MAAA,eAAA,CAAgB,aAAa,CAAA;AAAA,IAC/B;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,mBAAA,EAAqB,aAAa,CAAC,CAAA;AAG7C,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAiC;AAE1D,IAAA,iBAAA,CAAkB,MAAS,CAAA;AAE3B,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACvB,CAAA,MAAO;AACL,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,MACxB;AACA,MAAA,QAAA,GAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,EAAkB,KAAA,KAAkB;AAC9D,IAAA,iBAAA,CAAkB,KAAK,CAAA;AAEvB,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACvB,CAAA,MAAO;AACL,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,MACxB;AACA,MAAA,QAAA,GAAW,KAAK,CAAA;AAChB,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,gBAAA,CAAiB,YAAY,CAAA;AAAA,MAC/B;AACA,MAAA,QAAA,GAAW,YAAY,CAAA;AAAA,IACzB;AACA,IAAA,eAAA,CAAgB,MAAS,CAAA;AACzB,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,eAAA,CAAgB,MAAS,CAAA;AACzB,IAAA,iBAAA,CAAkB,MAAS,CAAA;AAC3B,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,MAAA,KAAoB;AAE5C,IAAA,IAAI,YAAY,MAAA,EAAQ;AAExB,IAAA,IAAI,CAAC,UAAU,mBAAA,EAAqB;AAElC,MAAA,eAAA,CAAgB,MAAS,CAAA;AACzB,MAAA,iBAAA,CAAkB,MAAS,CAAA;AAAA,IAC7B;AAEA,IAAA,OAAA,CAAQ,MAAM,CAAA;AACd,IAAA,YAAA,GAAe,MAAM,CAAA;AAAA,EACvB,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAA4B;AAC/C,IAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,gBAAA,CAAiB,MAAS,CAAA;AAAA,IAC5B;AACA,IAAA,QAAA,IAAW;AACX,IAAA,iBAAA,CAAkB,MAAS,CAAA;AAC3B,IAAA,OAAA,IAAU;AAAA,EACZ,CAAA;AAEA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,QAAA,CAASC,YAAAA,iBAAa,IAAI,IAAA,EAAM,CAAC,CAAA;AAAA,EACnC,CAAA;AAGA,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAgD;AACnE,IAAA,IAAI,CAAC,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA;AAEzB,IAAA,MAAM,aAAA,GAAgB,MAAA,GAAS,EAAE,MAAA,EAAO,GAAI,MAAA;AAC5C,IAAA,MAAM,aAAA,GAAgBC,MAAA,CAAW,KAAA,CAAM,IAAA,EAAMF,UAAQ,aAAa,CAAA;AAElE,IAAA,IAAI,CAAC,MAAM,EAAA,EAAI;AACb,MAAA,OAAO,aAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAAA,GAAcE,MAAA,CAAW,KAAA,CAAM,EAAA,EAAIF,UAAQ,aAAa,CAAA;AAC9D,IAAA,OAAO,CAAA,EAAG,aAAa,CAAA,GAAA,EAAM,WAAW,CAAA,CAAA;AAAA,EAC1C,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,YAAY,aAAa,CAAA;AAC9C,EAAA,MAAM,kBAAkB,SAAA,IAAa,aAAA,EAAe,IAAA,IAAQ,CAAC,YAAY,CAAC,QAAA;AAG1E,EAAA,MAAM,cAAA,GAAuB,KAAA,CAAA,WAAA;AAAA,IAC3B,CAAC,IAAA,KAAwB;AACvB,MAAA,MAAM,cAAA,GAAiBG,WAAW,IAAI,CAAA;AACtC,MAAA,IAAI,WAAW,QAAA,CAAS,cAAA,EAAgBA,WAAW,OAAO,CAAC,GAAG,OAAO,IAAA;AACrE,MAAA,IAAI,WAAW,OAAA,CAAQ,cAAA,EAAgBA,WAAW,OAAO,CAAC,GAAG,OAAO,IAAA;AACpE,MAAA,IAAI,aAAA,GAAgB,IAAI,CAAA,EAAG,OAAO,IAAA;AAClC,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,OAAA,EAAS,OAAA,EAAS,aAAa;AAAA,GAClC;AAGA,EAAA,MAAM,aAAA,GAAgB,KAAA,IAAS,YAAA,EAAc,IAAA,IAAQ,OAAA;AAGrD,EAAA,MAAM,gBAAA,GAAmB,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,IAChD,GAAG,MAAA;AAAA,IACH,KAAA,EAAO,kBAAA,CAAmB,MAAA,EAAQ,MAAA,EAAQ,IAAI;AAAA,GAChD,CAAE,CAAA;AAGF,EAAA,MAAM,eAAA,mBACJ,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACZ,QAAA,EAAA;AAAA,IAAA,WAAA,IAAe,OAAA,CAAQ,MAAA,GAAS,CAAA,oBAC/BC,GAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,gBAAA;AAAA,QACT,cAAA;AAAA,QACA,QAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBAEF,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACZ,QAAA,EAAA;AAAA,MAAA,eAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qCAAA,EAAsC,WAAA,EAAU,4BAC7D,QAAA,kBAAAA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,gHAAA;AAAA,UACV,IAAA,EAAK,IAAA;AAAA,UACL,OAAA,EAAQ,OAAA;AAAA,UACR,OAAA,EAAS,gBAAA;AAAA,UACV,QAAA,EAAA;AAAA;AAAA,OAED,EACF,CAAA;AAAA,sBAEFA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAS,IAAA;AAAA,UACT,WAAA;AAAA,UACA,SAAA,EAAU,6CAAA;AAAA,UACV,QAAA,EAAU,cAAA;AAAA,UACV,MAAA;AAAA,UACA,IAAA,EAAK,OAAA;AAAA,UACL,KAAA,EAAO,aAAA;AAAA,UACP,cAAA;AAAA,UACA,QAAA,EAAU,YAAA;AAAA,UACV,aAAA,EAAe,QAAA;AAAA,UACf,QAAA,EAAU,iBAAA;AAAA,UACT,GAAG;AAAA;AAAA,OACN;AAAA,MACC,mBAAA,yBACE,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,6BAAA,EAA+B,CAAA,EAAG,WAAA,EAAU,0BAAA,EAC7D,QAAA,EAAA;AAAA,wBAAAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAQ,SAAA;AAAA,YACR,OAAA,EAAS,YAAA;AAAA,YACV,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAU,CAAC,YAAA,EAAc,IAAA;AAAA,YACzB,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAQ,SAAA;AAAA,YACR,OAAA,EAAS,WAAA;AAAA,YACV,QAAA,EAAA;AAAA;AAAA;AAED,OAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAIF,EAAA,MAAM,aAAA,mBACJ,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,8BAAA,CAA+B,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA;AAAA,QAChD,CAAC,YAAA,IAAgB;AAAA,OACnB;AAAA,MACA,kBAAA,EAAkB,eAAA;AAAA,MAClB,eAAA,EAAe,IAAA;AAAA,MACf,eAAA,EAAc,QAAA;AAAA,MACd,cAAA,EAAc,OAAA;AAAA,MACd,YAAA,EAAY,SAAA;AAAA,MACZ,iBAAA,EAAiB,cAAA;AAAA,MACjB,eAAA,EAAe,QAAA;AAAA,MACf,eAAA,EAAe,QAAA;AAAA,MACf,iBAAe,QAAA,IAAY,MAAA;AAAA,MAC3B,WAAA,EAAW,IAAA;AAAA,MACX,WAAA,EAAU,2BAAA;AAAA,MACV,YAAA,EAAY,OAAO,MAAA,GAAS,QAAA;AAAA,MAC5B,cAAA,EAAc,OAAA;AAAA,MACd,QAAA;AAAA,MACA,EAAA;AAAA,MACA,IAAA,EAAK,UAAA;AAAA,MACL,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,WAAA,KAAgB,OAAA,GAAU,MAAM;AAAE,QAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,MAAG,CAAA,GAAI,MAAA;AAAA,MAEvE,QAAA,EAAA;AAAA,wBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EACb,0BAAgB,WAAA,EACnB,CAAA;AAAA,wBACA,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,UAAA,eAAA,oBACCA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,YAAA,EAAW,kBAAA;AAAA,cACX,SAAA,EAAU,4DAAA;AAAA,cACV,WAAA,EAAU,yBAAA;AAAA,cACV,IAAA,EAAK,QAAA;AAAA,cACL,QAAA,EAAU,CAAA;AAAA,cACV,OAAA,EAAS,WAAA;AAAA,cACT,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,gBAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,kBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,kBAAA,WAAA,CAAY,CAAgC,CAAA;AAAA,gBAC9C;AAAA,cACF,CAAA;AAAA,cAEA,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA,WAC5B;AAAA,0BAEFA,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,mBAAA,EAAoB;AAAA,SAAA,EAC9C;AAAA;AAAA;AAAA,GACF;AAIF,EAAA,MAAM,+BACJ,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,IAAA,oBACCA,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,GAAG,IAAI,CAAA,KAAA,CAAA;AAAA,QACb,IAAA,EAAK,QAAA;AAAA,QACL,KAAA,EAAO,aAAA,EAAe,IAAA,EAAM,WAAA,EAAY,IAAK;AAAA;AAAA,KAC/C;AAAA,IAED,wBACCA,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,GAAG,IAAI,CAAA,GAAA,CAAA;AAAA,QACb,IAAA,EAAK,QAAA;AAAA,QACL,KAAA,EAAO,aAAA,EAAe,EAAA,EAAI,WAAA,EAAY,IAAK;AAAA;AAAA;AAC7C,GAAA,EAEJ,CAAA;AAIF,EAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA,EAAG,WAAA,EAAU,OAAA,EAAQ,WAAA,EAAU,mBAAA,EAAqB,GAAG,KAAA,EAC5F,QAAA,EAAA;AAAA,MAAA,aAAA;AAAA,sBACDA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAY,cAAc,gBAAA,EAChC,QAAA,kBAAA,IAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,eAAA;AAAA,UACV,WAAA,EAAU,2BAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,YAAA,EAAA,EAAa,WAAU,oBAAA,EACtB,QAAA,EAAA;AAAA,8BAAAA,GAAAA,CAAC,eAAa,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,8BACzBA,GAAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAU,WAAU,QAAA,EAAA,gEAAA,EAEvC;AAAA,aAAA,EACF,CAAA;AAAA,4BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,OACZ,QAAA,EAAA,eAAA,EACH;AAAA;AAAA;AAAA,OACF,EACF,CAAA;AAAA,MACC;AAAA,KAAA,EACH,CAAA;AAAA,EAEJ;AAGA,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA,EAAG,WAAA,EAAU,SAAA,EAAU,WAAA,EAAU,mBAAA,EAAqB,GAAG,KAAA,EAC/F,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,YAAA,EAAc,gBAAA,EACjC,QAAA,EAAA;AAAA,sBAAAA,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACpB,QAAA,EAAA,aAAA,EACH,CAAA;AAAA,sBACAA,GAAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,OAAA;AAAA,UACN,SAAA,EAAU,YAAA;AAAA,UACV,WAAA,EAAU,2BAAA;AAAA,UAET,QAAA,EAAA;AAAA;AAAA;AACH,KAAA,EACF,CAAA;AAAA,IACC;AAAA,GAAA,EACH,CAAA;AAEJ;AC7WA,SAAS,cAAA,CAAe;AAAA,EACtB,KAAA;AAAA,UACAJ,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,QAAA,GAAW,KAAA;AAAA,EACX,gBAAA,GAAmB,YAAA;AAAA,EACnB,cAAA,GAAiB;AACnB,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUK,eAAS,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAUA,eAAS,EAAE,CAAA;AAIjD,EAAMA,gBAAU,MAAM;AACpB,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,aAAA,CAAcH,MAAAA,CAAW,MAAM,IAAA,EAAMF,QAAA,EAAQ,SAAS,EAAE,MAAA,EAAO,GAAI,MAAS,CAAC,CAAA;AAAA,IAC/E,CAAA,MAAO;AACL,MAAA,aAAA,CAAc,EAAE,CAAA;AAAA,IAClB;AACA,IAAA,IAAI,OAAO,EAAA,EAAI;AACb,MAAA,WAAA,CAAYE,MAAAA,CAAW,MAAM,EAAA,EAAIF,QAAA,EAAQ,SAAS,EAAE,MAAA,EAAO,GAAI,MAAS,CAAC,CAAA;AAAA,IAC3E,CAAA,MAAO;AACL,MAAA,WAAA,CAAY,EAAE,CAAA;AAAA,IAChB;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAOA,QAAA,EAAQ,MAAM,CAAC,CAAA;AAG1B,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAoC;AACrD,IAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAK,EAAG,OAAO,MAAA;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,EAAOA,QAAA,kBAAQ,IAAI,IAAA,EAAK,EAAG,MAAA,GAAS,EAAE,MAAA,EAAO,GAAI,KAAA,CAAS,CAAA;AAC/E,MAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,GAAI,MAAA,GAAS,KAAA,CAAA;AAAA,IACpC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,MAAM,WAAA,GAAc,UAAU,UAAU,CAAA;AACxC,IAAA,MAAM,aAAa,KAAA,EAAO,EAAA;AAE1B,IAAA,IAAI,WAAA,IAAe,CAAC,UAAA,CAAW,IAAA,EAAK,EAAG;AACrC,MAAA,QAAA,CAAS;AAAA,QACP,IAAA,EAAM,WAAA;AAAA,QACN,EAAA,EAAI;AAAA,OACL,CAAA;AAAA,IACH,CAAA,MAAO;AAEL,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,aAAA,CAAcE,MAAAA,CAAW,MAAM,IAAA,EAAMF,QAAA,EAAQ,SAAS,EAAE,MAAA,EAAO,GAAI,MAAS,CAAC,CAAA;AAAA,MAC/E,CAAA,MAAO;AACL,QAAA,aAAA,CAAc,EAAE,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,MAAM,SAAA,GAAY,UAAU,QAAQ,CAAA;AACpC,IAAA,MAAM,eAAe,KAAA,EAAO,IAAA;AAE5B,IAAA,IAAI,SAAA,IAAa,CAAC,QAAA,CAAS,IAAA,EAAK,EAAG;AACjC,MAAA,QAAA,CAAS;AAAA,QACP,IAAA,EAAM,YAAA;AAAA,QACN,EAAA,EAAI;AAAA,OACL,CAAA;AAAA,IACH,CAAA,MAAO;AAEL,MAAA,IAAI,OAAO,EAAA,EAAI;AACb,QAAA,WAAA,CAAYE,MAAAA,CAAW,MAAM,EAAA,EAAIF,QAAA,EAAQ,SAAS,EAAE,MAAA,EAAO,GAAI,MAAS,CAAC,CAAA;AAAA,MAC3E,CAAA,MAAO;AACL,QAAA,WAAA,CAAY,EAAE,CAAA;AAAA,MAChB;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAA6C;AACvE,IAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,MAAA,eAAA,EAAgB;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAA6C;AACrE,IAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,MAAA,aAAA,EAAc;AAAA,IAChB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEM,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,CAAA;AAAA,MAC/C,WAAA,EAAU,kBAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAF,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,YAAA,EAAW,YAAA;AAAA,YACX,SAAA,EAAW,EAAA,CAAG,2BAAA,EAA6B,CAAA;AAAA,YAC3C,WAAA,EAAU,wBAAA;AAAA,YACV,QAAA;AAAA,YACA,WAAA,EAAa,gBAAA;AAAA,YACb,QAAA;AAAA,YACA,IAAA,EAAK,MAAA;AAAA,YACL,KAAA,EAAO,UAAA;AAAA,YACP,MAAA,EAAQ,eAAA;AAAA,YACR,QAAA,EAAU,CAAC,CAAA,KAAM;AAAE,cAAA,aAAA,CAAc,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAAG,CAAA;AAAA,YAClD,SAAA,EAAW;AAAA;AAAA,SACb;AAAA,wBACAA,GAAAA,CAAC,cAAA,EAAA,EAAe,aAAA,EAAY,MAAA,EAAO,WAAU,uCAAA,EAAwC,CAAA;AAAA,wBACrFA,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,YAAA,EAAW,UAAA;AAAA,YACX,SAAA,EAAW,EAAA,CAAG,2BAAA,EAA6B,CAAA;AAAA,YAC3C,WAAA,EAAU,sBAAA;AAAA,YACV,QAAA;AAAA,YACA,WAAA,EAAa,cAAA;AAAA,YACb,QAAA;AAAA,YACA,IAAA,EAAK,MAAA;AAAA,YACL,KAAA,EAAO,QAAA;AAAA,YACP,MAAA,EAAQ,aAAA;AAAA,YACR,QAAA,EAAU,CAAC,CAAA,KAAM;AAAE,cAAA,WAAA,CAAY,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAAG,CAAA;AAAA,YAChD,SAAA,EAAW;AAAA;AAAA;AACb;AAAA;AAAA,GACF;AAEJ","file":"chunk-IRFAIJLV.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * DateRangePicker trigger variant styles using CVA\n */\nexport const dateRangePickerTriggerVariants = cva(\n // Base styles\n [\n \"inline-flex w-full items-center justify-between gap-2 rounded-[var(--date-picker-trigger-radius)] border bg-transparent font-normal transition-[color,box-shadow] outline-none\",\n \"text-left\",\n \"placeholder:text-muted-foreground\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"data-[state=open]:border-ring data-[state=open]:ring-ring/50 data-[state=open]:ring-[3px]\",\n \"min-w-[var(--date-range-picker-trigger-width)]\",\n ],\n {\n variants: {\n size: {\n sm: \"h-[var(--date-picker-trigger-height-sm)] px-[var(--date-picker-trigger-padding-x-sm)] py-[var(--date-picker-trigger-padding-y-sm)] text-[length:var(--date-picker-trigger-text-sm)]\",\n md: \"h-[var(--date-picker-trigger-height-md)] px-[var(--date-picker-trigger-padding-x-md)] py-[var(--date-picker-trigger-padding-y-md)] text-[length:var(--date-picker-trigger-text-md)]\",\n lg: \"h-[var(--date-picker-trigger-height-lg)] px-[var(--date-picker-trigger-padding-x-lg)] py-[var(--date-picker-trigger-padding-y-lg)] text-[length:var(--date-picker-trigger-text-lg)]\",\n },\n variant: {\n default: \"border-input shadow-xs dark:bg-input/30\",\n outline: \"border-input bg-transparent\",\n ghost: \"border-transparent hover:bg-accent\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n)\n\nexport type DateRangePickerTriggerVariantProps = VariantProps<typeof dateRangePickerTriggerVariants>\n\n/**\n * Preset item styles - horizontal scrollable tabs on mobile, vertical list on desktop\n */\nexport const dateRangePresetVariants = cva(\n [\n // Base - works for both orientations\n \"text-sm rounded-md transition-colors whitespace-nowrap\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"data-[selected=true]:bg-primary/10 data-[selected=true]:text-primary data-[selected=true]:font-medium\",\n // Mobile: pill-like compact tabs\n \"px-3 py-1.5 flex-shrink-0\",\n // Desktop (sm+): full-width list items\n \"sm:w-full sm:text-left sm:py-2\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\nexport type DateRangePresetVariantProps = VariantProps<typeof dateRangePresetVariants>\n\n/**\n * Presets container styles - horizontal scrollable on mobile, vertical sidebar on desktop\n */\nexport const dateRangePresetsContainerVariants = cva(\n [\n // Mobile: horizontal scrollable tabs\n \"flex flex-row gap-1 p-2 overflow-x-auto\",\n \"border-b border-border\",\n \"-webkit-overflow-scrolling-touch scrollbar-hide\",\n // Desktop (sm+): vertical sidebar\n \"sm:flex-col sm:overflow-x-visible sm:border-b-0 sm:border-r\",\n \"sm:min-w-[var(--date-picker-preset-min-width)]\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * Footer container styles (for Apply/Cancel buttons)\n */\nexport const dateRangePickerFooterVariants = cva(\n [\n \"flex items-center justify-end gap-2 border-t border-border\",\n \"p-[var(--date-picker-footer-padding)]\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * Range input container styles\n */\nexport const dateRangeInputContainerVariants = cva(\n [\n \"flex items-center gap-2\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * Range input field styles\n */\nexport const dateRangeInputFieldVariants = cva(\n [\n \"flex-1 min-w-0 rounded-md border border-input bg-transparent px-2 py-1 text-sm\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {\n size: {\n sm: \"h-7 text-xs\",\n md: \"h-8 text-sm\",\n lg: \"h-9 text-base\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\nexport type DateRangeInputFieldVariantProps = VariantProps<typeof dateRangeInputFieldVariants>\n","import type { DateRangePresetsProps } from \"./DateRangePicker.types\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n dateRangePresetsContainerVariants,\n dateRangePresetVariants,\n} from \"./DateRangePicker.variants\"\n\n/**\n * DateRangePresets component displays a list of quick-select preset date ranges\n */\nfunction DateRangePresets({\n presets,\n selectedPreset,\n onSelect,\n}: DateRangePresetsProps) {\n return (\n <div\n aria-label=\"Date range presets\"\n className={cn(dateRangePresetsContainerVariants())}\n data-slot=\"date-range-presets\"\n role=\"listbox\"\n >\n {presets.map((preset) => {\n const isSelected = selectedPreset === preset.label\n return (\n <button\n key={preset.label}\n aria-selected={isSelected}\n className={cn(dateRangePresetVariants())}\n data-selected={isSelected || undefined}\n role=\"option\"\n type=\"button\"\n onClick={() => { onSelect(preset.getValue(), preset.label); }}\n >\n {preset.label}\n </button>\n )\n })}\n </div>\n )\n}\n\nexport { DateRangePresets }\n","import type { DateRangePreset } from \"./DateRangePicker.types\"\n\nimport {\n endOfDay,\n endOfMonth,\n endOfWeek,\n endOfYear,\n startOfDay,\n startOfMonth,\n startOfWeek,\n startOfYear,\n subDays,\n subMonths,\n subYears,\n} from \"date-fns\"\n\n/**\n * Default preset options for quick date range selection.\n *\n * Each preset carries a canonical `key`; the visible label is resolved per locale via\n * {@link resolvePresetLabel} (DES-1263 — locale-driven, not hardcoded). The English `label`\n * here is the fallback. `custom` (pt: \"Fixo\") clears the range for manual selection.\n */\nexport const defaultPresets: DateRangePreset[] = [\n {\n key: \"today\",\n label: \"Today\",\n getValue: () => {\n const today = startOfDay(new Date())\n return { from: today, to: endOfDay(today) }\n },\n },\n {\n key: \"yesterday\",\n label: \"Yesterday\",\n getValue: () => {\n const yesterday = subDays(new Date(), 1)\n return { from: startOfDay(yesterday), to: endOfDay(yesterday) }\n },\n },\n {\n key: \"thisWeek\",\n label: \"This week\",\n getValue: () => ({\n from: startOfWeek(new Date(), { weekStartsOn: 0 }),\n to: endOfWeek(new Date(), { weekStartsOn: 0 }),\n }),\n },\n {\n key: \"last7Days\",\n label: \"Last 7 days\",\n getValue: () => ({\n from: startOfDay(subDays(new Date(), 6)),\n to: endOfDay(new Date()),\n }),\n },\n {\n key: \"last14Days\",\n label: \"Last 14 days\",\n getValue: () => ({\n from: startOfDay(subDays(new Date(), 13)),\n to: endOfDay(new Date()),\n }),\n },\n {\n key: \"last30Days\",\n label: \"Last 30 days\",\n getValue: () => ({\n from: startOfDay(subDays(new Date(), 29)),\n to: endOfDay(new Date()),\n }),\n },\n {\n key: \"thisMonth\",\n label: \"This month\",\n getValue: () => ({\n from: startOfMonth(new Date()),\n to: endOfMonth(new Date()),\n }),\n },\n {\n key: \"lastMonth\",\n label: \"Last month\",\n getValue: () => {\n const lastMonth = subMonths(new Date(), 1)\n return {\n from: startOfMonth(lastMonth),\n to: endOfMonth(lastMonth),\n }\n },\n },\n {\n key: \"thisYear\",\n label: \"This year\",\n getValue: () => ({\n from: startOfYear(new Date()),\n to: endOfYear(new Date()),\n }),\n },\n {\n key: \"lastYear\",\n label: \"Last year\",\n getValue: () => {\n const lastYear = subYears(new Date(), 1)\n return {\n from: startOfYear(lastYear),\n to: endOfYear(lastYear),\n }\n },\n },\n {\n key: \"allTime\",\n label: \"All time\",\n getValue: () => ({\n from: undefined,\n to: undefined,\n }),\n },\n {\n key: \"custom\",\n label: \"Custom\",\n getValue: () => ({\n from: undefined,\n to: undefined,\n }),\n },\n]\n\n/**\n * Preset label translations (DES-1263). Keyed by language code (locale.code split on \"-\").\n * English labels live on the presets themselves and act as the fallback.\n */\nconst presetLabels: Record<string, Record<string, string>> = {\n pt: {\n today: \"Hoje\",\n yesterday: \"Ontem\",\n thisWeek: \"Esta semana\",\n last7Days: \"Últimos 7 dias\",\n last14Days: \"Últimos 14 dias\",\n last30Days: \"Últimos 30 dias\",\n thisMonth: \"Este mês\",\n lastMonth: \"Mês passado\",\n thisYear: \"Este ano\",\n lastYear: \"Ano passado\",\n allTime: \"Todo o período\",\n custom: \"Fixo\",\n },\n}\n\n/**\n * Resolves a preset's display label for the given locale code (e.g. \"pt-BR\").\n * Falls back to the preset's own English `label` when no translation exists.\n */\nexport function resolvePresetLabel(preset: DateRangePreset, localeCode?: string): string {\n const lang = localeCode?.split(\"-\")[0]\n const translated = lang && preset.key ? presetLabels[lang]?.[preset.key] : undefined\n return translated ?? preset.label\n}\n","import type { DateRange } from \"../../advanced/Calendar\"\nimport type { DateRangePickerProps } from \"./DateRangePicker.types\"\n\nimport { format as formatDate, isAfter, isBefore, startOfDay, startOfMonth } from \"date-fns\"\nimport { CalendarIcon, XIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Calendar } from \"../../advanced/Calendar\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"../../feedback/Dialog\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../../feedback/Popover\"\nimport { Button } from \"../../primitives/Button\"\nimport {\n dateRangePickerFooterVariants,\n dateRangePickerTriggerVariants,\n} from \"./DateRangePicker.variants\"\nimport { DateRangePresets } from \"./DateRangePresets\"\nimport { defaultPresets, resolvePresetLabel } from \"./presets\"\n\n/**\n * DateRangePicker component for selecting a date range with optional presets\n */\nfunction DateRangePicker({\n ref,\n className,\n value,\n defaultValue,\n placeholder = \"Select date range\",\n disabled = false,\n disabledDates,\n readOnly = false,\n minDate,\n maxDate,\n format = \"PP\",\n locale,\n onChange,\n onOpenChange,\n onClear,\n size = \"md\",\n variant = \"default\",\n displayMode = \"popover\",\n modalTitle = \"Select Date Range\",\n required = false,\n invalid = false,\n clearable = false,\n numberOfMonths = 2,\n presets = defaultPresets,\n showPresets = true,\n requireConfirmation = false,\n showTodayButton = true,\n activeDates,\n calendarProps,\n id,\n name,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-describedby\": ariaDescribedby,\n ...props\n}: DateRangePickerProps) {\n const [open, setOpen] = React.useState(false)\n const [internalRange, setInternalRange] = React.useState<DateRange | undefined>(defaultValue)\n const [pendingRange, setPendingRange] = React.useState<DateRange | undefined>()\n const [selectedPreset, setSelectedPreset] = React.useState<string>()\n const [month, setMonth] = React.useState<Date | undefined>()\n\n // Use controlled value if provided, otherwise use internal state\n const selectedRange = value ?? internalRange\n\n // For confirmation mode, show pending changes until applied\n const displayRange = requireConfirmation && open ? (pendingRange ?? selectedRange) : selectedRange\n\n // Initialize pending range when opening in confirmation mode\n /* eslint-disable @eslint-react/hooks-extra/no-direct-set-state-in-use-effect, react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-event-handler */\n React.useEffect(() => {\n if (open && requireConfirmation) {\n setPendingRange(selectedRange)\n }\n }, [open, requireConfirmation, selectedRange])\n /* eslint-enable @eslint-react/hooks-extra/no-direct-set-state-in-use-effect, react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-event-handler */\n\n const handleRangeSelect = (range: DateRange | undefined) => {\n // Clear preset selection when manually selecting\n setSelectedPreset(undefined)\n\n if (requireConfirmation) {\n setPendingRange(range)\n } else {\n if (value === undefined) {\n setInternalRange(range)\n }\n onChange?.(range)\n }\n }\n\n const handlePresetSelect = (range: DateRange, label: string) => {\n setSelectedPreset(label)\n\n if (requireConfirmation) {\n setPendingRange(range)\n } else {\n if (value === undefined) {\n setInternalRange(range)\n }\n onChange?.(range)\n setOpen(false)\n }\n }\n\n const handleApply = () => {\n if (pendingRange) {\n if (value === undefined) {\n setInternalRange(pendingRange)\n }\n onChange?.(pendingRange)\n }\n setPendingRange(undefined)\n setOpen(false)\n }\n\n const handleCancel = () => {\n setPendingRange(undefined)\n setSelectedPreset(undefined)\n setOpen(false)\n }\n\n const handleOpenChange = (isOpen: boolean) => {\n // Don't open if readOnly\n if (readOnly && isOpen) return\n\n if (!isOpen && requireConfirmation) {\n // Cancel pending changes when closing without applying\n setPendingRange(undefined)\n setSelectedPreset(undefined)\n }\n\n setOpen(isOpen)\n onOpenChange?.(isOpen)\n }\n\n const handleClear = (event: React.MouseEvent) => {\n event.stopPropagation()\n if (value === undefined) {\n setInternalRange(undefined)\n }\n onChange?.()\n setSelectedPreset(undefined)\n onClear?.()\n }\n\n const handleTodayClick = () => {\n setMonth(startOfMonth(new Date()))\n }\n\n // Format display value\n const formatRange = (range: DateRange | undefined): null | string => {\n if (!range?.from) return null\n\n const formatOptions = locale ? { locale } : undefined\n const formattedFrom = formatDate(range.from, format, formatOptions)\n\n if (!range.to) {\n return formattedFrom\n }\n\n const formattedTo = formatDate(range.to, format, formatOptions)\n return `${formattedFrom} - ${formattedTo}`\n }\n\n const displayValue = formatRange(selectedRange)\n const showClearButton = clearable && selectedRange?.from && !disabled && !readOnly\n\n // Combined date disabled check\n const isDateDisabled = React.useCallback(\n (date: Date): boolean => {\n const normalizedDate = startOfDay(date)\n if (minDate && isBefore(normalizedDate, startOfDay(minDate))) return true\n if (maxDate && isAfter(normalizedDate, startOfDay(maxDate))) return true\n if (disabledDates?.(date)) return true\n return false\n },\n [minDate, maxDate, disabledDates]\n )\n\n // Compute displayed month for calendar (controlled or derived from selection)\n const calendarMonth = month ?? displayRange?.from ?? minDate\n\n // Resolve preset labels for the active locale (DES-1263 — locale-driven, not hardcoded)\n const localizedPresets = presets.map((preset) => ({\n ...preset,\n label: resolvePresetLabel(preset, locale?.code),\n }))\n\n // Shared calendar content for both popover and modal modes\n const calendarContent = (\n <div className=\"flex flex-col sm:flex-row\">\n {showPresets && presets.length > 0 && (\n <DateRangePresets\n presets={localizedPresets}\n selectedPreset={selectedPreset}\n onSelect={handlePresetSelect}\n />\n )}\n <div className=\"flex flex-col\">\n {showTodayButton && (\n <div className=\"flex justify-end border-b px-3 py-2\" data-slot=\"date-range-picker-header\">\n <Button\n className=\"h-[var(--date-range-picker-today-button-height)] text-[length:var(--date-range-picker-today-button-text-size)]\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={handleTodayClick}\n >\n Today\n </Button>\n </div>\n )}\n <Calendar\n autoFocus\n activeDates={activeDates}\n className=\"gap-[var(--date-range-picker-calendar-gap)]\"\n disabled={isDateDisabled}\n locale={locale}\n mode=\"range\"\n month={calendarMonth}\n numberOfMonths={numberOfMonths}\n selected={displayRange}\n onMonthChange={setMonth}\n onSelect={handleRangeSelect as (range: DateRange | undefined) => void}\n {...calendarProps}\n />\n {requireConfirmation && (\n <div className={cn(dateRangePickerFooterVariants())} data-slot=\"date-range-picker-footer\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={handleCancel}\n >\n Cancel\n </Button>\n <Button\n disabled={!pendingRange?.from}\n size=\"sm\"\n variant=\"primary\"\n onClick={handleApply}\n >\n Apply\n </Button>\n </div>\n )}\n </div>\n </div>\n )\n\n // Trigger button shared between modes\n const triggerButton = (\n <button\n ref={ref}\n className={cn(\n dateRangePickerTriggerVariants({ size, variant }),\n !displayValue && \"text-muted-foreground\"\n )}\n aria-describedby={ariaDescribedby}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n aria-invalid={invalid}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-readonly={readOnly}\n aria-required={required}\n data-readonly={readOnly || undefined}\n data-size={size}\n data-slot=\"date-range-picker-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n data-variant={variant}\n disabled={disabled}\n id={id}\n role=\"combobox\"\n type=\"button\"\n onClick={displayMode === \"modal\" ? () => { handleOpenChange(true); } : undefined}\n >\n <span className=\"flex-1 truncate\">\n {displayValue ?? placeholder}\n </span>\n <span className=\"flex shrink-0 items-center gap-1\">\n {showClearButton && (\n <span\n aria-label=\"Clear date range\"\n className=\"rounded-sm opacity-50 hover:opacity-100 focus:outline-none\"\n data-slot=\"date-range-picker-clear\"\n role=\"button\"\n tabIndex={0}\n onClick={handleClear}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n handleClear(e as unknown as React.MouseEvent)\n }\n }}\n >\n <XIcon className=\"size-4\" />\n </span>\n )}\n <CalendarIcon className=\"size-4 opacity-50\" />\n </span>\n </button>\n )\n\n // Hidden inputs for form submission\n const hiddenInputs = (\n <>\n {name && (\n <input\n name={`${name}-from`}\n type=\"hidden\"\n value={selectedRange?.from?.toISOString() ?? \"\"}\n />\n )}\n {name && (\n <input\n name={`${name}-to`}\n type=\"hidden\"\n value={selectedRange?.to?.toISOString() ?? \"\"}\n />\n )}\n </>\n )\n\n // Modal mode\n if (displayMode === \"modal\") {\n return (\n <div className={cn(\"relative\", className)} data-mode=\"modal\" data-slot=\"date-range-picker\" {...props}>\n {triggerButton}\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogContent\n className=\"max-w-fit p-0\"\n data-slot=\"date-range-picker-content\"\n >\n <DialogHeader className=\"border-b px-4 py-3\">\n <DialogTitle>{modalTitle}</DialogTitle>\n <DialogDescription className=\"sr-only\">\n Use the calendar to select a start and end date for your range\n </DialogDescription>\n </DialogHeader>\n <div className=\"p-0\">\n {calendarContent}\n </div>\n </DialogContent>\n </Dialog>\n {hiddenInputs}\n </div>\n )\n }\n\n // Popover mode (default)\n return (\n <div className={cn(\"relative\", className)} data-mode=\"popover\" data-slot=\"date-range-picker\" {...props}>\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n {triggerButton}\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-auto p-0\"\n data-slot=\"date-range-picker-content\"\n >\n {calendarContent}\n </PopoverContent>\n </Popover>\n {hiddenInputs}\n </div>\n )\n}\n\nexport { DateRangePicker }\n","import type { DateRangeInputProps } from \"./DateRangePicker.types\"\n\nimport { format as formatDate, isValid, parse } from \"date-fns\"\nimport { ArrowRightIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n dateRangeInputContainerVariants,\n dateRangeInputFieldVariants,\n} from \"./DateRangePicker.variants\"\n\n/**\n * DateRangeInput component provides editable text inputs for date range entry\n */\nfunction DateRangeInput({\n value,\n format,\n locale,\n onChange,\n disabled = false,\n readOnly = false,\n startPlaceholder = \"Start date\",\n endPlaceholder = \"End date\",\n}: DateRangeInputProps) {\n const [startInput, setStartInput] = React.useState(\"\")\n const [endInput, setEndInput] = React.useState(\"\")\n\n // Sync input values with prop value\n /* eslint-disable react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-adjust-state-on-prop-change, @eslint-react/hooks-extra/no-direct-set-state-in-use-effect -- Intentional: controlled input sync requires useEffect to maintain input state separate from date state for partial input handling */\n React.useEffect(() => {\n if (value?.from) {\n setStartInput(formatDate(value.from, format, locale ? { locale } : undefined))\n } else {\n setStartInput(\"\")\n }\n if (value?.to) {\n setEndInput(formatDate(value.to, format, locale ? { locale } : undefined))\n } else {\n setEndInput(\"\")\n }\n }, [value, format, locale])\n /* eslint-enable react-you-might-not-need-an-effect/no-derived-state, react-you-might-not-need-an-effect/no-adjust-state-on-prop-change, @eslint-react/hooks-extra/no-direct-set-state-in-use-effect */\n\n const parseDate = (input: string): Date | undefined => {\n if (!input.trim()) return undefined\n try {\n const parsed = parse(input, format, new Date(), locale ? { locale } : undefined)\n return isValid(parsed) ? parsed : undefined\n } catch {\n return undefined\n }\n }\n\n const handleStartBlur = () => {\n const parsedStart = parseDate(startInput)\n const currentEnd = value?.to\n\n if (parsedStart || !startInput.trim()) {\n onChange({\n from: parsedStart,\n to: currentEnd,\n })\n } else {\n // Reset to previous value if invalid\n if (value?.from) {\n setStartInput(formatDate(value.from, format, locale ? { locale } : undefined))\n } else {\n setStartInput(\"\")\n }\n }\n }\n\n const handleEndBlur = () => {\n const parsedEnd = parseDate(endInput)\n const currentStart = value?.from\n\n if (parsedEnd || !endInput.trim()) {\n onChange({\n from: currentStart,\n to: parsedEnd,\n })\n } else {\n // Reset to previous value if invalid\n if (value?.to) {\n setEndInput(formatDate(value.to, format, locale ? { locale } : undefined))\n } else {\n setEndInput(\"\")\n }\n }\n }\n\n const handleStartKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleStartBlur()\n }\n }\n\n const handleEndKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleEndBlur()\n }\n }\n\n return (\n <div\n className={cn(dateRangeInputContainerVariants())}\n data-slot=\"date-range-input\"\n >\n <input\n aria-label=\"Start date\"\n className={cn(dateRangeInputFieldVariants())}\n data-slot=\"date-range-input-start\"\n disabled={disabled}\n placeholder={startPlaceholder}\n readOnly={readOnly}\n type=\"text\"\n value={startInput}\n onBlur={handleStartBlur}\n onChange={(e) => { setStartInput(e.target.value); }}\n onKeyDown={handleStartKeyDown}\n />\n <ArrowRightIcon aria-hidden=\"true\" className=\"size-4 text-muted-foreground shrink-0\" />\n <input\n aria-label=\"End date\"\n className={cn(dateRangeInputFieldVariants())}\n data-slot=\"date-range-input-end\"\n disabled={disabled}\n placeholder={endPlaceholder}\n readOnly={readOnly}\n type=\"text\"\n value={endInput}\n onBlur={handleEndBlur}\n onChange={(e) => { setEndInput(e.target.value); }}\n onKeyDown={handleEndKeyDown}\n />\n </div>\n )\n}\n\nexport { DateRangeInput }\n"]}
@@ -1,4 +1,4 @@
1
- import { Button } from './chunk-7TF5PVEU.js';
1
+ import { Button } from './chunk-X5XP5QVO.js';
2
2
  import { cn } from './chunk-HRNDJU7D.js';
3
3
  import { RefreshCw, X, LayoutGrid, Loader2 } from 'lucide-react';
4
4
  import { useId, useRef, useCallback, useEffect } from 'react';
@@ -511,5 +511,5 @@ function Dashboard({
511
511
  }
512
512
 
513
513
  export { Dashboard, DashboardEmptyState, DashboardErrorState, DashboardHeader, DashboardLoadingState, DashboardWidget, dashboardContentVariants, dashboardEmptyVariants, dashboardGridVariants, dashboardHeaderVariants, dashboardLoadingVariants, dashboardSidebarVariants, dashboardVariants, dashboardWidgetHeaderVariants, dashboardWidgetVariants };
514
- //# sourceMappingURL=chunk-SXPBKGLT.js.map
515
- //# sourceMappingURL=chunk-SXPBKGLT.js.map
514
+ //# sourceMappingURL=chunk-J62NPPDO.js.map
515
+ //# sourceMappingURL=chunk-J62NPPDO.js.map