@ryuzaki13/react-foundation-ui 0.1.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/dist/badge/Badge.d.ts.map +1 -1
  2. package/dist/badge/index.js +1 -1
  3. package/dist/badge/stories/Badge.stories.js +1 -1
  4. package/dist/base-table/index.js +1 -1
  5. package/dist/base-table/lib/columnPinning.d.ts.map +1 -1
  6. package/dist/base-table/model/useTableColumnOrder.d.ts +1 -1
  7. package/dist/base-table/model/useTableColumnOrder.d.ts.map +1 -1
  8. package/dist/base-table/model/useTableColumnSizing.d.ts +1 -1
  9. package/dist/base-table/model/useTableColumnSizing.d.ts.map +1 -1
  10. package/dist/base-table/ui/BaseTable.d.ts +2 -2
  11. package/dist/base-table/ui/BaseTable.d.ts.map +1 -1
  12. package/dist/base-table/ui/BaseTableHeaderCell.d.ts.map +1 -1
  13. package/dist/base-table/ui/FormattedTableCell.d.ts.map +1 -1
  14. package/dist/check-box/CheckBox.d.ts.map +1 -1
  15. package/dist/check-box/index.js +1 -1
  16. package/dist/check-box/stories/CheckBox.stories.js +1 -1
  17. package/dist/chunks/{BadgeList-DHW_Ktr3.js → BadgeList-6qL9oNAp.js} +5 -5
  18. package/dist/chunks/BadgeList-6qL9oNAp.js.map +1 -0
  19. package/dist/chunks/{CalendarView-B75faWIU.js → CalendarView-DjShdvRD.js} +42 -42
  20. package/dist/chunks/{CalendarView-B75faWIU.js.map → CalendarView-DjShdvRD.js.map} +1 -1
  21. package/dist/chunks/{CheckBox-Cck5w1Ud.js → CheckBox-CulnjNvJ.js} +9 -9
  22. package/dist/chunks/CheckBox-CulnjNvJ.js.map +1 -0
  23. package/dist/chunks/{DateInput-CINDYueM.js → DateInput-LSSvObtg.js} +3 -3
  24. package/dist/chunks/DateInput-LSSvObtg.js.map +1 -0
  25. package/dist/chunks/Dialog-BPS4BeWZ.js.map +1 -1
  26. package/dist/chunks/{DisclosureGroup-0BtaXO54.js → DisclosureGroup-Plk2M_Vl.js} +9 -9
  27. package/dist/chunks/DisclosureGroup-Plk2M_Vl.js.map +1 -0
  28. package/dist/chunks/{DropZone-hf7Em__0.js → DropZone-DPGTpHI6.js} +7 -7
  29. package/dist/chunks/DropZone-DPGTpHI6.js.map +1 -0
  30. package/dist/chunks/DropdownMenu-Ds-trH4M.js.map +1 -1
  31. package/dist/chunks/Flex-DbBdq336.js.map +1 -1
  32. package/dist/chunks/Grid-ByIIytjh.js.map +1 -1
  33. package/dist/chunks/{Input-Ce2HXBUc.js → Input-Wrew1puH.js} +30 -30
  34. package/dist/chunks/Input-Wrew1puH.js.map +1 -0
  35. package/dist/chunks/{InputDateTime-DPtY_4Od.js → InputDateTime-2PCX8an8.js} +2 -2
  36. package/dist/chunks/{InputDateTime-DPtY_4Od.js.map → InputDateTime-2PCX8an8.js.map} +1 -1
  37. package/dist/chunks/{InputFile-ga5yJmdZ.js → InputFile-Ca-bRo93.js} +2 -2
  38. package/dist/chunks/InputFile-Ca-bRo93.js.map +1 -0
  39. package/dist/chunks/{InputFiles-Or2Nvfgk.js → InputFiles-pI9rQXOI.js} +22 -22
  40. package/dist/chunks/InputFiles-pI9rQXOI.js.map +1 -0
  41. package/dist/chunks/{InputImage-BeA5WJz1.js → InputImage-B522AQzl.js} +2 -2
  42. package/dist/chunks/{InputImage-BeA5WJz1.js.map → InputImage-B522AQzl.js.map} +1 -1
  43. package/dist/chunks/{LabeledExpandableActionPanel-Bx-DWmYz.js → LabeledExpandableActionPanel-CWmOSWeS.js} +12 -12
  44. package/dist/chunks/LabeledExpandableActionPanel-CWmOSWeS.js.map +1 -0
  45. package/dist/chunks/{Listbox-CY1wQOCP.js → Listbox-B6F_IKQv.js} +22 -22
  46. package/dist/chunks/Listbox-B6F_IKQv.js.map +1 -0
  47. package/dist/chunks/{MultiSelect-CBqTylqO.js → MultiSelect-CUXA8gx-.js} +12 -12
  48. package/dist/chunks/{MultiSelect-CBqTylqO.js.map → MultiSelect-CUXA8gx-.js.map} +1 -1
  49. package/dist/chunks/{NotificationsHost-BQc-zOr2.js → NotificationsHost-Bnq7xFKO.js} +24 -24
  50. package/dist/chunks/NotificationsHost-Bnq7xFKO.js.map +1 -0
  51. package/dist/chunks/{PresetRangeDateInput-YBQm_4Fb.js → PresetRangeDateInput-B_8jsilZ.js} +2 -2
  52. package/dist/chunks/{PresetRangeDateInput-YBQm_4Fb.js.map → PresetRangeDateInput-B_8jsilZ.js.map} +1 -1
  53. package/dist/chunks/{RadioButton-DJp31HFR.js → RadioButton-D5vPW4Yr.js} +8 -8
  54. package/dist/chunks/RadioButton-D5vPW4Yr.js.map +1 -0
  55. package/dist/chunks/{Select-B7k_8_Lf.js → Select-CoAYWNOn.js} +10 -10
  56. package/dist/chunks/Select-CoAYWNOn.js.map +1 -0
  57. package/dist/chunks/{SerializableSelect-53uNCqdE.js → SerializableSelect-awBOWKTj.js} +2 -2
  58. package/dist/chunks/{SerializableSelect-53uNCqdE.js.map → SerializableSelect-awBOWKTj.js.map} +1 -1
  59. package/dist/chunks/{SingleDateTimeInput-CwvIbwje.js → SingleDateTimeInput-o44Vlwdk.js} +19 -19
  60. package/dist/chunks/SingleDateTimeInput-o44Vlwdk.js.map +1 -0
  61. package/dist/chunks/{StateSelect-D0wuUdT9.js → StateSelect-abZq176J.js} +2 -2
  62. package/dist/chunks/{StateSelect-D0wuUdT9.js.map → StateSelect-abZq176J.js.map} +1 -1
  63. package/dist/chunks/{Switch-B476FBUD.js → Switch-DHMnZVmN.js} +9 -9
  64. package/dist/chunks/Switch-DHMnZVmN.js.map +1 -0
  65. package/dist/chunks/{TextEditorLexicalClient-DcixYuo4.js → TextEditorLexicalClient-Dt4eaPA3.js} +4 -4
  66. package/dist/chunks/{TextEditorLexicalClient-DcixYuo4.js.map → TextEditorLexicalClient-Dt4eaPA3.js.map} +1 -1
  67. package/dist/chunks/{Textarea-DeJJjjkI.js → Textarea-DOVrPH4I.js} +2 -2
  68. package/dist/chunks/{Textarea-DeJJjjkI.js.map → Textarea-DOVrPH4I.js.map} +1 -1
  69. package/dist/chunks/TimePanel-_kF2RtHk.js.map +1 -1
  70. package/dist/chunks/{TreeMultiSelect-DRYNx7u5.js → TreeMultiSelect-C76RYavo.js} +2 -2
  71. package/dist/chunks/{TreeMultiSelect-DRYNx7u5.js.map → TreeMultiSelect-C76RYavo.js.map} +1 -1
  72. package/dist/chunks/{TreePickerBase-DYzTsSBQ.js → TreePickerBase-qNHIWbYL.js} +155 -155
  73. package/dist/chunks/TreePickerBase-qNHIWbYL.js.map +1 -0
  74. package/dist/chunks/{TreeSelect-DGLDu6qc.js → TreeSelect-LEhNdPCX.js} +2 -2
  75. package/dist/chunks/{TreeSelect-DGLDu6qc.js.map → TreeSelect-LEhNdPCX.js.map} +1 -1
  76. package/dist/chunks/{base-table-DVje02Zi.js → base-table-ij2guVMB.js} +3 -3
  77. package/dist/chunks/base-table-ij2guVMB.js.map +1 -0
  78. package/dist/chunks/{layout-picker-BA9vA8JI.js → layout-picker-CzZ8Xzkk.js} +9 -9
  79. package/dist/chunks/layout-picker-CzZ8Xzkk.js.map +1 -0
  80. package/dist/chunks/{misc-DrmMj8GO.js → misc-Bj0y3ERC.js} +54 -54
  81. package/dist/chunks/misc-Bj0y3ERC.js.map +1 -0
  82. package/dist/chunks/{modal-DqVcZws_.js → modal-B4ivQb2h.js} +10 -10
  83. package/dist/chunks/modal-B4ivQb2h.js.map +1 -0
  84. package/dist/chunks/{picker-Cj4RnJh6.js → picker-gIUs0nE_.js} +13 -13
  85. package/dist/chunks/picker-gIUs0nE_.js.map +1 -0
  86. package/dist/chunks/popover-C79P5bm2.js.map +1 -1
  87. package/dist/chunks/{slider-34wxzKkG.js → slider-CigVo4Ju.js} +3 -3
  88. package/dist/chunks/slider-CigVo4Ju.js.map +1 -0
  89. package/dist/chunks/{sortable-CwDHC3CA.js → sortable-BZqnZ_LA.js} +10 -10
  90. package/dist/chunks/sortable-BZqnZ_LA.js.map +1 -0
  91. package/dist/chunks/{table-BYA0hCj7.js → table-CK-CM2zD.js} +2 -2
  92. package/dist/chunks/table-CK-CM2zD.js.map +1 -0
  93. package/dist/chunks/table-column-interactions-DPyJDD7P.js.map +1 -1
  94. package/dist/chunks/{tabs-CjU2KCgs.js → tabs-D5ikIIng.js} +2 -2
  95. package/dist/chunks/{tabs-CjU2KCgs.js.map → tabs-D5ikIIng.js.map} +1 -1
  96. package/dist/chunks/ui.module-BisoTevy.js.map +1 -1
  97. package/dist/context-menu/components/MenuContent.d.ts.map +1 -1
  98. package/dist/context-menu/components/MenuContext.d.ts.map +1 -1
  99. package/dist/context-menu/components/MenuRoot.d.ts.map +1 -1
  100. package/dist/context-menu/components/RadialMenuContent.d.ts.map +1 -1
  101. package/dist/date-input/index.js +2 -2
  102. package/dist/date-input/lib/types.d.ts.map +1 -1
  103. package/dist/date-input/stories/DateInput.stories.js +2 -2
  104. package/dist/date-input/ui/CalendarView.d.ts.map +1 -1
  105. package/dist/date-input/ui/DateInput.d.ts.map +1 -1
  106. package/dist/date-range-preset-select/stories/DateRangePresetSelect.stories.js +1 -1
  107. package/dist/date-time-input/index.js +1 -1
  108. package/dist/date-time-input/lib/dateTimeValue.d.ts.map +1 -1
  109. package/dist/date-time-input/stories/SingleDateTimeInput.stories.js +1 -1
  110. package/dist/date-time-input/ui/SingleDateTimeInput.d.ts.map +1 -1
  111. package/dist/dialog/Dialog.d.ts.map +1 -1
  112. package/dist/disclosure/Disclosure.d.ts.map +1 -1
  113. package/dist/disclosure/index.js +1 -1
  114. package/dist/disclosure/stories/Disclosure.stories.js +1 -1
  115. package/dist/drop-zone/DropZone.d.ts.map +1 -1
  116. package/dist/drop-zone/index.js +1 -1
  117. package/dist/drop-zone/stories/DropZone.stories.d.ts.map +1 -1
  118. package/dist/drop-zone/stories/DropZone.stories.js +1 -1
  119. package/dist/drop-zone/stories/DropZone.stories.js.map +1 -1
  120. package/dist/errors/ErrorDisplay.d.ts.map +1 -1
  121. package/dist/errors/index.js.map +1 -1
  122. package/dist/expandable-action-panel/ExpandableActionPanel.d.ts.map +1 -1
  123. package/dist/expandable-action-panel/index.js +1 -1
  124. package/dist/expandable-action-panel/stories/ExpandableActionPanel.stories.js +4 -4
  125. package/dist/image/index.js +3 -3
  126. package/dist/image/index.js.map +1 -1
  127. package/dist/image/ui/ImageSelection.d.ts.map +1 -1
  128. package/dist/input/Input.d.ts.map +1 -1
  129. package/dist/input/index.js +1 -1
  130. package/dist/input/stories/Input.stories.js +1 -1
  131. package/dist/input-date-time/index.js +1 -1
  132. package/dist/input-date-time/stories/InputDateTime.stories.js +1 -1
  133. package/dist/input-file/InputFile.d.ts.map +1 -1
  134. package/dist/input-file/index.js +1 -1
  135. package/dist/input-file/stories/InputFile.stories.d.ts.map +1 -1
  136. package/dist/input-file/stories/InputFile.stories.js +1 -1
  137. package/dist/input-file/stories/InputFile.stories.js.map +1 -1
  138. package/dist/input-files/InputFilesList.d.ts.map +1 -1
  139. package/dist/input-files/index.js +1 -1
  140. package/dist/input-files/stories/InputFiles.stories.d.ts +1 -1
  141. package/dist/input-files/stories/InputFiles.stories.d.ts.map +1 -1
  142. package/dist/input-files/stories/InputFiles.stories.js +1 -1
  143. package/dist/input-files/stories/InputFiles.stories.js.map +1 -1
  144. package/dist/input-image/index.js +1 -1
  145. package/dist/input-image/stories/InputImage.stories.d.ts.map +1 -1
  146. package/dist/input-image/stories/InputImage.stories.js +1 -1
  147. package/dist/input-image/stories/InputImage.stories.js.map +1 -1
  148. package/dist/input-search/index.js +1 -1
  149. package/dist/layout-picker/index.js +1 -1
  150. package/dist/layout-picker/stories/LayoutPicker.stories.js +1 -1
  151. package/dist/layout-picker/ui/LayoutPicker.d.ts.map +1 -1
  152. package/dist/list/List.d.ts.map +1 -1
  153. package/dist/list/index.js +5 -5
  154. package/dist/list/index.js.map +1 -1
  155. package/dist/listbox/Listbox.d.ts.map +1 -1
  156. package/dist/listbox/index.js +1 -1
  157. package/dist/listbox/stories/Listbox.stories.js +1 -1
  158. package/dist/misc/CopyTextWrapper.d.ts.map +1 -1
  159. package/dist/misc/OneStepScroller.d.ts.map +1 -1
  160. package/dist/misc/StateIcon.d.ts.map +1 -1
  161. package/dist/misc/index.js +1 -1
  162. package/dist/modal/Modal.d.ts +5 -1
  163. package/dist/modal/Modal.d.ts.map +1 -1
  164. package/dist/modal/index.js +1 -1
  165. package/dist/modal/stories/Modal.stories.js +2 -2
  166. package/dist/multi-select/index.js +1130 -24
  167. package/dist/multi-select/index.js.map +1 -1
  168. package/dist/multi-select/model/useODataMultiSelect.d.ts +23 -0
  169. package/dist/multi-select/model/useODataMultiSelect.d.ts.map +1 -0
  170. package/dist/multi-select/ui/MultiSelect.d.ts +1 -1
  171. package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
  172. package/dist/multi-select/ui/ODataDependentMultiSelect.d.ts +20 -0
  173. package/dist/multi-select/ui/ODataDependentMultiSelect.d.ts.map +1 -0
  174. package/dist/multi-select/ui/ODataDependentSegmentMultiSelect.d.ts +21 -0
  175. package/dist/multi-select/ui/ODataDependentSegmentMultiSelect.d.ts.map +1 -0
  176. package/dist/multi-select/ui/ODataMultiSelect.d.ts +7 -0
  177. package/dist/multi-select/ui/ODataMultiSelect.d.ts.map +1 -0
  178. package/dist/multi-select/ui/SerializableMultiSelect.d.ts.map +1 -1
  179. package/dist/multi-select/ui/index.d.ts +3 -0
  180. package/dist/multi-select/ui/index.d.ts.map +1 -1
  181. package/dist/multi-select/ui/stories/MultiSelect.stories.js +1 -1
  182. package/dist/multi-select/ui/stories/ODataMultiSelect.stories.d.ts +44 -0
  183. package/dist/multi-select/ui/stories/ODataMultiSelect.stories.d.ts.map +1 -0
  184. package/dist/notifications/index.js +1 -1
  185. package/dist/notifications/model/NotificationsProvider.d.ts.map +1 -1
  186. package/dist/notifications/ui/NotificationsHost.d.ts.map +1 -1
  187. package/dist/notifications/ui/stories/NotificationsHost.stories.js +1 -1
  188. package/dist/period-select/PeriodSelect.d.ts +1 -1
  189. package/dist/period-select/PeriodSelect.d.ts.map +1 -1
  190. package/dist/period-select/index.js.map +1 -1
  191. package/dist/period-select/lib/periodSelect.d.ts.map +1 -1
  192. package/dist/period-select/stories/PeriodSelect.stories.d.ts.map +1 -1
  193. package/dist/period-select/stories/PeriodSelect.stories.js +1 -1
  194. package/dist/period-select/stories/PeriodSelect.stories.js.map +1 -1
  195. package/dist/picker/PickerPopup.d.ts.map +1 -1
  196. package/dist/picker/PickerTriggerActions.d.ts.map +1 -1
  197. package/dist/picker/index.js +1 -1
  198. package/dist/picker/model/usePickerFloatingListbox.d.ts.map +1 -1
  199. package/dist/popover/FloatingPopover.d.ts.map +1 -1
  200. package/dist/popover/components/PopoverContent.d.ts.map +1 -1
  201. package/dist/popover/components/PopoverContext.d.ts.map +1 -1
  202. package/dist/popover/stories/Popover.stories.js +1 -1
  203. package/dist/preset-range-date-input/index.js +1 -1
  204. package/dist/preset-range-date-input/ui/stories/PresetRangeDateInput.stories.js +1 -1
  205. package/dist/preset-select/index.js +1 -1
  206. package/dist/radio-button/RadioButton.d.ts.map +1 -1
  207. package/dist/radio-button/index.js +1 -1
  208. package/dist/radio-button/stories/RadioButton.stories.js +1 -1
  209. package/dist/select/ODataSelect.d.ts +9 -0
  210. package/dist/select/ODataSelect.d.ts.map +1 -0
  211. package/dist/select/Select.d.ts.map +1 -1
  212. package/dist/select/index.js +2 -2
  213. package/dist/select/model/useODataSelect.d.ts +25 -0
  214. package/dist/select/model/useODataSelect.d.ts.map +1 -0
  215. package/dist/select/model/useODataSelectBase.d.ts +24 -0
  216. package/dist/select/model/useODataSelectBase.d.ts.map +1 -0
  217. package/dist/select/stories/ODataSelect.stories.d.ts +46 -0
  218. package/dist/select/stories/ODataSelect.stories.d.ts.map +1 -0
  219. package/dist/select/stories/Select.stories.js +1 -1
  220. package/dist/select/stories/SerializableSelect.stories.js +1 -1
  221. package/dist/select/stories/odataStoryCollection.d.ts +2 -0
  222. package/dist/select/stories/odataStoryCollection.d.ts.map +1 -0
  223. package/dist/select/stories/odataStoryFixtures.d.ts +35 -0
  224. package/dist/select/stories/odataStoryFixtures.d.ts.map +1 -0
  225. package/dist/simple-table/index.js +1 -1
  226. package/dist/simple-table/index.js.map +1 -1
  227. package/dist/slider/Slider.d.ts.map +1 -1
  228. package/dist/slider/index.js +1 -1
  229. package/dist/slider/stories/Slider.stories.js +1 -1
  230. package/dist/slider/stories/SliderInput.stories.js +1 -1
  231. package/dist/sortable/Sortable.d.ts.map +1 -1
  232. package/dist/sortable/SortableDragHandle.d.ts.map +1 -1
  233. package/dist/sortable/index.js +1 -1
  234. package/dist/sortable/stories/Sortable.stories.js +1 -1
  235. package/dist/state-select/index.js +1 -1
  236. package/dist/state-select/stories/StateSelect.stories.d.ts.map +1 -1
  237. package/dist/state-select/stories/StateSelect.stories.js +1 -1
  238. package/dist/state-select/stories/StateSelect.stories.js.map +1 -1
  239. package/dist/switch/Switch.d.ts.map +1 -1
  240. package/dist/switch/index.js +1 -1
  241. package/dist/switch/stories/Switch.stories.js +1 -1
  242. package/dist/table/Table.d.ts +1 -1
  243. package/dist/table/Table.d.ts.map +1 -1
  244. package/dist/table/index.js +1 -1
  245. package/dist/table/stories/Table.stories.d.ts +155 -0
  246. package/dist/table/stories/Table.stories.d.ts.map +1 -0
  247. package/dist/table-column-interactions/TableHeaderInteractionCell.d.ts.map +1 -1
  248. package/dist/tabs/index.js +1 -1
  249. package/dist/tabs/stories/Tabs.stories.d.ts.map +1 -1
  250. package/dist/tabs/stories/Tabs.stories.js +2 -2
  251. package/dist/tabs/stories/Tabs.stories.js.map +1 -1
  252. package/dist/text/TextOverflow.d.ts.map +1 -1
  253. package/dist/text/index.js.map +1 -1
  254. package/dist/text-editor/TextEditorLexicalClient.d.ts.map +1 -1
  255. package/dist/text-editor/index.js +2 -2
  256. package/dist/textarea/index.js +1 -1
  257. package/dist/textarea/stories/Textarea.stories.js +1 -1
  258. package/dist/tree-select/ODataTreeMultiSelect.d.ts +12 -0
  259. package/dist/tree-select/ODataTreeMultiSelect.d.ts.map +1 -0
  260. package/dist/tree-select/ODataTreeSelect.d.ts +13 -0
  261. package/dist/tree-select/ODataTreeSelect.d.ts.map +1 -0
  262. package/dist/tree-select/TreeNodeContent.d.ts.map +1 -1
  263. package/dist/tree-select/TreePickerBase.d.ts.map +1 -1
  264. package/dist/tree-select/index.js +2 -2
  265. package/dist/tree-select/model/buildODataTreeNodes.d.ts +12 -0
  266. package/dist/tree-select/model/buildODataTreeNodes.d.ts.map +1 -0
  267. package/dist/tree-select/model/resolveOrderedTreeSegmentItems.d.ts +4 -0
  268. package/dist/tree-select/model/resolveOrderedTreeSegmentItems.d.ts.map +1 -0
  269. package/dist/tree-select/model/useODataTreeData.d.ts +11 -0
  270. package/dist/tree-select/model/useODataTreeData.d.ts.map +1 -0
  271. package/dist/tree-select/stories/ODataTreeMultiSelect.stories.d.ts +55 -0
  272. package/dist/tree-select/stories/ODataTreeMultiSelect.stories.d.ts.map +1 -0
  273. package/dist/tree-select/stories/ODataTreeSelect.stories.d.ts +54 -0
  274. package/dist/tree-select/stories/ODataTreeSelect.stories.d.ts.map +1 -0
  275. package/dist/tree-select/stories/TreeMultiSelect.stories.js +1 -1
  276. package/dist/tree-select/stories/TreeSelect.stories.js +1 -1
  277. package/dist/tree-table/TreeTable.d.ts +1 -1
  278. package/dist/tree-table/TreeTable.d.ts.map +1 -1
  279. package/dist/tree-table/index.js +2 -2
  280. package/dist/tree-table/index.js.map +1 -1
  281. package/dist/tree-table/stories/TreeTable.stories.d.ts +158 -0
  282. package/dist/tree-table/stories/TreeTable.stories.d.ts.map +1 -0
  283. package/dist/types.d.ts +1 -1
  284. package/dist/types.d.ts.map +1 -1
  285. package/dist/types.js +0 -0
  286. package/package.json +15 -7
  287. package/dist/chunks/BadgeList-DHW_Ktr3.js.map +0 -1
  288. package/dist/chunks/CheckBox-Cck5w1Ud.js.map +0 -1
  289. package/dist/chunks/DateInput-CINDYueM.js.map +0 -1
  290. package/dist/chunks/DisclosureGroup-0BtaXO54.js.map +0 -1
  291. package/dist/chunks/DropZone-hf7Em__0.js.map +0 -1
  292. package/dist/chunks/Input-Ce2HXBUc.js.map +0 -1
  293. package/dist/chunks/InputFile-ga5yJmdZ.js.map +0 -1
  294. package/dist/chunks/InputFiles-Or2Nvfgk.js.map +0 -1
  295. package/dist/chunks/LabeledExpandableActionPanel-Bx-DWmYz.js.map +0 -1
  296. package/dist/chunks/Listbox-CY1wQOCP.js.map +0 -1
  297. package/dist/chunks/NotificationsHost-BQc-zOr2.js.map +0 -1
  298. package/dist/chunks/RadioButton-DJp31HFR.js.map +0 -1
  299. package/dist/chunks/Select-B7k_8_Lf.js.map +0 -1
  300. package/dist/chunks/SingleDateTimeInput-CwvIbwje.js.map +0 -1
  301. package/dist/chunks/Switch-B476FBUD.js.map +0 -1
  302. package/dist/chunks/TreePickerBase-DYzTsSBQ.js.map +0 -1
  303. package/dist/chunks/base-table-DVje02Zi.js.map +0 -1
  304. package/dist/chunks/layout-picker-BA9vA8JI.js.map +0 -1
  305. package/dist/chunks/misc-DrmMj8GO.js.map +0 -1
  306. package/dist/chunks/modal-DqVcZws_.js.map +0 -1
  307. package/dist/chunks/picker-Cj4RnJh6.js.map +0 -1
  308. package/dist/chunks/slider-34wxzKkG.js.map +0 -1
  309. package/dist/chunks/sortable-CwDHC3CA.js.map +0 -1
  310. package/dist/chunks/table-BYA0hCj7.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TreeSelect-DGLDu6qc.js","names":[],"sources":["../../src/tree-select/TreeSelect.tsx"],"sourcesContent":["import { useMemo } from \"react\";\n\nimport { UiBaseProps } from \"../types\";\n\nimport { createTreeNodeIndex, treeSelectValueToId } from \"./model/treeUtils\";\nimport { TreePickerBase } from \"./TreePickerBase\";\nimport { TreeSelectNode, TreeSelectValue } from \"./types\";\n\nexport interface TreeSelectProps extends Omit<UiBaseProps<TreeSelectValue | undefined>, \"placeholder\"> {\n\tnodes: readonly TreeSelectNode[];\n\tplaceholder?: string;\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n\tisLoading?: boolean;\n\terror?: string;\n\tclearable?: boolean;\n}\n\nfunction formatTreeNodeSummary(node: TreeSelectNode | undefined) {\n\tif (!node) {\n\t\treturn undefined;\n\t}\n\n\tif (node.code && node.code !== node.label) {\n\t\treturn `${node.label} · ${node.code}`;\n\t}\n\n\treturn node.label;\n}\n\nexport function TreeSelect({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tplaceholder = \"Выберите значение\",\n\tsize,\n\tnodes,\n\tvalue,\n\tonChange,\n\tquery,\n\tdefaultQuery,\n\tonQuery,\n\tisLoading,\n\terror,\n\tclearable = false\n}: TreeSelectProps) {\n\tconst treeIndex = useMemo(() => createTreeNodeIndex(nodes), [nodes]);\n\tconst selectedId = treeSelectValueToId(value, treeIndex);\n\tconst selectedNode = selectedId ? treeIndex.nodeById.get(selectedId) : undefined;\n\n\treturn (\n\t\t<TreePickerBase\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t\tsize={size}\n\t\t\tnodes={nodes}\n\t\t\tselectedIds={selectedId ? new Set([selectedId]) : new Set()}\n\t\t\tpartialIds={new Set()}\n\t\t\tselectionMode=\"single\"\n\t\t\ttriggerMode=\"search\"\n\t\t\tselectedSummaryText={formatTreeNodeSummary(selectedNode)}\n\t\t\tquery={query}\n\t\t\tdefaultQuery={defaultQuery}\n\t\t\tonQuery={onQuery}\n\t\t\tonNodeActivate={(node) => onChange({ codeKey: node.codeKey, value: node.value })}\n\t\t\tonClearSelection={clearable ? () => onChange(undefined) : undefined}\n\t\t\tisLoading={isLoading}\n\t\t\terror={error}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;AAmBA,SAAS,EAAsB,GAAkC;CAC3D,OAQL,OAJI,EAAK,QAAQ,EAAK,SAAS,EAAK,QAC5B,GAAG,EAAK,MAAM,KAAK,EAAK,SAGzB,EAAK;AACb;AAEA,SAAgB,EAAW,EAC1B,UACA,gBACA,aACA,iBAAc,qBACd,SACA,UACA,UACA,aACA,UACA,iBACA,YACA,cACA,UACA,eAAY,MACO;CACnB,IAAM,IAAY,QAAc,EAAoB,CAAK,GAAG,CAAC,CAAK,CAAC,GAC7D,IAAa,EAAoB,GAAO,CAAS,GACjD,IAAe,IAAa,EAAU,SAAS,IAAI,CAAU,IAAI,KAAA;CAEvE,OACC,kBAAC,GAAD;EACQ;EACM;EACH;EACG;EACP;EACC;EACP,aAAa,oBAAa,IAAI,IAAI,CAAC,CAAU,CAAC,oBAAI,IAAI,IAAI;EAC1D,4BAAY,IAAI,IAAI;EACpB,eAAc;EACd,aAAY;EACZ,qBAAqB,EAAsB,CAAY;EAChD;EACO;EACL;EACT,iBAAiB,MAAS,EAAS;GAAE,SAAS,EAAK;GAAS,OAAO,EAAK;EAAM,CAAC;EAC/E,kBAAkB,UAAkB,EAAS,KAAA,CAAS,IAAI,KAAA;EAC/C;EACJ;CACP,CAAA;AAEH"}
1
+ {"version":3,"file":"TreeSelect-LEhNdPCX.js","names":[],"sources":["../../src/tree-select/TreeSelect.tsx"],"sourcesContent":["import { useMemo } from \"react\";\n\nimport { UiBaseProps } from \"../types\";\n\nimport { createTreeNodeIndex, treeSelectValueToId } from \"./model/treeUtils\";\nimport { TreePickerBase } from \"./TreePickerBase\";\nimport { TreeSelectNode, TreeSelectValue } from \"./types\";\n\nexport interface TreeSelectProps extends Omit<UiBaseProps<TreeSelectValue | undefined>, \"placeholder\"> {\n\tnodes: readonly TreeSelectNode[];\n\tplaceholder?: string;\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n\tisLoading?: boolean;\n\terror?: string;\n\tclearable?: boolean;\n}\n\nfunction formatTreeNodeSummary(node: TreeSelectNode | undefined) {\n\tif (!node) {\n\t\treturn undefined;\n\t}\n\n\tif (node.code && node.code !== node.label) {\n\t\treturn `${node.label} · ${node.code}`;\n\t}\n\n\treturn node.label;\n}\n\nexport function TreeSelect({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tplaceholder = \"Выберите значение\",\n\tsize,\n\tnodes,\n\tvalue,\n\tonChange,\n\tquery,\n\tdefaultQuery,\n\tonQuery,\n\tisLoading,\n\terror,\n\tclearable = false\n}: TreeSelectProps) {\n\tconst treeIndex = useMemo(() => createTreeNodeIndex(nodes), [nodes]);\n\tconst selectedId = treeSelectValueToId(value, treeIndex);\n\tconst selectedNode = selectedId ? treeIndex.nodeById.get(selectedId) : undefined;\n\n\treturn (\n\t\t<TreePickerBase\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t\tsize={size}\n\t\t\tnodes={nodes}\n\t\t\tselectedIds={selectedId ? new Set([selectedId]) : new Set()}\n\t\t\tpartialIds={new Set()}\n\t\t\tselectionMode=\"single\"\n\t\t\ttriggerMode=\"search\"\n\t\t\tselectedSummaryText={formatTreeNodeSummary(selectedNode)}\n\t\t\tquery={query}\n\t\t\tdefaultQuery={defaultQuery}\n\t\t\tonQuery={onQuery}\n\t\t\tonNodeActivate={(node) => onChange({ codeKey: node.codeKey, value: node.value })}\n\t\t\tonClearSelection={clearable ? () => onChange(undefined) : undefined}\n\t\t\tisLoading={isLoading}\n\t\t\terror={error}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;AAmBA,SAAS,EAAsB,GAAkC;CAC3D,OAQL,OAJI,EAAK,QAAQ,EAAK,SAAS,EAAK,QAC5B,GAAG,EAAK,MAAM,KAAK,EAAK,SAGzB,EAAK;AACb;AAEA,SAAgB,EAAW,EAC1B,UACA,gBACA,aACA,iBAAc,qBACd,SACA,UACA,UACA,aACA,UACA,iBACA,YACA,cACA,UACA,eAAY,MACO;CACnB,IAAM,IAAY,QAAc,EAAoB,CAAK,GAAG,CAAC,CAAK,CAAC,GAC7D,IAAa,EAAoB,GAAO,CAAS,GACjD,IAAe,IAAa,EAAU,SAAS,IAAI,CAAU,IAAI,KAAA;CAEvE,OACC,kBAAC,GAAD;EACQ;EACM;EACH;EACG;EACP;EACC;EACP,aAAa,oBAAa,IAAI,IAAI,CAAC,CAAU,CAAC,oBAAI,IAAI,IAAI;EAC1D,4BAAY,IAAI,IAAI;EACpB,eAAc;EACd,aAAY;EACZ,qBAAqB,EAAsB,CAAY;EAChD;EACO;EACL;EACT,iBAAiB,MAAS,EAAS;GAAE,SAAS,EAAK;GAAS,OAAO,EAAK;EAAM,CAAC;EAC/E,kBAAkB,UAAkB,EAAS,KAAA,CAAS,IAAI,KAAA;EAC/C;EACJ;CACP,CAAA;AAEH"}
@@ -1,8 +1,8 @@
1
1
  import { t as e } from "./table-column-interactions-DPyJDD7P.js";
2
2
  import { n as t } from "./DropdownMenu-Ds-trH4M.js";
3
3
  import { r as n } from "./Grid-ByIIytjh.js";
4
- import { c as r, d as i, h as a, i as o } from "./misc-DrmMj8GO.js";
5
- import { s, t as c } from "./sortable-CwDHC3CA.js";
4
+ import { c as r, d as i, h as a, i as o } from "./misc-Bj0y3ERC.js";
5
+ import { s, t as c } from "./sortable-BZqnZ_LA.js";
6
6
  import { cn as l, handleKeyboardActivation as u } from "@ryuzaki13/react-foundation-lib/utils";
7
7
  import { Fragment as d, jsx as f, jsxs as p } from "react/jsx-runtime";
8
8
  import { useCallback as m, useEffect as h, useMemo as g, useRef as _, useState as v } from "react";
@@ -511,4 +511,4 @@ function Z({ displayValue: e, align: t = "left" }) {
511
511
  //#endregion
512
512
  export { W as a, R as c, z as d, N as f, j as g, A as h, G as i, I as l, M as m, fe as n, U as o, ce as p, K as r, H as s, Z as t, F as u };
513
513
 
514
- //# sourceMappingURL=base-table-DVje02Zi.js.map
514
+ //# sourceMappingURL=base-table-ij2guVMB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-table-ij2guVMB.js","names":[],"sources":["../../src/base-table/lib/columnPinning.ts","../../src/base-table/lib/formatting.ts","../../src/base-table/lib/mergeDuplicates.ts","../../src/base-table/model/useTableColumnOrder.ts","../../src/base-table/model/useTableColumnPinning.ts","../../src/base-table/model/useTableColumnSizing.ts","../../src/base-table/model/useTableColumnVisibility.ts","../../src/base-table/ui/BaseTable.module.scss","../../src/base-table/ui/BaseTableHeaderCell.tsx","../../src/base-table/ui/BaseTable.tsx","../../src/base-table/ui/FormattedTableCell.module.scss","../../src/base-table/ui/FormattedTableCell.tsx"],"sourcesContent":["import { filterAndDeduplicateIds, pickExistingMapValues } from \"@ryuzaki13/react-foundation-lib/array\";\nimport {\n\tbuildTableColumnLayout,\n\tgetTableColumnMeta,\n\tresolveTableColumnOrder,\n\tresolveTableLength\n} from \"@ryuzaki13/react-foundation-lib/table\";\n\nimport type { Column, TableState, Table as TanStackTable } from \"@tanstack/react-table\";\n\nexport type BaseTableColumnLayoutItem<TData extends object> = {\n\tid: string;\n\tcolumn: Column<TData, unknown>;\n\twidth: string;\n};\n\n/**\n * Реактивный срез состояния колонок, от которого зависит физический layout BaseTable.\n *\n * TanStack table instance остаётся стабильным объектом, поэтому BaseTable получает\n * этот срез отдельным prop: React Compiler не должен кэшировать разметку колонок\n * поверх изменившихся order/sizing/pinning/visibility.\n */\nexport type BaseTableColumnState = Pick<TableState, \"columnOrder\" | \"columnPinning\" | \"columnSizing\" | \"columnVisibility\">;\n\n/**\n * Публичное состояние закрепления колонок для shared-таблиц.\n *\n * В первой итерации поддерживается только закрепление слева.\n */\nexport interface TableColumnPinningState {\n\t/**\n\t * Идентификаторы колонок, закреплённых слева, в порядке отображения.\n\t */\n\tleft?: string[];\n}\n\n/**\n * Нормализует публичное состояние закрепления к формату TanStack Table.\n *\n * Правая зона принудительно очищается, чтобы не открывать неподдерживаемый API.\n */\nexport function normalizeTableColumnPinning(state?: TableColumnPinningState): { left: string[]; right: string[] } {\n\treturn {\n\t\tleft: Array.from(\n\t\t\tnew Set(\n\t\t\t\t(state?.left ?? []).filter((columnId): columnId is string => typeof columnId === \"string\" && columnId.trim().length > 0)\n\t\t\t)\n\t\t),\n\t\tright: []\n\t};\n}\n\n/**\n * Возвращает ширину колонки в том же формате, что и colgroup базовой таблицы.\n */\nexport function resolveBaseTableColumnWidth<TData extends object>(\n\tcolumn: Column<TData, unknown>,\n\tcolumnSizing?: Readonly<Record<string, number>>\n): string {\n\tconst resizedWidth = columnSizing?.[column.id];\n\tif (typeof resizedWidth === \"number\" && Number.isFinite(resizedWidth) && resizedWidth > 0) {\n\t\treturn `${Math.floor(resizedWidth)}px`;\n\t}\n\n\tconst meta = getTableColumnMeta(column.columnDef);\n\n\tlet width = meta?.width ?? 4;\n\n\tif (typeof width === \"number\") {\n\t\twidth = Math.max(width, 4);\n\t}\n\n\treturn resolveTableLength(width);\n}\n\n/**\n * Собирает видимые leaf-колонки в фактическом порядке рендера: pinned-left -> center -> pinned-right.\n *\n * В отличие от отдельных TanStack getters, порядок явно строится из одного\n * источника `columnOrder`, поэтому `<colgroup>`, header и body получают один\n * и тот же layout после drag&drop.\n */\nexport function getOrderedVisibleLeafColumns<TData extends object>(\n\ttable: TanStackTable<TData>,\n\tcolumnState: BaseTableColumnState\n): Column<TData, unknown>[] {\n\tconst visibleColumns = table.getAllLeafColumns().filter((column) => column.getIsVisible());\n\tconst columnById = new Map(visibleColumns.map((column) => [column.id, column]));\n\tconst visibleColumnIds = visibleColumns.map((column) => column.id);\n\tconst leftIds = filterAndDeduplicateIds(columnState.columnPinning.left, visibleColumnIds);\n\tconst rightIds = filterAndDeduplicateIds(columnState.columnPinning.right, visibleColumnIds);\n\tconst pinnedIds = new Set([...leftIds, ...rightIds]);\n\tconst centerIds: string[] = [];\n\n\tfor (const column of visibleColumns) {\n\t\tif (!pinnedIds.has(column.id)) {\n\t\t\tcenterIds.push(column.id);\n\t\t}\n\t}\n\n\tconst orderedCenterIds = resolveTableColumnOrder({\n\t\tids: centerIds,\n\t\torder: columnState.columnOrder\n\t});\n\n\treturn pickExistingMapValues([...leftIds, ...orderedCenterIds, ...rightIds], columnById);\n}\n\nexport function buildBaseTableColumnLayout<TData extends object>(\n\ttable: TanStackTable<TData>,\n\tcolumnState: BaseTableColumnState\n): BaseTableColumnLayoutItem<TData>[] {\n\tconst columns = getOrderedVisibleLeafColumns(table, columnState);\n\tconst columnById = new Map(columns.map((column) => [column.id, column]));\n\n\treturn buildTableColumnLayout({\n\t\tids: columns.map((column) => column.id),\n\t\tgetWidth: (id) => {\n\t\t\tconst column = columnById.get(id);\n\t\t\treturn column ? resolveBaseTableColumnWidth(column, columnState.columnSizing) : \"0px\";\n\t\t}\n\t}).flatMap((item) => {\n\t\tconst column = columnById.get(item.id);\n\n\t\treturn column\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tcolumn\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t: [];\n\t});\n}\n\n/**\n * Вычисляет sticky-offset для закреплённых слева колонок.\n *\n * Значения возвращаются как CSS-length, чтобы корректно суммировать `em`, `px` и `calc(...)`.\n */\nexport function getLeftPinnedColumnOffsets<TData extends object>(\n\ttable: TanStackTable<TData>,\n\tcolumnState: BaseTableColumnState\n): Readonly<Record<string, string>> {\n\tconst offsets: Record<string, string> = {};\n\tconst accumulatedWidths: string[] = [];\n\n\tfor (const column of getOrderedVisibleLeafColumns(table, columnState)) {\n\t\tif (column.getIsPinned() !== \"left\") continue;\n\n\t\toffsets[column.id] = combineCssLengths(accumulatedWidths);\n\t\taccumulatedWidths.push(resolveBaseTableColumnWidth(column, columnState.columnSizing));\n\t}\n\n\treturn offsets;\n}\n\n/**\n * Складывает CSS-length значения в безопасную строку `calc(...)`.\n */\nfunction combineCssLengths(lengths: readonly string[]): string {\n\tif (lengths.length === 0) {\n\t\treturn \"0px\";\n\t}\n\n\tif (lengths.length === 1) {\n\t\treturn lengths[0]!;\n\t}\n\n\treturn `calc(${lengths.join(\" + \")})`;\n}\n","import {\n\tcompileFormattersPipelineRuntimeFields,\n\ttype FormattersPipelineRuntimeField,\n\ttype FormattersPipelineRuntimeFields\n} from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { getTableColumnFormattingMeta, type TableColumnDef } from \"@ryuzaki13/react-foundation-lib/table\";\n\n/**\n * Снимок форматирующих данных, вычисленный из набора колонок.\n *\n * Используется и в `Table`, и в `TreeTable`, чтобы не дублировать\n * предкомпиляцию runtime и правила приоритета кастомного `cell`.\n */\nexport interface TableFormattingSnapshot {\n\t/**\n\t * Скомпилированный runtime по идентификаторам колонок.\n\t */\n\truntimeByColumnId: FormattersPipelineRuntimeFields<FormattersPipelineRuntimeField>;\n\t/**\n\t * Идентификаторы колонок с явным кастомным `cell`.\n\t */\n\tcustomCellColumnIds: Set<string>;\n}\n\n/**\n * Определяет стабильный идентификатор колонки для pipeline runtime.\n *\n * Порядок приоритета:\n * 1. `column.id`\n * 2. строковый `accessorKey`\n */\nexport function resolveTableFormattingColumnId<TData extends object>(column: TableColumnDef<TData>): string | undefined {\n\tif (typeof column.id === \"string\" && column.id.trim()) {\n\t\treturn column.id;\n\t}\n\n\tif (\"accessorKey\" in column && typeof column.accessorKey === \"string\" && column.accessorKey.trim()) {\n\t\treturn column.accessorKey;\n\t}\n\n\treturn undefined;\n}\n\n/**\n * Проверяет, задан ли у колонки явный кастомный `cell`.\n */\nexport function hasTableColumnCustomCellRenderer<TData extends object>(column: TableColumnDef<TData>): boolean {\n\treturn \"cell\" in column && column.cell != null;\n}\n\n/**\n * Обходит только leaf-колонки, пропуская group-узлы.\n */\nfunction visitLeafTableColumns<TData extends object>(\n\tcolumns: readonly TableColumnDef<TData>[],\n\tvisitor: (column: TableColumnDef<TData>) => void\n): void {\n\tfor (const column of columns) {\n\t\tif (\"columns\" in column && Array.isArray(column.columns) && column.columns.length > 0) {\n\t\t\tvisitLeafTableColumns(column.columns as TableColumnDef<TData>[], visitor);\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisitor(column);\n\t}\n}\n\n/**\n * Собирает snapshot pipeline runtime по описанию колонок.\n */\nexport function buildTableFormattingSnapshot<TData extends object>(columns: readonly TableColumnDef<TData>[]): TableFormattingSnapshot {\n\tconst formattingByColumnId: Record<string, FormattersPipelineRuntimeField> = {};\n\tconst customCellColumnIds = new Set<string>();\n\n\tvisitLeafTableColumns(columns, (column) => {\n\t\tconst columnId = resolveTableFormattingColumnId(column);\n\t\tif (!columnId) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (hasTableColumnCustomCellRenderer(column)) {\n\t\t\tcustomCellColumnIds.add(columnId);\n\t\t}\n\n\t\tconst formatting = getTableColumnFormattingMeta(column);\n\t\tif (!formatting) {\n\t\t\treturn;\n\t\t}\n\n\t\tformattingByColumnId[columnId] = {\n\t\t\t...formatting,\n\t\t\tid: formatting.id ?? columnId,\n\t\t\trole: formatting.role ?? \"dimension\",\n\t\t\ttype: formatting.type ?? \"string\"\n\t\t};\n\t});\n\n\treturn {\n\t\truntimeByColumnId: compileFormattersPipelineRuntimeFields(formattingByColumnId),\n\t\tcustomCellColumnIds\n\t};\n}\n\n/**\n * Определяет, должен ли компонент использовать pipeline runtime для ячейки.\n */\nexport function shouldUseTableFormatting(args: {\n\tcolumnId: string;\n\truntimeByColumnId: FormattersPipelineRuntimeFields<FormattersPipelineRuntimeField>;\n\tcustomCellColumnIds: ReadonlySet<string>;\n}): boolean {\n\tif (args.customCellColumnIds.has(args.columnId)) {\n\t\treturn false;\n\t}\n\n\treturn Boolean(args.runtimeByColumnId[args.columnId]);\n}\n","import { getTableColumnMeta } from \"@ryuzaki13/react-foundation-lib/table\";\n\nimport type { Cell, Column, Row } from \"@tanstack/react-table\";\n\n/**\n * Layout-настройка body-ячейки базовой таблицы.\n */\nexport interface BaseTableCellLayout {\n\thideContent?: boolean;\n\tmergeWithNext?: boolean;\n}\n\n/**\n * Результат расчёта layout для body-ячейки по её `cell.id`.\n */\nexport type BaseTableCellLayoutById = ReadonlyMap<string, BaseTableCellLayout>;\n\n/**\n * Аргументы построения layout для display-only слияния дубликатов.\n */\nexport interface BuildBaseTableMergedCellsLayoutArgs<TData extends object> {\n\trows: readonly Row<TData>[];\n\tcolumns: readonly Column<TData, unknown>[];\n\tresolveRowBoundaryKey?: (row: Row<TData>) => unknown;\n\texcludeColumnIds?: ReadonlySet<string>;\n}\n\ntype VisibleRowCellLookup<TData extends object> = {\n\trow: Row<TData>;\n\tboundaryKey: unknown;\n\tcellByColumnId: ReadonlyMap<string, Cell<TData, unknown>>;\n};\n\nfunction isMergeableValue(value: unknown): boolean {\n\treturn value !== null && value !== undefined && value !== \"\";\n}\n\nfunction buildVisibleRowCellLookups<TData extends object>(\n\trows: readonly Row<TData>[],\n\tresolveRowBoundaryKey: (row: Row<TData>) => unknown\n): VisibleRowCellLookup<TData>[] {\n\treturn rows.map((row) => ({\n\t\trow,\n\t\tboundaryKey: resolveRowBoundaryKey(row),\n\t\tcellByColumnId: new Map(row.getVisibleCells().map((cell) => [cell.column.id, cell]))\n\t}));\n}\n\n/**\n * Строит layout display-only слияния для колонок с `meta.mergeDuplicates`.\n *\n * Слияние работает только для подряд идущих одинаковых raw-значений. Пустые\n * значения (`null`, `undefined`, `\"\"`) не объединяются.\n */\nexport function buildBaseTableMergedCellsLayout<TData extends object>({\n\trows,\n\tcolumns,\n\tresolveRowBoundaryKey = () => \"__all_rows__\",\n\texcludeColumnIds\n}: BuildBaseTableMergedCellsLayoutArgs<TData>): BaseTableCellLayoutById {\n\tconst mergeableColumns = columns.filter((column) => {\n\t\tif (excludeColumnIds?.has(column.id)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn getTableColumnMeta(column.columnDef)?.mergeDuplicates === true;\n\t});\n\n\tif (rows.length === 0 || mergeableColumns.length === 0) {\n\t\treturn new Map();\n\t}\n\n\tconst rowLookups = buildVisibleRowCellLookups(rows, resolveRowBoundaryKey);\n\tconst layoutByCellId = new Map<string, BaseTableCellLayout>();\n\n\tfor (const column of mergeableColumns) {\n\t\tlet groupStartIndex = -1;\n\t\tlet groupValue: unknown = undefined;\n\t\tlet groupBoundaryKey: unknown = undefined;\n\n\t\tconst finalizeGroup = (endIndexExclusive: number) => {\n\t\t\tif (groupStartIndex === -1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst groupSize = endIndexExclusive - groupStartIndex;\n\t\t\tif (groupSize <= 1) {\n\t\t\t\tgroupStartIndex = -1;\n\t\t\t\tgroupValue = undefined;\n\t\t\t\tgroupBoundaryKey = undefined;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (let index = groupStartIndex; index < endIndexExclusive; index += 1) {\n\t\t\t\tconst cellId = rowLookups[index]?.cellByColumnId.get(column.id)?.id;\n\t\t\t\tif (cellId) {\n\t\t\t\t\tlayoutByCellId.set(cellId, {\n\t\t\t\t\t\thideContent: index > groupStartIndex,\n\t\t\t\t\t\tmergeWithNext: index < endIndexExclusive - 1\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgroupStartIndex = -1;\n\t\t\tgroupValue = undefined;\n\t\t\tgroupBoundaryKey = undefined;\n\t\t};\n\n\t\tfor (let index = 0; index < rowLookups.length; index += 1) {\n\t\t\tconst currentRow = rowLookups[index];\n\t\t\tconst currentCell = currentRow?.cellByColumnId.get(column.id);\n\t\t\tconst currentValue = currentCell?.getValue();\n\n\t\t\tif (!currentCell || !isMergeableValue(currentValue)) {\n\t\t\t\tfinalizeGroup(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (groupStartIndex === -1) {\n\t\t\t\tgroupStartIndex = index;\n\t\t\t\tgroupValue = currentValue;\n\t\t\t\tgroupBoundaryKey = currentRow?.boundaryKey;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!Object.is(groupBoundaryKey, currentRow?.boundaryKey) || !Object.is(groupValue, currentValue)) {\n\t\t\t\tfinalizeGroup(index);\n\t\t\t\tgroupStartIndex = index;\n\t\t\t\tgroupValue = currentValue;\n\t\t\t\tgroupBoundaryKey = currentRow?.boundaryKey;\n\t\t\t}\n\t\t}\n\n\t\tfinalizeGroup(rowLookups.length);\n\t}\n\n\treturn layoutByCellId;\n}\n","import { useCallback, useMemo, useState } from \"react\";\n\nimport { normalizeTableColumnOrder, type TableColumnOrderState } from \"@ryuzaki13/react-foundation-lib/table\";\nimport { functionalUpdate, type ColumnOrderState, type Updater } from \"@tanstack/react-table\";\n\n/**\n * Аргументы управления порядком колонок таблицы.\n */\nexport interface UseTableColumnOrderArgs {\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 * Вызывается после изменения порядка колонок.\n\t */\n\tonColumnOrderChange?: (state: TableColumnOrderState) => void;\n}\n\n/**\n * Результат работы hook управления column order.\n */\nexport interface UseTableColumnOrderResult {\n\t/**\n\t * Актуальный order-state в формате TanStack Table.\n\t */\n\tcolumnOrder: ColumnOrderState;\n\t/**\n\t * Обработчик изменения order-state из TanStack Table.\n\t */\n\tonColumnOrderChange: (updater: Updater<ColumnOrderState>) => void;\n}\n\n/**\n * Инкапсулирует controlled/uncontrolled-паттерн для порядка колонок.\n */\nexport function useTableColumnOrder({\n\tcolumnOrder,\n\tdefaultColumnOrder,\n\tonColumnOrderChange\n}: UseTableColumnOrderArgs): UseTableColumnOrderResult {\n\tconst [uncontrolledColumnOrder, setUncontrolledColumnOrder] = useState<TableColumnOrderState | undefined>(undefined);\n\tconst resolvedColumnOrder = useMemo(\n\t\t() => normalizeTableColumnOrder(columnOrder ?? uncontrolledColumnOrder ?? defaultColumnOrder),\n\t\t[columnOrder, defaultColumnOrder, uncontrolledColumnOrder]\n\t);\n\n\tconst handleColumnOrderChange = useCallback(\n\t\t(updater: Updater<ColumnOrderState>) => {\n\t\t\tconst nextColumnOrder = normalizeTableColumnOrder(functionalUpdate(updater, resolvedColumnOrder));\n\n\t\t\tif (columnOrder === undefined) {\n\t\t\t\tsetUncontrolledColumnOrder(nextColumnOrder);\n\t\t\t}\n\n\t\t\tonColumnOrderChange?.(nextColumnOrder);\n\t\t},\n\t\t[columnOrder, onColumnOrderChange, resolvedColumnOrder]\n\t);\n\n\treturn {\n\t\tcolumnOrder: resolvedColumnOrder,\n\t\tonColumnOrderChange: handleColumnOrderChange\n\t};\n}\n","import { useCallback, useMemo, useState } from \"react\";\n\nimport { functionalUpdate, type ColumnPinningState, type Updater } from \"@tanstack/react-table\";\n\nimport { normalizeTableColumnPinning, type TableColumnPinningState } from \"../lib/columnPinning\";\n\n/**\n * Аргументы управления состоянием закрепления колонок.\n */\nexport interface UseTableColumnPinningArgs {\n\t/**\n\t * Внешнее controlled-состояние закрепления.\n\t */\n\tcolumnPinning?: TableColumnPinningState;\n\t/**\n\t * Стартовое uncontrolled-состояние закрепления.\n\t */\n\tdefaultColumnPinning?: TableColumnPinningState;\n\t/**\n\t * Вызывается после любого изменения left-pinning state.\n\t */\n\tonColumnPinningChange?: (state: TableColumnPinningState) => void;\n}\n\n/**\n * Результат работы hook управления column pinning.\n */\nexport interface UseTableColumnPinningResult {\n\t/**\n\t * Актуальный pinning-state в формате TanStack Table.\n\t */\n\tcolumnPinning: ColumnPinningState;\n\t/**\n\t * Обработчик изменения pinning-state из TanStack Table.\n\t */\n\tonColumnPinningChange: (updater: Updater<ColumnPinningState>) => void;\n}\n\n/**\n * Инкапсулирует controlled/uncontrolled-паттерн для left column pinning.\n */\nexport function useTableColumnPinning({\n\tcolumnPinning,\n\tdefaultColumnPinning,\n\tonColumnPinningChange\n}: UseTableColumnPinningArgs): UseTableColumnPinningResult {\n\tconst [uncontrolledColumnPinning, setUncontrolledColumnPinning] = useState<TableColumnPinningState | undefined>(undefined);\n\tconst resolvedColumnPinning = useMemo(\n\t\t() => normalizeTableColumnPinning(columnPinning ?? uncontrolledColumnPinning ?? defaultColumnPinning),\n\t\t[columnPinning, defaultColumnPinning, uncontrolledColumnPinning]\n\t);\n\n\tconst handleColumnPinningChange = useCallback(\n\t\t(updater: Updater<ColumnPinningState>) => {\n\t\t\tconst nextColumnPinning = normalizeTableColumnPinning(functionalUpdate(updater, resolvedColumnPinning));\n\t\t\tconst nextPublicColumnPinning: TableColumnPinningState = {\n\t\t\t\tleft: nextColumnPinning.left\n\t\t\t};\n\n\t\t\tif (columnPinning === undefined) {\n\t\t\t\tsetUncontrolledColumnPinning(nextPublicColumnPinning);\n\t\t\t}\n\n\t\t\tonColumnPinningChange?.(nextPublicColumnPinning);\n\t\t},\n\t\t[columnPinning, onColumnPinningChange, resolvedColumnPinning]\n\t);\n\n\treturn {\n\t\tcolumnPinning: resolvedColumnPinning,\n\t\tonColumnPinningChange: handleColumnPinningChange\n\t};\n}\n","import { useCallback, useMemo, useState } from \"react\";\n\nimport { normalizeTableColumnSizing, type TableColumnSizingState } from \"@ryuzaki13/react-foundation-lib/table\";\nimport { functionalUpdate, type ColumnSizingState, type Updater } from \"@tanstack/react-table\";\n\n/**\n * Аргументы управления шириной колонок таблицы.\n */\nexport interface UseTableColumnSizingArgs {\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 * Минимальная ширина колонки в px.\n\t */\n\tcolumnResizeMinWidth?: number;\n\t/**\n\t * Вызывается после изменения ширины колонок.\n\t */\n\tonColumnSizingChange?: (state: TableColumnSizingState) => void;\n}\n\n/**\n * Результат работы hook управления column sizing.\n */\nexport interface UseTableColumnSizingResult {\n\t/**\n\t * Актуальный sizing-state в формате TanStack Table.\n\t */\n\tcolumnSizing: ColumnSizingState;\n\t/**\n\t * Обработчик изменения sizing-state из TanStack Table.\n\t */\n\tonColumnSizingChange: (updater: Updater<ColumnSizingState>) => void;\n}\n\n/**\n * Инкапсулирует controlled/uncontrolled-паттерн для ширин колонок.\n */\nexport function useTableColumnSizing({\n\tcolumnSizing,\n\tdefaultColumnSizing,\n\tcolumnResizeMinWidth,\n\tonColumnSizingChange\n}: UseTableColumnSizingArgs): UseTableColumnSizingResult {\n\tconst [uncontrolledColumnSizing, setUncontrolledColumnSizing] = useState<TableColumnSizingState | undefined>(undefined);\n\tconst resolvedColumnSizing = useMemo(\n\t\t() => normalizeTableColumnSizing(columnSizing ?? uncontrolledColumnSizing ?? defaultColumnSizing, columnResizeMinWidth),\n\t\t[columnResizeMinWidth, columnSizing, defaultColumnSizing, uncontrolledColumnSizing]\n\t);\n\n\tconst handleColumnSizingChange = useCallback(\n\t\t(updater: Updater<ColumnSizingState>) => {\n\t\t\tconst nextColumnSizing = normalizeTableColumnSizing(functionalUpdate(updater, resolvedColumnSizing), columnResizeMinWidth);\n\n\t\t\tif (columnSizing === undefined) {\n\t\t\t\tsetUncontrolledColumnSizing(nextColumnSizing);\n\t\t\t}\n\n\t\t\tonColumnSizingChange?.(nextColumnSizing);\n\t\t},\n\t\t[columnResizeMinWidth, columnSizing, onColumnSizingChange, resolvedColumnSizing]\n\t);\n\n\treturn {\n\t\tcolumnSizing: resolvedColumnSizing,\n\t\tonColumnSizingChange: handleColumnSizingChange\n\t};\n}\n","import { useCallback, useMemo, useState } from \"react\";\n\nimport { functionalUpdate, type Updater, type VisibilityState } from \"@tanstack/react-table\";\n\n/**\n * Аргументы управления видимостью колонок таблицы.\n */\nexport interface UseTableColumnVisibilityArgs {\n\t/**\n\t * Внешнее controlled-состояние видимости колонок.\n\t */\n\tcolumnVisibility?: VisibilityState;\n\t/**\n\t * Стартовое uncontrolled-состояние видимости колонок.\n\t */\n\tdefaultColumnVisibility?: VisibilityState;\n\t/**\n\t * Вызывается после любого изменения visibility-state.\n\t */\n\tonColumnVisibilityChange?: (state: VisibilityState) => void;\n}\n\n/**\n * Результат работы hook управления видимостью колонок.\n */\nexport interface UseTableColumnVisibilityResult {\n\t/**\n\t * Актуальный visibility-state, который нужно передать в TanStack Table.\n\t */\n\tcolumnVisibility: VisibilityState;\n\t/**\n\t * Обработчик изменения visibility-state из TanStack Table.\n\t */\n\tonColumnVisibilityChange: (updater: Updater<VisibilityState>) => void;\n}\n\n/**\n * Инкапсулирует controlled/uncontrolled-паттерн для column visibility.\n *\n * Пока пользователь не изменял visibility локально, hook читает\n * `defaultColumnVisibility` напрямую, поэтому асинхронная metadata-инициализация\n * не требует синхронизации prop -> state через эффекты.\n */\nexport function useTableColumnVisibility({\n\tcolumnVisibility,\n\tdefaultColumnVisibility,\n\tonColumnVisibilityChange\n}: UseTableColumnVisibilityArgs): UseTableColumnVisibilityResult {\n\tconst [uncontrolledColumnVisibility, setUncontrolledColumnVisibility] = useState<VisibilityState | undefined>(undefined);\n\tconst resolvedColumnVisibility = useMemo(\n\t\t() => columnVisibility ?? uncontrolledColumnVisibility ?? defaultColumnVisibility ?? {},\n\t\t[columnVisibility, defaultColumnVisibility, uncontrolledColumnVisibility]\n\t);\n\n\tconst handleColumnVisibilityChange = useCallback(\n\t\t(updater: Updater<VisibilityState>) => {\n\t\t\tconst nextColumnVisibility = functionalUpdate(updater, resolvedColumnVisibility);\n\n\t\t\tif (columnVisibility === undefined) {\n\t\t\t\tsetUncontrolledColumnVisibility(nextColumnVisibility);\n\t\t\t}\n\n\t\t\tonColumnVisibilityChange?.(nextColumnVisibility);\n\t\t},\n\t\t[columnVisibility, onColumnVisibilityChange, resolvedColumnVisibility]\n\t);\n\n\treturn {\n\t\tcolumnVisibility: resolvedColumnVisibility,\n\t\tonColumnVisibilityChange: handleColumnVisibilityChange\n\t};\n}\n",".root,\n.headerContextMenuTrigger {\n\tmin-width: 0;\n}\n\n.table {\n\twidth: 100%;\n\tborder-collapse: separate;\n\tborder-spacing: 0;\n\ttable-layout: fixed;\n\tfont-variant-numeric: tabular-nums;\n\n\thyphens: auto;\n}\n\n.head {\n\tz-index: 10;\n}\n\n.pinnedLeftBoundary {\n\tbox-shadow: inset var(--focus-offset) 0 0 var(--border-0);\n}\n\n.headerRow {\n\tbackground-color: var(--surface-0);\n}\n\n.headerCell {\n\tposition: relative;\n\tpadding: var(--space-sm) var(--space-md);\n\tbackground-color: var(--surface-2);\n\tborder-bottom: var(--border);\n\tcolor: var(--content-0);\n\tvertical-align: middle;\n}\n\n.headerCellContent {\n\tmin-width: 0;\n}\n\n.headerCellDraggable {\n\tcursor: grab;\n\ttouch-action: none;\n\tuser-select: none;\n\n\t&:active {\n\t\tcursor: grabbing;\n\t}\n}\n\n.headerCellDragging {\n\topacity: 0.75;\n}\n\n.headerCellPinnedLeft {\n\tposition: sticky;\n\tz-index: 12;\n}\n\n.bodyRow {\n\ttransition: background-color var(--transition-fast) ease;\n}\n\n.bodyRowInteractive {\n\tcursor: pointer;\n\n\t&:hover .bodyCell,\n\t&:focus-visible .bodyCell {\n\t\tbackground-color: var(--surface-1);\n\t}\n}\n\n.bodyRowSelected {\n\t.bodyCell {\n\t\tbackground-color: var(--surface-1);\n\t}\n}\n\n.bodyCell {\n\tpadding: var(--space-sm) var(--space-md);\n\tbackground-color: var(--surface-0);\n\tborder-bottom: var(--border);\n\tvertical-align: middle;\n}\n\n.bodyCellPinnedLeft {\n\tposition: sticky;\n\tz-index: 2;\n}\n\n.bodyCellMergedWithNext {\n\tborder-bottom-color: transparent;\n}\n\n.feedbackCell {\n\tpadding: var(--space-md);\n\tbackground-color: var(--surface-0);\n}\n\n.fetchingRow .feedbackCell {\n\tborder-bottom: 0;\n}\n\n.noData {\n\tpointer-events: none;\n\tposition: absolute;\n\tinset: 0;\n\tz-index: 40;\n}\n","import { ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { Header } from \"@tanstack/react-table\";\n\nimport { TableHeaderInteractionCell } from \"../../table-column-interactions\";\n\nimport styles from \"./BaseTable.module.scss\";\n\ninterface BaseTableHeaderCellProps<TData extends object> {\n\theader: Header<TData, unknown>;\n\tisPinnedLeft: boolean;\n\tleft?: string;\n\tisPinnedBoundary: boolean;\n\tisDragDisabled: boolean;\n\tenableColumnResizing: boolean;\n\tenableColumnReordering: boolean;\n\tcolumnResizeMinWidth: number | undefined;\n\trenderHeaderContent: (header: Header<TData, unknown>) => ReactNode;\n\tonResizeColumn: (columnId: string, width: number) => void;\n\tonResetColumnWidth: (columnId: string) => void;\n}\n\nexport function BaseTableHeaderCell<TData extends object>({\n\theader,\n\tisPinnedLeft,\n\tleft,\n\tisPinnedBoundary,\n\tisDragDisabled,\n\tenableColumnResizing,\n\tenableColumnReordering,\n\tcolumnResizeMinWidth,\n\trenderHeaderContent,\n\tonResizeColumn,\n\tonResetColumnWidth\n}: BaseTableHeaderCellProps<TData>) {\n\treturn (\n\t\t<TableHeaderInteractionCell\n\t\t\tcolumnId={header.column.id}\n\t\t\tdragDisabled={!enableColumnReordering || isDragDisabled}\n\t\t\tdraggingClassName={styles.headerCellDragging}\n\t\t\tclassName={cn(styles.headerCell, isPinnedLeft && styles.headerCellPinnedLeft, isPinnedBoundary && styles.pinnedLeftBoundary)}\n\t\t\tstyle={{\n\t\t\t\t// NOTE: заголовок всегда по левому краю\n\t\t\t\t// ...(meta?.align ? { textAlign: meta.align } : {}),\n\t\t\t\t...(isPinnedLeft ? { left } : {})\n\t\t\t}}\n\t\t\tresizeHandle={\n\t\t\t\tenableColumnResizing && !header.isPlaceholder\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcolumnId: header.column.id,\n\t\t\t\t\t\t\tminWidth: columnResizeMinWidth,\n\t\t\t\t\t\t\tonResize: onResizeColumn,\n\t\t\t\t\t\t\tonReset: onResetColumnWidth\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined\n\t\t\t}>\n\t\t\t{({ listeners, setActivatorElement }) => (\n\t\t\t\t<div\n\t\t\t\t\tref={enableColumnReordering && !isDragDisabled ? setActivatorElement : undefined}\n\t\t\t\t\tclassName={cn(styles.headerCellContent, enableColumnReordering && !isDragDisabled && styles.headerCellDraggable)}\n\t\t\t\t\t{...(enableColumnReordering && !isDragDisabled ? (listeners ?? {}) : {})}>\n\t\t\t\t\t{renderHeaderContent(header)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</TableHeaderInteractionCell>\n\t);\n}\n","import {\n\tuseCallback,\n\tuseMemo,\n\ttype CSSProperties,\n\ttype KeyboardEvent as ReactKeyboardEvent,\n\ttype MouseEvent as ReactMouseEvent,\n\ttype ReactNode,\n\ttype Ref\n} from \"react\";\n\nimport { DragEndEvent } from \"@dnd-kit/core\";\nimport { restrictToHorizontalAxis } from \"@dnd-kit/modifiers\";\nimport { useDndSortableSensors } from \"@ryuzaki13/react-foundation-lib/hooks\";\nimport {\n\tgetTableColumnMeta,\n\tisTableInteractiveElement,\n\tpatchTableColumnWidth,\n\tremoveTableColumnWidth,\n\tresolveReorderedTableHeaderColumns,\n\tresolveTableColumnOrder,\n\ttype TableColumnMeta,\n\ttype TableSelectionMode\n} from \"@ryuzaki13/react-foundation-lib/table\";\nimport { cn, handleKeyboardActivation } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { flexRender, Header, type Cell, type Row, type Table as TanStackTable } from \"@tanstack/react-table\";\n\nimport { ContextMenu } from \"../../context-menu\";\nimport { GridContainer } from \"../../grid\";\nimport { LoadingMessage, NoData, Scrollable } from \"../../misc\";\nimport { getSortableReorderResult, Sortable } from \"../../sortable\";\nimport { BaseTableColumnState, buildBaseTableColumnLayout, getLeftPinnedColumnOffsets } from \"../lib/columnPinning\";\nimport { BaseTableCellLayout } from \"../lib/mergeDuplicates\";\n\nimport styles from \"./BaseTable.module.scss\";\nimport { BaseTableHeaderCell } from \"./BaseTableHeaderCell\";\n\nimport type { FormattersPipelineDisplayValue } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\n/**\n * Аргументы кастомизации рендера ячейки базовой таблицы.\n */\nexport interface BaseTableCellRenderArgs<TData extends object> {\n\trow: Row<TData>;\n\tcell: Cell<TData, unknown>;\n\tdefaultContent: ReactNode;\n\t/**\n\t * Display-модель ячейки после общего formatting runtime.\n\t *\n\t * BaseTable сам не форматирует значения, поэтому поле заполняют адаптеры\n\t * `Table`/`TreeTable`. Слот может отсутствовать у низкоуровневых\n\t * потребителей BaseTable.\n\t */\n\tdisplayValue?: FormattersPipelineDisplayValue;\n\tcolumnMeta?: TableColumnMeta;\n}\n\n/**\n * Внутренний базовый рендерер таблицы.\n *\n * Не знает о плоских или древовидных данных и работает с уже подготовленным экземпляром TanStack Table.\n *\n * @NOTE: не для использования напрямую, это база для `Table` и `TreeTable`\n */\nexport interface BaseTableProps<TData extends object> {\n\ttable: TanStackTable<TData>;\n\tcolumnState: BaseTableColumnState;\n\ttitle?: string;\n\tisLoading?: boolean;\n\tisFetching?: boolean;\n\tclassName?: string;\n\tminHeight?: `${number}em` | `${number}%`;\n\ttableClassName?: string;\n\tselectionMode?: TableSelectionMode;\n\tscrollableRef?: Ref<HTMLDivElement>;\n\tinteractiveElementSelector?: string;\n\tonActivateRow?: (row: Row<TData>) => void;\n\tisRowInteractive?: (row: Row<TData>) => boolean;\n\tgetRowClassName?: (row: Row<TData>) => string | undefined;\n\tgetCellClassName?: (args: BaseTableCellRenderArgs<TData>) => string | undefined;\n\tgetCellStyle?: (args: BaseTableCellRenderArgs<TData>) => CSSProperties | undefined;\n\tgetCellLayout?: (args: BaseTableCellRenderArgs<TData>) => BaseTableCellLayout | undefined;\n\trenderCellContent?: (args: BaseTableCellRenderArgs<TData>) => ReactNode;\n\t/**\n\t * Общий слот контекстного меню заголовка.\n\t *\n\t * BaseTable намеренно не знает про сортировку, группировку или доменные\n\t * действия. Он только сохраняет единый доступный способ открыть меню для\n\t * `Table` и `TreeTable`, а содержимое передает потребитель.\n\t */\n\trenderHeaderContextMenu?: (header: Header<TData, unknown>) => ReactNode;\n\tenableColumnResizing?: boolean;\n\tenableColumnReordering?: boolean;\n\tcolumnResizeMinWidth?: number;\n\tafterTableContent?: ReactNode;\n}\n\n/**\n * Объединяет header groups из pinned/center/right зон в единый порядок рендера.\n */\nfunction resolveHeaderOrderIndex<TData extends object>(\n\theader: Header<TData, unknown>,\n\tcolumnIndexById: ReadonlyMap<string, number>\n): number {\n\tconst indexes = header\n\t\t.getLeafHeaders()\n\t\t.map((leafHeader) => columnIndexById.get(leafHeader.column.id))\n\t\t.filter((index): index is number => typeof index === \"number\");\n\n\treturn indexes.length ? Math.min(...indexes) : Number.MAX_SAFE_INTEGER;\n}\n\nfunction buildOrderedHeaderGroups<TData extends object>(\n\ttable: TanStackTable<TData>,\n\tcolumnIndexById: ReadonlyMap<string, number>\n): Header<TData, unknown>[][] {\n\tconst leftHeaderGroups = table.getLeftHeaderGroups();\n\tconst centerHeaderGroups = table.getCenterHeaderGroups();\n\tconst rightHeaderGroups = table.getRightHeaderGroups();\n\tconst headerGroupCount = Math.max(leftHeaderGroups.length, centerHeaderGroups.length, rightHeaderGroups.length);\n\n\treturn Array.from({ length: headerGroupCount }, (_, index) => {\n\t\tconst headers = [\n\t\t\t...(leftHeaderGroups[index]?.headers ?? []),\n\t\t\t...(centerHeaderGroups[index]?.headers ?? []),\n\t\t\t...(rightHeaderGroups[index]?.headers ?? [])\n\t\t];\n\n\t\treturn headers\n\t\t\t.filter((header) => {\n\t\t\t\tif (header.isPlaceholder) return true;\n\n\t\t\t\treturn header.getLeafHeaders().some((leafHeader) => columnIndexById.has(leafHeader.column.id));\n\t\t\t})\n\t\t\t.sort((left, right) => resolveHeaderOrderIndex(left, columnIndexById) - resolveHeaderOrderIndex(right, columnIndexById));\n\t});\n}\n\n/**\n * Проверяет, что весь header целиком относится к pinned-left зоне.\n *\n * Смешанные grouped headers намеренно не переводятся в sticky-режим в первой итерации.\n */\nfunction resolveHeaderPinnedLeftState<TData extends object>(\n\theader: Header<TData, unknown>,\n\tleftPinnedOffsets: Readonly<Record<string, string>>,\n\tlastPinnedColumnId: string | undefined\n): { isPinnedLeft: boolean; left?: string; isPinnedBoundary: boolean } {\n\tconst leafHeaders = header.getLeafHeaders();\n\tconst leafColumnIds = leafHeaders.map((leafHeader) => leafHeader.column.id);\n\tconst isPinnedLeft = leafColumnIds.length > 0 && leafColumnIds.every((columnId) => columnId in leftPinnedOffsets);\n\n\tif (!isPinnedLeft) {\n\t\treturn {\n\t\t\tisPinnedLeft: false,\n\t\t\tisPinnedBoundary: false\n\t\t};\n\t}\n\n\treturn {\n\t\tisPinnedLeft: true,\n\t\tleft: leftPinnedOffsets[leafColumnIds[0]!] ?? \"0px\",\n\t\tisPinnedBoundary: Boolean(lastPinnedColumnId && leafColumnIds.includes(lastPinnedColumnId))\n\t};\n}\n\nfunction getCurrentLeafColumnOrder<TData extends object>(table: TanStackTable<TData>, columnState: BaseTableColumnState): string[] {\n\tconst definedColumnIds = table.getAllLeafColumns().map((column) => column.id);\n\n\treturn resolveTableColumnOrder({\n\t\tids: definedColumnIds,\n\t\torder: columnState.columnOrder\n\t});\n}\n\n/**\n * Базовая таблица с общим UI-каркасом для Table и TreeTable.\n *\n * @NOTE: не для использования напрямую, это база для `Table` и `TreeTable`\n */\nexport function BaseTable<TData extends object>({\n\ttable,\n\tcolumnState,\n\ttitle,\n\tisLoading,\n\tisFetching,\n\tclassName,\n\tminHeight = \"15em\",\n\ttableClassName,\n\tselectionMode = \"none\",\n\tscrollableRef,\n\tinteractiveElementSelector,\n\tonActivateRow,\n\tisRowInteractive,\n\tgetRowClassName,\n\tgetCellClassName,\n\tgetCellStyle,\n\tgetCellLayout,\n\trenderCellContent,\n\trenderHeaderContextMenu,\n\tenableColumnResizing = false,\n\tenableColumnReordering = false,\n\tcolumnResizeMinWidth,\n\tafterTableContent\n}: BaseTableProps<TData>) {\n\tconst columnLayout = buildBaseTableColumnLayout(table, columnState);\n\tconst visibleColumns = useMemo(() => columnLayout.map((column) => column.column), [columnLayout]);\n\tconst visibleColumnIds = useMemo(() => columnLayout.map((column) => column.id), [columnLayout]);\n\tconst visibleColumnIndexById = useMemo(() => new Map(visibleColumnIds.map((columnId, index) => [columnId, index])), [visibleColumnIds]);\n\tconst visibleColumnIdSet = useMemo(() => new Set(visibleColumnIds), [visibleColumnIds]);\n\tconst sensors = useDndSortableSensors({ activationDistance: 8 });\n\tconst orderedHeaderGroups = buildOrderedHeaderGroups(table, visibleColumnIndexById);\n\tconst leftPinnedOffsets = getLeftPinnedColumnOffsets(table, columnState);\n\tconst lastPinnedColumnId = visibleColumns.filter((column) => column.getIsPinned() === \"left\").at(-1)?.id;\n\tconst pinnedLeftColumnIds = useMemo(() => columnState.columnPinning.left ?? [], [columnState.columnPinning.left]);\n\tconst pinnedLeftColumnIdSet = useMemo(() => new Set(pinnedLeftColumnIds), [pinnedLeftColumnIds]);\n\tconst rowModel = table.getRowModel();\n\tconst hasTitle = Boolean(title);\n\tconst hasRows = rowModel.rows.length > 0;\n\tconst orderVisibleCells = useCallback(\n\t\t(cells: readonly Cell<TData, unknown>[]) =>\n\t\t\t[...cells].sort(\n\t\t\t\t(left, right) =>\n\t\t\t\t\t(visibleColumnIndexById.get(left.column.id) ?? Number.MAX_SAFE_INTEGER) -\n\t\t\t\t\t(visibleColumnIndexById.get(right.column.id) ?? Number.MAX_SAFE_INTEGER)\n\t\t\t),\n\t\t[visibleColumnIndexById]\n\t);\n\n\tconst handleResizeColumn = useCallback(\n\t\t(columnId: string, width: number) => {\n\t\t\ttable.setColumnSizing((current) => patchTableColumnWidth(current, columnId, width, columnResizeMinWidth));\n\t\t},\n\t\t[columnResizeMinWidth, table]\n\t);\n\n\tconst handleResetColumnWidth = useCallback(\n\t\t(columnId: string) => {\n\t\t\ttable.setColumnSizing((current) => removeTableColumnWidth(current, columnId));\n\t\t},\n\t\t[table]\n\t);\n\n\tconst handleHeaderColumnDragEnd = useCallback(\n\t\t(event: DragEndEvent) => {\n\t\t\tconst reorder = getSortableReorderResult({\n\t\t\t\tevent,\n\t\t\t\titems: visibleColumnIds\n\t\t\t});\n\t\t\tif (!reorder) return;\n\n\t\t\tconst currentOrder = getCurrentLeafColumnOrder(table, columnState);\n\t\t\tconst nextOrder = resolveReorderedTableHeaderColumns({\n\t\t\t\torder: currentOrder,\n\t\t\t\theaderIds: visibleColumnIds,\n\t\t\t\tpinnedIds: pinnedLeftColumnIds,\n\t\t\t\tactiveId: String(reorder.activeId),\n\t\t\t\toverId: String(reorder.overId)\n\t\t\t});\n\n\t\t\tif (!nextOrder) return;\n\n\t\t\ttable.setColumnOrder(nextOrder);\n\t\t},\n\t\t[columnState, pinnedLeftColumnIds, table, visibleColumnIds]\n\t);\n\n\tconst renderHeaderContent = (header: Header<TData, unknown>) => {\n\t\tif (header.isPlaceholder) return null;\n\n\t\tconst content = flexRender(header.column.columnDef.header, header.getContext());\n\t\tconst menu = renderHeaderContextMenu?.(header);\n\n\t\tif (!menu) {\n\t\t\treturn content;\n\t\t}\n\n\t\treturn (\n\t\t\t<ContextMenu>\n\t\t\t\t<ContextMenu.Trigger>\n\t\t\t\t\t<div className={styles.headerContextMenuTrigger} tabIndex={0}>\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</div>\n\t\t\t\t</ContextMenu.Trigger>\n\t\t\t\t<ContextMenu.Content>{menu}</ContextMenu.Content>\n\t\t\t</ContextMenu>\n\t\t);\n\t};\n\n\t/**\n\t * Обрабатывает клик по строке, не перехватывая вложенные интерактивные элементы.\n\t */\n\tconst handleRowClick = (event: ReactMouseEvent<HTMLTableRowElement>, row: Row<TData>) => {\n\t\tconst interactive = isRowInteractive?.(row) ?? Boolean(onActivateRow);\n\n\t\tif (!interactive || !onActivateRow || isTableInteractiveElement(event.target, interactiveElementSelector)) {\n\t\t\treturn;\n\t\t}\n\n\t\tonActivateRow(row);\n\t};\n\n\t/**\n\t * Дублирует активацию строки для клавиатуры.\n\t */\n\tconst handleRowKeyDown = (event: ReactKeyboardEvent<HTMLTableRowElement>, row: Row<TData>) => {\n\t\tconst interactive = isRowInteractive?.(row) ?? Boolean(onActivateRow);\n\n\t\tif (!interactive || !onActivateRow || isTableInteractiveElement(event.target, interactiveElementSelector)) {\n\t\t\treturn;\n\t\t}\n\n\t\thandleKeyboardActivation(event, () => onActivateRow(row));\n\t};\n\n\treturn (\n\t\t<GridContainer\n\t\t\ttemplateRows={hasTitle ? \"auto 1fr\" : \"1fr\"}\n\t\t\tclassName={cn(\"overflowHidden w100 h100\", styles.root, className)}\n\t\t\tstyle={{ minHeight }}>\n\t\t\t{hasTitle && <h3 className=\"marginBottomXs\">{title}</h3>}\n\n\t\t\t<div className=\"surface0 overflowHidden relative w100 h100\">\n\t\t\t\t<Scrollable ref={scrollableRef} className=\"w100 h100\">\n\t\t\t\t\t<>\n\t\t\t\t\t\t<table className={cn(styles.table, tableClassName)}>\n\t\t\t\t\t\t\t<colgroup>\n\t\t\t\t\t\t\t\t{columnLayout.map((column) => (\n\t\t\t\t\t\t\t\t\t<col key={column.id} style={column.width ? { width: column.width } : undefined} />\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</colgroup>\n\n\t\t\t\t\t\t\t<thead className={cn(\"stickyTop\", styles.head)}>\n\t\t\t\t\t\t\t\t{enableColumnReordering ? (\n\t\t\t\t\t\t\t\t\t<Sortable.Root\n\t\t\t\t\t\t\t\t\t\tsensors={sensors}\n\t\t\t\t\t\t\t\t\t\tmodifiers={[restrictToHorizontalAxis]}\n\t\t\t\t\t\t\t\t\t\tonDragEnd={handleHeaderColumnDragEnd}>\n\t\t\t\t\t\t\t\t\t\t<Sortable.Container containerId=\"base-table-header\" items={visibleColumnIds} layout=\"horizontal\">\n\t\t\t\t\t\t\t\t\t\t\t{orderedHeaderGroups.map((headers, headerGroupIndex) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<tr key={`header-group-${headerGroupIndex}`} className={styles.headerRow}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{headers.map((header) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst { isPinnedLeft, left, isPinnedBoundary } = resolveHeaderPinnedLeftState(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tleftPinnedOffsets,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlastPinnedColumnId\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst isDragDisabled =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theader.isPlaceholder ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!visibleColumnIdSet.has(header.column.id) ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpinnedLeftColumnIdSet.has(header.column.id);\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<BaseTableHeaderCell\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={header.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theader={header}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisPinnedLeft={isPinnedLeft}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tleft={left}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisPinnedBoundary={isPinnedBoundary}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisDragDisabled={isDragDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tenableColumnResizing={enableColumnResizing}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tenableColumnReordering={enableColumnReordering}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolumnResizeMinWidth={columnResizeMinWidth}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trenderHeaderContent={renderHeaderContent}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonResizeColumn={handleResizeColumn}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonResetColumnWidth={handleResetColumnWidth}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</Sortable.Container>\n\t\t\t\t\t\t\t\t\t</Sortable.Root>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\torderedHeaderGroups.map((headers, headerGroupIndex) => (\n\t\t\t\t\t\t\t\t\t\t<tr key={`header-group-${headerGroupIndex}`} className={styles.headerRow}>\n\t\t\t\t\t\t\t\t\t\t\t{headers.map((header) => {\n\t\t\t\t\t\t\t\t\t\t\t\tconst { isPinnedLeft, left, isPinnedBoundary } = resolveHeaderPinnedLeftState(\n\t\t\t\t\t\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\t\t\t\t\t\tleftPinnedOffsets,\n\t\t\t\t\t\t\t\t\t\t\t\t\tlastPinnedColumnId\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<BaseTableHeaderCell\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={header.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theader={header}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisPinnedLeft={isPinnedLeft}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tleft={left}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisPinnedBoundary={isPinnedBoundary}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisDragDisabled\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tenableColumnResizing={enableColumnResizing}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tenableColumnReordering={enableColumnReordering}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolumnResizeMinWidth={columnResizeMinWidth}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trenderHeaderContent={renderHeaderContent}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonResizeColumn={handleResizeColumn}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonResetColumnWidth={handleResetColumnWidth}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</thead>\n\n\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t{rowModel.rows.map((row) => {\n\t\t\t\t\t\t\t\t\tconst interactive = isRowInteractive?.(row) ?? Boolean(onActivateRow);\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<tr\n\t\t\t\t\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\tstyles.bodyRow,\n\t\t\t\t\t\t\t\t\t\t\t\tinteractive && styles.bodyRowInteractive,\n\t\t\t\t\t\t\t\t\t\t\t\trow.getIsSelected() && styles.bodyRowSelected,\n\t\t\t\t\t\t\t\t\t\t\t\tgetRowClassName?.(row)\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\taria-selected={selectionMode !== \"none\" ? row.getIsSelected() : undefined}\n\t\t\t\t\t\t\t\t\t\t\ttabIndex={interactive ? 0 : undefined}\n\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => handleRowClick(event, row)}\n\t\t\t\t\t\t\t\t\t\t\tonKeyDown={(event) => handleRowKeyDown(event, row)}>\n\t\t\t\t\t\t\t\t\t\t\t{orderVisibleCells([\n\t\t\t\t\t\t\t\t\t\t\t\t...row.getLeftVisibleCells(),\n\t\t\t\t\t\t\t\t\t\t\t\t...row.getCenterVisibleCells(),\n\t\t\t\t\t\t\t\t\t\t\t\t...row.getRightVisibleCells()\n\t\t\t\t\t\t\t\t\t\t\t]).map((cell) => {\n\t\t\t\t\t\t\t\t\t\t\t\tconst columnMeta = getTableColumnMeta(cell.column.columnDef);\n\t\t\t\t\t\t\t\t\t\t\t\tconst defaultContent = flexRender(cell.column.columnDef.cell, cell.getContext());\n\t\t\t\t\t\t\t\t\t\t\t\tconst renderArgs: BaseTableCellRenderArgs<TData> = {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcell,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdefaultContent,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolumnMeta\n\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\tconst cellLayout = getCellLayout?.(renderArgs);\n\t\t\t\t\t\t\t\t\t\t\t\tconst isPinnedLeft = cell.column.getIsPinned() === \"left\";\n\t\t\t\t\t\t\t\t\t\t\t\tconst isPinnedBoundary = cell.column.id === lastPinnedColumnId;\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst resolvedStyle = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t...(columnMeta?.align ? { textAlign: columnMeta.align } : {}),\n\t\t\t\t\t\t\t\t\t\t\t\t\t...(isPinnedLeft ? { left: leftPinnedOffsets[cell.column.id] ?? \"0px\" } : {}),\n\t\t\t\t\t\t\t\t\t\t\t\t\t...(getCellStyle?.(renderArgs) ?? {})\n\t\t\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={cell.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.bodyCell,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisPinnedLeft && styles.bodyCellPinnedLeft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisPinnedBoundary && styles.pinnedLeftBoundary,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcellLayout?.mergeWithNext && styles.bodyCellMergedWithNext,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgetCellClassName?.(renderArgs)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={resolvedStyle}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{cellLayout?.hideContent\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: renderCellContent\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? renderCellContent(renderArgs)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: defaultContent}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t\t{isFetching && hasRows && (\n\t\t\t\t\t\t\t\t\t<tr className={styles.fetchingRow}>\n\t\t\t\t\t\t\t\t\t\t<td colSpan={Math.max(visibleColumns.length, 1)} className={styles.feedbackCell}>\n\t\t\t\t\t\t\t\t\t\t\t<LoadingMessage />\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t</table>\n\n\t\t\t\t\t\t{afterTableContent}\n\t\t\t\t\t</>\n\t\t\t\t</Scrollable>\n\n\t\t\t\t<div className=\"absolute inset0 border radiusSm\" style={{ pointerEvents: \"none\", zIndex: 20 }}>\n\t\t\t\t\t{!isLoading && !isFetching && !hasRows && <NoData className={styles.noData} />}\n\t\t\t\t\t{isLoading && !hasRows && <LoadingMessage className=\"h100 w100\" />}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</GridContainer>\n\t);\n}\n",".formattedCellValue {\n\twidth: 100%;\n\tmin-width: 0;\n}\n\n.formattedCell,\n.formattedCellInner {\n\t@extend .formattedCellValue;\n\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.formattedCellInner {\n\tgap: var(--space-xs);\n}\n","import { useEffect, useRef } from \"react\";\n\nimport { type FormattersPipelineDisplayValue, resolveValueStateClassName } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { RenderStateIcon } from \"../../misc\";\n\nimport styles from \"./FormattedTableCell.module.scss\";\n\nimport type { TableColumnAlign } from \"@ryuzaki13/react-foundation-lib/table\";\n\n/**\n * Пропсы общего renderer форматированной ячейки.\n */\nexport interface FormattedTableCellProps {\n\t/**\n\t * Нормализованный display-result из formatting-runtime.\n\t */\n\tdisplayValue: FormattersPipelineDisplayValue;\n\t/**\n\t * Табличное выравнивание содержимого.\n\t */\n\talign?: TableColumnAlign;\n}\n\n/**\n * Общий renderer форматированной ячейки для `Table` и будущего `TreeTable`.\n *\n * Компонент отвечает только за UI-отрисовку уже вычисленного display-result:\n * runtime и бизнес-логика вычисления значения в него не входят.\n */\nexport function FormattedTableCell({ displayValue, align = \"left\" }: FormattedTableCellProps) {\n\tconst textRef = useRef<HTMLSpanElement | null>(null);\n\tconst showValue = displayValue.showValue;\n\tconst showIcon = displayValue.showIcon;\n\tconst icon = showIcon ? displayValue.icon : undefined;\n\tconst textValue = showValue && displayValue.value != null ? String(displayValue.value) : \"\";\n\tconst stateClassName = resolveValueStateClassName(displayValue.state);\n\tconst justifyContent = align === \"right\" ? \"flex-end\" : align === \"center\" ? \"center\" : \"flex-start\";\n\tconst textAlign = align === \"center\" ? \"center\" : align === \"right\" ? \"right\" : \"left\";\n\n\tuseEffect(() => {\n\t\tconst element = textRef.current;\n\t\tif (!element) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst updateTitle = () => {\n\t\t\tif (!displayValue.overflowTooltip || !textValue) {\n\t\t\t\telement.removeAttribute(\"title\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isOverflowing = element.scrollWidth > element.clientWidth + 1;\n\t\t\tif (isOverflowing) {\n\t\t\t\telement.setAttribute(\"title\", textValue);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telement.removeAttribute(\"title\");\n\t\t};\n\n\t\tupdateTitle();\n\n\t\tif (typeof ResizeObserver === \"undefined\") {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new ResizeObserver(updateTitle);\n\t\tobserver.observe(element);\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [displayValue.overflowTooltip, textValue]);\n\n\treturn (\n\t\t<div className={cn(styles.formattedCell, stateClassName)}>\n\t\t\t<div className={styles.formattedCellInner} style={{ justifyContent }}>\n\t\t\t\t{displayValue.iconPosition === \"left\" ? <RenderStateIcon state={icon} /> : null}\n\n\t\t\t\t{showValue ? (\n\t\t\t\t\t<span ref={textRef} className={cn(\"textOverflow\", styles.formattedCellValue)} style={{ textAlign }}>\n\t\t\t\t\t\t{textValue}\n\t\t\t\t\t</span>\n\t\t\t\t) : null}\n\n\t\t\t\t{displayValue.iconPosition === \"right\" ? <RenderStateIcon state={icon} /> : null}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { t as e } from "./ui.module-BisoTevy.js";
2
- import { c as t, d as n, f as r, i, l as a, t as o } from "./picker-Cj4RnJh6.js";
3
- import { CheckIcon as s } from "lucide-react";
4
- import { cn as c } from "@ryuzaki13/react-foundation-lib/utils";
2
+ import { c as t, d as n, f as r, i, l as a, t as o } from "./picker-gIUs0nE_.js";
3
+ import { cn as s } from "@ryuzaki13/react-foundation-lib/utils";
4
+ import { CheckIcon as c } from "lucide-react";
5
5
  import { Fragment as l, jsx as u, jsxs as d } from "react/jsx-runtime";
6
6
  import { useRef as f, useState as p } from "react";
7
7
  //#region src/layout-picker/lib/layout.ts
@@ -1018,7 +1018,7 @@ var b = {
1018
1018
  }, x = "Выберите раскладку";
1019
1019
  function S({ preset: e, compact: t = !1 }) {
1020
1020
  return /* @__PURE__ */ u("span", {
1021
- className: c(b.preview, t && b.previewCompact),
1021
+ className: s(b.preview, t && b.previewCompact),
1022
1022
  style: m(e),
1023
1023
  "aria-hidden": "true",
1024
1024
  children: e.cells.map((t) => /* @__PURE__ */ u("span", {
@@ -1087,7 +1087,7 @@ function C({ id: m, label: h, description: _, value: v, onChange: y, presets: C
1087
1087
  preset: I,
1088
1088
  compact: !0
1089
1089
  }) : /* @__PURE__ */ u("span", { className: b.previewPlaceholder }), /* @__PURE__ */ u("span", {
1090
- className: c(b.triggerText, !F && e.uiPlaceholder),
1090
+ className: s(b.triggerText, !F && e.uiPlaceholder),
1091
1091
  children: L
1092
1092
  })]
1093
1093
  }),
@@ -1121,7 +1121,7 @@ function C({ id: m, label: h, description: _, value: v, onChange: y, presets: C
1121
1121
  setFloating: U,
1122
1122
  getFloatingProps: V,
1123
1123
  onKeyDown: Z,
1124
- className: c(e.uiPopupOptions, b.popup, k),
1124
+ className: s(e.uiPopupOptions, b.popup, k),
1125
1125
  layoutClassName: b.popupLayout,
1126
1126
  bodyClassName: b.popupBody,
1127
1127
  children: /* @__PURE__ */ u("div", {
@@ -1138,7 +1138,7 @@ function C({ id: m, label: h, description: _, value: v, onChange: y, presets: C
1138
1138
  "aria-selected": n,
1139
1139
  "aria-disabled": i || void 0,
1140
1140
  "aria-label": e.description ? `${e.label}. ${e.description}` : e.label,
1141
- className: c(b.option, n && b.optionSelected, r && b.optionActive),
1141
+ className: s(b.option, n && b.optionSelected, r && b.optionActive),
1142
1142
  "data-ui": "layout-picker-option",
1143
1143
  "data-selected": n || void 0,
1144
1144
  onMouseDown: (e) => e.preventDefault(),
@@ -1155,7 +1155,7 @@ function C({ id: m, label: h, description: _, value: v, onChange: y, presets: C
1155
1155
  /* @__PURE__ */ u("span", {
1156
1156
  className: b.optionCheck,
1157
1157
  "aria-hidden": "true",
1158
- children: n ? /* @__PURE__ */ u(s, {}) : null
1158
+ children: n ? /* @__PURE__ */ u(c, {}) : null
1159
1159
  })
1160
1160
  ]
1161
1161
  }, e.id);
@@ -1168,4 +1168,4 @@ function C({ id: m, label: h, description: _, value: v, onChange: y, presets: C
1168
1168
  //#endregion
1169
1169
  export { v as a, y as i, g as n, h as o, _ as r, m as s, C as t };
1170
1170
 
1171
- //# sourceMappingURL=layout-picker-BA9vA8JI.js.map
1171
+ //# sourceMappingURL=layout-picker-CzZ8Xzkk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-picker-CzZ8Xzkk.js","names":[],"sources":["../../src/layout-picker/lib/layout.ts","../../src/layout-picker/lib/presets.ts","../../src/layout-picker/ui/LayoutPicker.module.scss","../../src/layout-picker/ui/LayoutPicker.tsx"],"sourcesContent":["import { type CSSProperties } from \"react\";\n\nimport { type LayoutPickerPreset, type LayoutPickerPresetCell } from \"./types\";\n\n/**\n * Возвращает CSS Grid-стиль для схематичного layout-пресета.\n */\nexport function getLayoutStyle(preset: LayoutPickerPreset, rowMinHeightInEm?: number): CSSProperties {\n\treturn {\n\t\tgridTemplateColumns: `repeat(${preset.columns}, minmax(0, 1fr))`,\n\t\tgridTemplateRows: `repeat(${preset.rows}, minmax(${rowMinHeightInEm ?? 0}em, 1fr))`\n\t};\n}\n\n/**\n * Возвращает позиционирование ячейки внутри CSS Grid.\n */\nexport function getLayoutCellStyle(cell: LayoutPickerPresetCell): CSSProperties {\n\treturn {\n\t\tgridColumn: `${cell.column} / span ${cell.columnSpan ?? 1}`,\n\t\tgridRow: `${cell.row} / span ${cell.rowSpan ?? 1}`\n\t};\n}\n","import { type LayoutPickerPreset } from \"./types\";\n\n/**\n * Базовый набор layout-пресетов для первого среза выбора схемы.\n *\n * id формата:\n * - \"2x3\" — 2 строки, 3 колонки\n * - \"2x2-l\" — 2x2 с большой ячейкой слева\n * - \"3x2-b\" — 3x2 с широкой нижней ячейкой\n */\nexport const DEFAULT_LAYOUT_PICKER_PRESETS = [\n\t{\n\t\tid: \"1x1\",\n\t\tlabel: \"1x1\",\n\t\tcolumns: 1,\n\t\trows: 1,\n\t\tcells: [{ id: \"c11\", row: 1, column: 1 }]\n\t},\n\t{\n\t\tid: \"1x2\",\n\t\tlabel: \"1x2\",\n\t\tcolumns: 2,\n\t\trows: 1,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c12\", row: 1, column: 2 }\n\t\t]\n\t},\n\t{\n\t\tid: \"1x3\",\n\t\tlabel: \"1x3\",\n\t\tcolumns: 3,\n\t\trows: 1,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c12\", row: 1, column: 2 },\n\t\t\t{ id: \"c13\", row: 1, column: 3 }\n\t\t]\n\t},\n\t{\n\t\tid: \"2x1\",\n\t\tlabel: \"2x1\",\n\t\tcolumns: 1,\n\t\trows: 2,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 }\n\t\t]\n\t},\n\t{\n\t\tid: \"2x2\",\n\t\tlabel: \"2x2\",\n\t\tcolumns: 2,\n\t\trows: 2,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c12\", row: 1, column: 2 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 }\n\t\t]\n\t},\n\t{\n\t\tid: \"2x3\",\n\t\tlabel: \"2x3\",\n\t\tcolumns: 3,\n\t\trows: 2,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c12\", row: 1, column: 2 },\n\t\t\t{ id: \"c13\", row: 1, column: 3 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 },\n\t\t\t{ id: \"c23\", row: 2, column: 3 }\n\t\t]\n\t},\n\t{\n\t\tid: \"3x1\",\n\t\tlabel: \"3x1\",\n\t\tcolumns: 1,\n\t\trows: 3,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c31\", row: 3, column: 1 }\n\t\t]\n\t},\n\t{\n\t\tid: \"3x2\",\n\t\tlabel: \"3x2\",\n\t\tcolumns: 2,\n\t\trows: 3,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c12\", row: 1, column: 2 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 },\n\t\t\t{ id: \"c31\", row: 3, column: 1 },\n\t\t\t{ id: \"c32\", row: 3, column: 2 }\n\t\t]\n\t},\n\t{\n\t\tid: \"3x3\",\n\t\tlabel: \"3x3\",\n\t\tcolumns: 3,\n\t\trows: 3,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c12\", row: 1, column: 2 },\n\t\t\t{ id: \"c13\", row: 1, column: 3 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 },\n\t\t\t{ id: \"c23\", row: 2, column: 3 },\n\t\t\t{ id: \"c31\", row: 3, column: 1 },\n\t\t\t{ id: \"c32\", row: 3, column: 2 },\n\t\t\t{ id: \"c33\", row: 3, column: 3 }\n\t\t]\n\t},\n\t{\n\t\tid: \"4x1\",\n\t\tlabel: \"4x1\",\n\t\tcolumns: 1,\n\t\trows: 4,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c31\", row: 3, column: 1 },\n\t\t\t{ id: \"c41\", row: 4, column: 1 }\n\t\t]\n\t},\n\t{\n\t\tid: \"4x2\",\n\t\tlabel: \"4x2\",\n\t\tcolumns: 2,\n\t\trows: 4,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c12\", row: 1, column: 2 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 },\n\t\t\t{ id: \"c31\", row: 3, column: 1 },\n\t\t\t{ id: \"c32\", row: 3, column: 2 },\n\t\t\t{ id: \"c41\", row: 4, column: 1 },\n\t\t\t{ id: \"c42\", row: 4, column: 2 }\n\t\t]\n\t},\n\t{\n\t\tid: \"4x3\",\n\t\tlabel: \"4x3\",\n\t\tcolumns: 3,\n\t\trows: 4,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c12\", row: 1, column: 2 },\n\t\t\t{ id: \"c13\", row: 1, column: 3 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 },\n\t\t\t{ id: \"c23\", row: 2, column: 3 },\n\t\t\t{ id: \"c31\", row: 3, column: 1 },\n\t\t\t{ id: \"c32\", row: 3, column: 2 },\n\t\t\t{ id: \"c33\", row: 3, column: 3 },\n\t\t\t{ id: \"c41\", row: 4, column: 1 },\n\t\t\t{ id: \"c42\", row: 4, column: 2 },\n\t\t\t{ id: \"c43\", row: 4, column: 3 }\n\t\t]\n\t},\n\n\t{\n\t\tid: \"2x2-l\",\n\t\tlabel: \"Большая слева + две справа\",\n\t\tcolumns: 2,\n\t\trows: 2,\n\t\tcells: [\n\t\t\t{ id: \"left\", row: 1, column: 1, rowSpan: 2 },\n\t\t\t{ id: \"rt\", row: 1, column: 2 },\n\t\t\t{ id: \"rb\", row: 2, column: 2 }\n\t\t]\n\t},\n\t{\n\t\tid: \"2x2-r\",\n\t\tlabel: \"Две слева + большая справа\",\n\t\tcolumns: 2,\n\t\trows: 2,\n\t\tcells: [\n\t\t\t{ id: \"lt\", row: 1, column: 1 },\n\t\t\t{ id: \"lb\", row: 2, column: 1 },\n\t\t\t{ id: \"right\", row: 1, column: 2, rowSpan: 2 }\n\t\t]\n\t},\n\t{\n\t\tid: \"2x2-t\",\n\t\tlabel: \"Широкая сверху + две снизу\",\n\t\tcolumns: 2,\n\t\trows: 2,\n\t\tcells: [\n\t\t\t{ id: \"top\", row: 1, column: 1, columnSpan: 2 },\n\t\t\t{ id: \"bl\", row: 2, column: 1 },\n\t\t\t{ id: \"br\", row: 2, column: 2 }\n\t\t]\n\t},\n\t{\n\t\tid: \"2x2-b\",\n\t\tlabel: \"Две сверху + широкая снизу\",\n\t\tcolumns: 2,\n\t\trows: 2,\n\t\tcells: [\n\t\t\t{ id: \"tl\", row: 1, column: 1 },\n\t\t\t{ id: \"tr\", row: 1, column: 2 },\n\t\t\t{ id: \"bottom\", row: 2, column: 1, columnSpan: 2 }\n\t\t]\n\t},\n\n\t{\n\t\tid: \"3x2-t\",\n\t\tlabel: \"Широкая сверху + 2x2\",\n\t\tcolumns: 2,\n\t\trows: 3,\n\t\tcells: [\n\t\t\t{ id: \"top\", row: 1, column: 1, columnSpan: 2 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 },\n\t\t\t{ id: \"c31\", row: 3, column: 1 },\n\t\t\t{ id: \"c32\", row: 3, column: 2 }\n\t\t]\n\t},\n\t{\n\t\tid: \"3x2-b\",\n\t\tlabel: \"2x2 + широкая снизу\",\n\t\tcolumns: 2,\n\t\trows: 3,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c12\", row: 1, column: 2 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 },\n\t\t\t{ id: \"bottom\", row: 3, column: 1, columnSpan: 2 }\n\t\t]\n\t},\n\t{\n\t\tid: \"3x2-m\",\n\t\tlabel: \"Широкая по центру\",\n\t\tcolumns: 2,\n\t\trows: 3,\n\t\tcells: [\n\t\t\t{ id: \"tl\", row: 1, column: 1 },\n\t\t\t{ id: \"tr\", row: 1, column: 2 },\n\t\t\t{ id: \"middle\", row: 2, column: 1, columnSpan: 2 },\n\t\t\t{ id: \"bl\", row: 3, column: 1 },\n\t\t\t{ id: \"br\", row: 3, column: 2 }\n\t\t]\n\t},\n\n\t{\n\t\tid: \"3x3-l\",\n\t\tlabel: \"Большая слева + 2x3 справа\",\n\t\tcolumns: 3,\n\t\trows: 3,\n\t\tcells: [\n\t\t\t{ id: \"left\", row: 1, column: 1, rowSpan: 3 },\n\t\t\t{ id: \"c12\", row: 1, column: 2 },\n\t\t\t{ id: \"c13\", row: 1, column: 3 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 },\n\t\t\t{ id: \"c23\", row: 2, column: 3 },\n\t\t\t{ id: \"c32\", row: 3, column: 2 },\n\t\t\t{ id: \"c33\", row: 3, column: 3 }\n\t\t]\n\t},\n\t{\n\t\tid: \"3x3-r\",\n\t\tlabel: \"2x3 слева + большая справа\",\n\t\tcolumns: 3,\n\t\trows: 3,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c12\", row: 1, column: 2 },\n\t\t\t{ id: \"right\", row: 1, column: 3, rowSpan: 3 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 },\n\t\t\t{ id: \"c31\", row: 3, column: 1 },\n\t\t\t{ id: \"c32\", row: 3, column: 2 }\n\t\t]\n\t},\n\t{\n\t\tid: \"3x3-t\",\n\t\tlabel: \"Широкая сверху + 2x3\",\n\t\tcolumns: 3,\n\t\trows: 3,\n\t\tcells: [\n\t\t\t{ id: \"top\", row: 1, column: 1, columnSpan: 3 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 },\n\t\t\t{ id: \"c23\", row: 2, column: 3 },\n\t\t\t{ id: \"c31\", row: 3, column: 1 },\n\t\t\t{ id: \"c32\", row: 3, column: 2 },\n\t\t\t{ id: \"c33\", row: 3, column: 3 }\n\t\t]\n\t},\n\t{\n\t\tid: \"3x3-b\",\n\t\tlabel: \"2x3 + широкая снизу\",\n\t\tcolumns: 3,\n\t\trows: 3,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c12\", row: 1, column: 2 },\n\t\t\t{ id: \"c13\", row: 1, column: 3 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 },\n\t\t\t{ id: \"c23\", row: 2, column: 3 },\n\t\t\t{ id: \"bottom\", row: 3, column: 1, columnSpan: 3 }\n\t\t]\n\t},\n\n\t{\n\t\tid: \"4x2-t\",\n\t\tlabel: \"Широкая сверху + 3x2\",\n\t\tcolumns: 2,\n\t\trows: 4,\n\t\tcells: [\n\t\t\t{ id: \"top\", row: 1, column: 1, columnSpan: 2 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 },\n\t\t\t{ id: \"c31\", row: 3, column: 1 },\n\t\t\t{ id: \"c32\", row: 3, column: 2 },\n\t\t\t{ id: \"c41\", row: 4, column: 1 },\n\t\t\t{ id: \"c42\", row: 4, column: 2 }\n\t\t]\n\t},\n\t{\n\t\tid: \"4x2-b\",\n\t\tlabel: \"3x2 + широкая снизу\",\n\t\tcolumns: 2,\n\t\trows: 4,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c12\", row: 1, column: 2 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 },\n\t\t\t{ id: \"c31\", row: 3, column: 1 },\n\t\t\t{ id: \"c32\", row: 3, column: 2 },\n\t\t\t{ id: \"bottom\", row: 4, column: 1, columnSpan: 2 }\n\t\t]\n\t},\n\t{\n\t\tid: \"4x3-t\",\n\t\tlabel: \"Широкая сверху + 3x3\",\n\t\tcolumns: 3,\n\t\trows: 4,\n\t\tcells: [\n\t\t\t{ id: \"top\", row: 1, column: 1, columnSpan: 3 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 },\n\t\t\t{ id: \"c23\", row: 2, column: 3 },\n\t\t\t{ id: \"c31\", row: 3, column: 1 },\n\t\t\t{ id: \"c32\", row: 3, column: 2 },\n\t\t\t{ id: \"c33\", row: 3, column: 3 },\n\t\t\t{ id: \"c41\", row: 4, column: 1 },\n\t\t\t{ id: \"c42\", row: 4, column: 2 },\n\t\t\t{ id: \"c43\", row: 4, column: 3 }\n\t\t]\n\t},\n\t{\n\t\tid: \"4x3-b\",\n\t\tlabel: \"3x3 + широкая снизу\",\n\t\tcolumns: 3,\n\t\trows: 4,\n\t\tcells: [\n\t\t\t{ id: \"c11\", row: 1, column: 1 },\n\t\t\t{ id: \"c12\", row: 1, column: 2 },\n\t\t\t{ id: \"c13\", row: 1, column: 3 },\n\t\t\t{ id: \"c21\", row: 2, column: 1 },\n\t\t\t{ id: \"c22\", row: 2, column: 2 },\n\t\t\t{ id: \"c23\", row: 2, column: 3 },\n\t\t\t{ id: \"c31\", row: 3, column: 1 },\n\t\t\t{ id: \"c32\", row: 3, column: 2 },\n\t\t\t{ id: \"c33\", row: 3, column: 3 },\n\t\t\t{ id: \"bottom\", row: 4, column: 1, columnSpan: 3 }\n\t\t]\n\t}\n] as const satisfies readonly LayoutPickerPreset[];\n\nexport type DefaultLayoutPickerPresetId = (typeof DEFAULT_LAYOUT_PICKER_PRESETS)[number][\"id\"];\n\nexport function getDefaultLayoutPickerPresetId(): DefaultLayoutPickerPresetId {\n\treturn DEFAULT_LAYOUT_PICKER_PRESETS[0].id;\n}\n\n/** Возвращает layout-пресет по id с fallback на дефолт chart-ракурса. */\nexport function resolveLayoutPreset(layoutId: string | undefined): LayoutPickerPreset {\n\treturn DEFAULT_LAYOUT_PICKER_PRESETS.find((preset) => preset.id === layoutId) ?? DEFAULT_LAYOUT_PICKER_PRESETS[0];\n}\n\nexport function resolveLayoutCellCount(layoutId: string): number {\n\treturn DEFAULT_LAYOUT_PICKER_PRESETS.find((preset) => preset.id === layoutId)?.cells.length ?? 1;\n}\n","@use \"@/styles/mixins\" as *;\n\n.valueOverlay {\n\tposition: absolute;\n\tinset: 0 calc(var(--control-height) + var(--space-xs)) 0 var(--space-sm);\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--space-sm);\n\tmin-width: 0;\n\tpointer-events: none;\n\toverflow: hidden;\n}\n\n.triggerInput {\n\t--ui-color: transparent;\n\t--ui-color-hover: transparent;\n\t--ui-color-active: transparent;\n\n\tcolor: transparent;\n\tcaret-color: transparent;\n}\n\n.triggerText {\n\tmin-width: 0;\n\tflex: 1 1 auto;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.popup {\n\twidth: min(calc(100vw - var(--space-lg) * 2), 44em);\n\tmax-height: min(75vh, 34em);\n}\n\n.popupLayout {\n\tmax-height: inherit;\n}\n\n.popupBody {\n\toverflow: auto;\n\tpadding: var(--space-xs);\n}\n\n.options {\n\tdisplay: grid;\n\tgrid-template-columns: repeat(auto-fit, minmax(min(100%, 12em), 1fr));\n\tgap: var(--space-sm);\n}\n\n.option {\n\tposition: relative;\n\tdisplay: grid;\n\tgrid-template-columns: auto minmax(0, 1fr) auto;\n\talign-items: center;\n\tgap: var(--space-sm);\n\tmin-height: 3.5em;\n\tpadding: var(--space-sm);\n\tborder: var(--border);\n\tborder-radius: var(--radius-sm);\n\tbackground-color: var(--surface-0);\n\tcolor: var(--content-0);\n\ttext-align: left;\n\tcursor: pointer;\n\ttransition:\n\t\tbackground-color var(--transition-fast) ease,\n\t\tborder-color var(--transition-fast) ease,\n\t\tcolor var(--transition-fast) ease;\n\n\t@include hover(true) {\n\t\tbackground-color: var(--surface-1);\n\t\tborder-color: var(--border-1);\n\t}\n\n\t&:disabled {\n\t\tcursor: default;\n\t\topacity: var(--disabled-opacity);\n\t}\n}\n\n.optionActive {\n\tbackground-color: var(--surface-1);\n\tborder-color: var(--border-1);\n}\n\n.optionSelected {\n\t// border-color: var(--border-accent);\n\t// background-color: var(--surface-accent);\n\tcolor: var(--content-accent);\n}\n\n.optionPreviewWrap {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmin-width: 3.5rem;\n}\n\n// .optionText {\n// \tmin-width: 0;\n// \tdisplay: grid;\n// \tgap: var(--space-xs);\n// }\n\n// .optionLabel {\n// overflow: hidden;\n// text-overflow: ellipsis;\n// white-space: nowrap;\n// }\n\n// .optionDescription {\n// \toverflow: hidden;\n// \tdisplay: -webkit-box;\n// \t-webkit-line-clamp: 2;\n// \t-webkit-box-orient: vertical;\n// \tcolor: var(--content-2);\n// \tfont-size: var(--font-size-sm);\n// }\n\n.optionCheck {\n\twidth: 1em;\n\theight: 1em;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcolor: var(--content-accent);\n\n\tsvg {\n\t\twidth: 1em;\n\t\theight: 1em;\n\t}\n}\n\n.preview,\n.previewPlaceholder {\n\t--layout-picker-preview-size: 3.5em;\n\n\twidth: var(--layout-picker-preview-size);\n\theight: calc(var(--layout-picker-preview-size) * 0.72);\n\tflex: 0 0 auto;\n\t// background-color: var(--surface-0);\n\t// border: var(--border);\n\t// border-radius: var(--radius-xs);\n\t// padding: calc(var(--border-width) * 2);\n}\n\n.preview {\n\tdisplay: grid;\n\tgap: calc(var(--border-width) * 2);\n}\n\n.previewCompact,\n.previewPlaceholder {\n\t--layout-picker-preview-size: 1.5rem;\n}\n\n.previewCell {\n\tmin-width: 0;\n\tmin-height: 0;\n\tborder-radius: calc(var(--radius-xs) / 2);\n\tbackground-color: var(--surface-accent);\n\tborder: var(--border-width) solid var(--border-accent);\n}\n","import { useRef, useState } from \"react\";\n\nimport { type Placement } from \"@floating-ui/react\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { CheckIcon } from \"lucide-react\";\n\nimport {\n\tPickerField,\n\tPickerPopup,\n\tPickerTriggerActions,\n\tPickerTriggerInput,\n\tusePickerFloatingListbox,\n\tusePickerTriggerController\n} from \"../../picker\";\nimport { type UiBaseProps } from \"../../types\";\nimport uiStyles from \"../../ui.module.scss\";\nimport { DEFAULT_LAYOUT_PICKER_PRESETS, getLayoutCellStyle, getLayoutStyle, type LayoutPickerPreset } from \"../lib\";\n\nimport styles from \"./LayoutPicker.module.scss\";\n\nexport interface LayoutPickerProps extends UiBaseProps<string> {\n\tid?: string;\n\tpresets?: readonly LayoutPickerPreset[];\n\tgetPresetDisabled?: (preset: LayoutPickerPreset) => boolean;\n\tariaLabel?: string;\n\tclassName?: string;\n\ttriggerClassName?: string;\n\tpopupClassName?: string;\n\tplacement?: Placement;\n}\n\nconst DEFAULT_PLACEHOLDER = \"Выберите раскладку\";\n\nfunction LayoutPresetPreview({ preset, compact = false }: { preset: LayoutPickerPreset; compact?: boolean }) {\n\treturn (\n\t\t<span className={cn(styles.preview, compact && styles.previewCompact)} style={getLayoutStyle(preset)} aria-hidden=\"true\">\n\t\t\t{preset.cells.map((cell) => (\n\t\t\t\t<span key={`${preset.id}:${cell.id}`} className={styles.previewCell} style={getLayoutCellStyle(cell)} />\n\t\t\t))}\n\t\t</span>\n\t);\n}\n\n/**\n * Контрол выбора layout-пресета. Не хранит бизнес-логику содержимого ячеек.\n */\nexport function LayoutPicker({\n\tid,\n\tlabel,\n\tdescription,\n\tvalue,\n\tonChange,\n\tpresets = DEFAULT_LAYOUT_PICKER_PRESETS,\n\tdisabled,\n\tgetPresetDisabled,\n\tplaceholder = DEFAULT_PLACEHOLDER,\n\tsize,\n\tariaLabel,\n\tclassName,\n\ttriggerClassName,\n\tpopupClassName,\n\tplacement = \"bottom-start\"\n}: LayoutPickerProps) {\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst [open, setOpen] = useState(false);\n\tconst selectedIndex = presets.findIndex((preset) => preset.id === value);\n\tconst selectedPreset = selectedIndex >= 0 ? presets[selectedIndex] : undefined;\n\tconst previewPreset = selectedPreset ?? presets[0];\n\tconst triggerLabel = selectedPreset?.label ?? placeholder;\n\tconst {\n\t\tactiveIndex,\n\t\tcontext,\n\t\tfloatingStyles,\n\t\tgetFloatingProps,\n\t\tsetReference,\n\t\tsetFloating,\n\t\tsetOptionRef,\n\t\tclose,\n\t\topenList,\n\t\ttoggleOpen,\n\t\tselectOption,\n\t\tselectActiveOption,\n\t\thandleReferenceKeyDown,\n\t\thandleFloatingKeyDown,\n\t\tgetOptionId,\n\t\tgetActiveOptionId\n\t} = usePickerFloatingListbox({\n\t\toptions: presets,\n\t\tselectedIndex,\n\t\topen,\n\t\tonOpenChange: setOpen,\n\t\tgetOptionDisabled: getPresetDisabled,\n\t\tonSelect: (preset) => onChange(preset.id),\n\t\tdisabled,\n\t\tplacement,\n\t\ttriggerMode: \"display\"\n\t});\n\tconst triggerController = usePickerTriggerController({\n\t\tmode: \"display\",\n\t\topen,\n\t\tcurrentQuery: \"\",\n\t\thasDisplayValue: selectedPreset !== undefined,\n\t\tinputRef,\n\t\topenList,\n\t\tclose,\n\t\ttoggleOpen\n\t});\n\tconst setInputNode = (node: HTMLInputElement | null) => {\n\t\tinputRef.current = node;\n\t};\n\n\treturn (\n\t\t<PickerField\n\t\t\tid={id}\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t\tsize={size}\n\t\t\tclassName={className}>\n\t\t\t{({ controlId, labelId, describedBy }) => {\n\t\t\t\tconst listId = `${controlId}-listbox`;\n\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<PickerTriggerInput\n\t\t\t\t\t\t\tref={setInputNode}\n\t\t\t\t\t\t\trootRef={setReference}\n\t\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\treadOnly\n\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\tvalue={triggerLabel}\n\t\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\t\taria-controls={open ? listId : undefined}\n\t\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\t\taria-autocomplete=\"none\"\n\t\t\t\t\t\t\taria-activedescendant={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\taria-label={!labelId ? (ariaLabel ?? `Выбрать layout. Текущее значение: ${triggerLabel}`) : undefined}\n\t\t\t\t\t\t\tdata-ui=\"layout-picker-trigger\"\n\t\t\t\t\t\t\trootClassName={triggerClassName}\n\t\t\t\t\t\t\tinputClassName={styles.triggerInput}\n\t\t\t\t\t\t\toverlay={\n\t\t\t\t\t\t\t\t<div className={styles.valueOverlay}>\n\t\t\t\t\t\t\t\t\t{previewPreset ? (\n\t\t\t\t\t\t\t\t\t\t<LayoutPresetPreview preset={previewPreset} compact />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<span className={styles.previewPlaceholder} />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<span className={cn(styles.triggerText, !selectedPreset && uiStyles.uiPlaceholder)}>\n\t\t\t\t\t\t\t\t\t\t{triggerLabel}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tendAdornment={\n\t\t\t\t\t\t\t\t<PickerTriggerActions\n\t\t\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\tonToggleMouseDown={triggerController.handleToggleMouseDown}\n\t\t\t\t\t\t\t\t\tonToggleClick={triggerController.handleToggleClick}\n\t\t\t\t\t\t\t\t\topenAriaLabel=\"Открыть список layout\"\n\t\t\t\t\t\t\t\t\tcloseAriaLabel=\"Закрыть список layout\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonClick={triggerController.handleTriggerClick}\n\t\t\t\t\t\t\tonFocus={(event) => {\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerFocus(event.currentTarget);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\thandleReferenceKeyDown(event);\n\n\t\t\t\t\t\t\t\tif (event.defaultPrevented) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerKeyDown({\n\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\tonActivateWhenOpen: selectActiveOption,\n\t\t\t\t\t\t\t\t\tenableSpaceActivation: true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<PickerPopup\n\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\tcontext={context}\n\t\t\t\t\t\t\tfloatingStyles={floatingStyles}\n\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\tlabelId={labelId}\n\t\t\t\t\t\t\tdescriptionId={describedBy}\n\t\t\t\t\t\t\tactiveOptionId={getActiveOptionId(listId)}\n\t\t\t\t\t\t\tsetFloating={setFloating}\n\t\t\t\t\t\t\tgetFloatingProps={getFloatingProps}\n\t\t\t\t\t\t\tonKeyDown={handleFloatingKeyDown}\n\t\t\t\t\t\t\tclassName={cn(uiStyles.uiPopupOptions, styles.popup, popupClassName)}\n\t\t\t\t\t\t\tlayoutClassName={styles.popupLayout}\n\t\t\t\t\t\t\tbodyClassName={styles.popupBody}>\n\t\t\t\t\t\t\t<div className={styles.options}>\n\t\t\t\t\t\t\t\t{presets.map((preset, index) => {\n\t\t\t\t\t\t\t\t\tconst selected = index === selectedIndex;\n\t\t\t\t\t\t\t\t\tconst active = index === activeIndex;\n\t\t\t\t\t\t\t\t\tconst presetDisabled = getPresetDisabled?.(preset) ?? false;\n\t\t\t\t\t\t\t\t\tconst optionId = getOptionId(listId, index);\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\tkey={preset.id}\n\t\t\t\t\t\t\t\t\t\t\tid={optionId}\n\t\t\t\t\t\t\t\t\t\t\tref={(node) => setOptionRef(index, node)}\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={presetDisabled}\n\t\t\t\t\t\t\t\t\t\t\taria-selected={selected}\n\t\t\t\t\t\t\t\t\t\t\taria-disabled={presetDisabled || undefined}\n\t\t\t\t\t\t\t\t\t\t\taria-label={preset.description ? `${preset.label}. ${preset.description}` : preset.label}\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(styles.option, selected && styles.optionSelected, active && styles.optionActive)}\n\t\t\t\t\t\t\t\t\t\t\tdata-ui=\"layout-picker-option\"\n\t\t\t\t\t\t\t\t\t\t\tdata-selected={selected || undefined}\n\t\t\t\t\t\t\t\t\t\t\tonMouseDown={(event) => event.preventDefault()}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => selectOption(preset)}>\n\t\t\t\t\t\t\t\t\t\t\t<span className={styles.optionPreviewWrap}>\n\t\t\t\t\t\t\t\t\t\t\t\t<LayoutPresetPreview preset={preset} />\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"fontSizeSm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{preset.label}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t{preset.description ? <span>{preset.description}</span> : null}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<span className={styles.optionCheck} aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t{selected ? <CheckIcon /> : null}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</PickerPopup>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}}\n\t\t</PickerField>\n\t);\n}\n"],"mappings":"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"}
@@ -2,8 +2,8 @@ import { n as e } from "./popover-C79P5bm2.js";
2
2
  import { Text as t } from "../text/index.js";
3
3
  import { FlexCenter as n } from "../flex/index.js";
4
4
  import { PolymorphicComponent as r } from "../polymorphic/index.js";
5
- import { CheckCheckIcon as i, ChevronLeftIcon as a, ChevronRightIcon as o, CircleAlertIcon as s, CircleCheckIcon as c, CircleXIcon as l, CopyIcon as u, InfoIcon as d } from "lucide-react";
6
- import { cn as f } from "@ryuzaki13/react-foundation-lib/utils";
5
+ import { cn as i } from "@ryuzaki13/react-foundation-lib/utils";
6
+ import { CheckCheckIcon as a, ChevronLeftIcon as o, ChevronRightIcon as s, CircleAlertIcon as c, CircleCheckIcon as l, CircleXIcon as u, CopyIcon as d, InfoIcon as f } from "lucide-react";
7
7
  import { jsx as p, jsxs as m } from "react/jsx-runtime";
8
8
  import { Suspense as h, forwardRef as g, useCallback as _, useEffect as v, useRef as y, useState as b, useSyncExternalStore as x } from "react";
9
9
  import { useLazyComponent as S } from "@ryuzaki13/react-foundation-lib/hooks";
@@ -42,11 +42,11 @@ function w() {
42
42
  }
43
43
  //#endregion
44
44
  //#region src/misc/CopyTextWrapper.tsx
45
- var T = ({ children: t, position: n = "top", showOnHover: r = !0, className: a }) => {
45
+ var T = ({ children: t, position: n = "top", showOnHover: r = !0, className: i }) => {
46
46
  let { containerRef: o, copyElementText: s, isCopied: c } = C();
47
47
  return /* @__PURE__ */ m("span", {
48
48
  ref: o,
49
- className: a,
49
+ className: i,
50
50
  children: [t, /* @__PURE__ */ p(e, {
51
51
  openOnHover: r,
52
52
  placement: n,
@@ -54,7 +54,7 @@ var T = ({ children: t, position: n = "top", showOnHover: r = !0, className: a }
54
54
  children: /* @__PURE__ */ p("button", {
55
55
  onClick: s,
56
56
  "aria-label": c ? "Скопировано!" : "Копировать текст",
57
- children: c ? /* @__PURE__ */ p(i, { className: "block statusSuccess" }) : /* @__PURE__ */ p(u, { className: "block statusInfo" })
57
+ children: c ? /* @__PURE__ */ p(a, { className: "block statusSuccess" }) : /* @__PURE__ */ p(d, { className: "block statusInfo" })
58
58
  })
59
59
  })]
60
60
  });
@@ -63,18 +63,18 @@ var T = ({ children: t, position: n = "top", showOnHover: r = !0, className: a }
63
63
  //#region src/misc/IconWrapper.tsx
64
64
  function D({ className: e, children: t }) {
65
65
  return /* @__PURE__ */ p("div", {
66
- className: f(E.wrapper, e),
66
+ className: i(E.wrapper, e),
67
67
  children: t
68
68
  });
69
69
  }
70
- var O = { componentLoader: "qgIKVo" }, k = ({ className: e, children: r, color: i = "muted", minHeight: a, uppercase: o = !0 }) => /* @__PURE__ */ p(n, {
71
- className: f("paddingMd textCenter", e),
72
- minHeight: a,
70
+ var O = { componentLoader: "qgIKVo" }, k = ({ className: e, children: r, color: a = "muted", minHeight: o, uppercase: s = !0 }) => /* @__PURE__ */ p(n, {
71
+ className: i("paddingMd textCenter", e),
72
+ minHeight: o,
73
73
  children: /* @__PURE__ */ p(t, {
74
74
  as: "div",
75
75
  weight: "bold",
76
- color: i,
77
- uppercase: o,
76
+ color: a,
77
+ uppercase: s,
78
78
  children: r
79
79
  })
80
80
  });
@@ -82,7 +82,7 @@ var O = { componentLoader: "qgIKVo" }, k = ({ className: e, children: r, color:
82
82
  //#region src/misc/LoadingMessage.tsx
83
83
  function A({ className: e, text: t, withLogo: n }) {
84
84
  return /* @__PURE__ */ m(k, {
85
- className: f(O.componentLoader, n ? "" : "skeletonLine", e),
85
+ className: i(O.componentLoader, n ? "" : "skeletonLine", e),
86
86
  children: [n && /* @__PURE__ */ p(w, {}), t || "Загрузка..."]
87
87
  });
88
88
  }
@@ -100,7 +100,7 @@ function P({ fallback: e, importFunc: t, componentName: n, clientOnly: r = !1, c
100
100
  //#region src/misc/SkeletonLine.tsx
101
101
  var F = ({ as: e, className: t, ...n }) => /* @__PURE__ */ p(r, {
102
102
  as: e || "div",
103
- className: f("skeletonLine colorTransparent radiusSm", t),
103
+ className: i("skeletonLine colorTransparent radiusSm", t),
104
104
  ...n
105
105
  });
106
106
  //#endregion
@@ -128,12 +128,12 @@ var L = ({ className: e, text: t, minHeight: n = "5em" }) => /* @__PURE__ */ p(k
128
128
  function V(e) {
129
129
  return Math.max(0, e.scrollWidth - e.clientWidth);
130
130
  }
131
- var H = ({ children: e, className: t, itemSelector: n, scrollPadding: r = 6, smooth: i = !0 }) => {
132
- let s = y(null), c = y(null), [l, u] = b(!1), [d, h] = b(!1), g = _(() => {
133
- let e = s.current;
131
+ var H = ({ children: e, className: t, itemSelector: n, scrollPadding: r = 6, smooth: a = !0 }) => {
132
+ let c = y(null), l = y(null), [u, d] = b(!1), [f, h] = b(!1), g = _(() => {
133
+ let e = c.current;
134
134
  return e ? n ? Array.from(e.querySelectorAll(n)) : Array.from(e.children).filter((e) => e instanceof HTMLElement) : [];
135
135
  }, [n]), x = _((e) => {
136
- let t = s.current;
136
+ let t = c.current;
137
137
  if (!t) return null;
138
138
  if (n) {
139
139
  let r = e.closest(n);
@@ -143,42 +143,42 @@ var H = ({ children: e, className: t, itemSelector: n, scrollPadding: r = 6, smo
143
143
  for (; r && r.parentElement && r.parentElement !== t;) r = r.parentElement;
144
144
  return r && r.parentElement === t ? r : null;
145
145
  }, [n]), S = _(() => {
146
- let e = s.current;
146
+ let e = c.current;
147
147
  if (!e) {
148
- u(!1), h(!1);
148
+ d(!1), h(!1);
149
149
  return;
150
150
  }
151
151
  let t = Math.max(0, e.scrollWidth - e.clientWidth), n = Math.max(0, Math.min(e.scrollLeft, t)), r = n > B, i = n < t - B;
152
- u((e) => e === r ? e : r), h((e) => e === i ? e : i);
152
+ d((e) => e === r ? e : r), h((e) => e === i ? e : i);
153
153
  }, []), C = _(() => {
154
- c.current === null && (c.current = requestAnimationFrame(() => {
155
- c.current = null, S();
154
+ l.current === null && (l.current = requestAnimationFrame(() => {
155
+ l.current = null, S();
156
156
  }));
157
157
  }, [S]), w = _((e) => {
158
- let t = s.current;
158
+ let t = c.current;
159
159
  if (!t) return;
160
160
  let n = g()[0];
161
161
  if (!n) return;
162
162
  let r = n.getBoundingClientRect().width;
163
163
  if (!r) return;
164
- let a = Math.round(e * r), o = Math.max(0, t.scrollWidth - t.clientWidth), c = Math.max(0, Math.min(t.scrollLeft + a, o));
164
+ let i = Math.round(e * r), o = Math.max(0, t.scrollWidth - t.clientWidth), s = Math.max(0, Math.min(t.scrollLeft + i, o));
165
165
  t.scrollTo({
166
- left: c,
167
- behavior: i ? "smooth" : "auto"
166
+ left: s,
167
+ behavior: a ? "smooth" : "auto"
168
168
  });
169
- }, [g, i]), T = _((e) => {
170
- let t = s.current;
169
+ }, [g, a]), T = _((e) => {
170
+ let t = c.current;
171
171
  if (!t) return;
172
- let n = t.getBoundingClientRect(), a = e.getBoundingClientRect(), o = a.left - n.left + t.scrollLeft, c = o + a.width, l = t.scrollLeft, u = t.scrollLeft + t.clientWidth;
173
- if (o >= l + B && c <= u - B) return;
172
+ let n = t.getBoundingClientRect(), i = e.getBoundingClientRect(), o = i.left - n.left + t.scrollLeft, s = o + i.width, l = t.scrollLeft, u = t.scrollLeft + t.clientWidth;
173
+ if (o >= l + B && s <= u - B) return;
174
174
  let d = t.scrollLeft;
175
- o < l ? d = Math.max(0, o - r) : c > u && (d = Math.min(V(t), c - t.clientWidth + r)), t.scrollTo({
175
+ o < l ? d = Math.max(0, o - r) : s > u && (d = Math.min(V(t), s - t.clientWidth + r)), t.scrollTo({
176
176
  left: Math.round(d),
177
- behavior: i ? "smooth" : "auto"
177
+ behavior: a ? "smooth" : "auto"
178
178
  });
179
- }, [r, i]);
179
+ }, [r, a]);
180
180
  v(() => {
181
- let e = s.current;
181
+ let e = c.current;
182
182
  if (!e) return;
183
183
  let t = (e) => {
184
184
  let t = e.target;
@@ -188,7 +188,7 @@ var H = ({ children: e, className: t, itemSelector: n, scrollPadding: r = 6, smo
188
188
  };
189
189
  return e.addEventListener("focusin", t), () => e.removeEventListener("focusin", t);
190
190
  }, [T, x]), v(() => {
191
- let e = s.current;
191
+ let e = c.current;
192
192
  if (!e) return;
193
193
  let t = () => C();
194
194
  e.addEventListener("scroll", t, { passive: !0 });
@@ -199,16 +199,16 @@ var H = ({ children: e, className: t, itemSelector: n, scrollPadding: r = 6, smo
199
199
  childList: !0,
200
200
  subtree: !1
201
201
  })), C(), () => {
202
- e.removeEventListener("scroll", t), n?.disconnect(), r?.disconnect(), c.current !== null && (cancelAnimationFrame(c.current), c.current = null);
202
+ e.removeEventListener("scroll", t), n?.disconnect(), r?.disconnect(), l.current !== null && (cancelAnimationFrame(l.current), l.current = null);
203
203
  };
204
204
  }, [C]), v(() => {
205
205
  C();
206
206
  }, [e, C]);
207
207
  let E = () => w(-1), D = () => w(1), O = (e) => {
208
208
  e.key === "ArrowLeft" ? (e.preventDefault(), E()) : e.key === "ArrowRight" && (e.preventDefault(), D());
209
- }, k = l || d;
209
+ }, k = u || f;
210
210
  return /* @__PURE__ */ m("div", {
211
- className: f(z.oneStepScroller, t),
211
+ className: i(z.oneStepScroller, t),
212
212
  style: { position: "relative" },
213
213
  children: [
214
214
  k && /* @__PURE__ */ p("button", {
@@ -216,8 +216,8 @@ var H = ({ children: e, className: t, itemSelector: n, scrollPadding: r = 6, smo
216
216
  "aria-label": "Прокрутить шаг влево",
217
217
  className: z.ossButton,
218
218
  onClick: E,
219
- disabled: !l,
220
- children: /* @__PURE__ */ p(a, {})
219
+ disabled: !u,
220
+ children: /* @__PURE__ */ p(o, {})
221
221
  }),
222
222
  /* @__PURE__ */ p("div", {
223
223
  className: z.ossViewport,
@@ -226,7 +226,7 @@ var H = ({ children: e, className: t, itemSelector: n, scrollPadding: r = 6, smo
226
226
  "aria-label": "Элементы прокрутки",
227
227
  children: /* @__PURE__ */ p("div", {
228
228
  className: z.ossScroller,
229
- ref: s,
229
+ ref: c,
230
230
  "aria-live": "polite",
231
231
  children: e
232
232
  })
@@ -236,19 +236,19 @@ var H = ({ children: e, className: t, itemSelector: n, scrollPadding: r = 6, smo
236
236
  "aria-label": "Прокрутить шаг вправо",
237
237
  className: z.ossButton,
238
238
  onClick: D,
239
- disabled: !d,
240
- children: /* @__PURE__ */ p(o, {})
239
+ disabled: !f,
240
+ children: /* @__PURE__ */ p(s, {})
241
241
  })
242
242
  ]
243
243
  });
244
- }, U = g(({ children: e, height: t, stable: n, overscroll: r, className: i }, a) => /* @__PURE__ */ p("div", {
245
- ref: a,
246
- className: f("scrollable", n && "stable", r && "overscroll", i),
244
+ }, U = g(({ children: e, height: t, stable: n, overscroll: r, className: a }, o) => /* @__PURE__ */ p("div", {
245
+ ref: o,
246
+ className: i("scrollable", n && "stable", r && "overscroll", a),
247
247
  style: { height: t },
248
248
  children: e
249
249
  }));
250
250
  g(({ blockClassName: e, ...t }, n) => /* @__PURE__ */ p("div", {
251
- className: f(e, "overflowHidden w100 h100"),
251
+ className: i(e, "overflowHidden w100 h100"),
252
252
  children: /* @__PURE__ */ p(U, {
253
253
  ref: n,
254
254
  ...t
@@ -263,7 +263,7 @@ var W = {
263
263
  error: "_0RqsqJ",
264
264
  state: "mXkUoM"
265
265
  }, G = ({ state: e = "none", text: t, className: n }) => /* @__PURE__ */ m("div", {
266
- className: f("flexCenter gapSm", n),
266
+ className: i("flexCenter gapSm", n),
267
267
  children: [(() => {
268
268
  switch (e) {
269
269
  case "error": return /* @__PURE__ */ p(q, {});
@@ -281,18 +281,18 @@ var W = {
281
281
  case "information": return /* @__PURE__ */ p(X, {});
282
282
  default: return null;
283
283
  }
284
- }, q = () => /* @__PURE__ */ p(l, { className: f(W.state, W.error) }), J = () => /* @__PURE__ */ p(s, { className: f(W.state, W.warning) }), Y = () => /* @__PURE__ */ p(c, { className: f(W.state, W.success) }), X = () => /* @__PURE__ */ p(d, { className: f(W.state, W.information) });
284
+ }, q = () => /* @__PURE__ */ p(u, { className: i(W.state, W.error) }), J = () => /* @__PURE__ */ p(c, { className: i(W.state, W.warning) }), Y = () => /* @__PURE__ */ p(l, { className: i(W.state, W.success) }), X = () => /* @__PURE__ */ p(f, { className: i(W.state, W.information) });
285
285
  //#endregion
286
286
  //#region src/misc/StateWrapper.tsx
287
- function Z({ as: e, state: t, className: n, ...i }) {
288
- let a = t?.toLowerCase() ?? "none", o = W[a], s = a && a !== "none";
287
+ function Z({ as: e, state: t, className: n, ...a }) {
288
+ let o = t?.toLowerCase() ?? "none", s = W[o], c = o && o !== "none";
289
289
  return /* @__PURE__ */ p(r, {
290
290
  as: e || "div",
291
- className: f(W.stateWrapper, s && W.status, o, n),
292
- ...i
291
+ className: i(W.stateWrapper, c && W.status, s, n),
292
+ ...a
293
293
  });
294
294
  }
295
295
  //#endregion
296
296
  export { D as _, G as a, U as c, L as d, I as f, k as g, A as h, K as i, H as l, P as m, q as n, Y as o, F as p, X as r, J as s, Z as t, R as u, T as v, w as y };
297
297
 
298
- //# sourceMappingURL=misc-DrmMj8GO.js.map
298
+ //# sourceMappingURL=misc-Bj0y3ERC.js.map