@ryuzaki13/react-foundation-ui 1.4.5 → 1.5.1

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 (451) hide show
  1. package/dist/advanced-search/index.js +9 -9
  2. package/dist/badge/index.js +1 -1
  3. package/dist/base-table/index.js +1 -1
  4. package/dist/button/index.js +1 -1
  5. package/dist/check-box/index.js +1 -1
  6. package/dist/chunks/CalendarView-Cfih7hjD.js +439 -0
  7. package/dist/chunks/{CalendarView-Z_XWk7aI.js.map → CalendarView-Cfih7hjD.js.map} +1 -1
  8. package/dist/chunks/CheckBox.module-C5SjPwSj.js.map +1 -1
  9. package/dist/chunks/{TextEditorLexicalClient-CK8j3RA4.js → TextEditorLexicalClient-BSafrkLJ.js} +245 -279
  10. package/dist/chunks/TextEditorLexicalClient-BSafrkLJ.js.map +1 -0
  11. package/dist/chunks/{badge-DwIUjH0a.js → badge-CbclcpUi.js} +2 -2
  12. package/dist/chunks/{badge-DwIUjH0a.js.map → badge-CbclcpUi.js.map} +1 -1
  13. package/dist/chunks/{base-table-BFsVwXg3.js → base-table-X7aSSjXa.js} +3 -3
  14. package/dist/chunks/{base-table-BFsVwXg3.js.map → base-table-X7aSSjXa.js.map} +1 -1
  15. package/dist/chunks/{button-BU2kRzwu.js → button-BOl7hYmT.js} +4 -4
  16. package/dist/chunks/button-BOl7hYmT.js.map +1 -0
  17. package/dist/chunks/{check-box-Dd3YFuxd.js → check-box-6HGX_KOy.js} +5 -5
  18. package/dist/chunks/check-box-6HGX_KOy.js.map +1 -0
  19. package/dist/chunks/{context-menu-C6RO7soI.js → context-menu-tcD3kVAc.js} +59 -63
  20. package/dist/chunks/context-menu-tcD3kVAc.js.map +1 -0
  21. package/dist/chunks/date-input-Bsl9dxxY.js +341 -0
  22. package/dist/chunks/date-input-Bsl9dxxY.js.map +1 -0
  23. package/dist/chunks/{floating-arrow-BE-z4QkE.js → floating-arrow-DPKwJfww.js} +3 -3
  24. package/dist/chunks/{floating-arrow-BE-z4QkE.js.map → floating-arrow-DPKwJfww.js.map} +1 -1
  25. package/dist/chunks/{input-Bp6_Ucgr.js → input-CAw1Loze.js} +61 -52
  26. package/dist/chunks/input-CAw1Loze.js.map +1 -0
  27. package/dist/chunks/{input-files-D1JzSw_Y.js → input-files-CLtQ7p8j.js} +3 -3
  28. package/dist/chunks/{input-files-D1JzSw_Y.js.map → input-files-CLtQ7p8j.js.map} +1 -1
  29. package/dist/chunks/{input-search-Bkhcinru.js → input-search-F6MPrUGF.js} +2 -2
  30. package/dist/chunks/{input-search-Bkhcinru.js.map → input-search-F6MPrUGF.js.map} +1 -1
  31. package/dist/chunks/{misc-BYxxlJz6.js → misc-Cp_r022Z.js} +2 -2
  32. package/dist/chunks/{misc-BYxxlJz6.js.map → misc-Cp_r022Z.js.map} +1 -1
  33. package/dist/chunks/{modal-paexEF0j.js → modal-DPIXoMkB.js} +3 -3
  34. package/dist/chunks/{modal-paexEF0j.js.map → modal-DPIXoMkB.js.map} +1 -1
  35. package/dist/chunks/{multi-select-COEkc8Qc.js → multi-select-Dypew65l.js} +165 -154
  36. package/dist/chunks/multi-select-Dypew65l.js.map +1 -0
  37. package/dist/chunks/{picker-e6IsrMUG.js → picker-TYLwgl1c.js} +83 -93
  38. package/dist/chunks/picker-TYLwgl1c.js.map +1 -0
  39. package/dist/chunks/popover-BTT7zSqx.js +230 -0
  40. package/dist/chunks/{popover-CGU3MlsH.js.map → popover-BTT7zSqx.js.map} +1 -1
  41. package/dist/chunks/{radio-group-CM9Lg_nc.js → radio-group-4j2HbemI.js} +2 -2
  42. package/dist/chunks/{radio-group-CM9Lg_nc.js.map → radio-group-4j2HbemI.js.map} +1 -1
  43. package/dist/chunks/{select-BON0S9Dr.js → select-DCSNVEYW.js} +37 -36
  44. package/dist/chunks/select-DCSNVEYW.js.map +1 -0
  45. package/dist/chunks/{table-Dd5BcC0k.js → table-DihiNNJt.js} +2 -2
  46. package/dist/chunks/{table-Dd5BcC0k.js.map → table-DihiNNJt.js.map} +1 -1
  47. package/dist/chunks/{ui.module-BisoTevy.js → ui.module-BfaIVBba.js} +3 -1
  48. package/dist/chunks/ui.module-BfaIVBba.js.map +1 -0
  49. package/dist/chunks/{uiClasses-BNjBunnY.js → uiClasses-4atXOh0J.js} +2 -2
  50. package/dist/chunks/{uiClasses-BNjBunnY.js.map → uiClasses-4atXOh0J.js.map} +1 -1
  51. package/dist/chunks/{useODataSelectBase-CKe1AVMI.js → useODataSelectBase-DI_wwKgw.js} +2 -2
  52. package/dist/chunks/{useODataSelectBase-CKe1AVMI.js.map → useODataSelectBase-DI_wwKgw.js.map} +1 -1
  53. package/dist/context-menu/components/MenuRoot.d.ts.map +1 -1
  54. package/dist/context-menu/index.js +1 -1
  55. package/dist/date-input/index.js +2 -2
  56. package/dist/date-input/lib/dateInputValue.d.ts +2 -6
  57. package/dist/date-input/lib/dateInputValue.d.ts.map +1 -1
  58. package/dist/date-input/lib/types.d.ts +0 -4
  59. package/dist/date-input/lib/types.d.ts.map +1 -1
  60. package/dist/date-input/model/useDateInput.d.ts +2 -2
  61. package/dist/date-input/model/useDateInput.d.ts.map +1 -1
  62. package/dist/date-input/ui/CalendarView.d.ts.map +1 -1
  63. package/dist/date-input/ui/DateInput.d.ts +0 -4
  64. package/dist/date-input/ui/DateInput.d.ts.map +1 -1
  65. package/dist/date-time-input/index.js +250 -254
  66. package/dist/date-time-input/index.js.map +1 -1
  67. package/dist/date-time-input/model/useDateTimeSegments.d.ts.map +1 -1
  68. package/dist/date-time-input/ui/SingleDateTimeInput.d.ts.map +1 -1
  69. package/dist/disclosure/index.js +4 -3
  70. package/dist/disclosure/index.js.map +1 -1
  71. package/dist/drop-zone/index.js +1 -1
  72. package/dist/expandable-action-panel/index.js +2 -2
  73. package/dist/floating-arrow/index.js +1 -1
  74. package/dist/image/index.js +4 -4
  75. package/dist/input/Input.d.ts +2 -1
  76. package/dist/input/Input.d.ts.map +1 -1
  77. package/dist/input/index.js +1 -1
  78. package/dist/input-date-time/index.js +2 -2
  79. package/dist/input-file/index.js +2 -2
  80. package/dist/input-files/index.js +1 -1
  81. package/dist/input-image/index.js +2 -2
  82. package/dist/input-search/index.js +1 -1
  83. package/dist/layout-picker/index.js +94 -107
  84. package/dist/layout-picker/index.js.map +1 -1
  85. package/dist/layout-picker/ui/LayoutPicker.d.ts.map +1 -1
  86. package/dist/list/List.d.ts.map +1 -1
  87. package/dist/list/index.js +75 -46
  88. package/dist/list/index.js.map +1 -1
  89. package/dist/list/useListVirtualizer.d.ts +13 -0
  90. package/dist/list/useListVirtualizer.d.ts.map +1 -0
  91. package/dist/listbox/Listbox.d.ts +1 -0
  92. package/dist/listbox/Listbox.d.ts.map +1 -1
  93. package/dist/listbox/index.js +39 -34
  94. package/dist/listbox/index.js.map +1 -1
  95. package/dist/misc/index.js +1 -1
  96. package/dist/modal/index.js +1 -1
  97. package/dist/multi-select/index.js +2 -2
  98. package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
  99. package/dist/multi-select/ui/defaultRenderers.d.ts +2 -1
  100. package/dist/multi-select/ui/defaultRenderers.d.ts.map +1 -1
  101. package/dist/notifications/index.js +1 -1
  102. package/dist/picker/index.js +1 -1
  103. package/dist/picker/model/usePickerQuery.d.ts +6 -2
  104. package/dist/picker/model/usePickerQuery.d.ts.map +1 -1
  105. package/dist/picker/model/usePickerSelectionLifecycle.d.ts.map +1 -1
  106. package/dist/popover/FloatingPopover.d.ts +5 -0
  107. package/dist/popover/FloatingPopover.d.ts.map +1 -1
  108. package/dist/popover/index.js +1 -1
  109. package/dist/preset-range-date-input/index.js +2 -3
  110. package/dist/preset-range-date-input/index.js.map +1 -1
  111. package/dist/preset-select/index.js +1 -1
  112. package/dist/radio-button/index.js +3 -3
  113. package/dist/radio-button/index.js.map +1 -1
  114. package/dist/radio-group/index.js +1 -1
  115. package/dist/select/Select.d.ts.map +1 -1
  116. package/dist/select/index.js +1 -1
  117. package/dist/simple-table/index.js +1 -1
  118. package/dist/slider/Slider.d.ts.map +1 -1
  119. package/dist/slider/SliderInput.d.ts.map +1 -1
  120. package/dist/slider/index.js +400 -343
  121. package/dist/slider/index.js.map +1 -1
  122. package/dist/state-select/index.js +1 -1
  123. package/dist/styles.css +1 -1
  124. package/dist/switch/index.js +1 -1
  125. package/dist/table/index.js +1 -1
  126. package/dist/table-sorting/index.js +1 -1
  127. package/dist/tabs/index.js +2 -2
  128. package/dist/tabs/index.js.map +1 -1
  129. package/dist/tag-input/TagInput.d.ts.map +1 -1
  130. package/dist/tag-input/index.js +2 -2
  131. package/dist/tag-input/index.js.map +1 -1
  132. package/dist/text/index.js +1 -1
  133. package/dist/text-editor/EmailDialog.d.ts +1 -2
  134. package/dist/text-editor/EmailDialog.d.ts.map +1 -1
  135. package/dist/text-editor/LinkDialog.d.ts +1 -2
  136. package/dist/text-editor/LinkDialog.d.ts.map +1 -1
  137. package/dist/text-editor/PhoneDialog.d.ts +1 -2
  138. package/dist/text-editor/PhoneDialog.d.ts.map +1 -1
  139. package/dist/text-editor/SemanticDialog.d.ts +1 -2
  140. package/dist/text-editor/SemanticDialog.d.ts.map +1 -1
  141. package/dist/text-editor/TextEditorDialogs.d.ts +2 -1
  142. package/dist/text-editor/TextEditorDialogs.d.ts.map +1 -1
  143. package/dist/text-editor/TimeDialog.d.ts +1 -2
  144. package/dist/text-editor/TimeDialog.d.ts.map +1 -1
  145. package/dist/text-editor/index.js +2 -2
  146. package/dist/textarea/Textarea.d.ts.map +1 -1
  147. package/dist/textarea/index.js +3 -2
  148. package/dist/textarea/index.js.map +1 -1
  149. package/dist/toggle/index.js +1 -1
  150. package/dist/tree-select/TreeMultiSelect.d.ts.map +1 -1
  151. package/dist/tree-select/TreePickerBase.d.ts.map +1 -1
  152. package/dist/tree-select/index.js +206 -211
  153. package/dist/tree-select/index.js.map +1 -1
  154. package/dist/tree-table/index.js +1 -1
  155. package/package.json +8 -2
  156. package/src/styles/_base.scss +3 -3
  157. package/src/styles/config/_index.scss +43 -38
  158. package/src/styles/mixins/_controls.scss +17 -16
  159. package/storybook-static/assets/Badge-CD5894x5.css +1 -0
  160. package/storybook-static/assets/{Badge-Bh73-APE.js → Badge-DUTHAQCE.js} +1 -1
  161. package/storybook-static/assets/{Badge.stories-gNFtCWnR.js → Badge.stories-6iI-UG0f.js} +1 -1
  162. package/storybook-static/assets/{Button-O9QPAftp.js → Button-B0C3LMAw.js} +1 -1
  163. package/storybook-static/assets/{Button-mjF9HSg0.js → Button-CqVTrqw2.js} +1 -1
  164. package/storybook-static/assets/{Button-DtU4kGzD.css → Button-DuVDH6-g.css} +1 -1
  165. package/storybook-static/assets/{Button.stories-wkiE0c_a.js → Button.stories-DjUmGByS.js} +1 -1
  166. package/storybook-static/assets/CalendarView-hiZ9ETaP.js +1 -0
  167. package/storybook-static/assets/{CheckBox-Clpeg9q7.js → CheckBox-DBQ50PCI.js} +2 -2
  168. package/storybook-static/assets/{CheckBox-CB8fTQF0.js → CheckBox-De010n9y.js} +1 -1
  169. package/storybook-static/assets/CheckBox-Dw4nDCv8.css +1 -0
  170. package/storybook-static/assets/{CheckBox.stories-pfWBxvOy.js → CheckBox.stories-BfC6OQx3.js} +1 -1
  171. package/storybook-static/assets/{Color-6AOWCN3U-CVvkiihj.js → Color-6AOWCN3U-C_KzRv-S.js} +1 -1
  172. package/storybook-static/assets/ContextMenu-BwrqtNnY.js +1 -0
  173. package/storybook-static/assets/{ContextMenu-eGnlhRRu.js → ContextMenu-CGLg47OY.js} +1 -1
  174. package/storybook-static/assets/ContextMenu.stories-JnUlLk_E.js +90 -0
  175. package/storybook-static/assets/DateInput-4lH8A4HQ.css +1 -0
  176. package/storybook-static/assets/DateInput-BWbKmFEc.js +1 -0
  177. package/storybook-static/assets/{DateInput-DQDplLib.js → DateInput-CUPdoLCw.js} +1 -1
  178. package/storybook-static/assets/{DateInput.stories-BNpS4CND.js → DateInput.stories-DOOukQsB.js} +1 -1
  179. package/storybook-static/assets/{DateRangePresetSelect-DCBEf98i.js → DateRangePresetSelect-BWm1txZP.js} +1 -1
  180. package/storybook-static/assets/{DateRangePresetSelect-Bfx-d5qg.js → DateRangePresetSelect-CegjuKSa.js} +1 -1
  181. package/storybook-static/assets/{DateRangePresetSelect.stories-PAV2jgQb.js → DateRangePresetSelect.stories-BGCOqCf7.js} +1 -1
  182. package/storybook-static/assets/{Detail-DvmdQCue.js → Detail-DLDL5IhK.js} +1 -1
  183. package/storybook-static/assets/{Detail.stories-CEm00aSN.js → Detail.stories-BcP01iwW.js} +1 -1
  184. package/storybook-static/assets/{Dialog-3I2Y7jD7.js → Dialog-BYLrz-6d.js} +1 -1
  185. package/storybook-static/assets/Dialog-DcQbPiWK.js +1 -0
  186. package/storybook-static/assets/Dialog.stories-C5o4OhEy.js +31 -0
  187. package/storybook-static/assets/{Disclosure-DUIQ37oh.js → Disclosure-ChpGjvgZ.js} +1 -1
  188. package/storybook-static/assets/Disclosure.stories-CTL8h6Q3.js +40 -0
  189. package/storybook-static/assets/DisclosureGroup-CNoH2D1R.css +1 -0
  190. package/storybook-static/assets/DisclosureGroup-CUelavR4.js +2 -0
  191. package/storybook-static/assets/{DocsRenderer-JROSPFPF-DwPk6ai7.js → DocsRenderer-JROSPFPF-BQTqLgKs.js} +1 -1
  192. package/storybook-static/assets/{DropZone-BGuCU5dq.js → DropZone-5Xw6HUNa.js} +1 -1
  193. package/storybook-static/assets/DropZone-ULl7tScR.js +9 -0
  194. package/storybook-static/assets/DropZone.stories-Btud72HY.js +36 -0
  195. package/storybook-static/assets/DropdownMenu-CZDVKXjD.js +1 -0
  196. package/storybook-static/assets/ExpandableActionPanel-CwamleZX.js +2 -0
  197. package/storybook-static/assets/ExpandableActionPanel.stories-BUBvJAPp.js +19 -0
  198. package/storybook-static/assets/{Flex-CBwbh1yu.js → Flex-cO3yZG-t.js} +1 -1
  199. package/storybook-static/assets/{Flex.stories-cdk6vRZq.js → Flex.stories-BAuXOTSJ.js} +1 -1
  200. package/storybook-static/assets/FloatingPopover-C56UHmzH.js +1 -0
  201. package/storybook-static/assets/{FloatingPopover-DC84VrV3.css → FloatingPopover-jwILx9b0.css} +1 -1
  202. package/storybook-static/assets/FormattedTableCell-B4ObrqF1.js +18 -0
  203. package/storybook-static/assets/{Grid-BkKqSMfk.js → Grid-B3-t0FmJ.js} +1 -1
  204. package/storybook-static/assets/{Grid.stories-828arrPi.js → Grid.stories-Cr_GpL6X.js} +1 -1
  205. package/storybook-static/assets/{ImageCropper.stories-CrIWrKKR.js → ImageCropper.stories-BDqwBC8C.js} +1 -1
  206. package/storybook-static/assets/{ImageRenderer-F3AaZx-K.js → ImageRenderer-CigIY2hD.js} +1 -1
  207. package/storybook-static/assets/{ImageRenderer.stories-l3PnRYxy.js → ImageRenderer.stories-CI8r-V1l.js} +1 -1
  208. package/storybook-static/assets/{ImageView.stories-C6uhkvCN.js → ImageView.stories-D_OG6Deg.js} +1 -1
  209. package/storybook-static/assets/{ImageViewer.stories-BSPiv5lU.js → ImageViewer.stories-CQSqogxL.js} +2 -2
  210. package/storybook-static/assets/{ImageViewerRuntime-BOpMGgz6.js → ImageViewerRuntime-DerEzrYU.js} +1 -1
  211. package/storybook-static/assets/{Input-D-ZrbHVw.js → Input-Bm1cMHGo.js} +1 -1
  212. package/storybook-static/assets/Input-Bot494Bx.js +3 -0
  213. package/storybook-static/assets/Input-Db2-9PJZ.css +1 -0
  214. package/storybook-static/assets/{Input.stories-vqPv6pLx.js → Input.stories-BovBOurM.js} +1 -1
  215. package/storybook-static/assets/{InputDateTime-DHBVbRii.js → InputDateTime-BekBAEPs.js} +1 -1
  216. package/storybook-static/assets/{InputDateTime.stories-BAvLMBuk.js → InputDateTime.stories-w3S5IslS.js} +1 -1
  217. package/storybook-static/assets/{InputFile-B9TVOEZV.js → InputFile-CuQb2x1k.js} +1 -1
  218. package/storybook-static/assets/InputFile-GBGGdgQh.js +1 -0
  219. package/storybook-static/assets/InputFile.stories-f_IZth6c.js +36 -0
  220. package/storybook-static/assets/InputFiles-C74DVQhN.js +1 -0
  221. package/storybook-static/assets/{InputFiles-CxZkOZFK.js → InputFiles-CrLCcwgR.js} +1 -1
  222. package/storybook-static/assets/InputFiles.stories-BsuddNi0.js +33 -0
  223. package/storybook-static/assets/{InputFilesList-OEX4zGI3.js → InputFilesList-Djxwuhlq.js} +1 -1
  224. package/storybook-static/assets/InputImage-CwlTJmns.js +7 -0
  225. package/storybook-static/assets/{InputImage-31A6fxSf.js → InputImage-DMaYEhTE.js} +1 -1
  226. package/storybook-static/assets/InputImage.stories-CnN_t-Bq.js +45 -0
  227. package/storybook-static/assets/InteractiveComponents.stories-B87LSnhG.js +303 -0
  228. package/storybook-static/assets/LayoutPicker-CZRoovVS.css +1 -0
  229. package/storybook-static/assets/{LayoutPicker-Dc55ovYM.js → LayoutPicker-DKMVqnzr.js} +1 -1
  230. package/storybook-static/assets/LayoutPicker-I0mjwTRq.js +376 -0
  231. package/storybook-static/assets/LayoutPicker-yb6IMmd2.css +1 -0
  232. package/storybook-static/assets/LayoutPicker.stories-B94m5_5E.js +74 -0
  233. package/storybook-static/assets/Listbox-2CNZxFrM.js +41 -0
  234. package/storybook-static/assets/Listbox-BOCPTICI.js +1 -0
  235. package/storybook-static/assets/Listbox.stories-DkRL364d.js +53 -0
  236. package/storybook-static/assets/{Modal-CXvDgktT.js → Modal-BF5Wtu_Z.js} +1 -1
  237. package/storybook-static/assets/Modal.stories-BuBDjhkS.js +180 -0
  238. package/storybook-static/assets/ModalManagerProvider-DtAfcujR.js +1 -0
  239. package/storybook-static/assets/{MultiSelect-DN4foQlG.js → MultiSelect-B5MJePks.js} +1 -1
  240. package/storybook-static/assets/MultiSelect-B75x42Va.js +2 -0
  241. package/storybook-static/assets/{MultiSelect.stories-CgKNQmma.js → MultiSelect.stories-pCDFxnvP.js} +1 -1
  242. package/storybook-static/assets/{NoData-W7wK8oTW.js → NoData-kWRpCxvl.js} +1 -1
  243. package/storybook-static/assets/{NotificationsHost-D1UoWmF8.js → NotificationsHost-lblab1gc.js} +1 -1
  244. package/storybook-static/assets/{NotificationsHost.stories-BWUuMmPl.js → NotificationsHost.stories-a3NIcVIj.js} +1 -1
  245. package/storybook-static/assets/{ODataMultiSelect-DE1V4el8.js → ODataMultiSelect-BDqBjXSe.js} +1 -1
  246. package/storybook-static/assets/{ODataMultiSelect.stories-Q1DUIL2W.js → ODataMultiSelect.stories-8nYfEOBa.js} +1 -1
  247. package/storybook-static/assets/{ODataSelect-CtoT2Wxx.js → ODataSelect-BmcZs-Q9.js} +1 -1
  248. package/storybook-static/assets/{ODataSelect.stories-DLi7Rwzk.js → ODataSelect.stories-fiEuKGVT.js} +1 -1
  249. package/storybook-static/assets/{ODataTreeMultiSelect-DEZfgyPK.js → ODataTreeMultiSelect-ZAlccR5J.js} +1 -1
  250. package/storybook-static/assets/{ODataTreeMultiSelect.stories-H42q78xI.js → ODataTreeMultiSelect.stories-sP-IANic.js} +1 -1
  251. package/storybook-static/assets/{ODataTreeSelect-BeylEiPN.js → ODataTreeSelect-DSpeH-SQ.js} +1 -1
  252. package/storybook-static/assets/{ODataTreeSelect.stories-MOILmtfY.js → ODataTreeSelect.stories-C_G-ryCy.js} +2 -2
  253. package/storybook-static/assets/{OneStepScroller-BSvYN6QP.js → OneStepScroller-BPYnBbTY.js} +1 -1
  254. package/storybook-static/assets/PeriodSelect-Dj1G9UDW.js +5 -0
  255. package/storybook-static/assets/{PeriodSelect-KQFGCxq6.js → PeriodSelect-v-ybkTTW.js} +1 -1
  256. package/storybook-static/assets/PeriodSelect.stories-DcAJ8fkJ.js +60 -0
  257. package/storybook-static/assets/{PickerSelectionToolbar-Cvv8vTZm.js → PickerSelectionToolbar-7gktfdu3.js} +1 -1
  258. package/storybook-static/assets/{PickerTriggerActions-BBZmXagt.js → PickerTriggerActions-Bd-vIbv8.js} +1 -1
  259. package/storybook-static/assets/{Popover-7YZIq8Fi.js → Popover-5dsoQ1_b.js} +1 -1
  260. package/storybook-static/assets/{Popover-D6gSyjaW.js → Popover-BoMs5h0y.js} +1 -1
  261. package/storybook-static/assets/{Popover.stories-DM69Ztws.js → Popover.stories-CbNVj_hu.js} +1 -1
  262. package/storybook-static/assets/{PresetRangeDateInput-Ch6GapcJ.js → PresetRangeDateInput-BeQMoRpC.js} +1 -1
  263. package/storybook-static/assets/PresetRangeDateInput-DyGnRjp4.js +1 -0
  264. package/storybook-static/assets/PresetRangeDateInput.stories-C7gwDup9.js +15 -0
  265. package/storybook-static/assets/{PresetSelect-C8uIYhPJ.js → PresetSelect-C8e1Xzbh.js} +1 -1
  266. package/storybook-static/assets/RadioButton-blBN8xkq.js +2 -0
  267. package/storybook-static/assets/{RadioButton-BQjiyASl.js → RadioButton-kIVy3cCo.js} +1 -1
  268. package/storybook-static/assets/RadioButton.stories-B8U30Wqk.js +35 -0
  269. package/storybook-static/assets/{RadioGroup-vw4ObVj-.js → RadioGroup-CuWLCtLr.js} +1 -1
  270. package/storybook-static/assets/{RadioGroup-DNqu6WaC.js → RadioGroup-D4fwjGGp.js} +1 -1
  271. package/storybook-static/assets/{RadioGroup.stories-B-WQzZW_.js → RadioGroup.stories-CGo-8-Bv.js} +1 -1
  272. package/storybook-static/assets/{Scrollable-DrxMuH2M.js → Scrollable-CeGzYD_u.js} +1 -1
  273. package/storybook-static/assets/{Select-BxigZNtu.js → Select-rdcqkPnE.js} +1 -1
  274. package/storybook-static/assets/Select-txovgbTh.js +12 -0
  275. package/storybook-static/assets/{Select.stories-BpTrYJSr.js → Select.stories-DPM22VkR.js} +1 -1
  276. package/storybook-static/assets/{SelectOptionContent-RAmgWCOm.js → SelectOptionContent-HqUICxHy.js} +1 -1
  277. package/storybook-static/assets/{SerializableSelect-CA9wjk2m.js → SerializableSelect-btIwjUkv.js} +1 -1
  278. package/storybook-static/assets/{SerializableSelect.stories-DXd4E-3U.js → SerializableSelect.stories-EodX_I8R.js} +1 -1
  279. package/storybook-static/assets/{SingleDateTimeInput-BeFLYUBF.js → SingleDateTimeInput-CMKsQ13r.js} +1 -1
  280. package/storybook-static/assets/SingleDateTimeInput-coulKUC8.js +1 -0
  281. package/storybook-static/assets/SingleDateTimeInput-dwDPQ0HY.css +1 -0
  282. package/storybook-static/assets/SingleDateTimeInput.stories-BkSaW82_.js +78 -0
  283. package/storybook-static/assets/Slider-BDjIIhGp.js +1 -0
  284. package/storybook-static/assets/Slider-BWuie2gr.css +1 -0
  285. package/storybook-static/assets/{Slider-BdWBkKp4.js → Slider-DhBLW1at.js} +1 -1
  286. package/storybook-static/assets/{Slider.stories-CgmOhVBs.js → Slider.stories-DpTr65-r.js} +1 -1
  287. package/storybook-static/assets/SliderInput-BEV5I_1l.js +2 -0
  288. package/storybook-static/assets/{SliderInput-QmF2VQWA.js → SliderInput-CiuILy6K.js} +1 -1
  289. package/storybook-static/assets/SliderInput.stories-CL7SlLhr.js +67 -0
  290. package/storybook-static/assets/{Sortable-D5OTpesH.js → Sortable-CtNygGoQ.js} +1 -1
  291. package/storybook-static/assets/{Sortable.stories-yz3c5EhY.js → Sortable.stories-BbNoyvN9.js} +1 -1
  292. package/storybook-static/assets/{Splitter-DVq6XBul.js → Splitter-BYaydk0U.js} +1 -1
  293. package/storybook-static/assets/{Splitter.stories-CopPw1_p.js → Splitter.stories-Bo2rHdcD.js} +1 -1
  294. package/storybook-static/assets/{StateSelect-ojwXeKmx.js → StateSelect-D2MILxIu.js} +1 -1
  295. package/storybook-static/assets/StateSelect-DNKjfPR-.js +4 -0
  296. package/storybook-static/assets/StateSelect.stories-D_NhQBcN.js +44 -0
  297. package/storybook-static/assets/{StringToggle.stories-ByYMmlXl.js → StringToggle.stories-CS507_cT.js} +1 -1
  298. package/storybook-static/assets/Switch-9gK7d4Is.js +1 -0
  299. package/storybook-static/assets/{Switch-Dy4Pahkn.js → Switch-i3aW21Wi.js} +1 -1
  300. package/storybook-static/assets/Switch.stories-BRIuS4_o.js +26 -0
  301. package/storybook-static/assets/{Table-BO6Oa4JV.js → Table-CytIsA37.js} +1 -1
  302. package/storybook-static/assets/{Table.stories--TpBKwmP.js → Table.stories-DYPLk3TC.js} +1 -1
  303. package/storybook-static/assets/{Tabs-7c93qVyH.js → Tabs-BMee-SUy.js} +1 -1
  304. package/storybook-static/assets/Tabs.stories-KqQTRqYo.js +57 -0
  305. package/storybook-static/assets/TabsBox-B5ugO318.css +1 -0
  306. package/storybook-static/assets/TabsBox-BM1mIOmT.js +2 -0
  307. package/storybook-static/assets/TagInput-ChmW4s9O.css +1 -0
  308. package/storybook-static/assets/TagInput-yEIGCMwZ.js +7 -0
  309. package/storybook-static/assets/TagInput.stories-DmuVnRfR.js +12 -0
  310. package/storybook-static/assets/{Text-BPlJUr3R.js → Text-DUN8T0sU.js} +1 -1
  311. package/storybook-static/assets/{Textarea-D3S4MkiX.js → Textarea-BeKW8LG0.js} +1 -1
  312. package/storybook-static/assets/Textarea-W648f4l-.js +1 -0
  313. package/storybook-static/assets/Textarea.stories-BbZ-hCVF.js +27 -0
  314. package/storybook-static/assets/{TimePanel-C2iZ9Qr6.js → TimePanel-D-RygTSo.js} +1 -1
  315. package/storybook-static/assets/{TimePanel.stories-JTjIv6z1.js → TimePanel.stories-CzVur3oq.js} +1 -1
  316. package/storybook-static/assets/{Toggle-OlKw8qaK.js → Toggle-CCZ3ekPb.js} +1 -1
  317. package/storybook-static/assets/{Toggle-CHmajZE5.js → Toggle-Dc5aTAHb.js} +1 -1
  318. package/storybook-static/assets/{Toggle.stories-k4Z8qQVs.js → Toggle.stories-R3abtezP.js} +1 -1
  319. package/storybook-static/assets/TreeMultiSelect-Bi-LirPw.js +1 -0
  320. package/storybook-static/assets/{TreeMultiSelect-dOg0l7rk.js → TreeMultiSelect-CzKVkvZd.js} +1 -1
  321. package/storybook-static/assets/{TreeMultiSelect.stories-CAzZRxn5.js → TreeMultiSelect.stories-Co_PUawN.js} +1 -1
  322. package/storybook-static/assets/TreePickerBase-BIbhsg5t.js +22 -0
  323. package/storybook-static/assets/{TreePickerBase-DMs9EpFv.css → TreePickerBase-BxLupQDs.css} +1 -1
  324. package/storybook-static/assets/{TreeSelect-CDecTnag.js → TreeSelect-B4G9gk8x.js} +1 -1
  325. package/storybook-static/assets/{TreeSelect-BrNyI_Qx.js → TreeSelect-Dm3zEY1S.js} +1 -1
  326. package/storybook-static/assets/{TreeSelect.stories-BUOw2Rwn.js → TreeSelect.stories-sRek_0PI.js} +1 -1
  327. package/storybook-static/assets/{TreeTable-BXw7lFBk.js → TreeTable-ybfR3-5k.js} +1 -1
  328. package/storybook-static/assets/{TreeTable.stories-z40pruPV.js → TreeTable.stories-BoZjeFKM.js} +1 -1
  329. package/storybook-static/assets/{async-BLDV04P4.js → async-Df2RUQlC.js} +1 -1
  330. package/storybook-static/assets/{blocks-BiaKjftm.js → blocks-BcJ54T3V.js} +3 -3
  331. package/storybook-static/assets/{browserAndReact-DX4H5rjQ.js → browserAndReact-Bfk1cWqT.js} +1 -1
  332. package/storybook-static/assets/{check-fB4gCKB_.js → check-Dl-iF50o.js} +1 -1
  333. package/storybook-static/assets/{chevron-down-B9GH0QvB.js → chevron-down-DOIDj8WF.js} +1 -1
  334. package/storybook-static/assets/{chevron-left-DjbyJeHO.js → chevron-left-DHEBK_X7.js} +1 -1
  335. package/storybook-static/assets/{chevron-right-D29uf09I.js → chevron-right-Cf6T-grH.js} +1 -1
  336. package/storybook-static/assets/{chunk-W22LQPXL-CGkHFiZ0.js → chunk-W22LQPXL-DLMJSt_s.js} +1 -1
  337. package/storybook-static/assets/{circle-alert-Dmd7-WNp.js → circle-alert-DmNt0Uwi.js} +1 -1
  338. package/storybook-static/assets/{circle-check-VtVMsaJJ.js → circle-check-DN8HwnBX.js} +1 -1
  339. package/storybook-static/assets/{components-CsfQDbHv.js → components-DI9O99vY.js} +3 -3
  340. package/storybook-static/assets/{contextMenu-CzdfaUsd.js → contextMenu-DWXX4ZHr.js} +1 -1
  341. package/storybook-static/assets/defaultRenderers-DwI2nLiY.js +1 -0
  342. package/storybook-static/assets/defaultRenderers-tFmVIvt_.css +1 -0
  343. package/storybook-static/assets/{download-CyVhTbv6.js → download-oMaZX_8z.js} +1 -1
  344. package/storybook-static/assets/{filesAndExcel-DlUnL-Uu.js → filesAndExcel-ur50Ve27.js} +1 -1
  345. package/storybook-static/assets/{floating-ui.react-DZ8IyUV4.js → floating-ui.react-zHdvT_EM.js} +1 -1
  346. package/storybook-static/assets/formatters-CVj-3Vn0-BFaHJqZL.js +1 -0
  347. package/storybook-static/assets/{formatters-BTz64vfu.js → formatters-CnFJmQFO.js} +16 -1
  348. package/storybook-static/assets/{formatters-runtime-DVi3RdYb.js → formatters-runtime-LyrD5drJ.js} +1 -1
  349. package/storybook-static/assets/{foundationLib-CFj4J-Pc.js → foundationLib-D-8O61ay.js} +1 -1
  350. package/storybook-static/assets/{hooks-Ch5aYb7R.js → hooks-DbzqJvP-.js} +2 -2
  351. package/storybook-static/assets/iframe-D7iJQEr5.css +1 -0
  352. package/storybook-static/assets/iframe-hjgtoR20.js +1 -0
  353. package/storybook-static/assets/{iframe-DaN-XFub.js → iframe-jqJCNVG-.js} +4 -4
  354. package/storybook-static/assets/{info-Cirk1RKZ.js → info-DTU0XXKY.js} +1 -1
  355. package/storybook-static/assets/{odata-BtfB5Aje.js → odata-BBbQt4pn.js} +1 -1
  356. package/storybook-static/assets/odata-service-B5w4YBao-BW9QLSrS.js +3 -0
  357. package/storybook-static/assets/{odataAndTables-TEZyQ-TZ.js → odataAndTables-VK5X4V6B.js} +1 -1
  358. package/storybook-static/assets/{odataFetchFn-DEKVPDzV.js → odataFetchFn-T6FIbpPz.js} +1 -1
  359. package/storybook-static/assets/{odataStoryFixtures-CDDaJZKW.js → odataStoryFixtures-pMgI1q6n.js} +1 -1
  360. package/storybook-static/assets/{persisted-BzLLmgUK.js → persisted-EtS4vVCD.js} +1 -1
  361. package/storybook-static/assets/{pureUtilities-Dw249t3R.js → pureUtilities-BIjOnY3J.js} +1 -1
  362. package/storybook-static/assets/react-BG6GAoHo.js +9 -0
  363. package/storybook-static/assets/{refresh-cw-BN3JCsXv.js → refresh-cw-1qKqpsOV.js} +1 -1
  364. package/storybook-static/assets/{runtimeAndState-CCVgv3ck.js → runtimeAndState-BorNVnh8.js} +1 -1
  365. package/storybook-static/assets/{settings-2-jtcbbWm5.js → settings-2-CPrjOIso.js} +1 -1
  366. package/storybook-static/assets/{sortable-dNWaObUX.js → sortable-D6C8wTse.js} +1 -1
  367. package/storybook-static/assets/{syntaxhighlighter-T5IQBZDB-hYwVxXYm.js → syntaxhighlighter-T5IQBZDB-ifBULuBx.js} +1 -1
  368. package/storybook-static/assets/{trash-2-DrVfT0z5.js → trash-2-CIrQtNzc.js} +1 -1
  369. package/storybook-static/assets/{triangle-alert-B1Q28Bq9.js → triangle-alert-D3piZGn9.js} +1 -1
  370. package/storybook-static/assets/ui-CD51AD-_.css +1 -0
  371. package/storybook-static/assets/ui.module-kfCm3RIG.js +1 -0
  372. package/storybook-static/assets/{uiClasses-CO3Cdv1E.js → uiClasses-BS9RPcty.js} +1 -1
  373. package/storybook-static/assets/{useODataSelectBase-DlbeGYUP.js → useODataSelectBase-CwDThJRi.js} +1 -1
  374. package/storybook-static/assets/{useODataTreeData-CvsoLfiG.js → useODataTreeData-C4v28uFV.js} +1 -1
  375. package/storybook-static/assets/{usePickerDefaultFilter-DdxyE_i8.js → usePickerDefaultFilter-Be420WNF.js} +1 -1
  376. package/storybook-static/assets/usePickerQuery-BodFjGup.js +1 -0
  377. package/storybook-static/assets/{usePickerTriggerController-BHBjSLtn.js → usePickerTriggerController-BjnU7tfr.js} +1 -1
  378. package/storybook-static/assets/{usePickerTriggerController-DzBkX15M.css → usePickerTriggerController-Q-ULIoGr.css} +1 -1
  379. package/storybook-static/assets/{x-Dh43gJN9.js → x-CaGImgpS.js} +1 -1
  380. package/storybook-static/iframe.html +3 -3
  381. package/storybook-static/index.json +1 -1
  382. package/storybook-static/project.json +1 -1
  383. package/dist/chunks/CalendarView-Z_XWk7aI.js +0 -439
  384. package/dist/chunks/TextEditorLexicalClient-CK8j3RA4.js.map +0 -1
  385. package/dist/chunks/button-BU2kRzwu.js.map +0 -1
  386. package/dist/chunks/check-box-Dd3YFuxd.js.map +0 -1
  387. package/dist/chunks/context-menu-C6RO7soI.js.map +0 -1
  388. package/dist/chunks/date-input-BzExUQnc.js +0 -340
  389. package/dist/chunks/date-input-BzExUQnc.js.map +0 -1
  390. package/dist/chunks/input-Bp6_Ucgr.js.map +0 -1
  391. package/dist/chunks/multi-select-COEkc8Qc.js.map +0 -1
  392. package/dist/chunks/picker-e6IsrMUG.js.map +0 -1
  393. package/dist/chunks/popover-CGU3MlsH.js +0 -222
  394. package/dist/chunks/select-BON0S9Dr.js.map +0 -1
  395. package/dist/chunks/ui.module-BisoTevy.js.map +0 -1
  396. package/storybook-static/assets/Badge-Cr7bAbxa.css +0 -1
  397. package/storybook-static/assets/CalendarView-CqKlnF8k.js +0 -1
  398. package/storybook-static/assets/CheckBox-CT1_Mjc0.css +0 -1
  399. package/storybook-static/assets/ContextMenu-Sv4wfyS3.js +0 -1
  400. package/storybook-static/assets/ContextMenu.stories-CVw3hOvY.js +0 -90
  401. package/storybook-static/assets/DateInput-D8_Oleoy.js +0 -1
  402. package/storybook-static/assets/DateInput-pmGiwdvw.css +0 -1
  403. package/storybook-static/assets/Dialog.stories-lcadmonM.js +0 -31
  404. package/storybook-static/assets/Disclosure-DzVnkjef.css +0 -1
  405. package/storybook-static/assets/Disclosure.stories-BeizaZWP.js +0 -41
  406. package/storybook-static/assets/DropZone.stories-B4J6OZ3T.js +0 -44
  407. package/storybook-static/assets/ExpandableActionPanel.stories-gCrqbhG6.js +0 -20
  408. package/storybook-static/assets/FloatingPopover-D4h-c24R.js +0 -1
  409. package/storybook-static/assets/FormattedTableCell-Dh-kHTOC.js +0 -18
  410. package/storybook-static/assets/Input-BioMOZju.css +0 -1
  411. package/storybook-static/assets/Input-Co--DMHY.js +0 -3
  412. package/storybook-static/assets/InputFile.stories-CypBLWFh.js +0 -36
  413. package/storybook-static/assets/InputFiles.stories-BGwCp7OC.js +0 -33
  414. package/storybook-static/assets/InputImage.stories-CdpOudXI.js +0 -51
  415. package/storybook-static/assets/LayoutPicker-9tLTatHF.css +0 -1
  416. package/storybook-static/assets/LayoutPicker.stories-DXcn-WXQ.js +0 -449
  417. package/storybook-static/assets/Listbox-DF8E6oMR.js +0 -38
  418. package/storybook-static/assets/Listbox.stories-C98_9wX3.js +0 -47
  419. package/storybook-static/assets/Modal.stories-DAC_QwN7.js +0 -180
  420. package/storybook-static/assets/MultiSelect-B-wX6JPo.js +0 -2
  421. package/storybook-static/assets/MultiSelectToken-DDu5n78h.css +0 -1
  422. package/storybook-static/assets/MultiSelectToken-fjW8p4YG.js +0 -1
  423. package/storybook-static/assets/PeriodSelect.stories-BIYx4_Yy.js +0 -64
  424. package/storybook-static/assets/PresetRangeDateInput.stories-Cqd4eb0N.js +0 -15
  425. package/storybook-static/assets/RadioButton.stories-Cbho4i83.js +0 -36
  426. package/storybook-static/assets/Select-X_O4M8Hi.js +0 -12
  427. package/storybook-static/assets/SingleDateTimeInput-mOllNfg2.css +0 -1
  428. package/storybook-static/assets/SingleDateTimeInput.stories-B1aZ754N.js +0 -78
  429. package/storybook-static/assets/Slider-BYrHesOR.js +0 -1
  430. package/storybook-static/assets/Slider-DMDFRH6B.css +0 -1
  431. package/storybook-static/assets/SliderInput.stories-MjSmhiOM.js +0 -68
  432. package/storybook-static/assets/StateSelect.stories-D46m5HNn.js +0 -47
  433. package/storybook-static/assets/Switch.stories-EiAb5Z-D.js +0 -26
  434. package/storybook-static/assets/Tabs-BLkTB6pp.css +0 -1
  435. package/storybook-static/assets/Tabs.stories-DXZ0r2ix.js +0 -58
  436. package/storybook-static/assets/TagInput-LeQAhDgs.css +0 -1
  437. package/storybook-static/assets/TagInput.stories-CoM8rXwa.js +0 -18
  438. package/storybook-static/assets/Textarea.stories-47k8uHdB.js +0 -27
  439. package/storybook-static/assets/TreeMultiSelect-BC_n1Wb-.js +0 -1
  440. package/storybook-static/assets/TreePickerBase-ycYQYQgi.js +0 -22
  441. package/storybook-static/assets/formatters--mhLir82-v41eaI4a.js +0 -1
  442. package/storybook-static/assets/iframe-CJQlmNUm.css +0 -1
  443. package/storybook-static/assets/iframe-Cr7AcW_R.js +0 -1
  444. package/storybook-static/assets/odata-service-DnPlNGpU-Bpd4Zh9L.js +0 -3
  445. package/storybook-static/assets/react-KzpmXJc9.js +0 -9
  446. package/storybook-static/assets/ui-CSPaMpbi.css +0 -1
  447. package/storybook-static/assets/ui.module-DoMIk8Oc.js +0 -1
  448. package/storybook-static/assets/usePickerQuery-6rDaPaB0.js +0 -1
  449. /package/storybook-static/assets/{CheckBox.module-BBzuj5He.js → CheckBox.module-CM_GPl_E.js} +0 -0
  450. /package/storybook-static/assets/{Modal-BL_cTIW7.css → ModalManagerProvider-BL_cTIW7.css} +0 -0
  451. /package/storybook-static/assets/{array-BBSjoTRy-CIRmlF93.js → array-D-_yMMUK-CIRmlF93.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu-tcD3kVAc.js","names":[],"sources":["../../src/context-menu/components/helpers.ts","../../src/context-menu/components/MenuContext.tsx","../../src/context-menu/components/ContextMenuTrigger.tsx","../../src/context-menu/ContextMenu.module.scss","../../src/context-menu/components/MenuContent.tsx","../../src/context-menu/components/MenuGroupLabel.tsx","../../src/context-menu/components/MenuItem.tsx","../../src/context-menu/components/MenuRoot.tsx","../../src/context-menu/components/MenuSeparator.tsx","../../src/context-menu/components/RadialMenuContent.tsx","../../src/context-menu/components/RadialMenuItem.tsx","../../src/context-menu/components/ContextMenu.tsx","../../src/context-menu/components/DropdownMenuTrigger.tsx","../../src/context-menu/components/DropdownMenu.tsx"],"sourcesContent":["import React from \"react\";\n\nexport function assignRef<T>(ref: React.Ref<T> | undefined, value: T) {\n\tif (!ref) return;\n\n\tif (typeof ref === \"function\") {\n\t\tref(value);\n\t\treturn;\n\t}\n\n\t(ref as React.MutableRefObject<T>).current = value;\n}\n\nexport function composeMouseHandlers<T extends HTMLElement>(\n\tuserHandler: ((event: React.MouseEvent<T>) => void) | undefined,\n\tlibraryHandler: (event: React.MouseEvent<T>) => void\n) {\n\treturn (event: React.MouseEvent<T>) => {\n\t\tuserHandler?.(event);\n\t\tif (event.defaultPrevented) return;\n\t\tlibraryHandler(event);\n\t};\n}\n\nexport function composeKeyboardHandlers<T extends HTMLElement>(\n\tuserHandler: ((event: React.KeyboardEvent<T>) => void) | undefined,\n\tlibraryHandler: (event: React.KeyboardEvent<T>) => void\n) {\n\treturn (event: React.KeyboardEvent<T>) => {\n\t\tuserHandler?.(event);\n\t\tif (event.defaultPrevented) return;\n\t\tlibraryHandler(event);\n\t};\n}\n","import { createContext, useContext } from \"react\";\n\nimport { createMissingContextError } from \"@ryuzaki13/react-foundation-lib/error\";\n\nimport type { MenuOpenSource, MenuPoint } from \"@ryuzaki13/react-foundation-lib/context-menu\";\n\nexport type MenuTriggerMode = \"click\" | \"contextmenu\";\n\ninterface MenuContextValue {\n\tmode: MenuTriggerMode;\n\topen: boolean;\n\topenSource: MenuOpenSource | null;\n\tanchorPoint: MenuPoint | null;\n\tfloatingStyles: React.CSSProperties;\n\tfloatingRef: React.RefObject<HTMLElement | null>;\n\ttriggerRef: React.RefObject<HTMLElement | null>;\n\tsetFloating: (node: HTMLElement | null) => void;\n\tregisterTriggerElement: (node: HTMLElement | null) => void;\n\tonTriggerClick: (event: React.MouseEvent<HTMLElement>) => void;\n\tonTriggerContextMenu: (event: React.MouseEvent<HTMLElement>) => void;\n\tonTriggerKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n\tcloseMenu: () => void;\n}\n\nexport const MenuContext = createContext<MenuContextValue | null>(null);\n\nexport function useMenuContext() {\n\tconst context = useContext(MenuContext);\n\tif (!context) {\n\t\tthrow createMissingContextError({\n\t\t\thookName: \"useMenuContext\",\n\t\t\tproviderName: \"MenuRoot\"\n\t\t});\n\t}\n\treturn context;\n}\n","import React, { cloneElement } from \"react\";\n\nimport { assignRef, composeKeyboardHandlers, composeMouseHandlers } from \"./helpers\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface ContextMenuTriggerProps {\n\tchildren: React.ReactElement<React.HTMLAttributes<HTMLElement> & { ref?: React.Ref<HTMLElement> }>;\n}\n\nexport const ContextMenuTrigger: React.FC<ContextMenuTriggerProps> = ({ children }) => {\n\tconst { mode, open, registerTriggerElement, onTriggerContextMenu, onTriggerKeyDown } = useMenuContext();\n\n\tif (mode !== \"contextmenu\") {\n\t\tthrow new Error(\"ContextMenu.Trigger must be used within <ContextMenu>\");\n\t}\n\n\treturn cloneElement(children, {\n\t\tref: (node: HTMLElement | null) => {\n\t\t\tconst childRef = (children.props as { ref?: React.Ref<HTMLElement> }).ref;\n\t\t\tassignRef(childRef, node);\n\t\t\tregisterTriggerElement(node);\n\t\t},\n\t\t\"aria-haspopup\": \"menu\",\n\t\t\"aria-expanded\": open,\n\t\tonContextMenu: composeMouseHandlers(children.props.onContextMenu, onTriggerContextMenu),\n\t\tonKeyDown: composeKeyboardHandlers(children.props.onKeyDown, onTriggerKeyDown)\n\t});\n};\n","@use \"@/styles/mixins\" as *;\n\n.menuPanel {\n\t--menu-max-height: min(22em, calc(100dvh - var(--space-xl)));\n\t--menu-min-width: 13em;\n\t--menu-max-width: min(22em, calc(100dvw - var(--space-xl)));\n\n\tmin-width: var(--menu-min-width);\n\tmax-width: var(--menu-max-width);\n\tpadding: var(--space-xs);\n\n\tbackground-color: var(--surface-0);\n\tborder: var(--border);\n\tborder-radius: var(--radius-sm);\n\tbox-shadow: var(--shadow-md);\n\n\tz-index: var(--z-dropdown);\n\toutline: none;\n}\n\n.menuScroller {\n\tmax-height: var(--menu-max-height);\n\toverflow: auto;\n}\n\n.menuItem {\n\tgap: var(--space-sm);\n}\n\n.menuItemIcon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.menuItemText {\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.menuItemHotKey {\n\tfont-size: var(--font-size-sm);\n}\n\n.radialPanel {\n\tposition: fixed;\n\twidth: var(--radial-panel-size);\n\theight: var(--radial-panel-size);\n\tz-index: var(--z-context-menu, var(--z-dropdown));\n\toutline: none;\n\tpointer-events: none;\n}\n\n.radialRing {\n\tposition: absolute;\n\tinset: calc(var(--radial-item-size) / 2);\n\tborder: var(--border);\n\tborder-radius: 50%;\n\tbackground:\n\t\tradial-gradient(circle, color-mix(in srgb, var(--surface-0) 96%, transparent) 0 36%, transparent 37%),\n\t\tcolor-mix(in srgb, var(--surface-0) 88%, transparent);\n\tbox-shadow: var(--shadow-md);\n\tpointer-events: none;\n}\n\n.radialCenterButton {\n\tposition: absolute;\n\tleft: 50%;\n\ttop: 50%;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: calc(var(--radial-item-size) * 0.72);\n\theight: calc(var(--radial-item-size) * 0.72);\n\tpadding: var(--space-xs);\n\ttransform: translate(-50%, -50%);\n\tborder: var(--border);\n\tborder-radius: 50%;\n\tbackground-color: var(--surface-0);\n\tcolor: var(--content-0);\n\tbox-shadow: var(--shadow-sm);\n\tpointer-events: auto;\n\ttransition:\n\t\tbackground-color var(--transition-fast) ease,\n\t\tborder-color var(--transition-fast) ease,\n\t\tcolor var(--transition-fast) ease,\n\t\ttransform var(--transition-fast) ease;\n\n\t&:focus {\n\t\tbackground-color: var(--surface-1);\n\t\tborder-color: var(--border-1);\n\t}\n\n\t@include hover(true) {\n\t\tbackground-color: var(--surface-accent);\n\t\tcolor: var(--content-accent);\n\t\tcursor: pointer;\n\t\ttransform: translate(-50%, -50%) scale(1.06);\n\t}\n}\n\n.radialCenterButtonText {\n\tmax-width: 100%;\n\toverflow: hidden;\n\ttext-align: center;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tfont-size: var(--font-size-sm);\n\tline-height: 1.1;\n}\n\n.radialItems {\n\tposition: absolute;\n\tinset: 0;\n\tpointer-events: none;\n}\n\n.radialItemSlot {\n\tposition: absolute;\n\tleft: 50%;\n\ttop: 50%;\n\twidth: var(--radial-item-size);\n\theight: var(--radial-item-size);\n\ttransform: rotate(var(--radial-item-angle)) translate(var(--radial-radius)) rotate(calc(var(--radial-item-angle) * -1))\n\t\ttranslate(-50%, -50%);\n\tpointer-events: none;\n}\n\n.radialItem {\n\tdisplay: grid;\n\tgrid-template-rows: 1fr auto;\n\talign-items: center;\n\tjustify-items: center;\n\tgap: 0.15rem;\n\twidth: 100%;\n\theight: 100%;\n\tpadding: var(--space-xs);\n\tborder: var(--border);\n\tborder-radius: 50%;\n\tbackground-color: var(--surface-0);\n\tcolor: var(--content-0);\n\tbox-shadow: var(--shadow-sm);\n\tpointer-events: auto;\n\ttransition:\n\t\tbackground-color var(--transition-fast) ease,\n\t\tborder-color var(--transition-fast) ease,\n\t\tcolor var(--transition-fast) ease,\n\t\ttransform var(--transition-fast) ease;\n\n\t&:focus {\n\t\tbackground-color: var(--surface-1);\n\t\tborder-color: var(--border-1);\n\t}\n\n\t&:disabled,\n\t&[aria-disabled=\"true\"] {\n\t\tcursor: default;\n\t\tcolor: var(--content-2);\n\t\topacity: 0.52;\n\t\tpointer-events: none;\n\t}\n\n\t@include hover(true) {\n\t\tbackground-color: var(--surface-accent);\n\t\tcolor: var(--content-accent);\n\t\tcursor: pointer;\n\t\ttransform: scale(1.06);\n\t}\n}\n\n.radialItemIcon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmin-width: var(--space-md);\n\tmin-height: var(--space-md);\n\n\t> svg {\n\t\twidth: var(--space-md);\n\t\theight: var(--space-md);\n\t}\n}\n\n.radialItemText {\n\tmax-width: 100%;\n\toverflow: hidden;\n\ttext-align: center;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tfont-size: var(--font-size-sm);\n}\n","import React, { useCallback } from \"react\";\n\nimport { useClickOutside, useEscapeDismiss, useOverlayFocus } from \"@ryuzaki13/react-foundation-lib/dom\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { createPortal } from \"react-dom\";\n\nimport styles from \"../ContextMenu.module.scss\";\n\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface MenuContentProps {\n\tchildren: React.ReactNode | ((ctx: { closeMenu: () => void }) => React.ReactNode);\n\tclassName?: string;\n\tcloseOnOutside?: boolean;\n\tcloseOnEscape?: boolean;\n\tdisableOutsideClick?: boolean;\n\trestoreFocus?: boolean;\n}\n\nexport const MenuContent: React.FC<MenuContentProps> = ({\n\tchildren,\n\tclassName,\n\tcloseOnOutside = true,\n\tcloseOnEscape = true,\n\tdisableOutsideClick = false,\n\trestoreFocus = true\n}) => {\n\tconst { open, floatingStyles, floatingRef, triggerRef, setFloating, closeMenu } = useMenuContext();\n\n\tconst getNavigableItems = useCallback(() => {\n\t\tconst floatingElement = floatingRef.current;\n\t\tif (!floatingElement) return [];\n\n\t\treturn Array.from(floatingElement.querySelectorAll<HTMLElement>('[data-menu-item=\"true\"]:not([data-disabled=\"true\"])'));\n\t}, [floatingRef]);\n\n\tuseOverlayFocus<HTMLElement>({\n\t\tactive: open,\n\t\tinitialFocus: (container) => getNavigableItems()[0] ?? container,\n\t\trestoreFocus,\n\t\trestoreFocusTarget: () => triggerRef.current,\n\t\tcontainerRef: floatingRef\n\t});\n\n\tuseEscapeDismiss({\n\t\tactive: open,\n\t\tenabled: closeOnEscape,\n\t\tonDismiss: closeMenu,\n\t\tcontainerRef: floatingRef\n\t});\n\n\tconst outsideClose = useCallback(() => {\n\t\tif (!open || disableOutsideClick) return;\n\t\tif (closeOnOutside) {\n\t\t\tcloseMenu();\n\t\t}\n\t}, [open, disableOutsideClick, closeOnOutside, closeMenu]);\n\n\tuseClickOutside([floatingRef as React.RefObject<HTMLElement>, triggerRef as React.RefObject<HTMLElement>], outsideClose);\n\n\tconst onMenuKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLElement>) => {\n\t\t\tconst items = getNavigableItems();\n\t\t\tif (items.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst activeElement = document.activeElement as HTMLElement | null;\n\t\t\tconst currentIndex = activeElement ? items.indexOf(activeElement) : -1;\n\n\t\t\tif (event.key === \"ArrowDown\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex = currentIndex >= 0 ? (currentIndex + 1) % items.length : 0;\n\t\t\t\titems[nextIndex]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"ArrowUp\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex = currentIndex >= 0 ? (currentIndex - 1 + items.length) % items.length : items.length - 1;\n\t\t\t\titems[nextIndex]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"Home\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\titems[0]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"End\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\titems[items.length - 1]?.focus();\n\t\t\t}\n\t\t},\n\t\t[getNavigableItems]\n\t);\n\n\tif (typeof document === \"undefined\") return null;\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t{open && (\n\t\t\t\t<motion.div\n\t\t\t\t\tref={setFloating}\n\t\t\t\t\tstyle={floatingStyles}\n\t\t\t\t\trole=\"menu\"\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\tclassName={cn(styles.menuPanel, className)}\n\t\t\t\t\tonKeyDown={onMenuKeyDown}\n\t\t\t\t\tinitial={{ opacity: 0, scale: 0.96, y: -2 }}\n\t\t\t\t\tanimate={{ opacity: 1, scale: 1, y: 0 }}\n\t\t\t\t\texit={{ opacity: 0, scale: 0.96, y: -2 }}\n\t\t\t\t\ttransition={{ duration: 0.14, ease: \"easeOut\" }}>\n\t\t\t\t\t<div className={cn(styles.menuScroller, \"scrollable\")}>\n\t\t\t\t\t\t{typeof children === \"function\" ? children({ closeMenu }) : children}\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</AnimatePresence>,\n\t\tdocument.body\n\t);\n};\n","import React from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../../ui.module.scss\";\n\nexport interface MenuGroupLabelProps {\n\tchildren: React.ReactNode;\n\tclassName?: string;\n}\n\nexport const MenuGroupLabel: React.FC<MenuGroupLabelProps> = ({ children, className }) => {\n\treturn <div className={cn(uiStyles.uiPopupGroupLabel, className)}>{children}</div>;\n};\n","import React, { useCallback } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../../ui.module.scss\";\nimport styles from \"../ContextMenu.module.scss\";\n\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface MenuItemProps {\n\tchildren: React.ReactNode;\n\ticon?: React.ReactNode;\n\thotKey?: string;\n\tclassName?: string;\n\tdisabled?: boolean;\n\thref?: string;\n\ttarget?: string;\n\trel?: string;\n\tcloseOnSelect?: boolean;\n\tonSelect?: (event: React.MouseEvent<HTMLElement>) => void;\n}\n\nexport const MenuItem: React.FC<MenuItemProps> = ({\n\tchildren,\n\ticon,\n\thotKey,\n\tclassName,\n\tdisabled,\n\thref,\n\ttarget,\n\trel,\n\tcloseOnSelect = true,\n\tonSelect\n}) => {\n\tconst { closeMenu } = useMenuContext();\n\n\tconst handleClick = useCallback(\n\t\t(event: React.MouseEvent<HTMLElement>) => {\n\t\t\tif (disabled) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tonSelect?.(event);\n\t\t\tif (event.defaultPrevented) return;\n\n\t\t\tif (closeOnSelect) {\n\t\t\t\tcloseMenu();\n\t\t\t}\n\t\t},\n\t\t[disabled, onSelect, closeOnSelect, closeMenu]\n\t);\n\n\tconst rootClassName = cn(uiStyles.uiPopupOption, styles.menuItem, className);\n\n\tif (href) {\n\t\treturn (\n\t\t\t<a\n\t\t\t\thref={href}\n\t\t\t\ttarget={target}\n\t\t\t\trel={rel}\n\t\t\t\trole=\"menuitem\"\n\t\t\t\ttabIndex={-1}\n\t\t\t\taria-disabled={disabled}\n\t\t\t\tdata-menu-item=\"true\"\n\t\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\t\tdata-ui=\"context-menu-item\"\n\t\t\t\tdata-action=\"select-context-menu-item\"\n\t\t\t\tclassName={rootClassName}\n\t\t\t\tonClick={handleClick as React.MouseEventHandler<HTMLAnchorElement>}>\n\t\t\t\t{icon && <span className={cn(uiStyles.uiPopupOptionIcon, styles.menuItemIcon)}>{icon}</span>}\n\t\t\t\t<span className={cn(uiStyles.uiOptionText, styles.menuItemText)}>{children}</span>\n\t\t\t\t{hotKey && <kbd className={cn(uiStyles.keyboard, styles.menuItemHotKey)}>{hotKey}</kbd>}\n\t\t\t</a>\n\t\t);\n\t}\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\trole=\"menuitem\"\n\t\t\ttabIndex={-1}\n\t\t\tdisabled={disabled}\n\t\t\tdata-menu-item=\"true\"\n\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\tdata-ui=\"context-menu-item\"\n\t\t\tdata-action=\"select-context-menu-item\"\n\t\t\tclassName={rootClassName}\n\t\t\tonClick={handleClick as React.MouseEventHandler<HTMLButtonElement>}>\n\t\t\t{icon && <span className={cn(uiStyles.uiPopupOptionIcon, styles.menuItemIcon)}>{icon}</span>}\n\t\t\t<span className={cn(uiStyles.uiOptionText, styles.menuItemText)}>{children}</span>\n\t\t\t{hotKey && <kbd className={cn(uiStyles.keyboard, styles.menuItemHotKey)}>{hotKey}</kbd>}\n\t\t</button>\n\t);\n};\n","import React, { useCallback, useMemo, useRef, useState } from \"react\";\n\nimport { autoUpdate, flip, offset, Placement, shift, useFloating } from \"@floating-ui/react\";\nimport {\n\tcloseMenu,\n\tcreateVirtualAnchor,\n\tgetMenuPointFromEvent,\n\tgetMenuPointFromRect,\n\tinitialMenuState,\n\topenMenu\n} from \"@ryuzaki13/react-foundation-lib/context-menu\";\n\nimport { MenuContext, MenuTriggerMode } from \"./MenuContext\";\n\ninterface MenuRootProps {\n\tchildren: React.ReactNode;\n\tmode: MenuTriggerMode;\n\tplacement?: Placement;\n\topen?: boolean;\n\tdefaultOpen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}\n\nexport const MenuRoot: React.FC<MenuRootProps> = ({\n\tchildren,\n\tmode,\n\tplacement = mode === \"click\" ? \"bottom-start\" : \"right-start\",\n\topen: controlledOpen,\n\tdefaultOpen,\n\tonOpenChange\n}) => {\n\tconst [menuState, setMenuState] = useState(initialMenuState);\n\tconst [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen ?? false);\n\tconst isControlled = controlledOpen !== undefined;\n\tconst open = isControlled ? controlledOpen : uncontrolledOpen;\n\tconst triggerElementRef = useRef<HTMLElement | null>(null);\n\n\tconst { refs, floatingStyles, update } = useFloating({\n\t\tplacement,\n\t\tstrategy: mode === \"contextmenu\" ? \"fixed\" : \"absolute\",\n\t\ttransform: false,\n\t\tmiddleware: [offset(6), flip({ padding: 8 }), shift({ padding: 8 })],\n\t\twhileElementsMounted: autoUpdate\n\t});\n\n\tconst setOpen = useCallback(\n\t\t(nextOpen: boolean) => {\n\t\t\tif (!isControlled) {\n\t\t\t\tsetUncontrolledOpen(nextOpen);\n\t\t\t}\n\t\t\tonOpenChange?.(nextOpen);\n\t\t\tif (!nextOpen) {\n\t\t\t\tsetMenuState((state) => closeMenu(state));\n\t\t\t}\n\t\t},\n\t\t[isControlled, onOpenChange]\n\t);\n\n\tconst closeMenuHandler = useCallback(() => {\n\t\tsetOpen(false);\n\t}, [setOpen]);\n\n\tconst openAtElement = useCallback(\n\t\t(element: HTMLElement, source: \"click\" | \"keyboard\") => {\n\t\t\trefs.setReference(element);\n\t\t\tsetMenuState(\n\t\t\t\topenMenu({\n\t\t\t\t\tsource,\n\t\t\t\t\tanchor: {\n\t\t\t\t\t\ttype: \"element\",\n\t\t\t\t\t\telement\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t\tsetOpen(true);\n\t\t},\n\t\t[refs, setOpen]\n\t);\n\n\tconst openAtPoint = useCallback(\n\t\t(point: { x: number; y: number }, source: \"contextmenu\" | \"keyboard\", contextElement?: HTMLElement | null) => {\n\t\t\trefs.setReference(createVirtualAnchor(point, contextElement));\n\t\t\tsetMenuState(\n\t\t\t\topenMenu({\n\t\t\t\t\tsource,\n\t\t\t\t\tanchor: {\n\t\t\t\t\t\ttype: \"point\",\n\t\t\t\t\t\tpoint,\n\t\t\t\t\t\tcontextElement\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t\tsetOpen(true);\n\t\t\tupdate();\n\t\t},\n\t\t[refs, setOpen, update]\n\t);\n\n\tconst registerTriggerElement = useCallback(\n\t\t(node: HTMLElement | null) => {\n\t\t\ttriggerElementRef.current = node;\n\t\t\tif (mode === \"click\") {\n\t\t\t\trefs.setReference(node);\n\t\t\t}\n\t\t},\n\t\t[mode, refs]\n\t);\n\n\tconst onTriggerClick = useCallback(\n\t\t(event: React.MouseEvent<HTMLElement>) => {\n\t\t\tif (mode !== \"click\") return;\n\t\t\tconst element = event.currentTarget;\n\n\t\t\tif (open && menuState.anchor?.type === \"element\" && menuState.anchor.element === element) {\n\t\t\t\tcloseMenuHandler();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\topenAtElement(element, \"click\");\n\t\t},\n\t\t[mode, open, menuState.anchor, closeMenuHandler, openAtElement]\n\t);\n\n\tconst onTriggerContextMenu = useCallback(\n\t\t(event: React.MouseEvent<HTMLElement>) => {\n\t\t\tif (mode !== \"contextmenu\") return;\n\t\t\tevent.preventDefault();\n\n\t\t\tconst element = event.currentTarget;\n\t\t\tconst point = getMenuPointFromEvent(event);\n\t\t\topenAtPoint(point, \"contextmenu\", element);\n\t\t},\n\t\t[mode, openAtPoint]\n\t);\n\n\tconst onTriggerKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLElement>) => {\n\t\t\tconst isContextMenuKeyboardOpen = event.key === \"ContextMenu\" || (event.shiftKey && event.key === \"F10\");\n\t\t\tif (!isContextMenuKeyboardOpen) return;\n\n\t\t\tevent.preventDefault();\n\t\t\tconst element = event.currentTarget;\n\n\t\t\tif (mode === \"click\") {\n\t\t\t\topenAtElement(element, \"keyboard\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst point = getMenuPointFromRect(element.getBoundingClientRect());\n\t\t\topenAtPoint(point, \"keyboard\", element);\n\t\t},\n\t\t[mode, openAtElement, openAtPoint]\n\t);\n\n\tconst visible = open && menuState.anchor !== null;\n\tconst anchorPoint = useMemo(() => {\n\t\tif (!menuState.anchor) return null;\n\n\t\tif (menuState.anchor.type === \"point\") {\n\t\t\treturn menuState.anchor.point;\n\t\t}\n\n\t\tconst rect = menuState.anchor.element.getBoundingClientRect();\n\t\treturn getMenuPointFromRect(rect);\n\t}, [menuState.anchor]);\n\n\tconst value = useMemo(\n\t\t() => ({\n\t\t\tmode,\n\t\t\topen: visible,\n\t\t\topenSource: menuState.source,\n\t\t\tanchorPoint,\n\t\t\tfloatingStyles,\n\t\t\tfloatingRef: refs.floating,\n\t\t\ttriggerRef: triggerElementRef,\n\t\t\tsetFloating: refs.setFloating,\n\t\t\tregisterTriggerElement,\n\t\t\tonTriggerClick,\n\t\t\tonTriggerContextMenu,\n\t\t\tonTriggerKeyDown,\n\t\t\tcloseMenu: closeMenuHandler\n\t\t}),\n\t\t[\n\t\t\tmode,\n\t\t\tvisible,\n\t\t\tmenuState.source,\n\t\t\tanchorPoint,\n\t\t\tfloatingStyles,\n\t\t\trefs.floating,\n\t\t\trefs.setFloating,\n\t\t\tregisterTriggerElement,\n\t\t\tonTriggerClick,\n\t\t\tonTriggerContextMenu,\n\t\t\tonTriggerKeyDown,\n\t\t\tcloseMenuHandler\n\t\t]\n\t);\n\n\treturn <MenuContext.Provider value={value}>{children}</MenuContext.Provider>;\n};\n","import React from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../../ui.module.scss\";\n\nexport interface MenuSeparatorProps {\n\tclassName?: string;\n}\n\nexport const MenuSeparator: React.FC<MenuSeparatorProps> = ({ className }) => {\n\treturn <div role=\"separator\" className={cn(uiStyles.uiPopupOptionSeparator, className)} />;\n};\n","import React, { Children, useCallback, useEffect, useMemo } from \"react\";\n\nimport { useClickOutside, useEscapeDismiss, useOverlayFocus } from \"@ryuzaki13/react-foundation-lib/dom\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { createPortal } from \"react-dom\";\n\nimport styles from \"../ContextMenu.module.scss\";\n\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface RadialMenuContentProps {\n\tchildren: React.ReactNode | ((ctx: { closeMenu: () => void }) => React.ReactNode);\n\tclassName?: string;\n\tcloseOnOutside?: boolean;\n\tcloseOnEscape?: boolean;\n\tdisableOutsideClick?: boolean;\n\trestoreFocus?: boolean;\n\tradius?: number;\n\titemSize?: number;\n\tcloseLabel?: string;\n}\n\nfunction clamp(value: number, min: number, max: number) {\n\tif (max < min) return min;\n\treturn Math.min(Math.max(value, min), max);\n}\n\nexport const RadialMenuContent: React.FC<RadialMenuContentProps> = ({\n\tchildren,\n\tclassName,\n\tcloseOnOutside = true,\n\tcloseOnEscape = true,\n\tdisableOutsideClick = false,\n\trestoreFocus = true,\n\tradius = 76,\n\titemSize = 64,\n\tcloseLabel = \"Закрыть\"\n}) => {\n\tconst { open, anchorPoint, floatingRef, triggerRef, setFloating, closeMenu } = useMenuContext();\n\n\tconst resolvedChildren = typeof children === \"function\" ? children({ closeMenu }) : children;\n\tconst itemNodes = useMemo(() => Children.toArray(resolvedChildren), [resolvedChildren]);\n\tconst itemCount = itemNodes.length;\n\tconst panelSize = radius * 2 + itemSize;\n\n\tconst panelPoint = useMemo(() => {\n\t\tif (typeof window === \"undefined\" || !anchorPoint) return null;\n\n\t\t// Радиальное меню центрируется на точке вызова, но не выходит за границы viewport.\n\t\tconst safeOffset = panelSize / 2 + 8;\n\t\treturn {\n\t\t\tx: clamp(anchorPoint.x, safeOffset, window.innerWidth - safeOffset),\n\t\t\ty: clamp(anchorPoint.y, safeOffset, window.innerHeight - safeOffset)\n\t\t};\n\t}, [anchorPoint, panelSize]);\n\n\tconst getNavigableItems = useCallback(() => {\n\t\tconst floatingElement = floatingRef.current;\n\t\tif (!floatingElement) return [];\n\n\t\treturn Array.from(floatingElement.querySelectorAll<HTMLElement>('[data-menu-item=\"true\"]:not([data-disabled=\"true\"])'));\n\t}, [floatingRef]);\n\n\tuseOverlayFocus<HTMLElement>({\n\t\tactive: open,\n\t\tinitialFocus: (container) => getNavigableItems()[0] ?? container,\n\t\trestoreFocus,\n\t\trestoreFocusTarget: () => triggerRef.current,\n\t\tcontainerRef: floatingRef\n\t});\n\n\tuseEffect(() => {\n\t\tif (!open || !anchorPoint) return;\n\n\t\tlet rafId = 0;\n\n\t\t/**\n\t\t * Повторный правый клик при уже открытом меню меняет только якорь, поэтому общий\n\t\t * эффект начального фокуса не перезапускается. Возвращаем фокус в меню явно.\n\t\t */\n\t\tconst focusMenuOnReposition = () => {\n\t\t\tconst focusTarget = getNavigableItems()[0] ?? floatingRef.current;\n\t\t\tfocusTarget?.focus();\n\t\t};\n\n\t\trafId = window.requestAnimationFrame(focusMenuOnReposition);\n\t\treturn () => window.cancelAnimationFrame(rafId);\n\t}, [open, anchorPoint, getNavigableItems, floatingRef]);\n\n\tuseEscapeDismiss({\n\t\tactive: open,\n\t\tenabled: closeOnEscape,\n\t\tonDismiss: closeMenu,\n\t\tcontainerRef: floatingRef\n\t});\n\n\tconst outsideClose = useCallback(() => {\n\t\tif (!open || disableOutsideClick) return;\n\t\tif (closeOnOutside) {\n\t\t\tcloseMenu();\n\t\t}\n\t}, [open, disableOutsideClick, closeOnOutside, closeMenu]);\n\n\tuseClickOutside([floatingRef as React.RefObject<HTMLElement>, triggerRef as React.RefObject<HTMLElement>], outsideClose);\n\n\tconst onMenuKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLElement>) => {\n\t\t\tconst items = getNavigableItems();\n\t\t\tif (items.length === 0) return;\n\n\t\t\tconst activeElement = document.activeElement as HTMLElement | null;\n\t\t\tconst currentIndex = activeElement ? items.indexOf(activeElement) : -1;\n\n\t\t\tif (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex = currentIndex >= 0 ? (currentIndex + 1) % items.length : 0;\n\t\t\t\titems[nextIndex]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex = currentIndex >= 0 ? (currentIndex - 1 + items.length) % items.length : items.length - 1;\n\t\t\t\titems[nextIndex]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"Home\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\titems[0]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"End\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\titems[items.length - 1]?.focus();\n\t\t\t}\n\t\t},\n\t\t[getNavigableItems]\n\t);\n\n\tif (typeof document === \"undefined\") return null;\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t{open && panelPoint && (\n\t\t\t\t<motion.div\n\t\t\t\t\tref={setFloating}\n\t\t\t\t\tstyle={\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"--radial-panel-size\": `${panelSize}px`,\n\t\t\t\t\t\t\t\"--radial-radius\": `${radius}px`,\n\t\t\t\t\t\t\t\"--radial-item-size\": `${itemSize}px`,\n\t\t\t\t\t\t\tleft: panelPoint.x - panelSize / 2,\n\t\t\t\t\t\t\ttop: panelPoint.y - panelSize / 2,\n\t\t\t\t\t\t\ttransformOrigin: \"center\"\n\t\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t\t}\n\t\t\t\t\trole=\"menu\"\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\tclassName={cn(styles.radialPanel, className)}\n\t\t\t\t\tonKeyDown={onMenuKeyDown}\n\t\t\t\t\tinitial={{ opacity: 0, scale: 0.78 }}\n\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\texit={{ opacity: 0, scale: 0.78 }}\n\t\t\t\t\ttransition={{ duration: 0.16, ease: \"easeOut\" }}>\n\t\t\t\t\t<div className={styles.radialRing} aria-hidden=\"true\" />\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\t\tclassName={styles.radialCenterButton}\n\t\t\t\t\t\taria-label={closeLabel}\n\t\t\t\t\t\tdata-menu-item=\"true\"\n\t\t\t\t\t\tdata-radial-close=\"true\"\n\t\t\t\t\t\tonClick={closeMenu}>\n\t\t\t\t\t\t<span className={styles.radialCenterButtonText}>{closeLabel}</span>\n\t\t\t\t\t</button>\n\t\t\t\t\t<div className={styles.radialItems}>\n\t\t\t\t\t\t{itemNodes.map((item, index) => {\n\t\t\t\t\t\t\tconst angle = itemCount > 0 ? -90 + (360 / itemCount) * index : -90;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t// Индекс допустим: порядок пунктов полностью задает геометрию кольца.\n\t\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\t\tclassName={styles.radialItemSlot}\n\t\t\t\t\t\t\t\t\tstyle={{ \"--radial-item-angle\": `${angle}deg` } as React.CSSProperties}>\n\t\t\t\t\t\t\t\t\t{item}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</AnimatePresence>,\n\t\tdocument.body\n\t);\n};\n","import React, { useCallback } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport styles from \"../ContextMenu.module.scss\";\n\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface RadialMenuItemProps {\n\tchildren: React.ReactNode;\n\ticon?: React.ReactNode;\n\tclassName?: string;\n\tdisabled?: boolean;\n\tcloseOnSelect?: boolean;\n\tonSelect?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\nexport const RadialMenuItem: React.FC<RadialMenuItemProps> = ({ children, icon, className, disabled, closeOnSelect = true, onSelect }) => {\n\tconst { closeMenu } = useMenuContext();\n\n\tconst handleClick = useCallback(\n\t\t(event: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\tif (disabled) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tonSelect?.(event);\n\t\t\tif (event.defaultPrevented) return;\n\n\t\t\tif (closeOnSelect) {\n\t\t\t\tcloseMenu();\n\t\t\t}\n\t\t},\n\t\t[disabled, onSelect, closeOnSelect, closeMenu]\n\t);\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\trole=\"menuitem\"\n\t\t\ttabIndex={-1}\n\t\t\tdisabled={disabled}\n\t\t\taria-disabled={disabled}\n\t\t\tdata-menu-item=\"true\"\n\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\tdata-ui=\"radial-menu-item\"\n\t\t\tdata-action=\"select-radial-menu-item\"\n\t\t\tclassName={cn(styles.radialItem, className)}\n\t\t\tonClick={handleClick}>\n\t\t\t{icon && <span className={styles.radialItemIcon}>{icon}</span>}\n\t\t\t<span className={styles.radialItemText}>{children}</span>\n\t\t</button>\n\t);\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport React from \"react\";\n\nimport { Placement } from \"@floating-ui/react\";\n\nimport { ContextMenuTrigger } from \"./ContextMenuTrigger\";\nimport { MenuContent } from \"./MenuContent\";\nimport { MenuGroupLabel } from \"./MenuGroupLabel\";\nimport { MenuItem } from \"./MenuItem\";\nimport { MenuRoot } from \"./MenuRoot\";\nimport { MenuSeparator } from \"./MenuSeparator\";\nimport { RadialMenuContent } from \"./RadialMenuContent\";\nimport { RadialMenuItem } from \"./RadialMenuItem\";\n\nexport interface ContextMenuProps {\n\tchildren: React.ReactNode;\n\tplacement?: Placement;\n\topen?: boolean;\n\tdefaultOpen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}\n\nconst ContextMenuRoot: React.FC<ContextMenuProps> = ({ children, placement, open, defaultOpen, onOpenChange }) => {\n\treturn (\n\t\t<MenuRoot mode=\"contextmenu\" placement={placement} open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n\t\t\t{children}\n\t\t</MenuRoot>\n\t);\n};\n\nexport const ContextMenu = Object.assign(ContextMenuRoot, {\n\tTrigger: ContextMenuTrigger,\n\tContent: MenuContent,\n\tRadialContent: RadialMenuContent,\n\tItem: MenuItem,\n\tRadialItem: RadialMenuItem,\n\tSeparator: MenuSeparator,\n\tGroupLabel: MenuGroupLabel\n});\n","import React, { cloneElement } from \"react\";\n\nimport { assignRef, composeKeyboardHandlers, composeMouseHandlers } from \"./helpers\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface DropdownMenuTriggerProps {\n\tchildren: React.ReactElement<React.HTMLAttributes<HTMLElement> & { ref?: React.Ref<HTMLElement> }>;\n}\n\nexport const DropdownMenuTrigger: React.FC<DropdownMenuTriggerProps> = ({ children }) => {\n\tconst { mode, open, registerTriggerElement, onTriggerClick, onTriggerKeyDown } = useMenuContext();\n\n\tif (mode !== \"click\") {\n\t\tthrow new Error(\"DropdownMenu.Trigger must be used within <DropdownMenu>\");\n\t}\n\n\treturn cloneElement(children, {\n\t\tref: (node: HTMLElement | null) => {\n\t\t\tconst childRef = (children.props as { ref?: React.Ref<HTMLElement> }).ref;\n\t\t\tassignRef(childRef, node);\n\t\t\tregisterTriggerElement(node);\n\t\t},\n\t\t\"aria-haspopup\": \"menu\",\n\t\t\"aria-expanded\": open,\n\t\tonClick: composeMouseHandlers(children.props.onClick, onTriggerClick),\n\t\tonKeyDown: composeKeyboardHandlers(children.props.onKeyDown, onTriggerKeyDown)\n\t});\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport React from \"react\";\n\nimport { Placement } from \"@floating-ui/react\";\n\nimport { DropdownMenuTrigger } from \"./DropdownMenuTrigger\";\nimport { MenuContent } from \"./MenuContent\";\nimport { MenuGroupLabel } from \"./MenuGroupLabel\";\nimport { MenuItem } from \"./MenuItem\";\nimport { MenuRoot } from \"./MenuRoot\";\nimport { MenuSeparator } from \"./MenuSeparator\";\n\nexport interface DropdownMenuProps {\n\tchildren: React.ReactNode;\n\tplacement?: Placement;\n\topen?: boolean;\n\tdefaultOpen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}\n\nconst DropdownMenuRoot: React.FC<DropdownMenuProps> = ({ children, placement, open, defaultOpen, onOpenChange }) => {\n\treturn (\n\t\t<MenuRoot mode=\"click\" placement={placement} open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n\t\t\t{children}\n\t\t</MenuRoot>\n\t);\n};\n\nexport const DropdownMenu = Object.assign(DropdownMenuRoot, {\n\tTrigger: DropdownMenuTrigger,\n\tContent: MenuContent,\n\tItem: MenuItem,\n\tSeparator: MenuSeparator,\n\tGroupLabel: MenuGroupLabel\n});\n"],"mappings":"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"}
@@ -0,0 +1,341 @@
1
+ import { r as e } from "./popover-BTT7zSqx.js";
2
+ import { t } from "./ui.module-BfaIVBba.js";
3
+ import { o as n } from "./input-CAw1Loze.js";
4
+ import { n as r, o as i, s as a, t as o } from "./CalendarView-Cfih7hjD.js";
5
+ import { n as s } from "./radio-group-4j2HbemI.js";
6
+ import { useCallback as c, useEffect as l, useMemo as u, useRef as d, useState as f } from "react";
7
+ import { CalendarDaysIcon as p } from "lucide-react";
8
+ import { jsx as m, jsxs as h } from "react/jsx-runtime";
9
+ import { DEFAULT_DATE_PRESET_NAMES as g, formatDate as _, formatDateRange as v, getCalendarPeriod as y, getDatePreset as b, isDateRangeTuple as x, parseDateByFormat as S, resolveDateFormatName as C } from "@ryuzaki13/react-foundation-lib/formatters";
10
+ //#region src/date-input/lib/dateInputValue.ts
11
+ var w = g.date, T = "dd.MM.yyyy", E = " - ";
12
+ function D(e) {
13
+ return e.selectionMode === "day" || e.selectionMode === "week" ? "day" : e.selectionMode === "month" || e.selectionMode === "year" ? e.selectionMode : e.datePickerLevel ?? "day";
14
+ }
15
+ function O(e) {
16
+ return {
17
+ selectionMode: e?.selectionMode,
18
+ weekEndDay: e?.weekEndDay
19
+ };
20
+ }
21
+ function k(e, t) {
22
+ return typeof e == "string" || e === void 0 ? {
23
+ datePreset: e,
24
+ datePickerLevel: t
25
+ } : t && e.datePickerLevel === void 0 ? {
26
+ ...e,
27
+ datePickerLevel: t
28
+ } : e;
29
+ }
30
+ function A(e) {
31
+ let t = C(e, w);
32
+ return b(t) ? t : w;
33
+ }
34
+ function j(e, t) {
35
+ return S(e, A(t.datePreset), {
36
+ defaultFormat: w,
37
+ precision: D(t),
38
+ referenceDate: t.referenceDate
39
+ })?.date ?? null;
40
+ }
41
+ function M(e, t) {
42
+ return y(e, O(t))?.start ?? null;
43
+ }
44
+ function N(e, t) {
45
+ if (!x(e)) return null;
46
+ let [n, r] = e;
47
+ return [M(n, t), P(r, t)];
48
+ }
49
+ function P(e, t) {
50
+ return y(e, O(t))?.end ?? null;
51
+ }
52
+ function F(e) {
53
+ return e?.getTime() ?? null;
54
+ }
55
+ function I(e, t, n) {
56
+ return F(M(e, n)) === F(M(t, n));
57
+ }
58
+ function L(e, t, n) {
59
+ let r = N(e, n), i = N(t, n);
60
+ return F(r?.[0] ?? null) === F(i?.[0] ?? null) && F(r?.[1] ?? null) === F(i?.[1] ?? null);
61
+ }
62
+ function R(e, t, n) {
63
+ if (!e) return "";
64
+ let r = k(t, n), i = y(e, O(r));
65
+ return r.selectionMode === "week" && i ? v(i.start, i.end, A(r.datePreset), { precision: D(r) }) : _(e, A(r.datePreset), { precision: D(r) });
66
+ }
67
+ function z(e, t, n) {
68
+ if (!x(e)) return "";
69
+ let r = k(t, n), [i, a] = e;
70
+ return i && a ? v(i, a, A(r.datePreset), { precision: D(r) }) : i ? `${_(i, A(r.datePreset), { precision: D(r) })}${E}` : "";
71
+ }
72
+ function B(e, t, n) {
73
+ return x(e) ? z(e, t, n) : R(e, t, n);
74
+ }
75
+ function V(e, t, n) {
76
+ let r = k(t, n);
77
+ return M(j(r.selectionMode === "week" ? e.split(E)[0] ?? "" : e, r), r);
78
+ }
79
+ function H(e, t, n) {
80
+ let r = k(t, n), [i = "", a = ""] = e.split(E);
81
+ return [V(i, r), U(a, r)];
82
+ }
83
+ function U(e, t, n) {
84
+ let r = k(t, n);
85
+ return P(j(e, r), r);
86
+ }
87
+ //#endregion
88
+ //#region src/date-input/model/useDateInput.ts
89
+ function W(e) {
90
+ return x(e) ? e[0] ?? e[1] ?? void 0 : e ?? void 0;
91
+ }
92
+ var G = (e) => {
93
+ let t = u(() => {
94
+ let t = {
95
+ selectionMode: e.selectionMode,
96
+ weekEndDay: e.weekEndDay
97
+ };
98
+ return e.selectsRange ? N(e.value, t) : M(e.value, t);
99
+ }, [
100
+ e.selectsRange,
101
+ e.selectionMode,
102
+ e.value,
103
+ e.weekEndDay
104
+ ]), n = u(() => ({
105
+ datePreset: e.datePreset,
106
+ datePickerLevel: e.datePickerLevel,
107
+ selectionMode: e.selectionMode,
108
+ weekEndDay: e.weekEndDay
109
+ }), [
110
+ e.datePickerLevel,
111
+ e.datePreset,
112
+ e.selectionMode,
113
+ e.weekEndDay
114
+ ]), r = B(t, n), i = JSON.stringify([
115
+ e.selectsRange,
116
+ e.datePreset ?? null,
117
+ e.datePickerLevel ?? null,
118
+ e.selectionMode ?? null,
119
+ e.weekEndDay ?? null,
120
+ x(t) ? [t[0]?.getTime() ?? null, t[1]?.getTime() ?? null] : t?.getTime() ?? null
121
+ ]), [a, o] = f(() => ({
122
+ sourceSignature: i,
123
+ selectedDate: t,
124
+ inputValue: r
125
+ })), s = a.sourceSignature === i, c = s ? a.selectedDate : t, l = s ? a.inputValue : r, d = (e) => {
126
+ o((n) => {
127
+ let r = n.sourceSignature === i ? n.selectedDate : t;
128
+ return {
129
+ sourceSignature: i,
130
+ selectedDate: r,
131
+ inputValue: e
132
+ };
133
+ });
134
+ }, p = (e) => {
135
+ o((t) => {
136
+ let n = t.sourceSignature === i ? t.inputValue : r;
137
+ return {
138
+ sourceSignature: i,
139
+ selectedDate: e,
140
+ inputValue: n
141
+ };
142
+ });
143
+ }, m = (e) => B(e, n);
144
+ return {
145
+ inputValue: l,
146
+ setInputValue: d,
147
+ selectedDate: c,
148
+ setSelectedDate: p,
149
+ handleSelect: (t) => {
150
+ let [r, a] = Array.isArray(t) ? t : [t, null];
151
+ if (e.selectsRange) {
152
+ let t = M(r, n), s = P(a, n);
153
+ if (t && s) {
154
+ if (s < t) {
155
+ let t = [M(a, n), P(r, n)];
156
+ o({
157
+ sourceSignature: i,
158
+ selectedDate: t,
159
+ inputValue: m(t)
160
+ }), e.onChange(t);
161
+ } else {
162
+ let n = [t, s];
163
+ o({
164
+ sourceSignature: i,
165
+ selectedDate: n,
166
+ inputValue: m(n)
167
+ }), e.onChange(n);
168
+ }
169
+ return !0;
170
+ }
171
+ let c = [t, null];
172
+ return o({
173
+ sourceSignature: i,
174
+ selectedDate: c,
175
+ inputValue: m(c)
176
+ }), !1;
177
+ }
178
+ let s = M(r, n);
179
+ return o({
180
+ sourceSignature: i,
181
+ selectedDate: s,
182
+ inputValue: m(s)
183
+ }), e.onChange(s), !0;
184
+ },
185
+ formatDate: m,
186
+ parseDate: (t) => {
187
+ let r = {
188
+ ...n,
189
+ referenceDate: W(c)
190
+ };
191
+ return e.selectsRange ? H(t, r) : V(t, r);
192
+ }
193
+ };
194
+ }, K = { selectionModeControl: "-tM-kj" }, q = {
195
+ day: "День",
196
+ week: "Неделя",
197
+ month: "Месяц",
198
+ year: "Год"
199
+ };
200
+ function ee(e, t) {
201
+ let n = new Set(e?.length ? e : r);
202
+ return n.add(t), r.filter((e) => n.has(e));
203
+ }
204
+ function J({ placeholder: r, disabled: u, error: g, onClearError: _, minDate: v, maxDate: y, datePickerLevel: b, selectionMode: S, weekEndDay: C = "sunday", allowSelectionModeChange: w, selectionModeOptions: T, onSelectionModeChange: E, ...D }) {
205
+ let [O, k] = f(!1), [A, j] = f(S ?? "day"), M = S ?? A, N = b ?? "day", P = a(M, N), [F, R] = f(() => ({
206
+ view: P,
207
+ selectionMode: M,
208
+ minDatePickerLevel: N
209
+ })), z = F.selectionMode === M && F.minDatePickerLevel === N && i(F.view, N) ? F.view : P, B = d(D.value), V = {
210
+ selectionMode: M,
211
+ weekEndDay: C
212
+ }, { inputValue: H, setInputValue: U, selectedDate: W, setSelectedDate: J, handleSelect: Y, formatDate: X, parseDate: te } = G({
213
+ ...D,
214
+ datePickerLevel: N,
215
+ selectionMode: M,
216
+ weekEndDay: C
217
+ }), Z = D.selectsRange ? D.onChange : void 0, ne = c((e) => {
218
+ i(e, N) && R({
219
+ view: e,
220
+ selectionMode: M,
221
+ minDatePickerLevel: N
222
+ });
223
+ }, [N, M]);
224
+ l(() => {
225
+ B.current = D.value;
226
+ }, [D.value]);
227
+ let Q = () => {
228
+ if (H) {
229
+ let e = te(H);
230
+ if (e) {
231
+ if (U(X(e)), D.selectsRange && x(e)) {
232
+ if (L(e, x(W) ? W : null, V)) return;
233
+ J(e), D.onChange(e);
234
+ } else if (!D.selectsRange && e instanceof Date) {
235
+ if (I(e, W instanceof Date ? W : null, V)) return;
236
+ J(e), D.onChange(e);
237
+ }
238
+ }
239
+ }
240
+ }, re = (e) => {
241
+ e.key === "Enter" && (e.preventDefault(), Q());
242
+ }, ie = c((e) => {
243
+ Y(e) && k(!1);
244
+ }, [Y]), ae = c((e) => {
245
+ S === void 0 && j(e), E?.(e), R({
246
+ view: a(e, N),
247
+ selectionMode: e,
248
+ minDatePickerLevel: N
249
+ });
250
+ }, [
251
+ S,
252
+ N,
253
+ E
254
+ ]), oe = c(() => {
255
+ if (Z) {
256
+ let [, e] = x(W) ? W : [null, null];
257
+ if (!e) {
258
+ let e = B.current, t = Array.isArray(e) ? e : null, n = t?.[0] ?? null, r = t?.[1] ?? null;
259
+ if (n && r) {
260
+ let e = [n, r];
261
+ J(e), U(X(e)), Z(e);
262
+ } else J([null, null]), U(""), Z([null, null]);
263
+ }
264
+ }
265
+ }, [
266
+ Z,
267
+ W,
268
+ J,
269
+ U,
270
+ X
271
+ ]), $ = ee(T, M), se = w && $.length > 1;
272
+ return /* @__PURE__ */ h(e, {
273
+ open: O,
274
+ onOpenChange: (e) => {
275
+ k(e), e || oe();
276
+ },
277
+ children: [/* @__PURE__ */ m(n, {
278
+ label: D.label,
279
+ description: D.description,
280
+ size: D.size,
281
+ value: H,
282
+ onChange: U,
283
+ onBlur: Q,
284
+ onKeyUp: re,
285
+ placeholder: r,
286
+ disabled: u,
287
+ error: g,
288
+ onClearError: _,
289
+ endAdornmentWidth: "var(--control-height)",
290
+ endAdornment: /* @__PURE__ */ m(e.Trigger, { children: /* @__PURE__ */ m("div", {
291
+ className: t.uiToggleButtonContainer,
292
+ children: /* @__PURE__ */ m("button", {
293
+ type: "button",
294
+ disabled: u,
295
+ "aria-label": "Открыть календарь",
296
+ className: t.uiToggleButton,
297
+ children: /* @__PURE__ */ m(p, {})
298
+ })
299
+ }) })
300
+ }), /* @__PURE__ */ h(e.Content, {
301
+ background: "primary",
302
+ children: [/* @__PURE__ */ m(o, {
303
+ view: z,
304
+ datePickerLevel: N,
305
+ selectionMode: M,
306
+ weekEndDay: C,
307
+ onViewChange: ne,
308
+ value: W ?? null,
309
+ onChange: ie,
310
+ minDate: v,
311
+ maxDate: y,
312
+ selectsRange: !!D.selectsRange
313
+ }), se && /* @__PURE__ */ m("div", {
314
+ className: K.selectionModeControl,
315
+ children: /* @__PURE__ */ m(s, {
316
+ value: M,
317
+ onChange: ae,
318
+ noWrap: !0,
319
+ "aria-label": "Режим выбора даты",
320
+ children: $.map((e) => /* @__PURE__ */ m(s.Option, {
321
+ value: e,
322
+ label: q[e]
323
+ }, e))
324
+ })
325
+ })]
326
+ })]
327
+ });
328
+ }
329
+ function Y(e) {
330
+ return /* @__PURE__ */ m(J, { ...e });
331
+ }
332
+ function X(e) {
333
+ return /* @__PURE__ */ m(J, {
334
+ ...e,
335
+ selectsRange: !0
336
+ });
337
+ }
338
+ //#endregion
339
+ export { L as a, z as c, P as d, M as f, V as h, w as i, R as l, U as m, Y as n, I as o, H as p, T as r, B as s, X as t, N as u };
340
+
341
+ //# sourceMappingURL=date-input-Bsl9dxxY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-input-Bsl9dxxY.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\ttype CalendarPeriodOptions,\n\ttype DateFormatPrecision,\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 = \" - \";\n\nexport type DateInputValueOptions = {\n\t/**\n\t * Имя пресета форматирования даты.\n\t */\n\tdatePreset?: 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 * Приводит результат универсального парсинга к календарной дате.\n */\nfunction parseDateTimeValue(value: string, options: DateInputValueOptions): Date | null {\n\treturn (\n\t\tparseDateByFormat(value, resolveDateInputPresetName(options.datePreset), {\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, resolveDateInputPresetName(options.datePreset), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t});\n\t}\n\n\treturn formatDate(date, resolveDateInputPresetName(options.datePreset), {\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, resolveDateInputPresetName(options.datePreset), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t});\n\t}\n\n\tif (startDate) {\n\t\treturn `${formatDate(startDate, resolveDateInputPresetName(options.datePreset), {\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 { 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 externalSelectedDate = 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\tconst formatOptions = useMemo<DateInputValueOptions>(\n\t\t() => ({\n\t\t\tdatePreset: options.datePreset,\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.datePickerLevel, options.datePreset, options.selectionMode, options.weekEndDay]\n\t);\n\tconst externalInputValue = formatDateInputValue(externalSelectedDate, formatOptions);\n\tconst externalStateSignature = JSON.stringify([\n\t\toptions.selectsRange,\n\t\toptions.datePreset ?? null,\n\t\toptions.datePickerLevel ?? null,\n\t\toptions.selectionMode ?? null,\n\t\toptions.weekEndDay ?? null,\n\t\tisDateRangeTuple(externalSelectedDate)\n\t\t\t? [externalSelectedDate[0]?.getTime() ?? null, externalSelectedDate[1]?.getTime() ?? null]\n\t\t\t: (externalSelectedDate?.getTime() ?? null)\n\t]);\n\tconst [draftState, setDraftState] = useState(() => ({\n\t\tsourceSignature: externalStateSignature,\n\t\tselectedDate: externalSelectedDate,\n\t\tinputValue: externalInputValue\n\t}));\n\tconst hasCurrentDraft = draftState.sourceSignature === externalStateSignature;\n\tconst selectedDate = hasCurrentDraft ? draftState.selectedDate : externalSelectedDate;\n\tconst inputValue = hasCurrentDraft ? draftState.inputValue : externalInputValue;\n\n\t/**\n\t * Сохраняет пользовательский текст только относительно текущего controlled-снимка.\n\t * При внешней смене value или формата отображение сразу выводится из новых props.\n\t */\n\tconst setInputValue = (nextInputValue: string) => {\n\t\tsetDraftState((currentState) => {\n\t\t\tconst currentSelectedDate =\n\t\t\t\tcurrentState.sourceSignature === externalStateSignature ? currentState.selectedDate : externalSelectedDate;\n\n\t\t\treturn {\n\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\tselectedDate: currentSelectedDate,\n\t\t\t\tinputValue: nextInputValue\n\t\t\t};\n\t\t});\n\t};\n\n\t/**\n\t * Обновляет локальный незавершённый выбор, не зеркаля controlled value через effect.\n\t */\n\tconst setSelectedDate = (nextSelectedDate: Date | NullableDateRange | null) => {\n\t\tsetDraftState((currentState) => {\n\t\t\tconst currentInputValue =\n\t\t\t\tcurrentState.sourceSignature === externalStateSignature ? currentState.inputValue : externalInputValue;\n\n\t\t\treturn {\n\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\tselectedDate: nextSelectedDate,\n\t\t\t\tinputValue: currentInputValue\n\t\t\t};\n\t\t});\n\t};\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 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\tsetDraftState({\n\t\t\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\t\t\tselectedDate: swappedRange,\n\t\t\t\t\t\tinputValue: formatValue(swappedRange)\n\t\t\t\t\t});\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\tsetDraftState({\n\t\t\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\t\t\tselectedDate: nextRange,\n\t\t\t\t\t\tinputValue: formatValue(nextRange)\n\t\t\t\t\t});\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\tsetDraftState({\n\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\tselectedDate: nextRange,\n\t\t\t\tinputValue: formatValue(nextRange)\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\n\t\tconst normalizedDate = normalizeSingleDateValue(selectedStartDate, formatOptions);\n\t\tsetDraftState({\n\t\t\tsourceSignature: externalStateSignature,\n\t\t\tselectedDate: normalizedDate,\n\t\t\tinputValue: formatValue(normalizedDate)\n\t\t});\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",".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 { InputText } from \"../../input\";\nimport { Popover } from \"../../popover\";\nimport { RadioGroup } from \"../../radio-group\";\nimport { UiBaseProps } from \"../../types\";\nimport uiStyles from \"../../ui.module.scss\";\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\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<div className={uiStyles.uiToggleButtonContainer}>\n\t\t\t\t\t\t\t<button type=\"button\" disabled={disabled} aria-label=\"Открыть календарь\" className={uiStyles.uiToggleButton}>\n\t\t\t\t\t\t\t\t<CalendarDaysIcon />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\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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"}
@@ -35,8 +35,8 @@ var r = e(({ placement: e, middlewareData: r }, i) => /* @__PURE__ */ t("div", {
35
35
  width: "16",
36
36
  height: "16",
37
37
  viewBox: "0 0 16 16",
38
- fill: "var(--border-1)",
39
- stroke: "var(--border-1)",
38
+ fill: "var(--border-2)",
39
+ stroke: "var(--border-2)",
40
40
  strokeWidth: "var(--border-width)",
41
41
  style: { display: "block" },
42
42
  children: /* @__PURE__ */ t("polygon", { points: "8,8 16,16 0,16" })
@@ -45,4 +45,4 @@ var r = e(({ placement: e, middlewareData: r }, i) => /* @__PURE__ */ t("div", {
45
45
  //#endregion
46
46
  export { r as t };
47
47
 
48
- //# sourceMappingURL=floating-arrow-BE-z4QkE.js.map
48
+ //# sourceMappingURL=floating-arrow-DPKwJfww.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"floating-arrow-BE-z4QkE.js","names":[],"sources":["../../src/floating-arrow/getArrowStyle.ts","../../src/floating-arrow/FloatingArrow.tsx"],"sourcesContent":["import { MiddlewareData } from \"@floating-ui/react\";\n\nexport function getArrowStyle(placement: string, middlewareData?: MiddlewareData): React.CSSProperties {\n\tif (!middlewareData?.arrow) return {};\n\n\tconst { x, y } = middlewareData.arrow;\n\tconst place = placement.split(\"-\")[0];\n\n\tconst staticSide = {\n\t\ttop: \"bottom\",\n\t\tright: \"left\",\n\t\tbottom: \"top\",\n\t\tleft: \"right\"\n\t}[place] as keyof React.CSSProperties;\n\n\tconst rotate = {\n\t\ttop: \"rotate(180deg)\",\n\t\tright: \"rotate(-90deg)\",\n\t\tbottom: \"rotate(0deg)\",\n\t\tleft: \"rotate(90deg)\"\n\t}[place] as keyof React.CSSProperties;\n\n\treturn {\n\t\tpointerEvents: \"none\",\n\t\tposition: \"absolute\",\n\t\tzIndex: -5,\n\t\twidth: \"16px\",\n\t\theight: \"16px\",\n\t\tleft: x != null ? `${x}px` : \"\",\n\t\ttop: y != null ? `${y}px` : \"\",\n\t\ttransform: rotate,\n\t\t[staticSide]: \"-16px\" // позиция стрелки в зависимости от стороны\n\t};\n}\n","import { forwardRef } from \"react\";\n\nimport { MiddlewareData, Placement } from \"@floating-ui/react\";\n\nimport { getArrowStyle } from \"./getArrowStyle\";\n\ninterface TooltipArrowProps {\n\tplacement: Placement;\n\tmiddlewareData: MiddlewareData;\n}\n\nexport const FloatingArrow = forwardRef<HTMLDivElement, TooltipArrowProps>(({ placement, middlewareData }, ref) => {\n\treturn (\n\t\t<div ref={ref} style={getArrowStyle(placement, middlewareData)}>\n\t\t\t<svg\n\t\t\t\twidth=\"16\"\n\t\t\t\theight=\"16\"\n\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\tfill=\"var(--border-1)\"\n\t\t\t\tstroke=\"var(--border-1)\"\n\t\t\t\tstrokeWidth=\"var(--border-width)\"\n\t\t\t\tstyle={{ display: \"block\" }}>\n\t\t\t\t<polygon points=\"8,8 16,16 0,16\" />\n\t\t\t</svg>\n\t\t</div>\n\t);\n});\n"],"mappings":";;;AAEA,SAAgB,EAAc,GAAmB,GAAsD;CACtG,IAAI,CAAC,GAAgB,OAAO,OAAO,CAAC;CAEpC,IAAM,EAAE,MAAG,SAAM,EAAe,OAC1B,IAAQ,EAAU,MAAM,GAAG,CAAC,CAAC,IAE7B,IAAa;EAClB,KAAK;EACL,OAAO;EACP,QAAQ;EACR,MAAM;CACP,EAAE,IAEI,IAAS;EACd,KAAK;EACL,OAAO;EACP,QAAQ;EACR,MAAM;CACP,EAAE;CAEF,OAAO;EACN,eAAe;EACf,UAAU;EACV,QAAQ;EACR,OAAO;EACP,QAAQ;EACR,MAAM,KAAK,OAAkB,KAAX,GAAG,EAAE;EACvB,KAAK,KAAK,OAAkB,KAAX,GAAG,EAAE;EACtB,WAAW;GACV,IAAa;CACf;AACD;;;ACtBA,IAAa,IAAgB,GAA+C,EAAE,cAAW,qBAAkB,MAEzG,kBAAC,OAAD;CAAU;CAAK,OAAO,EAAc,GAAW,CAAc;CAC5D,UAAA,kBAAC,OAAD;EACC,OAAM;EACN,QAAO;EACP,SAAQ;EACR,MAAK;EACL,QAAO;EACP,aAAY;EACZ,OAAO,EAAE,SAAS,QAAQ;EAC1B,UAAA,kBAAC,WAAD,EAAS,QAAO,iBAAkB,CAAA;CAC9B,CAAA;AACD,CAAA,CAEN"}
1
+ {"version":3,"file":"floating-arrow-DPKwJfww.js","names":[],"sources":["../../src/floating-arrow/getArrowStyle.ts","../../src/floating-arrow/FloatingArrow.tsx"],"sourcesContent":["import { MiddlewareData } from \"@floating-ui/react\";\n\nexport function getArrowStyle(placement: string, middlewareData?: MiddlewareData): React.CSSProperties {\n\tif (!middlewareData?.arrow) return {};\n\n\tconst { x, y } = middlewareData.arrow;\n\tconst place = placement.split(\"-\")[0];\n\n\tconst staticSide = {\n\t\ttop: \"bottom\",\n\t\tright: \"left\",\n\t\tbottom: \"top\",\n\t\tleft: \"right\"\n\t}[place] as keyof React.CSSProperties;\n\n\tconst rotate = {\n\t\ttop: \"rotate(180deg)\",\n\t\tright: \"rotate(-90deg)\",\n\t\tbottom: \"rotate(0deg)\",\n\t\tleft: \"rotate(90deg)\"\n\t}[place] as keyof React.CSSProperties;\n\n\treturn {\n\t\tpointerEvents: \"none\",\n\t\tposition: \"absolute\",\n\t\tzIndex: -5,\n\t\twidth: \"16px\",\n\t\theight: \"16px\",\n\t\tleft: x != null ? `${x}px` : \"\",\n\t\ttop: y != null ? `${y}px` : \"\",\n\t\ttransform: rotate,\n\t\t[staticSide]: \"-16px\" // позиция стрелки в зависимости от стороны\n\t};\n}\n","import { forwardRef } from \"react\";\n\nimport { MiddlewareData, Placement } from \"@floating-ui/react\";\n\nimport { getArrowStyle } from \"./getArrowStyle\";\n\ninterface TooltipArrowProps {\n\tplacement: Placement;\n\tmiddlewareData: MiddlewareData;\n}\n\nexport const FloatingArrow = forwardRef<HTMLDivElement, TooltipArrowProps>(({ placement, middlewareData }, ref) => {\n\treturn (\n\t\t<div ref={ref} style={getArrowStyle(placement, middlewareData)}>\n\t\t\t<svg\n\t\t\t\twidth=\"16\"\n\t\t\t\theight=\"16\"\n\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\tfill=\"var(--border-2)\"\n\t\t\t\tstroke=\"var(--border-2)\"\n\t\t\t\tstrokeWidth=\"var(--border-width)\"\n\t\t\t\tstyle={{ display: \"block\" }}>\n\t\t\t\t<polygon points=\"8,8 16,16 0,16\" />\n\t\t\t</svg>\n\t\t</div>\n\t);\n});\n"],"mappings":";;;AAEA,SAAgB,EAAc,GAAmB,GAAsD;CACtG,IAAI,CAAC,GAAgB,OAAO,OAAO,CAAC;CAEpC,IAAM,EAAE,MAAG,SAAM,EAAe,OAC1B,IAAQ,EAAU,MAAM,GAAG,CAAC,CAAC,IAE7B,IAAa;EAClB,KAAK;EACL,OAAO;EACP,QAAQ;EACR,MAAM;CACP,EAAE,IAEI,IAAS;EACd,KAAK;EACL,OAAO;EACP,QAAQ;EACR,MAAM;CACP,EAAE;CAEF,OAAO;EACN,eAAe;EACf,UAAU;EACV,QAAQ;EACR,OAAO;EACP,QAAQ;EACR,MAAM,KAAK,OAAkB,KAAX,GAAG,EAAE;EACvB,KAAK,KAAK,OAAkB,KAAX,GAAG,EAAE;EACtB,WAAW;GACV,IAAa;CACf;AACD;;;ACtBA,IAAa,IAAgB,GAA+C,EAAE,cAAW,qBAAkB,MAEzG,kBAAC,OAAD;CAAU;CAAK,OAAO,EAAc,GAAW,CAAc;CAC5D,UAAA,kBAAC,OAAD;EACC,OAAM;EACN,QAAO;EACP,SAAQ;EACR,MAAK;EACL,QAAO;EACP,aAAY;EACZ,OAAO,EAAE,SAAS,QAAQ;EAC1B,UAAA,kBAAC,WAAD,EAAS,QAAO,iBAAkB,CAAA;CAC9B,CAAA;AACD,CAAA,CAEN"}