@ryuzaki13/react-foundation-ui 1.0.1 → 1.0.2

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 (253) hide show
  1. package/dist/advanced-search/index.d.ts +3 -0
  2. package/dist/advanced-search/index.d.ts.map +1 -0
  3. package/dist/advanced-search/index.js +361 -0
  4. package/dist/advanced-search/index.js.map +1 -0
  5. package/dist/advanced-search/lib/index.d.ts +2 -0
  6. package/dist/advanced-search/lib/index.d.ts.map +1 -0
  7. package/dist/advanced-search/lib/searchParts.d.ts +3 -0
  8. package/dist/advanced-search/lib/searchParts.d.ts.map +1 -0
  9. package/dist/advanced-search/model/index.d.ts +5 -0
  10. package/dist/advanced-search/model/index.d.ts.map +1 -0
  11. package/dist/advanced-search/model/types.d.ts +55 -0
  12. package/dist/advanced-search/model/types.d.ts.map +1 -0
  13. package/dist/advanced-search/model/useAdvancedSearch.d.ts +11 -0
  14. package/dist/advanced-search/model/useAdvancedSearch.d.ts.map +1 -0
  15. package/dist/advanced-search/model/useAdvancedSearchInitialSelected.d.ts +6 -0
  16. package/dist/advanced-search/model/useAdvancedSearchInitialSelected.d.ts.map +1 -0
  17. package/dist/advanced-search/model/useAdvancedSearchSelection.d.ts +13 -0
  18. package/dist/advanced-search/model/useAdvancedSearchSelection.d.ts.map +1 -0
  19. package/dist/advanced-search/ui/AdvancedSearchModal.d.ts +13 -0
  20. package/dist/advanced-search/ui/AdvancedSearchModal.d.ts.map +1 -0
  21. package/dist/advanced-search/ui/AdvancedSearchSelect.d.ts +8 -0
  22. package/dist/advanced-search/ui/AdvancedSearchSelect.d.ts.map +1 -0
  23. package/dist/advanced-search/ui/AdvancedSearchSelectUI.d.ts +9 -0
  24. package/dist/advanced-search/ui/AdvancedSearchSelectUI.d.ts.map +1 -0
  25. package/dist/advanced-search/ui/index.d.ts +2 -0
  26. package/dist/advanced-search/ui/index.d.ts.map +1 -0
  27. package/dist/badge/index.js +1 -1
  28. package/dist/badge/stories/Badge.stories.js +22 -22
  29. package/dist/base-table/index.js +2 -2
  30. package/dist/button/index.js +7 -7
  31. package/dist/button/stories/Button.stories.js +1 -1
  32. package/dist/check-box/index.js +1 -1
  33. package/dist/check-box/stories/CheckBox.stories.js +25 -25
  34. package/dist/chunks/{BadgeList-6qL9oNAp.js → BadgeList-DYgun2rf.js} +16 -16
  35. package/dist/chunks/{BadgeList-6qL9oNAp.js.map → BadgeList-DYgun2rf.js.map} +1 -1
  36. package/dist/chunks/{Button-BZ_b-Kin.js → Button-CCWuggdA.js} +16 -16
  37. package/dist/chunks/{Button-BZ_b-Kin.js.map → Button-CCWuggdA.js.map} +1 -1
  38. package/dist/chunks/CalendarView-DjeTJkTT.js +435 -0
  39. package/dist/chunks/{CalendarView-DjShdvRD.js.map → CalendarView-DjeTJkTT.js.map} +1 -1
  40. package/dist/chunks/CheckBox-BowNqqd3.js +48 -0
  41. package/dist/chunks/{CheckBox-CulnjNvJ.js.map → CheckBox-BowNqqd3.js.map} +1 -1
  42. package/dist/chunks/{DateInput-LSSvObtg.js → DateInput--tfofQ2x.js} +68 -68
  43. package/dist/chunks/{DateInput-LSSvObtg.js.map → DateInput--tfofQ2x.js.map} +1 -1
  44. package/dist/chunks/{DateRangePresetSelect-CyzGMvVp.js → DateRangePresetSelect-UgsfaOeM.js} +22 -22
  45. package/dist/chunks/{DateRangePresetSelect-CyzGMvVp.js.map → DateRangePresetSelect-UgsfaOeM.js.map} +1 -1
  46. package/dist/chunks/Detail-DHDMsg8q.js +80 -0
  47. package/dist/chunks/{Detail-DKolHye4.js.map → Detail-DHDMsg8q.js.map} +1 -1
  48. package/dist/chunks/{Dialog-BPS4BeWZ.js → Dialog-CFIvGxER.js} +8 -8
  49. package/dist/chunks/{Dialog-BPS4BeWZ.js.map → Dialog-CFIvGxER.js.map} +1 -1
  50. package/dist/chunks/DisclosureGroup-CfRTkl6Z.js +49 -0
  51. package/dist/chunks/{DisclosureGroup-Plk2M_Vl.js.map → DisclosureGroup-CfRTkl6Z.js.map} +1 -1
  52. package/dist/chunks/{DropZone-DPGTpHI6.js → DropZone-kJfbZU5g.js} +22 -22
  53. package/dist/chunks/{DropZone-DPGTpHI6.js.map → DropZone-kJfbZU5g.js.map} +1 -1
  54. package/dist/chunks/{DropdownMenu-Ds-trH4M.js → DropdownMenu-DQeR3y7M.js} +138 -138
  55. package/dist/chunks/{DropdownMenu-Ds-trH4M.js.map → DropdownMenu-DQeR3y7M.js.map} +1 -1
  56. package/dist/chunks/{Flex-DbBdq336.js → Flex-DUYSL5TE.js} +16 -16
  57. package/dist/chunks/{Flex-DbBdq336.js.map → Flex-DUYSL5TE.js.map} +1 -1
  58. package/dist/chunks/Input-BmjlpA09.js +227 -0
  59. package/dist/chunks/{Input-Wrew1puH.js.map → Input-BmjlpA09.js.map} +1 -1
  60. package/dist/chunks/{InputDateTime-2PCX8an8.js → InputDateTime-CxfAFe2L.js} +56 -56
  61. package/dist/chunks/{InputDateTime-2PCX8an8.js.map → InputDateTime-CxfAFe2L.js.map} +1 -1
  62. package/dist/chunks/{InputFile-Ca-bRo93.js → InputFile-CyZu__B_.js} +17 -17
  63. package/dist/chunks/{InputFile-Ca-bRo93.js.map → InputFile-CyZu__B_.js.map} +1 -1
  64. package/dist/chunks/{InputFiles-pI9rQXOI.js → InputFiles-CrTJV27R.js} +31 -31
  65. package/dist/chunks/{InputFiles-pI9rQXOI.js.map → InputFiles-CrTJV27R.js.map} +1 -1
  66. package/dist/chunks/{InputImage-B522AQzl.js → InputImage-Cw8rPYQu.js} +18 -18
  67. package/dist/chunks/{InputImage-B522AQzl.js.map → InputImage-Cw8rPYQu.js.map} +1 -1
  68. package/dist/chunks/{LabeledExpandableActionPanel-CWmOSWeS.js → LabeledExpandableActionPanel-D3kUvmFH.js} +26 -26
  69. package/dist/chunks/{LabeledExpandableActionPanel-CWmOSWeS.js.map → LabeledExpandableActionPanel-D3kUvmFH.js.map} +1 -1
  70. package/dist/chunks/Listbox-BZlp5qHz.js +81 -0
  71. package/dist/chunks/{Listbox-B6F_IKQv.js.map → Listbox-BZlp5qHz.js.map} +1 -1
  72. package/dist/chunks/{MultiSelect-CUXA8gx-.js → MultiSelect-D1XYuwH1.js} +113 -113
  73. package/dist/chunks/{MultiSelect-CUXA8gx-.js.map → MultiSelect-D1XYuwH1.js.map} +1 -1
  74. package/dist/chunks/{NotificationsHost-Bnq7xFKO.js → NotificationsHost-_icJx4xR.js} +44 -44
  75. package/dist/chunks/{NotificationsHost-Bnq7xFKO.js.map → NotificationsHost-_icJx4xR.js.map} +1 -1
  76. package/dist/chunks/{PresetRangeDateInput-B_8jsilZ.js → PresetRangeDateInput-CapirptQ.js} +11 -11
  77. package/dist/chunks/{PresetRangeDateInput-B_8jsilZ.js.map → PresetRangeDateInput-CapirptQ.js.map} +1 -1
  78. package/dist/chunks/RadioButton-D0uA0rX_.js +48 -0
  79. package/dist/chunks/{RadioButton-D5vPW4Yr.js.map → RadioButton-D0uA0rX_.js.map} +1 -1
  80. package/dist/chunks/RadioGroup-B9XjkcOy.js +121 -0
  81. package/dist/chunks/{RadioGroup-BAhN1d1X.js.map → RadioGroup-B9XjkcOy.js.map} +1 -1
  82. package/dist/chunks/{Select-CoAYWNOn.js → Select-CXeVjVKA.js} +11 -11
  83. package/dist/chunks/{Select-CoAYWNOn.js.map → Select-CXeVjVKA.js.map} +1 -1
  84. package/dist/chunks/{SerializableSelect-awBOWKTj.js → SerializableSelect-DkYeJtAO.js} +2 -2
  85. package/dist/chunks/{SerializableSelect-awBOWKTj.js.map → SerializableSelect-DkYeJtAO.js.map} +1 -1
  86. package/dist/chunks/{SingleDateTimeInput-o44Vlwdk.js → SingleDateTimeInput-BmeuVGQT.js} +78 -78
  87. package/dist/chunks/{SingleDateTimeInput-o44Vlwdk.js.map → SingleDateTimeInput-BmeuVGQT.js.map} +1 -1
  88. package/dist/chunks/{Splitter-NjNFuEq4.js → Splitter-BFkVGVRb.js} +32 -32
  89. package/dist/chunks/{Splitter-NjNFuEq4.js.map → Splitter-BFkVGVRb.js.map} +1 -1
  90. package/dist/chunks/StateSelect-1jH3uLz9.js +78 -0
  91. package/dist/chunks/{StateSelect-abZq176J.js.map → StateSelect-1jH3uLz9.js.map} +1 -1
  92. package/dist/chunks/{Switch-DHMnZVmN.js → Switch-B57Qmy1z.js} +19 -19
  93. package/dist/chunks/{Switch-DHMnZVmN.js.map → Switch-B57Qmy1z.js.map} +1 -1
  94. package/dist/chunks/{TextEditorLexicalClient-Dt4eaPA3.js → TextEditorLexicalClient-DRhAswpP.js} +204 -204
  95. package/dist/chunks/{TextEditorLexicalClient-Dt4eaPA3.js.map → TextEditorLexicalClient-DRhAswpP.js.map} +1 -1
  96. package/dist/chunks/{Textarea-DOVrPH4I.js → Textarea-C9UdUueF.js} +2 -2
  97. package/dist/chunks/{Textarea-DOVrPH4I.js.map → Textarea-C9UdUueF.js.map} +1 -1
  98. package/dist/chunks/{TimePanel-_kF2RtHk.js → TimePanel-b4saqoUY.js} +27 -27
  99. package/dist/chunks/{TimePanel-_kF2RtHk.js.map → TimePanel-b4saqoUY.js.map} +1 -1
  100. package/dist/chunks/{Toggle-C_fE-bkM.js → Toggle-DVqOQXmt.js} +18 -18
  101. package/dist/chunks/{Toggle-C_fE-bkM.js.map → Toggle-DVqOQXmt.js.map} +1 -1
  102. package/dist/chunks/{TreeMultiSelect-C76RYavo.js → TreeMultiSelect-CfQhlfnC.js} +6 -6
  103. package/dist/chunks/{TreeMultiSelect-C76RYavo.js.map → TreeMultiSelect-CfQhlfnC.js.map} +1 -1
  104. package/dist/chunks/{TreePickerBase-qNHIWbYL.js → TreePickerBase-BBUOWsSu.js} +49 -49
  105. package/dist/chunks/{TreePickerBase-qNHIWbYL.js.map → TreePickerBase-BBUOWsSu.js.map} +1 -1
  106. package/dist/chunks/{TreeSelect-LEhNdPCX.js → TreeSelect-2wUXs90E.js} +6 -6
  107. package/dist/chunks/{TreeSelect-LEhNdPCX.js.map → TreeSelect-2wUXs90E.js.map} +1 -1
  108. package/dist/chunks/base-table-CoQlKABk.js +514 -0
  109. package/dist/chunks/{base-table-ij2guVMB.js.map → base-table-CoQlKABk.js.map} +1 -1
  110. package/dist/chunks/{floating-arrow-CdRV69sg.js → floating-arrow-BE-z4QkE.js} +7 -7
  111. package/dist/chunks/{floating-arrow-CdRV69sg.js.map → floating-arrow-BE-z4QkE.js.map} +1 -1
  112. package/dist/chunks/input-search-Dw4rnJBq.js +30 -0
  113. package/dist/chunks/input-search-Dw4rnJBq.js.map +1 -0
  114. package/dist/chunks/{layout-picker-CzZ8Xzkk.js → layout-picker-MWaImn3L.js} +34 -34
  115. package/dist/chunks/{layout-picker-CzZ8Xzkk.js.map → layout-picker-MWaImn3L.js.map} +1 -1
  116. package/dist/chunks/{misc-Bj0y3ERC.js → misc-DoqZBMof.js} +110 -110
  117. package/dist/chunks/{misc-Bj0y3ERC.js.map → misc-DoqZBMof.js.map} +1 -1
  118. package/dist/chunks/{modal-B4ivQb2h.js → modal-B3HY3laL.js} +40 -40
  119. package/dist/chunks/{modal-B4ivQb2h.js.map → modal-B3HY3laL.js.map} +1 -1
  120. package/dist/chunks/multi-select-BzYIviCU.js +1305 -0
  121. package/dist/chunks/multi-select-BzYIviCU.js.map +1 -0
  122. package/dist/chunks/{picker-gIUs0nE_.js → picker-Dg55Ss-B.js} +74 -74
  123. package/dist/chunks/{picker-gIUs0nE_.js.map → picker-Dg55Ss-B.js.map} +1 -1
  124. package/dist/chunks/{popover-C79P5bm2.js → popover-xJJqy1v6.js} +52 -52
  125. package/dist/chunks/{popover-C79P5bm2.js.map → popover-xJJqy1v6.js.map} +1 -1
  126. package/dist/chunks/{separator-CIqnk2z9.js → separator-B72Aq-6a.js} +2 -2
  127. package/dist/chunks/{separator-CIqnk2z9.js.map → separator-B72Aq-6a.js.map} +1 -1
  128. package/dist/chunks/{slider-CigVo4Ju.js → slider-CFKsfxFp.js} +83 -83
  129. package/dist/chunks/{slider-CigVo4Ju.js.map → slider-CFKsfxFp.js.map} +1 -1
  130. package/dist/chunks/sortable-DcTIAbjD.js +185 -0
  131. package/dist/chunks/{sortable-BZqnZ_LA.js.map → sortable-DcTIAbjD.js.map} +1 -1
  132. package/dist/chunks/{table-CK-CM2zD.js → table-Dc3AqMzP.js} +21 -21
  133. package/dist/chunks/{table-CK-CM2zD.js.map → table-Dc3AqMzP.js.map} +1 -1
  134. package/dist/chunks/{table-column-interactions-DPyJDD7P.js → table-column-interactions-6RGjmiI5.js} +24 -24
  135. package/dist/chunks/{table-column-interactions-DPyJDD7P.js.map → table-column-interactions-6RGjmiI5.js.map} +1 -1
  136. package/dist/chunks/{tabs-D5ikIIng.js → tabs-DlnVVMJl.js} +96 -96
  137. package/dist/chunks/{tabs-D5ikIIng.js.map → tabs-DlnVVMJl.js.map} +1 -1
  138. package/dist/chunks/{toolbar-C-Ziw_Uh.js → toolbar-BCZNdRXM.js} +2 -2
  139. package/dist/chunks/{toolbar-C-Ziw_Uh.js.map → toolbar-BCZNdRXM.js.map} +1 -1
  140. package/dist/chunks/{wheel-picker-DUHGy7wE.js → wheel-picker-FS58cRsQ.js} +23 -23
  141. package/dist/chunks/{wheel-picker-DUHGy7wE.js.map → wheel-picker-FS58cRsQ.js.map} +1 -1
  142. package/dist/context-menu/index.js +1 -1
  143. package/dist/context-menu/stories/ContextMenu.stories.js +45 -45
  144. package/dist/date-input/index.js +2 -2
  145. package/dist/date-input/stories/DateInput.stories.js +2 -2
  146. package/dist/date-range-preset-select/index.js +1 -1
  147. package/dist/date-range-preset-select/stories/DateRangePresetSelect.stories.js +8 -8
  148. package/dist/date-time-input/index.js +1 -1
  149. package/dist/date-time-input/stories/SingleDateTimeInput.stories.js +38 -38
  150. package/dist/date-time-input/stories/TimePanel.stories.js +9 -9
  151. package/dist/detail/index.js +1 -1
  152. package/dist/detail/stories/Detail.stories.js +1 -1
  153. package/dist/dialog/index.js +1 -1
  154. package/dist/dialog/stories/Dialog.stories.js +16 -16
  155. package/dist/disclosure/index.js +1 -1
  156. package/dist/disclosure/stories/Disclosure.stories.js +1 -1
  157. package/dist/drop-zone/index.js +1 -1
  158. package/dist/drop-zone/stories/DropZone.stories.js +14 -14
  159. package/dist/errors/index.js +47 -47
  160. package/dist/expandable-action-panel/index.js +1 -1
  161. package/dist/expandable-action-panel/stories/ExpandableActionPanel.stories.js +28 -28
  162. package/dist/flex/index.js +2 -2
  163. package/dist/flex/stories/Flex.stories.js +2 -2
  164. package/dist/floating-arrow/index.js +1 -1
  165. package/dist/fullscreen-portal/index.js +6 -6
  166. package/dist/grid/stories/Grid.stories.js +1 -1
  167. package/dist/image/index.js +123 -123
  168. package/dist/input/index.js +1 -1
  169. package/dist/input/stories/Input.stories.js +11 -11
  170. package/dist/input-date-time/index.js +1 -1
  171. package/dist/input-date-time/stories/InputDateTime.stories.js +11 -11
  172. package/dist/input-file/index.js +1 -1
  173. package/dist/input-file/stories/InputFile.stories.js +9 -9
  174. package/dist/input-files/index.js +1 -1
  175. package/dist/input-files/stories/InputFiles.stories.js +9 -9
  176. package/dist/input-image/index.js +1 -1
  177. package/dist/input-image/stories/InputImage.stories.js +15 -15
  178. package/dist/input-search/index.js +2 -30
  179. package/dist/layout-picker/index.js +1 -1
  180. package/dist/layout-picker/stories/LayoutPicker.stories.js +52 -52
  181. package/dist/list/index.js +27 -27
  182. package/dist/listbox/index.js +1 -1
  183. package/dist/listbox/stories/Listbox.stories.js +19 -19
  184. package/dist/misc/index.js +1 -1
  185. package/dist/modal/index.js +1 -1
  186. package/dist/modal/stories/Modal.stories.js +55 -55
  187. package/dist/multi-select/index.js +3 -1141
  188. package/dist/multi-select/ui/stories/MultiSelect.stories.js +17 -17
  189. package/dist/notifications/index.js +1 -1
  190. package/dist/notifications/ui/stories/NotificationsHost.stories.js +59 -59
  191. package/dist/period-select/index.js +20 -20
  192. package/dist/period-select/stories/PeriodSelect.stories.js +17 -17
  193. package/dist/picker/index.js +1 -1
  194. package/dist/popover/index.js +1 -1
  195. package/dist/popover/stories/Popover.stories.js +16 -16
  196. package/dist/preset-range-date-input/index.js +1 -1
  197. package/dist/preset-range-date-input/ui/stories/PresetRangeDateInput.stories.js +9 -9
  198. package/dist/preset-select/index.js +1 -1
  199. package/dist/radio-button/index.js +1 -1
  200. package/dist/radio-button/stories/RadioButton.stories.js +11 -11
  201. package/dist/radio-group/index.js +1 -1
  202. package/dist/radio-group/stories/RadioGroup.stories.js +21 -21
  203. package/dist/select/index.js +2 -2
  204. package/dist/select/stories/Select.stories.js +23 -23
  205. package/dist/select/stories/SerializableSelect.stories.js +22 -22
  206. package/dist/separator/index.js +1 -1
  207. package/dist/simple-table/index.js +5 -5
  208. package/dist/slider/index.js +1 -1
  209. package/dist/slider/stories/Slider.stories.js +32 -32
  210. package/dist/slider/stories/SliderInput.stories.js +39 -39
  211. package/dist/sortable/index.js +1 -1
  212. package/dist/sortable/stories/Sortable.stories.js +23 -23
  213. package/dist/splitter/index.js +1 -1
  214. package/dist/splitter/stories/Splitter.stories.js +1 -1
  215. package/dist/state-select/index.js +1 -1
  216. package/dist/state-select/stories/StateSelect.stories.js +23 -23
  217. package/dist/styles.css +1 -1
  218. package/dist/switch/index.js +1 -1
  219. package/dist/switch/stories/Switch.stories.js +11 -11
  220. package/dist/table/index.js +1 -1
  221. package/dist/table-column-interactions/index.js +1 -1
  222. package/dist/table-sorting/index.js +1 -1
  223. package/dist/tabs/index.js +1 -1
  224. package/dist/tabs/stories/Tabs.stories.js +39 -39
  225. package/dist/text/index.js +20 -20
  226. package/dist/text-editor/index.js +3 -3
  227. package/dist/text-editor/toolbar/index.js +1 -1
  228. package/dist/textarea/index.js +1 -1
  229. package/dist/textarea/stories/Textarea.stories.js +8 -8
  230. package/dist/three-scene/index.js +7 -7
  231. package/dist/toggle/index.js +1 -1
  232. package/dist/toggle/stories/Toggle.stories.js +7 -7
  233. package/dist/toolbar/index.js +16 -16
  234. package/dist/tree/index.js +24 -24
  235. package/dist/tree-select/index.js +2 -2
  236. package/dist/tree-select/stories/TreeMultiSelect.stories.js +9 -9
  237. package/dist/tree-select/stories/TreeSelect.stories.js +9 -9
  238. package/dist/tree-table/index.js +32 -32
  239. package/dist/wheel-picker/index.js +1 -1
  240. package/package.json +11 -1
  241. package/dist/chunks/CalendarView-DjShdvRD.js +0 -435
  242. package/dist/chunks/CheckBox-CulnjNvJ.js +0 -48
  243. package/dist/chunks/Detail-DKolHye4.js +0 -80
  244. package/dist/chunks/DisclosureGroup-Plk2M_Vl.js +0 -49
  245. package/dist/chunks/Input-Wrew1puH.js +0 -227
  246. package/dist/chunks/Listbox-B6F_IKQv.js +0 -81
  247. package/dist/chunks/RadioButton-D5vPW4Yr.js +0 -48
  248. package/dist/chunks/RadioGroup-BAhN1d1X.js +0 -121
  249. package/dist/chunks/StateSelect-abZq176J.js +0 -78
  250. package/dist/chunks/base-table-ij2guVMB.js +0 -514
  251. package/dist/chunks/sortable-BZqnZ_LA.js +0 -185
  252. package/dist/input-search/index.js.map +0 -1
  253. package/dist/multi-select/index.js.map +0 -1
@@ -0,0 +1,48 @@
1
+ import { t as e } from "./ui.module-BisoTevy.js";
2
+ import { n as t } from "./uiClasses-BNjBunnY.js";
3
+ import { t as n } from "./CheckBox.module-D0Ze9qh3.js";
4
+ import { useId as r } from "react";
5
+ import { cn as i } from "@ryuzaki13/react-foundation-lib/utils";
6
+ import { SquareIcon as a } from "lucide-react";
7
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
8
+ //#region src/check-box/CheckBox.tsx
9
+ function c({ label: c, description: l, placeholder: u, disabled: d, size: f, className: p, onChange: m, value: h, noWrap: g, id: _, tone: v = "neutral", ...y }) {
10
+ let b = r(), x = _ ?? b, S = l ? `${x}-description` : void 0, C = c ?? u, w = h ?? !1;
11
+ return /* @__PURE__ */ s("div", {
12
+ className: i(e.uiElement, f && e.uiSizable, f && e[f], d && e.disabled, p),
13
+ "aria-disabled": d || void 0,
14
+ children: [/* @__PURE__ */ s("div", {
15
+ className: n.row,
16
+ children: [/* @__PURE__ */ s("div", {
17
+ className: i(n.wrapper, t(v)),
18
+ children: [/* @__PURE__ */ o("input", {
19
+ ...y,
20
+ id: x,
21
+ type: "checkbox",
22
+ checked: w,
23
+ disabled: d,
24
+ "aria-checked": w,
25
+ "aria-describedby": S,
26
+ className: i(e.uiSelectionControl, n.input),
27
+ onChange: () => m?.(!w)
28
+ }), /* @__PURE__ */ o("div", {
29
+ className: i(e.uiSelectionIcon, n.icon),
30
+ "aria-hidden": "true",
31
+ children: /* @__PURE__ */ o(a, {})
32
+ })]
33
+ }), C && /* @__PURE__ */ o("label", {
34
+ htmlFor: x,
35
+ className: i(e.uiLabelBase, g && "textNoWrap"),
36
+ children: C
37
+ })]
38
+ }), l && /* @__PURE__ */ o("p", {
39
+ id: S,
40
+ className: e.uiDescription,
41
+ children: l
42
+ })]
43
+ });
44
+ }
45
+ //#endregion
46
+ export { c as t };
47
+
48
+ //# sourceMappingURL=CheckBox-BowNqqd3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CheckBox-CulnjNvJ.js","names":[],"sources":["../../src/check-box/CheckBox.tsx"],"sourcesContent":["import React, { useId } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { SquareIcon } from \"lucide-react\";\n\nimport uiStyles from \"../ui.module.scss\";\nimport { getUiToneClassName } from \"../uiClasses\";\n\nimport styles from \"./CheckBox.module.scss\";\n\nimport type { UiBaseProps, UiTone } from \"../types\";\n\ninterface CheckBoxProps\n\textends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"checked\" | \"value\" | \"onChange\" | \"type\">, UiBaseProps<boolean> {\n\ttone?: UiTone;\n\tnoWrap?: boolean;\n}\n\n/**\n * Компонент флажка для выбора булевого значения в формах и списках.\n * Поддерживает tone + appearance и использует общие selection utility-классы из ui.module.scss.\n */\nexport function CheckBox({\n\tlabel,\n\tdescription,\n\tplaceholder,\n\tdisabled,\n\tsize,\n\tclassName,\n\tonChange,\n\tvalue,\n\tnoWrap,\n\tid: externalId,\n\ttone = \"neutral\",\n\t...props\n}: CheckBoxProps) {\n\tconst autoId = useId();\n\tconst id = externalId ?? autoId;\n\tconst descriptionId = description ? `${id}-description` : undefined;\n\tconst text = label ?? placeholder;\n\tconst checked = value ?? false;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(uiStyles.uiElement, size && uiStyles.uiSizable, size && uiStyles[size], disabled && uiStyles.disabled, className)}\n\t\t\taria-disabled={disabled || undefined}>\n\t\t\t<div className={styles.row}>\n\t\t\t\t<div className={cn(styles.wrapper, getUiToneClassName(tone))}>\n\t\t\t\t\t<input\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tid={id}\n\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\tchecked={checked}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\taria-checked={checked}\n\t\t\t\t\t\taria-describedby={descriptionId}\n\t\t\t\t\t\tclassName={cn(uiStyles.uiSelectionControl, styles.input)}\n\t\t\t\t\t\tonChange={() => onChange?.(!checked)}\n\t\t\t\t\t/>\n\t\t\t\t\t<div className={cn(uiStyles.uiSelectionIcon, styles.icon)} aria-hidden=\"true\">\n\t\t\t\t\t\t<SquareIcon />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t{text && (\n\t\t\t\t\t<label htmlFor={id} className={cn(uiStyles.uiLabelBase, noWrap && \"textNoWrap\")}>\n\t\t\t\t\t\t{text}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{description && (\n\t\t\t\t<p id={descriptionId} className={uiStyles.uiDescription}>\n\t\t\t\t\t{description}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;AAsBA,SAAgB,EAAS,EACxB,UACA,gBACA,gBACA,aACA,SACA,cACA,aACA,UACA,WACA,IAAI,GACJ,UAAO,WACP,GAAG,KACc;CACjB,IAAM,IAAS,EAAM,GACf,IAAK,KAAc,GACnB,IAAgB,IAAc,GAAG,EAAG,gBAAgB,KAAA,GACpD,IAAO,KAAS,GAChB,IAAU,KAAS;CAEzB,OACC,kBAAC,OAAD;EACC,WAAW,EAAG,EAAS,WAAW,KAAQ,EAAS,WAAW,KAAQ,EAAS,IAAO,KAAY,EAAS,UAAU,CAAS;EAC9H,iBAAe,KAAY,KAAA;YAF5B,CAGC,kBAAC,OAAD;GAAK,WAAW,EAAO;aAAvB,CACC,kBAAC,OAAD;IAAK,WAAW,EAAG,EAAO,SAAS,EAAmB,CAAI,CAAC;cAA3D,CACC,kBAAC,SAAD;KACC,GAAI;KACA;KACJ,MAAK;KACI;KACC;KACV,gBAAc;KACd,oBAAkB;KAClB,WAAW,EAAG,EAAS,oBAAoB,EAAO,KAAK;KACvD,gBAAgB,IAAW,CAAC,CAAO;IACnC,CAAA,GACD,kBAAC,OAAD;KAAK,WAAW,EAAG,EAAS,iBAAiB,EAAO,IAAI;KAAG,eAAY;eACtE,kBAAC,GAAD,CAAa,CAAA;IACT,CAAA,CACD;OACJ,KACA,kBAAC,SAAD;IAAO,SAAS;IAAI,WAAW,EAAG,EAAS,aAAa,KAAU,YAAY;cAC5E;GACK,CAAA,CAEJ;MACJ,KACA,kBAAC,KAAD;GAAG,IAAI;GAAe,WAAW,EAAS;aACxC;EACC,CAAA,CAEA;;AAEP"}
1
+ {"version":3,"file":"CheckBox-BowNqqd3.js","names":[],"sources":["../../src/check-box/CheckBox.tsx"],"sourcesContent":["import React, { useId } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { SquareIcon } from \"lucide-react\";\n\nimport uiStyles from \"../ui.module.scss\";\nimport { getUiToneClassName } from \"../uiClasses\";\n\nimport styles from \"./CheckBox.module.scss\";\n\nimport type { UiBaseProps, UiTone } from \"../types\";\n\ninterface CheckBoxProps\n\textends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"checked\" | \"value\" | \"onChange\" | \"type\">, UiBaseProps<boolean> {\n\ttone?: UiTone;\n\tnoWrap?: boolean;\n}\n\n/**\n * Компонент флажка для выбора булевого значения в формах и списках.\n * Поддерживает tone + appearance и использует общие selection utility-классы из ui.module.scss.\n */\nexport function CheckBox({\n\tlabel,\n\tdescription,\n\tplaceholder,\n\tdisabled,\n\tsize,\n\tclassName,\n\tonChange,\n\tvalue,\n\tnoWrap,\n\tid: externalId,\n\ttone = \"neutral\",\n\t...props\n}: CheckBoxProps) {\n\tconst autoId = useId();\n\tconst id = externalId ?? autoId;\n\tconst descriptionId = description ? `${id}-description` : undefined;\n\tconst text = label ?? placeholder;\n\tconst checked = value ?? false;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(uiStyles.uiElement, size && uiStyles.uiSizable, size && uiStyles[size], disabled && uiStyles.disabled, className)}\n\t\t\taria-disabled={disabled || undefined}>\n\t\t\t<div className={styles.row}>\n\t\t\t\t<div className={cn(styles.wrapper, getUiToneClassName(tone))}>\n\t\t\t\t\t<input\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tid={id}\n\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\tchecked={checked}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\taria-checked={checked}\n\t\t\t\t\t\taria-describedby={descriptionId}\n\t\t\t\t\t\tclassName={cn(uiStyles.uiSelectionControl, styles.input)}\n\t\t\t\t\t\tonChange={() => onChange?.(!checked)}\n\t\t\t\t\t/>\n\t\t\t\t\t<div className={cn(uiStyles.uiSelectionIcon, styles.icon)} aria-hidden=\"true\">\n\t\t\t\t\t\t<SquareIcon />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t{text && (\n\t\t\t\t\t<label htmlFor={id} className={cn(uiStyles.uiLabelBase, noWrap && \"textNoWrap\")}>\n\t\t\t\t\t\t{text}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{description && (\n\t\t\t\t<p id={descriptionId} className={uiStyles.uiDescription}>\n\t\t\t\t\t{description}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;AAsBA,SAAgB,EAAS,EACxB,UACA,gBACA,gBACA,aACA,SACA,cACA,aACA,UACA,WACA,IAAI,GACJ,UAAO,WACP,GAAG,KACc;CACjB,IAAM,IAAS,EAAM,GACf,IAAK,KAAc,GACnB,IAAgB,IAAc,GAAG,EAAG,gBAAgB,KAAA,GACpD,IAAO,KAAS,GAChB,IAAU,KAAS;CAEzB,OACC,kBAAC,OAAD;EACC,WAAW,EAAG,EAAS,WAAW,KAAQ,EAAS,WAAW,KAAQ,EAAS,IAAO,KAAY,EAAS,UAAU,CAAS;EAC9H,iBAAe,KAAY,KAAA;YAF5B,CAGC,kBAAC,OAAD;GAAK,WAAW,EAAO;aAAvB,CACC,kBAAC,OAAD;IAAK,WAAW,EAAG,EAAO,SAAS,EAAmB,CAAI,CAAC;cAA3D,CACC,kBAAC,SAAD;KACC,GAAI;KACA;KACJ,MAAK;KACI;KACC;KACV,gBAAc;KACd,oBAAkB;KAClB,WAAW,EAAG,EAAS,oBAAoB,EAAO,KAAK;KACvD,gBAAgB,IAAW,CAAC,CAAO;IACnC,CAAA,GACD,kBAAC,OAAD;KAAK,WAAW,EAAG,EAAS,iBAAiB,EAAO,IAAI;KAAG,eAAY;eACtE,kBAAC,GAAD,CAAa,CAAA;IACT,CAAA,CACD;OACJ,KACA,kBAAC,SAAD;IAAO,SAAS;IAAI,WAAW,EAAG,EAAS,aAAa,KAAU,YAAY;cAC5E;GACK,CAAA,CAEJ;MACJ,KACA,kBAAC,KAAD;GAAG,IAAI;GAAe,WAAW,EAAS;aACxC;EACC,CAAA,CAEA;;AAEP"}
@@ -1,14 +1,14 @@
1
- import { r as e } from "./popover-C79P5bm2.js";
2
- import { t } from "./Button-BZ_b-Kin.js";
3
- import { n, o as r, s as i, t as a } from "./CalendarView-DjShdvRD.js";
4
- import { a as o } from "./Input-Wrew1puH.js";
5
- import { n as s } from "./RadioGroup-BAhN1d1X.js";
6
- import { CalendarDaysIcon as c } from "lucide-react";
7
- import { jsx as l, jsxs as u } from "react/jsx-runtime";
8
- import { useCallback as d, useEffect as f, useEffectEvent as p, useMemo as m, useRef as ee, useState as h } from "react";
9
- import { DEFAULT_DATE_PRESET_NAMES as g, formatDate as _, formatDateRange as v, getCalendarPeriod as y, getDatePreset as b, isDateRangeTuple as x, parseDateByFormat as S, resolveDateFormatName as C, resolveDateFormatPreset as w } from "@ryuzaki13/react-foundation-lib/formatters";
1
+ import { r as e } from "./popover-xJJqy1v6.js";
2
+ import { t } from "./Button-CCWuggdA.js";
3
+ import { a as n } from "./Input-BmjlpA09.js";
4
+ import { n as r, o as i, s as a, t as o } from "./CalendarView-DjeTJkTT.js";
5
+ import { n as s } from "./RadioGroup-B9XjkcOy.js";
6
+ import { useCallback as c, useEffect as l, useEffectEvent as u, useMemo as d, useRef as f, useState as p } from "react";
7
+ import { DEFAULT_DATE_PRESET_NAMES as m, formatDate as h, formatDateRange as g, getCalendarPeriod as _, getDatePreset as v, isDateRangeTuple as y, parseDateByFormat as b, resolveDateFormatName as x, resolveDateFormatPreset as S } from "@ryuzaki13/react-foundation-lib/formatters";
8
+ import { CalendarDaysIcon as ee } from "lucide-react";
9
+ import { jsx as C, jsxs as w } from "react/jsx-runtime";
10
10
  //#region src/date-input/lib/dateInputValue.ts
11
- var T = g.date, E = "dd.MM.yyyy", D = " - ", O = Object.freeze({
11
+ var T = m.date, E = "dd.MM.yyyy", D = " - ", O = Object.freeze({
12
12
  defaultFormat: T,
13
13
  patternPresetName: "__date_input__"
14
14
  });
@@ -31,32 +31,32 @@ function j(e, t) {
31
31
  } : e;
32
32
  }
33
33
  function M(e) {
34
- let t = C(e, T);
35
- return b(t) ? t : T;
34
+ let t = x(e, T);
35
+ return v(t) ? t : T;
36
36
  }
37
37
  function N(e) {
38
38
  return e.datePreset === void 0 ? e.dateFormat : M(e.datePreset);
39
39
  }
40
40
  function P(e) {
41
- return e.datePreset === void 0 ? w(e.dateFormat, O) : M(e.datePreset);
41
+ return e.datePreset === void 0 ? S(e.dateFormat, O) : M(e.datePreset);
42
42
  }
43
43
  function F(e, t) {
44
- return S(e, N(t), {
44
+ return b(e, N(t), {
45
45
  defaultFormat: T,
46
46
  precision: k(t),
47
47
  referenceDate: t.referenceDate
48
48
  })?.date ?? null;
49
49
  }
50
50
  function I(e, t) {
51
- return y(e, A(t))?.start ?? null;
51
+ return _(e, A(t))?.start ?? null;
52
52
  }
53
53
  function L(e, t) {
54
- if (!x(e)) return null;
54
+ if (!y(e)) return null;
55
55
  let [n, r] = e;
56
56
  return [I(n, t), R(r, t)];
57
57
  }
58
58
  function R(e, t) {
59
- return y(e, A(t))?.end ?? null;
59
+ return _(e, A(t))?.end ?? null;
60
60
  }
61
61
  function z(e) {
62
62
  return e?.getTime() ?? null;
@@ -71,15 +71,15 @@ function V(e, t, n) {
71
71
  function H(e, t, n) {
72
72
  if (!e) return "";
73
73
  let r = j(t, n);
74
- return _(e, P(r), { precision: k(r) });
74
+ return h(e, P(r), { precision: k(r) });
75
75
  }
76
76
  function U(e, t, n) {
77
- if (!x(e)) return "";
77
+ if (!y(e)) return "";
78
78
  let r = j(t, n), [i, a] = e;
79
- return i && a ? v(i, a, P(r), { precision: k(r) }) : i ? `${H(i, r)}${D}` : "";
79
+ return i && a ? g(i, a, P(r), { precision: k(r) }) : i ? `${H(i, r)}${D}` : "";
80
80
  }
81
81
  function W(e, t, n) {
82
- return x(e) ? U(e, t, n) : H(e, t, n);
82
+ return y(e) ? U(e, t, n) : H(e, t, n);
83
83
  }
84
84
  function G(e, t, n) {
85
85
  let r = j(t, n);
@@ -96,10 +96,10 @@ function q(e, t, n) {
96
96
  //#endregion
97
97
  //#region src/date-input/model/useDateInput.ts
98
98
  function J(e) {
99
- return x(e) ? e[0] ?? e[1] ?? void 0 : e ?? void 0;
99
+ return y(e) ? e[0] ?? e[1] ?? void 0 : e ?? void 0;
100
100
  }
101
101
  var te = (e) => {
102
- let t = m(() => {
102
+ let t = d(() => {
103
103
  let t = {
104
104
  selectionMode: e.selectionMode,
105
105
  weekEndDay: e.weekEndDay
@@ -110,7 +110,7 @@ var te = (e) => {
110
110
  e.selectionMode,
111
111
  e.value,
112
112
  e.weekEndDay
113
- ]), [n, r] = h(t), i = m(() => ({
113
+ ]), [n, r] = p(t), i = d(() => ({
114
114
  datePreset: e.datePreset,
115
115
  dateFormat: e.dateFormat,
116
116
  datePickerLevel: e.datePickerLevel,
@@ -122,7 +122,7 @@ var te = (e) => {
122
122
  e.datePreset,
123
123
  e.selectionMode,
124
124
  e.weekEndDay
125
- ]), [a, o] = h(() => W(t, i)), s = m(() => {
125
+ ]), [a, o] = p(() => W(t, i)), s = d(() => {
126
126
  if (e.selectsRange) {
127
127
  let t = L(e.value, i);
128
128
  return `${t?.[0]?.getTime() ?? "null"}:${t?.[1]?.getTime() ?? "null"}`;
@@ -133,7 +133,7 @@ var te = (e) => {
133
133
  i,
134
134
  e.selectsRange,
135
135
  e.value
136
- ]), c = (e) => W(e, i), l = p((t) => {
136
+ ]), c = (e) => W(e, i), f = u((t) => {
137
137
  if (e.selectsRange) {
138
138
  let e = L(t, i), n = c(e);
139
139
  r((t) => {
@@ -145,8 +145,8 @@ var te = (e) => {
145
145
  let n = I(t, i), a = c(n);
146
146
  r((e) => (e?.getTime() ?? null) === (n?.getTime() ?? null) ? e : n), o((e) => e === a ? e : a);
147
147
  });
148
- return f(() => {
149
- l(e.value);
148
+ return l(() => {
149
+ f(e.value);
150
150
  }, [
151
151
  e.dateFormat,
152
152
  e.datePickerLevel,
@@ -200,38 +200,38 @@ var te = (e) => {
200
200
  year: "Год"
201
201
  };
202
202
  function re(e, t) {
203
- let r = new Set(e?.length ? e : n);
204
- return r.add(t), n.filter((e) => r.has(e));
203
+ let n = new Set(e?.length ? e : r);
204
+ return n.add(t), r.filter((e) => n.has(e));
205
205
  }
206
- function X({ placeholder: n, disabled: p, error: m, onClearError: g, minDate: _, maxDate: v, datePickerLevel: y, selectionMode: b, weekEndDay: S = "sunday", allowSelectionModeChange: C, selectionModeOptions: w, onSelectionModeChange: T, ...E }) {
207
- let [D, O] = h(!1), [k, A] = h(b ?? "day"), j = b ?? k, M = y ?? "day", N = i(j, M), [P, F] = h(() => ({
206
+ function X({ placeholder: r, disabled: u, error: d, onClearError: m, minDate: h, maxDate: g, datePickerLevel: _, selectionMode: v, weekEndDay: b = "sunday", allowSelectionModeChange: x, selectionModeOptions: S, onSelectionModeChange: T, ...E }) {
207
+ let [D, O] = p(!1), [k, A] = p(v ?? "day"), j = v ?? k, M = _ ?? "day", N = a(j, M), [P, F] = p(() => ({
208
208
  view: N,
209
209
  selectionMode: j,
210
210
  minDatePickerLevel: M
211
- })), I = P.selectionMode === j && P.minDatePickerLevel === M && r(P.view, M) ? P.view : N, L = ee(E.value), R = {
211
+ })), I = P.selectionMode === j && P.minDatePickerLevel === M && i(P.view, M) ? P.view : N, L = f(E.value), R = {
212
212
  selectionMode: j,
213
- weekEndDay: S
213
+ weekEndDay: b
214
214
  }, { inputValue: z, setInputValue: H, selectedDate: U, setSelectedDate: W, handleSelect: G, formatDate: K, parseDate: q } = te({
215
215
  ...E,
216
216
  datePickerLevel: M,
217
217
  selectionMode: j,
218
- weekEndDay: S
219
- }), J = E.selectsRange ? E.onChange : void 0, X = d((e) => {
220
- r(e, M) && F({
218
+ weekEndDay: b
219
+ }), J = E.selectsRange ? E.onChange : void 0, X = c((e) => {
220
+ i(e, M) && F({
221
221
  view: e,
222
222
  selectionMode: j,
223
223
  minDatePickerLevel: M
224
224
  });
225
225
  }, [M, j]);
226
- f(() => {
226
+ l(() => {
227
227
  L.current = E.value;
228
228
  }, [E.value]);
229
229
  let Z = () => {
230
230
  if (z) {
231
231
  let e = q(z);
232
232
  if (e) {
233
- if (H(K(e)), E.selectsRange && x(e)) {
234
- if (V(e, x(U) ? U : null, R)) return;
233
+ if (H(K(e)), E.selectsRange && y(e)) {
234
+ if (V(e, y(U) ? U : null, R)) return;
235
235
  W(e), E.onChange(e);
236
236
  } else if (!E.selectsRange && e instanceof Date) {
237
237
  if (B(e, U instanceof Date ? U : null, R)) return;
@@ -241,21 +241,21 @@ function X({ placeholder: n, disabled: p, error: m, onClearError: g, minDate: _,
241
241
  }
242
242
  }, Q = (e) => {
243
243
  e.key === "Enter" && (e.preventDefault(), Z());
244
- }, ie = d((e) => {
244
+ }, ie = c((e) => {
245
245
  G(e) && O(!1);
246
- }, [G]), ae = d((e) => {
247
- b === void 0 && A(e), T?.(e), F({
248
- view: i(e, M),
246
+ }, [G]), ae = c((e) => {
247
+ v === void 0 && A(e), T?.(e), F({
248
+ view: a(e, M),
249
249
  selectionMode: e,
250
250
  minDatePickerLevel: M
251
251
  });
252
252
  }, [
253
- b,
253
+ v,
254
254
  M,
255
255
  T
256
- ]), oe = d(() => {
256
+ ]), oe = c(() => {
257
257
  if (J) {
258
- let [, e] = x(U) ? U : [null, null];
258
+ let [, e] = y(U) ? U : [null, null];
259
259
  if (!e) {
260
260
  let e = L.current, t = Array.isArray(e) ? e : null, n = t?.[0] ?? null, r = t?.[1] ?? null;
261
261
  if (n && r) {
@@ -270,13 +270,13 @@ function X({ placeholder: n, disabled: p, error: m, onClearError: g, minDate: _,
270
270
  W,
271
271
  H,
272
272
  K
273
- ]), $ = re(w, j), se = C && $.length > 1;
274
- return /* @__PURE__ */ u(e, {
273
+ ]), $ = re(S, j), se = x && $.length > 1;
274
+ return /* @__PURE__ */ w(e, {
275
275
  open: D,
276
276
  onOpenChange: (e) => {
277
277
  O(e), e || oe();
278
278
  },
279
- children: [/* @__PURE__ */ l(o, {
279
+ children: [/* @__PURE__ */ C(n, {
280
280
  label: E.label,
281
281
  description: E.description,
282
282
  size: E.size,
@@ -284,39 +284,39 @@ function X({ placeholder: n, disabled: p, error: m, onClearError: g, minDate: _,
284
284
  onChange: H,
285
285
  onBlur: Z,
286
286
  onKeyUp: Q,
287
- placeholder: n,
288
- disabled: p,
289
- error: m,
290
- onClearError: g,
287
+ placeholder: r,
288
+ disabled: u,
289
+ error: d,
290
+ onClearError: m,
291
291
  endAdornmentWidth: "var(--control-height)",
292
- endAdornment: /* @__PURE__ */ l(e.Trigger, { children: /* @__PURE__ */ l(t, {
292
+ endAdornment: /* @__PURE__ */ C(e.Trigger, { children: /* @__PURE__ */ C(t, {
293
293
  variant: "transparent",
294
- disabled: p,
294
+ disabled: u,
295
295
  className: Y.calendarButton,
296
- icon: /* @__PURE__ */ l(c, {}),
296
+ icon: /* @__PURE__ */ C(ee, {}),
297
297
  "aria-label": "Открыть календарь"
298
298
  }) })
299
- }), /* @__PURE__ */ u(e.Content, {
299
+ }), /* @__PURE__ */ w(e.Content, {
300
300
  background: "primary",
301
- children: [/* @__PURE__ */ l(a, {
301
+ children: [/* @__PURE__ */ C(o, {
302
302
  view: I,
303
303
  datePickerLevel: M,
304
304
  selectionMode: j,
305
- weekEndDay: S,
305
+ weekEndDay: b,
306
306
  onViewChange: X,
307
307
  value: U ?? null,
308
308
  onChange: ie,
309
- minDate: _,
310
- maxDate: v,
309
+ minDate: h,
310
+ maxDate: g,
311
311
  selectsRange: !!E.selectsRange
312
- }), se && /* @__PURE__ */ l("div", {
312
+ }), se && /* @__PURE__ */ C("div", {
313
313
  className: Y.selectionModeControl,
314
- children: /* @__PURE__ */ l(s, {
314
+ children: /* @__PURE__ */ C(s, {
315
315
  value: j,
316
316
  onChange: ae,
317
317
  noWrap: !0,
318
318
  "aria-label": "Режим выбора даты",
319
- children: $.map((e) => /* @__PURE__ */ l(s.Option, {
319
+ children: $.map((e) => /* @__PURE__ */ C(s.Option, {
320
320
  value: e,
321
321
  label: ne[e]
322
322
  }, e))
@@ -326,10 +326,10 @@ function X({ placeholder: n, disabled: p, error: m, onClearError: g, minDate: _,
326
326
  });
327
327
  }
328
328
  function Z(e) {
329
- return /* @__PURE__ */ l(X, { ...e });
329
+ return /* @__PURE__ */ C(X, { ...e });
330
330
  }
331
331
  function Q(e) {
332
- return /* @__PURE__ */ l(X, {
332
+ return /* @__PURE__ */ C(X, {
333
333
  ...e,
334
334
  selectsRange: !0
335
335
  });
@@ -337,4 +337,4 @@ function Q(e) {
337
337
  //#endregion
338
338
  export { V as a, U as c, R as d, I as f, G as h, T as i, H as l, q as m, Z as n, B as o, K as p, E as r, W as s, Q as t, L as u };
339
339
 
340
- //# sourceMappingURL=DateInput-LSSvObtg.js.map
340
+ //# sourceMappingURL=DateInput--tfofQ2x.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateInput-LSSvObtg.js","names":[],"sources":["../../src/date-input/lib/dateInputValue.ts","../../src/date-input/model/useDateInput.ts","../../src/date-input/ui/DateInput.module.scss","../../src/date-input/ui/DateInput.tsx"],"sourcesContent":["import {\n\tDEFAULT_DATE_PRESET_NAMES,\n\tformatDate,\n\tformatDateRange,\n\tgetCalendarPeriod,\n\tgetDatePreset,\n\tisDateRangeTuple,\n\tparseDateByFormat,\n\tresolveDateFormatName,\n\tresolveDateFormatPreset,\n\ttype CalendarPeriodOptions,\n\ttype DateFormatPrecision,\n\ttype DateFormatPreset,\n\ttype DateRangeInput,\n\ttype NullableDateRange\n} from \"@ryuzaki13/react-foundation-lib/formatters\";\n\n/**\n * Пресет даты по умолчанию для текстового поля.\n */\nexport const DEFAULT_DATE_INPUT_PRESET = DEFAULT_DATE_PRESET_NAMES.date;\n\n/**\n * @deprecated Используйте `DEFAULT_DATE_INPUT_PRESET`.\n */\nexport const DEFAULT_DATE_INPUT_FORMAT = \"dd.MM.yyyy\";\n\nconst RANGE_SEPARATOR = \" - \";\nconst DATE_INPUT_FORMAT_OPTIONS = Object.freeze({\n\tdefaultFormat: DEFAULT_DATE_INPUT_PRESET,\n\tpatternPresetName: \"__date_input__\"\n});\n\nexport type DateInputValueOptions = {\n\t/**\n\t * Имя пресета форматирования даты.\n\t */\n\tdatePreset?: string;\n\t/**\n\t * @deprecated Используйте `datePreset`.\n\t */\n\tdateFormat?: string;\n\t/**\n\t * Точность календарного значения.\n\t */\n\tdatePickerLevel?: DateFormatPrecision;\n\t/**\n\t * Размер периода, который выбирается и нормализуется полем.\n\t */\n\tselectionMode?: CalendarPeriodOptions[\"selectionMode\"];\n\t/**\n\t * Последний включённый день недели для режима выбора недели.\n\t */\n\tweekEndDay?: CalendarPeriodOptions[\"weekEndDay\"];\n\t/**\n\t * Опорная дата для пресетов без года, например `month-long`.\n\t */\n\treferenceDate?: Date;\n};\n\nexport type DateInputValueOptionsInput = string | DateInputValueOptions | undefined;\n\n/**\n * Возвращает точность форматирования поля даты.\n */\nfunction resolveDateInputPrecision(options: DateInputValueOptions): DateFormatPrecision {\n\tif (options.selectionMode === \"day\" || options.selectionMode === \"week\") {\n\t\treturn \"day\";\n\t}\n\n\tif (options.selectionMode === \"month\" || options.selectionMode === \"year\") {\n\t\treturn options.selectionMode;\n\t}\n\n\treturn options.datePickerLevel ?? \"day\";\n}\n\nfunction resolveCalendarPeriodOptions(options?: DateInputValueOptions): CalendarPeriodOptions {\n\treturn {\n\t\tselectionMode: options?.selectionMode,\n\t\tweekEndDay: options?.weekEndDay\n\t};\n}\n\n/**\n * Нормализует объектные опции и позиционный вызов с именем пресета.\n */\nfunction normalizeDateInputValueOptions(\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): DateInputValueOptions {\n\tif (typeof optionsOrPreset === \"string\" || optionsOrPreset === undefined) {\n\t\treturn {\n\t\t\tdatePreset: optionsOrPreset,\n\t\t\tdatePickerLevel\n\t\t};\n\t}\n\n\tif (datePickerLevel && optionsOrPreset.datePickerLevel === undefined) {\n\t\treturn {\n\t\t\t...optionsOrPreset,\n\t\t\tdatePickerLevel\n\t\t};\n\t}\n\n\treturn optionsOrPreset;\n}\n\n/**\n * Проверяет новый `datePreset` и возвращает только зарегистрированное имя пресета.\n */\nfunction resolveDateInputPresetName(datePreset?: string): string {\n\tconst resolvedPresetName = resolveDateFormatName(datePreset, DEFAULT_DATE_INPUT_PRESET);\n\treturn getDatePreset(resolvedPresetName) ? resolvedPresetName : DEFAULT_DATE_INPUT_PRESET;\n}\n\n/**\n * Возвращает имя пресета или deprecated-формат для парсинга.\n */\nfunction resolveDateInputFormatName(options: DateInputValueOptions): string | undefined {\n\tif (options.datePreset !== undefined) {\n\t\treturn resolveDateInputPresetName(options.datePreset);\n\t}\n\n\treturn options.dateFormat;\n}\n\n/**\n * Возвращает зарегистрированный пресет или deprecated-объектный шаблон.\n */\nfunction resolveDateInputFormatPreset(options: DateInputValueOptions): string | DateFormatPreset {\n\tif (options.datePreset !== undefined) {\n\t\treturn resolveDateInputPresetName(options.datePreset);\n\t}\n\n\treturn resolveDateFormatPreset(options.dateFormat, DATE_INPUT_FORMAT_OPTIONS);\n}\n\n/**\n * Приводит результат универсального парсинга к календарной дате.\n */\nfunction parseDateTimeValue(value: string, options: DateInputValueOptions): Date | null {\n\treturn (\n\t\tparseDateByFormat(value, resolveDateInputFormatName(options), {\n\t\t\tdefaultFormat: DEFAULT_DATE_INPUT_PRESET,\n\t\t\tprecision: resolveDateInputPrecision(options),\n\t\t\treferenceDate: options.referenceDate\n\t\t})?.date ?? null\n\t);\n}\n\n/**\n * Приводит одиночную дату к началу выбранного календарного периода.\n */\nexport function normalizeSingleDateValue(date: Date | null, options?: DateInputValueOptions): Date | null {\n\treturn getCalendarPeriod(date, resolveCalendarPeriodOptions(options))?.start ?? null;\n}\n\n/**\n * Приводит диапазон дат к границам выбранных календарных периодов.\n */\nexport function normalizeRangeDateValue(range: NullableDateRange | null, options?: DateInputValueOptions): NullableDateRange | null {\n\tif (!isDateRangeTuple(range)) return null;\n\n\tconst [startDate, endDate] = range;\n\treturn [normalizeSingleDateValue(startDate, options), normalizeRangeEndDateValue(endDate, options)];\n}\n\n/**\n * Приводит конечную дату диапазона к концу выбранного календарного периода.\n */\nexport function normalizeRangeEndDateValue(date: Date | null, options?: DateInputValueOptions): Date | null {\n\treturn getCalendarPeriod(date, resolveCalendarPeriodOptions(options))?.end ?? null;\n}\n\nfunction getDateTime(date: Date | null): number | null {\n\treturn date?.getTime() ?? null;\n}\n\n/**\n * Сравнивает одиночные даты после нормализации к точности поля ввода.\n */\nexport function areSingleDateValuesEqual(left: Date | null, right: Date | null, options?: DateInputValueOptions): boolean {\n\treturn getDateTime(normalizeSingleDateValue(left, options)) === getDateTime(normalizeSingleDateValue(right, options));\n}\n\n/**\n * Сравнивает диапазоны дат после нормализации к границам выбранных периодов.\n */\nexport function areRangeDateValuesEqual(\n\tleft: NullableDateRange | null,\n\tright: NullableDateRange | null,\n\toptions?: DateInputValueOptions\n): boolean {\n\tconst normalizedLeft = normalizeRangeDateValue(left, options);\n\tconst normalizedRight = normalizeRangeDateValue(right, options);\n\n\treturn (\n\t\tgetDateTime(normalizedLeft?.[0] ?? null) === getDateTime(normalizedRight?.[0] ?? null) &&\n\t\tgetDateTime(normalizedLeft?.[1] ?? null) === getDateTime(normalizedRight?.[1] ?? null)\n\t);\n}\n\n/**\n * Форматирует одиночную дату для текстового поля.\n */\nexport function formatSingleDateValue(\n\tdate: Date | null,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (!date) return \"\";\n\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\treturn formatDate(date, resolveDateInputFormatPreset(options), {\n\t\tprecision: resolveDateInputPrecision(options)\n\t});\n}\n\n/**\n * Форматирует диапазон дат для текстового поля.\n */\nexport function formatRangeDateValue(\n\trange: NullableDateRange | null,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (!isDateRangeTuple(range)) return \"\";\n\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst [startDate, endDate] = range;\n\tif (startDate && endDate) {\n\t\treturn formatDateRange(startDate, endDate, resolveDateInputFormatPreset(options), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t});\n\t}\n\n\tif (startDate) {\n\t\treturn `${formatSingleDateValue(startDate, options)}${RANGE_SEPARATOR}`;\n\t}\n\n\treturn \"\";\n}\n\n/**\n * Унифицирует форматирование значения поля даты.\n */\nexport function formatDateInputValue(\n\tvalue: DateRangeInput,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (isDateRangeTuple(value)) {\n\t\treturn formatRangeDateValue(value, optionsOrPreset, datePickerLevel);\n\t}\n\n\treturn formatSingleDateValue(value, optionsOrPreset, datePickerLevel);\n}\n\n/**\n * Парсит строку одиночной даты по заданному шаблону или пресету.\n */\nexport function parseSingleDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): Date | null {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\treturn normalizeSingleDateValue(parseDateTimeValue(value, options), options);\n}\n\n/**\n * Парсит строку диапазона дат по заданному шаблону или пресету.\n */\nexport function parseRangeDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): NullableDateRange {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst [startPart = \"\", endPart = \"\"] = value.split(RANGE_SEPARATOR);\n\n\treturn [parseSingleDateValue(startPart, options), parseRangeEndDateValue(endPart, options)];\n}\n\n/**\n * Парсит конечную дату диапазона и нормализует её к концу суток.\n */\nexport function parseRangeEndDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): Date | null {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\treturn normalizeRangeEndDateValue(parseDateTimeValue(value, options), options);\n}\n","import { useEffect, useEffectEvent, useMemo, useState } from \"react\";\n\nimport { isDateRangeTuple, type NullableDateRange } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\nimport {\n\tDateInputValueOptions,\n\tformatDateInputValue,\n\tnormalizeRangeDateValue,\n\tnormalizeRangeEndDateValue,\n\tnormalizeSingleDateValue,\n\tparseRangeDateValue,\n\tparseSingleDateValue,\n\ttype DateInputOptions\n} from \"../lib\";\n\nfunction resolveReferenceDate(value: Date | NullableDateRange | null): Date | undefined {\n\tif (isDateRangeTuple(value)) {\n\t\treturn value[0] ?? value[1] ?? undefined;\n\t}\n\n\treturn value ?? undefined;\n}\n\n/**\n * Хук управляет текстовым представлением и выбранным значением поля даты.\n */\nexport const useDateInput = (options: DateInputOptions) => {\n\tconst initialSelectedDate = useMemo(() => {\n\t\tconst selectionOptions: DateInputValueOptions = {\n\t\t\tselectionMode: options.selectionMode,\n\t\t\tweekEndDay: options.weekEndDay\n\t\t};\n\n\t\tif (options.selectsRange) {\n\t\t\treturn normalizeRangeDateValue(options.value as NullableDateRange | null, selectionOptions);\n\t\t}\n\n\t\treturn normalizeSingleDateValue(options.value as Date | null, selectionOptions);\n\t}, [options.selectsRange, options.selectionMode, options.value, options.weekEndDay]);\n\n\tconst [selectedDate, setSelectedDate] = useState(initialSelectedDate);\n\tconst formatOptions = useMemo<DateInputValueOptions>(\n\t\t() => ({\n\t\t\tdatePreset: options.datePreset,\n\t\t\tdateFormat: options.dateFormat,\n\t\t\tdatePickerLevel: options.datePickerLevel,\n\t\t\tselectionMode: options.selectionMode,\n\t\t\tweekEndDay: options.weekEndDay\n\t\t}),\n\t\t[options.dateFormat, options.datePickerLevel, options.datePreset, options.selectionMode, options.weekEndDay]\n\t);\n\tconst [inputValue, setInputValue] = useState<string>(() => formatDateInputValue(initialSelectedDate, formatOptions));\n\tconst valueSignature = useMemo(() => {\n\t\tif (options.selectsRange) {\n\t\t\tconst normalizedRange = normalizeRangeDateValue(options.value as NullableDateRange | null, formatOptions);\n\t\t\treturn `${normalizedRange?.[0]?.getTime() ?? \"null\"}:${normalizedRange?.[1]?.getTime() ?? \"null\"}`;\n\t\t}\n\n\t\tconst normalizedDate = normalizeSingleDateValue(options.value as Date | null, formatOptions);\n\t\treturn String(normalizedDate?.getTime() ?? \"null\");\n\t}, [formatOptions, options.selectsRange, options.value]);\n\n\t/**\n\t * Форматирует значение поля даты согласно текущему шаблону.\n\t */\n\tconst formatValue = (value: Date | NullableDateRange | null): string => formatDateInputValue(value, formatOptions);\n\n\t/**\n\t * Синхронизирует внутреннее состояние с внешними пропсами.\n\t */\n\tconst syncStateFromProps = useEffectEvent((nextValue: DateInputOptions[\"value\"]) => {\n\t\tif (options.selectsRange) {\n\t\t\tconst normalizedRange = normalizeRangeDateValue(nextValue as NullableDateRange | null, formatOptions);\n\t\t\tconst nextInputValue = formatValue(normalizedRange);\n\n\t\t\tsetSelectedDate((prevValue) => {\n\t\t\t\tconst previousRangeValue = prevValue as NullableDateRange | null;\n\t\t\t\tconst hasSameRange =\n\t\t\t\t\t(previousRangeValue?.[0]?.getTime() ?? null) === (normalizedRange?.[0]?.getTime() ?? null) &&\n\t\t\t\t\t(previousRangeValue?.[1]?.getTime() ?? null) === (normalizedRange?.[1]?.getTime() ?? null);\n\n\t\t\t\treturn hasSameRange ? prevValue : normalizedRange;\n\t\t\t});\n\t\t\tsetInputValue((prevValue) => (prevValue === nextInputValue ? prevValue : nextInputValue));\n\t\t\treturn;\n\t\t}\n\n\t\tconst normalizedDate = normalizeSingleDateValue(nextValue as Date | null, formatOptions);\n\t\tconst nextInputValue = formatValue(normalizedDate);\n\n\t\tsetSelectedDate((prevValue) =>\n\t\t\t((prevValue as Date | null)?.getTime() ?? null) === (normalizedDate?.getTime() ?? null) ? prevValue : normalizedDate\n\t\t);\n\t\tsetInputValue((prevValue) => (prevValue === nextInputValue ? prevValue : nextInputValue));\n\t});\n\n\tuseEffect(() => {\n\t\tsyncStateFromProps(options.value);\n\t}, [\n\t\toptions.dateFormat,\n\t\toptions.datePickerLevel,\n\t\toptions.datePreset,\n\t\toptions.selectsRange,\n\t\toptions.selectionMode,\n\t\toptions.value,\n\t\toptions.weekEndDay,\n\t\tvalueSignature\n\t]);\n\n\t/**\n\t * Парсит строковое значение поля в дату или диапазон дат.\n\t */\n\tconst parseDate = (dateString: string): Date | NullableDateRange | null => {\n\t\tconst parseOptions: DateInputValueOptions = {\n\t\t\t...formatOptions,\n\t\t\treferenceDate: resolveReferenceDate(selectedDate)\n\t\t};\n\n\t\tif (options.selectsRange) {\n\t\t\treturn parseRangeDateValue(dateString, parseOptions);\n\t\t}\n\n\t\treturn parseSingleDateValue(dateString, parseOptions);\n\t};\n\n\t/**\n\t * Обрабатывает выбор даты из календаря.\n\t */\n\tconst handleSelect = (date: Date | NullableDateRange) => {\n\t\tconst [selectedStartDate, selectedEndDate] = (Array.isArray(date) ? date : [date, null]) as NullableDateRange;\n\n\t\tif (options.selectsRange) {\n\t\t\tconst normalizedStartDate = normalizeSingleDateValue(selectedStartDate, formatOptions);\n\t\t\tconst normalizedEndDate = normalizeRangeEndDateValue(selectedEndDate, formatOptions);\n\n\t\t\tif (normalizedStartDate && normalizedEndDate) {\n\t\t\t\tif (normalizedEndDate < normalizedStartDate) {\n\t\t\t\t\tconst swappedRange: NullableDateRange = [\n\t\t\t\t\t\tnormalizeSingleDateValue(selectedEndDate, formatOptions),\n\t\t\t\t\t\tnormalizeRangeEndDateValue(selectedStartDate, formatOptions)\n\t\t\t\t\t];\n\t\t\t\t\tsetSelectedDate(swappedRange);\n\t\t\t\t\tsetInputValue(formatValue(swappedRange));\n\t\t\t\t\toptions.onChange(swappedRange);\n\t\t\t\t} else {\n\t\t\t\t\tconst nextRange: NullableDateRange = [normalizedStartDate, normalizedEndDate];\n\t\t\t\t\tsetSelectedDate(nextRange);\n\t\t\t\t\tsetInputValue(formatValue(nextRange));\n\t\t\t\t\toptions.onChange(nextRange);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst nextRange: NullableDateRange = [normalizedStartDate, null];\n\t\t\tsetSelectedDate(nextRange);\n\t\t\tsetInputValue(formatValue(nextRange));\n\t\t\treturn false;\n\t\t}\n\n\t\tconst normalizedDate = normalizeSingleDateValue(selectedStartDate, formatOptions);\n\t\tsetSelectedDate(normalizedDate);\n\t\tsetInputValue(formatValue(normalizedDate));\n\t\toptions.onChange(normalizedDate);\n\n\t\treturn true;\n\t};\n\n\treturn {\n\t\tinputValue,\n\t\tsetInputValue,\n\t\tselectedDate,\n\t\tsetSelectedDate,\n\t\thandleSelect,\n\t\tformatDate: formatValue,\n\t\tparseDate\n\t};\n};\n",".calendarButton {\n\t&:hover {\n\t\tcolor: var(--focus-ring);\n\t}\n}\n\n.selectionModeControl {\n\tmargin-top: var(--space-sm);\n\tpadding-top: var(--space-sm);\n\tborder-top: var(--border);\n}\n","import { JSX, useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { isDateRangeTuple, type NullableDateRange } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { CalendarDaysIcon } from \"lucide-react\";\n\nimport { Button } from \"../../button\";\nimport { InputText } from \"../../input\";\nimport { Popover } from \"../../popover\";\nimport { RadioGroup } from \"../../radio-group\";\nimport { UiBaseProps } from \"../../types\";\nimport {\n\tareRangeDateValuesEqual,\n\tareSingleDateValuesEqual,\n\tDATE_INPUT_SELECTION_MODES,\n\tisDatePickerLevelAvailable,\n\tresolveAvailableDatePickerLevel,\n\ttype DateInputSelectionMode,\n\ttype DateInputWeekEndDay,\n\ttype DatePickerLevel\n} from \"../lib\";\nimport { useDateInput } from \"../model\";\n\nimport { CalendarView } from \"./CalendarView\";\nimport styles from \"./DateInput.module.scss\";\n\ninterface BaseDateInputProps {\n\terror?: string;\n\tonClearError?: () => void;\n\n\tminDate?: Date;\n\tmaxDate?: Date;\n\n\tdatePreset?: string;\n\t/**\n\t * @deprecated Используйте `datePreset`.\n\t */\n\tdateFormat?: string;\n\n\t/**\n\t * Минимальный уровень календарной навигации. Размер выбранного периода задаёт `selectionMode`.\n\t */\n\tdatePickerLevel?: DatePickerLevel;\n\t/**\n\t * Размер периода, который выбирает поле: день, неделя, месяц или год.\n\t */\n\tselectionMode?: DateInputSelectionMode;\n\t/**\n\t * Последний включённый день недели для `selectionMode=\"week\"`.\n\t */\n\tweekEndDay?: DateInputWeekEndDay;\n\t/**\n\t * Показывает переключатель `selectionMode` под календарём.\n\t */\n\tallowSelectionModeChange?: boolean;\n\t/**\n\t * Ограничивает набор режимов в runtime-переключателе.\n\t */\n\tselectionModeOptions?: readonly DateInputSelectionMode[];\n\t/**\n\t * Сообщает наружу о runtime-смене режима выбора.\n\t */\n\tonSelectionModeChange?: (selectionMode: DateInputSelectionMode) => void;\n}\n\nexport interface DateSingleInputProps extends BaseDateInputProps, UiBaseProps<Date | null> {\n\tselectsRange?: false;\n}\nexport interface DateRangeInputProps extends BaseDateInputProps, UiBaseProps<NullableDateRange | null> {\n\tselectsRange: true;\n}\n\ntype DateInputProps = DateSingleInputProps | DateRangeInputProps;\n\ninterface CalendarTypeState {\n\treadonly view: DatePickerLevel;\n\treadonly selectionMode: DateInputSelectionMode;\n\treadonly minDatePickerLevel: DatePickerLevel;\n}\n\nconst selectionModeLabels: Record<DateInputSelectionMode, string> = {\n\tday: \"День\",\n\tweek: \"Неделя\",\n\tmonth: \"Месяц\",\n\tyear: \"Год\"\n};\n\nfunction resolveSelectionModeOptions(\n\tselectionModeOptions: readonly DateInputSelectionMode[] | undefined,\n\tselectionMode: DateInputSelectionMode\n): readonly DateInputSelectionMode[] {\n\tconst enabledModes = new Set(selectionModeOptions?.length ? selectionModeOptions : DATE_INPUT_SELECTION_MODES);\n\tenabledModes.add(selectionMode);\n\n\treturn DATE_INPUT_SELECTION_MODES.filter((mode) => enabledModes.has(mode));\n}\n\nfunction DateInput(props: DateSingleInputProps): JSX.Element;\nfunction DateInput(props: DateRangeInputProps): JSX.Element;\nfunction DateInput({\n\tplaceholder,\n\tdisabled,\n\terror,\n\tonClearError,\n\tminDate,\n\tmaxDate,\n\tdatePickerLevel,\n\tselectionMode: controlledSelectionMode,\n\tweekEndDay = \"sunday\",\n\tallowSelectionModeChange,\n\tselectionModeOptions,\n\tonSelectionModeChange,\n\t...props\n}: DateInputProps) {\n\tconst [open, setOpen] = useState(false);\n\tconst [uncontrolledSelectionMode, setUncontrolledSelectionMode] = useState<DateInputSelectionMode>(controlledSelectionMode ?? \"day\");\n\tconst selectionMode = controlledSelectionMode ?? uncontrolledSelectionMode;\n\tconst minDatePickerLevel = datePickerLevel ?? \"day\";\n\tconst preferredCalendarType = resolveAvailableDatePickerLevel(selectionMode, minDatePickerLevel);\n\tconst [calendarTypeState, setCalendarTypeState] = useState<CalendarTypeState>(() => ({\n\t\tview: preferredCalendarType,\n\t\tselectionMode,\n\t\tminDatePickerLevel\n\t}));\n\tconst calendarType =\n\t\tcalendarTypeState.selectionMode === selectionMode &&\n\t\tcalendarTypeState.minDatePickerLevel === minDatePickerLevel &&\n\t\tisDatePickerLevelAvailable(calendarTypeState.view, minDatePickerLevel)\n\t\t\t? calendarTypeState.view\n\t\t\t: preferredCalendarType;\n\n\tconst initialDateRef = useRef(props.value);\n\tconst dateInputValueOptions = {\n\t\tselectionMode,\n\t\tweekEndDay\n\t};\n\n\tconst { inputValue, setInputValue, selectedDate, setSelectedDate, handleSelect, formatDate, parseDate } = useDateInput({\n\t\t...props,\n\t\tdatePickerLevel: minDatePickerLevel,\n\t\tselectionMode,\n\t\tweekEndDay\n\t});\n\tconst rangeOnChange = props.selectsRange ? props.onChange : undefined;\n\n\tconst updateCalendarType = useCallback(\n\t\t(calendarType: DatePickerLevel) => {\n\t\t\tif (isDatePickerLevelAvailable(calendarType, minDatePickerLevel)) {\n\t\t\t\tsetCalendarTypeState({\n\t\t\t\t\tview: calendarType,\n\t\t\t\t\tselectionMode,\n\t\t\t\t\tminDatePickerLevel\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[minDatePickerLevel, selectionMode]\n\t);\n\n\tuseEffect(() => {\n\t\tinitialDateRef.current = props.value;\n\t}, [props.value]);\n\n\tconst handleInputBlur = () => {\n\t\tif (inputValue) {\n\t\t\tconst parsedDate = parseDate(inputValue);\n\t\t\tif (parsedDate) {\n\t\t\t\tsetInputValue(formatDate(parsedDate));\n\n\t\t\t\tif (props.selectsRange && isDateRangeTuple(parsedDate)) {\n\t\t\t\t\tconst selectedRange = isDateRangeTuple(selectedDate) ? selectedDate : null;\n\n\t\t\t\t\tif (areRangeDateValuesEqual(parsedDate, selectedRange, dateInputValueOptions)) return;\n\n\t\t\t\t\tsetSelectedDate(parsedDate);\n\t\t\t\t\tprops.onChange(parsedDate);\n\t\t\t\t} else if (!props.selectsRange && parsedDate instanceof Date) {\n\t\t\t\t\tconst selectedSingleDate = selectedDate instanceof Date ? selectedDate : null;\n\n\t\t\t\t\tif (areSingleDateValuesEqual(parsedDate, selectedSingleDate, dateInputValueOptions)) return;\n\n\t\t\t\t\tsetSelectedDate(parsedDate);\n\t\t\t\t\tprops.onChange(parsedDate);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (event.key === \"Enter\") {\n\t\t\tevent.preventDefault();\n\t\t\thandleInputBlur();\n\t\t}\n\t};\n\n\tconst handleCalendarDateSelect = useCallback(\n\t\t(value: Date | NullableDateRange) => {\n\t\t\tif (handleSelect(value)) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t},\n\t\t[handleSelect]\n\t);\n\n\tconst handleSelectionModeChange = useCallback(\n\t\t(nextSelectionMode: DateInputSelectionMode) => {\n\t\t\tif (controlledSelectionMode === undefined) {\n\t\t\t\tsetUncontrolledSelectionMode(nextSelectionMode);\n\t\t\t}\n\n\t\t\tonSelectionModeChange?.(nextSelectionMode);\n\t\t\tsetCalendarTypeState({\n\t\t\t\tview: resolveAvailableDatePickerLevel(nextSelectionMode, minDatePickerLevel),\n\t\t\t\tselectionMode: nextSelectionMode,\n\t\t\t\tminDatePickerLevel\n\t\t\t});\n\t\t},\n\t\t[controlledSelectionMode, minDatePickerLevel, onSelectionModeChange]\n\t);\n\n\tconst handleCancel = useCallback(() => {\n\t\t// Восстановить исходное состояние при отмене\n\t\tif (rangeOnChange) {\n\t\t\tconst [, selectedEndDate] = isDateRangeTuple(selectedDate) ? selectedDate : [null, null];\n\n\t\t\tif (!selectedEndDate) {\n\t\t\t\t// Восстановить исходное состояние диапазона\n\t\t\t\tconst initialValue = initialDateRef.current;\n\t\t\t\tconst initialRange = Array.isArray(initialValue) ? initialValue : null;\n\t\t\t\tconst initialStart = initialRange?.[0] ?? null;\n\t\t\t\tconst initialEnd = initialRange?.[1] ?? null;\n\n\t\t\t\tif (initialStart && initialEnd) {\n\t\t\t\t\tconst initialSelectedDate: NullableDateRange = [initialStart, initialEnd];\n\t\t\t\t\tsetSelectedDate(initialSelectedDate);\n\t\t\t\t\tsetInputValue(formatDate(initialSelectedDate));\n\n\t\t\t\t\trangeOnChange(initialSelectedDate);\n\t\t\t\t} else {\n\t\t\t\t\t// Если начального диапазона нет, очистить всё\n\t\t\t\t\tsetSelectedDate([null, null]);\n\t\t\t\t\tsetInputValue(\"\");\n\n\t\t\t\t\trangeOnChange([null, null]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [rangeOnChange, selectedDate, setSelectedDate, setInputValue, formatDate]);\n\n\tconst availableSelectionModes = resolveSelectionModeOptions(selectionModeOptions, selectionMode);\n\tconst showSelectionModeControl = allowSelectionModeChange && availableSelectionModes.length > 1;\n\n\treturn (\n\t\t<Popover\n\t\t\topen={open}\n\t\t\tonOpenChange={(value) => {\n\t\t\t\tsetOpen(value);\n\t\t\t\tif (!value) {\n\t\t\t\t\thandleCancel();\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<InputText\n\t\t\t\tlabel={props.label}\n\t\t\t\tdescription={props.description}\n\t\t\t\tsize={props.size}\n\t\t\t\tvalue={inputValue}\n\t\t\t\tonChange={setInputValue}\n\t\t\t\tonBlur={handleInputBlur}\n\t\t\t\tonKeyUp={handleKeyDown}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tdisabled={disabled}\n\t\t\t\terror={error}\n\t\t\t\tonClearError={onClearError}\n\t\t\t\tendAdornmentWidth=\"var(--control-height)\"\n\t\t\t\tendAdornment={\n\t\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"transparent\"\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tclassName={styles.calendarButton}\n\t\t\t\t\t\t\ticon={<CalendarDaysIcon />}\n\t\t\t\t\t\t\taria-label=\"Открыть календарь\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t}\n\t\t\t/>\n\n\t\t\t<Popover.Content background=\"primary\">\n\t\t\t\t<CalendarView\n\t\t\t\t\tview={calendarType}\n\t\t\t\t\tdatePickerLevel={minDatePickerLevel}\n\t\t\t\t\tselectionMode={selectionMode}\n\t\t\t\t\tweekEndDay={weekEndDay}\n\t\t\t\t\tonViewChange={updateCalendarType}\n\t\t\t\t\tvalue={selectedDate ?? null}\n\t\t\t\t\tonChange={handleCalendarDateSelect}\n\t\t\t\t\tminDate={minDate}\n\t\t\t\t\tmaxDate={maxDate}\n\t\t\t\t\tselectsRange={!!props.selectsRange}\n\t\t\t\t/>\n\t\t\t\t{showSelectionModeControl && (\n\t\t\t\t\t<div className={styles.selectionModeControl}>\n\t\t\t\t\t\t<RadioGroup<DateInputSelectionMode>\n\t\t\t\t\t\t\tvalue={selectionMode}\n\t\t\t\t\t\t\tonChange={handleSelectionModeChange}\n\t\t\t\t\t\t\tnoWrap\n\t\t\t\t\t\t\taria-label=\"Режим выбора даты\">\n\t\t\t\t\t\t\t{availableSelectionModes.map((mode) => (\n\t\t\t\t\t\t\t\t<RadioGroup.Option key={mode} value={mode} label={selectionModeLabels[mode]} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</RadioGroup>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</Popover.Content>\n\t\t</Popover>\n\t);\n}\n\nexport function SingleDateInput(props: Omit<DateSingleInputProps, \"selectsRange\">) {\n\treturn <DateInput {...props} />;\n}\n\nexport function RangeDateInput(props: Omit<DateRangeInputProps, \"selectsRange\">) {\n\treturn <DateInput {...props} selectsRange={true} />;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DateInput--tfofQ2x.js","names":[],"sources":["../../src/date-input/lib/dateInputValue.ts","../../src/date-input/model/useDateInput.ts","../../src/date-input/ui/DateInput.module.scss","../../src/date-input/ui/DateInput.tsx"],"sourcesContent":["import {\n\tDEFAULT_DATE_PRESET_NAMES,\n\tformatDate,\n\tformatDateRange,\n\tgetCalendarPeriod,\n\tgetDatePreset,\n\tisDateRangeTuple,\n\tparseDateByFormat,\n\tresolveDateFormatName,\n\tresolveDateFormatPreset,\n\ttype CalendarPeriodOptions,\n\ttype DateFormatPrecision,\n\ttype DateFormatPreset,\n\ttype DateRangeInput,\n\ttype NullableDateRange\n} from \"@ryuzaki13/react-foundation-lib/formatters\";\n\n/**\n * Пресет даты по умолчанию для текстового поля.\n */\nexport const DEFAULT_DATE_INPUT_PRESET = DEFAULT_DATE_PRESET_NAMES.date;\n\n/**\n * @deprecated Используйте `DEFAULT_DATE_INPUT_PRESET`.\n */\nexport const DEFAULT_DATE_INPUT_FORMAT = \"dd.MM.yyyy\";\n\nconst RANGE_SEPARATOR = \" - \";\nconst DATE_INPUT_FORMAT_OPTIONS = Object.freeze({\n\tdefaultFormat: DEFAULT_DATE_INPUT_PRESET,\n\tpatternPresetName: \"__date_input__\"\n});\n\nexport type DateInputValueOptions = {\n\t/**\n\t * Имя пресета форматирования даты.\n\t */\n\tdatePreset?: string;\n\t/**\n\t * @deprecated Используйте `datePreset`.\n\t */\n\tdateFormat?: string;\n\t/**\n\t * Точность календарного значения.\n\t */\n\tdatePickerLevel?: DateFormatPrecision;\n\t/**\n\t * Размер периода, который выбирается и нормализуется полем.\n\t */\n\tselectionMode?: CalendarPeriodOptions[\"selectionMode\"];\n\t/**\n\t * Последний включённый день недели для режима выбора недели.\n\t */\n\tweekEndDay?: CalendarPeriodOptions[\"weekEndDay\"];\n\t/**\n\t * Опорная дата для пресетов без года, например `month-long`.\n\t */\n\treferenceDate?: Date;\n};\n\nexport type DateInputValueOptionsInput = string | DateInputValueOptions | undefined;\n\n/**\n * Возвращает точность форматирования поля даты.\n */\nfunction resolveDateInputPrecision(options: DateInputValueOptions): DateFormatPrecision {\n\tif (options.selectionMode === \"day\" || options.selectionMode === \"week\") {\n\t\treturn \"day\";\n\t}\n\n\tif (options.selectionMode === \"month\" || options.selectionMode === \"year\") {\n\t\treturn options.selectionMode;\n\t}\n\n\treturn options.datePickerLevel ?? \"day\";\n}\n\nfunction resolveCalendarPeriodOptions(options?: DateInputValueOptions): CalendarPeriodOptions {\n\treturn {\n\t\tselectionMode: options?.selectionMode,\n\t\tweekEndDay: options?.weekEndDay\n\t};\n}\n\n/**\n * Нормализует объектные опции и позиционный вызов с именем пресета.\n */\nfunction normalizeDateInputValueOptions(\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): DateInputValueOptions {\n\tif (typeof optionsOrPreset === \"string\" || optionsOrPreset === undefined) {\n\t\treturn {\n\t\t\tdatePreset: optionsOrPreset,\n\t\t\tdatePickerLevel\n\t\t};\n\t}\n\n\tif (datePickerLevel && optionsOrPreset.datePickerLevel === undefined) {\n\t\treturn {\n\t\t\t...optionsOrPreset,\n\t\t\tdatePickerLevel\n\t\t};\n\t}\n\n\treturn optionsOrPreset;\n}\n\n/**\n * Проверяет новый `datePreset` и возвращает только зарегистрированное имя пресета.\n */\nfunction resolveDateInputPresetName(datePreset?: string): string {\n\tconst resolvedPresetName = resolveDateFormatName(datePreset, DEFAULT_DATE_INPUT_PRESET);\n\treturn getDatePreset(resolvedPresetName) ? resolvedPresetName : DEFAULT_DATE_INPUT_PRESET;\n}\n\n/**\n * Возвращает имя пресета или deprecated-формат для парсинга.\n */\nfunction resolveDateInputFormatName(options: DateInputValueOptions): string | undefined {\n\tif (options.datePreset !== undefined) {\n\t\treturn resolveDateInputPresetName(options.datePreset);\n\t}\n\n\treturn options.dateFormat;\n}\n\n/**\n * Возвращает зарегистрированный пресет или deprecated-объектный шаблон.\n */\nfunction resolveDateInputFormatPreset(options: DateInputValueOptions): string | DateFormatPreset {\n\tif (options.datePreset !== undefined) {\n\t\treturn resolveDateInputPresetName(options.datePreset);\n\t}\n\n\treturn resolveDateFormatPreset(options.dateFormat, DATE_INPUT_FORMAT_OPTIONS);\n}\n\n/**\n * Приводит результат универсального парсинга к календарной дате.\n */\nfunction parseDateTimeValue(value: string, options: DateInputValueOptions): Date | null {\n\treturn (\n\t\tparseDateByFormat(value, resolveDateInputFormatName(options), {\n\t\t\tdefaultFormat: DEFAULT_DATE_INPUT_PRESET,\n\t\t\tprecision: resolveDateInputPrecision(options),\n\t\t\treferenceDate: options.referenceDate\n\t\t})?.date ?? null\n\t);\n}\n\n/**\n * Приводит одиночную дату к началу выбранного календарного периода.\n */\nexport function normalizeSingleDateValue(date: Date | null, options?: DateInputValueOptions): Date | null {\n\treturn getCalendarPeriod(date, resolveCalendarPeriodOptions(options))?.start ?? null;\n}\n\n/**\n * Приводит диапазон дат к границам выбранных календарных периодов.\n */\nexport function normalizeRangeDateValue(range: NullableDateRange | null, options?: DateInputValueOptions): NullableDateRange | null {\n\tif (!isDateRangeTuple(range)) return null;\n\n\tconst [startDate, endDate] = range;\n\treturn [normalizeSingleDateValue(startDate, options), normalizeRangeEndDateValue(endDate, options)];\n}\n\n/**\n * Приводит конечную дату диапазона к концу выбранного календарного периода.\n */\nexport function normalizeRangeEndDateValue(date: Date | null, options?: DateInputValueOptions): Date | null {\n\treturn getCalendarPeriod(date, resolveCalendarPeriodOptions(options))?.end ?? null;\n}\n\nfunction getDateTime(date: Date | null): number | null {\n\treturn date?.getTime() ?? null;\n}\n\n/**\n * Сравнивает одиночные даты после нормализации к точности поля ввода.\n */\nexport function areSingleDateValuesEqual(left: Date | null, right: Date | null, options?: DateInputValueOptions): boolean {\n\treturn getDateTime(normalizeSingleDateValue(left, options)) === getDateTime(normalizeSingleDateValue(right, options));\n}\n\n/**\n * Сравнивает диапазоны дат после нормализации к границам выбранных периодов.\n */\nexport function areRangeDateValuesEqual(\n\tleft: NullableDateRange | null,\n\tright: NullableDateRange | null,\n\toptions?: DateInputValueOptions\n): boolean {\n\tconst normalizedLeft = normalizeRangeDateValue(left, options);\n\tconst normalizedRight = normalizeRangeDateValue(right, options);\n\n\treturn (\n\t\tgetDateTime(normalizedLeft?.[0] ?? null) === getDateTime(normalizedRight?.[0] ?? null) &&\n\t\tgetDateTime(normalizedLeft?.[1] ?? null) === getDateTime(normalizedRight?.[1] ?? null)\n\t);\n}\n\n/**\n * Форматирует одиночную дату для текстового поля.\n */\nexport function formatSingleDateValue(\n\tdate: Date | null,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (!date) return \"\";\n\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\treturn formatDate(date, resolveDateInputFormatPreset(options), {\n\t\tprecision: resolveDateInputPrecision(options)\n\t});\n}\n\n/**\n * Форматирует диапазон дат для текстового поля.\n */\nexport function formatRangeDateValue(\n\trange: NullableDateRange | null,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (!isDateRangeTuple(range)) return \"\";\n\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst [startDate, endDate] = range;\n\tif (startDate && endDate) {\n\t\treturn formatDateRange(startDate, endDate, resolveDateInputFormatPreset(options), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t});\n\t}\n\n\tif (startDate) {\n\t\treturn `${formatSingleDateValue(startDate, options)}${RANGE_SEPARATOR}`;\n\t}\n\n\treturn \"\";\n}\n\n/**\n * Унифицирует форматирование значения поля даты.\n */\nexport function formatDateInputValue(\n\tvalue: DateRangeInput,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (isDateRangeTuple(value)) {\n\t\treturn formatRangeDateValue(value, optionsOrPreset, datePickerLevel);\n\t}\n\n\treturn formatSingleDateValue(value, optionsOrPreset, datePickerLevel);\n}\n\n/**\n * Парсит строку одиночной даты по заданному шаблону или пресету.\n */\nexport function parseSingleDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): Date | null {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\treturn normalizeSingleDateValue(parseDateTimeValue(value, options), options);\n}\n\n/**\n * Парсит строку диапазона дат по заданному шаблону или пресету.\n */\nexport function parseRangeDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): NullableDateRange {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst [startPart = \"\", endPart = \"\"] = value.split(RANGE_SEPARATOR);\n\n\treturn [parseSingleDateValue(startPart, options), parseRangeEndDateValue(endPart, options)];\n}\n\n/**\n * Парсит конечную дату диапазона и нормализует её к концу суток.\n */\nexport function parseRangeEndDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): Date | null {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\treturn normalizeRangeEndDateValue(parseDateTimeValue(value, options), options);\n}\n","import { useEffect, useEffectEvent, useMemo, useState } from \"react\";\n\nimport { isDateRangeTuple, type NullableDateRange } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\nimport {\n\tDateInputValueOptions,\n\tformatDateInputValue,\n\tnormalizeRangeDateValue,\n\tnormalizeRangeEndDateValue,\n\tnormalizeSingleDateValue,\n\tparseRangeDateValue,\n\tparseSingleDateValue,\n\ttype DateInputOptions\n} from \"../lib\";\n\nfunction resolveReferenceDate(value: Date | NullableDateRange | null): Date | undefined {\n\tif (isDateRangeTuple(value)) {\n\t\treturn value[0] ?? value[1] ?? undefined;\n\t}\n\n\treturn value ?? undefined;\n}\n\n/**\n * Хук управляет текстовым представлением и выбранным значением поля даты.\n */\nexport const useDateInput = (options: DateInputOptions) => {\n\tconst initialSelectedDate = useMemo(() => {\n\t\tconst selectionOptions: DateInputValueOptions = {\n\t\t\tselectionMode: options.selectionMode,\n\t\t\tweekEndDay: options.weekEndDay\n\t\t};\n\n\t\tif (options.selectsRange) {\n\t\t\treturn normalizeRangeDateValue(options.value as NullableDateRange | null, selectionOptions);\n\t\t}\n\n\t\treturn normalizeSingleDateValue(options.value as Date | null, selectionOptions);\n\t}, [options.selectsRange, options.selectionMode, options.value, options.weekEndDay]);\n\n\tconst [selectedDate, setSelectedDate] = useState(initialSelectedDate);\n\tconst formatOptions = useMemo<DateInputValueOptions>(\n\t\t() => ({\n\t\t\tdatePreset: options.datePreset,\n\t\t\tdateFormat: options.dateFormat,\n\t\t\tdatePickerLevel: options.datePickerLevel,\n\t\t\tselectionMode: options.selectionMode,\n\t\t\tweekEndDay: options.weekEndDay\n\t\t}),\n\t\t[options.dateFormat, options.datePickerLevel, options.datePreset, options.selectionMode, options.weekEndDay]\n\t);\n\tconst [inputValue, setInputValue] = useState<string>(() => formatDateInputValue(initialSelectedDate, formatOptions));\n\tconst valueSignature = useMemo(() => {\n\t\tif (options.selectsRange) {\n\t\t\tconst normalizedRange = normalizeRangeDateValue(options.value as NullableDateRange | null, formatOptions);\n\t\t\treturn `${normalizedRange?.[0]?.getTime() ?? \"null\"}:${normalizedRange?.[1]?.getTime() ?? \"null\"}`;\n\t\t}\n\n\t\tconst normalizedDate = normalizeSingleDateValue(options.value as Date | null, formatOptions);\n\t\treturn String(normalizedDate?.getTime() ?? \"null\");\n\t}, [formatOptions, options.selectsRange, options.value]);\n\n\t/**\n\t * Форматирует значение поля даты согласно текущему шаблону.\n\t */\n\tconst formatValue = (value: Date | NullableDateRange | null): string => formatDateInputValue(value, formatOptions);\n\n\t/**\n\t * Синхронизирует внутреннее состояние с внешними пропсами.\n\t */\n\tconst syncStateFromProps = useEffectEvent((nextValue: DateInputOptions[\"value\"]) => {\n\t\tif (options.selectsRange) {\n\t\t\tconst normalizedRange = normalizeRangeDateValue(nextValue as NullableDateRange | null, formatOptions);\n\t\t\tconst nextInputValue = formatValue(normalizedRange);\n\n\t\t\tsetSelectedDate((prevValue) => {\n\t\t\t\tconst previousRangeValue = prevValue as NullableDateRange | null;\n\t\t\t\tconst hasSameRange =\n\t\t\t\t\t(previousRangeValue?.[0]?.getTime() ?? null) === (normalizedRange?.[0]?.getTime() ?? null) &&\n\t\t\t\t\t(previousRangeValue?.[1]?.getTime() ?? null) === (normalizedRange?.[1]?.getTime() ?? null);\n\n\t\t\t\treturn hasSameRange ? prevValue : normalizedRange;\n\t\t\t});\n\t\t\tsetInputValue((prevValue) => (prevValue === nextInputValue ? prevValue : nextInputValue));\n\t\t\treturn;\n\t\t}\n\n\t\tconst normalizedDate = normalizeSingleDateValue(nextValue as Date | null, formatOptions);\n\t\tconst nextInputValue = formatValue(normalizedDate);\n\n\t\tsetSelectedDate((prevValue) =>\n\t\t\t((prevValue as Date | null)?.getTime() ?? null) === (normalizedDate?.getTime() ?? null) ? prevValue : normalizedDate\n\t\t);\n\t\tsetInputValue((prevValue) => (prevValue === nextInputValue ? prevValue : nextInputValue));\n\t});\n\n\tuseEffect(() => {\n\t\tsyncStateFromProps(options.value);\n\t}, [\n\t\toptions.dateFormat,\n\t\toptions.datePickerLevel,\n\t\toptions.datePreset,\n\t\toptions.selectsRange,\n\t\toptions.selectionMode,\n\t\toptions.value,\n\t\toptions.weekEndDay,\n\t\tvalueSignature\n\t]);\n\n\t/**\n\t * Парсит строковое значение поля в дату или диапазон дат.\n\t */\n\tconst parseDate = (dateString: string): Date | NullableDateRange | null => {\n\t\tconst parseOptions: DateInputValueOptions = {\n\t\t\t...formatOptions,\n\t\t\treferenceDate: resolveReferenceDate(selectedDate)\n\t\t};\n\n\t\tif (options.selectsRange) {\n\t\t\treturn parseRangeDateValue(dateString, parseOptions);\n\t\t}\n\n\t\treturn parseSingleDateValue(dateString, parseOptions);\n\t};\n\n\t/**\n\t * Обрабатывает выбор даты из календаря.\n\t */\n\tconst handleSelect = (date: Date | NullableDateRange) => {\n\t\tconst [selectedStartDate, selectedEndDate] = (Array.isArray(date) ? date : [date, null]) as NullableDateRange;\n\n\t\tif (options.selectsRange) {\n\t\t\tconst normalizedStartDate = normalizeSingleDateValue(selectedStartDate, formatOptions);\n\t\t\tconst normalizedEndDate = normalizeRangeEndDateValue(selectedEndDate, formatOptions);\n\n\t\t\tif (normalizedStartDate && normalizedEndDate) {\n\t\t\t\tif (normalizedEndDate < normalizedStartDate) {\n\t\t\t\t\tconst swappedRange: NullableDateRange = [\n\t\t\t\t\t\tnormalizeSingleDateValue(selectedEndDate, formatOptions),\n\t\t\t\t\t\tnormalizeRangeEndDateValue(selectedStartDate, formatOptions)\n\t\t\t\t\t];\n\t\t\t\t\tsetSelectedDate(swappedRange);\n\t\t\t\t\tsetInputValue(formatValue(swappedRange));\n\t\t\t\t\toptions.onChange(swappedRange);\n\t\t\t\t} else {\n\t\t\t\t\tconst nextRange: NullableDateRange = [normalizedStartDate, normalizedEndDate];\n\t\t\t\t\tsetSelectedDate(nextRange);\n\t\t\t\t\tsetInputValue(formatValue(nextRange));\n\t\t\t\t\toptions.onChange(nextRange);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst nextRange: NullableDateRange = [normalizedStartDate, null];\n\t\t\tsetSelectedDate(nextRange);\n\t\t\tsetInputValue(formatValue(nextRange));\n\t\t\treturn false;\n\t\t}\n\n\t\tconst normalizedDate = normalizeSingleDateValue(selectedStartDate, formatOptions);\n\t\tsetSelectedDate(normalizedDate);\n\t\tsetInputValue(formatValue(normalizedDate));\n\t\toptions.onChange(normalizedDate);\n\n\t\treturn true;\n\t};\n\n\treturn {\n\t\tinputValue,\n\t\tsetInputValue,\n\t\tselectedDate,\n\t\tsetSelectedDate,\n\t\thandleSelect,\n\t\tformatDate: formatValue,\n\t\tparseDate\n\t};\n};\n",".calendarButton {\n\t&:hover {\n\t\tcolor: var(--focus-ring);\n\t}\n}\n\n.selectionModeControl {\n\tmargin-top: var(--space-sm);\n\tpadding-top: var(--space-sm);\n\tborder-top: var(--border);\n}\n","import { JSX, useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { isDateRangeTuple, type NullableDateRange } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { CalendarDaysIcon } from \"lucide-react\";\n\nimport { Button } from \"../../button\";\nimport { InputText } from \"../../input\";\nimport { Popover } from \"../../popover\";\nimport { RadioGroup } from \"../../radio-group\";\nimport { UiBaseProps } from \"../../types\";\nimport {\n\tareRangeDateValuesEqual,\n\tareSingleDateValuesEqual,\n\tDATE_INPUT_SELECTION_MODES,\n\tisDatePickerLevelAvailable,\n\tresolveAvailableDatePickerLevel,\n\ttype DateInputSelectionMode,\n\ttype DateInputWeekEndDay,\n\ttype DatePickerLevel\n} from \"../lib\";\nimport { useDateInput } from \"../model\";\n\nimport { CalendarView } from \"./CalendarView\";\nimport styles from \"./DateInput.module.scss\";\n\ninterface BaseDateInputProps {\n\terror?: string;\n\tonClearError?: () => void;\n\n\tminDate?: Date;\n\tmaxDate?: Date;\n\n\tdatePreset?: string;\n\t/**\n\t * @deprecated Используйте `datePreset`.\n\t */\n\tdateFormat?: string;\n\n\t/**\n\t * Минимальный уровень календарной навигации. Размер выбранного периода задаёт `selectionMode`.\n\t */\n\tdatePickerLevel?: DatePickerLevel;\n\t/**\n\t * Размер периода, который выбирает поле: день, неделя, месяц или год.\n\t */\n\tselectionMode?: DateInputSelectionMode;\n\t/**\n\t * Последний включённый день недели для `selectionMode=\"week\"`.\n\t */\n\tweekEndDay?: DateInputWeekEndDay;\n\t/**\n\t * Показывает переключатель `selectionMode` под календарём.\n\t */\n\tallowSelectionModeChange?: boolean;\n\t/**\n\t * Ограничивает набор режимов в runtime-переключателе.\n\t */\n\tselectionModeOptions?: readonly DateInputSelectionMode[];\n\t/**\n\t * Сообщает наружу о runtime-смене режима выбора.\n\t */\n\tonSelectionModeChange?: (selectionMode: DateInputSelectionMode) => void;\n}\n\nexport interface DateSingleInputProps extends BaseDateInputProps, UiBaseProps<Date | null> {\n\tselectsRange?: false;\n}\nexport interface DateRangeInputProps extends BaseDateInputProps, UiBaseProps<NullableDateRange | null> {\n\tselectsRange: true;\n}\n\ntype DateInputProps = DateSingleInputProps | DateRangeInputProps;\n\ninterface CalendarTypeState {\n\treadonly view: DatePickerLevel;\n\treadonly selectionMode: DateInputSelectionMode;\n\treadonly minDatePickerLevel: DatePickerLevel;\n}\n\nconst selectionModeLabels: Record<DateInputSelectionMode, string> = {\n\tday: \"День\",\n\tweek: \"Неделя\",\n\tmonth: \"Месяц\",\n\tyear: \"Год\"\n};\n\nfunction resolveSelectionModeOptions(\n\tselectionModeOptions: readonly DateInputSelectionMode[] | undefined,\n\tselectionMode: DateInputSelectionMode\n): readonly DateInputSelectionMode[] {\n\tconst enabledModes = new Set(selectionModeOptions?.length ? selectionModeOptions : DATE_INPUT_SELECTION_MODES);\n\tenabledModes.add(selectionMode);\n\n\treturn DATE_INPUT_SELECTION_MODES.filter((mode) => enabledModes.has(mode));\n}\n\nfunction DateInput(props: DateSingleInputProps): JSX.Element;\nfunction DateInput(props: DateRangeInputProps): JSX.Element;\nfunction DateInput({\n\tplaceholder,\n\tdisabled,\n\terror,\n\tonClearError,\n\tminDate,\n\tmaxDate,\n\tdatePickerLevel,\n\tselectionMode: controlledSelectionMode,\n\tweekEndDay = \"sunday\",\n\tallowSelectionModeChange,\n\tselectionModeOptions,\n\tonSelectionModeChange,\n\t...props\n}: DateInputProps) {\n\tconst [open, setOpen] = useState(false);\n\tconst [uncontrolledSelectionMode, setUncontrolledSelectionMode] = useState<DateInputSelectionMode>(controlledSelectionMode ?? \"day\");\n\tconst selectionMode = controlledSelectionMode ?? uncontrolledSelectionMode;\n\tconst minDatePickerLevel = datePickerLevel ?? \"day\";\n\tconst preferredCalendarType = resolveAvailableDatePickerLevel(selectionMode, minDatePickerLevel);\n\tconst [calendarTypeState, setCalendarTypeState] = useState<CalendarTypeState>(() => ({\n\t\tview: preferredCalendarType,\n\t\tselectionMode,\n\t\tminDatePickerLevel\n\t}));\n\tconst calendarType =\n\t\tcalendarTypeState.selectionMode === selectionMode &&\n\t\tcalendarTypeState.minDatePickerLevel === minDatePickerLevel &&\n\t\tisDatePickerLevelAvailable(calendarTypeState.view, minDatePickerLevel)\n\t\t\t? calendarTypeState.view\n\t\t\t: preferredCalendarType;\n\n\tconst initialDateRef = useRef(props.value);\n\tconst dateInputValueOptions = {\n\t\tselectionMode,\n\t\tweekEndDay\n\t};\n\n\tconst { inputValue, setInputValue, selectedDate, setSelectedDate, handleSelect, formatDate, parseDate } = useDateInput({\n\t\t...props,\n\t\tdatePickerLevel: minDatePickerLevel,\n\t\tselectionMode,\n\t\tweekEndDay\n\t});\n\tconst rangeOnChange = props.selectsRange ? props.onChange : undefined;\n\n\tconst updateCalendarType = useCallback(\n\t\t(calendarType: DatePickerLevel) => {\n\t\t\tif (isDatePickerLevelAvailable(calendarType, minDatePickerLevel)) {\n\t\t\t\tsetCalendarTypeState({\n\t\t\t\t\tview: calendarType,\n\t\t\t\t\tselectionMode,\n\t\t\t\t\tminDatePickerLevel\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[minDatePickerLevel, selectionMode]\n\t);\n\n\tuseEffect(() => {\n\t\tinitialDateRef.current = props.value;\n\t}, [props.value]);\n\n\tconst handleInputBlur = () => {\n\t\tif (inputValue) {\n\t\t\tconst parsedDate = parseDate(inputValue);\n\t\t\tif (parsedDate) {\n\t\t\t\tsetInputValue(formatDate(parsedDate));\n\n\t\t\t\tif (props.selectsRange && isDateRangeTuple(parsedDate)) {\n\t\t\t\t\tconst selectedRange = isDateRangeTuple(selectedDate) ? selectedDate : null;\n\n\t\t\t\t\tif (areRangeDateValuesEqual(parsedDate, selectedRange, dateInputValueOptions)) return;\n\n\t\t\t\t\tsetSelectedDate(parsedDate);\n\t\t\t\t\tprops.onChange(parsedDate);\n\t\t\t\t} else if (!props.selectsRange && parsedDate instanceof Date) {\n\t\t\t\t\tconst selectedSingleDate = selectedDate instanceof Date ? selectedDate : null;\n\n\t\t\t\t\tif (areSingleDateValuesEqual(parsedDate, selectedSingleDate, dateInputValueOptions)) return;\n\n\t\t\t\t\tsetSelectedDate(parsedDate);\n\t\t\t\t\tprops.onChange(parsedDate);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (event.key === \"Enter\") {\n\t\t\tevent.preventDefault();\n\t\t\thandleInputBlur();\n\t\t}\n\t};\n\n\tconst handleCalendarDateSelect = useCallback(\n\t\t(value: Date | NullableDateRange) => {\n\t\t\tif (handleSelect(value)) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t},\n\t\t[handleSelect]\n\t);\n\n\tconst handleSelectionModeChange = useCallback(\n\t\t(nextSelectionMode: DateInputSelectionMode) => {\n\t\t\tif (controlledSelectionMode === undefined) {\n\t\t\t\tsetUncontrolledSelectionMode(nextSelectionMode);\n\t\t\t}\n\n\t\t\tonSelectionModeChange?.(nextSelectionMode);\n\t\t\tsetCalendarTypeState({\n\t\t\t\tview: resolveAvailableDatePickerLevel(nextSelectionMode, minDatePickerLevel),\n\t\t\t\tselectionMode: nextSelectionMode,\n\t\t\t\tminDatePickerLevel\n\t\t\t});\n\t\t},\n\t\t[controlledSelectionMode, minDatePickerLevel, onSelectionModeChange]\n\t);\n\n\tconst handleCancel = useCallback(() => {\n\t\t// Восстановить исходное состояние при отмене\n\t\tif (rangeOnChange) {\n\t\t\tconst [, selectedEndDate] = isDateRangeTuple(selectedDate) ? selectedDate : [null, null];\n\n\t\t\tif (!selectedEndDate) {\n\t\t\t\t// Восстановить исходное состояние диапазона\n\t\t\t\tconst initialValue = initialDateRef.current;\n\t\t\t\tconst initialRange = Array.isArray(initialValue) ? initialValue : null;\n\t\t\t\tconst initialStart = initialRange?.[0] ?? null;\n\t\t\t\tconst initialEnd = initialRange?.[1] ?? null;\n\n\t\t\t\tif (initialStart && initialEnd) {\n\t\t\t\t\tconst initialSelectedDate: NullableDateRange = [initialStart, initialEnd];\n\t\t\t\t\tsetSelectedDate(initialSelectedDate);\n\t\t\t\t\tsetInputValue(formatDate(initialSelectedDate));\n\n\t\t\t\t\trangeOnChange(initialSelectedDate);\n\t\t\t\t} else {\n\t\t\t\t\t// Если начального диапазона нет, очистить всё\n\t\t\t\t\tsetSelectedDate([null, null]);\n\t\t\t\t\tsetInputValue(\"\");\n\n\t\t\t\t\trangeOnChange([null, null]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [rangeOnChange, selectedDate, setSelectedDate, setInputValue, formatDate]);\n\n\tconst availableSelectionModes = resolveSelectionModeOptions(selectionModeOptions, selectionMode);\n\tconst showSelectionModeControl = allowSelectionModeChange && availableSelectionModes.length > 1;\n\n\treturn (\n\t\t<Popover\n\t\t\topen={open}\n\t\t\tonOpenChange={(value) => {\n\t\t\t\tsetOpen(value);\n\t\t\t\tif (!value) {\n\t\t\t\t\thandleCancel();\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<InputText\n\t\t\t\tlabel={props.label}\n\t\t\t\tdescription={props.description}\n\t\t\t\tsize={props.size}\n\t\t\t\tvalue={inputValue}\n\t\t\t\tonChange={setInputValue}\n\t\t\t\tonBlur={handleInputBlur}\n\t\t\t\tonKeyUp={handleKeyDown}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tdisabled={disabled}\n\t\t\t\terror={error}\n\t\t\t\tonClearError={onClearError}\n\t\t\t\tendAdornmentWidth=\"var(--control-height)\"\n\t\t\t\tendAdornment={\n\t\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"transparent\"\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tclassName={styles.calendarButton}\n\t\t\t\t\t\t\ticon={<CalendarDaysIcon />}\n\t\t\t\t\t\t\taria-label=\"Открыть календарь\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t}\n\t\t\t/>\n\n\t\t\t<Popover.Content background=\"primary\">\n\t\t\t\t<CalendarView\n\t\t\t\t\tview={calendarType}\n\t\t\t\t\tdatePickerLevel={minDatePickerLevel}\n\t\t\t\t\tselectionMode={selectionMode}\n\t\t\t\t\tweekEndDay={weekEndDay}\n\t\t\t\t\tonViewChange={updateCalendarType}\n\t\t\t\t\tvalue={selectedDate ?? null}\n\t\t\t\t\tonChange={handleCalendarDateSelect}\n\t\t\t\t\tminDate={minDate}\n\t\t\t\t\tmaxDate={maxDate}\n\t\t\t\t\tselectsRange={!!props.selectsRange}\n\t\t\t\t/>\n\t\t\t\t{showSelectionModeControl && (\n\t\t\t\t\t<div className={styles.selectionModeControl}>\n\t\t\t\t\t\t<RadioGroup<DateInputSelectionMode>\n\t\t\t\t\t\t\tvalue={selectionMode}\n\t\t\t\t\t\t\tonChange={handleSelectionModeChange}\n\t\t\t\t\t\t\tnoWrap\n\t\t\t\t\t\t\taria-label=\"Режим выбора даты\">\n\t\t\t\t\t\t\t{availableSelectionModes.map((mode) => (\n\t\t\t\t\t\t\t\t<RadioGroup.Option key={mode} value={mode} label={selectionModeLabels[mode]} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</RadioGroup>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</Popover.Content>\n\t\t</Popover>\n\t);\n}\n\nexport function SingleDateInput(props: Omit<DateSingleInputProps, \"selectsRange\">) {\n\treturn <DateInput {...props} />;\n}\n\nexport function RangeDateInput(props: Omit<DateRangeInputProps, \"selectsRange\">) {\n\treturn <DateInput {...props} selectsRange={true} />;\n}\n"],"mappings":"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"}
@@ -1,34 +1,34 @@
1
1
  import { PresetSelect as e } from "../preset-select/index.js";
2
- import { jsx as t } from "react/jsx-runtime";
3
- import { useEffect as n, useEffectEvent as r, useRef as i, useState as a } from "react";
4
- import { resolveMonthAgoRange as o, resolveMonthStartToTodayRange as s, resolveMonthStartToYesterdayRange as c, resolveTodayRange as l, resolveYesterdayRange as u } from "@ryuzaki13/react-foundation-lib/formatters";
2
+ import { useEffect as t, useEffectEvent as n, useRef as r, useState as i } from "react";
3
+ import { resolveMonthAgoRange as a, resolveMonthStartToTodayRange as o, resolveMonthStartToYesterdayRange as s, resolveTodayRange as c, resolveYesterdayRange as l } from "@ryuzaki13/react-foundation-lib/formatters";
4
+ import { jsx as u } from "react/jsx-runtime";
5
5
  import { getPresetOption as d, normalizePresetIds as f, resolvePresetOptionsByIds as p } from "@ryuzaki13/react-foundation-lib/presets";
6
6
  //#region src/date-range-preset-select/lib/dateRangePresets.ts
7
7
  var m = Object.freeze([
8
8
  {
9
9
  id: "monthStartToYesterday",
10
10
  label: "С начала месяца по вчера",
11
- resolveRange: c
11
+ resolveRange: s
12
12
  },
13
13
  {
14
14
  id: "monthStartToToday",
15
15
  label: "С начала месяца по сегодня",
16
- resolveRange: s
16
+ resolveRange: o
17
17
  },
18
18
  {
19
19
  id: "today",
20
20
  label: "За сегодня",
21
- resolveRange: l
21
+ resolveRange: c
22
22
  },
23
23
  {
24
24
  id: "yesterday",
25
25
  label: "За вчера",
26
- resolveRange: u
26
+ resolveRange: l
27
27
  },
28
28
  {
29
29
  id: "monthAgo",
30
30
  label: "Месяц назад",
31
- resolveRange: o
31
+ resolveRange: a
32
32
  }
33
33
  ]), h = Object.freeze([
34
34
  "monthStartToYesterday",
@@ -79,27 +79,27 @@ function w(e) {
79
79
  n?.getTime() ?? "null"
80
80
  ].join("|");
81
81
  }
82
- function T({ value: o, onChange: s, options: c = b, referenceDate: l, onRangeChange: u, ...d }) {
83
- let [f] = a(() => /* @__PURE__ */ new Date()), p = l?.getTime() ?? f.getTime(), m = !!u, h = i(""), g = r((e) => {
84
- if (!u) return;
85
- let t = S(e, new Date(p), c), n = w(t);
86
- n !== h.current && (h.current = n, u(t));
82
+ function T({ value: a, onChange: o, options: s = b, referenceDate: c, onRangeChange: l, ...d }) {
83
+ let [f] = i(() => /* @__PURE__ */ new Date()), p = c?.getTime() ?? f.getTime(), m = !!l, h = r(""), g = n((e) => {
84
+ if (!l) return;
85
+ let t = S(e, new Date(p), s), n = w(t);
86
+ n !== h.current && (h.current = n, l(t));
87
87
  });
88
- return n(() => {
89
- g(o);
88
+ return t(() => {
89
+ g(a);
90
90
  }, [
91
91
  m,
92
- c,
92
+ s,
93
93
  p,
94
- o
95
- ]), /* @__PURE__ */ t(e, {
94
+ a
95
+ ]), /* @__PURE__ */ u(e, {
96
96
  ...d,
97
- options: c,
98
- value: o,
99
- onChange: s
97
+ options: s,
98
+ value: a,
99
+ onChange: o
100
100
  });
101
101
  }
102
102
  //#endregion
103
103
  export { x as a, C as c, b as i, y as l, m as n, _ as o, h as r, v as s, T as t, S as u };
104
104
 
105
- //# sourceMappingURL=DateRangePresetSelect-CyzGMvVp.js.map
105
+ //# sourceMappingURL=DateRangePresetSelect-UgsfaOeM.js.map