@ryuzaki13/react-foundation-ui 1.4.2 → 1.4.4

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 (515) hide show
  1. package/dist/advanced-search/index.js +12 -11
  2. package/dist/advanced-search/index.js.map +1 -1
  3. package/dist/badge/index.js +1 -1
  4. package/dist/base-table/index.js +2 -2
  5. package/dist/button/index.js +1 -1
  6. package/dist/chunks/{CalendarView-KCkhCtK-.js → CalendarView-Z_XWk7aI.js} +8 -8
  7. package/dist/chunks/{CalendarView-KCkhCtK-.js.map → CalendarView-Z_XWk7aI.js.map} +1 -1
  8. package/dist/chunks/{ImageViewerRuntime-RN49by8Y.js → ImageViewerRuntime-BMs3BBkV.js} +4 -4
  9. package/dist/chunks/{ImageViewerRuntime-RN49by8Y.js.map → ImageViewerRuntime-BMs3BBkV.js.map} +1 -1
  10. package/dist/chunks/{TextEditorLexicalClient-CVTrglWP.js → TextEditorLexicalClient-CK8j3RA4.js} +16 -18
  11. package/dist/chunks/{TextEditorLexicalClient-CVTrglWP.js.map → TextEditorLexicalClient-CK8j3RA4.js.map} +1 -1
  12. package/dist/chunks/{badge-Cri0-kVK.js → badge-DwIUjH0a.js} +2 -2
  13. package/dist/chunks/{badge-Cri0-kVK.js.map → badge-DwIUjH0a.js.map} +1 -1
  14. package/dist/chunks/{base-table-D5IqsjQD.js → base-table-BFsVwXg3.js} +13 -12
  15. package/dist/chunks/{base-table-D5IqsjQD.js.map → base-table-BFsVwXg3.js.map} +1 -1
  16. package/dist/chunks/{button-CC0Jdx1j.js → button-BU2kRzwu.js} +2 -2
  17. package/dist/chunks/{button-CC0Jdx1j.js.map → button-BU2kRzwu.js.map} +1 -1
  18. package/dist/chunks/check-box-Dd3YFuxd.js.map +1 -1
  19. package/dist/chunks/{context-menu-DQeR3y7M.js → context-menu-C6RO7soI.js} +7 -2
  20. package/dist/chunks/{context-menu-DQeR3y7M.js.map → context-menu-C6RO7soI.js.map} +1 -1
  21. package/dist/chunks/{date-input-DBJisPRz.js → date-input-BzExUQnc.js} +5 -5
  22. package/dist/chunks/{date-input-DBJisPRz.js.map → date-input-BzExUQnc.js.map} +1 -1
  23. package/dist/chunks/{flex-DYZ0IbU6.js → flex-C7njxZ74.js} +10 -7
  24. package/dist/chunks/{flex-DYZ0IbU6.js.map → flex-C7njxZ74.js.map} +1 -1
  25. package/dist/chunks/floating-arrow-BE-z4QkE.js.map +1 -1
  26. package/dist/chunks/{input-BCJfUdK_.js → input-Bp6_Ucgr.js} +15 -15
  27. package/dist/chunks/{input-BCJfUdK_.js.map → input-Bp6_Ucgr.js.map} +1 -1
  28. package/dist/chunks/{input-files-Dcc5K-_1.js → input-files-D1JzSw_Y.js} +2 -2
  29. package/dist/chunks/{input-files-Dcc5K-_1.js.map → input-files-D1JzSw_Y.js.map} +1 -1
  30. package/dist/chunks/{input-search-B7HmrAM7.js → input-search-Bkhcinru.js} +2 -2
  31. package/dist/chunks/{input-search-B7HmrAM7.js.map → input-search-Bkhcinru.js.map} +1 -1
  32. package/dist/chunks/{misc-DIF5h9ba.js → misc-BYxxlJz6.js} +3 -3
  33. package/dist/chunks/{misc-DIF5h9ba.js.map → misc-BYxxlJz6.js.map} +1 -1
  34. package/dist/chunks/{modal-DXHX_sA-.js → modal-paexEF0j.js} +4 -5
  35. package/dist/chunks/{modal-DXHX_sA-.js.map → modal-paexEF0j.js.map} +1 -1
  36. package/dist/chunks/{multi-select-CWx12rgb.js → multi-select-COEkc8Qc.js} +4 -5
  37. package/dist/chunks/multi-select-COEkc8Qc.js.map +1 -0
  38. package/dist/chunks/{picker-BAQ9NeHe.js → picker-e6IsrMUG.js} +3 -3
  39. package/dist/chunks/{picker-BAQ9NeHe.js.map → picker-e6IsrMUG.js.map} +1 -1
  40. package/dist/chunks/{popover-xJJqy1v6.js → popover-CGU3MlsH.js} +14 -14
  41. package/dist/chunks/{popover-xJJqy1v6.js.map → popover-CGU3MlsH.js.map} +1 -1
  42. package/dist/chunks/radio-group-CM9Lg_nc.js.map +1 -1
  43. package/dist/chunks/{select-BPb-eL3O.js → select-BON0S9Dr.js} +115 -115
  44. package/dist/chunks/select-BON0S9Dr.js.map +1 -0
  45. package/dist/chunks/sortable-DcTIAbjD.js.map +1 -1
  46. package/dist/chunks/{table-xMAjqtcY.js → table-Dd5BcC0k.js} +3 -3
  47. package/dist/chunks/{table-xMAjqtcY.js.map → table-Dd5BcC0k.js.map} +1 -1
  48. package/dist/chunks/{table-column-interactions-BGd5Lwy9.js → table-column-interactions-DzEvVuXe.js} +8 -5
  49. package/dist/chunks/{table-column-interactions-BGd5Lwy9.js.map → table-column-interactions-DzEvVuXe.js.map} +1 -1
  50. package/dist/chunks/useODataSelectBase-CKe1AVMI.js.map +1 -1
  51. package/dist/chunks/wheel-picker-FS58cRsQ.js.map +1 -1
  52. package/dist/context-menu/index.js +1 -1
  53. package/dist/date-input/index.js +2 -2
  54. package/dist/date-time-input/index.js +4 -4
  55. package/dist/date-time-input/index.js.map +1 -1
  56. package/dist/detail/index.js.map +1 -1
  57. package/dist/dialog/index.js.map +1 -1
  58. package/dist/disclosure/index.js +1 -1
  59. package/dist/disclosure/index.js.map +1 -1
  60. package/dist/drop-zone/index.js +1 -1
  61. package/dist/drop-zone/index.js.map +1 -1
  62. package/dist/errors/index.js +1 -1
  63. package/dist/errors/index.js.map +1 -1
  64. package/dist/expandable-action-panel/index.js +2 -2
  65. package/dist/expandable-action-panel/index.js.map +1 -1
  66. package/dist/flex/index.js +1 -1
  67. package/dist/fullscreen-portal/index.js +3 -3
  68. package/dist/fullscreen-portal/index.js.map +1 -1
  69. package/dist/image/index.js +5 -5
  70. package/dist/image/index.js.map +1 -1
  71. package/dist/input/index.js +1 -1
  72. package/dist/input-date-time/index.js +1 -1
  73. package/dist/input-date-time/index.js.map +1 -1
  74. package/dist/input-file/index.js +1 -1
  75. package/dist/input-file/index.js.map +1 -1
  76. package/dist/input-files/index.js +1 -1
  77. package/dist/input-image/index.js +1 -1
  78. package/dist/input-image/index.js.map +1 -1
  79. package/dist/input-search/index.js +1 -1
  80. package/dist/layout-picker/index.js +3 -4
  81. package/dist/layout-picker/index.js.map +1 -1
  82. package/dist/layout-picker/ui/LayoutPicker.d.ts.map +1 -1
  83. package/dist/list/index.js +7 -7
  84. package/dist/list/index.js.map +1 -1
  85. package/dist/listbox/index.js.map +1 -1
  86. package/dist/misc/index.js +1 -1
  87. package/dist/modal/index.js +1 -1
  88. package/dist/multi-select/index.js +1 -1
  89. package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
  90. package/dist/notifications/index.js +13 -11
  91. package/dist/notifications/index.js.map +1 -1
  92. package/dist/pages/index.js.map +1 -1
  93. package/dist/panel/index.js.map +1 -1
  94. package/dist/picker/index.js +1 -1
  95. package/dist/picker/types.d.ts +1 -1
  96. package/dist/picker/types.d.ts.map +1 -1
  97. package/dist/popover/index.js +1 -1
  98. package/dist/preset-range-date-input/index.js +2 -2
  99. package/dist/preset-range-date-input/index.js.map +1 -1
  100. package/dist/preset-select/index.js +1 -1
  101. package/dist/radio-button/index.js.map +1 -1
  102. package/dist/select/Select.d.ts.map +1 -1
  103. package/dist/select/index.js +1 -1
  104. package/dist/simple-table/index.js +1 -1
  105. package/dist/slider/index.js +27 -24
  106. package/dist/slider/index.js.map +1 -1
  107. package/dist/splitter/index.js.map +1 -1
  108. package/dist/state-select/index.js +12 -10
  109. package/dist/state-select/index.js.map +1 -1
  110. package/dist/styles.css +1 -1
  111. package/dist/switch/index.js +1 -1
  112. package/dist/switch/index.js.map +1 -1
  113. package/dist/table/index.js +1 -1
  114. package/dist/table-column-interactions/index.js +1 -1
  115. package/dist/table-sorting/index.js +1 -1
  116. package/dist/table-sorting/index.js.map +1 -1
  117. package/dist/tabs/index.js +6 -6
  118. package/dist/tabs/index.js.map +1 -1
  119. package/dist/tag-input/index.js +1 -1
  120. package/dist/tag-input/index.js.map +1 -1
  121. package/dist/text/index.js +10 -8
  122. package/dist/text/index.js.map +1 -1
  123. package/dist/text-editor/index.js +2 -2
  124. package/dist/textarea/index.js +1 -1
  125. package/dist/textarea/index.js.map +1 -1
  126. package/dist/toggle/index.js.map +1 -1
  127. package/dist/toolbar/index.js +1 -2
  128. package/dist/toolbar/index.js.map +1 -1
  129. package/dist/tree/index.js.map +1 -1
  130. package/dist/tree-select/TreePickerBase.d.ts.map +1 -1
  131. package/dist/tree-select/index.js +134 -132
  132. package/dist/tree-select/index.js.map +1 -1
  133. package/dist/tree-table/index.js +2 -2
  134. package/dist/tree-table/index.js.map +1 -1
  135. package/package.json +52 -59
  136. package/storybook-static/assets/{Badge-SZ48u9qp.js → Badge-Bh73-APE.js} +11 -11
  137. package/storybook-static/assets/Badge.stories-gNFtCWnR.js +54 -0
  138. package/storybook-static/assets/{Button-CFCpYiPy.js → Button-O9QPAftp.js} +10 -10
  139. package/storybook-static/assets/Button-mjF9HSg0.js +12 -0
  140. package/storybook-static/assets/Button.stories-wkiE0c_a.js +75 -0
  141. package/storybook-static/assets/CalendarView-CqKlnF8k.js +1 -0
  142. package/storybook-static/assets/{DateInput-BfFTwd_P.css → CalendarView-DKvrkS40.css} +1 -1
  143. package/storybook-static/assets/{CheckBox-FoMSruZC.js → CheckBox-CB8fTQF0.js} +11 -11
  144. package/storybook-static/assets/CheckBox-Clpeg9q7.js +2 -0
  145. package/storybook-static/assets/CheckBox.module-BBzuj5He.js +1 -0
  146. package/storybook-static/assets/CheckBox.stories-pfWBxvOy.js +60 -0
  147. package/storybook-static/assets/Color-6AOWCN3U-CVvkiihj.js +1 -0
  148. package/storybook-static/assets/ContextMenu-Sv4wfyS3.js +1 -0
  149. package/storybook-static/assets/{ContextMenu-CU_1kOzV.js → ContextMenu-eGnlhRRu.js} +9 -9
  150. package/storybook-static/assets/ContextMenu.stories-CVw3hOvY.js +90 -0
  151. package/storybook-static/assets/DateInput-D8_Oleoy.js +1 -0
  152. package/storybook-static/assets/{DateInput-BeZ5esVE.js → DateInput-DQDplLib.js} +11 -11
  153. package/storybook-static/assets/DateInput-pmGiwdvw.css +1 -0
  154. package/storybook-static/assets/{DateInput.stories-Bkw2r8CD.js → DateInput.stories-BNpS4CND.js} +2 -2
  155. package/storybook-static/assets/DateRangePresetSelect-Bfx-d5qg.js +3 -0
  156. package/storybook-static/assets/{DateRangePresetSelect-C_mLvEoK.js → DateRangePresetSelect-DCBEf98i.js} +8 -8
  157. package/storybook-static/assets/DateRangePresetSelect.stories-PAV2jgQb.js +11 -0
  158. package/storybook-static/assets/{Detail-WzciiK9S.js → Detail-DvmdQCue.js} +11 -11
  159. package/storybook-static/assets/Detail.stories-CEm00aSN.js +44 -0
  160. package/storybook-static/assets/{Dialog-CwLsVxJY.js → Dialog-3I2Y7jD7.js} +9 -9
  161. package/storybook-static/assets/Dialog.stories-lcadmonM.js +31 -0
  162. package/storybook-static/assets/{Disclosure-BlRuGrk2.js → Disclosure-DUIQ37oh.js} +10 -10
  163. package/storybook-static/assets/Disclosure.stories-BeizaZWP.js +41 -0
  164. package/storybook-static/assets/DocsRenderer-JROSPFPF-DwPk6ai7.js +2 -0
  165. package/storybook-static/assets/{DropZone-Cr3nfCWA.js → DropZone-BGuCU5dq.js} +10 -10
  166. package/storybook-static/assets/DropZone.stories-B4J6OZ3T.js +44 -0
  167. package/storybook-static/assets/ExpandableActionPanel.stories-gCrqbhG6.js +20 -0
  168. package/storybook-static/assets/{Flex-C10912WS.js → Flex-CBwbh1yu.js} +18 -18
  169. package/storybook-static/assets/Flex.stories-cdk6vRZq.js +300 -0
  170. package/storybook-static/assets/FlexContainer-LmZIdhq2.js +1 -0
  171. package/storybook-static/assets/FlexItem-vkDYa5tA.js +3 -0
  172. package/storybook-static/assets/FloatingPopover-D4h-c24R.js +1 -0
  173. package/storybook-static/assets/FloatingPopover-DC84VrV3.css +1 -0
  174. package/storybook-static/assets/FormattedTableCell-CY3E21k8.css +1 -0
  175. package/storybook-static/assets/FormattedTableCell-Dh-kHTOC.js +18 -0
  176. package/storybook-static/assets/Grid-BCzygAqy.js +52 -0
  177. package/storybook-static/assets/{Grid-G88y3oB_.js → Grid-BkKqSMfk.js} +18 -18
  178. package/storybook-static/assets/{Grid.stories-BV7zL-6n.js → Grid.stories-828arrPi.js} +2 -2
  179. package/storybook-static/assets/{Grid-Bb0gH6CX.js → GridContainer-qDguE1HS.js} +2 -53
  180. package/storybook-static/assets/ImageCropper.stories-CrIWrKKR.js +115 -0
  181. package/storybook-static/assets/ImageRenderer-F3AaZx-K.js +2 -0
  182. package/storybook-static/assets/ImageRenderer.stories-l3PnRYxy.js +22 -0
  183. package/storybook-static/assets/ImageView.stories-C6uhkvCN.js +9 -0
  184. package/storybook-static/assets/{ImageViewer.stories-PlFXSB5n.js → ImageViewer.stories-BSPiv5lU.js} +5 -5
  185. package/storybook-static/assets/ImageViewerRuntime-BOpMGgz6.js +51 -0
  186. package/storybook-static/assets/Input-Co--DMHY.js +3 -0
  187. package/storybook-static/assets/{Input-pyUNDVtk.js → Input-D-ZrbHVw.js} +11 -11
  188. package/storybook-static/assets/Input.stories-vqPv6pLx.js +38 -0
  189. package/storybook-static/assets/{InputDateTime-CWk5KBwD.js → InputDateTime-DHBVbRii.js} +11 -11
  190. package/storybook-static/assets/InputDateTime.stories-BAvLMBuk.js +35 -0
  191. package/storybook-static/assets/{InputFile-BLQq7mY9.js → InputFile-B9TVOEZV.js} +10 -10
  192. package/storybook-static/assets/InputFile.stories-CypBLWFh.js +36 -0
  193. package/storybook-static/assets/{InputFiles-B6J4XBdP.js → InputFiles-CxZkOZFK.js} +10 -10
  194. package/storybook-static/assets/InputFiles.stories-BGwCp7OC.js +33 -0
  195. package/storybook-static/assets/InputFilesList-OEX4zGI3.js +1 -0
  196. package/storybook-static/assets/{InputImage--2PSB_E_.js → InputImage-31A6fxSf.js} +10 -10
  197. package/storybook-static/assets/InputImage.stories-CdpOudXI.js +51 -0
  198. package/storybook-static/assets/{LayoutPicker-RZDisgZ_.js → LayoutPicker-Dc55ovYM.js} +13 -13
  199. package/storybook-static/assets/LayoutPicker.stories-DXcn-WXQ.js +449 -0
  200. package/storybook-static/assets/{Listbox-xwfNjBpV.js → Listbox-DF8E6oMR.js} +10 -10
  201. package/storybook-static/assets/Listbox.stories-C98_9wX3.js +47 -0
  202. package/storybook-static/assets/{Modal-HJt_Y-a6.js → Modal-CXvDgktT.js} +12 -12
  203. package/storybook-static/assets/Modal.stories-DAC_QwN7.js +180 -0
  204. package/storybook-static/assets/MultiSelect-B-wX6JPo.js +2 -0
  205. package/storybook-static/assets/{MultiSelect-CvNsFdE4.js → MultiSelect-DN4foQlG.js} +11 -11
  206. package/storybook-static/assets/MultiSelect.stories-CgKNQmma.js +29 -0
  207. package/storybook-static/assets/MultiSelectToken-DDu5n78h.css +1 -0
  208. package/storybook-static/assets/MultiSelectToken-fjW8p4YG.js +1 -0
  209. package/storybook-static/assets/NoData-C7KqaHUh.css +1 -0
  210. package/storybook-static/assets/NoData-W7wK8oTW.js +1 -0
  211. package/storybook-static/assets/{NotificationsHost-DXCf3CQX.js → NotificationsHost-D1UoWmF8.js} +9 -9
  212. package/storybook-static/assets/NotificationsHost.stories-BWUuMmPl.js +25 -0
  213. package/storybook-static/assets/{ODataMultiSelect-CIJNiwGb.js → ODataMultiSelect-DE1V4el8.js} +15 -15
  214. package/storybook-static/assets/ODataMultiSelect.stories-Q1DUIL2W.js +73 -0
  215. package/storybook-static/assets/{ODataSelect-BDga9TUb.js → ODataSelect-CtoT2Wxx.js} +15 -15
  216. package/storybook-static/assets/ODataSelect.stories-DLi7Rwzk.js +73 -0
  217. package/storybook-static/assets/ODataTreeMultiSelect-DEZfgyPK.js +19 -0
  218. package/storybook-static/assets/ODataTreeMultiSelect.stories-H42q78xI.js +30 -0
  219. package/storybook-static/assets/ODataTreeSelect-BeylEiPN.js +17 -0
  220. package/storybook-static/assets/ODataTreeSelect.stories-MOILmtfY.js +24 -0
  221. package/storybook-static/assets/OneStepScroller-BSvYN6QP.js +5 -0
  222. package/storybook-static/assets/OneStepScroller-NRYd-egY.css +1 -0
  223. package/storybook-static/assets/{PeriodSelect-BJbjl62O.js → PeriodSelect-KQFGCxq6.js} +13 -13
  224. package/storybook-static/assets/PeriodSelect.stories-BIYx4_Yy.js +64 -0
  225. package/storybook-static/assets/PickerSelectionToolbar-Cvv8vTZm.js +2 -0
  226. package/storybook-static/assets/PickerTriggerActions-BBZmXagt.js +1 -0
  227. package/storybook-static/assets/{Popover-Dg2T0DoN.js → Popover-7YZIq8Fi.js} +11 -11
  228. package/storybook-static/assets/Popover-D6gSyjaW.js +2 -0
  229. package/storybook-static/assets/Popover-DGX7JNNK.css +1 -0
  230. package/storybook-static/assets/Popover.stories-DM69Ztws.js +69 -0
  231. package/storybook-static/assets/{PresetRangeDateInput-CNmTMNHF.js → PresetRangeDateInput-Ch6GapcJ.js} +8 -8
  232. package/storybook-static/assets/PresetRangeDateInput.stories-Cqd4eb0N.js +15 -0
  233. package/storybook-static/assets/PresetSelect-C8uIYhPJ.js +5 -0
  234. package/storybook-static/assets/{RadioButton-2rfUPkwC.js → RadioButton-BQjiyASl.js} +10 -10
  235. package/storybook-static/assets/RadioButton.stories-Cbho4i83.js +36 -0
  236. package/storybook-static/assets/RadioGroup-DNqu6WaC.js +1 -0
  237. package/storybook-static/assets/{RadioGroup-BduGGVKj.js → RadioGroup-vw4ObVj-.js} +10 -10
  238. package/storybook-static/assets/RadioGroup.stories-B-WQzZW_.js +42 -0
  239. package/storybook-static/assets/Scrollable-DrxMuH2M.js +1 -0
  240. package/storybook-static/assets/{Select-DnZ83aZs.js → Select-BxigZNtu.js} +13 -13
  241. package/storybook-static/assets/Select-X_O4M8Hi.js +12 -0
  242. package/storybook-static/assets/Select.stories-BpTrYJSr.js +46 -0
  243. package/storybook-static/assets/SelectOptionContent-RAmgWCOm.js +1 -0
  244. package/storybook-static/assets/{SerializableSelect-BiFhAxAJ.js → SerializableSelect-CA9wjk2m.js} +12 -12
  245. package/storybook-static/assets/SerializableSelect.stories-DXd4E-3U.js +46 -0
  246. package/storybook-static/assets/{SingleDateTimeInput-Bc-ifbML.js → SingleDateTimeInput-BeFLYUBF.js} +12 -12
  247. package/storybook-static/assets/SingleDateTimeInput.stories-B1aZ754N.js +78 -0
  248. package/storybook-static/assets/Slider-BYrHesOR.js +1 -0
  249. package/storybook-static/assets/{Slider-DfjBSsR3.js → Slider-BdWBkKp4.js} +15 -15
  250. package/storybook-static/assets/Slider.stories-CgmOhVBs.js +77 -0
  251. package/storybook-static/assets/{SliderInput-o9uCcVMP.js → SliderInput-QmF2VQWA.js} +16 -16
  252. package/storybook-static/assets/SliderInput.stories-MjSmhiOM.js +68 -0
  253. package/storybook-static/assets/{Sortable-B6Y9Q9Yn.js → Sortable-D5OTpesH.js} +13 -13
  254. package/storybook-static/assets/Sortable.stories-yz3c5EhY.js +141 -0
  255. package/storybook-static/assets/{Splitter-CfUVnAs7.js → Splitter-DVq6XBul.js} +11 -11
  256. package/storybook-static/assets/Splitter.stories-CopPw1_p.js +22 -0
  257. package/storybook-static/assets/{StateSelect-h0i4M4vO.js → StateSelect-ojwXeKmx.js} +10 -10
  258. package/storybook-static/assets/StateSelect.stories-D46m5HNn.js +47 -0
  259. package/storybook-static/assets/StringToggle.stories-ByYMmlXl.js +6 -0
  260. package/storybook-static/assets/{Switch-CPKaENqL.js → Switch-Dy4Pahkn.js} +10 -10
  261. package/storybook-static/assets/Switch.stories-EiAb5Z-D.js +26 -0
  262. package/storybook-static/assets/{Table-xV66crR1.js → Table-BO6Oa4JV.js} +22 -22
  263. package/storybook-static/assets/Table.stories--TpBKwmP.js +122 -0
  264. package/storybook-static/assets/{Tabs-v9YZeJoc.js → Tabs-7c93qVyH.js} +15 -15
  265. package/storybook-static/assets/Tabs.stories-DXZ0r2ix.js +58 -0
  266. package/storybook-static/assets/TagInput.stories-CoM8rXwa.js +18 -0
  267. package/storybook-static/assets/Text-BPlJUr3R.js +1 -0
  268. package/storybook-static/assets/{Textarea-CRThqX0z.js → Textarea-D3S4MkiX.js} +10 -10
  269. package/storybook-static/assets/Textarea.stories-47k8uHdB.js +27 -0
  270. package/storybook-static/assets/TimePanel-C2iZ9Qr6.js +1 -0
  271. package/storybook-static/assets/TimePanel.stories-JTjIv6z1.js +25 -0
  272. package/storybook-static/assets/{Toggle-CzopviU2.js → Toggle-CHmajZE5.js} +10 -10
  273. package/storybook-static/assets/Toggle-OlKw8qaK.js +1 -0
  274. package/storybook-static/assets/Toggle.stories-k4Z8qQVs.js +30 -0
  275. package/storybook-static/assets/TreeMultiSelect-BC_n1Wb-.js +1 -0
  276. package/storybook-static/assets/TreeMultiSelect-dOg0l7rk.js +19 -0
  277. package/storybook-static/assets/TreeMultiSelect.stories-CAzZRxn5.js +35 -0
  278. package/storybook-static/assets/TreePickerBase-ycYQYQgi.js +22 -0
  279. package/storybook-static/assets/TreeSelect-BrNyI_Qx.js +16 -0
  280. package/storybook-static/assets/TreeSelect-CDecTnag.js +1 -0
  281. package/storybook-static/assets/TreeSelect.stories-BUOw2Rwn.js +18 -0
  282. package/storybook-static/assets/{TreeTable-DbzoCcR5.js → TreeTable-BXw7lFBk.js} +22 -22
  283. package/storybook-static/assets/TreeTable.stories-z40pruPV.js +83 -0
  284. package/storybook-static/assets/WithTooltip-7X4HQR7L-Cakt_JaX.js +9 -0
  285. package/storybook-static/assets/array-BBSjoTRy-CIRmlF93.js +1 -0
  286. package/storybook-static/assets/{async-D27PcxoG.js → async-BLDV04P4.js} +3 -3
  287. package/storybook-static/assets/axe-Bq-2xuso.js +20 -0
  288. package/storybook-static/assets/blocks-BiaKjftm.js +48 -0
  289. package/storybook-static/assets/browserAndReact-DX4H5rjQ.js +105 -0
  290. package/storybook-static/assets/check-fB4gCKB_.js +1 -0
  291. package/storybook-static/assets/chevron-down-B9GH0QvB.js +1 -0
  292. package/storybook-static/assets/chevron-left-DjbyJeHO.js +1 -0
  293. package/storybook-static/assets/chevron-right-D29uf09I.js +1 -0
  294. package/storybook-static/assets/chunk-242VQQM5-BMWWiybC.js +1 -0
  295. package/storybook-static/assets/chunk-DRQKCCAG-CqE-Zrl9.js +1 -0
  296. package/storybook-static/assets/chunk-IMSF75WX-yvVUwIQZ.js +6 -0
  297. package/storybook-static/assets/chunk-KJHJLCBK-D-yQfkOi.js +1 -0
  298. package/storybook-static/assets/chunk-QQBDHPVZ-B98qboss.js +1 -0
  299. package/storybook-static/assets/chunk-W22LQPXL-CGkHFiZ0.js +18 -0
  300. package/storybook-static/assets/circle-alert-Dmd7-WNp.js +1 -0
  301. package/storybook-static/assets/circle-check-VtVMsaJJ.js +1 -0
  302. package/storybook-static/assets/components-CsfQDbHv.js +241 -0
  303. package/storybook-static/assets/contextMenu-CzdfaUsd.js +2 -0
  304. package/storybook-static/assets/date-segments-D3HouZ37.js +1 -0
  305. package/storybook-static/assets/dom-B3G_GtJw.js +1 -0
  306. package/storybook-static/assets/download-CyVhTbv6.js +1 -0
  307. package/storybook-static/assets/error-BZrNlEUO.js +1 -0
  308. package/storybook-static/assets/file-vPGnhPr-.js +1 -0
  309. package/storybook-static/assets/filesAndExcel-DlUnL-Uu.js +122 -0
  310. package/storybook-static/assets/floating-ui.react-DZ8IyUV4.js +1 -0
  311. package/storybook-static/assets/formatter-L2YTDE3Q-x0raBH34.js +1 -0
  312. package/storybook-static/assets/formatters--mhLir82-v41eaI4a.js +1 -0
  313. package/storybook-static/assets/formatters-BTz64vfu.js +291 -0
  314. package/storybook-static/assets/formatters-runtime-DVi3RdYb.js +384 -0
  315. package/storybook-static/assets/foundationLib-CFj4J-Pc.js +82 -0
  316. package/storybook-static/assets/hooks-Ch5aYb7R.js +5 -0
  317. package/storybook-static/assets/iframe-Cr7AcW_R.js +1 -0
  318. package/storybook-static/assets/iframe-DaN-XFub.js +1151 -0
  319. package/storybook-static/assets/info-Cirk1RKZ.js +1 -0
  320. package/storybook-static/assets/{matchers-JIUQ3HVY-BPS-eazD.js → matchers-JIUQ3HVY-DvR2XErZ.js} +3 -3
  321. package/storybook-static/assets/media-BycWpjAl.js +1 -0
  322. package/storybook-static/assets/odata-BtfB5Aje.js +1 -0
  323. package/storybook-static/assets/odata-service-DnPlNGpU-Bpd4Zh9L.js +3 -0
  324. package/storybook-static/assets/odataAndTables-TEZyQ-TZ.js +126 -0
  325. package/storybook-static/assets/{odataFetchFn-BVgXXKgx.js → odataFetchFn-DEKVPDzV.js} +3 -3
  326. package/storybook-static/assets/odataStoryFixtures-CDDaJZKW.js +25 -0
  327. package/storybook-static/assets/{persisted-D8qUQbts.js → persisted-BzLLmgUK.js} +3 -3
  328. package/storybook-static/assets/preload-helper-BHmFeTtP.js +1 -0
  329. package/storybook-static/assets/pureUtilities-Dw249t3R.js +69 -0
  330. package/storybook-static/assets/react-18-CgkwBzTo.js +9 -0
  331. package/storybook-static/assets/react-C21x__mS.js +1 -0
  332. package/storybook-static/assets/react-CvkUhHUq.js +1 -0
  333. package/storybook-static/assets/react-KzpmXJc9.js +9 -0
  334. package/storybook-static/assets/react-dom-2o2phaJG.js +1 -0
  335. package/storybook-static/assets/react-qN2cStNd.js +1 -0
  336. package/storybook-static/assets/refresh-cw-BN3JCsXv.js +1 -0
  337. package/storybook-static/assets/rolldown-runtime-C0FnF6B9.js +1 -0
  338. package/storybook-static/assets/runtimeAndState-CCVgv3ck.js +117 -0
  339. package/storybook-static/assets/settings-2-jtcbbWm5.js +1 -0
  340. package/storybook-static/assets/sortable-dNWaObUX.js +1 -0
  341. package/storybook-static/assets/syntaxhighlighter-T5IQBZDB-hYwVxXYm.js +6 -0
  342. package/storybook-static/assets/theming-mTWhffkp.js +39 -0
  343. package/storybook-static/assets/trash-2-DrVfT0z5.js +1 -0
  344. package/storybook-static/assets/treeStoryFixtures-Ci7STpiz.js +1 -0
  345. package/storybook-static/assets/triangle-alert-B1Q28Bq9.js +1 -0
  346. package/storybook-static/assets/ui.module-DoMIk8Oc.js +1 -0
  347. package/storybook-static/assets/uiClasses-CO3Cdv1E.js +1 -0
  348. package/storybook-static/assets/useFlexClasses-Gn9spXEB.js +1 -0
  349. package/storybook-static/assets/useODataSelectBase-DlbeGYUP.js +1 -0
  350. package/storybook-static/assets/useODataTreeData-CvsoLfiG.js +1 -0
  351. package/storybook-static/assets/usePickerDefaultFilter-DdxyE_i8.js +1 -0
  352. package/storybook-static/assets/usePickerQuery-6rDaPaB0.js +1 -0
  353. package/storybook-static/assets/usePickerTriggerController-BHBjSLtn.js +1 -0
  354. package/storybook-static/assets/utils-DUM89eIj.js +1 -0
  355. package/storybook-static/assets/x-Dh43gJN9.js +1 -0
  356. package/storybook-static/iframe.html +8 -3
  357. package/storybook-static/index.html +6 -0
  358. package/storybook-static/index.json +1 -1
  359. package/storybook-static/project.json +1 -1
  360. package/storybook-static/sb-addons/a11y-3/manager-bundle.js +3 -3
  361. package/storybook-static/sb-addons/chromatic-com-storybook-1/manager-bundle.js +17 -17
  362. package/storybook-static/sb-addons/docs-2/manager-bundle.js +16 -1
  363. package/storybook-static/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +85 -83
  364. package/storybook-static/sb-addons/vitest-4/manager-bundle.js +1 -1
  365. package/storybook-static/sb-manager/globals-runtime.js +9939 -7695
  366. package/storybook-static/sb-manager/runtime.js +16128 -15326
  367. package/storybook-static/vite-inject-mocker-entry.js +2 -2
  368. package/dist/chunks/multi-select-CWx12rgb.js.map +0 -1
  369. package/dist/chunks/select-BPb-eL3O.js.map +0 -1
  370. package/storybook-static/assets/Badge.stories-CzsgAfG9.js +0 -51
  371. package/storybook-static/assets/Button-MoWVKehO.js +0 -12
  372. package/storybook-static/assets/Button.stories-wwep4c2p.js +0 -75
  373. package/storybook-static/assets/CheckBox-DHvne_6w.js +0 -2
  374. package/storybook-static/assets/CheckBox.module-ezWPE2pa.js +0 -1
  375. package/storybook-static/assets/CheckBox.stories-C14Axs5p.js +0 -60
  376. package/storybook-static/assets/Color-KMSTOMOX-CmMBFN4-.js +0 -1
  377. package/storybook-static/assets/ContextMenu.stories-Dr-tkpqd.js +0 -90
  378. package/storybook-static/assets/DateInput-erobPRG_.js +0 -1
  379. package/storybook-static/assets/DateRangePresetSelect-Cg90Kc_w.js +0 -3
  380. package/storybook-static/assets/DateRangePresetSelect.stories-BVap0joC.js +0 -11
  381. package/storybook-static/assets/Detail.stories-CLdtvJ7q.js +0 -44
  382. package/storybook-static/assets/Dialog.stories-Dx0jZO19.js +0 -31
  383. package/storybook-static/assets/Disclosure.stories-DhUdeDK6.js +0 -41
  384. package/storybook-static/assets/DocsRenderer-JROSPFPF-Dd1n83Uq.js +0 -2
  385. package/storybook-static/assets/DropZone.stories-6yYrwQOe.js +0 -44
  386. package/storybook-static/assets/DropdownMenu-D_2LfViU.js +0 -1
  387. package/storybook-static/assets/ExpandableActionPanel.stories-DVOFSOlm.js +0 -20
  388. package/storybook-static/assets/Flex-V-qg6Ejw.js +0 -3
  389. package/storybook-static/assets/Flex.stories-BZv94LD8.js +0 -300
  390. package/storybook-static/assets/ImageCropper.stories-MLFZyJxZ.js +0 -115
  391. package/storybook-static/assets/ImageRenderer-DHhD7mUz.js +0 -2
  392. package/storybook-static/assets/ImageRenderer.stories-ChcPymk2.js +0 -22
  393. package/storybook-static/assets/ImageView.stories-DszVNgC8.js +0 -9
  394. package/storybook-static/assets/ImageViewerRuntime-D8wFAKx5.js +0 -51
  395. package/storybook-static/assets/Input-BGdz8TmT.js +0 -3
  396. package/storybook-static/assets/Input.stories-Ban0Gnck.js +0 -38
  397. package/storybook-static/assets/InputDateTime.stories-DgKVmf54.js +0 -35
  398. package/storybook-static/assets/InputFile.stories-VnRv_q2r.js +0 -36
  399. package/storybook-static/assets/InputFiles-Dn9afnyd.js +0 -1
  400. package/storybook-static/assets/InputFiles.stories-CLVn5Xfq.js +0 -33
  401. package/storybook-static/assets/InputImage.stories-D__QcSho.js +0 -51
  402. package/storybook-static/assets/LayoutPicker.stories-BCnR-zBu.js +0 -449
  403. package/storybook-static/assets/Listbox.stories-B0HctqVp.js +0 -47
  404. package/storybook-static/assets/Modal.stories-BE-VpK-a.js +0 -180
  405. package/storybook-static/assets/MultiSelect-BoIwmje6.css +0 -1
  406. package/storybook-static/assets/MultiSelect-CaCNRNIe.js +0 -2
  407. package/storybook-static/assets/MultiSelect.stories-CNkbVGsb.js +0 -29
  408. package/storybook-static/assets/NotificationsHost.stories-BgqvZzT3.js +0 -25
  409. package/storybook-static/assets/ODataMultiSelect-CMyI4yYs.js +0 -1
  410. package/storybook-static/assets/ODataMultiSelect.stories-DTGCC6np.js +0 -73
  411. package/storybook-static/assets/ODataSelect-CGplYBh_.js +0 -1
  412. package/storybook-static/assets/ODataSelect.stories-CsxqRAvn.js +0 -73
  413. package/storybook-static/assets/ODataTreeMultiSelect-4ZiAtFZk.js +0 -19
  414. package/storybook-static/assets/ODataTreeMultiSelect.stories-B29Od8BL.js +0 -30
  415. package/storybook-static/assets/ODataTreeSelect-yZy7MBsZ.js +0 -17
  416. package/storybook-static/assets/ODataTreeSelect.stories-H7eaj1Sz.js +0 -24
  417. package/storybook-static/assets/PeriodSelect.stories-6CEzS2_H.js +0 -64
  418. package/storybook-static/assets/Popover.stories-BNgWOHlJ.js +0 -69
  419. package/storybook-static/assets/PresetRangeDateInput.stories-6UPVDF62.js +0 -15
  420. package/storybook-static/assets/RadioButton.stories-DbdFfJqO.js +0 -36
  421. package/storybook-static/assets/RadioGroup-BA21indC.js +0 -1
  422. package/storybook-static/assets/RadioGroup.stories-Ce6x0WUN.js +0 -42
  423. package/storybook-static/assets/Select-DyO25wSA.js +0 -12
  424. package/storybook-static/assets/Select.stories-CQ8f9fY9.js +0 -46
  425. package/storybook-static/assets/SelectOptionContent-fC4HFG5Q.js +0 -1
  426. package/storybook-static/assets/SerializableSelect-ki4BThj7.js +0 -4
  427. package/storybook-static/assets/SerializableSelect.stories-BzXBkWPI.js +0 -43
  428. package/storybook-static/assets/SingleDateTimeInput.stories-CI2yrD-f.js +0 -78
  429. package/storybook-static/assets/Slider.stories-D3O3_tqE.js +0 -77
  430. package/storybook-static/assets/SliderInput.stories-D1puleZB.js +0 -67
  431. package/storybook-static/assets/Sortable.stories-BoaL4W6r.js +0 -141
  432. package/storybook-static/assets/Splitter.stories-DJpFzZVJ.js +0 -22
  433. package/storybook-static/assets/StateSelect.stories-Ch2Gzzmd.js +0 -47
  434. package/storybook-static/assets/StringToggle.stories-B8qIG0M3.js +0 -6
  435. package/storybook-static/assets/Switch.stories-BysIhUHa.js +0 -26
  436. package/storybook-static/assets/Table.stories-CBpgmq7b.js +0 -122
  437. package/storybook-static/assets/Tabs.stories-BPYZuvzR.js +0 -58
  438. package/storybook-static/assets/TagInput.stories-BwOEnVpz.js +0 -18
  439. package/storybook-static/assets/Textarea.stories-BSJGz7JF.js +0 -27
  440. package/storybook-static/assets/TimePanel-ClMfq_py.js +0 -1
  441. package/storybook-static/assets/TimePanel.stories-_FqWdmta.js +0 -25
  442. package/storybook-static/assets/Toggle-BFhzeK2e.js +0 -1
  443. package/storybook-static/assets/Toggle.stories-Dw5UkD_b.js +0 -30
  444. package/storybook-static/assets/TreeMultiSelect-CerqHY2K.js +0 -19
  445. package/storybook-static/assets/TreeMultiSelect-Dw7FI3ic.js +0 -1
  446. package/storybook-static/assets/TreeMultiSelect.stories-BTQKFbeP.js +0 -35
  447. package/storybook-static/assets/TreePickerBase-rJISGJBT.js +0 -22
  448. package/storybook-static/assets/TreeSelect-CQ1vj_c9.js +0 -16
  449. package/storybook-static/assets/TreeSelect-Cp_lX0-B.js +0 -1
  450. package/storybook-static/assets/TreeSelect.stories-D6Q02Phx.js +0 -18
  451. package/storybook-static/assets/TreeTable.stories-YfyhkqH9.js +0 -83
  452. package/storybook-static/assets/WithTooltip-7X4HQR7L-BSQyvCOM.js +0 -9
  453. package/storybook-static/assets/axe-GLfyhAYL.js +0 -20
  454. package/storybook-static/assets/base-table-BNO0lnTL.css +0 -1
  455. package/storybook-static/assets/base-table-Dy3fEhQe.js +0 -18
  456. package/storybook-static/assets/blocks-ixiC6_NZ.js +0 -285
  457. package/storybook-static/assets/button-DZpTIXz2.js +0 -1
  458. package/storybook-static/assets/check-box-DByHwJGx.js +0 -1
  459. package/storybook-static/assets/chunk-242VQQM5-Dtm7LRbQ.js +0 -1
  460. package/storybook-static/assets/chunk-3LY4VQVK-BohfESrT.js +0 -6
  461. package/storybook-static/assets/chunk-LITCR56V-XaMGADKk.js +0 -18
  462. package/storybook-static/assets/contextMenu-BbMrBF3b.js +0 -2
  463. package/storybook-static/assets/date-7kR6zFX5.js +0 -461
  464. package/storybook-static/assets/date-segments-CzU9k5bl.js +0 -1
  465. package/storybook-static/assets/error-BRUjWXbJ.js +0 -1
  466. package/storybook-static/assets/file-CI_sonB1.js +0 -291
  467. package/storybook-static/assets/file-hArYcyES.js +0 -1
  468. package/storybook-static/assets/flex-C--89Z3g.js +0 -1
  469. package/storybook-static/assets/floating-ui.react-DLXcGGFR.js +0 -1
  470. package/storybook-static/assets/formatter-L2YTDE3Q-DgyzUf7M.js +0 -1
  471. package/storybook-static/assets/formatters-BtIOYENB.js +0 -3
  472. package/storybook-static/assets/formulas-DRh9I2eS.js +0 -2
  473. package/storybook-static/assets/grid-DLxeTZJe.js +0 -1
  474. package/storybook-static/assets/hooks-DWeJq8G1.js +0 -5
  475. package/storybook-static/assets/iframe-BJGIOdSH.js +0 -1119
  476. package/storybook-static/assets/input-DXi75xv1.js +0 -1
  477. package/storybook-static/assets/mdx-react-shim-CmoAsjhK.js +0 -1
  478. package/storybook-static/assets/media-DWFaNgLM.js +0 -1
  479. package/storybook-static/assets/misc-BElIqBdV.css +0 -1
  480. package/storybook-static/assets/misc-DNZTbWc6.js +0 -5
  481. package/storybook-static/assets/notifications-DjtgzFqT.js +0 -1
  482. package/storybook-static/assets/number-Xkw1yPJo.js +0 -2
  483. package/storybook-static/assets/odata-C4Liwkjx.js +0 -1
  484. package/storybook-static/assets/odata-service-C2oJ-ZmZ.js +0 -1
  485. package/storybook-static/assets/odataStoryFixtures-eEGvvtmw.js +0 -25
  486. package/storybook-static/assets/picker-DsP4xCcJ.js +0 -2
  487. package/storybook-static/assets/popover-BiQHI7Wi.css +0 -1
  488. package/storybook-static/assets/popover-CuFTypCp.js +0 -2
  489. package/storybook-static/assets/preload-helper-B45gAKPr.js +0 -1
  490. package/storybook-static/assets/preset-select-SPNHA-mp.js +0 -5
  491. package/storybook-static/assets/pwa-B7uYfAPd.js +0 -640
  492. package/storybook-static/assets/queryClient-CA0puYc0.js +0 -567
  493. package/storybook-static/assets/react-18-CaNSmcD-.js +0 -9
  494. package/storybook-static/assets/react-3qMIUlAf.js +0 -9
  495. package/storybook-static/assets/react-dom-BC7xZNHy.js +0 -1
  496. package/storybook-static/assets/select-sUla5-3b.js +0 -1
  497. package/storybook-static/assets/slider--Yp_sa_W.js +0 -2
  498. package/storybook-static/assets/sortable-jALaQqYE.js +0 -1
  499. package/storybook-static/assets/syntaxhighlighter-RTCFPKCB-u_WDwfDn.js +0 -6
  500. package/storybook-static/assets/text-D5xgciF8.js +0 -4
  501. package/storybook-static/assets/theming-oB64gsjY.js +0 -39
  502. package/storybook-static/assets/treeStoryFixtures-Y_nnjz0_.js +0 -1
  503. package/storybook-static/assets/ui-DWDaBPQx.js +0 -1
  504. package/storybook-static/assets/ui.module-wFHXkJzp.js +0 -1
  505. package/storybook-static/assets/uiClasses-CaHp0EWd.js +0 -1
  506. package/storybook-static/assets/useODataSelectBase-DjlPxmxr.js +0 -1
  507. package/storybook-static/assets/useODataTreeData-1W6cbuec.js +0 -1
  508. package/storybook-static/assets/utils-DzbSigQl.js +0 -1
  509. package/storybook-static/assets/valueState-GnkKWBTr.js +0 -277
  510. /package/storybook-static/assets/{DropdownMenu-BgzIzwzM.css → ContextMenu-BgzIzwzM.css} +0 -0
  511. /package/storybook-static/assets/{Grid-K9R_IHaw.css → GridContainer-K9R_IHaw.css} +0 -0
  512. /package/storybook-static/assets/{InputFiles-ByK52qUe.css → InputFilesList-ByK52qUe.css} +0 -0
  513. /package/storybook-static/assets/{slider-DMDFRH6B.css → Slider-DMDFRH6B.css} +0 -0
  514. /package/storybook-static/assets/{Flex-IXK2se1Y.css → useFlexClasses-IXK2se1Y.css} +0 -0
  515. /package/storybook-static/assets/{picker-DzBkX15M.css → usePickerTriggerController-DzBkX15M.css} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/tree-table/TreeTable.module.scss","../../src/tree-table/TreeTable.tsx"],"sourcesContent":[".treeColumnCell {\n\tpadding-inline-start: var(--space-sm);\n}\n\n.selectedIndicatorCell {\n\tbox-shadow: inset 0.1875rem 0 0 var(--content-accent);\n}\n\n.treeCell {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--space-xs);\n\tmin-width: 0;\n}\n\n.treeCellContent {\n\tmin-width: 0;\n\tflex: 1 1 auto;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.expanderButton {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex: 0 0 1.5rem;\n\twidth: 1.5rem;\n\theight: 1.5rem;\n\tpadding: 0;\n\tborder: 0;\n\tborder-radius: var(--radius-xs);\n\tbackground: transparent;\n\tcolor: var(--content-0);\n\tcursor: pointer;\n\n\t&:hover,\n\t&:focus-visible {\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n\n.expanderSpacer {\n\tflex: 0 0 1.5rem;\n\twidth: 1.5rem;\n\theight: 1.5rem;\n}\n\n.sentinel {\n\theight: 1px;\n}\n","/* eslint-disable react-hooks/incompatible-library */\nimport { useEffect, useEffectEvent, useMemo, useRef, useState, type ReactNode } from \"react\";\n\nimport { formatPipelineDisplayValue } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport {\n\tresolveTableLength,\n\tTableColumnDef,\n\ttype TableColumnOrderState,\n\ttype TableColumnSizingState,\n\tTableSelectionMode,\n\tuseTableRowSelection\n} from \"@ryuzaki13/react-foundation-lib/table\";\nimport { buildTreeTableRows, type TreeTableFlatHierarchy, type TreeTableRowNode } from \"@ryuzaki13/react-foundation-lib/tree-table\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport {\n\tgetCoreRowModel,\n\tgetExpandedRowModel,\n\tuseReactTable,\n\ttype ExpandedState,\n\ttype Row,\n\ttype VisibilityState\n} from \"@tanstack/react-table\";\nimport { ChevronDownIcon, ChevronRightIcon } from \"lucide-react\";\n\nimport {\n\tBaseTable,\n\tbuildBaseTableMergedCellsLayout,\n\tbuildTableFormattingSnapshot,\n\tFormattedTableCell,\n\tgetOrderedVisibleLeafColumns,\n\tshouldUseTableFormatting,\n\tuseTableColumnOrder,\n\tuseTableColumnPinning,\n\tuseTableColumnSizing,\n\tuseTableColumnVisibility,\n\ttype BaseTableCellRenderArgs,\n\ttype BaseTableColumnState,\n\ttype BaseTableProps,\n\ttype TableColumnPinningState\n} from \"../base-table\";\n\nimport styles from \"./TreeTable.module.scss\";\n\nimport type { TableFormulaRowData } from \"@ryuzaki13/react-foundation-lib/formulas\";\n\n/**\n * Внутренний тип строки TreeTable после преобразования в иерархию.\n */\ntype TreeTableRuntimeRow<TData extends object> = TreeTableRowNode<TData>;\n\n/**\n * Пропсы компонента TreeTable.\n *\n * Компонент принимает плоский OData-список и сам строит иерархию,\n * оставляя управление раскрытием и выбором во внутреннем состоянии.\n */\nexport interface TreeTableProps<TData extends object> {\n\t/**\n\t * Необязательный заголовок над таблицей.\n\t */\n\ttitle?: string;\n\t/**\n\t * Признак первичной загрузки.\n\t */\n\tisLoading?: boolean;\n\t/**\n\t * Признак фоновой догрузки или обновления данных.\n\t */\n\tisFetching?: boolean;\n\t/**\n\t * Плоский источник строк.\n\t */\n\tdata: readonly TData[] | undefined | null;\n\t/**\n\t * Описание колонок через исходный тип строки.\n\t */\n\tcolumns: readonly TableColumnDef<TData>[];\n\t/**\n\t * Правила восстановления дерева из плоского списка.\n\t */\n\thierarchy: TreeTableFlatHierarchy<TData>;\n\t/**\n\t * Режим выбора строк.\n\t */\n\tselectionMode?: TableSelectionMode;\n\t/**\n\t * Если `true`, при первом появлении данных раскрывает корневой уровень.\n\t */\n\texpandFirstLevel?: boolean;\n\t/**\n\t * Дополнительные строки, которые должны быть раскрыты при первой инициализации.\n\t */\n\tdefaultExpandedRowIds?: readonly string[];\n\t/**\n\t * Идентификатор колонки, в которой нужно рисовать tree-toggle и отступы.\n\t *\n\t * Если не указан, используется первая видимая колонка.\n\t */\n\ttreeColumnId?: string;\n\t/**\n\t * Отступ на один уровень вложенности.\n\t *\n\t * Числовое значение трактуется как `em`.\n\t */\n\tindentSize?: string | number;\n\t/**\n\t * Дополнительный CSS-класс корневого контейнера.\n\t */\n\tclassName?: string;\n\t/**\n\t * Дополнительный CSS-класс тега `table`.\n\t */\n\ttableClassName?: string;\n\t/**\n\t * Внешнее controlled-состояние видимости колонок.\n\t */\n\tcolumnVisibility?: VisibilityState;\n\t/**\n\t * Стартовое uncontrolled-состояние видимости колонок.\n\t */\n\tdefaultColumnVisibility?: VisibilityState;\n\t/**\n\t * Внешнее controlled-состояние порядка колонок.\n\t */\n\tcolumnOrder?: readonly string[];\n\t/**\n\t * Стартовое uncontrolled-состояние порядка колонок.\n\t */\n\tdefaultColumnOrder?: readonly string[];\n\t/**\n\t * Внешнее controlled-состояние ширин колонок в px.\n\t */\n\tcolumnSizing?: TableColumnSizingState;\n\t/**\n\t * Стартовое uncontrolled-состояние ширин колонок в px.\n\t */\n\tdefaultColumnSizing?: TableColumnSizingState;\n\t/**\n\t * Внешнее controlled-состояние left-pinning для колонок.\n\t */\n\tcolumnPinning?: TableColumnPinningState;\n\t/**\n\t * Стартовое uncontrolled-состояние left-pinning для колонок.\n\t */\n\tdefaultColumnPinning?: TableColumnPinningState;\n\t/**\n\t * Включает изменение ширины колонок через header-handle.\n\t */\n\tenableColumnResizing?: boolean;\n\t/**\n\t * Включает изменение порядка колонок через drag&drop заголовков.\n\t */\n\tenableColumnReordering?: boolean;\n\t/**\n\t * Минимальная ширина колонки при resize в px.\n\t */\n\tcolumnResizeMinWidth?: number;\n\t/**\n\t * Вызывается после изменения видимости колонок.\n\t */\n\tonColumnVisibilityChange?: (state: VisibilityState) => void;\n\t/**\n\t * Вызывается после изменения порядка колонок.\n\t */\n\tonColumnOrderChange?: (state: TableColumnOrderState) => void;\n\t/**\n\t * Вызывается после изменения ширины колонок.\n\t */\n\tonColumnSizingChange?: (state: TableColumnSizingState) => void;\n\t/**\n\t * Вызывается после изменения left-pinning state.\n\t */\n\tonColumnPinningChange?: (state: TableColumnPinningState) => void;\n\t/**\n\t * Вызывается при активации строки кликом или клавиатурой.\n\t */\n\tonRowClick?: (row: TData) => void;\n\t/**\n\t * Вызывается после изменения выбранных строк.\n\t */\n\tonRowSelectionChange?: (rows: TData[]) => void;\n\t/**\n\t * Вызывается после изменения раскрытых узлов.\n\t */\n\tonExpandedRowIdsChange?: (rowIds: string[]) => void;\n\t/**\n\t * Вызывается при достижении конца таблицы внутри scroll-контейнера.\n\t */\n\tonReachEnd?: () => void;\n\t/**\n\t * Позволяет запретить выбор отдельных строк.\n\t */\n\tgetRowCanSelect?: (row: TData) => boolean;\n\t/**\n\t * Позволяет добавить CSS-класс для конкретной строки.\n\t */\n\tgetRowClassName?: (row: TData) => string | undefined;\n\t/**\n\t * Контекстное меню заголовка колонки. Получает runtime-строки дерева,\n\t * потому что BaseTable работает уже после сборки flat hierarchy.\n\t */\n\trenderHeaderContextMenu?: BaseTableProps<TreeTableRuntimeRow<TData>>[\"renderHeaderContextMenu\"];\n\t/**\n\t * Точка расширения содержимого ячейки после общего форматирования.\n\t *\n\t * Для tree-column в `defaultContent` передается только содержимое ячейки:\n\t * TreeTable сам добавит expander и отступ после выполнения слота.\n\t */\n\trenderCellContent?: BaseTableProps<TreeTableRuntimeRow<TData>>[\"renderCellContent\"];\n}\n\n/**\n * Преобразует массив идентификаторов в формат состояния раскрытия TanStack.\n */\nfunction toExpandedState(rowIds: readonly string[]): ExpandedState {\n\treturn Object.fromEntries(rowIds.map((rowId) => [rowId, true]));\n}\n\n/**\n * Извлекает из состояния раскрытия только активные идентификаторы.\n */\nfunction extractExpandedRowIds(expanded: ExpandedState): string[] {\n\tif (typeof expanded === \"boolean\") {\n\t\treturn [];\n\t}\n\n\treturn Object.keys(expanded).filter((rowId) => expanded[rowId]);\n}\n\n/**\n * Нормализует исходную строку, убирая зависимость от внутреннего поля `children`.\n */\nfunction resolveOriginalRow<TData extends object>(row: Row<TreeTableRuntimeRow<TData>>, rowById: Map<string, TData>): TData {\n\treturn rowById.get(row.id) ?? (row.original as TData);\n}\n\n/**\n * Рендерит содержимое древовидной ячейки.\n */\nfunction renderTreeCellContent<TData extends object>(\n\targs: BaseTableCellRenderArgs<TreeTableRuntimeRow<TData>>,\n\tcontent: ReactNode,\n\ttreeColumnId: string | undefined,\n\tindentSize: string | number\n): ReactNode {\n\tif (args.cell.column.id !== treeColumnId) {\n\t\treturn content;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.treeCell}\n\t\t\tstyle={{\n\t\t\t\tpaddingInlineStart: `calc(${args.row.depth} * ${resolveTableLength(indentSize) ?? \"0em\"})`\n\t\t\t}}>\n\t\t\t{args.row.getCanExpand() ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.expanderButton}\n\t\t\t\t\taria-label={args.row.getIsExpanded() ? \"Свернуть строку\" : \"Развернуть строку\"}\n\t\t\t\t\tdata-tree-table-interactive=\"true\"\n\t\t\t\t\tdata-ui=\"tree-table-expander\"\n\t\t\t\t\tdata-action={args.row.getIsExpanded() ? \"collapse-tree-table-row\" : \"expand-tree-table-row\"}\n\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\targs.row.toggleExpanded();\n\t\t\t\t\t}}>\n\t\t\t\t\t{args.row.getIsExpanded() ? <ChevronDownIcon size={16} /> : <ChevronRightIcon size={16} />}\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span className={styles.expanderSpacer} aria-hidden=\"true\" />\n\t\t\t)}\n\n\t\t\t<div className={styles.treeCellContent}>{content}</div>\n\t\t</div>\n\t);\n}\n\n/**\n * Древовидная таблица на базе TanStack Table для плоских OData-данных.\n */\nexport function TreeTable<TData extends object>({\n\ttitle,\n\tisLoading,\n\tisFetching,\n\tdata,\n\tcolumns,\n\thierarchy,\n\tselectionMode = \"none\",\n\texpandFirstLevel = false,\n\tdefaultExpandedRowIds,\n\ttreeColumnId,\n\tindentSize = 1,\n\tclassName,\n\ttableClassName,\n\tcolumnVisibility,\n\tdefaultColumnVisibility,\n\tcolumnOrder,\n\tdefaultColumnOrder,\n\tcolumnSizing,\n\tdefaultColumnSizing,\n\tcolumnPinning,\n\tdefaultColumnPinning,\n\tenableColumnResizing = false,\n\tenableColumnReordering = false,\n\tcolumnResizeMinWidth,\n\tonColumnVisibilityChange,\n\tonColumnOrderChange,\n\tonColumnSizingChange,\n\tonColumnPinningChange,\n\tonRowClick,\n\tonRowSelectionChange,\n\tonExpandedRowIdsChange,\n\tonReachEnd,\n\tgetRowCanSelect,\n\tgetRowClassName,\n\trenderHeaderContextMenu,\n\trenderCellContent\n}: TreeTableProps<TData>) {\n\tconst treeData = useMemo(() => buildTreeTableRows(data ?? [], hierarchy), [data, hierarchy]);\n\tconst formattingSnapshot = useMemo(() => buildTableFormattingSnapshot(columns), [columns]);\n\tconst initialExpandedRowIds = useMemo(() => {\n\t\tconst nextExpandedRowIds = new Set(defaultExpandedRowIds ?? []);\n\n\t\tif (expandFirstLevel) {\n\t\t\tfor (const rootRowId of treeData.rootRowIds) {\n\t\t\t\tnextExpandedRowIds.add(rootRowId);\n\t\t\t}\n\t\t}\n\n\t\treturn Array.from(nextExpandedRowIds);\n\t}, [defaultExpandedRowIds, expandFirstLevel, treeData.rootRowIds]);\n\n\tconst [expanded, setExpanded] = useState<ExpandedState>({});\n\tconst hasInitializedExpansionRef = useRef(false);\n\tconst scrollableRef = useRef<HTMLDivElement | null>(null);\n\tconst sentinelRef = useRef<HTMLDivElement | null>(null);\n\n\tconst { rowSelection, activateRowSelection } = useTableRowSelection({\n\t\tavailableRowIds: treeData.allRowIds,\n\t\trowById: treeData.rowById,\n\t\tselectionMode,\n\t\tonRowSelectionChange\n\t});\n\tconst { columnVisibility: resolvedColumnVisibility, onColumnVisibilityChange: handleColumnVisibilityChange } = useTableColumnVisibility(\n\t\t{\n\t\t\tcolumnVisibility,\n\t\t\tdefaultColumnVisibility,\n\t\t\tonColumnVisibilityChange\n\t\t}\n\t);\n\tconst { columnOrder: resolvedColumnOrder, onColumnOrderChange: handleColumnOrderChange } = useTableColumnOrder({\n\t\tcolumnOrder,\n\t\tdefaultColumnOrder,\n\t\tonColumnOrderChange\n\t});\n\tconst { columnSizing: resolvedColumnSizing, onColumnSizingChange: handleColumnSizingChange } = useTableColumnSizing({\n\t\tcolumnSizing,\n\t\tdefaultColumnSizing,\n\t\tcolumnResizeMinWidth,\n\t\tonColumnSizingChange\n\t});\n\tconst { columnPinning: resolvedColumnPinning, onColumnPinningChange: handleColumnPinningChange } = useTableColumnPinning({\n\t\tcolumnPinning,\n\t\tdefaultColumnPinning,\n\t\tonColumnPinningChange\n\t});\n\n\tconst baseTableColumnState = useMemo<BaseTableColumnState>(\n\t\t() => ({\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility\n\t\t}),\n\t\t[resolvedColumnOrder, resolvedColumnPinning, resolvedColumnSizing, resolvedColumnVisibility]\n\t);\n\n\tconst syncExpandedState = useEffectEvent((availableRowIds: readonly string[], nextInitialExpandedRowIds: readonly string[]) => {\n\t\tif (availableRowIds.length === 0) {\n\t\t\thasInitializedExpansionRef.current = false;\n\t\t\tsetExpanded({});\n\t\t\treturn;\n\t\t}\n\n\t\tconst availableRowIdSet = new Set(availableRowIds);\n\n\t\tsetExpanded((currentExpanded) => {\n\t\t\tconst persistedRowIds = extractExpandedRowIds(currentExpanded).filter((rowId) => availableRowIdSet.has(rowId));\n\n\t\t\tif (!hasInitializedExpansionRef.current) {\n\t\t\t\thasInitializedExpansionRef.current = true;\n\n\t\t\t\tconst seededRowIds = Array.from(\n\t\t\t\t\tnew Set([...persistedRowIds, ...nextInitialExpandedRowIds.filter((rowId) => availableRowIdSet.has(rowId))])\n\t\t\t\t);\n\n\t\t\t\treturn toExpandedState(seededRowIds);\n\t\t\t}\n\n\t\t\treturn toExpandedState(persistedRowIds);\n\t\t});\n\t});\n\n\tconst emitExpandedRowIdsChange = useEffectEvent((currentExpanded: ExpandedState) => {\n\t\tonExpandedRowIdsChange?.(extractExpandedRowIds(currentExpanded));\n\t});\n\n\tconst emitReachEnd = useEffectEvent(() => {\n\t\tonReachEnd?.();\n\t});\n\n\tuseEffect(() => {\n\t\tsyncExpandedState(treeData.allRowIds, initialExpandedRowIds);\n\t}, [initialExpandedRowIds, treeData.allRowIds]);\n\n\tuseEffect(() => {\n\t\temitExpandedRowIdsChange(expanded);\n\t}, [expanded]);\n\n\tuseEffect(() => {\n\t\tif (!onReachEnd || !scrollableRef.current || !sentinelRef.current || isLoading) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tconst entry = entries[0];\n\n\t\t\t\tif (entry?.isIntersecting) {\n\t\t\t\t\temitReachEnd();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\troot: scrollableRef.current,\n\t\t\t\tthreshold: 0.1\n\t\t\t}\n\t\t);\n\n\t\tobserver.observe(sentinelRef.current);\n\n\t\treturn () => observer.disconnect();\n\t}, [isLoading, onReachEnd, treeData.rows.length]);\n\n\tconst table = useReactTable<TreeTableRuntimeRow<TData>>({\n\t\tdata: treeData.rows as TreeTableRuntimeRow<TData>[],\n\t\tcolumns: columns as TableColumnDef<TreeTableRuntimeRow<TData>>[],\n\t\tstate: {\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility,\n\t\t\texpanded,\n\t\t\trowSelection\n\t\t},\n\t\tgetRowId: (row) => hierarchy.getRowId(row as TData),\n\t\tgetSubRows: (row) => row.children,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetExpandedRowModel: getExpandedRowModel(),\n\t\tonColumnOrderChange: handleColumnOrderChange,\n\t\tonColumnPinningChange: handleColumnPinningChange,\n\t\tonColumnSizingChange: handleColumnSizingChange,\n\t\tonColumnVisibilityChange: handleColumnVisibilityChange,\n\t\tonExpandedChange: setExpanded,\n\t\tenableMultiRowSelection: selectionMode === \"multi\",\n\t\tenableRowSelection: (row) => {\n\t\t\tif (selectionMode === \"none\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\t\treturn getRowCanSelect ? getRowCanSelect(originalRow) : true;\n\t\t}\n\t});\n\n\tconst visibleLeafColumns = getOrderedVisibleLeafColumns(table, baseTableColumnState);\n\tconst resolvedTreeColumnId = treeColumnId ?? visibleLeafColumns[0]?.id;\n\tconst rowModelRows = table.getRowModel().rows;\n\tconst mergedCellLayout = useMemo(\n\t\t() =>\n\t\t\tbuildBaseTableMergedCellsLayout({\n\t\t\t\trows: rowModelRows,\n\t\t\t\tcolumns: visibleLeafColumns,\n\t\t\t\tresolveRowBoundaryKey: (row) => row.depth,\n\t\t\t\texcludeColumnIds: resolvedTreeColumnId ? new Set([resolvedTreeColumnId]) : undefined\n\t\t\t}),\n\t\t[rowModelRows, visibleLeafColumns, resolvedTreeColumnId]\n\t);\n\n\t/**\n\t * Активирует строку: обновляет выбор в соответствии с режимом и вызывает внешний callback.\n\t */\n\tconst activateRow = (row: Row<TreeTableRuntimeRow<TData>>) => {\n\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\tactivateRowSelection(row.id, row.getCanSelect());\n\t\tonRowClick?.(originalRow);\n\t};\n\n\treturn (\n\t\t<BaseTable\n\t\t\ttable={table}\n\t\t\tcolumnState={baseTableColumnState}\n\t\t\ttitle={title}\n\t\t\tisLoading={isLoading}\n\t\t\tisFetching={isFetching}\n\t\t\tclassName={className}\n\t\t\ttableClassName={tableClassName}\n\t\t\tselectionMode={selectionMode}\n\t\t\tscrollableRef={scrollableRef}\n\t\t\tinteractiveElementSelector='[data-tree-table-interactive=\"true\"]'\n\t\t\tonActivateRow={selectionMode !== \"none\" || onRowClick ? activateRow : undefined}\n\t\t\tisRowInteractive={(row) => Boolean(onRowClick || (selectionMode !== \"none\" && row.getCanSelect()))}\n\t\t\tgetRowClassName={(row) => {\n\t\t\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\t\t\treturn getRowClassName?.(originalRow);\n\t\t\t}}\n\t\t\tgetCellClassName={({ row, cell }) =>\n\t\t\t\tcn(\n\t\t\t\t\tcell.column.id === resolvedTreeColumnId && styles.treeColumnCell,\n\t\t\t\t\tcell.column.id === resolvedTreeColumnId && row.getIsSelected() && styles.selectedIndicatorCell\n\t\t\t\t)\n\t\t\t}\n\t\t\tgetCellLayout={({ cell }) => mergedCellLayout.get(cell.id)}\n\t\t\trenderHeaderContextMenu={renderHeaderContextMenu}\n\t\t\tenableColumnResizing={enableColumnResizing}\n\t\t\tenableColumnReordering={enableColumnReordering}\n\t\t\tcolumnResizeMinWidth={columnResizeMinWidth}\n\t\t\trenderCellContent={(args) => {\n\t\t\t\tconst originalRow = resolveOriginalRow(args.row, treeData.rowById);\n\t\t\t\tconst displayValue = formatPipelineDisplayValue({\n\t\t\t\t\tfield: formattingSnapshot.runtimeByColumnId[args.cell.column.id],\n\t\t\t\t\trawValue: args.cell.getValue(),\n\t\t\t\t\trowData: originalRow as TableFormulaRowData,\n\t\t\t\t\trowKind: \"tree\"\n\t\t\t\t});\n\t\t\t\tconst defaultContent = shouldUseTableFormatting({\n\t\t\t\t\tcolumnId: args.cell.column.id,\n\t\t\t\t\truntimeByColumnId: formattingSnapshot.runtimeByColumnId,\n\t\t\t\t\tcustomCellColumnIds: formattingSnapshot.customCellColumnIds\n\t\t\t\t}) ? (\n\t\t\t\t\t<FormattedTableCell displayValue={displayValue} align={args.columnMeta?.align} />\n\t\t\t\t) : (\n\t\t\t\t\targs.defaultContent\n\t\t\t\t);\n\t\t\t\tconst content = renderCellContent\n\t\t\t\t\t? renderCellContent({\n\t\t\t\t\t\t\t...args,\n\t\t\t\t\t\t\tdefaultContent,\n\t\t\t\t\t\t\tdisplayValue\n\t\t\t\t\t\t})\n\t\t\t\t\t: defaultContent;\n\n\t\t\t\treturn renderTreeCellContent(args, content, resolvedTreeColumnId, indentSize);\n\t\t\t}}\n\t\t\tafterTableContent={onReachEnd ? <div ref={sentinelRef} className={styles.sentinel} aria-hidden=\"true\" /> : null}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/tree-table/TreeTable.module.scss","../../src/tree-table/TreeTable.tsx"],"sourcesContent":[".treeColumnCell {\n\tpadding-inline-start: var(--space-sm);\n}\n\n.selectedIndicatorCell {\n\tbox-shadow: inset 0.1875rem 0 0 var(--content-accent);\n}\n\n.treeCell {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--space-xs);\n\tmin-width: 0;\n}\n\n.treeCellContent {\n\tmin-width: 0;\n\tflex: 1 1 auto;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.expanderButton {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex: 0 0 1.5rem;\n\twidth: 1.5rem;\n\theight: 1.5rem;\n\tpadding: 0;\n\tborder: 0;\n\tborder-radius: var(--radius-xs);\n\tbackground: transparent;\n\tcolor: var(--content-0);\n\tcursor: pointer;\n\n\t&:hover,\n\t&:focus-visible {\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n\n.expanderSpacer {\n\tflex: 0 0 1.5rem;\n\twidth: 1.5rem;\n\theight: 1.5rem;\n}\n\n.sentinel {\n\theight: 1px;\n}\n","/* eslint-disable react-hooks/incompatible-library */\nimport { useEffect, useEffectEvent, useMemo, useRef, useState, type ReactNode } from \"react\";\n\nimport { formatPipelineDisplayValue } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport {\n\tresolveTableLength,\n\tTableColumnDef,\n\ttype TableColumnOrderState,\n\ttype TableColumnSizingState,\n\tTableSelectionMode,\n\tuseTableRowSelection\n} from \"@ryuzaki13/react-foundation-lib/table\";\nimport { buildTreeTableRows, type TreeTableFlatHierarchy, type TreeTableRowNode } from \"@ryuzaki13/react-foundation-lib/tree-table\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport {\n\tgetCoreRowModel,\n\tgetExpandedRowModel,\n\tuseReactTable,\n\ttype ExpandedState,\n\ttype Row,\n\ttype VisibilityState\n} from \"@tanstack/react-table\";\nimport { ChevronDownIcon, ChevronRightIcon } from \"lucide-react\";\n\nimport {\n\tBaseTable,\n\tbuildBaseTableMergedCellsLayout,\n\tbuildTableFormattingSnapshot,\n\tFormattedTableCell,\n\tgetOrderedVisibleLeafColumns,\n\tshouldUseTableFormatting,\n\tuseTableColumnOrder,\n\tuseTableColumnPinning,\n\tuseTableColumnSizing,\n\tuseTableColumnVisibility,\n\ttype BaseTableCellRenderArgs,\n\ttype BaseTableColumnState,\n\ttype BaseTableProps,\n\ttype TableColumnPinningState\n} from \"../base-table\";\n\nimport styles from \"./TreeTable.module.scss\";\n\nimport type { TableFormulaRowData } from \"@ryuzaki13/react-foundation-lib/formulas\";\n\n/**\n * Внутренний тип строки TreeTable после преобразования в иерархию.\n */\ntype TreeTableRuntimeRow<TData extends object> = TreeTableRowNode<TData>;\n\n/**\n * Пропсы компонента TreeTable.\n *\n * Компонент принимает плоский OData-список и сам строит иерархию,\n * оставляя управление раскрытием и выбором во внутреннем состоянии.\n */\nexport interface TreeTableProps<TData extends object> {\n\t/**\n\t * Необязательный заголовок над таблицей.\n\t */\n\ttitle?: string;\n\t/**\n\t * Признак первичной загрузки.\n\t */\n\tisLoading?: boolean;\n\t/**\n\t * Признак фоновой догрузки или обновления данных.\n\t */\n\tisFetching?: boolean;\n\t/**\n\t * Плоский источник строк.\n\t */\n\tdata: readonly TData[] | undefined | null;\n\t/**\n\t * Описание колонок через исходный тип строки.\n\t */\n\tcolumns: readonly TableColumnDef<TData>[];\n\t/**\n\t * Правила восстановления дерева из плоского списка.\n\t */\n\thierarchy: TreeTableFlatHierarchy<TData>;\n\t/**\n\t * Режим выбора строк.\n\t */\n\tselectionMode?: TableSelectionMode;\n\t/**\n\t * Если `true`, при первом появлении данных раскрывает корневой уровень.\n\t */\n\texpandFirstLevel?: boolean;\n\t/**\n\t * Дополнительные строки, которые должны быть раскрыты при первой инициализации.\n\t */\n\tdefaultExpandedRowIds?: readonly string[];\n\t/**\n\t * Идентификатор колонки, в которой нужно рисовать tree-toggle и отступы.\n\t *\n\t * Если не указан, используется первая видимая колонка.\n\t */\n\ttreeColumnId?: string;\n\t/**\n\t * Отступ на один уровень вложенности.\n\t *\n\t * Числовое значение трактуется как `em`.\n\t */\n\tindentSize?: string | number;\n\t/**\n\t * Дополнительный CSS-класс корневого контейнера.\n\t */\n\tclassName?: string;\n\t/**\n\t * Дополнительный CSS-класс тега `table`.\n\t */\n\ttableClassName?: string;\n\t/**\n\t * Внешнее controlled-состояние видимости колонок.\n\t */\n\tcolumnVisibility?: VisibilityState;\n\t/**\n\t * Стартовое uncontrolled-состояние видимости колонок.\n\t */\n\tdefaultColumnVisibility?: VisibilityState;\n\t/**\n\t * Внешнее controlled-состояние порядка колонок.\n\t */\n\tcolumnOrder?: readonly string[];\n\t/**\n\t * Стартовое uncontrolled-состояние порядка колонок.\n\t */\n\tdefaultColumnOrder?: readonly string[];\n\t/**\n\t * Внешнее controlled-состояние ширин колонок в px.\n\t */\n\tcolumnSizing?: TableColumnSizingState;\n\t/**\n\t * Стартовое uncontrolled-состояние ширин колонок в px.\n\t */\n\tdefaultColumnSizing?: TableColumnSizingState;\n\t/**\n\t * Внешнее controlled-состояние left-pinning для колонок.\n\t */\n\tcolumnPinning?: TableColumnPinningState;\n\t/**\n\t * Стартовое uncontrolled-состояние left-pinning для колонок.\n\t */\n\tdefaultColumnPinning?: TableColumnPinningState;\n\t/**\n\t * Включает изменение ширины колонок через header-handle.\n\t */\n\tenableColumnResizing?: boolean;\n\t/**\n\t * Включает изменение порядка колонок через drag&drop заголовков.\n\t */\n\tenableColumnReordering?: boolean;\n\t/**\n\t * Минимальная ширина колонки при resize в px.\n\t */\n\tcolumnResizeMinWidth?: number;\n\t/**\n\t * Вызывается после изменения видимости колонок.\n\t */\n\tonColumnVisibilityChange?: (state: VisibilityState) => void;\n\t/**\n\t * Вызывается после изменения порядка колонок.\n\t */\n\tonColumnOrderChange?: (state: TableColumnOrderState) => void;\n\t/**\n\t * Вызывается после изменения ширины колонок.\n\t */\n\tonColumnSizingChange?: (state: TableColumnSizingState) => void;\n\t/**\n\t * Вызывается после изменения left-pinning state.\n\t */\n\tonColumnPinningChange?: (state: TableColumnPinningState) => void;\n\t/**\n\t * Вызывается при активации строки кликом или клавиатурой.\n\t */\n\tonRowClick?: (row: TData) => void;\n\t/**\n\t * Вызывается после изменения выбранных строк.\n\t */\n\tonRowSelectionChange?: (rows: TData[]) => void;\n\t/**\n\t * Вызывается после изменения раскрытых узлов.\n\t */\n\tonExpandedRowIdsChange?: (rowIds: string[]) => void;\n\t/**\n\t * Вызывается при достижении конца таблицы внутри scroll-контейнера.\n\t */\n\tonReachEnd?: () => void;\n\t/**\n\t * Позволяет запретить выбор отдельных строк.\n\t */\n\tgetRowCanSelect?: (row: TData) => boolean;\n\t/**\n\t * Позволяет добавить CSS-класс для конкретной строки.\n\t */\n\tgetRowClassName?: (row: TData) => string | undefined;\n\t/**\n\t * Контекстное меню заголовка колонки. Получает runtime-строки дерева,\n\t * потому что BaseTable работает уже после сборки flat hierarchy.\n\t */\n\trenderHeaderContextMenu?: BaseTableProps<TreeTableRuntimeRow<TData>>[\"renderHeaderContextMenu\"];\n\t/**\n\t * Точка расширения содержимого ячейки после общего форматирования.\n\t *\n\t * Для tree-column в `defaultContent` передается только содержимое ячейки:\n\t * TreeTable сам добавит expander и отступ после выполнения слота.\n\t */\n\trenderCellContent?: BaseTableProps<TreeTableRuntimeRow<TData>>[\"renderCellContent\"];\n}\n\n/**\n * Преобразует массив идентификаторов в формат состояния раскрытия TanStack.\n */\nfunction toExpandedState(rowIds: readonly string[]): ExpandedState {\n\treturn Object.fromEntries(rowIds.map((rowId) => [rowId, true]));\n}\n\n/**\n * Извлекает из состояния раскрытия только активные идентификаторы.\n */\nfunction extractExpandedRowIds(expanded: ExpandedState): string[] {\n\tif (typeof expanded === \"boolean\") {\n\t\treturn [];\n\t}\n\n\treturn Object.keys(expanded).filter((rowId) => expanded[rowId]);\n}\n\n/**\n * Нормализует исходную строку, убирая зависимость от внутреннего поля `children`.\n */\nfunction resolveOriginalRow<TData extends object>(row: Row<TreeTableRuntimeRow<TData>>, rowById: Map<string, TData>): TData {\n\treturn rowById.get(row.id) ?? (row.original as TData);\n}\n\n/**\n * Рендерит содержимое древовидной ячейки.\n */\nfunction renderTreeCellContent<TData extends object>(\n\targs: BaseTableCellRenderArgs<TreeTableRuntimeRow<TData>>,\n\tcontent: ReactNode,\n\ttreeColumnId: string | undefined,\n\tindentSize: string | number\n): ReactNode {\n\tif (args.cell.column.id !== treeColumnId) {\n\t\treturn content;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.treeCell}\n\t\t\tstyle={{\n\t\t\t\tpaddingInlineStart: `calc(${args.row.depth} * ${resolveTableLength(indentSize) ?? \"0em\"})`\n\t\t\t}}>\n\t\t\t{args.row.getCanExpand() ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.expanderButton}\n\t\t\t\t\taria-label={args.row.getIsExpanded() ? \"Свернуть строку\" : \"Развернуть строку\"}\n\t\t\t\t\tdata-tree-table-interactive=\"true\"\n\t\t\t\t\tdata-ui=\"tree-table-expander\"\n\t\t\t\t\tdata-action={args.row.getIsExpanded() ? \"collapse-tree-table-row\" : \"expand-tree-table-row\"}\n\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\targs.row.toggleExpanded();\n\t\t\t\t\t}}>\n\t\t\t\t\t{args.row.getIsExpanded() ? <ChevronDownIcon size={16} /> : <ChevronRightIcon size={16} />}\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span className={styles.expanderSpacer} aria-hidden=\"true\" />\n\t\t\t)}\n\n\t\t\t<div className={styles.treeCellContent}>{content}</div>\n\t\t</div>\n\t);\n}\n\n/**\n * Древовидная таблица на базе TanStack Table для плоских OData-данных.\n */\nexport function TreeTable<TData extends object>({\n\ttitle,\n\tisLoading,\n\tisFetching,\n\tdata,\n\tcolumns,\n\thierarchy,\n\tselectionMode = \"none\",\n\texpandFirstLevel = false,\n\tdefaultExpandedRowIds,\n\ttreeColumnId,\n\tindentSize = 1,\n\tclassName,\n\ttableClassName,\n\tcolumnVisibility,\n\tdefaultColumnVisibility,\n\tcolumnOrder,\n\tdefaultColumnOrder,\n\tcolumnSizing,\n\tdefaultColumnSizing,\n\tcolumnPinning,\n\tdefaultColumnPinning,\n\tenableColumnResizing = false,\n\tenableColumnReordering = false,\n\tcolumnResizeMinWidth,\n\tonColumnVisibilityChange,\n\tonColumnOrderChange,\n\tonColumnSizingChange,\n\tonColumnPinningChange,\n\tonRowClick,\n\tonRowSelectionChange,\n\tonExpandedRowIdsChange,\n\tonReachEnd,\n\tgetRowCanSelect,\n\tgetRowClassName,\n\trenderHeaderContextMenu,\n\trenderCellContent\n}: TreeTableProps<TData>) {\n\tconst treeData = useMemo(() => buildTreeTableRows(data ?? [], hierarchy), [data, hierarchy]);\n\tconst formattingSnapshot = useMemo(() => buildTableFormattingSnapshot(columns), [columns]);\n\tconst initialExpandedRowIds = useMemo(() => {\n\t\tconst nextExpandedRowIds = new Set(defaultExpandedRowIds ?? []);\n\n\t\tif (expandFirstLevel) {\n\t\t\tfor (const rootRowId of treeData.rootRowIds) {\n\t\t\t\tnextExpandedRowIds.add(rootRowId);\n\t\t\t}\n\t\t}\n\n\t\treturn Array.from(nextExpandedRowIds);\n\t}, [defaultExpandedRowIds, expandFirstLevel, treeData.rootRowIds]);\n\n\tconst [expanded, setExpanded] = useState<ExpandedState>({});\n\tconst hasInitializedExpansionRef = useRef(false);\n\tconst scrollableRef = useRef<HTMLDivElement | null>(null);\n\tconst sentinelRef = useRef<HTMLDivElement | null>(null);\n\n\tconst { rowSelection, activateRowSelection } = useTableRowSelection({\n\t\tavailableRowIds: treeData.allRowIds,\n\t\trowById: treeData.rowById,\n\t\tselectionMode,\n\t\tonRowSelectionChange\n\t});\n\tconst { columnVisibility: resolvedColumnVisibility, onColumnVisibilityChange: handleColumnVisibilityChange } = useTableColumnVisibility(\n\t\t{\n\t\t\tcolumnVisibility,\n\t\t\tdefaultColumnVisibility,\n\t\t\tonColumnVisibilityChange\n\t\t}\n\t);\n\tconst { columnOrder: resolvedColumnOrder, onColumnOrderChange: handleColumnOrderChange } = useTableColumnOrder({\n\t\tcolumnOrder,\n\t\tdefaultColumnOrder,\n\t\tonColumnOrderChange\n\t});\n\tconst { columnSizing: resolvedColumnSizing, onColumnSizingChange: handleColumnSizingChange } = useTableColumnSizing({\n\t\tcolumnSizing,\n\t\tdefaultColumnSizing,\n\t\tcolumnResizeMinWidth,\n\t\tonColumnSizingChange\n\t});\n\tconst { columnPinning: resolvedColumnPinning, onColumnPinningChange: handleColumnPinningChange } = useTableColumnPinning({\n\t\tcolumnPinning,\n\t\tdefaultColumnPinning,\n\t\tonColumnPinningChange\n\t});\n\n\tconst baseTableColumnState = useMemo<BaseTableColumnState>(\n\t\t() => ({\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility\n\t\t}),\n\t\t[resolvedColumnOrder, resolvedColumnPinning, resolvedColumnSizing, resolvedColumnVisibility]\n\t);\n\n\tconst syncExpandedState = useEffectEvent((availableRowIds: readonly string[], nextInitialExpandedRowIds: readonly string[]) => {\n\t\tif (availableRowIds.length === 0) {\n\t\t\thasInitializedExpansionRef.current = false;\n\t\t\tsetExpanded({});\n\t\t\treturn;\n\t\t}\n\n\t\tconst availableRowIdSet = new Set(availableRowIds);\n\n\t\tsetExpanded((currentExpanded) => {\n\t\t\tconst persistedRowIds = extractExpandedRowIds(currentExpanded).filter((rowId) => availableRowIdSet.has(rowId));\n\n\t\t\tif (!hasInitializedExpansionRef.current) {\n\t\t\t\thasInitializedExpansionRef.current = true;\n\n\t\t\t\tconst seededRowIds = Array.from(\n\t\t\t\t\tnew Set([...persistedRowIds, ...nextInitialExpandedRowIds.filter((rowId) => availableRowIdSet.has(rowId))])\n\t\t\t\t);\n\n\t\t\t\treturn toExpandedState(seededRowIds);\n\t\t\t}\n\n\t\t\treturn toExpandedState(persistedRowIds);\n\t\t});\n\t});\n\n\tconst emitExpandedRowIdsChange = useEffectEvent((currentExpanded: ExpandedState) => {\n\t\tonExpandedRowIdsChange?.(extractExpandedRowIds(currentExpanded));\n\t});\n\n\tconst emitReachEnd = useEffectEvent(() => {\n\t\tonReachEnd?.();\n\t});\n\n\tuseEffect(() => {\n\t\tsyncExpandedState(treeData.allRowIds, initialExpandedRowIds);\n\t}, [initialExpandedRowIds, treeData.allRowIds]);\n\n\tuseEffect(() => {\n\t\temitExpandedRowIdsChange(expanded);\n\t}, [expanded]);\n\n\tuseEffect(() => {\n\t\tif (!onReachEnd || !scrollableRef.current || !sentinelRef.current || isLoading) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tconst entry = entries[0];\n\n\t\t\t\tif (entry?.isIntersecting) {\n\t\t\t\t\temitReachEnd();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\troot: scrollableRef.current,\n\t\t\t\tthreshold: 0.1\n\t\t\t}\n\t\t);\n\n\t\tobserver.observe(sentinelRef.current);\n\n\t\treturn () => observer.disconnect();\n\t}, [isLoading, onReachEnd, treeData.rows.length]);\n\n\tconst table = useReactTable<TreeTableRuntimeRow<TData>>({\n\t\tdata: treeData.rows as TreeTableRuntimeRow<TData>[],\n\t\tcolumns: columns as TableColumnDef<TreeTableRuntimeRow<TData>>[],\n\t\tstate: {\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility,\n\t\t\texpanded,\n\t\t\trowSelection\n\t\t},\n\t\tgetRowId: (row) => hierarchy.getRowId(row as TData),\n\t\tgetSubRows: (row) => row.children,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetExpandedRowModel: getExpandedRowModel(),\n\t\tonColumnOrderChange: handleColumnOrderChange,\n\t\tonColumnPinningChange: handleColumnPinningChange,\n\t\tonColumnSizingChange: handleColumnSizingChange,\n\t\tonColumnVisibilityChange: handleColumnVisibilityChange,\n\t\tonExpandedChange: setExpanded,\n\t\tenableMultiRowSelection: selectionMode === \"multi\",\n\t\tenableRowSelection: (row) => {\n\t\t\tif (selectionMode === \"none\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\t\treturn getRowCanSelect ? getRowCanSelect(originalRow) : true;\n\t\t}\n\t});\n\n\tconst visibleLeafColumns = getOrderedVisibleLeafColumns(table, baseTableColumnState);\n\tconst resolvedTreeColumnId = treeColumnId ?? visibleLeafColumns[0]?.id;\n\tconst rowModelRows = table.getRowModel().rows;\n\tconst mergedCellLayout = useMemo(\n\t\t() =>\n\t\t\tbuildBaseTableMergedCellsLayout({\n\t\t\t\trows: rowModelRows,\n\t\t\t\tcolumns: visibleLeafColumns,\n\t\t\t\tresolveRowBoundaryKey: (row) => row.depth,\n\t\t\t\texcludeColumnIds: resolvedTreeColumnId ? new Set([resolvedTreeColumnId]) : undefined\n\t\t\t}),\n\t\t[rowModelRows, visibleLeafColumns, resolvedTreeColumnId]\n\t);\n\n\t/**\n\t * Активирует строку: обновляет выбор в соответствии с режимом и вызывает внешний callback.\n\t */\n\tconst activateRow = (row: Row<TreeTableRuntimeRow<TData>>) => {\n\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\tactivateRowSelection(row.id, row.getCanSelect());\n\t\tonRowClick?.(originalRow);\n\t};\n\n\treturn (\n\t\t<BaseTable\n\t\t\ttable={table}\n\t\t\tcolumnState={baseTableColumnState}\n\t\t\ttitle={title}\n\t\t\tisLoading={isLoading}\n\t\t\tisFetching={isFetching}\n\t\t\tclassName={className}\n\t\t\ttableClassName={tableClassName}\n\t\t\tselectionMode={selectionMode}\n\t\t\tscrollableRef={scrollableRef}\n\t\t\tinteractiveElementSelector='[data-tree-table-interactive=\"true\"]'\n\t\t\tonActivateRow={selectionMode !== \"none\" || onRowClick ? activateRow : undefined}\n\t\t\tisRowInteractive={(row) => Boolean(onRowClick || (selectionMode !== \"none\" && row.getCanSelect()))}\n\t\t\tgetRowClassName={(row) => {\n\t\t\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\t\t\treturn getRowClassName?.(originalRow);\n\t\t\t}}\n\t\t\tgetCellClassName={({ row, cell }) =>\n\t\t\t\tcn(\n\t\t\t\t\tcell.column.id === resolvedTreeColumnId && styles.treeColumnCell,\n\t\t\t\t\tcell.column.id === resolvedTreeColumnId && row.getIsSelected() && styles.selectedIndicatorCell\n\t\t\t\t)\n\t\t\t}\n\t\t\tgetCellLayout={({ cell }) => mergedCellLayout.get(cell.id)}\n\t\t\trenderHeaderContextMenu={renderHeaderContextMenu}\n\t\t\tenableColumnResizing={enableColumnResizing}\n\t\t\tenableColumnReordering={enableColumnReordering}\n\t\t\tcolumnResizeMinWidth={columnResizeMinWidth}\n\t\t\trenderCellContent={(args) => {\n\t\t\t\tconst originalRow = resolveOriginalRow(args.row, treeData.rowById);\n\t\t\t\tconst displayValue = formatPipelineDisplayValue({\n\t\t\t\t\tfield: formattingSnapshot.runtimeByColumnId[args.cell.column.id],\n\t\t\t\t\trawValue: args.cell.getValue(),\n\t\t\t\t\trowData: originalRow as TableFormulaRowData,\n\t\t\t\t\trowKind: \"tree\"\n\t\t\t\t});\n\t\t\t\tconst defaultContent = shouldUseTableFormatting({\n\t\t\t\t\tcolumnId: args.cell.column.id,\n\t\t\t\t\truntimeByColumnId: formattingSnapshot.runtimeByColumnId,\n\t\t\t\t\tcustomCellColumnIds: formattingSnapshot.customCellColumnIds\n\t\t\t\t}) ? (\n\t\t\t\t\t<FormattedTableCell displayValue={displayValue} align={args.columnMeta?.align} />\n\t\t\t\t) : (\n\t\t\t\t\targs.defaultContent\n\t\t\t\t);\n\t\t\t\tconst content = renderCellContent\n\t\t\t\t\t? renderCellContent({\n\t\t\t\t\t\t\t...args,\n\t\t\t\t\t\t\tdefaultContent,\n\t\t\t\t\t\t\tdisplayValue\n\t\t\t\t\t\t})\n\t\t\t\t\t: defaultContent;\n\n\t\t\t\treturn renderTreeCellContent(args, content, resolvedTreeColumnId, indentSize);\n\t\t\t}}\n\t\t\tafterTableContent={onReachEnd ? <div ref={sentinelRef} className={styles.sentinel} aria-hidden=\"true\" /> : null}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuzaki13/react-foundation-ui",
3
- "version": "1.4.2",
3
+ "version": "1.4.4",
4
4
  "description": "Reusable React foundation UI primitives and Storybook stories.",
5
5
  "license": "MIT",
6
6
  "author": "Ryuzaki13",
@@ -339,6 +339,7 @@
339
339
  "scripts": {
340
340
  "build": "vite build && tsc -p tsconfig.build.json --emitDeclarationOnly",
341
341
  "typecheck": "tsc -p tsconfig.build.json --noEmit",
342
+ "test:run": "npx vitest",
342
343
  "test": "vitest run",
343
344
  "lint": "eslint --config eslint.config.ts .",
344
345
  "lint:fix": "eslint --config eslint.config.ts . --fix",
@@ -354,11 +355,11 @@
354
355
  "registry": "https://registry.npmjs.org/"
355
356
  },
356
357
  "peerDependencies": {
357
- "@dnd-kit/core": "^6.3.1",
358
- "@dnd-kit/modifiers": "^9.0.0",
359
- "@dnd-kit/sortable": "^10.0.0",
360
- "@dnd-kit/utilities": "^3.2.2",
361
- "@floating-ui/react": "^0.27.19",
358
+ "@dnd-kit/core": ">=6.3.0 <7.0.0",
359
+ "@dnd-kit/modifiers": ">=9.0.0 <10.0.0",
360
+ "@dnd-kit/sortable": ">=10.0.0 <11.0.0",
361
+ "@dnd-kit/utilities": ">=3.0.0 <4.0.0",
362
+ "@floating-ui/react": ">=0.27.0 <0.28.0",
362
363
  "@lexical/html": "^0.46.0",
363
364
  "@lexical/link": "^0.46.0",
364
365
  "@lexical/list": "^0.46.0",
@@ -368,20 +369,18 @@
368
369
  "@lexical/utils": "^0.46.0",
369
370
  "@ryuzaki13/react-foundation-api": ">=0.1.0 <2.0.0",
370
371
  "@ryuzaki13/react-foundation-lib": ">=0.1.0 <2.0.0",
371
- "@storybook/react-vite": "^10.4.6",
372
- "@tanstack/react-query": "^5.101.1",
373
- "@tanstack/react-router": "^1.170.16",
374
- "@tanstack/react-table": "^8.21.3",
375
- "@tanstack/react-virtual": "^3.14.4",
372
+ "@tanstack/react-query": ">=5.101.1 <6.0.0",
373
+ "@tanstack/react-router": ">=1.170.0 <2.0.0",
374
+ "@tanstack/react-table": ">=8.21.0 <9.0.0",
375
+ "@tanstack/react-virtual": ">=3.14.0 <4.0.0",
376
376
  "lexical": "^0.46.0",
377
- "lucide-react": "^1.21.0",
378
- "motion": "^12.42.0",
379
- "react": "^19.2.7",
380
- "react-dom": "^19.2.7",
381
- "react-easy-crop": "^6.0.2",
382
- "storybook": "^10.4.6",
383
- "yet-another-react-lightbox": "^3.32.1",
384
- "zustand": "^5.0.14"
377
+ "lucide-react": ">=1.21.0 <2.0.0",
378
+ "motion": ">=12.42.0 <13.0.0",
379
+ "react": ">=19.2.0 <20.0.0",
380
+ "react-dom": ">=19.2.0 <20.0.0",
381
+ "react-easy-crop": ">=6.0.0 <7.0.0",
382
+ "yet-another-react-lightbox": ">=3.32.0 <4.0.0",
383
+ "zustand": ">=5.0.0 <6.0.0"
385
384
  },
386
385
  "peerDependenciesMeta": {
387
386
  "@dnd-kit/core": {
@@ -423,6 +422,9 @@
423
422
  "@tanstack/react-query": {
424
423
  "optional": true
425
424
  },
425
+ "@tanstack/react-router": {
426
+ "optional": true
427
+ },
426
428
  "@tanstack/react-table": {
427
429
  "optional": true
428
430
  },
@@ -441,19 +443,10 @@
441
443
  "react-easy-crop": {
442
444
  "optional": true
443
445
  },
444
- "zustand": {
445
- "optional": true
446
- },
447
- "@tanstack/react-router": {
448
- "optional": true
449
- },
450
- "storybook": {
451
- "optional": true
452
- },
453
446
  "yet-another-react-lightbox": {
454
447
  "optional": true
455
448
  },
456
- "@storybook/react-vite": {
449
+ "zustand": {
457
450
  "optional": true
458
451
  }
459
452
  },
@@ -463,7 +456,7 @@
463
456
  "@dnd-kit/modifiers": "^9.0.0",
464
457
  "@dnd-kit/sortable": "^10.0.0",
465
458
  "@dnd-kit/utilities": "^3.2.2",
466
- "@floating-ui/react": "^0.27.19",
459
+ "@floating-ui/react": "^0.27.20",
467
460
  "@lexical/html": "^0.46.0",
468
461
  "@lexical/link": "^0.46.0",
469
462
  "@lexical/list": "^0.46.0",
@@ -471,50 +464,50 @@
471
464
  "@lexical/rich-text": "^0.46.0",
472
465
  "@lexical/selection": "^0.46.0",
473
466
  "@lexical/utils": "^0.46.0",
474
- "@ryuzaki13/react-foundation-api": "^1.1.10",
475
- "@ryuzaki13/react-foundation-lib": "^1.2.2",
476
- "@storybook/addon-a11y": "^10.4.6",
477
- "@storybook/addon-docs": "^10.4.6",
478
- "@storybook/addon-vitest": "^10.4.6",
479
- "@storybook/react-vite": "^10.4.6",
480
- "@tanstack/query-broadcast-client-experimental": "^5.101.2",
481
- "@tanstack/query-persist-client-core": "^5.101.2",
482
- "@tanstack/react-query": "^5.101.1",
483
- "@tanstack/react-router": "^1.170.17",
467
+ "@ryuzaki13/react-foundation-api": "^1.1.13",
468
+ "@ryuzaki13/react-foundation-lib": "^1.2.6",
469
+ "@storybook/addon-a11y": "^10.5.5",
470
+ "@storybook/addon-docs": "^10.5.5",
471
+ "@storybook/addon-vitest": "^10.5.5",
472
+ "@storybook/react-vite": "^10.5.5",
473
+ "@tanstack/query-broadcast-client-experimental": "^5.101.4",
474
+ "@tanstack/query-persist-client-core": "^5.101.4",
475
+ "@tanstack/react-query": "^5.101.4",
476
+ "@tanstack/react-router": "^1.170.18",
484
477
  "@tanstack/react-table": "^8.21.3",
485
- "@tanstack/react-virtual": "^3.14.4",
478
+ "@tanstack/react-virtual": "^3.14.9",
486
479
  "@testing-library/dom": "^10.4.1",
487
480
  "@testing-library/react": "^16.3.2",
488
481
  "@testing-library/user-event": "^14.6.1",
489
- "@types/node": "^22.0.0",
490
- "@types/react": "^19.2.17",
491
- "@types/react-dom": "^19.2.3",
492
- "@vitejs/plugin-react": "^6.0.3",
482
+ "@types/node": "^22.20.1",
483
+ "@types/react": "^19.2.18",
484
+ "@types/react-dom": "^19.2.4",
485
+ "@vitejs/plugin-react": "^6.0.5",
493
486
  "@vitest/browser": "^4.1.10",
494
- "eslint": "^10.6.0",
487
+ "eslint": "^10.8.0",
495
488
  "eslint-import-resolver-typescript": "^4.4.5",
496
489
  "eslint-plugin-import-x": "^4.17.1",
497
490
  "eslint-plugin-prettier": "^5.5.6",
498
491
  "eslint-plugin-react-hooks": "^7.1.1",
499
492
  "eslint-plugin-react-refresh": "^0.5.3",
500
- "globals": "^17.7.0",
501
- "immer": "^11.1.11",
493
+ "globals": "^17.8.0",
494
+ "immer": "^11.1.15",
502
495
  "jiti": "^2.7.0",
503
496
  "jsdom": "^29.1.1",
504
497
  "lexical": "^0.46.0",
505
- "lucide-react": "^1.21.0",
506
- "motion": "^12.42.0",
507
- "playwright": "^1.61.1",
508
- "react": "^19.2.7",
509
- "react-dom": "^19.2.7",
510
- "react-easy-crop": "^6.0.2",
498
+ "lucide-react": "^1.28.0",
499
+ "motion": "^12.43.0",
500
+ "playwright": "^1.62.1",
501
+ "react": "^19.2.8",
502
+ "react-dom": "^19.2.8",
503
+ "react-easy-crop": "^6.2.3",
511
504
  "sass-embedded": "^1.100.0",
512
- "storybook": "^10.4.6",
505
+ "storybook": "^10.5.5",
513
506
  "typescript": "^6.0.3",
514
- "typescript-eslint": "^8.63.0",
515
- "vite": "^8.1.0",
516
- "vitest": "^4.1.9",
517
- "yet-another-react-lightbox": "^3.32.1",
507
+ "typescript-eslint": "^8.65.0",
508
+ "vite": "^8.2.0",
509
+ "vitest": "^4.1.10",
510
+ "yet-another-react-lightbox": "^3.32.2",
518
511
  "zustand": "^5.0.14"
519
512
  },
520
513
  "engines": {
@@ -1,6 +1,6 @@
1
- import{i as e}from"./preload-helper-B45gAKPr.js";import{t}from"./iframe-BJGIOdSH.js";import{E as n,a as r,d as i,f as a,l as o,m as s,n as c,p as l,r as u,u as d}from"./blocks-ixiC6_NZ.js";import{t as f}from"./mdx-react-shim-CmoAsjhK.js";import{Appearances as p,Basic as m,RemovableList as h,Sizes as g,Tones as _,n as v,t as y}from"./Badge.stories-CzsgAfG9.js";function b(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(o,{of:y,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
2
- `,(0,S.jsx)(l,{children:`Badge`}),`
3
- `,(0,S.jsx)(a,{children:`Компактная текстовая метка для статусов, категорий, фильтров и коротких служебных пометок`}),`
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-DaN-XFub.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-BiaKjftm.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./Badge.stories-gNFtCWnR.js";function b(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
2
+ `,(0,S.jsx)(u,{children:`Badge`}),`
3
+ `,(0,S.jsx)(o,{children:`Компактная текстовая метка для статусов, категорий, фильтров и коротких служебных пометок`}),`
4
4
  `,(0,S.jsx)(t.p,{children:`Badge подходит для коротких подписей, которые должны быстро читаться и не перегружать интерфейс:`}),`
5
5
  `,(0,S.jsxs)(t.ul,{children:[`
6
6
  `,(0,S.jsx)(t.li,{children:`статусы и состояния записи;`}),`
@@ -10,7 +10,7 @@ import{i as e}from"./preload-helper-B45gAKPr.js";import{t}from"./iframe-BJGIOdSH
10
10
  `]}),`
11
11
  `,(0,S.jsxs)(t.p,{children:[`Компонент принимает только строковый `,(0,S.jsx)(t.code,{children:`children`}),`. Длинный текст автоматически ограничивается по ширине и сокращается через `,(0,S.jsx)(t.code,{children:`TextOverflow`}),`, поэтому Badge лучше использовать для коротких и однозначных формулировок.`]}),`
12
12
  `,(0,S.jsx)(t.h2,{id:`основной-сценарий`,children:`Основной сценарий`}),`
13
- `,(0,S.jsx)(d,{}),`
13
+ `,(0,S.jsx)(f,{}),`
14
14
  `,(0,S.jsx)(t.pre,{children:(0,S.jsx)(t.code,{className:`language-tsx`,children:`import { Badge } from "@/shared/ui";
15
15
 
16
16
  export function Example() {
@@ -21,7 +21,7 @@ export function Example() {
21
21
  );
22
22
  }
23
23
  `})}),`
24
- `,(0,S.jsx)(r,{of:m}),`
24
+ `,(0,S.jsx)(i,{of:_}),`
25
25
  `,(0,S.jsx)(t.h2,{id:`визуальная-схема`,children:`Визуальная схема`}),`
26
26
  `,(0,S.jsx)(t.p,{children:`В компоненте есть два уровня настройки:`}),`
27
27
  `,(0,S.jsxs)(t.ul,{children:[`
@@ -35,7 +35,7 @@ export function Example() {
35
35
  `,(0,S.jsxs)(t.li,{children:[`проп `,(0,S.jsx)(t.code,{children:`color`}),` поддерживается только для обратной совместимости и считается устаревшим.`]}),`
36
36
  `]}),`
37
37
  `,(0,S.jsx)(t.h3,{id:`тоны`,children:`Тоны`}),`
38
- `,(0,S.jsx)(u,{of:_}),`
38
+ `,(0,S.jsx)(d,{of:g}),`
39
39
  `,(0,S.jsx)(t.pre,{children:(0,S.jsx)(t.code,{className:`language-tsx`,children:`import { Badge, BadgeList } from "@/shared/ui";
40
40
 
41
41
  export function StatusBadges() {
@@ -61,7 +61,7 @@ export function StatusBadges() {
61
61
  }
62
62
  `})}),`
63
63
  `,(0,S.jsx)(t.h3,{id:`варианты-отображения`,children:`Варианты отображения`}),`
64
- `,(0,S.jsx)(u,{of:p}),`
64
+ `,(0,S.jsx)(d,{of:y}),`
65
65
  `,(0,S.jsx)(t.pre,{children:(0,S.jsx)(t.code,{className:`language-tsx`,children:`import { Badge, BadgeList } from "@/shared/ui";
66
66
 
67
67
  export function AppearanceBadges() {
@@ -85,7 +85,7 @@ export function AppearanceBadges() {
85
85
  `})}),`
86
86
  `,(0,S.jsx)(t.h2,{id:`размеры`,children:`Размеры`}),`
87
87
  `,(0,S.jsxs)(t.p,{children:[`Badge поддерживает размеры от `,(0,S.jsx)(t.code,{children:`xs`}),` до `,(0,S.jsx)(t.code,{children:`xl`}),`. На практике чаще всего используются `,(0,S.jsx)(t.code,{children:`sm`}),` и `,(0,S.jsx)(t.code,{children:`md`}),`: они лучше всего подходят для строк таблиц, панелей фильтрации и карточек.`]}),`
88
- `,(0,S.jsx)(u,{of:g}),`
88
+ `,(0,S.jsx)(d,{of:p}),`
89
89
  `,(0,S.jsx)(t.pre,{children:(0,S.jsx)(t.code,{className:`language-tsx`,children:`import { Badge, BadgeList } from "@/shared/ui";
90
90
 
91
91
  export function SizeBadges() {
@@ -102,7 +102,7 @@ export function SizeBadges() {
102
102
  `})}),`
103
103
  `,(0,S.jsx)(t.h2,{id:`списки-фильтров-и-выбранных-значений`,children:`Списки фильтров и выбранных значений`}),`
104
104
  `,(0,S.jsxs)(t.p,{children:[`Для набора бейджей в одну строку или в несколько переносимых строк есть вспомогательный контейнер `,(0,S.jsx)(t.code,{children:`BadgeList`}),`. Это самый частый сценарий в проекте: выбранные фильтры, категории, теги и активные параметры поиска.`]}),`
105
- `,(0,S.jsx)(u,{of:h}),`
105
+ `,(0,S.jsx)(d,{of:m}),`
106
106
  `,(0,S.jsx)(t.pre,{children:(0,S.jsx)(t.code,{className:`language-tsx`,children:`import { useState } from "react";
107
107
 
108
108
  import { Badge, BadgeList } from "@/shared/ui";
@@ -134,6 +134,6 @@ export function SelectedFilters() {
134
134
  `,(0,S.jsxs)(t.li,{children:[`Для новых сценариев рекомендуется использовать `,(0,S.jsx)(t.code,{children:`tone`}),` и `,(0,S.jsx)(t.code,{children:`appearance`}),`, а не `,(0,S.jsx)(t.code,{children:`color`}),`.`]}),`
135
135
  `]}),`
136
136
  `,(0,S.jsx)(t.h2,{id:`api`,children:`API`}),`
137
- `,(0,S.jsx)(c,{of:y}),`
137
+ `,(0,S.jsx)(l,{of:h}),`
138
138
  `,(0,S.jsx)(t.h2,{id:`все-сторисы`,children:`Все сторисы`}),`
139
- `,(0,S.jsx)(i,{includePrimary:!1})]})}function x(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,S.jsx)(t,{...e,children:(0,S.jsx)(b,{...e})}):b(e)}var S;e((()=>{S=t(),f(),s(),v()}))();export{x as default};
139
+ `,(0,S.jsx)(a,{includePrimary:!1})]})}function x(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,S.jsx)(t,{...e,children:(0,S.jsx)(b,{...e})}):b(e)}var S;function C(){return(C=e((()=>{S=t(),r(),c(),v()})))()}C();export{x as default};
@@ -0,0 +1,54 @@
1
+ import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r,t as i}from"./x-Dh43gJN9.js";import{n as a}from"./iframe-DaN-XFub.js";import{a as o,i as s}from"./utils-DUM89eIj.js";import{a as c,l}from"./array-BBSjoTRy-CIRmlF93.js";import{n as u,t as d}from"./FloatingPopover-D4h-c24R.js";import{i as f,n as p,r as m,t as h}from"./uiClasses-CO3Cdv1E.js";import{n as g,t as _}from"./FlexContainer-LmZIdhq2.js";function v({maxChar:e,placement:t=`left`,closeDelay:n=0,maxWidth:r,children:i,block:a,state:o,textWrap:s,textWrapProps:c}){let u=l(i);if(!u.length||e&&u.length<e)return(0,y.jsx)(`span`,{children:u});let f=s??`div`,p={style:{display:a?`block`:`inline-block`,width:e?`${e-3}ch`:`auto`},className:`textOverflow`},m={...c,...p,style:{...c?.style,...p.style},className:[c?.className,p.className].filter(Boolean).join(` `)};return(0,y.jsx)(d,{state:o,placement:t,openOnHover:!0,content:u,closeDelay:n,maxWidth:r,children:(0,y.jsx)(f,{...m,children:u})})}var y;function b(){return(b=e((()=>{c(),u(),y=a(),v.__docgenInfo={description:``,methods:[],displayName:`TextOverflow`,props:{children:{required:!0,tsType:{name:`string`},description:``},maxChar:{required:!1,tsType:{name:`number`},description:``},maxWidth:{required:!1,tsType:{name:`number`},description:`Максимальная ширина тултипа в em.`},placement:{required:!1,tsType:{name:`Placement`},description:``,defaultValue:{value:`"left"`,computed:!1}},closeDelay:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`0`,computed:!1}},block:{required:!1,tsType:{name:`literal`,value:`true`},description:`Для работы text-overflow элемент обязан быть блочным или inline-block.
2
+ Если в качестве обёртки передается инлайновый компонент, то он будет
3
+ перезаписан через стили на display: block или inline-block в зависимости
4
+ от установки данного пропса.`},state:{required:!1,tsType:{name:`union`,raw:`"information" | "error" | "warning" | "success" | "negative"`,elements:[{name:`literal`,value:`"information"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"negative"`}]},description:``},textWrap:{required:!1,tsType:{name:`T`},description:``},textWrapProps:{required:!1,tsType:{name:`Omit`,elements:[{name:`ComponentProps`,elements:[{name:`T`}],raw:`ComponentProps<T>`},{name:`literal`,value:`"children"`}],raw:`Omit<ComponentProps<T>, "children">`},description:``}}}})))()}var x,S,C,w,T,E,D,O,k,A;function j(){return(j=e((()=>{x=`qBtmnH`,S=`p-HsHY`,C=`u9tQAE`,w=`FRScRz`,T=`W13uQO`,E=`_3IRcM9`,D=`R3ybI7`,O=`DdWAaC`,k=`_5cXBQF`,A={badge:x,passive:S,sizeXs:C,sizeSm:w,sizeMd:T,sizeLg:E,sizeXl:D,content:O,removeButton:k}})))()}function M({children:e,size:t=`sm`,tone:n,appearance:r,className:a,onRemove:s}){let c=n??`neutral`,l=f({tone:n,appearance:r,fallbackTone:c,fallbackAppearance:c===`neutral`?`outline`:`solid`});return(0,N.jsxs)(`div`,{className:o(A.badge,P[t],p(l.tone),h(l.appearance),!s&&A.passive,a),children:[(0,N.jsx)(v,{maxChar:25,placement:`top`,block:!0,textWrapProps:{className:A.content},children:String(e)}),s&&(0,N.jsx)(`button`,{type:`button`,onClick:s,className:A.removeButton,"aria-label":`Удалить бейдж`,"data-ui":`badge-remove-button`,"data-action":`remove-badge`,children:(0,N.jsx)(i,{})})]})}var N,P;function F(){return(F=e((()=>{s(),r(),b(),m(),j(),N=a(),P={xs:A.sizeXs,sm:A.sizeSm,md:A.sizeMd,lg:A.sizeLg,xl:A.sizeXl},M.__docgenInfo={description:`Компактный индикатор для статусов, категорий и коротких служебных меток.`,methods:[],displayName:`Badge`,props:{children:{required:!0,tsType:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``,defaultValue:{value:`"sm"`,computed:!1}},tone:{required:!1,tsType:{name:`union`,raw:`"neutral" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``},appearance:{required:!1,tsType:{name:`union`,raw:`"solid" | "outline" | "ghost" | "transparent"`,elements:[{name:`literal`,value:`"solid"`},{name:`literal`,value:`"outline"`},{name:`literal`,value:`"ghost"`},{name:`literal`,value:`"transparent"`}]},description:``},className:{required:!1,tsType:{name:`string`},description:``},onRemove:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}}}})))()}function I({children:e}){return(0,R.jsx)(_,{inline:!0,wrap:!0,gap:`sm`,align:`baseline`,children:L.Children.map(e,(e,t)=>(0,R.jsx)(L.Fragment,{children:e},t))})}var L,R;function z(){return(z=e((()=>{L=n(),g(),R=a(),I.__docgenInfo={description:"Контейнер для группы `Badge`, который выстраивает элементы в единый список с предсказуемыми отступами. Используется для компактного вывода набора меток или фильтров.",methods:[],displayName:`BadgeList`,props:{children:{required:!0,tsType:{name:`Array`,elements:[{name:`ReactElement`,elements:[{name:`union`,raw:`typeof Badge | null | undefined | false`,elements:[{name:`Badge`},{name:`null`},{name:`undefined`},{name:`literal`,value:`false`}]}],raw:`ReactElement<typeof Badge | null | undefined | false>`}],raw:`ReactElement<typeof Badge | null | undefined | false>[]`},description:``}}}})))()}var B=t({Appearances:()=>K,Basic:()=>W,RemovableList:()=>J,Sizes:()=>q,Tones:()=>G,__namedExportsOrder:()=>Y,default:()=>U}),V,H,U,W,G,K,q,J,Y;function X(){return(X=e((()=>{V=n(),F(),z(),H=a(),U={title:`Shared/UI/Badge`,component:M,args:{children:`Новый`,size:`md`,tone:`info`,appearance:`solid`},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текст внутри бейджа.`,control:`text`},size:{description:`Размер бейджа.`,control:`inline-radio`,options:[`sm`,`md`,`lg`]},tone:{description:`Семантический тон бейджа.`,control:`inline-radio`,options:[`neutral`,`success`,`warning`,`error`,`info`]},appearance:{description:`Форма бейджа.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},onRemove:{description:`Показывает кнопку удаления и вызывает обработчик по клику.`,control:!1},className:{description:`Дополнительный CSS-класс контейнера.`,control:`text`}}},W={},G={render:()=>(0,H.jsxs)(I,{children:[(0,H.jsx)(M,{tone:`neutral`,appearance:`outline`,children:`Neutral`}),(0,H.jsx)(M,{tone:`success`,appearance:`solid`,children:`Успешно`}),(0,H.jsx)(M,{tone:`warning`,appearance:`solid`,children:`Внимание`}),(0,H.jsx)(M,{tone:`error`,appearance:`solid`,children:`Ошибка`}),(0,H.jsx)(M,{tone:`info`,appearance:`solid`,children:`Информация`})]})},K={render:()=>(0,H.jsxs)(I,{children:[(0,H.jsx)(M,{tone:`neutral`,appearance:`solid`,children:`Solid`}),(0,H.jsx)(M,{tone:`neutral`,appearance:`outline`,children:`Outline`}),(0,H.jsx)(M,{tone:`info`,appearance:`ghost`,children:`Ghost`}),(0,H.jsx)(M,{tone:`warning`,appearance:`transparent`,children:`Transparent`})]})},q={render:()=>(0,H.jsxs)(I,{children:[(0,H.jsx)(M,{size:`xs`,children:`Extra Small`}),(0,H.jsx)(M,{size:`sm`,children:`Small`}),(0,H.jsx)(M,{size:`md`,children:`Medium`}),(0,H.jsx)(M,{size:`lg`,children:`Large`}),(0,H.jsx)(M,{size:`xl`,children:`Extra Large`})]})},J={render:()=>{let[e,t]=(0,V.useState)([`Фильтр A`,`Фильтр B`,`Фильтр C`]);return(0,H.jsx)(I,{children:e.map(e=>(0,H.jsx)(M,{tone:`info`,appearance:`outline`,onRemove:()=>t(t=>t.filter(t=>t!==e)),children:e},e))})}},W.parameters={...W.parameters,docs:{...W.parameters?.docs,source:{originalSource:`{}`,...W.parameters?.docs?.source}}},G.parameters={...G.parameters,docs:{...G.parameters?.docs,source:{originalSource:`{
5
+ render: () => <BadgeList>
6
+ <Badge tone="neutral" appearance="outline">
7
+ Neutral
8
+ </Badge>
9
+ <Badge tone="success" appearance="solid">
10
+ Успешно
11
+ </Badge>
12
+ <Badge tone="warning" appearance="solid">
13
+ Внимание
14
+ </Badge>
15
+ <Badge tone="error" appearance="solid">
16
+ Ошибка
17
+ </Badge>
18
+ <Badge tone="info" appearance="solid">
19
+ Информация
20
+ </Badge>
21
+ </BadgeList>
22
+ }`,...G.parameters?.docs?.source}}},K.parameters={...K.parameters,docs:{...K.parameters?.docs,source:{originalSource:`{
23
+ render: () => <BadgeList>
24
+ <Badge tone="neutral" appearance="solid">
25
+ Solid
26
+ </Badge>
27
+ <Badge tone="neutral" appearance="outline">
28
+ Outline
29
+ </Badge>
30
+ <Badge tone="info" appearance="ghost">
31
+ Ghost
32
+ </Badge>
33
+ <Badge tone="warning" appearance="transparent">
34
+ Transparent
35
+ </Badge>
36
+ </BadgeList>
37
+ }`,...K.parameters?.docs?.source}}},q.parameters={...q.parameters,docs:{...q.parameters?.docs,source:{originalSource:`{
38
+ render: () => <BadgeList>
39
+ <Badge size="xs">Extra Small</Badge>
40
+ <Badge size="sm">Small</Badge>
41
+ <Badge size="md">Medium</Badge>
42
+ <Badge size="lg">Large</Badge>
43
+ <Badge size="xl">Extra Large</Badge>
44
+ </BadgeList>
45
+ }`,...q.parameters?.docs?.source}}},J.parameters={...J.parameters,docs:{...J.parameters?.docs,source:{originalSource:`{
46
+ render: () => {
47
+ const [items, setItems] = useState(["Фильтр A", "Фильтр B", "Фильтр C"]);
48
+ return <BadgeList>
49
+ {items.map(item => <Badge key={item} tone="info" appearance="outline" onRemove={() => setItems(prev => prev.filter(v => v !== item))}>
50
+ {item}
51
+ </Badge>)}
52
+ </BadgeList>;
53
+ }
54
+ }`,...J.parameters?.docs?.source}}},Y=[`Basic`,`Tones`,`Appearances`,`Sizes`,`RemovableList`]})))()}export{q as a,J as i,B as n,G as o,W as r,X as s,K as t};
@@ -1,6 +1,6 @@
1
- import{i as e}from"./preload-helper-B45gAKPr.js";import{t}from"./iframe-BJGIOdSH.js";import{E as n,a as r,d as i,f as a,l as o,m as s,n as c,p as l,r as u,u as d}from"./blocks-ixiC6_NZ.js";import{t as f}from"./mdx-react-shim-CmoAsjhK.js";import{Basic as p,ComposableScheme as m,Variants as h,WithIcons as g,n as _,t as v}from"./Button.stories-wwep4c2p.js";function y(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(o,{of:v,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
2
- `,(0,x.jsx)(l,{children:`Button`}),`
3
- `,(0,x.jsx)(a,{children:`Базовая action-кнопка дизайн-системы для пользовательских действий, подтверждений и быстрых операций`}),`
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-DaN-XFub.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-BiaKjftm.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./Button.stories-wkiE0c_a.js";function y(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
2
+ `,(0,x.jsx)(u,{children:`Button`}),`
3
+ `,(0,x.jsx)(o,{children:`Базовая action-кнопка дизайн-системы для пользовательских действий, подтверждений и быстрых операций`}),`
4
4
  `,(0,x.jsxs)(t.p,{children:[(0,x.jsx)(t.code,{children:`Button`}),` используется как универсальная кнопка интерфейса: в формах, тулбарах, модальных окнах, карточках, таблицах и компактных icon-only сценариях.`]}),`
5
5
  `,(0,x.jsx)(t.p,{children:`Ключевые особенности компонента:`}),`
6
6
  `,(0,x.jsxs)(t.ul,{children:[`
@@ -12,19 +12,19 @@ import{i as e}from"./preload-helper-B45gAKPr.js";import{t}from"./iframe-BJGIOdSH
12
12
  `,(0,x.jsxs)(t.li,{children:[`всплывающая подсказка через `,(0,x.jsx)(t.code,{children:`title`}),`.`]}),`
13
13
  `]}),`
14
14
  `,(0,x.jsx)(t.h2,{id:`основной-сценарий`,children:`Основной сценарий`}),`
15
- `,(0,x.jsx)(d,{}),`
15
+ `,(0,x.jsx)(f,{}),`
16
16
  `,(0,x.jsx)(t.pre,{children:(0,x.jsx)(t.code,{className:`language-tsx`,children:`import { Button } from "@/shared/ui";
17
17
 
18
18
  export function Example() {
19
19
  return <Button>Сохранить</Button>;
20
20
  }
21
21
  `})}),`
22
- `,(0,x.jsx)(r,{of:p}),`
22
+ `,(0,x.jsx)(i,{of:v}),`
23
23
  `,(0,x.jsx)(t.h2,{id:`как-выбирать-схему-оформления`,children:`Как выбирать схему оформления`}),`
24
24
  `,(0,x.jsxs)(t.p,{children:[`Для большинства сценариев достаточно `,(0,x.jsx)(t.code,{children:`variant`}),`: это готовые, согласованные значения дизайн-системы.`]}),`
25
25
  `,(0,x.jsxs)(t.p,{children:[`Если нужна более гибкая настройка, можно передать `,(0,x.jsx)(t.code,{children:`tone`}),` и `,(0,x.jsx)(t.code,{children:`appearance`}),`. У них приоритет выше, чем у `,(0,x.jsx)(t.code,{children:`variant`}),`, поэтому они подходят для точной донастройки без создания нового варианта.`]}),`
26
26
  `,(0,x.jsx)(t.h3,{id:`готовые-варианты`,children:`Готовые варианты`}),`
27
- `,(0,x.jsx)(u,{of:h}),`
27
+ `,(0,x.jsx)(d,{of:m}),`
28
28
  `,(0,x.jsx)(t.pre,{children:(0,x.jsx)(t.code,{className:`language-tsx`,children:`import { Button } from "@/shared/ui";
29
29
 
30
30
  export function ActionVariants() {
@@ -41,7 +41,7 @@ export function ActionVariants() {
41
41
  }
42
42
  `})}),`
43
43
  `,(0,x.jsxs)(t.h3,{id:`составная-схема-через-tone-и-appearance`,children:[`Составная схема через `,(0,x.jsx)(t.code,{children:`tone`}),` и `,(0,x.jsx)(t.code,{children:`appearance`})]}),`
44
- `,(0,x.jsx)(u,{of:m}),`
44
+ `,(0,x.jsx)(d,{of:_}),`
45
45
  `,(0,x.jsx)(t.pre,{children:(0,x.jsx)(t.code,{className:`language-tsx`,children:`import { Button } from "@/shared/ui";
46
46
 
47
47
  export function CustomScheme() {
@@ -73,7 +73,7 @@ export function CustomScheme() {
73
73
  `,(0,x.jsx)(t.li,{children:`кнопка только с иконкой.`}),`
74
74
  `]}),`
75
75
  `,(0,x.jsxs)(t.p,{children:[`Если в кнопке есть только `,(0,x.jsx)(t.code,{children:`icon`}),`, обязательно нужно передать `,(0,x.jsx)(t.code,{children:`title`}),` или `,(0,x.jsx)(t.code,{children:`aria-label`}),`, чтобы управление было доступным для скринридеров. В текущей реализации `,(0,x.jsx)(t.code,{children:`title`}),` также используется как содержимое всплывающей подсказки.`]}),`
76
- `,(0,x.jsx)(u,{of:g}),`
76
+ `,(0,x.jsx)(d,{of:p}),`
77
77
  `,(0,x.jsx)(t.pre,{children:(0,x.jsx)(t.code,{className:`language-tsx`,children:`import { BellIcon, CheckIcon, DownloadIcon, PlusIcon } from "lucide-react";
78
78
 
79
79
  import { Button } from "@/shared/ui";
@@ -119,6 +119,6 @@ export function FormActions() {
119
119
  `,(0,x.jsxs)(t.li,{children:[(0,x.jsx)(t.code,{children:`disabled`}),` блокирует нажатие, но не должен заменять явное объяснение пользователю, почему действие недоступно.`]}),`
120
120
  `]}),`
121
121
  `,(0,x.jsx)(t.h2,{id:`api`,children:`API`}),`
122
- `,(0,x.jsx)(c,{of:v}),`
122
+ `,(0,x.jsx)(l,{of:h}),`
123
123
  `,(0,x.jsx)(t.h2,{id:`все-сторисы`,children:`Все сторисы`}),`
124
- `,(0,x.jsx)(i,{includePrimary:!1})]})}function b(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,x.jsx)(t,{...e,children:(0,x.jsx)(y,{...e})}):y(e)}var x;e((()=>{x=t(),f(),s(),_()}))();export{b as default};
124
+ `,(0,x.jsx)(a,{includePrimary:!1})]})}function b(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,x.jsx)(t,{...e,children:(0,x.jsx)(y,{...e})}):y(e)}var x;function S(){return(S=e((()=>{x=t(),r(),c(),g()})))()}S();export{b as default};
@@ -0,0 +1,12 @@
1
+ import{n as e,o as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-DaN-XFub.js";import{a as i,i as a}from"./utils-DUM89eIj.js";import{n as o,t as s}from"./FloatingPopover-D4h-c24R.js";import{n as c,t as l}from"./ui.module-DoMIk8Oc.js";import{i as u,n as d,r as f,t as p}from"./uiClasses-CO3Cdv1E.js";var m,h,g,_,v;function y(){return(y=e((()=>{m=`wLOHwj`,h=`lFsM-Y`,g=`LPob63`,_=`tsaGtv`,v={button:m,iconOnly:h,buttonInner:g,buttonIcon:_}})))()}var b,x,S;function C(){return(C=e((()=>{b=t(n(),1),a(),o(),l(),f(),y(),x=r(),S=(0,b.forwardRef)(function({children:e,disabled:t,className:n,icon:r,iconEnd:a,title:o,variant:l,tone:f,appearance:m,type:h=`button`,"aria-label":g,..._},y){let S=b.Children.count(e)>0,C=!!r&&!S,w=u({variant:l,tone:f,appearance:m,fallbackAppearance:f&&f!==`neutral`?`solid`:`outline`}),T=C?g??o:g,E=(0,x.jsx)(`button`,{..._,ref:y,type:h,disabled:t,"aria-label":T,className:i(c.uiElement,c.uiInputControl,v.button,d(w.tone),p(w.appearance),C?v.iconOnly:``,`textNoWrap`,n??``),children:(0,x.jsxs)(`span`,{className:v.buttonInner,children:[r&&!a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r}),S&&(0,x.jsx)(`span`,{className:`flexEllipsis`,children:e}),r&&a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r})]})});return o?(0,x.jsx)(s,{placement:`bottom`,tooltip:!0,content:(0,x.jsx)(x.Fragment,{children:o}),children:E}):E}),S.__docgenInfo={description:'Базовая кнопка дизайн-системы для пользовательских действий.\nПоддерживает состояния, tone + appearance, иконки и безопасный `type="button"` по умолчанию.',methods:[],displayName:`Button`,props:{variant:{required:!1,tsType:{name:`union`,raw:`| "transparent"
2
+ | "ghost"
3
+ | "neutral"
4
+ | "error"
5
+ | "warning"
6
+ | "success"
7
+ | "info"
8
+ | "neutralOutline"
9
+ | "errorOutline"
10
+ | "warningOutline"
11
+ | "successOutline"
12
+ | "infoOutline"`,elements:[{name:`literal`,value:`"transparent"`},{name:`literal`,value:`"ghost"`},{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`},{name:`literal`,value:`"neutralOutline"`},{name:`literal`,value:`"errorOutline"`},{name:`literal`,value:`"warningOutline"`},{name:`literal`,value:`"successOutline"`},{name:`literal`,value:`"infoOutline"`}]},description:``},tone:{required:!1,tsType:{name:`union`,raw:`"neutral" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``},appearance:{required:!1,tsType:{name:`union`,raw:`"solid" | "outline" | "ghost" | "transparent"`,elements:[{name:`literal`,value:`"solid"`},{name:`literal`,value:`"outline"`},{name:`literal`,value:`"ghost"`},{name:`literal`,value:`"transparent"`}]},description:``},icon:{required:!1,tsType:{name:`ReactReactNode`,raw:`React.ReactNode`},description:``},iconEnd:{required:!1,tsType:{name:`boolean`},description:``},type:{required:!1,tsType:{name:`union`,raw:`"button" | "submit" | "reset"`,elements:[{name:`literal`,value:`"button"`},{name:`literal`,value:`"submit"`},{name:`literal`,value:`"reset"`}]},description:`По умолчанию делаем безопасное поведение в формах.`,defaultValue:{value:`"button"`,computed:!1}}},composes:[`Omit`]}})))()}export{C as n,S as t};