@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,96 @@
1
+ .item[data-dragging]{
2
+ position:relative;
3
+ z-index:1;
4
+ opacity:0.5;
5
+ }
6
+ .item[data-overlay]{
7
+ cursor:grabbing;
8
+ opacity:0.5;
9
+ background:var(--sn-theme-color-neutral-background2Level, var(--sn-brand-color-neutral-99, var(--sn-primitive-color-gray-99, #ffffff)));
10
+ box-shadow:var(--sn-boxShadow-elevation-level2, var(--sn-theme-effect-shadow-level2-layer1-positionX, 0) var(--sn-theme-effect-shadow-level2-layer1-positionY, 0) var(--sn-theme-effect-shadow-level2-layer1-blur, 4px) var(--sn-theme-effect-shadow-level2-layer1-speed, 0) var(--sn-theme-effect-shadow-layer1Color, rgba(0, 0, 0, 0.0784313725)), var(--sn-theme-effect-shadow-level2-layer2-positionX, 0) var(--sn-theme-effect-shadow-level2-layer2-positionY, 4px) var(--sn-theme-effect-shadow-level2-layer2-blur, 8px) var(--sn-theme-effect-shadow-level2-layer2-speed, 2px) var(--sn-theme-effect-shadow-layer2Color, rgba(0, 0, 0, 0.0784313725)));
11
+ }
12
+
13
+ .groupBlock[data-dragging]{
14
+ position:relative;
15
+ z-index:1;
16
+ opacity:0.5;
17
+ }
18
+ .groupBlock[data-overlay]{
19
+ cursor:grabbing;
20
+ opacity:0.5;
21
+ background:var(--sn-theme-color-neutral-background2Level, var(--sn-brand-color-neutral-99, var(--sn-primitive-color-gray-99, #ffffff)));
22
+ box-shadow:var(--sn-boxShadow-elevation-level2, var(--sn-theme-effect-shadow-level2-layer1-positionX, 0) var(--sn-theme-effect-shadow-level2-layer1-positionY, 0) var(--sn-theme-effect-shadow-level2-layer1-blur, 4px) var(--sn-theme-effect-shadow-level2-layer1-speed, 0) var(--sn-theme-effect-shadow-layer1Color, rgba(0, 0, 0, 0.0784313725)), var(--sn-theme-effect-shadow-level2-layer2-positionX, 0) var(--sn-theme-effect-shadow-level2-layer2-positionY, 4px) var(--sn-theme-effect-shadow-level2-layer2-blur, 8px) var(--sn-theme-effect-shadow-level2-layer2-speed, 2px) var(--sn-theme-effect-shadow-layer2Color, rgba(0, 0, 0, 0.0784313725)));
23
+ }
24
+ .groupBlock[data-reorder-boundary]{
25
+ background:var(--sn-theme-color-neutral-background1Level, var(--sn-brand-color-neutral-95, var(--sn-primitive-color-gray-95, #fdfdfd)));
26
+ box-shadow:inset 0 6px 12px -12px var(--sn-theme-color-blackout, var(--sn-brand-color-overlay-forLightMode-blackout, rgba(0, 0, 0, 0.3215686275))), inset 0 -6px 12px -12px var(--sn-theme-color-blackout, var(--sn-brand-color-overlay-forLightMode-blackout, rgba(0, 0, 0, 0.3215686275)));
27
+ }
28
+
29
+ .groupHeader{
30
+ display:flex;
31
+ align-items:center;
32
+ }
33
+ .groupHeader > :last-child{
34
+ flex:1 1 auto;
35
+ min-width:0;
36
+ }
37
+ .groupHeader[data-size=s]{
38
+ gap:var(--sn-list-anatomy-size-s-listItem-gap, var(--sn-density-spacing-control-wrapper-horizontal-s, var(--sn-primitive-dimension-8, 8px)));
39
+ padding-left:var(--sn-list-anatomy-size-s-listItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-s, var(--sn-primitive-dimension-12, 12px)));
40
+ }
41
+ .groupHeader[data-size=s] > :last-child{
42
+ margin-left:calc(-1 * var(--sn-list-anatomy-size-s-listItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-s, var(--sn-primitive-dimension-12, 12px))));
43
+ }
44
+ .groupHeader[data-size=s] .dragHandle{
45
+ width:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
46
+ height:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
47
+ margin-top:calc(var(--sn-list-anatomy-size-s-subtitle-paddingTop, var(--sn-primitive-dimension-8, 8px)) - var(--sn-list-anatomy-size-s-listItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-s, var(--sn-primitive-dimension-6, 6px))));
48
+ }
49
+ .groupHeader[data-size=m]{
50
+ gap:var(--sn-list-anatomy-size-m-listItem-gap, var(--sn-density-spacing-control-wrapper-horizontal-m, var(--sn-primitive-dimension-8, 8px)));
51
+ padding-left:var(--sn-list-anatomy-size-m-listItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-m, var(--sn-primitive-dimension-16, 16px)));
52
+ }
53
+ .groupHeader[data-size=m] > :last-child{
54
+ margin-left:calc(-1 * var(--sn-list-anatomy-size-m-listItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-m, var(--sn-primitive-dimension-16, 16px))));
55
+ }
56
+ .groupHeader[data-size=m] .dragHandle{
57
+ width:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
58
+ height:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
59
+ margin-top:calc(var(--sn-list-anatomy-size-m-subtitle-paddingTop, var(--sn-primitive-dimension-10, 10px)) - var(--sn-list-anatomy-size-m-listItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-m, var(--sn-primitive-dimension-8, 8px))));
60
+ }
61
+ .groupHeader[data-size=l]{
62
+ gap:var(--sn-list-anatomy-size-l-listItem-gap, var(--sn-density-spacing-control-wrapper-horizontal-l, var(--sn-primitive-dimension-12, 12px)));
63
+ padding-left:var(--sn-list-anatomy-size-l-listItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-l, var(--sn-primitive-dimension-20, 20px)));
64
+ }
65
+ .groupHeader[data-size=l] > :last-child{
66
+ margin-left:calc(-1 * var(--sn-list-anatomy-size-l-listItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-l, var(--sn-primitive-dimension-20, 20px))));
67
+ }
68
+ .groupHeader[data-size=l] .dragHandle{
69
+ width:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
70
+ height:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
71
+ margin-top:calc(var(--sn-list-anatomy-size-l-subtitle-paddingTop, var(--sn-primitive-dimension-12, 12px)) - var(--sn-list-anatomy-size-l-listItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-l, var(--sn-primitive-dimension-10, 10px))));
72
+ }
73
+
74
+ .dragHandle{
75
+ cursor:grab;
76
+ display:flex;
77
+ align-items:center;
78
+ justify-content:center;
79
+ padding:0;
80
+ border:none;
81
+ color:var(--sn-theme-color-available-version-textSecondary, var(--sn-brand-color-text-version-secondary, rgba(65, 66, 78, 0.8)));
82
+ -webkit-appearance:none;
83
+ -moz-appearance:none;
84
+ appearance:none;
85
+ background:transparent;
86
+ }
87
+ .dragHandle svg{
88
+ width:100%;
89
+ height:100%;
90
+ }
91
+ .dragHandle:active{
92
+ cursor:grabbing;
93
+ }
94
+ .dragHandle:disabled{
95
+ cursor:not-allowed;
96
+ }
@@ -0,0 +1,3 @@
1
+ import { SeparatorProps } from '../../../helperComponents/index.js';
2
+ /** Поля заголовка группы, общие для сортируемого блока и его копии в `DragOverlay`. */
3
+ export type GroupHeaderContent = Pick<SeparatorProps, 'label' | 'beforeContent' | 'truncate' | 'divider' | 'groupVariant'>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Отключает FLIP-анимацию перестановки после отпускания (общий контракт `SimpleItem` и `SimpleGroupBlock`).
3
+ * Порядок применяется синхронно через `onItemsReorder`; без флага `@dnd-kit` доигрывает `transform 200ms`
4
+ * из старого слота в новый — отпущенная строка дёргается обратно и уезжает на место.
5
+ */
6
+ export declare function animateLayoutChanges(): boolean;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Отключает FLIP-анимацию перестановки после отпускания (общий контракт `SimpleItem` и `SimpleGroupBlock`).
3
+ * Порядок применяется синхронно через `onItemsReorder`; без флага `@dnd-kit` доигрывает `transform 200ms`
4
+ * из старого слота в новый — отпущенная строка дёргается обратно и уезжает на место.
5
+ */
6
+ export function animateLayoutChanges() {
7
+ return false;
8
+ }
@@ -0,0 +1,23 @@
1
+ import { RefObject } from 'react';
2
+ import { Flatten, FlattenBaseItem, ItemId } from './types.js';
3
+ export declare function useRenderItems(focusCloseChildIds?: ItemId[]): (JSX.Element | null)[];
4
+ type UseCreateBaseItemsProps = {
5
+ search?: boolean;
6
+ footerActiveElementsRefs?: RefObject<HTMLElement>[];
7
+ };
8
+ export declare function useCreateBaseItems({ footerActiveElementsRefs }: UseCreateBaseItemsProps): {
9
+ searchItem: Flatten<FlattenBaseItem, 'itemRef'>;
10
+ footerItems: Flatten<FlattenBaseItem, 'itemRef'>[];
11
+ };
12
+ type UseGroupItemSelectionProps = {
13
+ allChildIds: ItemId[];
14
+ items: ItemId[];
15
+ id: ItemId;
16
+ disabled?: boolean;
17
+ };
18
+ export declare function useGroupItemSelection({ id, allChildIds }: UseGroupItemSelectionProps): {
19
+ checked: boolean | undefined;
20
+ indeterminate: boolean | undefined;
21
+ handleOnSelect: () => void;
22
+ };
23
+ export {};
@@ -0,0 +1,125 @@
1
+ import { createElement as _createElement } from "react";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useHierarchicalSelection } from '@cloud-ru/ds-utils';
4
+ import { createRef, useMemo } from 'react';
5
+ import { ITEM_PREFIXES } from '../../constants.js';
6
+ import { Separator } from '../../helperComponents/index.js';
7
+ import { getFooterItemId } from '../../utils.js';
8
+ import { useNewListContext, useSelectionContext } from '../Lists/contexts/index.js';
9
+ import { AccordionItem } from './AccordionItem/index.js';
10
+ import { BaseItem } from './BaseItem/index.js';
11
+ import { GroupSelectItem } from './GroupSelectItem/index.js';
12
+ import { NextListItem } from './NextListItem/index.js';
13
+ import { SimpleGroupBlock, SimpleItem } from './SimpleItem/index.js';
14
+ import { isAccordionItem, isGroupItem, isGroupSelectItem, isNextListItem, isSimpleItem } from './utils.js';
15
+ function getRenderItems({ focusCloseChildIds, focusFlattenItems, flattenItems, isSelectionMultiple, groupId, }) {
16
+ if (!focusCloseChildIds) {
17
+ return [null];
18
+ }
19
+ return focusCloseChildIds.flatMap(id => {
20
+ const { itemRef, key, originalId, items } = focusFlattenItems[id];
21
+ const flattenItem = flattenItems[originalId];
22
+ if (isGroupItem(flattenItem) ||
23
+ (!isSelectionMultiple && isGroupSelectItem(flattenItem))) {
24
+ // Группа в reorder-режиме: её строки размечены `type: Simple`. Заголовок + строки оборачиваются
25
+ // в единый сортируемый блок `SimpleGroupBlock` — за ручку заголовка группа перетаскивается
26
+ // целиком (строки едут вместе), а строки внутри блока переставляются собственным
27
+ // `SortableContext`. Переупорядочивание строго по уровням, см. `reorderReorderItems`.
28
+ const sortableChildIds = items
29
+ .map(focusId => focusFlattenItems[focusId]?.originalId)
30
+ .filter((childId) => {
31
+ const child = childId != null ? flattenItems[childId] : undefined;
32
+ return Boolean(child && isSimpleItem(child));
33
+ });
34
+ const isSortableGroup = isGroupItem(flattenItem) && sortableChildIds.length > 0;
35
+ const innerItemsJSX = getRenderItems({
36
+ focusCloseChildIds: items,
37
+ focusFlattenItems,
38
+ flattenItems,
39
+ isSelectionMultiple,
40
+ groupId: isSortableGroup ? originalId : groupId,
41
+ });
42
+ if (isSortableGroup) {
43
+ return (_jsx(SimpleGroupBlock, { id: originalId, label: flattenItem.label, beforeContent: flattenItem.beforeContent, truncate: flattenItem.truncate, divider: flattenItem.divider, groupVariant: flattenItem.groupVariant, rowIds: sortableChildIds, children: innerItemsJSX }, key));
44
+ }
45
+ return [
46
+ _jsx(Separator, { label: flattenItem.label, beforeContent: flattenItem.beforeContent, truncate: flattenItem.truncate, divider: flattenItem.divider, groupVariant: flattenItem.groupVariant }, key + '_separator'),
47
+ ...innerItemsJSX,
48
+ ];
49
+ }
50
+ if (isGroupSelectItem(flattenItem)) {
51
+ return _createElement(GroupSelectItem, { ...flattenItem, items: items, itemRef: itemRef, key: key });
52
+ }
53
+ if (isAccordionItem(flattenItem)) {
54
+ return _createElement(AccordionItem, { ...flattenItem, items: items, itemRef: itemRef, key: key });
55
+ }
56
+ if (isNextListItem(flattenItem)) {
57
+ return _createElement(NextListItem, { ...flattenItem, focusId: id, items: items, itemRef: itemRef, key: key });
58
+ }
59
+ if (isSimpleItem(flattenItem)) {
60
+ return _createElement(SimpleItem, { ...flattenItem, items: items, itemRef: itemRef, groupId: groupId, key: key });
61
+ }
62
+ return _createElement(BaseItem, { ...flattenItem, itemRef: itemRef, key: key });
63
+ });
64
+ }
65
+ export function useRenderItems(focusCloseChildIds) {
66
+ const { focusFlattenItems, flattenItems } = useNewListContext();
67
+ const { isSelectionMultiple } = useSelectionContext();
68
+ return useMemo(() => getRenderItems({ flattenItems, focusFlattenItems, focusCloseChildIds, isSelectionMultiple }), [flattenItems, focusCloseChildIds, focusFlattenItems, isSelectionMultiple]);
69
+ }
70
+ export function useCreateBaseItems({ footerActiveElementsRefs }) {
71
+ return useMemo(() => ({
72
+ searchItem: {
73
+ itemRef: createRef(),
74
+ id: ITEM_PREFIXES.search,
75
+ parentId: ITEM_PREFIXES.default,
76
+ items: [],
77
+ allChildIds: [],
78
+ },
79
+ footerItems: footerActiveElementsRefs?.map((itemRef, idx) => ({
80
+ id: getFooterItemId(idx),
81
+ itemRef,
82
+ parentId: ITEM_PREFIXES.default,
83
+ items: [],
84
+ allChildIds: [],
85
+ })) ?? [],
86
+ }), [footerActiveElementsRefs]);
87
+ }
88
+ export function useGroupItemSelection({ id, allChildIds }) {
89
+ const selection = useSelectionContext();
90
+ const { value, isSelectionMultiple } = selection;
91
+ const { getSelectionState, toggleSelection } = useHierarchicalSelection({ includeParentsInValue: false });
92
+ // group-select работает только в multiple-режиме — там setValue оперирует ItemId[].
93
+ const setMultipleValue = selection.isSelectionMultiple ? selection.setValue : undefined;
94
+ const { flattenItems } = useNewListContext();
95
+ const baseChildIds = useMemo(() => allChildIds.filter(itemId => {
96
+ const item = flattenItems[itemId];
97
+ return item && !('type' in item);
98
+ }), [allChildIds, flattenItems]);
99
+ const enableChildIds = useMemo(() => baseChildIds.filter(itemId => {
100
+ const item = flattenItems[itemId];
101
+ return item && !('type' in item) && !item.disabled;
102
+ }), [baseChildIds, flattenItems]);
103
+ const selectionState = useMemo(() => isSelectionMultiple
104
+ ? getSelectionState({
105
+ nodeId: id,
106
+ childIds: baseChildIds,
107
+ selectedIds: value ?? [],
108
+ })
109
+ : undefined, [baseChildIds, getSelectionState, id, isSelectionMultiple, value]);
110
+ const checked = selectionState?.checked;
111
+ const indeterminate = isSelectionMultiple ? selectionState?.indeterminate : baseChildIds.includes(value ?? '');
112
+ const handleOnSelect = () => {
113
+ if (!isSelectionMultiple) {
114
+ return;
115
+ }
116
+ setMultipleValue?.(prev => toggleSelection({
117
+ nodeId: id,
118
+ descendantIds: baseChildIds,
119
+ selectableDescendantIds: enableChildIds,
120
+ childIds: baseChildIds,
121
+ selectedIds: prev ?? [],
122
+ }));
123
+ };
124
+ return { checked, indeterminate, handleOnSelect };
125
+ }
@@ -0,0 +1,5 @@
1
+ export * from './hooks.js';
2
+ export * from './types.js';
3
+ export * from './utils.js';
4
+ export * from './SearchItem/index.js';
5
+ export * from './PinGroupItem/index.js';
@@ -0,0 +1,5 @@
1
+ export * from './hooks.js';
2
+ export * from './types.js';
3
+ export * from './utils.js';
4
+ export * from './SearchItem/index.js';
5
+ export * from './PinGroupItem/index.js';
@@ -0,0 +1,168 @@
1
+ @charset "UTF-8";
2
+ .stateLayer{
3
+ visibility:initial;
4
+ }
5
+
6
+ .itemWrapper{
7
+ position:relative;
8
+ z-index:0;
9
+ min-width:100%;
10
+ margin:0;
11
+ padding:0;
12
+ }
13
+ .itemWrapper .stateLayer{
14
+ position:absolute;
15
+ inset:0;
16
+ border-radius:inherit;
17
+ }
18
+ .itemWrapper .stateLayer[data-state=borderOnBackground]{
19
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-default-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-default-borderColor, rgba(159, 166, 198, 0.3019607843)));
20
+ border-style:solid;
21
+ border-width:var(--sn-primitive-strokeWeight-strokeRegular, 1px);
22
+ }
23
+ .itemWrapper .stateLayer[data-state=emptyNeutralOnBackground]{
24
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-defaultEmpty-filled, var(--sn-brand-color-state-neutral-forLightMode-default-background, rgba(120, 123, 138, 0)));
25
+ }
26
+ .itemWrapper .stateLayer[data-state=activatedOnBackground]{
27
+ background:var(--sn-theme-color-material-stateLayer-activated-default-filled, var(--sn-brand-color-state-activated-default-background, var(--sn-brandRole-color-brandA-backgroundActivatedDefault, rgba(56, 159, 116, 0.1490196078))));
28
+ }
29
+ .itemWrapper .stateLayer[data-state=versionOnColor]{
30
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-default-filled, rgba(0, 0, 0, 0.0509803922));
31
+ }
32
+ .itemWrapper .stateLayer[data-state=emptyVersionOnColor]{
33
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-defaultEmpty-filled, rgba(0, 0, 0, 0));
34
+ }
35
+ .itemWrapper .stateLayer[data-state=inversionOnColor]{
36
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-default-filled, rgba(255, 255, 255, 0.1019607843));
37
+ }
38
+ .itemWrapper .stateLayer[data-state=emptyInversionOnColor]{
39
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-defaultEmpty-filled, rgba(255, 255, 255, 0));
40
+ }
41
+ .itemWrapper .stateLayer[data-state=emptyDarkOnAccent]{
42
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-defaultEmpty-filled, rgba(0, 0, 0, 0));
43
+ }
44
+ @media (hover: hover){
45
+ .itemWrapper:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=borderOnBackground]{
46
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-hovered-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-hovered-borderColor, rgba(159, 166, 198, 0.6509803922)));
47
+ }
48
+ .itemWrapper:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyNeutralOnBackground]{
49
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-hovered-filled, var(--sn-brand-color-state-neutral-forLightMode-hovered-background, rgba(188, 195, 220, 0.1490196078)));
50
+ }
51
+ .itemWrapper:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=activatedOnBackground]{
52
+ background:var(--sn-theme-color-material-stateLayer-activated-hovered-filled, var(--sn-brand-color-state-activated-hovered-background, var(--sn-brandRole-color-brandA-backgroundActivatedHovered, rgba(56, 159, 116, 0.3490196078))));
53
+ }
54
+ .itemWrapper:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=versionOnColor]{
55
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-hovered-filled, rgba(0, 0, 0, 0.1019607843));
56
+ }
57
+ .itemWrapper:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyVersionOnColor]{
58
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-hovered-filled, rgba(0, 0, 0, 0.1019607843));
59
+ }
60
+ .itemWrapper:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=inversionOnColor]{
61
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-hovered-filled, rgba(255, 255, 255, 0.1490196078));
62
+ }
63
+ .itemWrapper:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyInversionOnColor]{
64
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-hovered-filled, rgba(255, 255, 255, 0.1490196078));
65
+ }
66
+ .itemWrapper:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyDarkOnAccent]{
67
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-hovered-filled, rgba(0, 0, 0, 0.0588235294));
68
+ }
69
+ }
70
+ .itemWrapper{
71
+ }
72
+ .itemWrapper[data-loading] .stateLayer[data-state=borderOnBackground], .itemWrapper:active:not([data-disabled], [data-loading]) .stateLayer[data-state=borderOnBackground], .itemWrapper[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=borderOnBackground]{
73
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-pressed-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-pressed-borderColor, rgba(159, 166, 198, 0.8)));
74
+ }
75
+ .itemWrapper[data-loading] .stateLayer[data-state=emptyNeutralOnBackground], .itemWrapper:active:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyNeutralOnBackground], .itemWrapper[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyNeutralOnBackground]{
76
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-pressed-filled, var(--sn-brand-color-state-neutral-forLightMode-pressed-background, rgba(188, 195, 220, 0.3019607843)));
77
+ }
78
+ .itemWrapper[data-loading] .stateLayer[data-state=activatedOnBackground], .itemWrapper:active:not([data-disabled], [data-loading]) .stateLayer[data-state=activatedOnBackground], .itemWrapper[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=activatedOnBackground]{
79
+ background:var(--sn-theme-color-material-stateLayer-activated-pressed-filled, var(--sn-brand-color-state-activated-pressed-background, var(--sn-brandRole-color-brandA-backgroundActivatedPressed, rgba(56, 159, 116, 0.4509803922))));
80
+ }
81
+ .itemWrapper[data-loading] .stateLayer[data-state=versionOnColor], .itemWrapper:active:not([data-disabled], [data-loading]) .stateLayer[data-state=versionOnColor], .itemWrapper[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=versionOnColor]{
82
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-pressed-filled, rgba(0, 0, 0, 0.1490196078));
83
+ }
84
+ .itemWrapper[data-loading] .stateLayer[data-state=emptyVersionOnColor], .itemWrapper:active:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyVersionOnColor], .itemWrapper[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyVersionOnColor]{
85
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-pressed-filled, rgba(0, 0, 0, 0.1490196078));
86
+ }
87
+ .itemWrapper[data-loading] .stateLayer[data-state=inversionOnColor], .itemWrapper:active:not([data-disabled], [data-loading]) .stateLayer[data-state=inversionOnColor], .itemWrapper[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=inversionOnColor]{
88
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-pressed-filled, rgba(255, 255, 255, 0.0509803922));
89
+ }
90
+ .itemWrapper[data-loading] .stateLayer[data-state=emptyInversionOnColor], .itemWrapper:active:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyInversionOnColor], .itemWrapper[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyInversionOnColor]{
91
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-pressed-filled, rgba(255, 255, 255, 0.0509803922));
92
+ }
93
+ .itemWrapper[data-loading] .stateLayer[data-state=emptyDarkOnAccent], .itemWrapper:active:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyDarkOnAccent], .itemWrapper[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyDarkOnAccent]{
94
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-pressed-filled, rgba(0, 0, 0, 0.1215686275));
95
+ }
96
+ .itemWrapper[data-disabled], .itemWrapper:disabled{
97
+ cursor:not-allowed;
98
+ background-color:transparent;
99
+ outline:none;
100
+ }
101
+ .itemWrapper:not([data-inactive], [data-disabled])[data-open] .stateLayer[data-state=emptyNeutralOnBackground], .itemWrapper:not([data-inactive], [data-disabled])[data-focused] .stateLayer[data-state=emptyNeutralOnBackground]{
102
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-hovered-filled, var(--sn-brand-color-state-neutral-forLightMode-hovered-background, rgba(188, 195, 220, 0.1490196078)));
103
+ }
104
+ .itemWrapper:not([data-inactive], [data-disabled])[data-open] .stateLayer[data-state=activatedOnBackground], .itemWrapper:not([data-inactive], [data-disabled])[data-focused] .stateLayer[data-state=activatedOnBackground]{
105
+ background:var(--sn-theme-color-material-stateLayer-activated-hovered-filled, var(--sn-brand-color-state-activated-hovered-background, var(--sn-brandRole-color-brandA-backgroundActivatedHovered, rgba(56, 159, 116, 0.3490196078))));
106
+ }
107
+ .itemWrapper:not([data-inactive], [data-disabled]):active .stateLayer[data-state=emptyNeutralOnBackground]{
108
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-pressed-filled, var(--sn-brand-color-state-neutral-forLightMode-pressed-background, rgba(188, 195, 220, 0.3019607843)));
109
+ }
110
+ .itemWrapper:not([data-inactive], [data-disabled]):active .stateLayer[data-state=activatedOnBackground]{
111
+ background:var(--sn-theme-color-material-stateLayer-activated-pressed-filled, var(--sn-brand-color-state-activated-pressed-background, var(--sn-brandRole-color-brandA-backgroundActivatedPressed, rgba(56, 159, 116, 0.4509803922))));
112
+ }
113
+ .itemWrapper[data-inactive]:hover .stateLayer[data-state=emptyNeutralOnBackground],
114
+ .itemWrapper[data-inactive]:hover .stateLayer[data-state=activatedOnBackground],
115
+ .itemWrapper[data-inactive]:active .stateLayer[data-state=emptyNeutralOnBackground],
116
+ .itemWrapper[data-inactive]:active .stateLayer[data-state=activatedOnBackground]{
117
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-defaultEmpty-filled, var(--sn-brand-color-state-neutral-forLightMode-default-background, rgba(120, 123, 138, 0)));
118
+ }
119
+
120
+ .listItem{
121
+ cursor:pointer;
122
+ position:relative;
123
+ display:flex;
124
+ flex-direction:row;
125
+ align-items:flex-start;
126
+ box-sizing:border-box;
127
+ width:-moz-max-content;
128
+ width:max-content;
129
+ min-width:100%;
130
+ margin:0;
131
+ padding:0;
132
+ border:none;
133
+ color:var(--sn-theme-color-available-version-textMain, var(--sn-brand-color-text-version-main, #41424e));
134
+ text-align:start;
135
+ -webkit-appearance:unset;
136
+ -moz-appearance:unset;
137
+ appearance:unset;
138
+ background-color:transparent;
139
+ outline:none;
140
+ }
141
+ .listItem[data-size=s]{
142
+ padding-left:var(--sn-list-anatomy-size-s-listItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-s, var(--sn-primitive-dimension-12, 12px)));
143
+ padding-right:var(--sn-list-anatomy-size-s-listItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-s, var(--sn-primitive-dimension-12, 12px)));
144
+ gap:var(--sn-list-anatomy-size-s-listItem-gap, var(--sn-density-spacing-control-wrapper-horizontal-s, var(--sn-primitive-dimension-8, 8px)));
145
+ padding-top:var(--sn-list-anatomy-size-s-listItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-s, var(--sn-primitive-dimension-6, 6px)));
146
+ padding-bottom:var(--sn-list-anatomy-size-s-listItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-s, var(--sn-primitive-dimension-6, 6px)));
147
+ border-radius:var(--sn-list-anatomy-size-s-listItem-borderRadius, var(--sn-brand-anatomy-radius-listItem-s, var(--sn-primitive-dimension-0, 0px)));
148
+ }
149
+ .listItem[data-size=m]{
150
+ padding-left:var(--sn-list-anatomy-size-m-listItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-m, var(--sn-primitive-dimension-16, 16px)));
151
+ padding-right:var(--sn-list-anatomy-size-m-listItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-m, var(--sn-primitive-dimension-16, 16px)));
152
+ gap:var(--sn-list-anatomy-size-m-listItem-gap, var(--sn-density-spacing-control-wrapper-horizontal-m, var(--sn-primitive-dimension-8, 8px)));
153
+ padding-top:var(--sn-list-anatomy-size-m-listItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-m, var(--sn-primitive-dimension-8, 8px)));
154
+ padding-bottom:var(--sn-list-anatomy-size-m-listItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-m, var(--sn-primitive-dimension-8, 8px)));
155
+ border-radius:var(--sn-list-anatomy-size-m-listItem-borderRadius, var(--sn-brand-anatomy-radius-listItem-s, var(--sn-primitive-dimension-0, 0px)));
156
+ }
157
+ .listItem[data-size=l]{
158
+ padding-left:var(--sn-list-anatomy-size-l-listItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-l, var(--sn-primitive-dimension-20, 20px)));
159
+ padding-right:var(--sn-list-anatomy-size-l-listItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-l, var(--sn-primitive-dimension-20, 20px)));
160
+ gap:var(--sn-list-anatomy-size-l-listItem-gap, var(--sn-density-spacing-control-wrapper-horizontal-l, var(--sn-primitive-dimension-12, 12px)));
161
+ padding-top:var(--sn-list-anatomy-size-l-listItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-l, var(--sn-primitive-dimension-10, 10px)));
162
+ padding-bottom:var(--sn-list-anatomy-size-l-listItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-l, var(--sn-primitive-dimension-10, 10px)));
163
+ border-radius:var(--sn-list-anatomy-size-l-listItem-borderRadius, var(--sn-brand-anatomy-radius-listItem-l, var(--sn-primitive-dimension-0, 0px)));
164
+ }
165
+ .listItem:not([data-inactive], [data-disabled])[data-focused], .listItem:not([data-inactive], [data-disabled]):focus-visible{
166
+ outline:var(--sn-theme-color-available-complementary, #000000) solid var(--sn-primitive-strokeWeight-strokeSemiBold, 2px);
167
+ outline-offset:calc(0px - var(--sn-primitive-strokeWeight-strokeSemiBold, 2px));
168
+ }
@@ -0,0 +1,168 @@
1
+ import { TruncateStringProps } from '@cloud-ru/ds-truncate-string';
2
+ import { WithSupportProps } from '@cloud-ru/ds-utils';
3
+ import { FocusEvent, KeyboardEvent, MouseEvent, ReactNode, RefObject } from 'react';
4
+ import { ITEM_TYPE } from '../../constants.js';
5
+ import { ItemContentProps } from '../../helperComponents/index.js';
6
+ import { ItemType, ScrollProps } from '../../types.js';
7
+ /** Идентификатор элемента списка */
8
+ export type ItemId = string | number;
9
+ type ItemContent = ItemContentProps;
10
+ export type BaseItem = WithSupportProps<{
11
+ /**
12
+ * Слот до основного контента
13
+ * @type ReactElement
14
+ */
15
+ beforeContent?: ReactNode;
16
+ /**
17
+ * Слот после основного контента
18
+ * @type ReactElement
19
+ */
20
+ afterContent?: ReactNode;
21
+ /**
22
+ * Основной контент айтема
23
+ */
24
+ content?: ItemContent | ReactNode;
25
+ /** Колбек обработки клика */
26
+ onClick?(e: MouseEvent<HTMLElement>): void;
27
+ /** Колбек обработки нажатия кнопки мыши */
28
+ onMouseDown?(e: MouseEvent<HTMLElement>): void;
29
+ /** Колбек обработки нажатия клавиши */
30
+ onKeyDown?(e: KeyboardEvent<HTMLElement>): void;
31
+ /** Колбек обработки фокуса */
32
+ onFocus?(e: FocusEvent<HTMLElement>): void;
33
+ /** Колбек обработки блюра */
34
+ onBlur?(e: FocusEvent<HTMLElement>): void;
35
+ /** Уникальный идентификатор */
36
+ id?: ItemId;
37
+ /** Флаг неактивности элемента */
38
+ disabled?: boolean;
39
+ /** Скрыть элемент из списка (не рендерится и выпадает из навигации) */
40
+ hidden?: boolean;
41
+ /** Ссылка на DOM-элемент айтема */
42
+ itemRef?: RefObject<HTMLElement>;
43
+ /** CSS-класс */
44
+ className?: string;
45
+ /**
46
+ * Флаг отображения отключения реакции на любое css состояние (hover/focus и тд)
47
+ * <br>
48
+ * Так же элемент пропадает из навигации с клавиатуры, и не может быть выбран (selection)
49
+ */
50
+ inactive?: boolean;
51
+ /**
52
+ * Флаг отображения состояния выбранного элемента через switch
53
+ */
54
+ switch?: boolean;
55
+ /**
56
+ * Флаг отображения иконки у чекбоксов
57
+ */
58
+ showSwitchIcon?: boolean;
59
+ /** Рендер-обёртка вокруг айтема (например, для проксирования в `Tooltip`/`Link`) */
60
+ itemWrapRender?(item: ReactNode): ReactNode;
61
+ /** Управляемое состояние выбранности айтема */
62
+ checked?: boolean;
63
+ }>;
64
+ type BaseItemWithoutNonGroup = Omit<BaseItem, 'switch' | 'inactive'>;
65
+ export type Item = BaseItem | AccordionItem | NextListItem | GroupItem | GroupSelectItem;
66
+ export type AccordionItem = BaseItemWithoutNonGroup & {
67
+ items: Item[];
68
+ type: typeof ITEM_TYPE.Collapse;
69
+ };
70
+ export type NextListItem = BaseItemWithoutNonGroup & ScrollProps & {
71
+ items: Item[];
72
+ type: typeof ITEM_TYPE.NextList;
73
+ /** Колбек смены состояния вложенного списка (открыт/закрыт) */
74
+ onSublistOpenChanged?(open: boolean, id?: ItemId): void;
75
+ /** Состояние загрузки вложенного списка — показывается спиннер вместо элементов */
76
+ loading?: boolean;
77
+ /** Загрузка вложенного списка завершилась ошибкой — показывается `errorDataState` */
78
+ dataError?: boolean;
79
+ /** Вложенный список отфильтрован — пустой результат показывает `noResultsState`, а не `noDataState` */
80
+ dataFiltered?: boolean;
81
+ /** Сторона, с которой раскрывается вложенный список относительно элемента */
82
+ placement?: 'right-start' | 'left-start' | 'left' | 'right' | 'left-end' | 'right-end';
83
+ };
84
+ type CommonGroupItem = {
85
+ /** Заголовок группы */
86
+ label?: string;
87
+ /** Слот иконки слева от label. */
88
+ beforeContent?: ReactNode;
89
+ /** Настройки усечения длинного заголовка группы */
90
+ truncate?: {
91
+ variant?: TruncateStringProps['variant'];
92
+ };
93
+ /** Визуальный стиль заголовка группы */
94
+ groupVariant?: 'subtitle' | 'subtitleTertiary';
95
+ /** Скрыть группу из списка */
96
+ hidden?: boolean;
97
+ /** Показать разделитель над группой */
98
+ divider?: boolean;
99
+ };
100
+ export type GroupItem = CommonGroupItem & {
101
+ items: Item[];
102
+ type: typeof ITEM_TYPE.Group;
103
+ };
104
+ export type GroupSelectItem = CommonGroupItem & {
105
+ items: Item[];
106
+ type: typeof ITEM_TYPE.GroupSelect;
107
+ selectButtonLabel?: string;
108
+ id?: ItemId;
109
+ itemRef?: RefObject<HTMLElement>;
110
+ };
111
+ type RequiredFields<T, K extends keyof T> = Required<Pick<T, K>> & Omit<T, K>;
112
+ export type Flatten<T, K extends keyof T> = RequiredFields<T, K>;
113
+ export type CommonFlattenProps = {
114
+ items: ItemId[];
115
+ allChildIds: ItemId[];
116
+ };
117
+ export type FlattenBaseItem = Flatten<BaseItem, 'id'>;
118
+ export type FlattenNextListItem = Flatten<Omit<NextListItem, 'items'>, 'id'>;
119
+ export type FlattenGroupListItem = Omit<GroupItem, 'items'> & {
120
+ id: ItemId;
121
+ };
122
+ export type FlattenGroupSelectListItem = Flatten<Omit<GroupSelectItem, 'items'>, 'id'>;
123
+ export type FlattenAccordionItem = Flatten<Omit<AccordionItem, 'items'>, 'id'>;
124
+ /**
125
+ * Строка `List`/`Droplist` в режиме drag&drop-переупорядочивания (проп `onItemsReorder`) —
126
+ * облегчённый аналог `BaseItem` без `type`-дискриминатора и без вложенности: не поддерживает
127
+ * `collapse`/`group-select`/`next-list`. `id` обязателен (нужен `@dnd-kit` как identity
128
+ * сортируемого элемента). Верхний уровень reorder-дерева описывает `ReorderItem` (строка или
129
+ * группа с заголовком); переупорядочивание идёт только среди «братьев» — строк одного уровня
130
+ * (внутри одной группы либо между строками без группы), перенос между группами не поддерживается,
131
+ * см. `reorderReorderItems`.
132
+ *
133
+ * `disabled` блокирует выбор, `Switch` и клик, но **не** ручку перетаскивания — порядок можно менять и у
134
+ * задизейбленных строк.
135
+ */
136
+ export type SimpleItem = Flatten<BaseItem, 'id'>;
137
+ /**
138
+ * Группа reorder-режима: заголовок (`label` и остальные поля `GroupItem`) + сортируемые строки
139
+ * `items`. Строки переставляются **внутри** группы, а сама группа переставляется среди других
140
+ * групп верхнего уровня (за ручку на заголовке) — поэтому у группы обязателен `id` (identity для
141
+ * `@dnd-kit`). Вложенность ограничена одним уровнем: в `items` только листовые `SimpleItem`.
142
+ */
143
+ export type SimpleGroupItem = CommonGroupItem & {
144
+ /** Идентификатор группы — нужен `@dnd-kit` для переупорядочивания групп между собой. */
145
+ id: ItemId;
146
+ items: SimpleItem[];
147
+ type: typeof ITEM_TYPE.Group;
148
+ };
149
+ /** Верхнеуровневый элемент reorder-дерева (`onItemsReorder`): строка или группа с заголовком. */
150
+ export type ReorderItem = SimpleItem | SimpleGroupItem;
151
+ export type FlattenSimpleItem = FlattenBaseItem & CommonFlattenProps;
152
+ export type FlattenItem = FlattenBaseItem | ((FlattenNextListItem | FlattenGroupListItem | FlattenAccordionItem | FlattenGroupSelectListItem | FlattenSimpleItem) & CommonFlattenProps);
153
+ export type FocusFlattenItem = {
154
+ key: ItemId;
155
+ id: ItemId;
156
+ originalId: ItemId;
157
+ parentId?: ItemId;
158
+ itemRef?: RefObject<HTMLElement>;
159
+ type?: ItemType;
160
+ disabled?: boolean;
161
+ } & CommonFlattenProps;
162
+ export type ItemProps = Item;
163
+ export type BaseItemProps = BaseItem;
164
+ export type GroupItemProps = GroupItem;
165
+ export type NextListItemProps = NextListItem;
166
+ export type AccordionItemProps = AccordionItem;
167
+ export type GroupSelectItemProps = GroupSelectItem;
168
+ export {};
@@ -0,0 +1 @@
1
+ export {};