@ryuzaki13/react-foundation-ui 3.9.0 → 3.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/dist/badge/index.js +1 -1
  2. package/dist/barcode-scanner/index.js +1 -1
  3. package/dist/base-table/index.js +1 -1
  4. package/dist/base-table/ui/BaseTable.d.ts +9 -1
  5. package/dist/base-table/ui/BaseTable.d.ts.map +1 -1
  6. package/dist/chunks/{TextEditorLexicalClient-BQH41FFT.js → TextEditorLexicalClient-Cj6yjCGm.js} +3 -3
  7. package/dist/chunks/{TextEditorLexicalClient-BQH41FFT.js.map → TextEditorLexicalClient-Cj6yjCGm.js.map} +1 -1
  8. package/dist/chunks/{base-table-9H5YuVvB.js → base-table-CoVXG2FT.js} +132 -114
  9. package/dist/chunks/base-table-CoVXG2FT.js.map +1 -0
  10. package/dist/chunks/{context-menu-BV8636Ou.js → context-menu-BlLesqpZ.js} +2 -2
  11. package/dist/chunks/{context-menu-BV8636Ou.js.map → context-menu-BlLesqpZ.js.map} +1 -1
  12. package/dist/chunks/flex-BhrQCH4I.js +401 -0
  13. package/dist/chunks/flex-BhrQCH4I.js.map +1 -0
  14. package/dist/chunks/grid-D6wPRCjx.js +394 -0
  15. package/dist/chunks/grid-D6wPRCjx.js.map +1 -0
  16. package/dist/chunks/{misc-BjdDK6mm.js → misc-Dcr24uDY.js} +2 -2
  17. package/dist/chunks/{misc-BjdDK6mm.js.map → misc-Dcr24uDY.js.map} +1 -1
  18. package/dist/chunks/{modal-CBGNsqrq.js → modal-DeABSKrb.js} +4 -4
  19. package/dist/chunks/{modal-CBGNsqrq.js.map → modal-DeABSKrb.js.map} +1 -1
  20. package/dist/chunks/{picker-DagDe9OH.js → picker-CWx7vPE8.js} +2 -2
  21. package/dist/chunks/{picker-DagDe9OH.js.map → picker-CWx7vPE8.js.map} +1 -1
  22. package/dist/chunks/responsiveLayout-D2mtCDdh.js +28 -0
  23. package/dist/chunks/responsiveLayout-D2mtCDdh.js.map +1 -0
  24. package/dist/chunks/{select-C-1U-ujV.js → select-CHBBo5fn.js} +2 -2
  25. package/dist/chunks/{select-C-1U-ujV.js.map → select-CHBBo5fn.js.map} +1 -1
  26. package/dist/chunks/table-Cm9NhT9K.js +154 -0
  27. package/dist/chunks/table-Cm9NhT9K.js.map +1 -0
  28. package/dist/context-menu/index.js +1 -1
  29. package/dist/disclosure/index.js +1 -1
  30. package/dist/errors/index.js +1 -1
  31. package/dist/expandable-action-panel/index.js +1 -1
  32. package/dist/flex/FlexContainer.d.ts +1 -1
  33. package/dist/flex/FlexContainer.d.ts.map +1 -1
  34. package/dist/flex/FlexItem.d.ts +1 -1
  35. package/dist/flex/FlexItem.d.ts.map +1 -1
  36. package/dist/flex/PredefinedFlex.d.ts +1 -1
  37. package/dist/flex/PredefinedFlex.d.ts.map +1 -1
  38. package/dist/flex/getFlexClasses.d.ts +5 -0
  39. package/dist/flex/getFlexClasses.d.ts.map +1 -0
  40. package/dist/flex/index.js +1 -1
  41. package/dist/grid/GridContainer.d.ts.map +1 -1
  42. package/dist/grid/GridItem.d.ts.map +1 -1
  43. package/dist/grid/getGridClasses.d.ts +12 -0
  44. package/dist/grid/getGridClasses.d.ts.map +1 -0
  45. package/dist/grid/index.js +1 -1
  46. package/dist/image/index.js +2 -2
  47. package/dist/layout-picker/index.js +1 -1
  48. package/dist/list/index.js +2 -2
  49. package/dist/listbox/index.js +1 -1
  50. package/dist/misc/index.js +1 -1
  51. package/dist/modal/index.js +1 -1
  52. package/dist/multi-select/index.js +1 -1
  53. package/dist/notifications/index.js +1 -1
  54. package/dist/picker/index.js +1 -1
  55. package/dist/preset-range-date-input/index.js +1 -1
  56. package/dist/preset-select/index.js +1 -1
  57. package/dist/responsive-layout/responsiveLayout.d.ts +17 -0
  58. package/dist/responsive-layout/responsiveLayout.d.ts.map +1 -0
  59. package/dist/select/index.js +1 -1
  60. package/dist/simple-table/index.js +1 -1
  61. package/dist/slider/index.js +1 -1
  62. package/dist/state-select/index.js +1 -1
  63. package/dist/styles.css +1 -1
  64. package/dist/table/Table.d.ts +10 -1
  65. package/dist/table/Table.d.ts.map +1 -1
  66. package/dist/table/index.js +1 -1
  67. package/dist/table-sorting/index.js +1 -1
  68. package/dist/tabs/index.js +1 -1
  69. package/dist/text-editor/index.js +2 -2
  70. package/dist/toolbar/index.js +2 -2
  71. package/dist/tree-select/index.js +1 -1
  72. package/dist/tree-table/index.js +1 -1
  73. package/package.json +1 -1
  74. package/storybook-static/assets/{Badge-CL58JilM.js → Badge-7nsS5Yyj.js} +1 -1
  75. package/storybook-static/assets/{Badge.stories-CXFTvV3D.js → Badge.stories-BzQKeDqC.js} +1 -1
  76. package/storybook-static/assets/{BadgeList-DLssobfd.js → BadgeList-WzFV9MB1.js} +1 -1
  77. package/storybook-static/assets/{BarcodeScannerDialog.stories-CpMywpKq.js → BarcodeScannerDialog.stories-Ci8Mf9WX.js} +1 -1
  78. package/storybook-static/assets/{Button-CSbLv1K7.js → Button-6F3OVyTc.js} +1 -1
  79. package/storybook-static/assets/{Button-DMAPWgMI.js → Button-DqsSng-I.js} +1 -1
  80. package/storybook-static/assets/{Button.stories-CU1kYMvA.js → Button.stories-PNc3lIYB.js} +1 -1
  81. package/storybook-static/assets/{CalendarView-DuCLo_x5.js → CalendarView-BT9X9tky.js} +1 -1
  82. package/storybook-static/assets/{CheckBox-BBPasWSk.js → CheckBox-BJhTyl1K.js} +1 -1
  83. package/storybook-static/assets/{CheckBox-Bfcdvr2o.js → CheckBox-BasxUZYS.js} +1 -1
  84. package/storybook-static/assets/{CheckBox.stories-sGH6EuU4.js → CheckBox.stories-DLRA5q3H.js} +1 -1
  85. package/storybook-static/assets/{Color-6AOWCN3U-5NJhf8m9.js → Color-6AOWCN3U-C4R02nIA.js} +1 -1
  86. package/storybook-static/assets/{ContextMenu-CxuYkXjJ.js → ContextMenu-BckwURZg.js} +1 -1
  87. package/storybook-static/assets/{ContextMenu-z6NKmD0I.js → ContextMenu-OOsbvmOa.js} +1 -1
  88. package/storybook-static/assets/{ContextMenu.stories-CI5IW_KX.js → ContextMenu.stories-BD-wMDNw.js} +1 -1
  89. package/storybook-static/assets/{DateInput-BkCbK0M5.js → DateInput-B5MxQUHL.js} +1 -1
  90. package/storybook-static/assets/{DateInput-A8NURpCX.js → DateInput-DT6btAWU.js} +1 -1
  91. package/storybook-static/assets/{DateInput.stories-DnzeyBpg.js → DateInput.stories-BK2brwe_.js} +1 -1
  92. package/storybook-static/assets/{DateRangePresetSelect-Bh7qMFTr.js → DateRangePresetSelect-Dplr79Cm.js} +1 -1
  93. package/storybook-static/assets/{DateRangePresetSelect-CGZkf8Ty.js → DateRangePresetSelect-gRdIuTx9.js} +1 -1
  94. package/storybook-static/assets/{DateRangePresetSelect.stories-Drm2FCnJ.js → DateRangePresetSelect.stories-BRksGdxw.js} +1 -1
  95. package/storybook-static/assets/{DeprecatedMultiSelect-BebYsPmQ.js → DeprecatedMultiSelect-1MSPac-V.js} +1 -1
  96. package/storybook-static/assets/{DeprecatedMultiSelect-8TWWhsLi.js → DeprecatedMultiSelect-BOxmEW2D.js} +1 -1
  97. package/storybook-static/assets/{DeprecatedMultiSelect.stories-7iL6YOgh.js → DeprecatedMultiSelect.stories-Ax0zv6Kb.js} +1 -1
  98. package/storybook-static/assets/{Detail-BOZkPwOI.js → Detail-_5TyqOha.js} +1 -1
  99. package/storybook-static/assets/{Detail.stories-RZALoKmD.js → Detail.stories-CJbeEBiY.js} +1 -1
  100. package/storybook-static/assets/{Dialog-CeukIYpx.js → Dialog-BodfEiIi.js} +1 -1
  101. package/storybook-static/assets/{Dialog-BsslYClj.js → Dialog-HBOYhMQq.js} +1 -1
  102. package/storybook-static/assets/{Dialog.stories-y7MpdGQr.js → Dialog.stories-Ds4F0ZoJ.js} +1 -1
  103. package/storybook-static/assets/{Disclosure-CiTnWx5y.js → Disclosure-BbvtIOyN.js} +1 -1
  104. package/storybook-static/assets/{Disclosure.stories-UWW9oheF.js → Disclosure.stories-CnSK79hZ.js} +1 -1
  105. package/storybook-static/assets/{DisclosureGroup-CT3BdQXr.js → DisclosureGroup-Dd0BeL4o.js} +1 -1
  106. package/storybook-static/assets/{DocsRenderer-JROSPFPF-x50rjjKP.js → DocsRenderer-JROSPFPF-BX-ThlFg.js} +1 -1
  107. package/storybook-static/assets/{DropZone-gWSeoAx6.js → DropZone-CCkHaYAD.js} +1 -1
  108. package/storybook-static/assets/{DropZone-DUn9vW2w.js → DropZone-DPqYieZH.js} +1 -1
  109. package/storybook-static/assets/{DropZone.stories-CmaVl9to.js → DropZone.stories-lfKkNIIl.js} +1 -1
  110. package/storybook-static/assets/{DropdownMenu-DkeS8gOF.js → DropdownMenu-QWp-lSol.js} +1 -1
  111. package/storybook-static/assets/{ExpandableActionPanel-DdqWZDe2.js → ExpandableActionPanel-DxPp3zYd.js} +1 -1
  112. package/storybook-static/assets/{ExpandableActionPanel.stories-CA-dpb07.js → ExpandableActionPanel.stories-BiklI55p.js} +1 -1
  113. package/storybook-static/assets/Flex-S4mwRnc2.js +81 -0
  114. package/storybook-static/assets/Flex.stories-DRBLrgrW.js +454 -0
  115. package/storybook-static/assets/FlexContainer-4Ap7vbIt.js +1 -0
  116. package/storybook-static/assets/{FlexItem-DsoW-br3.js → FlexItem-Dwqi7KeT.js} +2 -2
  117. package/storybook-static/assets/{FloatingPopover-7MpESGU4.js → FloatingPopover-D8FScEoc.js} +1 -1
  118. package/storybook-static/assets/FormattedTableCell-BKSpyxnu.js +15 -0
  119. package/storybook-static/assets/{Grid-eqZxtRIA.js → Grid-CJ5RLrgv.js} +2 -2
  120. package/storybook-static/assets/Grid-DIYjEdUA.js +84 -0
  121. package/storybook-static/assets/Grid.stories-Bl35lMkU.js +657 -0
  122. package/storybook-static/assets/{GridContainer-B9JaLUGE.js → GridContainer-B2iAnXeB.js} +2 -2
  123. package/storybook-static/assets/GridContainer-DgBuOs_1.css +1 -0
  124. package/storybook-static/assets/{ImageCropper.stories-W76XOOMv.js → ImageCropper.stories--E79MUTS.js} +1 -1
  125. package/storybook-static/assets/{ImageRenderer-DYg7BkPO.js → ImageRenderer-D0stahXz.js} +1 -1
  126. package/storybook-static/assets/{ImageRenderer.stories-rgJV0OBp.js → ImageRenderer.stories-C_Ir6A3m.js} +1 -1
  127. package/storybook-static/assets/{ImageView.stories-D9h6sg3j.js → ImageView.stories-DbY7pwWs.js} +1 -1
  128. package/storybook-static/assets/{ImageViewer.stories-Bd0WJOp1.js → ImageViewer.stories-D2jfTzCV.js} +2 -2
  129. package/storybook-static/assets/{ImageViewerRuntime-DOjvjbv0.js → ImageViewerRuntime-DlvGnNv4.js} +1 -1
  130. package/storybook-static/assets/{Input-7N70tL0u.js → Input-CzvWPW0I.js} +1 -1
  131. package/storybook-static/assets/{Input-BxrxwNyD.js → Input-av5ktymr.js} +1 -1
  132. package/storybook-static/assets/{Input.stories-Df1j802b.js → Input.stories-CvLnu270.js} +1 -1
  133. package/storybook-static/assets/{InputDateTime-UdemHZXV.js → InputDateTime-D5bQuB9a.js} +1 -1
  134. package/storybook-static/assets/{InputDateTime.stories-yRwAe5_5.js → InputDateTime.stories-BD9Pt7vB.js} +1 -1
  135. package/storybook-static/assets/{InputFile-5LpFR1Fq.js → InputFile-C3nj3qsi.js} +1 -1
  136. package/storybook-static/assets/{InputFile-DDhf7A_J.js → InputFile-ulrG6ECh.js} +1 -1
  137. package/storybook-static/assets/{InputFile.stories-BVDT-BAx.js → InputFile.stories-CEewSWb_.js} +1 -1
  138. package/storybook-static/assets/{InputFiles-CgM2BwNO.js → InputFiles-DZ1nUYOE.js} +1 -1
  139. package/storybook-static/assets/{InputFiles-D3CPIXiK.js → InputFiles-lF7Ys1hh.js} +1 -1
  140. package/storybook-static/assets/{InputFiles.stories-XMHBA9Fn.js → InputFiles.stories-CCptKLDn.js} +1 -1
  141. package/storybook-static/assets/{InputFilesList-DSivq9iT.js → InputFilesList-DTJkMHNI.js} +1 -1
  142. package/storybook-static/assets/{InputImage-CY0A9Xz-.js → InputImage-CIPZL6uS.js} +1 -1
  143. package/storybook-static/assets/{InputImage-BG_QyAh3.js → InputImage-lDHbW_ac.js} +1 -1
  144. package/storybook-static/assets/{InputImage.stories-DiGXytZU.js → InputImage.stories-CQ2BBGf-.js} +1 -1
  145. package/storybook-static/assets/{InteractiveComponents-Bf9KitNR.js → InteractiveComponents-DD7TZeA4.js} +1 -1
  146. package/storybook-static/assets/{InteractiveComponents.stories-TwALUGGN.js → InteractiveComponents.stories-Bbo3l8WO.js} +1 -1
  147. package/storybook-static/assets/{LayoutPicker-BLrNe8g_.js → LayoutPicker-A7VlDbc0.js} +1 -1
  148. package/storybook-static/assets/{LayoutPicker-MhA9N4WI.js → LayoutPicker-uw1knHzA.js} +1 -1
  149. package/storybook-static/assets/{LayoutPicker.stories-BCME5Ogr.js → LayoutPicker.stories-DDR6oiSN.js} +1 -1
  150. package/storybook-static/assets/{Listbox-B8F2xWvs.js → Listbox-CO1BjyFs.js} +1 -1
  151. package/storybook-static/assets/{Listbox-y_3VijHU.js → Listbox-CmkI7dm_.js} +1 -1
  152. package/storybook-static/assets/{Listbox.stories-mp0p0NpO.js → Listbox.stories-BIPmBbuG.js} +1 -1
  153. package/storybook-static/assets/{Modal-qIsW7BkG.js → Modal-C3JdXj6Q.js} +1 -1
  154. package/storybook-static/assets/{Modal-DgEV0vBs.js → Modal-IXMZUaaw.js} +1 -1
  155. package/storybook-static/assets/{Modal.stories-CQ-Hn4GK.js → Modal.stories-BD-UnVeM.js} +1 -1
  156. package/storybook-static/assets/{ModalManagerProvider-DEoq4q_O.js → ModalManagerProvider-zJVg8-dg.js} +1 -1
  157. package/storybook-static/assets/{MultiSelect-D-6XHQUG.js → MultiSelect-CGoyA8-m.js} +1 -1
  158. package/storybook-static/assets/{MultiSelect-PGooEkAK.js → MultiSelect-DZKjK53B.js} +1 -1
  159. package/storybook-static/assets/{MultiSelect.stories-B0JzMViN.js → MultiSelect.stories-D65mpYYt.js} +1 -1
  160. package/storybook-static/assets/{MultiSelectCore-B0VbnEBc.js → MultiSelectCore-ih1pgvuq.js} +1 -1
  161. package/storybook-static/assets/{NoData-DCuuvSoD.js → NoData-32gM9qt4.js} +1 -1
  162. package/storybook-static/assets/{NotificationsHost-CWqG91Yh.js → NotificationsHost-pkEhxgz2.js} +1 -1
  163. package/storybook-static/assets/{NotificationsHost.stories-CEp-AppV.js → NotificationsHost.stories-BqIayryx.js} +1 -1
  164. package/storybook-static/assets/{ODataMultiSelect-CwVneYzi.js → ODataMultiSelect-D42gAcHg.js} +1 -1
  165. package/storybook-static/assets/{ODataMultiSelect.stories-BRnVOZsK.js → ODataMultiSelect.stories-DfAkKAsG.js} +1 -1
  166. package/storybook-static/assets/{ODataSelect-DyKTFqk7.js → ODataSelect-DPOMWPKO.js} +1 -1
  167. package/storybook-static/assets/{ODataSelect.stories-B-3GaeU4.js → ODataSelect.stories-DHs3wp7E.js} +1 -1
  168. package/storybook-static/assets/{ODataTreeMultiSelect-16xNi9qI.js → ODataTreeMultiSelect-CC8yuaVP.js} +1 -1
  169. package/storybook-static/assets/{ODataTreeMultiSelect.stories-DI9tH2qD.js → ODataTreeMultiSelect.stories-BtwLdGK6.js} +1 -1
  170. package/storybook-static/assets/{ODataTreeSelect-Dk262plK.js → ODataTreeSelect-qcitpYxj.js} +1 -1
  171. package/storybook-static/assets/{ODataTreeSelect.stories-DfaL0dci.js → ODataTreeSelect.stories-1r_tkUVi.js} +1 -1
  172. package/storybook-static/assets/{OneStepScroller-DI8qlm5c.js → OneStepScroller-wz4Qujpx.js} +1 -1
  173. package/storybook-static/assets/{Option-CG3bU2cY.js → Option-Beom2xTg.js} +1 -1
  174. package/storybook-static/assets/{OptionButton-DF0E8aU5.js → OptionButton-D_ZCVbsd.js} +1 -1
  175. package/storybook-static/assets/{OptionContent-BZ3FiJQ4.js → OptionContent-FZ-u9L1s.js} +1 -1
  176. package/storybook-static/assets/{OptionContentContainer-CyI5IfqU.js → OptionContentContainer-HVNOgpjm.js} +1 -1
  177. package/storybook-static/assets/{PeriodSelect-uR-Xk4vQ.js → PeriodSelect-DbdeznMQ.js} +1 -1
  178. package/storybook-static/assets/{PeriodSelect-_gAbt3E6.js → PeriodSelect-qevVtoSU.js} +1 -1
  179. package/storybook-static/assets/{PeriodSelect.stories-D-Lp7QtA.js → PeriodSelect.stories-BLi_6rpY.js} +1 -1
  180. package/storybook-static/assets/{PickerField-CByAoAAO.js → PickerField-BHSRcQY6.js} +1 -1
  181. package/storybook-static/assets/{PickerTriggerActions-CYM-UvRz.js → PickerTriggerActions-Cxk3YQGF.js} +1 -1
  182. package/storybook-static/assets/{Popover-CdnsB1ss.js → Popover-BosMVXTI.js} +1 -1
  183. package/storybook-static/assets/{Popover-CRcVoLur.js → Popover-De2fvkIB.js} +1 -1
  184. package/storybook-static/assets/{Popover.stories-Dxdt7Jc5.js → Popover.stories-DM-Plj05.js} +1 -1
  185. package/storybook-static/assets/{PresetRangeDateInput-BmAGj8ye.js → PresetRangeDateInput-CCQuBkJj.js} +1 -1
  186. package/storybook-static/assets/{PresetRangeDateInput-BQkK3Nmd.js → PresetRangeDateInput-jersOEYO.js} +1 -1
  187. package/storybook-static/assets/{PresetRangeDateInput.stories-CUIwCB6T.js → PresetRangeDateInput.stories-DwqDWXX9.js} +1 -1
  188. package/storybook-static/assets/{PresetSelect-C7HG9CjN.js → PresetSelect-BhwHbWmS.js} +1 -1
  189. package/storybook-static/assets/{README-BmwSZfOQ.js → README-1UUrJXjZ.js} +1 -1
  190. package/storybook-static/assets/{README-zlaX5PMG.js → README-29WDFTDH.js} +1 -1
  191. package/storybook-static/assets/{README-D-urpNSn.js → README-33qTnj5l.js} +1 -1
  192. package/storybook-static/assets/{README-BbUo3mGT.js → README-B5eMX8_9.js} +1 -1
  193. package/storybook-static/assets/{README-DfRan6KR.js → README-B5rmNIab.js} +1 -1
  194. package/storybook-static/assets/{README-KCmlmH_Z.js → README-BAlXRtAz.js} +1 -1
  195. package/storybook-static/assets/{README-CNnGqdkH.js → README-BCEKAY_J.js} +1 -1
  196. package/storybook-static/assets/{README-DyKegKG_.js → README-BD5f1if4.js} +1 -1
  197. package/storybook-static/assets/{README-DMZYAdN0.js → README-BIvHy4kr.js} +1 -1
  198. package/storybook-static/assets/{README-Dhptn6UE.js → README-BK8k_Q4m.js} +1 -1
  199. package/storybook-static/assets/{README-CoENtXo_.js → README-BKLeD4y3.js} +1 -1
  200. package/storybook-static/assets/{README-C41zKsq6.js → README-BNsU3Cqx.js} +1 -1
  201. package/storybook-static/assets/{README-BL0-uTlP.js → README-BPSG9KrB.js} +1 -1
  202. package/storybook-static/assets/{README-BEYMpavt.js → README-BQDFmWGi.js} +1 -1
  203. package/storybook-static/assets/{README-BR8bdUjV.js → README-B_tg7QVI.js} +1 -1
  204. package/storybook-static/assets/{README-DxTRj-9a.js → README-BfRKdJtw.js} +1 -1
  205. package/storybook-static/assets/{README-ByIhL9zr.js → README-BoJXfTe6.js} +1 -1
  206. package/storybook-static/assets/{README-C5-oc7fP.js → README-By0zyJQ-.js} +1 -1
  207. package/storybook-static/assets/{README-De3j71sQ.js → README-BzVVPLXk.js} +1 -1
  208. package/storybook-static/assets/{README-BquP2lux.js → README-CHllxFPj.js} +1 -1
  209. package/storybook-static/assets/{README-CTBkJ27k.js → README-CJ6rsYUk.js} +1 -1
  210. package/storybook-static/assets/{README-DY7lgi4q.js → README-CJFgcV8C.js} +1 -1
  211. package/storybook-static/assets/{README-j-Czw7ww.js → README-CPZBUXWs.js} +1 -1
  212. package/storybook-static/assets/{README-DCWk-Vga.js → README-CioPc-xb.js} +1 -1
  213. package/storybook-static/assets/{README-CTGZXXVP.js → README-CmzO6bzh.js} +1 -1
  214. package/storybook-static/assets/{README-B0iHgO_3.js → README-Cpk-Tr_W.js} +1 -1
  215. package/storybook-static/assets/{README-DTMZk60G.js → README-CrhHHw0i.js} +1 -1
  216. package/storybook-static/assets/{README-DAH3lVWd.js → README-CvReVgGJ.js} +1 -1
  217. package/storybook-static/assets/{README-DQ1aeQ_i.js → README-CvzdarfH.js} +1 -1
  218. package/storybook-static/assets/{README-BUnl1FiN.js → README-Cz14JUTC.js} +1 -1
  219. package/storybook-static/assets/{README-DevTRU4A.js → README-D09okhy9.js} +1 -1
  220. package/storybook-static/assets/{README-DaaS2c7L.js → README-D5YLxtgR.js} +1 -1
  221. package/storybook-static/assets/{README-_8pxMMC7.js → README-DK5aZdOt.js} +1 -1
  222. package/storybook-static/assets/{README-VNB_Dj5F.js → README-DKI2c8YJ.js} +1 -1
  223. package/storybook-static/assets/{README-BAjs7T_d.js → README-DNeDK1_H.js} +1 -1
  224. package/storybook-static/assets/{README-DNrPuueH.js → README-DQl_3tX1.js} +1 -1
  225. package/storybook-static/assets/{README-B1GSwjas.js → README-DS63ZnOT.js} +1 -1
  226. package/storybook-static/assets/{README-Bdir2bPK.js → README-DT96eoyc.js} +1 -1
  227. package/storybook-static/assets/{README-n4utUGcX.js → README-D_d6frx1.js} +1 -1
  228. package/storybook-static/assets/{README-CpJmZHQJ.js → README-Dc2qBccm.js} +1 -1
  229. package/storybook-static/assets/{README-CtZBJdo2.js → README-DeHGaTaW.js} +1 -1
  230. package/storybook-static/assets/{README-B-ihyEBx.js → README-Df8F75dr.js} +1 -1
  231. package/storybook-static/assets/{README-C7NhXX-n.js → README-DmJq-c8n.js} +1 -1
  232. package/storybook-static/assets/{README-9DTI05kd.js → README-DzASMBMv.js} +1 -1
  233. package/storybook-static/assets/{README-CUghXL33.js → README-DzrrH56m.js} +1 -1
  234. package/storybook-static/assets/{README-xrMkjHIm.js → README-ECCgQcGo.js} +1 -1
  235. package/storybook-static/assets/{README-BurB0dhj.js → README-LWfExOhc.js} +1 -1
  236. package/storybook-static/assets/{README-CiJ5wkhQ.js → README-NHHRscRF.js} +1 -1
  237. package/storybook-static/assets/{README-CvP9yRMR.js → README-O9BJmE-H.js} +1 -1
  238. package/storybook-static/assets/{README-ByT9u_7g.js → README-Rk3Krdys.js} +1 -1
  239. package/storybook-static/assets/{README-CQlujiXR.js → README-bWB0c7pN.js} +1 -1
  240. package/storybook-static/assets/{README-C8jcwgeL.js → README-o4PUljT6.js} +1 -1
  241. package/storybook-static/assets/{README-CoQeAVdv.js → README-sPm51M3K.js} +1 -1
  242. package/storybook-static/assets/{RadioButton-CDIyYuS9.js → RadioButton-BZiBFXe1.js} +1 -1
  243. package/storybook-static/assets/{RadioButton-DV8K96H6.js → RadioButton-CBLdgMz4.js} +1 -1
  244. package/storybook-static/assets/{RadioButton.stories-CRNqKsyz.js → RadioButton.stories-BP5yM5qg.js} +1 -1
  245. package/storybook-static/assets/{RadioGroup-BnYFRvmn.js → RadioGroup-DYRfZVGC.js} +1 -1
  246. package/storybook-static/assets/{RadioGroup-CIIw962S.js → RadioGroup-epjQdSZn.js} +1 -1
  247. package/storybook-static/assets/{RadioGroup.stories-K4AidbLa.js → RadioGroup.stories-UOjXIk6v.js} +1 -1
  248. package/storybook-static/assets/ResponsiveLayoutPreview-BHBxtn2W.js +1 -0
  249. package/storybook-static/assets/ResponsiveLayoutPreview-CyXawjCA.css +1 -0
  250. package/storybook-static/assets/{Scrollable-BI1k9ogH.js → Scrollable-BBYov1Hn.js} +1 -1
  251. package/storybook-static/assets/{Scrollable-DAghtYuE.js → Scrollable-DKQa75cf.js} +1 -1
  252. package/storybook-static/assets/{Scrollable.stories-B6Doakiv.js → Scrollable.stories-BH1-i6nI.js} +1 -1
  253. package/storybook-static/assets/{Select-BNHTGJqG.js → Select-DU6Eh0Lt.js} +1 -1
  254. package/storybook-static/assets/{Select-BlnKV8rc.js → Select-DYOCTPiv.js} +1 -1
  255. package/storybook-static/assets/{Select.stories-DZPAoL4J.js → Select.stories-BF3svbAH.js} +1 -1
  256. package/storybook-static/assets/{Separator-CiETy9yM.js → Separator-CxviJxG5.js} +1 -1
  257. package/storybook-static/assets/{Separator-BCUzEQRV.js → Separator-_gvt1sqm.js} +1 -1
  258. package/storybook-static/assets/{Separator.stories-DTzurpM_.js → Separator.stories-DN6hlZl5.js} +1 -1
  259. package/storybook-static/assets/{SerializableSelect-CnQurr7F.js → SerializableSelect-BVTOrYLs.js} +1 -1
  260. package/storybook-static/assets/{SerializableSelect.stories-qJaV_fjJ.js → SerializableSelect.stories-pcWq603M.js} +1 -1
  261. package/storybook-static/assets/{ShimmerText-I292TqXa.js → ShimmerText-BDDa_Wf7.js} +1 -1
  262. package/storybook-static/assets/{ShimmerText.stories-AKqXqp1k.js → ShimmerText.stories-DdZPIKwl.js} +1 -1
  263. package/storybook-static/assets/{SingleDateTimeInput-DSn0vaW-.js → SingleDateTimeInput-q-eu2xUU.js} +1 -1
  264. package/storybook-static/assets/{SingleDateTimeInput-BrNi93tH.js → SingleDateTimeInput-sGTkT8ZA.js} +1 -1
  265. package/storybook-static/assets/{SingleDateTimeInput.stories-C910kkYc.js → SingleDateTimeInput.stories-X7CMAFsq.js} +1 -1
  266. package/storybook-static/assets/{Slider-DO460-pY.js → Slider-CaKY8LIJ.js} +1 -1
  267. package/storybook-static/assets/{Slider-CXA5Zwku.js → Slider-CqNWljkT.js} +1 -1
  268. package/storybook-static/assets/{Slider.stories-B874XxeK.js → Slider.stories-CMxutCGM.js} +1 -1
  269. package/storybook-static/assets/{SliderInput-DTidinPI.js → SliderInput-HUUN5_IF.js} +1 -1
  270. package/storybook-static/assets/{SliderInput-DsV8o7Yy.js → SliderInput-scYwk-4g.js} +1 -1
  271. package/storybook-static/assets/{SliderInput.stories-CDWNO90y.js → SliderInput.stories-CDhgeql1.js} +1 -1
  272. package/storybook-static/assets/{Sortable-CML34YIF.js → Sortable-CaysnUNW.js} +1 -1
  273. package/storybook-static/assets/{Sortable.stories-C-_fvnHM.js → Sortable.stories-C4gHc5ka.js} +1 -1
  274. package/storybook-static/assets/{Splitter-BcuA2qce.js → Splitter-6cU1s7Qr.js} +1 -1
  275. package/storybook-static/assets/{Splitter.stories-CA0-L_Ja.js → Splitter.stories-CA9A-CZ-.js} +1 -1
  276. package/storybook-static/assets/{StateSelect-B23bb_PO.js → StateSelect-BAqjdi4g.js} +1 -1
  277. package/storybook-static/assets/{StateSelect--FDEb4-v.js → StateSelect-OHl6KWge.js} +1 -1
  278. package/storybook-static/assets/{StateSelect.stories-CEVPThtC.js → StateSelect.stories-xX3ujKGO.js} +1 -1
  279. package/storybook-static/assets/{StatusIndicator-BbTCS7Ku.js → StatusIndicator-C_7dWY2t.js} +1 -1
  280. package/storybook-static/assets/{StatusIndicator.stories-BIps_Ecm.js → StatusIndicator.stories-BRlVzKf7.js} +1 -1
  281. package/storybook-static/assets/{StringToggle.stories-vhOfzslq.js → StringToggle.stories-DFPLwtHW.js} +1 -1
  282. package/storybook-static/assets/{Switch-DibS4nSc.js → Switch-CrlrIm3t.js} +1 -1
  283. package/storybook-static/assets/{Switch-jJgwtWFK.js → Switch-DHcMczAC.js} +1 -1
  284. package/storybook-static/assets/{Switch.stories-Cvky3KQz.js → Switch.stories-LhTPX_R-.js} +1 -1
  285. package/storybook-static/assets/Table-Ct8iqJEY.js +219 -0
  286. package/storybook-static/assets/Table.stories-DO30v6VO.js +184 -0
  287. package/storybook-static/assets/{TableEditor.stories-Be9nCkds.js → TableEditor.stories-Qtqr_l4g.js} +1 -1
  288. package/storybook-static/assets/{Tabs-CTL4MnkZ.js → Tabs-CC0IIQwl.js} +1 -1
  289. package/storybook-static/assets/{Tabs.stories-CIVbz7kW.js → Tabs.stories-Bo_Y-dq8.js} +1 -1
  290. package/storybook-static/assets/{TabsBox-C9g1p4du.js → TabsBox-BMNvHsCH.js} +1 -1
  291. package/storybook-static/assets/{TagInput-DuJLeiyT.js → TagInput-BLwbzCit.js} +1 -1
  292. package/storybook-static/assets/{TagInput.stories-BLVFWr-T.js → TagInput.stories-DNcD4tn4.js} +1 -1
  293. package/storybook-static/assets/{Text-Cr_TUUgL.js → Text-Bih-aO3C.js} +1 -1
  294. package/storybook-static/assets/{Textarea-DGaanGLG.js → Textarea-D3os1biP.js} +1 -1
  295. package/storybook-static/assets/{Textarea-BImI6Q6v.js → Textarea-DCnLF4aj.js} +1 -1
  296. package/storybook-static/assets/{Textarea.stories-DvQ2dDNh.js → Textarea.stories-CIFzZQ5Z.js} +1 -1
  297. package/storybook-static/assets/{TimePanel-Cg2G5Hab.js → TimePanel-BcVGesht.js} +1 -1
  298. package/storybook-static/assets/{TimePanel.stories-qy5mb3YN.js → TimePanel.stories-C6_xVdCq.js} +1 -1
  299. package/storybook-static/assets/{Toggle-Dj8Ic_Ak.js → Toggle-BD0YAuO2.js} +1 -1
  300. package/storybook-static/assets/{Toggle-CroC7YOK.js → Toggle-CtABgcO5.js} +1 -1
  301. package/storybook-static/assets/{Toggle.stories-CmyyubM8.js → Toggle.stories-DnTnFcGB.js} +1 -1
  302. package/storybook-static/assets/{TreeMultiSelect-BHNmPW50.js → TreeMultiSelect-Bp_Akwgc.js} +1 -1
  303. package/storybook-static/assets/{TreeMultiSelect-DBQYLjnA.js → TreeMultiSelect-DHk_QP2h.js} +1 -1
  304. package/storybook-static/assets/{TreeMultiSelect.stories-BNsE1zgF.js → TreeMultiSelect.stories-CBVQbR1c.js} +1 -1
  305. package/storybook-static/assets/{TreePickerBase-ZEBy3EVT.js → TreePickerBase-BhWXyIoO.js} +1 -1
  306. package/storybook-static/assets/{TreeSelect-T7G2pkyK.js → TreeSelect-DleoF0hJ.js} +1 -1
  307. package/storybook-static/assets/{TreeSelect-aiPeW2uJ.js → TreeSelect-HNbghKYG.js} +1 -1
  308. package/storybook-static/assets/{TreeSelect.stories-E6ObkYJe.js → TreeSelect.stories-BigcPfEn.js} +1 -1
  309. package/storybook-static/assets/{TreeTable-C0ORe5Pe.js → TreeTable-BNkuyFKP.js} +1 -1
  310. package/storybook-static/assets/{TreeTable.stories-PtGT_1X5.js → TreeTable.stories-Bdx3y7Yb.js} +1 -1
  311. package/storybook-static/assets/{array-D-_yMMUK-DnJ_b27D.js → array-D-_yMMUK-BBmW5vUr.js} +1 -1
  312. package/storybook-static/assets/{blocks-DR4JL0hD.js → blocks-DGivDYe5.js} +3 -3
  313. package/storybook-static/assets/{check-PtABqMc1.js → check-DRMDOowi.js} +1 -1
  314. package/storybook-static/assets/{chevron-down-BaujB0G_.js → chevron-down-D0ohA4RZ.js} +1 -1
  315. package/storybook-static/assets/{chevron-left-C1SZ4PrE.js → chevron-left-CLqpYqDQ.js} +1 -1
  316. package/storybook-static/assets/{chevron-right-CfCjHN8b.js → chevron-right-CXryGzSx.js} +1 -1
  317. package/storybook-static/assets/{chunk-W22LQPXL-Cis7lFT9.js → chunk-W22LQPXL-CxLeSIMq.js} +1 -1
  318. package/storybook-static/assets/{circle-alert-Mymt-6wl.js → circle-alert-l6NwXGUY.js} +1 -1
  319. package/storybook-static/assets/{circle-check-DzqMvzJX.js → circle-check-B-r716dD.js} +1 -1
  320. package/storybook-static/assets/{components-Do91qDh3.js → components-Vmrwp1qC.js} +3 -3
  321. package/storybook-static/assets/{contextMenu-8NKKgKoy.js → contextMenu-Br4n839h.js} +1 -1
  322. package/storybook-static/assets/{download-Cn6H3Bnv.js → download-DqFSGBvN.js} +1 -1
  323. package/storybook-static/assets/{floating-ui.react-BFqa49jG.js → floating-ui.react-B-qFeMZZ.js} +1 -1
  324. package/storybook-static/assets/{formatMultiSelectOptionCount-xGq1uM2H.js → formatMultiSelectOptionCount-BxXwE0wd.js} +1 -1
  325. package/storybook-static/assets/{formatters-DVE1YVNQ-YIdRxgw-.js → formatters-DVE1YVNQ-CJCkXjuI.js} +1 -1
  326. package/storybook-static/assets/{foundationApi-CChPwNx-.js → foundationApi-DxO3oR-c.js} +1 -1
  327. package/storybook-static/assets/{foundationLib-ClEyfTpa.js → foundationLib-CTFFCQvn.js} +1 -1
  328. package/storybook-static/assets/getFlexClasses-BBvI2V8h.css +1 -0
  329. package/storybook-static/assets/getFlexClasses-DOf6NlyJ.js +1 -0
  330. package/storybook-static/assets/{hooks-DUKyfcb_.js → hooks-CAgVZJ-F.js} +1 -1
  331. package/storybook-static/assets/{iframe-1Nw_zWMi.js → iframe-E950Ehp0.js} +4 -4
  332. package/storybook-static/assets/iframe-dKozSQh6.js +1 -0
  333. package/storybook-static/assets/{info-DMI56qGy.js → info-Dp6XZGwP.js} +1 -1
  334. package/storybook-static/assets/{odata-D9M3xPIL.js → odata-DuJbgix6.js} +1 -1
  335. package/storybook-static/assets/{odataStoryFixtures-eHJgW7OK.js → odataStoryFixtures-CDArjyM7.js} +1 -1
  336. package/storybook-static/assets/{react-DidV4ORc.js → react-CGpO0FqR.js} +1 -1
  337. package/storybook-static/assets/{refresh-cw-B1ChlhvT.js → refresh-cw-dMgbnEda.js} +1 -1
  338. package/storybook-static/assets/responsiveLayout-B9XAp69M.js +1 -0
  339. package/storybook-static/assets/{settings-2-BxwqnB9r.js → settings-2-CmW1dpao.js} +1 -1
  340. package/storybook-static/assets/{sortable-DMBM69Jm.js → sortable-D7TAXZBK.js} +1 -1
  341. package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-BJZNAUo-.js → syntaxhighlighter-QEQV7K2Y-ok7zY4QK.js} +1 -1
  342. package/storybook-static/assets/{trash-2-B768_PZU.js → trash-2-5v1tbQ2V.js} +1 -1
  343. package/storybook-static/assets/{triangle-alert-B8H-k2Bq.js → triangle-alert-CVLPpc5j.js} +1 -1
  344. package/storybook-static/assets/{useODataSelectBase-BKAZcf4R.js → useODataSelectBase-Bkht6gRs.js} +1 -1
  345. package/storybook-static/assets/{useODataTreeData-Bxlcmpg8.js → useODataTreeData-DTWPuC9Y.js} +1 -1
  346. package/storybook-static/assets/{usePickerDefaultFilter-ien2ZY7g.js → usePickerDefaultFilter-Djn1liy6.js} +1 -1
  347. package/storybook-static/assets/{usePickerQuery-DJj2HmX9.js → usePickerQuery-BmoBHlzm.js} +1 -1
  348. package/storybook-static/assets/{usePickerTriggerController-CiD33ccS.js → usePickerTriggerController-Dvt7LsFZ.js} +1 -1
  349. package/storybook-static/assets/{x-Dt9SO3SL.js → x-DZpfbNy0.js} +1 -1
  350. package/storybook-static/iframe.html +2 -2
  351. package/storybook-static/index.json +1 -1
  352. package/storybook-static/project.json +1 -1
  353. package/dist/chunks/base-table-9H5YuVvB.js.map +0 -1
  354. package/dist/chunks/flex-D86M_h-0.js +0 -222
  355. package/dist/chunks/flex-D86M_h-0.js.map +0 -1
  356. package/dist/chunks/grid-CFuzBigM.js +0 -186
  357. package/dist/chunks/grid-CFuzBigM.js.map +0 -1
  358. package/dist/chunks/table-BRC1OTyE.js +0 -141
  359. package/dist/chunks/table-BRC1OTyE.js.map +0 -1
  360. package/dist/flex/useFlexClasses.d.ts +0 -8
  361. package/dist/flex/useFlexClasses.d.ts.map +0 -1
  362. package/dist/grid/useGridClasses.d.ts +0 -10
  363. package/dist/grid/useGridClasses.d.ts.map +0 -1
  364. package/storybook-static/assets/Flex-DpQpF63N.js +0 -61
  365. package/storybook-static/assets/Flex.stories-DtlKiJno.js +0 -300
  366. package/storybook-static/assets/FlexContainer-C1d63I55.js +0 -1
  367. package/storybook-static/assets/FormattedTableCell-B4RRbSFK.js +0 -15
  368. package/storybook-static/assets/Grid-DsCUaz46.js +0 -61
  369. package/storybook-static/assets/Grid.stories-DAGg0GWi.js +0 -495
  370. package/storybook-static/assets/GridContainer-K9R_IHaw.css +0 -1
  371. package/storybook-static/assets/Table-DcNGLEI6.js +0 -197
  372. package/storybook-static/assets/Table.stories-DbEzudxD.js +0 -178
  373. package/storybook-static/assets/iframe-BgBwFMGW.js +0 -1
  374. package/storybook-static/assets/media-D9cE2tzi.js +0 -1
  375. package/storybook-static/assets/useFlexClasses-IXK2se1Y.css +0 -1
  376. package/storybook-static/assets/useFlexClasses-SgVG37Bb.js +0 -1
@@ -0,0 +1,219 @@
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-E950Ehp0.js";import{i as n,r}from"./react-Bl2r1tuC.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-DGivDYe5.js";import{_ as p,a as m,c as h,d as g,f as _,g as v,h as y,i as b,l as x,m as S,n as C,o as w,p as T,r as E,s as D,t as O,u as k,v as A}from"./Table.stories-DO30v6VO.js";function j(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(s,{of:D,parameters:{docs:{toc:!0}}}),`
2
+ `,(0,N.jsx)(u,{children:`Table`}),`
3
+ `,(0,N.jsxs)(o,{children:[`Плоская таблица как React-альтернатива `,(0,N.jsx)(t.code,{children:`sap.m.Table`})]}),`
4
+ `,(0,N.jsxs)(t.p,{children:[(0,N.jsx)(t.code,{children:`Table`}),` предназначен для плоских данных и по поведению осознанно сближен с `,(0,N.jsx)(t.code,{children:`TreeTable`}),`.
5
+ Оба компонента используют общий табличный каркас, поэтому здесь совпадают states загрузки, визуальная структура, обработка выбора строк и клавиатурная активация.
6
+ `,(0,N.jsx)(t.code,{children:`Table`}),` также поддерживает декларативное форматирование через `,(0,N.jsx)(t.code,{children:`meta.formatting`}),`, formulas, безопасное pipeline-formatting и optional OData adapter.`]}),`
7
+ `,(0,N.jsxs)(t.p,{children:[`Для перестановки строк передайте `,(0,N.jsx)(t.code,{children:`rowReordering`}),` и разместите `,(0,N.jsx)(t.code,{children:`Sortable.DragHandle`}),` в отдельной колонке. `,(0,N.jsx)(t.code,{children:`Table`}),` сохраняет единые стили строк и подключает pointer/keyboard DnD, а потребитель владеет обновлением порядка данных.`]}),`
8
+ `,(0,N.jsx)(t.pre,{children:(0,N.jsx)(t.code,{className:`language-tsx`,children:`import { Sortable } from "@ryuzaki13/react-foundation-ui/sortable";
9
+ import { Table } from "@ryuzaki13/react-foundation-ui/table";
10
+
11
+ const columns = [
12
+ {
13
+ id: "reorder",
14
+ header: "Порядок",
15
+ cell: ({ row }) => <Sortable.DragHandle as="button" title={\`Переместить \${row.original.name}\`} />
16
+ },
17
+ { id: "name", accessorKey: "name", header: "Название" }
18
+ ];
19
+
20
+ <Table
21
+ data={rows}
22
+ columns={columns}
23
+ getRowId={(row) => row.id}
24
+ rowReordering={{ onReorder: setRows }}
25
+ />;
26
+ `})}),`
27
+ `,(0,N.jsx)(t.h2,{id:`основной-сценарий`,children:`Основной сценарий`}),`
28
+ `,(0,N.jsx)(f,{}),`
29
+ `,(0,N.jsx)(i,{of:O}),`
30
+ `,(0,N.jsx)(t.pre,{children:(0,N.jsx)(t.code,{className:`language-tsx`,children:`import { Table, type TableColumnDef } from "@ryuzaki13/react-foundation-ui";
31
+
32
+ interface DealRow {
33
+ id: string;
34
+ number: string;
35
+ client: string;
36
+ amount: string;
37
+ }
38
+
39
+ const columns: TableColumnDef<DealRow>[] = [
40
+ {
41
+ id: "number",
42
+ accessorKey: "number",
43
+ header: "Номер",
44
+ meta: { width: "9em" }
45
+ },
46
+ {
47
+ id: "client",
48
+ accessorKey: "client",
49
+ header: "Клиент",
50
+ meta: { width: "14em" }
51
+ },
52
+ {
53
+ id: "amount",
54
+ accessorKey: "amount",
55
+ header: "Сумма",
56
+ meta: { width: "10em", align: "right" }
57
+ }
58
+ ];
59
+
60
+ export function Example({ rows }: { rows: DealRow[] }) {
61
+ return <Table data={rows} columns={columns} getRowId={(row) => row.id} selectionMode="single" height="20em" />;
62
+ }
63
+ `})}),`
64
+ `,(0,N.jsx)(t.h2,{id:`форматирование-ячеек`,children:`Форматирование ячеек`}),`
65
+ `,(0,N.jsxs)(t.p,{children:[(0,N.jsx)(t.code,{children:`meta.formatting`}),` добавляет к колонке декларативный runtime-контракт:`]}),`
66
+ `,(0,N.jsxs)(t.ul,{children:[`
67
+ `,(0,N.jsxs)(t.li,{children:[`typed formatting по `,(0,N.jsx)(t.code,{children:`role/type`}),`;`]}),`
68
+ `,(0,N.jsx)(t.li,{children:`formula-based вычисление значения;`}),`
69
+ `,(0,N.jsxs)(t.li,{children:[`pipeline display-formatting (`,(0,N.jsx)(t.code,{children:`normalizeLeadingZeros`}),`, `,(0,N.jsx)(t.code,{children:`resolveValueState`}),`, `,(0,N.jsx)(t.code,{children:`typedValueFormat`}),`);`]}),`
70
+ `,(0,N.jsxs)(t.li,{children:[(0,N.jsx)(t.code,{children:`emptyWhenZero`}),` для скрытия нулевых значений;`]}),`
71
+ `,(0,N.jsxs)(t.li,{children:[(0,N.jsx)(t.code,{children:`overflowTooltip`}),` для длинного текста.`]}),`
72
+ `]}),`
73
+ `,(0,N.jsx)(t.p,{children:`Важно:`}),`
74
+ `,(0,N.jsxs)(t.ul,{children:[`
75
+ `,(0,N.jsxs)(t.li,{children:[(0,N.jsx)(t.code,{children:`meta.formatting`}),` применяется только если у колонки нет кастомного `,(0,N.jsx)(t.code,{children:`cell`}),`;`]}),`
76
+ `,(0,N.jsx)(t.li,{children:`formulas и pipeline компилируются один раз на снимок колонок;`}),`
77
+ `,(0,N.jsxs)(t.li,{children:[`ошибки formula/pipeline не роняют таблицу и не подставляют универсальный `,(0,N.jsx)(t.code,{children:`0`}),`;`]}),`
78
+ `,(0,N.jsxs)(t.li,{children:[`OData adapter остаётся внешней прослойкой, а не частью `,(0,N.jsx)(t.code,{children:`Table`}),`.`]}),`
79
+ `]}),`
80
+ `,(0,N.jsx)(t.pre,{children:(0,N.jsx)(t.code,{className:`language-tsx`,children:`const columns: TableColumnDef<Row>[] = [
81
+ {
82
+ id: "amount",
83
+ accessorKey: "amount",
84
+ header: "Сумма",
85
+ meta: {
86
+ align: "right",
87
+ formatting: {
88
+ role: "measure",
89
+ type: "decimal",
90
+ emptyWhenZero: true
91
+ }
92
+ }
93
+ }
94
+ ];
95
+ `})}),`
96
+ `,(0,N.jsxs)(t.p,{children:[`Для OData-сценариев можно не прописывать `,(0,N.jsx)(t.code,{children:`role/type`}),` вручную, а обогатить колонки через adapter:`]}),`
97
+ `,(0,N.jsx)(t.pre,{children:(0,N.jsx)(t.code,{className:`language-tsx`,children:`import { enrichTableColumnsWithODataFormatting } from "@ryuzaki13/react-foundation-lib/table";
98
+
99
+ const columns = enrichTableColumnsWithODataFormatting(manualColumns, metadata.columns);
100
+ `})}),`
101
+ `,(0,N.jsx)(t.h2,{id:`слияние-дубликатов`,children:`Слияние дубликатов`}),`
102
+ `,(0,N.jsxs)(t.p,{children:[(0,N.jsx)(t.code,{children:`meta.mergeDuplicates`}),` включает display-only слияние подряд идущих одинаковых raw-значений без изменения структуры строк.`]}),`
103
+ `,(0,N.jsx)(t.p,{children:`Важно:`}),`
104
+ `,(0,N.jsxs)(t.ul,{children:[`
105
+ `,(0,N.jsxs)(t.li,{children:[`сравнение идёт по `,(0,N.jsx)(t.code,{children:`cell.getValue()`}),`, а не по formatted display;`]}),`
106
+ `,(0,N.jsx)(t.li,{children:`объединяются только подряд идущие строки;`}),`
107
+ `,(0,N.jsxs)(t.li,{children:[(0,N.jsx)(t.code,{children:`null`}),`, `,(0,N.jsx)(t.code,{children:`undefined`}),` и пустая строка `,(0,N.jsx)(t.code,{children:`""`}),` не объединяются;`]}),`
108
+ `,(0,N.jsx)(t.li,{children:`повторяющееся значение остаётся только в первой строке группы, а ниже рендерятся пустые ячейки;`}),`
109
+ `,(0,N.jsx)(t.li,{children:`если сервер не отсортировал данные так, чтобы дубликаты шли подряд, слияния не будет.`}),`
110
+ `]}),`
111
+ `,(0,N.jsx)(t.pre,{children:(0,N.jsx)(t.code,{className:`language-tsx`,children:`const columns: TableColumnDef<Row>[] = [
112
+ {
113
+ id: "division",
114
+ accessorKey: "division",
115
+ header: "Дивизион",
116
+ meta: {
117
+ mergeDuplicates: true
118
+ }
119
+ }
120
+ ];
121
+ `})}),`
122
+ `,(0,N.jsxs)(t.h2,{id:`хук-useodatatablecolumns`,children:[`Хук `,(0,N.jsx)(t.code,{children:`useODataTableColumns`})]}),`
123
+ `,(0,N.jsxs)(t.p,{children:[`Наиболее частый кейс - работать не с pure-helper напрямую, а с hook-слоем `,(0,N.jsx)(t.code,{children:`useODataTableColumns(...)`}),`.`]}),`
124
+ `,(0,N.jsxs)(t.p,{children:[(0,N.jsx)(t.code,{children:`build`}),` стоит выбирать, когда колонки можно полностью собрать из `,(0,N.jsx)(t.code,{children:`metadata.columns`}),`:`]}),`
125
+ `,(0,N.jsx)(t.pre,{children:(0,N.jsx)(t.code,{className:`language-tsx`,children:`import { useODataTableColumns } from "@ryuzaki13/react-foundation-api/odata";
126
+ import { Table } from "@ryuzaki13/react-foundation-ui";
127
+
128
+ function DealsTable({ rows }: { rows: DealRow[] }) {
129
+ const { columns, metadata, isLoading } = useODataTableColumns<DealRow>({
130
+ service: "ZSD_SALES_SRV",
131
+ entity: "DealSet",
132
+ mode: "build"
133
+ });
134
+
135
+ return (
136
+ <Table
137
+ title={metadata?.title ?? "Сделки"}
138
+ data={rows}
139
+ columns={columns}
140
+ isLoading={isLoading}
141
+ getRowId={(row) => row.id}
142
+ selectionMode="single"
143
+ />
144
+ );
145
+ }
146
+ `})}),`
147
+ `,(0,N.jsxs)(t.p,{children:[(0,N.jsx)(t.code,{children:`enrich`}),` подходит, когда колонки уже описаны вручную и нужно только дозаполнить `,(0,N.jsx)(t.code,{children:`meta.formatting.role/type`}),`:`]}),`
148
+ `,(0,N.jsx)(t.pre,{children:(0,N.jsx)(t.code,{className:`language-tsx`,children:`import { useODataTableColumns } from "@ryuzaki13/react-foundation-api/odata";
149
+ import { Table } from "@ryuzaki13/react-foundation-ui";
150
+
151
+ const manualColumns: TableColumnDef<DealRow>[] = [
152
+ { id: "product", accessorKey: "product", header: "Позиция" },
153
+ { id: "createdAt", accessorKey: "createdAt", header: "Создано" },
154
+ { id: "totalAmount", accessorKey: "totalAmount", header: "Итог", meta: { align: "right" } }
155
+ ];
156
+
157
+ function DealsTable({ rows }: { rows: DealRow[] }) {
158
+ const { columns, isLoading } = useODataTableColumns<DealRow>({
159
+ service: "ZSD_SALES_SRV",
160
+ entity: "DealSet",
161
+ mode: "enrich",
162
+ columns: manualColumns
163
+ });
164
+
165
+ return <Table data={rows} columns={columns} isLoading={isLoading} getRowId={(row) => row.id} selectionMode="single" />;
166
+ }
167
+ `})}),`
168
+ `,(0,N.jsx)(t.p,{children:`Практическая семантика хука:`}),`
169
+ `,(0,N.jsxs)(t.ul,{children:[`
170
+ `,(0,N.jsxs)(t.li,{children:[(0,N.jsx)(t.code,{children:`columns`}),` уже готовы для прямой передачи в `,(0,N.jsx)(t.code,{children:`Table`}),`;`]}),`
171
+ `,(0,N.jsxs)(t.li,{children:[(0,N.jsx)(t.code,{children:`metadata`}),` можно использовать для заголовка, пустых состояний или дополнительной UI-подписи;`]}),`
172
+ `,(0,N.jsxs)(t.li,{children:[(0,N.jsx)(t.code,{children:`isLoading`}),` нужно прокидывать в `,(0,N.jsx)(t.code,{children:`Table`}),`, чтобы сохранить единое табличное состояние загрузки;`]}),`
173
+ `,(0,N.jsxs)(t.li,{children:[`сам `,(0,N.jsx)(t.code,{children:`Table`}),` остаётся OData-независимым и получает только готовые `,(0,N.jsx)(t.code,{children:`columns`}),`.`]}),`
174
+ `]}),`
175
+ `,(0,N.jsx)(t.h2,{id:`что-важно-знать`,children:`Что важно знать`}),`
176
+ `,(0,N.jsxs)(t.ul,{children:[`
177
+ `,(0,N.jsx)(t.li,{children:`Компонент принимает именно плоский массив строк и не содержит древовидной логики.`}),`
178
+ `,(0,N.jsxs)(t.li,{children:[`Поведение `,(0,N.jsx)(t.code,{children:`selectionMode`}),` идентично `,(0,N.jsx)(t.code,{children:`TreeTable`}),`: `,(0,N.jsx)(t.code,{children:`single`}),` не снимает выбор повторным кликом по уже выбранной строке.`]}),`
179
+ `,(0,N.jsxs)(t.li,{children:[(0,N.jsx)(t.code,{children:`height`}),` и ширины колонок можно задавать строками в `,(0,N.jsx)(t.code,{children:`em`}),`, `,(0,N.jsx)(t.code,{children:`rem`}),`, `,(0,N.jsx)(t.code,{children:`%`}),` и других CSS-единицах; числовые значения трактуются как `,(0,N.jsx)(t.code,{children:`em`}),`.`]}),`
180
+ `,(0,N.jsxs)(t.li,{children:[(0,N.jsx)(t.code,{children:`onReachEnd`}),` срабатывает внутри scroll-контейнера и подходит для постепенной догрузки длинного списка.`]}),`
181
+ `,(0,N.jsxs)(t.li,{children:[(0,N.jsx)(t.code,{children:`Table`}),` не зависит от OData напрямую и продолжает работать на plain local data без metadata.`]}),`
182
+ `]}),`
183
+ `,(0,N.jsx)(t.h2,{id:`сценарии`,children:`Сценарии`}),`
184
+ `,(0,N.jsx)(t.h3,{id:`базовый-режим`,children:`Базовый режим`}),`
185
+ `,(0,N.jsx)(d,{of:O}),`
186
+ `,(0,N.jsx)(t.h3,{id:`перестановка-строк`,children:`Перестановка строк`}),`
187
+ `,(0,N.jsx)(d,{of:y}),`
188
+ `,(0,N.jsx)(t.h3,{id:`left-pinning-столбцов`,children:`Left-pinning столбцов`}),`
189
+ `,(0,N.jsx)(d,{of:h}),`
190
+ `,(0,N.jsx)(t.h3,{id:`множественный-выбор`,children:`Множественный выбор`}),`
191
+ `,(0,N.jsx)(d,{of:m}),`
192
+ `,(0,N.jsx)(t.h3,{id:`строки-с-ограничением-выбора`,children:`Строки с ограничением выбора`}),`
193
+ `,(0,N.jsx)(d,{of:x}),`
194
+ `,(0,N.jsx)(t.h3,{id:`фоновое-обновление-данных`,children:`Фоновое обновление данных`}),`
195
+ `,(0,N.jsx)(d,{of:E}),`
196
+ `,(0,N.jsx)(t.h3,{id:`пустая-таблица`,children:`Пустая таблица`}),`
197
+ `,(0,N.jsx)(d,{of:C}),`
198
+ `,(0,N.jsx)(t.h3,{id:`достижение-конца-списка`,children:`Достижение конца списка`}),`
199
+ `,(0,N.jsx)(d,{of:w}),`
200
+ `,(0,N.jsx)(t.h3,{id:`первичная-загрузка`,children:`Первичная загрузка`}),`
201
+ `,(0,N.jsx)(d,{of:b}),`
202
+ `,(0,N.jsx)(t.h3,{id:`formula-based-колонка`,children:`Formula-based колонка`}),`
203
+ `,(0,N.jsx)(d,{of:g}),`
204
+ `,(0,N.jsx)(t.h3,{id:`pipeline-display-formatting`,children:`Pipeline display-formatting`}),`
205
+ `,(0,N.jsx)(d,{of:k}),`
206
+ `,(0,N.jsx)(t.h3,{id:`скрытие-нулевых-значений`,children:`Скрытие нулевых значений`}),`
207
+ `,(0,N.jsx)(d,{of:_}),`
208
+ `,(0,N.jsx)(t.h3,{id:`слияние-дубликатов-1`,children:`Слияние дубликатов`}),`
209
+ `,(0,N.jsx)(d,{of:T}),`
210
+ `,(0,N.jsx)(t.h3,{id:`odata-metadata-adapter`,children:`OData metadata adapter`}),`
211
+ `,(0,N.jsx)(d,{of:S}),`
212
+ `,(0,N.jsx)(t.h3,{id:`useodatatablecolumns-build`,children:`useODataTableColumns: build`}),`
213
+ `,(0,N.jsx)(d,{of:v}),`
214
+ `,(0,N.jsx)(t.h3,{id:`useodatatablecolumns-enrich`,children:`useODataTableColumns: enrich`}),`
215
+ `,(0,N.jsx)(d,{of:p}),`
216
+ `,(0,N.jsx)(t.h2,{id:`api`,children:`API`}),`
217
+ `,(0,N.jsx)(l,{of:D}),`
218
+ `,(0,N.jsx)(t.h2,{id:`все-stories`,children:`Все stories`}),`
219
+ `,(0,N.jsx)(a,{includePrimary:!1})]})}function M(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,N.jsx)(t,{...e,children:(0,N.jsx)(j,{...e})}):j(e)}var N;function P(){return(P=e((()=>{N=t(),r(),c(),A()})))()}P();export{M as default};
@@ -0,0 +1,184 @@
1
+ import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r,r as i,t as a}from"./sortable-D7TAXZBK.js";import{n as o}from"./iframe-E950Ehp0.js";import{A as ee,D as te,O as ne,T as re,_ as ie,a as ae,b as oe,d as se,g as ce,i as le,k as ue}from"./odata-DuJbgix6.js";import{a as de,t as fe}from"./array-D-_yMMUK-BBmW5vUr.js";import{h as pe,u as me}from"./formatters-DVE1YVNQ-CJCkXjuI.js";import{n as he,t as ge}from"./useTable-CK68Q4S4.js";import{_ as _e,a as ve,c as ye,d as be,f as xe,g as Se,h as Ce,i as s,l as we,m as Te,n as Ee,o as De,p as Oe,r as ke,s as Ae,t as je,u as Me,v as Ne,y as Pe}from"./FormattedTableCell-BKSpyxnu.js";import{n as c,t as l}from"./createControlledStoryRender-BouhvX-R.js";var u,d,Fe;function Ie(){return(Ie=e((()=>{u=`hKghZt`,d=`QsLRvS`,Fe={selectedIndicatorCell:u,sentinel:d}})))()}function Le(e,t){return String(t)}function f({title:e,isLoading:t,isFetching:n,data:r,columns:a,selectionMode:o=`none`,selectedRowIds:ee,getRowId:te,className:ne,minHeight:re,tableClassName:ae,columnVisibility:oe,defaultColumnVisibility:se,columnOrder:le,defaultColumnOrder:ue,columnSizing:de,defaultColumnSizing:pe,columnPinning:ge,defaultColumnPinning:ve,enableColumnResizing:be=!1,enableColumnReordering:Se=!1,rowReordering:s,columnResizeMinWidth:we,onColumnVisibilityChange:Te,onColumnOrderChange:Ee,onColumnSizingChange:Ae,onColumnPinningChange:Pe,onRowClick:c,onRowSelectionChange:l,onReachEnd:u,getRowCanSelect:d,getRowClassName:Ie,renderHeaderContextMenu:f,renderCellContent:h}){let g=(0,p.useMemo)(()=>r??[],[r]),_=(0,p.useMemo)(()=>Ce(a),[a]),v=te??Le,y=(0,p.useMemo)(()=>new Map(g.map((e,t)=>[v(e,t),e])),[v,g]),Re=(0,p.useMemo)(()=>Array.from(y.keys()),[y]),b=(0,p.useRef)(null),x=(0,p.useRef)(null),{rowSelection:ze,activateRowSelection:S}=ce({availableRowIds:Re,rowById:y,selectionMode:o,selectedRowIds:ee,onRowSelectionChange:l}),{columnVisibility:C,onColumnVisibilityChange:w}=De({columnVisibility:oe,defaultColumnVisibility:se,onColumnVisibilityChange:Te}),{columnOrder:T,onColumnOrderChange:Be}=xe({columnOrder:le,defaultColumnOrder:ue,onColumnOrderChange:Ee}),{columnSizing:E,onColumnSizingChange:Ve}=ye({columnSizing:de,defaultColumnSizing:pe,columnResizeMinWidth:we,onColumnSizingChange:Ae}),{columnPinning:D,onColumnPinningChange:He}=Me({columnPinning:ge,defaultColumnPinning:ve,onColumnPinningChange:Pe}),O=(0,p.useMemo)(()=>({columnOrder:T,columnPinning:D,columnSizing:E,columnVisibility:C}),[T,D,E,C]),Ue=(0,p.useEffectEvent)(()=>{u?.()});(0,p.useEffect)(()=>{if(!u||!b.current||!x.current||t)return;let e=new IntersectionObserver(e=>{e[0]?.isIntersecting&&Ue()},{root:b.current,threshold:.1});return e.observe(x.current),()=>e.disconnect()},[t,u,g.length]);let k=he({features:ie,data:g,columns:a,state:{columnOrder:T,columnPinning:D,columnSizing:E,columnVisibility:C,rowSelection:ze},onColumnOrderChange:Be,onColumnPinningChange:He,onColumnSizingChange:Ve,onColumnVisibilityChange:w,getRowId:(e,t)=>v(e,t),enableMultiRowSelection:o===`multi`,enableRowSelection:e=>o===`none`?!1:!d||d(e.original)}),A=Ne(k,O),j=k.getRowModel().rows,M=(0,p.useMemo)(()=>j.map(e=>e.id),[j]),We=(0,p.useMemo)(()=>Oe({rows:j,columns:A}),[j,A]),N=A[0]?.id;return(0,m.jsx)(ke,{table:k,columnState:O,title:e,isLoading:t,isFetching:n,className:ne,minHeight:re,tableClassName:ae,selectionMode:o,scrollableRef:b,onActivateRow:o!==`none`||c?e=>{S(e.id,e.getCanSelect()),c?.(e.original)}:void 0,isRowInteractive:e=>!!(c||o!==`none`&&e.getCanSelect()),getRowClassName:e=>Ie?.(e.original),getCellClassName:({row:e,cell:t})=>t.column.id===N&&e.getIsSelected()?Fe.selectedIndicatorCell:void 0,getCellLayout:({cell:e})=>We.get(e.id),renderHeaderContextMenu:f,enableColumnResizing:be,enableColumnReordering:Se,rowReordering:s?{disabled:s.disabled,onDragEnd:e=>{if(!s||s.disabled)return;let t=i({event:e,items:M});t&&s.onReorder(fe(j.map(e=>e.original),t.fromIndex,t.toIndex))}}:void 0,columnResizeMinWidth:we,renderCellContent:e=>{let t=me({field:_.runtimeByColumnId[e.cell.column.id],rawValue:e.cell.getValue(),rowData:e.row.original,rowKind:`plain`}),n=_e({columnId:e.cell.column.id,runtimeByColumnId:_.runtimeByColumnId,customCellColumnIds:_.customCellColumnIds})?(0,m.jsx)(je,{displayValue:t,align:e.columnMeta?.align}):e.defaultContent;return h?h({...e,defaultContent:n,displayValue:t}):n},afterTableContent:u?(0,m.jsx)(`div`,{ref:x,className:Fe.sentinel,"aria-hidden":`true`}):null})}var p,m;function h(){return(h=e((()=>{p=n(),de(),pe(),oe(),ge(),s(),Te(),Se(),Ee(),Pe(),be(),we(),Ae(),ve(),r(),Ie(),m=o(),f.__docgenInfo={description:"Плоская таблица на базе TanStack Table как React-альтернатива `sap.m.Table`.",methods:[],displayName:`Table`,props:{title:{required:!1,tsType:{name:`string`},description:`Необязательный заголовок над таблицей.`},isLoading:{required:!1,tsType:{name:`boolean`},description:`Признак первичной загрузки.`},isFetching:{required:!1,tsType:{name:`boolean`},description:`Признак фоновой догрузки или обновления данных.`},data:{required:!0,tsType:{name:`union`,raw:`readonly TData[] | undefined | null`,elements:[{name:`unknown`},{name:`undefined`},{name:`null`}]},description:`Плоский источник строк.`},columns:{required:!0,tsType:{name:`unknown`},description:`Описание колонок таблицы.`},selectionMode:{required:!1,tsType:{name:`TableSelectionMode`},description:`Режим выбора строк.`,defaultValue:{value:`"none"`,computed:!1}},selectedRowIds:{required:!1,tsType:{name:`unknown`},description:`Внешний список выбранных строк.
2
+
3
+ Если передан, таблица синхронизирует визуальное выделение с этим набором id.`},getRowId:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(row: TData, index: number) => string`,signature:{arguments:[{type:{name:`TData`},name:`row`},{type:{name:`number`},name:`index`}],return:{name:`string`}}},description:`Стабильный идентификатор строки.
4
+
5
+ Если не задан, используется индекс строки.`},className:{required:!1,tsType:{name:`string`},description:`Дополнительный CSS-класс корневого контейнера.`},minHeight:{required:!1,tsType:{name:`union`,raw:"`${number}em` | `${number}%`",elements:[{name:`literal`,value:"`${number}em`"},{name:`literal`,value:"`${number}%`"}]},description:``},tableClassName:{required:!1,tsType:{name:`string`},description:"Дополнительный CSS-класс тега `table`."},columnVisibility:{required:!1,tsType:{name:`TableColumnVisibilityState`},description:`Внешнее controlled-состояние видимости колонок.`},defaultColumnVisibility:{required:!1,tsType:{name:`TableColumnVisibilityState`},description:`Стартовое uncontrolled-состояние видимости колонок.`},columnOrder:{required:!1,tsType:{name:`unknown`},description:`Внешнее controlled-состояние порядка колонок.`},defaultColumnOrder:{required:!1,tsType:{name:`unknown`},description:`Стартовое uncontrolled-состояние порядка колонок.`},columnSizing:{required:!1,tsType:{name:`TableColumnSizingState`},description:`Внешнее controlled-состояние ширин колонок в px.`},defaultColumnSizing:{required:!1,tsType:{name:`TableColumnSizingState`},description:`Стартовое uncontrolled-состояние ширин колонок в px.`},columnPinning:{required:!1,tsType:{name:`TableColumnPinningState`},description:`Внешнее controlled-состояние start-pinning для колонок.`},defaultColumnPinning:{required:!1,tsType:{name:`TableColumnPinningState`},description:`Стартовое uncontrolled-состояние start-pinning для колонок.`},enableColumnResizing:{required:!1,tsType:{name:`boolean`},description:`Включает изменение ширины колонок через header-handle.`,defaultValue:{value:`false`,computed:!1}},enableColumnReordering:{required:!1,tsType:{name:`boolean`},description:`Включает изменение порядка колонок через drag&drop заголовков.`,defaultValue:{value:`false`,computed:!1}},rowReordering:{required:!1,tsType:{name:`TableRowReordering`,elements:[{name:`TData`}],raw:`TableRowReordering<TData>`},description:"Включает вертикальную перестановку строк через `Sortable.DragHandle` в пользовательской колонке."},columnResizeMinWidth:{required:!1,tsType:{name:`number`},description:`Минимальная ширина колонки при resize в px.`},onColumnVisibilityChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(state: TableColumnVisibilityState) => void`,signature:{arguments:[{type:{name:`TableColumnVisibilityState`},name:`state`}],return:{name:`void`}}},description:`Вызывается после изменения видимости колонок.`},onColumnOrderChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(state: TableColumnOrderState) => void`,signature:{arguments:[{type:{name:`TableColumnOrderState`},name:`state`}],return:{name:`void`}}},description:`Вызывается после изменения порядка колонок.`},onColumnSizingChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(state: TableColumnSizingState) => void`,signature:{arguments:[{type:{name:`TableColumnSizingState`},name:`state`}],return:{name:`void`}}},description:`Вызывается после изменения ширины колонок.`},onColumnPinningChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(state: TableColumnPinningState) => void`,signature:{arguments:[{type:{name:`TableColumnPinningState`},name:`state`}],return:{name:`void`}}},description:`Вызывается после изменения start-pinning state.`},onRowClick:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(row: TData) => void`,signature:{arguments:[{type:{name:`TData`},name:`row`}],return:{name:`void`}}},description:`Вызывается при активации строки кликом или клавиатурой.`},onRowSelectionChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(rows: TData[]) => void`,signature:{arguments:[{type:{name:`Array`,elements:[{name:`TData`}],raw:`TData[]`},name:`rows`}],return:{name:`void`}}},description:`Вызывается после изменения выбранных строк.`},onReachEnd:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:`Вызывается при достижении конца таблицы внутри scroll-контейнера.`},getRowCanSelect:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(row: TData) => boolean`,signature:{arguments:[{type:{name:`TData`},name:`row`}],return:{name:`boolean`}}},description:`Позволяет запретить выбор отдельных строк.`},getRowClassName:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(row: TData) => string | undefined`,signature:{arguments:[{type:{name:`TData`},name:`row`}],return:{name:`union`,raw:`string | undefined`,elements:[{name:`string`},{name:`undefined`}]}}},description:`Позволяет добавить CSS-класс для конкретной строки.`},renderHeaderContextMenu:{required:!1,tsType:{name:`BaseTableProps["renderHeaderContextMenu"]`,raw:`BaseTableProps<TData>["renderHeaderContextMenu"]`},description:`Контекстное меню заголовка колонки. Используется для общих runtime-действий
6
+ вроде server sorting без встраивания доменной логики в shared-таблицу.`},renderCellContent:{required:!1,tsType:{name:`BaseTableProps["renderCellContent"]`,raw:`BaseTableProps<TData>["renderCellContent"]`},description:"Тонкая точка расширения содержимого ячейки поверх стандартного форматирования.\n\nВ отличие от `column.cell`, этот слот не отключает общий formatting-runtime:\n`defaultContent` уже содержит отформатированное значение, если оно применимо."}}}})))()}var g=t({Basic:()=>R,Empty:()=>W,Fetching:()=>U,Loading:()=>K,MultiSelect:()=>V,ReachEnd:()=>G,WithColumnPinning:()=>B,WithDisabledRows:()=>H,WithFormattingPipeline:()=>J,WithFormulaColumn:()=>q,WithHiddenZero:()=>Y,WithMergedDuplicates:()=>X,WithODataMetadataAdapter:()=>Z,WithRowReordering:()=>z,WithUseODataTableColumnsBuildHook:()=>Q,WithUseODataTableColumnsEnrichHook:()=>$,__namedExportsOrder:()=>Je,default:()=>Ke});function _(){return{version:1,plan:{steps:[{id:`state`,type:`resolveValueState`,config:{resolver:{kind:`threshold`,thresholds:[100],states:[`success`,`warning`],invalidState:`none`},icon:{enabled:!0,showValue:!0,position:`right`}}},{id:`typed`,type:`typedValueFormat`}]}}}function v(e,t){let n=e.data??[];return t.map(t=>{let r=n.indexOf(t);return e.getRowId?.(t,r)??String(r)})}function y({args:e,updateArgs:t}){return(0,C.jsx)(f,{...e,onColumnVisibilityChange:n=>{e.onColumnVisibilityChange?.(n),t({columnVisibility:n})},onColumnOrderChange:n=>{e.onColumnOrderChange?.(n),t({columnOrder:n})},onColumnSizingChange:n=>{e.onColumnSizingChange?.(n),t({columnSizing:n})},onColumnPinningChange:n=>{e.onColumnPinningChange?.(n),t({columnPinning:n})},onRowSelectionChange:n=>{e.onRowSelectionChange?.(n),t({selectedRowIds:v(e,n)})}})}function Re({args:e}){let[t,n]=(0,S.useState)([...e.data??[]]);return(0,C.jsx)(f,{...e,data:t,rowReordering:{onReorder:e=>n([...e])}})}function b({args:e,updateArgs:t}){let{columns:n,metadata:r,isLoading:i}=le({service:N,target:P,mode:`build`});return(0,C.jsxs)(`div`,{style:{display:`grid`,gap:`0.75em`},children:[(0,C.jsxs)(`div`,{children:[`Режим build: hook собрал `,n.length,` колонки из metadata`,r?` для сущности «${r.title}».`:`.`]}),(0,C.jsx)(y,{args:{...e,columns:n,isLoading:e.isLoading??i},updateArgs:t})]})}function x({args:e,updateArgs:t}){let{columns:n,metadata:r,isLoading:i}=le({service:N,target:P,mode:`enrich`,columns:M});return(0,C.jsxs)(`div`,{style:{display:`grid`,gap:`0.75em`},children:[(0,C.jsxs)(`div`,{children:[`Режим enrich: hook сохранил ручные заголовки и дополнил formatting-контекст`,r?` из metadata «${r.title}».`:`.`]}),(0,C.jsx)(y,{args:{...e,columns:n,isLoading:e.isLoading??i},updateArgs:t})]})}function ze({args:e,updateArgs:t}){let[n,r]=(0,S.useState)(0);return(0,C.jsxs)(`div`,{style:{display:`grid`,gap:`0.75em`},children:[(0,C.jsxs)(`div`,{children:[`Событие достижения конца: `,n]}),(0,C.jsx)(y,{args:{...e,onReachEnd:()=>{e.onReachEnd?.(),r(e=>e+1)}},updateArgs:t})]})}var S,C,w,T,Be,E,Ve,D,He,O,Ue,k,A,j,M,We,N,P,Ge,F,Ke,I,L,qe,R,z,B,V,H,U,W,G,K,q,J,Y,X,Z,Q,$,Je;function Ye(){return(Ye=e((()=>{S=n(),ae(),ne(),oe(),ee(),c(),r(),h(),C=o(),w=[{id:`1`,number:`450001`,client:`Северсталь`,manager:`Иван Петров`,amount:`1 250 000`,status:`Новая`},{id:`2`,number:`450002`,client:`ММК`,manager:`Анна Смирнова`,amount:`980 000`,status:`В работе`},{id:`3`,number:`450003`,client:`НЛМК`,manager:`Олег Николаев`,amount:`1 540 000`,status:`Согласование`},{id:`4`,number:`450004`,client:`ЕВРАЗ`,manager:`Мария Кузнецова`,amount:`760 000`,status:`Отгружена`},{id:`5`,number:`450005`,client:`ТМК`,manager:`Дмитрий Волков`,amount:`1 120 000`,status:`Закрыта`}],T=[...w,{id:`6`,number:`450006`,client:`ОМК`,manager:`Елена Андреева`,amount:`680 000`,status:`Архив`,isLocked:!0}],Be=Array.from({length:18},(e,t)=>({id:String(t+1),number:`4600${String(t+1).padStart(2,`0`)}`,client:`Клиент ${t+1}`,manager:`Менеджер ${t+1}`,amount:`${850+t*15} 000`,status:t%2==0?`В работе`:`Согласование`})),E=[{id:`number`,accessorKey:`number`,header:`Номер`,meta:{width:9}},{id:`client`,accessorKey:`client`,header:`Клиент`,meta:{width:14}},{id:`manager`,accessorKey:`manager`,header:`Менеджер`,meta:{width:12}},{id:`amount`,accessorKey:`amount`,header:`Сумма`,meta:{width:10,align:`right`}},{id:`status`,accessorKey:`status`,header:`Статус`,meta:{width:11}}],Ve=[{id:`reorder`,header:`Порядок`,cell:({row:e})=>(0,C.jsx)(a.DragHandle,{as:`button`,title:`Переместить сделку ${e.original.number}`}),meta:{width:4}},...E],D=[{id:`fmt-1`,product:`Лист горячекатаный`,purchasePrice:80,salePrice:120,healthScore:35,pendingAmount:0,createdAt:`2026-03-18T09:15:00.000Z`,totalAmount:1520.5},{id:`fmt-2`,product:`Рулон оцинкованный`,purchasePrice:95,salePrice:150,healthScore:125,pendingAmount:320,createdAt:`2026-03-19T11:40:00.000Z`,totalAmount:2140},{id:`fmt-3`,product:`Арматура`,purchasePrice:60,salePrice:90,healthScore:70,pendingAmount:0,createdAt:`2026-03-20T07:05:00.000Z`,totalAmount:980.75}],He=[{id:`merge-1`,division:`ДВД`,department:`Продажи`,employee:`Иван Петров`},{id:`merge-2`,division:`ДВД`,department:`Продажи`,employee:`Анна Смирнова`},{id:`merge-3`,division:`ДВД`,department:`Продажи`,employee:`Олег Николаев`},{id:`merge-4`,division:`УД`,department:`Логистика`,employee:`Мария Кузнецова`},{id:`merge-5`,division:`УД`,department:`Логистика`,employee:`Дмитрий Волков`},{id:`merge-6`,division:`УД`,department:`Логистика`,employee:`Елена Андреева`},{id:`merge-7`,division:`УД`,department:`Логистика`,employee:`Николай Орлов`}],O=[{id:`division`,accessorKey:`division`,header:`Дивизион`,meta:{width:10,mergeDuplicates:!0}},{id:`department`,accessorKey:`department`,header:`Подразделение`,meta:{width:12}},{id:`employee`,accessorKey:`employee`,header:`Сотрудник`,meta:{width:14}}],Ue=[{id:`product`,accessorKey:`product`,header:`Товар`,meta:{width:16}},{id:`purchasePrice`,accessorKey:`purchasePrice`,header:`Закупка`,meta:{width:9,align:`right`,formatting:{role:`measure`,type:`decimal`}}},{id:`salePrice`,accessorKey:`salePrice`,header:`Продажа`,meta:{width:9,align:`right`,formatting:{role:`measure`,type:`decimal`}}},{id:`markup`,accessorFn:()=>void 0,header:`Наценка`,meta:{width:9,align:`right`,formatting:{role:`measure`,type:`decimal`,formulaId:`markup`,formulaDependencies:[`purchasePrice`,`salePrice`],purelyDerived:!0}}}],k=[{id:`product`,accessorKey:`product`,header:`Товар`,meta:{width:16}},{id:`healthScore`,accessorKey:`healthScore`,header:`Индекс риска`,meta:{width:10,align:`right`,formatting:{role:`measure`,type:`decimal`,formattersPipeline:_()}}}],A=[{id:`product`,accessorKey:`product`,header:`Товар`,meta:{width:16}},{id:`pendingAmount`,accessorKey:`pendingAmount`,header:`Резерв`,meta:{width:9,align:`right`,formatting:{role:`measure`,type:`decimal`,emptyWhenZero:!0}}}],j=[{id:`product`,type:`string`,originalType:`Edm.String`,label:`Товар`,semanticType:`none`,sortable:!0,filterable:!0,role:`dimension`},{id:`createdAt`,type:`datetime`,originalType:`Edm.DateTime`,label:`Дата создания`,semanticType:`none`,sortable:!0,filterable:!0,role:`dimension`},{id:`totalAmount`,type:`decimal`,originalType:`Edm.Decimal`,label:`Сумма`,semanticType:`none`,sortable:!0,filterable:!0,role:`measure`}],M=[{id:`product`,accessorKey:`product`,header:`Позиция`,meta:{width:16}},{id:`createdAt`,accessorKey:`createdAt`,header:`Создано`,meta:{width:12}},{id:`totalAmount`,accessorKey:`totalAmount`,header:`Итог`,meta:{width:9,align:`right`}}],We=se(M,j),N=`ZDEMO_DEALS_SRV`,P=`DealSet`,Ge={title:`Портфель сделок`,columns:j},F=(e,t)=>{let n=(0,S.useMemo)(()=>{let e=te({}),n=t.parameters.odataService,r=t.parameters.odataEntity,i=t.parameters.odataMetadata;return n&&r&&i&&e.setQueryData(re({service:n}).queryKey,{entities:{[r]:i},functionImports:{}}),e},[t.parameters.odataEntity,t.parameters.odataMetadata,t.parameters.odataService]);return(0,C.jsx)(ue,{client:n,children:e()})},Ke={title:`UI/Table`,component:f,args:{title:`Сделки`,data:w,columns:E,getRowId:e=>e.id,selectionMode:`single`},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{title:{description:`Заголовок таблицы.`,control:`text`},isLoading:{description:`Показывает состояние первичной загрузки.`,control:`boolean`},isFetching:{description:`Показывает фоновое обновление без очистки строк.`,control:`boolean`},data:{description:`Плоский источник строк.`,control:!1},columns:{description:`Описание колонок таблицы.`,control:!1},selectionMode:{description:`Режим выбора строк.`,control:`inline-radio`,options:[`none`,`single`,`multi`]},selectedRowIds:{description:`Controlled-набор выбранных id строк.`,control:!1},getRowId:{description:`Функция получения стабильного id строки.`,control:!1},minHeight:{description:`Минимальная высота scroll-области таблицы в em или процентах.`,control:`text`},columnVisibility:{description:`Controlled-состояние видимости колонок.`,control:!1},defaultColumnVisibility:{description:`Стартовое uncontrolled-состояние видимости колонок.`,control:!1},columnOrder:{description:`Controlled-порядок идентификаторов колонок.`,control:!1},defaultColumnOrder:{description:`Стартовый uncontrolled-порядок колонок.`,control:!1},columnSizing:{description:`Controlled-ширины колонок в px.`,control:!1},defaultColumnSizing:{description:`Стартовые uncontrolled-ширины колонок.`,control:!1},columnPinning:{description:`Controlled-состояние закрепления колонок слева.`,control:!1},defaultColumnPinning:{description:`Стартовое uncontrolled-состояние закрепления колонок слева.`,control:!1},onColumnPinningChange:{description:`Вызывается после изменения закрепления колонок слева.`,control:!1},enableColumnResizing:{description:`Включает изменение ширины колонок через header-handle.`,control:`boolean`},enableColumnReordering:{description:`Включает перетаскивание заголовков для изменения порядка колонок.`,control:`boolean`},rowReordering:{description:`Включает вертикальную перестановку строк через Sortable.DragHandle в пользовательской колонке.`,control:!1},columnResizeMinWidth:{description:`Минимальная ширина колонки при resize в px.`,control:`number`},onColumnVisibilityChange:{description:`Вызывается после изменения видимости колонок.`,control:!1},onColumnOrderChange:{description:`Вызывается после изменения порядка колонок.`,control:!1},onColumnSizingChange:{description:`Вызывается после изменения ширины колонок.`,control:!1},getRowCanSelect:{description:`Позволяет запретить выбор отдельных строк.`,control:!1},getRowClassName:{description:`Позволяет добавить CSS-класс для конкретной строки.`,control:!1},onRowClick:{description:`Вызывается при активации строки.`,control:!1},onRowSelectionChange:{description:`Вызывается после изменения выбранных строк.`,control:!1},onReachEnd:{description:`Вызывается при достижении конца списка внутри scroll-контейнера.`,control:!1},renderHeaderContextMenu:{description:`Слот контекстного меню заголовка колонки.`,control:!1},renderCellContent:{description:`Слот содержимого ячейки поверх стандартного formatting-runtime.`,control:!1}}},I=l((e,t)=>(0,C.jsx)(y,{args:e,updateArgs:t})),L=l((e,t)=>(0,C.jsx)(y,{args:e,updateArgs:t})),qe=l((e,t)=>(0,C.jsx)(y,{args:e,updateArgs:t})),R={render:I},z={args:{columns:Ve,selectionMode:`none`},render:e=>(0,C.jsx)(Re,{args:e})},B={args:{columnPinning:{start:[`number`]}},render:l((e,t)=>{let n=e.columnPinning??{start:[]};return(0,C.jsxs)(`div`,{style:{display:`grid`,gap:`0.75em`},children:[(0,C.jsxs)(`div`,{style:{display:`flex`,gap:`0.5em`,flexWrap:`wrap`},children:[(0,C.jsx)(`button`,{type:`button`,onClick:()=>t({columnPinning:{start:[`number`]}}),children:`Закрепить «Номер»`}),(0,C.jsx)(`button`,{type:`button`,onClick:()=>t({columnPinning:{start:[`number`,`client`]}}),children:`Закрепить «Номер» и «Клиент»`}),(0,C.jsx)(`button`,{type:`button`,onClick:()=>t({columnPinning:{start:[]}}),children:`Снять закрепление`})]}),(0,C.jsxs)(`div`,{children:[`Закреплено в начале: `,n.start?.length?n.start.join(`, `):`ничего`]}),(0,C.jsx)(y,{args:{...e,columnPinning:n},updateArgs:t})]})})},V={args:{selectionMode:`multi`,selectedRowIds:[]},render:l((e,t)=>(0,C.jsxs)(`div`,{style:{display:`grid`,gap:`0.75em`},children:[(0,C.jsxs)(`div`,{children:[`Выбрано: `,e.selectedRowIds?.length?e.selectedRowIds.join(`, `):`ничего`]}),(0,C.jsx)(y,{args:e,updateArgs:t})]}))},H={args:{data:T,selectionMode:`multi`,selectedRowIds:[],getRowCanSelect:e=>!e.isLocked},render:l((e,t)=>(0,C.jsxs)(`div`,{style:{display:`grid`,gap:`0.75em`},children:[(0,C.jsx)(`div`,{children:`Строка со статусом «Архив» остаётся видимой, но не участвует в выборе.`}),(0,C.jsxs)(`div`,{children:[`Выбрано: `,e.selectedRowIds?.length?e.selectedRowIds.join(`, `):`ничего`]}),(0,C.jsx)(y,{args:e,updateArgs:t})]}))},U={args:{isFetching:!0},render:I},W={args:{data:[]},render:I},G={args:{data:Be},render:l((e,t)=>(0,C.jsx)(ze,{args:e,updateArgs:t}))},K={args:{isLoading:!0},render:I},q={args:{title:`Формула наценки`,data:D,columns:Ue,selectionMode:`none`,getRowId:e=>e.id},render:L},J={args:{title:`Pipeline форматирования`,data:D,columns:k,selectionMode:`none`,getRowId:e=>e.id},render:L},Y={args:{title:`Скрытие нулей`,data:D,columns:A,selectionMode:`none`,getRowId:e=>e.id},render:L},X={args:{title:`Слияние дубликатов`,data:He,columns:O,selectionMode:`none`,getRowId:e=>e.id},render:qe},Z={args:{title:`OData metadata adapter`,data:D,columns:We,selectionMode:`none`,getRowId:e=>e.id},render:L},Q={args:{title:`useODataTableColumns: build`,data:D,columns:[],selectionMode:`none`,getRowId:e=>e.id},decorators:[F],parameters:{odataService:N,odataEntity:P,odataMetadata:Ge},render:l((e,t)=>(0,C.jsx)(b,{args:e,updateArgs:t}))},$={args:{title:`useODataTableColumns: enrich`,data:D,columns:[],selectionMode:`none`,getRowId:e=>e.id},decorators:[F],parameters:{odataService:N,odataEntity:P,odataMetadata:Ge},render:l((e,t)=>(0,C.jsx)(x,{args:e,updateArgs:t}))},R.parameters={...R.parameters,docs:{...R.parameters?.docs,source:{originalSource:`{
7
+ render: renderDealTableStory
8
+ }`,...R.parameters?.docs?.source},description:{story:`Базовый сценарий плоской таблицы с одиночным выбором.`,...R.parameters?.docs?.description}}},z.parameters={...z.parameters,docs:{...z.parameters?.docs,source:{originalSource:`{
9
+ args: {
10
+ columns: reorderableDemoColumns,
11
+ selectionMode: "none"
12
+ },
13
+ render: args => <RowReorderingTableStory args={args} />
14
+ }`,...z.parameters?.docs?.source},description:{story:`Перестановка строк с доступной keyboard/pointer ручкой в пользовательской колонке.`,...z.parameters?.docs?.description}}},B.parameters={...B.parameters,docs:{...B.parameters?.docs,source:{originalSource:`{
15
+ args: {
16
+ columnPinning: {
17
+ start: ["number"]
18
+ }
19
+ },
20
+ render: createControlledStoryRender<TableProps<DealRow>>((args, updateArgs) => {
21
+ const columnPinning = args.columnPinning ?? {
22
+ start: []
23
+ };
24
+ return <div style={{
25
+ display: "grid",
26
+ gap: "0.75em"
27
+ }}>
28
+ <div style={{
29
+ display: "flex",
30
+ gap: "0.5em",
31
+ flexWrap: "wrap"
32
+ }}>
33
+ <button type="button" onClick={() => updateArgs({
34
+ columnPinning: {
35
+ start: ["number"]
36
+ }
37
+ })}>
38
+ Закрепить «Номер»
39
+ </button>
40
+ <button type="button" onClick={() => updateArgs({
41
+ columnPinning: {
42
+ start: ["number", "client"]
43
+ }
44
+ })}>
45
+ Закрепить «Номер» и «Клиент»
46
+ </button>
47
+ <button type="button" onClick={() => updateArgs({
48
+ columnPinning: {
49
+ start: []
50
+ }
51
+ })}>
52
+ Снять закрепление
53
+ </button>
54
+ </div>
55
+ <div>Закреплено в начале: {columnPinning.start?.length ? columnPinning.start.join(", ") : "ничего"}</div>
56
+ <TableStoryCanvas args={{
57
+ ...args,
58
+ columnPinning
59
+ }} updateArgs={updateArgs} />
60
+ </div>;
61
+ })
62
+ }`,...B.parameters?.docs?.source},description:{story:`Демонстрирует controlled start-pinning через внешний story-state без встроенного UI таблицы.`,...B.parameters?.docs?.description}}},V.parameters={...V.parameters,docs:{...V.parameters?.docs,source:{originalSource:`{
63
+ args: {
64
+ selectionMode: "multi",
65
+ selectedRowIds: []
66
+ },
67
+ render: createControlledStoryRender<TableProps<DealRow>>((args, updateArgs) => <div style={{
68
+ display: "grid",
69
+ gap: "0.75em"
70
+ }}>
71
+ <div>Выбрано: {args.selectedRowIds?.length ? args.selectedRowIds.join(", ") : "ничего"}</div>
72
+ <TableStoryCanvas args={args} updateArgs={updateArgs} />
73
+ </div>)
74
+ }`,...V.parameters?.docs?.source},description:{story:`Множественный выбор с отображением текущего результата.`,...V.parameters?.docs?.description}}},H.parameters={...H.parameters,docs:{...H.parameters?.docs,source:{originalSource:`{
75
+ args: {
76
+ data: nonSelectableRows,
77
+ selectionMode: "multi",
78
+ selectedRowIds: [],
79
+ getRowCanSelect: row => !row.isLocked
80
+ },
81
+ render: createControlledStoryRender<TableProps<DealRow>>((args, updateArgs) => <div style={{
82
+ display: "grid",
83
+ gap: "0.75em"
84
+ }}>
85
+ <div>Строка со статусом «Архив» остаётся видимой, но не участвует в выборе.</div>
86
+ <div>Выбрано: {args.selectedRowIds?.length ? args.selectedRowIds.join(", ") : "ничего"}</div>
87
+ <TableStoryCanvas args={args} updateArgs={updateArgs} />
88
+ </div>)
89
+ }`,...H.parameters?.docs?.source},description:{story:`Часть строк можно показать, но запретить выбирать.`,...H.parameters?.docs?.description}}},U.parameters={...U.parameters,docs:{...U.parameters?.docs,source:{originalSource:`{
90
+ args: {
91
+ isFetching: true
92
+ },
93
+ render: renderDealTableStory
94
+ }`,...U.parameters?.docs?.source},description:{story:`Сценарий фонового обновления данных без очистки таблицы.`,...U.parameters?.docs?.description}}},W.parameters={...W.parameters,docs:{...W.parameters?.docs,source:{originalSource:`{
95
+ args: {
96
+ data: []
97
+ },
98
+ render: renderDealTableStory
99
+ }`,...W.parameters?.docs?.source},description:{story:`Пустой источник данных.`,...W.parameters?.docs?.description}}},G.parameters={...G.parameters,docs:{...G.parameters?.docs,source:{originalSource:`{
100
+ args: {
101
+ data: reachEndRows
102
+ },
103
+ render: createControlledStoryRender<TableProps<DealRow>>((args, updateArgs) => <ReachEndTableCanvas args={args} updateArgs={updateArgs} />)
104
+ }`,...G.parameters?.docs?.source},description:{story:`Демонстрация callback при достижении конца списка.`,...G.parameters?.docs?.description}}},K.parameters={...K.parameters,docs:{...K.parameters?.docs,source:{originalSource:`{
105
+ args: {
106
+ isLoading: true
107
+ },
108
+ render: renderDealTableStory
109
+ }`,...K.parameters?.docs?.source},description:{story:`Состояние первичной загрузки.`,...K.parameters?.docs?.description}}},q.parameters={...q.parameters,docs:{...q.parameters?.docs,source:{originalSource:`{
110
+ args: {
111
+ title: "Формула наценки",
112
+ data: formattingRows,
113
+ columns: formulaColumns,
114
+ selectionMode: "none",
115
+ getRowId: row => row.id
116
+ },
117
+ render: renderFormattingTableStory
118
+ }`,...q.parameters?.docs?.source},description:{story:"Сценарий с formula-based колонкой без кастомного `cell`.",...q.parameters?.docs?.description}}},J.parameters={...J.parameters,docs:{...J.parameters?.docs,source:{originalSource:`{
119
+ args: {
120
+ title: "Pipeline форматирования",
121
+ data: formattingRows,
122
+ columns: pipelineColumns,
123
+ selectionMode: "none",
124
+ getRowId: row => row.id
125
+ },
126
+ render: renderFormattingTableStory
127
+ }`,...J.parameters?.docs?.source},description:{story:`Сценарий с pipeline display-formatting и value-state.`,...J.parameters?.docs?.description}}},Y.parameters={...Y.parameters,docs:{...Y.parameters?.docs,source:{originalSource:`{
128
+ args: {
129
+ title: "Скрытие нулей",
130
+ data: formattingRows,
131
+ columns: hiddenZeroColumns,
132
+ selectionMode: "none",
133
+ getRowId: row => row.id
134
+ },
135
+ render: renderFormattingTableStory
136
+ }`,...Y.parameters?.docs?.source},description:{story:"Сценарий со скрытием нулевых значений через `emptyWhenZero`.",...Y.parameters?.docs?.description}}},X.parameters={...X.parameters,docs:{...X.parameters?.docs,source:{originalSource:`{
137
+ args: {
138
+ title: "Слияние дубликатов",
139
+ data: divisionMergeRows,
140
+ columns: divisionMergeColumns,
141
+ selectionMode: "none",
142
+ getRowId: row => row.id
143
+ },
144
+ render: renderDivisionMergeTableStory
145
+ }`,...X.parameters?.docs?.source},description:{story:`Сценарий со display-only слиянием подряд идущих дубликатов через пустые ячейки и CSS-склейку.`,...X.parameters?.docs?.description}}},Z.parameters={...Z.parameters,docs:{...Z.parameters?.docs,source:{originalSource:`{
146
+ args: {
147
+ title: "OData metadata adapter",
148
+ data: formattingRows,
149
+ columns: adapterColumns,
150
+ selectionMode: "none",
151
+ getRowId: row => row.id
152
+ },
153
+ render: renderFormattingTableStory
154
+ }`,...Z.parameters?.docs?.source},description:{story:`Сценарий со статическим OData metadata adapter в режиме enrich.`,...Z.parameters?.docs?.description}}},Q.parameters={...Q.parameters,docs:{...Q.parameters?.docs,source:{originalSource:`{
155
+ args: {
156
+ title: "useODataTableColumns: build",
157
+ data: formattingRows,
158
+ columns: [],
159
+ selectionMode: "none",
160
+ getRowId: row => row.id
161
+ },
162
+ decorators: [withMockedHookODataMetadata],
163
+ parameters: {
164
+ odataService: HOOK_ODATA_SERVICE,
165
+ odataEntity: HOOK_ODATA_ENTITY,
166
+ odataMetadata: hookMetadata
167
+ },
168
+ render: createControlledStoryRender<TableProps<DealFormattingRow>>((args, updateArgs) => <HookBuildTableStory args={args} updateArgs={updateArgs} />)
169
+ }`,...Q.parameters?.docs?.source},description:{story:"Реальный hook-сценарий `useODataTableColumns(...)` в режиме build.",...Q.parameters?.docs?.description}}},$.parameters={...$.parameters,docs:{...$.parameters?.docs,source:{originalSource:`{
170
+ args: {
171
+ title: "useODataTableColumns: enrich",
172
+ data: formattingRows,
173
+ columns: [],
174
+ selectionMode: "none",
175
+ getRowId: row => row.id
176
+ },
177
+ decorators: [withMockedHookODataMetadata],
178
+ parameters: {
179
+ odataService: HOOK_ODATA_SERVICE,
180
+ odataEntity: HOOK_ODATA_ENTITY,
181
+ odataMetadata: hookMetadata
182
+ },
183
+ render: createControlledStoryRender<TableProps<DealFormattingRow>>((args, updateArgs) => <HookEnrichTableStory args={args} updateArgs={updateArgs} />)
184
+ }`,...$.parameters?.docs?.source},description:{story:"Реальный hook-сценарий `useODataTableColumns(...)` в режиме enrich.",...$.parameters?.docs?.description}}},Je=[`Basic`,`WithRowReordering`,`WithColumnPinning`,`MultiSelect`,`WithDisabledRows`,`Fetching`,`Empty`,`ReachEnd`,`Loading`,`WithFormulaColumn`,`WithFormattingPipeline`,`WithHiddenZero`,`WithMergedDuplicates`,`WithODataMetadataAdapter`,`WithUseODataTableColumnsBuildHook`,`WithUseODataTableColumnsEnrichHook`]})))()}export{$ as _,V as a,B as c,q as d,Y as f,Q as g,z as h,K as i,H as l,Z as m,W as n,G as o,X as p,U as r,g as s,R as t,J as u,Ye as v};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n,t as r}from"./CheckBox-BBPasWSk.js";import{n as i}from"./iframe-1Nw_zWMi.js";import{i as a,l as o}from"./array-D-_yMMUK-DnJ_b27D.js";import{n as s,t as c}from"./Button-DMAPWgMI.js";import{n as l,t as u}from"./useTable-CK68Q4S4.js";import{a as d,l as f,t as p}from"./Input-7N70tL0u.js";import{Et as m,Mt as h,Nt as g,Pt as _,Tt as v,n as ee,wt as te}from"./tableFeatures-Dx3U-F9E.js";import{n as ne,t as re}from"./Dialog-BsslYClj.js";import{n as ie,t as ae}from"./Textarea-BImI6Q6v.js";function y(){if(crypto.randomUUID)return crypto.randomUUID();let e=new Uint8Array(16);crypto.getRandomValues(e),e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array(256);for(let e=0;e<256;e++)t[e]=(e+256).toString(16).slice(1);return t[e[0]]+t[e[1]]+t[e[2]]+t[e[3]]+`-`+t[e[4]]+t[e[5]]+`-`+t[e[6]]+t[e[7]]+`-`+t[e[8]]+t[e[9]]+`-`+t[e[10]]+t[e[11]]+t[e[12]]+t[e[13]]+t[e[14]]+t[e[15]]}function oe(e){let t=e.getRowModel().rows,n=e.atoms.rowPinning?.get();if(!n||!n.top.length&&!n.bottom.length)return{rows:t,sectionStarts:pe};let r=e,i=r.getTopRows?.()??[],a=r.getCenterRows?.()??t,o=r.getBottomRows?.()??[];return{rows:[...i,...a,...o],sectionStarts:[i.length,i.length+a.length]}}function se(e,t){let n=t.getVisibleCells?.()??t.getAllCells(),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=n[e].column;let i=e.atoms.columnPinning?.get(),a=0,o=r.length;if(i){for(;a<o&&i.start.includes(r[a].id);)a++;for(;o>a&&i.end.includes(r[o-1].id);)o--}return{columns:r,centerStart:a,centerEnd:o}}function b(e){return e.columnDef.enableCellSpanning===!1?!1:e.table.options.enableCellSpanning??!0}function x(e){let{rows:t,sectionStarts:n}=oe(e),r=t.length,i={colSpans:fe,columnIndexes:de,rowSpans:ue,rows:t};if(!r||e.options.enableCellSpanning===!1)return i;let{columns:a,centerStart:o,centerEnd:s}=se(e,t[0]),c=a.length;if(!c)return i;let l=_();for(let e=0;e<c;e++)l[a[e].id]=e;let u=new Uint8Array(r);for(let e=0;e<n.length;e++){let t=n[e];t<r&&(u[t]=1)}for(let e=0;e<r;e++){let n=t[e];n._cellSpanRowIndex=e;let r=e>0?t[e-1]:void 0;(r&&(n.depth!==r.depth||n.parentId!==r.parentId)||n.getIsGrouped?.()===!0)&&(u[e]=1)}let d=[],f=!1;for(let n=0;n<c;n++){let i=a[n],l=i.columnDef.spanColumns;if(l===void 0||!b(i))continue;let u=n<o?o:n<s?s:c;for(let a=0;a<r;a++){let r=d[a];if(r&&r[n]===0)continue;let o=g(l)?l({column:i,row:t[a],table:e}):l;if(!(o>1))continue;let s=Math.min(o,u-n);if(s<2)continue;let p=r??(d[a]=new Int32Array(c).fill(1));p[n]=s;for(let e=n+1;e<n+s;e++)p[e]=0;f=!0}}let p=_();for(let n=0;n<c;n++){let i=a[n],o=i.columnDef.spanRows;if(!o||!b(i)||i.getIsGrouped?.()===!0)continue;let s=i.id,c=g(o)?o:void 0,l=new Int32Array(r).fill(1),m=!1,h=-1,_,v=1;for(let a=0;a<r;a++){let r=t[a],o=f?d[a]:void 0,p=o?o[n]:1;if(p===0){h=-1;continue}let g=r.getValue(s);if(h!==-1&&!u[a]&&p===v&&(c?c({anchorRow:t[h],anchorValue:_,column:i,previousRow:t[a-1],row:r,table:e,value:g}):g!=null&&Object.is(g,_))){l[a]=0,l[h]=l[h]+1,m=!0;continue}h=a,_=g,v=p}m&&(p[s]=l)}return{colSpans:d,columnIndexes:l,rowSpans:p,rows:t}}function S(e,t){let n=t.row._cellSpanRowIndex;return n===void 0||e.rows[n]!==t.row?-1:n}function C(e){let t=e.row.table,n=m(t,`getCellSpanIndex`,x),r=n.rowSpans[e.column.id];if(!r)return 1;let i=S(n,e);return i===-1?1:r[i]}function ce(e){let t=e.row.table,n=m(t,`getCellSpanIndex`,x),r=S(n,e);if(r===-1)return 1;let i=n.colSpans[r];if(!i)return 1;let a=n.columnIndexes[e.column.id];return a===void 0?1:i[a]}function le(e){return C(e)===0||ce(e)===0}var ue,de,fe,pe;function me(){return(me=e((()=>{h(),ue=_(),de=_(),fe=[],pe=[]})))()}var w;function T(){return(T=e((()=>{h(),me(),w={getDefaultTableOptions:()=>({enableCellSpanning:!0}),initRowInstanceData:e=>{e._cellSpanRowIndex=-1},assignCellPrototype:(e,t)=>{te(`cellSpanningFeature`,e,t,{cell_getColSpan:{fn:e=>ce(e)},cell_getIsCovered:{fn:e=>le(e)},cell_getRowSpan:{fn:e=>C(e)}})},constructTableAPIs:e=>{v(`cellSpanningFeature`,e,{table_getCellSpanIndex:{fn:()=>x(e),memoDeps:()=>[e.getRowModel().rows,e.atoms.rowPinning?.get(),e.options.keepPinnedRows,e.atoms.columnVisibility?.get(),e.atoms.columnOrder?.get(),e.atoms.columnPinning?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode,e.options.enableCellSpanning]}})}}})))()}function E(e,t){return e.row<t.row+t.rowSpan&&t.row<e.row+e.rowSpan&&e.column<t.column+t.columnSpan&&t.column<e.column+e.columnSpan}function D(e){let t=e.rows.length,n=e.columns.length;if(e.version!==1||!t||!n||t*n>2e4)throw Error(`Недопустимый размер таблицы.`);if(!Number.isInteger(e.headerRowCount)||e.headerRowCount<0||e.headerRowCount>t)throw Error(`Некорректное число строк заголовка.`);let r=new Set,i=e=>{if(!e||r.has(e))throw Error(`Идентификаторы строк, столбцов и ячеек должны быть уникальными.`);r.add(e)};for(let t of e.columns)if(i(t.id),t.width!==null&&(!Number.isFinite(t.width)||t.width<=0))throw Error(`Некорректная ширина столбца.`);for(let t of e.rows){if(i(t.id),t.cells.length!==n)throw Error(`Все строки должны иметь одинаковое число ячеек.`);t.cells.forEach(e=>i(e.id))}let a=new Set;for(let t of e.merges){if(O(e,t),t.rowSpan*t.columnSpan===1)throw Error(`Объединение должно содержать несколько ячеек.`);if(t.row<e.headerRowCount&&t.row+t.rowSpan>e.headerRowCount)throw Error(`Нельзя объединять заголовок с основной частью таблицы.`);for(let e=t.row;e<t.row+t.rowSpan;e++)for(let r=t.column;r<t.column+t.columnSpan;r++){let t=e*n+r;if(a.has(t))throw Error(`Объединённые области пересекаются.`);a.add(t)}}}function O(e,t){if(![t.row,t.column,t.rowSpan,t.columnSpan].every(Number.isInteger)||t.row<0||t.column<0||t.rowSpan<1||t.columnSpan<1||t.row+t.rowSpan>e.rows.length||t.column+t.columnSpan>e.columns.length)throw Error(`Выделение выходит за границы таблицы.`)}function k(e,t){let n={...t,rowSpan:1,columnSpan:1};return O(e,n),e.merges.find(e=>E(e,n))??n}function A(e,t,n){let r={row:Math.min(t.row,n.row),column:Math.min(t.column,n.column),rowSpan:Math.abs(t.row-n.row)+1,columnSpan:Math.abs(t.column-n.column)+1};O(e,r);let i=!0;for(;i;){i=!1;for(let t of e.merges){if(!E(r,t))continue;let e=Math.min(r.row,t.row),n=Math.min(r.column,t.column),a=Math.max(r.row+r.rowSpan,t.row+t.rowSpan)-e,o=Math.max(r.column+r.columnSpan,t.column+t.columnSpan)-n;(e!==r.row||n!==r.column||a!==r.rowSpan||o!==r.columnSpan)&&(r={row:e,column:n,rowSpan:a,columnSpan:o},i=!0)}}return r}function he(e,t,n){D(e);let r=A(e,t,n);if(r.rowSpan*r.columnSpan===1)return e;let i=e.merges.filter(e=>E(e,r));if(i.length===1&&r.row===i[0].row&&r.column===i[0].column&&r.rowSpan===i[0].rowSpan&&r.columnSpan===i[0].columnSpan)return e;let a={...e,merges:[...e.merges.filter(e=>!E(e,r)),r]};return D(a),a}function ge(e,t){D(e);let n=k(e,t);return n.rowSpan*n.columnSpan===1?e:{...e,merges:e.merges.filter(e=>e!==n)}}function j(e,t,n,r,i,a=`body`){D(e);let o=t===`row`?e.rows.length:e.columns.length;if(!Number.isInteger(n)||n<0||n>o)throw Error(`Некорректная позиция вставки.`);if(i.length!==(t===`row`?e.columns.length:e.rows.length))throw Error(`Неверное число новых ячеек.`);if(t===`row`&&(a===`header`?n>e.headerRowCount:n<e.headerRowCount))throw Error(`Строка вставляется вне выбранной части таблицы.`);let s=t===`row`?`rowSpan`:`columnSpan`,c=e.merges.map(e=>n<=e[t]?{...e,[t]:e[t]+1}:n<e[t]+e[s]?{...e,[s]:e[s]+1}:e),l=t===`row`?{...e,merges:c,headerRowCount:e.headerRowCount+ +(a===`header`),rows:[...e.rows.slice(0,n),{id:r,cells:i},...e.rows.slice(n)]}:{...e,merges:c,columns:[...e.columns.slice(0,n),{id:r,width:null},...e.columns.slice(n)],rows:e.rows.map((e,t)=>({...e,cells:[...e.cells.slice(0,n),i[t],...e.cells.slice(n)]}))};return D(l),l}function _e(e,t,n){return O(e,{...t,rowSpan:1,columnSpan:1}),Object.is(e.rows[t.row].cells[t.column].value,n)?e:{...e,rows:e.rows.map((e,r)=>r===t.row?{...e,cells:e.cells.map((e,r)=>r===t.column?{...e,value:n}:e)}:e)}}function M(e,t){D(e);let n=t===`row`?e.rows.length:e.columns.length,r=new Set;for(let n of e.merges){let e=t===`row`?n.rowSpan:n.columnSpan;for(let i=1;i<e;i++)r.add(n[t]+i)}let i=[],a=0;for(let e=1;e<=n;e++)(e===n||!r.has(e))&&(i.push({start:a,count:e-a}),a=e);return i}function ve(e,t,n){let r=M(e,t).find(e=>n>=e.start&&n<e.start+e.count);if(!r)throw Error(`Группа не найдена.`);let i=t===`row`?e.rows.length:e.columns.length;if(r.count===i)throw Error(`В таблице должна остаться хотя бы одна строка и один столбец.`);let a=r.start+r.count,o=e.merges.filter(e=>e[t]<r.start||e[t]>=a).map(e=>e[t]<a?e:{...e,[t]:e[t]-r.count}),s=t===`row`?{...e,merges:o,rows:e.rows.filter((e,t)=>t<r.start||t>=a),headerRowCount:e.headerRowCount-(r.start<e.headerRowCount?r.count:0)}:{...e,merges:o,columns:e.columns.filter((e,t)=>t<r.start||t>=a),rows:e.rows.map(e=>({...e,cells:e.cells.filter((e,t)=>t<r.start||t>=a)}))};return D(s),s}function ye(e,t,n,r){let i=M(e,t),a=i.findIndex(e=>n>=e.start&&n<e.start+e.count);if(a<0)throw Error(`Группа не найдена.`);let s=a+r;if(s<0||s>=i.length||t===`row`&&i[a].start<e.headerRowCount!=i[s].start<e.headerRowCount)return e;let c=o(i,a,r===-1?`up`:`down`).flatMap(e=>Array.from({length:e.count},(t,n)=>e.start+n)),l=new Map(c.map((e,t)=>[e,t])),u=e.merges.map(e=>({...e,[t]:l.get(e[t])??e[t]})),d=t===`row`?{...e,merges:u,rows:c.map(t=>e.rows[t])}:{...e,merges:u,columns:c.map(t=>e.columns[t]),rows:e.rows.map(e=>({...e,cells:c.map(t=>e.cells[t])}))};return D(d),d}function N(){return(N=e((()=>{a()})))()}var P,F,I,L,R,z,B,V,H;function U(){return(U=e((()=>{P=`_6ftNrS`,F=`tji4uW`,I=`nVFFYk`,L=`S7CdzG`,R=`emaqLv`,z=`VLG992`,B=`Hr0ghz`,V=`tuhyZe`,H={editor:P,toolbar:F,help:I,scroll:L,table:R,cellContent:z,inspector:B,structure:V}})))()}function be(e){let t=(0,W.useMemo)(()=>[...e.rows],[e]),n=(0,W.useMemo)(()=>e.columns.map((t,n)=>({id:t.id,accessorFn:(t,r)=>{let i=k(e,{row:r,column:n});return e.rows[i.row].cells[i.column].id},spanRows:!0,spanColumns:({row:t})=>{let r=k(e,{row:t.index,column:n});return r.column===n?r.columnSpan:1}})),[e]);return l({features:xe,data:t,columns:n,getRowId:e=>e.id})}var W,xe;function G(){return(G=e((()=>{W=t(),N(),T(),u(),xe=ee({cellSpanningFeature:w})})))()}function K({editor:e,extendSelection:t,disabled:n,renderCell:r,getCellText:i}){let a=(0,q.useId)(),o=(0,q.useRef)(new Map),s=be(e.document),{document:c,selection:l,focus:u}=e;return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`p`,{id:a,className:H.help,children:`Стрелки — переход между ячейками. Shift + стрелки или Shift + щелчок — выделение диапазона. Содержимое выбранной ячейки редактируется под таблицей.`}),(0,J.jsx)(`div`,{className:H.scroll,children:(0,J.jsxs)(`table`,{role:`grid`,"aria-label":c.caption||`Редактор таблицы`,"aria-describedby":a,"aria-multiselectable":`true`,"aria-disabled":n||void 0,className:H.table,children:[(0,J.jsx)(`colgroup`,{children:c.columns.map(e=>(0,J.jsx)(`col`,{style:{width:e.width??180}},e.id))}),(0,J.jsx)(`tbody`,{children:s.getRowModel().rows.map(a=>(0,J.jsx)(`tr`,{"aria-rowindex":a.index+1,"data-header":a.index<c.headerRowCount||void 0,children:a.getAllCells().map((s,d)=>{if(s.getIsCovered())return null;let f=a.index>=l.row&&a.index<l.row+l.rowSpan&&d>=l.column&&d<l.column+l.columnSpan,p={row:a.index,column:d},m=a.original.cells[d],h=a.index<c.headerRowCount?`th`:`td`;return(0,J.jsxs)(h,{role:a.index<c.headerRowCount?`columnheader`:`gridcell`,ref:e=>{e?o.current.set(m.id,e):o.current.delete(m.id)},rowSpan:s.getRowSpan(),colSpan:s.getColSpan(),"aria-colindex":d+1,"aria-label":`Строка ${a.index+1}, столбец ${d+1}: ${i(m)||`Пустая ячейка`}`,"aria-selected":f,tabIndex:!n&&u.row===a.index&&u.column===d?0:-1,onClick:r=>{n||e.select(p,t||r.shiftKey)},onPointerEnter:t=>{!n&&t.pointerType===`mouse`&&t.buttons===1&&e.select(p,!0)},onKeyDown:t=>{if(n||t.altKey||t.ctrlKey||t.metaKey)return;let r;switch(t.key){case`ArrowRight`:r={...p,column:d+s.getColSpan()};break;case`ArrowLeft`:r={...p,column:d-1};break;case`ArrowDown`:r={...p,row:a.index+s.getRowSpan()};break;case`ArrowUp`:r={...p,row:a.index-1};break;case`Home`:r={...p,column:0};break;case`End`:r={...p,column:c.columns.length-1};break;case` `:t.preventDefault(),e.select(p,t.shiftKey);return;default:return}if(t.preventDefault(),r.row<0||r.column<0||r.row>=c.rows.length||r.column>=c.columns.length)return;let i=k(c,r);e.select(r,t.shiftKey),o.current.get(c.rows[i.row].cells[i.column].id)?.focus()},children:[a.index<c.headerRowCount?(0,J.jsx)(`span`,{className:`visuallyHidden`,children:i(m)||`Пустой заголовок`}):null,(0,J.jsx)(`div`,{inert:!0,className:H.cellContent,children:r(m)})]},s.id)})},a.id))})]})})]})}var q,J;function Se(){return(Se=e((()=>{q=t(),N(),G(),U(),J=i(),K.__docgenInfo={description:`Доступная сетка: roving tabindex, стрелки/Shift и выбор диапазона без drag-only действий.`,methods:[],displayName:`TableEditorGrid`,props:{editor:{required:!0,tsType:{name:`signature`,type:`object`,raw:`{
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n,t as r}from"./CheckBox-BJhTyl1K.js";import{n as i}from"./iframe-E950Ehp0.js";import{a,u as o}from"./array-D-_yMMUK-BBmW5vUr.js";import{n as s,t as c}from"./Button-DqsSng-I.js";import{n as l,t as u}from"./useTable-CK68Q4S4.js";import{a as d,l as f,t as p}from"./Input-CzvWPW0I.js";import{Et as m,Mt as h,Nt as g,Pt as _,Tt as v,n as ee,wt as te}from"./tableFeatures-Dx3U-F9E.js";import{n as ne,t as re}from"./Dialog-HBOYhMQq.js";import{n as ie,t as ae}from"./Textarea-DCnLF4aj.js";function y(){if(crypto.randomUUID)return crypto.randomUUID();let e=new Uint8Array(16);crypto.getRandomValues(e),e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array(256);for(let e=0;e<256;e++)t[e]=(e+256).toString(16).slice(1);return t[e[0]]+t[e[1]]+t[e[2]]+t[e[3]]+`-`+t[e[4]]+t[e[5]]+`-`+t[e[6]]+t[e[7]]+`-`+t[e[8]]+t[e[9]]+`-`+t[e[10]]+t[e[11]]+t[e[12]]+t[e[13]]+t[e[14]]+t[e[15]]}function oe(e){let t=e.getRowModel().rows,n=e.atoms.rowPinning?.get();if(!n||!n.top.length&&!n.bottom.length)return{rows:t,sectionStarts:pe};let r=e,i=r.getTopRows?.()??[],a=r.getCenterRows?.()??t,o=r.getBottomRows?.()??[];return{rows:[...i,...a,...o],sectionStarts:[i.length,i.length+a.length]}}function se(e,t){let n=t.getVisibleCells?.()??t.getAllCells(),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=n[e].column;let i=e.atoms.columnPinning?.get(),a=0,o=r.length;if(i){for(;a<o&&i.start.includes(r[a].id);)a++;for(;o>a&&i.end.includes(r[o-1].id);)o--}return{columns:r,centerStart:a,centerEnd:o}}function b(e){return e.columnDef.enableCellSpanning===!1?!1:e.table.options.enableCellSpanning??!0}function x(e){let{rows:t,sectionStarts:n}=oe(e),r=t.length,i={colSpans:fe,columnIndexes:de,rowSpans:ue,rows:t};if(!r||e.options.enableCellSpanning===!1)return i;let{columns:a,centerStart:o,centerEnd:s}=se(e,t[0]),c=a.length;if(!c)return i;let l=_();for(let e=0;e<c;e++)l[a[e].id]=e;let u=new Uint8Array(r);for(let e=0;e<n.length;e++){let t=n[e];t<r&&(u[t]=1)}for(let e=0;e<r;e++){let n=t[e];n._cellSpanRowIndex=e;let r=e>0?t[e-1]:void 0;(r&&(n.depth!==r.depth||n.parentId!==r.parentId)||n.getIsGrouped?.()===!0)&&(u[e]=1)}let d=[],f=!1;for(let n=0;n<c;n++){let i=a[n],l=i.columnDef.spanColumns;if(l===void 0||!b(i))continue;let u=n<o?o:n<s?s:c;for(let a=0;a<r;a++){let r=d[a];if(r&&r[n]===0)continue;let o=g(l)?l({column:i,row:t[a],table:e}):l;if(!(o>1))continue;let s=Math.min(o,u-n);if(s<2)continue;let p=r??(d[a]=new Int32Array(c).fill(1));p[n]=s;for(let e=n+1;e<n+s;e++)p[e]=0;f=!0}}let p=_();for(let n=0;n<c;n++){let i=a[n],o=i.columnDef.spanRows;if(!o||!b(i)||i.getIsGrouped?.()===!0)continue;let s=i.id,c=g(o)?o:void 0,l=new Int32Array(r).fill(1),m=!1,h=-1,_,v=1;for(let a=0;a<r;a++){let r=t[a],o=f?d[a]:void 0,p=o?o[n]:1;if(p===0){h=-1;continue}let g=r.getValue(s);if(h!==-1&&!u[a]&&p===v&&(c?c({anchorRow:t[h],anchorValue:_,column:i,previousRow:t[a-1],row:r,table:e,value:g}):g!=null&&Object.is(g,_))){l[a]=0,l[h]=l[h]+1,m=!0;continue}h=a,_=g,v=p}m&&(p[s]=l)}return{colSpans:d,columnIndexes:l,rowSpans:p,rows:t}}function S(e,t){let n=t.row._cellSpanRowIndex;return n===void 0||e.rows[n]!==t.row?-1:n}function C(e){let t=e.row.table,n=m(t,`getCellSpanIndex`,x),r=n.rowSpans[e.column.id];if(!r)return 1;let i=S(n,e);return i===-1?1:r[i]}function ce(e){let t=e.row.table,n=m(t,`getCellSpanIndex`,x),r=S(n,e);if(r===-1)return 1;let i=n.colSpans[r];if(!i)return 1;let a=n.columnIndexes[e.column.id];return a===void 0?1:i[a]}function le(e){return C(e)===0||ce(e)===0}var ue,de,fe,pe;function me(){return(me=e((()=>{h(),ue=_(),de=_(),fe=[],pe=[]})))()}var w;function T(){return(T=e((()=>{h(),me(),w={getDefaultTableOptions:()=>({enableCellSpanning:!0}),initRowInstanceData:e=>{e._cellSpanRowIndex=-1},assignCellPrototype:(e,t)=>{te(`cellSpanningFeature`,e,t,{cell_getColSpan:{fn:e=>ce(e)},cell_getIsCovered:{fn:e=>le(e)},cell_getRowSpan:{fn:e=>C(e)}})},constructTableAPIs:e=>{v(`cellSpanningFeature`,e,{table_getCellSpanIndex:{fn:()=>x(e),memoDeps:()=>[e.getRowModel().rows,e.atoms.rowPinning?.get(),e.options.keepPinnedRows,e.atoms.columnVisibility?.get(),e.atoms.columnOrder?.get(),e.atoms.columnPinning?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode,e.options.enableCellSpanning]}})}}})))()}function E(e,t){return e.row<t.row+t.rowSpan&&t.row<e.row+e.rowSpan&&e.column<t.column+t.columnSpan&&t.column<e.column+e.columnSpan}function D(e){let t=e.rows.length,n=e.columns.length;if(e.version!==1||!t||!n||t*n>2e4)throw Error(`Недопустимый размер таблицы.`);if(!Number.isInteger(e.headerRowCount)||e.headerRowCount<0||e.headerRowCount>t)throw Error(`Некорректное число строк заголовка.`);let r=new Set,i=e=>{if(!e||r.has(e))throw Error(`Идентификаторы строк, столбцов и ячеек должны быть уникальными.`);r.add(e)};for(let t of e.columns)if(i(t.id),t.width!==null&&(!Number.isFinite(t.width)||t.width<=0))throw Error(`Некорректная ширина столбца.`);for(let t of e.rows){if(i(t.id),t.cells.length!==n)throw Error(`Все строки должны иметь одинаковое число ячеек.`);t.cells.forEach(e=>i(e.id))}let a=new Set;for(let t of e.merges){if(O(e,t),t.rowSpan*t.columnSpan===1)throw Error(`Объединение должно содержать несколько ячеек.`);if(t.row<e.headerRowCount&&t.row+t.rowSpan>e.headerRowCount)throw Error(`Нельзя объединять заголовок с основной частью таблицы.`);for(let e=t.row;e<t.row+t.rowSpan;e++)for(let r=t.column;r<t.column+t.columnSpan;r++){let t=e*n+r;if(a.has(t))throw Error(`Объединённые области пересекаются.`);a.add(t)}}}function O(e,t){if(![t.row,t.column,t.rowSpan,t.columnSpan].every(Number.isInteger)||t.row<0||t.column<0||t.rowSpan<1||t.columnSpan<1||t.row+t.rowSpan>e.rows.length||t.column+t.columnSpan>e.columns.length)throw Error(`Выделение выходит за границы таблицы.`)}function k(e,t){let n={...t,rowSpan:1,columnSpan:1};return O(e,n),e.merges.find(e=>E(e,n))??n}function A(e,t,n){let r={row:Math.min(t.row,n.row),column:Math.min(t.column,n.column),rowSpan:Math.abs(t.row-n.row)+1,columnSpan:Math.abs(t.column-n.column)+1};O(e,r);let i=!0;for(;i;){i=!1;for(let t of e.merges){if(!E(r,t))continue;let e=Math.min(r.row,t.row),n=Math.min(r.column,t.column),a=Math.max(r.row+r.rowSpan,t.row+t.rowSpan)-e,o=Math.max(r.column+r.columnSpan,t.column+t.columnSpan)-n;(e!==r.row||n!==r.column||a!==r.rowSpan||o!==r.columnSpan)&&(r={row:e,column:n,rowSpan:a,columnSpan:o},i=!0)}}return r}function he(e,t,n){D(e);let r=A(e,t,n);if(r.rowSpan*r.columnSpan===1)return e;let i=e.merges.filter(e=>E(e,r));if(i.length===1&&r.row===i[0].row&&r.column===i[0].column&&r.rowSpan===i[0].rowSpan&&r.columnSpan===i[0].columnSpan)return e;let a={...e,merges:[...e.merges.filter(e=>!E(e,r)),r]};return D(a),a}function ge(e,t){D(e);let n=k(e,t);return n.rowSpan*n.columnSpan===1?e:{...e,merges:e.merges.filter(e=>e!==n)}}function j(e,t,n,r,i,a=`body`){D(e);let o=t===`row`?e.rows.length:e.columns.length;if(!Number.isInteger(n)||n<0||n>o)throw Error(`Некорректная позиция вставки.`);if(i.length!==(t===`row`?e.columns.length:e.rows.length))throw Error(`Неверное число новых ячеек.`);if(t===`row`&&(a===`header`?n>e.headerRowCount:n<e.headerRowCount))throw Error(`Строка вставляется вне выбранной части таблицы.`);let s=t===`row`?`rowSpan`:`columnSpan`,c=e.merges.map(e=>n<=e[t]?{...e,[t]:e[t]+1}:n<e[t]+e[s]?{...e,[s]:e[s]+1}:e),l=t===`row`?{...e,merges:c,headerRowCount:e.headerRowCount+ +(a===`header`),rows:[...e.rows.slice(0,n),{id:r,cells:i},...e.rows.slice(n)]}:{...e,merges:c,columns:[...e.columns.slice(0,n),{id:r,width:null},...e.columns.slice(n)],rows:e.rows.map((e,t)=>({...e,cells:[...e.cells.slice(0,n),i[t],...e.cells.slice(n)]}))};return D(l),l}function _e(e,t,n){return O(e,{...t,rowSpan:1,columnSpan:1}),Object.is(e.rows[t.row].cells[t.column].value,n)?e:{...e,rows:e.rows.map((e,r)=>r===t.row?{...e,cells:e.cells.map((e,r)=>r===t.column?{...e,value:n}:e)}:e)}}function M(e,t){D(e);let n=t===`row`?e.rows.length:e.columns.length,r=new Set;for(let n of e.merges){let e=t===`row`?n.rowSpan:n.columnSpan;for(let i=1;i<e;i++)r.add(n[t]+i)}let i=[],a=0;for(let e=1;e<=n;e++)(e===n||!r.has(e))&&(i.push({start:a,count:e-a}),a=e);return i}function ve(e,t,n){let r=M(e,t).find(e=>n>=e.start&&n<e.start+e.count);if(!r)throw Error(`Группа не найдена.`);let i=t===`row`?e.rows.length:e.columns.length;if(r.count===i)throw Error(`В таблице должна остаться хотя бы одна строка и один столбец.`);let a=r.start+r.count,o=e.merges.filter(e=>e[t]<r.start||e[t]>=a).map(e=>e[t]<a?e:{...e,[t]:e[t]-r.count}),s=t===`row`?{...e,merges:o,rows:e.rows.filter((e,t)=>t<r.start||t>=a),headerRowCount:e.headerRowCount-(r.start<e.headerRowCount?r.count:0)}:{...e,merges:o,columns:e.columns.filter((e,t)=>t<r.start||t>=a),rows:e.rows.map(e=>({...e,cells:e.cells.filter((e,t)=>t<r.start||t>=a)}))};return D(s),s}function ye(e,t,n,r){let i=M(e,t),a=i.findIndex(e=>n>=e.start&&n<e.start+e.count);if(a<0)throw Error(`Группа не найдена.`);let s=a+r;if(s<0||s>=i.length||t===`row`&&i[a].start<e.headerRowCount!=i[s].start<e.headerRowCount)return e;let c=o(i,a,r===-1?`up`:`down`).flatMap(e=>Array.from({length:e.count},(t,n)=>e.start+n)),l=new Map(c.map((e,t)=>[e,t])),u=e.merges.map(e=>({...e,[t]:l.get(e[t])??e[t]})),d=t===`row`?{...e,merges:u,rows:c.map(t=>e.rows[t])}:{...e,merges:u,columns:c.map(t=>e.columns[t]),rows:e.rows.map(e=>({...e,cells:c.map(t=>e.cells[t])}))};return D(d),d}function N(){return(N=e((()=>{a()})))()}var P,F,I,L,R,z,B,V,H;function U(){return(U=e((()=>{P=`_6ftNrS`,F=`tji4uW`,I=`nVFFYk`,L=`S7CdzG`,R=`emaqLv`,z=`VLG992`,B=`Hr0ghz`,V=`tuhyZe`,H={editor:P,toolbar:F,help:I,scroll:L,table:R,cellContent:z,inspector:B,structure:V}})))()}function be(e){let t=(0,W.useMemo)(()=>[...e.rows],[e]),n=(0,W.useMemo)(()=>e.columns.map((t,n)=>({id:t.id,accessorFn:(t,r)=>{let i=k(e,{row:r,column:n});return e.rows[i.row].cells[i.column].id},spanRows:!0,spanColumns:({row:t})=>{let r=k(e,{row:t.index,column:n});return r.column===n?r.columnSpan:1}})),[e]);return l({features:xe,data:t,columns:n,getRowId:e=>e.id})}var W,xe;function G(){return(G=e((()=>{W=t(),N(),T(),u(),xe=ee({cellSpanningFeature:w})})))()}function K({editor:e,extendSelection:t,disabled:n,renderCell:r,getCellText:i}){let a=(0,q.useId)(),o=(0,q.useRef)(new Map),s=be(e.document),{document:c,selection:l,focus:u}=e;return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`p`,{id:a,className:H.help,children:`Стрелки — переход между ячейками. Shift + стрелки или Shift + щелчок — выделение диапазона. Содержимое выбранной ячейки редактируется под таблицей.`}),(0,J.jsx)(`div`,{className:H.scroll,children:(0,J.jsxs)(`table`,{role:`grid`,"aria-label":c.caption||`Редактор таблицы`,"aria-describedby":a,"aria-multiselectable":`true`,"aria-disabled":n||void 0,className:H.table,children:[(0,J.jsx)(`colgroup`,{children:c.columns.map(e=>(0,J.jsx)(`col`,{style:{width:e.width??180}},e.id))}),(0,J.jsx)(`tbody`,{children:s.getRowModel().rows.map(a=>(0,J.jsx)(`tr`,{"aria-rowindex":a.index+1,"data-header":a.index<c.headerRowCount||void 0,children:a.getAllCells().map((s,d)=>{if(s.getIsCovered())return null;let f=a.index>=l.row&&a.index<l.row+l.rowSpan&&d>=l.column&&d<l.column+l.columnSpan,p={row:a.index,column:d},m=a.original.cells[d],h=a.index<c.headerRowCount?`th`:`td`;return(0,J.jsxs)(h,{role:a.index<c.headerRowCount?`columnheader`:`gridcell`,ref:e=>{e?o.current.set(m.id,e):o.current.delete(m.id)},rowSpan:s.getRowSpan(),colSpan:s.getColSpan(),"aria-colindex":d+1,"aria-label":`Строка ${a.index+1}, столбец ${d+1}: ${i(m)||`Пустая ячейка`}`,"aria-selected":f,tabIndex:!n&&u.row===a.index&&u.column===d?0:-1,onClick:r=>{n||e.select(p,t||r.shiftKey)},onPointerEnter:t=>{!n&&t.pointerType===`mouse`&&t.buttons===1&&e.select(p,!0)},onKeyDown:t=>{if(n||t.altKey||t.ctrlKey||t.metaKey)return;let r;switch(t.key){case`ArrowRight`:r={...p,column:d+s.getColSpan()};break;case`ArrowLeft`:r={...p,column:d-1};break;case`ArrowDown`:r={...p,row:a.index+s.getRowSpan()};break;case`ArrowUp`:r={...p,row:a.index-1};break;case`Home`:r={...p,column:0};break;case`End`:r={...p,column:c.columns.length-1};break;case` `:t.preventDefault(),e.select(p,t.shiftKey);return;default:return}if(t.preventDefault(),r.row<0||r.column<0||r.row>=c.rows.length||r.column>=c.columns.length)return;let i=k(c,r);e.select(r,t.shiftKey),o.current.get(c.rows[i.row].cells[i.column].id)?.focus()},children:[a.index<c.headerRowCount?(0,J.jsx)(`span`,{className:`visuallyHidden`,children:i(m)||`Пустой заголовок`}):null,(0,J.jsx)(`div`,{inert:!0,className:H.cellContent,children:r(m)})]},s.id)})},a.id))})]})})]})}var q,J;function Se(){return(Se=e((()=>{q=t(),N(),G(),U(),J=i(),K.__docgenInfo={description:`Доступная сетка: roving tabindex, стрелки/Shift и выбор диапазона без drag-only действий.`,methods:[],displayName:`TableEditorGrid`,props:{editor:{required:!0,tsType:{name:`signature`,type:`object`,raw:`{
2
2
  readonly document: TableDocument<T>;
3
3
  readonly selection: TableDocumentRange;
4
4
  readonly focus: TableDocumentPosition;
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-1Nw_zWMi.js";import{i as n,r}from"./react-Bl2r1tuC.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}from"./blocks-DR4JL0hD.js";import{a as f,c as p,i as m,l as h,n as g,o as _,r as v,s as y,t as b,u as x}from"./Tabs.stories-CIVbz7kW.js";function S(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(s,{of:h,parameters:{docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-E950Ehp0.js";import{i as n,r}from"./react-Bl2r1tuC.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}from"./blocks-DGivDYe5.js";import{a as f,c as p,i as m,l as h,n as g,o as _,r as v,s as y,t as b,u as x}from"./Tabs.stories-Bo_Y-dq8.js";function S(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(s,{of:h,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,w.jsx)(u,{children:`Tabs`}),`
3
3
  `,(0,w.jsx)(o,{children:`Набор tabs-компонентов с разделением простого scroll-сценария и составного panel-layout сценария`}),`
4
4
  `,(0,w.jsxs)(t.p,{children:[`После рефакторинга `,(0,w.jsx)(t.code,{children:`tabs`}),` разделены на два независимых сценария:`]}),`
@@ -1,4 +1,4 @@
1
- import{a as e,n as t,r as n}from"./rolldown-runtime-DkW27tQK.js";import{t as r}from"./react-BZJXY1be.js";import{n as i}from"./iframe-1Nw_zWMi.js";import{a,i as o}from"./utils-tg3ibbzi.js";import{n as ee,t as s}from"./ui.module-l7VCYIW-.js";import{i as c,n as te}from"./uiClasses-BblrV9p1.js";import{n as l,t as u}from"./Scrollable-BI1k9ogH.js";import{n as d,t as f}from"./createControlledStoryRender-BouhvX-R.js";import{a as ne,c as p,f as re,i as m,l as h,n as g,o as _,r as ie,s as v,t as y,u as ae}from"./TabsBox-C9g1p4du.js";function oe(e){let{type:t}=e;if(typeof t==`function`){let e=t;return e.displayName??e.name??null}if(typeof t==`object`&&t&&`displayName`in t){let e=t;return typeof e.displayName==`string`?e.displayName:null}return null}function b(e,t){return(0,E.isValidElement)(e)&&oe(e)===t}function x({children:e}){return(0,D.jsx)(D.Fragment,{children:e})}function S({children:e}){return(0,D.jsx)(D.Fragment,{children:e})}function C({children:e}){return(0,D.jsx)(D.Fragment,{children:e})}function w({children:e}){return(0,D.jsx)(D.Fragment,{children:e})}function se(e,t){let n=null,r=null,i=null;for(let a of E.Children.toArray(e)){if(!(0,E.isValidElement)(a))throw Error(`TabsLayout.Tab "${t}" поддерживает только дочерние элементы TabsLayout.Toolbar, TabsLayout.Content и TabsLayout.Footer.`);if(b(a,k)){if(n)throw Error(`TabsLayout.Tab "${t}" содержит более одного блока TabsLayout.Toolbar.`);n=a.props;continue}if(b(a,A)){if(r)throw Error(`TabsLayout.Tab "${t}" содержит более одного блока TabsLayout.Content.`);r=a.props;continue}if(b(a,j)){if(i)throw Error(`TabsLayout.Tab "${t}" содержит более одного блока TabsLayout.Footer.`);i=a.props;continue}throw Error(`TabsLayout.Tab "${t}" поддерживает только дочерние элементы TabsLayout.Toolbar, TabsLayout.Content и TabsLayout.Footer.`)}if(!r)throw Error(`TabsLayout.Tab "${t}" должен содержать блок TabsLayout.Content.`);return{toolbar:n,content:r,footer:i}}function ce(e){return E.Children.toArray(e).map(e=>{if(!b(e,O))throw Error(`TabsLayout принимает только дочерние элементы TabsLayout.Tab.`);return{id:e.props.id,title:e.props.title,disabled:e.props.disabled,...se(e.props.children,e.props.id)}})}function T({children:e,value:t,defaultValue:n,onValueChange:r,className:i,orientation:o=`horizontal`,activationMode:s=`manual`,mountStrategy:c=`lazy`,loop:l=!0,tone:u=`primary`,clean:d=!1,"aria-label":f,"aria-labelledby":p}){let m=(0,E.useMemo)(()=>ce(e),[e]),h=ae({items:m,value:t,defaultValue:n,onValueChange:r,orientation:o,activationMode:s,loop:l}),g=a(v.tabsContainer,d?v.clean:ee.uiFilledPanel,v[o],te(u),i),_=a(v.panels,v.layoutPanels);return(0,D.jsxs)(`div`,{className:g,children:[(0,D.jsx)(`div`,{className:v.tabsWrapper,children:(0,D.jsx)(ie,{items:m,state:h,className:v.tabs,ariaLabel:f,ariaLabelledBy:p})}),(0,D.jsx)(`div`,{className:_,children:m.map(e=>{let t=e.id===h.selectedTabId,n=re({mountStrategy:c,isSelected:t,isVisited:h.isVisited(e.id)}),r=`${e.toolbar?`auto `:``}minmax(0, 1fr)${e.footer?` auto`:``}`;return(0,D.jsx)(ne,{tabId:e.id,isSelected:t,className:v.panel,getTabElementId:h.getTabElementId,getPanelElementId:h.getPanelElementId,children:n?(0,D.jsxs)(`div`,{className:v.layoutPanel,style:{gridTemplateRows:r},children:[e.toolbar?(0,D.jsx)(`div`,{className:a(v.layoutSection,e.toolbar.className),children:e.toolbar.children}):null,(0,D.jsx)(`div`,{className:a(v.layoutSection,v.layoutContent,e.content.className),children:e.content.children}),e.footer?(0,D.jsx)(`div`,{className:a(v.layoutSection,e.footer.className),children:e.footer.children}):null]}):null},e.id)})})]})}var E,D,O,k,A,j;function M(){return(M=t((()=>{E=e(r(),1),o(),s(),c(),h(),p(),_(),m(),D=i(),O=`TabsLayout.Tab`,k=`TabsLayout.Toolbar`,A=`TabsLayout.Content`,j=`TabsLayout.Footer`,x.displayName=O,S.displayName=k,C.displayName=A,w.displayName=j,T.Tab=x,T.Toolbar=S,T.Content=C,T.Footer=w,T.__docgenInfo={description:`Compound-оболочка tabs для составных panel-layout сценариев.
1
+ import{a as e,n as t,r as n}from"./rolldown-runtime-DkW27tQK.js";import{t as r}from"./react-BZJXY1be.js";import{n as i}from"./iframe-E950Ehp0.js";import{a,i as o}from"./utils-tg3ibbzi.js";import{n as ee,t as s}from"./ui.module-l7VCYIW-.js";import{i as c,n as te}from"./uiClasses-BblrV9p1.js";import{n as l,t as u}from"./Scrollable-BBYov1Hn.js";import{n as d,t as f}from"./createControlledStoryRender-BouhvX-R.js";import{a as ne,c as p,f as re,i as m,l as h,n as g,o as _,r as ie,s as v,t as y,u as ae}from"./TabsBox-BMNvHsCH.js";function oe(e){let{type:t}=e;if(typeof t==`function`){let e=t;return e.displayName??e.name??null}if(typeof t==`object`&&t&&`displayName`in t){let e=t;return typeof e.displayName==`string`?e.displayName:null}return null}function b(e,t){return(0,E.isValidElement)(e)&&oe(e)===t}function x({children:e}){return(0,D.jsx)(D.Fragment,{children:e})}function S({children:e}){return(0,D.jsx)(D.Fragment,{children:e})}function C({children:e}){return(0,D.jsx)(D.Fragment,{children:e})}function w({children:e}){return(0,D.jsx)(D.Fragment,{children:e})}function se(e,t){let n=null,r=null,i=null;for(let a of E.Children.toArray(e)){if(!(0,E.isValidElement)(a))throw Error(`TabsLayout.Tab "${t}" поддерживает только дочерние элементы TabsLayout.Toolbar, TabsLayout.Content и TabsLayout.Footer.`);if(b(a,k)){if(n)throw Error(`TabsLayout.Tab "${t}" содержит более одного блока TabsLayout.Toolbar.`);n=a.props;continue}if(b(a,A)){if(r)throw Error(`TabsLayout.Tab "${t}" содержит более одного блока TabsLayout.Content.`);r=a.props;continue}if(b(a,j)){if(i)throw Error(`TabsLayout.Tab "${t}" содержит более одного блока TabsLayout.Footer.`);i=a.props;continue}throw Error(`TabsLayout.Tab "${t}" поддерживает только дочерние элементы TabsLayout.Toolbar, TabsLayout.Content и TabsLayout.Footer.`)}if(!r)throw Error(`TabsLayout.Tab "${t}" должен содержать блок TabsLayout.Content.`);return{toolbar:n,content:r,footer:i}}function ce(e){return E.Children.toArray(e).map(e=>{if(!b(e,O))throw Error(`TabsLayout принимает только дочерние элементы TabsLayout.Tab.`);return{id:e.props.id,title:e.props.title,disabled:e.props.disabled,...se(e.props.children,e.props.id)}})}function T({children:e,value:t,defaultValue:n,onValueChange:r,className:i,orientation:o=`horizontal`,activationMode:s=`manual`,mountStrategy:c=`lazy`,loop:l=!0,tone:u=`primary`,clean:d=!1,"aria-label":f,"aria-labelledby":p}){let m=(0,E.useMemo)(()=>ce(e),[e]),h=ae({items:m,value:t,defaultValue:n,onValueChange:r,orientation:o,activationMode:s,loop:l}),g=a(v.tabsContainer,d?v.clean:ee.uiFilledPanel,v[o],te(u),i),_=a(v.panels,v.layoutPanels);return(0,D.jsxs)(`div`,{className:g,children:[(0,D.jsx)(`div`,{className:v.tabsWrapper,children:(0,D.jsx)(ie,{items:m,state:h,className:v.tabs,ariaLabel:f,ariaLabelledBy:p})}),(0,D.jsx)(`div`,{className:_,children:m.map(e=>{let t=e.id===h.selectedTabId,n=re({mountStrategy:c,isSelected:t,isVisited:h.isVisited(e.id)}),r=`${e.toolbar?`auto `:``}minmax(0, 1fr)${e.footer?` auto`:``}`;return(0,D.jsx)(ne,{tabId:e.id,isSelected:t,className:v.panel,getTabElementId:h.getTabElementId,getPanelElementId:h.getPanelElementId,children:n?(0,D.jsxs)(`div`,{className:v.layoutPanel,style:{gridTemplateRows:r},children:[e.toolbar?(0,D.jsx)(`div`,{className:a(v.layoutSection,e.toolbar.className),children:e.toolbar.children}):null,(0,D.jsx)(`div`,{className:a(v.layoutSection,v.layoutContent,e.content.className),children:e.content.children}),e.footer?(0,D.jsx)(`div`,{className:a(v.layoutSection,e.footer.className),children:e.footer.children}):null]}):null},e.id)})})]})}var E,D,O,k,A,j;function M(){return(M=t((()=>{E=e(r(),1),o(),s(),c(),h(),p(),_(),m(),D=i(),O=`TabsLayout.Tab`,k=`TabsLayout.Toolbar`,A=`TabsLayout.Content`,j=`TabsLayout.Footer`,x.displayName=O,S.displayName=k,C.displayName=A,w.displayName=j,T.Tab=x,T.Toolbar=S,T.Content=C,T.Footer=w,T.__docgenInfo={description:`Compound-оболочка tabs для составных panel-layout сценариев.
2
2
  Сам компонент управляет только переключением и каркасом панели.`,methods:[{name:`Tab`,docblock:null,modifiers:[`static`],params:[{name:`{ children }: TabsLayoutTabProps`,optional:!1,type:{name:`TabsLayoutTabProps`,alias:`TabsLayoutTabProps`}}],returns:null},{name:`Toolbar`,docblock:null,modifiers:[`static`],params:[{name:`{ children }: TabsLayoutSectionProps`,optional:!1,type:{name:`TabsLayoutSectionProps`,alias:`TabsLayoutSectionProps`}}],returns:null},{name:`Content`,docblock:null,modifiers:[`static`],params:[{name:`{ children }: TabsLayoutSectionProps`,optional:!1,type:{name:`TabsLayoutSectionProps`,alias:`TabsLayoutSectionProps`}}],returns:null},{name:`Footer`,docblock:null,modifiers:[`static`],params:[{name:`{ children }: TabsLayoutSectionProps`,optional:!1,type:{name:`TabsLayoutSectionProps`,alias:`TabsLayoutSectionProps`}}],returns:null}],displayName:`TabsLayout`,props:{value:{required:!1,tsType:{name:`string`},description:``},defaultValue:{required:!1,tsType:{name:`string`},description:``},onValueChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: string) => void`,signature:{arguments:[{type:{name:`string`},name:`value`}],return:{name:`void`}}},description:``},orientation:{required:!1,tsType:{name:`union`,raw:`"horizontal" | "vertical"`,elements:[{name:`literal`,value:`"horizontal"`},{name:`literal`,value:`"vertical"`}]},description:``,defaultValue:{value:`"horizontal"`,computed:!1}},activationMode:{required:!1,tsType:{name:`union`,raw:`"automatic" | "manual"`,elements:[{name:`literal`,value:`"automatic"`},{name:`literal`,value:`"manual"`}]},description:``,defaultValue:{value:`"manual"`,computed:!1}},mountStrategy:{required:!1,tsType:{name:`union`,raw:`"unmount" | "lazy" | "keep-mounted"`,elements:[{name:`literal`,value:`"unmount"`},{name:`literal`,value:`"lazy"`},{name:`literal`,value:`"keep-mounted"`}]},description:``,defaultValue:{value:`"lazy"`,computed:!1}},loop:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`true`,computed:!1}},tone:{required:!1,tsType:{name:`union`,raw:`"primary" | "secondary" | "tertiary"`,elements:[{name:`literal`,value:`"primary"`},{name:`literal`,value:`"secondary"`},{name:`literal`,value:`"tertiary"`}]},description:``,defaultValue:{value:`"primary"`,computed:!1}},clean:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`false`,computed:!1}},className:{required:!1,tsType:{name:`string`},description:``},"aria-label":{required:!1,tsType:{name:`string`},description:``},"aria-labelledby":{required:!1,tsType:{name:`string`},description:``},children:{required:!0,tsType:{name:`ReactNode`},description:``}}}})))()}var le=n({BoxBasic:()=>G,BoxControlled:()=>K,BoxMountStrategies:()=>J,BoxVertical:()=>q,DisabledTabs:()=>Y,Empty:()=>Q,LayoutPanels:()=>X,Loading:()=>Z,__namedExportsOrder:()=>$,default:()=>U});function N({label:e}){let[t,n]=(0,F.useState)(0);return(0,I.jsxs)(`div`,{style:R,children:[(0,I.jsxs)(`div`,{children:[`Панель: `,e]}),(0,I.jsxs)(`div`,{children:[`Локальный счётчик: `,t]}),(0,I.jsx)(`button`,{type:`button`,onClick:()=>n(e=>e+1),children:`Увеличить`})]})}function P(e){return f((t,n)=>{let r=t.value??t.defaultValue,i=(0,I.jsx)(y,{...t,value:r,onValueChange:e=>{t.onValueChange?.(e),n({value:e})}});return e===void 0?i:(0,I.jsx)(`div`,{style:{height:e},children:i})})}var F,I,L,R,z,B,V,H,U,W,G,K,q,J,Y,X,Z,Q,$;function ue(){return(ue=t((()=>{F=r(),g(),M(),d(),l(),I=i(),{fn:L}=__STORYBOOK_MODULE_TEST__,R={padding:16,display:`grid`,gap:12},z=[{id:`profile`,title:`Профиль`,content:(0,I.jsx)(`div`,{style:R,children:`Карточка пользователя и основные поля профиля.`})},{id:`settings`,title:`Настройки`,content:(0,I.jsx)(`div`,{style:R,children:`Параметры интерфейса, уведомлений и доступа.`})},{id:`history`,title:`История`,content:(0,I.jsx)(`div`,{style:R,children:`Последние действия, комментарии и изменения.`})}],B=[{id:`first`,title:`Первая`,content:(0,I.jsx)(N,{label:`Первая`})},{id:`second`,title:`Вторая`,content:(0,I.jsx)(N,{label:`Вторая`})},{id:`third`,title:`Третья`,content:(0,I.jsx)(N,{label:`Третья`})}],V=[{id:`overview`,title:`Обзор`,content:(0,I.jsx)(`div`,{style:R,children:`Раздел доступен сразу.`})},{id:`analytics`,title:`Аналитика`,disabled:!0,content:(0,I.jsx)(`div`,{style:R,children:`Пока недоступно.`})},{id:`history`,title:`История`,content:(0,I.jsx)(`div`,{style:R,children:`История изменений и действий.`})}],H=Array.from({length:12},(e,t)=>`Элемент ${t+1}`),U={title:`UI/Tabs`,component:y,args:{items:z,value:`profile`,onValueChange:L(),orientation:`horizontal`,activationMode:`automatic`,mountStrategy:`unmount`,isLoading:!1,loadingText:`Загрузка вкладок...`,clean:!1,loop:!0},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{items:{description:"Набор вкладок для `TabsBox`. Каждая вкладка задаётся через `id`, `title`, `content` и опциональный `disabled`.",control:!1},value:{description:`Активная вкладка в controlled-режиме.`,control:`text`},defaultValue:{description:`Начальная вкладка в uncontrolled-режиме.`,control:`text`},onValueChange:{description:`Вызывается при смене активной вкладки.`,control:!1},orientation:{description:`Направление списка вкладок.`,control:`inline-radio`,options:[`horizontal`,`vertical`]},activationMode:{description:"Режим клавиатурной активации: `automatic` меняет вкладку стрелками, `manual` только переводит фокус.",control:`inline-radio`,options:[`automatic`,`manual`]},mountStrategy:{description:"Политика монтирования панелей: `unmount`, `lazy` или `keep-mounted`.",control:`inline-radio`,options:[`unmount`,`lazy`,`keep-mounted`]},clean:{description:`Убирает базовые padding и surface-оформление panel-области.`,control:`boolean`},loop:{description:`Разрешает циклическую навигацию стрелками и Home/End.`,control:`boolean`},isLoading:{description:"Показывает loading-состояние `TabsBox`.",control:`boolean`},loadingText:{description:`Текст внутри loading-состояния.`,control:`text`},"aria-label":{description:"Собственное доступное имя `tablist`, если рядом нет видимого заголовка.",control:`text`},"aria-labelledby":{description:"Ссылка на внешний заголовок `tablist` вместо текстовой ARIA-метки.",control:`text`}}},W=f((e,t)=>{let n=e.value??e.defaultValue??`details`;return(0,I.jsx)(`div`,{style:{height:360},children:(0,I.jsxs)(T,{value:n,defaultValue:e.defaultValue,onValueChange:n=>{e.onValueChange?.(n),t({value:n})},orientation:e.orientation,activationMode:e.activationMode,mountStrategy:e.mountStrategy,loop:e.loop,clean:e.clean,className:e.className,"aria-label":e[`aria-label`],"aria-labelledby":e[`aria-labelledby`],children:[(0,I.jsxs)(T.Tab,{id:`details`,title:`Детали`,children:[(0,I.jsx)(T.Toolbar,{children:(0,I.jsx)(`div`,{className:`surface0 border radiusSm paddingSm`,children:`Панель инструментов вне scroll-области.`})}),(0,I.jsx)(T.Content,{children:(0,I.jsxs)(`div`,{style:{display:`grid`,gridTemplateColumns:`1fr 1fr`,gap:12,height:`100%`},children:[(0,I.jsx)(u,{className:`surface0 border radiusSm paddingSm h100`,children:(0,I.jsx)(`div`,{role:`region`,"aria-label":`Содержимое левой колонки`,tabIndex:0,children:H.map(e=>(0,I.jsxs)(`div`,{className:`paddingBlockXs`,children:[`Левая колонка: `,e]},`left-${e}`))})}),(0,I.jsx)(u,{className:`surface0 border radiusSm paddingSm h100`,children:(0,I.jsx)(`div`,{role:`region`,"aria-label":`Содержимое правой колонки`,tabIndex:0,children:H.map(e=>(0,I.jsxs)(`div`,{className:`paddingBlockXs`,children:[`Правая колонка: `,e]},`right-${e}`))})})]})}),(0,I.jsx)(T.Footer,{children:(0,I.jsx)(`div`,{className:`surface0 border radiusSm paddingSm`,children:`Футер тоже исключён из scroll-контента.`})})]}),(0,I.jsx)(T.Tab,{id:`history`,title:`История`,children:(0,I.jsx)(T.Content,{children:(0,I.jsx)(u,{className:`surface0 border radiusSm paddingSm h100`,children:(0,I.jsx)(`div`,{role:`region`,"aria-label":`История изменений`,tabIndex:0,children:H.map(e=>(0,I.jsxs)(`div`,{className:`paddingBlockXs`,children:[`История изменения: `,e]},`history-${e}`))})})})})]})})}),G={args:{"aria-label":`Основные разделы профиля`},render:P()},K={args:{value:`settings`,"aria-label":`Управляемые вкладки`},render:P()},q={args:{orientation:`vertical`,"aria-label":`Вертикальные вкладки`},render:P(320)},J={args:{items:B,mountStrategy:`lazy`,"aria-label":`Демонстрация стратегий монтирования`},render:P()},Y={args:{items:V,value:`overview`,"aria-label":`Вкладки с недоступным разделом`},render:P()},X={args:{value:`details`,onValueChange:L(),orientation:`horizontal`,activationMode:`manual`,mountStrategy:`lazy`,clean:!1,loop:!0,"aria-label":`Составные панели документа`},render:W},Z={args:{isLoading:!0,items:z},render:P()},Q={args:{items:[],value:void 0},render:P()},G.parameters={...G.parameters,docs:{...G.parameters?.docs,source:{originalSource:`{
3
3
  args: {
4
4
  "aria-label": "Основные разделы профиля"