@ryuzaki13/react-foundation-ui 1.0.1 → 1.0.2

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 (253) hide show
  1. package/dist/advanced-search/index.d.ts +3 -0
  2. package/dist/advanced-search/index.d.ts.map +1 -0
  3. package/dist/advanced-search/index.js +361 -0
  4. package/dist/advanced-search/index.js.map +1 -0
  5. package/dist/advanced-search/lib/index.d.ts +2 -0
  6. package/dist/advanced-search/lib/index.d.ts.map +1 -0
  7. package/dist/advanced-search/lib/searchParts.d.ts +3 -0
  8. package/dist/advanced-search/lib/searchParts.d.ts.map +1 -0
  9. package/dist/advanced-search/model/index.d.ts +5 -0
  10. package/dist/advanced-search/model/index.d.ts.map +1 -0
  11. package/dist/advanced-search/model/types.d.ts +55 -0
  12. package/dist/advanced-search/model/types.d.ts.map +1 -0
  13. package/dist/advanced-search/model/useAdvancedSearch.d.ts +11 -0
  14. package/dist/advanced-search/model/useAdvancedSearch.d.ts.map +1 -0
  15. package/dist/advanced-search/model/useAdvancedSearchInitialSelected.d.ts +6 -0
  16. package/dist/advanced-search/model/useAdvancedSearchInitialSelected.d.ts.map +1 -0
  17. package/dist/advanced-search/model/useAdvancedSearchSelection.d.ts +13 -0
  18. package/dist/advanced-search/model/useAdvancedSearchSelection.d.ts.map +1 -0
  19. package/dist/advanced-search/ui/AdvancedSearchModal.d.ts +13 -0
  20. package/dist/advanced-search/ui/AdvancedSearchModal.d.ts.map +1 -0
  21. package/dist/advanced-search/ui/AdvancedSearchSelect.d.ts +8 -0
  22. package/dist/advanced-search/ui/AdvancedSearchSelect.d.ts.map +1 -0
  23. package/dist/advanced-search/ui/AdvancedSearchSelectUI.d.ts +9 -0
  24. package/dist/advanced-search/ui/AdvancedSearchSelectUI.d.ts.map +1 -0
  25. package/dist/advanced-search/ui/index.d.ts +2 -0
  26. package/dist/advanced-search/ui/index.d.ts.map +1 -0
  27. package/dist/badge/index.js +1 -1
  28. package/dist/badge/stories/Badge.stories.js +22 -22
  29. package/dist/base-table/index.js +2 -2
  30. package/dist/button/index.js +7 -7
  31. package/dist/button/stories/Button.stories.js +1 -1
  32. package/dist/check-box/index.js +1 -1
  33. package/dist/check-box/stories/CheckBox.stories.js +25 -25
  34. package/dist/chunks/{BadgeList-6qL9oNAp.js → BadgeList-DYgun2rf.js} +16 -16
  35. package/dist/chunks/{BadgeList-6qL9oNAp.js.map → BadgeList-DYgun2rf.js.map} +1 -1
  36. package/dist/chunks/{Button-BZ_b-Kin.js → Button-CCWuggdA.js} +16 -16
  37. package/dist/chunks/{Button-BZ_b-Kin.js.map → Button-CCWuggdA.js.map} +1 -1
  38. package/dist/chunks/CalendarView-DjeTJkTT.js +435 -0
  39. package/dist/chunks/{CalendarView-DjShdvRD.js.map → CalendarView-DjeTJkTT.js.map} +1 -1
  40. package/dist/chunks/CheckBox-BowNqqd3.js +48 -0
  41. package/dist/chunks/{CheckBox-CulnjNvJ.js.map → CheckBox-BowNqqd3.js.map} +1 -1
  42. package/dist/chunks/{DateInput-LSSvObtg.js → DateInput--tfofQ2x.js} +68 -68
  43. package/dist/chunks/{DateInput-LSSvObtg.js.map → DateInput--tfofQ2x.js.map} +1 -1
  44. package/dist/chunks/{DateRangePresetSelect-CyzGMvVp.js → DateRangePresetSelect-UgsfaOeM.js} +22 -22
  45. package/dist/chunks/{DateRangePresetSelect-CyzGMvVp.js.map → DateRangePresetSelect-UgsfaOeM.js.map} +1 -1
  46. package/dist/chunks/Detail-DHDMsg8q.js +80 -0
  47. package/dist/chunks/{Detail-DKolHye4.js.map → Detail-DHDMsg8q.js.map} +1 -1
  48. package/dist/chunks/{Dialog-BPS4BeWZ.js → Dialog-CFIvGxER.js} +8 -8
  49. package/dist/chunks/{Dialog-BPS4BeWZ.js.map → Dialog-CFIvGxER.js.map} +1 -1
  50. package/dist/chunks/DisclosureGroup-CfRTkl6Z.js +49 -0
  51. package/dist/chunks/{DisclosureGroup-Plk2M_Vl.js.map → DisclosureGroup-CfRTkl6Z.js.map} +1 -1
  52. package/dist/chunks/{DropZone-DPGTpHI6.js → DropZone-kJfbZU5g.js} +22 -22
  53. package/dist/chunks/{DropZone-DPGTpHI6.js.map → DropZone-kJfbZU5g.js.map} +1 -1
  54. package/dist/chunks/{DropdownMenu-Ds-trH4M.js → DropdownMenu-DQeR3y7M.js} +138 -138
  55. package/dist/chunks/{DropdownMenu-Ds-trH4M.js.map → DropdownMenu-DQeR3y7M.js.map} +1 -1
  56. package/dist/chunks/{Flex-DbBdq336.js → Flex-DUYSL5TE.js} +16 -16
  57. package/dist/chunks/{Flex-DbBdq336.js.map → Flex-DUYSL5TE.js.map} +1 -1
  58. package/dist/chunks/Input-BmjlpA09.js +227 -0
  59. package/dist/chunks/{Input-Wrew1puH.js.map → Input-BmjlpA09.js.map} +1 -1
  60. package/dist/chunks/{InputDateTime-2PCX8an8.js → InputDateTime-CxfAFe2L.js} +56 -56
  61. package/dist/chunks/{InputDateTime-2PCX8an8.js.map → InputDateTime-CxfAFe2L.js.map} +1 -1
  62. package/dist/chunks/{InputFile-Ca-bRo93.js → InputFile-CyZu__B_.js} +17 -17
  63. package/dist/chunks/{InputFile-Ca-bRo93.js.map → InputFile-CyZu__B_.js.map} +1 -1
  64. package/dist/chunks/{InputFiles-pI9rQXOI.js → InputFiles-CrTJV27R.js} +31 -31
  65. package/dist/chunks/{InputFiles-pI9rQXOI.js.map → InputFiles-CrTJV27R.js.map} +1 -1
  66. package/dist/chunks/{InputImage-B522AQzl.js → InputImage-Cw8rPYQu.js} +18 -18
  67. package/dist/chunks/{InputImage-B522AQzl.js.map → InputImage-Cw8rPYQu.js.map} +1 -1
  68. package/dist/chunks/{LabeledExpandableActionPanel-CWmOSWeS.js → LabeledExpandableActionPanel-D3kUvmFH.js} +26 -26
  69. package/dist/chunks/{LabeledExpandableActionPanel-CWmOSWeS.js.map → LabeledExpandableActionPanel-D3kUvmFH.js.map} +1 -1
  70. package/dist/chunks/Listbox-BZlp5qHz.js +81 -0
  71. package/dist/chunks/{Listbox-B6F_IKQv.js.map → Listbox-BZlp5qHz.js.map} +1 -1
  72. package/dist/chunks/{MultiSelect-CUXA8gx-.js → MultiSelect-D1XYuwH1.js} +113 -113
  73. package/dist/chunks/{MultiSelect-CUXA8gx-.js.map → MultiSelect-D1XYuwH1.js.map} +1 -1
  74. package/dist/chunks/{NotificationsHost-Bnq7xFKO.js → NotificationsHost-_icJx4xR.js} +44 -44
  75. package/dist/chunks/{NotificationsHost-Bnq7xFKO.js.map → NotificationsHost-_icJx4xR.js.map} +1 -1
  76. package/dist/chunks/{PresetRangeDateInput-B_8jsilZ.js → PresetRangeDateInput-CapirptQ.js} +11 -11
  77. package/dist/chunks/{PresetRangeDateInput-B_8jsilZ.js.map → PresetRangeDateInput-CapirptQ.js.map} +1 -1
  78. package/dist/chunks/RadioButton-D0uA0rX_.js +48 -0
  79. package/dist/chunks/{RadioButton-D5vPW4Yr.js.map → RadioButton-D0uA0rX_.js.map} +1 -1
  80. package/dist/chunks/RadioGroup-B9XjkcOy.js +121 -0
  81. package/dist/chunks/{RadioGroup-BAhN1d1X.js.map → RadioGroup-B9XjkcOy.js.map} +1 -1
  82. package/dist/chunks/{Select-CoAYWNOn.js → Select-CXeVjVKA.js} +11 -11
  83. package/dist/chunks/{Select-CoAYWNOn.js.map → Select-CXeVjVKA.js.map} +1 -1
  84. package/dist/chunks/{SerializableSelect-awBOWKTj.js → SerializableSelect-DkYeJtAO.js} +2 -2
  85. package/dist/chunks/{SerializableSelect-awBOWKTj.js.map → SerializableSelect-DkYeJtAO.js.map} +1 -1
  86. package/dist/chunks/{SingleDateTimeInput-o44Vlwdk.js → SingleDateTimeInput-BmeuVGQT.js} +78 -78
  87. package/dist/chunks/{SingleDateTimeInput-o44Vlwdk.js.map → SingleDateTimeInput-BmeuVGQT.js.map} +1 -1
  88. package/dist/chunks/{Splitter-NjNFuEq4.js → Splitter-BFkVGVRb.js} +32 -32
  89. package/dist/chunks/{Splitter-NjNFuEq4.js.map → Splitter-BFkVGVRb.js.map} +1 -1
  90. package/dist/chunks/StateSelect-1jH3uLz9.js +78 -0
  91. package/dist/chunks/{StateSelect-abZq176J.js.map → StateSelect-1jH3uLz9.js.map} +1 -1
  92. package/dist/chunks/{Switch-DHMnZVmN.js → Switch-B57Qmy1z.js} +19 -19
  93. package/dist/chunks/{Switch-DHMnZVmN.js.map → Switch-B57Qmy1z.js.map} +1 -1
  94. package/dist/chunks/{TextEditorLexicalClient-Dt4eaPA3.js → TextEditorLexicalClient-DRhAswpP.js} +204 -204
  95. package/dist/chunks/{TextEditorLexicalClient-Dt4eaPA3.js.map → TextEditorLexicalClient-DRhAswpP.js.map} +1 -1
  96. package/dist/chunks/{Textarea-DOVrPH4I.js → Textarea-C9UdUueF.js} +2 -2
  97. package/dist/chunks/{Textarea-DOVrPH4I.js.map → Textarea-C9UdUueF.js.map} +1 -1
  98. package/dist/chunks/{TimePanel-_kF2RtHk.js → TimePanel-b4saqoUY.js} +27 -27
  99. package/dist/chunks/{TimePanel-_kF2RtHk.js.map → TimePanel-b4saqoUY.js.map} +1 -1
  100. package/dist/chunks/{Toggle-C_fE-bkM.js → Toggle-DVqOQXmt.js} +18 -18
  101. package/dist/chunks/{Toggle-C_fE-bkM.js.map → Toggle-DVqOQXmt.js.map} +1 -1
  102. package/dist/chunks/{TreeMultiSelect-C76RYavo.js → TreeMultiSelect-CfQhlfnC.js} +6 -6
  103. package/dist/chunks/{TreeMultiSelect-C76RYavo.js.map → TreeMultiSelect-CfQhlfnC.js.map} +1 -1
  104. package/dist/chunks/{TreePickerBase-qNHIWbYL.js → TreePickerBase-BBUOWsSu.js} +49 -49
  105. package/dist/chunks/{TreePickerBase-qNHIWbYL.js.map → TreePickerBase-BBUOWsSu.js.map} +1 -1
  106. package/dist/chunks/{TreeSelect-LEhNdPCX.js → TreeSelect-2wUXs90E.js} +6 -6
  107. package/dist/chunks/{TreeSelect-LEhNdPCX.js.map → TreeSelect-2wUXs90E.js.map} +1 -1
  108. package/dist/chunks/base-table-CoQlKABk.js +514 -0
  109. package/dist/chunks/{base-table-ij2guVMB.js.map → base-table-CoQlKABk.js.map} +1 -1
  110. package/dist/chunks/{floating-arrow-CdRV69sg.js → floating-arrow-BE-z4QkE.js} +7 -7
  111. package/dist/chunks/{floating-arrow-CdRV69sg.js.map → floating-arrow-BE-z4QkE.js.map} +1 -1
  112. package/dist/chunks/input-search-Dw4rnJBq.js +30 -0
  113. package/dist/chunks/input-search-Dw4rnJBq.js.map +1 -0
  114. package/dist/chunks/{layout-picker-CzZ8Xzkk.js → layout-picker-MWaImn3L.js} +34 -34
  115. package/dist/chunks/{layout-picker-CzZ8Xzkk.js.map → layout-picker-MWaImn3L.js.map} +1 -1
  116. package/dist/chunks/{misc-Bj0y3ERC.js → misc-DoqZBMof.js} +110 -110
  117. package/dist/chunks/{misc-Bj0y3ERC.js.map → misc-DoqZBMof.js.map} +1 -1
  118. package/dist/chunks/{modal-B4ivQb2h.js → modal-B3HY3laL.js} +40 -40
  119. package/dist/chunks/{modal-B4ivQb2h.js.map → modal-B3HY3laL.js.map} +1 -1
  120. package/dist/chunks/multi-select-BzYIviCU.js +1305 -0
  121. package/dist/chunks/multi-select-BzYIviCU.js.map +1 -0
  122. package/dist/chunks/{picker-gIUs0nE_.js → picker-Dg55Ss-B.js} +74 -74
  123. package/dist/chunks/{picker-gIUs0nE_.js.map → picker-Dg55Ss-B.js.map} +1 -1
  124. package/dist/chunks/{popover-C79P5bm2.js → popover-xJJqy1v6.js} +52 -52
  125. package/dist/chunks/{popover-C79P5bm2.js.map → popover-xJJqy1v6.js.map} +1 -1
  126. package/dist/chunks/{separator-CIqnk2z9.js → separator-B72Aq-6a.js} +2 -2
  127. package/dist/chunks/{separator-CIqnk2z9.js.map → separator-B72Aq-6a.js.map} +1 -1
  128. package/dist/chunks/{slider-CigVo4Ju.js → slider-CFKsfxFp.js} +83 -83
  129. package/dist/chunks/{slider-CigVo4Ju.js.map → slider-CFKsfxFp.js.map} +1 -1
  130. package/dist/chunks/sortable-DcTIAbjD.js +185 -0
  131. package/dist/chunks/{sortable-BZqnZ_LA.js.map → sortable-DcTIAbjD.js.map} +1 -1
  132. package/dist/chunks/{table-CK-CM2zD.js → table-Dc3AqMzP.js} +21 -21
  133. package/dist/chunks/{table-CK-CM2zD.js.map → table-Dc3AqMzP.js.map} +1 -1
  134. package/dist/chunks/{table-column-interactions-DPyJDD7P.js → table-column-interactions-6RGjmiI5.js} +24 -24
  135. package/dist/chunks/{table-column-interactions-DPyJDD7P.js.map → table-column-interactions-6RGjmiI5.js.map} +1 -1
  136. package/dist/chunks/{tabs-D5ikIIng.js → tabs-DlnVVMJl.js} +96 -96
  137. package/dist/chunks/{tabs-D5ikIIng.js.map → tabs-DlnVVMJl.js.map} +1 -1
  138. package/dist/chunks/{toolbar-C-Ziw_Uh.js → toolbar-BCZNdRXM.js} +2 -2
  139. package/dist/chunks/{toolbar-C-Ziw_Uh.js.map → toolbar-BCZNdRXM.js.map} +1 -1
  140. package/dist/chunks/{wheel-picker-DUHGy7wE.js → wheel-picker-FS58cRsQ.js} +23 -23
  141. package/dist/chunks/{wheel-picker-DUHGy7wE.js.map → wheel-picker-FS58cRsQ.js.map} +1 -1
  142. package/dist/context-menu/index.js +1 -1
  143. package/dist/context-menu/stories/ContextMenu.stories.js +45 -45
  144. package/dist/date-input/index.js +2 -2
  145. package/dist/date-input/stories/DateInput.stories.js +2 -2
  146. package/dist/date-range-preset-select/index.js +1 -1
  147. package/dist/date-range-preset-select/stories/DateRangePresetSelect.stories.js +8 -8
  148. package/dist/date-time-input/index.js +1 -1
  149. package/dist/date-time-input/stories/SingleDateTimeInput.stories.js +38 -38
  150. package/dist/date-time-input/stories/TimePanel.stories.js +9 -9
  151. package/dist/detail/index.js +1 -1
  152. package/dist/detail/stories/Detail.stories.js +1 -1
  153. package/dist/dialog/index.js +1 -1
  154. package/dist/dialog/stories/Dialog.stories.js +16 -16
  155. package/dist/disclosure/index.js +1 -1
  156. package/dist/disclosure/stories/Disclosure.stories.js +1 -1
  157. package/dist/drop-zone/index.js +1 -1
  158. package/dist/drop-zone/stories/DropZone.stories.js +14 -14
  159. package/dist/errors/index.js +47 -47
  160. package/dist/expandable-action-panel/index.js +1 -1
  161. package/dist/expandable-action-panel/stories/ExpandableActionPanel.stories.js +28 -28
  162. package/dist/flex/index.js +2 -2
  163. package/dist/flex/stories/Flex.stories.js +2 -2
  164. package/dist/floating-arrow/index.js +1 -1
  165. package/dist/fullscreen-portal/index.js +6 -6
  166. package/dist/grid/stories/Grid.stories.js +1 -1
  167. package/dist/image/index.js +123 -123
  168. package/dist/input/index.js +1 -1
  169. package/dist/input/stories/Input.stories.js +11 -11
  170. package/dist/input-date-time/index.js +1 -1
  171. package/dist/input-date-time/stories/InputDateTime.stories.js +11 -11
  172. package/dist/input-file/index.js +1 -1
  173. package/dist/input-file/stories/InputFile.stories.js +9 -9
  174. package/dist/input-files/index.js +1 -1
  175. package/dist/input-files/stories/InputFiles.stories.js +9 -9
  176. package/dist/input-image/index.js +1 -1
  177. package/dist/input-image/stories/InputImage.stories.js +15 -15
  178. package/dist/input-search/index.js +2 -30
  179. package/dist/layout-picker/index.js +1 -1
  180. package/dist/layout-picker/stories/LayoutPicker.stories.js +52 -52
  181. package/dist/list/index.js +27 -27
  182. package/dist/listbox/index.js +1 -1
  183. package/dist/listbox/stories/Listbox.stories.js +19 -19
  184. package/dist/misc/index.js +1 -1
  185. package/dist/modal/index.js +1 -1
  186. package/dist/modal/stories/Modal.stories.js +55 -55
  187. package/dist/multi-select/index.js +3 -1141
  188. package/dist/multi-select/ui/stories/MultiSelect.stories.js +17 -17
  189. package/dist/notifications/index.js +1 -1
  190. package/dist/notifications/ui/stories/NotificationsHost.stories.js +59 -59
  191. package/dist/period-select/index.js +20 -20
  192. package/dist/period-select/stories/PeriodSelect.stories.js +17 -17
  193. package/dist/picker/index.js +1 -1
  194. package/dist/popover/index.js +1 -1
  195. package/dist/popover/stories/Popover.stories.js +16 -16
  196. package/dist/preset-range-date-input/index.js +1 -1
  197. package/dist/preset-range-date-input/ui/stories/PresetRangeDateInput.stories.js +9 -9
  198. package/dist/preset-select/index.js +1 -1
  199. package/dist/radio-button/index.js +1 -1
  200. package/dist/radio-button/stories/RadioButton.stories.js +11 -11
  201. package/dist/radio-group/index.js +1 -1
  202. package/dist/radio-group/stories/RadioGroup.stories.js +21 -21
  203. package/dist/select/index.js +2 -2
  204. package/dist/select/stories/Select.stories.js +23 -23
  205. package/dist/select/stories/SerializableSelect.stories.js +22 -22
  206. package/dist/separator/index.js +1 -1
  207. package/dist/simple-table/index.js +5 -5
  208. package/dist/slider/index.js +1 -1
  209. package/dist/slider/stories/Slider.stories.js +32 -32
  210. package/dist/slider/stories/SliderInput.stories.js +39 -39
  211. package/dist/sortable/index.js +1 -1
  212. package/dist/sortable/stories/Sortable.stories.js +23 -23
  213. package/dist/splitter/index.js +1 -1
  214. package/dist/splitter/stories/Splitter.stories.js +1 -1
  215. package/dist/state-select/index.js +1 -1
  216. package/dist/state-select/stories/StateSelect.stories.js +23 -23
  217. package/dist/styles.css +1 -1
  218. package/dist/switch/index.js +1 -1
  219. package/dist/switch/stories/Switch.stories.js +11 -11
  220. package/dist/table/index.js +1 -1
  221. package/dist/table-column-interactions/index.js +1 -1
  222. package/dist/table-sorting/index.js +1 -1
  223. package/dist/tabs/index.js +1 -1
  224. package/dist/tabs/stories/Tabs.stories.js +39 -39
  225. package/dist/text/index.js +20 -20
  226. package/dist/text-editor/index.js +3 -3
  227. package/dist/text-editor/toolbar/index.js +1 -1
  228. package/dist/textarea/index.js +1 -1
  229. package/dist/textarea/stories/Textarea.stories.js +8 -8
  230. package/dist/three-scene/index.js +7 -7
  231. package/dist/toggle/index.js +1 -1
  232. package/dist/toggle/stories/Toggle.stories.js +7 -7
  233. package/dist/toolbar/index.js +16 -16
  234. package/dist/tree/index.js +24 -24
  235. package/dist/tree-select/index.js +2 -2
  236. package/dist/tree-select/stories/TreeMultiSelect.stories.js +9 -9
  237. package/dist/tree-select/stories/TreeSelect.stories.js +9 -9
  238. package/dist/tree-table/index.js +32 -32
  239. package/dist/wheel-picker/index.js +1 -1
  240. package/package.json +11 -1
  241. package/dist/chunks/CalendarView-DjShdvRD.js +0 -435
  242. package/dist/chunks/CheckBox-CulnjNvJ.js +0 -48
  243. package/dist/chunks/Detail-DKolHye4.js +0 -80
  244. package/dist/chunks/DisclosureGroup-Plk2M_Vl.js +0 -49
  245. package/dist/chunks/Input-Wrew1puH.js +0 -227
  246. package/dist/chunks/Listbox-B6F_IKQv.js +0 -81
  247. package/dist/chunks/RadioButton-D5vPW4Yr.js +0 -48
  248. package/dist/chunks/RadioGroup-BAhN1d1X.js +0 -121
  249. package/dist/chunks/StateSelect-abZq176J.js +0 -78
  250. package/dist/chunks/base-table-ij2guVMB.js +0 -514
  251. package/dist/chunks/sortable-BZqnZ_LA.js +0 -185
  252. package/dist/input-search/index.js.map +0 -1
  253. package/dist/multi-select/index.js.map +0 -1
@@ -1,8 +1,8 @@
1
- import { a as e, c as t, d as ee, i as n, m as r, n as i, o as te, r as ne, s as re, t as ie } from "./base-table-ij2guVMB.js";
2
- import { jsx as a } from "react/jsx-runtime";
3
- import { useEffect as ae, useEffectEvent as o, useMemo as s, useRef as c } from "react";
4
- import { formatPipelineDisplayValue as l } from "@ryuzaki13/react-foundation-lib/formatters";
5
- import { useTableRowSelection as u } from "@ryuzaki13/react-foundation-lib/table";
1
+ import { a as e, c as t, d as n, i as r, m as i, n as a, o as ee, r as te, s as ne, t as re } from "./base-table-CoQlKABk.js";
2
+ import { useEffect as ie, useEffectEvent as ae, useMemo as o, useRef as s } from "react";
3
+ import { formatPipelineDisplayValue as c } from "@ryuzaki13/react-foundation-lib/formatters";
4
+ import { useTableRowSelection as l } from "@ryuzaki13/react-foundation-lib/table";
5
+ import { jsx as u } from "react/jsx-runtime";
6
6
  import { getCoreRowModel as d, useReactTable as f } from "@tanstack/react-table";
7
7
  var p = {
8
8
  selectedIndicatorCell: "hKghZt",
@@ -14,21 +14,21 @@ function oe(e, t) {
14
14
  return String(t);
15
15
  }
16
16
  function m({ title: m, isLoading: h, isFetching: se, data: g, columns: _, selectionMode: v = "none", selectedRowIds: ce, getRowId: le, className: ue, minHeight: de, tableClassName: fe, columnVisibility: y, defaultColumnVisibility: b, columnOrder: x, defaultColumnOrder: S, columnSizing: C, defaultColumnSizing: w, columnPinning: T, defaultColumnPinning: E, enableColumnResizing: D = !1, enableColumnReordering: O = !1, columnResizeMinWidth: k, onColumnVisibilityChange: A, onColumnOrderChange: j, onColumnSizingChange: M, onColumnPinningChange: N, onRowClick: P, onRowSelectionChange: F, onReachEnd: I, getRowCanSelect: L, getRowClassName: R, renderHeaderContextMenu: pe, renderCellContent: z }) {
17
- let B = s(() => g ?? [], [g]), V = s(() => t(_), [_]), H = le ?? oe, U = s(() => new Map(B.map((e, t) => [H(e, t), e])), [H, B]), me = s(() => Array.from(U.keys()), [U]), W = c(null), G = c(null), { rowSelection: he, activateRowSelection: ge } = u({
17
+ let B = o(() => g ?? [], [g]), V = o(() => t(_), [_]), H = le ?? oe, U = o(() => new Map(B.map((e, t) => [H(e, t), e])), [H, B]), me = o(() => Array.from(U.keys()), [U]), W = s(null), G = s(null), { rowSelection: he, activateRowSelection: ge } = l({
18
18
  availableRowIds: me,
19
19
  rowById: U,
20
20
  selectionMode: v,
21
21
  selectedRowIds: ce,
22
22
  onRowSelectionChange: F
23
- }), { columnVisibility: K, onColumnVisibilityChange: _e } = ne({
23
+ }), { columnVisibility: K, onColumnVisibilityChange: _e } = te({
24
24
  columnVisibility: y,
25
25
  defaultColumnVisibility: b,
26
26
  onColumnVisibilityChange: A
27
- }), { columnOrder: q, onColumnOrderChange: ve } = te({
27
+ }), { columnOrder: q, onColumnOrderChange: ve } = ee({
28
28
  columnOrder: x,
29
29
  defaultColumnOrder: S,
30
30
  onColumnOrderChange: j
31
- }), { columnSizing: J, onColumnSizingChange: ye } = n({
31
+ }), { columnSizing: J, onColumnSizingChange: ye } = r({
32
32
  columnSizing: C,
33
33
  defaultColumnSizing: w,
34
34
  columnResizeMinWidth: k,
@@ -37,7 +37,7 @@ function m({ title: m, isLoading: h, isFetching: se, data: g, columns: _, select
37
37
  columnPinning: T,
38
38
  defaultColumnPinning: E,
39
39
  onColumnPinningChange: N
40
- }), X = s(() => ({
40
+ }), X = o(() => ({
41
41
  columnOrder: q,
42
42
  columnPinning: Y,
43
43
  columnSizing: J,
@@ -47,10 +47,10 @@ function m({ title: m, isLoading: h, isFetching: se, data: g, columns: _, select
47
47
  Y,
48
48
  J,
49
49
  K
50
- ]), xe = o(() => {
50
+ ]), xe = ae(() => {
51
51
  I?.();
52
52
  });
53
- ae(() => {
53
+ ie(() => {
54
54
  if (!I || !W.current || !G.current || h) return;
55
55
  let e = new IntersectionObserver((e) => {
56
56
  e[0]?.isIntersecting && xe();
@@ -82,11 +82,11 @@ function m({ title: m, isLoading: h, isFetching: se, data: g, columns: _, select
82
82
  getCoreRowModel: d(),
83
83
  enableMultiRowSelection: v === "multi",
84
84
  enableRowSelection: (e) => v === "none" ? !1 : L ? L(e.original) : !0
85
- }), Q = r(Z, X), $ = Z.getRowModel().rows, Se = s(() => re({
85
+ }), Q = i(Z, X), $ = Z.getRowModel().rows, Se = o(() => ne({
86
86
  rows: $,
87
87
  columns: Q
88
88
  }), [$, Q]), Ce = Q[0]?.id;
89
- return /* @__PURE__ */ a(i, {
89
+ return /* @__PURE__ */ u(a, {
90
90
  table: Z,
91
91
  columnState: X,
92
92
  title: m,
@@ -109,26 +109,26 @@ function m({ title: m, isLoading: h, isFetching: se, data: g, columns: _, select
109
109
  enableColumnReordering: O,
110
110
  columnResizeMinWidth: k,
111
111
  renderCellContent: (e) => {
112
- let t = l({
112
+ let t = c({
113
113
  field: V.runtimeByColumnId[e.cell.column.id],
114
114
  rawValue: e.cell.getValue(),
115
115
  rowData: e.row.original,
116
116
  rowKind: "plain"
117
- }), n = ee({
117
+ }), r = n({
118
118
  columnId: e.cell.column.id,
119
119
  runtimeByColumnId: V.runtimeByColumnId,
120
120
  customCellColumnIds: V.customCellColumnIds
121
- }) ? /* @__PURE__ */ a(ie, {
121
+ }) ? /* @__PURE__ */ u(re, {
122
122
  displayValue: t,
123
123
  align: e.columnMeta?.align
124
124
  }) : e.defaultContent;
125
125
  return z ? z({
126
126
  ...e,
127
- defaultContent: n,
127
+ defaultContent: r,
128
128
  displayValue: t
129
- }) : n;
129
+ }) : r;
130
130
  },
131
- afterTableContent: I ? /* @__PURE__ */ a("div", {
131
+ afterTableContent: I ? /* @__PURE__ */ u("div", {
132
132
  ref: G,
133
133
  className: p.sentinel,
134
134
  "aria-hidden": "true"
@@ -138,4 +138,4 @@ function m({ title: m, isLoading: h, isFetching: se, data: g, columns: _, select
138
138
  //#endregion
139
139
  export { m as t };
140
140
 
141
- //# sourceMappingURL=table-CK-CM2zD.js.map
141
+ //# sourceMappingURL=table-Dc3AqMzP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-CK-CM2zD.js","names":[],"sources":["../../src/table/Table.module.scss","../../src/table/Table.tsx"],"sourcesContent":[".selectedIndicatorCell {\n\tbox-shadow: inset 0.1875rem 0 0 var(--content-accent);\n}\n\n.sentinel {\n\theight: 1px;\n}\n","/* eslint-disable react-hooks/incompatible-library */\nimport { useEffect, useEffectEvent, useMemo, useRef } from \"react\";\n\nimport { formatPipelineDisplayValue } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { TableFormulaRowData } from \"@ryuzaki13/react-foundation-lib/formulas\";\nimport {\n\ttype TableColumnDef,\n\ttype TableColumnOrderState,\n\ttype TableColumnSizingState,\n\ttype TableSelectionMode,\n\tuseTableRowSelection\n} from \"@ryuzaki13/react-foundation-lib/table\";\nimport { getCoreRowModel, useReactTable, type Row, type VisibilityState } from \"@tanstack/react-table\";\n\nimport {\n\tBaseTable,\n\tbuildBaseTableMergedCellsLayout,\n\tbuildTableFormattingSnapshot,\n\tFormattedTableCell,\n\tgetOrderedVisibleLeafColumns,\n\tshouldUseTableFormatting,\n\tuseTableColumnOrder,\n\tuseTableColumnPinning,\n\tuseTableColumnSizing,\n\tuseTableColumnVisibility,\n\ttype BaseTableColumnState,\n\ttype BaseTableProps,\n\ttype TableColumnPinningState\n} from \"../base-table\";\n\nimport styles from \"./Table.module.scss\";\n\n/**\n * Возвращает индекс как строковый id, если внешний id не передан.\n */\nfunction defaultGetRowId<TData>(_row: TData, index: number): string {\n\treturn String(index);\n}\n\n/**\n * Пропсы компонента Table.\n *\n * Компонент предназначен для плоских данных и по API осознанно сближен с TreeTable.\n */\nexport interface TableProps<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\tselectionMode?: TableSelectionMode;\n\t/**\n\t * Внешний список выбранных строк.\n\t *\n\t * Если передан, таблица синхронизирует визуальное выделение с этим набором id.\n\t */\n\tselectedRowIds?: readonly string[];\n\t/**\n\t * Стабильный идентификатор строки.\n\t *\n\t * Если не задан, используется индекс строки.\n\t */\n\tgetRowId?: (row: TData, index: number) => string;\n\t/**\n\t * Дополнительный CSS-класс корневого контейнера.\n\t */\n\tclassName?: string;\n\tminHeight?: `${number}em` | `${number}%`;\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 * Вызывается при достижении конца таблицы внутри 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 * вроде server sorting без встраивания доменной логики в shared-таблицу.\n\t */\n\trenderHeaderContextMenu?: BaseTableProps<TData>[\"renderHeaderContextMenu\"];\n\t/**\n\t * Тонкая точка расширения содержимого ячейки поверх стандартного форматирования.\n\t *\n\t * В отличие от `column.cell`, этот слот не отключает общий formatting-runtime:\n\t * `defaultContent` уже содержит отформатированное значение, если оно применимо.\n\t */\n\trenderCellContent?: BaseTableProps<TData>[\"renderCellContent\"];\n}\n\n/**\n * Плоская таблица на базе TanStack Table как React-альтернатива `sap.m.Table`.\n */\nexport function Table<TData extends object>({\n\ttitle,\n\tisLoading,\n\tisFetching,\n\tdata,\n\tcolumns,\n\tselectionMode = \"none\",\n\tselectedRowIds,\n\tgetRowId,\n\tclassName,\n\tminHeight,\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\tonReachEnd,\n\tgetRowCanSelect,\n\tgetRowClassName,\n\trenderHeaderContextMenu,\n\trenderCellContent\n}: TableProps<TData>) {\n\tconst tableData = useMemo(() => data ?? [], [data]);\n\tconst formattingSnapshot = useMemo(() => buildTableFormattingSnapshot(columns), [columns]);\n\tconst resolveRowId = getRowId ?? defaultGetRowId<TData>;\n\tconst rowById = useMemo(() => new Map(tableData.map((row, index) => [resolveRowId(row, index), row])), [resolveRowId, tableData]);\n\tconst availableRowIds = useMemo(() => Array.from(rowById.keys()), [rowById]);\n\tconst scrollableRef = useRef<HTMLDivElement | null>(null);\n\tconst sentinelRef = useRef<HTMLDivElement | null>(null);\n\n\tconst { rowSelection, activateRowSelection } = useTableRowSelection({\n\t\tavailableRowIds,\n\t\trowById,\n\t\tselectionMode,\n\t\tselectedRowIds,\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\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 emitReachEnd = useEffectEvent(() => {\n\t\tonReachEnd?.();\n\t});\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, tableData.length]);\n\n\tconst table = useReactTable<TData>({\n\t\tdata: tableData as TData[],\n\t\tcolumns: columns as TableColumnDef<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\trowSelection\n\t\t},\n\t\tonColumnOrderChange: handleColumnOrderChange,\n\t\tonColumnPinningChange: handleColumnPinningChange,\n\t\tonColumnSizingChange: handleColumnSizingChange,\n\t\tonColumnVisibilityChange: handleColumnVisibilityChange,\n\t\tgetRowId: (row, index) => resolveRowId(row, index),\n\t\tgetCoreRowModel: getCoreRowModel(),\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\treturn getRowCanSelect ? getRowCanSelect(row.original) : true;\n\t\t}\n\t});\n\n\tconst visibleLeafColumns = getOrderedVisibleLeafColumns(table, baseTableColumnState);\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}),\n\t\t[rowModelRows, visibleLeafColumns]\n\t);\n\tconst leadingColumnId = visibleLeafColumns[0]?.id;\n\n\t/**\n\t * Активирует строку: обновляет выбор в соответствии с режимом и вызывает внешний callback.\n\t */\n\tconst activateRow = (row: Row<TData>) => {\n\t\tactivateRowSelection(row.id, row.getCanSelect());\n\t\tonRowClick?.(row.original);\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\tminHeight={minHeight}\n\t\t\ttableClassName={tableClassName}\n\t\t\tselectionMode={selectionMode}\n\t\t\tscrollableRef={scrollableRef}\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) => getRowClassName?.(row.original)}\n\t\t\tgetCellClassName={({ row, cell }) =>\n\t\t\t\tcell.column.id === leadingColumnId && row.getIsSelected() ? styles.selectedIndicatorCell : undefined\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 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: args.row.original as TableFormulaRowData,\n\t\t\t\t\trowKind: \"plain\"\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\targs.defaultContent\n\t\t\t\t) : (\n\t\t\t\t\t<FormattedTableCell displayValue={displayValue} align={args.columnMeta?.align} />\n\t\t\t\t);\n\n\t\t\t\tif (renderCellContent) {\n\t\t\t\t\treturn renderCellContent({\n\t\t\t\t\t\t...args,\n\t\t\t\t\t\tdefaultContent,\n\t\t\t\t\t\tdisplayValue\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn defaultContent;\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":"table-Dc3AqMzP.js","names":[],"sources":["../../src/table/Table.module.scss","../../src/table/Table.tsx"],"sourcesContent":[".selectedIndicatorCell {\n\tbox-shadow: inset 0.1875rem 0 0 var(--content-accent);\n}\n\n.sentinel {\n\theight: 1px;\n}\n","/* eslint-disable react-hooks/incompatible-library */\nimport { useEffect, useEffectEvent, useMemo, useRef } from \"react\";\n\nimport { formatPipelineDisplayValue } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { TableFormulaRowData } from \"@ryuzaki13/react-foundation-lib/formulas\";\nimport {\n\ttype TableColumnDef,\n\ttype TableColumnOrderState,\n\ttype TableColumnSizingState,\n\ttype TableSelectionMode,\n\tuseTableRowSelection\n} from \"@ryuzaki13/react-foundation-lib/table\";\nimport { getCoreRowModel, useReactTable, type Row, type VisibilityState } from \"@tanstack/react-table\";\n\nimport {\n\tBaseTable,\n\tbuildBaseTableMergedCellsLayout,\n\tbuildTableFormattingSnapshot,\n\tFormattedTableCell,\n\tgetOrderedVisibleLeafColumns,\n\tshouldUseTableFormatting,\n\tuseTableColumnOrder,\n\tuseTableColumnPinning,\n\tuseTableColumnSizing,\n\tuseTableColumnVisibility,\n\ttype BaseTableColumnState,\n\ttype BaseTableProps,\n\ttype TableColumnPinningState\n} from \"../base-table\";\n\nimport styles from \"./Table.module.scss\";\n\n/**\n * Возвращает индекс как строковый id, если внешний id не передан.\n */\nfunction defaultGetRowId<TData>(_row: TData, index: number): string {\n\treturn String(index);\n}\n\n/**\n * Пропсы компонента Table.\n *\n * Компонент предназначен для плоских данных и по API осознанно сближен с TreeTable.\n */\nexport interface TableProps<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\tselectionMode?: TableSelectionMode;\n\t/**\n\t * Внешний список выбранных строк.\n\t *\n\t * Если передан, таблица синхронизирует визуальное выделение с этим набором id.\n\t */\n\tselectedRowIds?: readonly string[];\n\t/**\n\t * Стабильный идентификатор строки.\n\t *\n\t * Если не задан, используется индекс строки.\n\t */\n\tgetRowId?: (row: TData, index: number) => string;\n\t/**\n\t * Дополнительный CSS-класс корневого контейнера.\n\t */\n\tclassName?: string;\n\tminHeight?: `${number}em` | `${number}%`;\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 * Вызывается при достижении конца таблицы внутри 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 * вроде server sorting без встраивания доменной логики в shared-таблицу.\n\t */\n\trenderHeaderContextMenu?: BaseTableProps<TData>[\"renderHeaderContextMenu\"];\n\t/**\n\t * Тонкая точка расширения содержимого ячейки поверх стандартного форматирования.\n\t *\n\t * В отличие от `column.cell`, этот слот не отключает общий formatting-runtime:\n\t * `defaultContent` уже содержит отформатированное значение, если оно применимо.\n\t */\n\trenderCellContent?: BaseTableProps<TData>[\"renderCellContent\"];\n}\n\n/**\n * Плоская таблица на базе TanStack Table как React-альтернатива `sap.m.Table`.\n */\nexport function Table<TData extends object>({\n\ttitle,\n\tisLoading,\n\tisFetching,\n\tdata,\n\tcolumns,\n\tselectionMode = \"none\",\n\tselectedRowIds,\n\tgetRowId,\n\tclassName,\n\tminHeight,\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\tonReachEnd,\n\tgetRowCanSelect,\n\tgetRowClassName,\n\trenderHeaderContextMenu,\n\trenderCellContent\n}: TableProps<TData>) {\n\tconst tableData = useMemo(() => data ?? [], [data]);\n\tconst formattingSnapshot = useMemo(() => buildTableFormattingSnapshot(columns), [columns]);\n\tconst resolveRowId = getRowId ?? defaultGetRowId<TData>;\n\tconst rowById = useMemo(() => new Map(tableData.map((row, index) => [resolveRowId(row, index), row])), [resolveRowId, tableData]);\n\tconst availableRowIds = useMemo(() => Array.from(rowById.keys()), [rowById]);\n\tconst scrollableRef = useRef<HTMLDivElement | null>(null);\n\tconst sentinelRef = useRef<HTMLDivElement | null>(null);\n\n\tconst { rowSelection, activateRowSelection } = useTableRowSelection({\n\t\tavailableRowIds,\n\t\trowById,\n\t\tselectionMode,\n\t\tselectedRowIds,\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\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 emitReachEnd = useEffectEvent(() => {\n\t\tonReachEnd?.();\n\t});\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, tableData.length]);\n\n\tconst table = useReactTable<TData>({\n\t\tdata: tableData as TData[],\n\t\tcolumns: columns as TableColumnDef<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\trowSelection\n\t\t},\n\t\tonColumnOrderChange: handleColumnOrderChange,\n\t\tonColumnPinningChange: handleColumnPinningChange,\n\t\tonColumnSizingChange: handleColumnSizingChange,\n\t\tonColumnVisibilityChange: handleColumnVisibilityChange,\n\t\tgetRowId: (row, index) => resolveRowId(row, index),\n\t\tgetCoreRowModel: getCoreRowModel(),\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\treturn getRowCanSelect ? getRowCanSelect(row.original) : true;\n\t\t}\n\t});\n\n\tconst visibleLeafColumns = getOrderedVisibleLeafColumns(table, baseTableColumnState);\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}),\n\t\t[rowModelRows, visibleLeafColumns]\n\t);\n\tconst leadingColumnId = visibleLeafColumns[0]?.id;\n\n\t/**\n\t * Активирует строку: обновляет выбор в соответствии с режимом и вызывает внешний callback.\n\t */\n\tconst activateRow = (row: Row<TData>) => {\n\t\tactivateRowSelection(row.id, row.getCanSelect());\n\t\tonRowClick?.(row.original);\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\tminHeight={minHeight}\n\t\t\ttableClassName={tableClassName}\n\t\t\tselectionMode={selectionMode}\n\t\t\tscrollableRef={scrollableRef}\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) => getRowClassName?.(row.original)}\n\t\t\tgetCellClassName={({ row, cell }) =>\n\t\t\t\tcell.column.id === leadingColumnId && row.getIsSelected() ? styles.selectedIndicatorCell : undefined\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 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: args.row.original as TableFormulaRowData,\n\t\t\t\t\trowKind: \"plain\"\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\targs.defaultContent\n\t\t\t\t) : (\n\t\t\t\t\t<FormattedTableCell displayValue={displayValue} align={args.columnMeta?.align} />\n\t\t\t\t);\n\n\t\t\t\tif (renderCellContent) {\n\t\t\t\t\treturn renderCellContent({\n\t\t\t\t\t\t...args,\n\t\t\t\t\t\tdefaultContent,\n\t\t\t\t\t\tdisplayValue\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn defaultContent;\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,31 +1,31 @@
1
- import { cn as e } from "@ryuzaki13/react-foundation-lib/utils";
2
- import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
- import { useRef as r } from "react";
4
- import { DEFAULT_TABLE_COLUMN_MIN_WIDTH as i, normalizeTableColumnWidth as a } from "@ryuzaki13/react-foundation-lib/table";
1
+ import { useRef as e } from "react";
2
+ import { cn as t } from "@ryuzaki13/react-foundation-lib/utils";
3
+ import { DEFAULT_TABLE_COLUMN_MIN_WIDTH as n, normalizeTableColumnWidth as r } from "@ryuzaki13/react-foundation-lib/table";
4
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
5
5
  import { useSortable as o } from "@dnd-kit/sortable";
6
6
  import { CSS as s } from "@dnd-kit/utilities";
7
7
  var c = { resizeHandle: "YJUVjb" }, l = 8;
8
8
  function u(e, t) {
9
9
  let n = e.closest("th")?.getBoundingClientRect().width;
10
- return a(typeof n == "number" && Number.isFinite(n) ? n : t, t);
10
+ return r(typeof n == "number" && Number.isFinite(n) ? n : t, t);
11
11
  }
12
- function d({ columnId: n, className: o, minWidth: s, keyboardStep: d = l, ariaLabel: f = "Изменить ширину колонки", getStartWidth: p, onResize: m, onResizeEnd: h, onReset: g }) {
13
- let _ = s ?? i, v = r(0), y = r(0), b = r(0), x = r(!1), S = r(!1), C = (e) => a(p?.(n, e) ?? u(e, _), _), w = (e) => {
12
+ function d({ columnId: a, className: o, minWidth: s, keyboardStep: d = l, ariaLabel: f = "Изменить ширину колонки", getStartWidth: p, onResize: m, onResizeEnd: h, onReset: g }) {
13
+ let _ = s ?? n, v = e(0), y = e(0), b = e(0), x = e(!1), S = e(!1), C = (e) => r(p?.(a, e) ?? u(e, _), _), w = (e) => {
14
14
  e.button !== 0 && e.pointerType === "mouse" || (x.current = !0, S.current = !1, v.current = e.clientX, y.current = C(e.currentTarget), b.current = y.current, e.currentTarget.setPointerCapture(e.pointerId), e.preventDefault(), e.stopPropagation());
15
15
  }, T = (e) => {
16
16
  if (!x.current) return;
17
- let t = a(y.current + e.clientX - v.current, _);
18
- b.current = t, S.current = !0, m(n, t), e.preventDefault(), e.stopPropagation();
17
+ let t = r(y.current + e.clientX - v.current, _);
18
+ b.current = t, S.current = !0, m(a, t), e.preventDefault(), e.stopPropagation();
19
19
  }, E = (e) => {
20
20
  if (x.current) {
21
- x.current = !1, S.current && h?.(n, b.current);
21
+ x.current = !1, S.current && h?.(a, b.current);
22
22
  try {
23
23
  e.currentTarget.releasePointerCapture(e.pointerId);
24
24
  } catch {}
25
25
  e.preventDefault(), e.stopPropagation();
26
26
  }
27
27
  };
28
- return /* @__PURE__ */ t("div", {
28
+ return /* @__PURE__ */ i("div", {
29
29
  role: "separator",
30
30
  "aria-label": f,
31
31
  "aria-orientation": "vertical",
@@ -37,16 +37,16 @@ function d({ columnId: n, className: o, minWidth: s, keyboardStep: d = l, ariaLa
37
37
  onKeyDown: (e) => {
38
38
  if (e.key !== "ArrowLeft" && e.key !== "ArrowRight" && e.key !== "Home") return;
39
39
  if (e.preventDefault(), e.stopPropagation(), e.key === "Home") {
40
- g?.(n);
40
+ g?.(a);
41
41
  return;
42
42
  }
43
- let t = e.key === "ArrowRight" ? 1 : -1, r = a(C(e.currentTarget) + t * d, _);
44
- m(n, r), h?.(n, r);
43
+ let t = e.key === "ArrowRight" ? 1 : -1, n = r(C(e.currentTarget) + t * d, _);
44
+ m(a, n), h?.(a, n);
45
45
  },
46
46
  onDoubleClick: (e) => {
47
- e.preventDefault(), e.stopPropagation(), g?.(n);
47
+ e.preventDefault(), e.stopPropagation(), g?.(a);
48
48
  },
49
- className: e(c.resizeHandle, o)
49
+ className: t(c.resizeHandle, o)
50
50
  });
51
51
  }
52
52
  //#endregion
@@ -54,10 +54,10 @@ function d({ columnId: n, className: o, minWidth: s, keyboardStep: d = l, ariaLa
54
54
  function f(e, t) {
55
55
  return typeof e == "function" ? e(t) : e;
56
56
  }
57
- function p({ columnId: r, children: i, dragDisabled: a = !1, draggingClassName: c, resizeHandle: l, className: u, style: p, ...m }) {
57
+ function p({ columnId: e, children: n, dragDisabled: r = !1, draggingClassName: c, resizeHandle: l, className: u, style: p, ...m }) {
58
58
  let { attributes: h, listeners: g, setActivatorNodeRef: _, setNodeRef: v, transform: y, isDragging: b, rect: x } = o({
59
- id: r,
60
- disabled: a
59
+ id: e,
60
+ disabled: r
61
61
  }), S = b ? x.current?.width : void 0, C = {
62
62
  transform: s.Translate.toString(y),
63
63
  zIndex: b ? "calc(var(--z-header) + 1)" : void 0,
@@ -70,18 +70,18 @@ function p({ columnId: r, children: i, dragDisabled: a = !1, draggingClassName:
70
70
  attributes: h,
71
71
  listeners: g,
72
72
  setActivatorElement: _,
73
- disabled: a,
73
+ disabled: r,
74
74
  isDragging: b
75
75
  };
76
- return /* @__PURE__ */ n("th", {
76
+ return /* @__PURE__ */ a("th", {
77
77
  ...m,
78
78
  ref: v,
79
- className: e(u, b && c),
79
+ className: t(u, b && c),
80
80
  style: C,
81
- children: [f(i, w), l ? /* @__PURE__ */ t(d, { ...l }) : null]
81
+ children: [f(n, w), l ? /* @__PURE__ */ i(d, { ...l }) : null]
82
82
  });
83
83
  }
84
84
  //#endregion
85
85
  export { d as n, p as t };
86
86
 
87
- //# sourceMappingURL=table-column-interactions-DPyJDD7P.js.map
87
+ //# sourceMappingURL=table-column-interactions-6RGjmiI5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-column-interactions-DPyJDD7P.js","names":[],"sources":["../../src/table-column-interactions/TableColumnInteractions.module.scss","../../src/table-column-interactions/TableColumnResizeHandle.tsx","../../src/table-column-interactions/TableHeaderInteractionCell.tsx"],"sourcesContent":[".resizeHandle {\n\tcursor: col-resize;\n\ttouch-action: none;\n\tuser-select: none;\n\tposition: absolute;\n\tright: 0;\n\ttop: 0;\n\theight: 100%;\n\twidth: 6px;\n\tz-index: 1;\n\n\t&:hover,\n\t&:focus-visible {\n\t\tbackground: var(--focus-ring);\n\t}\n\n\t&:focus-visible {\n\t\toutline: var(--focus);\n\t\toutline-offset: calc(var(--focus-offset) * -1);\n\t}\n}\n","import { useRef, type KeyboardEvent as ReactKeyboardEvent, type PointerEvent as ReactPointerEvent } from \"react\";\n\nimport { DEFAULT_TABLE_COLUMN_MIN_WIDTH, normalizeTableColumnWidth } from \"@ryuzaki13/react-foundation-lib/table\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport styles from \"./TableColumnInteractions.module.scss\";\n\nconst DEFAULT_KEYBOARD_RESIZE_STEP = 8;\n\nexport type TableColumnResizeHandleProps = {\n\tcolumnId: string;\n\tclassName?: string;\n\tminWidth?: number;\n\tkeyboardStep?: number;\n\tariaLabel?: string;\n\tgetStartWidth?: (columnId: string, element: HTMLElement) => number;\n\tonResize: (columnId: string, width: number) => void;\n\tonResizeEnd?: (columnId: string, width: number) => void;\n\tonReset?: (columnId: string) => void;\n};\n\nfunction resolveHeaderCellWidth(element: HTMLElement, minWidth: number): number {\n\tconst headerCell = element.closest(\"th\");\n\tconst width = headerCell?.getBoundingClientRect().width;\n\n\treturn normalizeTableColumnWidth(typeof width === \"number\" && Number.isFinite(width) ? width : minWidth, minWidth);\n}\n\nexport function TableColumnResizeHandle({\n\tcolumnId,\n\tclassName,\n\tminWidth,\n\tkeyboardStep = DEFAULT_KEYBOARD_RESIZE_STEP,\n\tariaLabel = \"Изменить ширину колонки\",\n\tgetStartWidth,\n\tonResize,\n\tonResizeEnd,\n\tonReset\n}: TableColumnResizeHandleProps) {\n\tconst resolvedMinWidth = minWidth ?? DEFAULT_TABLE_COLUMN_MIN_WIDTH;\n\tconst startXRef = useRef(0);\n\tconst startWidthRef = useRef(0);\n\tconst lastWidthRef = useRef(0);\n\tconst activeRef = useRef(false);\n\tconst movedRef = useRef(false);\n\n\tconst resolveStartWidth = (element: HTMLElement) => {\n\t\tconst width = getStartWidth?.(columnId, element) ?? resolveHeaderCellWidth(element, resolvedMinWidth);\n\n\t\treturn normalizeTableColumnWidth(width, resolvedMinWidth);\n\t};\n\n\tconst handlePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (event.button !== 0 && event.pointerType === \"mouse\") return;\n\n\t\tactiveRef.current = true;\n\t\tmovedRef.current = false;\n\t\tstartXRef.current = event.clientX;\n\t\tstartWidthRef.current = resolveStartWidth(event.currentTarget);\n\t\tlastWidthRef.current = startWidthRef.current;\n\t\tevent.currentTarget.setPointerCapture(event.pointerId);\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t};\n\n\tconst handlePointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (!activeRef.current) return;\n\n\t\tconst nextWidth = normalizeTableColumnWidth(startWidthRef.current + event.clientX - startXRef.current, resolvedMinWidth);\n\t\tlastWidthRef.current = nextWidth;\n\t\tmovedRef.current = true;\n\t\tonResize(columnId, nextWidth);\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t};\n\n\tconst finishPointerResize = (event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (!activeRef.current) return;\n\n\t\tactiveRef.current = false;\n\n\t\tif (movedRef.current) {\n\t\t\tonResizeEnd?.(columnId, lastWidthRef.current);\n\t\t}\n\n\t\ttry {\n\t\t\tevent.currentTarget.releasePointerCapture(event.pointerId);\n\t\t} catch {\n\t\t\t// Pointer capture мог быть сброшен браузером при отмене жеста.\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t};\n\n\tconst handleKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n\t\tif (event.key !== \"ArrowLeft\" && event.key !== \"ArrowRight\" && event.key !== \"Home\") {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tif (event.key === \"Home\") {\n\t\t\tonReset?.(columnId);\n\t\t\treturn;\n\t\t}\n\n\t\tconst direction = event.key === \"ArrowRight\" ? 1 : -1;\n\t\tconst currentWidth = resolveStartWidth(event.currentTarget);\n\t\tconst nextWidth = normalizeTableColumnWidth(currentWidth + direction * keyboardStep, resolvedMinWidth);\n\t\tonResize(columnId, nextWidth);\n\t\tonResizeEnd?.(columnId, nextWidth);\n\t};\n\n\treturn (\n\t\t<div\n\t\t\trole=\"separator\"\n\t\t\taria-label={ariaLabel}\n\t\t\taria-orientation=\"vertical\"\n\t\t\ttabIndex={0}\n\t\t\tonPointerDown={handlePointerDown}\n\t\t\tonPointerMove={handlePointerMove}\n\t\t\tonPointerUp={finishPointerResize}\n\t\t\tonPointerCancel={finishPointerResize}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\tonDoubleClick={(event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tonReset?.(columnId);\n\t\t\t}}\n\t\t\tclassName={cn(styles.resizeHandle, className)}\n\t\t/>\n\t);\n}\n","import { type ComponentPropsWithoutRef, type CSSProperties, type ReactNode } from \"react\";\n\nimport { type DraggableAttributes, type DraggableSyntheticListeners, type UniqueIdentifier } from \"@dnd-kit/core\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { TableColumnResizeHandle, type TableColumnResizeHandleProps } from \"./TableColumnResizeHandle\";\n\nexport type TableHeaderCellDragState = {\n\tattributes: DraggableAttributes;\n\tlisteners: DraggableSyntheticListeners;\n\tsetActivatorElement: (element: HTMLElement | null) => void;\n\tdisabled: boolean;\n\tisDragging: boolean;\n};\n\nexport type TableHeaderInteractionCellProps = Omit<ComponentPropsWithoutRef<\"th\">, \"children\" | \"id\"> & {\n\tcolumnId: UniqueIdentifier;\n\tchildren: ReactNode | ((dragState: TableHeaderCellDragState) => ReactNode);\n\tdragDisabled?: boolean;\n\tdraggingClassName?: string;\n\tresizeHandle?: TableColumnResizeHandleProps;\n};\n\nfunction renderChildren(children: TableHeaderInteractionCellProps[\"children\"], dragState: TableHeaderCellDragState): ReactNode {\n\treturn typeof children === \"function\" ? children(dragState) : children;\n}\n\nexport function TableHeaderInteractionCell({\n\tcolumnId,\n\tchildren,\n\tdragDisabled = false,\n\tdraggingClassName,\n\tresizeHandle,\n\tclassName,\n\tstyle,\n\t...thProps\n}: TableHeaderInteractionCellProps) {\n\tconst { attributes, listeners, setActivatorNodeRef, setNodeRef, transform, /*transition,*/ isDragging, rect } = useSortable({\n\t\tid: columnId,\n\t\tdisabled: dragDisabled\n\t});\n\tconst lockedWidth = isDragging ? rect.current?.width : undefined;\n\tconst sortableStyle: CSSProperties = {\n\t\ttransform: CSS.Translate.toString(transform),\n\t\t// transition,\n\t\tzIndex: isDragging ? \"calc(var(--z-header) + 1)\" : undefined,\n\t\t...(lockedWidth ? { width: lockedWidth, minWidth: lockedWidth } : {}),\n\t\t...style\n\t};\n\tconst dragState: TableHeaderCellDragState = {\n\t\tattributes,\n\t\tlisteners,\n\t\tsetActivatorElement: setActivatorNodeRef,\n\t\tdisabled: dragDisabled,\n\t\tisDragging\n\t};\n\n\treturn (\n\t\t<th {...thProps} ref={setNodeRef} className={cn(className, isDragging && draggingClassName)} style={sortableStyle}>\n\t\t\t{renderChildren(children, dragState)}\n\n\t\t\t{resizeHandle ? <TableColumnResizeHandle {...resizeHandle} /> : null}\n\t\t</th>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"table-column-interactions-6RGjmiI5.js","names":[],"sources":["../../src/table-column-interactions/TableColumnInteractions.module.scss","../../src/table-column-interactions/TableColumnResizeHandle.tsx","../../src/table-column-interactions/TableHeaderInteractionCell.tsx"],"sourcesContent":[".resizeHandle {\n\tcursor: col-resize;\n\ttouch-action: none;\n\tuser-select: none;\n\tposition: absolute;\n\tright: 0;\n\ttop: 0;\n\theight: 100%;\n\twidth: 6px;\n\tz-index: 1;\n\n\t&:hover,\n\t&:focus-visible {\n\t\tbackground: var(--focus-ring);\n\t}\n\n\t&:focus-visible {\n\t\toutline: var(--focus);\n\t\toutline-offset: calc(var(--focus-offset) * -1);\n\t}\n}\n","import { useRef, type KeyboardEvent as ReactKeyboardEvent, type PointerEvent as ReactPointerEvent } from \"react\";\n\nimport { DEFAULT_TABLE_COLUMN_MIN_WIDTH, normalizeTableColumnWidth } from \"@ryuzaki13/react-foundation-lib/table\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport styles from \"./TableColumnInteractions.module.scss\";\n\nconst DEFAULT_KEYBOARD_RESIZE_STEP = 8;\n\nexport type TableColumnResizeHandleProps = {\n\tcolumnId: string;\n\tclassName?: string;\n\tminWidth?: number;\n\tkeyboardStep?: number;\n\tariaLabel?: string;\n\tgetStartWidth?: (columnId: string, element: HTMLElement) => number;\n\tonResize: (columnId: string, width: number) => void;\n\tonResizeEnd?: (columnId: string, width: number) => void;\n\tonReset?: (columnId: string) => void;\n};\n\nfunction resolveHeaderCellWidth(element: HTMLElement, minWidth: number): number {\n\tconst headerCell = element.closest(\"th\");\n\tconst width = headerCell?.getBoundingClientRect().width;\n\n\treturn normalizeTableColumnWidth(typeof width === \"number\" && Number.isFinite(width) ? width : minWidth, minWidth);\n}\n\nexport function TableColumnResizeHandle({\n\tcolumnId,\n\tclassName,\n\tminWidth,\n\tkeyboardStep = DEFAULT_KEYBOARD_RESIZE_STEP,\n\tariaLabel = \"Изменить ширину колонки\",\n\tgetStartWidth,\n\tonResize,\n\tonResizeEnd,\n\tonReset\n}: TableColumnResizeHandleProps) {\n\tconst resolvedMinWidth = minWidth ?? DEFAULT_TABLE_COLUMN_MIN_WIDTH;\n\tconst startXRef = useRef(0);\n\tconst startWidthRef = useRef(0);\n\tconst lastWidthRef = useRef(0);\n\tconst activeRef = useRef(false);\n\tconst movedRef = useRef(false);\n\n\tconst resolveStartWidth = (element: HTMLElement) => {\n\t\tconst width = getStartWidth?.(columnId, element) ?? resolveHeaderCellWidth(element, resolvedMinWidth);\n\n\t\treturn normalizeTableColumnWidth(width, resolvedMinWidth);\n\t};\n\n\tconst handlePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (event.button !== 0 && event.pointerType === \"mouse\") return;\n\n\t\tactiveRef.current = true;\n\t\tmovedRef.current = false;\n\t\tstartXRef.current = event.clientX;\n\t\tstartWidthRef.current = resolveStartWidth(event.currentTarget);\n\t\tlastWidthRef.current = startWidthRef.current;\n\t\tevent.currentTarget.setPointerCapture(event.pointerId);\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t};\n\n\tconst handlePointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (!activeRef.current) return;\n\n\t\tconst nextWidth = normalizeTableColumnWidth(startWidthRef.current + event.clientX - startXRef.current, resolvedMinWidth);\n\t\tlastWidthRef.current = nextWidth;\n\t\tmovedRef.current = true;\n\t\tonResize(columnId, nextWidth);\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t};\n\n\tconst finishPointerResize = (event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (!activeRef.current) return;\n\n\t\tactiveRef.current = false;\n\n\t\tif (movedRef.current) {\n\t\t\tonResizeEnd?.(columnId, lastWidthRef.current);\n\t\t}\n\n\t\ttry {\n\t\t\tevent.currentTarget.releasePointerCapture(event.pointerId);\n\t\t} catch {\n\t\t\t// Pointer capture мог быть сброшен браузером при отмене жеста.\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t};\n\n\tconst handleKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n\t\tif (event.key !== \"ArrowLeft\" && event.key !== \"ArrowRight\" && event.key !== \"Home\") {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tif (event.key === \"Home\") {\n\t\t\tonReset?.(columnId);\n\t\t\treturn;\n\t\t}\n\n\t\tconst direction = event.key === \"ArrowRight\" ? 1 : -1;\n\t\tconst currentWidth = resolveStartWidth(event.currentTarget);\n\t\tconst nextWidth = normalizeTableColumnWidth(currentWidth + direction * keyboardStep, resolvedMinWidth);\n\t\tonResize(columnId, nextWidth);\n\t\tonResizeEnd?.(columnId, nextWidth);\n\t};\n\n\treturn (\n\t\t<div\n\t\t\trole=\"separator\"\n\t\t\taria-label={ariaLabel}\n\t\t\taria-orientation=\"vertical\"\n\t\t\ttabIndex={0}\n\t\t\tonPointerDown={handlePointerDown}\n\t\t\tonPointerMove={handlePointerMove}\n\t\t\tonPointerUp={finishPointerResize}\n\t\t\tonPointerCancel={finishPointerResize}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\tonDoubleClick={(event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tonReset?.(columnId);\n\t\t\t}}\n\t\t\tclassName={cn(styles.resizeHandle, className)}\n\t\t/>\n\t);\n}\n","import { type ComponentPropsWithoutRef, type CSSProperties, type ReactNode } from \"react\";\n\nimport { type DraggableAttributes, type DraggableSyntheticListeners, type UniqueIdentifier } from \"@dnd-kit/core\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { TableColumnResizeHandle, type TableColumnResizeHandleProps } from \"./TableColumnResizeHandle\";\n\nexport type TableHeaderCellDragState = {\n\tattributes: DraggableAttributes;\n\tlisteners: DraggableSyntheticListeners;\n\tsetActivatorElement: (element: HTMLElement | null) => void;\n\tdisabled: boolean;\n\tisDragging: boolean;\n};\n\nexport type TableHeaderInteractionCellProps = Omit<ComponentPropsWithoutRef<\"th\">, \"children\" | \"id\"> & {\n\tcolumnId: UniqueIdentifier;\n\tchildren: ReactNode | ((dragState: TableHeaderCellDragState) => ReactNode);\n\tdragDisabled?: boolean;\n\tdraggingClassName?: string;\n\tresizeHandle?: TableColumnResizeHandleProps;\n};\n\nfunction renderChildren(children: TableHeaderInteractionCellProps[\"children\"], dragState: TableHeaderCellDragState): ReactNode {\n\treturn typeof children === \"function\" ? children(dragState) : children;\n}\n\nexport function TableHeaderInteractionCell({\n\tcolumnId,\n\tchildren,\n\tdragDisabled = false,\n\tdraggingClassName,\n\tresizeHandle,\n\tclassName,\n\tstyle,\n\t...thProps\n}: TableHeaderInteractionCellProps) {\n\tconst { attributes, listeners, setActivatorNodeRef, setNodeRef, transform, /*transition,*/ isDragging, rect } = useSortable({\n\t\tid: columnId,\n\t\tdisabled: dragDisabled\n\t});\n\tconst lockedWidth = isDragging ? rect.current?.width : undefined;\n\tconst sortableStyle: CSSProperties = {\n\t\ttransform: CSS.Translate.toString(transform),\n\t\t// transition,\n\t\tzIndex: isDragging ? \"calc(var(--z-header) + 1)\" : undefined,\n\t\t...(lockedWidth ? { width: lockedWidth, minWidth: lockedWidth } : {}),\n\t\t...style\n\t};\n\tconst dragState: TableHeaderCellDragState = {\n\t\tattributes,\n\t\tlisteners,\n\t\tsetActivatorElement: setActivatorNodeRef,\n\t\tdisabled: dragDisabled,\n\t\tisDragging\n\t};\n\n\treturn (\n\t\t<th {...thProps} ref={setNodeRef} className={cn(className, isDragging && draggingClassName)} style={sortableStyle}>\n\t\t\t{renderChildren(children, dragState)}\n\n\t\t\t{resizeHandle ? <TableColumnResizeHandle {...resizeHandle} /> : null}\n\t\t</th>\n\t);\n}\n"],"mappings":"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"}