@techzyapp/ui-library 1.0.25 → 1.0.27

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 (478) hide show
  1. package/dist/{AdminRoot-CgvtgUpW.js → AdminRoot-C4OyuOIr.js} +4 -4
  2. package/dist/{AdminRoot-CgvtgUpW.js.map → AdminRoot-C4OyuOIr.js.map} +1 -1
  3. package/dist/{AdminRoot-BkPPRkyQ.cjs → AdminRoot-bHywlbML.cjs} +2 -2
  4. package/dist/{AdminRoot-BkPPRkyQ.cjs.map → AdminRoot-bHywlbML.cjs.map} +1 -1
  5. package/dist/{Alert-udX1ybuC.cjs → Alert-DeGgilkH.cjs} +2 -2
  6. package/dist/{Alert-udX1ybuC.cjs.map → Alert-DeGgilkH.cjs.map} +1 -1
  7. package/dist/{Alert-DXmzM_rh.js → Alert-rNjfqj2Z.js} +3 -3
  8. package/dist/{Alert-DXmzM_rh.js.map → Alert-rNjfqj2Z.js.map} +1 -1
  9. package/dist/{AuthLayout-BRUxDgzs.cjs → AuthLayout-ChILVWZ-.cjs} +2 -2
  10. package/dist/{AuthLayout-BRUxDgzs.cjs.map → AuthLayout-ChILVWZ-.cjs.map} +1 -1
  11. package/dist/{AuthLayout-CP9qu6Bv.js → AuthLayout-zAS3jlYc.js} +2 -2
  12. package/dist/{AuthLayout-CP9qu6Bv.js.map → AuthLayout-zAS3jlYc.js.map} +1 -1
  13. package/dist/{Avatar-Q50J8wdN.js → Avatar-BGPGxry2.js} +25 -25
  14. package/dist/{Avatar-Q50J8wdN.js.map → Avatar-BGPGxry2.js.map} +1 -1
  15. package/dist/Avatar-D_YivyqV.cjs +2 -0
  16. package/dist/{Avatar-Dgf04PBC.cjs.map → Avatar-D_YivyqV.cjs.map} +1 -1
  17. package/dist/{AvatarGroup-uW0SD5P4.cjs → AvatarGroup-Bnf_RSc9.cjs} +2 -2
  18. package/dist/{AvatarGroup-uW0SD5P4.cjs.map → AvatarGroup-Bnf_RSc9.cjs.map} +1 -1
  19. package/dist/{AvatarGroup-YaNasLMS.js → AvatarGroup-Difz4lLR.js} +2 -2
  20. package/dist/{AvatarGroup-YaNasLMS.js.map → AvatarGroup-Difz4lLR.js.map} +1 -1
  21. package/dist/Badge-BmFgusOa.js +50 -0
  22. package/dist/{Badge-DSWigoGC.js.map → Badge-BmFgusOa.js.map} +1 -1
  23. package/dist/Badge-DVbe1rAI.cjs +2 -0
  24. package/dist/{Badge-BQpr2Jee.cjs.map → Badge-DVbe1rAI.cjs.map} +1 -1
  25. package/dist/{Breadcrumbs-DQHHeLId.js → Breadcrumbs-BJHKk0Sn.js} +3 -3
  26. package/dist/{Breadcrumbs-DQHHeLId.js.map → Breadcrumbs-BJHKk0Sn.js.map} +1 -1
  27. package/dist/{Breadcrumbs-CsYTiX2h.cjs → Breadcrumbs-CGcpMlxm.cjs} +2 -2
  28. package/dist/{Breadcrumbs-CsYTiX2h.cjs.map → Breadcrumbs-CGcpMlxm.cjs.map} +1 -1
  29. package/dist/Button-BZ_o-akc.cjs +2 -0
  30. package/dist/{Button-CXmDOzPk.cjs.map → Button-BZ_o-akc.cjs.map} +1 -1
  31. package/dist/Button-obe6rono.js +72 -0
  32. package/dist/{Button-DBs8xnA5.js.map → Button-obe6rono.js.map} +1 -1
  33. package/dist/{Calendar-CtteUt82.js → Calendar-SCih0NtS.js} +4 -4
  34. package/dist/{Calendar-CtteUt82.js.map → Calendar-SCih0NtS.js.map} +1 -1
  35. package/dist/{Calendar-B2nMXk4C.cjs → Calendar-lfpNwivC.cjs} +2 -2
  36. package/dist/{Calendar-B2nMXk4C.cjs.map → Calendar-lfpNwivC.cjs.map} +1 -1
  37. package/dist/{Card-DYKnWt-L.js → Card-BRJV2JZE.js} +2 -2
  38. package/dist/{Card-DYKnWt-L.js.map → Card-BRJV2JZE.js.map} +1 -1
  39. package/dist/{Card-DGF22HbS.cjs → Card-KvvNlchc.cjs} +2 -2
  40. package/dist/{Card-DGF22HbS.cjs.map → Card-KvvNlchc.cjs.map} +1 -1
  41. package/dist/{Chip-DdKhcstm.js → Chip-CQ4cYVl_.js} +31 -31
  42. package/dist/{Chip-DdKhcstm.js.map → Chip-CQ4cYVl_.js.map} +1 -1
  43. package/dist/Chip-CYz4vxHm.cjs +2 -0
  44. package/dist/{Chip-gUH_7nQc.cjs.map → Chip-CYz4vxHm.cjs.map} +1 -1
  45. package/dist/ChoiceCardGroup-D3HL7dHj.js +181 -0
  46. package/dist/{ChoiceCardGroup-DBohUnRj.js.map → ChoiceCardGroup-D3HL7dHj.js.map} +1 -1
  47. package/dist/ChoiceCardGroup-pIOKIUI0.cjs +2 -0
  48. package/dist/{ChoiceCardGroup-d0VVTUi5.cjs.map → ChoiceCardGroup-pIOKIUI0.cjs.map} +1 -1
  49. package/dist/{CodeBlock-DD_d3-sM.js → CodeBlock-DddGTLu1.js} +3 -3
  50. package/dist/{CodeBlock-DD_d3-sM.js.map → CodeBlock-DddGTLu1.js.map} +1 -1
  51. package/dist/{CodeBlock-C6tQtbHU.cjs → CodeBlock-H75dbOvg.cjs} +2 -2
  52. package/dist/{CodeBlock-C6tQtbHU.cjs.map → CodeBlock-H75dbOvg.cjs.map} +1 -1
  53. package/dist/ColorPicker-CKc8k-Dp.cjs +2 -0
  54. package/dist/ColorPicker-CKc8k-Dp.cjs.map +1 -0
  55. package/dist/{ColorPicker-Dw6Qk0iy.js → ColorPicker-Cw-2X6u9.js} +35 -26
  56. package/dist/ColorPicker-Cw-2X6u9.js.map +1 -0
  57. package/dist/ColorPickerPanel-DQ4CFnGa.cjs +2 -0
  58. package/dist/ColorPickerPanel-DQ4CFnGa.cjs.map +1 -0
  59. package/dist/ColorPickerPanel-PYaF5wPL.js +322 -0
  60. package/dist/ColorPickerPanel-PYaF5wPL.js.map +1 -0
  61. package/dist/ColorRamp-AkY9gq6Y.cjs +2 -0
  62. package/dist/ColorRamp-AkY9gq6Y.cjs.map +1 -0
  63. package/dist/ColorRamp-DnlJNKfy.js +126 -0
  64. package/dist/ColorRamp-DnlJNKfy.js.map +1 -0
  65. package/dist/{ConfigProvider-Bszl3Wr3.cjs → ConfigProvider-BicoaBLj.cjs} +2 -2
  66. package/dist/ConfigProvider-BicoaBLj.cjs.map +1 -0
  67. package/dist/{ConfigProvider-DR9YMy9U.js → ConfigProvider-DL9fylMo.js} +2 -2
  68. package/dist/ConfigProvider-DL9fylMo.js.map +1 -0
  69. package/dist/CopyButton-BqFGC-Ca.cjs +2 -0
  70. package/dist/{CopyButton-Ct-8AmmX.cjs.map → CopyButton-BqFGC-Ca.cjs.map} +1 -1
  71. package/dist/CopyButton-D6-kcVCA.js +43 -0
  72. package/dist/{CopyButton-DJ1PSJZU.js.map → CopyButton-D6-kcVCA.js.map} +1 -1
  73. package/dist/DashedButton-B7xodc3N.cjs +2 -0
  74. package/dist/{DashedButton-3C4IZuo4.cjs.map → DashedButton-B7xodc3N.cjs.map} +1 -1
  75. package/dist/DashedButton-iM7kzopW.js +59 -0
  76. package/dist/{DashedButton-BXZAyMtw.js.map → DashedButton-iM7kzopW.js.map} +1 -1
  77. package/dist/{DatePicker-BxEydgfu.cjs → DatePicker-BvGFP2AL.cjs} +2 -2
  78. package/dist/{DatePicker-BxEydgfu.cjs.map → DatePicker-BvGFP2AL.cjs.map} +1 -1
  79. package/dist/{DatePicker-CJioG5M7.js → DatePicker-DP7yASzq.js} +5 -5
  80. package/dist/{DatePicker-CJioG5M7.js.map → DatePicker-DP7yASzq.js.map} +1 -1
  81. package/dist/DatePicker.module-BDtTsg8M.cjs +2 -0
  82. package/dist/{DatePicker.module-tE-tGNBd.cjs.map → DatePicker.module-BDtTsg8M.cjs.map} +1 -1
  83. package/dist/DatePicker.module-CMMQyEhG.js +138 -0
  84. package/dist/{DatePicker.module-BZDftL4g.js.map → DatePicker.module-CMMQyEhG.js.map} +1 -1
  85. package/dist/{DateTimePicker-e2zj2bhS.js → DateTimePicker-CzRduOFz.js} +8 -8
  86. package/dist/{DateTimePicker-e2zj2bhS.js.map → DateTimePicker-CzRduOFz.js.map} +1 -1
  87. package/dist/{DateTimePicker-COEj2Z0F.cjs → DateTimePicker-DOzft9kg.cjs} +2 -2
  88. package/dist/{DateTimePicker-COEj2Z0F.cjs.map → DateTimePicker-DOzft9kg.cjs.map} +1 -1
  89. package/dist/EmptyState-A5nPGnHA.js +38 -0
  90. package/dist/{EmptyState-BTd7aVgu.js.map → EmptyState-A5nPGnHA.js.map} +1 -1
  91. package/dist/EmptyState-CTTOy9aY.cjs +2 -0
  92. package/dist/{EmptyState-Bv4XXnD1.cjs.map → EmptyState-CTTOy9aY.cjs.map} +1 -1
  93. package/dist/{FileCard-DY8N9Lzz.js → FileCard-BmPEEcue.js} +4 -4
  94. package/dist/{FileCard-DY8N9Lzz.js.map → FileCard-BmPEEcue.js.map} +1 -1
  95. package/dist/{FileCard-DW5Ur8Aj.cjs → FileCard-C4BkGMtK.cjs} +2 -2
  96. package/dist/{FileCard-DW5Ur8Aj.cjs.map → FileCard-C4BkGMtK.cjs.map} +1 -1
  97. package/dist/FileUploader-D_F64mob.cjs +2 -0
  98. package/dist/FileUploader-D_F64mob.cjs.map +1 -0
  99. package/dist/{FileUploader-BYF5FvUc.js → FileUploader-Dv_3bjZA.js} +217 -217
  100. package/dist/FileUploader-Dv_3bjZA.js.map +1 -0
  101. package/dist/{Flag-CB4YyPj3.cjs → Flag-BM_2VJ1v.cjs} +2 -2
  102. package/dist/{Flag-CB4YyPj3.cjs.map → Flag-BM_2VJ1v.cjs.map} +1 -1
  103. package/dist/{Flag-yA1y5XzR.js → Flag-CzCEpB8E.js} +2 -2
  104. package/dist/{Flag-yA1y5XzR.js.map → Flag-CzCEpB8E.js.map} +1 -1
  105. package/dist/{FullscreenToggle-0lskYnpx.cjs → FullscreenToggle-BL0nBrsL.cjs} +2 -2
  106. package/dist/{FullscreenToggle-0lskYnpx.cjs.map → FullscreenToggle-BL0nBrsL.cjs.map} +1 -1
  107. package/dist/{FullscreenToggle-jSLruiKt.js → FullscreenToggle-HZQOIa21.js} +3 -3
  108. package/dist/{FullscreenToggle-jSLruiKt.js.map → FullscreenToggle-HZQOIa21.js.map} +1 -1
  109. package/dist/IconButton-B87ipBK3.cjs +2 -0
  110. package/dist/{IconButton-BN-bZxEi.cjs.map → IconButton-B87ipBK3.cjs.map} +1 -1
  111. package/dist/IconButton-CBp8QuTO.js +68 -0
  112. package/dist/{IconButton-BEGWfcVc.js.map → IconButton-CBp8QuTO.js.map} +1 -1
  113. package/dist/Loader-0Imnbael.cjs +2 -0
  114. package/dist/{Loader-B5YqzEYy.cjs.map → Loader-0Imnbael.cjs.map} +1 -1
  115. package/dist/Loader-fffFnQqS.js +28 -0
  116. package/dist/{Loader-BZIa8hwv.js.map → Loader-fffFnQqS.js.map} +1 -1
  117. package/dist/MobileFrame-8FSsYA_w.js +91 -0
  118. package/dist/MobileFrame-8FSsYA_w.js.map +1 -0
  119. package/dist/MobileFrame-Dsfgd_4k.cjs +2 -0
  120. package/dist/MobileFrame-Dsfgd_4k.cjs.map +1 -0
  121. package/dist/{Modal-0V-REVV-.cjs → Modal--e2qGisF.cjs} +2 -2
  122. package/dist/{Modal-0V-REVV-.cjs.map → Modal--e2qGisF.cjs.map} +1 -1
  123. package/dist/{Modal-B7yoFC3o.js → Modal-DJljaPqV.js} +3 -3
  124. package/dist/{Modal-B7yoFC3o.js.map → Modal-DJljaPqV.js.map} +1 -1
  125. package/dist/{MultiSelect-gj9Ymeh2.cjs → MultiSelect-CvecZeMU.cjs} +2 -2
  126. package/dist/{MultiSelect-gj9Ymeh2.cjs.map → MultiSelect-CvecZeMU.cjs.map} +1 -1
  127. package/dist/{MultiSelect-C8xuXaoR.js → MultiSelect-DLoS04lZ.js} +4 -4
  128. package/dist/{MultiSelect-C8xuXaoR.js.map → MultiSelect-DLoS04lZ.js.map} +1 -1
  129. package/dist/{NumberField-CEt95jcC.cjs → NumberField-C_HZXBuw.cjs} +2 -2
  130. package/dist/{NumberField-CEt95jcC.cjs.map → NumberField-C_HZXBuw.cjs.map} +1 -1
  131. package/dist/{NumberField-2yM0mmyj.js → NumberField-DYGVQdL5.js} +4 -4
  132. package/dist/{NumberField-2yM0mmyj.js.map → NumberField-DYGVQdL5.js.map} +1 -1
  133. package/dist/{OtpField-CkliY82J.js → OtpField-CpQr_ZqL.js} +3 -3
  134. package/dist/{OtpField-CkliY82J.js.map → OtpField-CpQr_ZqL.js.map} +1 -1
  135. package/dist/{OtpField-on-K0_fM.cjs → OtpField-DKbUP0F6.cjs} +2 -2
  136. package/dist/{OtpField-on-K0_fM.cjs.map → OtpField-DKbUP0F6.cjs.map} +1 -1
  137. package/dist/{PageLayout-DzPh_G6H.js → PageLayout-CCcPCfJF.js} +2 -2
  138. package/dist/{PageLayout-DzPh_G6H.js.map → PageLayout-CCcPCfJF.js.map} +1 -1
  139. package/dist/{PageLayout-DGHu7Vm3.cjs → PageLayout-CuWXukUv.cjs} +2 -2
  140. package/dist/{PageLayout-DGHu7Vm3.cjs.map → PageLayout-CuWXukUv.cjs.map} +1 -1
  141. package/dist/PageNotFound-JKOnpyHD.cjs +2 -0
  142. package/dist/{PageNotFound-B8_eIT8p.cjs.map → PageNotFound-JKOnpyHD.cjs.map} +1 -1
  143. package/dist/{PageNotFound-CCFfPHgA.js → PageNotFound-LWH2tU5E.js} +9 -9
  144. package/dist/{PageNotFound-CCFfPHgA.js.map → PageNotFound-LWH2tU5E.js.map} +1 -1
  145. package/dist/Pagination-BwtbmITJ.js +139 -0
  146. package/dist/{Pagination-CmskZjcz.js.map → Pagination-BwtbmITJ.js.map} +1 -1
  147. package/dist/Pagination-M7njqOUt.cjs +2 -0
  148. package/dist/{Pagination-BdVebW2L.cjs.map → Pagination-M7njqOUt.cjs.map} +1 -1
  149. package/dist/PaletteField-CUyzLrny.js +54 -0
  150. package/dist/PaletteField-CUyzLrny.js.map +1 -0
  151. package/dist/PaletteField-iBIvOvNi.cjs +2 -0
  152. package/dist/PaletteField-iBIvOvNi.cjs.map +1 -0
  153. package/dist/RadioGroup-Byy-eSY3.cjs +2 -0
  154. package/dist/{RadioGroup-C8u7eNBS.cjs.map → RadioGroup-Byy-eSY3.cjs.map} +1 -1
  155. package/dist/RadioGroup-D_1_Heta.js +141 -0
  156. package/dist/{RadioGroup-DbodUJW8.js.map → RadioGroup-D_1_Heta.js.map} +1 -1
  157. package/dist/RemoveDialog-DUrD2Em8.js +47 -0
  158. package/dist/{RemoveDialog-CV75B0aN.js.map → RemoveDialog-DUrD2Em8.js.map} +1 -1
  159. package/dist/RemoveDialog-FZWYAxRy.cjs +2 -0
  160. package/dist/{RemoveDialog-DmOk0ezc.cjs.map → RemoveDialog-FZWYAxRy.cjs.map} +1 -1
  161. package/dist/{RichTextEditor-Bm8FFbcR.js → RichTextEditor-CG6LoNiw.js} +9 -9
  162. package/dist/RichTextEditor-CG6LoNiw.js.map +1 -0
  163. package/dist/{RichTextEditor-uXddgtlk.cjs → RichTextEditor-mpMCG8jX.cjs} +2 -2
  164. package/dist/RichTextEditor-mpMCG8jX.cjs.map +1 -0
  165. package/dist/RootLayout-CPxDqfGb.cjs +2 -0
  166. package/dist/{RootLayout-kssj9exn.cjs.map → RootLayout-CPxDqfGb.cjs.map} +1 -1
  167. package/dist/RootLayout-D3K-pAMO.js +515 -0
  168. package/dist/{RootLayout-Cf7Rr9Iz.js.map → RootLayout-D3K-pAMO.js.map} +1 -1
  169. package/dist/{Select-CdX3Ks7y.js → Select-BB9oOoWZ.js} +3 -3
  170. package/dist/{Select-CdX3Ks7y.js.map → Select-BB9oOoWZ.js.map} +1 -1
  171. package/dist/{Select-7vEGJCvA.cjs → Select-iP2p5jad.cjs} +2 -2
  172. package/dist/{Select-7vEGJCvA.cjs.map → Select-iP2p5jad.cjs.map} +1 -1
  173. package/dist/{Sidebar-DcKIEfhy.cjs → Sidebar-Boi7UgHV.cjs} +2 -2
  174. package/dist/{Sidebar-DcKIEfhy.cjs.map → Sidebar-Boi7UgHV.cjs.map} +1 -1
  175. package/dist/{Sidebar-YH-DoNG9.js → Sidebar-CsPnv4mu.js} +60 -60
  176. package/dist/{Sidebar-YH-DoNG9.js.map → Sidebar-CsPnv4mu.js.map} +1 -1
  177. package/dist/Slider-D3dbEOQY.cjs +2 -0
  178. package/dist/{Slider-dxYVXRev.cjs.map → Slider-D3dbEOQY.cjs.map} +1 -1
  179. package/dist/Slider-D7SvowmM.js +184 -0
  180. package/dist/{Slider-oGXd5e9X.js.map → Slider-D7SvowmM.js.map} +1 -1
  181. package/dist/{SpeedDial-DWNuC6f8.js → SpeedDial-B8XMUATN.js} +2 -2
  182. package/dist/{SpeedDial-DWNuC6f8.js.map → SpeedDial-B8XMUATN.js.map} +1 -1
  183. package/dist/{SpeedDial-9_Yk8AGx.cjs → SpeedDial-CZ22T8GL.cjs} +2 -2
  184. package/dist/{SpeedDial-9_Yk8AGx.cjs.map → SpeedDial-CZ22T8GL.cjs.map} +1 -1
  185. package/dist/{Stepper-CuqFpamY.js → Stepper-B_e_PGZE.js} +70 -70
  186. package/dist/{Stepper-CuqFpamY.js.map → Stepper-B_e_PGZE.js.map} +1 -1
  187. package/dist/Stepper-BjkkWawQ.cjs +2 -0
  188. package/dist/{Stepper-B1z_u650.cjs.map → Stepper-BjkkWawQ.cjs.map} +1 -1
  189. package/dist/{SwatchPicker-CCJltwHI.cjs → SwatchPicker-C8amdDnA.cjs} +2 -2
  190. package/dist/{SwatchPicker-CCJltwHI.cjs.map → SwatchPicker-C8amdDnA.cjs.map} +1 -1
  191. package/dist/{SwatchPicker-CqyWngFJ.js → SwatchPicker-DXEE9xqY.js} +2 -2
  192. package/dist/{SwatchPicker-CqyWngFJ.js.map → SwatchPicker-DXEE9xqY.js.map} +1 -1
  193. package/dist/Switch-CodRZD3y.cjs +2 -0
  194. package/dist/{Switch-DRkZ6kHJ.cjs.map → Switch-CodRZD3y.cjs.map} +1 -1
  195. package/dist/Switch-ESrhkpJC.js +85 -0
  196. package/dist/{Switch-DMPJ0fhB.js.map → Switch-ESrhkpJC.js.map} +1 -1
  197. package/dist/Table-Cr1zUtNQ.cjs +2 -0
  198. package/dist/Table-Cr1zUtNQ.cjs.map +1 -0
  199. package/dist/{Table-Drdhfm99.js → Table-DdoUcZoN.js} +60 -51
  200. package/dist/Table-DdoUcZoN.js.map +1 -0
  201. package/dist/Tabs-CZDX7BN-.cjs +2 -0
  202. package/dist/{Tabs-BiKDy_fv.cjs.map → Tabs-CZDX7BN-.cjs.map} +1 -1
  203. package/dist/Tabs-v1GEGUDQ.js +190 -0
  204. package/dist/{Tabs-ytbBzAxG.js.map → Tabs-v1GEGUDQ.js.map} +1 -1
  205. package/dist/{TagsField-CEt_PC5y.js → TagsField-B389eDp4.js} +4 -4
  206. package/dist/{TagsField-CEt_PC5y.js.map → TagsField-B389eDp4.js.map} +1 -1
  207. package/dist/{TagsField-DpDbf0ru.cjs → TagsField-OfrpyHZO.cjs} +2 -2
  208. package/dist/{TagsField-DpDbf0ru.cjs.map → TagsField-OfrpyHZO.cjs.map} +1 -1
  209. package/dist/{TextField-BWdmF-HE.js → TextField-7MobCad5.js} +4 -4
  210. package/dist/{TextField-BWdmF-HE.js.map → TextField-7MobCad5.js.map} +1 -1
  211. package/dist/{TextField-Df_kGy2l.cjs → TextField-B785pRgK.cjs} +2 -2
  212. package/dist/{TextField-Df_kGy2l.cjs.map → TextField-B785pRgK.cjs.map} +1 -1
  213. package/dist/TextField.module-6gYcR9TL.js +27 -0
  214. package/dist/TextField.module-6gYcR9TL.js.map +1 -0
  215. package/dist/TextField.module-DsNCo8vN.cjs +2 -0
  216. package/dist/TextField.module-DsNCo8vN.cjs.map +1 -0
  217. package/dist/{ThemeToggle-CgxF6oUu.js → ThemeToggle-BGdvqXad.js} +3 -3
  218. package/dist/{ThemeToggle-CgxF6oUu.js.map → ThemeToggle-BGdvqXad.js.map} +1 -1
  219. package/dist/{ThemeToggle-BJdXhmfc.cjs → ThemeToggle-BkmZ7s_u.cjs} +2 -2
  220. package/dist/{ThemeToggle-BJdXhmfc.cjs.map → ThemeToggle-BkmZ7s_u.cjs.map} +1 -1
  221. package/dist/{TimeColumns-DxVN0V8l.cjs → TimeColumns-B-xm1DGM.cjs} +2 -2
  222. package/dist/{TimeColumns-DxVN0V8l.cjs.map → TimeColumns-B-xm1DGM.cjs.map} +1 -1
  223. package/dist/{TimeColumns-n-fz50mr.js → TimeColumns-BRlDKx_i.js} +3 -3
  224. package/dist/{TimeColumns-n-fz50mr.js.map → TimeColumns-BRlDKx_i.js.map} +1 -1
  225. package/dist/{TimePicker-Bopxx3zU.js → TimePicker-B_3Ubip0.js} +6 -6
  226. package/dist/{TimePicker-Bopxx3zU.js.map → TimePicker-B_3Ubip0.js.map} +1 -1
  227. package/dist/{TimePicker-DvoemiGz.cjs → TimePicker-DvEIdE4v.cjs} +2 -2
  228. package/dist/{TimePicker-DvoemiGz.cjs.map → TimePicker-DvEIdE4v.cjs.map} +1 -1
  229. package/dist/Timeline-CKEosWka.cjs +2 -0
  230. package/dist/{Timeline-ONU_3gi3.cjs.map → Timeline-CKEosWka.cjs.map} +1 -1
  231. package/dist/Timeline-ufVXmpMY.js +71 -0
  232. package/dist/{Timeline-D3kzt1dy.js.map → Timeline-ufVXmpMY.js.map} +1 -1
  233. package/dist/{Toaster-DZSzFse_.cjs → Toaster-BIFRuqbC.cjs} +2 -2
  234. package/dist/{Toaster-DZSzFse_.cjs.map → Toaster-BIFRuqbC.cjs.map} +1 -1
  235. package/dist/{Toaster-BxIY2H4V.js → Toaster-DuzcRbio.js} +2 -2
  236. package/dist/{Toaster-BxIY2H4V.js.map → Toaster-DuzcRbio.js.map} +1 -1
  237. package/dist/{TranslatedFields-BtDLkQy7.cjs → TranslatedFields-D_a0NVKI.cjs} +2 -2
  238. package/dist/{TranslatedFields-BtDLkQy7.cjs.map → TranslatedFields-D_a0NVKI.cjs.map} +1 -1
  239. package/dist/{TranslatedFields-DmR8LKSG.js → TranslatedFields-HmP0Mg5t.js} +5 -5
  240. package/dist/{TranslatedFields-DmR8LKSG.js.map → TranslatedFields-HmP0Mg5t.js.map} +1 -1
  241. package/dist/{UserCard-J8Bpbh3x.js → UserCard-B1phOVKj.js} +4 -4
  242. package/dist/{UserCard-J8Bpbh3x.js.map → UserCard-B1phOVKj.js.map} +1 -1
  243. package/dist/{UserCard-C1yFvVIc.cjs → UserCard-BvOcDm5W.cjs} +2 -2
  244. package/dist/{UserCard-C1yFvVIc.cjs.map → UserCard-BvOcDm5W.cjs.map} +1 -1
  245. package/dist/color-CgR8ybWZ.cjs +2 -0
  246. package/dist/color-CgR8ybWZ.cjs.map +1 -0
  247. package/dist/color-EQJ2DrcQ.js +24 -0
  248. package/dist/color-EQJ2DrcQ.js.map +1 -0
  249. package/dist/components/Alert/index.cjs +1 -1
  250. package/dist/components/Alert/index.js +1 -1
  251. package/dist/components/AuthLayout/index.cjs +1 -1
  252. package/dist/components/AuthLayout/index.js +1 -1
  253. package/dist/components/Avatar/index.cjs +1 -1
  254. package/dist/components/Avatar/index.js +2 -2
  255. package/dist/components/Badge/index.cjs +1 -1
  256. package/dist/components/Badge/index.js +1 -1
  257. package/dist/components/Breadcrumbs/index.cjs +1 -1
  258. package/dist/components/Breadcrumbs/index.js +1 -1
  259. package/dist/components/Button/index.cjs +1 -1
  260. package/dist/components/Button/index.js +1 -1
  261. package/dist/components/Card/index.cjs +1 -1
  262. package/dist/components/Card/index.js +1 -1
  263. package/dist/components/Chip/index.cjs +1 -1
  264. package/dist/components/Chip/index.js +1 -1
  265. package/dist/components/ChoiceCard/index.cjs +1 -1
  266. package/dist/components/ChoiceCard/index.js +1 -1
  267. package/dist/components/CodeBlock/index.cjs +1 -1
  268. package/dist/components/CodeBlock/index.js +1 -1
  269. package/dist/components/ColorPicker/ColorPicker.d.cts +5 -0
  270. package/dist/components/ColorPicker/ColorPicker.d.ts +5 -0
  271. package/dist/components/ColorPicker/ColorPickerPanel.d.cts +6 -1
  272. package/dist/components/ColorPicker/ColorPickerPanel.d.ts +6 -1
  273. package/dist/components/ColorPicker/colorUtils.d.cts +3 -12
  274. package/dist/components/ColorPicker/colorUtils.d.ts +3 -12
  275. package/dist/components/ColorPicker/index.cjs +1 -1
  276. package/dist/components/ColorPicker/index.js +1 -1
  277. package/dist/components/ColorRamp/ColorRamp.d.cts +36 -0
  278. package/dist/components/ColorRamp/ColorRamp.d.ts +36 -0
  279. package/dist/components/ColorRamp/index.cjs +2 -0
  280. package/dist/components/ColorRamp/index.cjs.map +1 -0
  281. package/dist/components/ColorRamp/index.d.cts +3 -0
  282. package/dist/components/ColorRamp/index.d.ts +3 -0
  283. package/dist/components/ColorRamp/index.js +6 -0
  284. package/dist/components/ColorRamp/index.js.map +1 -0
  285. package/dist/components/CopyButton/index.cjs +1 -1
  286. package/dist/components/CopyButton/index.js +1 -1
  287. package/dist/components/DashedButton/index.cjs +1 -1
  288. package/dist/components/DashedButton/index.js +1 -1
  289. package/dist/components/DatePicker/index.cjs +1 -1
  290. package/dist/components/DatePicker/index.js +1 -1
  291. package/dist/components/DateTimePicker/index.cjs +1 -1
  292. package/dist/components/DateTimePicker/index.js +1 -1
  293. package/dist/components/EmptyState/index.cjs +1 -1
  294. package/dist/components/EmptyState/index.js +1 -1
  295. package/dist/components/FileCard/index.cjs +1 -1
  296. package/dist/components/FileCard/index.js +1 -1
  297. package/dist/components/FileUploader/index.cjs +1 -1
  298. package/dist/components/FileUploader/index.js +1 -1
  299. package/dist/components/Flag/index.cjs +1 -1
  300. package/dist/components/Flag/index.js +1 -1
  301. package/dist/components/FullscreenToggle/index.cjs +1 -1
  302. package/dist/components/FullscreenToggle/index.js +1 -1
  303. package/dist/components/IconButton/index.cjs +1 -1
  304. package/dist/components/IconButton/index.js +1 -1
  305. package/dist/components/Loader/index.cjs +1 -1
  306. package/dist/components/Loader/index.js +1 -1
  307. package/dist/components/MobileFrame/MobileFrame.d.cts +45 -0
  308. package/dist/components/MobileFrame/MobileFrame.d.ts +45 -0
  309. package/dist/components/MobileFrame/frames.d.cts +27 -0
  310. package/dist/components/MobileFrame/frames.d.ts +27 -0
  311. package/dist/components/MobileFrame/index.cjs +2 -0
  312. package/dist/components/MobileFrame/index.cjs.map +1 -0
  313. package/dist/components/MobileFrame/index.d.cts +4 -0
  314. package/dist/components/MobileFrame/index.d.ts +4 -0
  315. package/dist/components/MobileFrame/index.js +8 -0
  316. package/dist/components/MobileFrame/index.js.map +1 -0
  317. package/dist/components/Modal/index.cjs +1 -1
  318. package/dist/components/Modal/index.js +1 -1
  319. package/dist/components/MultiSelect/index.cjs +1 -1
  320. package/dist/components/MultiSelect/index.js +1 -1
  321. package/dist/components/NumberField/index.cjs +1 -1
  322. package/dist/components/NumberField/index.js +1 -1
  323. package/dist/components/OtpField/index.cjs +1 -1
  324. package/dist/components/OtpField/index.js +1 -1
  325. package/dist/components/PageLayout/index.cjs +1 -1
  326. package/dist/components/PageLayout/index.js +1 -1
  327. package/dist/components/PageNotFound/index.cjs +1 -1
  328. package/dist/components/PageNotFound/index.js +1 -1
  329. package/dist/components/Pagination/index.cjs +1 -1
  330. package/dist/components/Pagination/index.js +1 -1
  331. package/dist/components/PaletteField/PaletteField.d.cts +30 -0
  332. package/dist/components/PaletteField/PaletteField.d.ts +30 -0
  333. package/dist/components/PaletteField/index.cjs +2 -0
  334. package/dist/components/PaletteField/index.cjs.map +1 -0
  335. package/dist/components/PaletteField/index.d.cts +2 -0
  336. package/dist/components/PaletteField/index.d.ts +2 -0
  337. package/dist/components/PaletteField/index.js +6 -0
  338. package/dist/components/PaletteField/index.js.map +1 -0
  339. package/dist/components/Radio/index.cjs +1 -1
  340. package/dist/components/Radio/index.js +1 -1
  341. package/dist/components/RemoveDialog/index.cjs +1 -1
  342. package/dist/components/RemoveDialog/index.js +1 -1
  343. package/dist/components/RichTextEditor/index.cjs +1 -1
  344. package/dist/components/RichTextEditor/index.js +1 -1
  345. package/dist/components/RootLayout/index.cjs +1 -1
  346. package/dist/components/RootLayout/index.js +1 -1
  347. package/dist/components/Select/index.cjs +1 -1
  348. package/dist/components/Select/index.js +1 -1
  349. package/dist/components/Sidebar/index.cjs +1 -1
  350. package/dist/components/Sidebar/index.js +1 -1
  351. package/dist/components/Slider/index.cjs +1 -1
  352. package/dist/components/Slider/index.js +1 -1
  353. package/dist/components/SpeedDial/index.cjs +1 -1
  354. package/dist/components/SpeedDial/index.js +1 -1
  355. package/dist/components/Stepper/index.cjs +1 -1
  356. package/dist/components/Stepper/index.js +1 -1
  357. package/dist/components/SwatchPicker/index.cjs +1 -1
  358. package/dist/components/SwatchPicker/index.js +1 -1
  359. package/dist/components/Switch/index.cjs +1 -1
  360. package/dist/components/Switch/index.js +1 -1
  361. package/dist/components/Table/index.cjs +1 -1
  362. package/dist/components/Table/index.js +1 -1
  363. package/dist/components/Tabs/index.cjs +1 -1
  364. package/dist/components/Tabs/index.js +1 -1
  365. package/dist/components/TagsField/index.cjs +1 -1
  366. package/dist/components/TagsField/index.js +1 -1
  367. package/dist/components/TextField/index.cjs +1 -1
  368. package/dist/components/TextField/index.js +1 -1
  369. package/dist/components/ThemeToggle/index.cjs +1 -1
  370. package/dist/components/ThemeToggle/index.js +1 -1
  371. package/dist/components/TimePicker/index.cjs +1 -1
  372. package/dist/components/TimePicker/index.js +1 -1
  373. package/dist/components/Timeline/index.cjs +1 -1
  374. package/dist/components/Timeline/index.js +1 -1
  375. package/dist/components/Toast/index.cjs +1 -1
  376. package/dist/components/Toast/index.js +1 -1
  377. package/dist/components/TranslatedFields/index.cjs +1 -1
  378. package/dist/components/TranslatedFields/index.js +1 -1
  379. package/dist/components/UserCard/index.cjs +1 -1
  380. package/dist/components/UserCard/index.js +1 -1
  381. package/dist/components/index.d.cts +3 -0
  382. package/dist/components/index.d.ts +3 -0
  383. package/dist/entries/app.cjs +1 -1
  384. package/dist/entries/app.js +1 -1
  385. package/dist/entries/components.cjs +1 -1
  386. package/dist/entries/components.js +149 -141
  387. package/dist/entries/components.js.map +1 -1
  388. package/dist/entries/helpers.cjs +1 -1
  389. package/dist/entries/helpers.d.cts +2 -0
  390. package/dist/entries/helpers.d.ts +2 -0
  391. package/dist/entries/helpers.js +18 -8
  392. package/dist/entries/helpers.js.map +1 -1
  393. package/dist/entries/i18n.cjs +1 -1
  394. package/dist/entries/i18n.js +2 -2
  395. package/dist/entries/theme.cjs +1 -1
  396. package/dist/entries/theme.js +1 -1
  397. package/dist/helpers/color.d.cts +17 -0
  398. package/dist/helpers/color.d.ts +17 -0
  399. package/dist/helpers/palette.d.cts +68 -0
  400. package/dist/helpers/palette.d.ts +68 -0
  401. package/dist/i18n/messages.d.cts +11 -0
  402. package/dist/i18n/messages.d.ts +11 -0
  403. package/dist/index.cjs +1 -1
  404. package/dist/index.css +16 -12
  405. package/dist/index.js +211 -193
  406. package/dist/index.js.map +1 -1
  407. package/dist/{messages-ogohLC5P.js → messages-B06Kl5rI.js} +100 -23
  408. package/dist/messages-B06Kl5rI.js.map +1 -0
  409. package/dist/{messages-DKT0SRM0.cjs → messages-CJqxqL3t.cjs} +9 -9
  410. package/dist/messages-CJqxqL3t.cjs.map +1 -0
  411. package/dist/palette-B031dM4E.js +70 -0
  412. package/dist/palette-B031dM4E.js.map +1 -0
  413. package/dist/palette-BycMHbED.cjs +2 -0
  414. package/dist/palette-BycMHbED.cjs.map +1 -0
  415. package/dist/theme/ConfigProvider.d.cts +8 -8
  416. package/dist/theme/ConfigProvider.d.ts +8 -8
  417. package/package.json +1 -1
  418. package/dist/Avatar-Dgf04PBC.cjs +0 -2
  419. package/dist/Badge-BQpr2Jee.cjs +0 -2
  420. package/dist/Badge-DSWigoGC.js +0 -50
  421. package/dist/Button-CXmDOzPk.cjs +0 -2
  422. package/dist/Button-DBs8xnA5.js +0 -72
  423. package/dist/Chip-gUH_7nQc.cjs +0 -2
  424. package/dist/ChoiceCardGroup-DBohUnRj.js +0 -181
  425. package/dist/ChoiceCardGroup-d0VVTUi5.cjs +0 -2
  426. package/dist/ColorPicker-DtzFwNWk.cjs +0 -2
  427. package/dist/ColorPicker-DtzFwNWk.cjs.map +0 -1
  428. package/dist/ColorPicker-Dw6Qk0iy.js.map +0 -1
  429. package/dist/ColorPickerPanel--wBX-m7J.cjs +0 -2
  430. package/dist/ColorPickerPanel--wBX-m7J.cjs.map +0 -1
  431. package/dist/ColorPickerPanel-Dp7bnnVf.js +0 -336
  432. package/dist/ColorPickerPanel-Dp7bnnVf.js.map +0 -1
  433. package/dist/ConfigProvider-Bszl3Wr3.cjs.map +0 -1
  434. package/dist/ConfigProvider-DR9YMy9U.js.map +0 -1
  435. package/dist/CopyButton-Ct-8AmmX.cjs +0 -2
  436. package/dist/CopyButton-DJ1PSJZU.js +0 -31
  437. package/dist/DashedButton-3C4IZuo4.cjs +0 -2
  438. package/dist/DashedButton-BXZAyMtw.js +0 -59
  439. package/dist/DatePicker.module-BZDftL4g.js +0 -138
  440. package/dist/DatePicker.module-tE-tGNBd.cjs +0 -2
  441. package/dist/EmptyState-BTd7aVgu.js +0 -38
  442. package/dist/EmptyState-Bv4XXnD1.cjs +0 -2
  443. package/dist/FileUploader-B7VfhcR7.cjs +0 -2
  444. package/dist/FileUploader-B7VfhcR7.cjs.map +0 -1
  445. package/dist/FileUploader-BYF5FvUc.js.map +0 -1
  446. package/dist/IconButton-BEGWfcVc.js +0 -68
  447. package/dist/IconButton-BN-bZxEi.cjs +0 -2
  448. package/dist/Loader-B5YqzEYy.cjs +0 -2
  449. package/dist/Loader-BZIa8hwv.js +0 -29
  450. package/dist/PageNotFound-B8_eIT8p.cjs +0 -2
  451. package/dist/Pagination-BdVebW2L.cjs +0 -2
  452. package/dist/Pagination-CmskZjcz.js +0 -139
  453. package/dist/RadioGroup-C8u7eNBS.cjs +0 -2
  454. package/dist/RadioGroup-DbodUJW8.js +0 -141
  455. package/dist/RemoveDialog-CV75B0aN.js +0 -47
  456. package/dist/RemoveDialog-DmOk0ezc.cjs +0 -2
  457. package/dist/RichTextEditor-Bm8FFbcR.js.map +0 -1
  458. package/dist/RichTextEditor-uXddgtlk.cjs.map +0 -1
  459. package/dist/RootLayout-Cf7Rr9Iz.js +0 -515
  460. package/dist/RootLayout-kssj9exn.cjs +0 -2
  461. package/dist/Slider-dxYVXRev.cjs +0 -2
  462. package/dist/Slider-oGXd5e9X.js +0 -184
  463. package/dist/Stepper-B1z_u650.cjs +0 -2
  464. package/dist/Switch-DMPJ0fhB.js +0 -85
  465. package/dist/Switch-DRkZ6kHJ.cjs +0 -2
  466. package/dist/Table-BPit83Pn.cjs +0 -2
  467. package/dist/Table-BPit83Pn.cjs.map +0 -1
  468. package/dist/Table-Drdhfm99.js.map +0 -1
  469. package/dist/Tabs-BiKDy_fv.cjs +0 -2
  470. package/dist/Tabs-ytbBzAxG.js +0 -190
  471. package/dist/TextField.module-QePvGeJ3.js +0 -27
  472. package/dist/TextField.module-QePvGeJ3.js.map +0 -1
  473. package/dist/TextField.module-m-UllwzG.cjs +0 -2
  474. package/dist/TextField.module-m-UllwzG.cjs.map +0 -1
  475. package/dist/Timeline-D3kzt1dy.js +0 -71
  476. package/dist/Timeline-ONU_3gi3.cjs +0 -2
  477. package/dist/messages-DKT0SRM0.cjs.map +0 -1
  478. package/dist/messages-ogohLC5P.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker-BxEydgfu.cjs","sources":["../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type FocusEvent,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { useFormContext } from '../../form/formContext'\nimport { FloatingPanel } from '../FloatingPanel/FloatingPanel'\nimport { Icon } from '../Icon'\nimport { IconButton } from '../IconButton'\nimport { Typography } from '../Typography'\nimport { Calendar } from './Calendar'\nimport {\n applyMask,\n formatValue,\n maskFromFormat,\n parseISO,\n parseInput,\n parseValue,\n today,\n toISO,\n type Dayjs,\n} from './dateUtils'\nimport styles from './DatePicker.module.css'\n\nexport type DatePickerSize = 'sm' | 'md' | 'lg'\n\nexport interface DatePickerProps {\n /** Label rendered above the field. */\n label?: ReactNode\n /** Preset size — control height, font and calendar density. */\n size?: DatePickerSize\n /** Marks the field invalid: red border/ring + the `helperText` in the error color. */\n error?: boolean\n /** Helper / validation text under the field. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Adds a red asterisk after the label. */\n required?: boolean\n /** Stretches the field to fill its container width. Defaults to `true`. */\n fullWidth?: boolean\n /** Disables the field. */\n disabled?: boolean\n /** Controlled value — a date string in `valueFormat` (default ISO datetime; `''` = empty). */\n value?: string\n /** Initial value for uncontrolled use (in `valueFormat`). */\n defaultValue?: string\n /** Fires with the next date in `valueFormat` (`''` when cleared). */\n onChange?: (value: string) => void\n /** Display + typed-input format (dayjs tokens; should be numeric for the typed mask). Defaults to `'DD/MM/YYYY'`. */\n format?: string\n /**\n * Wire format of `value`/`defaultValue`/`onChange` (dayjs tokens), decoupled from the displayed\n * `format`. Defaults to the ISO datetime `'YYYY-MM-DDTHH:mm:ss'`. Incoming values are parsed\n * **leniently** (this format, then any ISO-8601 string — so a backend datetime like\n * `'2026-06-10T09:35:49.6134342'` is accepted), while `onChange` emits in exactly this format at the\n * **start of the UTC day** (e.g. `'2026-06-10T00:00:00'`). Pass `'YYYY-MM-DD'` for a plain date.\n */\n valueFormat?: string\n /** Placeholder shown when empty. Defaults to the lowercased `format` (e.g. `\"dd/mm/yyyy\"`). */\n placeholder?: string\n /** Earliest selectable date (ISO `'YYYY-MM-DD'`). */\n min?: string\n /** Latest selectable date (ISO `'YYYY-MM-DD'`). */\n max?: string\n /** Disables specific dates — receives each day as an ISO `'YYYY-MM-DD'` string. */\n disabledDate?: (date: string) => boolean\n /** First day of the week: 0 = Sunday … 6 = Saturday. Defaults to `1` (Monday). */\n weekStartsOn?: number\n /** Shows a clear (×) button when a date is set. Defaults to `true`. */\n clearable?: boolean\n /** Form field name — auto-binds to a surrounding `<Form>` (value is the ISO date string). */\n name?: string\n /** Id for the input (label association). */\n id?: string\n className?: string\n style?: CSSProperties\n}\n\n/**\n * A date field with a typed, masked input **and** a calendar popover. The input accepts typing in\n * `format` (default `DD/MM/YYYY`, masked) and parses strictly; the calendar icon opens a\n * `Dropdown`-style popover (portaled, flips, scroll-locked — shared via `useFloatingPanel`) with a\n * keyboard-navigable month grid + year picker. All calendar math runs in **UTC** so the date never\n * drifts with the viewer's timezone; the value is a string in `valueFormat` (default ISO datetime\n * `'YYYY-MM-DDTHH:mm:ss'`) — incoming values are parsed leniently (a richer backend datetime is\n * accepted) and emitted at the start of the UTC day. Supports `min`/`max`, `disabledDate`,\n * `weekStartsOn`, and\n * `clearable`. Controlled (`value` + `onChange`) or\n * uncontrolled (`defaultValue`), and binds to a surrounding `<Form>` by `name` (validate with e.g.\n * `z.string().min(1, 'Required')`). Token-only styling. Requires the `dayjs` peer dependency.\n */\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(function DatePicker(\n {\n label,\n size = 'md',\n error,\n helperText,\n required = false,\n fullWidth = true,\n disabled = false,\n value,\n defaultValue,\n onChange,\n format = 'DD/MM/YYYY',\n valueFormat = 'YYYY-MM-DDTHH:mm:ss',\n placeholder,\n min,\n max,\n disabledDate,\n weekStartsOn = 1,\n clearable = true,\n name,\n id: idProp,\n className,\n style,\n },\n ref,\n) {\n const t = useT()\n const reactId = useId()\n const id = idProp ?? reactId\n const helperId = `${id}-helper`\n const labelId = `${id}-label`\n\n // ── value (controlled / form-bound / uncontrolled) — ISO 'YYYY-MM-DD' ──────────────────────────\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = isFormBound ? form!.field(name!) : undefined\n const externalValue =\n value !== undefined\n ? value\n : isFormBound\n ? ((form!.values[name!] as string | undefined) ?? '')\n : undefined\n const isControlled = value !== undefined || isFormBound\n const [internal, setInternal] = useState<string>(defaultValue ?? '')\n const currentValue = isControlled ? externalValue! : internal\n const selected = parseValue(currentValue, valueFormat)\n\n const resolvedError = error ?? bound?.error ?? false\n const resolvedHelperText = helperText ?? bound?.helperText\n\n const minDate = parseISO(min)\n const maxDate = parseISO(max)\n const mask = maskFromFormat(format)\n\n const commit = (next: string) => {\n if (next === currentValue) return // skip redundant onChange / setValue with an unchanged value\n if (!isControlled) setInternal(next)\n if (isFormBound) form!.setValue(name!, next)\n onChange?.(next)\n }\n\n // emit a chosen day in the wire `valueFormat` (start of the UTC day), or '' to clear\n const commitDate = (d: Dayjs | null) => commit(d ? formatValue(d, valueFormat) : '')\n\n // true when `d` is a different calendar day than the current value — gates commits so a no-op\n // round-trip (e.g. focusing then blurring) never rewrites an unchanged value's time to midnight\n const dayChanged = (d: Dayjs) => !selected || !d.isSame(selected, 'day')\n\n // input display text (kept in sync with the committed value; free while typing an incomplete date)\n const [inputText, setInputText] = useState<string>(() =>\n selected ? selected.format(format) : '',\n )\n useEffect(() => {\n setInputText(selected ? selected.format(format) : '')\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentValue, format, valueFormat])\n\n // ── popover ────────────────────────────────────────────────────────────────────────────────────\n const triggerRef = useRef<HTMLDivElement | null>(null)\n const inputRef = useRef<HTMLInputElement | null>(null)\n const [open, setOpen] = useState(false)\n const [viewMonth, setViewMonth] = useState<Dayjs>(() => selected ?? today())\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as { current: HTMLInputElement | null }).current = node\n },\n [ref],\n )\n\n // keep the form's blur handler live for the stable closePopover (`bound` is recreated each render)\n const fieldBlurRef = useRef<(() => void) | undefined>(undefined)\n fieldBlurRef.current = bound ? () => bound.onBlur({} as FocusEvent<HTMLInputElement>) : undefined\n\n // the floating panel forwards its node here, for the focus-leaves-the-widget check on blur\n const popoverRef = useRef<HTMLDivElement | null>(null)\n\n const closePopover = useCallback((refocus: boolean) => {\n setOpen(false)\n fieldBlurRef.current?.()\n if (refocus) inputRef.current?.focus()\n }, [])\n\n // when opening, sync the calendar to the selected date (or today)\n useEffect(() => {\n if (open) setViewMonth(selected ?? today())\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const handleInputChange = (raw: string) => {\n const masked = applyMask(raw, mask)\n setInputText(masked)\n if (masked === '') {\n commit('') // emptying the field clears the value\n return\n }\n const parsed = parseInput(masked, format)\n // commit only a complete, valid, in-range, enabled date that changes the day\n if (parsed && !isOutOfRange(parsed) && dayChanged(parsed)) commitDate(parsed)\n }\n\n const isOutOfRange = (d: Dayjs): boolean => {\n if (minDate && d.isBefore(minDate, 'day')) return true\n if (maxDate && d.isAfter(maxDate, 'day')) return true\n return Boolean(disabledDate && disabledDate(toISO(d)))\n }\n\n const handleInputBlur = (event: FocusEvent<HTMLInputElement>) => {\n // re-format from the committed value (drops half-typed / invalid text); fires the form's touched\n const parsed = parseInput(inputText, format)\n if (inputText === '') {\n commit('') // an emptied field stays cleared (don't restore the old date)\n } else if (parsed && !isOutOfRange(parsed)) {\n if (dayChanged(parsed)) commitDate(parsed)\n setInputText(parsed.format(format))\n } else {\n setInputText(selected ? selected.format(format) : '')\n }\n // only mark touched when focus leaves the whole widget (not into the popover)\n const nextEl = event.relatedTarget as Node | null\n if (nextEl && (popoverRef.current?.contains(nextEl) || triggerRef.current?.contains(nextEl)))\n return\n bound?.onBlur(event)\n }\n\n const handleSelect = (iso: string) => {\n const picked = parseISO(iso)\n if (picked && dayChanged(picked)) commitDate(picked) // re-picking the same day preserves its value\n closePopover(true)\n }\n\n const iconSize: 'sm' | 'md' = size === 'sm' ? 'sm' : 'md'\n\n return (\n <div\n className={clsx(\n styles.field,\n styles[size],\n fullWidth && styles.fullWidth,\n resolvedError && styles.error,\n disabled && styles.disabled,\n className,\n )}\n style={style}\n >\n {label != null && (\n <label htmlFor={id} className={styles.label}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n\n <div ref={triggerRef} className={clsx(styles.control, open && styles.open)}>\n <input\n ref={setInputRef}\n id={id}\n name={name}\n className={styles.input}\n value={inputText}\n placeholder={placeholder ?? format.toLowerCase()}\n disabled={disabled}\n inputMode=\"numeric\"\n autoComplete=\"off\"\n aria-invalid={resolvedError || undefined}\n aria-describedby={resolvedHelperText != null ? helperId : undefined}\n onChange={(e) => handleInputChange(e.target.value)}\n onBlur={handleInputBlur}\n />\n\n {clearable && currentValue !== '' && !disabled && (\n <button\n type=\"button\"\n className={styles.clear}\n aria-label={t('datePicker.clear')}\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n commit('')\n setInputText('')\n inputRef.current?.focus()\n }}\n >\n <Icon name=\"CloseCircle\" size=\"sm\" />\n </button>\n )}\n\n <IconButton\n type=\"button\"\n variant=\"text\"\n color=\"primary\"\n size={size}\n disabled={disabled}\n aria-label={t('datePicker.open')}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={styles.calendarButton}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => setOpen((o) => !o)}\n >\n <Icon name=\"Calendar3\" size={iconSize} />\n </IconButton>\n </div>\n\n <FloatingPanel\n ref={popoverRef}\n open={open}\n triggerRef={triggerRef}\n onClose={closePopover}\n role=\"dialog\"\n ariaLabel=\"Choose date\"\n trapFocus\n className={styles.popover}\n >\n <Calendar\n value={selected}\n month={viewMonth}\n onMonthChange={setViewMonth}\n onSelect={handleSelect}\n min={minDate}\n max={maxDate}\n disabledDate={disabledDate}\n weekStartsOn={weekStartsOn}\n autoFocus\n labelId={labelId}\n />\n </FloatingPanel>\n\n {resolvedHelperText != null && (\n <Typography\n as=\"span\"\n id={helperId}\n variant=\"bodySmall\"\n color={resolvedError ? 'error' : 'muted'}\n className={styles.helper}\n >\n {resolvedHelperText}\n </Typography>\n )}\n </div>\n )\n})\n"],"names":["DatePicker","forwardRef","label","size","error","helperText","required","fullWidth","disabled","value","defaultValue","onChange","format","valueFormat","placeholder","min","max","disabledDate","weekStartsOn","clearable","name","idProp","className","style","ref","t","useT","reactId","useId","id","helperId","labelId","form","useFormContext","isFormBound","bound","externalValue","isControlled","internal","setInternal","useState","currentValue","selected","parseValue","resolvedError","resolvedHelperText","minDate","parseISO","maxDate","mask","maskFromFormat","commit","next","commitDate","d","formatValue","dayChanged","inputText","setInputText","useEffect","triggerRef","useRef","inputRef","open","setOpen","viewMonth","setViewMonth","today","setInputRef","useCallback","node","fieldBlurRef","popoverRef","closePopover","refocus","_a","_b","handleInputChange","raw","masked","applyMask","parsed","parseInput","isOutOfRange","toISO","handleInputBlur","event","nextEl","handleSelect","iso","picked","iconSize","jsxs","clsx","styles","jsx","Typography","Icon","IconButton","o","FloatingPanel","Calendar"],"mappings":"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"}
1
+ {"version":3,"file":"DatePicker-BvGFP2AL.cjs","sources":["../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type FocusEvent,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { useFormContext } from '../../form/formContext'\nimport { FloatingPanel } from '../FloatingPanel/FloatingPanel'\nimport { Icon } from '../Icon'\nimport { IconButton } from '../IconButton'\nimport { Typography } from '../Typography'\nimport { Calendar } from './Calendar'\nimport {\n applyMask,\n formatValue,\n maskFromFormat,\n parseISO,\n parseInput,\n parseValue,\n today,\n toISO,\n type Dayjs,\n} from './dateUtils'\nimport styles from './DatePicker.module.css'\n\nexport type DatePickerSize = 'sm' | 'md' | 'lg'\n\nexport interface DatePickerProps {\n /** Label rendered above the field. */\n label?: ReactNode\n /** Preset size — control height, font and calendar density. */\n size?: DatePickerSize\n /** Marks the field invalid: red border/ring + the `helperText` in the error color. */\n error?: boolean\n /** Helper / validation text under the field. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Adds a red asterisk after the label. */\n required?: boolean\n /** Stretches the field to fill its container width. Defaults to `true`. */\n fullWidth?: boolean\n /** Disables the field. */\n disabled?: boolean\n /** Controlled value — a date string in `valueFormat` (default ISO datetime; `''` = empty). */\n value?: string\n /** Initial value for uncontrolled use (in `valueFormat`). */\n defaultValue?: string\n /** Fires with the next date in `valueFormat` (`''` when cleared). */\n onChange?: (value: string) => void\n /** Display + typed-input format (dayjs tokens; should be numeric for the typed mask). Defaults to `'DD/MM/YYYY'`. */\n format?: string\n /**\n * Wire format of `value`/`defaultValue`/`onChange` (dayjs tokens), decoupled from the displayed\n * `format`. Defaults to the ISO datetime `'YYYY-MM-DDTHH:mm:ss'`. Incoming values are parsed\n * **leniently** (this format, then any ISO-8601 string — so a backend datetime like\n * `'2026-06-10T09:35:49.6134342'` is accepted), while `onChange` emits in exactly this format at the\n * **start of the UTC day** (e.g. `'2026-06-10T00:00:00'`). Pass `'YYYY-MM-DD'` for a plain date.\n */\n valueFormat?: string\n /** Placeholder shown when empty. Defaults to the lowercased `format` (e.g. `\"dd/mm/yyyy\"`). */\n placeholder?: string\n /** Earliest selectable date (ISO `'YYYY-MM-DD'`). */\n min?: string\n /** Latest selectable date (ISO `'YYYY-MM-DD'`). */\n max?: string\n /** Disables specific dates — receives each day as an ISO `'YYYY-MM-DD'` string. */\n disabledDate?: (date: string) => boolean\n /** First day of the week: 0 = Sunday … 6 = Saturday. Defaults to `1` (Monday). */\n weekStartsOn?: number\n /** Shows a clear (×) button when a date is set. Defaults to `true`. */\n clearable?: boolean\n /** Form field name — auto-binds to a surrounding `<Form>` (value is the ISO date string). */\n name?: string\n /** Id for the input (label association). */\n id?: string\n className?: string\n style?: CSSProperties\n}\n\n/**\n * A date field with a typed, masked input **and** a calendar popover. The input accepts typing in\n * `format` (default `DD/MM/YYYY`, masked) and parses strictly; the calendar icon opens a\n * `Dropdown`-style popover (portaled, flips, scroll-locked — shared via `useFloatingPanel`) with a\n * keyboard-navigable month grid + year picker. All calendar math runs in **UTC** so the date never\n * drifts with the viewer's timezone; the value is a string in `valueFormat` (default ISO datetime\n * `'YYYY-MM-DDTHH:mm:ss'`) — incoming values are parsed leniently (a richer backend datetime is\n * accepted) and emitted at the start of the UTC day. Supports `min`/`max`, `disabledDate`,\n * `weekStartsOn`, and\n * `clearable`. Controlled (`value` + `onChange`) or\n * uncontrolled (`defaultValue`), and binds to a surrounding `<Form>` by `name` (validate with e.g.\n * `z.string().min(1, 'Required')`). Token-only styling. Requires the `dayjs` peer dependency.\n */\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(function DatePicker(\n {\n label,\n size = 'md',\n error,\n helperText,\n required = false,\n fullWidth = true,\n disabled = false,\n value,\n defaultValue,\n onChange,\n format = 'DD/MM/YYYY',\n valueFormat = 'YYYY-MM-DDTHH:mm:ss',\n placeholder,\n min,\n max,\n disabledDate,\n weekStartsOn = 1,\n clearable = true,\n name,\n id: idProp,\n className,\n style,\n },\n ref,\n) {\n const t = useT()\n const reactId = useId()\n const id = idProp ?? reactId\n const helperId = `${id}-helper`\n const labelId = `${id}-label`\n\n // ── value (controlled / form-bound / uncontrolled) — ISO 'YYYY-MM-DD' ──────────────────────────\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = isFormBound ? form!.field(name!) : undefined\n const externalValue =\n value !== undefined\n ? value\n : isFormBound\n ? ((form!.values[name!] as string | undefined) ?? '')\n : undefined\n const isControlled = value !== undefined || isFormBound\n const [internal, setInternal] = useState<string>(defaultValue ?? '')\n const currentValue = isControlled ? externalValue! : internal\n const selected = parseValue(currentValue, valueFormat)\n\n const resolvedError = error ?? bound?.error ?? false\n const resolvedHelperText = helperText ?? bound?.helperText\n\n const minDate = parseISO(min)\n const maxDate = parseISO(max)\n const mask = maskFromFormat(format)\n\n const commit = (next: string) => {\n if (next === currentValue) return // skip redundant onChange / setValue with an unchanged value\n if (!isControlled) setInternal(next)\n if (isFormBound) form!.setValue(name!, next)\n onChange?.(next)\n }\n\n // emit a chosen day in the wire `valueFormat` (start of the UTC day), or '' to clear\n const commitDate = (d: Dayjs | null) => commit(d ? formatValue(d, valueFormat) : '')\n\n // true when `d` is a different calendar day than the current value — gates commits so a no-op\n // round-trip (e.g. focusing then blurring) never rewrites an unchanged value's time to midnight\n const dayChanged = (d: Dayjs) => !selected || !d.isSame(selected, 'day')\n\n // input display text (kept in sync with the committed value; free while typing an incomplete date)\n const [inputText, setInputText] = useState<string>(() =>\n selected ? selected.format(format) : '',\n )\n useEffect(() => {\n setInputText(selected ? selected.format(format) : '')\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentValue, format, valueFormat])\n\n // ── popover ────────────────────────────────────────────────────────────────────────────────────\n const triggerRef = useRef<HTMLDivElement | null>(null)\n const inputRef = useRef<HTMLInputElement | null>(null)\n const [open, setOpen] = useState(false)\n const [viewMonth, setViewMonth] = useState<Dayjs>(() => selected ?? today())\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as { current: HTMLInputElement | null }).current = node\n },\n [ref],\n )\n\n // keep the form's blur handler live for the stable closePopover (`bound` is recreated each render)\n const fieldBlurRef = useRef<(() => void) | undefined>(undefined)\n fieldBlurRef.current = bound ? () => bound.onBlur({} as FocusEvent<HTMLInputElement>) : undefined\n\n // the floating panel forwards its node here, for the focus-leaves-the-widget check on blur\n const popoverRef = useRef<HTMLDivElement | null>(null)\n\n const closePopover = useCallback((refocus: boolean) => {\n setOpen(false)\n fieldBlurRef.current?.()\n if (refocus) inputRef.current?.focus()\n }, [])\n\n // when opening, sync the calendar to the selected date (or today)\n useEffect(() => {\n if (open) setViewMonth(selected ?? today())\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const handleInputChange = (raw: string) => {\n const masked = applyMask(raw, mask)\n setInputText(masked)\n if (masked === '') {\n commit('') // emptying the field clears the value\n return\n }\n const parsed = parseInput(masked, format)\n // commit only a complete, valid, in-range, enabled date that changes the day\n if (parsed && !isOutOfRange(parsed) && dayChanged(parsed)) commitDate(parsed)\n }\n\n const isOutOfRange = (d: Dayjs): boolean => {\n if (minDate && d.isBefore(minDate, 'day')) return true\n if (maxDate && d.isAfter(maxDate, 'day')) return true\n return Boolean(disabledDate && disabledDate(toISO(d)))\n }\n\n const handleInputBlur = (event: FocusEvent<HTMLInputElement>) => {\n // re-format from the committed value (drops half-typed / invalid text); fires the form's touched\n const parsed = parseInput(inputText, format)\n if (inputText === '') {\n commit('') // an emptied field stays cleared (don't restore the old date)\n } else if (parsed && !isOutOfRange(parsed)) {\n if (dayChanged(parsed)) commitDate(parsed)\n setInputText(parsed.format(format))\n } else {\n setInputText(selected ? selected.format(format) : '')\n }\n // only mark touched when focus leaves the whole widget (not into the popover)\n const nextEl = event.relatedTarget as Node | null\n if (nextEl && (popoverRef.current?.contains(nextEl) || triggerRef.current?.contains(nextEl)))\n return\n bound?.onBlur(event)\n }\n\n const handleSelect = (iso: string) => {\n const picked = parseISO(iso)\n if (picked && dayChanged(picked)) commitDate(picked) // re-picking the same day preserves its value\n closePopover(true)\n }\n\n const iconSize: 'sm' | 'md' = size === 'sm' ? 'sm' : 'md'\n\n return (\n <div\n className={clsx(\n styles.field,\n styles[size],\n fullWidth && styles.fullWidth,\n resolvedError && styles.error,\n disabled && styles.disabled,\n className,\n )}\n style={style}\n >\n {label != null && (\n <label htmlFor={id} className={styles.label}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n\n <div ref={triggerRef} className={clsx(styles.control, open && styles.open)}>\n <input\n ref={setInputRef}\n id={id}\n name={name}\n className={styles.input}\n value={inputText}\n placeholder={placeholder ?? format.toLowerCase()}\n disabled={disabled}\n inputMode=\"numeric\"\n autoComplete=\"off\"\n aria-invalid={resolvedError || undefined}\n aria-describedby={resolvedHelperText != null ? helperId : undefined}\n onChange={(e) => handleInputChange(e.target.value)}\n onBlur={handleInputBlur}\n />\n\n {clearable && currentValue !== '' && !disabled && (\n <button\n type=\"button\"\n className={styles.clear}\n aria-label={t('datePicker.clear')}\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n commit('')\n setInputText('')\n inputRef.current?.focus()\n }}\n >\n <Icon name=\"CloseCircle\" size=\"sm\" />\n </button>\n )}\n\n <IconButton\n type=\"button\"\n variant=\"text\"\n color=\"primary\"\n size={size}\n disabled={disabled}\n aria-label={t('datePicker.open')}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={styles.calendarButton}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => setOpen((o) => !o)}\n >\n <Icon name=\"Calendar3\" size={iconSize} />\n </IconButton>\n </div>\n\n <FloatingPanel\n ref={popoverRef}\n open={open}\n triggerRef={triggerRef}\n onClose={closePopover}\n role=\"dialog\"\n ariaLabel=\"Choose date\"\n trapFocus\n className={styles.popover}\n >\n <Calendar\n value={selected}\n month={viewMonth}\n onMonthChange={setViewMonth}\n onSelect={handleSelect}\n min={minDate}\n max={maxDate}\n disabledDate={disabledDate}\n weekStartsOn={weekStartsOn}\n autoFocus\n labelId={labelId}\n />\n </FloatingPanel>\n\n {resolvedHelperText != null && (\n <Typography\n as=\"span\"\n id={helperId}\n variant=\"bodySmall\"\n color={resolvedError ? 'error' : 'muted'}\n className={styles.helper}\n >\n {resolvedHelperText}\n </Typography>\n )}\n </div>\n )\n})\n"],"names":["DatePicker","forwardRef","label","size","error","helperText","required","fullWidth","disabled","value","defaultValue","onChange","format","valueFormat","placeholder","min","max","disabledDate","weekStartsOn","clearable","name","idProp","className","style","ref","t","useT","reactId","useId","id","helperId","labelId","form","useFormContext","isFormBound","bound","externalValue","isControlled","internal","setInternal","useState","currentValue","selected","parseValue","resolvedError","resolvedHelperText","minDate","parseISO","maxDate","mask","maskFromFormat","commit","next","commitDate","d","formatValue","dayChanged","inputText","setInputText","useEffect","triggerRef","useRef","inputRef","open","setOpen","viewMonth","setViewMonth","today","setInputRef","useCallback","node","fieldBlurRef","popoverRef","closePopover","refocus","_a","_b","handleInputChange","raw","masked","applyMask","parsed","parseInput","isOutOfRange","toISO","handleInputBlur","event","nextEl","handleSelect","iso","picked","iconSize","jsxs","clsx","styles","jsx","Typography","Icon","IconButton","o","FloatingPanel","Calendar"],"mappings":"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"}
@@ -4,11 +4,11 @@ import { clsx as U } from "clsx";
4
4
  import { u as Te } from "./formContext-B7ln1Miy.js";
5
5
  import { F as Ye } from "./FloatingPanel-BG9Uag__.js";
6
6
  import { I as X } from "./Icon-DaTvzLBu.js";
7
- import { I as be } from "./IconButton-BEGWfcVc.js";
7
+ import { I as be } from "./IconButton-CBp8QuTO.js";
8
8
  import { T as Z } from "./Typography-Cta6Rg4L.js";
9
- import { C as Fe } from "./Calendar-CtteUt82.js";
10
- import { p as we, a as O, m as Pe, t as _, s as o, b as ee, c as Re, f as Ve, d as Oe } from "./DatePicker.module-BZDftL4g.js";
11
- import { a as Ee } from "./ConfigProvider-DR9YMy9U.js";
9
+ import { C as Fe } from "./Calendar-SCih0NtS.js";
10
+ import { p as we, a as O, m as Pe, t as _, s as o, b as ee, c as Re, f as Ve, d as Oe } from "./DatePicker.module-CMMQyEhG.js";
11
+ import { a as Ee } from "./ConfigProvider-DL9fylMo.js";
12
12
  const Ue = Ne(function({
13
13
  label: E,
14
14
  size: k = "md",
@@ -188,4 +188,4 @@ const Ue = Ne(function({
188
188
  export {
189
189
  Ue as D
190
190
  };
191
- //# sourceMappingURL=DatePicker-CJioG5M7.js.map
191
+ //# sourceMappingURL=DatePicker-DP7yASzq.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker-CJioG5M7.js","sources":["../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type FocusEvent,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { useFormContext } from '../../form/formContext'\nimport { FloatingPanel } from '../FloatingPanel/FloatingPanel'\nimport { Icon } from '../Icon'\nimport { IconButton } from '../IconButton'\nimport { Typography } from '../Typography'\nimport { Calendar } from './Calendar'\nimport {\n applyMask,\n formatValue,\n maskFromFormat,\n parseISO,\n parseInput,\n parseValue,\n today,\n toISO,\n type Dayjs,\n} from './dateUtils'\nimport styles from './DatePicker.module.css'\n\nexport type DatePickerSize = 'sm' | 'md' | 'lg'\n\nexport interface DatePickerProps {\n /** Label rendered above the field. */\n label?: ReactNode\n /** Preset size — control height, font and calendar density. */\n size?: DatePickerSize\n /** Marks the field invalid: red border/ring + the `helperText` in the error color. */\n error?: boolean\n /** Helper / validation text under the field. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Adds a red asterisk after the label. */\n required?: boolean\n /** Stretches the field to fill its container width. Defaults to `true`. */\n fullWidth?: boolean\n /** Disables the field. */\n disabled?: boolean\n /** Controlled value — a date string in `valueFormat` (default ISO datetime; `''` = empty). */\n value?: string\n /** Initial value for uncontrolled use (in `valueFormat`). */\n defaultValue?: string\n /** Fires with the next date in `valueFormat` (`''` when cleared). */\n onChange?: (value: string) => void\n /** Display + typed-input format (dayjs tokens; should be numeric for the typed mask). Defaults to `'DD/MM/YYYY'`. */\n format?: string\n /**\n * Wire format of `value`/`defaultValue`/`onChange` (dayjs tokens), decoupled from the displayed\n * `format`. Defaults to the ISO datetime `'YYYY-MM-DDTHH:mm:ss'`. Incoming values are parsed\n * **leniently** (this format, then any ISO-8601 string — so a backend datetime like\n * `'2026-06-10T09:35:49.6134342'` is accepted), while `onChange` emits in exactly this format at the\n * **start of the UTC day** (e.g. `'2026-06-10T00:00:00'`). Pass `'YYYY-MM-DD'` for a plain date.\n */\n valueFormat?: string\n /** Placeholder shown when empty. Defaults to the lowercased `format` (e.g. `\"dd/mm/yyyy\"`). */\n placeholder?: string\n /** Earliest selectable date (ISO `'YYYY-MM-DD'`). */\n min?: string\n /** Latest selectable date (ISO `'YYYY-MM-DD'`). */\n max?: string\n /** Disables specific dates — receives each day as an ISO `'YYYY-MM-DD'` string. */\n disabledDate?: (date: string) => boolean\n /** First day of the week: 0 = Sunday … 6 = Saturday. Defaults to `1` (Monday). */\n weekStartsOn?: number\n /** Shows a clear (×) button when a date is set. Defaults to `true`. */\n clearable?: boolean\n /** Form field name — auto-binds to a surrounding `<Form>` (value is the ISO date string). */\n name?: string\n /** Id for the input (label association). */\n id?: string\n className?: string\n style?: CSSProperties\n}\n\n/**\n * A date field with a typed, masked input **and** a calendar popover. The input accepts typing in\n * `format` (default `DD/MM/YYYY`, masked) and parses strictly; the calendar icon opens a\n * `Dropdown`-style popover (portaled, flips, scroll-locked — shared via `useFloatingPanel`) with a\n * keyboard-navigable month grid + year picker. All calendar math runs in **UTC** so the date never\n * drifts with the viewer's timezone; the value is a string in `valueFormat` (default ISO datetime\n * `'YYYY-MM-DDTHH:mm:ss'`) — incoming values are parsed leniently (a richer backend datetime is\n * accepted) and emitted at the start of the UTC day. Supports `min`/`max`, `disabledDate`,\n * `weekStartsOn`, and\n * `clearable`. Controlled (`value` + `onChange`) or\n * uncontrolled (`defaultValue`), and binds to a surrounding `<Form>` by `name` (validate with e.g.\n * `z.string().min(1, 'Required')`). Token-only styling. Requires the `dayjs` peer dependency.\n */\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(function DatePicker(\n {\n label,\n size = 'md',\n error,\n helperText,\n required = false,\n fullWidth = true,\n disabled = false,\n value,\n defaultValue,\n onChange,\n format = 'DD/MM/YYYY',\n valueFormat = 'YYYY-MM-DDTHH:mm:ss',\n placeholder,\n min,\n max,\n disabledDate,\n weekStartsOn = 1,\n clearable = true,\n name,\n id: idProp,\n className,\n style,\n },\n ref,\n) {\n const t = useT()\n const reactId = useId()\n const id = idProp ?? reactId\n const helperId = `${id}-helper`\n const labelId = `${id}-label`\n\n // ── value (controlled / form-bound / uncontrolled) — ISO 'YYYY-MM-DD' ──────────────────────────\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = isFormBound ? form!.field(name!) : undefined\n const externalValue =\n value !== undefined\n ? value\n : isFormBound\n ? ((form!.values[name!] as string | undefined) ?? '')\n : undefined\n const isControlled = value !== undefined || isFormBound\n const [internal, setInternal] = useState<string>(defaultValue ?? '')\n const currentValue = isControlled ? externalValue! : internal\n const selected = parseValue(currentValue, valueFormat)\n\n const resolvedError = error ?? bound?.error ?? false\n const resolvedHelperText = helperText ?? bound?.helperText\n\n const minDate = parseISO(min)\n const maxDate = parseISO(max)\n const mask = maskFromFormat(format)\n\n const commit = (next: string) => {\n if (next === currentValue) return // skip redundant onChange / setValue with an unchanged value\n if (!isControlled) setInternal(next)\n if (isFormBound) form!.setValue(name!, next)\n onChange?.(next)\n }\n\n // emit a chosen day in the wire `valueFormat` (start of the UTC day), or '' to clear\n const commitDate = (d: Dayjs | null) => commit(d ? formatValue(d, valueFormat) : '')\n\n // true when `d` is a different calendar day than the current value — gates commits so a no-op\n // round-trip (e.g. focusing then blurring) never rewrites an unchanged value's time to midnight\n const dayChanged = (d: Dayjs) => !selected || !d.isSame(selected, 'day')\n\n // input display text (kept in sync with the committed value; free while typing an incomplete date)\n const [inputText, setInputText] = useState<string>(() =>\n selected ? selected.format(format) : '',\n )\n useEffect(() => {\n setInputText(selected ? selected.format(format) : '')\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentValue, format, valueFormat])\n\n // ── popover ────────────────────────────────────────────────────────────────────────────────────\n const triggerRef = useRef<HTMLDivElement | null>(null)\n const inputRef = useRef<HTMLInputElement | null>(null)\n const [open, setOpen] = useState(false)\n const [viewMonth, setViewMonth] = useState<Dayjs>(() => selected ?? today())\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as { current: HTMLInputElement | null }).current = node\n },\n [ref],\n )\n\n // keep the form's blur handler live for the stable closePopover (`bound` is recreated each render)\n const fieldBlurRef = useRef<(() => void) | undefined>(undefined)\n fieldBlurRef.current = bound ? () => bound.onBlur({} as FocusEvent<HTMLInputElement>) : undefined\n\n // the floating panel forwards its node here, for the focus-leaves-the-widget check on blur\n const popoverRef = useRef<HTMLDivElement | null>(null)\n\n const closePopover = useCallback((refocus: boolean) => {\n setOpen(false)\n fieldBlurRef.current?.()\n if (refocus) inputRef.current?.focus()\n }, [])\n\n // when opening, sync the calendar to the selected date (or today)\n useEffect(() => {\n if (open) setViewMonth(selected ?? today())\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const handleInputChange = (raw: string) => {\n const masked = applyMask(raw, mask)\n setInputText(masked)\n if (masked === '') {\n commit('') // emptying the field clears the value\n return\n }\n const parsed = parseInput(masked, format)\n // commit only a complete, valid, in-range, enabled date that changes the day\n if (parsed && !isOutOfRange(parsed) && dayChanged(parsed)) commitDate(parsed)\n }\n\n const isOutOfRange = (d: Dayjs): boolean => {\n if (minDate && d.isBefore(minDate, 'day')) return true\n if (maxDate && d.isAfter(maxDate, 'day')) return true\n return Boolean(disabledDate && disabledDate(toISO(d)))\n }\n\n const handleInputBlur = (event: FocusEvent<HTMLInputElement>) => {\n // re-format from the committed value (drops half-typed / invalid text); fires the form's touched\n const parsed = parseInput(inputText, format)\n if (inputText === '') {\n commit('') // an emptied field stays cleared (don't restore the old date)\n } else if (parsed && !isOutOfRange(parsed)) {\n if (dayChanged(parsed)) commitDate(parsed)\n setInputText(parsed.format(format))\n } else {\n setInputText(selected ? selected.format(format) : '')\n }\n // only mark touched when focus leaves the whole widget (not into the popover)\n const nextEl = event.relatedTarget as Node | null\n if (nextEl && (popoverRef.current?.contains(nextEl) || triggerRef.current?.contains(nextEl)))\n return\n bound?.onBlur(event)\n }\n\n const handleSelect = (iso: string) => {\n const picked = parseISO(iso)\n if (picked && dayChanged(picked)) commitDate(picked) // re-picking the same day preserves its value\n closePopover(true)\n }\n\n const iconSize: 'sm' | 'md' = size === 'sm' ? 'sm' : 'md'\n\n return (\n <div\n className={clsx(\n styles.field,\n styles[size],\n fullWidth && styles.fullWidth,\n resolvedError && styles.error,\n disabled && styles.disabled,\n className,\n )}\n style={style}\n >\n {label != null && (\n <label htmlFor={id} className={styles.label}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n\n <div ref={triggerRef} className={clsx(styles.control, open && styles.open)}>\n <input\n ref={setInputRef}\n id={id}\n name={name}\n className={styles.input}\n value={inputText}\n placeholder={placeholder ?? format.toLowerCase()}\n disabled={disabled}\n inputMode=\"numeric\"\n autoComplete=\"off\"\n aria-invalid={resolvedError || undefined}\n aria-describedby={resolvedHelperText != null ? helperId : undefined}\n onChange={(e) => handleInputChange(e.target.value)}\n onBlur={handleInputBlur}\n />\n\n {clearable && currentValue !== '' && !disabled && (\n <button\n type=\"button\"\n className={styles.clear}\n aria-label={t('datePicker.clear')}\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n commit('')\n setInputText('')\n inputRef.current?.focus()\n }}\n >\n <Icon name=\"CloseCircle\" size=\"sm\" />\n </button>\n )}\n\n <IconButton\n type=\"button\"\n variant=\"text\"\n color=\"primary\"\n size={size}\n disabled={disabled}\n aria-label={t('datePicker.open')}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={styles.calendarButton}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => setOpen((o) => !o)}\n >\n <Icon name=\"Calendar3\" size={iconSize} />\n </IconButton>\n </div>\n\n <FloatingPanel\n ref={popoverRef}\n open={open}\n triggerRef={triggerRef}\n onClose={closePopover}\n role=\"dialog\"\n ariaLabel=\"Choose date\"\n trapFocus\n className={styles.popover}\n >\n <Calendar\n value={selected}\n month={viewMonth}\n onMonthChange={setViewMonth}\n onSelect={handleSelect}\n min={minDate}\n max={maxDate}\n disabledDate={disabledDate}\n weekStartsOn={weekStartsOn}\n autoFocus\n labelId={labelId}\n />\n </FloatingPanel>\n\n {resolvedHelperText != null && (\n <Typography\n as=\"span\"\n id={helperId}\n variant=\"bodySmall\"\n color={resolvedError ? 'error' : 'muted'}\n className={styles.helper}\n >\n {resolvedHelperText}\n </Typography>\n )}\n </div>\n )\n})\n"],"names":["DatePicker","forwardRef","label","size","error","helperText","required","fullWidth","disabled","value","defaultValue","onChange","format","valueFormat","placeholder","min","max","disabledDate","weekStartsOn","clearable","name","idProp","className","style","ref","t","useT","reactId","useId","id","helperId","labelId","form","useFormContext","isFormBound","bound","externalValue","isControlled","internal","setInternal","useState","currentValue","selected","parseValue","resolvedError","resolvedHelperText","minDate","parseISO","maxDate","mask","maskFromFormat","commit","next","commitDate","d","formatValue","dayChanged","inputText","setInputText","useEffect","triggerRef","useRef","inputRef","open","setOpen","viewMonth","setViewMonth","today","setInputRef","useCallback","node","fieldBlurRef","popoverRef","closePopover","refocus","_a","_b","handleInputChange","raw","masked","applyMask","parsed","parseInput","isOutOfRange","toISO","handleInputBlur","event","nextEl","handleSelect","iso","picked","iconSize","jsxs","clsx","styles","jsx","Typography","Icon","IconButton","o","FloatingPanel","Calendar"],"mappings":";;;;;;;;;;;AAkGO,MAAMA,KAAaC,GAA8C,SACtE;AAAA,EACE,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,UAAAC,KAAW;AAAA,EACX,WAAAC,KAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,aAAAC,IAAc;AAAA,EACd,aAAAC;AAAA,EACA,KAAAC;AAAA,EACA,KAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC,KAAe;AAAA,EACf,WAAAC,KAAY;AAAA,EACZ,MAAAC;AAAA,EACA,IAAIC;AAAA,EACJ,WAAAC;AAAA,EACA,OAAAC;AACF,GACAC,GACA;AACA,QAAMC,IAAIC,GAAA,GACJC,KAAUC,GAAA,GACVC,IAAKR,MAAUM,IACfG,IAAW,GAAGD,CAAE,WAChBE,KAAU,GAAGF,CAAE,UAGfG,IAAOC,GAAA,GACPC,IAAc,GAAQF,KAAQZ,IAC9Be,IAAQD,IAAcF,EAAM,MAAMZ,CAAK,IAAI,QAC3CgB,KACJ3B,MAAU,SACNA,IACAyB,IACIF,EAAM,OAAOZ,CAAK,KAA4B,KAChD,QACFiB,IAAe5B,MAAU,UAAayB,GACtC,CAACI,IAAUC,EAAW,IAAIC,EAAiB9B,MAAgB,EAAE,GAC7D+B,IAAeJ,IAAeD,KAAiBE,IAC/CI,IAAWC,GAAWF,GAAc5B,CAAW,GAE/C+B,IAAgBxC,OAAS+B,KAAA,gBAAAA,EAAO,UAAS,IACzCU,IAAqBxC,OAAc8B,KAAA,gBAAAA,EAAO,aAE1CW,IAAUC,EAAShC,EAAG,GACtBiC,IAAUD,EAAS/B,EAAG,GACtBiC,KAAOC,GAAetC,CAAM,GAE5BuC,IAAS,CAACC,MAAiB;AAC/B,IAAIA,MAASX,MACRJ,KAAcE,GAAYa,CAAI,GAC/BlB,KAAaF,EAAM,SAASZ,GAAOgC,CAAI,GAC3CzC,KAAA,QAAAA,EAAWyC;AAAA,EACb,GAGMC,IAAa,CAACC,MAAoBH,EAAOG,IAAIC,GAAYD,GAAGzC,CAAW,IAAI,EAAE,GAI7E2C,IAAa,CAACF,MAAa,CAACZ,KAAY,CAACY,EAAE,OAAOZ,GAAU,KAAK,GAGjE,CAACe,GAAWC,CAAY,IAAIlB;AAAA,IAAiB,MACjDE,IAAWA,EAAS,OAAO9B,CAAM,IAAI;AAAA,EAAA;AAEvC,EAAA+C,EAAU,MAAM;AACd,IAAAD,EAAahB,IAAWA,EAAS,OAAO9B,CAAM,IAAI,EAAE;AAAA,EAEtD,GAAG,CAAC6B,GAAc7B,GAAQC,CAAW,CAAC;AAGtC,QAAM+C,IAAaC,EAA8B,IAAI,GAC/CC,IAAWD,EAAgC,IAAI,GAC/C,CAACE,GAAMC,CAAO,IAAIxB,EAAS,EAAK,GAChC,CAACyB,IAAWC,CAAY,IAAI1B,EAAgB,MAAME,KAAYyB,GAAO,GAErEC,KAAcC;AAAA,IAClB,CAACC,MAAkC;AACjC,MAAAR,EAAS,UAAUQ,GACf,OAAO9C,KAAQ,aAAYA,EAAI8C,CAAI,IAC9B9C,MAAMA,EAA6C,UAAU8C;AAAA,IACxE;AAAA,IACA,CAAC9C,CAAG;AAAA,EAAA,GAIA+C,IAAeV,EAAiC,MAAS;AAC/D,EAAAU,EAAa,UAAUpC,IAAQ,MAAMA,EAAM,OAAO,CAAA,CAAkC,IAAI;AAGxF,QAAMqC,IAAaX,EAA8B,IAAI,GAE/CY,IAAeJ,EAAY,CAACK,MAAqB;;AACrD,IAAAV,EAAQ,EAAK,IACbW,IAAAJ,EAAa,YAAb,QAAAI,EAAA,KAAAJ,IACIG,OAASE,IAAAd,EAAS,YAAT,QAAAc,EAAkB;AAAA,EACjC,GAAG,CAAA,CAAE;AAGL,EAAAjB,EAAU,MAAM;AACd,IAAII,KAAMG,EAAaxB,KAAYyB,EAAA,CAAO;AAAA,EAE5C,GAAG,CAACJ,CAAI,CAAC;AAET,QAAMc,KAAoB,CAACC,MAAgB;AACzC,UAAMC,IAASC,GAAUF,GAAK7B,EAAI;AAElC,QADAS,EAAaqB,CAAM,GACfA,MAAW,IAAI;AACjB,MAAA5B,EAAO,EAAE;AACT;AAAA,IACF;AACA,UAAM8B,IAASC,GAAWH,GAAQnE,CAAM;AAExC,IAAIqE,KAAU,CAACE,EAAaF,CAAM,KAAKzB,EAAWyB,CAAM,KAAG5B,EAAW4B,CAAM;AAAA,EAC9E,GAEME,IAAe,CAAC7B,MAChBR,KAAWQ,EAAE,SAASR,GAAS,KAAK,KACpCE,KAAWM,EAAE,QAAQN,GAAS,KAAK,IAAU,KAC1C,GAAQ/B,KAAgBA,EAAamE,GAAM9B,CAAC,CAAC,IAGhD+B,KAAkB,CAACC,MAAwC;;AAE/D,UAAML,IAASC,GAAWzB,GAAW7C,CAAM;AAC3C,IAAI6C,MAAc,KAChBN,EAAO,EAAE,IACA8B,KAAU,CAACE,EAAaF,CAAM,KACnCzB,EAAWyB,CAAM,KAAG5B,EAAW4B,CAAM,GACzCvB,EAAauB,EAAO,OAAOrE,CAAM,CAAC,KAElC8C,EAAahB,IAAWA,EAAS,OAAO9B,CAAM,IAAI,EAAE;AAGtD,UAAM2E,IAASD,EAAM;AACrB,IAAIC,OAAWZ,IAAAH,EAAW,YAAX,QAAAG,EAAoB,SAASY,OAAWX,IAAAhB,EAAW,YAAX,QAAAgB,EAAoB,SAASW,OAEpFpD,KAAA,QAAAA,EAAO,OAAOmD;AAAA,EAChB,GAEME,KAAe,CAACC,MAAgB;AACpC,UAAMC,IAAS3C,EAAS0C,CAAG;AAC3B,IAAIC,KAAUlC,EAAWkC,CAAM,OAAcA,CAAM,GACnDjB,EAAa,EAAI;AAAA,EACnB,GAEMkB,KAAwBxF,MAAS,OAAO,OAAO;AAErD,SACE,gBAAAyF;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACTC,EAAO;AAAA,QACPA,EAAO3F,CAAI;AAAA,QACXI,MAAauF,EAAO;AAAA,QACpBlD,KAAiBkD,EAAO;AAAA,QACxBtF,KAAYsF,EAAO;AAAA,QACnBxE;AAAA,MAAA;AAAA,MAEF,OAAAC;AAAA,MAEC,UAAA;AAAA,QAAArB,KAAS,QACR,gBAAA0F,EAAC,SAAA,EAAM,SAAS/D,GAAI,WAAWiE,EAAO,OACpC,UAAA;AAAA,UAAA,gBAAAC,EAACC,KAAW,IAAG,QAAO,SAAQ,aAAY,OAAM,SAC7C,UAAA9F,EAAA,CACH;AAAA,UACCI,wBACE,QAAA,EAAK,WAAWwF,EAAO,UAAU,eAAY,QAAO,UAAA,IAAA,CAErD;AAAA,QAAA,GAEJ;AAAA,QAGF,gBAAAF,EAAC,OAAA,EAAI,KAAKhC,GAAY,WAAWiC,EAAKC,EAAO,SAAS/B,KAAQ+B,EAAO,IAAI,GACvE,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK3B;AAAA,cACL,IAAAvC;AAAA,cACA,MAAAT;AAAA,cACA,WAAW0E,EAAO;AAAA,cAClB,OAAOrC;AAAA,cACP,aAAa3C,MAAeF,EAAO,YAAA;AAAA,cACnC,UAAAJ;AAAA,cACA,WAAU;AAAA,cACV,cAAa;AAAA,cACb,gBAAcoC,KAAiB;AAAA,cAC/B,oBAAkBC,KAAsB,OAAOf,IAAW;AAAA,cAC1D,UAAU,CAAC,MAAM+C,GAAkB,EAAE,OAAO,KAAK;AAAA,cACjD,QAAQQ;AAAA,YAAA;AAAA,UAAA;AAAA,UAGTlE,MAAasB,MAAiB,MAAM,CAACjC,KACpC,gBAAAuF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAWD,EAAO;AAAA,cAClB,cAAYrE,EAAE,kBAAkB;AAAA,cAChC,UAAU;AAAA,cACV,aAAa,CAAC,MAAM,EAAE,eAAA;AAAA,cACtB,SAAS,MAAM;;AACb,gBAAA0B,EAAO,EAAE,GACTO,EAAa,EAAE,IACfiB,IAAAb,EAAS,YAAT,QAAAa,EAAkB;AAAA,cACpB;AAAA,cAEA,UAAA,gBAAAoB,EAACE,GAAA,EAAK,MAAK,eAAc,MAAK,KAAA,CAAK;AAAA,YAAA;AAAA,UAAA;AAAA,UAIvC,gBAAAF;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,OAAM;AAAA,cACN,MAAA/F;AAAA,cACA,UAAAK;AAAA,cACA,cAAYiB,EAAE,iBAAiB;AAAA,cAC/B,iBAAc;AAAA,cACd,iBAAesC;AAAA,cACf,WAAW+B,EAAO;AAAA,cAClB,aAAa,CAAC,MAAM,EAAE,eAAA;AAAA,cACtB,SAAS,MAAM9B,EAAQ,CAACmC,MAAM,CAACA,CAAC;AAAA,cAEhC,UAAA,gBAAAJ,EAACE,GAAA,EAAK,MAAK,aAAY,MAAMN,GAAA,CAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QACzC,GACF;AAAA,QAEA,gBAAAI;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,KAAK5B;AAAA,YACL,MAAAT;AAAA,YACA,YAAAH;AAAA,YACA,SAASa;AAAA,YACT,MAAK;AAAA,YACL,WAAU;AAAA,YACV,WAAS;AAAA,YACT,WAAWqB,EAAO;AAAA,YAElB,UAAA,gBAAAC;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,OAAO3D;AAAA,gBACP,OAAOuB;AAAA,gBACP,eAAeC;AAAA,gBACf,UAAUsB;AAAA,gBACV,KAAK1C;AAAA,gBACL,KAAKE;AAAA,gBACL,cAAA/B;AAAA,gBACA,cAAAC;AAAA,gBACA,WAAS;AAAA,gBACT,SAAAa;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,QAGDc,KAAsB,QACrB,gBAAAkD;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,IAAIlE;AAAA,YACJ,SAAQ;AAAA,YACR,OAAOc,IAAgB,UAAU;AAAA,YACjC,WAAWkD,EAAO;AAAA,YAEjB,UAAAjD;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;"}
1
+ {"version":3,"file":"DatePicker-DP7yASzq.js","sources":["../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type FocusEvent,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { useFormContext } from '../../form/formContext'\nimport { FloatingPanel } from '../FloatingPanel/FloatingPanel'\nimport { Icon } from '../Icon'\nimport { IconButton } from '../IconButton'\nimport { Typography } from '../Typography'\nimport { Calendar } from './Calendar'\nimport {\n applyMask,\n formatValue,\n maskFromFormat,\n parseISO,\n parseInput,\n parseValue,\n today,\n toISO,\n type Dayjs,\n} from './dateUtils'\nimport styles from './DatePicker.module.css'\n\nexport type DatePickerSize = 'sm' | 'md' | 'lg'\n\nexport interface DatePickerProps {\n /** Label rendered above the field. */\n label?: ReactNode\n /** Preset size — control height, font and calendar density. */\n size?: DatePickerSize\n /** Marks the field invalid: red border/ring + the `helperText` in the error color. */\n error?: boolean\n /** Helper / validation text under the field. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Adds a red asterisk after the label. */\n required?: boolean\n /** Stretches the field to fill its container width. Defaults to `true`. */\n fullWidth?: boolean\n /** Disables the field. */\n disabled?: boolean\n /** Controlled value — a date string in `valueFormat` (default ISO datetime; `''` = empty). */\n value?: string\n /** Initial value for uncontrolled use (in `valueFormat`). */\n defaultValue?: string\n /** Fires with the next date in `valueFormat` (`''` when cleared). */\n onChange?: (value: string) => void\n /** Display + typed-input format (dayjs tokens; should be numeric for the typed mask). Defaults to `'DD/MM/YYYY'`. */\n format?: string\n /**\n * Wire format of `value`/`defaultValue`/`onChange` (dayjs tokens), decoupled from the displayed\n * `format`. Defaults to the ISO datetime `'YYYY-MM-DDTHH:mm:ss'`. Incoming values are parsed\n * **leniently** (this format, then any ISO-8601 string — so a backend datetime like\n * `'2026-06-10T09:35:49.6134342'` is accepted), while `onChange` emits in exactly this format at the\n * **start of the UTC day** (e.g. `'2026-06-10T00:00:00'`). Pass `'YYYY-MM-DD'` for a plain date.\n */\n valueFormat?: string\n /** Placeholder shown when empty. Defaults to the lowercased `format` (e.g. `\"dd/mm/yyyy\"`). */\n placeholder?: string\n /** Earliest selectable date (ISO `'YYYY-MM-DD'`). */\n min?: string\n /** Latest selectable date (ISO `'YYYY-MM-DD'`). */\n max?: string\n /** Disables specific dates — receives each day as an ISO `'YYYY-MM-DD'` string. */\n disabledDate?: (date: string) => boolean\n /** First day of the week: 0 = Sunday … 6 = Saturday. Defaults to `1` (Monday). */\n weekStartsOn?: number\n /** Shows a clear (×) button when a date is set. Defaults to `true`. */\n clearable?: boolean\n /** Form field name — auto-binds to a surrounding `<Form>` (value is the ISO date string). */\n name?: string\n /** Id for the input (label association). */\n id?: string\n className?: string\n style?: CSSProperties\n}\n\n/**\n * A date field with a typed, masked input **and** a calendar popover. The input accepts typing in\n * `format` (default `DD/MM/YYYY`, masked) and parses strictly; the calendar icon opens a\n * `Dropdown`-style popover (portaled, flips, scroll-locked — shared via `useFloatingPanel`) with a\n * keyboard-navigable month grid + year picker. All calendar math runs in **UTC** so the date never\n * drifts with the viewer's timezone; the value is a string in `valueFormat` (default ISO datetime\n * `'YYYY-MM-DDTHH:mm:ss'`) — incoming values are parsed leniently (a richer backend datetime is\n * accepted) and emitted at the start of the UTC day. Supports `min`/`max`, `disabledDate`,\n * `weekStartsOn`, and\n * `clearable`. Controlled (`value` + `onChange`) or\n * uncontrolled (`defaultValue`), and binds to a surrounding `<Form>` by `name` (validate with e.g.\n * `z.string().min(1, 'Required')`). Token-only styling. Requires the `dayjs` peer dependency.\n */\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(function DatePicker(\n {\n label,\n size = 'md',\n error,\n helperText,\n required = false,\n fullWidth = true,\n disabled = false,\n value,\n defaultValue,\n onChange,\n format = 'DD/MM/YYYY',\n valueFormat = 'YYYY-MM-DDTHH:mm:ss',\n placeholder,\n min,\n max,\n disabledDate,\n weekStartsOn = 1,\n clearable = true,\n name,\n id: idProp,\n className,\n style,\n },\n ref,\n) {\n const t = useT()\n const reactId = useId()\n const id = idProp ?? reactId\n const helperId = `${id}-helper`\n const labelId = `${id}-label`\n\n // ── value (controlled / form-bound / uncontrolled) — ISO 'YYYY-MM-DD' ──────────────────────────\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = isFormBound ? form!.field(name!) : undefined\n const externalValue =\n value !== undefined\n ? value\n : isFormBound\n ? ((form!.values[name!] as string | undefined) ?? '')\n : undefined\n const isControlled = value !== undefined || isFormBound\n const [internal, setInternal] = useState<string>(defaultValue ?? '')\n const currentValue = isControlled ? externalValue! : internal\n const selected = parseValue(currentValue, valueFormat)\n\n const resolvedError = error ?? bound?.error ?? false\n const resolvedHelperText = helperText ?? bound?.helperText\n\n const minDate = parseISO(min)\n const maxDate = parseISO(max)\n const mask = maskFromFormat(format)\n\n const commit = (next: string) => {\n if (next === currentValue) return // skip redundant onChange / setValue with an unchanged value\n if (!isControlled) setInternal(next)\n if (isFormBound) form!.setValue(name!, next)\n onChange?.(next)\n }\n\n // emit a chosen day in the wire `valueFormat` (start of the UTC day), or '' to clear\n const commitDate = (d: Dayjs | null) => commit(d ? formatValue(d, valueFormat) : '')\n\n // true when `d` is a different calendar day than the current value — gates commits so a no-op\n // round-trip (e.g. focusing then blurring) never rewrites an unchanged value's time to midnight\n const dayChanged = (d: Dayjs) => !selected || !d.isSame(selected, 'day')\n\n // input display text (kept in sync with the committed value; free while typing an incomplete date)\n const [inputText, setInputText] = useState<string>(() =>\n selected ? selected.format(format) : '',\n )\n useEffect(() => {\n setInputText(selected ? selected.format(format) : '')\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentValue, format, valueFormat])\n\n // ── popover ────────────────────────────────────────────────────────────────────────────────────\n const triggerRef = useRef<HTMLDivElement | null>(null)\n const inputRef = useRef<HTMLInputElement | null>(null)\n const [open, setOpen] = useState(false)\n const [viewMonth, setViewMonth] = useState<Dayjs>(() => selected ?? today())\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as { current: HTMLInputElement | null }).current = node\n },\n [ref],\n )\n\n // keep the form's blur handler live for the stable closePopover (`bound` is recreated each render)\n const fieldBlurRef = useRef<(() => void) | undefined>(undefined)\n fieldBlurRef.current = bound ? () => bound.onBlur({} as FocusEvent<HTMLInputElement>) : undefined\n\n // the floating panel forwards its node here, for the focus-leaves-the-widget check on blur\n const popoverRef = useRef<HTMLDivElement | null>(null)\n\n const closePopover = useCallback((refocus: boolean) => {\n setOpen(false)\n fieldBlurRef.current?.()\n if (refocus) inputRef.current?.focus()\n }, [])\n\n // when opening, sync the calendar to the selected date (or today)\n useEffect(() => {\n if (open) setViewMonth(selected ?? today())\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const handleInputChange = (raw: string) => {\n const masked = applyMask(raw, mask)\n setInputText(masked)\n if (masked === '') {\n commit('') // emptying the field clears the value\n return\n }\n const parsed = parseInput(masked, format)\n // commit only a complete, valid, in-range, enabled date that changes the day\n if (parsed && !isOutOfRange(parsed) && dayChanged(parsed)) commitDate(parsed)\n }\n\n const isOutOfRange = (d: Dayjs): boolean => {\n if (minDate && d.isBefore(minDate, 'day')) return true\n if (maxDate && d.isAfter(maxDate, 'day')) return true\n return Boolean(disabledDate && disabledDate(toISO(d)))\n }\n\n const handleInputBlur = (event: FocusEvent<HTMLInputElement>) => {\n // re-format from the committed value (drops half-typed / invalid text); fires the form's touched\n const parsed = parseInput(inputText, format)\n if (inputText === '') {\n commit('') // an emptied field stays cleared (don't restore the old date)\n } else if (parsed && !isOutOfRange(parsed)) {\n if (dayChanged(parsed)) commitDate(parsed)\n setInputText(parsed.format(format))\n } else {\n setInputText(selected ? selected.format(format) : '')\n }\n // only mark touched when focus leaves the whole widget (not into the popover)\n const nextEl = event.relatedTarget as Node | null\n if (nextEl && (popoverRef.current?.contains(nextEl) || triggerRef.current?.contains(nextEl)))\n return\n bound?.onBlur(event)\n }\n\n const handleSelect = (iso: string) => {\n const picked = parseISO(iso)\n if (picked && dayChanged(picked)) commitDate(picked) // re-picking the same day preserves its value\n closePopover(true)\n }\n\n const iconSize: 'sm' | 'md' = size === 'sm' ? 'sm' : 'md'\n\n return (\n <div\n className={clsx(\n styles.field,\n styles[size],\n fullWidth && styles.fullWidth,\n resolvedError && styles.error,\n disabled && styles.disabled,\n className,\n )}\n style={style}\n >\n {label != null && (\n <label htmlFor={id} className={styles.label}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n\n <div ref={triggerRef} className={clsx(styles.control, open && styles.open)}>\n <input\n ref={setInputRef}\n id={id}\n name={name}\n className={styles.input}\n value={inputText}\n placeholder={placeholder ?? format.toLowerCase()}\n disabled={disabled}\n inputMode=\"numeric\"\n autoComplete=\"off\"\n aria-invalid={resolvedError || undefined}\n aria-describedby={resolvedHelperText != null ? helperId : undefined}\n onChange={(e) => handleInputChange(e.target.value)}\n onBlur={handleInputBlur}\n />\n\n {clearable && currentValue !== '' && !disabled && (\n <button\n type=\"button\"\n className={styles.clear}\n aria-label={t('datePicker.clear')}\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n commit('')\n setInputText('')\n inputRef.current?.focus()\n }}\n >\n <Icon name=\"CloseCircle\" size=\"sm\" />\n </button>\n )}\n\n <IconButton\n type=\"button\"\n variant=\"text\"\n color=\"primary\"\n size={size}\n disabled={disabled}\n aria-label={t('datePicker.open')}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={styles.calendarButton}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => setOpen((o) => !o)}\n >\n <Icon name=\"Calendar3\" size={iconSize} />\n </IconButton>\n </div>\n\n <FloatingPanel\n ref={popoverRef}\n open={open}\n triggerRef={triggerRef}\n onClose={closePopover}\n role=\"dialog\"\n ariaLabel=\"Choose date\"\n trapFocus\n className={styles.popover}\n >\n <Calendar\n value={selected}\n month={viewMonth}\n onMonthChange={setViewMonth}\n onSelect={handleSelect}\n min={minDate}\n max={maxDate}\n disabledDate={disabledDate}\n weekStartsOn={weekStartsOn}\n autoFocus\n labelId={labelId}\n />\n </FloatingPanel>\n\n {resolvedHelperText != null && (\n <Typography\n as=\"span\"\n id={helperId}\n variant=\"bodySmall\"\n color={resolvedError ? 'error' : 'muted'}\n className={styles.helper}\n >\n {resolvedHelperText}\n </Typography>\n )}\n </div>\n )\n})\n"],"names":["DatePicker","forwardRef","label","size","error","helperText","required","fullWidth","disabled","value","defaultValue","onChange","format","valueFormat","placeholder","min","max","disabledDate","weekStartsOn","clearable","name","idProp","className","style","ref","t","useT","reactId","useId","id","helperId","labelId","form","useFormContext","isFormBound","bound","externalValue","isControlled","internal","setInternal","useState","currentValue","selected","parseValue","resolvedError","resolvedHelperText","minDate","parseISO","maxDate","mask","maskFromFormat","commit","next","commitDate","d","formatValue","dayChanged","inputText","setInputText","useEffect","triggerRef","useRef","inputRef","open","setOpen","viewMonth","setViewMonth","today","setInputRef","useCallback","node","fieldBlurRef","popoverRef","closePopover","refocus","_a","_b","handleInputChange","raw","masked","applyMask","parsed","parseInput","isOutOfRange","toISO","handleInputBlur","event","nextEl","handleSelect","iso","picked","iconSize","jsxs","clsx","styles","jsx","Typography","Icon","IconButton","o","FloatingPanel","Calendar"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const o=require("dayjs"),f=require("dayjs/plugin/utc"),p=require("dayjs/plugin/customParseFormat");o.extend(f);o.extend(p);const r="YYYY-MM-DD";function g(t){if(!t)return null;const s=o.utc(t,r,!0);return s.isValid()?s:null}function y(t,s){const c=o.utc(t,s,!0);return c.isValid()?c:null}const m=t=>t.format(r);function k(t,s){if(!t)return null;const c=o.utc(t,s,!0);if(c.isValid())return c;const e=o.utc(t);return e.isValid()?e:null}const h=(t,s)=>t.startOf("day").format(s),i=()=>o.utc(o().format(r),r),d="YYYY-MM-DDTHH:mm:ss.SSS";function S(t){return t?o.utc(t.local().format(d)):null}function T(t){return o(t.format(d)).utc()}function b(t,s){if(!t)return null;const c=o.utc(t,s,!0);if(c.isValid())return c;const e=o.utc(`${i().format(r)}T${t}`);if(e.isValid())return e;const n=o.utc(t);return n.isValid()?n:null}function M(t,s,c=1){if(c<=0)return[];const e=[];for(let n=t;n<=s;n+=c)e.push(n);return e}const O=t=>String(t).padStart(2,"0"),A=t=>t.replace(/[DMYHhms]/g,"9").replace(/A/g,"AA").replace(/a/g,"aa"),V=/[0-9]/,I=/[A-Za-z]/;function D(t,s){let c="",e=0;for(const n of s)if(n==="9"){for(;e<t.length&&!V.test(t[e]);)e++;if(e>=t.length)break;c+=t[e++]}else if(n==="A"||n==="a"){for(;e<t.length&&!I.test(t[e]);)e++;if(e>=t.length)break;c+=n==="A"?t[e++].toUpperCase():t[e++].toLowerCase()}else{if(e>=t.length)break;t[e]===n&&e++,c+=n}return c}function G(t,s,c,e){return!!(s&&t.isBefore(s,"day")||c&&t.isAfter(c,"day")||e&&e(t.format(r)))}function H(t,s){const c=t.startOf("month"),e=(c.day()-s+7)%7,n=c.subtract(e,"day"),_=i(),l=t.month();return Array.from({length:42},(ft,u)=>{const a=n.add(u,"day");return{date:a,iso:a.format(r),inMonth:a.month()===l,isToday:a.isSame(_,"day")}})}function W(t,s,c){const e=Math.min(t?t.year():c-100,c),n=Math.max(s?s.year():c+100,c);return Array.from({length:n-e+1},(_,l)=>e+l)}const q="_field_1scg0_1",L="_fullWidth_1scg0_7",Y="_label_1scg0_12",C="_required_1scg0_19",F="_control_1scg0_25",B="_open_1scg0_39",U="_error_1scg0_43",P="_disabled_1scg0_51",$="_input_1scg0_59",j="_clear_1scg0_79",x="_calendarButton_1scg0_97",z="_sm_1scg0_108",Z="_md_1scg0_112",w="_lg_1scg0_116",E="_helper_1scg0_121",J="_popover_1scg0_126",K="_calendar_1scg0_97",N="_calHeader_1scg0_136",Q="_calTitleGroup_1scg0_144",R="_calTitle_1scg0_144",X="_calTitleStatic_1scg0_173",v="_weekdays_1scg0_180",tt="_week_1scg0_180",et="_weekday_1scg0_180",ct="_day_1scg0_196",st="_dayOutside_1scg0_220",nt="_dayToday_1scg0_224",ot="_daySelected_1scg0_224",rt="_dayDisabled_1scg0_235",at="_pickGrid_1scg0_244",lt="_pickScroll_1scg0_249",it="_pickCell_1scg0_255",_t="_pickToday_1scg0_278",dt="_pickSelected_1scg0_281",ut={field:q,fullWidth:L,label:Y,required:C,control:F,open:B,error:U,disabled:P,input:$,clear:j,calendarButton:x,sm:z,md:Z,lg:w,helper:E,popover:J,calendar:K,calHeader:N,calTitleGroup:Q,calTitle:R,calTitleStatic:X,weekdays:v,week:tt,weekday:et,day:ct,dayOutside:st,dayToday:nt,daySelected:ot,dayDisabled:rt,pickGrid:at,pickScroll:lt,pickCell:it,pickToday:_t,pickSelected:dt};exports.applyMask=D;exports.buildMonthGrid=H;exports.formatValue=h;exports.isDisabled=G;exports.localWallToUtc=T;exports.maskFromFormat=A;exports.pad2=O;exports.parseISO=g;exports.parseInput=y;exports.parseTime=b;exports.parseValue=k;exports.range=M;exports.styles=ut;exports.toISO=m;exports.today=i;exports.utcToLocalWall=S;exports.yearList=W;
2
+ //# sourceMappingURL=DatePicker.module-BDtTsg8M.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.module-tE-tGNBd.cjs","sources":["../src/components/DatePicker/dateUtils.ts"],"sourcesContent":["/**\n * Date math for the date components, on top of dayjs (an optional peer dep). All calendar math runs\n * in **UTC** (via the `utc` plugin) so a calendar date never drifts with the viewer's timezone; the\n * public value is a plain ISO date string `'YYYY-MM-DD'`. Typed input is parsed strictly against a\n * display `format` (via the `customParseFormat` plugin).\n */\nimport dayjs, { type Dayjs } from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\n\ndayjs.extend(utc)\ndayjs.extend(customParseFormat)\n\nexport type { Dayjs }\n\n/** The canonical value format (timezone-agnostic calendar date). */\nexport const ISO = 'YYYY-MM-DD'\n\n/** Parse an ISO `'YYYY-MM-DD'` value (UTC-anchored) into a dayjs, or `null` if empty/invalid. */\nexport function parseISO(value?: string | null): Dayjs | null {\n if (!value) return null\n const d = dayjs.utc(value, ISO, true)\n return d.isValid() ? d : null\n}\n\n/** Parse a user-typed string strictly against a display `format` (UTC), or `null`. */\nexport function parseInput(text: string, format: string): Dayjs | null {\n const d = dayjs.utc(text, format, true)\n return d.isValid() ? d : null\n}\n\nexport const toISO = (d: Dayjs): string => d.format(ISO)\n\n/**\n * Parse an incoming **value** leniently (UTC): the declared `valueFormat` first (strict), then any\n * ISO-8601 string — so a richer backend datetime such as `'2026-06-10T09:35:49.6134342'` is still\n * accepted (dayjs caps the fractional seconds at milliseconds). Returns `null` when empty/unparseable.\n */\nexport function parseValue(value: string | null | undefined, valueFormat: string): Dayjs | null {\n if (!value) return null\n const strict = dayjs.utc(value, valueFormat, true)\n if (strict.isValid()) return strict\n const lenient = dayjs.utc(value)\n return lenient.isValid() ? lenient : null\n}\n\n/**\n * Format a date to the I/O `valueFormat`, anchored to the **start of its UTC day** — a date picker\n * carries no time-of-day, so the emitted time is `00:00:00` (e.g. `valueFormat='YYYY-MM-DDTHH:mm:ss'`\n * → `'2026-06-10T00:00:00'`).\n */\nexport const formatValue = (d: Dayjs, valueFormat: string): string =>\n d.startOf('day').format(valueFormat)\n\n/** The viewer's local calendar date, anchored to UTC midnight for stable, drift-free math. */\nexport const today = (): Dayjs => dayjs.utc(dayjs().format(ISO), ISO)\n\nconst ISO_MS = 'YYYY-MM-DDTHH:mm:ss.SSS'\n\n/**\n * Convert a real UTC instant into a UTC-mode dayjs that **holds the viewer's local wall-clock** — so the\n * UTC-internal calendar/time machinery renders the viewer's local time while the stored value stays UTC\n * (the \"store UTC, show local\" pattern, used by `DateTimePicker`/`TimePicker`). Returns `null` for null.\n */\nexport function utcToLocalWall(instant: Dayjs | null): Dayjs | null {\n return instant ? dayjs.utc(instant.local().format(ISO_MS)) : null\n}\n\n/** Inverse of {@link utcToLocalWall}: a local-wall dayjs → the real UTC instant (for emitting). */\nexport function localWallToUtc(localWall: Dayjs): Dayjs {\n return dayjs(localWall.format(ISO_MS)).utc()\n}\n\n/**\n * Parse an incoming **time-of-day** value leniently (UTC): the declared `valueFormat` first (strict),\n * then a numeric time anchored to a fixed date (so `'09:35:49.6134342'` is accepted, ms-capped), then\n * any ISO-8601 datetime (its time is used). Only the time-of-day matters; the date part is ignored by\n * `TimePicker`. Returns `null` when empty/unparseable.\n */\nexport function parseTime(value: string | null | undefined, valueFormat: string): Dayjs | null {\n if (!value) return null\n const strict = dayjs.utc(value, valueFormat, true)\n if (strict.isValid()) return strict\n // anchor a bare time to today's date so any local-tz conversion uses the current offset\n const numeric = dayjs.utc(`${today().format(ISO)}T${value}`)\n if (numeric.isValid()) return numeric\n const lenient = dayjs.utc(value)\n return lenient.isValid() ? lenient : null\n}\n\n/** Inclusive numeric range `[start, end]` stepped by `step` — for the time-picker columns. A\n * non-positive `step` returns `[]` rather than looping forever. */\nexport function range(start: number, end: number, step = 1): number[] {\n if (step <= 0) return []\n const out: number[] = []\n for (let v = start; v <= end; v += step) out.push(v)\n return out\n}\n\n/** Zero-pads a number to two digits (`9` → `'09'`) for time-column display. */\nexport const pad2 = (n: number): string => String(n).padStart(2, '0')\n\n/**\n * Build an input mask from a date/time format: numeric tokens (`D M Y H h m s`) → `9` (digit slots),\n * the **uppercase** meridiem token `A` → `AA` and the **lowercase** `a` → `aa` (two letter slots for\n * `AM`/`PM`, matching dayjs's case-sensitive strict parse), everything else literal.\n * `'DD/MM/YYYY'` → `'99/99/9999'`; `'DD/MM/YYYY hh:mm A'` → `'99/99/9999 99:99 AA'`.\n */\nexport const maskFromFormat = (format: string): string =>\n format\n .replace(/[DMYHhms]/g, '9')\n .replace(/A/g, 'AA')\n .replace(/a/g, 'aa')\n\nconst DIGIT = /[0-9]/\nconst ALPHA = /[A-Za-z]/\n\n/**\n * Applies a mask to raw input: `9` = digit, `A` = letter forced upper-case, `a` = letter forced\n * lower-case (so a typed meridiem matches the format's case for dayjs), everything else a literal.\n */\nexport function applyMask(raw: string, mask: string): string {\n let out = ''\n let i = 0\n for (const m of mask) {\n if (m === '9') {\n while (i < raw.length && !DIGIT.test(raw[i])) i++\n if (i >= raw.length) break\n out += raw[i++]\n } else if (m === 'A' || m === 'a') {\n while (i < raw.length && !ALPHA.test(raw[i])) i++\n if (i >= raw.length) break\n out += m === 'A' ? raw[i++].toUpperCase() : raw[i++].toLowerCase()\n } else {\n if (i >= raw.length) break\n if (raw[i] === m) i++\n out += m\n }\n }\n return out\n}\n\n/** True when `d` falls outside `[min, max]` or is rejected by `disabledDate`. */\nexport function isDisabled(\n d: Dayjs,\n min: Dayjs | null,\n max: Dayjs | null,\n disabledDate?: (iso: string) => boolean,\n): boolean {\n if (min && d.isBefore(min, 'day')) return true\n if (max && d.isAfter(max, 'day')) return true\n if (disabledDate && disabledDate(d.format(ISO))) return true\n return false\n}\n\n/** A single cell in the month grid. */\nexport interface CalendarDay {\n date: Dayjs\n iso: string\n /** Belongs to the month being displayed (vs. a leading/trailing day from an adjacent month). */\n inMonth: boolean\n isToday: boolean\n}\n\n/**\n * Builds a fixed 6×7 (42-cell) grid for the month containing `monthDate`, with weeks starting on\n * `weekStartsOn` (0 = Sunday … 6 = Saturday). Fixed height avoids layout shift between months.\n */\nexport function buildMonthGrid(monthDate: Dayjs, weekStartsOn: number): CalendarDay[] {\n const firstOfMonth = monthDate.startOf('month')\n const lead = (firstOfMonth.day() - weekStartsOn + 7) % 7\n const start = firstOfMonth.subtract(lead, 'day')\n const now = today()\n const month = monthDate.month()\n return Array.from({ length: 42 }, (_, i) => {\n const date = start.add(i, 'day')\n return {\n date,\n iso: date.format(ISO),\n inMonth: date.month() === month,\n isToday: date.isSame(now, 'day'),\n }\n })\n}\n\n/** Short weekday header labels, ordered from `weekStartsOn`. */\nexport function weekdayLabels(weekStartsOn: number): string[] {\n return Array.from({ length: 7 }, (_, i) =>\n dayjs\n .utc()\n .day((weekStartsOn + i) % 7)\n .format('dd'),\n )\n}\n\n/** Full month names (`'January'…'December'`), index 0–11, for the month-picker view. */\nexport function monthLabels(): string[] {\n return Array.from({ length: 12 }, (_, m) => dayjs.utc().month(m).format('MMMM'))\n}\n\n/**\n * The list of selectable years for the (scrollable) year-picker view: bounded by `min`/`max` when\n * given, otherwise ±100 around `viewYear`. Always widened to include `viewYear` so the roving focus\n * has a cell to land on.\n */\nexport function yearList(min: Dayjs | null, max: Dayjs | null, viewYear: number): number[] {\n const start = Math.min(min ? min.year() : viewYear - 100, viewYear)\n const end = Math.max(max ? max.year() : viewYear + 100, viewYear)\n return Array.from({ length: end - start + 1 }, (_, i) => start + i)\n}\n"],"names":["dayjs","utc","customParseFormat","ISO","parseISO","value","d","parseInput","text","format","toISO","parseValue","valueFormat","strict","lenient","formatValue","today","ISO_MS","utcToLocalWall","instant","localWallToUtc","localWall","parseTime","numeric","range","start","end","step","out","v","pad2","n","maskFromFormat","DIGIT","ALPHA","applyMask","raw","mask","i","m","isDisabled","min","max","disabledDate","buildMonthGrid","monthDate","weekStartsOn","firstOfMonth","lead","now","month","_","date","yearList","viewYear"],"mappings":"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"}
1
+ {"version":3,"file":"DatePicker.module-BDtTsg8M.cjs","sources":["../src/components/DatePicker/dateUtils.ts"],"sourcesContent":["/**\n * Date math for the date components, on top of dayjs (an optional peer dep). All calendar math runs\n * in **UTC** (via the `utc` plugin) so a calendar date never drifts with the viewer's timezone; the\n * public value is a plain ISO date string `'YYYY-MM-DD'`. Typed input is parsed strictly against a\n * display `format` (via the `customParseFormat` plugin).\n */\nimport dayjs, { type Dayjs } from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\n\ndayjs.extend(utc)\ndayjs.extend(customParseFormat)\n\nexport type { Dayjs }\n\n/** The canonical value format (timezone-agnostic calendar date). */\nexport const ISO = 'YYYY-MM-DD'\n\n/** Parse an ISO `'YYYY-MM-DD'` value (UTC-anchored) into a dayjs, or `null` if empty/invalid. */\nexport function parseISO(value?: string | null): Dayjs | null {\n if (!value) return null\n const d = dayjs.utc(value, ISO, true)\n return d.isValid() ? d : null\n}\n\n/** Parse a user-typed string strictly against a display `format` (UTC), or `null`. */\nexport function parseInput(text: string, format: string): Dayjs | null {\n const d = dayjs.utc(text, format, true)\n return d.isValid() ? d : null\n}\n\nexport const toISO = (d: Dayjs): string => d.format(ISO)\n\n/**\n * Parse an incoming **value** leniently (UTC): the declared `valueFormat` first (strict), then any\n * ISO-8601 string — so a richer backend datetime such as `'2026-06-10T09:35:49.6134342'` is still\n * accepted (dayjs caps the fractional seconds at milliseconds). Returns `null` when empty/unparseable.\n */\nexport function parseValue(value: string | null | undefined, valueFormat: string): Dayjs | null {\n if (!value) return null\n const strict = dayjs.utc(value, valueFormat, true)\n if (strict.isValid()) return strict\n const lenient = dayjs.utc(value)\n return lenient.isValid() ? lenient : null\n}\n\n/**\n * Format a date to the I/O `valueFormat`, anchored to the **start of its UTC day** — a date picker\n * carries no time-of-day, so the emitted time is `00:00:00` (e.g. `valueFormat='YYYY-MM-DDTHH:mm:ss'`\n * → `'2026-06-10T00:00:00'`).\n */\nexport const formatValue = (d: Dayjs, valueFormat: string): string =>\n d.startOf('day').format(valueFormat)\n\n/** The viewer's local calendar date, anchored to UTC midnight for stable, drift-free math. */\nexport const today = (): Dayjs => dayjs.utc(dayjs().format(ISO), ISO)\n\nconst ISO_MS = 'YYYY-MM-DDTHH:mm:ss.SSS'\n\n/**\n * Convert a real UTC instant into a UTC-mode dayjs that **holds the viewer's local wall-clock** — so the\n * UTC-internal calendar/time machinery renders the viewer's local time while the stored value stays UTC\n * (the \"store UTC, show local\" pattern, used by `DateTimePicker`/`TimePicker`). Returns `null` for null.\n */\nexport function utcToLocalWall(instant: Dayjs | null): Dayjs | null {\n return instant ? dayjs.utc(instant.local().format(ISO_MS)) : null\n}\n\n/** Inverse of {@link utcToLocalWall}: a local-wall dayjs → the real UTC instant (for emitting). */\nexport function localWallToUtc(localWall: Dayjs): Dayjs {\n return dayjs(localWall.format(ISO_MS)).utc()\n}\n\n/**\n * Parse an incoming **time-of-day** value leniently (UTC): the declared `valueFormat` first (strict),\n * then a numeric time anchored to a fixed date (so `'09:35:49.6134342'` is accepted, ms-capped), then\n * any ISO-8601 datetime (its time is used). Only the time-of-day matters; the date part is ignored by\n * `TimePicker`. Returns `null` when empty/unparseable.\n */\nexport function parseTime(value: string | null | undefined, valueFormat: string): Dayjs | null {\n if (!value) return null\n const strict = dayjs.utc(value, valueFormat, true)\n if (strict.isValid()) return strict\n // anchor a bare time to today's date so any local-tz conversion uses the current offset\n const numeric = dayjs.utc(`${today().format(ISO)}T${value}`)\n if (numeric.isValid()) return numeric\n const lenient = dayjs.utc(value)\n return lenient.isValid() ? lenient : null\n}\n\n/** Inclusive numeric range `[start, end]` stepped by `step` — for the time-picker columns. A\n * non-positive `step` returns `[]` rather than looping forever. */\nexport function range(start: number, end: number, step = 1): number[] {\n if (step <= 0) return []\n const out: number[] = []\n for (let v = start; v <= end; v += step) out.push(v)\n return out\n}\n\n/** Zero-pads a number to two digits (`9` → `'09'`) for time-column display. */\nexport const pad2 = (n: number): string => String(n).padStart(2, '0')\n\n/**\n * Build an input mask from a date/time format: numeric tokens (`D M Y H h m s`) → `9` (digit slots),\n * the **uppercase** meridiem token `A` → `AA` and the **lowercase** `a` → `aa` (two letter slots for\n * `AM`/`PM`, matching dayjs's case-sensitive strict parse), everything else literal.\n * `'DD/MM/YYYY'` → `'99/99/9999'`; `'DD/MM/YYYY hh:mm A'` → `'99/99/9999 99:99 AA'`.\n */\nexport const maskFromFormat = (format: string): string =>\n format\n .replace(/[DMYHhms]/g, '9')\n .replace(/A/g, 'AA')\n .replace(/a/g, 'aa')\n\nconst DIGIT = /[0-9]/\nconst ALPHA = /[A-Za-z]/\n\n/**\n * Applies a mask to raw input: `9` = digit, `A` = letter forced upper-case, `a` = letter forced\n * lower-case (so a typed meridiem matches the format's case for dayjs), everything else a literal.\n */\nexport function applyMask(raw: string, mask: string): string {\n let out = ''\n let i = 0\n for (const m of mask) {\n if (m === '9') {\n while (i < raw.length && !DIGIT.test(raw[i])) i++\n if (i >= raw.length) break\n out += raw[i++]\n } else if (m === 'A' || m === 'a') {\n while (i < raw.length && !ALPHA.test(raw[i])) i++\n if (i >= raw.length) break\n out += m === 'A' ? raw[i++].toUpperCase() : raw[i++].toLowerCase()\n } else {\n if (i >= raw.length) break\n if (raw[i] === m) i++\n out += m\n }\n }\n return out\n}\n\n/** True when `d` falls outside `[min, max]` or is rejected by `disabledDate`. */\nexport function isDisabled(\n d: Dayjs,\n min: Dayjs | null,\n max: Dayjs | null,\n disabledDate?: (iso: string) => boolean,\n): boolean {\n if (min && d.isBefore(min, 'day')) return true\n if (max && d.isAfter(max, 'day')) return true\n if (disabledDate && disabledDate(d.format(ISO))) return true\n return false\n}\n\n/** A single cell in the month grid. */\nexport interface CalendarDay {\n date: Dayjs\n iso: string\n /** Belongs to the month being displayed (vs. a leading/trailing day from an adjacent month). */\n inMonth: boolean\n isToday: boolean\n}\n\n/**\n * Builds a fixed 6×7 (42-cell) grid for the month containing `monthDate`, with weeks starting on\n * `weekStartsOn` (0 = Sunday … 6 = Saturday). Fixed height avoids layout shift between months.\n */\nexport function buildMonthGrid(monthDate: Dayjs, weekStartsOn: number): CalendarDay[] {\n const firstOfMonth = monthDate.startOf('month')\n const lead = (firstOfMonth.day() - weekStartsOn + 7) % 7\n const start = firstOfMonth.subtract(lead, 'day')\n const now = today()\n const month = monthDate.month()\n return Array.from({ length: 42 }, (_, i) => {\n const date = start.add(i, 'day')\n return {\n date,\n iso: date.format(ISO),\n inMonth: date.month() === month,\n isToday: date.isSame(now, 'day'),\n }\n })\n}\n\n/** Short weekday header labels, ordered from `weekStartsOn`. */\nexport function weekdayLabels(weekStartsOn: number): string[] {\n return Array.from({ length: 7 }, (_, i) =>\n dayjs\n .utc()\n .day((weekStartsOn + i) % 7)\n .format('dd'),\n )\n}\n\n/** Full month names (`'January'…'December'`), index 0–11, for the month-picker view. */\nexport function monthLabels(): string[] {\n return Array.from({ length: 12 }, (_, m) => dayjs.utc().month(m).format('MMMM'))\n}\n\n/**\n * The list of selectable years for the (scrollable) year-picker view: bounded by `min`/`max` when\n * given, otherwise ±100 around `viewYear`. Always widened to include `viewYear` so the roving focus\n * has a cell to land on.\n */\nexport function yearList(min: Dayjs | null, max: Dayjs | null, viewYear: number): number[] {\n const start = Math.min(min ? min.year() : viewYear - 100, viewYear)\n const end = Math.max(max ? max.year() : viewYear + 100, viewYear)\n return Array.from({ length: end - start + 1 }, (_, i) => start + i)\n}\n"],"names":["dayjs","utc","customParseFormat","ISO","parseISO","value","d","parseInput","text","format","toISO","parseValue","valueFormat","strict","lenient","formatValue","today","ISO_MS","utcToLocalWall","instant","localWallToUtc","localWall","parseTime","numeric","range","start","end","step","out","v","pad2","n","maskFromFormat","DIGIT","ALPHA","applyMask","raw","mask","i","m","isDisabled","min","max","disabledDate","buildMonthGrid","monthDate","weekStartsOn","firstOfMonth","lead","now","month","_","date","yearList","viewYear"],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ import o from "dayjs";
2
+ import f from "dayjs/plugin/utc";
3
+ import p from "dayjs/plugin/customParseFormat";
4
+ o.extend(f);
5
+ o.extend(p);
6
+ const r = "YYYY-MM-DD";
7
+ function ct(t) {
8
+ if (!t) return null;
9
+ const s = o.utc(t, r, !0);
10
+ return s.isValid() ? s : null;
11
+ }
12
+ function et(t, s) {
13
+ const e = o.utc(t, s, !0);
14
+ return e.isValid() ? e : null;
15
+ }
16
+ const st = (t) => t.format(r);
17
+ function nt(t, s) {
18
+ if (!t) return null;
19
+ const e = o.utc(t, s, !0);
20
+ if (e.isValid()) return e;
21
+ const c = o.utc(t);
22
+ return c.isValid() ? c : null;
23
+ }
24
+ const ot = (t, s) => t.startOf("day").format(s), _ = () => o.utc(o().format(r), r), d = "YYYY-MM-DDTHH:mm:ss.SSS";
25
+ function rt(t) {
26
+ return t ? o.utc(t.local().format(d)) : null;
27
+ }
28
+ function at(t) {
29
+ return o(t.format(d)).utc();
30
+ }
31
+ function lt(t, s) {
32
+ if (!t) return null;
33
+ const e = o.utc(t, s, !0);
34
+ if (e.isValid()) return e;
35
+ const c = o.utc(`${_().format(r)}T${t}`);
36
+ if (c.isValid()) return c;
37
+ const n = o.utc(t);
38
+ return n.isValid() ? n : null;
39
+ }
40
+ function it(t, s, e = 1) {
41
+ if (e <= 0) return [];
42
+ const c = [];
43
+ for (let n = t; n <= s; n += e) c.push(n);
44
+ return c;
45
+ }
46
+ const _t = (t) => String(t).padStart(2, "0"), dt = (t) => t.replace(/[DMYHhms]/g, "9").replace(/A/g, "AA").replace(/a/g, "aa"), g = /[0-9]/, y = /[A-Za-z]/;
47
+ function ut(t, s) {
48
+ let e = "", c = 0;
49
+ for (const n of s)
50
+ if (n === "9") {
51
+ for (; c < t.length && !g.test(t[c]); ) c++;
52
+ if (c >= t.length) break;
53
+ e += t[c++];
54
+ } else if (n === "A" || n === "a") {
55
+ for (; c < t.length && !y.test(t[c]); ) c++;
56
+ if (c >= t.length) break;
57
+ e += n === "A" ? t[c++].toUpperCase() : t[c++].toLowerCase();
58
+ } else {
59
+ if (c >= t.length) break;
60
+ t[c] === n && c++, e += n;
61
+ }
62
+ return e;
63
+ }
64
+ function ft(t, s, e, c) {
65
+ return !!(s && t.isBefore(s, "day") || e && t.isAfter(e, "day") || c && c(t.format(r)));
66
+ }
67
+ function pt(t, s) {
68
+ const e = t.startOf("month"), c = (e.day() - s + 7) % 7, n = e.subtract(c, "day"), i = _(), l = t.month();
69
+ return Array.from({ length: 42 }, (R, u) => {
70
+ const a = n.add(u, "day");
71
+ return {
72
+ date: a,
73
+ iso: a.format(r),
74
+ inMonth: a.month() === l,
75
+ isToday: a.isSame(i, "day")
76
+ };
77
+ });
78
+ }
79
+ function gt(t, s, e) {
80
+ const c = Math.min(t ? t.year() : e - 100, e), n = Math.max(s ? s.year() : e + 100, e);
81
+ return Array.from({ length: n - c + 1 }, (i, l) => c + l);
82
+ }
83
+ const m = "_field_1scg0_1", k = "_fullWidth_1scg0_7", h = "_label_1scg0_12", S = "_required_1scg0_19", T = "_control_1scg0_25", b = "_open_1scg0_39", M = "_error_1scg0_43", A = "_disabled_1scg0_51", O = "_input_1scg0_59", V = "_clear_1scg0_79", D = "_calendarButton_1scg0_97", G = "_sm_1scg0_108", H = "_md_1scg0_112", I = "_lg_1scg0_116", Y = "_helper_1scg0_121", C = "_popover_1scg0_126", W = "_calendar_1scg0_97", B = "_calHeader_1scg0_136", L = "_calTitleGroup_1scg0_144", q = "_calTitle_1scg0_144", F = "_calTitleStatic_1scg0_173", x = "_weekdays_1scg0_180", P = "_week_1scg0_180", U = "_weekday_1scg0_180", $ = "_day_1scg0_196", j = "_dayOutside_1scg0_220", z = "_dayToday_1scg0_224", Z = "_daySelected_1scg0_224", w = "_dayDisabled_1scg0_235", E = "_pickGrid_1scg0_244", J = "_pickScroll_1scg0_249", K = "_pickCell_1scg0_255", N = "_pickToday_1scg0_278", Q = "_pickSelected_1scg0_281", yt = {
84
+ field: m,
85
+ fullWidth: k,
86
+ label: h,
87
+ required: S,
88
+ control: T,
89
+ open: b,
90
+ error: M,
91
+ disabled: A,
92
+ input: O,
93
+ clear: V,
94
+ calendarButton: D,
95
+ sm: G,
96
+ md: H,
97
+ lg: I,
98
+ helper: Y,
99
+ popover: C,
100
+ calendar: W,
101
+ calHeader: B,
102
+ calTitleGroup: L,
103
+ calTitle: q,
104
+ calTitleStatic: F,
105
+ weekdays: x,
106
+ week: P,
107
+ weekday: U,
108
+ day: $,
109
+ dayOutside: j,
110
+ dayToday: z,
111
+ daySelected: Z,
112
+ dayDisabled: w,
113
+ pickGrid: E,
114
+ pickScroll: J,
115
+ pickCell: K,
116
+ pickToday: N,
117
+ pickSelected: Q
118
+ };
119
+ export {
120
+ ct as a,
121
+ et as b,
122
+ ut as c,
123
+ st as d,
124
+ pt as e,
125
+ ot as f,
126
+ _t as g,
127
+ lt as h,
128
+ ft as i,
129
+ at as l,
130
+ dt as m,
131
+ nt as p,
132
+ it as r,
133
+ yt as s,
134
+ _ as t,
135
+ rt as u,
136
+ gt as y
137
+ };
138
+ //# sourceMappingURL=DatePicker.module-CMMQyEhG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.module-BZDftL4g.js","sources":["../src/components/DatePicker/dateUtils.ts"],"sourcesContent":["/**\n * Date math for the date components, on top of dayjs (an optional peer dep). All calendar math runs\n * in **UTC** (via the `utc` plugin) so a calendar date never drifts with the viewer's timezone; the\n * public value is a plain ISO date string `'YYYY-MM-DD'`. Typed input is parsed strictly against a\n * display `format` (via the `customParseFormat` plugin).\n */\nimport dayjs, { type Dayjs } from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\n\ndayjs.extend(utc)\ndayjs.extend(customParseFormat)\n\nexport type { Dayjs }\n\n/** The canonical value format (timezone-agnostic calendar date). */\nexport const ISO = 'YYYY-MM-DD'\n\n/** Parse an ISO `'YYYY-MM-DD'` value (UTC-anchored) into a dayjs, or `null` if empty/invalid. */\nexport function parseISO(value?: string | null): Dayjs | null {\n if (!value) return null\n const d = dayjs.utc(value, ISO, true)\n return d.isValid() ? d : null\n}\n\n/** Parse a user-typed string strictly against a display `format` (UTC), or `null`. */\nexport function parseInput(text: string, format: string): Dayjs | null {\n const d = dayjs.utc(text, format, true)\n return d.isValid() ? d : null\n}\n\nexport const toISO = (d: Dayjs): string => d.format(ISO)\n\n/**\n * Parse an incoming **value** leniently (UTC): the declared `valueFormat` first (strict), then any\n * ISO-8601 string — so a richer backend datetime such as `'2026-06-10T09:35:49.6134342'` is still\n * accepted (dayjs caps the fractional seconds at milliseconds). Returns `null` when empty/unparseable.\n */\nexport function parseValue(value: string | null | undefined, valueFormat: string): Dayjs | null {\n if (!value) return null\n const strict = dayjs.utc(value, valueFormat, true)\n if (strict.isValid()) return strict\n const lenient = dayjs.utc(value)\n return lenient.isValid() ? lenient : null\n}\n\n/**\n * Format a date to the I/O `valueFormat`, anchored to the **start of its UTC day** — a date picker\n * carries no time-of-day, so the emitted time is `00:00:00` (e.g. `valueFormat='YYYY-MM-DDTHH:mm:ss'`\n * → `'2026-06-10T00:00:00'`).\n */\nexport const formatValue = (d: Dayjs, valueFormat: string): string =>\n d.startOf('day').format(valueFormat)\n\n/** The viewer's local calendar date, anchored to UTC midnight for stable, drift-free math. */\nexport const today = (): Dayjs => dayjs.utc(dayjs().format(ISO), ISO)\n\nconst ISO_MS = 'YYYY-MM-DDTHH:mm:ss.SSS'\n\n/**\n * Convert a real UTC instant into a UTC-mode dayjs that **holds the viewer's local wall-clock** — so the\n * UTC-internal calendar/time machinery renders the viewer's local time while the stored value stays UTC\n * (the \"store UTC, show local\" pattern, used by `DateTimePicker`/`TimePicker`). Returns `null` for null.\n */\nexport function utcToLocalWall(instant: Dayjs | null): Dayjs | null {\n return instant ? dayjs.utc(instant.local().format(ISO_MS)) : null\n}\n\n/** Inverse of {@link utcToLocalWall}: a local-wall dayjs → the real UTC instant (for emitting). */\nexport function localWallToUtc(localWall: Dayjs): Dayjs {\n return dayjs(localWall.format(ISO_MS)).utc()\n}\n\n/**\n * Parse an incoming **time-of-day** value leniently (UTC): the declared `valueFormat` first (strict),\n * then a numeric time anchored to a fixed date (so `'09:35:49.6134342'` is accepted, ms-capped), then\n * any ISO-8601 datetime (its time is used). Only the time-of-day matters; the date part is ignored by\n * `TimePicker`. Returns `null` when empty/unparseable.\n */\nexport function parseTime(value: string | null | undefined, valueFormat: string): Dayjs | null {\n if (!value) return null\n const strict = dayjs.utc(value, valueFormat, true)\n if (strict.isValid()) return strict\n // anchor a bare time to today's date so any local-tz conversion uses the current offset\n const numeric = dayjs.utc(`${today().format(ISO)}T${value}`)\n if (numeric.isValid()) return numeric\n const lenient = dayjs.utc(value)\n return lenient.isValid() ? lenient : null\n}\n\n/** Inclusive numeric range `[start, end]` stepped by `step` — for the time-picker columns. A\n * non-positive `step` returns `[]` rather than looping forever. */\nexport function range(start: number, end: number, step = 1): number[] {\n if (step <= 0) return []\n const out: number[] = []\n for (let v = start; v <= end; v += step) out.push(v)\n return out\n}\n\n/** Zero-pads a number to two digits (`9` → `'09'`) for time-column display. */\nexport const pad2 = (n: number): string => String(n).padStart(2, '0')\n\n/**\n * Build an input mask from a date/time format: numeric tokens (`D M Y H h m s`) → `9` (digit slots),\n * the **uppercase** meridiem token `A` → `AA` and the **lowercase** `a` → `aa` (two letter slots for\n * `AM`/`PM`, matching dayjs's case-sensitive strict parse), everything else literal.\n * `'DD/MM/YYYY'` → `'99/99/9999'`; `'DD/MM/YYYY hh:mm A'` → `'99/99/9999 99:99 AA'`.\n */\nexport const maskFromFormat = (format: string): string =>\n format\n .replace(/[DMYHhms]/g, '9')\n .replace(/A/g, 'AA')\n .replace(/a/g, 'aa')\n\nconst DIGIT = /[0-9]/\nconst ALPHA = /[A-Za-z]/\n\n/**\n * Applies a mask to raw input: `9` = digit, `A` = letter forced upper-case, `a` = letter forced\n * lower-case (so a typed meridiem matches the format's case for dayjs), everything else a literal.\n */\nexport function applyMask(raw: string, mask: string): string {\n let out = ''\n let i = 0\n for (const m of mask) {\n if (m === '9') {\n while (i < raw.length && !DIGIT.test(raw[i])) i++\n if (i >= raw.length) break\n out += raw[i++]\n } else if (m === 'A' || m === 'a') {\n while (i < raw.length && !ALPHA.test(raw[i])) i++\n if (i >= raw.length) break\n out += m === 'A' ? raw[i++].toUpperCase() : raw[i++].toLowerCase()\n } else {\n if (i >= raw.length) break\n if (raw[i] === m) i++\n out += m\n }\n }\n return out\n}\n\n/** True when `d` falls outside `[min, max]` or is rejected by `disabledDate`. */\nexport function isDisabled(\n d: Dayjs,\n min: Dayjs | null,\n max: Dayjs | null,\n disabledDate?: (iso: string) => boolean,\n): boolean {\n if (min && d.isBefore(min, 'day')) return true\n if (max && d.isAfter(max, 'day')) return true\n if (disabledDate && disabledDate(d.format(ISO))) return true\n return false\n}\n\n/** A single cell in the month grid. */\nexport interface CalendarDay {\n date: Dayjs\n iso: string\n /** Belongs to the month being displayed (vs. a leading/trailing day from an adjacent month). */\n inMonth: boolean\n isToday: boolean\n}\n\n/**\n * Builds a fixed 6×7 (42-cell) grid for the month containing `monthDate`, with weeks starting on\n * `weekStartsOn` (0 = Sunday … 6 = Saturday). Fixed height avoids layout shift between months.\n */\nexport function buildMonthGrid(monthDate: Dayjs, weekStartsOn: number): CalendarDay[] {\n const firstOfMonth = monthDate.startOf('month')\n const lead = (firstOfMonth.day() - weekStartsOn + 7) % 7\n const start = firstOfMonth.subtract(lead, 'day')\n const now = today()\n const month = monthDate.month()\n return Array.from({ length: 42 }, (_, i) => {\n const date = start.add(i, 'day')\n return {\n date,\n iso: date.format(ISO),\n inMonth: date.month() === month,\n isToday: date.isSame(now, 'day'),\n }\n })\n}\n\n/** Short weekday header labels, ordered from `weekStartsOn`. */\nexport function weekdayLabels(weekStartsOn: number): string[] {\n return Array.from({ length: 7 }, (_, i) =>\n dayjs\n .utc()\n .day((weekStartsOn + i) % 7)\n .format('dd'),\n )\n}\n\n/** Full month names (`'January'…'December'`), index 0–11, for the month-picker view. */\nexport function monthLabels(): string[] {\n return Array.from({ length: 12 }, (_, m) => dayjs.utc().month(m).format('MMMM'))\n}\n\n/**\n * The list of selectable years for the (scrollable) year-picker view: bounded by `min`/`max` when\n * given, otherwise ±100 around `viewYear`. Always widened to include `viewYear` so the roving focus\n * has a cell to land on.\n */\nexport function yearList(min: Dayjs | null, max: Dayjs | null, viewYear: number): number[] {\n const start = Math.min(min ? min.year() : viewYear - 100, viewYear)\n const end = Math.max(max ? max.year() : viewYear + 100, viewYear)\n return Array.from({ length: end - start + 1 }, (_, i) => start + i)\n}\n"],"names":["dayjs","utc","customParseFormat","ISO","parseISO","value","d","parseInput","text","format","toISO","parseValue","valueFormat","strict","lenient","formatValue","today","ISO_MS","utcToLocalWall","instant","localWallToUtc","localWall","parseTime","numeric","range","start","end","step","out","v","pad2","n","maskFromFormat","DIGIT","ALPHA","applyMask","raw","mask","i","m","isDisabled","min","max","disabledDate","buildMonthGrid","monthDate","weekStartsOn","firstOfMonth","lead","now","month","_","date","yearList","viewYear"],"mappings":";;;AAUAA,EAAM,OAAOC,CAAG;AAChBD,EAAM,OAAOE,CAAiB;AAKvB,MAAMC,IAAM;AAGZ,SAASC,GAASC,GAAqC;AAC5D,MAAI,CAACA,EAAO,QAAO;AACnB,QAAMC,IAAIN,EAAM,IAAIK,GAAOF,GAAK,EAAI;AACpC,SAAOG,EAAE,YAAYA,IAAI;AAC3B;AAGO,SAASC,GAAWC,GAAcC,GAA8B;AACrE,QAAMH,IAAIN,EAAM,IAAIQ,GAAMC,GAAQ,EAAI;AACtC,SAAOH,EAAE,YAAYA,IAAI;AAC3B;AAEO,MAAMI,KAAQ,CAACJ,MAAqBA,EAAE,OAAOH,CAAG;AAOhD,SAASQ,GAAWN,GAAkCO,GAAmC;AAC9F,MAAI,CAACP,EAAO,QAAO;AACnB,QAAMQ,IAASb,EAAM,IAAIK,GAAOO,GAAa,EAAI;AACjD,MAAIC,EAAO,QAAA,EAAW,QAAOA;AAC7B,QAAMC,IAAUd,EAAM,IAAIK,CAAK;AAC/B,SAAOS,EAAQ,YAAYA,IAAU;AACvC;AAOO,MAAMC,KAAc,CAACT,GAAUM,MACpCN,EAAE,QAAQ,KAAK,EAAE,OAAOM,CAAW,GAGxBI,IAAQ,MAAahB,EAAM,IAAIA,IAAQ,OAAOG,CAAG,GAAGA,CAAG,GAE9Dc,IAAS;AAOR,SAASC,GAAeC,GAAqC;AAClE,SAAOA,IAAUnB,EAAM,IAAImB,EAAQ,QAAQ,OAAOF,CAAM,CAAC,IAAI;AAC/D;AAGO,SAASG,GAAeC,GAAyB;AACtD,SAAOrB,EAAMqB,EAAU,OAAOJ,CAAM,CAAC,EAAE,IAAA;AACzC;AAQO,SAASK,GAAUjB,GAAkCO,GAAmC;AAC7F,MAAI,CAACP,EAAO,QAAO;AACnB,QAAMQ,IAASb,EAAM,IAAIK,GAAOO,GAAa,EAAI;AACjD,MAAIC,EAAO,QAAA,EAAW,QAAOA;AAE7B,QAAMU,IAAUvB,EAAM,IAAI,GAAGgB,EAAA,EAAQ,OAAOb,CAAG,CAAC,IAAIE,CAAK,EAAE;AAC3D,MAAIkB,EAAQ,QAAA,EAAW,QAAOA;AAC9B,QAAMT,IAAUd,EAAM,IAAIK,CAAK;AAC/B,SAAOS,EAAQ,YAAYA,IAAU;AACvC;AAIO,SAASU,GAAMC,GAAeC,GAAaC,IAAO,GAAa;AACpE,MAAIA,KAAQ,EAAG,QAAO,CAAA;AACtB,QAAMC,IAAgB,CAAA;AACtB,WAASC,IAAIJ,GAAOI,KAAKH,GAAKG,KAAKF,EAAM,CAAAC,EAAI,KAAKC,CAAC;AACnD,SAAOD;AACT;AAGO,MAAME,KAAO,CAACC,MAAsB,OAAOA,CAAC,EAAE,SAAS,GAAG,GAAG,GAQvDC,KAAiB,CAACvB,MAC7BA,EACG,QAAQ,cAAc,GAAG,EACzB,QAAQ,MAAM,IAAI,EAClB,QAAQ,MAAM,IAAI,GAEjBwB,IAAQ,SACRC,IAAQ;AAMP,SAASC,GAAUC,GAAaC,GAAsB;AAC3D,MAAIT,IAAM,IACNU,IAAI;AACR,aAAWC,KAAKF;AACd,QAAIE,MAAM,KAAK;AACb,aAAOD,IAAIF,EAAI,UAAU,CAACH,EAAM,KAAKG,EAAIE,CAAC,CAAC,IAAG,CAAAA;AAC9C,UAAIA,KAAKF,EAAI,OAAQ;AACrB,MAAAR,KAAOQ,EAAIE,GAAG;AAAA,IAChB,WAAWC,MAAM,OAAOA,MAAM,KAAK;AACjC,aAAOD,IAAIF,EAAI,UAAU,CAACF,EAAM,KAAKE,EAAIE,CAAC,CAAC,IAAG,CAAAA;AAC9C,UAAIA,KAAKF,EAAI,OAAQ;AACrB,MAAAR,KAAOW,MAAM,MAAMH,EAAIE,GAAG,EAAE,gBAAgBF,EAAIE,GAAG,EAAE,YAAA;AAAA,IACvD,OAAO;AACL,UAAIA,KAAKF,EAAI,OAAQ;AACrB,MAAIA,EAAIE,CAAC,MAAMC,KAAGD,KAClBV,KAAOW;AAAA,IACT;AAEF,SAAOX;AACT;AAGO,SAASY,GACdlC,GACAmC,GACAC,GACAC,GACS;AAGT,SAFI,GAAAF,KAAOnC,EAAE,SAASmC,GAAK,KAAK,KAC5BC,KAAOpC,EAAE,QAAQoC,GAAK,KAAK,KAC3BC,KAAgBA,EAAarC,EAAE,OAAOH,CAAG,CAAC;AAEhD;AAeO,SAASyC,GAAeC,GAAkBC,GAAqC;AACpF,QAAMC,IAAeF,EAAU,QAAQ,OAAO,GACxCG,KAAQD,EAAa,IAAA,IAAQD,IAAe,KAAK,GACjDrB,IAAQsB,EAAa,SAASC,GAAM,KAAK,GACzCC,IAAMjC,EAAA,GACNkC,IAAQL,EAAU,MAAA;AACxB,SAAO,MAAM,KAAK,EAAE,QAAQ,MAAM,CAACM,GAAGb,MAAM;AAC1C,UAAMc,IAAO3B,EAAM,IAAIa,GAAG,KAAK;AAC/B,WAAO;AAAA,MACL,MAAAc;AAAA,MACA,KAAKA,EAAK,OAAOjD,CAAG;AAAA,MACpB,SAASiD,EAAK,MAAA,MAAYF;AAAA,MAC1B,SAASE,EAAK,OAAOH,GAAK,KAAK;AAAA,IAAA;AAAA,EAEnC,CAAC;AACH;AAsBO,SAASI,GAASZ,GAAmBC,GAAmBY,GAA4B;AACzF,QAAM7B,IAAQ,KAAK,IAAIgB,IAAMA,EAAI,SAASa,IAAW,KAAKA,CAAQ,GAC5D5B,IAAM,KAAK,IAAIgB,IAAMA,EAAI,SAASY,IAAW,KAAKA,CAAQ;AAChE,SAAO,MAAM,KAAK,EAAE,QAAQ5B,IAAMD,IAAQ,EAAA,GAAK,CAAC0B,GAAGb,MAAMb,IAAQa,CAAC;AACpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"DatePicker.module-CMMQyEhG.js","sources":["../src/components/DatePicker/dateUtils.ts"],"sourcesContent":["/**\n * Date math for the date components, on top of dayjs (an optional peer dep). All calendar math runs\n * in **UTC** (via the `utc` plugin) so a calendar date never drifts with the viewer's timezone; the\n * public value is a plain ISO date string `'YYYY-MM-DD'`. Typed input is parsed strictly against a\n * display `format` (via the `customParseFormat` plugin).\n */\nimport dayjs, { type Dayjs } from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\n\ndayjs.extend(utc)\ndayjs.extend(customParseFormat)\n\nexport type { Dayjs }\n\n/** The canonical value format (timezone-agnostic calendar date). */\nexport const ISO = 'YYYY-MM-DD'\n\n/** Parse an ISO `'YYYY-MM-DD'` value (UTC-anchored) into a dayjs, or `null` if empty/invalid. */\nexport function parseISO(value?: string | null): Dayjs | null {\n if (!value) return null\n const d = dayjs.utc(value, ISO, true)\n return d.isValid() ? d : null\n}\n\n/** Parse a user-typed string strictly against a display `format` (UTC), or `null`. */\nexport function parseInput(text: string, format: string): Dayjs | null {\n const d = dayjs.utc(text, format, true)\n return d.isValid() ? d : null\n}\n\nexport const toISO = (d: Dayjs): string => d.format(ISO)\n\n/**\n * Parse an incoming **value** leniently (UTC): the declared `valueFormat` first (strict), then any\n * ISO-8601 string — so a richer backend datetime such as `'2026-06-10T09:35:49.6134342'` is still\n * accepted (dayjs caps the fractional seconds at milliseconds). Returns `null` when empty/unparseable.\n */\nexport function parseValue(value: string | null | undefined, valueFormat: string): Dayjs | null {\n if (!value) return null\n const strict = dayjs.utc(value, valueFormat, true)\n if (strict.isValid()) return strict\n const lenient = dayjs.utc(value)\n return lenient.isValid() ? lenient : null\n}\n\n/**\n * Format a date to the I/O `valueFormat`, anchored to the **start of its UTC day** — a date picker\n * carries no time-of-day, so the emitted time is `00:00:00` (e.g. `valueFormat='YYYY-MM-DDTHH:mm:ss'`\n * → `'2026-06-10T00:00:00'`).\n */\nexport const formatValue = (d: Dayjs, valueFormat: string): string =>\n d.startOf('day').format(valueFormat)\n\n/** The viewer's local calendar date, anchored to UTC midnight for stable, drift-free math. */\nexport const today = (): Dayjs => dayjs.utc(dayjs().format(ISO), ISO)\n\nconst ISO_MS = 'YYYY-MM-DDTHH:mm:ss.SSS'\n\n/**\n * Convert a real UTC instant into a UTC-mode dayjs that **holds the viewer's local wall-clock** — so the\n * UTC-internal calendar/time machinery renders the viewer's local time while the stored value stays UTC\n * (the \"store UTC, show local\" pattern, used by `DateTimePicker`/`TimePicker`). Returns `null` for null.\n */\nexport function utcToLocalWall(instant: Dayjs | null): Dayjs | null {\n return instant ? dayjs.utc(instant.local().format(ISO_MS)) : null\n}\n\n/** Inverse of {@link utcToLocalWall}: a local-wall dayjs → the real UTC instant (for emitting). */\nexport function localWallToUtc(localWall: Dayjs): Dayjs {\n return dayjs(localWall.format(ISO_MS)).utc()\n}\n\n/**\n * Parse an incoming **time-of-day** value leniently (UTC): the declared `valueFormat` first (strict),\n * then a numeric time anchored to a fixed date (so `'09:35:49.6134342'` is accepted, ms-capped), then\n * any ISO-8601 datetime (its time is used). Only the time-of-day matters; the date part is ignored by\n * `TimePicker`. Returns `null` when empty/unparseable.\n */\nexport function parseTime(value: string | null | undefined, valueFormat: string): Dayjs | null {\n if (!value) return null\n const strict = dayjs.utc(value, valueFormat, true)\n if (strict.isValid()) return strict\n // anchor a bare time to today's date so any local-tz conversion uses the current offset\n const numeric = dayjs.utc(`${today().format(ISO)}T${value}`)\n if (numeric.isValid()) return numeric\n const lenient = dayjs.utc(value)\n return lenient.isValid() ? lenient : null\n}\n\n/** Inclusive numeric range `[start, end]` stepped by `step` — for the time-picker columns. A\n * non-positive `step` returns `[]` rather than looping forever. */\nexport function range(start: number, end: number, step = 1): number[] {\n if (step <= 0) return []\n const out: number[] = []\n for (let v = start; v <= end; v += step) out.push(v)\n return out\n}\n\n/** Zero-pads a number to two digits (`9` → `'09'`) for time-column display. */\nexport const pad2 = (n: number): string => String(n).padStart(2, '0')\n\n/**\n * Build an input mask from a date/time format: numeric tokens (`D M Y H h m s`) → `9` (digit slots),\n * the **uppercase** meridiem token `A` → `AA` and the **lowercase** `a` → `aa` (two letter slots for\n * `AM`/`PM`, matching dayjs's case-sensitive strict parse), everything else literal.\n * `'DD/MM/YYYY'` → `'99/99/9999'`; `'DD/MM/YYYY hh:mm A'` → `'99/99/9999 99:99 AA'`.\n */\nexport const maskFromFormat = (format: string): string =>\n format\n .replace(/[DMYHhms]/g, '9')\n .replace(/A/g, 'AA')\n .replace(/a/g, 'aa')\n\nconst DIGIT = /[0-9]/\nconst ALPHA = /[A-Za-z]/\n\n/**\n * Applies a mask to raw input: `9` = digit, `A` = letter forced upper-case, `a` = letter forced\n * lower-case (so a typed meridiem matches the format's case for dayjs), everything else a literal.\n */\nexport function applyMask(raw: string, mask: string): string {\n let out = ''\n let i = 0\n for (const m of mask) {\n if (m === '9') {\n while (i < raw.length && !DIGIT.test(raw[i])) i++\n if (i >= raw.length) break\n out += raw[i++]\n } else if (m === 'A' || m === 'a') {\n while (i < raw.length && !ALPHA.test(raw[i])) i++\n if (i >= raw.length) break\n out += m === 'A' ? raw[i++].toUpperCase() : raw[i++].toLowerCase()\n } else {\n if (i >= raw.length) break\n if (raw[i] === m) i++\n out += m\n }\n }\n return out\n}\n\n/** True when `d` falls outside `[min, max]` or is rejected by `disabledDate`. */\nexport function isDisabled(\n d: Dayjs,\n min: Dayjs | null,\n max: Dayjs | null,\n disabledDate?: (iso: string) => boolean,\n): boolean {\n if (min && d.isBefore(min, 'day')) return true\n if (max && d.isAfter(max, 'day')) return true\n if (disabledDate && disabledDate(d.format(ISO))) return true\n return false\n}\n\n/** A single cell in the month grid. */\nexport interface CalendarDay {\n date: Dayjs\n iso: string\n /** Belongs to the month being displayed (vs. a leading/trailing day from an adjacent month). */\n inMonth: boolean\n isToday: boolean\n}\n\n/**\n * Builds a fixed 6×7 (42-cell) grid for the month containing `monthDate`, with weeks starting on\n * `weekStartsOn` (0 = Sunday … 6 = Saturday). Fixed height avoids layout shift between months.\n */\nexport function buildMonthGrid(monthDate: Dayjs, weekStartsOn: number): CalendarDay[] {\n const firstOfMonth = monthDate.startOf('month')\n const lead = (firstOfMonth.day() - weekStartsOn + 7) % 7\n const start = firstOfMonth.subtract(lead, 'day')\n const now = today()\n const month = monthDate.month()\n return Array.from({ length: 42 }, (_, i) => {\n const date = start.add(i, 'day')\n return {\n date,\n iso: date.format(ISO),\n inMonth: date.month() === month,\n isToday: date.isSame(now, 'day'),\n }\n })\n}\n\n/** Short weekday header labels, ordered from `weekStartsOn`. */\nexport function weekdayLabels(weekStartsOn: number): string[] {\n return Array.from({ length: 7 }, (_, i) =>\n dayjs\n .utc()\n .day((weekStartsOn + i) % 7)\n .format('dd'),\n )\n}\n\n/** Full month names (`'January'…'December'`), index 0–11, for the month-picker view. */\nexport function monthLabels(): string[] {\n return Array.from({ length: 12 }, (_, m) => dayjs.utc().month(m).format('MMMM'))\n}\n\n/**\n * The list of selectable years for the (scrollable) year-picker view: bounded by `min`/`max` when\n * given, otherwise ±100 around `viewYear`. Always widened to include `viewYear` so the roving focus\n * has a cell to land on.\n */\nexport function yearList(min: Dayjs | null, max: Dayjs | null, viewYear: number): number[] {\n const start = Math.min(min ? min.year() : viewYear - 100, viewYear)\n const end = Math.max(max ? max.year() : viewYear + 100, viewYear)\n return Array.from({ length: end - start + 1 }, (_, i) => start + i)\n}\n"],"names":["dayjs","utc","customParseFormat","ISO","parseISO","value","d","parseInput","text","format","toISO","parseValue","valueFormat","strict","lenient","formatValue","today","ISO_MS","utcToLocalWall","instant","localWallToUtc","localWall","parseTime","numeric","range","start","end","step","out","v","pad2","n","maskFromFormat","DIGIT","ALPHA","applyMask","raw","mask","i","m","isDisabled","min","max","disabledDate","buildMonthGrid","monthDate","weekStartsOn","firstOfMonth","lead","now","month","_","date","yearList","viewYear"],"mappings":"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"}
@@ -3,15 +3,15 @@ import { forwardRef as Ae, useId as Ee, useState as h, useEffect as j, useRef as
3
3
  import { clsx as z } from "clsx";
4
4
  import { u as Le } from "./formContext-B7ln1Miy.js";
5
5
  import { F as $e } from "./FloatingPanel-BG9Uag__.js";
6
- import { B as je } from "./Button-DBs8xnA5.js";
6
+ import { B as je } from "./Button-obe6rono.js";
7
7
  import { I as le } from "./Icon-DaTvzLBu.js";
8
- import { I as ze } from "./IconButton-BEGWfcVc.js";
9
- import { T as Ue } from "./Tabs-ytbBzAxG.js";
8
+ import { I as ze } from "./IconButton-CBp8QuTO.js";
9
+ import { T as Ue } from "./Tabs-v1GEGUDQ.js";
10
10
  import { T as ie } from "./Typography-Cta6Rg4L.js";
11
- import { C as Ke } from "./Calendar-CtteUt82.js";
12
- import { p as U, m as Ze, t as K, s, u as Ge, b as ce, c as Je, a as Qe, l as Xe, d as _e } from "./DatePicker.module-BZDftL4g.js";
13
- import { d as N, T as et } from "./TimeColumns-n-fz50mr.js";
14
- import { a as tt } from "./ConfigProvider-DR9YMy9U.js";
11
+ import { C as Ke } from "./Calendar-SCih0NtS.js";
12
+ import { p as U, m as Ze, t as K, s, u as Ge, b as ce, c as Je, a as Qe, l as Xe, d as _e } from "./DatePicker.module-CMMQyEhG.js";
13
+ import { d as N, T as et } from "./TimeColumns-BRlDKx_i.js";
14
+ import { a as tt } from "./ConfigProvider-DL9fylMo.js";
15
15
  function at(Z, c) {
16
16
  return `DD/MM/YYYY ${Z ? c ? "hh:mm:ss A" : "hh:mm A" : c ? "HH:mm:ss" : "HH:mm"}`;
17
17
  }
@@ -242,4 +242,4 @@ const Tt = Ae(
242
242
  export {
243
243
  Tt as D
244
244
  };
245
- //# sourceMappingURL=DateTimePicker-e2zj2bhS.js.map
245
+ //# sourceMappingURL=DateTimePicker-CzRduOFz.js.map