@cloud-ru/ds-list 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +201 -0
  3. package/README.md +1413 -0
  4. package/dist/cjs/components/Items/AccordionItem/AccordionItem.d.ts +4 -0
  5. package/dist/cjs/components/Items/AccordionItem/AccordionItem.js +37 -0
  6. package/dist/cjs/components/Items/AccordionItem/index.d.ts +1 -0
  7. package/dist/cjs/components/Items/AccordionItem/index.js +17 -0
  8. package/dist/cjs/components/Items/BaseItem/BaseItem.d.ts +24 -0
  9. package/dist/cjs/components/Items/BaseItem/BaseItem.js +118 -0
  10. package/dist/cjs/components/Items/BaseItem/constants.d.ts +3 -0
  11. package/dist/cjs/components/Items/BaseItem/constants.js +8 -0
  12. package/dist/cjs/components/Items/BaseItem/index.d.ts +1 -0
  13. package/dist/cjs/components/Items/BaseItem/index.js +17 -0
  14. package/dist/cjs/components/Items/BaseItem/styles.module.css +312 -0
  15. package/dist/cjs/components/Items/GroupSelectItem/GroupSelectItem.d.ts +4 -0
  16. package/dist/cjs/components/Items/GroupSelectItem/GroupSelectItem.js +22 -0
  17. package/dist/cjs/components/Items/GroupSelectItem/index.d.ts +1 -0
  18. package/dist/cjs/components/Items/GroupSelectItem/index.js +17 -0
  19. package/dist/cjs/components/Items/NextListItem/NextListItem.d.ts +2 -0
  20. package/dist/cjs/components/Items/NextListItem/NextListItem.js +71 -0
  21. package/dist/cjs/components/Items/NextListItem/constants.d.ts +2 -0
  22. package/dist/cjs/components/Items/NextListItem/constants.js +13 -0
  23. package/dist/cjs/components/Items/NextListItem/index.d.ts +1 -0
  24. package/dist/cjs/components/Items/NextListItem/index.js +17 -0
  25. package/dist/cjs/components/Items/NextListItem/types.d.ts +4 -0
  26. package/dist/cjs/components/Items/NextListItem/types.js +2 -0
  27. package/dist/cjs/components/Items/PinGroupItem/PinGroupItem.d.ts +7 -0
  28. package/dist/cjs/components/Items/PinGroupItem/PinGroupItem.js +27 -0
  29. package/dist/cjs/components/Items/PinGroupItem/index.d.ts +1 -0
  30. package/dist/cjs/components/Items/PinGroupItem/index.js +17 -0
  31. package/dist/cjs/components/Items/PinGroupItem/styles.module.css +12 -0
  32. package/dist/cjs/components/Items/SearchItem/SearchItem.d.ts +17 -0
  33. package/dist/cjs/components/Items/SearchItem/SearchItem.js +28 -0
  34. package/dist/cjs/components/Items/SearchItem/index.d.ts +1 -0
  35. package/dist/cjs/components/Items/SearchItem/index.js +17 -0
  36. package/dist/cjs/components/Items/SearchItem/styles.module.css +13 -0
  37. package/dist/cjs/components/Items/SimpleItem/components/DragHandle/DragHandle.d.ts +7 -0
  38. package/dist/cjs/components/Items/SimpleItem/components/DragHandle/DragHandle.js +20 -0
  39. package/dist/cjs/components/Items/SimpleItem/components/DragHandle/index.d.ts +1 -0
  40. package/dist/cjs/components/Items/SimpleItem/components/DragHandle/index.js +17 -0
  41. package/dist/cjs/components/Items/SimpleItem/components/OverlayDragHandle/OverlayDragHandle.d.ts +2 -0
  42. package/dist/cjs/components/Items/SimpleItem/components/OverlayDragHandle/OverlayDragHandle.js +9 -0
  43. package/dist/cjs/components/Items/SimpleItem/components/OverlayDragHandle/index.d.ts +1 -0
  44. package/dist/cjs/components/Items/SimpleItem/components/OverlayDragHandle/index.js +17 -0
  45. package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlock/SimpleGroupBlock.d.ts +19 -0
  46. package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlock/SimpleGroupBlock.js +52 -0
  47. package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlock/index.d.ts +1 -0
  48. package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlock/index.js +17 -0
  49. package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/SimpleGroupBlockOverlay.d.ts +15 -0
  50. package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/SimpleGroupBlockOverlay.js +19 -0
  51. package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/index.d.ts +1 -0
  52. package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/index.js +17 -0
  53. package/dist/cjs/components/Items/SimpleItem/components/SimpleItem/SimpleItem.d.ts +11 -0
  54. package/dist/cjs/components/Items/SimpleItem/components/SimpleItem/SimpleItem.js +48 -0
  55. package/dist/cjs/components/Items/SimpleItem/components/SimpleItem/index.d.ts +1 -0
  56. package/dist/cjs/components/Items/SimpleItem/components/SimpleItem/index.js +17 -0
  57. package/dist/cjs/components/Items/SimpleItem/components/SimpleItemOverlay/SimpleItemOverlay.d.ts +15 -0
  58. package/dist/cjs/components/Items/SimpleItem/components/SimpleItemOverlay/SimpleItemOverlay.js +19 -0
  59. package/dist/cjs/components/Items/SimpleItem/components/SimpleItemOverlay/index.d.ts +1 -0
  60. package/dist/cjs/components/Items/SimpleItem/components/SimpleItemOverlay/index.js +17 -0
  61. package/dist/cjs/components/Items/SimpleItem/components/index.d.ts +4 -0
  62. package/dist/cjs/components/Items/SimpleItem/components/index.js +20 -0
  63. package/dist/cjs/components/Items/SimpleItem/constants.d.ts +7 -0
  64. package/dist/cjs/components/Items/SimpleItem/constants.js +9 -0
  65. package/dist/cjs/components/Items/SimpleItem/index.d.ts +2 -0
  66. package/dist/cjs/components/Items/SimpleItem/index.js +18 -0
  67. package/dist/cjs/components/Items/SimpleItem/styles.module.css +96 -0
  68. package/dist/cjs/components/Items/SimpleItem/types.d.ts +3 -0
  69. package/dist/cjs/components/Items/SimpleItem/types.js +2 -0
  70. package/dist/cjs/components/Items/SimpleItem/utils.d.ts +6 -0
  71. package/dist/cjs/components/Items/SimpleItem/utils.js +11 -0
  72. package/dist/cjs/components/Items/hooks.d.ts +23 -0
  73. package/dist/cjs/components/Items/hooks.js +130 -0
  74. package/dist/cjs/components/Items/index.d.ts +5 -0
  75. package/dist/cjs/components/Items/index.js +21 -0
  76. package/dist/cjs/components/Items/styles.module.css +168 -0
  77. package/dist/cjs/components/Items/types.d.ts +168 -0
  78. package/dist/cjs/components/Items/types.js +2 -0
  79. package/dist/cjs/components/Items/utils.d.ts +52 -0
  80. package/dist/cjs/components/Items/utils.js +218 -0
  81. package/dist/cjs/components/Lists/Droplist/DropList.d.ts +21 -0
  82. package/dist/cjs/components/Lists/Droplist/DropList.js +36 -0
  83. package/dist/cjs/components/Lists/Droplist/constants.d.ts +8 -0
  84. package/dist/cjs/components/Lists/Droplist/constants.js +10 -0
  85. package/dist/cjs/components/Lists/Droplist/index.d.ts +1 -0
  86. package/dist/cjs/components/Lists/Droplist/index.js +17 -0
  87. package/dist/cjs/components/Lists/List/List.d.ts +61 -0
  88. package/dist/cjs/components/Lists/List/List.js +62 -0
  89. package/dist/cjs/components/Lists/List/index.d.ts +1 -0
  90. package/dist/cjs/components/Lists/List/index.js +17 -0
  91. package/dist/cjs/components/Lists/ListPrivate/ListPrivate.d.ts +18 -0
  92. package/dist/cjs/components/Lists/ListPrivate/ListPrivate.js +301 -0
  93. package/dist/cjs/components/Lists/ListPrivate/constants.d.ts +7 -0
  94. package/dist/cjs/components/Lists/ListPrivate/constants.js +19 -0
  95. package/dist/cjs/components/Lists/ListPrivate/index.d.ts +1 -0
  96. package/dist/cjs/components/Lists/ListPrivate/index.js +17 -0
  97. package/dist/cjs/components/Lists/ListPrivate/styles.module.css +80 -0
  98. package/dist/cjs/components/Lists/contexts/CollapseProvider.d.ts +17 -0
  99. package/dist/cjs/components/Lists/contexts/CollapseProvider.js +10 -0
  100. package/dist/cjs/components/Lists/contexts/FocusListProvider.d.ts +9 -0
  101. package/dist/cjs/components/Lists/contexts/FocusListProvider.js +9 -0
  102. package/dist/cjs/components/Lists/contexts/NewListProvider.d.ts +33 -0
  103. package/dist/cjs/components/Lists/contexts/NewListProvider.js +23 -0
  104. package/dist/cjs/components/Lists/contexts/OpenListProvider.d.ts +6 -0
  105. package/dist/cjs/components/Lists/contexts/OpenListProvider.js +10 -0
  106. package/dist/cjs/components/Lists/contexts/SelectionProvider.d.ts +74 -0
  107. package/dist/cjs/components/Lists/contexts/SelectionProvider.js +90 -0
  108. package/dist/cjs/components/Lists/contexts/index.d.ts +5 -0
  109. package/dist/cjs/components/Lists/contexts/index.js +21 -0
  110. package/dist/cjs/components/Lists/hooks.d.ts +83 -0
  111. package/dist/cjs/components/Lists/hooks.js +242 -0
  112. package/dist/cjs/components/Lists/index.d.ts +5 -0
  113. package/dist/cjs/components/Lists/index.js +21 -0
  114. package/dist/cjs/components/Lists/styles.module.css +65 -0
  115. package/dist/cjs/components/Lists/types.d.ts +200 -0
  116. package/dist/cjs/components/Lists/types.js +2 -0
  117. package/dist/cjs/components/Lists/utils.d.ts +8 -0
  118. package/dist/cjs/components/Lists/utils.js +31 -0
  119. package/dist/cjs/components/index.d.ts +2 -0
  120. package/dist/cjs/components/index.js +18 -0
  121. package/dist/cjs/constants.d.ts +48 -0
  122. package/dist/cjs/constants.js +51 -0
  123. package/dist/cjs/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.d.ts +9 -0
  124. package/dist/cjs/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.js +15 -0
  125. package/dist/cjs/helperComponents/CollapseBlockPrivate/index.d.ts +1 -0
  126. package/dist/cjs/helperComponents/CollapseBlockPrivate/index.js +17 -0
  127. package/dist/cjs/helperComponents/CollapseBlockPrivate/styles.module.css +27 -0
  128. package/dist/cjs/helperComponents/DesktopDroplist/DesktopDroplist.d.ts +7 -0
  129. package/dist/cjs/helperComponents/DesktopDroplist/DesktopDroplist.js +142 -0
  130. package/dist/cjs/helperComponents/DesktopDroplist/index.d.ts +1 -0
  131. package/dist/cjs/helperComponents/DesktopDroplist/index.js +17 -0
  132. package/dist/cjs/helperComponents/HiddenTabButton/HiddenTabButton.d.ts +7 -0
  133. package/dist/cjs/helperComponents/HiddenTabButton/HiddenTabButton.js +20 -0
  134. package/dist/cjs/helperComponents/HiddenTabButton/index.d.ts +1 -0
  135. package/dist/cjs/helperComponents/HiddenTabButton/index.js +17 -0
  136. package/dist/cjs/helperComponents/HiddenTabButton/styles.module.css +9 -0
  137. package/dist/cjs/helperComponents/ItemContent/ItemContent.d.ts +17 -0
  138. package/dist/cjs/helperComponents/ItemContent/ItemContent.js +27 -0
  139. package/dist/cjs/helperComponents/ItemContent/index.d.ts +1 -0
  140. package/dist/cjs/helperComponents/ItemContent/index.js +17 -0
  141. package/dist/cjs/helperComponents/ItemContent/styles.module.css +139 -0
  142. package/dist/cjs/helperComponents/ListEmptyState/ListEmptyState.d.ts +16 -0
  143. package/dist/cjs/helperComponents/ListEmptyState/ListEmptyState.js +25 -0
  144. package/dist/cjs/helperComponents/ListEmptyState/hooks.d.ts +10 -0
  145. package/dist/cjs/helperComponents/ListEmptyState/hooks.js +30 -0
  146. package/dist/cjs/helperComponents/ListEmptyState/index.d.ts +2 -0
  147. package/dist/cjs/helperComponents/ListEmptyState/index.js +20 -0
  148. package/dist/cjs/helperComponents/ListEmptyState/styles.module.css +8 -0
  149. package/dist/cjs/helperComponents/MobileDroplist/MobileDroplist.d.ts +9 -0
  150. package/dist/cjs/helperComponents/MobileDroplist/MobileDroplist.js +143 -0
  151. package/dist/cjs/helperComponents/MobileDroplist/MobileDroplist.module.css +16 -0
  152. package/dist/cjs/helperComponents/MobileDroplist/index.d.ts +1 -0
  153. package/dist/cjs/helperComponents/MobileDroplist/index.js +17 -0
  154. package/dist/cjs/helperComponents/MobileDroplist/utils.d.ts +11 -0
  155. package/dist/cjs/helperComponents/MobileDroplist/utils.js +65 -0
  156. package/dist/cjs/helperComponents/Separator/Separator.d.ts +20 -0
  157. package/dist/cjs/helperComponents/Separator/Separator.js +40 -0
  158. package/dist/cjs/helperComponents/Separator/constants.d.ts +3 -0
  159. package/dist/cjs/helperComponents/Separator/constants.js +10 -0
  160. package/dist/cjs/helperComponents/Separator/index.d.ts +1 -0
  161. package/dist/cjs/helperComponents/Separator/index.js +17 -0
  162. package/dist/cjs/helperComponents/Separator/styles.module.css +168 -0
  163. package/dist/cjs/helperComponents/index.d.ts +5 -0
  164. package/dist/cjs/helperComponents/index.js +21 -0
  165. package/dist/cjs/index.d.ts +9 -0
  166. package/dist/cjs/index.js +37 -0
  167. package/dist/cjs/locale/index.d.ts +79 -0
  168. package/dist/cjs/locale/index.js +44 -0
  169. package/dist/cjs/package.json +3 -0
  170. package/dist/cjs/style.css +1113 -0
  171. package/dist/cjs/types.d.ts +38 -0
  172. package/dist/cjs/types.js +2 -0
  173. package/dist/cjs/utils.d.ts +18 -0
  174. package/dist/cjs/utils.js +26 -0
  175. package/dist/esm/components/Items/AccordionItem/AccordionItem.d.ts +4 -0
  176. package/dist/esm/components/Items/AccordionItem/AccordionItem.js +34 -0
  177. package/dist/esm/components/Items/AccordionItem/index.d.ts +1 -0
  178. package/dist/esm/components/Items/AccordionItem/index.js +1 -0
  179. package/dist/esm/components/Items/BaseItem/BaseItem.d.ts +24 -0
  180. package/dist/esm/components/Items/BaseItem/BaseItem.js +112 -0
  181. package/dist/esm/components/Items/BaseItem/constants.d.ts +3 -0
  182. package/dist/esm/components/Items/BaseItem/constants.js +5 -0
  183. package/dist/esm/components/Items/BaseItem/index.d.ts +1 -0
  184. package/dist/esm/components/Items/BaseItem/index.js +1 -0
  185. package/dist/esm/components/Items/BaseItem/styles.module.css +312 -0
  186. package/dist/esm/components/Items/GroupSelectItem/GroupSelectItem.d.ts +4 -0
  187. package/dist/esm/components/Items/GroupSelectItem/GroupSelectItem.js +19 -0
  188. package/dist/esm/components/Items/GroupSelectItem/index.d.ts +1 -0
  189. package/dist/esm/components/Items/GroupSelectItem/index.js +1 -0
  190. package/dist/esm/components/Items/NextListItem/NextListItem.d.ts +2 -0
  191. package/dist/esm/components/Items/NextListItem/NextListItem.js +68 -0
  192. package/dist/esm/components/Items/NextListItem/constants.d.ts +2 -0
  193. package/dist/esm/components/Items/NextListItem/constants.js +10 -0
  194. package/dist/esm/components/Items/NextListItem/index.d.ts +1 -0
  195. package/dist/esm/components/Items/NextListItem/index.js +1 -0
  196. package/dist/esm/components/Items/NextListItem/types.d.ts +4 -0
  197. package/dist/esm/components/Items/NextListItem/types.js +1 -0
  198. package/dist/esm/components/Items/PinGroupItem/PinGroupItem.d.ts +7 -0
  199. package/dist/esm/components/Items/PinGroupItem/PinGroupItem.js +20 -0
  200. package/dist/esm/components/Items/PinGroupItem/index.d.ts +1 -0
  201. package/dist/esm/components/Items/PinGroupItem/index.js +1 -0
  202. package/dist/esm/components/Items/PinGroupItem/styles.module.css +12 -0
  203. package/dist/esm/components/Items/SearchItem/SearchItem.d.ts +17 -0
  204. package/dist/esm/components/Items/SearchItem/SearchItem.js +22 -0
  205. package/dist/esm/components/Items/SearchItem/index.d.ts +1 -0
  206. package/dist/esm/components/Items/SearchItem/index.js +1 -0
  207. package/dist/esm/components/Items/SearchItem/styles.module.css +13 -0
  208. package/dist/esm/components/Items/SimpleItem/components/DragHandle/DragHandle.d.ts +7 -0
  209. package/dist/esm/components/Items/SimpleItem/components/DragHandle/DragHandle.js +14 -0
  210. package/dist/esm/components/Items/SimpleItem/components/DragHandle/index.d.ts +1 -0
  211. package/dist/esm/components/Items/SimpleItem/components/DragHandle/index.js +1 -0
  212. package/dist/esm/components/Items/SimpleItem/components/OverlayDragHandle/OverlayDragHandle.d.ts +2 -0
  213. package/dist/esm/components/Items/SimpleItem/components/OverlayDragHandle/OverlayDragHandle.js +6 -0
  214. package/dist/esm/components/Items/SimpleItem/components/OverlayDragHandle/index.d.ts +1 -0
  215. package/dist/esm/components/Items/SimpleItem/components/OverlayDragHandle/index.js +1 -0
  216. package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlock/SimpleGroupBlock.d.ts +19 -0
  217. package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlock/SimpleGroupBlock.js +46 -0
  218. package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlock/index.d.ts +1 -0
  219. package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlock/index.js +1 -0
  220. package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/SimpleGroupBlockOverlay.d.ts +15 -0
  221. package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/SimpleGroupBlockOverlay.js +13 -0
  222. package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/index.d.ts +1 -0
  223. package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/index.js +1 -0
  224. package/dist/esm/components/Items/SimpleItem/components/SimpleItem/SimpleItem.d.ts +11 -0
  225. package/dist/esm/components/Items/SimpleItem/components/SimpleItem/SimpleItem.js +42 -0
  226. package/dist/esm/components/Items/SimpleItem/components/SimpleItem/index.d.ts +1 -0
  227. package/dist/esm/components/Items/SimpleItem/components/SimpleItem/index.js +1 -0
  228. package/dist/esm/components/Items/SimpleItem/components/SimpleItemOverlay/SimpleItemOverlay.d.ts +15 -0
  229. package/dist/esm/components/Items/SimpleItem/components/SimpleItemOverlay/SimpleItemOverlay.js +13 -0
  230. package/dist/esm/components/Items/SimpleItem/components/SimpleItemOverlay/index.d.ts +1 -0
  231. package/dist/esm/components/Items/SimpleItem/components/SimpleItemOverlay/index.js +1 -0
  232. package/dist/esm/components/Items/SimpleItem/components/index.d.ts +4 -0
  233. package/dist/esm/components/Items/SimpleItem/components/index.js +4 -0
  234. package/dist/esm/components/Items/SimpleItem/constants.d.ts +7 -0
  235. package/dist/esm/components/Items/SimpleItem/constants.js +6 -0
  236. package/dist/esm/components/Items/SimpleItem/index.d.ts +2 -0
  237. package/dist/esm/components/Items/SimpleItem/index.js +2 -0
  238. package/dist/esm/components/Items/SimpleItem/styles.module.css +96 -0
  239. package/dist/esm/components/Items/SimpleItem/types.d.ts +3 -0
  240. package/dist/esm/components/Items/SimpleItem/types.js +1 -0
  241. package/dist/esm/components/Items/SimpleItem/utils.d.ts +6 -0
  242. package/dist/esm/components/Items/SimpleItem/utils.js +8 -0
  243. package/dist/esm/components/Items/hooks.d.ts +23 -0
  244. package/dist/esm/components/Items/hooks.js +125 -0
  245. package/dist/esm/components/Items/index.d.ts +5 -0
  246. package/dist/esm/components/Items/index.js +5 -0
  247. package/dist/esm/components/Items/styles.module.css +168 -0
  248. package/dist/esm/components/Items/types.d.ts +168 -0
  249. package/dist/esm/components/Items/types.js +1 -0
  250. package/dist/esm/components/Items/utils.d.ts +52 -0
  251. package/dist/esm/components/Items/utils.js +203 -0
  252. package/dist/esm/components/Lists/Droplist/DropList.d.ts +21 -0
  253. package/dist/esm/components/Lists/Droplist/DropList.js +32 -0
  254. package/dist/esm/components/Lists/Droplist/constants.d.ts +8 -0
  255. package/dist/esm/components/Lists/Droplist/constants.js +7 -0
  256. package/dist/esm/components/Lists/Droplist/index.d.ts +1 -0
  257. package/dist/esm/components/Lists/Droplist/index.js +1 -0
  258. package/dist/esm/components/Lists/List/List.d.ts +61 -0
  259. package/dist/esm/components/Lists/List/List.js +56 -0
  260. package/dist/esm/components/Lists/List/index.d.ts +1 -0
  261. package/dist/esm/components/Lists/List/index.js +1 -0
  262. package/dist/esm/components/Lists/ListPrivate/ListPrivate.d.ts +18 -0
  263. package/dist/esm/components/Lists/ListPrivate/ListPrivate.js +295 -0
  264. package/dist/esm/components/Lists/ListPrivate/constants.d.ts +7 -0
  265. package/dist/esm/components/Lists/ListPrivate/constants.js +16 -0
  266. package/dist/esm/components/Lists/ListPrivate/index.d.ts +1 -0
  267. package/dist/esm/components/Lists/ListPrivate/index.js +1 -0
  268. package/dist/esm/components/Lists/ListPrivate/styles.module.css +80 -0
  269. package/dist/esm/components/Lists/contexts/CollapseProvider.d.ts +17 -0
  270. package/dist/esm/components/Lists/contexts/CollapseProvider.js +5 -0
  271. package/dist/esm/components/Lists/contexts/FocusListProvider.d.ts +9 -0
  272. package/dist/esm/components/Lists/contexts/FocusListProvider.js +5 -0
  273. package/dist/esm/components/Lists/contexts/NewListProvider.d.ts +33 -0
  274. package/dist/esm/components/Lists/contexts/NewListProvider.js +18 -0
  275. package/dist/esm/components/Lists/contexts/OpenListProvider.d.ts +6 -0
  276. package/dist/esm/components/Lists/contexts/OpenListProvider.js +6 -0
  277. package/dist/esm/components/Lists/contexts/SelectionProvider.d.ts +74 -0
  278. package/dist/esm/components/Lists/contexts/SelectionProvider.js +83 -0
  279. package/dist/esm/components/Lists/contexts/index.d.ts +5 -0
  280. package/dist/esm/components/Lists/contexts/index.js +5 -0
  281. package/dist/esm/components/Lists/hooks.d.ts +83 -0
  282. package/dist/esm/components/Lists/hooks.js +238 -0
  283. package/dist/esm/components/Lists/index.d.ts +5 -0
  284. package/dist/esm/components/Lists/index.js +5 -0
  285. package/dist/esm/components/Lists/styles.module.css +65 -0
  286. package/dist/esm/components/Lists/types.d.ts +200 -0
  287. package/dist/esm/components/Lists/types.js +1 -0
  288. package/dist/esm/components/Lists/utils.d.ts +8 -0
  289. package/dist/esm/components/Lists/utils.js +28 -0
  290. package/dist/esm/components/index.d.ts +2 -0
  291. package/dist/esm/components/index.js +2 -0
  292. package/dist/esm/constants.d.ts +48 -0
  293. package/dist/esm/constants.js +48 -0
  294. package/dist/esm/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.d.ts +9 -0
  295. package/dist/esm/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.js +9 -0
  296. package/dist/esm/helperComponents/CollapseBlockPrivate/index.d.ts +1 -0
  297. package/dist/esm/helperComponents/CollapseBlockPrivate/index.js +1 -0
  298. package/dist/esm/helperComponents/CollapseBlockPrivate/styles.module.css +27 -0
  299. package/dist/esm/helperComponents/DesktopDroplist/DesktopDroplist.d.ts +7 -0
  300. package/dist/esm/helperComponents/DesktopDroplist/DesktopDroplist.js +136 -0
  301. package/dist/esm/helperComponents/DesktopDroplist/index.d.ts +1 -0
  302. package/dist/esm/helperComponents/DesktopDroplist/index.js +1 -0
  303. package/dist/esm/helperComponents/HiddenTabButton/HiddenTabButton.d.ts +7 -0
  304. package/dist/esm/helperComponents/HiddenTabButton/HiddenTabButton.js +14 -0
  305. package/dist/esm/helperComponents/HiddenTabButton/index.d.ts +1 -0
  306. package/dist/esm/helperComponents/HiddenTabButton/index.js +1 -0
  307. package/dist/esm/helperComponents/HiddenTabButton/styles.module.css +9 -0
  308. package/dist/esm/helperComponents/ItemContent/ItemContent.d.ts +17 -0
  309. package/dist/esm/helperComponents/ItemContent/ItemContent.js +21 -0
  310. package/dist/esm/helperComponents/ItemContent/index.d.ts +1 -0
  311. package/dist/esm/helperComponents/ItemContent/index.js +1 -0
  312. package/dist/esm/helperComponents/ItemContent/styles.module.css +139 -0
  313. package/dist/esm/helperComponents/ListEmptyState/ListEmptyState.d.ts +16 -0
  314. package/dist/esm/helperComponents/ListEmptyState/ListEmptyState.js +19 -0
  315. package/dist/esm/helperComponents/ListEmptyState/hooks.d.ts +10 -0
  316. package/dist/esm/helperComponents/ListEmptyState/hooks.js +27 -0
  317. package/dist/esm/helperComponents/ListEmptyState/index.d.ts +2 -0
  318. package/dist/esm/helperComponents/ListEmptyState/index.js +2 -0
  319. package/dist/esm/helperComponents/ListEmptyState/styles.module.css +8 -0
  320. package/dist/esm/helperComponents/MobileDroplist/MobileDroplist.d.ts +9 -0
  321. package/dist/esm/helperComponents/MobileDroplist/MobileDroplist.js +137 -0
  322. package/dist/esm/helperComponents/MobileDroplist/MobileDroplist.module.css +16 -0
  323. package/dist/esm/helperComponents/MobileDroplist/index.d.ts +1 -0
  324. package/dist/esm/helperComponents/MobileDroplist/index.js +1 -0
  325. package/dist/esm/helperComponents/MobileDroplist/utils.d.ts +11 -0
  326. package/dist/esm/helperComponents/MobileDroplist/utils.js +61 -0
  327. package/dist/esm/helperComponents/Separator/Separator.d.ts +20 -0
  328. package/dist/esm/helperComponents/Separator/Separator.js +34 -0
  329. package/dist/esm/helperComponents/Separator/constants.d.ts +3 -0
  330. package/dist/esm/helperComponents/Separator/constants.js +7 -0
  331. package/dist/esm/helperComponents/Separator/index.d.ts +1 -0
  332. package/dist/esm/helperComponents/Separator/index.js +1 -0
  333. package/dist/esm/helperComponents/Separator/styles.module.css +168 -0
  334. package/dist/esm/helperComponents/index.d.ts +5 -0
  335. package/dist/esm/helperComponents/index.js +5 -0
  336. package/dist/esm/index.d.ts +9 -0
  337. package/dist/esm/index.js +14 -0
  338. package/dist/esm/locale/index.d.ts +79 -0
  339. package/dist/esm/locale/index.js +41 -0
  340. package/dist/esm/style.css +1113 -0
  341. package/dist/esm/types.d.ts +38 -0
  342. package/dist/esm/types.js +1 -0
  343. package/dist/esm/utils.d.ts +18 -0
  344. package/dist/esm/utils.js +19 -0
  345. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  346. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  347. package/package.json +70 -0
  348. package/src/_iconSizes.scss +7 -0
  349. package/src/components/Items/AccordionItem/AccordionItem.tsx +79 -0
  350. package/src/components/Items/AccordionItem/index.ts +1 -0
  351. package/src/components/Items/BaseItem/BaseItem.tsx +274 -0
  352. package/src/components/Items/BaseItem/constants.ts +9 -0
  353. package/src/components/Items/BaseItem/index.ts +1 -0
  354. package/src/components/Items/BaseItem/styles.module.scss +330 -0
  355. package/src/components/Items/GroupSelectItem/GroupSelectItem.tsx +48 -0
  356. package/src/components/Items/GroupSelectItem/index.ts +1 -0
  357. package/src/components/Items/NextListItem/NextListItem.tsx +157 -0
  358. package/src/components/Items/NextListItem/constants.ts +12 -0
  359. package/src/components/Items/NextListItem/index.ts +1 -0
  360. package/src/components/Items/NextListItem/types.ts +3 -0
  361. package/src/components/Items/PinGroupItem/PinGroupItem.tsx +38 -0
  362. package/src/components/Items/PinGroupItem/index.ts +1 -0
  363. package/src/components/Items/PinGroupItem/styles.module.scss +14 -0
  364. package/src/components/Items/SearchItem/SearchItem.tsx +55 -0
  365. package/src/components/Items/SearchItem/index.ts +1 -0
  366. package/src/components/Items/SearchItem/styles.module.scss +26 -0
  367. package/src/components/Items/SimpleItem/components/DragHandle/DragHandle.tsx +27 -0
  368. package/src/components/Items/SimpleItem/components/DragHandle/index.ts +1 -0
  369. package/src/components/Items/SimpleItem/components/OverlayDragHandle/OverlayDragHandle.tsx +6 -0
  370. package/src/components/Items/SimpleItem/components/OverlayDragHandle/index.ts +1 -0
  371. package/src/components/Items/SimpleItem/components/SimpleGroupBlock/SimpleGroupBlock.tsx +87 -0
  372. package/src/components/Items/SimpleItem/components/SimpleGroupBlock/index.ts +1 -0
  373. package/src/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/SimpleGroupBlockOverlay.tsx +33 -0
  374. package/src/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/index.ts +1 -0
  375. package/src/components/Items/SimpleItem/components/SimpleItem/SimpleItem.tsx +70 -0
  376. package/src/components/Items/SimpleItem/components/SimpleItem/index.ts +1 -0
  377. package/src/components/Items/SimpleItem/components/SimpleItemOverlay/SimpleItemOverlay.tsx +26 -0
  378. package/src/components/Items/SimpleItem/components/SimpleItemOverlay/index.ts +1 -0
  379. package/src/components/Items/SimpleItem/components/index.ts +4 -0
  380. package/src/components/Items/SimpleItem/constants.ts +8 -0
  381. package/src/components/Items/SimpleItem/index.ts +2 -0
  382. package/src/components/Items/SimpleItem/styles.module.scss +149 -0
  383. package/src/components/Items/SimpleItem/types.ts +7 -0
  384. package/src/components/Items/SimpleItem/utils.ts +8 -0
  385. package/src/components/Items/hooks.tsx +233 -0
  386. package/src/components/Items/index.ts +5 -0
  387. package/src/components/Items/styles.module.scss +107 -0
  388. package/src/components/Items/types.ts +203 -0
  389. package/src/components/Items/utils.ts +302 -0
  390. package/src/components/Lists/Droplist/DropList.tsx +62 -0
  391. package/src/components/Lists/Droplist/constants.ts +11 -0
  392. package/src/components/Lists/Droplist/index.ts +1 -0
  393. package/src/components/Lists/List/List.tsx +155 -0
  394. package/src/components/Lists/List/index.ts +1 -0
  395. package/src/components/Lists/ListPrivate/ListPrivate.tsx +560 -0
  396. package/src/components/Lists/ListPrivate/constants.ts +22 -0
  397. package/src/components/Lists/ListPrivate/index.ts +1 -0
  398. package/src/components/Lists/ListPrivate/styles.module.scss +90 -0
  399. package/src/components/Lists/contexts/CollapseProvider.tsx +22 -0
  400. package/src/components/Lists/contexts/FocusListProvider.tsx +15 -0
  401. package/src/components/Lists/contexts/NewListProvider.tsx +76 -0
  402. package/src/components/Lists/contexts/OpenListProvider.tsx +13 -0
  403. package/src/components/Lists/contexts/SelectionProvider.tsx +214 -0
  404. package/src/components/Lists/contexts/index.ts +5 -0
  405. package/src/components/Lists/hooks.ts +351 -0
  406. package/src/components/Lists/index.ts +5 -0
  407. package/src/components/Lists/styles.module.scss +95 -0
  408. package/src/components/Lists/types.ts +231 -0
  409. package/src/components/Lists/utils.ts +32 -0
  410. package/src/components/index.ts +2 -0
  411. package/src/constants.ts +53 -0
  412. package/src/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.tsx +32 -0
  413. package/src/helperComponents/CollapseBlockPrivate/index.ts +1 -0
  414. package/src/helperComponents/CollapseBlockPrivate/styles.module.scss +32 -0
  415. package/src/helperComponents/DesktopDroplist/DesktopDroplist.tsx +313 -0
  416. package/src/helperComponents/DesktopDroplist/index.ts +1 -0
  417. package/src/helperComponents/HiddenTabButton/HiddenTabButton.tsx +35 -0
  418. package/src/helperComponents/HiddenTabButton/index.ts +1 -0
  419. package/src/helperComponents/HiddenTabButton/styles.module.scss +11 -0
  420. package/src/helperComponents/ItemContent/ItemContent.tsx +80 -0
  421. package/src/helperComponents/ItemContent/index.ts +1 -0
  422. package/src/helperComponents/ItemContent/styles.module.scss +100 -0
  423. package/src/helperComponents/ListEmptyState/ListEmptyState.tsx +52 -0
  424. package/src/helperComponents/ListEmptyState/hooks.ts +42 -0
  425. package/src/helperComponents/ListEmptyState/index.ts +2 -0
  426. package/src/helperComponents/ListEmptyState/styles.module.scss +11 -0
  427. package/src/helperComponents/MobileDroplist/MobileDroplist.module.scss +25 -0
  428. package/src/helperComponents/MobileDroplist/MobileDroplist.tsx +230 -0
  429. package/src/helperComponents/MobileDroplist/index.ts +1 -0
  430. package/src/helperComponents/MobileDroplist/utils.tsx +76 -0
  431. package/src/helperComponents/Separator/Separator.tsx +115 -0
  432. package/src/helperComponents/Separator/constants.ts +11 -0
  433. package/src/helperComponents/Separator/index.ts +1 -0
  434. package/src/helperComponents/Separator/styles.module.scss +255 -0
  435. package/src/helperComponents/index.ts +5 -0
  436. package/src/index.ts +19 -0
  437. package/src/locale/index.ts +45 -0
  438. package/src/types.ts +44 -0
  439. package/src/utils.ts +26 -0
@@ -0,0 +1,295 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { closestCenter, DndContext, DragOverlay, KeyboardSensor, MeasuringStrategy, MouseSensor, pointerWithin, TouchSensor, useSensor, useSensors, } from '@dnd-kit/core';
3
+ import { SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy } from '@dnd-kit/sortable';
4
+ import { Spinner } from '@cloud-ru/ds-loader';
5
+ import { usePortalContext } from '@cloud-ru/ds-portal-context';
6
+ import { Scroll } from '@cloud-ru/ds-scroll';
7
+ import { extractSupportProps, isBrowser, useLayoutEffect } from '@cloud-ru/ds-utils';
8
+ import { useVirtualizer } from '@tanstack/react-virtual';
9
+ import cn from 'classnames';
10
+ import mergeRefs from 'merge-refs';
11
+ import { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react';
12
+ import { createPortal } from 'react-dom';
13
+ import { DEFAULT_SIZE, TEST_IDS } from '../../../constants.js';
14
+ import { ListEmptyState, useEmptyState } from '../../../helperComponents/index.js';
15
+ import { stopPropagation } from '../../../utils.js';
16
+ import { isGroupItem, isSimpleItem, PinBottomGroupItem, PinTopGroupItem, SearchItem, useRenderItems, } from '../../Items/index.js';
17
+ import { SimpleGroupBlockOverlay, SimpleItemOverlay } from '../../Items/SimpleItem/index.js';
18
+ import { useNewListContext, useSelectionContext } from '../contexts/index.js';
19
+ import commonStyles from '../styles.module.css';
20
+ import { ALL_SIZES, SPINNER_SIZE_MAP } from './constants.js';
21
+ import styles from './styles.module.css';
22
+ // Отделяет клик (activation через `onClick` айтема) от начала перетаскивания — тот же порог активации,
23
+ // что у `@cloud-ru/ds-table` (`useColumnOrderByDrag`), для единообразия поведения по репо.
24
+ const draggingOptions = { activationConstraint: { distance: 5 } };
25
+ // Пересчитывать rect'ы droppable-строк на каждом кадре перетаскивания. В `Droplist` (popover) список лежит
26
+ // в скролл-контейнере с трансформами: измеренные при монтировании rect'ы устаревают, коллизия
27
+ // указывает на последнюю строку и строка «улетает» в конец. `Always` держит измерения свежими.
28
+ const measuringConfig = { droppable: { strategy: MeasuringStrategy.Always } };
29
+ /**
30
+ * Центрирует элемент внутри своего scroll-контейнера правкой `scrollTop` контейнера.
31
+ * В отличие от `element.scrollIntoView({ block: 'center' })`, НЕ скроллит вышестоящие предки
32
+ * (включая window) — иначе при монтировании списка с `scrollToSelectedItem` страница доков
33
+ * «дёргалась» (окно прыгало, чтобы показать выбранный элемент). См. ревью MR!101.
34
+ */
35
+ function centerItemInScrollContainer(container, item) {
36
+ if (!container || !item) {
37
+ return;
38
+ }
39
+ const containerRect = container.getBoundingClientRect();
40
+ const itemRect = item.getBoundingClientRect();
41
+ const delta = itemRect.top - containerRect.top - (container.clientHeight - itemRect.height) / 2;
42
+ container.scrollTop += delta;
43
+ }
44
+ export const ListPrivate = forwardRef(({ items, pinTop, pinBottom, onKeyDown, onBlur, onFocus, tabIndex, active, scroll, nested, search, searchItem, scrollRef, scrollContainerRef, onScroll, footer, header, headerDivider, footerDivider, loading, limitedScrollHeight, untouchableScrollbars, className, noDataState, noResultsState, errorDataState, dataError, dataFiltered, scrollToSelectedItem = false, virtualized: virtualizedProp = false, scrollContainerClassName, barHideStrategy = 'never', onDragEnd, sortableIds, ...props }, ref) => {
45
+ const { size = DEFAULT_SIZE, flattenItems, focusFlattenItems } = useNewListContext();
46
+ const { value, isSelectionSingle } = useSelectionContext();
47
+ // `onDragEnd`/`SortableContext` конфликтуют с виртуализатором: обе стороны применяют свой
48
+ // `transform` к строке (см. JSDoc `ListPrivateProps.onDragEnd`) — запрещено уже на уровне
49
+ // типов (`ListProps`), здесь рантайм-зеркало на случай прямого использования `ListPrivate`.
50
+ const virtualized = virtualizedProp && !onDragEnd;
51
+ const sensors = useSensors(useSensor(MouseSensor, draggingOptions), useSensor(TouchSensor, {}), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }));
52
+ // Id перетаскиваемой строки — для рендера её копии в `DragOverlay`. Копия живёт в портале
53
+ // над страницей и не режется `overflow: hidden` контейнера `List` (исходная строка остаётся
54
+ // на месте «призраком»). `null`, когда перетаскивание не идёт.
55
+ const [activeDragId, setActiveDragId] = useState(null);
56
+ const handleDragStart = useCallback((event) => setActiveDragId(event.active.id), []);
57
+ const handleDragEnd = useCallback((event) => {
58
+ setActiveDragId(null);
59
+ onDragEnd?.(event);
60
+ }, [onDragEnd]);
61
+ const handleDragCancel = useCallback(() => setActiveDragId(null), []);
62
+ const activeOverlayItem = activeDragId != null ? flattenItems[activeDragId] : undefined;
63
+ // Переупорядочивание строго внутри одного sortable-контейнера: верхний уровень (строки без группы + сами
64
+ // группы — «братья») либо контейнер конкретной группы (её строки). Остаются только droppable
65
+ // того же контейнера, что и активный элемент (`container` в `data` ставят `SimpleItem`/
66
+ // `SimpleGroupBlock`).
67
+ const collisionDetection = useCallback(args => {
68
+ const activeContainer = args.active.data.current?.container;
69
+ const droppableContainers = args.droppableContainers.filter(container => container.data.current?.container === activeContainer);
70
+ // Сначала — droppable под курсором (`pointerWithin`). Группа сортируется целым блоком
71
+ // (`SimpleGroupBlock`: заголовок + строки), поэтому её droppable-rect высокий; `closestCenter`
72
+ // сравнивал бы расстояние до центра блока — курсор над заголовком группы был далеко от центра,
73
+ // и цель «перепрыгивала» через всю группу (строка вставала под неё). `pointerWithin` берёт тот
74
+ // блок, над которым реально курсор, — вставка идёт туда, где визуально находится указатель.
75
+ const pointerCollisions = pointerWithin({ ...args, droppableContainers });
76
+ if (pointerCollisions.length > 0) {
77
+ return pointerCollisions;
78
+ }
79
+ // Fallback для клавиатурного сенсора (у него нет координат указателя → `pointerWithin` пуст).
80
+ return closestCenter({ ...args, droppableContainers });
81
+ }, []);
82
+ // Портал `DragOverlay` — в themed-корень (`@cloud-ru/ds-portal-context`), а не в `document.body`. Все
83
+ // `--sn-*` токены объявлены на theme-scope (`RootThemeProvider`), а не на `:root`; в `body`
84
+ // копия строки теряла их и падала на дефолты (раздутые паддинги/цвета — «гигантский призрак»).
85
+ // Корень портал-контекста лежит внутри theme-scope и не трансформирован, поэтому `position:
86
+ // fixed` у `DragOverlay` остаётся относительно вьюпорта (в т.ч. внутри popover-Droplist).
87
+ const portalRoot = usePortalContext();
88
+ const innerScrollRef = useRef(null);
89
+ // `@cloud-ru/ds-scroll` (OverlayScrollbars) разрешает свой ref в viewport-элемент только после
90
+ // инициализации инстанса. До этого `innerScrollRef.current` === null, и виртуализатор
91
+ // не получает scroll-элемент → рендерит пустой контейнер. Флаг поднимается из
92
+ // `onInitialized` и форсит повторный `measure()` уже с готовым viewport'ом.
93
+ const [scrollElementReady, setScrollElementReady] = useState(false);
94
+ const itemsJSX = useRenderItems(items);
95
+ const itemsPinTopJSX = useRenderItems(pinTop);
96
+ const itemsPinBottomJSX = useRenderItems(pinBottom);
97
+ const pinTopItemsPresent = Number(pinTop?.length) > 0;
98
+ const pinBottomItemsPresent = Number(pinBottom?.length) > 0;
99
+ const [scrollState, setScrollState] = useState({ virtualizer: null, browser: null, measured: false });
100
+ const emptyStates = useEmptyState({ noDataState, noResultsState, errorDataState });
101
+ const hasNoItems = items.length === 0;
102
+ const { selectedItemIndex, selectedItem } = useMemo(() => {
103
+ const result = {
104
+ selectedItemIndex: -1,
105
+ selectedItem: undefined,
106
+ };
107
+ if (!scrollToSelectedItem || !value) {
108
+ return result;
109
+ }
110
+ const selectedItem = isSelectionSingle ? flattenItems[value] : flattenItems[value[0]];
111
+ if (!selectedItem?.id) {
112
+ return result;
113
+ }
114
+ const allFocusFlattenItems = Object.values(focusFlattenItems);
115
+ const index = allFocusFlattenItems.findIndex(item => item.originalId === selectedItem.id);
116
+ if (index < 0) {
117
+ return result;
118
+ }
119
+ return {
120
+ selectedItemIndex: index,
121
+ selectedItem: allFocusFlattenItems[index],
122
+ };
123
+ }, [flattenItems, focusFlattenItems, isSelectionSingle, scrollToSelectedItem, value]);
124
+ // Реальная высота строки может превышать однострочный `ALL_SIZES[size]` (например, item с
125
+ // `description` — двухстрочный). Если estimateSize занижен, незамеренные строки оцениваются
126
+ // меньше реальных, и по мере прокрутки `measureElement` правит totalSize — контент «скачет».
127
+ // Меряем фактическую высоту первой отрисованной строки и используем как оценку для остальных:
128
+ // totalSize становится точным сразу, скачок пропадает. measureElement по-прежнему уточняет
129
+ // разнородные строки построчно.
130
+ const [measuredRowSize, setMeasuredRowSize] = useState(null);
131
+ const virtualizer = useVirtualizer({
132
+ count: itemsJSX.length,
133
+ // Зависимость на `scrollElementReady` заставляет виртуализатор перечитать scroll-элемент
134
+ // после инициализации OverlayScrollbars (когда `innerScrollRef.current` уже не null).
135
+ getScrollElement: () => (scroll && scrollElementReady ? innerScrollRef.current : null),
136
+ estimateSize: () => measuredRowSize ?? ALL_SIZES[size],
137
+ enabled: virtualized,
138
+ overscan: 5, // Amount of elements in DOM before/after visible ones
139
+ });
140
+ const virtualItems = virtualizer.getVirtualItems();
141
+ // Сбрасываем измеренную оценку при смене size — однострочная база снова станет дефолтом
142
+ // до первого замера новой плотности.
143
+ useEffect(() => {
144
+ setMeasuredRowSize(null);
145
+ }, [size]);
146
+ // Замер реальной высоты первой строки после её отрисовки (до того, как пользователь начнёт
147
+ // скроллить). Один замер на size: как только оценка зафиксирована, эффект больше ничего не
148
+ // делает (measureElement продолжает уточнять разнородные строки построчно).
149
+ const hasRenderedRows = virtualItems.length > 0;
150
+ useLayoutEffect(() => {
151
+ if (!virtualized || !scrollElementReady || measuredRowSize !== null || !hasRenderedRows) {
152
+ return;
153
+ }
154
+ const firstRow = innerScrollRef.current?.querySelector('[data-index]');
155
+ const height = firstRow?.offsetHeight;
156
+ if (height && Math.abs(height - ALL_SIZES[size]) > 1) {
157
+ setMeasuredRowSize(height);
158
+ }
159
+ }, [virtualized, scrollElementReady, measuredRowSize, hasRenderedRows, size]);
160
+ useEffect(() => {
161
+ if (!scrollElementReady) {
162
+ return; // Scroll-элемент ещё не готов — измерять нечего, иначе фиксируем пустой кадр.
163
+ }
164
+ if (scrollState.measured) {
165
+ return;
166
+ }
167
+ virtualizer.measure();
168
+ setScrollState(prevState => ({
169
+ ...prevState,
170
+ measured: true,
171
+ }));
172
+ }, [scrollElementReady, scrollState.measured, virtualizer]);
173
+ const isScrollToItemEnabled = scroll && scrollToSelectedItem && virtualized;
174
+ useEffect(() => {
175
+ if (isScrollToItemEnabled) {
176
+ if (!scrollState.measured) {
177
+ return; // Not measured yet
178
+ }
179
+ if (selectedItemIndex < 0 || !selectedItem) {
180
+ return; // Cannot scroll to non-existing item
181
+ }
182
+ if (scrollState.virtualizer === selectedItem.originalId) {
183
+ return; // No need to re-scroll to the same item during re-renders
184
+ }
185
+ if (selectedItem?.itemRef && innerScrollRef.current?.contains(selectedItem?.itemRef.current)) {
186
+ return; // No need to scroll to manually clicked item currently present in DOM
187
+ }
188
+ virtualizer.scrollToIndex(selectedItemIndex, { align: 'center' });
189
+ setScrollState(prevState => ({
190
+ ...prevState,
191
+ virtualizer: selectedItem.originalId,
192
+ }));
193
+ }
194
+ }, [isScrollToItemEnabled, scrollState, selectedItem, selectedItemIndex, virtualizer]);
195
+ const isTargetPresentInDom = Boolean(selectedItem?.itemRef?.current);
196
+ useEffect(() => {
197
+ if (!selectedItem) {
198
+ return;
199
+ }
200
+ if (scrollState.virtualizer === null) {
201
+ return; // Not scrolled by virtualizer yet, no need for additional scroll
202
+ }
203
+ if (!isTargetPresentInDom) {
204
+ return; // Target element is not present in DOM yet, additional scroll does not work without it
205
+ }
206
+ if (scrollState.virtualizer === scrollState.browser) {
207
+ return; // Virtualizer scroll has not been executed => no need for additional scroll
208
+ }
209
+ centerItemInScrollContainer(innerScrollRef.current, selectedItem.itemRef?.current ?? null);
210
+ setScrollState(prevState => ({
211
+ ...prevState,
212
+ browser: selectedItem.originalId,
213
+ }));
214
+ }, [scrollState, selectedItem, isTargetPresentInDom, selectedItemIndex]);
215
+ // Non-virtualized: центрируем выбранный элемент в собственном scroll-контейнере при смене
216
+ // `selection` (на первом маунте это делает `onScrollInitialized`). Виртуализованный путь
217
+ // ведут эффекты выше через виртуализатор, поэтому здесь только `!virtualized`. Хелпер тот
218
+ // же `centerItemInScrollContainer` — обычному листу отдельный виртуализатор не нужен.
219
+ useEffect(() => {
220
+ if (virtualized || !scroll || !scrollToSelectedItem || !scrollElementReady) {
221
+ return;
222
+ }
223
+ const container = innerScrollRef.current;
224
+ const item = selectedItem?.itemRef?.current ?? null;
225
+ if (!container || !item) {
226
+ return;
227
+ }
228
+ centerItemInScrollContainer(container, item);
229
+ }, [virtualized, scroll, scrollToSelectedItem, scrollElementReady, selectedItem]);
230
+ const loadingJSX = useMemo(() => loading && (_jsx("div", { role: 'status', tabIndex: -1, className: styles.loader, "data-size": size, "data-no-items": hasNoItems || undefined, "data-test-id": TEST_IDS.loader, children: _jsx(Spinner, { size: SPINNER_SIZE_MAP[size] }) })), [hasNoItems, loading, size]);
231
+ const content = useMemo(() => {
232
+ const itemsBody = virtualized ? (_jsx("div", { className: styles.virtualizedContainer, style: { height: virtualizer.getTotalSize() }, tabIndex: -1, children: virtualItems.map(virtualRow => (_jsx("div", { "data-index": virtualRow.index, ref: virtualizer.measureElement, tabIndex: -1, className: styles.virtualizedPositionBox, style: {
233
+ transform: `translateY(${virtualRow.start}px)`,
234
+ }, children: itemsJSX[virtualRow.index] }, virtualRow.key))) })) : (itemsJSX);
235
+ // Содержимое `DragOverlay`: копия строки (`SimpleItemOverlay`) либо заголовка группы
236
+ // (`SimpleGroupBlockOverlay`) — по типу активного элемента.
237
+ let dragOverlayContent = null;
238
+ if (activeOverlayItem && isSimpleItem(activeOverlayItem)) {
239
+ dragOverlayContent = _jsx(SimpleItemOverlay, { ...activeOverlayItem });
240
+ }
241
+ else if (activeOverlayItem && isGroupItem(activeOverlayItem)) {
242
+ const rows = (activeOverlayItem.allChildIds ?? [])
243
+ .map(rowId => flattenItems[rowId])
244
+ .filter((row) => isSimpleItem(row));
245
+ dragOverlayContent = (_jsx(SimpleGroupBlockOverlay, { size: size, rows: rows, label: activeOverlayItem.label, beforeContent: activeOverlayItem.beforeContent, truncate: activeOverlayItem.truncate, divider: activeOverlayItem.divider, groupVariant: activeOverlayItem.groupVariant }));
246
+ }
247
+ // `SortableContext`/`DndContext` — чистые провайдеры контекста, не рендерят DOM-узлов,
248
+ // поэтому оборачивание всего блока (включая loader/empty-state) безопасно и не меняет
249
+ // разметку `<ul>`.
250
+ const body = onDragEnd ? (_jsxs(DndContext, { sensors: sensors, collisionDetection: collisionDetection, measuring: measuringConfig, onDragStart: handleDragStart, onDragEnd: handleDragEnd, onDragCancel: handleDragCancel, children: [_jsx(SortableContext, { items: sortableIds ?? [], strategy: verticalListSortingStrategy, children: itemsBody }), isBrowser() &&
251
+ createPortal(_jsx(DragOverlay, { dropAnimation: null, children: dragOverlayContent }), portalRoot.current ?? document.body)] })) : (itemsBody);
252
+ return (_jsxs(_Fragment, { children: [body, loadingJSX, _jsx(ListEmptyState, { loading: loading, dataError: dataError, emptyStates: emptyStates, hasNoItems: hasNoItems, dataFiltered: dataFiltered ?? Boolean(search?.value), size: size })] }));
253
+ }, [
254
+ activeOverlayItem,
255
+ collisionDetection,
256
+ dataError,
257
+ dataFiltered,
258
+ emptyStates,
259
+ flattenItems,
260
+ handleDragCancel,
261
+ handleDragEnd,
262
+ handleDragStart,
263
+ hasNoItems,
264
+ itemsJSX,
265
+ loading,
266
+ loadingJSX,
267
+ onDragEnd,
268
+ portalRoot,
269
+ search?.value,
270
+ sensors,
271
+ size,
272
+ sortableIds,
273
+ virtualItems,
274
+ virtualized,
275
+ virtualizer,
276
+ ]);
277
+ const onScrollInitialized = useCallback(() => {
278
+ // OverlayScrollbars инициализирован — ref указывает на viewport. Поднимаем флаг,
279
+ // чтобы виртуализатор перечитал scroll-элемент и сделал первый корректный замер.
280
+ setScrollElementReady(true);
281
+ if (!selectedItem) {
282
+ return;
283
+ }
284
+ centerItemInScrollContainer(innerScrollRef.current, selectedItem?.itemRef?.current ?? null);
285
+ }, [selectedItem]);
286
+ const listJSX = (_jsxs("ul", { className: cn(commonStyles.listContainer, className), ref: ref, onKeyDown: onKeyDown, tabIndex: tabIndex, onFocus: onFocus, onBlur: onBlur, "data-active": active || undefined, role: 'menu', ...extractSupportProps(props), children: [header && (_jsx("div", { className: styles.header, "data-divider": headerDivider || undefined, onFocus: stopPropagation, children: header })), (pinTopItemsPresent || search) && (_jsxs(PinTopGroupItem, { children: [search && _jsx(SearchItem, { search: search, ...searchItem }), pinTopItemsPresent && itemsPinTopJSX] })), scroll ? (_jsxs(Scroll, { className: cn({
287
+ [commonStyles.scrollContainerS]: scroll && limitedScrollHeight && size === 's',
288
+ [commonStyles.scrollContainerM]: scroll && limitedScrollHeight && size === 'm',
289
+ [commonStyles.scrollContainerL]: scroll && limitedScrollHeight && size === 'l',
290
+ }, scrollContainerClassName), barHideStrategy: barHideStrategy, size: 's', ref: mergeRefs(innerScrollRef, scrollContainerRef), untouchableScrollbars: untouchableScrollbars, onScroll: onScroll, onInitialized: onScrollInitialized, children: [content, _jsx("div", { className: styles.scrollStub, ref: scrollRef })] })) : (_jsx(_Fragment, { children: content })), pinBottomItemsPresent && _jsx(PinBottomGroupItem, { children: itemsPinBottomJSX }), footer && (_jsx("div", { className: styles.footer, "data-divider": footerDivider || undefined, onFocus: stopPropagation, children: footer }))] }));
291
+ if (!nested) {
292
+ return listJSX;
293
+ }
294
+ return (_jsx("li", { className: styles.nestedItem, role: 'menuitem', children: listJSX }));
295
+ });
@@ -0,0 +1,7 @@
1
+ import { SpinnerProps } from '@cloud-ru/ds-loader';
2
+ import { Size } from '../../../types.js';
3
+ export declare const LARGE_SIZE_HEIGHT = 40;
4
+ export declare const MEDIUM_SIZE_HEIGHT = 32;
5
+ export declare const SMALL_SIZE_HEIGHT = 24;
6
+ export declare const ALL_SIZES: Record<Size, number>;
7
+ export declare const SPINNER_SIZE_MAP: Record<Size, SpinnerProps['size']>;
@@ -0,0 +1,16 @@
1
+ // Фактические высоты однострочного item в compact-density (s=24 / m=32 / l=40). Оценка
2
+ // виртуализатора должна совпадать с рендером: завышенный estimate даёт «скачок» скролла —
3
+ // измеренные строки сжимают totalSize по мере прокрутки (MR!101).
4
+ export const LARGE_SIZE_HEIGHT = 40;
5
+ export const MEDIUM_SIZE_HEIGHT = 32;
6
+ export const SMALL_SIZE_HEIGHT = 24;
7
+ export const ALL_SIZES = {
8
+ m: MEDIUM_SIZE_HEIGHT,
9
+ s: SMALL_SIZE_HEIGHT,
10
+ l: LARGE_SIZE_HEIGHT,
11
+ };
12
+ export const SPINNER_SIZE_MAP = {
13
+ s: 'xs',
14
+ m: 'xs',
15
+ l: 's',
16
+ };
@@ -0,0 +1 @@
1
+ export * from './ListPrivate.js';
@@ -0,0 +1 @@
1
+ export * from './ListPrivate.js';
@@ -0,0 +1,80 @@
1
+ .loader{
2
+ display:flex;
3
+ align-items:center;
4
+ justify-content:center;
5
+ }
6
+ .loader[data-size=s]{
7
+ height:var(--sn-primitive-dimension-24, 24px);
8
+ }
9
+ .loader[data-size=s][data-no-items]{
10
+ min-width:calc(2 * 3 * var(--sn-primitive-dimension-24, 24px));
11
+ height:calc(3 * var(--sn-primitive-dimension-24, 24px));
12
+ }
13
+ .loader[data-size=m]{
14
+ height:var(--sn-primitive-dimension-32, 32px);
15
+ }
16
+ .loader[data-size=m][data-no-items]{
17
+ min-width:calc(2 * 3 * var(--sn-primitive-dimension-32, 32px));
18
+ height:calc(3 * var(--sn-primitive-dimension-32, 32px));
19
+ }
20
+ .loader[data-size=l]{
21
+ height:var(--sn-primitive-dimension-40, 40px);
22
+ }
23
+ .loader[data-size=l][data-no-items]{
24
+ min-width:calc(2 * 3 * var(--sn-primitive-dimension-40, 40px));
25
+ height:calc(3 * var(--sn-primitive-dimension-40, 40px));
26
+ }
27
+ .loader:focus-visible{
28
+ outline:var(--sn-theme-color-available-complementary, #000000) solid var(--sn-primitive-strokeWeight-strokeSemiBold, 2px);
29
+ outline-offset:calc(0px - var(--sn-primitive-strokeWeight-strokeSemiBold, 2px));
30
+ }
31
+
32
+ .scrollStub{
33
+ height:var(--sn-primitive-dimension-1, 1px);
34
+ margin-top:calc(0px - var(--sn-primitive-dimension-1, 1px));
35
+ background:transparent;
36
+ }
37
+
38
+ .nestedItem{
39
+ list-style-type:none;
40
+ }
41
+
42
+ .footer{
43
+ display:flex;
44
+ flex-direction:column;
45
+ box-sizing:border-box;
46
+ padding:var(--sn-popupPrivate-anatomy-dropdown-footer-paddingTop, var(--sn-primitive-dimension-8, 8px)) var(--sn-popupPrivate-anatomy-dropdown-footer-paddingHorizontal, var(--sn-primitive-dimension-8, 8px)) var(--sn-popupPrivate-anatomy-dropdown-footer-paddingBottom, var(--sn-primitive-dimension-4, 4px));
47
+ }
48
+ .footer[data-divider]{
49
+ border-top:var(--sn-primitive-strokeWeight-strokeRegular, 1px) solid var(--sn-theme-color-available-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-default-borderColor, rgba(159, 166, 198, 0.3019607843)));
50
+ }
51
+
52
+ .header{
53
+ display:flex;
54
+ flex-direction:column;
55
+ gap:var(--sn-popupPrivate-anatomy-dropdown-header-headlineWrapper-gap, var(--sn-primitive-dimension-4, 4px));
56
+ box-sizing:border-box;
57
+ padding:0 var(--sn-popupPrivate-anatomy-dropdown-header-headlineWrapper-paddingHorizontal, var(--sn-primitive-dimension-8, 8px)) var(--sn-popupPrivate-anatomy-dropdown-header-gap, var(--sn-primitive-dimension-4, 4px));
58
+ }
59
+ .header[data-divider]{
60
+ margin-bottom:var(--sn-popupPrivate-anatomy-dropdown-header-gap, var(--sn-primitive-dimension-4, 4px));
61
+ padding-bottom:var(--sn-popupPrivate-anatomy-dropdown-header-headlineWrapper-paddingHorizontal, var(--sn-primitive-dimension-8, 8px));
62
+ border-bottom:var(--sn-primitive-strokeWeight-strokeRegular, 1px) solid var(--sn-theme-color-available-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-default-borderColor, rgba(159, 166, 198, 0.3019607843)));
63
+ }
64
+
65
+ .content{
66
+ overflow:hidden;
67
+ flex-grow:1;
68
+ }
69
+
70
+ .virtualizedContainer{
71
+ position:relative;
72
+ width:100%;
73
+ }
74
+
75
+ .virtualizedPositionBox{
76
+ position:absolute;
77
+ top:0;
78
+ left:0;
79
+ width:100%;
80
+ }
@@ -0,0 +1,17 @@
1
+ import { ItemId } from '../../Items/index.js';
2
+ export type CollapseLevelContextType = {
3
+ level?: number;
4
+ };
5
+ export declare const CollapseLevelContext: import("react").Context<CollapseLevelContextType>;
6
+ export declare const useCollapseLevelContext: () => CollapseLevelContextType;
7
+ export type CollapseContextType = {
8
+ openCollapseItems?: ItemId[];
9
+ toggleOpenCollapseItem?(id: ItemId): void;
10
+ };
11
+ export declare const CollapseContext: import("react").Context<CollapseContextType>;
12
+ export declare const useCollapseContext: () => CollapseContextType;
13
+ export type CollapseState = {
14
+ value?: ItemId[];
15
+ onChange?(value?: ItemId[]): void;
16
+ defaultValue?: ItemId[];
17
+ };
@@ -0,0 +1,5 @@
1
+ import { createContext, useContext } from 'react';
2
+ export const CollapseLevelContext = createContext({});
3
+ export const useCollapseLevelContext = () => useContext(CollapseLevelContext);
4
+ export const CollapseContext = createContext({});
5
+ export const useCollapseContext = () => useContext(CollapseContext);
@@ -0,0 +1,9 @@
1
+ import { KeyboardEvent } from 'react';
2
+ import { ItemId } from '../../Items/index.js';
3
+ export type FocusListContextType = {
4
+ activeItemId?: ItemId;
5
+ forceUpdateActiveItemId?(itemId: ItemId): void;
6
+ handleListKeyDownFactory: (ids: ItemId[], expandedIds: ItemId[]) => (e: KeyboardEvent<HTMLElement>) => void;
7
+ };
8
+ export declare const FocusListContext: import("react").Context<FocusListContextType>;
9
+ export declare const useFocusListContext: () => FocusListContextType;
@@ -0,0 +1,5 @@
1
+ import { createContext, useContext } from 'react';
2
+ export const FocusListContext = createContext({
3
+ handleListKeyDownFactory: () => () => { },
4
+ });
5
+ export const useFocusListContext = () => useContext(FocusListContext);
@@ -0,0 +1,33 @@
1
+ import { ReactNode } from 'react';
2
+ import { ItemContentProps } from '../../../helperComponents/index.js';
3
+ import { Size } from '../../../types.js';
4
+ import { FlattenItem, FocusFlattenItem, ItemId } from '../../Items/index.js';
5
+ type ContentRenderProps = {
6
+ id?: ItemId;
7
+ content?: ItemContentProps | ReactNode;
8
+ disabled?: boolean;
9
+ };
10
+ export type PublicListContextType = {
11
+ /** Размер списка */
12
+ size?: Size;
13
+ /** Отображать ли маркер у выбранного элемента списка */
14
+ marker?: boolean;
15
+ /**
16
+ * Рендер функция основного контента айтема
17
+ */
18
+ contentRender?(props: ContentRenderProps): ReactNode;
19
+ virtualized?: boolean;
20
+ };
21
+ export type PrivateListContextType = {
22
+ flattenItems: Record<string, FlattenItem>;
23
+ focusFlattenItems: Record<string, FocusFlattenItem>;
24
+ firstItemId?: ItemId;
25
+ };
26
+ type Child = {
27
+ children: ReactNode;
28
+ };
29
+ type ListContextType = PublicListContextType & PrivateListContextType;
30
+ export declare const ListContext: import("react").Context<ListContextType>;
31
+ export declare function useNewListContext(): ListContextType;
32
+ export declare function NewListContextProvider({ children, size, marker, flattenItems, focusFlattenItems, contentRender, firstItemId, virtualized, }: ListContextType & Child): import("react/jsx-runtime").JSX.Element;
33
+ export {};
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useMemo } from 'react';
3
+ import { ITEM_PREFIXES } from '../../../constants.js';
4
+ export const ListContext = createContext({
5
+ flattenItems: {},
6
+ focusFlattenItems: {},
7
+ firstItemId: ITEM_PREFIXES.default,
8
+ });
9
+ export function useNewListContext() {
10
+ return useContext(ListContext);
11
+ }
12
+ function extractListProps({ size, marker, flattenItems, focusFlattenItems, contentRender, firstItemId, virtualized, }) {
13
+ return { size, marker, contentRender, flattenItems, focusFlattenItems, firstItemId, virtualized };
14
+ }
15
+ export function NewListContextProvider({ children, size, marker, flattenItems, focusFlattenItems, contentRender, firstItemId, virtualized, }) {
16
+ const value = useMemo(() => extractListProps({ size, marker, flattenItems, focusFlattenItems, contentRender, firstItemId, virtualized }), [size, marker, flattenItems, focusFlattenItems, contentRender, firstItemId, virtualized]);
17
+ return _jsx(ListContext.Provider, { value: value, children: children });
18
+ }
@@ -0,0 +1,6 @@
1
+ export type OpenListContextType = {
2
+ closeDroplistOnItemClick?: boolean;
3
+ closeDroplist(): void;
4
+ };
5
+ export declare const OpenListContext: import("react").Context<OpenListContextType>;
6
+ export declare const useOpenListContext: () => OpenListContextType;
@@ -0,0 +1,6 @@
1
+ import { createContext, useContext } from 'react';
2
+ export const OpenListContext = createContext({
3
+ closeDroplist: () => { },
4
+ closeDroplistOnItemClick: false,
5
+ });
6
+ export const useOpenListContext = () => useContext(OpenListContext);
@@ -0,0 +1,74 @@
1
+ import { Dispatch, ReactNode, SetStateAction } from 'react';
2
+ import { MODE } from '../../../constants.js';
3
+ import { ItemId } from '../../Items/index.js';
4
+ export type SelectionValue = ItemId | ItemId[];
5
+ export type OnChangeHandler<T = SelectionValue> = (value: T) => void;
6
+ export type SelectionSingleValueType = ItemId;
7
+ export type SelectionSingleState = {
8
+ /** Начальное состояние */
9
+ defaultValue?: ItemId;
10
+ /** Controlled состояние */
11
+ value?: ItemId;
12
+ /** Controlled обработчик изменения состояния — получает выбранный `ItemId` */
13
+ onChange?: OnChangeHandler<ItemId>;
14
+ /** Режим выбора */
15
+ mode: typeof MODE.Single;
16
+ };
17
+ export type SelectionSingleProps = {
18
+ setValue?: Dispatch<SetStateAction<ItemId | undefined>>;
19
+ /** Внутренний toggle-обработчик: выбирает/снимает один элемент по id */
20
+ onChange?: OnChangeHandler<ItemId>;
21
+ /** Режим выбора single */
22
+ isSelectionSingle: true;
23
+ /** Режим выбора multi */
24
+ isSelectionMultiple: false;
25
+ } & Omit<SelectionSingleState, 'onChange'>;
26
+ export type SelectionMultipleState = {
27
+ /** Начальное состояние */
28
+ defaultValue?: ItemId[];
29
+ /** Controlled состояние */
30
+ value?: ItemId[];
31
+ /** Controlled обработчик изменения состояния — получает массив выбранных `ItemId[]` */
32
+ onChange?: OnChangeHandler<ItemId[]>;
33
+ /** Режим выбора */
34
+ mode: typeof MODE.Multiple;
35
+ };
36
+ export type SelectionMultipleProps = {
37
+ setValue?: Dispatch<SetStateAction<ItemId[] | undefined>>;
38
+ /** Внутренний toggle-обработчик: добавляет/убирает один элемент по id */
39
+ onChange?: OnChangeHandler<ItemId>;
40
+ /** Режим выбора single */
41
+ isSelectionSingle: false;
42
+ /** Режим выбора multi */
43
+ isSelectionMultiple: true;
44
+ } & Omit<SelectionMultipleState, 'onChange'>;
45
+ type SelectionNoneProps = {
46
+ mode?: typeof MODE.None;
47
+ value?: undefined;
48
+ onChange?: undefined;
49
+ setValue?: undefined;
50
+ defaultValue?: undefined;
51
+ isSelectionSingle?: undefined;
52
+ isSelectionMultiple?: undefined;
53
+ };
54
+ type SelectionContextType = Omit<SelectionNoneProps, 'defaultValue'> | Omit<SelectionSingleProps, 'defaultValue'> | Omit<SelectionMultipleProps, 'defaultValue'>;
55
+ export type SelectionState = {
56
+ /**
57
+ * Настройки выбора элементов. `mode: 'single'` — один выбранный элемент (`value: ItemId`),
58
+ * `mode: 'multiple'` — множественный выбор (`value: ItemId[]`). Без `selection` выбора нет —
59
+ * клик вызывает только `onClick` элемента.
60
+ */
61
+ selection?: SelectionSingleState | SelectionMultipleState;
62
+ };
63
+ export declare const SelectionContext: import("react").Context<SelectionContextType>;
64
+ export declare function isSelectionMultipleProps(props: object): props is SelectionMultipleState;
65
+ export declare function isSelectionSingleProps(props: object): props is SelectionSingleState;
66
+ type Child = {
67
+ children: ReactNode;
68
+ };
69
+ type SelectionProviderProps = SelectionSingleState | SelectionMultipleState | {
70
+ mode?: typeof MODE.None;
71
+ };
72
+ export declare function SelectionProvider({ children, ...props }: SelectionProviderProps & Child): import("react/jsx-runtime").JSX.Element;
73
+ export declare function useSelectionContext(): SelectionContextType;
74
+ export {};