@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,233 @@
1
+ import { useHierarchicalSelection } from '@cloud-ru/ds-utils';
2
+ import { createRef, RefObject, useMemo } from 'react';
3
+
4
+ import { ITEM_PREFIXES } from '../../constants';
5
+ import { Separator } from '../../helperComponents';
6
+ import { getFooterItemId } from '../../utils';
7
+ import { useNewListContext, useSelectionContext } from '../Lists/contexts';
8
+ import { AccordionItem } from './AccordionItem';
9
+ import { BaseItem } from './BaseItem';
10
+ import { GroupSelectItem } from './GroupSelectItem';
11
+ import { NextListItem } from './NextListItem';
12
+ import { SimpleGroupBlock, SimpleItem } from './SimpleItem';
13
+ import {
14
+ Flatten,
15
+ FlattenAccordionItem,
16
+ FlattenBaseItem,
17
+ FlattenGroupSelectListItem,
18
+ FlattenItem,
19
+ FlattenNextListItem,
20
+ FlattenSimpleItem,
21
+ FocusFlattenItem,
22
+ ItemId,
23
+ } from './types';
24
+ import { isAccordionItem, isGroupItem, isGroupSelectItem, isNextListItem, isSimpleItem } from './utils';
25
+
26
+ type GetRenderItemsProps = {
27
+ focusCloseChildIds?: ItemId[];
28
+ flattenItems: Record<string, FlattenItem>;
29
+ focusFlattenItems: Record<string, FocusFlattenItem>;
30
+ isSelectionMultiple?: boolean;
31
+ /**
32
+ * Id группы-родителя для строк режима переупорядочивания — передаётся в `data` `useSortable`
33
+ * (kind=row).
34
+ */
35
+ groupId?: ItemId;
36
+ };
37
+
38
+ function getRenderItems({
39
+ focusCloseChildIds,
40
+ focusFlattenItems,
41
+ flattenItems,
42
+ isSelectionMultiple,
43
+ groupId,
44
+ }: GetRenderItemsProps): (JSX.Element | null)[] {
45
+ if (!focusCloseChildIds) {
46
+ return [null];
47
+ }
48
+
49
+ return focusCloseChildIds.flatMap(id => {
50
+ const { itemRef, key, originalId, items } = focusFlattenItems[id];
51
+
52
+ const flattenItem = flattenItems[originalId];
53
+
54
+ if (
55
+ isGroupItem(flattenItem) ||
56
+ (!isSelectionMultiple && isGroupSelectItem<FlattenGroupSelectListItem>(flattenItem))
57
+ ) {
58
+ // Группа в reorder-режиме: её строки размечены `type: Simple`. Заголовок + строки оборачиваются
59
+ // в единый сортируемый блок `SimpleGroupBlock` — за ручку заголовка группа перетаскивается
60
+ // целиком (строки едут вместе), а строки внутри блока переставляются собственным
61
+ // `SortableContext`. Переупорядочивание строго по уровням, см. `reorderReorderItems`.
62
+ const sortableChildIds = items
63
+ .map(focusId => focusFlattenItems[focusId]?.originalId)
64
+ .filter((childId): childId is ItemId => {
65
+ const child = childId != null ? flattenItems[childId] : undefined;
66
+ return Boolean(child && isSimpleItem(child));
67
+ });
68
+
69
+ const isSortableGroup = isGroupItem(flattenItem) && sortableChildIds.length > 0;
70
+
71
+ const innerItemsJSX = getRenderItems({
72
+ focusCloseChildIds: items,
73
+ focusFlattenItems,
74
+ flattenItems,
75
+ isSelectionMultiple,
76
+ groupId: isSortableGroup ? originalId : groupId,
77
+ });
78
+
79
+ if (isSortableGroup) {
80
+ return (
81
+ <SimpleGroupBlock
82
+ id={originalId}
83
+ label={flattenItem.label}
84
+ beforeContent={flattenItem.beforeContent}
85
+ truncate={flattenItem.truncate}
86
+ divider={flattenItem.divider}
87
+ groupVariant={flattenItem.groupVariant}
88
+ rowIds={sortableChildIds}
89
+ key={key}
90
+ >
91
+ {innerItemsJSX}
92
+ </SimpleGroupBlock>
93
+ );
94
+ }
95
+
96
+ return [
97
+ <Separator
98
+ label={flattenItem.label}
99
+ beforeContent={flattenItem.beforeContent}
100
+ truncate={flattenItem.truncate}
101
+ divider={flattenItem.divider}
102
+ groupVariant={flattenItem.groupVariant}
103
+ key={key + '_separator'}
104
+ />,
105
+ ...innerItemsJSX,
106
+ ];
107
+ }
108
+ if (isGroupSelectItem<FlattenGroupSelectListItem>(flattenItem)) {
109
+ return <GroupSelectItem {...flattenItem} items={items} itemRef={itemRef} key={key} />;
110
+ }
111
+ if (isAccordionItem<FlattenAccordionItem>(flattenItem)) {
112
+ return <AccordionItem {...flattenItem} items={items} itemRef={itemRef} key={key} />;
113
+ }
114
+ if (isNextListItem<FlattenNextListItem>(flattenItem)) {
115
+ return <NextListItem {...flattenItem} focusId={id} items={items} itemRef={itemRef} key={key} />;
116
+ }
117
+ if (isSimpleItem<FlattenSimpleItem>(flattenItem)) {
118
+ return <SimpleItem {...flattenItem} items={items} itemRef={itemRef} groupId={groupId} key={key} />;
119
+ }
120
+
121
+ return <BaseItem {...flattenItem} itemRef={itemRef} key={key} />;
122
+ });
123
+ }
124
+
125
+ export function useRenderItems(focusCloseChildIds?: ItemId[]) {
126
+ const { focusFlattenItems, flattenItems } = useNewListContext();
127
+ const { isSelectionMultiple } = useSelectionContext();
128
+
129
+ return useMemo(
130
+ () => getRenderItems({ flattenItems, focusFlattenItems, focusCloseChildIds, isSelectionMultiple }),
131
+ [flattenItems, focusCloseChildIds, focusFlattenItems, isSelectionMultiple],
132
+ );
133
+ }
134
+
135
+ type UseCreateBaseItemsProps = {
136
+ search?: boolean;
137
+ footerActiveElementsRefs?: RefObject<HTMLElement>[];
138
+ };
139
+
140
+ export function useCreateBaseItems({ footerActiveElementsRefs }: UseCreateBaseItemsProps): {
141
+ searchItem: Flatten<FlattenBaseItem, 'itemRef'>;
142
+ footerItems: Flatten<FlattenBaseItem, 'itemRef'>[];
143
+ } {
144
+ return useMemo(
145
+ () => ({
146
+ searchItem: {
147
+ itemRef: createRef<HTMLInputElement>(),
148
+ id: ITEM_PREFIXES.search,
149
+ parentId: ITEM_PREFIXES.default,
150
+ items: [],
151
+ allChildIds: [],
152
+ },
153
+ footerItems:
154
+ footerActiveElementsRefs?.map((itemRef, idx) => ({
155
+ id: getFooterItemId(idx),
156
+ itemRef,
157
+ parentId: ITEM_PREFIXES.default,
158
+ items: [],
159
+ allChildIds: [],
160
+ })) ?? [],
161
+ }),
162
+ [footerActiveElementsRefs],
163
+ );
164
+ }
165
+
166
+ type UseGroupItemSelectionProps = {
167
+ allChildIds: ItemId[];
168
+ items: ItemId[];
169
+ id: ItemId;
170
+ disabled?: boolean;
171
+ };
172
+
173
+ export function useGroupItemSelection({ id, allChildIds }: UseGroupItemSelectionProps) {
174
+ const selection = useSelectionContext();
175
+ const { value, isSelectionMultiple } = selection;
176
+ const { getSelectionState, toggleSelection } = useHierarchicalSelection({ includeParentsInValue: false });
177
+ // group-select работает только в multiple-режиме — там setValue оперирует ItemId[].
178
+ const setMultipleValue = selection.isSelectionMultiple ? selection.setValue : undefined;
179
+ const { flattenItems } = useNewListContext();
180
+
181
+ const baseChildIds = useMemo(
182
+ () =>
183
+ allChildIds.filter(itemId => {
184
+ const item = flattenItems[itemId];
185
+
186
+ return item && !('type' in item);
187
+ }),
188
+ [allChildIds, flattenItems],
189
+ );
190
+
191
+ const enableChildIds = useMemo(
192
+ () =>
193
+ baseChildIds.filter(itemId => {
194
+ const item = flattenItems[itemId];
195
+
196
+ return item && !('type' in item) && !item.disabled;
197
+ }),
198
+ [baseChildIds, flattenItems],
199
+ );
200
+
201
+ const selectionState = useMemo(
202
+ () =>
203
+ isSelectionMultiple
204
+ ? getSelectionState({
205
+ nodeId: id,
206
+ childIds: baseChildIds,
207
+ selectedIds: value ?? [],
208
+ })
209
+ : undefined,
210
+ [baseChildIds, getSelectionState, id, isSelectionMultiple, value],
211
+ );
212
+
213
+ const checked = selectionState?.checked;
214
+ const indeterminate = isSelectionMultiple ? selectionState?.indeterminate : baseChildIds.includes(value ?? '');
215
+
216
+ const handleOnSelect = () => {
217
+ if (!isSelectionMultiple) {
218
+ return;
219
+ }
220
+
221
+ setMultipleValue?.(prev =>
222
+ toggleSelection({
223
+ nodeId: id,
224
+ descendantIds: baseChildIds,
225
+ selectableDescendantIds: enableChildIds,
226
+ childIds: baseChildIds,
227
+ selectedIds: prev ?? [],
228
+ }),
229
+ );
230
+ };
231
+
232
+ return { checked, indeterminate, handleOnSelect };
233
+ }
@@ -0,0 +1,5 @@
1
+ export * from './hooks';
2
+ export * from './types';
3
+ export * from './utils';
4
+ export * from './SearchItem';
5
+ export * from './PinGroupItem';
@@ -0,0 +1,107 @@
1
+ @use '@cloud-ru/ds-materials' as m;
2
+ @use '@cloud-ru/ds-figma-variables/build/scss/components/list.module' as list;
3
+ @use '@cloud-ru/ds-figma-variables/build/scss/styles/styles.module' as base;
4
+
5
+ $sizes: 's', 'm', 'l';
6
+
7
+ .stateLayer {
8
+ visibility: initial;
9
+ }
10
+
11
+ .itemWrapper {
12
+ position: relative;
13
+
14
+ // Локальный stacking context: запирает внутренние z-index'ы строки (state-layer, .listItem
15
+ // z-index:1, marker) внутри item'а, чтобы они не всплывали в контекст страницы поверх
16
+ // портальных overlay'ев.
17
+ z-index: 0;
18
+
19
+ min-width: 100%;
20
+ margin: 0;
21
+ padding: 0;
22
+
23
+ // Hover/pressed/focus через @cloud-ru/ds-materials state-layer (регулярный фон + активированный для selected single).
24
+ // data-state переключается в BaseItem.tsx: emptyNeutralOnBackground ↔ activatedOnBackground.
25
+ @include m.has-state-layer-as-child(#{stateLayer});
26
+
27
+ &[data-disabled],
28
+ &:disabled {
29
+ cursor: not-allowed;
30
+ background-color: transparent;
31
+ outline: none;
32
+ }
33
+
34
+ &:not([data-inactive], [data-disabled]) {
35
+ &[data-open],
36
+ &[data-focused] {
37
+ .stateLayer[data-state='emptyNeutralOnBackground'] {
38
+ background: base.$sn-theme-color-material-stateLayer-neutral-onBackground-hovered-filled;
39
+ }
40
+
41
+ .stateLayer[data-state='activatedOnBackground'] {
42
+ background: base.$sn-theme-color-material-stateLayer-activated-hovered-filled;
43
+ }
44
+ }
45
+
46
+ &:active {
47
+ .stateLayer[data-state='emptyNeutralOnBackground'] {
48
+ background: base.$sn-theme-color-material-stateLayer-neutral-onBackground-pressed-filled;
49
+ }
50
+
51
+ .stateLayer[data-state='activatedOnBackground'] {
52
+ background: base.$sn-theme-color-material-stateLayer-activated-pressed-filled;
53
+ }
54
+ }
55
+ }
56
+
57
+ // Миксин has-state-layer-as-child гасит hover/active state-layer только для
58
+ // data-disabled/data-loading. data-inactive — list-специфичный «неинтерактивный» флаг,
59
+ // миксин про него не знает → глушим state-layer и для него (перебиваем по специфичности).
60
+ &[data-inactive] {
61
+ &:hover,
62
+ &:active {
63
+ .stateLayer[data-state='emptyNeutralOnBackground'],
64
+ .stateLayer[data-state='activatedOnBackground'] {
65
+ background: base.$sn-theme-color-material-stateLayer-neutral-onBackground-defaultEmpty-filled;
66
+ }
67
+ }
68
+ }
69
+ }
70
+
71
+ .listItem {
72
+ cursor: pointer;
73
+
74
+ position: relative;
75
+
76
+ display: flex;
77
+ flex-direction: row;
78
+ align-items: flex-start;
79
+
80
+ box-sizing: border-box;
81
+ width: max-content;
82
+ min-width: 100%;
83
+ margin: 0;
84
+ padding: 0;
85
+ border: none;
86
+
87
+ color: base.$sn-theme-color-available-version-textMain;
88
+ text-align: start;
89
+
90
+ appearance: unset;
91
+ background-color: transparent;
92
+ outline: none;
93
+
94
+ @each $size in $sizes {
95
+ &[data-size='#{$size}'] {
96
+ @include base.composite-var(list.$list, 'anatomy', 'size', $size, 'listItem');
97
+ }
98
+ }
99
+
100
+ &:not([data-inactive], [data-disabled]) {
101
+ &[data-focused],
102
+ &:focus-visible {
103
+ outline: base.$sn-theme-color-available-complementary solid base.$sn-primitive-strokeWeight-strokeSemiBold;
104
+ outline-offset: calc(0px - base.$sn-primitive-strokeWeight-strokeSemiBold);
105
+ }
106
+ }
107
+ }
@@ -0,0 +1,203 @@
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
+
5
+ import { ITEM_TYPE } from '../../constants';
6
+ import { ItemContentProps } from '../../helperComponents';
7
+ import { ItemType, ScrollProps } from '../../types';
8
+
9
+ /** Идентификатор элемента списка */
10
+ export type ItemId = string | number;
11
+
12
+ type ItemContent = ItemContentProps;
13
+
14
+ export type BaseItem = WithSupportProps<{
15
+ /**
16
+ * Слот до основного контента
17
+ * @type ReactElement
18
+ */
19
+ beforeContent?: ReactNode;
20
+ /**
21
+ * Слот после основного контента
22
+ * @type ReactElement
23
+ */
24
+ afterContent?: ReactNode;
25
+ /**
26
+ * Основной контент айтема
27
+ */
28
+ content?: ItemContent | ReactNode;
29
+ /** Колбек обработки клика */
30
+ onClick?(e: MouseEvent<HTMLElement>): void;
31
+ /** Колбек обработки нажатия кнопки мыши */
32
+ onMouseDown?(e: MouseEvent<HTMLElement>): void;
33
+ /** Колбек обработки нажатия клавиши */
34
+ onKeyDown?(e: KeyboardEvent<HTMLElement>): void;
35
+ /** Колбек обработки фокуса */
36
+ onFocus?(e: FocusEvent<HTMLElement>): void;
37
+ /** Колбек обработки блюра */
38
+ onBlur?(e: FocusEvent<HTMLElement>): void;
39
+ /** Уникальный идентификатор */
40
+ id?: ItemId;
41
+ /** Флаг неактивности элемента */
42
+ disabled?: boolean;
43
+ /** Скрыть элемент из списка (не рендерится и выпадает из навигации) */
44
+ hidden?: boolean;
45
+ /** Ссылка на DOM-элемент айтема */
46
+ itemRef?: RefObject<HTMLElement>;
47
+ /** CSS-класс */
48
+ className?: string;
49
+ /**
50
+ * Флаг отображения отключения реакции на любое css состояние (hover/focus и тд)
51
+ * <br>
52
+ * Так же элемент пропадает из навигации с клавиатуры, и не может быть выбран (selection)
53
+ */
54
+ inactive?: boolean;
55
+ /**
56
+ * Флаг отображения состояния выбранного элемента через switch
57
+ */
58
+ switch?: boolean;
59
+ /**
60
+ * Флаг отображения иконки у чекбоксов
61
+ */
62
+ showSwitchIcon?: boolean;
63
+ /** Рендер-обёртка вокруг айтема (например, для проксирования в `Tooltip`/`Link`) */
64
+ itemWrapRender?(item: ReactNode): ReactNode;
65
+ /** Управляемое состояние выбранности айтема */
66
+ checked?: boolean;
67
+ }>;
68
+
69
+ type BaseItemWithoutNonGroup = Omit<BaseItem, 'switch' | 'inactive'>;
70
+
71
+ export type Item = BaseItem | AccordionItem | NextListItem | GroupItem | GroupSelectItem;
72
+
73
+ export type AccordionItem = BaseItemWithoutNonGroup & {
74
+ items: Item[];
75
+ type: typeof ITEM_TYPE.Collapse;
76
+ };
77
+
78
+ export type NextListItem = BaseItemWithoutNonGroup &
79
+ ScrollProps & {
80
+ items: Item[];
81
+ type: typeof ITEM_TYPE.NextList;
82
+
83
+ /** Колбек смены состояния вложенного списка (открыт/закрыт) */
84
+ onSublistOpenChanged?(open: boolean, id?: ItemId): void;
85
+
86
+ /** Состояние загрузки вложенного списка — показывается спиннер вместо элементов */
87
+ loading?: boolean;
88
+ /** Загрузка вложенного списка завершилась ошибкой — показывается `errorDataState` */
89
+ dataError?: boolean;
90
+ /** Вложенный список отфильтрован — пустой результат показывает `noResultsState`, а не `noDataState` */
91
+ dataFiltered?: boolean;
92
+
93
+ /** Сторона, с которой раскрывается вложенный список относительно элемента */
94
+ placement?: 'right-start' | 'left-start' | 'left' | 'right' | 'left-end' | 'right-end';
95
+ };
96
+
97
+ type CommonGroupItem = {
98
+ /** Заголовок группы */
99
+ label?: string;
100
+ /** Слот иконки слева от label. */
101
+ beforeContent?: ReactNode;
102
+ /** Настройки усечения длинного заголовка группы */
103
+ truncate?: {
104
+ variant?: TruncateStringProps['variant'];
105
+ };
106
+ /** Визуальный стиль заголовка группы */
107
+ groupVariant?: 'subtitle' | 'subtitleTertiary';
108
+ /** Скрыть группу из списка */
109
+ hidden?: boolean;
110
+ /** Показать разделитель над группой */
111
+ divider?: boolean;
112
+ };
113
+
114
+ export type GroupItem = CommonGroupItem & {
115
+ items: Item[];
116
+ type: typeof ITEM_TYPE.Group;
117
+ };
118
+
119
+ export type GroupSelectItem = CommonGroupItem & {
120
+ items: Item[];
121
+ type: typeof ITEM_TYPE.GroupSelect;
122
+ selectButtonLabel?: string;
123
+
124
+ id?: ItemId;
125
+ itemRef?: RefObject<HTMLElement>;
126
+ };
127
+
128
+ type RequiredFields<T, K extends keyof T> = Required<Pick<T, K>> & Omit<T, K>;
129
+ export type Flatten<T, K extends keyof T> = RequiredFields<T, K>;
130
+
131
+ export type CommonFlattenProps = {
132
+ items: ItemId[];
133
+ allChildIds: ItemId[];
134
+ };
135
+
136
+ export type FlattenBaseItem = Flatten<BaseItem, 'id'>;
137
+ export type FlattenNextListItem = Flatten<Omit<NextListItem, 'items'>, 'id'>;
138
+ export type FlattenGroupListItem = Omit<GroupItem, 'items'> & { id: ItemId };
139
+ export type FlattenGroupSelectListItem = Flatten<Omit<GroupSelectItem, 'items'>, 'id'>;
140
+ export type FlattenAccordionItem = Flatten<Omit<AccordionItem, 'items'>, 'id'>;
141
+
142
+ /**
143
+ * Строка `List`/`Droplist` в режиме drag&drop-переупорядочивания (проп `onItemsReorder`) —
144
+ * облегчённый аналог `BaseItem` без `type`-дискриминатора и без вложенности: не поддерживает
145
+ * `collapse`/`group-select`/`next-list`. `id` обязателен (нужен `@dnd-kit` как identity
146
+ * сортируемого элемента). Верхний уровень reorder-дерева описывает `ReorderItem` (строка или
147
+ * группа с заголовком); переупорядочивание идёт только среди «братьев» — строк одного уровня
148
+ * (внутри одной группы либо между строками без группы), перенос между группами не поддерживается,
149
+ * см. `reorderReorderItems`.
150
+ *
151
+ * `disabled` блокирует выбор, `Switch` и клик, но **не** ручку перетаскивания — порядок можно менять и у
152
+ * задизейбленных строк.
153
+ */
154
+ export type SimpleItem = Flatten<BaseItem, 'id'>;
155
+
156
+ /**
157
+ * Группа reorder-режима: заголовок (`label` и остальные поля `GroupItem`) + сортируемые строки
158
+ * `items`. Строки переставляются **внутри** группы, а сама группа переставляется среди других
159
+ * групп верхнего уровня (за ручку на заголовке) — поэтому у группы обязателен `id` (identity для
160
+ * `@dnd-kit`). Вложенность ограничена одним уровнем: в `items` только листовые `SimpleItem`.
161
+ */
162
+ export type SimpleGroupItem = CommonGroupItem & {
163
+ /** Идентификатор группы — нужен `@dnd-kit` для переупорядочивания групп между собой. */
164
+ id: ItemId;
165
+ items: SimpleItem[];
166
+ type: typeof ITEM_TYPE.Group;
167
+ };
168
+
169
+ /** Верхнеуровневый элемент reorder-дерева (`onItemsReorder`): строка или группа с заголовком. */
170
+ export type ReorderItem = SimpleItem | SimpleGroupItem;
171
+
172
+ export type FlattenSimpleItem = FlattenBaseItem & CommonFlattenProps;
173
+
174
+ export type FlattenItem =
175
+ | FlattenBaseItem
176
+ | ((
177
+ | FlattenNextListItem
178
+ | FlattenGroupListItem
179
+ | FlattenAccordionItem
180
+ | FlattenGroupSelectListItem
181
+ | FlattenSimpleItem
182
+ ) &
183
+ CommonFlattenProps);
184
+
185
+ export type FocusFlattenItem = {
186
+ key: ItemId;
187
+ id: ItemId;
188
+
189
+ originalId: ItemId;
190
+ parentId?: ItemId;
191
+
192
+ itemRef?: RefObject<HTMLElement>;
193
+ type?: ItemType;
194
+
195
+ disabled?: boolean;
196
+ } & CommonFlattenProps;
197
+
198
+ export type ItemProps = Item;
199
+ export type BaseItemProps = BaseItem;
200
+ export type GroupItemProps = GroupItem;
201
+ export type NextListItemProps = NextListItem;
202
+ export type AccordionItemProps = AccordionItem;
203
+ export type GroupSelectItemProps = GroupSelectItem;