@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,5 @@
1
+ export * from './Droplist';
2
+ export * from './List';
3
+ export * from './ListPrivate';
4
+ export * from './types';
5
+ export * from './contexts';
@@ -0,0 +1,95 @@
1
+ @use '@cloud-ru/ds-figma-variables/build/scss/styles/styles.module' as base;
2
+
3
+ .listContainer {
4
+ display: flex;
5
+ flex-direction: column;
6
+
7
+ height: 100%;
8
+ margin: 0;
9
+ padding: 0;
10
+
11
+ &:focus-visible {
12
+ border: none;
13
+ outline: none;
14
+
15
+ &[data-active] {
16
+ outline: base.$sn-theme-color-available-complementary solid base.$sn-primitive-strokeWeight-strokeSemiBold;
17
+ outline-offset: calc(0px - base.$sn-primitive-strokeWeight-strokeSemiBold);
18
+
19
+ * {
20
+ cursor: inherit;
21
+ }
22
+ }
23
+ }
24
+
25
+ li,
26
+ ul {
27
+ list-style-type: none;
28
+ }
29
+
30
+ // Сброс нативных стилей ссылки для полиморфных item'ов (itemWrapRender → <a>):
31
+ // строка-ссылка наследует вид пункта списка, без link-цвета и подчёркивания.
32
+ // text-decoration сбрасываем на самом <a> — потомок не может убрать подчёркивание предка.
33
+ a {
34
+ color: inherit;
35
+ text-decoration: none;
36
+
37
+ &:hover,
38
+ &:focus,
39
+ &:active,
40
+ &:visited {
41
+ color: inherit;
42
+ text-decoration: none;
43
+ }
44
+ }
45
+ }
46
+
47
+ .wrapper {
48
+ position: relative;
49
+
50
+ overflow: hidden;
51
+ display: block;
52
+
53
+ box-sizing: border-box;
54
+ height: 100%;
55
+
56
+ &:has(.listContainer:focus-visible) {
57
+ outline: base.$sn-theme-color-available-complementary solid base.$sn-primitive-strokeWeight-strokeSemiBold;
58
+ outline-offset: calc(0px - base.$sn-primitive-strokeWeight-strokeSemiBold);
59
+ }
60
+
61
+ li,
62
+ ul {
63
+ list-style-type: none;
64
+ }
65
+ }
66
+
67
+ // scrollContainer heights: исходно 256/320/384px (kратные 8 * 32/40/48)
68
+ // Специфичность выше, чем у `.scroll { height: 100% }` из @cloud-ru/ds-scroll — иначе max-height
69
+ // не срабатывает и дроплист растягивается на всю высоту контента.
70
+ .scrollContainerS,
71
+ .scrollContainerM,
72
+ .scrollContainerL {
73
+ &:global(.osThemeSnack) {
74
+ height: auto;
75
+ min-height: 0;
76
+ }
77
+ }
78
+
79
+ .scrollContainerS {
80
+ &:global(.osThemeSnack) {
81
+ max-height: calc(base.$sn-primitive-dimension-8 * 32); // 256px
82
+ }
83
+ }
84
+
85
+ .scrollContainerM {
86
+ &:global(.osThemeSnack) {
87
+ max-height: calc(base.$sn-primitive-dimension-8 * 40); // 320px
88
+ }
89
+ }
90
+
91
+ .scrollContainerL {
92
+ &:global(.osThemeSnack) {
93
+ max-height: calc(base.$sn-primitive-dimension-8 * 48); // 384px
94
+ }
95
+ }
@@ -0,0 +1,231 @@
1
+ import { DragEndEvent } from '@dnd-kit/core';
2
+ import { DropdownProps } from '@cloud-ru/ds-dropdown';
3
+ import { WithSupportProps } from '@cloud-ru/ds-utils';
4
+ import { FocusEvent, KeyboardEvent, ReactNode, RefObject } from 'react';
5
+
6
+ import { EmptyStateProps } from '../../helperComponents';
7
+ import { ScrollProps, SearchState } from '../../types';
8
+ import { FlattenBaseItem, Item, ItemId, ReorderItem } from '../Items';
9
+ import { CollapseState, PublicListContextType, SelectionState } from './contexts';
10
+
11
+ export type EmptyState = {
12
+ /** Текущий пустой список — результат поиска/фильтра: показывается `noResultsState` вместо `noDataState` */
13
+ dataFiltered?: boolean;
14
+ /** Загрузка данных завершилась ошибкой: показывается `errorDataState` */
15
+ dataError?: boolean;
16
+ /** Экран при отсутствии данных */
17
+ noDataState?: EmptyStateProps;
18
+ /** Экран при отсутствии результатов поиска или фильтров */
19
+ noResultsState?: EmptyStateProps;
20
+ /** Экран при ошибке запроса */
21
+ errorDataState?: EmptyStateProps;
22
+ };
23
+
24
+ type ListPropsCommon = WithSupportProps<
25
+ {
26
+ /** Элементы списка, закрепленные сверху */
27
+ pinTop?: Item[];
28
+ /** Элементы списка, закрепленные снизу */
29
+ pinBottom?: Item[];
30
+ /**
31
+ * Кастомизируемый элемент в конце списка
32
+ * @type ReactNode;
33
+ */
34
+ footer?: ReactNode;
35
+ /**
36
+ * Кастомизируемый элемент в начале списка — Figma `dropdownContainer.topBar`.
37
+ * Подходит для заголовка / справочного блока над поиском.
38
+ * @type ReactNode;
39
+ */
40
+ header?: ReactNode;
41
+ /** Показывать divider между header и body (Figma `dropdownContainer.dividerWrapper` сверху) */
42
+ headerDivider?: boolean;
43
+ /** Показывать divider между body и footer (Figma `dropdownContainer.dividerWrapper` снизу) */
44
+ footerDivider?: boolean;
45
+ /** Список ссылок на кастомные элементы, помещенные в специальную секцию внизу списка */
46
+ footerActiveElementsRefs?: RefObject<HTMLElement>[];
47
+ /** Ссылка на управление навигацией листа с клавиатуры */
48
+ keyboardNavigationRef?: RefObject<{ focusItem(id: ItemId): void }>;
49
+ /** Настройки поисковой строки */
50
+ search?: SearchState;
51
+
52
+ /** `tabIndex` корневого элемента списка (для управления порядком фокуса) */
53
+ tabIndex?: number;
54
+ /** Настройки раскрытия элементов */
55
+ collapse?: CollapseState;
56
+ /** CSS-класс */
57
+ className?: string;
58
+
59
+ /** Флаг, отвечающий за состояние загрузки списка */
60
+ loading?: boolean;
61
+
62
+ /** Обработчик события по нажатию клавиш */
63
+ onKeyDown?(e: KeyboardEvent<HTMLElement>): void;
64
+ /** Флаг, отвечающий за включение самого родительского контейнера листа в цепочку фокусирующихся элементов */
65
+ hasListInFocusChain?: boolean;
66
+ /** Флаг, отвечающий за прокручивание до выбранного элемента */
67
+ scrollToSelectedItem?: boolean;
68
+ /** CSS-класс для scroll обертки основного списка айтемов */
69
+ scrollContainerClassName?: string;
70
+ /** Ограничить максимальную высоту скролл-контейнера в зависимости от `size` */
71
+ limitedScrollHeight?: boolean;
72
+ } & SelectionState &
73
+ Omit<PublicListContextType, 'virtualized'> &
74
+ ScrollProps &
75
+ EmptyState
76
+ >;
77
+
78
+ /** Props `List` — список обычных айтемов (все виды: base / collapse / group / next-list). */
79
+ export type ListProps = ListPropsCommon & {
80
+ /** Основные элементы списка */
81
+ items: Item[];
82
+ /** Включить виртуализацию элементов списка. Рекомендуется при количестве элементов от 1000. */
83
+ virtualized?: boolean;
84
+ };
85
+
86
+ /**
87
+ * Props `ReorderableList` — список с drag&drop-переупорядочиванием строк за ручку.
88
+ *
89
+ * Отдельный компонент, а не режим `List`: модель айтемов другая (`ReorderItem` — плоская строка
90
+ * либо группа с заголовком, без `collapse`/`next-list`/`group-select`), а виртуализация здесь
91
+ * невозможна в принципе — `@dnd-kit` и виртуализатор применяют к строке свой `transform`.
92
+ */
93
+ export type ReorderableListProps = ListPropsCommon & {
94
+ /**
95
+ * Основные элементы списка: строки `SimpleItem` и/или группы с заголовком `SimpleGroupItem`
96
+ * (`type: 'group'` + `label` + сортируемые `items`).
97
+ */
98
+ items: ReorderItem[];
99
+ /**
100
+ * Колбек по завершению drag&drop-переупорядочивания элементов списка. Список остаётся
101
+ * управляемым: сам не хранит порядок, а отдаёт наружу целиком обновлённое дерево `items` —
102
+ * потребитель обновляет свой стейт этим значением. Переупорядочивание работает только среди
103
+ * «братьев» одного уровня (строки без группы либо строки внутри одной группы; перенос между
104
+ * группами не поддерживается).
105
+ */
106
+ onItemsReorder(items: ReorderItem[]): void;
107
+ };
108
+
109
+ /**
110
+ * @internal Props общей реализации `List`/`ReorderableList` — принимает обе модели айтемов сразу.
111
+ * Наружу не отдаётся: публичные `ListProps`/`ReorderableListProps` плоские, потому что union в
112
+ * публичном props-типе ломает `react-docgen-typescript` (`props.json` схлопывается в `alias`),
113
+ * вывод `Meta`/`StoryObj` и narrowing при spread'е.
114
+ */
115
+ export type ListImplProps = ListPropsCommon & {
116
+ items: Item[] | ReorderItem[];
117
+ virtualized?: boolean;
118
+ onItemsReorder?(items: ReorderItem[]): void;
119
+ };
120
+
121
+ /** Собственные props дроплиста — всё, что не приходит из `List`. */
122
+ type DroplistOwnProps = {
123
+ /** Ссылка на элемент-триггер для дроплиста */
124
+ triggerElemRef?: RefObject<HTMLElement>;
125
+ /**
126
+ * Контейнер портала (ref). Переопределяет `PortalContext` для этого дроплиста
127
+ * (по аналогии с `container` у Modal/Drawer). По умолчанию — из `PortalContextProvider`.
128
+ */
129
+ container?: RefObject<HTMLElement | null>;
130
+ /** Ссылка на элемент выпадающего списка */
131
+ listRef?: RefObject<HTMLElement>;
132
+ /**
133
+ * Закрывать выпадающий список после клика на базовый айтем.
134
+ *
135
+ * Работает в режимах selection: 'none' | 'single'
136
+ *
137
+ * @default false
138
+ */
139
+ closeDroplistOnItemClick?: boolean;
140
+
141
+ /** Триггер для дроплиста
142
+ * @type ReactNode | ({onKeyDown}) => ReactNode
143
+ *
144
+ * Рендер функция принимает аргументы `onKeyDown` - хендлер ввода, для поддержки управления с клавиатуры
145
+ */
146
+ children: ReactNode | ((params: { onKeyDown?: (e: KeyboardEvent<HTMLElement>) => void }) => ReactNode);
147
+ } & Pick<
148
+ DropdownProps,
149
+ 'trigger' | 'placement' | 'widthStrategy' | 'open' | 'onOpenChange' | 'triggerClassName' | 'closeOnPopstate'
150
+ >;
151
+
152
+ /** Props списка, которые дроплист пробрасывает в `List` (навигацией управляет он сам). */
153
+ type DroplistListProps<T> = Omit<T, 'tabIndex' | 'onKeyDown' | 'hasListInFocusChain' | 'keyboardNavigationRef'>;
154
+
155
+ /** Базовые props дроплиста: собственные + props обычного `List`. */
156
+ export type BaseDroplistProps = DroplistOwnProps & DroplistListProps<ListProps>;
157
+
158
+ /** Базовые props дроплиста с drag&drop-переупорядочиванием: собственные + props `ReorderableList`. */
159
+ export type ReorderableBaseDroplistProps = DroplistOwnProps & DroplistListProps<ReorderableListProps>;
160
+
161
+ /**
162
+ * @internal Props общей реализации дроплиста (`DesktopDroplist`/`MobileDroplist`) — принимает обе
163
+ * модели айтемов. Публичные `DroplistProps`/`ReorderableDroplistProps` плоские, см. `ListImplProps`.
164
+ */
165
+ export type DesktopDroplistProps = DroplistOwnProps & DroplistListProps<ListImplProps>;
166
+
167
+ /** Только mobile (`BottomSheet`)-слоты адаптивного `Droplist`. */
168
+ type DroplistMobileSlots = {
169
+ /** Только mobile (`BottomSheet`): заголовок шапки. */
170
+ label?: string;
171
+ /** Только mobile (`BottomSheet`): action-кнопка справа в шапке. */
172
+ actionButton?: ReactNode;
173
+ /** Только mobile (`BottomSheet`): slot справа от заголовка. */
174
+ slotAfterTitle?: ReactNode;
175
+ /** Только mobile (`BottomSheet`): callback back-кнопки. */
176
+ onBackButtonClick?(): void;
177
+ };
178
+
179
+ /**
180
+ * Props адаптивного `Droplist` (дефолтный droplist): базовые props + mobile-слоты `BottomSheet`.
181
+ * Раскладку берёт из `AdaptiveProvider` (контекст): на `mobile` рендерит `MobileDroplist`
182
+ * (список size `l` в `BottomSheet`), иначе — `DesktopDroplist` (анкорный popover). Mobile-слоты
183
+ * применяются только на mobile.
184
+ */
185
+ export type DroplistProps = BaseDroplistProps & DroplistMobileSlots;
186
+
187
+ /**
188
+ * Props адаптивного `ReorderableDroplist`: props `ReorderableList` + popover/mobile-обвязка
189
+ * `Droplist`. Отдельный компонент по той же причине, что и `ReorderableList`.
190
+ */
191
+ export type ReorderableDroplistProps = ReorderableBaseDroplistProps & DroplistMobileSlots;
192
+
193
+ /** @internal Props общей реализации адаптивного дроплиста: реализация + mobile-слоты. */
194
+ export type DroplistImplProps = DesktopDroplistProps & DroplistMobileSlots;
195
+
196
+ /**
197
+ * @internal Props mobile-реализации (`BottomSheet`): реализация дроплиста без popover-пропов
198
+ * + mobile-слоты.
199
+ */
200
+ export type MobileDroplistProps = Omit<
201
+ DesktopDroplistProps,
202
+ 'trigger' | 'placement' | 'widthStrategy' | 'triggerElemRef' | 'listRef' | 'triggerClassName'
203
+ > &
204
+ DroplistMobileSlots;
205
+
206
+ export type ListPrivateProps = Omit<
207
+ ListImplProps,
208
+ 'pinTop' | 'pinBottom' | 'items' | 'hasListInFocusChain' | 'onItemsReorder' | 'virtualized'
209
+ > & {
210
+ nested?: boolean;
211
+ active?: boolean;
212
+ tabIndex?: number;
213
+ virtualized?: boolean;
214
+ onFocus?(e: FocusEvent<HTMLElement>): void;
215
+ onBlur?(e: FocusEvent<HTMLElement>): void;
216
+ onKeyDown?(e: KeyboardEvent<HTMLElement>): void;
217
+ limitedScrollHeight?: boolean;
218
+ searchItem?: FlattenBaseItem;
219
+ pinTop?: ItemId[];
220
+ items: ItemId[];
221
+ pinBottom?: ItemId[];
222
+ /**
223
+ * @internal Обработчик завершения drag&drop-переупорядочивания (см. публичный `onItemsReorder`
224
+ * у `List`/`Droplist`) — вычисляется в `useListItemsModel` и оперирует исходным (не плоским)
225
+ * деревом `items`. Наличие принудительно включает невиртуализированный рендер и оборачивает айтемы в
226
+ * `DndContext`/`SortableContext`.
227
+ */
228
+ onDragEnd?(event: DragEndEvent): void;
229
+ /** @internal Плоский список id всех сортируемых элементов (все уровни) для `SortableContext` */
230
+ sortableIds?: ItemId[];
231
+ };
@@ -0,0 +1,32 @@
1
+ import { arrayMove } from '@dnd-kit/sortable';
2
+
3
+ import { isGroupItem, ItemId, ReorderItem, SimpleGroupItem } from '../Items';
4
+
5
+ /**
6
+ * Переупорядочивание reorder-дерева (`onItemsReorder`). Перестановка допускается только среди
7
+ * «братьев» одного уровня: сначала проверяется верхний уровень (строки без группы), затем — строки
8
+ * внутри каждой группы. Если `activeId` и `overId` лежат в разных контейнерах (в разных группах
9
+ * либо строка-vs-группа), дерево возвращается без изменений — перенос между группами не поддержан.
10
+ */
11
+ export function reorderItems(items: ReorderItem[], activeId: ItemId, overId: ItemId): ReorderItem[] {
12
+ // Верхний уровень: строки без группы и сами группы лежат здесь как «братья» — `id` обязателен у
13
+ // обеих сущностей, поэтому группа находится по нему наравне со строкой и переставляется целиком.
14
+ const topActiveIndex = items.findIndex(item => 'id' in item && item.id === activeId);
15
+ const topOverIndex = items.findIndex(item => 'id' in item && item.id === overId);
16
+ if (topActiveIndex !== -1 && topOverIndex !== -1) {
17
+ return arrayMove(items, topActiveIndex, topOverIndex);
18
+ }
19
+
20
+ // Иначе ищется группа, внутри которой обе строки — «братья», и перестановка идёт только там.
21
+ return items.map(item => {
22
+ if (isGroupItem<SimpleGroupItem>(item)) {
23
+ const activeIndex = item.items.findIndex(child => child.id === activeId);
24
+ const overIndex = item.items.findIndex(child => child.id === overId);
25
+ if (activeIndex !== -1 && overIndex !== -1) {
26
+ return { ...item, items: arrayMove(item.items, activeIndex, overIndex) };
27
+ }
28
+ }
29
+
30
+ return item;
31
+ });
32
+ }
@@ -0,0 +1,2 @@
1
+ export * from './Lists';
2
+ export * from './Items';
@@ -0,0 +1,53 @@
1
+ export const ITEM_PREFIXES = {
2
+ default: '~main',
3
+ pinTop: '~pinTop',
4
+ pinBottom: '~pinBottom',
5
+ footer: '~footer',
6
+ search: '~search',
7
+ dropFocus: '~dropFocus',
8
+ } as const;
9
+
10
+ export const SIZE = {
11
+ S: 's',
12
+ M: 'm',
13
+ L: 'l',
14
+ } as const;
15
+
16
+ export const DEFAULT_SIZE = SIZE.M;
17
+
18
+ export const MODE = {
19
+ None: 'none',
20
+ Single: 'single',
21
+ Multiple: 'multiple',
22
+ } as const;
23
+
24
+ export const ITEM_TYPE = {
25
+ NextList: 'next-list',
26
+ Collapse: 'collapse',
27
+ Group: 'group',
28
+ GroupSelect: 'group-select',
29
+ Simple: 'simple',
30
+ } as const;
31
+
32
+ export const TEST_IDS = {
33
+ root: 'list',
34
+ loader: 'list__loader',
35
+ noData: 'list__no-data',
36
+ noResults: 'list__no-results',
37
+ error: 'list__error',
38
+ baseItem: 'list__base-item',
39
+ baseItemMarker: 'list__base-item-marker',
40
+ baseItemCheckbox: 'list__base-item-checkbox',
41
+ baseItemSwitch: 'list__base-item-switch',
42
+ baseItemLabel: 'list__base-item-label',
43
+ baseItemDescription: 'list__base-item-description',
44
+ searchItem: 'list__search-item',
45
+ bulkSelectButton: 'list__bulk-select-button',
46
+ pinTopGroupItem: 'list__pin-top-group-item',
47
+ pinBottomGroupItem: 'list__pin-bottom-group-item',
48
+ accordionItem: 'list__accordion-item',
49
+ groupIndicator: 'list__group-indicator',
50
+ dragHandle: 'list__drag-handle',
51
+ mobileDroplistRoot: 'list__mobile-droplist-root',
52
+ mobileDroplistTrigger: 'list__mobile-droplist-trigger',
53
+ } as const;
@@ -0,0 +1,32 @@
1
+ import { extractSupportProps, WithSupportProps } from '@cloud-ru/ds-utils';
2
+ import cn from 'classnames';
3
+ import { ReactNode } from 'react';
4
+
5
+ import styles from './styles.module.scss';
6
+
7
+ export type CollapseBlockPrivateProps = WithSupportProps<{
8
+ children: ReactNode;
9
+ header: ReactNode;
10
+ expanded: boolean;
11
+ className?: string;
12
+ }>;
13
+
14
+ // Раскрытие без анимации высоты: подход из Accordion/Tree (transition по max-height)
15
+ // не работает внутри Scroll-контейнера, поэтому контент монтируется/размонтируется напрямую.
16
+ export function CollapseBlockPrivate({ children, expanded, className, header, ...rest }: CollapseBlockPrivateProps) {
17
+ return (
18
+ <div
19
+ className={cn(styles.accordion, className)}
20
+ role='menuitem'
21
+ aria-haspopup
22
+ aria-expanded={expanded}
23
+ {...extractSupportProps(rest)}
24
+ >
25
+ {header}
26
+
27
+ <div className={styles.contentWrapper} aria-hidden={!expanded}>
28
+ <div className={styles.content}>{expanded && children}</div>
29
+ </div>
30
+ </div>
31
+ );
32
+ }
@@ -0,0 +1 @@
1
+ export * from './CollapseBlockPrivate';
@@ -0,0 +1,32 @@
1
+ $duration: 300ms;
2
+
3
+ .accordion {
4
+ display: flex;
5
+ flex-direction: column;
6
+ box-sizing: border-box;
7
+ transition: gap $duration;
8
+
9
+ &::-webkit-scrollbar {
10
+ width: 0;
11
+ }
12
+
13
+ &[aria-expanded='false'] {
14
+ gap: 0;
15
+ }
16
+ }
17
+
18
+ .content {
19
+ position: relative;
20
+ display: none;
21
+ box-sizing: border-box;
22
+ width: 100%;
23
+ }
24
+
25
+ .contentWrapper {
26
+ box-sizing: border-box;
27
+ width: 100%;
28
+
29
+ &[aria-hidden='false'] > .content {
30
+ display: block;
31
+ }
32
+ }