@ryuzaki13/react-foundation-ui 1.6.14 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/dist/advanced-search/index.js +1 -1
  2. package/dist/base-table/index.js +2 -2
  3. package/dist/base-table/lib/columnPinning.d.ts +15 -17
  4. package/dist/base-table/lib/columnPinning.d.ts.map +1 -1
  5. package/dist/base-table/lib/mergeDuplicates.d.ts +4 -4
  6. package/dist/base-table/lib/mergeDuplicates.d.ts.map +1 -1
  7. package/dist/base-table/model/useTableColumnPinning.d.ts +2 -2
  8. package/dist/base-table/model/useTableColumnVisibility.d.ts +7 -6
  9. package/dist/base-table/model/useTableColumnVisibility.d.ts.map +1 -1
  10. package/dist/base-table/ui/BaseTable.d.ts +8 -9
  11. package/dist/base-table/ui/BaseTable.d.ts.map +1 -1
  12. package/dist/base-table/ui/BaseTableHeaderCell.d.ts +6 -6
  13. package/dist/base-table/ui/BaseTableHeaderCell.d.ts.map +1 -1
  14. package/dist/chunks/{base-table-CTafaxo2.js → base-table-DNSYOO9t.js} +29 -29
  15. package/dist/chunks/base-table-DNSYOO9t.js.map +1 -0
  16. package/dist/chunks/{table-DOwANXnt.js → table-RO4dfMAj.js} +9 -9
  17. package/dist/chunks/table-RO4dfMAj.js.map +1 -0
  18. package/dist/simple-table/SimpleTable.d.ts +2 -2
  19. package/dist/simple-table/SimpleTable.d.ts.map +1 -1
  20. package/dist/simple-table/index.js +7 -10
  21. package/dist/simple-table/index.js.map +1 -1
  22. package/dist/styles.css +1 -1
  23. package/dist/table/Table.d.ts +7 -8
  24. package/dist/table/Table.d.ts.map +1 -1
  25. package/dist/table/index.js +1 -1
  26. package/dist/tree-table/TreeTable.d.ts +7 -8
  27. package/dist/tree-table/TreeTable.d.ts.map +1 -1
  28. package/dist/tree-table/index.js +104 -105
  29. package/dist/tree-table/index.js.map +1 -1
  30. package/package.json +9 -9
  31. package/src/styles/config/_index.scss +9 -9
  32. package/src/styles/mixins/_mixin.scss +28 -28
  33. package/storybook-static/assets/{Badge-BcdRczMk.js → Badge-Dvx1zhPb.js} +1 -1
  34. package/storybook-static/assets/{Badge.stories-Ct1rOXKb.js → Badge.stories-0OqfwxFw.js} +1 -1
  35. package/storybook-static/assets/{BadgeList-B0uCxTjK.js → BadgeList-y-uBOP3g.js} +1 -1
  36. package/storybook-static/assets/{Button-SSIgKYw0.js → Button-C80gfqoH.js} +1 -1
  37. package/storybook-static/assets/{Button-BB1nGfBt.js → Button-Do2mwgAg.js} +1 -1
  38. package/storybook-static/assets/{Button.stories-ZLeozBpB.js → Button.stories-D8Fw6nud.js} +1 -1
  39. package/storybook-static/assets/{CalendarView-CYrBwuDb.js → CalendarView--kZXxq2R.js} +1 -1
  40. package/storybook-static/assets/{CheckBox-BhyFAnPZ.js → CheckBox-B75CNLqu.js} +1 -1
  41. package/storybook-static/assets/{CheckBox-Blz1oxQt.js → CheckBox-BLhKCbdy.js} +1 -1
  42. package/storybook-static/assets/{CheckBox.stories-CaIkqi5f.js → CheckBox.stories-B6oVA8el.js} +1 -1
  43. package/storybook-static/assets/{Color-6AOWCN3U-CCVpVcK8.js → Color-6AOWCN3U-cvznI3uO.js} +1 -1
  44. package/storybook-static/assets/{ContextMenu-1AD4f0i0.js → ContextMenu-CO0idIWo.js} +1 -1
  45. package/storybook-static/assets/{ContextMenu-DXD_0XB9.js → ContextMenu-fNZVzUvQ.js} +1 -1
  46. package/storybook-static/assets/{ContextMenu.stories-DFmB0X5K.js → ContextMenu.stories-0nmobIh6.js} +1 -1
  47. package/storybook-static/assets/{DateInput-BOLDxsXz.js → DateInput-C2In05Rg.js} +1 -1
  48. package/storybook-static/assets/{DateInput-C9p85ceA.js → DateInput-D2rfcbf3.js} +1 -1
  49. package/storybook-static/assets/{DateInput.stories-Ba3IIPg3.js → DateInput.stories-JUkITh6A.js} +1 -1
  50. package/storybook-static/assets/{DateRangePresetSelect-C_4NfC5d.js → DateRangePresetSelect-Qc1kiswO.js} +1 -1
  51. package/storybook-static/assets/{DateRangePresetSelect-C8nw0-vH.js → DateRangePresetSelect-nJgrTbCb.js} +1 -1
  52. package/storybook-static/assets/{DateRangePresetSelect.stories-DKQJMXX5.js → DateRangePresetSelect.stories-ZCKuMVv1.js} +1 -1
  53. package/storybook-static/assets/{Detail-BTLyY-Cx.js → Detail-pOYJZCE7.js} +1 -1
  54. package/storybook-static/assets/{Detail.stories-sbG-B89r.js → Detail.stories-zt0s1IF8.js} +1 -1
  55. package/storybook-static/assets/{Dialog-DEOBYclm.js → Dialog-0qof8LAi.js} +1 -1
  56. package/storybook-static/assets/{Dialog-DxhVyxTw.js → Dialog-yNCOXo0U.js} +1 -1
  57. package/storybook-static/assets/{Dialog.stories-BkDHW55c.js → Dialog.stories-B8N3aCaV.js} +1 -1
  58. package/storybook-static/assets/{Disclosure-DfRw5j-s.js → Disclosure-1aczsOfE.js} +1 -1
  59. package/storybook-static/assets/{Disclosure.stories-3EiNEI0t.js → Disclosure.stories-BHF7zV4r.js} +1 -1
  60. package/storybook-static/assets/{DisclosureGroup-BhIPr7Zx.js → DisclosureGroup-1UIF1dzA.js} +1 -1
  61. package/storybook-static/assets/{DocsRenderer-JROSPFPF-DEVDQ4Qo.js → DocsRenderer-JROSPFPF-C3ElfDK6.js} +1 -1
  62. package/storybook-static/assets/{DropZone-CTDbnKbh.js → DropZone-BXwkEyR-.js} +1 -1
  63. package/storybook-static/assets/{DropZone-CgSbRlAS.js → DropZone-DcnHdyOy.js} +1 -1
  64. package/storybook-static/assets/{DropZone.stories-C7HI-Ded.js → DropZone.stories-C__hp7nZ.js} +1 -1
  65. package/storybook-static/assets/{DropdownMenu-D2uTldgN.js → DropdownMenu-Cn3NEWML.js} +1 -1
  66. package/storybook-static/assets/{ExpandableActionPanel-C49pE4fu.js → ExpandableActionPanel-DRmbAqvH.js} +1 -1
  67. package/storybook-static/assets/{ExpandableActionPanel.stories-DaUA0ZwQ.js → ExpandableActionPanel.stories-CILdKlLi.js} +1 -1
  68. package/storybook-static/assets/{Flex-X9798UxV.js → Flex-sxipWyth.js} +1 -1
  69. package/storybook-static/assets/{Flex.stories-Dz6oGUUF.js → Flex.stories-DY8V2sbR.js} +1 -1
  70. package/storybook-static/assets/{FloatingPopover-E_Ew4-wi.js → FloatingPopover-CNZzGjfO.js} +1 -1
  71. package/storybook-static/assets/{FormattedTableCell-CY3E21k8.css → FormattedTableCell-AZc2IHfK.css} +1 -1
  72. package/storybook-static/assets/FormattedTableCell-DG4dVFTa.js +15 -0
  73. package/storybook-static/assets/{Grid-BCciNn-A.js → Grid-D2wN6WmI.js} +1 -1
  74. package/storybook-static/assets/{Grid.stories-DgvZoNuI.js → Grid.stories-Dtya61zz.js} +1 -1
  75. package/storybook-static/assets/{ImageCropper.stories-D_wOvbUS.js → ImageCropper.stories-CQOvZs9k.js} +1 -1
  76. package/storybook-static/assets/{ImageRenderer-xnNcHtPe.js → ImageRenderer-C8mxg5a9.js} +1 -1
  77. package/storybook-static/assets/{ImageRenderer.stories-D9JpdJiV.js → ImageRenderer.stories-ulHRIV84.js} +1 -1
  78. package/storybook-static/assets/{ImageView.stories-ByWZ__3N.js → ImageView.stories-DfO8LRNv.js} +1 -1
  79. package/storybook-static/assets/{ImageViewer.stories-B0BzHjEk.js → ImageViewer.stories-BC2AIOFa.js} +2 -2
  80. package/storybook-static/assets/{ImageViewerRuntime-BD3738hF.js → ImageViewerRuntime-D3u-RNDY.js} +1 -1
  81. package/storybook-static/assets/{Input-BH1AkOMS.js → Input-BrWASIXE.js} +1 -1
  82. package/storybook-static/assets/{Input-MdLAT_u1.js → Input-Duo7u72d.js} +1 -1
  83. package/storybook-static/assets/{Input.stories-D-ZQvpnN.js → Input.stories--i9k07KI.js} +1 -1
  84. package/storybook-static/assets/{InputDateTime-BfTkj-YX.js → InputDateTime-DcZRgiPg.js} +1 -1
  85. package/storybook-static/assets/{InputDateTime.stories-uU4v4z0C.js → InputDateTime.stories-Dt6Y1CZ2.js} +1 -1
  86. package/storybook-static/assets/{InputFile-DEHnLzej.js → InputFile-BiLD06iA.js} +1 -1
  87. package/storybook-static/assets/{InputFile-s9ue0Ubw.js → InputFile-Cj-m_fo4.js} +1 -1
  88. package/storybook-static/assets/{InputFile.stories-DqUzUqeP.js → InputFile.stories-akX4tW3o.js} +1 -1
  89. package/storybook-static/assets/{InputFiles-DAFA8pPS.js → InputFiles-6FDWUpPw.js} +1 -1
  90. package/storybook-static/assets/{InputFiles-BO8bPwVE.js → InputFiles-B8Erga76.js} +1 -1
  91. package/storybook-static/assets/{InputFiles.stories-DwqQzJk0.js → InputFiles.stories-CHQIzkT-.js} +1 -1
  92. package/storybook-static/assets/{InputFilesList-zkl234mc.js → InputFilesList-B2ED3xeD.js} +1 -1
  93. package/storybook-static/assets/{InputImage-BO2IEU16.js → InputImage-Csz6DuXw.js} +1 -1
  94. package/storybook-static/assets/{InputImage-BGCpqqw2.js → InputImage-DgEux6nu.js} +1 -1
  95. package/storybook-static/assets/{InputImage.stories-D_NGBLXT.js → InputImage.stories-BQMt1D7p.js} +1 -1
  96. package/storybook-static/assets/{InteractiveComponents-Dwh7s7t2.js → InteractiveComponents-Dsk4_Vr2.js} +1 -1
  97. package/storybook-static/assets/{InteractiveComponents.stories-DYepXQCx.js → InteractiveComponents.stories-DkOUo1Hs.js} +1 -1
  98. package/storybook-static/assets/{LayoutPicker-BlhMQvHT.js → LayoutPicker-BYQGwA2A.js} +1 -1
  99. package/storybook-static/assets/{LayoutPicker-CkE9m2jl.js → LayoutPicker-CtU_BRSU.js} +1 -1
  100. package/storybook-static/assets/{LayoutPicker.stories-BxuR4zzW.js → LayoutPicker.stories-u-llXrmg.js} +1 -1
  101. package/storybook-static/assets/{Listbox-oa6-dpOF.js → Listbox-CRpGe74L.js} +1 -1
  102. package/storybook-static/assets/{Listbox-C1Rqsgp0.js → Listbox-D-w3s2rV.js} +1 -1
  103. package/storybook-static/assets/{Listbox.stories-B7F4BYQe.js → Listbox.stories-DNgm_jEg.js} +1 -1
  104. package/storybook-static/assets/{Modal-DzXqf1Ly.js → Modal-BCEfdMRV.js} +1 -1
  105. package/storybook-static/assets/{Modal.stories-CG1_xlyh.js → Modal.stories-DgluP-Zg.js} +1 -1
  106. package/storybook-static/assets/{ModalManagerProvider-CZYnO2lF.js → ModalManagerProvider-DB1CpShR.js} +1 -1
  107. package/storybook-static/assets/{MultiSelect-4G-iQPYH.js → MultiSelect-CtPVgzw3.js} +1 -1
  108. package/storybook-static/assets/{MultiSelect-D6VN1ten.js → MultiSelect-DXazv8Gk.js} +1 -1
  109. package/storybook-static/assets/{MultiSelect.stories-B8yQ13Tn.js → MultiSelect.stories-m3lK4whp.js} +1 -1
  110. package/storybook-static/assets/{NoData-BgHie4j3.js → NoData-tXPTJtqs.js} +1 -1
  111. package/storybook-static/assets/{NotificationsHost-CFfzFTyd.js → NotificationsHost-Cns_wFoV.js} +1 -1
  112. package/storybook-static/assets/{NotificationsHost.stories-D-EoSpNR.js → NotificationsHost.stories-Bl6cz2bV.js} +1 -1
  113. package/storybook-static/assets/{ODataMultiSelect-DTsiTKot.js → ODataMultiSelect-6Df5Fkah.js} +1 -1
  114. package/storybook-static/assets/{ODataMultiSelect.stories-DCO4zPF4.js → ODataMultiSelect.stories-B6yPCpTe.js} +1 -1
  115. package/storybook-static/assets/{ODataSelect-CaH2bcCK.js → ODataSelect-BO5s66q2.js} +1 -1
  116. package/storybook-static/assets/{ODataSelect.stories-B0tv4wL4.js → ODataSelect.stories-C0zyeXlC.js} +1 -1
  117. package/storybook-static/assets/{ODataTreeMultiSelect-Dyek9WdW.js → ODataTreeMultiSelect-OSArfN7U.js} +1 -1
  118. package/storybook-static/assets/{ODataTreeMultiSelect.stories-CcACO93g.js → ODataTreeMultiSelect.stories-DIO3n7N6.js} +1 -1
  119. package/storybook-static/assets/{ODataTreeSelect-CUz7YiVU.js → ODataTreeSelect-C2YNVppX.js} +1 -1
  120. package/storybook-static/assets/{ODataTreeSelect.stories-wGnk-ffy.js → ODataTreeSelect.stories-BCjXst_-.js} +1 -1
  121. package/storybook-static/assets/{OneStepScroller-o5Gb3vjr.js → OneStepScroller-CBqY-Bqn.js} +1 -1
  122. package/storybook-static/assets/{PeriodSelect-faoKK2vP.js → PeriodSelect-8I2DZE_l.js} +1 -1
  123. package/storybook-static/assets/{PeriodSelect-ZJjARhjl.js → PeriodSelect-D9DwWI_-.js} +1 -1
  124. package/storybook-static/assets/{PeriodSelect.stories-CoXVK3T7.js → PeriodSelect.stories-Dvdfl6jl.js} +1 -1
  125. package/storybook-static/assets/{PickerSelectionToolbar-D4SqZyNs.js → PickerSelectionToolbar-DTFaKHYJ.js} +1 -1
  126. package/storybook-static/assets/{PickerTriggerActions-D0jutGDl.js → PickerTriggerActions-DB5hWOPs.js} +1 -1
  127. package/storybook-static/assets/{Popover-B94TkkrH.js → Popover-DDuVgt46.js} +1 -1
  128. package/storybook-static/assets/{Popover-DDa4eeVc.js → Popover-x1KDnoku.js} +1 -1
  129. package/storybook-static/assets/{Popover.stories-BpIi9J1K.js → Popover.stories-JeW5d8gm.js} +1 -1
  130. package/storybook-static/assets/{PresetRangeDateInput-D2J7DKKw.js → PresetRangeDateInput-C4gbhz_V.js} +1 -1
  131. package/storybook-static/assets/{PresetRangeDateInput-CXwvyN5D.js → PresetRangeDateInput-Csq8RBK7.js} +1 -1
  132. package/storybook-static/assets/{PresetRangeDateInput.stories-BLMBzOHq.js → PresetRangeDateInput.stories-mPfnN7w9.js} +1 -1
  133. package/storybook-static/assets/{PresetSelect--NNO5Ddu.js → PresetSelect-D5XN8_y3.js} +1 -1
  134. package/storybook-static/assets/{RadioButton-CwH2Hesc.js → RadioButton-3vNTYzok.js} +1 -1
  135. package/storybook-static/assets/{RadioButton-BMIDEoWy.js → RadioButton-DqKb7dga.js} +1 -1
  136. package/storybook-static/assets/{RadioButton.stories-N2cIOAgo.js → RadioButton.stories-DEtB6-Gq.js} +1 -1
  137. package/storybook-static/assets/{RadioGroup-BScP9Lpg.js → RadioGroup-BVH61YyU.js} +1 -1
  138. package/storybook-static/assets/{RadioGroup-CErOSI5g.js → RadioGroup-CxSDxT4Z.js} +1 -1
  139. package/storybook-static/assets/{RadioGroup.stories-evzuyPl2.js → RadioGroup.stories-D8YHF52N.js} +1 -1
  140. package/storybook-static/assets/{Scrollable-BwNQtM7w.js → Scrollable-CzjaBhDx.js} +1 -1
  141. package/storybook-static/assets/{Select-DJYUi3iy.js → Select-DCitHJuw.js} +1 -1
  142. package/storybook-static/assets/{Select-DJzmWS1T.js → Select-DRU8ibvA.js} +1 -1
  143. package/storybook-static/assets/{Select.stories-BnUIbrvc.js → Select.stories-CK_D5RAO.js} +1 -1
  144. package/storybook-static/assets/{SelectOptionContent-Cd4435dS.js → SelectOptionContent-BAJEXMJG.js} +1 -1
  145. package/storybook-static/assets/{SerializableSelect-fsLc_Ma0.js → SerializableSelect-DyRYm6Fb.js} +1 -1
  146. package/storybook-static/assets/{SerializableSelect.stories-BCRRVcbU.js → SerializableSelect.stories-6msteGLD.js} +1 -1
  147. package/storybook-static/assets/{SingleDateTimeInput-C1AR0xZh.js → SingleDateTimeInput-CNIODG1r.js} +1 -1
  148. package/storybook-static/assets/{SingleDateTimeInput-Diyz6qI-.js → SingleDateTimeInput-Dt2pvrEI.js} +1 -1
  149. package/storybook-static/assets/{SingleDateTimeInput.stories-nks-T7BL.js → SingleDateTimeInput.stories-BjZkApxR.js} +1 -1
  150. package/storybook-static/assets/{Slider-CgMHiwLj.js → Slider-C2STT2eb.js} +1 -1
  151. package/storybook-static/assets/{Slider-BouKs-yX.js → Slider-CyrGnw3r.js} +1 -1
  152. package/storybook-static/assets/{Slider.stories-Cg5heBxN.js → Slider.stories-cV_-2z3X.js} +1 -1
  153. package/storybook-static/assets/{SliderInput-VRJ7juTy.js → SliderInput-C7XLyS8n.js} +1 -1
  154. package/storybook-static/assets/{SliderInput-DU6sY9hj.js → SliderInput-DxWLjpcW.js} +1 -1
  155. package/storybook-static/assets/{SliderInput.stories-B154T_8Q.js → SliderInput.stories-DBIe7Yhj.js} +1 -1
  156. package/storybook-static/assets/{Sortable-Cy_0KjFR.js → Sortable-06Qmji0A.js} +1 -1
  157. package/storybook-static/assets/{Sortable.stories-CHE8wWLA.js → Sortable.stories-VPSDld7o.js} +1 -1
  158. package/storybook-static/assets/{Splitter-yrZypMbS.js → Splitter-Bjc9_DpU.js} +1 -1
  159. package/storybook-static/assets/{Splitter.stories-CwSwsE0H.js → Splitter.stories-CaecpwzX.js} +1 -1
  160. package/storybook-static/assets/{StateSelect-DuLO_Piy.js → StateSelect-CBqVFgZr.js} +1 -1
  161. package/storybook-static/assets/{StateSelect-BHzuZX75.js → StateSelect-DEbS-UHz.js} +1 -1
  162. package/storybook-static/assets/{StateSelect.stories-CGlKn8jQ.js → StateSelect.stories-DHCZQjpD.js} +1 -1
  163. package/storybook-static/assets/{StringToggle.stories-BMGe4CV1.js → StringToggle.stories-DZ5cJKre.js} +1 -1
  164. package/storybook-static/assets/{Switch-wxL8km93.js → Switch-BQVOziJc.js} +1 -1
  165. package/storybook-static/assets/{Switch-CfKqydJl.js → Switch-DbMsXJZQ.js} +1 -1
  166. package/storybook-static/assets/{Switch.stories-CTF8Fn5S.js → Switch.stories-xsRPNma9.js} +1 -1
  167. package/storybook-static/assets/{Table-BggkDkyA.js → Table-90xunt07.js} +1 -1
  168. package/storybook-static/assets/Table.stories-BHO05Nt2.js +207 -0
  169. package/storybook-static/assets/{Tabs-BhU1yJ68.js → Tabs-I00nOCLh.js} +1 -1
  170. package/storybook-static/assets/{Tabs.stories-Doot6gmo.js → Tabs.stories-B2XJ7Ho5.js} +1 -1
  171. package/storybook-static/assets/{TabsBox-DQtakMLT.js → TabsBox-elxR9IVU.js} +1 -1
  172. package/storybook-static/assets/{TagInput-BOUAaS40.js → TagInput-DJRFuFDX.js} +1 -1
  173. package/storybook-static/assets/{TagInput.stories-DNEu6f1H.js → TagInput.stories-Cf6c-1Xx.js} +1 -1
  174. package/storybook-static/assets/{Text-BX0Gm-we.js → Text-CKeWyv1R.js} +1 -1
  175. package/storybook-static/assets/{Textarea-DbV3up2r.js → Textarea-DZ27cTTb.js} +1 -1
  176. package/storybook-static/assets/{Textarea-vACUwDlt.js → Textarea-DamLyP7r.js} +1 -1
  177. package/storybook-static/assets/{Textarea.stories-BBkhkeg2.js → Textarea.stories-1wsB9B_l.js} +1 -1
  178. package/storybook-static/assets/{TimePanel-CN59Txlq.js → TimePanel-BCiqgc3_.js} +1 -1
  179. package/storybook-static/assets/{TimePanel.stories-BKYWX6RZ.js → TimePanel.stories-CChD-RUz.js} +1 -1
  180. package/storybook-static/assets/{Toggle-CaIYF6CW.js → Toggle-BAJj1RSd.js} +1 -1
  181. package/storybook-static/assets/{Toggle-C1i7Qcj6.js → Toggle-CUhT4loI.js} +1 -1
  182. package/storybook-static/assets/{Toggle.stories-A7L9V62F.js → Toggle.stories-Dipcr_LJ.js} +1 -1
  183. package/storybook-static/assets/{TreeMultiSelect-DaRr_WsB.js → TreeMultiSelect-BXhuUX3J.js} +1 -1
  184. package/storybook-static/assets/{TreeMultiSelect-BVcb4Bqo.js → TreeMultiSelect-D4Owgkp8.js} +1 -1
  185. package/storybook-static/assets/{TreeMultiSelect.stories-BWmYIta_.js → TreeMultiSelect.stories-CB2jm_bz.js} +1 -1
  186. package/storybook-static/assets/{TreePickerBase-CzvhvwzY.js → TreePickerBase-eXU7yGrA.js} +1 -1
  187. package/storybook-static/assets/{TreeSelect-Dyi_CLRD.js → TreeSelect-0dZm6ufk.js} +1 -1
  188. package/storybook-static/assets/{TreeSelect-DRus4VcV.js → TreeSelect-5qlmmCCI.js} +1 -1
  189. package/storybook-static/assets/{TreeSelect.stories-C4pm8iLe.js → TreeSelect.stories-CllcJYnI.js} +1 -1
  190. package/storybook-static/assets/{TreeTable-k2zD3Y_g.js → TreeTable-BqZk_QkK.js} +1 -1
  191. package/storybook-static/assets/{TreeTable.stories-cwP-epkE.js → TreeTable.stories-BDoNVZCh.js} +4 -4
  192. package/storybook-static/assets/{async-_ojLVlM1.js → async-CoT7Kgjz.js} +1 -1
  193. package/storybook-static/assets/{blocks-7Wf2ozDB.js → blocks-W-usNnZb.js} +3 -3
  194. package/storybook-static/assets/{browserAndReact-DpDuZQNz.js → browserAndReact-CdN7k1Ys.js} +1 -1
  195. package/storybook-static/assets/{check-B8KQJdvH.js → check-DjVied9B.js} +1 -1
  196. package/storybook-static/assets/{chevron-down-BzvRoQwm.js → chevron-down-CjmFWC1H.js} +1 -1
  197. package/storybook-static/assets/{chevron-left-B1gSiTT5.js → chevron-left-CgCtsWUK.js} +1 -1
  198. package/storybook-static/assets/{chevron-right-DGZcDdSt.js → chevron-right-DfAt2YE7.js} +1 -1
  199. package/storybook-static/assets/{chunk-W22LQPXL-BcSNUmAX.js → chunk-W22LQPXL-CPNotdVj.js} +1 -1
  200. package/storybook-static/assets/{circle-alert-CE1HjPRk.js → circle-alert-DNyHEnP7.js} +1 -1
  201. package/storybook-static/assets/{circle-check-CLOhV_d2.js → circle-check-BUp-oyqo.js} +1 -1
  202. package/storybook-static/assets/components-CWI6MUvj.js +241 -0
  203. package/storybook-static/assets/{contextMenu-Cy6W9ruC.js → contextMenu-B2RJaey1.js} +1 -1
  204. package/storybook-static/assets/{defaultRenderers-DMzMTiXd.js → defaultRenderers-jxMgDhVa.js} +1 -1
  205. package/storybook-static/assets/{download-C9YXf8CS.js → download-C5zRdMry.js} +1 -1
  206. package/storybook-static/assets/{filesAndExcel-CqunExs5.js → filesAndExcel-CYKyG14W.js} +1 -1
  207. package/storybook-static/assets/{floating-ui.react-CGmmDcLA.js → floating-ui.react-BGMb0aIS.js} +1 -1
  208. package/storybook-static/assets/{formatters-CVj-3Vn0-BFaHJqZL.js → formatters-CBgrBeSA-DY6OIAc8.js} +1 -1
  209. package/storybook-static/assets/{formatters-BbK_Ug8Y.js → formatters-DeU7wI7T.js} +1 -1
  210. package/storybook-static/assets/{formatters-runtime-UPbk1cre.js → formatters-runtime-DnSgDhbz.js} +1 -1
  211. package/storybook-static/assets/{foundationLib-N3zYHNH2.js → foundationLib-DrimcZD1.js} +1 -1
  212. package/storybook-static/assets/{hooks-BY3WPUzv.js → hooks-BJmY6rG1.js} +1 -1
  213. package/storybook-static/assets/{iframe-I5gZKSOP.css → iframe-Baz8D-0E.css} +1 -1
  214. package/storybook-static/assets/{iframe-DM52JHVE.js → iframe-BnW9ONAs.js} +4 -4
  215. package/storybook-static/assets/iframe-DGAjOA6_.js +1 -0
  216. package/storybook-static/assets/{info-DVyz6CIq.js → info-2igYCwst.js} +1 -1
  217. package/storybook-static/assets/odata-DfSyh3Sn.js +1 -0
  218. package/storybook-static/assets/{odataAndTables-aeqd_eqp.js → odataAndTables-BhJXkoYZ.js} +3 -3
  219. package/storybook-static/assets/{odataFetchFn-WMwANfst.js → odataFetchFn-D2X1lPng.js} +1 -1
  220. package/storybook-static/assets/{odataStoryFixtures-Bg0hW1z0.js → odataStoryFixtures-DYRSp8rq.js} +2 -2
  221. package/storybook-static/assets/{persisted-SjS3xGzj.js → persisted-DHhF6isC.js} +1 -1
  222. package/storybook-static/assets/{pureUtilities-Dhj0YAO5.js → pureUtilities-ChXuZIo7.js} +1 -1
  223. package/storybook-static/assets/{react-fq-BOIxH.js → react-CLWTMVeL.js} +1 -1
  224. package/storybook-static/assets/{refresh-cw-BhvbdEMC.js → refresh-cw-B-NTAP58.js} +1 -1
  225. package/storybook-static/assets/{runtimeAndState-Ms4DDeIl.js → runtimeAndState-H412awCm.js} +1 -1
  226. package/storybook-static/assets/{settings-2-CDoQ1pkq.js → settings-2-1qvlM5d_.js} +1 -1
  227. package/storybook-static/assets/shim-BUMlC1GG.js +1 -0
  228. package/storybook-static/assets/{sortable-CFGuBqj5.js → sortable-BHG_CM3B.js} +1 -1
  229. package/storybook-static/assets/{syntaxhighlighter-T5IQBZDB-CBZU3huW.js → syntaxhighlighter-T5IQBZDB-R3_3CMVb.js} +1 -1
  230. package/storybook-static/assets/{trash-2-D4oLpgpt.js → trash-2-CE6CewYq.js} +1 -1
  231. package/storybook-static/assets/{triangle-alert-DKUca28b.js → triangle-alert-D3UYXaLs.js} +1 -1
  232. package/storybook-static/assets/{useODataSelectBase-BsPw4jSk.js → useODataSelectBase-FSv5umRf.js} +1 -1
  233. package/storybook-static/assets/{useODataTreeData-D7ngw3D8.js → useODataTreeData-kmN53sfw.js} +1 -1
  234. package/storybook-static/assets/{usePickerQuery-DdN-mMzn.js → usePickerQuery-0QXDg2qR.js} +1 -1
  235. package/storybook-static/assets/{usePickerTriggerController-CQeVg3Yu.js → usePickerTriggerController-FtkRoBgz.js} +1 -1
  236. package/storybook-static/assets/{x-CE5eZUoO.js → x-BGnlLolo.js} +1 -1
  237. package/storybook-static/iframe.html +3 -3
  238. package/storybook-static/project.json +1 -1
  239. package/dist/chunks/base-table-CTafaxo2.js.map +0 -1
  240. package/dist/chunks/table-DOwANXnt.js.map +0 -1
  241. package/storybook-static/assets/FormattedTableCell-DdLJ2UCi.js +0 -18
  242. package/storybook-static/assets/Table.stories-Cc6traPG.js +0 -207
  243. package/storybook-static/assets/components-CQvUk-HE.js +0 -241
  244. package/storybook-static/assets/iframe-Chlg3akS.js +0 -1
  245. package/storybook-static/assets/odata-v-5LKxZl.js +0 -1
  246. /package/storybook-static/assets/{odata-service-B5w4YBao-BW9QLSrS.js → odata-service-B6TxBSLm-BW9QLSrS.js} +0 -0
@@ -1,13 +1,13 @@
1
- import { a as e, c as t, d as n, i as r, m as i, n as ee, o as te, r as ne, s as re, t as ie } from "../chunks/base-table-CTafaxo2.js";
1
+ import { a as e, c as t, d as n, i as r, n as i, o as ee, p as te, r as ne, s as re, t as ie } from "../chunks/base-table-DNSYOO9t.js";
2
2
  import { useEffect as a, useEffectEvent as o, useMemo as s, useRef as c, useState as ae } from "react";
3
3
  import { cn as oe } from "@ryuzaki13/react-foundation-lib/utils";
4
4
  import { jsx as l, jsxs as u } from "react/jsx-runtime";
5
5
  import { ChevronDownIcon as d, ChevronRightIcon as f } from "lucide-react";
6
6
  import { formatPipelineDisplayValue as se } from "@ryuzaki13/react-foundation-lib/formatters";
7
- import { resolveTableLength as p, useTableRowSelection as ce } from "@ryuzaki13/react-foundation-lib/table";
8
- import { getCoreRowModel as m, getExpandedRowModel as le, useReactTable as ue } from "@tanstack/react-table";
7
+ import { foundationTableFeatures as ce, resolveTableLength as p, useTableRowSelection as le } from "@ryuzaki13/react-foundation-lib/table";
8
+ import { useTable as ue } from "@tanstack/react-table";
9
9
  import { buildTreeTableRows as de } from "@ryuzaki13/react-foundation-lib/tree-table";
10
- var h = {
10
+ var m = {
11
11
  treeColumnCell: "jOS9rT",
12
12
  selectedIndicatorCell: "zHOAf7",
13
13
  treeCell: "j48cXg",
@@ -18,22 +18,22 @@ var h = {
18
18
  };
19
19
  //#endregion
20
20
  //#region src/tree-table/TreeTable.tsx
21
- function g(e) {
21
+ function h(e) {
22
22
  return Object.fromEntries(e.map((e) => [e, !0]));
23
23
  }
24
- function _(e) {
24
+ function g(e) {
25
25
  return typeof e == "boolean" ? [] : Object.keys(e).filter((t) => e[t]);
26
26
  }
27
- function v(e, t) {
27
+ function _(e, t) {
28
28
  return t.get(e.id) ?? e.original;
29
29
  }
30
30
  function fe(e, t, n, r) {
31
31
  return e.cell.column.id === n ? /* @__PURE__ */ u("div", {
32
- className: h.treeCell,
32
+ className: m.treeCell,
33
33
  style: { paddingInlineStart: `calc(${e.row.depth} * ${p(r) ?? "0em"})` },
34
34
  children: [e.row.getCanExpand() ? /* @__PURE__ */ l("button", {
35
35
  type: "button",
36
- className: h.expanderButton,
36
+ className: m.expanderButton,
37
37
  "aria-label": e.row.getIsExpanded() ? "Свернуть строку" : "Развернуть строку",
38
38
  "data-tree-table-interactive": "true",
39
39
  "data-ui": "tree-table-expander",
@@ -43,115 +43,114 @@ function fe(e, t, n, r) {
43
43
  },
44
44
  children: e.row.getIsExpanded() ? /* @__PURE__ */ l(d, { size: 16 }) : /* @__PURE__ */ l(f, { size: 16 })
45
45
  }) : /* @__PURE__ */ l("span", {
46
- className: h.expanderSpacer,
46
+ className: m.expanderSpacer,
47
47
  "aria-hidden": "true"
48
48
  }), /* @__PURE__ */ l("div", {
49
- className: h.treeCellContent,
49
+ className: m.treeCellContent,
50
50
  children: t
51
51
  })]
52
52
  }) : t;
53
53
  }
54
- function y({ title: u, isLoading: d, isFetching: f, data: p, columns: y, hierarchy: b, selectionMode: x = "none", expandFirstLevel: S = !1, defaultExpandedRowIds: C, treeColumnId: pe, indentSize: me = 1, className: he, tableClassName: ge, columnVisibility: _e, defaultColumnVisibility: ve, columnOrder: ye, defaultColumnOrder: be, columnSizing: xe, defaultColumnSizing: Se, columnPinning: w, defaultColumnPinning: T, enableColumnResizing: E = !1, enableColumnReordering: D = !1, columnResizeMinWidth: O, onColumnVisibilityChange: k, onColumnOrderChange: A, onColumnSizingChange: j, onColumnPinningChange: Ce, onRowClick: M, onRowSelectionChange: we, onExpandedRowIdsChange: Te, onReachEnd: N, getRowCanSelect: P, getRowClassName: Ee, renderHeaderContextMenu: De, renderCellContent: F }) {
55
- let I = s(() => de(p ?? [], b), [p, b]), L = s(() => t(y), [y]), R = s(() => {
56
- let e = new Set(C ?? []);
57
- if (S) for (let t of I.rootRowIds) e.add(t);
54
+ function v({ title: u, isLoading: d, isFetching: f, data: p, columns: v, hierarchy: y, selectionMode: b = "none", expandFirstLevel: x = !1, defaultExpandedRowIds: S, treeColumnId: C, indentSize: pe = 1, className: me, tableClassName: he, columnVisibility: ge, defaultColumnVisibility: w, columnOrder: _e, defaultColumnOrder: ve, columnSizing: ye, defaultColumnSizing: be, columnPinning: xe, defaultColumnPinning: T, enableColumnResizing: E = !1, enableColumnReordering: D = !1, columnResizeMinWidth: O, onColumnVisibilityChange: k, onColumnOrderChange: A, onColumnSizingChange: j, onColumnPinningChange: M, onRowClick: N, onRowSelectionChange: Se, onExpandedRowIdsChange: Ce, onReachEnd: P, getRowCanSelect: F, getRowClassName: we, renderHeaderContextMenu: Te, renderCellContent: I }) {
55
+ let L = s(() => de(p ?? [], y), [p, y]), R = s(() => t(v), [v]), z = s(() => {
56
+ let e = new Set(S ?? []);
57
+ if (x) for (let t of L.rootRowIds) e.add(t);
58
58
  return Array.from(e);
59
59
  }, [
60
- C,
61
60
  S,
62
- I.rootRowIds
63
- ]), [z, B] = ae({}), V = c(!1), H = c(null), U = c(null), { rowSelection: Oe, activateRowSelection: ke } = ce({
64
- availableRowIds: I.allRowIds,
65
- rowById: I.rowById,
66
- selectionMode: x,
67
- onRowSelectionChange: we
68
- }), { columnVisibility: W, onColumnVisibilityChange: Ae } = ne({
69
- columnVisibility: _e,
70
- defaultColumnVisibility: ve,
61
+ x,
62
+ L.rootRowIds
63
+ ]), [B, V] = ae({}), H = c(!1), U = c(null), W = c(null), { rowSelection: Ee, activateRowSelection: De } = le({
64
+ availableRowIds: L.allRowIds,
65
+ rowById: L.rowById,
66
+ selectionMode: b,
67
+ onRowSelectionChange: Se
68
+ }), { columnVisibility: G, onColumnVisibilityChange: Oe } = ne({
69
+ columnVisibility: ge,
70
+ defaultColumnVisibility: w,
71
71
  onColumnVisibilityChange: k
72
- }), { columnOrder: G, onColumnOrderChange: je } = te({
73
- columnOrder: ye,
74
- defaultColumnOrder: be,
72
+ }), { columnOrder: K, onColumnOrderChange: ke } = ee({
73
+ columnOrder: _e,
74
+ defaultColumnOrder: ve,
75
75
  onColumnOrderChange: A
76
- }), { columnSizing: K, onColumnSizingChange: Me } = r({
77
- columnSizing: xe,
78
- defaultColumnSizing: Se,
76
+ }), { columnSizing: q, onColumnSizingChange: Ae } = r({
77
+ columnSizing: ye,
78
+ defaultColumnSizing: be,
79
79
  columnResizeMinWidth: O,
80
80
  onColumnSizingChange: j
81
- }), { columnPinning: q, onColumnPinningChange: J } = e({
82
- columnPinning: w,
81
+ }), { columnPinning: J, onColumnPinningChange: je } = e({
82
+ columnPinning: xe,
83
83
  defaultColumnPinning: T,
84
- onColumnPinningChange: Ce
84
+ onColumnPinningChange: M
85
85
  }), Y = s(() => ({
86
- columnOrder: G,
87
- columnPinning: q,
88
- columnSizing: K,
89
- columnVisibility: W
86
+ columnOrder: K,
87
+ columnPinning: J,
88
+ columnSizing: q,
89
+ columnVisibility: G
90
90
  }), [
91
- G,
92
- q,
93
91
  K,
94
- W
95
- ]), Ne = o((e, t) => {
92
+ J,
93
+ q,
94
+ G
95
+ ]), Me = o((e, t) => {
96
96
  if (e.length === 0) {
97
- V.current = !1, B({});
97
+ H.current = !1, V({});
98
98
  return;
99
99
  }
100
100
  let n = new Set(e);
101
- B((e) => {
102
- let r = _(e).filter((e) => n.has(e));
103
- return V.current ? g(r) : (V.current = !0, g(Array.from(/* @__PURE__ */ new Set([...r, ...t.filter((e) => n.has(e))]))));
101
+ V((e) => {
102
+ let r = g(e).filter((e) => n.has(e));
103
+ return H.current ? h(r) : (H.current = !0, h(Array.from(/* @__PURE__ */ new Set([...r, ...t.filter((e) => n.has(e))]))));
104
104
  });
105
- }), Pe = o((e) => {
106
- Te?.(_(e));
107
- }), Fe = o(() => {
108
- N?.();
105
+ }), Ne = o((e) => {
106
+ Ce?.(g(e));
107
+ }), Pe = o(() => {
108
+ P?.();
109
109
  });
110
110
  a(() => {
111
- Ne(I.allRowIds, R);
112
- }, [R, I.allRowIds]), a(() => {
113
- Pe(z);
114
- }, [z]), a(() => {
115
- if (!N || !H.current || !U.current || d) return;
111
+ Me(L.allRowIds, z);
112
+ }, [z, L.allRowIds]), a(() => {
113
+ Ne(B);
114
+ }, [B]), a(() => {
115
+ if (!P || !U.current || !W.current || d) return;
116
116
  let e = new IntersectionObserver((e) => {
117
- e[0]?.isIntersecting && Fe();
117
+ e[0]?.isIntersecting && Pe();
118
118
  }, {
119
- root: H.current,
119
+ root: U.current,
120
120
  threshold: .1
121
121
  });
122
- return e.observe(U.current), () => e.disconnect();
122
+ return e.observe(W.current), () => e.disconnect();
123
123
  }, [
124
124
  d,
125
- N,
126
- I.rows.length
125
+ P,
126
+ L.rows.length
127
127
  ]);
128
128
  let X = ue({
129
- data: I.rows,
130
- columns: y,
129
+ features: ce,
130
+ data: L.rows,
131
+ columns: v,
131
132
  state: {
132
- columnOrder: G,
133
- columnPinning: q,
134
- columnSizing: K,
135
- columnVisibility: W,
136
- expanded: z,
137
- rowSelection: Oe
133
+ columnOrder: K,
134
+ columnPinning: J,
135
+ columnSizing: q,
136
+ columnVisibility: G,
137
+ expanded: B,
138
+ rowSelection: Ee
138
139
  },
139
- getRowId: (e) => b.getRowId(e),
140
+ getRowId: (e) => y.getRowId(e),
140
141
  getSubRows: (e) => e.children,
141
- getCoreRowModel: m(),
142
- getExpandedRowModel: le(),
143
- onColumnOrderChange: je,
144
- onColumnPinningChange: J,
145
- onColumnSizingChange: Me,
146
- onColumnVisibilityChange: Ae,
147
- onExpandedChange: B,
148
- enableMultiRowSelection: x === "multi",
142
+ onColumnOrderChange: ke,
143
+ onColumnPinningChange: je,
144
+ onColumnSizingChange: Ae,
145
+ onColumnVisibilityChange: Oe,
146
+ onExpandedChange: V,
147
+ enableMultiRowSelection: b === "multi",
149
148
  enableRowSelection: (e) => {
150
- if (x === "none") return !1;
151
- let t = v(e, I.rowById);
152
- return !P || P(t);
149
+ if (b === "none") return !1;
150
+ let t = _(e, L.rowById);
151
+ return !F || F(t);
153
152
  }
154
- }), Z = i(X, Y), Q = pe ?? Z[0]?.id, $ = X.getRowModel().rows, Ie = s(() => re({
153
+ }), Z = te(X, Y), Q = C ?? Z[0]?.id, $ = X.getRowModel().rows, Fe = s(() => re({
155
154
  rows: $,
156
155
  columns: Z,
157
156
  resolveRowBoundaryKey: (e) => e.depth,
@@ -161,60 +160,60 @@ function y({ title: u, isLoading: d, isFetching: f, data: p, columns: y, hierarc
161
160
  Z,
162
161
  Q
163
162
  ]);
164
- return /* @__PURE__ */ l(ee, {
163
+ return /* @__PURE__ */ l(i, {
165
164
  table: X,
166
165
  columnState: Y,
167
166
  title: u,
168
167
  isLoading: d,
169
168
  isFetching: f,
170
- className: he,
171
- tableClassName: ge,
172
- selectionMode: x,
173
- scrollableRef: H,
169
+ className: me,
170
+ tableClassName: he,
171
+ selectionMode: b,
172
+ scrollableRef: U,
174
173
  interactiveElementSelector: "[data-tree-table-interactive=\"true\"]",
175
- onActivateRow: x !== "none" || M ? (e) => {
176
- let t = v(e, I.rowById);
177
- ke(e.id, e.getCanSelect()), M?.(t);
174
+ onActivateRow: b !== "none" || N ? (e) => {
175
+ let t = _(e, L.rowById);
176
+ De(e.id, e.getCanSelect()), N?.(t);
178
177
  } : void 0,
179
- isRowInteractive: (e) => !!(M || x !== "none" && e.getCanSelect()),
178
+ isRowInteractive: (e) => !!(N || b !== "none" && e.getCanSelect()),
180
179
  getRowClassName: (e) => {
181
- let t = v(e, I.rowById);
182
- return Ee?.(t);
180
+ let t = _(e, L.rowById);
181
+ return we?.(t);
183
182
  },
184
- getCellClassName: ({ row: e, cell: t }) => oe(t.column.id === Q && h.treeColumnCell, t.column.id === Q && e.getIsSelected() && h.selectedIndicatorCell),
185
- getCellLayout: ({ cell: e }) => Ie.get(e.id),
186
- renderHeaderContextMenu: De,
183
+ getCellClassName: ({ row: e, cell: t }) => oe(t.column.id === Q && m.treeColumnCell, t.column.id === Q && e.getIsSelected() && m.selectedIndicatorCell),
184
+ getCellLayout: ({ cell: e }) => Fe.get(e.id),
185
+ renderHeaderContextMenu: Te,
187
186
  enableColumnResizing: E,
188
187
  enableColumnReordering: D,
189
188
  columnResizeMinWidth: O,
190
189
  renderCellContent: (e) => {
191
- let t = v(e.row, I.rowById), r = se({
192
- field: L.runtimeByColumnId[e.cell.column.id],
190
+ let t = _(e.row, L.rowById), r = se({
191
+ field: R.runtimeByColumnId[e.cell.column.id],
193
192
  rawValue: e.cell.getValue(),
194
193
  rowData: t,
195
194
  rowKind: "tree"
196
195
  }), i = n({
197
196
  columnId: e.cell.column.id,
198
- runtimeByColumnId: L.runtimeByColumnId,
199
- customCellColumnIds: L.customCellColumnIds
197
+ runtimeByColumnId: R.runtimeByColumnId,
198
+ customCellColumnIds: R.customCellColumnIds
200
199
  }) ? /* @__PURE__ */ l(ie, {
201
200
  displayValue: r,
202
201
  align: e.columnMeta?.align
203
202
  }) : e.defaultContent;
204
- return fe(e, F ? F({
203
+ return fe(e, I ? I({
205
204
  ...e,
206
205
  defaultContent: i,
207
206
  displayValue: r
208
- }) : i, Q, me);
207
+ }) : i, Q, pe);
209
208
  },
210
- afterTableContent: N ? /* @__PURE__ */ l("div", {
211
- ref: U,
212
- className: h.sentinel,
209
+ afterTableContent: P ? /* @__PURE__ */ l("div", {
210
+ ref: W,
211
+ className: m.sentinel,
213
212
  "aria-hidden": "true"
214
213
  }) : null
215
214
  });
216
215
  }
217
216
  //#endregion
218
- export { y as TreeTable };
217
+ export { v as TreeTable };
219
218
 
220
219
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/tree-table/TreeTable.module.scss","../../src/tree-table/TreeTable.tsx"],"sourcesContent":[".treeColumnCell {\n\tpadding-inline-start: var(--space-sm);\n}\n\n.selectedIndicatorCell {\n\tbox-shadow: inset 0.1875rem 0 0 var(--content-accent);\n}\n\n.treeCell {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--space-xs);\n\tmin-width: 0;\n}\n\n.treeCellContent {\n\tmin-width: 0;\n\tflex: 1 1 auto;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.expanderButton {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex: 0 0 1.5rem;\n\twidth: 1.5rem;\n\theight: 1.5rem;\n\tpadding: 0;\n\tborder: 0;\n\tborder-radius: var(--radius-xs);\n\tbackground: transparent;\n\tcolor: var(--content-0);\n\tcursor: pointer;\n\n\t&:hover,\n\t&:focus-visible {\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n\n.expanderSpacer {\n\tflex: 0 0 1.5rem;\n\twidth: 1.5rem;\n\theight: 1.5rem;\n}\n\n.sentinel {\n\theight: 1px;\n}\n","/* eslint-disable react-hooks/incompatible-library */\nimport { useEffect, useEffectEvent, useMemo, useRef, useState, type ReactNode } from \"react\";\n\nimport { formatPipelineDisplayValue } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport {\n\tresolveTableLength,\n\tTableColumnDef,\n\ttype TableColumnOrderState,\n\ttype TableColumnSizingState,\n\tTableSelectionMode,\n\tuseTableRowSelection\n} from \"@ryuzaki13/react-foundation-lib/table\";\nimport { buildTreeTableRows, type TreeTableFlatHierarchy, type TreeTableRowNode } from \"@ryuzaki13/react-foundation-lib/tree-table\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport {\n\tgetCoreRowModel,\n\tgetExpandedRowModel,\n\tuseReactTable,\n\ttype ExpandedState,\n\ttype Row,\n\ttype VisibilityState\n} from \"@tanstack/react-table\";\nimport { ChevronDownIcon, ChevronRightIcon } from \"lucide-react\";\n\nimport {\n\tBaseTable,\n\tbuildBaseTableMergedCellsLayout,\n\tbuildTableFormattingSnapshot,\n\tFormattedTableCell,\n\tgetOrderedVisibleLeafColumns,\n\tshouldUseTableFormatting,\n\tuseTableColumnOrder,\n\tuseTableColumnPinning,\n\tuseTableColumnSizing,\n\tuseTableColumnVisibility,\n\ttype BaseTableCellRenderArgs,\n\ttype BaseTableColumnState,\n\ttype BaseTableProps,\n\ttype TableColumnPinningState\n} from \"../base-table\";\n\nimport styles from \"./TreeTable.module.scss\";\n\nimport type { TableFormulaRowData } from \"@ryuzaki13/react-foundation-lib/formulas\";\n\n/**\n * Внутренний тип строки TreeTable после преобразования в иерархию.\n */\ntype TreeTableRuntimeRow<TData extends object> = TreeTableRowNode<TData>;\n\n/**\n * Пропсы компонента TreeTable.\n *\n * Компонент принимает плоский OData-список и сам строит иерархию,\n * оставляя управление раскрытием и выбором во внутреннем состоянии.\n */\nexport interface TreeTableProps<TData extends object> {\n\t/**\n\t * Необязательный заголовок над таблицей.\n\t */\n\ttitle?: string;\n\t/**\n\t * Признак первичной загрузки.\n\t */\n\tisLoading?: boolean;\n\t/**\n\t * Признак фоновой догрузки или обновления данных.\n\t */\n\tisFetching?: boolean;\n\t/**\n\t * Плоский источник строк.\n\t */\n\tdata: readonly TData[] | undefined | null;\n\t/**\n\t * Описание колонок через исходный тип строки.\n\t */\n\tcolumns: readonly TableColumnDef<TData>[];\n\t/**\n\t * Правила восстановления дерева из плоского списка.\n\t */\n\thierarchy: TreeTableFlatHierarchy<TData>;\n\t/**\n\t * Режим выбора строк.\n\t */\n\tselectionMode?: TableSelectionMode;\n\t/**\n\t * Если `true`, при первом появлении данных раскрывает корневой уровень.\n\t */\n\texpandFirstLevel?: boolean;\n\t/**\n\t * Дополнительные строки, которые должны быть раскрыты при первой инициализации.\n\t */\n\tdefaultExpandedRowIds?: readonly string[];\n\t/**\n\t * Идентификатор колонки, в которой нужно рисовать tree-toggle и отступы.\n\t *\n\t * Если не указан, используется первая видимая колонка.\n\t */\n\ttreeColumnId?: string;\n\t/**\n\t * Отступ на один уровень вложенности.\n\t *\n\t * Числовое значение трактуется как `em`.\n\t */\n\tindentSize?: string | number;\n\t/**\n\t * Дополнительный CSS-класс корневого контейнера.\n\t */\n\tclassName?: string;\n\t/**\n\t * Дополнительный CSS-класс тега `table`.\n\t */\n\ttableClassName?: string;\n\t/**\n\t * Внешнее controlled-состояние видимости колонок.\n\t */\n\tcolumnVisibility?: VisibilityState;\n\t/**\n\t * Стартовое uncontrolled-состояние видимости колонок.\n\t */\n\tdefaultColumnVisibility?: VisibilityState;\n\t/**\n\t * Внешнее controlled-состояние порядка колонок.\n\t */\n\tcolumnOrder?: readonly string[];\n\t/**\n\t * Стартовое uncontrolled-состояние порядка колонок.\n\t */\n\tdefaultColumnOrder?: readonly string[];\n\t/**\n\t * Внешнее controlled-состояние ширин колонок в px.\n\t */\n\tcolumnSizing?: TableColumnSizingState;\n\t/**\n\t * Стартовое uncontrolled-состояние ширин колонок в px.\n\t */\n\tdefaultColumnSizing?: TableColumnSizingState;\n\t/**\n\t * Внешнее controlled-состояние left-pinning для колонок.\n\t */\n\tcolumnPinning?: TableColumnPinningState;\n\t/**\n\t * Стартовое uncontrolled-состояние left-pinning для колонок.\n\t */\n\tdefaultColumnPinning?: TableColumnPinningState;\n\t/**\n\t * Включает изменение ширины колонок через header-handle.\n\t */\n\tenableColumnResizing?: boolean;\n\t/**\n\t * Включает изменение порядка колонок через drag&drop заголовков.\n\t */\n\tenableColumnReordering?: boolean;\n\t/**\n\t * Минимальная ширина колонки при resize в px.\n\t */\n\tcolumnResizeMinWidth?: number;\n\t/**\n\t * Вызывается после изменения видимости колонок.\n\t */\n\tonColumnVisibilityChange?: (state: VisibilityState) => void;\n\t/**\n\t * Вызывается после изменения порядка колонок.\n\t */\n\tonColumnOrderChange?: (state: TableColumnOrderState) => void;\n\t/**\n\t * Вызывается после изменения ширины колонок.\n\t */\n\tonColumnSizingChange?: (state: TableColumnSizingState) => void;\n\t/**\n\t * Вызывается после изменения left-pinning state.\n\t */\n\tonColumnPinningChange?: (state: TableColumnPinningState) => void;\n\t/**\n\t * Вызывается при активации строки кликом или клавиатурой.\n\t */\n\tonRowClick?: (row: TData) => void;\n\t/**\n\t * Вызывается после изменения выбранных строк.\n\t */\n\tonRowSelectionChange?: (rows: TData[]) => void;\n\t/**\n\t * Вызывается после изменения раскрытых узлов.\n\t */\n\tonExpandedRowIdsChange?: (rowIds: string[]) => void;\n\t/**\n\t * Вызывается при достижении конца таблицы внутри scroll-контейнера.\n\t */\n\tonReachEnd?: () => void;\n\t/**\n\t * Позволяет запретить выбор отдельных строк.\n\t */\n\tgetRowCanSelect?: (row: TData) => boolean;\n\t/**\n\t * Позволяет добавить CSS-класс для конкретной строки.\n\t */\n\tgetRowClassName?: (row: TData) => string | undefined;\n\t/**\n\t * Контекстное меню заголовка колонки. Получает runtime-строки дерева,\n\t * потому что BaseTable работает уже после сборки flat hierarchy.\n\t */\n\trenderHeaderContextMenu?: BaseTableProps<TreeTableRuntimeRow<TData>>[\"renderHeaderContextMenu\"];\n\t/**\n\t * Точка расширения содержимого ячейки после общего форматирования.\n\t *\n\t * Для tree-column в `defaultContent` передается только содержимое ячейки:\n\t * TreeTable сам добавит expander и отступ после выполнения слота.\n\t */\n\trenderCellContent?: BaseTableProps<TreeTableRuntimeRow<TData>>[\"renderCellContent\"];\n}\n\n/**\n * Преобразует массив идентификаторов в формат состояния раскрытия TanStack.\n */\nfunction toExpandedState(rowIds: readonly string[]): ExpandedState {\n\treturn Object.fromEntries(rowIds.map((rowId) => [rowId, true]));\n}\n\n/**\n * Извлекает из состояния раскрытия только активные идентификаторы.\n */\nfunction extractExpandedRowIds(expanded: ExpandedState): string[] {\n\tif (typeof expanded === \"boolean\") {\n\t\treturn [];\n\t}\n\n\treturn Object.keys(expanded).filter((rowId) => expanded[rowId]);\n}\n\n/**\n * Нормализует исходную строку, убирая зависимость от внутреннего поля `children`.\n */\nfunction resolveOriginalRow<TData extends object>(row: Row<TreeTableRuntimeRow<TData>>, rowById: Map<string, TData>): TData {\n\treturn rowById.get(row.id) ?? (row.original as TData);\n}\n\n/**\n * Рендерит содержимое древовидной ячейки.\n */\nfunction renderTreeCellContent<TData extends object>(\n\targs: BaseTableCellRenderArgs<TreeTableRuntimeRow<TData>>,\n\tcontent: ReactNode,\n\ttreeColumnId: string | undefined,\n\tindentSize: string | number\n): ReactNode {\n\tif (args.cell.column.id !== treeColumnId) {\n\t\treturn content;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.treeCell}\n\t\t\tstyle={{\n\t\t\t\tpaddingInlineStart: `calc(${args.row.depth} * ${resolveTableLength(indentSize) ?? \"0em\"})`\n\t\t\t}}>\n\t\t\t{args.row.getCanExpand() ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.expanderButton}\n\t\t\t\t\taria-label={args.row.getIsExpanded() ? \"Свернуть строку\" : \"Развернуть строку\"}\n\t\t\t\t\tdata-tree-table-interactive=\"true\"\n\t\t\t\t\tdata-ui=\"tree-table-expander\"\n\t\t\t\t\tdata-action={args.row.getIsExpanded() ? \"collapse-tree-table-row\" : \"expand-tree-table-row\"}\n\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\targs.row.toggleExpanded();\n\t\t\t\t\t}}>\n\t\t\t\t\t{args.row.getIsExpanded() ? <ChevronDownIcon size={16} /> : <ChevronRightIcon size={16} />}\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span className={styles.expanderSpacer} aria-hidden=\"true\" />\n\t\t\t)}\n\n\t\t\t<div className={styles.treeCellContent}>{content}</div>\n\t\t</div>\n\t);\n}\n\n/**\n * Древовидная таблица на базе TanStack Table для плоских OData-данных.\n */\nexport function TreeTable<TData extends object>({\n\ttitle,\n\tisLoading,\n\tisFetching,\n\tdata,\n\tcolumns,\n\thierarchy,\n\tselectionMode = \"none\",\n\texpandFirstLevel = false,\n\tdefaultExpandedRowIds,\n\ttreeColumnId,\n\tindentSize = 1,\n\tclassName,\n\ttableClassName,\n\tcolumnVisibility,\n\tdefaultColumnVisibility,\n\tcolumnOrder,\n\tdefaultColumnOrder,\n\tcolumnSizing,\n\tdefaultColumnSizing,\n\tcolumnPinning,\n\tdefaultColumnPinning,\n\tenableColumnResizing = false,\n\tenableColumnReordering = false,\n\tcolumnResizeMinWidth,\n\tonColumnVisibilityChange,\n\tonColumnOrderChange,\n\tonColumnSizingChange,\n\tonColumnPinningChange,\n\tonRowClick,\n\tonRowSelectionChange,\n\tonExpandedRowIdsChange,\n\tonReachEnd,\n\tgetRowCanSelect,\n\tgetRowClassName,\n\trenderHeaderContextMenu,\n\trenderCellContent\n}: TreeTableProps<TData>) {\n\tconst treeData = useMemo(() => buildTreeTableRows(data ?? [], hierarchy), [data, hierarchy]);\n\tconst formattingSnapshot = useMemo(() => buildTableFormattingSnapshot(columns), [columns]);\n\tconst initialExpandedRowIds = useMemo(() => {\n\t\tconst nextExpandedRowIds = new Set(defaultExpandedRowIds ?? []);\n\n\t\tif (expandFirstLevel) {\n\t\t\tfor (const rootRowId of treeData.rootRowIds) {\n\t\t\t\tnextExpandedRowIds.add(rootRowId);\n\t\t\t}\n\t\t}\n\n\t\treturn Array.from(nextExpandedRowIds);\n\t}, [defaultExpandedRowIds, expandFirstLevel, treeData.rootRowIds]);\n\n\tconst [expanded, setExpanded] = useState<ExpandedState>({});\n\tconst hasInitializedExpansionRef = useRef(false);\n\tconst scrollableRef = useRef<HTMLDivElement | null>(null);\n\tconst sentinelRef = useRef<HTMLDivElement | null>(null);\n\n\tconst { rowSelection, activateRowSelection } = useTableRowSelection({\n\t\tavailableRowIds: treeData.allRowIds,\n\t\trowById: treeData.rowById,\n\t\tselectionMode,\n\t\tonRowSelectionChange\n\t});\n\tconst { columnVisibility: resolvedColumnVisibility, onColumnVisibilityChange: handleColumnVisibilityChange } = useTableColumnVisibility(\n\t\t{\n\t\t\tcolumnVisibility,\n\t\t\tdefaultColumnVisibility,\n\t\t\tonColumnVisibilityChange\n\t\t}\n\t);\n\tconst { columnOrder: resolvedColumnOrder, onColumnOrderChange: handleColumnOrderChange } = useTableColumnOrder({\n\t\tcolumnOrder,\n\t\tdefaultColumnOrder,\n\t\tonColumnOrderChange\n\t});\n\tconst { columnSizing: resolvedColumnSizing, onColumnSizingChange: handleColumnSizingChange } = useTableColumnSizing({\n\t\tcolumnSizing,\n\t\tdefaultColumnSizing,\n\t\tcolumnResizeMinWidth,\n\t\tonColumnSizingChange\n\t});\n\tconst { columnPinning: resolvedColumnPinning, onColumnPinningChange: handleColumnPinningChange } = useTableColumnPinning({\n\t\tcolumnPinning,\n\t\tdefaultColumnPinning,\n\t\tonColumnPinningChange\n\t});\n\n\tconst baseTableColumnState = useMemo<BaseTableColumnState>(\n\t\t() => ({\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility\n\t\t}),\n\t\t[resolvedColumnOrder, resolvedColumnPinning, resolvedColumnSizing, resolvedColumnVisibility]\n\t);\n\n\tconst syncExpandedState = useEffectEvent((availableRowIds: readonly string[], nextInitialExpandedRowIds: readonly string[]) => {\n\t\tif (availableRowIds.length === 0) {\n\t\t\thasInitializedExpansionRef.current = false;\n\t\t\tsetExpanded({});\n\t\t\treturn;\n\t\t}\n\n\t\tconst availableRowIdSet = new Set(availableRowIds);\n\n\t\tsetExpanded((currentExpanded) => {\n\t\t\tconst persistedRowIds = extractExpandedRowIds(currentExpanded).filter((rowId) => availableRowIdSet.has(rowId));\n\n\t\t\tif (!hasInitializedExpansionRef.current) {\n\t\t\t\thasInitializedExpansionRef.current = true;\n\n\t\t\t\tconst seededRowIds = Array.from(\n\t\t\t\t\tnew Set([...persistedRowIds, ...nextInitialExpandedRowIds.filter((rowId) => availableRowIdSet.has(rowId))])\n\t\t\t\t);\n\n\t\t\t\treturn toExpandedState(seededRowIds);\n\t\t\t}\n\n\t\t\treturn toExpandedState(persistedRowIds);\n\t\t});\n\t});\n\n\tconst emitExpandedRowIdsChange = useEffectEvent((currentExpanded: ExpandedState) => {\n\t\tonExpandedRowIdsChange?.(extractExpandedRowIds(currentExpanded));\n\t});\n\n\tconst emitReachEnd = useEffectEvent(() => {\n\t\tonReachEnd?.();\n\t});\n\n\tuseEffect(() => {\n\t\tsyncExpandedState(treeData.allRowIds, initialExpandedRowIds);\n\t}, [initialExpandedRowIds, treeData.allRowIds]);\n\n\tuseEffect(() => {\n\t\temitExpandedRowIdsChange(expanded);\n\t}, [expanded]);\n\n\tuseEffect(() => {\n\t\tif (!onReachEnd || !scrollableRef.current || !sentinelRef.current || isLoading) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tconst entry = entries[0];\n\n\t\t\t\tif (entry?.isIntersecting) {\n\t\t\t\t\temitReachEnd();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\troot: scrollableRef.current,\n\t\t\t\tthreshold: 0.1\n\t\t\t}\n\t\t);\n\n\t\tobserver.observe(sentinelRef.current);\n\n\t\treturn () => observer.disconnect();\n\t}, [isLoading, onReachEnd, treeData.rows.length]);\n\n\tconst table = useReactTable<TreeTableRuntimeRow<TData>>({\n\t\tdata: treeData.rows as TreeTableRuntimeRow<TData>[],\n\t\tcolumns: columns as TableColumnDef<TreeTableRuntimeRow<TData>>[],\n\t\tstate: {\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility,\n\t\t\texpanded,\n\t\t\trowSelection\n\t\t},\n\t\tgetRowId: (row) => hierarchy.getRowId(row as TData),\n\t\tgetSubRows: (row) => row.children,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetExpandedRowModel: getExpandedRowModel(),\n\t\tonColumnOrderChange: handleColumnOrderChange,\n\t\tonColumnPinningChange: handleColumnPinningChange,\n\t\tonColumnSizingChange: handleColumnSizingChange,\n\t\tonColumnVisibilityChange: handleColumnVisibilityChange,\n\t\tonExpandedChange: setExpanded,\n\t\tenableMultiRowSelection: selectionMode === \"multi\",\n\t\tenableRowSelection: (row) => {\n\t\t\tif (selectionMode === \"none\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\t\treturn getRowCanSelect ? getRowCanSelect(originalRow) : true;\n\t\t}\n\t});\n\n\tconst visibleLeafColumns = getOrderedVisibleLeafColumns(table, baseTableColumnState);\n\tconst resolvedTreeColumnId = treeColumnId ?? visibleLeafColumns[0]?.id;\n\tconst rowModelRows = table.getRowModel().rows;\n\tconst mergedCellLayout = useMemo(\n\t\t() =>\n\t\t\tbuildBaseTableMergedCellsLayout({\n\t\t\t\trows: rowModelRows,\n\t\t\t\tcolumns: visibleLeafColumns,\n\t\t\t\tresolveRowBoundaryKey: (row) => row.depth,\n\t\t\t\texcludeColumnIds: resolvedTreeColumnId ? new Set([resolvedTreeColumnId]) : undefined\n\t\t\t}),\n\t\t[rowModelRows, visibleLeafColumns, resolvedTreeColumnId]\n\t);\n\n\t/**\n\t * Активирует строку: обновляет выбор в соответствии с режимом и вызывает внешний callback.\n\t */\n\tconst activateRow = (row: Row<TreeTableRuntimeRow<TData>>) => {\n\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\tactivateRowSelection(row.id, row.getCanSelect());\n\t\tonRowClick?.(originalRow);\n\t};\n\n\treturn (\n\t\t<BaseTable\n\t\t\ttable={table}\n\t\t\tcolumnState={baseTableColumnState}\n\t\t\ttitle={title}\n\t\t\tisLoading={isLoading}\n\t\t\tisFetching={isFetching}\n\t\t\tclassName={className}\n\t\t\ttableClassName={tableClassName}\n\t\t\tselectionMode={selectionMode}\n\t\t\tscrollableRef={scrollableRef}\n\t\t\tinteractiveElementSelector='[data-tree-table-interactive=\"true\"]'\n\t\t\tonActivateRow={selectionMode !== \"none\" || onRowClick ? activateRow : undefined}\n\t\t\tisRowInteractive={(row) => Boolean(onRowClick || (selectionMode !== \"none\" && row.getCanSelect()))}\n\t\t\tgetRowClassName={(row) => {\n\t\t\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\t\t\treturn getRowClassName?.(originalRow);\n\t\t\t}}\n\t\t\tgetCellClassName={({ row, cell }) =>\n\t\t\t\tcn(\n\t\t\t\t\tcell.column.id === resolvedTreeColumnId && styles.treeColumnCell,\n\t\t\t\t\tcell.column.id === resolvedTreeColumnId && row.getIsSelected() && styles.selectedIndicatorCell\n\t\t\t\t)\n\t\t\t}\n\t\t\tgetCellLayout={({ cell }) => mergedCellLayout.get(cell.id)}\n\t\t\trenderHeaderContextMenu={renderHeaderContextMenu}\n\t\t\tenableColumnResizing={enableColumnResizing}\n\t\t\tenableColumnReordering={enableColumnReordering}\n\t\t\tcolumnResizeMinWidth={columnResizeMinWidth}\n\t\t\trenderCellContent={(args) => {\n\t\t\t\tconst originalRow = resolveOriginalRow(args.row, treeData.rowById);\n\t\t\t\tconst displayValue = formatPipelineDisplayValue({\n\t\t\t\t\tfield: formattingSnapshot.runtimeByColumnId[args.cell.column.id],\n\t\t\t\t\trawValue: args.cell.getValue(),\n\t\t\t\t\trowData: originalRow as TableFormulaRowData,\n\t\t\t\t\trowKind: \"tree\"\n\t\t\t\t});\n\t\t\t\tconst defaultContent = shouldUseTableFormatting({\n\t\t\t\t\tcolumnId: args.cell.column.id,\n\t\t\t\t\truntimeByColumnId: formattingSnapshot.runtimeByColumnId,\n\t\t\t\t\tcustomCellColumnIds: formattingSnapshot.customCellColumnIds\n\t\t\t\t}) ? (\n\t\t\t\t\t<FormattedTableCell displayValue={displayValue} align={args.columnMeta?.align} />\n\t\t\t\t) : (\n\t\t\t\t\targs.defaultContent\n\t\t\t\t);\n\t\t\t\tconst content = renderCellContent\n\t\t\t\t\t? renderCellContent({\n\t\t\t\t\t\t\t...args,\n\t\t\t\t\t\t\tdefaultContent,\n\t\t\t\t\t\t\tdisplayValue\n\t\t\t\t\t\t})\n\t\t\t\t\t: defaultContent;\n\n\t\t\t\treturn renderTreeCellContent(args, content, resolvedTreeColumnId, indentSize);\n\t\t\t}}\n\t\t\tafterTableContent={onReachEnd ? <div ref={sentinelRef} className={styles.sentinel} aria-hidden=\"true\" /> : null}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/tree-table/TreeTable.module.scss","../../src/tree-table/TreeTable.tsx"],"sourcesContent":[".treeColumnCell {\n\tpadding-inline-start: var(--space-sm);\n}\n\n.selectedIndicatorCell {\n\tbox-shadow: inset 0.1875rem 0 0 var(--content-accent);\n}\n\n.treeCell {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--space-xs);\n\tmin-width: 0;\n}\n\n.treeCellContent {\n\tmin-width: 0;\n\tflex: 1 1 auto;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.expanderButton {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex: 0 0 1.5rem;\n\twidth: 1.5rem;\n\theight: 1.5rem;\n\tpadding: 0;\n\tborder: 0;\n\tborder-radius: var(--radius-xs);\n\tbackground: transparent;\n\tcolor: var(--content-0);\n\tcursor: pointer;\n\n\t&:hover,\n\t&:focus-visible {\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n\n.expanderSpacer {\n\tflex: 0 0 1.5rem;\n\twidth: 1.5rem;\n\theight: 1.5rem;\n}\n\n.sentinel {\n\theight: 1px;\n}\n","import { useEffect, useEffectEvent, useMemo, useRef, useState, type ReactNode } from \"react\";\n\nimport { formatPipelineDisplayValue } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport {\n\ttype FoundationTableRow,\n\tfoundationTableFeatures,\n\tresolveTableLength,\n\tTableColumnDef,\n\ttype TableColumnOrderState,\n\ttype TableColumnSizingState,\n\ttype TableColumnVisibilityState,\n\tTableSelectionMode,\n\tuseTableRowSelection\n} from \"@ryuzaki13/react-foundation-lib/table\";\nimport { buildTreeTableRows, type TreeTableFlatHierarchy, type TreeTableRowNode } from \"@ryuzaki13/react-foundation-lib/tree-table\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { useTable, type ExpandedState } from \"@tanstack/react-table\";\nimport { ChevronDownIcon, ChevronRightIcon } from \"lucide-react\";\n\nimport {\n\tBaseTable,\n\tbuildBaseTableMergedCellsLayout,\n\tbuildTableFormattingSnapshot,\n\tFormattedTableCell,\n\tgetOrderedVisibleLeafColumns,\n\tshouldUseTableFormatting,\n\tuseTableColumnOrder,\n\tuseTableColumnPinning,\n\tuseTableColumnSizing,\n\tuseTableColumnVisibility,\n\ttype BaseTableCellRenderArgs,\n\ttype BaseTableColumnState,\n\ttype BaseTableProps,\n\ttype TableColumnPinningState\n} from \"../base-table\";\n\nimport styles from \"./TreeTable.module.scss\";\n\nimport type { TableFormulaRowData } from \"@ryuzaki13/react-foundation-lib/formulas\";\n\n/**\n * Внутренний тип строки TreeTable после преобразования в иерархию.\n */\ntype TreeTableRuntimeRow<TData extends object> = TreeTableRowNode<TData>;\n\n/**\n * Пропсы компонента TreeTable.\n *\n * Компонент принимает плоский OData-список и сам строит иерархию,\n * оставляя управление раскрытием и выбором во внутреннем состоянии.\n */\nexport interface TreeTableProps<TData extends object> {\n\t/**\n\t * Необязательный заголовок над таблицей.\n\t */\n\ttitle?: string;\n\t/**\n\t * Признак первичной загрузки.\n\t */\n\tisLoading?: boolean;\n\t/**\n\t * Признак фоновой догрузки или обновления данных.\n\t */\n\tisFetching?: boolean;\n\t/**\n\t * Плоский источник строк.\n\t */\n\tdata: readonly TData[] | undefined | null;\n\t/**\n\t * Описание колонок через исходный тип строки.\n\t */\n\tcolumns: readonly TableColumnDef<TData>[];\n\t/**\n\t * Правила восстановления дерева из плоского списка.\n\t */\n\thierarchy: TreeTableFlatHierarchy<TData>;\n\t/**\n\t * Режим выбора строк.\n\t */\n\tselectionMode?: TableSelectionMode;\n\t/**\n\t * Если `true`, при первом появлении данных раскрывает корневой уровень.\n\t */\n\texpandFirstLevel?: boolean;\n\t/**\n\t * Дополнительные строки, которые должны быть раскрыты при первой инициализации.\n\t */\n\tdefaultExpandedRowIds?: readonly string[];\n\t/**\n\t * Идентификатор колонки, в которой нужно рисовать tree-toggle и отступы.\n\t *\n\t * Если не указан, используется первая видимая колонка.\n\t */\n\ttreeColumnId?: string;\n\t/**\n\t * Отступ на один уровень вложенности.\n\t *\n\t * Числовое значение трактуется как `em`.\n\t */\n\tindentSize?: string | number;\n\t/**\n\t * Дополнительный CSS-класс корневого контейнера.\n\t */\n\tclassName?: string;\n\t/**\n\t * Дополнительный CSS-класс тега `table`.\n\t */\n\ttableClassName?: string;\n\t/**\n\t * Внешнее controlled-состояние видимости колонок.\n\t */\n\tcolumnVisibility?: TableColumnVisibilityState;\n\t/**\n\t * Стартовое uncontrolled-состояние видимости колонок.\n\t */\n\tdefaultColumnVisibility?: TableColumnVisibilityState;\n\t/**\n\t * Внешнее controlled-состояние порядка колонок.\n\t */\n\tcolumnOrder?: readonly string[];\n\t/**\n\t * Стартовое uncontrolled-состояние порядка колонок.\n\t */\n\tdefaultColumnOrder?: readonly string[];\n\t/**\n\t * Внешнее controlled-состояние ширин колонок в px.\n\t */\n\tcolumnSizing?: TableColumnSizingState;\n\t/**\n\t * Стартовое uncontrolled-состояние ширин колонок в px.\n\t */\n\tdefaultColumnSizing?: TableColumnSizingState;\n\t/**\n\t * Внешнее controlled-состояние start-pinning для колонок.\n\t */\n\tcolumnPinning?: TableColumnPinningState;\n\t/**\n\t * Стартовое uncontrolled-состояние start-pinning для колонок.\n\t */\n\tdefaultColumnPinning?: TableColumnPinningState;\n\t/**\n\t * Включает изменение ширины колонок через header-handle.\n\t */\n\tenableColumnResizing?: boolean;\n\t/**\n\t * Включает изменение порядка колонок через drag&drop заголовков.\n\t */\n\tenableColumnReordering?: boolean;\n\t/**\n\t * Минимальная ширина колонки при resize в px.\n\t */\n\tcolumnResizeMinWidth?: number;\n\t/**\n\t * Вызывается после изменения видимости колонок.\n\t */\n\tonColumnVisibilityChange?: (state: TableColumnVisibilityState) => void;\n\t/**\n\t * Вызывается после изменения порядка колонок.\n\t */\n\tonColumnOrderChange?: (state: TableColumnOrderState) => void;\n\t/**\n\t * Вызывается после изменения ширины колонок.\n\t */\n\tonColumnSizingChange?: (state: TableColumnSizingState) => void;\n\t/**\n\t * Вызывается после изменения start-pinning state.\n\t */\n\tonColumnPinningChange?: (state: TableColumnPinningState) => void;\n\t/**\n\t * Вызывается при активации строки кликом или клавиатурой.\n\t */\n\tonRowClick?: (row: TData) => void;\n\t/**\n\t * Вызывается после изменения выбранных строк.\n\t */\n\tonRowSelectionChange?: (rows: TData[]) => void;\n\t/**\n\t * Вызывается после изменения раскрытых узлов.\n\t */\n\tonExpandedRowIdsChange?: (rowIds: string[]) => void;\n\t/**\n\t * Вызывается при достижении конца таблицы внутри scroll-контейнера.\n\t */\n\tonReachEnd?: () => void;\n\t/**\n\t * Позволяет запретить выбор отдельных строк.\n\t */\n\tgetRowCanSelect?: (row: TData) => boolean;\n\t/**\n\t * Позволяет добавить CSS-класс для конкретной строки.\n\t */\n\tgetRowClassName?: (row: TData) => string | undefined;\n\t/**\n\t * Контекстное меню заголовка колонки. Получает runtime-строки дерева,\n\t * потому что BaseTable работает уже после сборки flat hierarchy.\n\t */\n\trenderHeaderContextMenu?: BaseTableProps<TreeTableRuntimeRow<TData>>[\"renderHeaderContextMenu\"];\n\t/**\n\t * Точка расширения содержимого ячейки после общего форматирования.\n\t *\n\t * Для tree-column в `defaultContent` передается только содержимое ячейки:\n\t * TreeTable сам добавит expander и отступ после выполнения слота.\n\t */\n\trenderCellContent?: BaseTableProps<TreeTableRuntimeRow<TData>>[\"renderCellContent\"];\n}\n\n/**\n * Преобразует массив идентификаторов в формат состояния раскрытия TanStack.\n */\nfunction toExpandedState(rowIds: readonly string[]): ExpandedState {\n\treturn Object.fromEntries(rowIds.map((rowId) => [rowId, true]));\n}\n\n/**\n * Извлекает из состояния раскрытия только активные идентификаторы.\n */\nfunction extractExpandedRowIds(expanded: ExpandedState): string[] {\n\tif (typeof expanded === \"boolean\") {\n\t\treturn [];\n\t}\n\n\treturn Object.keys(expanded).filter((rowId) => expanded[rowId]);\n}\n\n/**\n * Нормализует исходную строку, убирая зависимость от внутреннего поля `children`.\n */\nfunction resolveOriginalRow<TData extends object>(row: FoundationTableRow<TreeTableRuntimeRow<TData>>, rowById: Map<string, TData>): TData {\n\treturn rowById.get(row.id) ?? (row.original as TData);\n}\n\n/**\n * Рендерит содержимое древовидной ячейки.\n */\nfunction renderTreeCellContent<TData extends object>(\n\targs: BaseTableCellRenderArgs<TreeTableRuntimeRow<TData>>,\n\tcontent: ReactNode,\n\ttreeColumnId: string | undefined,\n\tindentSize: string | number\n): ReactNode {\n\tif (args.cell.column.id !== treeColumnId) {\n\t\treturn content;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.treeCell}\n\t\t\tstyle={{\n\t\t\t\tpaddingInlineStart: `calc(${args.row.depth} * ${resolveTableLength(indentSize) ?? \"0em\"})`\n\t\t\t}}>\n\t\t\t{args.row.getCanExpand() ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.expanderButton}\n\t\t\t\t\taria-label={args.row.getIsExpanded() ? \"Свернуть строку\" : \"Развернуть строку\"}\n\t\t\t\t\tdata-tree-table-interactive=\"true\"\n\t\t\t\t\tdata-ui=\"tree-table-expander\"\n\t\t\t\t\tdata-action={args.row.getIsExpanded() ? \"collapse-tree-table-row\" : \"expand-tree-table-row\"}\n\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\targs.row.toggleExpanded();\n\t\t\t\t\t}}>\n\t\t\t\t\t{args.row.getIsExpanded() ? <ChevronDownIcon size={16} /> : <ChevronRightIcon size={16} />}\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span className={styles.expanderSpacer} aria-hidden=\"true\" />\n\t\t\t)}\n\n\t\t\t<div className={styles.treeCellContent}>{content}</div>\n\t\t</div>\n\t);\n}\n\n/**\n * Древовидная таблица на базе TanStack Table для плоских OData-данных.\n */\nexport function TreeTable<TData extends object>({\n\ttitle,\n\tisLoading,\n\tisFetching,\n\tdata,\n\tcolumns,\n\thierarchy,\n\tselectionMode = \"none\",\n\texpandFirstLevel = false,\n\tdefaultExpandedRowIds,\n\ttreeColumnId,\n\tindentSize = 1,\n\tclassName,\n\ttableClassName,\n\tcolumnVisibility,\n\tdefaultColumnVisibility,\n\tcolumnOrder,\n\tdefaultColumnOrder,\n\tcolumnSizing,\n\tdefaultColumnSizing,\n\tcolumnPinning,\n\tdefaultColumnPinning,\n\tenableColumnResizing = false,\n\tenableColumnReordering = false,\n\tcolumnResizeMinWidth,\n\tonColumnVisibilityChange,\n\tonColumnOrderChange,\n\tonColumnSizingChange,\n\tonColumnPinningChange,\n\tonRowClick,\n\tonRowSelectionChange,\n\tonExpandedRowIdsChange,\n\tonReachEnd,\n\tgetRowCanSelect,\n\tgetRowClassName,\n\trenderHeaderContextMenu,\n\trenderCellContent\n}: TreeTableProps<TData>) {\n\tconst treeData = useMemo(() => buildTreeTableRows(data ?? [], hierarchy), [data, hierarchy]);\n\tconst formattingSnapshot = useMemo(() => buildTableFormattingSnapshot(columns), [columns]);\n\tconst initialExpandedRowIds = useMemo(() => {\n\t\tconst nextExpandedRowIds = new Set(defaultExpandedRowIds ?? []);\n\n\t\tif (expandFirstLevel) {\n\t\t\tfor (const rootRowId of treeData.rootRowIds) {\n\t\t\t\tnextExpandedRowIds.add(rootRowId);\n\t\t\t}\n\t\t}\n\n\t\treturn Array.from(nextExpandedRowIds);\n\t}, [defaultExpandedRowIds, expandFirstLevel, treeData.rootRowIds]);\n\n\tconst [expanded, setExpanded] = useState<ExpandedState>({});\n\tconst hasInitializedExpansionRef = useRef(false);\n\tconst scrollableRef = useRef<HTMLDivElement | null>(null);\n\tconst sentinelRef = useRef<HTMLDivElement | null>(null);\n\n\tconst { rowSelection, activateRowSelection } = useTableRowSelection({\n\t\tavailableRowIds: treeData.allRowIds,\n\t\trowById: treeData.rowById,\n\t\tselectionMode,\n\t\tonRowSelectionChange\n\t});\n\tconst { columnVisibility: resolvedColumnVisibility, onColumnVisibilityChange: handleColumnVisibilityChange } = useTableColumnVisibility(\n\t\t{\n\t\t\tcolumnVisibility,\n\t\t\tdefaultColumnVisibility,\n\t\t\tonColumnVisibilityChange\n\t\t}\n\t);\n\tconst { columnOrder: resolvedColumnOrder, onColumnOrderChange: handleColumnOrderChange } = useTableColumnOrder({\n\t\tcolumnOrder,\n\t\tdefaultColumnOrder,\n\t\tonColumnOrderChange\n\t});\n\tconst { columnSizing: resolvedColumnSizing, onColumnSizingChange: handleColumnSizingChange } = useTableColumnSizing({\n\t\tcolumnSizing,\n\t\tdefaultColumnSizing,\n\t\tcolumnResizeMinWidth,\n\t\tonColumnSizingChange\n\t});\n\tconst { columnPinning: resolvedColumnPinning, onColumnPinningChange: handleColumnPinningChange } = useTableColumnPinning({\n\t\tcolumnPinning,\n\t\tdefaultColumnPinning,\n\t\tonColumnPinningChange\n\t});\n\n\tconst baseTableColumnState = useMemo<BaseTableColumnState>(\n\t\t() => ({\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility\n\t\t}),\n\t\t[resolvedColumnOrder, resolvedColumnPinning, resolvedColumnSizing, resolvedColumnVisibility]\n\t);\n\n\tconst syncExpandedState = useEffectEvent((availableRowIds: readonly string[], nextInitialExpandedRowIds: readonly string[]) => {\n\t\tif (availableRowIds.length === 0) {\n\t\t\thasInitializedExpansionRef.current = false;\n\t\t\tsetExpanded({});\n\t\t\treturn;\n\t\t}\n\n\t\tconst availableRowIdSet = new Set(availableRowIds);\n\n\t\tsetExpanded((currentExpanded) => {\n\t\t\tconst persistedRowIds = extractExpandedRowIds(currentExpanded).filter((rowId) => availableRowIdSet.has(rowId));\n\n\t\t\tif (!hasInitializedExpansionRef.current) {\n\t\t\t\thasInitializedExpansionRef.current = true;\n\n\t\t\t\tconst seededRowIds = Array.from(\n\t\t\t\t\tnew Set([...persistedRowIds, ...nextInitialExpandedRowIds.filter((rowId) => availableRowIdSet.has(rowId))])\n\t\t\t\t);\n\n\t\t\t\treturn toExpandedState(seededRowIds);\n\t\t\t}\n\n\t\t\treturn toExpandedState(persistedRowIds);\n\t\t});\n\t});\n\n\tconst emitExpandedRowIdsChange = useEffectEvent((currentExpanded: ExpandedState) => {\n\t\tonExpandedRowIdsChange?.(extractExpandedRowIds(currentExpanded));\n\t});\n\n\tconst emitReachEnd = useEffectEvent(() => {\n\t\tonReachEnd?.();\n\t});\n\n\tuseEffect(() => {\n\t\tsyncExpandedState(treeData.allRowIds, initialExpandedRowIds);\n\t}, [initialExpandedRowIds, treeData.allRowIds]);\n\n\tuseEffect(() => {\n\t\temitExpandedRowIdsChange(expanded);\n\t}, [expanded]);\n\n\tuseEffect(() => {\n\t\tif (!onReachEnd || !scrollableRef.current || !sentinelRef.current || isLoading) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tconst entry = entries[0];\n\n\t\t\t\tif (entry?.isIntersecting) {\n\t\t\t\t\temitReachEnd();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\troot: scrollableRef.current,\n\t\t\t\tthreshold: 0.1\n\t\t\t}\n\t\t);\n\n\t\tobserver.observe(sentinelRef.current);\n\n\t\treturn () => observer.disconnect();\n\t}, [isLoading, onReachEnd, treeData.rows.length]);\n\n\tconst table = useTable({\n\t\tfeatures: foundationTableFeatures,\n\t\tdata: treeData.rows as TreeTableRuntimeRow<TData>[],\n\t\tcolumns: columns as TableColumnDef<TreeTableRuntimeRow<TData>>[],\n\t\tstate: {\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility,\n\t\t\texpanded,\n\t\t\trowSelection\n\t\t},\n\t\tgetRowId: (row) => hierarchy.getRowId(row as TData),\n\t\tgetSubRows: (row) => row.children,\n\t\tonColumnOrderChange: handleColumnOrderChange,\n\t\tonColumnPinningChange: handleColumnPinningChange,\n\t\tonColumnSizingChange: handleColumnSizingChange,\n\t\tonColumnVisibilityChange: handleColumnVisibilityChange,\n\t\tonExpandedChange: setExpanded,\n\t\tenableMultiRowSelection: selectionMode === \"multi\",\n\t\tenableRowSelection: (row) => {\n\t\t\tif (selectionMode === \"none\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\t\treturn getRowCanSelect ? getRowCanSelect(originalRow) : true;\n\t\t}\n\t});\n\n\tconst visibleLeafColumns = getOrderedVisibleLeafColumns(table, baseTableColumnState);\n\tconst resolvedTreeColumnId = treeColumnId ?? visibleLeafColumns[0]?.id;\n\tconst rowModelRows = table.getRowModel().rows;\n\tconst mergedCellLayout = useMemo(\n\t\t() =>\n\t\t\tbuildBaseTableMergedCellsLayout({\n\t\t\t\trows: rowModelRows,\n\t\t\t\tcolumns: visibleLeafColumns,\n\t\t\t\tresolveRowBoundaryKey: (row) => row.depth,\n\t\t\t\texcludeColumnIds: resolvedTreeColumnId ? new Set([resolvedTreeColumnId]) : undefined\n\t\t\t}),\n\t\t[rowModelRows, visibleLeafColumns, resolvedTreeColumnId]\n\t);\n\n\t/**\n\t * Активирует строку: обновляет выбор в соответствии с режимом и вызывает внешний callback.\n\t */\n\tconst activateRow = (row: FoundationTableRow<TreeTableRuntimeRow<TData>>) => {\n\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\tactivateRowSelection(row.id, row.getCanSelect());\n\t\tonRowClick?.(originalRow);\n\t};\n\n\treturn (\n\t\t<BaseTable\n\t\t\ttable={table}\n\t\t\tcolumnState={baseTableColumnState}\n\t\t\ttitle={title}\n\t\t\tisLoading={isLoading}\n\t\t\tisFetching={isFetching}\n\t\t\tclassName={className}\n\t\t\ttableClassName={tableClassName}\n\t\t\tselectionMode={selectionMode}\n\t\t\tscrollableRef={scrollableRef}\n\t\t\tinteractiveElementSelector='[data-tree-table-interactive=\"true\"]'\n\t\t\tonActivateRow={selectionMode !== \"none\" || onRowClick ? activateRow : undefined}\n\t\t\tisRowInteractive={(row) => Boolean(onRowClick || (selectionMode !== \"none\" && row.getCanSelect()))}\n\t\t\tgetRowClassName={(row) => {\n\t\t\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\t\t\treturn getRowClassName?.(originalRow);\n\t\t\t}}\n\t\t\tgetCellClassName={({ row, cell }) =>\n\t\t\t\tcn(\n\t\t\t\t\tcell.column.id === resolvedTreeColumnId && styles.treeColumnCell,\n\t\t\t\t\tcell.column.id === resolvedTreeColumnId && row.getIsSelected() && styles.selectedIndicatorCell\n\t\t\t\t)\n\t\t\t}\n\t\t\tgetCellLayout={({ cell }) => mergedCellLayout.get(cell.id)}\n\t\t\trenderHeaderContextMenu={renderHeaderContextMenu}\n\t\t\tenableColumnResizing={enableColumnResizing}\n\t\t\tenableColumnReordering={enableColumnReordering}\n\t\t\tcolumnResizeMinWidth={columnResizeMinWidth}\n\t\t\trenderCellContent={(args) => {\n\t\t\t\tconst originalRow = resolveOriginalRow(args.row, treeData.rowById);\n\t\t\t\tconst displayValue = formatPipelineDisplayValue({\n\t\t\t\t\tfield: formattingSnapshot.runtimeByColumnId[args.cell.column.id],\n\t\t\t\t\trawValue: args.cell.getValue(),\n\t\t\t\t\trowData: originalRow as TableFormulaRowData,\n\t\t\t\t\trowKind: \"tree\"\n\t\t\t\t});\n\t\t\t\tconst defaultContent = shouldUseTableFormatting({\n\t\t\t\t\tcolumnId: args.cell.column.id,\n\t\t\t\t\truntimeByColumnId: formattingSnapshot.runtimeByColumnId,\n\t\t\t\t\tcustomCellColumnIds: formattingSnapshot.customCellColumnIds\n\t\t\t\t}) ? (\n\t\t\t\t\t<FormattedTableCell displayValue={displayValue} align={args.columnMeta?.align} />\n\t\t\t\t) : (\n\t\t\t\t\targs.defaultContent\n\t\t\t\t);\n\t\t\t\tconst content = renderCellContent\n\t\t\t\t\t? renderCellContent({\n\t\t\t\t\t\t\t...args,\n\t\t\t\t\t\t\tdefaultContent,\n\t\t\t\t\t\t\tdisplayValue\n\t\t\t\t\t\t})\n\t\t\t\t\t: defaultContent;\n\n\t\t\t\treturn renderTreeCellContent(args, content, resolvedTreeColumnId, indentSize);\n\t\t\t}}\n\t\t\tafterTableContent={onReachEnd ? <div ref={sentinelRef} className={styles.sentinel} aria-hidden=\"true\" /> : null}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;ACiNA,SAAS,EAAgB,GAA0C;CAClE,OAAO,OAAO,YAAY,EAAO,KAAK,MAAU,CAAC,GAAO,EAAI,CAAC,CAAC;AAC/D;AAKA,SAAS,EAAsB,GAAmC;CAKjE,OAJI,OAAO,KAAa,YAChB,CAAC,IAGF,OAAO,KAAK,CAAQ,CAAC,CAAC,QAAQ,MAAU,EAAS,EAAM;AAC/D;AAKA,SAAS,EAAyC,GAAqD,GAAoC;CAC1I,OAAO,EAAQ,IAAI,EAAI,EAAE,KAAM,EAAI;AACpC;AAKA,SAAS,GACR,GACA,GACA,GACA,GACY;CAKZ,OAJI,EAAK,KAAK,OAAO,OAAO,IAK3B,kBAAC,OAAD;EACC,WAAW,EAAO;EAClB,OAAO,EACN,oBAAoB,QAAQ,EAAK,IAAI,MAAM,KAAK,EAAmB,CAAU,KAAK,MAAM,GACzF;EAJD,UAAA,CAKE,EAAK,IAAI,aAAa,IACtB,kBAAC,UAAD;GACC,MAAK;GACL,WAAW,EAAO;GAClB,cAAY,EAAK,IAAI,cAAc,IAAI,oBAAoB;GAC3D,+BAA4B;GAC5B,WAAQ;GACR,eAAa,EAAK,IAAI,cAAc,IAAI,4BAA4B;GACpE,UAAU,MAAU;IAEnB,AADA,EAAM,gBAAgB,GACtB,EAAK,IAAI,eAAe;GACzB;GACC,UAAA,EAAK,IAAI,cAAc,IAAI,kBAAC,GAAD,EAAiB,MAAM,GAAK,CAAA,IAAI,kBAAC,GAAD,EAAkB,MAAM,GAAK,CAAA;EAClF,CAAA,IAER,kBAAC,QAAD;GAAM,WAAW,EAAO;GAAgB,eAAY;EAAQ,CAAA,GAG7D,kBAAC,OAAD;GAAK,WAAW,EAAO;GAAkB,UAAA;EAAa,CAAA,CAClD;MA5BE;AA8BT;AAKA,SAAgB,EAAgC,EAC/C,UACA,cACA,eACA,SACA,YACA,cACA,mBAAgB,QAChB,sBAAmB,IACnB,0BACA,iBACA,iBAAa,GACb,eACA,oBACA,sBACA,4BACA,iBACA,wBACA,kBACA,yBACA,mBACA,yBACA,0BAAuB,IACvB,4BAAyB,IACzB,yBACA,6BACA,wBACA,yBACA,0BACA,eACA,0BACA,4BACA,eACA,oBACA,qBACA,6BACA,wBACyB;CACzB,IAAM,IAAW,QAAc,GAAmB,KAAQ,CAAC,GAAG,CAAS,GAAG,CAAC,GAAM,CAAS,CAAC,GACrF,IAAqB,QAAc,EAA6B,CAAO,GAAG,CAAC,CAAO,CAAC,GACnF,IAAwB,QAAc;EAC3C,IAAM,IAAqB,IAAI,IAAI,KAAyB,CAAC,CAAC;EAE9D,IAAI,GACH,KAAK,IAAM,KAAa,EAAS,YAChC,EAAmB,IAAI,CAAS;EAIlC,OAAO,MAAM,KAAK,CAAkB;CACrC,GAAG;EAAC;EAAuB;EAAkB,EAAS;CAAU,CAAC,GAE3D,CAAC,GAAU,KAAe,GAAwB,CAAC,CAAC,GACpD,IAA6B,EAAO,EAAK,GACzC,IAAgB,EAA8B,IAAI,GAClD,IAAc,EAA8B,IAAI,GAEhD,EAAE,kBAAc,6BAAyB,GAAqB;EACnE,iBAAiB,EAAS;EAC1B,SAAS,EAAS;EAClB;EACA;CACD,CAAC,GACK,EAAE,kBAAkB,GAA0B,0BAA0B,OAAiC,GAC9G;EACC;EACA;EACA;CACD,CACD,GACM,EAAE,aAAa,GAAqB,qBAAqB,OAA4B,GAAoB;EAC9G;EACA;EACA;CACD,CAAC,GACK,EAAE,cAAc,GAAsB,sBAAsB,OAA6B,EAAqB;EACnH;EACA;EACA;EACA;CACD,CAAC,GACK,EAAE,eAAe,GAAuB,uBAAuB,OAA8B,EAAsB;EACxH;EACA;EACA;CACD,CAAC,GAEK,IAAuB,SACrB;EACN,aAAa;EACb,eAAe;EACf,cAAc;EACd,kBAAkB;CACnB,IACA;EAAC;EAAqB;EAAuB;EAAsB;CAAwB,CAC5F,GAEM,KAAoB,GAAgB,GAAoC,MAAiD;EAC9H,IAAI,EAAgB,WAAW,GAAG;GAEjC,AADA,EAA2B,UAAU,IACrC,EAAY,CAAC,CAAC;GACd;EACD;EAEA,IAAM,IAAoB,IAAI,IAAI,CAAe;EAEjD,GAAa,MAAoB;GAChC,IAAM,IAAkB,EAAsB,CAAe,CAAC,CAAC,QAAQ,MAAU,EAAkB,IAAI,CAAK,CAAC;GAY7G,OAVK,EAA2B,UAUzB,EAAgB,CAAe,KATrC,EAA2B,UAAU,IAM9B,EAJc,MAAM,qBAC1B,IAAI,IAAI,CAAC,GAAG,GAAiB,GAAG,EAA0B,QAAQ,MAAU,EAAkB,IAAI,CAAK,CAAC,CAAC,CAAC,CAGpF,CAAY;EAIrC,CAAC;CACF,CAAC,GAEK,KAA2B,GAAgB,MAAmC;EACnF,KAAyB,EAAsB,CAAe,CAAC;CAChE,CAAC,GAEK,KAAe,QAAqB;EACzC,IAAa;CACd,CAAC;CAUD,AARA,QAAgB;EACf,GAAkB,EAAS,WAAW,CAAqB;CAC5D,GAAG,CAAC,GAAuB,EAAS,SAAS,CAAC,GAE9C,QAAgB;EACf,GAAyB,CAAQ;CAClC,GAAG,CAAC,CAAQ,CAAC,GAEb,QAAgB;EACf,IAAI,CAAC,KAAc,CAAC,EAAc,WAAW,CAAC,EAAY,WAAW,GACpE;EAGD,IAAM,IAAW,IAAI,sBACnB,MAAY;GAGZ,AAFc,EAAQ,EAElB,EAAO,kBACV,GAAa;EAEf,GACA;GACC,MAAM,EAAc;GACpB,WAAW;EACZ,CACD;EAIA,OAFA,EAAS,QAAQ,EAAY,OAAO,SAEvB,EAAS,WAAW;CAClC,GAAG;EAAC;EAAW;EAAY,EAAS,KAAK;CAAM,CAAC;CAEhD,IAAM,IAAQ,GAAS;EACtB,UAAU;EACV,MAAM,EAAS;EACN;EACT,OAAO;GACN,aAAa;GACb,eAAe;GACf,cAAc;GACd,kBAAkB;GAClB;GACA;EACD;EACA,WAAW,MAAQ,EAAU,SAAS,CAAY;EAClD,aAAa,MAAQ,EAAI;EACzB,qBAAqB;EACrB,uBAAuB;EACvB,sBAAsB;EACtB,0BAA0B;EAC1B,kBAAkB;EAClB,yBAAyB,MAAkB;EAC3C,qBAAqB,MAAQ;GAC5B,IAAI,MAAkB,QACrB,OAAO;GAGR,IAAM,IAAc,EAAmB,GAAK,EAAS,OAAO;GAE5D,OAAO,MAAkB,EAAgB,CAAW;EACrD;CACD,CAAC,GAEK,IAAqB,GAA6B,GAAO,CAAoB,GAC7E,IAAuB,KAAgB,EAAmB,EAAE,EAAE,IAC9D,IAAe,EAAM,YAAY,CAAC,CAAC,MACnC,KAAmB,QAEvB,GAAgC;EAC/B,MAAM;EACN,SAAS;EACT,wBAAwB,MAAQ,EAAI;EACpC,kBAAkB,oBAAuB,IAAI,IAAI,CAAC,CAAoB,CAAC,IAAI,KAAA;CAC5E,CAAC,GACF;EAAC;EAAc;EAAoB;CAAoB,CACxD;CAYA,OACC,kBAAC,GAAD;EACQ;EACP,aAAa;EACN;EACI;EACC;EACD;EACK;EACD;EACA;EACf,4BAA2B;EAC3B,eAAe,MAAkB,UAAU,KAnBxB,MAAwD;GAC5E,IAAM,IAAc,EAAmB,GAAK,EAAS,OAAO;GAG5D,AADA,GAAqB,EAAI,IAAI,EAAI,aAAa,CAAC,GAC/C,IAAa,CAAW;EACzB,IAcwE,KAAA;EACtE,mBAAmB,MAAQ,GAAQ,KAAe,MAAkB,UAAU,EAAI,aAAa;EAC/F,kBAAkB,MAAQ;GACzB,IAAM,IAAc,EAAmB,GAAK,EAAS,OAAO;GAE5D,OAAO,KAAkB,CAAW;EACrC;EACA,mBAAmB,EAAE,QAAK,cACzB,GACC,EAAK,OAAO,OAAO,KAAwB,EAAO,gBAClD,EAAK,OAAO,OAAO,KAAwB,EAAI,cAAc,KAAK,EAAO,qBAC1E;EAED,gBAAgB,EAAE,cAAW,GAAiB,IAAI,EAAK,EAAE;EAChC;EACH;EACE;EACF;EACtB,oBAAoB,MAAS;GAC5B,IAAM,IAAc,EAAmB,EAAK,KAAK,EAAS,OAAO,GAC3D,IAAe,GAA2B;IAC/C,OAAO,EAAmB,kBAAkB,EAAK,KAAK,OAAO;IAC7D,UAAU,EAAK,KAAK,SAAS;IAC7B,SAAS;IACT,SAAS;GACV,CAAC,GACK,IAAiB,EAAyB;IAC/C,UAAU,EAAK,KAAK,OAAO;IAC3B,mBAAmB,EAAmB;IACtC,qBAAqB,EAAmB;GACzC,CAAC,IACA,kBAAC,IAAD;IAAkC;IAAc,OAAO,EAAK,YAAY;GAAQ,CAAA,IAEhF,EAAK;GAUN,OAAO,GAAsB,GARb,IACb,EAAkB;IAClB,GAAG;IACH;IACA;GACD,CAAC,IACA,GAEyC,GAAsB,EAAU;EAC7E;EACA,mBAAmB,IAAa,kBAAC,OAAD;GAAK,KAAK;GAAa,WAAW,EAAO;GAAU,eAAY;EAAQ,CAAA,IAAI;CAC3G,CAAA;AAEH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuzaki13/react-foundation-ui",
3
- "version": "1.6.14",
3
+ "version": "1.7.0",
4
4
  "description": "Reusable React foundation UI primitives and Storybook stories.",
5
5
  "license": "MIT",
6
6
  "author": "Ryuzaki13",
@@ -369,10 +369,10 @@
369
369
  "@lexical/utils": ">=0.46.0 <1.0.0",
370
370
  "@ryuzaki13/react-foundation-api": ">=0.1.0 <2.0.0",
371
371
  "@ryuzaki13/react-foundation-lib": ">=0.1.0 <2.0.0",
372
- "@tanstack/react-query": ">=5.101.1 <6.0.0",
373
- "@tanstack/react-router": ">=1.170.0 <2.0.0",
374
- "@tanstack/react-table": ">=8.21.0 <9.0.0",
375
- "@tanstack/react-virtual": ">=3.14.0 <4.0.0",
372
+ "@tanstack/react-query": ">=5.101.4 <6.0.0",
373
+ "@tanstack/react-router": ">=1.170.23 <2.0.0",
374
+ "@tanstack/react-table": ">=9.1.0 <10.0.0",
375
+ "@tanstack/react-virtual": ">=3.14.9 <4.0.0",
376
376
  "lexical": ">=0.46.0 <1.0.0",
377
377
  "lucide-react": ">=1.21.0 <2.0.0",
378
378
  "motion": ">=12.42.0 <13.0.0",
@@ -464,8 +464,8 @@
464
464
  "@lexical/rich-text": "^0.49.0",
465
465
  "@lexical/selection": "^0.49.0",
466
466
  "@lexical/utils": "^0.49.0",
467
- "@ryuzaki13/react-foundation-api": "^1.1.13",
468
- "@ryuzaki13/react-foundation-lib": "^1.2.8",
467
+ "@ryuzaki13/react-foundation-api": "^1.1.16",
468
+ "@ryuzaki13/react-foundation-lib": "^1.4.0",
469
469
  "@storybook/addon-a11y": "^10.5.5",
470
470
  "@storybook/addon-docs": "^10.5.5",
471
471
  "@storybook/addon-vitest": "^10.5.5",
@@ -473,8 +473,8 @@
473
473
  "@tanstack/query-broadcast-client-experimental": "^5.101.4",
474
474
  "@tanstack/query-persist-client-core": "^5.101.4",
475
475
  "@tanstack/react-query": "^5.101.4",
476
- "@tanstack/react-router": "^1.170.18",
477
- "@tanstack/react-table": "^8.21.3",
476
+ "@tanstack/react-router": "^1.170.23",
477
+ "@tanstack/react-table": "^9.1.0",
478
478
  "@tanstack/react-virtual": "^3.14.9",
479
479
  "@testing-library/dom": "^10.4.1",
480
480
  "@testing-library/react": "^16.3.2",
@@ -191,15 +191,15 @@ $paragraph-spacing-preset-defaults: (
191
191
 
192
192
  $light-theme-defaults: (
193
193
  tokens: (
194
- "--surface-0": #ffffff,
195
- "--surface-1": #f8f8f9,
196
- "--surface-2": #f1f1f3,
197
- "--content-0": oklch(0.26 0.01 244),
198
- "--content-1": oklch(0.52 0.02 268),
199
- "--content-2": oklch(0.66 0.01 258),
200
- "--focus-ring": oklch(0.5 0.3 270),
201
- "--overlay-backdrop": rgba(0, 0, 0, 0.1),
202
- "--overlay-glass": rgba(255, 255, 255, 0.8),
194
+ "--surface-0": var(--hc-surface, #ffffff),
195
+ "--surface-1": var(--hc-surface, #f8f8f9),
196
+ "--surface-2": var(--hc-surface, #f1f1f3),
197
+ "--content-0": var(--hc-content, oklch(0.26 0.01 244)),
198
+ "--content-1": var(--hc-content, oklch(0.52 0.02 268)),
199
+ "--content-2": var(--hc-content, oklch(0.66 0.01 258)),
200
+ "--focus-ring": var(--hc-focus-ring, oklch(0.5 0.3 270)),
201
+ "--overlay-backdrop": var(--hc-overlay-backdrop, rgba(0, 0, 0, 0.1)),
202
+ "--overlay-glass": var(--hc-overlay-glass, rgba(255, 255, 255, 0.8)),
203
203
  "--shadow-xs": 0 0 0.25em rgba(0, 0, 0, 0.15),
204
204
  "--shadow-sm": 0 0 0.25em rgba(0, 0, 0, 0.25),
205
205
  "--shadow-md": 0 0 0.5em rgba(0, 0, 0, 0.25),
@@ -186,26 +186,26 @@
186
186
  @mixin generate-status-fill($name, $L, $C, $H, $mode) {
187
187
  $s: status-scale($L, $C, $H, $mode);
188
188
 
189
- --status-#{$name}-text: #{map.get(map.get($s, outline), base)};
190
- --status-#{$name}-text-hover: #{map.get(map.get($s, outline), hover)};
191
- --status-#{$name}-text-active: #{map.get(map.get($s, outline), active)};
189
+ --status-#{$name}-text: var(--hc-status-#{$name}-text, #{map.get(map.get($s, outline), base)});
190
+ --status-#{$name}-text-hover: var(--hc-status-#{$name}-text, #{map.get(map.get($s, outline), hover)});
191
+ --status-#{$name}-text-active: var(--hc-status-#{$name}-text, #{map.get(map.get($s, outline), active)});
192
192
 
193
- --status-#{$name}-fill: #{map.get(map.get($s, fill), base)};
194
- --status-#{$name}-fill-hover: #{map.get(map.get($s, fill), hover)};
195
- --status-#{$name}-fill-active: #{map.get(map.get($s, fill), active)};
196
- --status-#{$name}-on-fill: #{map.get(map.get($s, fill), on-fill)};
193
+ --status-#{$name}-fill: var(--hc-status-#{$name}-fill, #{map.get(map.get($s, fill), base)});
194
+ --status-#{$name}-fill-hover: var(--hc-status-#{$name}-fill, #{map.get(map.get($s, fill), hover)});
195
+ --status-#{$name}-fill-active: var(--hc-status-#{$name}-fill, #{map.get(map.get($s, fill), active)});
196
+ --status-#{$name}-on-fill: var(--hc-status-#{$name}-on-fill, #{map.get(map.get($s, fill), on-fill)});
197
197
 
198
- --status-#{$name}-soft: #{map.get($s, soft)};
198
+ --status-#{$name}-soft: var(--hc-status-#{$name}-soft, #{map.get($s, soft)});
199
199
  }
200
200
 
201
201
  @mixin generate-status-border($name, $L, $C, $H, $mode) {
202
202
  @if $name == neutral {
203
203
  $s: status-border-neutral($L, $C, $H, $mode);
204
204
 
205
- --border-0: #{map.get($s, base)};
206
- --border-1: #{map.get($s, hover)};
207
- --border-2: #{map.get($s, active)};
208
- --border-focus: #{map.get($s, focus)};
205
+ --border-0: var(--hc-border, #{map.get($s, base)});
206
+ --border-1: var(--hc-border, #{map.get($s, hover)});
207
+ --border-2: var(--hc-border, #{map.get($s, active)});
208
+ --border-focus: var(--hc-border-focus, #{map.get($s, focus)});
209
209
 
210
210
  --status-#{$name}-border: var(--border-0);
211
211
  --status-#{$name}-border-hover: var(--border-1);
@@ -214,10 +214,10 @@
214
214
  } @else {
215
215
  $s: status-scale($L, $C, $H, $mode);
216
216
 
217
- --status-#{$name}-border: #{map.get(map.get($s, border), base)};
218
- --status-#{$name}-border-hover: #{map.get(map.get($s, border), hover)};
219
- --status-#{$name}-border-active: #{map.get(map.get($s, border), active)};
220
- --status-#{$name}-border-focus: #{map.get(map.get($s, border), focus)};
217
+ --status-#{$name}-border: var(--hc-status-#{$name}-border, #{map.get(map.get($s, border), base)});
218
+ --status-#{$name}-border-hover: var(--hc-status-#{$name}-border, #{map.get(map.get($s, border), hover)});
219
+ --status-#{$name}-border-active: var(--hc-status-#{$name}-border, #{map.get(map.get($s, border), active)});
220
+ --status-#{$name}-border-focus: var(--hc-status-#{$name}-border, #{map.get(map.get($s, border), focus)});
221
221
  }
222
222
  }
223
223
 
@@ -271,10 +271,10 @@
271
271
  @mixin generate-neutral-border3($L, $C, $H, $mode) {
272
272
  $s: status-border-neutral3($L, $C, $H, $mode);
273
273
 
274
- --border-0: #{map.get($s, base)};
275
- --border-1: #{map.get($s, hover)};
276
- --border-2: #{map.get($s, active)};
277
- --border-focus: #{map.get($s, focus)};
274
+ --border-0: var(--hc-border, #{map.get($s, base)});
275
+ --border-1: var(--hc-border, #{map.get($s, hover)});
276
+ --border-2: var(--hc-border, #{map.get($s, active)});
277
+ --border-focus: var(--hc-border-focus, #{map.get($s, focus)});
278
278
 
279
279
  --status-neutral-border: var(--border-0);
280
280
  --status-neutral-border-hover: var(--border-1);
@@ -284,16 +284,16 @@
284
284
 
285
285
  @mixin generate-accent($L, $C, $H, $mode) {
286
286
  @if $mode == light {
287
- --content-accent: oklch(#{$L} #{$C} #{$H});
288
- --surface-accent: oklch(#{$L + 0.4} #{math.max(0, $C - 0.2)} #{$H - 15});
289
- --border-accent: oklch(#{$L - 0.03} #{math.max(0, $C - 0.08)} #{$H});
290
- // --focus-accent: oklch(#{$L + 0.04} #{$C + 0.05} #{$H});
287
+ --content-accent: var(--hc-content-accent, oklch(#{$L} #{$C} #{$H}));
288
+ --surface-accent: var(--hc-surface-accent, oklch(#{$L + 0.4} #{math.max(0, $C - 0.2)} #{$H - 15}));
289
+ --border-accent: var(--hc-border-accent, oklch(#{$L - 0.03} #{math.max(0, $C - 0.08)} #{$H}));
290
+ // --focus-accent: var(--hc-focus-accent, oklch(#{$L + 0.04} #{$C + 0.05} #{$H}));
291
291
  }
292
292
 
293
293
  @if $mode == dark {
294
- --content-accent: oklch(#{$L} #{$C} #{$H});
295
- --surface-accent: oklch(#{$L - 0.4} #{math.max(0, $C - 0.15)} #{$H - 10});
296
- --border-accent: oklch(#{$L - 0.08} #{math.max(0, $C - 0.1)} #{$H});
297
- // --focus-accent: oklch(#{$L + 0.06} #{$C + 0.03} #{$H});
294
+ --content-accent: var(--hc-content-accent, oklch(#{$L} #{$C} #{$H}));
295
+ --surface-accent: var(--hc-surface-accent, oklch(#{$L - 0.4} #{math.max(0, $C - 0.15)} #{$H - 10}));
296
+ --border-accent: var(--hc-border-accent, oklch(#{$L - 0.08} #{math.max(0, $C - 0.1)} #{$H}));
297
+ // --focus-accent: var(--hc-focus-accent, oklch(#{$L + 0.06} #{$C + 0.03} #{$H}));
298
298
  }
299
299
  }
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-DM52JHVE.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-7Wf2ozDB.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./Badge.stories-Ct1rOXKb.js";function b(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-BnW9ONAs.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-W-usNnZb.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./Badge.stories-0OqfwxFw.js";function b(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
2
2
  `,(0,S.jsx)(u,{children:`Badge`}),`
3
3
  `,(0,S.jsx)(o,{children:`Компактная текстовая метка для статусов, категорий, фильтров и коротких служебных пометок`}),`
4
4
  `,(0,S.jsx)(t.p,{children:`Badge подходит для коротких подписей, которые должны быстро читаться и не перегружать интерфейс:`}),`