@ryuzaki13/react-foundation-ui 1.0.8 → 1.0.12

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 (633) hide show
  1. package/README.md +457 -10
  2. package/dist/advanced-search/index.js +11 -11
  3. package/dist/badge/index.js +1 -1
  4. package/dist/base-table/index.js +1 -1
  5. package/dist/button/index.js +2 -23
  6. package/dist/check-box/index.js +1 -1
  7. package/dist/chunks/{CalendarView-DjeTJkTT.js → CalendarView-DCQjO2ho.js} +2 -2
  8. package/dist/chunks/{CalendarView-DjeTJkTT.js.map → CalendarView-DCQjO2ho.js.map} +1 -1
  9. package/dist/chunks/{odata-DSW7z3nh.js → SelectOptionContent-lfEtHXfO.js} +404 -381
  10. package/dist/chunks/SelectOptionContent-lfEtHXfO.js.map +1 -0
  11. package/dist/chunks/{TextEditorLexicalClient-16S18Yir.js → TextEditorLexicalClient-Bca3FOUs.js} +8 -8
  12. package/dist/chunks/{TextEditorLexicalClient-16S18Yir.js.map → TextEditorLexicalClient-Bca3FOUs.js.map} +1 -1
  13. package/dist/chunks/{BadgeList-DYgun2rf.js → badge-BfbLPk0z.js} +2 -2
  14. package/dist/chunks/badge-BfbLPk0z.js.map +1 -0
  15. package/dist/chunks/{base-table-CoQlKABk.js → base-table-CiYSRI_J.js} +4 -4
  16. package/dist/chunks/{base-table-CoQlKABk.js.map → base-table-CiYSRI_J.js.map} +1 -1
  17. package/dist/chunks/button-CC0Jdx1j.js +72 -0
  18. package/dist/chunks/button-CC0Jdx1j.js.map +1 -0
  19. package/dist/chunks/{CheckBox-BowNqqd3.js → check-box-BowNqqd3.js} +1 -1
  20. package/dist/chunks/check-box-BowNqqd3.js.map +1 -0
  21. package/dist/chunks/{DropdownMenu-DQeR3y7M.js → context-menu-DQeR3y7M.js} +1 -1
  22. package/dist/chunks/context-menu-DQeR3y7M.js.map +1 -0
  23. package/dist/chunks/{DateInput-BTJ-QTUx.js → date-input-DjAQ75n9.js} +5 -5
  24. package/dist/chunks/date-input-DjAQ75n9.js.map +1 -0
  25. package/dist/chunks/{DateRangePresetSelect-UgsfaOeM.js → date-range-preset-select-UgsfaOeM.js} +1 -1
  26. package/dist/chunks/date-range-preset-select-UgsfaOeM.js.map +1 -0
  27. package/dist/chunks/{Flex-DUYSL5TE.js → flex-CPO6xlPR.js} +38 -33
  28. package/dist/chunks/{Flex-DUYSL5TE.js.map → flex-CPO6xlPR.js.map} +1 -1
  29. package/dist/chunks/{Grid-ByIIytjh.js → grid-ByIIytjh.js} +1 -1
  30. package/dist/chunks/{Grid-ByIIytjh.js.map → grid-ByIIytjh.js.map} +1 -1
  31. package/dist/chunks/{Input-anSjiM9b.js → input-CZLUUggm.js} +10 -2
  32. package/dist/chunks/input-CZLUUggm.js.map +1 -0
  33. package/dist/chunks/{InputFiles-XBQxkHdB.js → input-files-aB8iaqGk.js} +5 -5
  34. package/dist/chunks/input-files-aB8iaqGk.js.map +1 -0
  35. package/dist/chunks/{input-search-B_njjJuV.js → input-search-eMvnvgV0.js} +2 -2
  36. package/dist/chunks/{input-search-B_njjJuV.js.map → input-search-eMvnvgV0.js.map} +1 -1
  37. package/dist/chunks/{misc-DoqZBMof.js → misc-1PxS8OWD.js} +2 -2
  38. package/dist/chunks/{misc-DoqZBMof.js.map → misc-1PxS8OWD.js.map} +1 -1
  39. package/dist/chunks/{modal-ByNRME3b.js → modal-C0j0hEIt.js} +5 -5
  40. package/dist/chunks/{modal-ByNRME3b.js.map → modal-C0j0hEIt.js.map} +1 -1
  41. package/dist/chunks/multi-select-r0ekR6Bh.js +541 -0
  42. package/dist/chunks/multi-select-r0ekR6Bh.js.map +1 -0
  43. package/dist/chunks/{picker-Du7Y4-el.js → picker-beNX-cW9.js} +11 -11
  44. package/dist/chunks/{picker-Du7Y4-el.js.map → picker-beNX-cW9.js.map} +1 -1
  45. package/dist/chunks/{RadioGroup-B9XjkcOy.js → radio-group-B9XjkcOy.js} +1 -1
  46. package/dist/chunks/radio-group-B9XjkcOy.js.map +1 -0
  47. package/dist/chunks/select-CFbZS7fx.js +284 -0
  48. package/dist/chunks/select-CFbZS7fx.js.map +1 -0
  49. package/dist/chunks/{table-Dc3AqMzP.js → table-BR2VqeEg.js} +2 -2
  50. package/dist/chunks/{table-Dc3AqMzP.js.map → table-BR2VqeEg.js.map} +1 -1
  51. package/dist/chunks/{toolbar-BCZNdRXM.js → toolbar-XCDeS2Li.js} +2 -2
  52. package/dist/chunks/{toolbar-BCZNdRXM.js.map → toolbar-XCDeS2Li.js.map} +1 -1
  53. package/dist/chunks/{useODataSelectBase-BbeKdq6x.js → useODataSelectBase-BxAvhDww.js} +2 -2
  54. package/dist/chunks/{useODataSelectBase-BbeKdq6x.js.map → useODataSelectBase-BxAvhDww.js.map} +1 -1
  55. package/dist/context-menu/index.js +1 -1
  56. package/dist/date-input/index.js +2 -2
  57. package/dist/date-range-preset-select/index.js +1 -1
  58. package/dist/date-time-input/index.js +458 -2
  59. package/dist/date-time-input/index.js.map +1 -0
  60. package/dist/detail/index.js +80 -2
  61. package/dist/detail/index.js.map +1 -0
  62. package/dist/dialog/index.js +50 -2
  63. package/dist/dialog/index.js.map +1 -0
  64. package/dist/disclosure/index.js +49 -2
  65. package/dist/disclosure/index.js.map +1 -0
  66. package/dist/drop-zone/index.js +98 -2
  67. package/dist/drop-zone/index.js.map +1 -0
  68. package/dist/errors/index.js +1 -1
  69. package/dist/expandable-action-panel/index.js +82 -2
  70. package/dist/expandable-action-panel/index.js.map +1 -0
  71. package/dist/flex/index.js +2 -14
  72. package/dist/grid/index.js +1 -1
  73. package/dist/image/index.js +5 -5
  74. package/dist/input/index.js +2 -14
  75. package/dist/input-date-time/index.js +258 -2
  76. package/dist/input-date-time/index.js.map +1 -0
  77. package/dist/input-file/index.js +105 -2
  78. package/dist/input-file/index.js.map +1 -0
  79. package/dist/input-files/index.js +1 -1
  80. package/dist/input-image/index.js +100 -2
  81. package/dist/input-image/index.js.map +1 -0
  82. package/dist/input-search/index.js +1 -1
  83. package/dist/layout-picker/index.js +1171 -2
  84. package/dist/layout-picker/index.js.map +1 -0
  85. package/dist/list/index.js +2 -2
  86. package/dist/listbox/index.js +81 -2
  87. package/dist/listbox/index.js.map +1 -0
  88. package/dist/misc/index.js +1 -1
  89. package/dist/modal/index.js +1 -1
  90. package/dist/multi-select/index.js +2 -3
  91. package/dist/notifications/index.js +151 -3
  92. package/dist/notifications/index.js.map +1 -0
  93. package/dist/picker/index.js +1 -1
  94. package/dist/preset-range-date-input/index.js +52 -3
  95. package/dist/preset-range-date-input/index.js.map +1 -1
  96. package/dist/preset-select/index.js +1 -1
  97. package/dist/radio-button/index.js +48 -2
  98. package/dist/radio-button/index.js.map +1 -0
  99. package/dist/radio-group/index.js +1 -1
  100. package/dist/select/index.js +2 -4
  101. package/dist/simple-table/index.js +1 -1
  102. package/dist/slider/index.js +695 -2
  103. package/dist/slider/index.js.map +1 -0
  104. package/dist/splitter/index.js +168 -2
  105. package/dist/splitter/index.js.map +1 -0
  106. package/dist/state-select/index.js +78 -2
  107. package/dist/state-select/index.js.map +1 -0
  108. package/dist/styles.css +1 -1
  109. package/dist/switch/index.js +81 -2
  110. package/dist/switch/index.js.map +1 -0
  111. package/dist/table/index.js +1 -1
  112. package/dist/table-sorting/index.js +1 -1
  113. package/dist/tabs/index.js +384 -2
  114. package/dist/tabs/index.js.map +1 -0
  115. package/dist/text-editor/index.js +3 -3
  116. package/dist/text-editor/toolbar/index.js +1 -1
  117. package/dist/textarea/index.js +44 -2
  118. package/dist/textarea/index.js.map +1 -0
  119. package/dist/toggle/index.js +73 -2
  120. package/dist/toggle/index.js.map +1 -0
  121. package/dist/toolbar/index.js +2 -3
  122. package/dist/toolbar/index.js.map +1 -1
  123. package/dist/tree-select/index.js +569 -89
  124. package/dist/tree-select/index.js.map +1 -1
  125. package/dist/tree-table/index.js +1 -1
  126. package/package.json +5 -304
  127. package/src/styles/_base.scss +11 -3
  128. package/src/styles/config/_index.scss +97 -113
  129. package/src/styles/mixins/_mixin.scss +4 -4
  130. package/src/styles/themes/dark/_default.scss +0 -17
  131. package/storybook-static/assets/Badge-Cr7bAbxa.css +1 -0
  132. package/storybook-static/assets/Badge-Q8iX86Mn.js +139 -0
  133. package/storybook-static/assets/Badge.stories-BEMBzR2f.js +51 -0
  134. package/storybook-static/assets/Button-BN8Cuwsy.css +1 -0
  135. package/storybook-static/assets/Button-BUkCW8Zg.js +12 -0
  136. package/storybook-static/assets/Button-CfX05aoR.js +124 -0
  137. package/storybook-static/assets/Button.stories-BoNLZb6w.js +75 -0
  138. package/storybook-static/assets/CheckBox-B1xm2kwz.css +1 -0
  139. package/storybook-static/assets/CheckBox-CcXGzkSE.js +42 -0
  140. package/storybook-static/assets/CheckBox-DTSi8Yok.js +2 -0
  141. package/storybook-static/assets/CheckBox.module-Hr3mvdAC.js +1 -0
  142. package/storybook-static/assets/CheckBox.stories-Bo53TxC7.js +60 -0
  143. package/storybook-static/assets/Color-KMSTOMOX-Mbprgrbi.js +1 -0
  144. package/storybook-static/assets/ContextMenu-DYlSojIE.js +40 -0
  145. package/storybook-static/assets/ContextMenu.stories-BJr53bsq.js +90 -0
  146. package/storybook-static/assets/DateInput-Bc-MiPp1.css +1 -0
  147. package/storybook-static/assets/DateInput-BrmilavO.js +40 -0
  148. package/storybook-static/assets/DateInput-C72jV86j.js +1 -0
  149. package/storybook-static/assets/DateInput.stories-0hU_T1iZ.js +115 -0
  150. package/storybook-static/assets/DateRangePresetSelect-BklzgpCR.js +3 -0
  151. package/storybook-static/assets/DateRangePresetSelect-C7gJVkMB.js +30 -0
  152. package/storybook-static/assets/DateRangePresetSelect.stories-DQKDcAdP.js +11 -0
  153. package/storybook-static/assets/Detail-BKSBSfTO.css +1 -0
  154. package/storybook-static/assets/Detail-BMu0MY4h.js +40 -0
  155. package/storybook-static/assets/Detail.stories-CgBJjWQd.js +44 -0
  156. package/storybook-static/assets/Dialog-M7Uy3LiO.js +40 -0
  157. package/storybook-static/assets/Dialog.stories-BZ0opvaJ.js +31 -0
  158. package/storybook-static/assets/Disclosure-BXnfHC6v.js +29 -0
  159. package/storybook-static/assets/Disclosure-zNgXNDkm.css +1 -0
  160. package/storybook-static/assets/Disclosure.stories-C7wh6KJU.js +35 -0
  161. package/storybook-static/assets/DocsRenderer-JROSPFPF-BjXFJaat.js +2 -0
  162. package/storybook-static/assets/DropZone-C7HIN5ml.css +1 -0
  163. package/storybook-static/assets/DropZone-cd1aCNT1.js +36 -0
  164. package/storybook-static/assets/DropZone.stories-CVu731Lk.js +44 -0
  165. package/storybook-static/assets/DropdownMenu-B97Ad5Dg.js +1 -0
  166. package/storybook-static/assets/DropdownMenu-BgzIzwzM.css +1 -0
  167. package/storybook-static/assets/ExpandableActionPanel-D7q9two4.css +1 -0
  168. package/storybook-static/assets/ExpandableActionPanel.stories-k-eTxMyV.js +20 -0
  169. package/storybook-static/assets/Flex-BQkqAqL5.js +61 -0
  170. package/storybook-static/assets/Flex-C_VnI9xY.js +3 -0
  171. package/storybook-static/assets/Flex-IXK2se1Y.css +1 -0
  172. package/storybook-static/assets/Flex.stories-C1VO9Ct3.js +300 -0
  173. package/storybook-static/assets/Grid-Dr3BuEgd.js +61 -0
  174. package/storybook-static/assets/Grid-K9R_IHaw.css +1 -0
  175. package/storybook-static/assets/Grid-y8wKyEwc.js +163 -0
  176. package/storybook-static/assets/Grid.stories-6WUp6Tof.js +495 -0
  177. package/storybook-static/assets/Input-B7DWcGCL.js +3 -0
  178. package/storybook-static/assets/Input-BioMOZju.css +1 -0
  179. package/storybook-static/assets/Input-yly8wxYE.js +39 -0
  180. package/storybook-static/assets/Input.stories-CkVqvY-C.js +38 -0
  181. package/storybook-static/assets/InputDateTime-Cv8gmBe0.css +1 -0
  182. package/storybook-static/assets/InputDateTime-DHirw8rp.js +39 -0
  183. package/storybook-static/assets/InputDateTime.stories-Dci_81MA.js +35 -0
  184. package/storybook-static/assets/InputFile-DBFfWIkJ.js +37 -0
  185. package/storybook-static/assets/InputFile-hNjZ_wlG.css +1 -0
  186. package/storybook-static/assets/InputFile.stories-Bar27dP5.js +36 -0
  187. package/storybook-static/assets/InputFiles-ByK52qUe.css +1 -0
  188. package/storybook-static/assets/InputFiles-DPz7PiOC.js +1 -0
  189. package/storybook-static/assets/InputFiles-tULKp1KR.js +37 -0
  190. package/storybook-static/assets/InputFiles.stories-CkZ8et32.js +33 -0
  191. package/storybook-static/assets/InputImage-C-pnIXhT.css +1 -0
  192. package/storybook-static/assets/InputImage-D8VckxKl.js +37 -0
  193. package/storybook-static/assets/InputImage.stories-Dq8ORce3.js +51 -0
  194. package/storybook-static/assets/LayoutPicker-9tLTatHF.css +1 -0
  195. package/storybook-static/assets/LayoutPicker-l3XFAkqv.js +65 -0
  196. package/storybook-static/assets/LayoutPicker.stories-BjUmm2cg.js +449 -0
  197. package/storybook-static/assets/Listbox-B_6QVPAJ.js +38 -0
  198. package/storybook-static/assets/Listbox.stories-Cf_ApbmT.js +47 -0
  199. package/storybook-static/assets/Modal-BL_cTIW7.css +1 -0
  200. package/storybook-static/assets/Modal-BzienAaa.js +54 -0
  201. package/storybook-static/assets/Modal.stories-cPIHRa9a.js +180 -0
  202. package/storybook-static/assets/MultiSelect-CK2D25RA.js +56 -0
  203. package/storybook-static/assets/MultiSelect-CUQV67Ev.css +1 -0
  204. package/storybook-static/assets/MultiSelect-CjGBd2pC.js +2 -0
  205. package/storybook-static/assets/MultiSelect.stories--f_FoBzR.js +29 -0
  206. package/storybook-static/assets/NotificationsHost-D5Pvn4eu.css +1 -0
  207. package/storybook-static/assets/NotificationsHost-DKmlmqh0.js +44 -0
  208. package/storybook-static/assets/NotificationsHost.stories-1bPUJXfm.js +25 -0
  209. package/storybook-static/assets/ODataMultiSelect-BWUXuzlr.js +53 -0
  210. package/storybook-static/assets/ODataMultiSelect.stories-DA0f6SUG.js +73 -0
  211. package/storybook-static/assets/ODataSelect-D7GAFOcM.js +1 -0
  212. package/storybook-static/assets/ODataSelect-aNdHSjo_.js +52 -0
  213. package/storybook-static/assets/ODataSelect.stories-CjXA9Y9l.js +73 -0
  214. package/storybook-static/assets/ODataTreeMultiSelect-DKodulQ8.js +17 -0
  215. package/storybook-static/assets/ODataTreeMultiSelect.stories-BjRcb4W0.js +24 -0
  216. package/storybook-static/assets/ODataTreeSelect-Ck8HCh74.js +16 -0
  217. package/storybook-static/assets/ODataTreeSelect.stories-BgDj08mH.js +21 -0
  218. package/storybook-static/assets/PeriodSelect-Db7QmUfi.js +35 -0
  219. package/storybook-static/assets/PeriodSelect.stories-BI6yLRCK.js +23 -0
  220. package/storybook-static/assets/Popover-DR-r8iC5.js +45 -0
  221. package/storybook-static/assets/Popover.stories-ReRFMWiO.js +69 -0
  222. package/storybook-static/assets/PresetRangeDateInput-tSpiPAT9.js +31 -0
  223. package/storybook-static/assets/PresetRangeDateInput.stories-LVQa2_DG.js +15 -0
  224. package/storybook-static/assets/RadioButton-C-RjN-wY.css +1 -0
  225. package/storybook-static/assets/RadioButton-sEzdlL1y.js +38 -0
  226. package/storybook-static/assets/RadioButton.stories-CR0km0zF.js +36 -0
  227. package/storybook-static/assets/RadioGroup-BtNCd3Je.js +1 -0
  228. package/storybook-static/assets/RadioGroup-D-J7t20C.css +1 -0
  229. package/storybook-static/assets/RadioGroup-DR0H6Z0w.js +42 -0
  230. package/storybook-static/assets/RadioGroup.stories-FEqmkrs7.js +42 -0
  231. package/storybook-static/assets/Select-CO4ZHP9h.css +1 -0
  232. package/storybook-static/assets/Select-CUAevk01.js +57 -0
  233. package/storybook-static/assets/Select-DYVS7SCZ.js +9 -0
  234. package/storybook-static/assets/Select.stories-Df_c0IfC.js +37 -0
  235. package/storybook-static/assets/SelectOptionContent-B7W0Mned.js +1 -0
  236. package/storybook-static/assets/SerializableSelect-D63xBqOT.js +48 -0
  237. package/storybook-static/assets/SerializableSelect-DwCnuBgv.js +4 -0
  238. package/storybook-static/assets/SerializableSelect.stories-BLPXVOtP.js +43 -0
  239. package/storybook-static/assets/SingleDateTimeInput-mOllNfg2.css +1 -0
  240. package/storybook-static/assets/SingleDateTimeInput-xMkDodYz.js +53 -0
  241. package/storybook-static/assets/SingleDateTimeInput.stories-kcuSwx76.js +78 -0
  242. package/storybook-static/assets/Slider-BHZgpCjC.js +63 -0
  243. package/storybook-static/assets/Slider.stories-Bias_Soq.js +77 -0
  244. package/storybook-static/assets/SliderInput-jzFZcWr7.js +58 -0
  245. package/storybook-static/assets/SliderInput.stories-B7w8bp86.js +67 -0
  246. package/storybook-static/assets/Sortable-DcmDaPBw.js +72 -0
  247. package/storybook-static/assets/Sortable.stories-CwhHGCih.js +141 -0
  248. package/storybook-static/assets/Splitter-Bn7AJiD_.js +83 -0
  249. package/storybook-static/assets/Splitter-D-LmmQad.css +1 -0
  250. package/storybook-static/assets/Splitter.stories-CSvjKF-O.js +22 -0
  251. package/storybook-static/assets/StateSelect-MIGiXD10.js +36 -0
  252. package/storybook-static/assets/StateSelect-pIMkhj9A.css +1 -0
  253. package/storybook-static/assets/StateSelect.stories-BGDCnVqb.js +47 -0
  254. package/storybook-static/assets/Switch-C5zxOq_O.js +36 -0
  255. package/storybook-static/assets/Switch-DGYGWtPw.css +1 -0
  256. package/storybook-static/assets/Switch.stories-BmCl_Ts5.js +26 -0
  257. package/storybook-static/assets/Table-BGvRn9y0.css +1 -0
  258. package/storybook-static/assets/Table-CoySXvs5.js +197 -0
  259. package/storybook-static/assets/Table.stories-CA7ARhwC.js +122 -0
  260. package/storybook-static/assets/Tabs-BLkTB6pp.css +1 -0
  261. package/storybook-static/assets/Tabs-CQdzU18E.js +72 -0
  262. package/storybook-static/assets/Tabs.stories-SBWTpiy2.js +58 -0
  263. package/storybook-static/assets/Textarea-Bo-I0cnE.js +37 -0
  264. package/storybook-static/assets/Textarea-CPNMR88I.css +1 -0
  265. package/storybook-static/assets/Textarea.stories-C1wO9PKR.js +27 -0
  266. package/storybook-static/assets/TimePanel-0-mzaXky.js +1 -0
  267. package/storybook-static/assets/TimePanel-Bh98qsCo.css +1 -0
  268. package/storybook-static/assets/TimePanel.stories-C1VM13qN.js +25 -0
  269. package/storybook-static/assets/Toggle-B9H63WWC.js +37 -0
  270. package/storybook-static/assets/Toggle-DHulCX3T.css +1 -0
  271. package/storybook-static/assets/Toggle.stories-CKlGFcZW.js +30 -0
  272. package/storybook-static/assets/TreeMultiSelect-AXIl2Ge2.js +15 -0
  273. package/storybook-static/assets/TreeMultiSelect-Ci3bUpmv.js +1 -0
  274. package/storybook-static/assets/TreeMultiSelect.stories-CXGt4Q_u.js +14 -0
  275. package/storybook-static/assets/TreePickerBase-Md6Mt9qF.js +19 -0
  276. package/storybook-static/assets/TreePickerBase-qreyVjhY.css +1 -0
  277. package/storybook-static/assets/TreeSelect-BWoURakw.js +15 -0
  278. package/storybook-static/assets/TreeSelect-bOgRYtQQ.js +1 -0
  279. package/storybook-static/assets/TreeSelect.stories-By0h6wRi.js +16 -0
  280. package/storybook-static/assets/TreeTable--ZoksUiw.css +1 -0
  281. package/storybook-static/assets/TreeTable-C52Jh7O_.js +175 -0
  282. package/storybook-static/assets/TreeTable.stories-BH9Q8NPP.js +83 -0
  283. package/storybook-static/assets/WithTooltip-7X4HQR7L-DQXHhZoH.js +9 -0
  284. package/storybook-static/assets/axe-GLfyhAYL.js +20 -0
  285. package/storybook-static/assets/base-table-BNO0lnTL.css +1 -0
  286. package/storybook-static/assets/base-table-BSkQBgdx.js +18 -0
  287. package/storybook-static/assets/blocks-CwEU-ME1.js +285 -0
  288. package/storybook-static/assets/button-Bl3Hu8CS.js +1 -0
  289. package/storybook-static/assets/check-box-BrnNQnSi.js +1 -0
  290. package/storybook-static/assets/chunk-242VQQM5-Dtm7LRbQ.js +1 -0
  291. package/storybook-static/assets/chunk-3LY4VQVK-BxHCYS2R.js +6 -0
  292. package/storybook-static/assets/chunk-LITCR56V-euffoZAN.js +18 -0
  293. package/storybook-static/assets/contextMenu-Do6qEwKB.js +2 -0
  294. package/storybook-static/assets/date-segments-CzU9k5bl.js +1 -0
  295. package/storybook-static/assets/error-RVOk7zpw.js +1 -0
  296. package/storybook-static/assets/file-hArYcyES.js +1 -0
  297. package/storybook-static/assets/flex-DuYzsEBQ.js +1 -0
  298. package/storybook-static/assets/floating-ui.react-BR04wkLx.js +1 -0
  299. package/storybook-static/assets/formatter-L2YTDE3Q-Cdp-Jp2M.js +1 -0
  300. package/storybook-static/assets/formatters-yIBztcem.js +3 -0
  301. package/storybook-static/assets/grid-D0WOuGlB.js +1 -0
  302. package/storybook-static/assets/hooks-BEB2Gqy0.js +5 -0
  303. package/storybook-static/assets/iframe-SfMJGCsn.js +1117 -0
  304. package/storybook-static/assets/input-Be5K9_B7.js +1 -0
  305. package/storybook-static/assets/jsx-runtime-BBQGix-2.js +1 -0
  306. package/storybook-static/assets/lucide-react-CK2oyDtF.js +1 -0
  307. package/storybook-static/assets/matchers-JIUQ3HVY-BPS-eazD.js +28 -0
  308. package/storybook-static/assets/mdx-react-shim-DnKFgFHy.js +1 -0
  309. package/storybook-static/assets/media-Djn0SUaN.js +1 -0
  310. package/storybook-static/assets/misc-CPvLzCFJ.js +5 -0
  311. package/storybook-static/assets/misc-CerLA5Xh.css +1 -0
  312. package/storybook-static/assets/notifications-Zk996KvR.js +1 -0
  313. package/storybook-static/assets/odata-C2BNbnc9.js +1 -0
  314. package/storybook-static/assets/odata-service-8sDCOQ3I.js +1 -0
  315. package/storybook-static/assets/odataStoryFixtures-BBfdskiC.js +25 -0
  316. package/storybook-static/assets/picker-BmTTr59E.css +1 -0
  317. package/storybook-static/assets/picker-De4ZbESe.js +1 -0
  318. package/storybook-static/assets/popover-BiQHI7Wi.css +1 -0
  319. package/storybook-static/assets/popover-DWA5VOMQ.js +2 -0
  320. package/storybook-static/assets/preload-helper-B45gAKPr.js +1 -0
  321. package/storybook-static/assets/preset-select-DozCGhmu.js +5 -0
  322. package/storybook-static/assets/react-18-CfpYK14y.js +9 -0
  323. package/storybook-static/assets/react-BWN-5oQj.js +9 -0
  324. package/storybook-static/assets/react-dom-CncQzc_h.js +1 -0
  325. package/storybook-static/assets/select-BPvMbVDe.js +1 -0
  326. package/storybook-static/assets/slider-39Mty47U.js +2 -0
  327. package/storybook-static/assets/slider-DMDFRH6B.css +1 -0
  328. package/storybook-static/assets/sortable-CgCCp3dq.js +1 -0
  329. package/storybook-static/assets/sortable-DiBavgm0.css +1 -0
  330. package/storybook-static/assets/syntaxhighlighter-RTCFPKCB-Di6cCrDX.js +6 -0
  331. package/storybook-static/assets/text-BxA8yj6Z.js +4 -0
  332. package/storybook-static/assets/theming-DZauqOKI.js +39 -0
  333. package/storybook-static/assets/treeStoryFixtures-Cd984L7t.js +1 -0
  334. package/storybook-static/assets/ui-CmVy0trY.js +1 -0
  335. package/storybook-static/assets/ui-ZWM9zG1I.css +1 -0
  336. package/storybook-static/assets/ui.module-DS2qtZts.js +1 -0
  337. package/storybook-static/assets/uiClasses-CZ_HVS3Y.js +1 -0
  338. package/storybook-static/assets/useODataSelectBase-D33B4x2W.js +1 -0
  339. package/storybook-static/assets/useODataTreeData-CDdzN-LC.js +1 -0
  340. package/storybook-static/assets/utils-CReRlw17.js +1 -0
  341. package/storybook-static/favicon-wrapper.svg +46 -0
  342. package/storybook-static/favicon.svg +1 -0
  343. package/storybook-static/iframe.html +709 -0
  344. package/storybook-static/index.html +146 -0
  345. package/storybook-static/index.json +1 -0
  346. package/storybook-static/nunito-sans-bold-italic.woff2 +0 -0
  347. package/storybook-static/nunito-sans-bold.woff2 +0 -0
  348. package/storybook-static/nunito-sans-italic.woff2 +0 -0
  349. package/storybook-static/nunito-sans-regular.woff2 +0 -0
  350. package/storybook-static/project.json +1 -0
  351. package/storybook-static/sb-addons/a11y-2/manager-bundle.js +57 -0
  352. package/storybook-static/sb-addons/docs-1/manager-bundle.js +3 -0
  353. package/storybook-static/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +630 -0
  354. package/storybook-static/sb-common-assets/favicon-wrapper.svg +46 -0
  355. package/storybook-static/sb-common-assets/favicon.svg +1 -0
  356. package/storybook-static/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
  357. package/storybook-static/sb-common-assets/nunito-sans-bold.woff2 +0 -0
  358. package/storybook-static/sb-common-assets/nunito-sans-italic.woff2 +0 -0
  359. package/storybook-static/sb-common-assets/nunito-sans-regular.woff2 +0 -0
  360. package/storybook-static/sb-manager/globals-runtime.js +76714 -0
  361. package/storybook-static/sb-manager/globals.js +24 -0
  362. package/storybook-static/sb-manager/manager-stores.js +23 -0
  363. package/storybook-static/sb-manager/runtime.js +27451 -0
  364. package/storybook-static/vite-inject-mocker-entry.js +2 -0
  365. package/dist/badge/stories/Badge.stories.d.ts +0 -54
  366. package/dist/badge/stories/Badge.stories.d.ts.map +0 -1
  367. package/dist/badge/stories/Badge.stories.js +0 -147
  368. package/dist/badge/stories/Badge.stories.js.map +0 -1
  369. package/dist/button/index.js.map +0 -1
  370. package/dist/button/stories/Button.stories.d.ts +0 -69
  371. package/dist/button/stories/Button.stories.d.ts.map +0 -1
  372. package/dist/button/stories/Button.stories.js +0 -223
  373. package/dist/button/stories/Button.stories.js.map +0 -1
  374. package/dist/check-box/stories/CheckBox.stories.d.ts +0 -58
  375. package/dist/check-box/stories/CheckBox.stories.d.ts.map +0 -1
  376. package/dist/check-box/stories/CheckBox.stories.js +0 -150
  377. package/dist/check-box/stories/CheckBox.stories.js.map +0 -1
  378. package/dist/chunks/BadgeList-DYgun2rf.js.map +0 -1
  379. package/dist/chunks/Button-CCWuggdA.js +0 -55
  380. package/dist/chunks/Button-CCWuggdA.js.map +0 -1
  381. package/dist/chunks/CheckBox-BowNqqd3.js.map +0 -1
  382. package/dist/chunks/DateInput-BTJ-QTUx.js.map +0 -1
  383. package/dist/chunks/DateRangePresetSelect-UgsfaOeM.js.map +0 -1
  384. package/dist/chunks/Detail-DHDMsg8q.js +0 -80
  385. package/dist/chunks/Detail-DHDMsg8q.js.map +0 -1
  386. package/dist/chunks/Dialog-CFIvGxER.js +0 -50
  387. package/dist/chunks/Dialog-CFIvGxER.js.map +0 -1
  388. package/dist/chunks/DisclosureGroup-CfRTkl6Z.js +0 -49
  389. package/dist/chunks/DisclosureGroup-CfRTkl6Z.js.map +0 -1
  390. package/dist/chunks/DropZone-DgDMu4Iw.js +0 -98
  391. package/dist/chunks/DropZone-DgDMu4Iw.js.map +0 -1
  392. package/dist/chunks/DropdownMenu-DQeR3y7M.js.map +0 -1
  393. package/dist/chunks/Input-anSjiM9b.js.map +0 -1
  394. package/dist/chunks/InputDateTime-BGLJ_pbV.js +0 -258
  395. package/dist/chunks/InputDateTime-BGLJ_pbV.js.map +0 -1
  396. package/dist/chunks/InputFile-B5E0prk_.js +0 -105
  397. package/dist/chunks/InputFile-B5E0prk_.js.map +0 -1
  398. package/dist/chunks/InputFiles-XBQxkHdB.js.map +0 -1
  399. package/dist/chunks/InputImage-Bs6cFQIo.js +0 -100
  400. package/dist/chunks/InputImage-Bs6cFQIo.js.map +0 -1
  401. package/dist/chunks/LabeledExpandableActionPanel-D3kUvmFH.js +0 -82
  402. package/dist/chunks/LabeledExpandableActionPanel-D3kUvmFH.js.map +0 -1
  403. package/dist/chunks/Listbox-BZlp5qHz.js +0 -81
  404. package/dist/chunks/Listbox-BZlp5qHz.js.map +0 -1
  405. package/dist/chunks/MultiSelect-DblDAklj.js +0 -422
  406. package/dist/chunks/MultiSelect-DblDAklj.js.map +0 -1
  407. package/dist/chunks/NotificationsHost-_icJx4xR.js +0 -151
  408. package/dist/chunks/NotificationsHost-_icJx4xR.js.map +0 -1
  409. package/dist/chunks/PresetRangeDateInput-Bytk5sAs.js +0 -53
  410. package/dist/chunks/PresetRangeDateInput-Bytk5sAs.js.map +0 -1
  411. package/dist/chunks/RadioButton-D0uA0rX_.js +0 -48
  412. package/dist/chunks/RadioButton-D0uA0rX_.js.map +0 -1
  413. package/dist/chunks/RadioGroup-B9XjkcOy.js.map +0 -1
  414. package/dist/chunks/Select-ClBs-16a.js +0 -182
  415. package/dist/chunks/Select-ClBs-16a.js.map +0 -1
  416. package/dist/chunks/SelectOptionContent-CI7wq9Oi.js +0 -27
  417. package/dist/chunks/SelectOptionContent-CI7wq9Oi.js.map +0 -1
  418. package/dist/chunks/SerializableSelect-Ds8wp2_p.js +0 -33
  419. package/dist/chunks/SerializableSelect-Ds8wp2_p.js.map +0 -1
  420. package/dist/chunks/SingleDateTimeInput-kXrkLAAI.js +0 -331
  421. package/dist/chunks/SingleDateTimeInput-kXrkLAAI.js.map +0 -1
  422. package/dist/chunks/Splitter-BFkVGVRb.js +0 -168
  423. package/dist/chunks/Splitter-BFkVGVRb.js.map +0 -1
  424. package/dist/chunks/StateSelect-BzUsurDe.js +0 -78
  425. package/dist/chunks/StateSelect-BzUsurDe.js.map +0 -1
  426. package/dist/chunks/Switch-B57Qmy1z.js +0 -81
  427. package/dist/chunks/Switch-B57Qmy1z.js.map +0 -1
  428. package/dist/chunks/Textarea-CLyGS1h9.js +0 -44
  429. package/dist/chunks/Textarea-CLyGS1h9.js.map +0 -1
  430. package/dist/chunks/TimePanel-b4saqoUY.js +0 -135
  431. package/dist/chunks/TimePanel-b4saqoUY.js.map +0 -1
  432. package/dist/chunks/Toggle-DVqOQXmt.js +0 -73
  433. package/dist/chunks/Toggle-DVqOQXmt.js.map +0 -1
  434. package/dist/chunks/TreeMultiSelect-mIG8VKx8.js +0 -40
  435. package/dist/chunks/TreeMultiSelect-mIG8VKx8.js.map +0 -1
  436. package/dist/chunks/TreePickerBase-C9HEABt5.js +0 -423
  437. package/dist/chunks/TreePickerBase-C9HEABt5.js.map +0 -1
  438. package/dist/chunks/TreeSelect-B9rb_fbI.js +0 -37
  439. package/dist/chunks/TreeSelect-B9rb_fbI.js.map +0 -1
  440. package/dist/chunks/layout-picker-CSLuIUVZ.js +0 -1171
  441. package/dist/chunks/layout-picker-CSLuIUVZ.js.map +0 -1
  442. package/dist/chunks/multi-select-ei7LHBCv.js +0 -126
  443. package/dist/chunks/multi-select-ei7LHBCv.js.map +0 -1
  444. package/dist/chunks/odata-DSW7z3nh.js.map +0 -1
  445. package/dist/chunks/select-Ds7_EAGN.js +0 -81
  446. package/dist/chunks/select-Ds7_EAGN.js.map +0 -1
  447. package/dist/chunks/slider-uU26AeGu.js +0 -695
  448. package/dist/chunks/slider-uU26AeGu.js.map +0 -1
  449. package/dist/chunks/tabs-DlnVVMJl.js +0 -384
  450. package/dist/chunks/tabs-DlnVVMJl.js.map +0 -1
  451. package/dist/chunks/treeStoryFixtures-Bhm3Gdky.js +0 -113
  452. package/dist/chunks/treeStoryFixtures-Bhm3Gdky.js.map +0 -1
  453. package/dist/context-menu/stories/ContextMenu.stories.d.ts +0 -16
  454. package/dist/context-menu/stories/ContextMenu.stories.d.ts.map +0 -1
  455. package/dist/context-menu/stories/ContextMenu.stories.js +0 -136
  456. package/dist/context-menu/stories/ContextMenu.stories.js.map +0 -1
  457. package/dist/date-input/stories/DateInput.stories.d.ts +0 -132
  458. package/dist/date-input/stories/DateInput.stories.d.ts.map +0 -1
  459. package/dist/date-input/stories/DateInput.stories.js +0 -247
  460. package/dist/date-input/stories/DateInput.stories.js.map +0 -1
  461. package/dist/date-range-preset-select/stories/DateRangePresetSelect.stories.d.ts +0 -22
  462. package/dist/date-range-preset-select/stories/DateRangePresetSelect.stories.d.ts.map +0 -1
  463. package/dist/date-range-preset-select/stories/DateRangePresetSelect.stories.js +0 -41
  464. package/dist/date-range-preset-select/stories/DateRangePresetSelect.stories.js.map +0 -1
  465. package/dist/date-time-input/stories/SingleDateTimeInput.stories.d.ts +0 -95
  466. package/dist/date-time-input/stories/SingleDateTimeInput.stories.d.ts.map +0 -1
  467. package/dist/date-time-input/stories/SingleDateTimeInput.stories.js +0 -195
  468. package/dist/date-time-input/stories/SingleDateTimeInput.stories.js.map +0 -1
  469. package/dist/date-time-input/stories/TimePanel.stories.d.ts +0 -26
  470. package/dist/date-time-input/stories/TimePanel.stories.d.ts.map +0 -1
  471. package/dist/date-time-input/stories/TimePanel.stories.js +0 -53
  472. package/dist/date-time-input/stories/TimePanel.stories.js.map +0 -1
  473. package/dist/detail/stories/Detail.stories.d.ts +0 -67
  474. package/dist/detail/stories/Detail.stories.d.ts.map +0 -1
  475. package/dist/detail/stories/Detail.stories.js +0 -170
  476. package/dist/detail/stories/Detail.stories.js.map +0 -1
  477. package/dist/dialog/stories/Dialog.stories.d.ts +0 -50
  478. package/dist/dialog/stories/Dialog.stories.d.ts.map +0 -1
  479. package/dist/dialog/stories/Dialog.stories.js +0 -89
  480. package/dist/dialog/stories/Dialog.stories.js.map +0 -1
  481. package/dist/disclosure/stories/Disclosure.stories.d.ts +0 -35
  482. package/dist/disclosure/stories/Disclosure.stories.d.ts.map +0 -1
  483. package/dist/disclosure/stories/Disclosure.stories.js +0 -70
  484. package/dist/disclosure/stories/Disclosure.stories.js.map +0 -1
  485. package/dist/drop-zone/stories/DropZone.stories.d.ts +0 -63
  486. package/dist/drop-zone/stories/DropZone.stories.d.ts.map +0 -1
  487. package/dist/drop-zone/stories/DropZone.stories.js +0 -97
  488. package/dist/drop-zone/stories/DropZone.stories.js.map +0 -1
  489. package/dist/expandable-action-panel/stories/ExpandableActionPanel.stories.d.ts +0 -44
  490. package/dist/expandable-action-panel/stories/ExpandableActionPanel.stories.d.ts.map +0 -1
  491. package/dist/expandable-action-panel/stories/ExpandableActionPanel.stories.js +0 -117
  492. package/dist/expandable-action-panel/stories/ExpandableActionPanel.stories.js.map +0 -1
  493. package/dist/flex/index.js.map +0 -1
  494. package/dist/flex/stories/Flex.stories.d.ts +0 -24
  495. package/dist/flex/stories/Flex.stories.d.ts.map +0 -1
  496. package/dist/flex/stories/Flex.stories.js +0 -607
  497. package/dist/flex/stories/Flex.stories.js.map +0 -1
  498. package/dist/grid/stories/Grid.stories.d.ts +0 -24
  499. package/dist/grid/stories/Grid.stories.d.ts.map +0 -1
  500. package/dist/grid/stories/Grid.stories.js +0 -840
  501. package/dist/grid/stories/Grid.stories.js.map +0 -1
  502. package/dist/input/index.js.map +0 -1
  503. package/dist/input/stories/Input.stories.d.ts +0 -69
  504. package/dist/input/stories/Input.stories.d.ts.map +0 -1
  505. package/dist/input/stories/Input.stories.js +0 -132
  506. package/dist/input/stories/Input.stories.js.map +0 -1
  507. package/dist/input-date-time/stories/InputDateTime.stories.d.ts +0 -69
  508. package/dist/input-date-time/stories/InputDateTime.stories.d.ts.map +0 -1
  509. package/dist/input-date-time/stories/InputDateTime.stories.js +0 -125
  510. package/dist/input-date-time/stories/InputDateTime.stories.js.map +0 -1
  511. package/dist/input-file/stories/InputFile.stories.d.ts +0 -85
  512. package/dist/input-file/stories/InputFile.stories.d.ts.map +0 -1
  513. package/dist/input-file/stories/InputFile.stories.js +0 -158
  514. package/dist/input-file/stories/InputFile.stories.js.map +0 -1
  515. package/dist/input-files/stories/InputFiles.stories.d.ts +0 -86
  516. package/dist/input-files/stories/InputFiles.stories.d.ts.map +0 -1
  517. package/dist/input-files/stories/InputFiles.stories.js +0 -158
  518. package/dist/input-files/stories/InputFiles.stories.js.map +0 -1
  519. package/dist/input-image/stories/InputImage.stories.d.ts +0 -81
  520. package/dist/input-image/stories/InputImage.stories.d.ts.map +0 -1
  521. package/dist/input-image/stories/InputImage.stories.js +0 -174
  522. package/dist/input-image/stories/InputImage.stories.js.map +0 -1
  523. package/dist/layout-picker/stories/LayoutPicker.stories.d.ts +0 -873
  524. package/dist/layout-picker/stories/LayoutPicker.stories.d.ts.map +0 -1
  525. package/dist/layout-picker/stories/LayoutPicker.stories.js +0 -422
  526. package/dist/layout-picker/stories/LayoutPicker.stories.js.map +0 -1
  527. package/dist/listbox/stories/Listbox.stories.d.ts +0 -76
  528. package/dist/listbox/stories/Listbox.stories.d.ts.map +0 -1
  529. package/dist/listbox/stories/Listbox.stories.js +0 -140
  530. package/dist/listbox/stories/Listbox.stories.js.map +0 -1
  531. package/dist/modal/stories/Modal.stories.d.ts +0 -74
  532. package/dist/modal/stories/Modal.stories.d.ts.map +0 -1
  533. package/dist/modal/stories/Modal.stories.js +0 -320
  534. package/dist/modal/stories/Modal.stories.js.map +0 -1
  535. package/dist/multi-select/ui/stories/MultiSelect.stories.d.ts +0 -67
  536. package/dist/multi-select/ui/stories/MultiSelect.stories.d.ts.map +0 -1
  537. package/dist/multi-select/ui/stories/MultiSelect.stories.js +0 -114
  538. package/dist/multi-select/ui/stories/MultiSelect.stories.js.map +0 -1
  539. package/dist/multi-select/ui/stories/ODataMultiSelect.stories.d.ts +0 -44
  540. package/dist/multi-select/ui/stories/ODataMultiSelect.stories.d.ts.map +0 -1
  541. package/dist/notifications/ui/stories/NotificationsHost.stories.d.ts +0 -21
  542. package/dist/notifications/ui/stories/NotificationsHost.stories.d.ts.map +0 -1
  543. package/dist/notifications/ui/stories/NotificationsHost.stories.js +0 -326
  544. package/dist/notifications/ui/stories/NotificationsHost.stories.js.map +0 -1
  545. package/dist/period-select/stories/PeriodSelect.stories.d.ts +0 -96
  546. package/dist/period-select/stories/PeriodSelect.stories.d.ts.map +0 -1
  547. package/dist/period-select/stories/PeriodSelect.stories.js +0 -166
  548. package/dist/period-select/stories/PeriodSelect.stories.js.map +0 -1
  549. package/dist/popover/stories/Popover.stories.d.ts +0 -10
  550. package/dist/popover/stories/Popover.stories.d.ts.map +0 -1
  551. package/dist/popover/stories/Popover.stories.js +0 -75
  552. package/dist/popover/stories/Popover.stories.js.map +0 -1
  553. package/dist/preset-range-date-input/ui/stories/PresetRangeDateInput.stories.d.ts +0 -22
  554. package/dist/preset-range-date-input/ui/stories/PresetRangeDateInput.stories.d.ts.map +0 -1
  555. package/dist/preset-range-date-input/ui/stories/PresetRangeDateInput.stories.js +0 -45
  556. package/dist/preset-range-date-input/ui/stories/PresetRangeDateInput.stories.js.map +0 -1
  557. package/dist/radio-button/stories/RadioButton.stories.d.ts +0 -60
  558. package/dist/radio-button/stories/RadioButton.stories.d.ts.map +0 -1
  559. package/dist/radio-button/stories/RadioButton.stories.js +0 -121
  560. package/dist/radio-button/stories/RadioButton.stories.js.map +0 -1
  561. package/dist/radio-group/stories/RadioGroup.stories.d.ts +0 -74
  562. package/dist/radio-group/stories/RadioGroup.stories.d.ts.map +0 -1
  563. package/dist/radio-group/stories/RadioGroup.stories.js +0 -146
  564. package/dist/radio-group/stories/RadioGroup.stories.js.map +0 -1
  565. package/dist/select/stories/ODataSelect.stories.d.ts +0 -46
  566. package/dist/select/stories/ODataSelect.stories.d.ts.map +0 -1
  567. package/dist/select/stories/Select.stories.d.ts +0 -127
  568. package/dist/select/stories/Select.stories.d.ts.map +0 -1
  569. package/dist/select/stories/Select.stories.js +0 -214
  570. package/dist/select/stories/Select.stories.js.map +0 -1
  571. package/dist/select/stories/SerializableSelect.stories.d.ts +0 -91
  572. package/dist/select/stories/SerializableSelect.stories.d.ts.map +0 -1
  573. package/dist/select/stories/SerializableSelect.stories.js +0 -165
  574. package/dist/select/stories/SerializableSelect.stories.js.map +0 -1
  575. package/dist/select/stories/odataStoryCollection.d.ts +0 -2
  576. package/dist/select/stories/odataStoryCollection.d.ts.map +0 -1
  577. package/dist/select/stories/odataStoryFixtures.d.ts +0 -35
  578. package/dist/select/stories/odataStoryFixtures.d.ts.map +0 -1
  579. package/dist/slider/stories/Slider.stories.d.ts +0 -29
  580. package/dist/slider/stories/Slider.stories.d.ts.map +0 -1
  581. package/dist/slider/stories/Slider.stories.js +0 -310
  582. package/dist/slider/stories/Slider.stories.js.map +0 -1
  583. package/dist/slider/stories/SliderInput.stories.d.ts +0 -30
  584. package/dist/slider/stories/SliderInput.stories.d.ts.map +0 -1
  585. package/dist/slider/stories/SliderInput.stories.js +0 -282
  586. package/dist/slider/stories/SliderInput.stories.js.map +0 -1
  587. package/dist/sortable/stories/Sortable.stories.d.ts +0 -58
  588. package/dist/sortable/stories/Sortable.stories.d.ts.map +0 -1
  589. package/dist/sortable/stories/Sortable.stories.js +0 -255
  590. package/dist/sortable/stories/Sortable.stories.js.map +0 -1
  591. package/dist/splitter/stories/Splitter.stories.d.ts +0 -66
  592. package/dist/splitter/stories/Splitter.stories.d.ts.map +0 -1
  593. package/dist/splitter/stories/Splitter.stories.js +0 -223
  594. package/dist/splitter/stories/Splitter.stories.js.map +0 -1
  595. package/dist/state-select/stories/StateSelect.stories.d.ts +0 -70
  596. package/dist/state-select/stories/StateSelect.stories.d.ts.map +0 -1
  597. package/dist/state-select/stories/StateSelect.stories.js +0 -145
  598. package/dist/state-select/stories/StateSelect.stories.js.map +0 -1
  599. package/dist/switch/stories/Switch.stories.d.ts +0 -59
  600. package/dist/switch/stories/Switch.stories.d.ts.map +0 -1
  601. package/dist/switch/stories/Switch.stories.js +0 -90
  602. package/dist/switch/stories/Switch.stories.js.map +0 -1
  603. package/dist/table/stories/Table.stories.d.ts +0 -155
  604. package/dist/table/stories/Table.stories.d.ts.map +0 -1
  605. package/dist/tabs/stories/Tabs.stories.d.ts +0 -94
  606. package/dist/tabs/stories/Tabs.stories.d.ts.map +0 -1
  607. package/dist/tabs/stories/Tabs.stories.js +0 -283
  608. package/dist/tabs/stories/Tabs.stories.js.map +0 -1
  609. package/dist/textarea/stories/Textarea.stories.d.ts +0 -64
  610. package/dist/textarea/stories/Textarea.stories.d.ts.map +0 -1
  611. package/dist/textarea/stories/Textarea.stories.js +0 -98
  612. package/dist/textarea/stories/Textarea.stories.js.map +0 -1
  613. package/dist/toggle/stories/Toggle.stories.d.ts +0 -61
  614. package/dist/toggle/stories/Toggle.stories.d.ts.map +0 -1
  615. package/dist/toggle/stories/Toggle.stories.js +0 -102
  616. package/dist/toggle/stories/Toggle.stories.js.map +0 -1
  617. package/dist/tree-select/stories/ODataTreeMultiSelect.stories.d.ts +0 -55
  618. package/dist/tree-select/stories/ODataTreeMultiSelect.stories.d.ts.map +0 -1
  619. package/dist/tree-select/stories/ODataTreeSelect.stories.d.ts +0 -54
  620. package/dist/tree-select/stories/ODataTreeSelect.stories.d.ts.map +0 -1
  621. package/dist/tree-select/stories/TreeMultiSelect.stories.d.ts +0 -35
  622. package/dist/tree-select/stories/TreeMultiSelect.stories.d.ts.map +0 -1
  623. package/dist/tree-select/stories/TreeMultiSelect.stories.js +0 -64
  624. package/dist/tree-select/stories/TreeMultiSelect.stories.js.map +0 -1
  625. package/dist/tree-select/stories/TreeSelect.stories.d.ts +0 -35
  626. package/dist/tree-select/stories/TreeSelect.stories.d.ts.map +0 -1
  627. package/dist/tree-select/stories/TreeSelect.stories.js +0 -66
  628. package/dist/tree-select/stories/TreeSelect.stories.js.map +0 -1
  629. package/dist/tree-select/stories/treeStoryFixtures.d.ts +0 -3
  630. package/dist/tree-select/stories/treeStoryFixtures.d.ts.map +0 -1
  631. package/dist/tree-table/stories/TreeTable.stories.d.ts +0 -158
  632. package/dist/tree-table/stories/TreeTable.stories.d.ts.map +0 -1
  633. package/src/styles/fonts.scss +0 -47
@@ -1 +0,0 @@
1
- {"version":3,"file":"slider-uU26AeGu.js","names":[],"sources":["../../src/slider/lib/sliderMath.ts","../../src/slider/Slider.module.scss","../../src/slider/Slider.tsx","../../src/slider/SliderInput.tsx"],"sourcesContent":["import {\n\tfindClosestNumberScaleMark,\n\tfindClosestNumberScaleMarkByPercent,\n\tgetNumberScaleMarkPercent,\n\tprepareNumberScaleMarks,\n\tresolveNumberScaleBounds,\n\tsnapNumberScaleValue,\n\tsnapNumberScaleValueToStep,\n\tvalueToNumberScalePercent\n} from \"@ryuzaki13/react-foundation-lib/number-scale\";\nimport { resolveRangeOutputValue } from \"@ryuzaki13/react-foundation-lib/range-output\";\n\nimport { SliderFillRange, SliderMark, SliderMathOptions, SliderRangeMark, SliderRangeOutputValueFallback, SliderRangeValue } from \"./types\";\n\nexport function prepareSliderMarks<TMark extends SliderMark>(marks: readonly TMark[] | undefined, min: number, max: number): TMark[] {\n\treturn prepareNumberScaleMarks(marks, min, max);\n}\n\nexport function getSliderMarkPercent<TMark extends SliderMark>(mark: TMark, marks: readonly TMark[], options: SliderMathOptions<TMark>) {\n\tconst markIndex = marks.findIndex((item) => item.value === mark.value);\n\treturn getNumberScaleMarkPercent(Math.max(0, markIndex), marks, options.min, options.max, options.marksPosition);\n}\n\n/**\n * Возвращает визуальную позицию значения: по шкале min/max или по позиции ближайшей mark.\n */\nexport function valueToSliderVisualPercent<TMark extends SliderMark>(value: number, options: SliderMathOptions<TMark>) {\n\tconst { min, max } = resolveNumberScaleBounds(options.min, options.max);\n\tconst marks = prepareSliderMarks(options.marks, min, max);\n\n\tif (marks.length > 0) {\n\t\tconst exactMark = marks.find((mark) => mark.value === value);\n\t\tconst mark = exactMark ?? findClosestNumberScaleMark(value, marks);\n\n\t\tif (mark) {\n\t\t\treturn getSliderMarkPercent(mark, marks, { ...options, min, max, marks });\n\t\t}\n\t}\n\n\treturn valueToNumberScalePercent(value, min, max);\n}\n\n/**\n * Возвращает mark, который визуально ближе всего к pointer percent.\n */\nexport function getClosestSliderMarkByPercent<TMark extends SliderMark>(percent: number, options: SliderMathOptions<TMark>) {\n\tconst { min, max } = resolveNumberScaleBounds(options.min, options.max);\n\tconst marks = prepareSliderMarks(options.marks, min, max);\n\n\treturn findClosestNumberScaleMarkByPercent(percent, marks, min, max, options.marksPosition);\n}\n\nexport function snapSliderValue<TMark extends SliderMark>(value: number, options: SliderMathOptions<TMark>) {\n\treturn snapNumberScaleValue(value, options);\n}\n\nexport function normalizeSingleSliderValue(value: number | undefined, options: SliderMathOptions) {\n\tconst { min, max } = resolveNumberScaleBounds(options.min, options.max);\n\n\tif (value === undefined) {\n\t\treturn min;\n\t}\n\n\treturn snapSliderValue(value, { ...options, min, max });\n}\n\n/**\n * Возвращает публичное значение mark: `outputValue`, если оно задано, иначе координату `value`.\n */\nexport function getRangeMarkOutputValue(mark: SliderRangeMark | undefined): number | null | undefined {\n\tif (!mark) {\n\t\treturn undefined;\n\t}\n\n\tif (!Object.hasOwn(mark, \"outputValue\") || mark.outputValue === undefined) {\n\t\treturn mark.value;\n\t}\n\n\treturn mark.outputValue;\n}\n\n/**\n * Готовит range-значение к внешней сериализации, заменяя открытые границы на заданные подстановки.\n *\n * Функция не участвует во внутренней логике слайдера: `SliderRange` и `SliderRangeInput`\n * продолжают отдавать `null` через `onChange`, а потребитель явно применяет подстановку\n * рядом со своим обработчиком сохранения/отправки.\n */\nexport function resolveSliderRangeOutputValue(\n\tvalue: SliderRangeValue,\n\tfallback: SliderRangeOutputValueFallback | undefined\n): SliderRangeValue {\n\treturn resolveRangeOutputValue(value, fallback);\n}\n\nfunction findRangeMarkByOutputValue(\n\tvalue: number | null,\n\tmarks: readonly SliderRangeMark[],\n\tthumbIndex: number\n): SliderRangeMark | undefined {\n\tconst matchingMarks = marks.filter((mark) => getRangeMarkOutputValue(mark) === value);\n\n\tif (!matchingMarks.length) {\n\t\treturn undefined;\n\t}\n\n\tif (value === null) {\n\t\treturn thumbIndex === 0 ? matchingMarks[0] : matchingMarks[matchingMarks.length - 1];\n\t}\n\n\treturn matchingMarks[0];\n}\n\n/**\n * Ищет ближайшую mark по публичному output-значению, а не по координате шкалы.\n */\nfunction findClosestRangeMarkByOutputValue(\n\tvalue: number,\n\tmarks: readonly SliderRangeMark[],\n\tthumbIndex: number\n): SliderRangeMark | undefined {\n\tconst exactMark = findRangeMarkByOutputValue(value, marks, thumbIndex);\n\tif (exactMark) {\n\t\treturn exactMark;\n\t}\n\n\tlet nearestMark: SliderRangeMark | undefined;\n\tlet nearestDistance = Number.POSITIVE_INFINITY;\n\n\tfor (const mark of marks) {\n\t\tconst outputValue = getRangeMarkOutputValue(mark);\n\t\tif (typeof outputValue !== \"number\" || !Number.isFinite(outputValue)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst distance = Math.abs(value - outputValue);\n\t\tif (distance < nearestDistance) {\n\t\t\tnearestMark = mark;\n\t\t\tnearestDistance = distance;\n\t\t}\n\t}\n\n\treturn nearestMark;\n}\n\nfunction normalizeRangeEndpoint(\n\tvalue: number | null,\n\tfallbackVisualValue: number,\n\tthumbIndex: number,\n\toptions: SliderMathOptions<SliderRangeMark>\n) {\n\tif (value === null) {\n\t\treturn null;\n\t}\n\n\tconst { min, max } = resolveNumberScaleBounds(options.min, options.max);\n\tconst marks = prepareSliderMarks(options.marks, min, max);\n\tconst publicValue = Number.isFinite(value) ? value : fallbackVisualValue;\n\n\tif (marks.length > 0) {\n\t\tconst snappedMark = findClosestRangeMarkByOutputValue(publicValue, marks, thumbIndex);\n\t\tconst outputValue = getRangeMarkOutputValue(snappedMark);\n\n\t\treturn outputValue !== undefined ? outputValue : (snappedMark?.value ?? fallbackVisualValue);\n\t}\n\n\treturn snapNumberScaleValueToStep(publicValue, min, max, options.step);\n}\n\n/**\n * Нормализует публичное range-значение, сохраняя null как открытую границу.\n */\nexport function normalizeRangeSliderValue(\n\tvalue: SliderRangeValue | undefined,\n\toptions: SliderMathOptions<SliderRangeMark>\n): SliderRangeValue {\n\tconst { min, max } = resolveNumberScaleBounds(options.min, options.max);\n\n\tif (!value) {\n\t\treturn [null, null];\n\t}\n\n\tconst start = normalizeRangeEndpoint(value[0], min, 0, { ...options, min, max });\n\tconst end = normalizeRangeEndpoint(value[1], max, 1, { ...options, min, max });\n\n\tif (start !== null && end !== null && start > end) {\n\t\treturn [end, start];\n\t}\n\n\treturn [start, end];\n}\n\nfunction getRangeEndpointVisualValue(\n\tvalue: number | null,\n\tfallbackVisualValue: number,\n\tthumbIndex: number,\n\toptions: SliderMathOptions<SliderRangeMark>\n) {\n\tif (value === null) {\n\t\treturn fallbackVisualValue;\n\t}\n\n\tconst { min, max } = resolveNumberScaleBounds(options.min, options.max);\n\tconst marks = prepareSliderMarks(options.marks, min, max);\n\n\tif (marks.length > 0) {\n\t\tconst exactOutputMark = findRangeMarkByOutputValue(value, marks, thumbIndex);\n\t\tconst outputMark =\n\t\t\texactOutputMark ?? (typeof value === \"number\" ? findClosestRangeMarkByOutputValue(value, marks, thumbIndex) : undefined);\n\n\t\treturn outputMark?.value ?? fallbackVisualValue;\n\t}\n\n\treturn snapNumberScaleValueToStep(value, min, max, options.step);\n}\n\n/**\n * Переводит публичный range tuple в finite-позиции thumb, где null стоит на краю шкалы.\n */\nexport function getRangeSliderVisualValue(\n\tvalue: SliderRangeValue | undefined,\n\toptions: SliderMathOptions<SliderRangeMark>\n): [number, number] {\n\tconst { min, max } = resolveNumberScaleBounds(options.min, options.max);\n\tconst normalized = normalizeRangeSliderValue(value, { ...options, min, max });\n\tconst start = getRangeEndpointVisualValue(normalized[0], min, 0, { ...options, min, max });\n\tconst end = getRangeEndpointVisualValue(normalized[1], max, 1, { ...options, min, max });\n\n\treturn start <= end ? [start, end] : [end, start];\n}\n\n/**\n * Преобразует координату шкалы, выбранную pointer/keyboard, в публичное range-значение.\n */\nexport function visualValueToRangeEndpoint(value: number, options: SliderMathOptions<SliderRangeMark>) {\n\tconst { min, max } = resolveNumberScaleBounds(options.min, options.max);\n\tconst marks = prepareSliderMarks(options.marks, min, max);\n\n\tif (marks.length > 0) {\n\t\tconst mark = findClosestNumberScaleMark(value, marks);\n\t\tconst outputValue = getRangeMarkOutputValue(mark);\n\n\t\treturn outputValue !== undefined ? outputValue : (mark?.value ?? value);\n\t}\n\n\treturn snapNumberScaleValueToStep(value, min, max, options.step);\n}\n\nexport function getClosestSliderThumb(targetValue: number, value: readonly [number, number]) {\n\tconst [start, end] = value;\n\treturn Math.abs(targetValue - start) <= Math.abs(targetValue - end) ? 0 : 1;\n}\n\nexport function resolveSliderFillRange(value: number | readonly [number, number], options: SliderMathOptions): SliderFillRange {\n\tconst { min, max } = resolveNumberScaleBounds(options.min, options.max);\n\n\tif (Array.isArray(value)) {\n\t\treturn {\n\t\t\tstartPercent: valueToSliderVisualPercent(value[0], { ...options, min, max }),\n\t\t\tendPercent: valueToSliderVisualPercent(value[1], { ...options, min, max })\n\t\t};\n\t}\n\n\treturn {\n\t\tstartPercent: 0,\n\t\tendPercent: valueToSliderVisualPercent(value as number, { ...options, min, max })\n\t};\n}\n","@use \"@/styles/mixins\" as *;\n\n.slider {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--space-sm);\n}\n\n.sliderCompact {\n\tgap: 0;\n}\n\n.trackShell {\n\tposition: relative;\n\tpadding-inline: calc((var(--control-height) - var(--space-xs)) / 2);\n}\n\n.track {\n\tposition: relative;\n\theight: var(--control-height);\n\tcursor: pointer;\n\ttouch-action: none;\n\tuser-select: none;\n}\n\n.rail,\n.fill {\n\tposition: absolute;\n\ttop: 50%;\n\ttransform: translateY(-50%);\n\theight: var(--space-xs);\n\tborder-radius: 999px;\n}\n\n.rail {\n\tleft: 0;\n\tright: 0;\n\tbackground-color: var(--surface-2);\n\tborder: var(--border);\n}\n\n.fill {\n\tbackground-color: var(--content-0);\n}\n\n.thumb {\n\tposition: absolute;\n\ttop: 50%;\n\ttransform: translate(-50%, -50%);\n\twidth: calc(var(--control-height) - var(--space-xs));\n\theight: calc(var(--control-height) - 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\tcursor: grab;\n\tz-index: 2;\n\ttransition:\n\t\ttransform var(--transition-fast) ease,\n\t\tborder-color var(--transition-fast) ease,\n\t\tbox-shadow var(--transition-fast) ease,\n\t\tbackground-color var(--transition-fast) ease;\n\n\t&:active,\n\t&:hover {\n\t\tborder-color: var(--border-1);\n\t}\n\n\t&:focus-visible {\n\t\t@include focusVisible;\n\t}\n\n\t&[data-dragging] {\n\t\tcursor: grabbing;\n\t\ttransform: translate(-50%, -50%) scale(1.04);\n\t\tbox-shadow: var(--shadow-md);\n\t}\n}\n\n.marks {\n\tposition: relative;\n\tmin-height: calc(var(--font-size-sm) + var(--space-md));\n\tmargin-inline: calc((var(--control-height) - var(--space-xs)) / 2);\n}\n\n.mark {\n\tposition: absolute;\n\ttop: 0;\n\ttransform: translateX(-50%);\n\tdisplay: inline-flex;\n\tflex-direction: column;\n\talign-items: center;\n\tgap: var(--space-xs);\n\tborder: none;\n\tbackground: transparent;\n\tpadding: 0;\n\tcolor: var(--content-2);\n\tcursor: pointer;\n\twhite-space: nowrap;\n\n\t&:focus-visible {\n\t\t@include focusVisible;\n\t\tborder-radius: var(--radius-sm);\n\t}\n\n\t&[data-active] {\n\t\tcolor: var(--content-0);\n\t}\n}\n\n.compactMark {\n\tposition: absolute;\n\ttop: 50%;\n\ttransform: translate(-50%, -50%);\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: var(--control-height);\n\theight: var(--control-height);\n\tborder: none;\n\tbackground: transparent;\n\tpadding: 0;\n\tcolor: var(--content-2);\n\tcursor: pointer;\n\tz-index: 1;\n\n\t&:focus-visible {\n\t\t@include focusVisible;\n\t\tborder-radius: var(--radius-sm);\n\t}\n\n\t&[data-active] {\n\t\tcolor: var(--content-0);\n\t}\n\n\t&:disabled {\n\t\tcursor: default;\n\t}\n}\n\n.markDot {\n\twidth: var(--space-sm);\n\theight: var(--space-sm);\n\tborder-radius: 50%;\n\tbackground-color: currentColor;\n\t// opacity: 0.55;\n}\n\n.markLabel {\n\tfont-size: var(--font-size-sm);\n}\n\n.popoverContent {\n\tmin-width: min(24em, calc(100vw - var(--space-xl)));\n}\n\n.rangeInputControl {\n\tgap: var(--space-xs);\n\tcursor: text;\n}\n\n.rangeSegmentInput {\n\tmin-width: 0;\n\twidth: 7ch;\n\tborder: none;\n\tbackground: transparent;\n\toutline: none;\n\tpadding: 0;\n\tmargin: 0;\n\tfont-family: var(--font-family-mono);\n\tcolor: inherit;\n\ttext-align: center;\n\tcaret-color: var(--content-0);\n\tfont-variant-numeric: tabular-nums;\n\n\t&::selection {\n\t\tbackground-color: var(--focus-ring);\n\t\tcolor: var(--surface-0);\n\t}\n\n\t&:disabled {\n\t\topacity: 0.25;\n\t}\n}\n\n.rangeSeparator {\n\tuser-select: none;\n\tcolor: var(--content-2);\n\tflex-shrink: 0;\n\n\t&[data-disabled] {\n\t\topacity: 0.25;\n\t}\n}\n","import React, { KeyboardEvent, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { offsetNumberScaleValue, percentToNumberScaleValue, resolveNumberScaleBounds } from \"@ryuzaki13/react-foundation-lib/number-scale\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { InputUI, useInputFieldIds } from \"../input\";\nimport { FloatingPopover } from \"../popover\";\nimport { UiBaseProps, UiSize } from \"../types\";\n\nimport {\n\tgetClosestSliderMarkByPercent,\n\tgetClosestSliderThumb,\n\tgetRangeSliderVisualValue,\n\tgetSliderMarkPercent,\n\tnormalizeRangeSliderValue,\n\tnormalizeSingleSliderValue,\n\tprepareSliderMarks,\n\tresolveSliderFillRange,\n\tvalueToSliderVisualPercent,\n\tvisualValueToRangeEndpoint,\n\ttype SliderMark,\n\ttype SliderMarksPosition,\n\ttype SliderRangeMark,\n\ttype SliderRangeValue\n} from \"./lib\";\nimport styles from \"./Slider.module.scss\";\n\ntype SliderMarksDisplay = \"compact\" | \"full\";\n\ninterface SliderCommonProps<TMark extends SliderMark> {\n\t/**\n\t * Минимальная координата шкалы. Marks вне этой границы отбрасываются.\n\t */\n\tmin: number;\n\t/**\n\t * Максимальная координата шкалы. Marks вне этой границы отбрасываются.\n\t */\n\tmax: number;\n\t/**\n\t * Шаг изменения, когда `marks` не заданы или после фильтрации не осталось валидных marks.\n\t */\n\tstep?: number;\n\t/**\n\t * Дискретные точки выбора. Если заданы, бегунок всегда ходит только по marks.\n\t */\n\tmarks?: readonly TMark[];\n\t/**\n\t * Способ визуального размещения marks и бегунка: по числовой координате `value` или равномерно по индексу.\n\t */\n\tmarksPosition?: SliderMarksPosition;\n\t/**\n\t * Внешний CSS-класс контейнера поля.\n\t */\n\tclassName?: string;\n\t/**\n\t * Текст внешней ошибки, отображается через общую `InputUI`-обёртку.\n\t */\n\terror?: string;\n\t/**\n\t * Вызывается после успешного изменения значения, чтобы потребитель мог сбросить внешнюю ошибку.\n\t */\n\tonClearError?: () => void;\n}\n\n/**\n * Single-value slider. Возвращает координату шкалы, потому что single marks не используют `outputValue`.\n */\nexport interface SliderProps extends Omit<UiBaseProps<number, number | undefined>, \"placeholder\">, SliderCommonProps<SliderMark> {}\n\n/**\n * Range slider. Возвращает бизнес-значения `SliderRangeMark.outputValue`, если они заданы, иначе координаты `value`.\n */\nexport interface SliderRangeProps\n\textends Omit<UiBaseProps<SliderRangeValue, SliderRangeValue | undefined>, \"placeholder\">, SliderCommonProps<SliderRangeMark> {}\n\ninterface SliderBaseCommonProps<TMark extends SliderMark> extends SliderCommonProps<TMark> {\n\t/**\n\t * Подпись поля в общей `InputUI`-обёртке.\n\t */\n\tlabel?: React.ReactNode;\n\t/**\n\t * Описание поля под подписью.\n\t */\n\tdescription?: string;\n\t/**\n\t * Блокирует pointer, keyboard и click-взаимодействие.\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Размер общей `InputUI`-обёртки.\n\t */\n\tsize?: UiSize;\n\t/**\n\t * Compact показывает только ticks/tooltip внутри высоты control, full добавляет строку labels для popover.\n\t */\n\tmarksDisplay?: SliderMarksDisplay;\n}\n\ninterface SliderBaseSingleProps extends SliderBaseCommonProps<SliderMark> {\n\tmode: \"single\";\n\tvalue: number | undefined;\n\tonChange: (value: number) => void;\n}\n\ninterface SliderBaseRangeProps extends SliderBaseCommonProps<SliderRangeMark> {\n\tmode: \"range\";\n\tvalue: SliderRangeValue | undefined;\n\tonChange: (value: SliderRangeValue) => void;\n}\n\nexport type SliderBaseProps = SliderBaseSingleProps | SliderBaseRangeProps;\n\nfunction resolveKeyboardOffset(eventKey: string) {\n\tif (eventKey === \"ArrowLeft\" || eventKey === \"ArrowDown\") {\n\t\treturn -1;\n\t}\n\n\tif (eventKey === \"ArrowRight\" || eventKey === \"ArrowUp\") {\n\t\treturn 1;\n\t}\n\n\tif (eventKey === \"PageDown\") {\n\t\treturn -10;\n\t}\n\n\tif (eventKey === \"PageUp\") {\n\t\treturn 10;\n\t}\n\n\treturn null;\n}\n\nfunction areRangeValuesEqual(left: SliderRangeValue | undefined, right: SliderRangeValue) {\n\treturn !!left && left[0] === right[0] && left[1] === right[1];\n}\n\nfunction formatRangeEndpoint(value: number | null, thumbIndex: number) {\n\tif (value === null) {\n\t\treturn thumbIndex === 0 ? \"-∞\" : \"∞\";\n\t}\n\n\treturn String(value);\n}\n\nfunction getMarkLabelByValue<TMark extends SliderMark>(value: number, marks: readonly TMark[]) {\n\treturn marks.find((mark) => mark.value === value)?.label ?? String(value);\n}\n\nfunction renderTooltipContent(content: React.ReactNode) {\n\treturn typeof content === \"string\" || typeof content === \"number\" ? <span className=\"textNoWrap\">{content}</span> : content;\n}\n\nexport function SliderBase(props: SliderBaseProps) {\n\tconst {\n\t\tmin: rawMin,\n\t\tmax: rawMax,\n\t\tstep,\n\t\tmarks,\n\t\tmarksPosition = \"value\",\n\t\tmarksDisplay = \"compact\",\n\t\tclassName,\n\t\terror,\n\t\tonClearError,\n\t\tlabel,\n\t\tdescription,\n\t\tdisabled,\n\t\tsize\n\t} = props;\n\tconst { min, max } = useMemo(() => resolveNumberScaleBounds(rawMin, rawMax), [rawMin, rawMax]);\n\tconst normalizedMarks = useMemo(() => prepareSliderMarks(marks, min, max), [marks, min, max]);\n\tconst sliderOptions = useMemo(\n\t\t() => ({\n\t\t\tmin,\n\t\t\tmax,\n\t\t\tstep,\n\t\t\tmarks: normalizedMarks,\n\t\t\tmarksPosition\n\t\t}),\n\t\t[min, max, step, normalizedMarks, marksPosition]\n\t);\n\n\tconst isRange = props.mode === \"range\";\n\tconst currentSingleValue = !isRange ? normalizeSingleSliderValue(props.value, sliderOptions) : undefined;\n\tconst currentRangeValue = isRange ? normalizeRangeSliderValue(props.value, sliderOptions) : undefined;\n\tconst visualRangeValue = isRange ? getRangeSliderVisualValue(props.value, sliderOptions) : undefined;\n\tconst thumbValues = isRange ? visualRangeValue! : [currentSingleValue!];\n\tconst fillRange = resolveSliderFillRange(isRange ? visualRangeValue! : currentSingleValue!, sliderOptions);\n\n\tconst trackRef = useRef<HTMLDivElement | null>(null);\n\tconst thumbRefs = useRef<Array<HTMLButtonElement | null>>([]);\n\tconst dragThumbIndexRef = useRef<number | null>(null);\n\tconst dragPointerIdRef = useRef<number | null>(null);\n\tconst [dragThumbIndex, setDragThumbIndex] = useState<number | null>(null);\n\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\n\t});\n\n\tconst emitSingleValue = (nextValue: number) => {\n\t\tif (disabled || props.mode !== \"single\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (props.value !== undefined && props.value === nextValue) {\n\t\t\treturn;\n\t\t}\n\n\t\tprops.onChange(nextValue);\n\t\tonClearError?.();\n\t};\n\n\tconst emitRangeValue = (nextValue: SliderRangeValue) => {\n\t\tif (disabled || props.mode !== \"range\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (areRangeValuesEqual(props.value, nextValue)) {\n\t\t\treturn;\n\t\t}\n\n\t\tprops.onChange(nextValue);\n\t\tonClearError?.();\n\t};\n\n\tconst applySliderValue = (rawValue: number, thumbIndex: number) => {\n\t\tif (disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (props.mode === \"range\") {\n\t\t\tconst [startVisualValue, endVisualValue] = visualRangeValue!;\n\t\t\tconst [startValue, endValue] = currentRangeValue!;\n\t\t\tconst nextValue =\n\t\t\t\tthumbIndex === 0\n\t\t\t\t\t? normalizeRangeSliderValue(\n\t\t\t\t\t\t\t[visualValueToRangeEndpoint(Math.min(rawValue, endVisualValue), sliderOptions), endValue],\n\t\t\t\t\t\t\tsliderOptions\n\t\t\t\t\t\t)\n\t\t\t\t\t: normalizeRangeSliderValue(\n\t\t\t\t\t\t\t[startValue, visualValueToRangeEndpoint(Math.max(rawValue, startVisualValue), sliderOptions)],\n\t\t\t\t\t\t\tsliderOptions\n\t\t\t\t\t\t);\n\n\t\t\temitRangeValue(nextValue);\n\t\t\treturn;\n\t\t}\n\n\t\temitSingleValue(normalizeSingleSliderValue(rawValue, sliderOptions));\n\t};\n\n\tconst resolveValueFromPointer = (clientX: number) => {\n\t\tconst bounds = trackRef.current?.getBoundingClientRect();\n\t\tif (!bounds) {\n\t\t\treturn min;\n\t\t}\n\n\t\tconst percent = ((clientX - bounds.left) / bounds.width) * 100;\n\t\tconst closestMark = normalizedMarks.length > 0 ? getClosestSliderMarkByPercent(percent, sliderOptions) : undefined;\n\n\t\treturn closestMark?.value ?? percentToNumberScaleValue(percent, min, max);\n\t};\n\tconst applySliderValueRef = useRef(applySliderValue);\n\tconst resolveValueFromPointerRef = useRef(resolveValueFromPointer);\n\n\tuseEffect(() => {\n\t\tapplySliderValueRef.current = applySliderValue;\n\t\tresolveValueFromPointerRef.current = resolveValueFromPointer;\n\t});\n\n\tuseEffect(() => {\n\t\tconst onPointerUp = (event?: PointerEvent) => {\n\t\t\tif (dragPointerIdRef.current !== null && event && event.pointerId !== dragPointerIdRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdragPointerIdRef.current = null;\n\t\t\tdragThumbIndexRef.current = null;\n\t\t\tsetDragThumbIndex(null);\n\t\t};\n\n\t\tconst onPointerMove = (event: PointerEvent) => {\n\t\t\tif (dragThumbIndexRef.current === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (dragPointerIdRef.current !== null && event.pointerId !== dragPointerIdRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tapplySliderValueRef.current(resolveValueFromPointerRef.current(event.clientX), dragThumbIndexRef.current);\n\t\t};\n\n\t\twindow.addEventListener(\"pointermove\", onPointerMove);\n\t\twindow.addEventListener(\"pointerup\", onPointerUp);\n\t\twindow.addEventListener(\"pointercancel\", onPointerUp);\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"pointermove\", onPointerMove);\n\t\t\twindow.removeEventListener(\"pointerup\", onPointerUp);\n\t\t\twindow.removeEventListener(\"pointercancel\", onPointerUp);\n\t\t};\n\t}, []);\n\n\tconst beginPointerDrag = (pointerId: number, thumbIndex: number) => {\n\t\tdragPointerIdRef.current = pointerId;\n\t\tdragThumbIndexRef.current = thumbIndex;\n\t\tsetDragThumbIndex(thumbIndex);\n\t\tthumbRefs.current[thumbIndex]?.focus();\n\t};\n\n\tconst handleTrackPointerDown = (event: React.PointerEvent<HTMLDivElement>) => {\n\t\tif (disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tconst rawValue = resolveValueFromPointer(event.clientX);\n\t\tconst thumbIndex = isRange ? getClosestSliderThumb(rawValue, visualRangeValue!) : 0;\n\n\t\tapplySliderValue(rawValue, thumbIndex);\n\t\tbeginPointerDrag(event.pointerId, thumbIndex);\n\t};\n\n\tconst handleThumbPointerDown = (thumbIndex: number) => (event: React.PointerEvent<HTMLButtonElement>) => {\n\t\tif (disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tbeginPointerDrag(event.pointerId, thumbIndex);\n\t};\n\n\tconst handleThumbKeyDown = (thumbIndex: number) => (event: KeyboardEvent<HTMLButtonElement>) => {\n\t\tif (disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lowerBound = isRange && thumbIndex === 1 ? visualRangeValue![0] : min;\n\t\tconst upperBound = isRange && thumbIndex === 0 ? visualRangeValue![1] : max;\n\t\tconst keyboardOffset = resolveKeyboardOffset(event.key);\n\n\t\tif (event.key === \"Home\") {\n\t\t\tevent.preventDefault();\n\t\t\tapplySliderValue(lowerBound, thumbIndex);\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === \"End\") {\n\t\t\tevent.preventDefault();\n\t\t\tapplySliderValue(upperBound, thumbIndex);\n\t\t\treturn;\n\t\t}\n\n\t\tif (keyboardOffset === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tconst baseValue = thumbValues[thumbIndex];\n\t\tconst nextValue = offsetNumberScaleValue(baseValue, keyboardOffset, sliderOptions, lowerBound, upperBound);\n\t\tapplySliderValue(nextValue, thumbIndex);\n\t};\n\n\tconst handleMarkSelect = (markValue: number) => {\n\t\tif (disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst thumbIndex = isRange ? getClosestSliderThumb(markValue, visualRangeValue!) : 0;\n\t\tapplySliderValue(markValue, thumbIndex);\n\t\tthumbRefs.current[thumbIndex]?.focus();\n\t};\n\n\tconst getThumbValueText = (thumbValue: number, thumbIndex: number) => {\n\t\tif (isRange) {\n\t\t\tconst publicValue = currentRangeValue![thumbIndex];\n\t\t\tconst exactMark = normalizedMarks.find((mark) => mark.value === thumbValue);\n\n\t\t\treturn exactMark?.label ?? formatRangeEndpoint(publicValue, thumbIndex);\n\t\t}\n\n\t\treturn getMarkLabelByValue(thumbValue, normalizedMarks);\n\t};\n\n\treturn (\n\t\t<InputUI\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tclassName={className}\n\t\t\tsize={size}\n\t\t\terror={error}\n\t\t\tcontrolId={controlId}\n\t\t\tlabelId={labelId}\n\t\t\tdescriptionId={descriptionId}\n\t\t\terrorId={errorId}>\n\t\t\t<div id={controlId} className={cn(styles.slider, marksDisplay === \"compact\" && styles.sliderCompact)}>\n\t\t\t\t<div className={styles.trackShell}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={trackRef}\n\t\t\t\t\t\tdata-slot=\"track\"\n\t\t\t\t\t\tclassName={styles.track}\n\t\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t\tonPointerDown={handleTrackPointerDown}>\n\t\t\t\t\t\t<div className={styles.rail} />\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tdata-slot=\"fill\"\n\t\t\t\t\t\t\tclassName={styles.fill}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tleft: `${fillRange.startPercent}%`,\n\t\t\t\t\t\t\t\twidth: `${fillRange.endPercent - fillRange.startPercent}%`\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{marksDisplay === \"compact\" &&\n\t\t\t\t\t\t\tnormalizedMarks.map((mark) => {\n\t\t\t\t\t\t\t\tconst markPercent = getSliderMarkPercent(mark, normalizedMarks, sliderOptions);\n\t\t\t\t\t\t\t\tconst isActive = isRange\n\t\t\t\t\t\t\t\t\t? mark.value >= visualRangeValue![0] && mark.value <= visualRangeValue![1]\n\t\t\t\t\t\t\t\t\t: mark.value <= currentSingleValue!;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<FloatingPopover key={mark.value} tooltip placement=\"top\" content={renderTooltipContent(mark.label)}>\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tdata-slot=\"mark\"\n\t\t\t\t\t\t\t\t\t\t\tdata-active={isActive ? \"\" : undefined}\n\t\t\t\t\t\t\t\t\t\t\tclassName={styles.compactMark}\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ left: `${markPercent}%` }}\n\t\t\t\t\t\t\t\t\t\t\taria-label={mark.ariaLabel}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleMarkSelect(mark.value)}>\n\t\t\t\t\t\t\t\t\t\t\t<span className={styles.markDot} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t</FloatingPopover>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t{thumbValues.map((thumbValue, thumbIndex) => {\n\t\t\t\t\t\t\tconst thumbLabel = getThumbValueText(thumbValue, thumbIndex);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<FloatingPopover\n\t\t\t\t\t\t\t\t\tkey={thumbIndex}\n\t\t\t\t\t\t\t\t\ttooltip\n\t\t\t\t\t\t\t\t\tplacement=\"top\"\n\t\t\t\t\t\t\t\t\tcontent={renderTooltipContent(thumbLabel)}\n\t\t\t\t\t\t\t\t\topenDelay={0}\n\t\t\t\t\t\t\t\t\tcloseDelay={100}>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tref={(node) => {\n\t\t\t\t\t\t\t\t\t\t\tthumbRefs.current[thumbIndex] = node;\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\trole=\"slider\"\n\t\t\t\t\t\t\t\t\t\tdata-slot=\"thumb\"\n\t\t\t\t\t\t\t\t\t\tdata-thumb-index={thumbIndex}\n\t\t\t\t\t\t\t\t\t\tdata-dragging={dragThumbIndex === thumbIndex ? \"\" : undefined}\n\t\t\t\t\t\t\t\t\t\tclassName={styles.thumb}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\tstyle={{ left: `${valueToSliderVisualPercent(thumbValue, sliderOptions)}%` }}\n\t\t\t\t\t\t\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\t\t\t\t\t\t\taria-orientation=\"horizontal\"\n\t\t\t\t\t\t\t\t\t\taria-valuemin={isRange && thumbIndex === 1 ? visualRangeValue![0] : min}\n\t\t\t\t\t\t\t\t\t\taria-valuemax={isRange && thumbIndex === 0 ? visualRangeValue![1] : max}\n\t\t\t\t\t\t\t\t\t\taria-valuenow={thumbValue}\n\t\t\t\t\t\t\t\t\t\taria-valuetext={\n\t\t\t\t\t\t\t\t\t\t\ttypeof thumbLabel === \"string\" || typeof thumbLabel === \"number\"\n\t\t\t\t\t\t\t\t\t\t\t\t? String(thumbLabel)\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\t\t\t\tlabelId\n\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t: isRange\n\t\t\t\t\t\t\t\t\t\t\t\t\t? thumbIndex === 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"Минимальное значение\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"Максимальное значение\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"Значение\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonPointerDown={handleThumbPointerDown(thumbIndex)}\n\t\t\t\t\t\t\t\t\t\tonKeyDown={handleThumbKeyDown(thumbIndex)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FloatingPopover>\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</div>\n\n\t\t\t\t{marksDisplay === \"full\" && normalizedMarks.length > 0 && (\n\t\t\t\t\t<div className={styles.marks}>\n\t\t\t\t\t\t{normalizedMarks.map((mark) => {\n\t\t\t\t\t\t\tconst isActive = isRange\n\t\t\t\t\t\t\t\t? mark.value >= visualRangeValue![0] && mark.value <= visualRangeValue![1]\n\t\t\t\t\t\t\t\t: mark.value <= currentSingleValue!;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tkey={mark.value}\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tdata-slot=\"mark\"\n\t\t\t\t\t\t\t\t\tdata-active={isActive ? \"\" : undefined}\n\t\t\t\t\t\t\t\t\tclassName={styles.mark}\n\t\t\t\t\t\t\t\t\tstyle={{ left: `${getSliderMarkPercent(mark, normalizedMarks, sliderOptions)}%` }}\n\t\t\t\t\t\t\t\t\taria-label={mark.ariaLabel}\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\tonClick={() => handleMarkSelect(mark.value)}>\n\t\t\t\t\t\t\t\t\t<span className={styles.markDot} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t<span className={styles.markLabel}>{mark.label}</span>\n\t\t\t\t\t\t\t\t</button>\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)}\n\t\t\t</div>\n\t\t</InputUI>\n\t);\n}\n\nexport function Slider(props: SliderProps) {\n\treturn <SliderBase {...props} mode=\"single\" marksDisplay=\"compact\" />;\n}\n\nexport function SliderRange(props: SliderRangeProps) {\n\treturn <SliderBase {...props} mode=\"range\" marksDisplay=\"compact\" />;\n}\n","import { KeyboardEvent, useCallback, useEffect, useEffectEvent, useMemo, useState } from \"react\";\n\nimport { toFiniteNumber } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { resolveNumberScaleBounds } from \"@ryuzaki13/react-foundation-lib/number-scale\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { InputControl, InputText, InputUI, useInputFieldIds } from \"../input\";\nimport { PickerTriggerActions } from \"../picker\";\nimport { Popover } from \"../popover\";\nimport { UiBaseProps } from \"../types\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport {\n\tgetRangeMarkOutputValue,\n\tnormalizeRangeSliderValue,\n\tnormalizeSingleSliderValue,\n\tprepareSliderMarks,\n\ttype SliderMark,\n\ttype SliderMarksPosition,\n\ttype SliderRangeMark,\n\ttype SliderRangeValue\n} from \"./lib\";\nimport { SliderBase } from \"./Slider\";\nimport styles from \"./Slider.module.scss\";\n\ninterface SliderInputCommonProps {\n\t/**\n\t * Минимальная координата шкалы. Marks вне этой границы не участвуют в выборе.\n\t */\n\tmin: number;\n\t/**\n\t * Максимальная координата шкалы. Marks вне этой границы не участвуют в выборе.\n\t */\n\tmax: number;\n\t/**\n\t * Шаг ручного ввода и слайдера, если не заданы marks.\n\t */\n\tstep?: number;\n\t/**\n\t * Способ визуального размещения marks и бегунка в popover.\n\t */\n\tmarksPosition?: SliderMarksPosition;\n\t/**\n\t * Внешний CSS-класс общей обёртки поля.\n\t */\n\tclassName?: string;\n\t/**\n\t * Текст внешней ошибки.\n\t */\n\terror?: string;\n\t/**\n\t * Сбрасывает внешнюю ошибку после успешного commit или выбора в popover.\n\t */\n\tonClearError?: () => void;\n}\n\nexport interface SliderInputProps extends UiBaseProps<number>, SliderInputCommonProps {\n\t/**\n\t * Marks single-слайдера. Single-компонент отдаёт наружу `mark.value`.\n\t */\n\tmarks?: readonly SliderMark[];\n}\n\nexport interface SliderRangeInputProps extends UiBaseProps<SliderRangeValue>, SliderInputCommonProps {\n\t/**\n\t * Marks range-слайдера. `value` задаёт координату на шкале, `outputValue` задаёт публичное значение для потребителя.\n\t */\n\tmarks?: readonly SliderRangeMark[];\n\t/**\n\t * Показывает вместо ручных сегментов готовый текст по выбранным marks.\n\t * Popover остаётся единственным способом изменить значение через слайдер, а потребитель получает изменение при закрытии popover.\n\t */\n\treadonlyValueText?: boolean;\n}\n\nfunction createSliderToggle({\n\topen,\n\tdisabled,\n\tsetOpen\n}: {\n\topen: boolean;\n\tdisabled?: boolean;\n\tsetOpen: (nextOpen: boolean | ((prev: boolean) => boolean)) => void;\n}) {\n\treturn (\n\t\t<Popover.Trigger passive>\n\t\t\t<div>\n\t\t\t\t<PickerTriggerActions\n\t\t\t\t\topen={open}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\topenAriaLabel=\"Открыть слайдер\"\n\t\t\t\t\tcloseAriaLabel=\"Закрыть слайдер\"\n\t\t\t\t\tonToggleMouseDown={(event) => event.preventDefault()}\n\t\t\t\t\tonToggleClick={() => setOpen((prev) => !prev)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</Popover.Trigger>\n\t);\n}\n\nfunction formatRangeDraft(\n\tvalue: SliderRangeValue | undefined,\n\toptions: {\n\t\tmin: number;\n\t\tmax: number;\n\t\tstep?: number;\n\t\tmarks?: readonly SliderRangeMark[];\n\t\tmarksPosition?: SliderMarksPosition;\n\t}\n) {\n\tconst normalized = normalizeRangeSliderValue(value, options);\n\n\treturn {\n\t\tstart: normalized[0] === null ? \"-∞\" : String(normalized[0]),\n\t\tend: normalized[1] === null ? \"∞\" : String(normalized[1])\n\t};\n}\n\nfunction parseRangeDraftSegment(value: string, infinityText: string) {\n\tconst trimmed = value.trim();\n\tif (trimmed === \"\" || trimmed === infinityText) {\n\t\treturn null;\n\t}\n\n\treturn toFiniteNumber(trimmed);\n}\n\nfunction getRangeMarkByOutputValue(value: number | null, marks: readonly SliderRangeMark[], endpoint: \"start\" | \"end\") {\n\tconst matchingMarks = marks.filter((mark) => getRangeMarkOutputValue(mark) === value);\n\n\tif (!matchingMarks.length) {\n\t\treturn undefined;\n\t}\n\n\treturn value === null && endpoint === \"end\" ? matchingMarks[matchingMarks.length - 1] : matchingMarks[0];\n}\n\nfunction getRangeMarkReadonlyLabel(mark: SliderRangeMark | undefined, value: number | null) {\n\tif (mark?.readonlyLabel?.trim()) {\n\t\treturn mark.readonlyLabel.trim();\n\t}\n\n\tif (typeof mark?.label === \"string\" || typeof mark?.label === \"number\") {\n\t\treturn String(mark.label);\n\t}\n\t// SHARE: lib/formatters/string.toSafeString\n\treturn value === null ? \"\" : String(value);\n}\n\nfunction getRangeEndpointLabel(value: number | null, marks: readonly SliderRangeMark[], endpoint: \"start\" | \"end\") {\n\tconst mark = getRangeMarkByOutputValue(value, marks, endpoint);\n\treturn getRangeMarkReadonlyLabel(mark, value);\n}\n\nfunction getRangeReadonlyText(value: SliderRangeValue, marks: readonly SliderRangeMark[], placeholder?: string) {\n\tconst [start, end] = value;\n\tconst isStartOpen = start === null;\n\tconst isEndOpen = end === null;\n\n\tif (isStartOpen && isEndOpen) {\n\t\treturn placeholder ?? \"\";\n\t}\n\n\tif (isStartOpen) {\n\t\treturn `Меньше ${getRangeEndpointLabel(end, marks, \"end\")}`;\n\t}\n\n\tif (isEndOpen) {\n\t\treturn `Больше ${getRangeEndpointLabel(start, marks, \"start\")}`;\n\t}\n\n\tif (start === end) {\n\t\treturn `Равно ${getRangeEndpointLabel(start, marks, \"start\")}`;\n\t}\n\n\treturn `От ${getRangeEndpointLabel(start, marks, \"start\")} до ${getRangeEndpointLabel(end, marks, \"end\")}`;\n}\n\nexport function SliderInput({\n\tvalue,\n\tonChange,\n\tmin: rawMin,\n\tmax: rawMax,\n\tstep,\n\tmarks,\n\tmarksPosition = \"value\",\n\tclassName,\n\terror,\n\tonClearError,\n\tlabel,\n\tdescription,\n\tplaceholder,\n\tdisabled,\n\tsize\n}: SliderInputProps) {\n\tconst { min, max } = useMemo(() => resolveNumberScaleBounds(rawMin, rawMax), [rawMin, rawMax]);\n\tconst normalizedMarks = useMemo(() => prepareSliderMarks(marks, min, max), [marks, min, max]);\n\tconst sliderOptions = useMemo(\n\t\t() => ({\n\t\t\tmin,\n\t\t\tmax,\n\t\t\tstep,\n\t\t\tmarks: normalizedMarks,\n\t\t\tmarksPosition\n\t\t}),\n\t\t[min, max, step, normalizedMarks, marksPosition]\n\t);\n\tconst normalizedValue = normalizeSingleSliderValue(value, sliderOptions);\n\n\tconst [open, setOpen] = useState(false);\n\tconst [draftValue, setDraftValue] = useState(String(normalizedValue));\n\n\tconst syncDraftValue = useEffectEvent((nextValue: string) => {\n\t\tsetDraftValue(nextValue);\n\t});\n\n\tuseEffect(() => {\n\t\tsyncDraftValue(String(normalizedValue));\n\t}, [normalizedValue]);\n\n\tconst commitDraftValue = useCallback(() => {\n\t\tif (disabled) {\n\t\t\tsetDraftValue(String(normalizedValue));\n\t\t\treturn;\n\t\t}\n\n\t\tconst parsedValue = toFiniteNumber(draftValue);\n\t\tif (parsedValue === undefined) {\n\t\t\tsetDraftValue(String(normalizedValue));\n\t\t\treturn;\n\t\t}\n\n\t\tconst nextValue = normalizeSingleSliderValue(parsedValue, sliderOptions);\n\t\tif (value !== nextValue) {\n\t\t\tonChange(nextValue);\n\t\t\tonClearError?.();\n\t\t}\n\n\t\tsetDraftValue(String(nextValue));\n\t}, [disabled, draftValue, normalizedValue, onChange, onClearError, sliderOptions, value]);\n\n\tconst handleDraftKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n\t\tif (event.key !== \"Enter\") {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tcommitDraftValue();\n\t};\n\n\tconst handleSliderChange = (nextValue: number) => {\n\t\tonChange(nextValue);\n\t\tsetDraftValue(String(nextValue));\n\t\tonClearError?.();\n\t};\n\n\treturn (\n\t\t<Popover open={open} onOpenChange={setOpen}>\n\t\t\t<InputText\n\t\t\t\tlabel={label}\n\t\t\t\tdescription={description}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tsize={size}\n\t\t\t\tclassName={className}\n\t\t\t\terror={error}\n\t\t\t\tvalue={draftValue}\n\t\t\t\tonChange={setDraftValue}\n\t\t\t\tonBlur={commitDraftValue}\n\t\t\t\tonKeyDown={handleDraftKeyDown}\n\t\t\t\tendAdornmentWidth=\"var(--control-height)\"\n\t\t\t\tendAdornment={createSliderToggle({ open, disabled, setOpen })}\n\t\t\t/>\n\n\t\t\t<Popover.Content background=\"primary\">\n\t\t\t\t<div className={styles.popoverContent}>\n\t\t\t\t\t<SliderBase\n\t\t\t\t\t\tmode=\"single\"\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\tstep={step}\n\t\t\t\t\t\tmarks={normalizedMarks}\n\t\t\t\t\t\tmarksPosition={marksPosition}\n\t\t\t\t\t\tmarksDisplay=\"full\"\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonChange={handleSliderChange}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</Popover.Content>\n\t\t</Popover>\n\t);\n}\n\nexport function SliderRangeInput({\n\tvalue,\n\tonChange,\n\tmin: rawMin,\n\tmax: rawMax,\n\tstep,\n\tmarks,\n\tmarksPosition = \"value\",\n\tclassName,\n\terror,\n\tonClearError,\n\tlabel,\n\tdescription,\n\treadonlyValueText,\n\tplaceholder,\n\tdisabled,\n\tsize\n}: SliderRangeInputProps) {\n\tconst { min, max } = useMemo(() => resolveNumberScaleBounds(rawMin, rawMax), [rawMin, rawMax]);\n\tconst normalizedMarks = useMemo(() => prepareSliderMarks(marks, min, max), [marks, min, max]);\n\tconst sliderOptions = useMemo(\n\t\t() => ({\n\t\t\tmin,\n\t\t\tmax,\n\t\t\tstep,\n\t\t\tmarks: normalizedMarks,\n\t\t\tmarksPosition\n\t\t}),\n\t\t[min, max, step, normalizedMarks, marksPosition]\n\t);\n\tconst normalizedValue = useMemo(() => normalizeRangeSliderValue(value, sliderOptions), [sliderOptions, value]);\n\tconst formattedValue = useMemo(() => formatRangeDraft(normalizedValue, sliderOptions), [normalizedValue, sliderOptions]);\n\n\tconst [open, setOpen] = useState(false);\n\tconst [draftStart, setDraftStart] = useState(formattedValue.start);\n\tconst [draftEnd, setDraftEnd] = useState(formattedValue.end);\n\tconst [popoverValue, setPopoverValue] = useState<SliderRangeValue>(normalizedValue);\n\n\tconst syncDraftValue = useEffectEvent((start: string, end: string) => {\n\t\tsetDraftStart(start);\n\t\tsetDraftEnd(end);\n\t});\n\n\tuseEffect(() => {\n\t\tif (open) {\n\t\t\treturn;\n\t\t}\n\n\t\tsyncDraftValue(formattedValue.start, formattedValue.end);\n\t}, [formattedValue.start, formattedValue.end, normalizedValue, open]);\n\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\n\t});\n\n\tconst rollbackDraftValue = useCallback(() => {\n\t\tsetDraftStart(formattedValue.start);\n\t\tsetDraftEnd(formattedValue.end);\n\t}, [formattedValue.end, formattedValue.start]);\n\n\tconst commitDraftValue = useCallback(() => {\n\t\tif (disabled) {\n\t\t\trollbackDraftValue();\n\t\t\treturn;\n\t\t}\n\n\t\tconst parsedStart = parseRangeDraftSegment(draftStart, \"-∞\");\n\t\tconst parsedEnd = parseRangeDraftSegment(draftEnd, \"∞\");\n\n\t\tif (parsedStart === undefined || parsedEnd === undefined) {\n\t\t\trollbackDraftValue();\n\t\t\treturn;\n\t\t}\n\n\t\tconst nextValue = normalizeRangeSliderValue([parsedStart, parsedEnd], sliderOptions);\n\t\tif (!areRangeDraftValuesEqual(normalizedValue, nextValue)) {\n\t\t\tonChange(nextValue);\n\t\t\tonClearError?.();\n\t\t}\n\n\t\tconst nextDraft = formatRangeDraft(nextValue, sliderOptions);\n\t\tsetDraftStart(nextDraft.start);\n\t\tsetDraftEnd(nextDraft.end);\n\t\tsetPopoverValue(nextValue);\n\t}, [disabled, draftEnd, draftStart, normalizedValue, onChange, onClearError, rollbackDraftValue, sliderOptions]);\n\n\tconst commitPopoverValue = useCallback(\n\t\t(nextValue: SliderRangeValue) => {\n\t\t\tconst normalizedNextValue = normalizeRangeSliderValue(nextValue, sliderOptions);\n\t\t\tif (!areRangeDraftValuesEqual(normalizedValue, normalizedNextValue)) {\n\t\t\t\tonChange(normalizedNextValue);\n\t\t\t\tonClearError?.();\n\t\t\t}\n\n\t\t\tconst nextDraft = formatRangeDraft(normalizedNextValue, sliderOptions);\n\t\t\tsetDraftStart(nextDraft.start);\n\t\t\tsetDraftEnd(nextDraft.end);\n\t\t\tsetPopoverValue(normalizedNextValue);\n\t\t},\n\t\t[normalizedValue, onChange, onClearError, sliderOptions]\n\t);\n\n\tconst handleOpenChange = (nextOpen: boolean) => {\n\t\tif (!open && nextOpen) {\n\t\t\tsetPopoverValue(normalizedValue);\n\t\t\tsetDraftStart(formattedValue.start);\n\t\t\tsetDraftEnd(formattedValue.end);\n\t\t}\n\n\t\tif (open && !nextOpen && !disabled) {\n\t\t\tcommitPopoverValue(popoverValue);\n\t\t}\n\n\t\tsetOpen(nextOpen);\n\t};\n\n\tconst handleDraftKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n\t\tif (event.key !== \"Enter\") {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tcommitDraftValue();\n\t};\n\n\tconst handleSliderChange = (nextValue: SliderRangeValue) => {\n\t\tconst normalizedNextValue = normalizeRangeSliderValue(nextValue, sliderOptions);\n\t\tsetPopoverValue(normalizedNextValue);\n\t\tconst nextDraft = formatRangeDraft(normalizedNextValue, sliderOptions);\n\t\tsetDraftStart(nextDraft.start);\n\t\tsetDraftEnd(nextDraft.end);\n\t};\n\tconst displayValue = open ? popoverValue : normalizedValue;\n\tconst readonlyTextValue = readonlyValueText ? getRangeReadonlyText(displayValue, normalizedMarks, placeholder) : undefined;\n\tconst setRangeOpen = (nextOpen: boolean | ((prev: boolean) => boolean)) => {\n\t\thandleOpenChange(typeof nextOpen === \"function\" ? nextOpen(open) : nextOpen);\n\t};\n\n\treturn (\n\t\t<Popover open={open} onOpenChange={handleOpenChange}>\n\t\t\t<InputUI\n\t\t\t\tlabel={label}\n\t\t\t\tdescription={description}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tclassName={className}\n\t\t\t\tsize={size}\n\t\t\t\terror={error}\n\t\t\t\tcontrolId={controlId}\n\t\t\t\tlabelId={labelId}\n\t\t\t\tdescriptionId={descriptionId}\n\t\t\t\terrorId={errorId}>\n\t\t\t\t<InputControl\n\t\t\t\t\tendAdornmentWidth=\"var(--control-height)\"\n\t\t\t\t\tendAdornment={createSliderToggle({ open, disabled, setOpen: setRangeOpen })}>\n\t\t\t\t\t{({ controlClassName }) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\t\tclassName={cn(uiStyles.uiInputControlFake, styles.rangeInputControl, controlClassName)}\n\t\t\t\t\t\t\tdata-invalid={error ? \"\" : undefined}\n\t\t\t\t\t\t\tdata-disabled={disabled || undefined}\n\t\t\t\t\t\t\trole=\"group\"\n\t\t\t\t\t\t\taria-invalid={!!error || undefined}\n\t\t\t\t\t\t\taria-label={typeof label === \"string\" ? label : \"Диапазон\"}\n\t\t\t\t\t\t\taria-labelledby={typeof label === \"string\" ? undefined : labelId}\n\t\t\t\t\t\t\taria-describedby={describedBy}>\n\t\t\t\t\t\t\t{readonlyValueText ? (\n\t\t\t\t\t\t\t\t<span className={cn(\"flexEllipsis\", !readonlyTextValue && uiStyles.uiPlaceholder)}>\n\t\t\t\t\t\t\t\t\t{readonlyTextValue || placeholder}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\tinputMode=\"decimal\"\n\t\t\t\t\t\t\t\t\t\tclassName={styles.rangeSegmentInput}\n\t\t\t\t\t\t\t\t\t\tvalue={draftStart}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Начало диапазона\"\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => setDraftStart(event.target.value)}\n\t\t\t\t\t\t\t\t\t\tonBlur={commitDraftValue}\n\t\t\t\t\t\t\t\t\t\tonKeyDown={handleDraftKeyDown}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<span className={styles.rangeSeparator} data-disabled={disabled || undefined}>\n\t\t\t\t\t\t\t\t\t\t-\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\tinputMode=\"decimal\"\n\t\t\t\t\t\t\t\t\t\tclassName={styles.rangeSegmentInput}\n\t\t\t\t\t\t\t\t\t\tvalue={draftEnd}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Конец диапазона\"\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => setDraftEnd(event.target.value)}\n\t\t\t\t\t\t\t\t\t\tonBlur={commitDraftValue}\n\t\t\t\t\t\t\t\t\t\tonKeyDown={handleDraftKeyDown}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</InputControl>\n\t\t\t</InputUI>\n\n\t\t\t<Popover.Content background=\"primary\">\n\t\t\t\t<div className={styles.popoverContent}>\n\t\t\t\t\t<SliderBase\n\t\t\t\t\t\tmode=\"range\"\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\tstep={step}\n\t\t\t\t\t\tmarks={normalizedMarks}\n\t\t\t\t\t\tmarksPosition={marksPosition}\n\t\t\t\t\t\tmarksDisplay=\"full\"\n\t\t\t\t\t\tvalue={popoverValue}\n\t\t\t\t\t\tonChange={handleSliderChange}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</Popover.Content>\n\t\t</Popover>\n\t);\n}\n\nfunction areRangeDraftValuesEqual(left: SliderRangeValue, right: SliderRangeValue) {\n\treturn left[0] === right[0] && left[1] === right[1];\n}\n"],"mappings":"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"}
@@ -1,384 +0,0 @@
1
- import { d as e, h as t, l as n } from "./misc-DoqZBMof.js";
2
- import { Children as r, isValidElement as i, useId as a, useMemo as o, useRef as s, useState as c } from "react";
3
- import { cn as l, getRovingFocusTargetIndex as u } from "@ryuzaki13/react-foundation-lib/utils";
4
- import { Fragment as d, jsx as f, jsxs as p } from "react/jsx-runtime";
5
- //#region src/tabs/lib/tabs.ts
6
- function m(e) {
7
- return e.find((e) => !e.disabled)?.id ?? null;
8
- }
9
- function h(e, t) {
10
- return t ? e.find((e) => e.id === t && !e.disabled)?.id ?? m(e) : m(e);
11
- }
12
- function g(e) {
13
- return e.filter((e) => !e.disabled);
14
- }
15
- function _({ mountStrategy: e, isSelected: t, isVisited: n }) {
16
- return e === "keep-mounted" || t || e === "lazy" && n;
17
- }
18
- //#endregion
19
- //#region src/tabs/model/useTabsState.ts
20
- function v({ items: e, value: t, defaultValue: n, onValueChange: r, orientation: i = "horizontal", activationMode: l = "automatic", loop: d = !0 }) {
21
- let f = t !== void 0, p = o(() => g(e), [e]), m = p[0]?.id ?? null, [_, v] = c(() => h(e, n)), [y, b] = c(() => h(e, t ?? n)), x = h(e, t ?? n), [S, C] = c(() => x ? /* @__PURE__ */ new Set([x]) : /* @__PURE__ */ new Set()), w = a(), T = s({}), E = h(e, f ? t : _), D = h(e, y) ?? E ?? m, O = o(() => {
22
- if (!E || S.has(E)) return S;
23
- let e = new Set(S);
24
- return e.add(E), e;
25
- }, [E, S]), k = (t) => {
26
- let n = h(e, t);
27
- n && (C((e) => {
28
- if (e.has(n)) return e;
29
- let t = new Set(e);
30
- return t.add(n), t;
31
- }), f || v(n), r?.(n));
32
- }, A = (e) => {
33
- T.current[e]?.focus();
34
- }, j = (e) => {
35
- if (p.length < 2) return;
36
- let t = u({
37
- currentIndex: Math.max(0, p.findIndex((e) => e.id === (D ?? E ?? m))),
38
- itemCount: p.length,
39
- key: e.key,
40
- orientation: i,
41
- wrap: d
42
- });
43
- if (t === null) return;
44
- e.preventDefault();
45
- let n = p[t]?.id;
46
- n && (b(n), A(n), l === "automatic" && k(n));
47
- }, M = (e) => {
48
- let t = e.relatedTarget;
49
- t instanceof Node && e.currentTarget.contains(t) || b(E ?? m);
50
- }, N = (e) => `${w}-tab-${e}`, P = (e) => `${w}-panel-${e}`;
51
- return {
52
- activationMode: l,
53
- orientation: i,
54
- selectedTabId: E,
55
- tabbableTabId: D,
56
- onTabListKeyDown: j,
57
- onTabListBlur: M,
58
- getTabElementId: N,
59
- getPanelElementId: P,
60
- getTabButtonProps: (e) => {
61
- let t = e.id === E, n = e.id === D;
62
- return {
63
- ref: (t) => {
64
- T.current[e.id] = t;
65
- },
66
- type: "button",
67
- role: "tab",
68
- id: N(e.id),
69
- disabled: e.disabled,
70
- "aria-selected": t,
71
- "aria-controls": P(e.id),
72
- "aria-disabled": e.disabled || void 0,
73
- tabIndex: e.disabled ? -1 : n ? 0 : -1,
74
- onFocus: () => b(e.id),
75
- onClick: () => k(e.id)
76
- };
77
- },
78
- isVisited: (e) => O.has(e)
79
- };
80
- }
81
- var y = {
82
- tabsContainer: "pcMjuj",
83
- bordered: "ITP5v-",
84
- cleanPanel: "kzs94N",
85
- tabs: "ZSAoAa",
86
- panels: "psYhsZ",
87
- horizontal: "mNDq9-",
88
- vertical: "g156KO",
89
- panelScrollable: "C2mO1e",
90
- tab: "_28F3fs",
91
- selected: "UKZXTZ",
92
- panel: "jiTafe",
93
- panelBody: "nhD0k7",
94
- layoutPanels: "G8FICe",
95
- layoutPanel: "W50XHh",
96
- layoutSection: "vnjXkU",
97
- layoutContent: "Nzvfhw"
98
- };
99
- //#endregion
100
- //#region src/tabs/ui/TabsLoadingState.tsx
101
- function b({ containerClassName: e, tabListClassName: n, panelsClassName: r, panelClassName: i, panelBodyClassName: a, loadingText: o }) {
102
- return /* @__PURE__ */ p("div", {
103
- className: e,
104
- children: [/* @__PURE__ */ f("div", {
105
- className: n,
106
- "aria-hidden": "true",
107
- children: /* @__PURE__ */ f("button", {
108
- type: "button",
109
- disabled: !0,
110
- "data-disabled": "",
111
- className: l(y.tab, "skeletonLine"),
112
- children: "Загрузка..."
113
- })
114
- }), /* @__PURE__ */ f("div", {
115
- className: r,
116
- "aria-busy": "true",
117
- children: /* @__PURE__ */ f("div", {
118
- className: i,
119
- children: /* @__PURE__ */ f("div", {
120
- className: a,
121
- children: /* @__PURE__ */ f(t, {
122
- text: o,
123
- className: "radiusSm"
124
- })
125
- })
126
- })
127
- })]
128
- });
129
- }
130
- //#endregion
131
- //#region src/tabs/ui/TabsNoDataState.tsx
132
- function x({ containerClassName: t, panelsClassName: n, panelClassName: r, panelBodyClassName: i }) {
133
- return /* @__PURE__ */ f("div", {
134
- className: t,
135
- children: /* @__PURE__ */ f("div", {
136
- className: n,
137
- children: /* @__PURE__ */ f("div", {
138
- className: r,
139
- children: /* @__PURE__ */ f("div", {
140
- className: i,
141
- children: /* @__PURE__ */ f(e, { className: "radiusSm" })
142
- })
143
- })
144
- })
145
- });
146
- }
147
- //#endregion
148
- //#region src/tabs/ui/TabsPanel.tsx
149
- function S({ tabId: e, isSelected: t, className: n, getTabElementId: r, getPanelElementId: i, children: a }) {
150
- return /* @__PURE__ */ f("div", {
151
- role: "tabpanel",
152
- id: i(e),
153
- "aria-labelledby": r(e),
154
- hidden: !t,
155
- className: n,
156
- children: a
157
- });
158
- }
159
- //#endregion
160
- //#region src/tabs/ui/TabsTabList.tsx
161
- function C({ items: e, state: t, className: r, ariaLabel: i, ariaLabelledBy: a }) {
162
- return /* @__PURE__ */ f("div", {
163
- className: r,
164
- role: "tablist",
165
- "aria-orientation": t.orientation,
166
- "aria-label": i,
167
- "aria-labelledby": a,
168
- onKeyDown: t.onTabListKeyDown,
169
- onBlur: t.onTabListBlur,
170
- children: ((e) => t.orientation === "horizontal" ? /* @__PURE__ */ f(n, { children: e }) : /* @__PURE__ */ f(d, { children: e }))(e.map((e) => /* @__PURE__ */ f("button", {
171
- ...t.getTabButtonProps(e),
172
- "data-ui": "tabs-tab",
173
- "data-action": "select-tab",
174
- className: l(y.tab, "textWrap", e.id === t.selectedTabId && y.selected),
175
- children: e.title
176
- }, e.id)))
177
- });
178
- }
179
- //#endregion
180
- //#region src/tabs/ui/TabsBox.tsx
181
- function w({ items: e, value: t, defaultValue: n, onValueChange: r, className: i, isLoading: a, loadingText: o, cleanPanel: s, bordered: c = !1, orientation: u = "horizontal", activationMode: d = "automatic", mountStrategy: m = "unmount", loop: h = !0, "aria-label": g, "aria-labelledby": w }) {
182
- let T = v({
183
- items: e,
184
- value: t,
185
- defaultValue: n,
186
- onValueChange: r,
187
- orientation: u,
188
- activationMode: d,
189
- loop: h
190
- }), E = l(y.tabsContainer, y[u], c && y.bordered, s && y.cleanPanel, i), D = y.tabs, O = l(y.panels, y.panelScrollable, "scrollable overscroll"), k = y.panel, A = y.panelBody;
191
- return a ? /* @__PURE__ */ f(b, {
192
- containerClassName: E,
193
- tabListClassName: D,
194
- panelsClassName: O,
195
- panelClassName: k,
196
- panelBodyClassName: A,
197
- loadingText: o
198
- }) : e.length ? /* @__PURE__ */ p("div", {
199
- className: E,
200
- children: [/* @__PURE__ */ f(C, {
201
- items: e,
202
- state: T,
203
- className: D,
204
- ariaLabel: g,
205
- ariaLabelledBy: w
206
- }), /* @__PURE__ */ f("div", {
207
- className: O,
208
- children: e.map((e) => {
209
- let t = e.id === T.selectedTabId;
210
- return _({
211
- mountStrategy: m,
212
- isSelected: t,
213
- isVisited: T.isVisited(e.id)
214
- }) ? /* @__PURE__ */ f(S, {
215
- tabId: e.id,
216
- isSelected: t,
217
- className: k,
218
- getTabElementId: T.getTabElementId,
219
- getPanelElementId: T.getPanelElementId,
220
- children: /* @__PURE__ */ f("div", {
221
- className: A,
222
- children: e.content
223
- })
224
- }, e.id) : null;
225
- })
226
- })]
227
- }) : /* @__PURE__ */ f(x, {
228
- containerClassName: E,
229
- panelsClassName: O,
230
- panelClassName: k,
231
- panelBodyClassName: A
232
- });
233
- }
234
- //#endregion
235
- //#region src/tabs/ui/Tabs.tsx
236
- function T({ onChange: e, onValueChange: t, ...n }) {
237
- return /* @__PURE__ */ f(w, {
238
- ...n,
239
- onValueChange: (n) => {
240
- t?.(n), e?.(n);
241
- }
242
- });
243
- }
244
- //#endregion
245
- //#region src/tabs/ui/TabsLayout.tsx
246
- var E = "TabsLayout.Tab", D = "TabsLayout.Toolbar", O = "TabsLayout.Content", k = "TabsLayout.Footer";
247
- function A(e) {
248
- let { type: t } = e;
249
- if (typeof t == "function") {
250
- let e = t;
251
- return e.displayName ?? e.name ?? null;
252
- }
253
- if (typeof t == "object" && t && "displayName" in t) {
254
- let e = t;
255
- return typeof e.displayName == "string" ? e.displayName : null;
256
- }
257
- return null;
258
- }
259
- function j(e, t) {
260
- return i(e) && A(e) === t;
261
- }
262
- function M({ children: e }) {
263
- return /* @__PURE__ */ f(d, { children: e });
264
- }
265
- M.displayName = E;
266
- function N({ children: e }) {
267
- return /* @__PURE__ */ f(d, { children: e });
268
- }
269
- N.displayName = D;
270
- function P({ children: e }) {
271
- return /* @__PURE__ */ f(d, { children: e });
272
- }
273
- P.displayName = O;
274
- function F({ children: e }) {
275
- return /* @__PURE__ */ f(d, { children: e });
276
- }
277
- F.displayName = k;
278
- function I(e, t) {
279
- let n = null, a = null, o = null;
280
- for (let s of r.toArray(e)) {
281
- if (!i(s)) throw Error(`TabsLayout.Tab "${t}" поддерживает только дочерние элементы TabsLayout.Toolbar, TabsLayout.Content и TabsLayout.Footer.`);
282
- if (j(s, D)) {
283
- if (n) throw Error(`TabsLayout.Tab "${t}" содержит более одного блока TabsLayout.Toolbar.`);
284
- n = s.props;
285
- continue;
286
- }
287
- if (j(s, O)) {
288
- if (a) throw Error(`TabsLayout.Tab "${t}" содержит более одного блока TabsLayout.Content.`);
289
- a = s.props;
290
- continue;
291
- }
292
- if (j(s, k)) {
293
- if (o) throw Error(`TabsLayout.Tab "${t}" содержит более одного блока TabsLayout.Footer.`);
294
- o = s.props;
295
- continue;
296
- }
297
- throw Error(`TabsLayout.Tab "${t}" поддерживает только дочерние элементы TabsLayout.Toolbar, TabsLayout.Content и TabsLayout.Footer.`);
298
- }
299
- if (!a) throw Error(`TabsLayout.Tab "${t}" должен содержать блок TabsLayout.Content.`);
300
- return {
301
- toolbar: n,
302
- content: a,
303
- footer: o
304
- };
305
- }
306
- function L(e) {
307
- return r.toArray(e).map((e) => {
308
- if (!j(e, E)) throw Error("TabsLayout принимает только дочерние элементы TabsLayout.Tab.");
309
- return {
310
- id: e.props.id,
311
- title: e.props.title,
312
- disabled: e.props.disabled,
313
- ...I(e.props.children, e.props.id)
314
- };
315
- });
316
- }
317
- var R = ({ children: e, value: t, defaultValue: n, onValueChange: r, className: i, bordered: a, cleanPanel: s, orientation: c = "horizontal", activationMode: u = "manual", mountStrategy: d = "lazy", loop: m = !0, "aria-label": h, "aria-labelledby": g }) => {
318
- let b = o(() => L(e), [e]), x = v({
319
- items: b,
320
- value: t,
321
- defaultValue: n,
322
- onValueChange: r,
323
- orientation: c,
324
- activationMode: u,
325
- loop: m
326
- }), w = l(y.tabsContainer, y[c], a && y.bordered, s && y.cleanPanel, i), T = l(y.panels, y.layoutPanels);
327
- return /* @__PURE__ */ p("div", {
328
- className: w,
329
- children: [/* @__PURE__ */ f(C, {
330
- items: b,
331
- state: x,
332
- className: y.tabs,
333
- ariaLabel: h,
334
- ariaLabelledBy: g
335
- }), /* @__PURE__ */ f("div", {
336
- className: T,
337
- children: b.map((e) => {
338
- let t = e.id === x.selectedTabId;
339
- if (!_({
340
- mountStrategy: d,
341
- isSelected: t,
342
- isVisited: x.isVisited(e.id)
343
- })) return null;
344
- let n = `${e.toolbar ? "auto " : ""}minmax(0, 1fr)${e.footer ? " auto" : ""}`;
345
- return /* @__PURE__ */ f(S, {
346
- tabId: e.id,
347
- isSelected: t,
348
- className: y.panel,
349
- getTabElementId: x.getTabElementId,
350
- getPanelElementId: x.getPanelElementId,
351
- children: /* @__PURE__ */ p("div", {
352
- className: y.layoutPanel,
353
- style: { gridTemplateRows: n },
354
- children: [
355
- e.toolbar ? /* @__PURE__ */ f("div", {
356
- className: l(y.layoutSection, e.toolbar.className),
357
- children: e.toolbar.children
358
- }) : null,
359
- /* @__PURE__ */ f("div", {
360
- className: l(y.layoutSection, y.layoutContent, e.content.className),
361
- children: e.content.children
362
- }),
363
- e.footer ? /* @__PURE__ */ f("div", {
364
- className: l(y.layoutSection, e.footer.className),
365
- children: e.footer.children
366
- }) : null
367
- ]
368
- })
369
- }, e.id);
370
- })
371
- })]
372
- });
373
- };
374
- R.displayName = "TabsLayout";
375
- var z = Object.assign(R, {
376
- Tab: M,
377
- Toolbar: N,
378
- Content: P,
379
- Footer: F
380
- });
381
- //#endregion
382
- export { T as n, w as r, z as t };
383
-
384
- //# sourceMappingURL=tabs-DlnVVMJl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabs-DlnVVMJl.js","names":[],"sources":["../../src/tabs/lib/tabs.ts","../../src/tabs/model/useTabsState.ts","../../src/tabs/ui/Tabs.module.scss","../../src/tabs/ui/TabsLoadingState.tsx","../../src/tabs/ui/TabsNoDataState.tsx","../../src/tabs/ui/TabsPanel.tsx","../../src/tabs/ui/TabsTabList.tsx","../../src/tabs/ui/TabsBox.tsx","../../src/tabs/ui/Tabs.tsx","../../src/tabs/ui/TabsLayout.tsx"],"sourcesContent":["import type { TabsDescriptor, TabsMountStrategy } from \"../model/types\";\n\n/**\n * Возвращает идентификатор первой доступной вкладки.\n */\nexport function getFirstEnabledTabId(items: TabsDescriptor[]) {\n\treturn items.find((item) => !item.disabled)?.id ?? null;\n}\n\n/**\n * Возвращает безопасный идентификатор вкладки.\n * Если переданный `candidate` недоступен, выбирается первая доступная вкладка.\n */\nexport function getSafeTabId(items: TabsDescriptor[], candidate: string | undefined | null) {\n\tif (!candidate) {\n\t\treturn getFirstEnabledTabId(items);\n\t}\n\n\tconst matchedItem = items.find((item) => item.id === candidate && !item.disabled);\n\treturn matchedItem?.id ?? getFirstEnabledTabId(items);\n}\n\n/**\n * Возвращает только доступные вкладки для roving focus и клавиатурной навигации.\n */\nexport function getEnabledTabs(items: TabsDescriptor[]) {\n\treturn items.filter((item) => !item.disabled);\n}\n\ninterface ShouldMountTabPanelOptions {\n\tmountStrategy: TabsMountStrategy;\n\tisSelected: boolean;\n\tisVisited: boolean;\n}\n\n/**\n * Определяет, должна ли панель оставаться смонтированной с учётом стратегии монтирования.\n */\nexport function shouldMountTabPanel({ mountStrategy, isSelected, isVisited }: ShouldMountTabPanelOptions) {\n\treturn mountStrategy === \"keep-mounted\" || isSelected || (mountStrategy === \"lazy\" && isVisited);\n}\n","import type React from \"react\";\nimport { FocusEvent, KeyboardEvent, useId, useMemo, useRef, useState } from \"react\";\n\nimport { getRovingFocusTargetIndex } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { getEnabledTabs, getSafeTabId } from \"../lib/tabs\";\n\nimport type { TabsActivationMode, TabsDescriptor, TabsOrientation } from \"./types\";\n\ninterface UseTabsStateOptions {\n\titems: TabsDescriptor[];\n\tvalue?: string;\n\tdefaultValue?: string;\n\tonValueChange?: (value: string) => void;\n\torientation?: TabsOrientation;\n\tactivationMode?: TabsActivationMode;\n\tloop?: boolean;\n}\n\n/**\n * Публичная часть модели, необходимая визуальным подкомпонентам tabs.\n */\nexport interface TabsStateModel {\n\tactivationMode: TabsActivationMode;\n\torientation: TabsOrientation;\n\tselectedTabId: string | null;\n\ttabbableTabId: string | null;\n\tonTabListKeyDown: (event: KeyboardEvent<HTMLDivElement>) => void;\n\tonTabListBlur: (event: FocusEvent<HTMLDivElement>) => void;\n\tgetTabElementId: (tabId: string) => string;\n\tgetPanelElementId: (tabId: string) => string;\n\tgetTabButtonProps: (item: TabsDescriptor) => React.ButtonHTMLAttributes<HTMLButtonElement> & {\n\t\tref: (node: HTMLButtonElement | null) => void;\n\t};\n\tisVisited: (tabId: string) => boolean;\n}\n\n/**\n * Инкапсулирует state, a11y-связки и клавиатурную навигацию для всех оболочек tabs.\n */\nexport function useTabsState({\n\titems,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\torientation = \"horizontal\",\n\tactivationMode = \"automatic\",\n\tloop = true\n}: UseTabsStateOptions): TabsStateModel {\n\tconst isControlled = value !== undefined;\n\tconst enabledTabs = useMemo(() => getEnabledTabs(items), [items]);\n\tconst fallbackTabId = enabledTabs[0]?.id ?? null;\n\tconst [internalValue, setInternalValue] = useState(() => getSafeTabId(items, defaultValue));\n\tconst [focusedTabId, setFocusedTabId] = useState<string | null>(() => getSafeTabId(items, value ?? defaultValue));\n\tconst initialVisitedTabId = getSafeTabId(items, value ?? defaultValue);\n\tconst [visitedTabsState, setVisitedTabsState] = useState<Set<string>>(() =>\n\t\tinitialVisitedTabId ? new Set([initialVisitedTabId]) : new Set()\n\t);\n\tconst tabsId = useId();\n\tconst tabRefs = useRef<Record<string, HTMLButtonElement | null>>({});\n\n\tconst selectedTabId = getSafeTabId(items, isControlled ? value : internalValue);\n\tconst nextTabbableTabId = getSafeTabId(items, focusedTabId) ?? selectedTabId ?? fallbackTabId;\n\tconst visitedTabs = useMemo(() => {\n\t\tif (!selectedTabId || visitedTabsState.has(selectedTabId)) {\n\t\t\treturn visitedTabsState;\n\t\t}\n\n\t\tconst next = new Set(visitedTabsState);\n\t\tnext.add(selectedTabId);\n\t\treturn next;\n\t}, [selectedTabId, visitedTabsState]);\n\n\tconst activateTab = (nextTabId: string) => {\n\t\tconst safeNextTabId = getSafeTabId(items, nextTabId);\n\t\tif (!safeNextTabId) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetVisitedTabsState((prev) => {\n\t\t\tif (prev.has(safeNextTabId)) {\n\t\t\t\treturn prev;\n\t\t\t}\n\n\t\t\tconst next = new Set(prev);\n\t\t\tnext.add(safeNextTabId);\n\t\t\treturn next;\n\t\t});\n\n\t\tif (!isControlled) {\n\t\t\tsetInternalValue(safeNextTabId);\n\t\t}\n\n\t\tonValueChange?.(safeNextTabId);\n\t};\n\n\tconst focusTab = (nextTabId: string) => {\n\t\ttabRefs.current[nextTabId]?.focus();\n\t};\n\n\tconst onTabListKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n\t\tif (enabledTabs.length < 2) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst activeFocusIndex = Math.max(\n\t\t\t0,\n\t\t\tenabledTabs.findIndex((item) => item.id === (nextTabbableTabId ?? selectedTabId ?? fallbackTabId))\n\t\t);\n\t\tconst nextEnabledIndex = getRovingFocusTargetIndex({\n\t\t\tcurrentIndex: activeFocusIndex,\n\t\t\titemCount: enabledTabs.length,\n\t\t\tkey: event.key,\n\t\t\torientation,\n\t\t\twrap: loop\n\t\t});\n\n\t\tif (nextEnabledIndex === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tconst nextTabId = enabledTabs[nextEnabledIndex]?.id;\n\t\tif (!nextTabId) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetFocusedTabId(nextTabId);\n\t\tfocusTab(nextTabId);\n\n\t\tif (activationMode === \"automatic\") {\n\t\t\tactivateTab(nextTabId);\n\t\t}\n\t};\n\n\tconst onTabListBlur = (event: FocusEvent<HTMLDivElement>) => {\n\t\tconst nextTarget = event.relatedTarget;\n\n\t\tif (nextTarget instanceof Node && event.currentTarget.contains(nextTarget)) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetFocusedTabId(selectedTabId ?? fallbackTabId);\n\t};\n\n\tconst getTabElementId = (tabId: string) => `${tabsId}-tab-${tabId}`;\n\tconst getPanelElementId = (tabId: string) => `${tabsId}-panel-${tabId}`;\n\n\tconst getTabButtonProps = (item: TabsDescriptor) => {\n\t\tconst isSelected = item.id === selectedTabId;\n\t\tconst isTabbable = item.id === nextTabbableTabId;\n\n\t\treturn {\n\t\t\tref: (node: HTMLButtonElement | null) => {\n\t\t\t\ttabRefs.current[item.id] = node;\n\t\t\t},\n\t\t\ttype: \"button\" as const,\n\t\t\trole: \"tab\" as const,\n\t\t\tid: getTabElementId(item.id),\n\t\t\tdisabled: item.disabled,\n\t\t\t\"aria-selected\": isSelected,\n\t\t\t\"aria-controls\": getPanelElementId(item.id),\n\t\t\t\"aria-disabled\": item.disabled || undefined,\n\t\t\ttabIndex: item.disabled ? -1 : isTabbable ? 0 : -1,\n\t\t\tonFocus: () => setFocusedTabId(item.id),\n\t\t\tonClick: () => activateTab(item.id)\n\t\t};\n\t};\n\n\treturn {\n\t\tactivationMode,\n\t\torientation,\n\t\tselectedTabId,\n\t\ttabbableTabId: nextTabbableTabId,\n\t\tonTabListKeyDown,\n\t\tonTabListBlur,\n\t\tgetTabElementId,\n\t\tgetPanelElementId,\n\t\tgetTabButtonProps,\n\t\tisVisited: (tabId: string) => visitedTabs.has(tabId)\n\t};\n}\n",".tabsContainer {\n\t--tabs-border: none;\n\t--tabs-panel-border: none;\n\t--tabs-panel-padding: var(--space-md);\n\t--tabs-panel-bg: var(--surface-1);\n\n\tdisplay: grid;\n\tgap: var(--space-sm);\n\tmin-width: 0;\n\tmin-height: 0;\n\theight: 100%;\n\toverflow: hidden;\n}\n\n.bordered {\n\t--tabs-border: var(--border);\n\t--tabs-panel-border: var(--border);\n}\n\n.cleanPanel {\n\t--tabs-panel-padding: 0;\n\t--tabs-panel-bg: none;\n\t--tabs-panel-border: none;\n}\n\n.tabs {\n\tdisplay: flex;\n\tgap: var(--space-xs);\n\tmin-width: 0;\n\n\tborder: var(--tabs-border);\n\tbackground-color: var(--surface-1);\n\tpadding: var(--space-xs);\n}\n\n.panels {\n\tmin-width: 0;\n\tmin-height: 0;\n\tborder: var(--tabs-panel-border);\n\tbackground-color: var(--tabs-panel-bg);\n}\n\n.tabs,\n.panels {\n\tborder-radius: var(--radius-sm);\n}\n\n.horizontal {\n\tgrid-template-rows: auto minmax(0, 1fr);\n\n\t// .tabs {\n\t// \tflex-wrap: wrap;\n\t// }\n}\n\n.vertical {\n\tgrid-template-columns: 10em minmax(0, 1fr);\n\tmin-height: 0;\n\n\t.tabs {\n\t\tflex-direction: column;\n\t}\n}\n\n.panelScrollable {\n\toverflow: auto;\n}\n\n.tab {\n\ttext-align: left;\n\n\tposition: relative;\n\tmin-height: var(--control-height);\n\tpadding: var(--space-xs) var(--space-md);\n\tcolor: var(--content-2);\n\tborder-radius: var(--radius-sm);\n\tfont-weight: 700;\n\tfont-variation-settings: \"wght\" 700;\n\n\tflex-shrink: 0;\n\n\t&:hover {\n\t\tcursor: pointer;\n\t\tcolor: var(--content-accent);\n\t\t// background-color: var(--surface-accent);\n\t}\n\n\t&.selected {\n\t\tcolor: var(--status-neutral-on-fill);\n\t\tbackground-color: var(--status-neutral-fill);\n\t\tborder-color: var(--border-0);\n\n\t\tbox-shadow: var(--shadow-xs);\n\t}\n\n\t&:disabled {\n\t\tcursor: not-allowed;\n\t\tcolor: var(--content-2);\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n\n.panel {\n\tpadding: 0;\n\tmin-width: 0;\n\tmin-height: 0;\n\theight: 100%;\n}\n\n.panelBody {\n\tmin-width: 0;\n\tmin-height: 0;\n\n\theight: 100%;\n\tpadding: var(--tabs-panel-padding);\n}\n\n.layoutPanels {\n\toverflow: hidden;\n}\n\n.layoutPanel {\n\tdisplay: grid;\n\tgap: var(--space-md);\n\tmin-width: 0;\n\tmin-height: 0;\n\theight: 100%;\n\tpadding: var(--tabs-panel-padding);\n}\n\n.layoutSection {\n\tmin-width: 0;\n}\n\n.layoutContent {\n\tmin-height: 0;\n}\n","import { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { LoadingMessage } from \"../../misc\";\n\nimport styles from \"./Tabs.module.scss\";\n\ninterface TabsLoadingStateProps {\n\tcontainerClassName: string;\n\ttabListClassName: string;\n\tpanelsClassName: string;\n\tpanelClassName: string;\n\tpanelBodyClassName: string;\n\tloadingText?: string;\n}\n\n/**\n * Служебное loading-состояние для `TabsBox`.\n */\nexport function TabsLoadingState({\n\tcontainerClassName,\n\ttabListClassName,\n\tpanelsClassName,\n\tpanelClassName,\n\tpanelBodyClassName,\n\tloadingText\n}: TabsLoadingStateProps) {\n\treturn (\n\t\t<div className={containerClassName}>\n\t\t\t<div className={tabListClassName} aria-hidden=\"true\">\n\t\t\t\t<button type=\"button\" disabled data-disabled=\"\" className={cn(styles.tab, \"skeletonLine\")}>\n\t\t\t\t\tЗагрузка...\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div className={panelsClassName} aria-busy=\"true\">\n\t\t\t\t<div className={panelClassName}>\n\t\t\t\t\t<div className={panelBodyClassName}>\n\t\t\t\t\t\t<LoadingMessage text={loadingText} className=\"radiusSm\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { NoData } from \"../../misc\";\n\ninterface TabsNoDataStateProps {\n\tcontainerClassName: string;\n\tpanelsClassName: string;\n\tpanelClassName: string;\n\tpanelBodyClassName: string;\n}\n\n/**\n * Служебное empty-состояние для `TabsBox`.\n */\nexport function TabsNoDataState({ containerClassName, panelsClassName, panelClassName, panelBodyClassName }: TabsNoDataStateProps) {\n\treturn (\n\t\t<div className={containerClassName}>\n\t\t\t<div className={panelsClassName}>\n\t\t\t\t<div className={panelClassName}>\n\t\t\t\t\t<div className={panelBodyClassName}>\n\t\t\t\t\t\t<NoData className=\"radiusSm\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import React from \"react\";\n\n/**\n * Унифицированная ARIA-обёртка для содержимого активной панели tabs.\n */\ninterface TabsPanelProps {\n\ttabId: string;\n\tisSelected: boolean;\n\tclassName?: string;\n\tgetTabElementId: (tabId: string) => string;\n\tgetPanelElementId: (tabId: string) => string;\n\tchildren: React.ReactNode;\n}\n\nexport function TabsPanel({ tabId, isSelected, className, getTabElementId, getPanelElementId, children }: TabsPanelProps) {\n\treturn (\n\t\t<div\n\t\t\trole=\"tabpanel\"\n\t\t\tid={getPanelElementId(tabId)}\n\t\t\taria-labelledby={getTabElementId(tabId)}\n\t\t\thidden={!isSelected}\n\t\t\tclassName={className}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","import { ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { OneStepScroller } from \"../../misc\";\n\nimport styles from \"./Tabs.module.scss\";\n\nimport type { TabsDescriptor } from \"../model/types\";\nimport type { TabsStateModel } from \"../model/useTabsState\";\n\n/**\n * Рендерит tablist и кнопки вкладок поверх общей модели tabs.\n */\ninterface TabsTabListProps {\n\titems: TabsDescriptor[];\n\tstate: TabsStateModel;\n\tclassName?: string;\n\tariaLabel?: string;\n\tariaLabelledBy?: string;\n}\n\nexport function TabsTabList({ items, state, className, ariaLabel, ariaLabelledBy }: TabsTabListProps) {\n\tconst wrapItems = (children: ReactNode) => {\n\t\tif (state.orientation === \"horizontal\") {\n\t\t\treturn <OneStepScroller>{children}</OneStepScroller>;\n\t\t}\n\n\t\treturn <>{children}</>;\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={className}\n\t\t\trole=\"tablist\"\n\t\t\taria-orientation={state.orientation}\n\t\t\taria-label={ariaLabel}\n\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\tonKeyDown={state.onTabListKeyDown}\n\t\t\tonBlur={state.onTabListBlur}>\n\t\t\t{wrapItems(\n\t\t\t\titems.map((item) => (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t{...state.getTabButtonProps(item)}\n\t\t\t\t\t\tdata-ui=\"tabs-tab\"\n\t\t\t\t\t\tdata-action=\"select-tab\"\n\t\t\t\t\t\tclassName={cn(styles.tab, \"textWrap\", item.id === state.selectedTabId && styles.selected)}>\n\t\t\t\t\t\t{item.title}\n\t\t\t\t\t</button>\n\t\t\t\t))\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { shouldMountTabPanel } from \"../lib/tabs\";\nimport { TabsBoxProps } from \"../model/types\";\nimport { useTabsState } from \"../model/useTabsState\";\n\nimport styles from \"./Tabs.module.scss\";\nimport { TabsLoadingState } from \"./TabsLoadingState\";\nimport { TabsNoDataState } from \"./TabsNoDataState\";\nimport { TabsPanel } from \"./TabsPanel\";\nimport { TabsTabList } from \"./TabsTabList\";\n\n/**\n * Простой items-based tabs-компонент.\n * Сам управляет областью панели и её прокруткой.\n */\nexport function TabsBox({\n\titems,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tclassName,\n\tisLoading,\n\tloadingText,\n\tcleanPanel,\n\tbordered = false,\n\torientation = \"horizontal\",\n\tactivationMode = \"automatic\",\n\tmountStrategy = \"unmount\",\n\tloop = true,\n\t\"aria-label\": ariaLabel,\n\t\"aria-labelledby\": ariaLabelledBy\n}: TabsBoxProps) {\n\tconst state = useTabsState({\n\t\titems,\n\t\tvalue,\n\t\tdefaultValue,\n\t\tonValueChange,\n\t\torientation,\n\t\tactivationMode,\n\t\tloop\n\t});\n\n\tconst rootClassName = cn(\n\t\tstyles.tabsContainer,\n\t\tstyles[orientation],\n\t\tbordered && styles.bordered,\n\t\tcleanPanel && styles.cleanPanel,\n\t\tclassName\n\t);\n\tconst tabListClassName = styles.tabs;\n\tconst panelsClassName = cn(styles.panels, styles.panelScrollable, \"scrollable overscroll\");\n\tconst panelClassName = styles.panel;\n\tconst panelBodyClassName = styles.panelBody;\n\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<TabsLoadingState\n\t\t\t\tcontainerClassName={rootClassName}\n\t\t\t\ttabListClassName={tabListClassName}\n\t\t\t\tpanelsClassName={panelsClassName}\n\t\t\t\tpanelClassName={panelClassName}\n\t\t\t\tpanelBodyClassName={panelBodyClassName}\n\t\t\t\tloadingText={loadingText}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (!items.length) {\n\t\treturn (\n\t\t\t<TabsNoDataState\n\t\t\t\tcontainerClassName={rootClassName}\n\t\t\t\tpanelsClassName={panelsClassName}\n\t\t\t\tpanelClassName={panelClassName}\n\t\t\t\tpanelBodyClassName={panelBodyClassName}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={rootClassName}>\n\t\t\t<TabsTabList items={items} state={state} className={tabListClassName} ariaLabel={ariaLabel} ariaLabelledBy={ariaLabelledBy} />\n\n\t\t\t<div className={panelsClassName}>\n\t\t\t\t{items.map((item) => {\n\t\t\t\t\tconst isSelected = item.id === state.selectedTabId;\n\t\t\t\t\tconst isMounted = shouldMountTabPanel({\n\t\t\t\t\t\tmountStrategy,\n\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\tisVisited: state.isVisited(item.id)\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!isMounted) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<TabsPanel\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\ttabId={item.id}\n\t\t\t\t\t\t\tisSelected={isSelected}\n\t\t\t\t\t\t\tclassName={panelClassName}\n\t\t\t\t\t\t\tgetTabElementId={state.getTabElementId}\n\t\t\t\t\t\t\tgetPanelElementId={state.getPanelElementId}>\n\t\t\t\t\t\t\t<div className={panelBodyClassName}>{item.content}</div>\n\t\t\t\t\t\t</TabsPanel>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { TabsBox } from \"./TabsBox\";\n\nimport type { TabsBoxItem, TabsBoxProps } from \"../model/types\";\n\n/**\n * Элемент вкладки для устаревшего совместимого API `Tabs`.\n */\nexport type TabsItem = TabsBoxItem;\n\n/**\n * @deprecated Используйте `TabsBox` для простого сценария и `TabsLayout` для составных layout-сценариев.\n */\nexport interface TabsProps extends TabsBoxProps {\n\tonChange?: (value: string) => void;\n}\n\n/**\n * @deprecated Используйте `TabsBox` для простого сценария и `TabsLayout` для составных layout-сценариев.\n */\nexport function Tabs({ onChange, onValueChange, ...props }: TabsProps) {\n\treturn (\n\t\t<TabsBox\n\t\t\t{...props}\n\t\t\tonValueChange={(nextValue) => {\n\t\t\t\tonValueChange?.(nextValue);\n\t\t\t\tonChange?.(nextValue);\n\t\t\t}}\n\t\t/>\n\t);\n}\n","/* eslint-disable react-refresh/only-export-components */\nimport React, { Children, isValidElement, useMemo } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { shouldMountTabPanel } from \"../lib/tabs\";\nimport { useTabsState } from \"../model/useTabsState\";\n\nimport styles from \"./Tabs.module.scss\";\nimport { TabsPanel } from \"./TabsPanel\";\nimport { TabsTabList } from \"./TabsTabList\";\n\nimport type { TabsDescriptor, TabsLayoutProps, TabsLayoutSectionProps, TabsLayoutTabProps } from \"../model/types\";\n\ninterface ParsedTabsLayoutTab extends TabsDescriptor {\n\ttoolbar: TabsLayoutSectionProps | null;\n\tcontent: TabsLayoutSectionProps;\n\tfooter: TabsLayoutSectionProps | null;\n}\n\nconst tabsLayoutTabDisplayName = \"TabsLayout.Tab\";\nconst tabsLayoutToolbarDisplayName = \"TabsLayout.Toolbar\";\nconst tabsLayoutContentDisplayName = \"TabsLayout.Content\";\nconst tabsLayoutFooterDisplayName = \"TabsLayout.Footer\";\n\n/**\n * Возвращает стабильный displayName compound-элемента.\n * Это нужно для корректной работы HMR, где ссылочное сравнение `child.type` может ломаться.\n */\nfunction getTabsLayoutElementDisplayName(child: React.ReactElement) {\n\tconst { type } = child;\n\n\tif (typeof type === \"function\") {\n\t\tconst componentType = type as React.JSXElementConstructor<unknown> & {\n\t\t\tdisplayName?: string;\n\t\t\tname?: string;\n\t\t};\n\n\t\treturn componentType.displayName ?? componentType.name ?? null;\n\t}\n\n\tif (typeof type === \"object\" && type !== null && \"displayName\" in type) {\n\t\tconst componentType = type as {\n\t\t\tdisplayName?: string;\n\t\t};\n\n\t\treturn typeof componentType.displayName === \"string\" ? componentType.displayName : null;\n\t}\n\n\treturn null;\n}\n\nfunction isTabsLayoutElement<Props>(child: React.ReactNode, displayName: string): child is React.ReactElement<Props> {\n\treturn isValidElement<Props>(child) && getTabsLayoutElementDisplayName(child) === displayName;\n}\n\n/**\n * Маркер верхнеуровневой вкладки в compound-режиме `TabsLayout`.\n */\nfunction TabsLayoutTab({ children }: TabsLayoutTabProps) {\n\treturn <>{children}</>;\n}\n\nTabsLayoutTab.displayName = tabsLayoutTabDisplayName;\n\n/**\n * Верхняя секция панели, исключённая из прокручиваемого содержимого.\n */\nfunction TabsLayoutToolbar({ children }: TabsLayoutSectionProps) {\n\treturn <>{children}</>;\n}\n\nTabsLayoutToolbar.displayName = tabsLayoutToolbarDisplayName;\n\n/**\n * Основное содержимое панели, которое само управляет своим layout и scroll.\n */\nfunction TabsLayoutContent({ children }: TabsLayoutSectionProps) {\n\treturn <>{children}</>;\n}\n\nTabsLayoutContent.displayName = tabsLayoutContentDisplayName;\n\n/**\n * Нижняя секция панели, исключённая из прокручиваемого содержимого.\n */\nfunction TabsLayoutFooter({ children }: TabsLayoutSectionProps) {\n\treturn <>{children}</>;\n}\n\nTabsLayoutFooter.displayName = tabsLayoutFooterDisplayName;\n\nfunction parseTabsLayoutSections(children: React.ReactNode, tabId: string) {\n\tlet toolbar: TabsLayoutSectionProps | null = null;\n\tlet content: TabsLayoutSectionProps | null = null;\n\tlet footer: TabsLayoutSectionProps | null = null;\n\n\tfor (const child of Children.toArray(children)) {\n\t\tif (!isValidElement(child)) {\n\t\t\tthrow new Error(\n\t\t\t\t`TabsLayout.Tab \"${tabId}\" поддерживает только дочерние элементы TabsLayout.Toolbar, TabsLayout.Content и TabsLayout.Footer.`\n\t\t\t);\n\t\t}\n\n\t\tif (isTabsLayoutElement<TabsLayoutSectionProps>(child, tabsLayoutToolbarDisplayName)) {\n\t\t\tif (toolbar) {\n\t\t\t\tthrow new Error(`TabsLayout.Tab \"${tabId}\" содержит более одного блока TabsLayout.Toolbar.`);\n\t\t\t}\n\n\t\t\ttoolbar = child.props;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isTabsLayoutElement<TabsLayoutSectionProps>(child, tabsLayoutContentDisplayName)) {\n\t\t\tif (content) {\n\t\t\t\tthrow new Error(`TabsLayout.Tab \"${tabId}\" содержит более одного блока TabsLayout.Content.`);\n\t\t\t}\n\n\t\t\tcontent = child.props;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isTabsLayoutElement<TabsLayoutSectionProps>(child, tabsLayoutFooterDisplayName)) {\n\t\t\tif (footer) {\n\t\t\t\tthrow new Error(`TabsLayout.Tab \"${tabId}\" содержит более одного блока TabsLayout.Footer.`);\n\t\t\t}\n\n\t\t\tfooter = child.props;\n\t\t\tcontinue;\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`TabsLayout.Tab \"${tabId}\" поддерживает только дочерние элементы TabsLayout.Toolbar, TabsLayout.Content и TabsLayout.Footer.`\n\t\t);\n\t}\n\n\tif (!content) {\n\t\tthrow new Error(`TabsLayout.Tab \"${tabId}\" должен содержать блок TabsLayout.Content.`);\n\t}\n\n\treturn { toolbar, content, footer };\n}\n\nfunction parseTabsLayoutChildren(children: React.ReactNode): ParsedTabsLayoutTab[] {\n\treturn Children.toArray(children).map((child) => {\n\t\tif (!isTabsLayoutElement<TabsLayoutTabProps>(child, tabsLayoutTabDisplayName)) {\n\t\t\tthrow new Error(\"TabsLayout принимает только дочерние элементы TabsLayout.Tab.\");\n\t\t}\n\n\t\treturn {\n\t\t\tid: child.props.id,\n\t\t\ttitle: child.props.title,\n\t\t\tdisabled: child.props.disabled,\n\t\t\t...parseTabsLayoutSections(child.props.children, child.props.id)\n\t\t};\n\t});\n}\n\ntype TabsLayoutComposition = React.FC<TabsLayoutProps> & {\n\tTab: typeof TabsLayoutTab;\n\tToolbar: typeof TabsLayoutToolbar;\n\tContent: typeof TabsLayoutContent;\n\tFooter: typeof TabsLayoutFooter;\n};\n\n/**\n * Compound-оболочка tabs для составных panel-layout сценариев.\n * Сам компонент управляет только переключением и каркасом панели.\n */\nconst TabsLayoutRoot: React.FC<TabsLayoutProps> = ({\n\tchildren,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tclassName,\n\tbordered,\n\tcleanPanel,\n\torientation = \"horizontal\",\n\tactivationMode = \"manual\",\n\tmountStrategy = \"lazy\",\n\tloop = true,\n\t\"aria-label\": ariaLabel,\n\t\"aria-labelledby\": ariaLabelledBy\n}) => {\n\tconst tabs = useMemo(() => parseTabsLayoutChildren(children), [children]);\n\tconst state = useTabsState({\n\t\titems: tabs,\n\t\tvalue,\n\t\tdefaultValue,\n\t\tonValueChange,\n\t\torientation,\n\t\tactivationMode,\n\t\tloop\n\t});\n\tconst rootClassName = cn(\n\t\tstyles.tabsContainer,\n\t\tstyles[orientation],\n\t\tbordered && styles.bordered,\n\t\tcleanPanel && styles.cleanPanel,\n\t\tclassName\n\t);\n\tconst panelsClassName = cn(styles.panels, styles.layoutPanels);\n\n\treturn (\n\t\t<div className={rootClassName}>\n\t\t\t<TabsTabList items={tabs} state={state} className={styles.tabs} ariaLabel={ariaLabel} ariaLabelledBy={ariaLabelledBy} />\n\n\t\t\t<div className={panelsClassName}>\n\t\t\t\t{tabs.map((tab) => {\n\t\t\t\t\tconst isSelected = tab.id === state.selectedTabId;\n\t\t\t\t\tconst isMounted = shouldMountTabPanel({\n\t\t\t\t\t\tmountStrategy,\n\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\tisVisited: state.isVisited(tab.id)\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!isMounted) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst templateRows = `${tab.toolbar ? \"auto \" : \"\"}minmax(0, 1fr)${tab.footer ? \" auto\" : \"\"}`;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<TabsPanel\n\t\t\t\t\t\t\tkey={tab.id}\n\t\t\t\t\t\t\ttabId={tab.id}\n\t\t\t\t\t\t\tisSelected={isSelected}\n\t\t\t\t\t\t\tclassName={styles.panel}\n\t\t\t\t\t\t\tgetTabElementId={state.getTabElementId}\n\t\t\t\t\t\t\tgetPanelElementId={state.getPanelElementId}>\n\t\t\t\t\t\t\t<div className={styles.layoutPanel} style={{ gridTemplateRows: templateRows }}>\n\t\t\t\t\t\t\t\t{tab.toolbar ? (\n\t\t\t\t\t\t\t\t\t<div className={cn(styles.layoutSection, tab.toolbar.className)}>{tab.toolbar.children}</div>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t<div className={cn(styles.layoutSection, styles.layoutContent, tab.content.className)}>\n\t\t\t\t\t\t\t\t\t{tab.content.children}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{tab.footer ? (\n\t\t\t\t\t\t\t\t\t<div className={cn(styles.layoutSection, tab.footer.className)}>{tab.footer.children}</div>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</TabsPanel>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nTabsLayoutRoot.displayName = \"TabsLayout\";\n\nexport const TabsLayout = Object.assign(TabsLayoutRoot, {\n\tTab: TabsLayoutTab,\n\tToolbar: TabsLayoutToolbar,\n\tContent: TabsLayoutContent,\n\tFooter: TabsLayoutFooter\n}) as TabsLayoutComposition;\n"],"mappings":"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"}