@ryuzaki13/react-foundation-ui 1.1.7 → 1.1.9

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 (246) hide show
  1. package/dist/advanced-search/index.js +136 -136
  2. package/dist/base-table/index.js +2 -2
  3. package/dist/chunks/{CalendarView-C0gJvre1.js → CalendarView-KCkhCtK-.js} +101 -101
  4. package/dist/chunks/{CalendarView-C0gJvre1.js.map → CalendarView-KCkhCtK-.js.map} +1 -1
  5. package/dist/chunks/SelectOptionContent-CI7wq9Oi.js +27 -0
  6. package/dist/chunks/SelectOptionContent-CI7wq9Oi.js.map +1 -0
  7. package/dist/chunks/{TextEditorLexicalClient-DYZ32dnX.js → TextEditorLexicalClient-DeBA6fQX.js} +157 -157
  8. package/dist/chunks/{TextEditorLexicalClient-DYZ32dnX.js.map → TextEditorLexicalClient-DeBA6fQX.js.map} +1 -1
  9. package/dist/chunks/{base-table-BXKFSgIk.js → base-table-Dv9i3CAT.js} +73 -73
  10. package/dist/chunks/{base-table-BXKFSgIk.js.map → base-table-Dv9i3CAT.js.map} +1 -1
  11. package/dist/chunks/{date-input-DKkW7_uw.js → date-input-DT9E8dhk.js} +44 -44
  12. package/dist/chunks/{date-input-DKkW7_uw.js.map → date-input-DT9E8dhk.js.map} +1 -1
  13. package/dist/chunks/{date-range-preset-select-UgsfaOeM.js → date-range-preset-select-BLnY47cv.js} +20 -20
  14. package/dist/chunks/{date-range-preset-select-UgsfaOeM.js.map → date-range-preset-select-BLnY47cv.js.map} +1 -1
  15. package/dist/chunks/{input-CZLUUggm.js → input-BCJfUdK_.js} +43 -43
  16. package/dist/chunks/{input-CZLUUggm.js.map → input-BCJfUdK_.js.map} +1 -1
  17. package/dist/chunks/{input-files-aB8iaqGk.js → input-files-Dcc5K-_1.js} +2 -2
  18. package/dist/chunks/{input-files-aB8iaqGk.js.map → input-files-Dcc5K-_1.js.map} +1 -1
  19. package/dist/chunks/{input-search-eMvnvgV0.js → input-search-B7HmrAM7.js} +2 -2
  20. package/dist/chunks/{input-search-eMvnvgV0.js.map → input-search-B7HmrAM7.js.map} +1 -1
  21. package/dist/chunks/{multi-select-DaOKgHKE.js → multi-select-BCpRct-k.js} +105 -104
  22. package/dist/chunks/{multi-select-DaOKgHKE.js.map → multi-select-BCpRct-k.js.map} +1 -1
  23. package/dist/chunks/{picker-BZ05h_ZJ.js → picker-DTZk09Ag.js} +27 -27
  24. package/dist/chunks/{picker-BZ05h_ZJ.js.map → picker-DTZk09Ag.js.map} +1 -1
  25. package/dist/chunks/select-Bd48kVI3.js +328 -0
  26. package/dist/chunks/{select-Dj3FfpS0.js.map → select-Bd48kVI3.js.map} +1 -1
  27. package/dist/chunks/{table-BdpMzhLH.js → table-BtXVqa2I.js} +10 -10
  28. package/dist/chunks/{table-BdpMzhLH.js.map → table-BtXVqa2I.js.map} +1 -1
  29. package/dist/chunks/{table-column-interactions-6RGjmiI5.js → table-column-interactions-BGd5Lwy9.js} +19 -19
  30. package/dist/chunks/{table-column-interactions-6RGjmiI5.js.map → table-column-interactions-BGd5Lwy9.js.map} +1 -1
  31. package/dist/chunks/{useODataSelectBase-BxAvhDww.js → useODataSelectBase-wZ07hQFv.js} +10 -10
  32. package/dist/chunks/{useODataSelectBase-BxAvhDww.js.map → useODataSelectBase-wZ07hQFv.js.map} +1 -1
  33. package/dist/date-input/index.js +2 -2
  34. package/dist/date-range-preset-select/index.js +1 -1
  35. package/dist/date-time-input/index.js +41 -41
  36. package/dist/drop-zone/index.js +1 -1
  37. package/dist/errors/index.js +39 -39
  38. package/dist/image/index.js +2 -2
  39. package/dist/input/index.js +1 -1
  40. package/dist/input-date-time/index.js +1 -1
  41. package/dist/input-file/index.js +1 -1
  42. package/dist/input-files/index.js +1 -1
  43. package/dist/input-image/index.js +1 -1
  44. package/dist/input-search/index.js +1 -1
  45. package/dist/layout-picker/index.js +47 -45
  46. package/dist/layout-picker/index.js.map +1 -1
  47. package/dist/layout-picker/ui/LayoutPicker.d.ts +6 -1
  48. package/dist/layout-picker/ui/LayoutPicker.d.ts.map +1 -1
  49. package/dist/multi-select/index.js +1 -1
  50. package/dist/notifications/index.js +26 -26
  51. package/dist/period-select/index.js +19 -19
  52. package/dist/picker/index.js +1 -1
  53. package/dist/preset-range-date-input/index.js +2 -2
  54. package/dist/preset-select/index.js +1 -1
  55. package/dist/select/index.js +1 -1
  56. package/dist/simple-table/index.js +1 -1
  57. package/dist/slider/index.js +312 -312
  58. package/dist/slider/index.js.map +1 -1
  59. package/dist/state-select/index.js +14 -14
  60. package/dist/styles.css +1 -1
  61. package/dist/table/index.js +1 -1
  62. package/dist/table-column-interactions/index.js +1 -1
  63. package/dist/tag-input/index.js +1 -1
  64. package/dist/text/index.js +10 -10
  65. package/dist/text-editor/index.js +1 -1
  66. package/dist/textarea/index.js +1 -1
  67. package/dist/tree-select/index.js +240 -239
  68. package/dist/tree-select/index.js.map +1 -1
  69. package/dist/tree-table/index.js +15 -15
  70. package/package.json +2 -1
  71. package/storybook-static/assets/{Badge-Dn74JUF_.js → Badge-CYUtks4i.js} +1 -1
  72. package/storybook-static/assets/{Badge.stories-0f2dBkFF.js → Badge.stories-CiwiuZND.js} +1 -1
  73. package/storybook-static/assets/{Button-C1TJgYBn.js → Button-DxBLrgCb.js} +1 -1
  74. package/storybook-static/assets/{Button-DDo_z6nQ.js → Button-GcMG_GZZ.js} +1 -1
  75. package/storybook-static/assets/{Button.stories-CEhM2nmB.js → Button.stories-Cd0Os334.js} +1 -1
  76. package/storybook-static/assets/{CheckBox-Brecn2Go.js → CheckBox-DFUUkGhT.js} +1 -1
  77. package/storybook-static/assets/{CheckBox-Dou46_Q2.js → CheckBox-m8RUUjvq.js} +1 -1
  78. package/storybook-static/assets/{CheckBox.stories-BX0rAtSE.js → CheckBox.stories-CJ_3y5UH.js} +1 -1
  79. package/storybook-static/assets/{Color-KMSTOMOX-BWvVg2h-.js → Color-KMSTOMOX-D_F5kPOR.js} +1 -1
  80. package/storybook-static/assets/{ContextMenu-wm9Jh9ZJ.js → ContextMenu-Bwi_RCid.js} +1 -1
  81. package/storybook-static/assets/{ContextMenu.stories-BNgeqlBC.js → ContextMenu.stories-CD3V_TkA.js} +1 -1
  82. package/storybook-static/assets/{DateInput-C4POi6jK.js → DateInput-BLOXukhB.js} +1 -1
  83. package/storybook-static/assets/{DateInput-BvCdgET8.js → DateInput-D838WG9k.js} +1 -1
  84. package/storybook-static/assets/{DateInput.stories-Co44UsPz.js → DateInput.stories-B5IcEl_E.js} +1 -1
  85. package/storybook-static/assets/{DateRangePresetSelect-DS2LFGpx.js → DateRangePresetSelect-D-5OmKVI.js} +1 -1
  86. package/storybook-static/assets/{DateRangePresetSelect-CFRcBK8Q.js → DateRangePresetSelect-nV0sOrrq.js} +1 -1
  87. package/storybook-static/assets/{DateRangePresetSelect.stories-Bw2wid1f.js → DateRangePresetSelect.stories-B0OEeGyM.js} +1 -1
  88. package/storybook-static/assets/{Detail-DRVWmbKj.js → Detail-BoRol63k.js} +1 -1
  89. package/storybook-static/assets/{Detail.stories-DiPu8idx.js → Detail.stories-Bvoc4JyH.js} +1 -1
  90. package/storybook-static/assets/{Dialog-DWwwmwKU.js → Dialog-6f4X_UF_.js} +1 -1
  91. package/storybook-static/assets/{Dialog.stories-H65hC3at.js → Dialog.stories-DupxCJ26.js} +1 -1
  92. package/storybook-static/assets/{Disclosure-DXCJIvn2.js → Disclosure-mjTMcSOm.js} +1 -1
  93. package/storybook-static/assets/{Disclosure.stories-BtvyHQlf.js → Disclosure.stories-BXY5v1i7.js} +1 -1
  94. package/storybook-static/assets/{DocsRenderer-JROSPFPF-BIOn2Yw2.js → DocsRenderer-JROSPFPF-B5gLF2_w.js} +2 -2
  95. package/storybook-static/assets/{DropZone-B5GgSTT6.js → DropZone-BWidhx3w.js} +1 -1
  96. package/storybook-static/assets/{DropZone.stories-DXQz-psy.js → DropZone.stories-DdzxEO58.js} +1 -1
  97. package/storybook-static/assets/{DropdownMenu-DiCKdtJQ.js → DropdownMenu-CTP2q7WN.js} +1 -1
  98. package/storybook-static/assets/{ExpandableActionPanel.stories--iDMcu7P.js → ExpandableActionPanel.stories-zrVipsOg.js} +1 -1
  99. package/storybook-static/assets/{Flex-Cl2bB8Po.js → Flex-BOdbeJ0I.js} +1 -1
  100. package/storybook-static/assets/{Flex-COhmAKNn.js → Flex-DZrPfPl7.js} +1 -1
  101. package/storybook-static/assets/{Flex.stories-DMuAAT19.js → Flex.stories-BXa9Ld3i.js} +1 -1
  102. package/storybook-static/assets/{Grid-PM5n8eI2.js → Grid-BHcgytfy.js} +1 -1
  103. package/storybook-static/assets/{Grid-Df08ACJK.js → Grid-JvQFWmt_.js} +1 -1
  104. package/storybook-static/assets/{Grid.stories-Do5Od8Vw.js → Grid.stories-B5poAGUr.js} +1 -1
  105. package/storybook-static/assets/{ImageCropper.stories-EvtSYfKt.js → ImageCropper.stories-DddyTDWa.js} +1 -1
  106. package/storybook-static/assets/{ImageRenderer-B2AC5NZh.js → ImageRenderer-VdBmXv1k.js} +1 -1
  107. package/storybook-static/assets/{ImageRenderer.stories-DzFi_sDQ.js → ImageRenderer.stories-B5W5SEMP.js} +1 -1
  108. package/storybook-static/assets/{ImageView.stories-B1g_OpL2.js → ImageView.stories-Bxdytr0W.js} +1 -1
  109. package/storybook-static/assets/{ImageViewer.stories-b0cFqboR.js → ImageViewer.stories-BXJN4esR.js} +2 -2
  110. package/storybook-static/assets/{ImageViewerRuntime-D_IBJyiC.js → ImageViewerRuntime-DLzkYOMn.js} +1 -1
  111. package/storybook-static/assets/{Input-y5ZPRO5m.js → Input-D6FlpB4Y.js} +1 -1
  112. package/storybook-static/assets/{Input-CyGgeUCG.js → Input-DoKDcdGf.js} +1 -1
  113. package/storybook-static/assets/{Input.stories-Dhv3f6d7.js → Input.stories-tR41eQh7.js} +1 -1
  114. package/storybook-static/assets/{InputDateTime-ZXVROSAW.js → InputDateTime-BpvZYBm8.js} +1 -1
  115. package/storybook-static/assets/{InputDateTime.stories-NMpK5Peb.js → InputDateTime.stories-BOVClwU1.js} +1 -1
  116. package/storybook-static/assets/{InputFile-BR2c0rNb.js → InputFile-BGHb93zX.js} +1 -1
  117. package/storybook-static/assets/{InputFile.stories-BuNiPkPF.js → InputFile.stories-CmhCmMX6.js} +1 -1
  118. package/storybook-static/assets/{InputFiles-BlGer_7z.js → InputFiles-Bsatbrje.js} +1 -1
  119. package/storybook-static/assets/{InputFiles-BdhvE0kz.js → InputFiles-CLnOm0x9.js} +1 -1
  120. package/storybook-static/assets/{InputFiles.stories-BPGnbszv.js → InputFiles.stories-BOH1-zD8.js} +1 -1
  121. package/storybook-static/assets/{InputImage-zHzuV5NX.js → InputImage-CZAwib3W.js} +1 -1
  122. package/storybook-static/assets/{InputImage.stories-BXKgBMoQ.js → InputImage.stories-BobdHmpf.js} +1 -1
  123. package/storybook-static/assets/{LayoutPicker-L-0F9Vrb.js → LayoutPicker-BNQIVp3u.js} +4 -3
  124. package/storybook-static/assets/LayoutPicker.stories-Du0HfXjJ.js +449 -0
  125. package/storybook-static/assets/{Listbox-YWvaCK77.js → Listbox-Cup327ne.js} +1 -1
  126. package/storybook-static/assets/{Listbox.stories-BSJmd-mH.js → Listbox.stories-BlrBt5zM.js} +1 -1
  127. package/storybook-static/assets/{Modal-CQW1mNSz.js → Modal-d1loZR-M.js} +1 -1
  128. package/storybook-static/assets/{Modal.stories-BEpdLX9t.js → Modal.stories-ClQnn-f_.js} +1 -1
  129. package/storybook-static/assets/{MultiSelect-DbjbyS6f.js → MultiSelect-BUWlGDnx.js} +1 -1
  130. package/storybook-static/assets/{MultiSelect-HXlabU2B.js → MultiSelect-DydDWE0p.js} +1 -1
  131. package/storybook-static/assets/{MultiSelect.stories-CflQTXbQ.js → MultiSelect.stories-iBixjG7e.js} +1 -1
  132. package/storybook-static/assets/{NotificationsHost-s71CKpxG.js → NotificationsHost-C86XqiWb.js} +1 -1
  133. package/storybook-static/assets/{NotificationsHost.stories-Ovu7jDcj.js → NotificationsHost.stories-B1zhHRl_.js} +1 -1
  134. package/storybook-static/assets/{ODataMultiSelect-B-u9xRiQ.js → ODataMultiSelect-wVgBQ88Z.js} +1 -1
  135. package/storybook-static/assets/{ODataMultiSelect.stories-DajVZbpu.js → ODataMultiSelect.stories-Cv2ibcVz.js} +1 -1
  136. package/storybook-static/assets/{ODataSelect-3wE4Syu-.js → ODataSelect-BMymfHVd.js} +1 -1
  137. package/storybook-static/assets/{ODataSelect-DCGV65OH.js → ODataSelect-Rq48Ismc.js} +1 -1
  138. package/storybook-static/assets/{ODataSelect.stories-C4ymfrRw.js → ODataSelect.stories-DFID1Uev.js} +1 -1
  139. package/storybook-static/assets/{ODataTreeMultiSelect-fFgkMoG7.js → ODataTreeMultiSelect-y1_5XOhF.js} +1 -1
  140. package/storybook-static/assets/{ODataTreeMultiSelect.stories-Ac6Y2rRQ.js → ODataTreeMultiSelect.stories-Be4AaF8U.js} +1 -1
  141. package/storybook-static/assets/{ODataTreeSelect-DHsV3AcR.js → ODataTreeSelect-Dxo-54Zi.js} +1 -1
  142. package/storybook-static/assets/{ODataTreeSelect.stories-Dfv4WQyR.js → ODataTreeSelect.stories-B3SQ3ubn.js} +1 -1
  143. package/storybook-static/assets/{PeriodSelect-DlcFkHM4.js → PeriodSelect-B2brJahg.js} +1 -1
  144. package/storybook-static/assets/{PeriodSelect.stories-DWwvypiE.js → PeriodSelect.stories-Je8sNgoc.js} +1 -1
  145. package/storybook-static/assets/{Popover-CDhH2vdG.js → Popover-Dqyna8Ub.js} +1 -1
  146. package/storybook-static/assets/{Popover.stories-DE7VCujJ.js → Popover.stories-DHGRJd3v.js} +1 -1
  147. package/storybook-static/assets/{PresetRangeDateInput-CrsxXLDG.js → PresetRangeDateInput-Bq32kP8I.js} +1 -1
  148. package/storybook-static/assets/{PresetRangeDateInput.stories-DEG3r-qf.js → PresetRangeDateInput.stories-C34e4bWa.js} +1 -1
  149. package/storybook-static/assets/{RadioButton-C46MFmRl.js → RadioButton-D6gcuP42.js} +1 -1
  150. package/storybook-static/assets/{RadioButton.stories-C3--ehs5.js → RadioButton.stories-CcupC0LJ.js} +1 -1
  151. package/storybook-static/assets/{RadioGroup-wy1BaQ9o.js → RadioGroup-B1nKl71P.js} +1 -1
  152. package/storybook-static/assets/{RadioGroup-Cj_foF9x.js → RadioGroup-BfsMzoOg.js} +1 -1
  153. package/storybook-static/assets/{RadioGroup.stories-Bi9_WOVj.js → RadioGroup.stories-WojhAYJm.js} +1 -1
  154. package/storybook-static/assets/{Select-B36pVYvS.js → Select-BxZr4NfI.js} +1 -1
  155. package/storybook-static/assets/{Select-Bgg-NjIq.js → Select-_QFx3i7X.js} +1 -1
  156. package/storybook-static/assets/{Select.stories-Bl6_HqCh.js → Select.stories-2_XweKMH.js} +1 -1
  157. package/storybook-static/assets/{SelectOptionContent-CeSDFaTr.js → SelectOptionContent-YY3Lf4SM.js} +1 -1
  158. package/storybook-static/assets/{SerializableSelect-CCcdn7s3.js → SerializableSelect-BxIcA2AU.js} +1 -1
  159. package/storybook-static/assets/{SerializableSelect-EIZrsX_q.js → SerializableSelect-CDQfz0rk.js} +1 -1
  160. package/storybook-static/assets/{SerializableSelect.stories-D85sap4g.js → SerializableSelect.stories-D23YkoRX.js} +1 -1
  161. package/storybook-static/assets/{SingleDateTimeInput-BJdvvXVc.js → SingleDateTimeInput-Ds1pL3ge.js} +1 -1
  162. package/storybook-static/assets/{SingleDateTimeInput.stories-Cpq8DLvn.js → SingleDateTimeInput.stories-DaHEQhiz.js} +1 -1
  163. package/storybook-static/assets/{Slider-CqkHk2lK.js → Slider-D4sBhVAB.js} +1 -1
  164. package/storybook-static/assets/{Slider.stories-DmW9jsnD.js → Slider.stories-BsM03Rby.js} +1 -1
  165. package/storybook-static/assets/{SliderInput-DkekHTab.js → SliderInput-cP0GSpO-.js} +1 -1
  166. package/storybook-static/assets/{SliderInput.stories-CqQh0HWR.js → SliderInput.stories-BGk9ZIYB.js} +1 -1
  167. package/storybook-static/assets/{Sortable-BBYH-Tva.js → Sortable-CW9mxBpj.js} +1 -1
  168. package/storybook-static/assets/{Sortable.stories-DjEGWs4-.js → Sortable.stories-CkFOw5CW.js} +1 -1
  169. package/storybook-static/assets/{Splitter-G3aR-zi9.js → Splitter-BFbFbn0X.js} +1 -1
  170. package/storybook-static/assets/{Splitter.stories-XKGTUPMP.js → Splitter.stories-Dj4bWJtu.js} +1 -1
  171. package/storybook-static/assets/{StateSelect-DhzkYW8p.js → StateSelect-CHvxD1oY.js} +1 -1
  172. package/storybook-static/assets/{StateSelect.stories-BAxN3YfG.js → StateSelect.stories-DiAdGF8Q.js} +1 -1
  173. package/storybook-static/assets/{Switch-NVpZLd3g.js → Switch-DzE9B2Ue.js} +1 -1
  174. package/storybook-static/assets/{Switch.stories-BBowyrzJ.js → Switch.stories-DmRSgOsO.js} +1 -1
  175. package/storybook-static/assets/{Table-C9r-j5hO.js → Table-DgbZNzAp.js} +1 -1
  176. package/storybook-static/assets/{Table.stories-CkoEoxYB.js → Table.stories-DqYHNHnR.js} +1 -1
  177. package/storybook-static/assets/{Tabs-tH37q7nI.js → Tabs-DSUhNbam.js} +1 -1
  178. package/storybook-static/assets/{Tabs.stories-aIywaszH.js → Tabs.stories-DKsEFwhg.js} +1 -1
  179. package/storybook-static/assets/{TagInput.stories-BX4XcJaC.js → TagInput.stories-B8x2doJL.js} +1 -1
  180. package/storybook-static/assets/{Textarea-DDn4pvJF.js → Textarea-ZqM5o8fk.js} +1 -1
  181. package/storybook-static/assets/{Textarea.stories-BZVZYh4p.js → Textarea.stories-B0IBcsuI.js} +1 -1
  182. package/storybook-static/assets/{TimePanel-vKlzE6gd.js → TimePanel-DFVpYrKi.js} +1 -1
  183. package/storybook-static/assets/{TimePanel.stories-BfdDWhtQ.js → TimePanel.stories-Dah8MdEV.js} +1 -1
  184. package/storybook-static/assets/{Toggle-DAb5_sHq.js → Toggle-CE93J6yJ.js} +1 -1
  185. package/storybook-static/assets/{Toggle.stories-Bp99WoMR.js → Toggle.stories-DQSLZ16I.js} +1 -1
  186. package/storybook-static/assets/{TreeMultiSelect-CG09ybVB.js → TreeMultiSelect-Cm8XLcaB.js} +1 -1
  187. package/storybook-static/assets/{TreeMultiSelect-CkNDwWuK.js → TreeMultiSelect-DtUozmC9.js} +1 -1
  188. package/storybook-static/assets/{TreeMultiSelect.stories-DE6tQFRY.js → TreeMultiSelect.stories-DKd_qDqk.js} +1 -1
  189. package/storybook-static/assets/{TreePickerBase-DhZ9tbrV.js → TreePickerBase-xFkOCgy0.js} +1 -1
  190. package/storybook-static/assets/{TreeSelect-D3tOqZzi.js → TreeSelect-C0Oxcp_s.js} +1 -1
  191. package/storybook-static/assets/{TreeSelect-BYYl0yhs.js → TreeSelect-C1dHJDVC.js} +1 -1
  192. package/storybook-static/assets/{TreeSelect.stories-C56cleOX.js → TreeSelect.stories-C_fffAaM.js} +1 -1
  193. package/storybook-static/assets/{TreeTable-CPctUXOv.js → TreeTable-mGpVE4fE.js} +1 -1
  194. package/storybook-static/assets/{TreeTable.stories-D-R0a5NF.js → TreeTable.stories-on_ck1LO.js} +1 -1
  195. package/storybook-static/assets/{WithTooltip-7X4HQR7L-DYINYmJM.js → WithTooltip-7X4HQR7L-BP3dvWMO.js} +1 -1
  196. package/storybook-static/assets/{base-table-CTBvWnIb.js → base-table-XPKfaZOF.js} +1 -1
  197. package/storybook-static/assets/{blocks-D2VXMZGt.js → blocks-CdNjp0UR.js} +6 -6
  198. package/storybook-static/assets/{button-CofLsODD.js → button-mxhQ6kpI.js} +1 -1
  199. package/storybook-static/assets/{check-box-BUYji84r.js → check-box-CuugSv5K.js} +1 -1
  200. package/storybook-static/assets/{chunk-3LY4VQVK-Dk0vkvRJ.js → chunk-3LY4VQVK-CNZt5fIP.js} +1 -1
  201. package/storybook-static/assets/{chunk-LITCR56V-DgP8YOaP.js → chunk-LITCR56V--UakKRHa.js} +1 -1
  202. package/storybook-static/assets/{contextMenu-MmOUI04g.js → contextMenu-DRYHg4YV.js} +1 -1
  203. package/storybook-static/assets/{error-D6G67nWf.js → error-s5vKL37a.js} +1 -1
  204. package/storybook-static/assets/{flex-DEzwJFBs.js → flex-4NGrP0a9.js} +1 -1
  205. package/storybook-static/assets/{floating-ui.react-DeHGyTLR.js → floating-ui.react-DV6_xxif.js} +1 -1
  206. package/storybook-static/assets/formatter-L2YTDE3Q-BC5xVOel.js +1 -0
  207. package/storybook-static/assets/{formatters-DO-Bplkc.js → formatters-D4nD5Nic.js} +1 -1
  208. package/storybook-static/assets/grid-DZrPQELi.js +1 -0
  209. package/storybook-static/assets/{hooks-3gvuoU6a.js → hooks-hqscBU_x.js} +1 -1
  210. package/storybook-static/assets/{iframe-BlBhvHwk.js → iframe-BxBCFrOJ.js} +3 -3
  211. package/storybook-static/assets/{input-DM0LWdwF.js → input-CjJ-AgIT.js} +1 -1
  212. package/storybook-static/assets/{lucide-react-DMR456up.js → lucide-react-BmnaUuit.js} +1 -1
  213. package/storybook-static/assets/{mdx-react-shim-BXKB7xbF.js → mdx-react-shim-BEzdmfRR.js} +1 -1
  214. package/storybook-static/assets/{media-BZMZJXu3.js → media-NSeJNB4V.js} +1 -1
  215. package/storybook-static/assets/{misc-_mjs2DH3.js → misc-_2j1xxm-.js} +1 -1
  216. package/storybook-static/assets/{notifications-BxYiooNp.js → notifications-Bb4NwpnZ.js} +1 -1
  217. package/storybook-static/assets/{odata-B4-s71TA.js → odata-DkCpE6Ui.js} +1 -1
  218. package/storybook-static/assets/odata-service-BO_9B-Az.js +1 -0
  219. package/storybook-static/assets/{odataStoryFixtures-D5fZfJe7.js → odataStoryFixtures-h0MkHLcZ.js} +1 -1
  220. package/storybook-static/assets/{picker-RP6lU_O4.js → picker-CxN205s6.js} +1 -1
  221. package/storybook-static/assets/{popover-B40B8LiS.js → popover-DBec4vEA.js} +1 -1
  222. package/storybook-static/assets/{preset-select-CH5-L7v5.js → preset-select-CaY8SOYT.js} +1 -1
  223. package/storybook-static/assets/{react-BRNfkHvq.js → react-0gkFNWVQ.js} +1 -1
  224. package/storybook-static/assets/{react-18-BGjST092.js → react-18-DPMOLLe1.js} +1 -1
  225. package/storybook-static/assets/{react-dom-Dymo4Ige.js → react-dom-BKRiX1TT.js} +1 -1
  226. package/storybook-static/assets/select-C23Vd0JX.js +1 -0
  227. package/storybook-static/assets/{slider-CZr1wjo-.js → slider-BqG2yvL2.js} +1 -1
  228. package/storybook-static/assets/{sortable-Do0zRVl3.js → sortable-Viqf8wuB.js} +1 -1
  229. package/storybook-static/assets/{syntaxhighlighter-RTCFPKCB-YpNtMx0l.js → syntaxhighlighter-RTCFPKCB-DuzwRVHO.js} +1 -1
  230. package/storybook-static/assets/{text-BBt8S4hV.js → text-B62c97-X.js} +1 -1
  231. package/storybook-static/assets/{theming-C9D6rg4N.js → theming-CG2b7751.js} +1 -1
  232. package/storybook-static/assets/ui-CAk1ISqX.js +1 -0
  233. package/storybook-static/assets/{useODataSelectBase-Vi75dcI2.js → useODataSelectBase-J0YKxol4.js} +1 -1
  234. package/storybook-static/assets/{useODataTreeData-3VDV4NsS.js → useODataTreeData-wlNQaI0p.js} +1 -1
  235. package/storybook-static/assets/{utils-De5IM4sM.js → utils-CMnxoKbT.js} +1 -1
  236. package/storybook-static/iframe.html +1 -1
  237. package/storybook-static/project.json +1 -1
  238. package/dist/chunks/SelectOptionContent-lfEtHXfO.js +0 -1132
  239. package/dist/chunks/SelectOptionContent-lfEtHXfO.js.map +0 -1
  240. package/dist/chunks/select-Dj3FfpS0.js +0 -327
  241. package/storybook-static/assets/LayoutPicker.stories-s1valXGj.js +0 -449
  242. package/storybook-static/assets/formatter-L2YTDE3Q-Cz7NqHTg.js +0 -1
  243. package/storybook-static/assets/grid-CUgqbILF.js +0 -1
  244. package/storybook-static/assets/odata-service-BHLtW14i.js +0 -1
  245. package/storybook-static/assets/select-DDFRb6jY.js +0 -1
  246. package/storybook-static/assets/ui-5r8X6Kmj.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"date-input-DKkW7_uw.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\tconst period = getCalendarPeriod(date, resolveCalendarPeriodOptions(options));\n\n\t// Single-поле хранит начало недели, но показывает обе включительные границы выбранного периода.\n\tif (options.selectionMode === \"week\" && period) {\n\t\treturn formatDateRange(period.start, period.end, resolveDateInputFormatPreset(options), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t});\n\t}\n\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 `${formatDate(startDate, resolveDateInputFormatPreset(options), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t})}${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\t// Для отображаемого диапазона single-week источником значения остаётся его первая граница.\n\tconst singleValue = options.selectionMode === \"week\" ? (value.split(RANGE_SEPARATOR)[0] ?? \"\") : value;\n\n\treturn normalizeSingleDateValue(parseDateTimeValue(singleValue, 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":"date-input-DT9E8dhk.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\tconst period = getCalendarPeriod(date, resolveCalendarPeriodOptions(options));\n\n\t// Single-поле хранит начало недели, но показывает обе включительные границы выбранного периода.\n\tif (options.selectionMode === \"week\" && period) {\n\t\treturn formatDateRange(period.start, period.end, resolveDateInputFormatPreset(options), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t});\n\t}\n\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 `${formatDate(startDate, resolveDateInputFormatPreset(options), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t})}${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\t// Для отображаемого диапазона single-week источником значения остаётся его первая граница.\n\tconst singleValue = options.selectionMode === \"week\" ? (value.split(RANGE_SEPARATOR)[0] ?? \"\") : value;\n\n\treturn normalizeSingleDateValue(parseDateTimeValue(singleValue, 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
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";
3
+ import { jsx as a } from "react/jsx-runtime";
4
+ import { resolveMonthAgoRange as o, resolveMonthStartToTodayRange as s, resolveMonthStartToYesterdayRange as c, resolveTodayRange as l, resolveYesterdayRange as u } from "@ryuzaki13/react-foundation-lib/formatters";
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: s
11
+ resolveRange: c
12
12
  },
13
13
  {
14
14
  id: "monthStartToToday",
15
15
  label: "С начала месяца по сегодня",
16
- resolveRange: o
16
+ resolveRange: s
17
17
  },
18
18
  {
19
19
  id: "today",
20
20
  label: "За сегодня",
21
- resolveRange: c
21
+ resolveRange: l
22
22
  },
23
23
  {
24
24
  id: "yesterday",
25
25
  label: "За вчера",
26
- resolveRange: l
26
+ resolveRange: u
27
27
  },
28
28
  {
29
29
  id: "monthAgo",
30
30
  label: "Месяц назад",
31
- resolveRange: a
31
+ resolveRange: o
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: 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));
82
+ function T({ value: o, onChange: s, options: c = b, referenceDate: l, onRangeChange: u, ...d }) {
83
+ let [f] = i(() => /* @__PURE__ */ new Date()), p = l?.getTime() ?? f.getTime(), m = !!u, h = r(""), g = n((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));
87
87
  });
88
88
  return t(() => {
89
- g(a);
89
+ g(o);
90
90
  }, [
91
91
  m,
92
- s,
92
+ c,
93
93
  p,
94
- a
95
- ]), /* @__PURE__ */ u(e, {
94
+ o
95
+ ]), /* @__PURE__ */ a(e, {
96
96
  ...d,
97
- options: s,
98
- value: a,
99
- onChange: o
97
+ options: c,
98
+ value: o,
99
+ onChange: s
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=date-range-preset-select-UgsfaOeM.js.map
105
+ //# sourceMappingURL=date-range-preset-select-BLnY47cv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date-range-preset-select-UgsfaOeM.js","names":[],"sources":["../../src/date-range-preset-select/lib/dateRangePresets.ts","../../src/date-range-preset-select/DateRangePresetSelect.tsx"],"sourcesContent":["import {\n\ttype DateRangeReferenceContext,\n\ttype NullableDateRange,\n\tresolveMonthAgoRange,\n\tresolveMonthStartToTodayRange,\n\tresolveMonthStartToYesterdayRange,\n\tresolveTodayRange,\n\tresolveYesterdayRange\n} from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { getPresetOption, normalizePresetIds, type PresetOption, resolvePresetOptionsByIds } from \"@ryuzaki13/react-foundation-lib/presets\";\n\n/**\n * Идентификаторы встроенных пресетов диапазона дат.\n */\nexport type DateRangePresetId = \"monthStartToYesterday\" | \"monthStartToToday\" | \"today\" | \"yesterday\" | \"monthAgo\";\n\n/**\n * Описание одного пресета диапазона дат.\n */\nexport interface DateRangePresetOption extends PresetOption<DateRangePresetId | (string & {})> {\n\tresolveRange: (context: DateRangeReferenceContext) => NullableDateRange;\n}\n\ntype BuiltInDateRangePresetOption = DateRangePresetOption & {\n\tid: DateRangePresetId;\n};\n\n/**\n * Полезная нагрузка события с вычисленным диапазоном.\n */\nexport interface DateRangePresetChangePayload {\n\tid: DateRangePresetOption[\"id\"];\n\tlabel: string;\n\trange: NullableDateRange;\n}\n\n/**\n * Полный встроенный список пресетов диапазона дат.\n */\nexport const DATE_RANGE_PRESET_OPTIONS: readonly BuiltInDateRangePresetOption[] = Object.freeze([\n\t{\n\t\tid: \"monthStartToYesterday\",\n\t\tlabel: \"С начала месяца по вчера\",\n\t\tresolveRange: resolveMonthStartToYesterdayRange\n\t},\n\t{\n\t\tid: \"monthStartToToday\",\n\t\tlabel: \"С начала месяца по сегодня\",\n\t\tresolveRange: resolveMonthStartToTodayRange\n\t},\n\t{\n\t\tid: \"today\",\n\t\tlabel: \"За сегодня\",\n\t\tresolveRange: resolveTodayRange\n\t},\n\t{\n\t\tid: \"yesterday\",\n\t\tlabel: \"За вчера\",\n\t\tresolveRange: resolveYesterdayRange\n\t},\n\t{\n\t\tid: \"monthAgo\",\n\t\tlabel: \"Месяц назад\",\n\t\tresolveRange: resolveMonthAgoRange\n\t}\n]);\n\n/**\n * Идентификаторы пресетов, которые включены в контрол по умолчанию.\n */\nexport const DEFAULT_DATE_RANGE_PRESET_IDS = Object.freeze([\n\t\"monthStartToYesterday\",\n\t\"monthStartToToday\",\n\t\"today\",\n\t\"yesterday\"\n] as const satisfies readonly DateRangePresetId[]);\n\nconst DATE_RANGE_PRESET_ID_SET: ReadonlySet<string> = new Set(DATE_RANGE_PRESET_OPTIONS.map((option) => option.id));\n\n/**\n * Проверяет, что значение является идентификатором встроенного пресета.\n */\nexport function isDateRangePresetId(value: unknown): value is DateRangePresetId {\n\treturn typeof value === \"string\" && DATE_RANGE_PRESET_ID_SET.has(value);\n}\n\n/**\n * Нормализует сохраненный список идентификаторов пресетов.\n */\nexport function normalizeDateRangePresetIds(value: unknown, fallbackIds: readonly DateRangePresetId[] = []): DateRangePresetId[] {\n\treturn normalizePresetIds(value, isDateRangePresetId, fallbackIds);\n}\n\n/**\n * Формирует список пресетов по сохраненным идентификаторам, сохраняя порядок.\n */\nexport function resolveDateRangePresetOptionsByIds(\n\tpresetIds: readonly DateRangePresetOption[\"id\"][],\n\toptions: readonly DateRangePresetOption[] = DATE_RANGE_PRESET_OPTIONS\n): DateRangePresetOption[] {\n\treturn resolvePresetOptionsByIds(presetIds, options);\n}\n\n/**\n * Встроенный список пресетов диапазона дат, включенный по умолчанию.\n */\nexport const DEFAULT_DATE_RANGE_PRESET_OPTIONS: readonly DateRangePresetOption[] = Object.freeze(\n\tresolveDateRangePresetOptionsByIds(DEFAULT_DATE_RANGE_PRESET_IDS)\n);\n\n/**\n * Ищет пресет по идентификатору.\n */\nexport function getDateRangePresetOption(\n\tid: DateRangePresetOption[\"id\"] | undefined,\n\toptions: readonly DateRangePresetOption[] = DEFAULT_DATE_RANGE_PRESET_OPTIONS\n): DateRangePresetOption | null {\n\treturn getPresetOption(id, options);\n}\n\n/**\n * Вычисляет диапазон по идентификатору пресета.\n */\nexport function resolveDateRangePresetPayload(\n\tid: DateRangePresetOption[\"id\"] | undefined,\n\treferenceDate = new Date(),\n\toptions: readonly DateRangePresetOption[] = DEFAULT_DATE_RANGE_PRESET_OPTIONS\n): DateRangePresetChangePayload | null {\n\tconst option = getDateRangePresetOption(id, options);\n\tif (!option) return null;\n\n\treturn {\n\t\tid: option.id,\n\t\tlabel: option.label,\n\t\trange: option.resolveRange({ referenceDate })\n\t};\n}\n\n/**\n * Ищет идентификатор пресета, который полностью совпадает с переданным диапазоном.\n */\nexport function resolveDateRangePresetIdByRange(\n\trange: NullableDateRange | null | undefined,\n\treferenceDate = new Date(),\n\toptions: readonly DateRangePresetOption[] = DEFAULT_DATE_RANGE_PRESET_OPTIONS\n): DateRangePresetOption[\"id\"] | null {\n\tif (!Array.isArray(range)) return null;\n\n\tconst [rangeStartDate, rangeEndDate] = range;\n\tif (!(rangeStartDate instanceof Date) || !(rangeEndDate instanceof Date)) return null;\n\n\tconst rangeStartTime = rangeStartDate.getTime();\n\tconst rangeEndTime = rangeEndDate.getTime();\n\n\tfor (const option of options) {\n\t\tconst [presetStartDate, presetEndDate] = option.resolveRange({ referenceDate });\n\t\tif (!(presetStartDate instanceof Date) || !(presetEndDate instanceof Date)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (presetStartDate.getTime() === rangeStartTime && presetEndDate.getTime() === rangeEndTime) {\n\t\t\treturn option.id;\n\t\t}\n\t}\n\n\treturn null;\n}\n","import { useEffect, useEffectEvent, useRef, useState } from \"react\";\n\nimport { PresetSelect } from \"../preset-select\";\n\nimport {\n\tDEFAULT_DATE_RANGE_PRESET_OPTIONS,\n\ttype DateRangePresetChangePayload,\n\ttype DateRangePresetOption,\n\tresolveDateRangePresetPayload\n} from \"./lib/dateRangePresets\";\n\nimport type { UiBaseProps } from \"../types\";\n\nexport interface DateRangePresetSelectProps extends UiBaseProps<DateRangePresetOption[\"id\"] | undefined> {\n\toptions?: readonly DateRangePresetOption[];\n\treferenceDate?: Date;\n\tonRangeChange?: (payload: DateRangePresetChangePayload | null) => void;\n}\n\n/**\n * Строит строковый ключ полезной нагрузки для защиты от повторного эмита одинакового диапазона.\n */\nfunction getPayloadSignature(payload: DateRangePresetChangePayload | null): string {\n\tif (!payload) return \"__empty__\";\n\n\tconst [startDate, endDate] = payload.range;\n\treturn [payload.id, startDate?.getTime() ?? \"null\", endDate?.getTime() ?? \"null\"].join(\"|\");\n}\n\n/**\n * Выбор пресета диапазона дат с вычислением диапазона без timezone-сдвига.\n */\nexport function DateRangePresetSelect({\n\tvalue,\n\tonChange,\n\toptions = DEFAULT_DATE_RANGE_PRESET_OPTIONS,\n\treferenceDate,\n\tonRangeChange,\n\t...props\n}: DateRangePresetSelectProps) {\n\tconst [defaultReferenceDate] = useState(() => new Date());\n\tconst referenceDateTimestamp = referenceDate?.getTime() ?? defaultReferenceDate.getTime();\n\tconst hasRangeChangeHandler = Boolean(onRangeChange);\n\tconst lastPayloadSignatureRef = useRef<string>(\"\");\n\n\t/**\n\t * Сообщает наружу только реально изменившийся диапазон.\n\t */\n\tconst emitRangeChange = useEffectEvent((nextValue: DateRangePresetOption[\"id\"] | undefined) => {\n\t\tif (!onRangeChange) return;\n\n\t\tconst nextPayload = resolveDateRangePresetPayload(nextValue, new Date(referenceDateTimestamp), options);\n\t\tconst nextSignature = getPayloadSignature(nextPayload);\n\t\tif (nextSignature === lastPayloadSignatureRef.current) return;\n\n\t\tlastPayloadSignatureRef.current = nextSignature;\n\t\tonRangeChange(nextPayload);\n\t});\n\n\tuseEffect(() => {\n\t\temitRangeChange(value);\n\t}, [hasRangeChangeHandler, options, referenceDateTimestamp, value]);\n\n\treturn <PresetSelect {...props} options={options} value={value} onChange={onChange} />;\n}\n"],"mappings":";;;;;;AAuCA,IAAa,IAAqE,OAAO,OAAO;CAC/F;EACC,IAAI;EACJ,OAAO;EACP,cAAc;CACf;CACA;EACC,IAAI;EACJ,OAAO;EACP,cAAc;CACf;CACA;EACC,IAAI;EACJ,OAAO;EACP,cAAc;CACf;CACA;EACC,IAAI;EACJ,OAAO;EACP,cAAc;CACf;CACA;EACC,IAAI;EACJ,OAAO;EACP,cAAc;CACf;AACD,CAAC,GAKY,IAAgC,OAAO,OAAO;CAC1D;CACA;CACA;CACA;AACD,CAAiD,GAE3C,IAAgD,IAAI,IAAI,EAA0B,KAAK,MAAW,EAAO,EAAE,CAAC;AAKlH,SAAgB,EAAoB,GAA4C;CAC/E,OAAO,OAAO,KAAU,YAAY,EAAyB,IAAI,CAAK;AACvE;AAKA,SAAgB,EAA4B,GAAgB,IAA4C,CAAC,GAAwB;CAChI,OAAO,EAAmB,GAAO,GAAqB,CAAW;AAClE;AAKA,SAAgB,EACf,GACA,IAA4C,GAClB;CAC1B,OAAO,EAA0B,GAAW,CAAO;AACpD;AAKA,IAAa,IAAsE,OAAO,OACzF,EAAmC,CAA6B,CACjE;AAKA,SAAgB,EACf,GACA,IAA4C,GACb;CAC/B,OAAO,EAAgB,GAAI,CAAO;AACnC;AAKA,SAAgB,EACf,GACA,oBAAgB,IAAI,KAAK,GACzB,IAA4C,GACN;CACtC,IAAM,IAAS,EAAyB,GAAI,CAAO;CAGnD,OAFK,IAEE;EACN,IAAI,EAAO;EACX,OAAO,EAAO;EACd,OAAO,EAAO,aAAa,EAAE,iBAAc,CAAC;CAC7C,IANoB;AAOrB;AAKA,SAAgB,EACf,GACA,oBAAgB,IAAI,KAAK,GACzB,IAA4C,GACP;CACrC,IAAI,CAAC,MAAM,QAAQ,CAAK,GAAG,OAAO;CAElC,IAAM,CAAC,GAAgB,KAAgB;CACvC,IAAI,EAAE,aAA0B,SAAS,EAAE,aAAwB,OAAO,OAAO;CAEjF,IAAM,IAAiB,EAAe,QAAQ,GACxC,IAAe,EAAa,QAAQ;CAE1C,KAAK,IAAM,KAAU,GAAS;EAC7B,IAAM,CAAC,GAAiB,KAAiB,EAAO,aAAa,EAAE,iBAAc,CAAC;EAC1E,QAAE,aAA2B,SAAS,EAAE,aAAyB,UAIjE,EAAgB,QAAQ,MAAM,KAAkB,EAAc,QAAQ,MAAM,GAC/E,OAAO,EAAO;CAEhB;CAEA,OAAO;AACR;;;AChJA,SAAS,EAAoB,GAAsD;CAClF,IAAI,CAAC,GAAS,OAAO;CAErB,IAAM,CAAC,GAAW,KAAW,EAAQ;CACrC,OAAO;EAAC,EAAQ;EAAI,GAAW,QAAQ,KAAK;EAAQ,GAAS,QAAQ,KAAK;CAAM,CAAC,CAAC,KAAK,GAAG;AAC3F;AAKA,SAAgB,EAAsB,EACrC,UACA,aACA,aAAU,GACV,kBACA,kBACA,GAAG,KAC2B;CAC9B,IAAM,CAAC,KAAwB,wBAAe,IAAI,KAAK,CAAC,GAClD,IAAyB,GAAe,QAAQ,KAAK,EAAqB,QAAQ,GAClF,IAAwB,EAAQ,GAChC,IAA0B,EAAe,EAAE,GAK3C,IAAkB,GAAgB,MAAuD;EAC9F,IAAI,CAAC,GAAe;EAEpB,IAAM,IAAc,EAA8B,GAAW,IAAI,KAAK,CAAsB,GAAG,CAAO,GAChG,IAAgB,EAAoB,CAAW;EACjD,MAAkB,EAAwB,YAE9C,EAAwB,UAAU,GAClC,EAAc,CAAW;CAC1B,CAAC;CAMD,OAJA,QAAgB;EACf,EAAgB,CAAK;CACtB,GAAG;EAAC;EAAuB;EAAS;EAAwB;CAAK,CAAC,GAE3D,kBAAC,GAAD;EAAc,GAAI;EAAgB;EAAgB;EAAiB;CAAW,CAAA;AACtF"}
1
+ {"version":3,"file":"date-range-preset-select-BLnY47cv.js","names":[],"sources":["../../src/date-range-preset-select/lib/dateRangePresets.ts","../../src/date-range-preset-select/DateRangePresetSelect.tsx"],"sourcesContent":["import {\n\ttype DateRangeReferenceContext,\n\ttype NullableDateRange,\n\tresolveMonthAgoRange,\n\tresolveMonthStartToTodayRange,\n\tresolveMonthStartToYesterdayRange,\n\tresolveTodayRange,\n\tresolveYesterdayRange\n} from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { getPresetOption, normalizePresetIds, type PresetOption, resolvePresetOptionsByIds } from \"@ryuzaki13/react-foundation-lib/presets\";\n\n/**\n * Идентификаторы встроенных пресетов диапазона дат.\n */\nexport type DateRangePresetId = \"monthStartToYesterday\" | \"monthStartToToday\" | \"today\" | \"yesterday\" | \"monthAgo\";\n\n/**\n * Описание одного пресета диапазона дат.\n */\nexport interface DateRangePresetOption extends PresetOption<DateRangePresetId | (string & {})> {\n\tresolveRange: (context: DateRangeReferenceContext) => NullableDateRange;\n}\n\ntype BuiltInDateRangePresetOption = DateRangePresetOption & {\n\tid: DateRangePresetId;\n};\n\n/**\n * Полезная нагрузка события с вычисленным диапазоном.\n */\nexport interface DateRangePresetChangePayload {\n\tid: DateRangePresetOption[\"id\"];\n\tlabel: string;\n\trange: NullableDateRange;\n}\n\n/**\n * Полный встроенный список пресетов диапазона дат.\n */\nexport const DATE_RANGE_PRESET_OPTIONS: readonly BuiltInDateRangePresetOption[] = Object.freeze([\n\t{\n\t\tid: \"monthStartToYesterday\",\n\t\tlabel: \"С начала месяца по вчера\",\n\t\tresolveRange: resolveMonthStartToYesterdayRange\n\t},\n\t{\n\t\tid: \"monthStartToToday\",\n\t\tlabel: \"С начала месяца по сегодня\",\n\t\tresolveRange: resolveMonthStartToTodayRange\n\t},\n\t{\n\t\tid: \"today\",\n\t\tlabel: \"За сегодня\",\n\t\tresolveRange: resolveTodayRange\n\t},\n\t{\n\t\tid: \"yesterday\",\n\t\tlabel: \"За вчера\",\n\t\tresolveRange: resolveYesterdayRange\n\t},\n\t{\n\t\tid: \"monthAgo\",\n\t\tlabel: \"Месяц назад\",\n\t\tresolveRange: resolveMonthAgoRange\n\t}\n]);\n\n/**\n * Идентификаторы пресетов, которые включены в контрол по умолчанию.\n */\nexport const DEFAULT_DATE_RANGE_PRESET_IDS = Object.freeze([\n\t\"monthStartToYesterday\",\n\t\"monthStartToToday\",\n\t\"today\",\n\t\"yesterday\"\n] as const satisfies readonly DateRangePresetId[]);\n\nconst DATE_RANGE_PRESET_ID_SET: ReadonlySet<string> = new Set(DATE_RANGE_PRESET_OPTIONS.map((option) => option.id));\n\n/**\n * Проверяет, что значение является идентификатором встроенного пресета.\n */\nexport function isDateRangePresetId(value: unknown): value is DateRangePresetId {\n\treturn typeof value === \"string\" && DATE_RANGE_PRESET_ID_SET.has(value);\n}\n\n/**\n * Нормализует сохраненный список идентификаторов пресетов.\n */\nexport function normalizeDateRangePresetIds(value: unknown, fallbackIds: readonly DateRangePresetId[] = []): DateRangePresetId[] {\n\treturn normalizePresetIds(value, isDateRangePresetId, fallbackIds);\n}\n\n/**\n * Формирует список пресетов по сохраненным идентификаторам, сохраняя порядок.\n */\nexport function resolveDateRangePresetOptionsByIds(\n\tpresetIds: readonly DateRangePresetOption[\"id\"][],\n\toptions: readonly DateRangePresetOption[] = DATE_RANGE_PRESET_OPTIONS\n): DateRangePresetOption[] {\n\treturn resolvePresetOptionsByIds(presetIds, options);\n}\n\n/**\n * Встроенный список пресетов диапазона дат, включенный по умолчанию.\n */\nexport const DEFAULT_DATE_RANGE_PRESET_OPTIONS: readonly DateRangePresetOption[] = Object.freeze(\n\tresolveDateRangePresetOptionsByIds(DEFAULT_DATE_RANGE_PRESET_IDS)\n);\n\n/**\n * Ищет пресет по идентификатору.\n */\nexport function getDateRangePresetOption(\n\tid: DateRangePresetOption[\"id\"] | undefined,\n\toptions: readonly DateRangePresetOption[] = DEFAULT_DATE_RANGE_PRESET_OPTIONS\n): DateRangePresetOption | null {\n\treturn getPresetOption(id, options);\n}\n\n/**\n * Вычисляет диапазон по идентификатору пресета.\n */\nexport function resolveDateRangePresetPayload(\n\tid: DateRangePresetOption[\"id\"] | undefined,\n\treferenceDate = new Date(),\n\toptions: readonly DateRangePresetOption[] = DEFAULT_DATE_RANGE_PRESET_OPTIONS\n): DateRangePresetChangePayload | null {\n\tconst option = getDateRangePresetOption(id, options);\n\tif (!option) return null;\n\n\treturn {\n\t\tid: option.id,\n\t\tlabel: option.label,\n\t\trange: option.resolveRange({ referenceDate })\n\t};\n}\n\n/**\n * Ищет идентификатор пресета, который полностью совпадает с переданным диапазоном.\n */\nexport function resolveDateRangePresetIdByRange(\n\trange: NullableDateRange | null | undefined,\n\treferenceDate = new Date(),\n\toptions: readonly DateRangePresetOption[] = DEFAULT_DATE_RANGE_PRESET_OPTIONS\n): DateRangePresetOption[\"id\"] | null {\n\tif (!Array.isArray(range)) return null;\n\n\tconst [rangeStartDate, rangeEndDate] = range;\n\tif (!(rangeStartDate instanceof Date) || !(rangeEndDate instanceof Date)) return null;\n\n\tconst rangeStartTime = rangeStartDate.getTime();\n\tconst rangeEndTime = rangeEndDate.getTime();\n\n\tfor (const option of options) {\n\t\tconst [presetStartDate, presetEndDate] = option.resolveRange({ referenceDate });\n\t\tif (!(presetStartDate instanceof Date) || !(presetEndDate instanceof Date)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (presetStartDate.getTime() === rangeStartTime && presetEndDate.getTime() === rangeEndTime) {\n\t\t\treturn option.id;\n\t\t}\n\t}\n\n\treturn null;\n}\n","import { useEffect, useEffectEvent, useRef, useState } from \"react\";\n\nimport { PresetSelect } from \"../preset-select\";\n\nimport {\n\tDEFAULT_DATE_RANGE_PRESET_OPTIONS,\n\ttype DateRangePresetChangePayload,\n\ttype DateRangePresetOption,\n\tresolveDateRangePresetPayload\n} from \"./lib/dateRangePresets\";\n\nimport type { UiBaseProps } from \"../types\";\n\nexport interface DateRangePresetSelectProps extends UiBaseProps<DateRangePresetOption[\"id\"] | undefined> {\n\toptions?: readonly DateRangePresetOption[];\n\treferenceDate?: Date;\n\tonRangeChange?: (payload: DateRangePresetChangePayload | null) => void;\n}\n\n/**\n * Строит строковый ключ полезной нагрузки для защиты от повторного эмита одинакового диапазона.\n */\nfunction getPayloadSignature(payload: DateRangePresetChangePayload | null): string {\n\tif (!payload) return \"__empty__\";\n\n\tconst [startDate, endDate] = payload.range;\n\treturn [payload.id, startDate?.getTime() ?? \"null\", endDate?.getTime() ?? \"null\"].join(\"|\");\n}\n\n/**\n * Выбор пресета диапазона дат с вычислением диапазона без timezone-сдвига.\n */\nexport function DateRangePresetSelect({\n\tvalue,\n\tonChange,\n\toptions = DEFAULT_DATE_RANGE_PRESET_OPTIONS,\n\treferenceDate,\n\tonRangeChange,\n\t...props\n}: DateRangePresetSelectProps) {\n\tconst [defaultReferenceDate] = useState(() => new Date());\n\tconst referenceDateTimestamp = referenceDate?.getTime() ?? defaultReferenceDate.getTime();\n\tconst hasRangeChangeHandler = Boolean(onRangeChange);\n\tconst lastPayloadSignatureRef = useRef<string>(\"\");\n\n\t/**\n\t * Сообщает наружу только реально изменившийся диапазон.\n\t */\n\tconst emitRangeChange = useEffectEvent((nextValue: DateRangePresetOption[\"id\"] | undefined) => {\n\t\tif (!onRangeChange) return;\n\n\t\tconst nextPayload = resolveDateRangePresetPayload(nextValue, new Date(referenceDateTimestamp), options);\n\t\tconst nextSignature = getPayloadSignature(nextPayload);\n\t\tif (nextSignature === lastPayloadSignatureRef.current) return;\n\n\t\tlastPayloadSignatureRef.current = nextSignature;\n\t\tonRangeChange(nextPayload);\n\t});\n\n\tuseEffect(() => {\n\t\temitRangeChange(value);\n\t}, [hasRangeChangeHandler, options, referenceDateTimestamp, value]);\n\n\treturn <PresetSelect {...props} options={options} value={value} onChange={onChange} />;\n}\n"],"mappings":";;;;;;AAuCA,IAAa,IAAqE,OAAO,OAAO;CAC/F;EACC,IAAI;EACJ,OAAO;EACP,cAAc;CACf;CACA;EACC,IAAI;EACJ,OAAO;EACP,cAAc;CACf;CACA;EACC,IAAI;EACJ,OAAO;EACP,cAAc;CACf;CACA;EACC,IAAI;EACJ,OAAO;EACP,cAAc;CACf;CACA;EACC,IAAI;EACJ,OAAO;EACP,cAAc;CACf;AACD,CAAC,GAKY,IAAgC,OAAO,OAAO;CAC1D;CACA;CACA;CACA;AACD,CAAiD,GAE3C,IAAgD,IAAI,IAAI,EAA0B,KAAK,MAAW,EAAO,EAAE,CAAC;AAKlH,SAAgB,EAAoB,GAA4C;CAC/E,OAAO,OAAO,KAAU,YAAY,EAAyB,IAAI,CAAK;AACvE;AAKA,SAAgB,EAA4B,GAAgB,IAA4C,CAAC,GAAwB;CAChI,OAAO,EAAmB,GAAO,GAAqB,CAAW;AAClE;AAKA,SAAgB,EACf,GACA,IAA4C,GAClB;CAC1B,OAAO,EAA0B,GAAW,CAAO;AACpD;AAKA,IAAa,IAAsE,OAAO,OACzF,EAAmC,CAA6B,CACjE;AAKA,SAAgB,EACf,GACA,IAA4C,GACb;CAC/B,OAAO,EAAgB,GAAI,CAAO;AACnC;AAKA,SAAgB,EACf,GACA,oBAAgB,IAAI,KAAK,GACzB,IAA4C,GACN;CACtC,IAAM,IAAS,EAAyB,GAAI,CAAO;CAGnD,OAFK,IAEE;EACN,IAAI,EAAO;EACX,OAAO,EAAO;EACd,OAAO,EAAO,aAAa,EAAE,iBAAc,CAAC;CAC7C,IANoB;AAOrB;AAKA,SAAgB,EACf,GACA,oBAAgB,IAAI,KAAK,GACzB,IAA4C,GACP;CACrC,IAAI,CAAC,MAAM,QAAQ,CAAK,GAAG,OAAO;CAElC,IAAM,CAAC,GAAgB,KAAgB;CACvC,IAAI,EAAE,aAA0B,SAAS,EAAE,aAAwB,OAAO,OAAO;CAEjF,IAAM,IAAiB,EAAe,QAAQ,GACxC,IAAe,EAAa,QAAQ;CAE1C,KAAK,IAAM,KAAU,GAAS;EAC7B,IAAM,CAAC,GAAiB,KAAiB,EAAO,aAAa,EAAE,iBAAc,CAAC;EAC1E,QAAE,aAA2B,SAAS,EAAE,aAAyB,UAIjE,EAAgB,QAAQ,MAAM,KAAkB,EAAc,QAAQ,MAAM,GAC/E,OAAO,EAAO;CAEhB;CAEA,OAAO;AACR;;;AChJA,SAAS,EAAoB,GAAsD;CAClF,IAAI,CAAC,GAAS,OAAO;CAErB,IAAM,CAAC,GAAW,KAAW,EAAQ;CACrC,OAAO;EAAC,EAAQ;EAAI,GAAW,QAAQ,KAAK;EAAQ,GAAS,QAAQ,KAAK;CAAM,CAAC,CAAC,KAAK,GAAG;AAC3F;AAKA,SAAgB,EAAsB,EACrC,UACA,aACA,aAAU,GACV,kBACA,kBACA,GAAG,KAC2B;CAC9B,IAAM,CAAC,KAAwB,wBAAe,IAAI,KAAK,CAAC,GAClD,IAAyB,GAAe,QAAQ,KAAK,EAAqB,QAAQ,GAClF,IAAwB,EAAQ,GAChC,IAA0B,EAAe,EAAE,GAK3C,IAAkB,GAAgB,MAAuD;EAC9F,IAAI,CAAC,GAAe;EAEpB,IAAM,IAAc,EAA8B,GAAW,IAAI,KAAK,CAAsB,GAAG,CAAO,GAChG,IAAgB,EAAoB,CAAW;EACjD,MAAkB,EAAwB,YAE9C,EAAwB,UAAU,GAClC,EAAc,CAAW;CAC1B,CAAC;CAMD,OAJA,QAAgB;EACf,EAAgB,CAAK;CACtB,GAAG;EAAC;EAAuB;EAAS;EAAwB;CAAK,CAAC,GAE3D,kBAAC,GAAD;EAAc,GAAI;EAAgB;EAAgB;EAAiB;CAAW,CAAA;AACtF"}
@@ -1,9 +1,9 @@
1
1
  import { t as e } from "./ui.module-BisoTevy.js";
2
2
  import { useEffect as t, useEffectEvent as n, useId as r, useState as i } from "react";
3
3
  import { cn as a } from "@ryuzaki13/react-foundation-lib/utils";
4
- import { toFiniteNumber as o } from "@ryuzaki13/react-foundation-lib/formatters";
5
- import { XIcon as s } from "lucide-react";
6
- import { jsx as c, jsxs as l } from "react/jsx-runtime";
4
+ import { XIcon as o } from "lucide-react";
5
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
6
+ import { toFiniteNumber as l } from "@ryuzaki13/react-foundation-lib/formatters";
7
7
  var u = {
8
8
  controlLayout: "lRn5ye",
9
9
  input: "ce5HAY",
@@ -29,7 +29,7 @@ function d({ id: e, hasLabel: t, hasDescription: n, hasError: i }) {
29
29
  //#endregion
30
30
  //#region src/input/Input.tsx
31
31
  function f({ label: t, controlId: n, labelId: r }) {
32
- return /* @__PURE__ */ c("label", {
32
+ return /* @__PURE__ */ s("label", {
33
33
  id: r,
34
34
  htmlFor: n,
35
35
  className: e.uiLabel,
@@ -37,46 +37,46 @@ function f({ label: t, controlId: n, labelId: r }) {
37
37
  });
38
38
  }
39
39
  function p({ label: t, description: n, size: r, disabled: i, className: o }) {
40
- let { controlId: s, labelId: u, descriptionId: p } = d({
40
+ let { controlId: l, labelId: u, descriptionId: p } = d({
41
41
  hasLabel: t != null,
42
42
  hasDescription: !!n
43
43
  });
44
- return /* @__PURE__ */ l("div", {
44
+ return /* @__PURE__ */ c("div", {
45
45
  className: a(e.uiElement, e.uiSizable, r && e[r], e.disabled, o),
46
46
  "aria-disabled": i || void 0,
47
47
  children: [
48
- t && /* @__PURE__ */ c(f, {
48
+ t && /* @__PURE__ */ s(f, {
49
49
  label: t,
50
- controlId: s,
50
+ controlId: l,
51
51
  labelId: u
52
52
  }),
53
- n && /* @__PURE__ */ c("p", {
53
+ n && /* @__PURE__ */ s("p", {
54
54
  id: p,
55
55
  className: e.uiDescription,
56
56
  children: n
57
57
  }),
58
- /* @__PURE__ */ c("div", { className: a(e.uiInputControlFake, "skeletonLine") })
58
+ /* @__PURE__ */ s("div", { className: a(e.uiInputControlFake, "skeletonLine") })
59
59
  ]
60
60
  });
61
61
  }
62
- function m({ label: t, description: n, disabled: r, className: i, error: o, size: s, controlId: d, labelId: p, descriptionId: m, errorId: h, children: g }) {
63
- return /* @__PURE__ */ l("div", {
64
- className: a(e.uiElement, e.uiSizable, s && e[s], r && e.disabled, i),
62
+ function m({ label: t, description: n, disabled: r, className: i, error: o, size: l, controlId: d, labelId: p, descriptionId: m, errorId: h, children: g }) {
63
+ return /* @__PURE__ */ c("div", {
64
+ className: a(e.uiElement, e.uiSizable, l && e[l], r && e.disabled, i),
65
65
  "aria-disabled": r || void 0,
66
66
  children: [
67
- t && /* @__PURE__ */ c(f, {
67
+ t && /* @__PURE__ */ s(f, {
68
68
  label: t,
69
69
  controlId: d,
70
70
  labelId: p
71
71
  }),
72
- n && /* @__PURE__ */ c("p", {
72
+ n && /* @__PURE__ */ s("p", {
73
73
  id: m,
74
74
  className: e.uiDescription,
75
75
  children: n
76
76
  }),
77
- /* @__PURE__ */ l("div", {
77
+ /* @__PURE__ */ c("div", {
78
78
  className: u.controlLayout,
79
- children: [g, o && /* @__PURE__ */ c("p", {
79
+ children: [g, o && /* @__PURE__ */ s("p", {
80
80
  id: h,
81
81
  className: u.error,
82
82
  role: "alert",
@@ -87,24 +87,24 @@ function m({ label: t, description: n, disabled: r, className: i, error: o, size
87
87
  });
88
88
  }
89
89
  function h({ className: e, endAdornment: t, endAdornmentClassName: n, endAdornmentWidth: r, children: i }) {
90
- let o = t != null, s = o && r ? { "--input-end-adornment-width": r } : void 0;
91
- return /* @__PURE__ */ l("div", {
90
+ let o = t != null, l = o && r ? { "--input-end-adornment-width": r } : void 0;
91
+ return /* @__PURE__ */ c("div", {
92
92
  className: a(u.controlLayout, e),
93
- style: s,
94
- children: [i({ controlClassName: o ? u.controlWithEndAdornment : void 0 }), o && /* @__PURE__ */ c("div", {
93
+ style: l,
94
+ children: [i({ controlClassName: o ? u.controlWithEndAdornment : void 0 }), o && /* @__PURE__ */ s("div", {
95
95
  className: a(u.controlEndAdornment, n),
96
96
  children: t
97
97
  })]
98
98
  });
99
99
  }
100
100
  function g({ onClick: e, disabled: t, className: n, ariaLabel: r = "Очистить значение" }) {
101
- return /* @__PURE__ */ c("button", {
101
+ return /* @__PURE__ */ s("button", {
102
102
  type: "button",
103
103
  disabled: t || !e,
104
104
  className: a(u.clearButton, "flexCenter radiusSm", n),
105
105
  onClick: e,
106
106
  "aria-label": r,
107
- children: /* @__PURE__ */ c(s, {})
107
+ children: /* @__PURE__ */ s(o, {})
108
108
  });
109
109
  }
110
110
  function _(e, t, n) {
@@ -113,15 +113,15 @@ function _(e, t, n) {
113
113
  if (e || t) return "var(--control-height)";
114
114
  }
115
115
  function v({ endAdornment: e, onClear: t, disabled: n }) {
116
- if (!(e == null && !t)) return /* @__PURE__ */ l("div", {
116
+ if (!(e == null && !t)) return /* @__PURE__ */ c("div", {
117
117
  className: u.endAdornmentGroup,
118
- children: [e, t && /* @__PURE__ */ c(g, {
118
+ children: [e, t && /* @__PURE__ */ s(g, {
119
119
  onClick: t,
120
120
  disabled: n
121
121
  })]
122
122
  });
123
123
  }
124
- function y({ label: t, description: n, disabled: r, className: o, onClear: s, error: l, onClearError: f, onChange: p, value: g, size: y, allowedPattern: b, endAdornment: x, endAdornmentClassName: S, endAdornmentWidth: C, type: w = "text", ...T }) {
124
+ function y({ label: t, description: n, disabled: r, className: o, onClear: c, error: l, onClearError: f, onChange: p, value: g, size: y, allowedPattern: b, endAdornment: x, endAdornmentClassName: S, endAdornmentWidth: C, type: w = "text", ...T }) {
125
125
  let [E, D] = i(!1), O = (e) => {
126
126
  let t = e.target.value;
127
127
  b !== void 0 && D(t !== "" && !b.test(t)), p(t), l && f && f();
@@ -131,7 +131,7 @@ function y({ label: t, description: n, disabled: r, className: o, onClear: s, er
131
131
  hasDescription: !!n,
132
132
  hasError: !!A
133
133
  }), I = k && (!!l || E);
134
- return /* @__PURE__ */ c(m, {
134
+ return /* @__PURE__ */ s(m, {
135
135
  label: t,
136
136
  description: n,
137
137
  disabled: r,
@@ -142,15 +142,15 @@ function y({ label: t, description: n, disabled: r, className: o, onClear: s, er
142
142
  labelId: M,
143
143
  descriptionId: N,
144
144
  errorId: P,
145
- children: /* @__PURE__ */ c(h, {
145
+ children: /* @__PURE__ */ s(h, {
146
146
  endAdornment: v({
147
147
  endAdornment: x,
148
- onClear: s,
148
+ onClear: c,
149
149
  disabled: r
150
150
  }),
151
151
  endAdornmentClassName: S,
152
- endAdornmentWidth: _(x != null, !!s, C),
153
- children: ({ controlClassName: t }) => /* @__PURE__ */ c("input", {
152
+ endAdornmentWidth: _(x != null, !!c, C),
153
+ children: ({ controlClassName: t }) => /* @__PURE__ */ s("input", {
154
154
  ...T,
155
155
  id: j,
156
156
  type: w,
@@ -166,11 +166,11 @@ function y({ label: t, description: n, disabled: r, className: o, onClear: s, er
166
166
  })
167
167
  });
168
168
  }
169
- function b({ label: r, description: s, disabled: l, className: f, onClear: p, error: g, onClearError: y, onChange: b, value: x, size: S, endAdornment: C, endAdornmentClassName: w, endAdornmentWidth: T, ...E }) {
169
+ function b({ label: r, description: o, disabled: c, className: f, onClear: p, error: g, onClearError: y, onChange: b, value: x, size: S, endAdornment: C, endAdornmentClassName: w, endAdornmentWidth: T, ...E }) {
170
170
  let D = E, { controlId: O, labelId: k, descriptionId: A, errorId: j, describedBy: M } = d({
171
171
  id: E.id,
172
172
  hasLabel: r != null,
173
- hasDescription: !!s,
173
+ hasDescription: !!o,
174
174
  hasError: !!g
175
175
  }), [N, P] = i(() => String(x)), F = n((e) => {
176
176
  P(e);
@@ -182,12 +182,12 @@ function b({ label: r, description: s, disabled: l, className: f, onClear: p, er
182
182
  P(""), p();
183
183
  } : void 0, L = (e) => {
184
184
  let t = e.target.value;
185
- P(t), b(o(t)), g && y && y();
185
+ P(t), b(l(t)), g && y && y();
186
186
  };
187
- return /* @__PURE__ */ c(m, {
187
+ return /* @__PURE__ */ s(m, {
188
188
  label: r,
189
- description: s,
190
- disabled: l,
189
+ description: o,
190
+ disabled: c,
191
191
  className: f,
192
192
  size: S,
193
193
  error: g,
@@ -195,20 +195,20 @@ function b({ label: r, description: s, disabled: l, className: f, onClear: p, er
195
195
  labelId: k,
196
196
  descriptionId: A,
197
197
  errorId: j,
198
- children: /* @__PURE__ */ c(h, {
198
+ children: /* @__PURE__ */ s(h, {
199
199
  endAdornment: v({
200
200
  endAdornment: C,
201
201
  onClear: I,
202
- disabled: l
202
+ disabled: c
203
203
  }),
204
204
  endAdornmentClassName: w,
205
205
  endAdornmentWidth: _(C != null, !!I, T),
206
- children: ({ controlClassName: t }) => /* @__PURE__ */ c("input", {
206
+ children: ({ controlClassName: t }) => /* @__PURE__ */ s("input", {
207
207
  ...D,
208
208
  id: O,
209
209
  type: "number",
210
210
  inputMode: "decimal",
211
- disabled: l,
211
+ disabled: c,
212
212
  value: N,
213
213
  "aria-labelledby": k,
214
214
  "aria-describedby": M,
@@ -222,7 +222,7 @@ var x = y;
222
222
  //#endregion
223
223
  //#region src/input/InputErrorComponent.tsx
224
224
  function S({ text: t }) {
225
- return /* @__PURE__ */ c("div", {
225
+ return /* @__PURE__ */ s("div", {
226
226
  className: e.uiErrorElement,
227
227
  children: t
228
228
  });
@@ -230,4 +230,4 @@ function S({ text: t }) {
230
230
  //#endregion
231
231
  export { b as a, p as c, h as i, d as l, x as n, y as o, g as r, m as s, S as t, u };
232
232
 
233
- //# sourceMappingURL=input-CZLUUggm.js.map
233
+ //# sourceMappingURL=input-BCJfUdK_.js.map