@cloud-ru/ds-uikit-product-page-layout 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 (385) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +201 -0
  3. package/README.md +943 -0
  4. package/dist/cjs/components/Actions/ActionView.d.ts +17 -0
  5. package/dist/cjs/components/Actions/ActionView.js +53 -0
  6. package/dist/cjs/components/Actions/DesktopActions.d.ts +10 -0
  7. package/dist/cjs/components/Actions/DesktopActions.js +26 -0
  8. package/dist/cjs/components/Actions/MobileActions.d.ts +10 -0
  9. package/dist/cjs/components/Actions/MobileActions.js +121 -0
  10. package/dist/cjs/components/Actions/buttons/ButtonDroplist.d.ts +11 -0
  11. package/dist/cjs/components/Actions/buttons/ButtonDroplist.js +21 -0
  12. package/dist/cjs/components/Actions/buttons/ButtonKebab.d.ts +7 -0
  13. package/dist/cjs/components/Actions/buttons/ButtonKebab.js +15 -0
  14. package/dist/cjs/components/Actions/buttons/ButtonQuota.d.ts +12 -0
  15. package/dist/cjs/components/Actions/buttons/ButtonQuota.js +8 -0
  16. package/dist/cjs/components/Actions/buttons/index.d.ts +3 -0
  17. package/dist/cjs/components/Actions/buttons/index.js +19 -0
  18. package/dist/cjs/components/Actions/constants.d.ts +11 -0
  19. package/dist/cjs/components/Actions/constants.js +14 -0
  20. package/dist/cjs/components/Actions/index.d.ts +7 -0
  21. package/dist/cjs/components/Actions/index.js +23 -0
  22. package/dist/cjs/components/Actions/styles.module.css +27 -0
  23. package/dist/cjs/components/Actions/types.d.ts +39 -0
  24. package/dist/cjs/components/Actions/types.js +2 -0
  25. package/dist/cjs/components/Actions/utils.d.ts +2 -0
  26. package/dist/cjs/components/Actions/utils.js +6 -0
  27. package/dist/cjs/components/DefaultSubtitle/DefaultSubtitle.d.ts +12 -0
  28. package/dist/cjs/components/DefaultSubtitle/DefaultSubtitle.js +14 -0
  29. package/dist/cjs/components/DefaultSubtitle/index.d.ts +1 -0
  30. package/dist/cjs/components/DefaultSubtitle/index.js +17 -0
  31. package/dist/cjs/components/DefaultSubtitle/styles.module.css +19 -0
  32. package/dist/cjs/components/Headline/Headline.d.ts +2 -0
  33. package/dist/cjs/components/Headline/Headline.js +17 -0
  34. package/dist/cjs/components/Headline/index.d.ts +2 -0
  35. package/dist/cjs/components/Headline/index.js +18 -0
  36. package/dist/cjs/components/Headline/styles.module.css +54 -0
  37. package/dist/cjs/components/Headline/types.d.ts +18 -0
  38. package/dist/cjs/components/Headline/types.js +2 -0
  39. package/dist/cjs/components/PageCatalog/DesktopPageCatalog.d.ts +11 -0
  40. package/dist/cjs/components/PageCatalog/DesktopPageCatalog.js +15 -0
  41. package/dist/cjs/components/PageCatalog/MobilePageCatalog.d.ts +10 -0
  42. package/dist/cjs/components/PageCatalog/MobilePageCatalog.js +15 -0
  43. package/dist/cjs/components/PageCatalog/PageCatalog.d.ts +13 -0
  44. package/dist/cjs/components/PageCatalog/PageCatalog.js +23 -0
  45. package/dist/cjs/components/PageCatalog/index.d.ts +3 -0
  46. package/dist/cjs/components/PageCatalog/index.js +19 -0
  47. package/dist/cjs/components/PageCatalog/mobileStyles.module.css +15 -0
  48. package/dist/cjs/components/PageCatalog/styles.module.css +16 -0
  49. package/dist/cjs/components/PageForm/DesktopPageForm.d.ts +5 -0
  50. package/dist/cjs/components/PageForm/DesktopPageForm.js +32 -0
  51. package/dist/cjs/components/PageForm/MobilePageForm.d.ts +11 -0
  52. package/dist/cjs/components/PageForm/MobilePageForm.js +88 -0
  53. package/dist/cjs/components/PageForm/PageForm.d.ts +12 -0
  54. package/dist/cjs/components/PageForm/PageForm.js +21 -0
  55. package/dist/cjs/components/PageForm/hooks.d.ts +22 -0
  56. package/dist/cjs/components/PageForm/hooks.js +51 -0
  57. package/dist/cjs/components/PageForm/index.d.ts +4 -0
  58. package/dist/cjs/components/PageForm/index.js +20 -0
  59. package/dist/cjs/components/PageForm/mobileStyles.module.css +75 -0
  60. package/dist/cjs/components/PageForm/styles.module.css +104 -0
  61. package/dist/cjs/components/PageForm/types.d.ts +47 -0
  62. package/dist/cjs/components/PageForm/types.js +2 -0
  63. package/dist/cjs/components/PageLoading/PageLoading.d.ts +6 -0
  64. package/dist/cjs/components/PageLoading/PageLoading.js +14 -0
  65. package/dist/cjs/components/PageLoading/index.d.ts +1 -0
  66. package/dist/cjs/components/PageLoading/index.js +17 -0
  67. package/dist/cjs/components/PageLoading/styles.module.css +13 -0
  68. package/dist/cjs/components/PageServices/DesktopPageServices.d.ts +5 -0
  69. package/dist/cjs/components/PageServices/DesktopPageServices.js +18 -0
  70. package/dist/cjs/components/PageServices/MobilePageServices.d.ts +12 -0
  71. package/dist/cjs/components/PageServices/MobilePageServices.js +16 -0
  72. package/dist/cjs/components/PageServices/PageServices.d.ts +14 -0
  73. package/dist/cjs/components/PageServices/PageServices.js +24 -0
  74. package/dist/cjs/components/PageServices/hooks.d.ts +6 -0
  75. package/dist/cjs/components/PageServices/hooks.js +29 -0
  76. package/dist/cjs/components/PageServices/index.d.ts +4 -0
  77. package/dist/cjs/components/PageServices/index.js +20 -0
  78. package/dist/cjs/components/PageServices/mobileStyles.module.css +28 -0
  79. package/dist/cjs/components/PageServices/styles.module.css +48 -0
  80. package/dist/cjs/components/PageServices/types.d.ts +10 -0
  81. package/dist/cjs/components/PageServices/types.js +2 -0
  82. package/dist/cjs/components/PageSidebar/PageSidebar.d.ts +21 -0
  83. package/dist/cjs/components/PageSidebar/PageSidebar.js +51 -0
  84. package/dist/cjs/components/PageSidebar/contexts.d.ts +13 -0
  85. package/dist/cjs/components/PageSidebar/contexts.js +21 -0
  86. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSearch/SidebarSearch.d.ts +1 -0
  87. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSearch/SidebarSearch.js +21 -0
  88. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSearch/index.d.ts +1 -0
  89. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSearch/index.js +17 -0
  90. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSearchToggle/SidebarSearchToggle.d.ts +1 -0
  91. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSearchToggle/SidebarSearchToggle.js +24 -0
  92. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSearchToggle/index.d.ts +1 -0
  93. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSearchToggle/index.js +17 -0
  94. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSearchToggle/styles.module.css +4 -0
  95. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSelect/SidebarSelect.d.ts +20 -0
  96. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSelect/SidebarSelect.js +44 -0
  97. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSelect/hooks/index.d.ts +3 -0
  98. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSelect/hooks/index.js +9 -0
  99. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSelect/hooks/useItemsContent.d.ts +3 -0
  100. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSelect/hooks/useItemsContent.js +56 -0
  101. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSelect/hooks/useSearchFilter.d.ts +7 -0
  102. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSelect/hooks/useSearchFilter.js +40 -0
  103. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSelect/hooks/useSelectedItem.d.ts +7 -0
  104. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSelect/hooks/useSelectedItem.js +23 -0
  105. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSelect/index.d.ts +1 -0
  106. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSelect/index.js +17 -0
  107. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSelect/styles.module.css +19 -0
  108. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSelect/types.d.ts +1 -0
  109. package/dist/cjs/components/PageSidebar/helperComponents/SidebarSelect/types.js +2 -0
  110. package/dist/cjs/components/PageSidebar/helperComponents/SidebarTitle/SidebarTitle.d.ts +9 -0
  111. package/dist/cjs/components/PageSidebar/helperComponents/SidebarTitle/SidebarTitle.js +15 -0
  112. package/dist/cjs/components/PageSidebar/helperComponents/SidebarTitle/index.d.ts +1 -0
  113. package/dist/cjs/components/PageSidebar/helperComponents/SidebarTitle/index.js +17 -0
  114. package/dist/cjs/components/PageSidebar/helperComponents/SidebarTitle/styles.module.css +18 -0
  115. package/dist/cjs/components/PageSidebar/hooks/useItemsCreator.d.ts +8 -0
  116. package/dist/cjs/components/PageSidebar/hooks/useItemsCreator.js +106 -0
  117. package/dist/cjs/components/PageSidebar/hooks/useSearchFilter.d.ts +10 -0
  118. package/dist/cjs/components/PageSidebar/hooks/useSearchFilter.js +45 -0
  119. package/dist/cjs/components/PageSidebar/index.d.ts +3 -0
  120. package/dist/cjs/components/PageSidebar/index.js +19 -0
  121. package/dist/cjs/components/PageSidebar/styles.module.css +92 -0
  122. package/dist/cjs/components/PageSidebar/types.d.ts +42 -0
  123. package/dist/cjs/components/PageSidebar/types.js +2 -0
  124. package/dist/cjs/components/TreeNavigation/TreeNavigation.d.ts +2 -0
  125. package/dist/cjs/components/TreeNavigation/TreeNavigation.js +27 -0
  126. package/dist/cjs/components/TreeNavigation/helperComponents/ConditionalPopover/ConditionalPopover.d.ts +10 -0
  127. package/dist/cjs/components/TreeNavigation/helperComponents/ConditionalPopover/ConditionalPopover.js +15 -0
  128. package/dist/cjs/components/TreeNavigation/helperComponents/ConditionalPopover/styles.module.css +6 -0
  129. package/dist/cjs/components/TreeNavigation/helperComponents/Menu/Menu.d.ts +11 -0
  130. package/dist/cjs/components/TreeNavigation/helperComponents/Menu/Menu.js +25 -0
  131. package/dist/cjs/components/TreeNavigation/helperComponents/Menu/styles.module.css +12 -0
  132. package/dist/cjs/components/TreeNavigation/helperComponents/Menu/utils.d.ts +7 -0
  133. package/dist/cjs/components/TreeNavigation/helperComponents/Menu/utils.js +20 -0
  134. package/dist/cjs/components/TreeNavigation/helperComponents/index.d.ts +2 -0
  135. package/dist/cjs/components/TreeNavigation/helperComponents/index.js +18 -0
  136. package/dist/cjs/components/TreeNavigation/index.d.ts +2 -0
  137. package/dist/cjs/components/TreeNavigation/index.js +18 -0
  138. package/dist/cjs/components/TreeNavigation/styles.module.css +89 -0
  139. package/dist/cjs/components/TreeNavigation/types.d.ts +46 -0
  140. package/dist/cjs/components/TreeNavigation/types.js +2 -0
  141. package/dist/cjs/components/index.d.ts +9 -0
  142. package/dist/cjs/components/index.js +25 -0
  143. package/dist/cjs/constants.d.ts +57 -0
  144. package/dist/cjs/constants.js +53 -0
  145. package/dist/cjs/index.d.ts +4 -0
  146. package/dist/cjs/index.js +20 -0
  147. package/dist/cjs/locale/index.d.ts +112 -0
  148. package/dist/cjs/locale/index.js +62 -0
  149. package/dist/cjs/package.json +3 -0
  150. package/dist/cjs/style.css +639 -0
  151. package/dist/cjs/types.d.ts +7 -0
  152. package/dist/cjs/types.js +2 -0
  153. package/dist/esm/components/Actions/ActionView.d.ts +17 -0
  154. package/dist/esm/components/Actions/ActionView.js +50 -0
  155. package/dist/esm/components/Actions/DesktopActions.d.ts +10 -0
  156. package/dist/esm/components/Actions/DesktopActions.js +20 -0
  157. package/dist/esm/components/Actions/MobileActions.d.ts +10 -0
  158. package/dist/esm/components/Actions/MobileActions.js +115 -0
  159. package/dist/esm/components/Actions/buttons/ButtonDroplist.d.ts +11 -0
  160. package/dist/esm/components/Actions/buttons/ButtonDroplist.js +18 -0
  161. package/dist/esm/components/Actions/buttons/ButtonKebab.d.ts +7 -0
  162. package/dist/esm/components/Actions/buttons/ButtonKebab.js +12 -0
  163. package/dist/esm/components/Actions/buttons/ButtonQuota.d.ts +12 -0
  164. package/dist/esm/components/Actions/buttons/ButtonQuota.js +5 -0
  165. package/dist/esm/components/Actions/buttons/index.d.ts +3 -0
  166. package/dist/esm/components/Actions/buttons/index.js +3 -0
  167. package/dist/esm/components/Actions/constants.d.ts +11 -0
  168. package/dist/esm/components/Actions/constants.js +11 -0
  169. package/dist/esm/components/Actions/index.d.ts +7 -0
  170. package/dist/esm/components/Actions/index.js +7 -0
  171. package/dist/esm/components/Actions/styles.module.css +27 -0
  172. package/dist/esm/components/Actions/types.d.ts +39 -0
  173. package/dist/esm/components/Actions/types.js +1 -0
  174. package/dist/esm/components/Actions/utils.d.ts +2 -0
  175. package/dist/esm/components/Actions/utils.js +3 -0
  176. package/dist/esm/components/DefaultSubtitle/DefaultSubtitle.d.ts +12 -0
  177. package/dist/esm/components/DefaultSubtitle/DefaultSubtitle.js +8 -0
  178. package/dist/esm/components/DefaultSubtitle/index.d.ts +1 -0
  179. package/dist/esm/components/DefaultSubtitle/index.js +1 -0
  180. package/dist/esm/components/DefaultSubtitle/styles.module.css +19 -0
  181. package/dist/esm/components/Headline/Headline.d.ts +2 -0
  182. package/dist/esm/components/Headline/Headline.js +11 -0
  183. package/dist/esm/components/Headline/index.d.ts +2 -0
  184. package/dist/esm/components/Headline/index.js +2 -0
  185. package/dist/esm/components/Headline/styles.module.css +54 -0
  186. package/dist/esm/components/Headline/types.d.ts +18 -0
  187. package/dist/esm/components/Headline/types.js +1 -0
  188. package/dist/esm/components/PageCatalog/DesktopPageCatalog.d.ts +11 -0
  189. package/dist/esm/components/PageCatalog/DesktopPageCatalog.js +9 -0
  190. package/dist/esm/components/PageCatalog/MobilePageCatalog.d.ts +10 -0
  191. package/dist/esm/components/PageCatalog/MobilePageCatalog.js +9 -0
  192. package/dist/esm/components/PageCatalog/PageCatalog.d.ts +13 -0
  193. package/dist/esm/components/PageCatalog/PageCatalog.js +20 -0
  194. package/dist/esm/components/PageCatalog/index.d.ts +3 -0
  195. package/dist/esm/components/PageCatalog/index.js +3 -0
  196. package/dist/esm/components/PageCatalog/mobileStyles.module.css +15 -0
  197. package/dist/esm/components/PageCatalog/styles.module.css +16 -0
  198. package/dist/esm/components/PageForm/DesktopPageForm.d.ts +5 -0
  199. package/dist/esm/components/PageForm/DesktopPageForm.js +26 -0
  200. package/dist/esm/components/PageForm/MobilePageForm.d.ts +11 -0
  201. package/dist/esm/components/PageForm/MobilePageForm.js +82 -0
  202. package/dist/esm/components/PageForm/PageForm.d.ts +12 -0
  203. package/dist/esm/components/PageForm/PageForm.js +18 -0
  204. package/dist/esm/components/PageForm/hooks.d.ts +22 -0
  205. package/dist/esm/components/PageForm/hooks.js +46 -0
  206. package/dist/esm/components/PageForm/index.d.ts +4 -0
  207. package/dist/esm/components/PageForm/index.js +4 -0
  208. package/dist/esm/components/PageForm/mobileStyles.module.css +75 -0
  209. package/dist/esm/components/PageForm/styles.module.css +104 -0
  210. package/dist/esm/components/PageForm/types.d.ts +47 -0
  211. package/dist/esm/components/PageForm/types.js +1 -0
  212. package/dist/esm/components/PageLoading/PageLoading.d.ts +6 -0
  213. package/dist/esm/components/PageLoading/PageLoading.js +8 -0
  214. package/dist/esm/components/PageLoading/index.d.ts +1 -0
  215. package/dist/esm/components/PageLoading/index.js +1 -0
  216. package/dist/esm/components/PageLoading/styles.module.css +13 -0
  217. package/dist/esm/components/PageServices/DesktopPageServices.d.ts +5 -0
  218. package/dist/esm/components/PageServices/DesktopPageServices.js +12 -0
  219. package/dist/esm/components/PageServices/MobilePageServices.d.ts +12 -0
  220. package/dist/esm/components/PageServices/MobilePageServices.js +10 -0
  221. package/dist/esm/components/PageServices/PageServices.d.ts +14 -0
  222. package/dist/esm/components/PageServices/PageServices.js +21 -0
  223. package/dist/esm/components/PageServices/hooks.d.ts +6 -0
  224. package/dist/esm/components/PageServices/hooks.js +26 -0
  225. package/dist/esm/components/PageServices/index.d.ts +4 -0
  226. package/dist/esm/components/PageServices/index.js +4 -0
  227. package/dist/esm/components/PageServices/mobileStyles.module.css +28 -0
  228. package/dist/esm/components/PageServices/styles.module.css +48 -0
  229. package/dist/esm/components/PageServices/types.d.ts +10 -0
  230. package/dist/esm/components/PageServices/types.js +1 -0
  231. package/dist/esm/components/PageSidebar/PageSidebar.d.ts +21 -0
  232. package/dist/esm/components/PageSidebar/PageSidebar.js +45 -0
  233. package/dist/esm/components/PageSidebar/contexts.d.ts +13 -0
  234. package/dist/esm/components/PageSidebar/contexts.js +16 -0
  235. package/dist/esm/components/PageSidebar/helperComponents/SidebarSearch/SidebarSearch.d.ts +1 -0
  236. package/dist/esm/components/PageSidebar/helperComponents/SidebarSearch/SidebarSearch.js +18 -0
  237. package/dist/esm/components/PageSidebar/helperComponents/SidebarSearch/index.d.ts +1 -0
  238. package/dist/esm/components/PageSidebar/helperComponents/SidebarSearch/index.js +1 -0
  239. package/dist/esm/components/PageSidebar/helperComponents/SidebarSearchToggle/SidebarSearchToggle.d.ts +1 -0
  240. package/dist/esm/components/PageSidebar/helperComponents/SidebarSearchToggle/SidebarSearchToggle.js +18 -0
  241. package/dist/esm/components/PageSidebar/helperComponents/SidebarSearchToggle/index.d.ts +1 -0
  242. package/dist/esm/components/PageSidebar/helperComponents/SidebarSearchToggle/index.js +1 -0
  243. package/dist/esm/components/PageSidebar/helperComponents/SidebarSearchToggle/styles.module.css +4 -0
  244. package/dist/esm/components/PageSidebar/helperComponents/SidebarSelect/SidebarSelect.d.ts +20 -0
  245. package/dist/esm/components/PageSidebar/helperComponents/SidebarSelect/SidebarSelect.js +38 -0
  246. package/dist/esm/components/PageSidebar/helperComponents/SidebarSelect/hooks/index.d.ts +3 -0
  247. package/dist/esm/components/PageSidebar/helperComponents/SidebarSelect/hooks/index.js +3 -0
  248. package/dist/esm/components/PageSidebar/helperComponents/SidebarSelect/hooks/useItemsContent.d.ts +3 -0
  249. package/dist/esm/components/PageSidebar/helperComponents/SidebarSelect/hooks/useItemsContent.js +53 -0
  250. package/dist/esm/components/PageSidebar/helperComponents/SidebarSelect/hooks/useSearchFilter.d.ts +7 -0
  251. package/dist/esm/components/PageSidebar/helperComponents/SidebarSelect/hooks/useSearchFilter.js +36 -0
  252. package/dist/esm/components/PageSidebar/helperComponents/SidebarSelect/hooks/useSelectedItem.d.ts +7 -0
  253. package/dist/esm/components/PageSidebar/helperComponents/SidebarSelect/hooks/useSelectedItem.js +20 -0
  254. package/dist/esm/components/PageSidebar/helperComponents/SidebarSelect/index.d.ts +1 -0
  255. package/dist/esm/components/PageSidebar/helperComponents/SidebarSelect/index.js +1 -0
  256. package/dist/esm/components/PageSidebar/helperComponents/SidebarSelect/styles.module.css +19 -0
  257. package/dist/esm/components/PageSidebar/helperComponents/SidebarSelect/types.d.ts +1 -0
  258. package/dist/esm/components/PageSidebar/helperComponents/SidebarSelect/types.js +1 -0
  259. package/dist/esm/components/PageSidebar/helperComponents/SidebarTitle/SidebarTitle.d.ts +9 -0
  260. package/dist/esm/components/PageSidebar/helperComponents/SidebarTitle/SidebarTitle.js +9 -0
  261. package/dist/esm/components/PageSidebar/helperComponents/SidebarTitle/index.d.ts +1 -0
  262. package/dist/esm/components/PageSidebar/helperComponents/SidebarTitle/index.js +1 -0
  263. package/dist/esm/components/PageSidebar/helperComponents/SidebarTitle/styles.module.css +18 -0
  264. package/dist/esm/components/PageSidebar/hooks/useItemsCreator.d.ts +8 -0
  265. package/dist/esm/components/PageSidebar/hooks/useItemsCreator.js +99 -0
  266. package/dist/esm/components/PageSidebar/hooks/useSearchFilter.d.ts +10 -0
  267. package/dist/esm/components/PageSidebar/hooks/useSearchFilter.js +41 -0
  268. package/dist/esm/components/PageSidebar/index.d.ts +3 -0
  269. package/dist/esm/components/PageSidebar/index.js +3 -0
  270. package/dist/esm/components/PageSidebar/styles.module.css +92 -0
  271. package/dist/esm/components/PageSidebar/types.d.ts +42 -0
  272. package/dist/esm/components/PageSidebar/types.js +1 -0
  273. package/dist/esm/components/TreeNavigation/TreeNavigation.d.ts +2 -0
  274. package/dist/esm/components/TreeNavigation/TreeNavigation.js +21 -0
  275. package/dist/esm/components/TreeNavigation/helperComponents/ConditionalPopover/ConditionalPopover.d.ts +10 -0
  276. package/dist/esm/components/TreeNavigation/helperComponents/ConditionalPopover/ConditionalPopover.js +9 -0
  277. package/dist/esm/components/TreeNavigation/helperComponents/ConditionalPopover/styles.module.css +6 -0
  278. package/dist/esm/components/TreeNavigation/helperComponents/Menu/Menu.d.ts +11 -0
  279. package/dist/esm/components/TreeNavigation/helperComponents/Menu/Menu.js +19 -0
  280. package/dist/esm/components/TreeNavigation/helperComponents/Menu/styles.module.css +12 -0
  281. package/dist/esm/components/TreeNavigation/helperComponents/Menu/utils.d.ts +7 -0
  282. package/dist/esm/components/TreeNavigation/helperComponents/Menu/utils.js +16 -0
  283. package/dist/esm/components/TreeNavigation/helperComponents/index.d.ts +2 -0
  284. package/dist/esm/components/TreeNavigation/helperComponents/index.js +2 -0
  285. package/dist/esm/components/TreeNavigation/index.d.ts +2 -0
  286. package/dist/esm/components/TreeNavigation/index.js +2 -0
  287. package/dist/esm/components/TreeNavigation/styles.module.css +89 -0
  288. package/dist/esm/components/TreeNavigation/types.d.ts +46 -0
  289. package/dist/esm/components/TreeNavigation/types.js +1 -0
  290. package/dist/esm/components/index.d.ts +9 -0
  291. package/dist/esm/components/index.js +9 -0
  292. package/dist/esm/constants.d.ts +57 -0
  293. package/dist/esm/constants.js +50 -0
  294. package/dist/esm/index.d.ts +4 -0
  295. package/dist/esm/index.js +4 -0
  296. package/dist/esm/locale/index.d.ts +112 -0
  297. package/dist/esm/locale/index.js +59 -0
  298. package/dist/esm/style.css +639 -0
  299. package/dist/esm/types.d.ts +7 -0
  300. package/dist/esm/types.js +1 -0
  301. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  302. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  303. package/package.json +68 -0
  304. package/src/components/Actions/ActionView.tsx +71 -0
  305. package/src/components/Actions/DesktopActions.tsx +33 -0
  306. package/src/components/Actions/MobileActions.tsx +167 -0
  307. package/src/components/Actions/buttons/ButtonDroplist.tsx +43 -0
  308. package/src/components/Actions/buttons/ButtonKebab.tsx +29 -0
  309. package/src/components/Actions/buttons/ButtonQuota.tsx +16 -0
  310. package/src/components/Actions/buttons/index.ts +3 -0
  311. package/src/components/Actions/constants.ts +11 -0
  312. package/src/components/Actions/index.ts +7 -0
  313. package/src/components/Actions/styles.module.scss +34 -0
  314. package/src/components/Actions/types.ts +34 -0
  315. package/src/components/Actions/utils.ts +5 -0
  316. package/src/components/DefaultSubtitle/DefaultSubtitle.tsx +27 -0
  317. package/src/components/DefaultSubtitle/index.ts +1 -0
  318. package/src/components/DefaultSubtitle/styles.module.scss +17 -0
  319. package/src/components/Headline/Headline.tsx +42 -0
  320. package/src/components/Headline/index.ts +2 -0
  321. package/src/components/Headline/styles.module.scss +61 -0
  322. package/src/components/Headline/types.ts +19 -0
  323. package/src/components/PageCatalog/DesktopPageCatalog.tsx +26 -0
  324. package/src/components/PageCatalog/MobilePageCatalog.tsx +36 -0
  325. package/src/components/PageCatalog/PageCatalog.tsx +28 -0
  326. package/src/components/PageCatalog/index.ts +3 -0
  327. package/src/components/PageCatalog/mobileStyles.module.scss +18 -0
  328. package/src/components/PageCatalog/styles.module.scss +21 -0
  329. package/src/components/PageForm/DesktopPageForm.tsx +112 -0
  330. package/src/components/PageForm/MobilePageForm.tsx +187 -0
  331. package/src/components/PageForm/PageForm.tsx +25 -0
  332. package/src/components/PageForm/hooks.tsx +63 -0
  333. package/src/components/PageForm/index.ts +4 -0
  334. package/src/components/PageForm/mobileStyles.module.scss +88 -0
  335. package/src/components/PageForm/styles.module.scss +134 -0
  336. package/src/components/PageForm/types.ts +64 -0
  337. package/src/components/PageLoading/PageLoading.tsx +18 -0
  338. package/src/components/PageLoading/index.ts +1 -0
  339. package/src/components/PageLoading/styles.module.scss +17 -0
  340. package/src/components/PageServices/DesktopPageServices.tsx +55 -0
  341. package/src/components/PageServices/MobilePageServices.tsx +47 -0
  342. package/src/components/PageServices/PageServices.tsx +30 -0
  343. package/src/components/PageServices/hooks.ts +35 -0
  344. package/src/components/PageServices/index.ts +4 -0
  345. package/src/components/PageServices/mobileStyles.module.scss +34 -0
  346. package/src/components/PageServices/styles.module.scss +61 -0
  347. package/src/components/PageServices/types.ts +16 -0
  348. package/src/components/PageSidebar/PageSidebar.tsx +143 -0
  349. package/src/components/PageSidebar/contexts.tsx +30 -0
  350. package/src/components/PageSidebar/helperComponents/SidebarSearch/SidebarSearch.tsx +31 -0
  351. package/src/components/PageSidebar/helperComponents/SidebarSearch/index.ts +1 -0
  352. package/src/components/PageSidebar/helperComponents/SidebarSearchToggle/SidebarSearchToggle.tsx +36 -0
  353. package/src/components/PageSidebar/helperComponents/SidebarSearchToggle/index.ts +1 -0
  354. package/src/components/PageSidebar/helperComponents/SidebarSearchToggle/styles.module.scss +6 -0
  355. package/src/components/PageSidebar/helperComponents/SidebarSelect/SidebarSelect.tsx +91 -0
  356. package/src/components/PageSidebar/helperComponents/SidebarSelect/hooks/index.ts +3 -0
  357. package/src/components/PageSidebar/helperComponents/SidebarSelect/hooks/useItemsContent.tsx +85 -0
  358. package/src/components/PageSidebar/helperComponents/SidebarSelect/hooks/useSearchFilter.tsx +53 -0
  359. package/src/components/PageSidebar/helperComponents/SidebarSelect/hooks/useSelectedItem.tsx +35 -0
  360. package/src/components/PageSidebar/helperComponents/SidebarSelect/index.ts +1 -0
  361. package/src/components/PageSidebar/helperComponents/SidebarSelect/styles.module.scss +20 -0
  362. package/src/components/PageSidebar/helperComponents/SidebarSelect/types.ts +1 -0
  363. package/src/components/PageSidebar/helperComponents/SidebarTitle/SidebarTitle.tsx +33 -0
  364. package/src/components/PageSidebar/helperComponents/SidebarTitle/index.ts +1 -0
  365. package/src/components/PageSidebar/helperComponents/SidebarTitle/styles.module.scss +20 -0
  366. package/src/components/PageSidebar/hooks/useItemsCreator.tsx +161 -0
  367. package/src/components/PageSidebar/hooks/useSearchFilter.tsx +57 -0
  368. package/src/components/PageSidebar/index.ts +3 -0
  369. package/src/components/PageSidebar/styles.module.scss +133 -0
  370. package/src/components/PageSidebar/types.ts +42 -0
  371. package/src/components/TreeNavigation/TreeNavigation.tsx +108 -0
  372. package/src/components/TreeNavigation/helperComponents/ConditionalPopover/ConditionalPopover.tsx +31 -0
  373. package/src/components/TreeNavigation/helperComponents/ConditionalPopover/styles.module.scss +7 -0
  374. package/src/components/TreeNavigation/helperComponents/Menu/Menu.tsx +69 -0
  375. package/src/components/TreeNavigation/helperComponents/Menu/styles.module.scss +17 -0
  376. package/src/components/TreeNavigation/helperComponents/Menu/utils.ts +22 -0
  377. package/src/components/TreeNavigation/helperComponents/index.ts +2 -0
  378. package/src/components/TreeNavigation/index.ts +2 -0
  379. package/src/components/TreeNavigation/styles.module.scss +97 -0
  380. package/src/components/TreeNavigation/types.ts +48 -0
  381. package/src/components/index.ts +9 -0
  382. package/src/constants.ts +56 -0
  383. package/src/index.ts +4 -0
  384. package/src/locale/index.ts +64 -0
  385. package/src/types.ts +15 -0
package/README.md ADDED
@@ -0,0 +1,943 @@
1
+ # PageLayout
2
+
3
+ `@cloud-ru/ds-uikit-product-page-layout` — Набор страничных раскладок продуктового кабинета — каталог, детальная страница сервиса, форма, дерево-навигация, сайдбар и общие слоты — с адаптацией desktop/mobile через AdaptiveProvider.
4
+
5
+ `@cloud-ru/ds-uikit-product-page-layout` — набор страничных раскладок продуктового кабинета. Раскладки построены на общих слотах (`Headline`, `Actions`, сайдбар) и переключаются между desktop- и mobile-представлением автоматически по `AdaptiveProvider`.
6
+
7
+ ## Когда использовать
8
+
9
+ - Страницы продуктового кабинета, которым нужна единая адаптивная раскладка шапки, действий и сайдбара.
10
+ - Одно и то же дерево разделов и набор действий нужны и на desktop, и на mobile без ручного дублирования вёрстки.
11
+
12
+ Когда **не** нужен пакет:
13
+
14
+ - Отдельная карточка или виджет внутри страницы:
15
+ - используйте **`@cloud-ru/ds-uikit-product-widget`** или **`@cloud-ru/ds-card`**.
16
+ - Только панель действий без страничной обёртки:
17
+ - соберите `Button` / kebab напрямую.
18
+
19
+ ## Установка
20
+
21
+ ```bash
22
+ pnpm add @cloud-ru/ds-uikit-product-page-layout
23
+ ```
24
+
25
+ ```ts
26
+ import {
27
+ PageCatalog,
28
+ PageServices,
29
+ PageForm,
30
+ TreeNavigation,
31
+ PageSidebar,
32
+ Headline,
33
+ DefaultSubtitle,
34
+ PageLoading,
35
+ TREE_NAVIGATION_MODE,
36
+ } from '@cloud-ru/ds-uikit-product-page-layout'
37
+ ```
38
+
39
+ ## Смотри также
40
+
41
+ - **`@cloud-ru/ds-uikit-product-widget`** — карточка-виджет внутри страницы.
42
+ - **`@cloud-ru/ds-segment-control`** — переключатель вкладок в шапках.
43
+ - **`@cloud-ru/ds-tree`** — дерево, на котором построен `TreeNavigation`.
44
+ - **`@cloud-ru/ds-adaptive`** — провайдер раскладки desktop/mobile.
45
+ ## Раскладки
46
+
47
+ - ****PageCatalog**** — список/каталог сервисов: заголовок, действия в шапке, контент.
48
+ - ****PageServices**** — детальная страница инстанса: селект раздела, заголовок со статусом, действия, контент.
49
+ - ****PageForm**** — форма создания/настройки: степпер, сайд-блок и sticky-футер с оценкой бюджета.
50
+ - ****TreeNavigation**** — раскладка с деревом разделов в режимах `popover` / `aside` / `fixed`.
51
+ - ****PageSidebar**** — сайдбар разделов с поиском, группами и сворачиванием.
52
+
53
+ Общие слоты, переиспользуемые внутри раскладок:
54
+
55
+ - ****Headline**** — строка заголовка: title, слоты до/после, действия, подзаголовок.
56
+ - ****DefaultSubtitle**** — подзаголовок «подпись + копируемое значение».
57
+ - ****PageLoading**** — заглушка-спиннер на время загрузки страницы.
58
+
59
+ ## Адаптивность
60
+
61
+ `PageCatalog`, `PageServices` и `PageForm` — адаптивные: раскладку они берут из контекста `AdaptiveProvider` (`@cloud-ru/ds-adaptive`), а не из пропа. Потребитель ставит один `<AdaptiveProvider>` в корне фичи — desktop работает по умолчанию, mobile подключается автоматически.
62
+
63
+ - На `mobile` рендерится отдельное представление: сайдбар сворачивается в селект, действия — одно видимое плюс kebab.
64
+ - Форс конкретной раскладки — `withLayoutType(Component, 'desktop')` или вложенный `<AdaptiveProvider layoutType='mobile'>`. Пропа `layoutType` у компонентов нет.
65
+
66
+ Подробности по каждому представлению — на страницах соответствующих раскладок.
67
+
68
+ ## PageCatalog
69
+
70
+ Раскладка каталога сервисов — строка заголовка с действиями и контентная область. Адаптивная — на mobile действия схлопываются в «основное + kebab».
71
+
72
+ Раскладка каталога/списка сервисов: строка заголовка (`title`) с панелью действий (`actions`) и контентная область (`children`). Раскладку берёт из `AdaptiveProvider`.
73
+
74
+ ### Когда использовать
75
+
76
+ - Список или каталог сервисов, ресурсов, проектов с действиями в шапке.
77
+ - Нужна одна и та же шапка с действиями на desktop и mobile без ручного дублирования.
78
+
79
+ ### Анатомия
80
+
81
+ Заголовок (`title`) + панель действий (`actions`) + контент (`children`).
82
+
83
+ #### Действия
84
+
85
+ `actions` — массив `Action`. Каждый элемент — дискриминированный union по `variant`:
86
+
87
+ - `filled` / `outline` / `tonal` / `function` / `simple` — простая кнопка `@cloud-ru/ds-button` с соответствующим `view`.
88
+ - `dropdown` / `kebab` / `droplist` / `quota` — составные кнопки из предопределённых обёрток.
89
+
90
+ Основное действие ставьте **первым** в массиве: на desktop (row-reverse) оно встаёт справа, на mobile — растягивается на доступную ширину.
91
+
92
+ #### Адаптивность
93
+
94
+ - `desktop` — действия выстроены в строку шапки.
95
+ - `mobile` — видимым остаётся первое (основное) действие, остальные уходят в kebab. Количество видимых регулируется `maxVisibleActionsItems`.
96
+
97
+ ### Props
98
+
99
+ **PageCatalogProps**
100
+
101
+ | Prop | Type | Default | Description |
102
+ |------|------|---------|-------------|
103
+ | `actions` | `ActionsProps` \| `ButtonDropdownDroplistConfig` \| `ButtonDroplistProps` \| `ButtonKebabProps` \| `QuotaWidgetPropsBase` | — | |
104
+ | `children` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
105
+ | `className` | `string` | — | CSS-класс |
106
+ | `data-test-id` | `string` | — | |
107
+ | `maxVisibleActionsItems` | `ActionsProps` | — | |
108
+ | `title` | `string` | — | Заголовок страницы |
109
+
110
+ ##### Related types
111
+
112
+ - `Action` = `{ tooltip?: TooltipProps; hidden?: boolean; } & (({ variant?: typeof BUTTON_TYPE.Filled; } & { 'data-test-id'?: string; } & AriaAttributes & { label?: string; icon?: ReactNode; iconPosition?: IconPosition; appearance?: Appearance; size?: Size; disabled?: boolean; loading?: boolean; fullWidth?: boolean; minWidth?: boolean; className?: string; view?: View; counter?: Omit<CounterProps, "size">; } & { as?: "button" | undefined; innerRef?: ((instance: HTMLButtonElement | null) => void | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | RefObject<HTMLButtonElement> | null | undefined; } & Omit<Omit<DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">, "data-test-id" | keyof AriaAttributes | "className" | "view" | "label" | "ref" | "disabled" | "size" | "icon" | "appearance" | "loading" | "as" | "iconPosition" | "fullWidth" | "minWidth" | "counter">) | ({ variant: typeof BUTTON_TYPE.Outline; } & { 'data-test-id'?: string; } & AriaAttributes & { label?: string; icon?: ReactNode; iconPosition?: IconPosition; appearance?: Appearance; size?: Size; disabled?: boolean; loading?: boolean; fullWidth?: boolean; minWidth?: boolean; className?: string; view?: View; counter?: Omit<CounterProps, "size">; } & { as?: "button" | undefined; innerRef?: ((instance: HTMLButtonElement | null) => void | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | RefObject<HTMLButtonElement> | null | undefined; } & Omit<Omit<DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">, "data-test-id" | keyof AriaAttributes | "className" | "view" | "label" | "ref" | "disabled" | "size" | "icon" | "appearance" | "loading" | "as" | "iconPosition" | "fullWidth" | "minWidth" | "counter">) | ({ variant: typeof BUTTON_TYPE.Tonal; } & { 'data-test-id'?: string; } & AriaAttributes & { label?: string; icon?: ReactNode; iconPosition?: IconPosition; appearance?: Appearance; size?: Size; disabled?: boolean; loading?: boolean; fullWidth?: boolean; minWidth?: boolean; className?: string; view?: View; counter?: Omit<CounterProps, "size">; } & { as?: "button" | undefined; innerRef?: ((instance: HTMLButtonElement | null) => void | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | RefObject<HTMLButtonElement> | null | undefined; } & Omit<Omit<DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">, "data-test-id" | keyof AriaAttributes | "className" | "view" | "label" | "ref" | "disabled" | "size" | "icon" | "appearance" | "loading" | "as" | "iconPosition" | "fullWidth" | "minWidth" | "counter">) | ({ variant: typeof BUTTON_TYPE.Function; } & { 'data-test-id'?: string; } & AriaAttributes & { label?: string; icon?: ReactNode; iconPosition?: IconPosition; appearance?: Appearance; size?: Size; disabled?: boolean; loading?: boolean; fullWidth?: boolean; minWidth?: boolean; className?: string; view?: View; counter?: Omit<CounterProps, "size">; } & { as?: "button" | undefined; innerRef?: ((instance: HTMLButtonElement | null) => void | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | RefObject<HTMLButtonElement> | null | undefined; } & Omit<Omit<DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">, "data-test-id" | keyof AriaAttributes | "className" | "view" | "label" | "ref" | "disabled" | "size" | "icon" | "appearance" | "loading" | "as" | "iconPosition" | "fullWidth" | "minWidth" | "counter">) | ({ variant: typeof BUTTON_TYPE.Simple; } & { 'data-test-id'?: string; } & AriaAttributes & { label?: string; icon?: ReactNode; iconPosition?: IconPosition; appearance?: Appearance; size?: Size; disabled?: boolean; loading?: boolean; fullWidth?: boolean; minWidth?: boolean; className?: string; view?: View; counter?: Omit<CounterProps, "size">; } & { as?: "button" | undefined; innerRef?: ((instance: HTMLButtonElement | null) => void | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | RefObject<HTMLButtonElement> | null | undefined; } & Omit<Omit<DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">, "data-test-id" | keyof AriaAttributes | "className" | "view" | "label" | "ref" | "disabled" | "size" | "icon" | "appearance" | "loading" | "as" | "iconPosition" | "fullWidth" | "minWidth" | "counter">) | ({ variant: typeof BUTTON_TYPE.Dropdown; } & { 'data-test-id'?: string; } & AriaAttributes & Omit<ButtonProps, "view" | "size" | "icon" | "iconPosition"> & { size?: "xs" | NonNullable<Size | undefined>; className?: string; open?: boolean; onOpenChange?: (open: boolean) => void; } & { items: Item[]; triggerClassName?: string | undefined; closeOnPopstate?: boolean | undefined; placement?: Placement | undefined; closeDroplistOnItemClick?: boolean | undefined; }) | ({ variant: typeof BUTTON_TYPE.Kebab; } & ButtonKebabProps) | ({ variant: typeof BUTTON_TYPE.Droplist; } & ButtonDroplistProps) | ({ variant: typeof BUTTON_TYPE.Quota; } & { 'data-test-id'?: string; } & AriaAttributes & QuotaWidgetPropsBase & { quotasUrl: string; onQuotasUrlClick?: () => void; buttonProps?: Pick<ButtonProps, "size" | "className" | "fullWidth" | "label" | "appearance" | "disabled" | "view">; }))`
113
+
114
+ **ActionsProps**
115
+
116
+ | Prop | Type | Default | Description |
117
+ |------|------|---------|-------------|
118
+ | `items` | `Action` \| `ButtonDropdownDroplistConfig` \| `ButtonDroplistProps` \| `ButtonKebabProps` \| `QuotaWidgetPropsBase` | — | |
119
+ | `maxVisibleItems` | `number \| undefined` | — | |
120
+
121
+ **ButtonDroplistProps**
122
+
123
+ | Prop | Type | Default | Description |
124
+ |------|------|---------|-------------|
125
+ | `button` | `ButtonProps` | — | |
126
+ | `list` | `DroplistListProps` \| `DroplistMobileSlots` \| `DroplistProps` \| `EmptyState` \| `PublicListContextType` \| `ScrollProps` \| `SelectionState` | — | |
127
+
128
+ **ButtonKebabProps**
129
+
130
+ | Prop | Type | Default | Description |
131
+ |------|------|---------|-------------|
132
+ | `button` | `ButtonProps` | — | |
133
+ | `list` | `DroplistListProps` \| `DroplistMobileSlots` \| `DroplistProps` \| `EmptyState` \| `PublicListContextType` \| `ScrollProps` \| `SelectionState` | — | |
134
+
135
+ ## PageServices
136
+
137
+ Детальная страница инстанса — селект раздела, заголовок со статусом, действия и контент. Адаптивная — на mobile селект выносится наверх full-bleed-строкой.
138
+
139
+ Детальная страница инстанса: селект раздела (`sidebar`), заголовок (`title`) со статусом в `slotAfterTitle`, действия (`actions`) и контент (`children`). Раскладку берёт из `AdaptiveProvider`.
140
+
141
+ ### Когда использовать
142
+
143
+ - Страница конкретного ресурса/инстанса с навигацией по разделам и заголовком-статусом.
144
+ - Нужен заголовок со статусом и панелью действий поверх адаптивной раскладки с боковым сайдбаром.
145
+
146
+ ### Анатомия
147
+
148
+ - `sidebar` — селект/сайдбар разделов (пропсы **`PageSidebar`**).
149
+ - `title` — заголовок страницы (строка **`Headline`**).
150
+ - `slotBeforeTitle` / `slotAfterTitle` — слоты до/после заголовка; статус инстанса обычно кладут в `slotAfterTitle`.
151
+ - `actions` — панель действий справа от заголовка.
152
+ - `subtitle` — подзаголовок (например, **`DefaultSubtitle`** с ID ресурса).
153
+ - `children` — контент страницы.
154
+ - `autoHeight` — снять расчёт высоты по глобальному хост-контейнеру single-spa.
155
+ - `limitContentMaxWidth` — ограничить максимальную ширину контента.
156
+
157
+ #### Адаптивность
158
+
159
+ - `desktop` — сайдбар сбоку, заголовок и действия в строке шапки.
160
+ - `mobile` — селект раздела (`SidebarSelect`) выносится наверх как full-bleed-строка с разделителем снизу; ниже — заголовок со статусом, строка действий и контент с отступом.
161
+
162
+ ### Props
163
+
164
+ **PageServicesProps**
165
+
166
+ | Prop | Type | Default | Description |
167
+ |------|------|---------|-------------|
168
+ | `actions` | `ActionsProps` \| `ButtonDropdownDroplistConfig` \| `ButtonDroplistProps` \| `ButtonKebabProps` \| `QuotaWidgetPropsBase` | — | |
169
+ | `autoHeight` | `boolean` | — | |
170
+ | `children` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
171
+ | `className` | `string` | — | |
172
+ | `data-test-id` | `string` | — | |
173
+ | `limitContentMaxWidth` | `boolean` | — | |
174
+ | `maxVisibleActionsItems` | `ActionsProps` | — | |
175
+ | `sidebar` | `PageSidebarProps` | — | |
176
+ | `slotAfterTitle` | `ReactNode` | — | Слот после заголовка (например, статус) |
177
+ | `slotBeforeTitle` | `ReactNode` | — | Слот перед заголовком (например, кнопка «назад») |
178
+ | `subtitle` | `ReactNode` | — | Подзаголовок под заголовком |
179
+ | `title` | `string` | — | Заголовок страницы |
180
+ | `truncateTitle` | `boolean` | — | Обрезать заголовок в одну строку с многоточием |
181
+
182
+ ##### Related types
183
+
184
+ **ButtonKebabProps**
185
+
186
+ | Prop | Type | Default | Description |
187
+ |------|------|---------|-------------|
188
+ | `button` | `ButtonProps` | — | |
189
+ | `list` | `DroplistListProps` \| `DroplistMobileSlots` \| `DroplistProps` \| `EmptyState` \| `PublicListContextType` \| `ScrollProps` \| `SelectionState` | — | |
190
+
191
+ **Documentation**
192
+
193
+ | Prop | Type | Default | Description |
194
+ |------|------|---------|-------------|
195
+ | `href` | `string \| undefined` | — | |
196
+ | `onClick` | `MouseEventHandler \| undefined` | — | |
197
+ | `target` | `HTMLAttributeAnchorTarget \| undefined` | — | |
198
+
199
+ - `HeaderProps` = `{ type: typeof SIDEBAR_HEADER_TYPE.Title; label: string; icon: Icon; afterContent?: ReactNode; } | { type: typeof SIDEBAR_HEADER_TYPE.Back; label: string; href?: string; onClick?: MouseEventHandler; }`
200
+
201
+ **PageSidebarProps**
202
+
203
+ | Prop | Type | Default | Description |
204
+ |------|------|---------|-------------|
205
+ | `className` | `string \| undefined` | — | |
206
+ | `collapse` | `CollapseState` \| `ListProps` | — | |
207
+ | `data-test-id` | `string \| undefined` | — | |
208
+ | `defaultOpen` | `boolean \| undefined` | — | |
209
+ | `documentation` | `Documentation` | — | Зарезервировано, в текущей реализации не используется. |
210
+ | `footerItems` | `SidebarItem` \| `SidebarItemBase` | — | |
211
+ | `hasSearch` | `boolean \| undefined` | — | |
212
+ | `header` | `HeaderProps` | — | |
213
+ | `items` | `SidebarItem` \| `SidebarItemBase` | — | |
214
+ | `onOpenChanged` | `((open: boolean) => void) \| undefined` | — | |
215
+ | `onSelect` | `((id: string \| number) => void) \| undefined` | — | |
216
+ | `open` | `boolean \| undefined` | — | |
217
+ | `pageContainerId` | `string \| undefined` | — | Зарезервировано, в текущей реализации не используется. |
218
+ | `selected` | `string \| number \| undefined` | — | |
219
+
220
+ - `SidebarItem` = `SidebarItemWithHref | SidebarItemWithItems`
221
+
222
+ **SidebarItemBase**
223
+
224
+ | Prop | Type | Default | Description |
225
+ |------|------|---------|-------------|
226
+ | `afterContent` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
227
+ | `beforeContent` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
228
+ | `data-test-id` | `string \| undefined` | — | |
229
+ | `disabledReason` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
230
+ | `disabledReasonPlacement` | `"bottom"` \| `"bottom-end"` \| `"bottom-start"` \| `"left"` \| `"left-end"` \| `"left-start"` \| `"right"` \| `"right-end"` \| `"right-start"` \| `"top"` \| `"top-end"` \| `"top-start"` | — | |
231
+ | `id` | `string \| number` | — | |
232
+ | `label` | `string` | — | |
233
+ | `onClick` | `((e: MouseEvent<HTMLElement>) => void) \| undefined` | — | |
234
+
235
+ ## PageForm
236
+
237
+ Раскладка формы создания/настройки — степпер, контент, сайд-блок и sticky-футер с оценкой бюджета. Адаптивная.
238
+
239
+ Раскладка формы создания или настройки ресурса: заголовок, степпер (`stepper`), контент (`children`), сайд-блок (`sideBlock`) и sticky-футер с оценкой бюджета (`priceSummary`) и кнопками (`footer`). Раскладку берёт из `AdaptiveProvider`.
240
+
241
+ ### Когда использовать
242
+
243
+ - Многошаговые формы создания/аренды/настройки ресурса со степпером и итоговой ценой.
244
+ - Нужен закреплённый футер с основной/вторичной кнопкой и сводкой бюджета.
245
+
246
+ ### Анатомия
247
+
248
+ Тело PageForm на desktop — одна карточка формы фиксированной ширины по центру страницы; справа при переданных слотах встаёт липкая колонка sideItems (304px). Внутри карточки вертикальным стеком идут заголовок, степпер, контент шага и футер.
249
+
250
+ Боковая колонка отрисовывается только при переданных `priceSummary.content` / `sideBlock`; иначе карточка формы стоит одна по центру. На mobile раскладка одноколоночная: степпер sticky сверху, слоты — стопкой, футер sticky снизу.
251
+
252
+ Слоты:
253
+
254
+ - `title` / `subtitle` — заголовок формы и подзаголовок.
255
+ - `stepper` — степпер шагов; на mobile становится sticky сверху.
256
+ - `children` — контент текущего шага.
257
+ - `sideBlock` — массив блоков `{ label, content }` в боковой колонке (подсказки, сводка конфигурации).
258
+ - `priceSummary` — `{ total, content? }`: на desktop `content` идёт карточкой боковой колонки, на mobile — оценкой бюджета в футере.
259
+ - `footer` — кнопки футера (внизу карточки формы на desktop, sticky-футер на mobile). `stickyFooter` закрепляет его внизу при прокрутке длинной формы.
260
+
261
+ #### Кнопки футера
262
+
263
+ - `buttonPrimary` — основная кнопка. `variant` из набора (`continue`, `create`, `save`, `rent`, `send`, `restore`, `add`) задаёт локализованную подпись; `variant: 'custom'` требует свой `label`.
264
+ - `buttonSecondary` — вторичная кнопка (`cancel`, `back` или `custom`).
265
+ - `buttonAdditional` — дополнительная кнопка `@cloud-ru/ds-button`.
266
+
267
+ Каждой кнопке можно передать `tooltip` (пропсы **`@cloud-ru/ds-tooltip`**).
268
+
269
+ #### Адаптивность
270
+
271
+ - `desktop` — сайд-блок сбоку, футер с бюджетом и кнопками внизу.
272
+ - `mobile` — слот «ещё» (`moreActions`, kebab) прижимается к правому краю строки заголовка; степпер sticky сверху, футер с оценкой бюджета и кнопками — sticky снизу.
273
+
274
+ ### Props
275
+
276
+ **PageFormProps**
277
+
278
+ | Prop | Type | Default | Description |
279
+ |------|------|---------|-------------|
280
+ | `children` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
281
+ | `className` | `string` | — | |
282
+ | `data-test-id` | `string` | — | |
283
+ | `footer` | `ButtonPrimaryVariant` \| `ButtonProps` \| `ButtonSecondaryVariant` \| `TooltipProps` | — | |
284
+ | `priceSummary` | `{ total: ReactNode; content?: ReactNode; }` | — | |
285
+ | `sideBlock` | `ModalCustomProps` | — | |
286
+ | `stepper` | `ReactNode` | — | |
287
+ | `stickyFooter` | `boolean` | — | Закрепляет футер внизу формы при прокрутке контента. |
288
+ | `subtitle` | `ReactNode` | — | Подзаголовок под заголовком |
289
+ | `title` | `string` | — | Заголовок страницы |
290
+
291
+ ##### Related types
292
+
293
+ - `ButtonPrimaryVariant` = `"add"` \| `"continue"` \| `"create"` \| `"rent"` \| `"restore"` \| `"save"` \| `"send"`
294
+
295
+ - `ButtonSecondaryVariant` = `"back"` \| `"cancel"`
296
+
297
+ ## TreeNavigation
298
+
299
+ Раскладка с деревом разделов — шапка, дерево-меню и контент. Режимы popover / aside / fixed.
300
+
301
+ Раскладка с деревом разделов: шапка (`header`), дерево-меню (`menu`) на **`@cloud-ru/ds-tree`** и контентная область (`content`). Способ показа дерева задаёт `mode`.
302
+
303
+ ### Когда использовать
304
+
305
+ - Страница с иерархической навигацией по разделам (документация, настройки, дерево ресурсов).
306
+ - Нужно меню-дерево, которое можно держать сбоку, фиксировать или прятать в поповер.
307
+
308
+ ### Анатомия
309
+
310
+ #### Mode (default `aside`)
311
+
312
+ - `popover` — дерево открывается в поповере под кнопкой-бургером.
313
+ - `aside` — дерево в боковой колонке, сворачиваемое.
314
+ - `fixed` — боковая колонка всегда раскрыта (Figma-состояние `treeMenu=fixed`).
315
+
316
+ #### Шапка (`header`)
317
+
318
+ `title` обязателен; опционально `icon`, `description`, `status` (пропсы **`@cloud-ru/ds-status`**) и `actions`.
319
+
320
+ #### Меню (`menu`)
321
+
322
+ - `items` — данные дерева (`TreeNodeProps[]` из **`@cloud-ru/ds-tree`**).
323
+ - `menuTitle` — заголовок меню.
324
+ - `selected` / `onSelect` — выбранный узел и колбэк выбора.
325
+ - `isMenuOpen` / `onMenuToggle` / `defaultMenuOpened` — управление раскрытием (в `popover`). В контролируемом режиме `onMenuToggle` обязателен.
326
+ - `enableShrinkMenuButton` — кнопка «Свернуть всё».
327
+ - `withDefaultOpenedMenuList` — раскрыть пункты меню по умолчанию.
328
+
329
+ #### Контент
330
+
331
+ - `content` — контентная часть страницы.
332
+ - `contentClassName` — класс контейнера контента.
333
+
334
+ ### Props
335
+
336
+ **TreeNavigationProps**
337
+
338
+ | Prop | Type | Default | Description |
339
+ |------|------|---------|-------------|
340
+ | `content` | `ReactNode` | — | Контентная часть страницы |
341
+ | `contentClassName` | `string` | — | Класс для контейнера контентной части |
342
+ | `header` | `StatusProps` | — | |
343
+ | `menu` | `TreeNodeId` \| `TreeNodeProps` | — | |
344
+ | `mode` | `"aside"` \| `"fixed"` \| `"popover"` | — | Вариант отображения |
345
+
346
+ ##### Related types
347
+
348
+ - `TreeNavigationMode` = `"aside"` \| `"fixed"` \| `"popover"`
349
+
350
+ ## PageSidebar
351
+
352
+ Сайдбар разделов страницы — список с группами и сворачиванием, опциональный поиск, шапка title/back и подвал.
353
+
354
+ Боковая навигация страницы: список разделов (`items`) с группами и сворачиванием, опциональный поиск, шапка (`header`) и подвал (`footerItems`). Используется самостоятельно и как слот `sidebar` в **`PageServices`**.
355
+
356
+ ### Когда использовать
357
+
358
+ - Навигация по разделам внутри одной страницы продукта.
359
+ - Нужен сворачиваемый сайдбар с группировкой пунктов, поиском и шапкой «назад» / «заголовок».
360
+
361
+ ### Анатомия
362
+
363
+ #### Элементы (`items`, `footerItems`)
364
+
365
+ `SidebarItem` — либо ссылка (`href`), либо узел с вложенностью (`items`). Базовые поля: `id`, `label`, `onClick`, `beforeContent` / `afterContent`, `disabledReason` (+ `disabledReasonPlacement`).
366
+
367
+ - `type` — `collapse` (по умолчанию, сворачиваемая группа) или `group`.
368
+ - `divider` — разделитель после узла.
369
+
370
+ #### Шапка (`header`)
371
+
372
+ - `type: 'title'` — заголовок с `label` и обязательной `icon`, опционально `afterContent`.
373
+ - `type: 'back'` — кнопка «назад» с `label`, `href` или `onClick`.
374
+
375
+ #### Состояние и поведение
376
+
377
+ - `open` / `defaultOpen` / `onOpenChanged` — раскрытие сайдбара (controlled / uncontrolled).
378
+ - `selected` / `onSelect` — выбранный пункт и колбэк.
379
+ - `hasSearch` — строка поиска по пунктам.
380
+ - `collapse` — поведение сворачивания (пропсы **`@cloud-ru/ds-list`**).
381
+
382
+ ### Props
383
+
384
+ **PageSidebarProps**
385
+
386
+ | Prop | Type | Default | Description |
387
+ |------|------|---------|-------------|
388
+ | `className` | `string` | — | |
389
+ | `collapse` | `CollapseState` \| `ListProps` | — | |
390
+ | `data-test-id` | `string` | — | |
391
+ | `defaultOpen` | `boolean` | — | |
392
+ | `documentation` | `Documentation` | — | Зарезервировано, в текущей реализации не используется. |
393
+ | `footerItems` | `SidebarItem` \| `SidebarItemBase` | — | |
394
+ | `hasSearch` | `boolean` | — | |
395
+ | `header` | `HeaderProps` | — | |
396
+ | `items` | `SidebarItem` \| `SidebarItemBase` | — | |
397
+ | `onOpenChanged` | `((open: boolean) => void)` | — | |
398
+ | `onSelect` | `((id: string \| number) => void)` | — | |
399
+ | `open` | `boolean` | — | |
400
+ | `pageContainerId` | `string` | — | Зарезервировано, в текущей реализации не используется. |
401
+ | `selected` | `string \| number` | — | |
402
+
403
+ ##### Related types
404
+
405
+ **Documentation**
406
+
407
+ | Prop | Type | Default | Description |
408
+ |------|------|---------|-------------|
409
+ | `href` | `string \| undefined` | — | |
410
+ | `onClick` | `MouseEventHandler \| undefined` | — | |
411
+ | `target` | `HTMLAttributeAnchorTarget \| undefined` | — | |
412
+
413
+ - `HeaderProps` = `{ type: typeof SIDEBAR_HEADER_TYPE.Title; label: string; icon: Icon; afterContent?: ReactNode; } | { type: typeof SIDEBAR_HEADER_TYPE.Back; label: string; href?: string; onClick?: MouseEventHandler; }`
414
+
415
+ - `SidebarItem` = `SidebarItemWithHref | SidebarItemWithItems`
416
+
417
+ **SidebarItemBase**
418
+
419
+ | Prop | Type | Default | Description |
420
+ |------|------|---------|-------------|
421
+ | `afterContent` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
422
+ | `beforeContent` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
423
+ | `data-test-id` | `string \| undefined` | — | |
424
+ | `disabledReason` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
425
+ | `disabledReasonPlacement` | `"bottom"` \| `"bottom-end"` \| `"bottom-start"` \| `"left"` \| `"left-end"` \| `"left-start"` \| `"right"` \| `"right-end"` \| `"right-start"` \| `"top"` \| `"top-end"` \| `"top-start"` | — | |
426
+ | `id` | `string \| number` | — | |
427
+ | `label` | `string` | — | |
428
+ | `onClick` | `((e: MouseEvent<HTMLElement>) => void) \| undefined` | — | |
429
+
430
+ ## Headline
431
+
432
+ Строка заголовка страницы — title, слоты до/после, действия и подзаголовок. Базовый слот, переиспользуемый раскладками.
433
+
434
+ Строка заголовка страницы: заголовок (`title`), слоты до/после, действия и подзаголовок. Базовый слот, на котором собраны шапки **`PageCatalog`**, **`PageServices`** и **`PageForm`**.
435
+
436
+ ### Когда использовать
437
+
438
+ - Шапка раздела внутри собственной раскладки, когда готовые `Page*` не подходят.
439
+ - Нужна согласованная по DS строка «заголовок + статус + действия».
440
+
441
+ ### Анатомия
442
+
443
+ - `title` — заголовок страницы.
444
+ - `slotBeforeTitle` — слот перед заголовком (например, кнопка «назад»).
445
+ - `slotAfterTitle` — слот после заголовка (например, статус).
446
+ - `actions` — действия справа от заголовка.
447
+ - `moreActions` — слот действий внутри строки заголовка (mobile-рендереры кладут сюда kebab / «ещё»).
448
+ - `subtitle` — подзаголовок под заголовком.
449
+ - `truncateTitle` — обрезать заголовок в одну строку с многоточием.
450
+
451
+ ### Props
452
+
453
+ **HeadlineProps**
454
+
455
+ | Prop | Type | Default | Description |
456
+ |------|------|---------|-------------|
457
+ | `actions` | `ReactNode` | — | Действия справа от заголовка |
458
+ | `data-test-id` | `string` | — | |
459
+ | `moreActions` | `ReactNode` | — | Слот действий внутри строки заголовка (mobile-рендереры кладут сюда kebab/«ещё») |
460
+ | `slotAfterTitle` | `ReactNode` | — | Слот после заголовка (например, статус) |
461
+ | `slotBeforeTitle` | `ReactNode` | — | Слот перед заголовком (например, кнопка «назад») |
462
+ | `subtitle` | `ReactNode` | — | Подзаголовок под заголовком |
463
+ | `title` | `string` | — | Заголовок страницы |
464
+ | `truncateTitle` | `boolean` | — | Обрезать заголовок в одну строку с многоточием |
465
+
466
+ ## DefaultSubtitle
467
+
468
+ Подзаголовок страницы «подпись + копируемое значение» с опциональной тултип-подсказкой.
469
+
470
+ Подзаголовок страницы из подписи (`label`) и копируемого значения (`value`, пропсы **`CopyLine`**). Типичный слот `subtitle` для строки с ID ресурса.
471
+
472
+ ### Когда использовать
473
+
474
+ - Подзаголовок детальной страницы с копируемым идентификатором (ID инстанса, ARN, адрес).
475
+ - Нужна пара «подпись — значение» с кнопкой копирования и опциональной подсказкой.
476
+
477
+ ### Анатомия
478
+
479
+ - `label` — подпись слева.
480
+ - `value` — копируемое значение (пропсы `CopyLine` из **`@cloud-ru/ds-uikit-product-copy`**).
481
+ - `labelTooltip` — тултип-подсказка рядом с подписью (рендерится через `QuestionTooltip`).
482
+
483
+ ### Props
484
+
485
+ **DefaultSubtitleProps**
486
+
487
+ | Prop | Type | Default | Description |
488
+ |------|------|---------|-------------|
489
+ | `data-test-id` | `string` | — | |
490
+ | `label` | `string` | — | Подпись слева |
491
+ | `labelTooltip` | `ReactNode` | — | Тултип-подсказка рядом с подписью |
492
+ | `value` | `CopyLineProps` | — | Копируемое значение (пропсы CopyLine) |
493
+
494
+ ## PageLoading
495
+
496
+ Заглушка-спиннер на всю область страницы на время загрузки данных раскладки.
497
+
498
+ Заглушка с центрированным спиннером на всю область страницы. Показывается, пока грузятся данные раскладки.
499
+
500
+ ### Когда использовать
501
+
502
+ - Первичная загрузка страницы продукта, до того как готовы данные для `Page*`-раскладки.
503
+ - Нужен единый по DS лоадер во всю область контента вместо локальных спиннеров.
504
+
505
+ ### Анатомия
506
+
507
+ - `className` — CSS-класс контейнера (например, чтобы задать высоту области).
508
+
509
+ Внутри — `Spinner` размера `m` из **`@cloud-ru/ds-loader`**, центрированный по контейнеру.
510
+
511
+ ### Props
512
+
513
+ **PageLoadingProps**
514
+
515
+ | Prop | Type | Default | Description |
516
+ |------|------|---------|-------------|
517
+ | `className` | `string` | — | CSS-класс |
518
+ | `data-test-id` | `string` | — | |
519
+
520
+ ## ActionView
521
+
522
+ ### Props
523
+
524
+ | Prop | Type | Default | Description |
525
+ |------|------|---------|-------------|
526
+ | `appearance` | `"critical"` \| `"neutral"` \| `"primary"` | — | Вариант оформления |
527
+ | `as` | `"button"` | — | Элемент или компонент для рендера: 'button' \| 'a' \| ComponentType (например Link из react-router-dom) |
528
+ | `button` | `Omit<ButtonProps, "view" \| "label" \| "icon"> \| (Omit<ButtonProps, "view" \| "appearance"> & { buttonType?: "filled"; }) \| (Omit<...> & { ...; })` | — | |
529
+ | `buttonProps` | `Pick<ButtonProps, "className" \| "view" \| "label" \| "disabled" \| "size" \| "appearance" \| "fullWidth">` | — | Свойства кнопки открытия виджета |
530
+ | `canEditQuota` | `boolean` | — | Флаг наличия прав на редактирование квот |
531
+ | `className` | `string` | — | Дополнительный класс <br/> Класс триггерной кнопки. |
532
+ | `closeDroplistOnItemClick` | `boolean` | `false` | Закрывать выпадающий список после клика на базовый айтем. <br/> Работает в режимах selection: 'none' \| 'single' |
533
+ | `closeOnPopstate` | `boolean` | — | Закрывать ли поповер при переходе по истории браузера |
534
+ | `commonProps` | `CommonProps` | — | |
535
+ | `counter` | `Omit<CounterProps, "size">` | — | Пропсы для counter. `appearance` можно задать явно (по умолчанию наследуется от appearance кнопки). |
536
+ | `data-test-id` | `string` | — | |
537
+ | `disableSorting` | `boolean` | — | Флаг отключения сортировки квот |
538
+ | `disabled` | `boolean` | — | Отключена |
539
+ | `error` | `boolean` | — | Флаг ошибки при загрузке квот |
540
+ | `fullWidth` | `boolean` | — | На всю ширину |
541
+ | `hidden` | `boolean` | `false` | |
542
+ | `hideIncreaseQuotaButton` | `boolean` | — | Флаг скрытия кнопки увеличения квоты |
543
+ | `icon` | `ReactNode` | — | Иконка |
544
+ | `iconPosition` | `"after"` \| `"before"` | — | Позиция иконки относительно текста |
545
+ | `innerRef` | `((instance: HTMLButtonElement \| null) => void) \| RefObject<HTMLButtonElement> \| null` | — | Ref на реальный DOM-элемент/инстанс, который рендерится через `as`. <br/> Используем явный проп, чтобы не зависеть от `forwardRef` и не тащить type-assertions на экспорт. |
546
+ | `items` | `Item[]` | — | Основные элементы списка |
547
+ | `label` | `string` | — | Текст кнопки |
548
+ | `list` | `Pick<DroplistProps, "className" \| "open" \| "onOpenChange" \| "items" \| "closeDroplistOnItemClick">` | — | |
549
+ | `loading` | `boolean` | — | Состояние загрузки <br/> Флаг загрузки квот |
550
+ | `minWidth` | `boolean` | — | Минимальная ширина контейнера (`min-width` из токена размера). По умолчанию `true`. <br/> `false` — кнопка сжимается по контенту вместо фиксированного минимума. |
551
+ | `onIncreaseQuotaClick` | `(() => void)` | — | Колбек нажатия на кнопку увеличения квот |
552
+ | `onOpenChange` | `((open: boolean) => void)` | — | Колбэк изменения раскрытия. |
553
+ | `onQuotasUrlClick` | `(() => void)` | — | Колбек клика по ссылке на страницу квот по проекту |
554
+ | `onRefresh` | `() => void` | — | Колбек на обновление списка квот при ошибке |
555
+ | `onWidgetOpen` | `(() => void)` | — | Колбек открытия виджета квот |
556
+ | `open` | `boolean` | — | Контролируемое состояние раскрытия. |
557
+ | `placement` | `"bottom"` \| `"bottom-end"` \| `"bottom-start"` \| `"left"` \| `"left-end"` \| `"left-start"` \| `"right"` \| `"right-end"` \| `"right-start"` \| `"top"` \| `"top-end"` \| `"top-start"` | `top` | Положение поповера относительно своего триггера (children). |
558
+ | `projectName` | `string` | — | Название проекта, по которому отображаются квоты |
559
+ | `quotas` | `QuotaItem[]` | — | Список квот для отображения |
560
+ | `quotasUrl` | `string` | — | Ссылка на страницу квот по проекту |
561
+ | `size` | `"l"` \| `"m"` \| `"s"` \| `"xs"` | — | Размер <br/> Размер триггера; для `xs` применяется кнопка `s`. |
562
+ | `tooltip` | `TooltipProps` | — | |
563
+ | `triggerClassName` | `string` | — | CSS-класс триггера |
564
+ | `variant` | `"dropdown"` \| `"droplist"` \| `"filled"` \| `"function"` \| `"kebab"` \| `"outline"` \| `"quota"` \| `"simple"` \| `"tonal"` | — | |
565
+ | `view` | `"elevated"` \| `"filled"` \| `"function"` \| `"outline"` \| `"simple"` \| `"tonal"` | — | Вариант кнопки (Figma: filled, outline, function, simple, elevated) |
566
+
567
+ ## ButtonDroplist
568
+
569
+ ### Props `ButtonDroplistProps`
570
+
571
+ | Prop | Type | Default | Description |
572
+ |------|------|---------|-------------|
573
+ | `button` | `ButtonProps` | — | |
574
+ | `list` | `DroplistListProps` \| `DroplistMobileSlots` \| `DroplistProps` \| `EmptyState` \| `PublicListContextType` \| `ScrollProps` \| `SelectionState` | — | |
575
+
576
+ ## ButtonKebab
577
+
578
+ ### Props `ButtonKebabProps`
579
+
580
+ | Prop | Type | Default | Description |
581
+ |------|------|---------|-------------|
582
+ | `button` | `ButtonProps` | — | |
583
+ | `list` | `DroplistListProps` \| `DroplistMobileSlots` \| `DroplistProps` \| `EmptyState` \| `PublicListContextType` \| `ScrollProps` \| `SelectionState` | — | |
584
+
585
+ ## ButtonQuota
586
+
587
+ ### Props `ButtonQuotaProps`
588
+
589
+ | Prop | Type | Default | Description |
590
+ |------|------|---------|-------------|
591
+ | `buttonProps` | `ButtonProps` | — | Свойства кнопки открытия виджета |
592
+ | `canEditQuota` | `boolean` | — | Флаг наличия прав на редактирование квот |
593
+ | `data-test-id` | `string` | — | |
594
+ | `disableSorting` | `boolean` | — | Флаг отключения сортировки квот |
595
+ | `error` | `boolean` | — | Флаг ошибки при загрузке квот |
596
+ | `hideIncreaseQuotaButton` | `boolean` | — | Флаг скрытия кнопки увеличения квоты |
597
+ | `loading` | `boolean` | — | Флаг загрузки квот |
598
+ | `onIncreaseQuotaClick` | `(() => void)` | — | Колбек нажатия на кнопку увеличения квот |
599
+ | `onQuotasUrlClick` | `(() => void)` | — | Колбек клика по ссылке на страницу квот по проекту |
600
+ | `onRefresh` | `() => void` | — | Колбек на обновление списка квот при ошибке |
601
+ | `onWidgetOpen` | `(() => void)` | — | Колбек открытия виджета квот |
602
+ | `projectName` | `string` | — | Название проекта, по которому отображаются квоты |
603
+ | `quotas` | `QuotaItem` | — | Список квот для отображения |
604
+ | `quotasUrl` | `string` | — | Ссылка на страницу квот по проекту |
605
+
606
+ ## ConditionalPopover
607
+
608
+ ### Props
609
+
610
+ | Prop | Type | Default | Description |
611
+ |------|------|---------|-------------|
612
+ | `isOpen` | `boolean` | — | |
613
+ | `onOpenChange` | `(value: boolean) => void` | — | |
614
+ | `tip` | `ReactNode` | — | |
615
+ | `withPopover` | `boolean` | — | |
616
+
617
+ ## DesktopActions
618
+
619
+ ### Props `Pick`
620
+
621
+ | Prop | Type | Default | Description |
622
+ |------|------|---------|-------------|
623
+ | `items` | `Action[]` | — | |
624
+
625
+ ## DesktopPageCatalog
626
+
627
+ ### Props `DesktopPageCatalogProps`
628
+
629
+ | Prop | Type | Default | Description |
630
+ |------|------|---------|-------------|
631
+ | `actions` | `ReactNode` | — | Действия справа от заголовка |
632
+ | `children` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
633
+ | `className` | `string` | — | CSS-класс |
634
+ | `data-test-id` | `string` | — | |
635
+ | `title` | `string` | — | Заголовок страницы |
636
+
637
+ ## DesktopPageForm
638
+
639
+ ### Props `DesktopPageFormProps`
640
+
641
+ | Prop | Type | Default | Description |
642
+ |------|------|---------|-------------|
643
+ | `children` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
644
+ | `className` | `string` | — | |
645
+ | `data-test-id` | `string` | — | |
646
+ | `footer` | `ButtonPrimaryVariant` \| `ButtonProps` \| `ButtonSecondaryVariant` \| `TooltipProps` | — | |
647
+ | `priceSummary` | `{ total: ReactNode; content?: ReactNode; }` | — | |
648
+ | `sideBlock` | `ModalCustomProps` | — | |
649
+ | `stepper` | `ReactNode` | — | |
650
+ | `stickyFooter` | `boolean` | — | Закрепляет футер внизу формы при прокрутке контента. |
651
+ | `subtitle` | `ReactNode` | — | Подзаголовок под заголовком |
652
+ | `title` | `string` | — | Заголовок страницы |
653
+
654
+ #### Related types
655
+
656
+ - `ButtonPrimaryVariant` = `"add"` \| `"continue"` \| `"create"` \| `"rent"` \| `"restore"` \| `"save"` \| `"send"`
657
+
658
+ - `ButtonSecondaryVariant` = `"back"` \| `"cancel"`
659
+
660
+ ## DesktopPageServices
661
+
662
+ ### Props `DesktopPageServicesProps`
663
+
664
+ | Prop | Type | Default | Description |
665
+ |------|------|---------|-------------|
666
+ | `actions` | `ReactNode` | — | Действия справа от заголовка |
667
+ | `autoHeight` | `boolean` | — | |
668
+ | `children` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
669
+ | `className` | `string` | — | |
670
+ | `data-test-id` | `string` | — | |
671
+ | `limitContentMaxWidth` | `boolean` | — | |
672
+ | `sidebar` | `PageSidebarProps` | — | |
673
+ | `slotAfterTitle` | `ReactNode` | — | Слот после заголовка (например, статус) |
674
+ | `slotBeforeTitle` | `ReactNode` | — | Слот перед заголовком (например, кнопка «назад») |
675
+ | `subtitle` | `ReactNode` | — | Подзаголовок под заголовком |
676
+ | `title` | `string` | — | Заголовок страницы |
677
+ | `truncateTitle` | `boolean` | — | Обрезать заголовок в одну строку с многоточием |
678
+
679
+ #### Related types
680
+
681
+ **Documentation**
682
+
683
+ | Prop | Type | Default | Description |
684
+ |------|------|---------|-------------|
685
+ | `href` | `string \| undefined` | — | |
686
+ | `onClick` | `MouseEventHandler \| undefined` | — | |
687
+ | `target` | `HTMLAttributeAnchorTarget \| undefined` | — | |
688
+
689
+ - `HeaderProps` = `{ type: typeof SIDEBAR_HEADER_TYPE.Title; label: string; icon: Icon; afterContent?: ReactNode; } | { type: typeof SIDEBAR_HEADER_TYPE.Back; label: string; href?: string; onClick?: MouseEventHandler; }`
690
+
691
+ **PageSidebarProps**
692
+
693
+ | Prop | Type | Default | Description |
694
+ |------|------|---------|-------------|
695
+ | `className` | `string \| undefined` | — | |
696
+ | `collapse` | `CollapseState` \| `ListProps` | — | |
697
+ | `data-test-id` | `string \| undefined` | — | |
698
+ | `defaultOpen` | `boolean \| undefined` | — | |
699
+ | `documentation` | `Documentation` | — | Зарезервировано, в текущей реализации не используется. |
700
+ | `footerItems` | `SidebarItem` \| `SidebarItemBase` | — | |
701
+ | `hasSearch` | `boolean \| undefined` | — | |
702
+ | `header` | `HeaderProps` | — | |
703
+ | `items` | `SidebarItem` \| `SidebarItemBase` | — | |
704
+ | `onOpenChanged` | `((open: boolean) => void) \| undefined` | — | |
705
+ | `onSelect` | `((id: string \| number) => void) \| undefined` | — | |
706
+ | `open` | `boolean \| undefined` | — | |
707
+ | `pageContainerId` | `string \| undefined` | — | Зарезервировано, в текущей реализации не используется. |
708
+ | `selected` | `string \| number \| undefined` | — | |
709
+
710
+ - `SidebarItem` = `SidebarItemWithHref | SidebarItemWithItems`
711
+
712
+ **SidebarItemBase**
713
+
714
+ | Prop | Type | Default | Description |
715
+ |------|------|---------|-------------|
716
+ | `afterContent` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
717
+ | `beforeContent` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
718
+ | `data-test-id` | `string \| undefined` | — | |
719
+ | `disabledReason` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
720
+ | `disabledReasonPlacement` | `"bottom"` \| `"bottom-end"` \| `"bottom-start"` \| `"left"` \| `"left-end"` \| `"left-start"` \| `"right"` \| `"right-end"` \| `"right-start"` \| `"top"` \| `"top-end"` \| `"top-start"` | — | |
721
+ | `id` | `string \| number` | — | |
722
+ | `label` | `string` | — | |
723
+ | `onClick` | `((e: MouseEvent<HTMLElement>) => void) \| undefined` | — | |
724
+
725
+ ## Menu
726
+
727
+ ### Props
728
+
729
+ | Prop | Type | Default | Description |
730
+ |------|------|---------|-------------|
731
+ | `enableShrinkMenuButton` | `boolean` | `true` | |
732
+ | `menuItems` | `TreeNodeProps[]` | — | |
733
+ | `menuTitle` | `string` | — | |
734
+ | `onSelect` | `((selectedKey: string, node: TreeNodeProps) => void)` | — | |
735
+ | `selected` | `string` | — | |
736
+ | `withDefaultOpenedMenuList` | `boolean` | — | |
737
+
738
+ ## MobileActions
739
+
740
+ ### Props `ActionsProps`
741
+
742
+ | Prop | Type | Default | Description |
743
+ |------|------|---------|-------------|
744
+ | `hideDelete` | `boolean \| undefined` | — | |
745
+ | `hideDownload` | `boolean \| undefined` | — | |
746
+ | `hideRetry` | `boolean \| undefined` | — | |
747
+ | `items` | `Action[]` | — | |
748
+ | `maxVisibleItems` | `number` | — | |
749
+
750
+ ## MobilePageCatalog
751
+
752
+ ### Props `MobilePageCatalogProps`
753
+
754
+ | Prop | Type | Default | Description |
755
+ |------|------|---------|-------------|
756
+ | `actions` | `ActionsProps` \| `ButtonDropdownDroplistConfig` \| `ButtonDroplistProps` \| `ButtonKebabProps` \| `QuotaWidgetPropsBase` | `[]` | |
757
+ | `children` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
758
+ | `className` | `string` | — | |
759
+ | `data-test-id` | `string` | — | |
760
+ | `maxVisibleActionsItems` | `ActionsProps` | — | |
761
+ | `title` | `string` | — | Заголовок страницы |
762
+
763
+ #### Related types
764
+
765
+ - `Action` = `{ tooltip?: TooltipProps; hidden?: boolean; } & (({ variant?: typeof BUTTON_TYPE.Filled; } & { 'data-test-id'?: string; } & AriaAttributes & { label?: string; icon?: ReactNode; iconPosition?: IconPosition; appearance?: Appearance; size?: Size; disabled?: boolean; loading?: boolean; fullWidth?: boolean; minWidth?: boolean; className?: string; view?: View; counter?: Omit<CounterProps, "size">; } & { as?: "button" | undefined; innerRef?: ((instance: HTMLButtonElement | null) => void | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | RefObject<HTMLButtonElement> | null | undefined; } & Omit<Omit<DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">, "data-test-id" | keyof AriaAttributes | "className" | "view" | "label" | "ref" | "disabled" | "size" | "icon" | "appearance" | "loading" | "as" | "iconPosition" | "fullWidth" | "minWidth" | "counter">) | ({ variant: typeof BUTTON_TYPE.Outline; } & { 'data-test-id'?: string; } & AriaAttributes & { label?: string; icon?: ReactNode; iconPosition?: IconPosition; appearance?: Appearance; size?: Size; disabled?: boolean; loading?: boolean; fullWidth?: boolean; minWidth?: boolean; className?: string; view?: View; counter?: Omit<CounterProps, "size">; } & { as?: "button" | undefined; innerRef?: ((instance: HTMLButtonElement | null) => void | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | RefObject<HTMLButtonElement> | null | undefined; } & Omit<Omit<DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">, "data-test-id" | keyof AriaAttributes | "className" | "view" | "label" | "ref" | "disabled" | "size" | "icon" | "appearance" | "loading" | "as" | "iconPosition" | "fullWidth" | "minWidth" | "counter">) | ({ variant: typeof BUTTON_TYPE.Tonal; } & { 'data-test-id'?: string; } & AriaAttributes & { label?: string; icon?: ReactNode; iconPosition?: IconPosition; appearance?: Appearance; size?: Size; disabled?: boolean; loading?: boolean; fullWidth?: boolean; minWidth?: boolean; className?: string; view?: View; counter?: Omit<CounterProps, "size">; } & { as?: "button" | undefined; innerRef?: ((instance: HTMLButtonElement | null) => void | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | RefObject<HTMLButtonElement> | null | undefined; } & Omit<Omit<DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">, "data-test-id" | keyof AriaAttributes | "className" | "view" | "label" | "ref" | "disabled" | "size" | "icon" | "appearance" | "loading" | "as" | "iconPosition" | "fullWidth" | "minWidth" | "counter">) | ({ variant: typeof BUTTON_TYPE.Function; } & { 'data-test-id'?: string; } & AriaAttributes & { label?: string; icon?: ReactNode; iconPosition?: IconPosition; appearance?: Appearance; size?: Size; disabled?: boolean; loading?: boolean; fullWidth?: boolean; minWidth?: boolean; className?: string; view?: View; counter?: Omit<CounterProps, "size">; } & { as?: "button" | undefined; innerRef?: ((instance: HTMLButtonElement | null) => void | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | RefObject<HTMLButtonElement> | null | undefined; } & Omit<Omit<DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">, "data-test-id" | keyof AriaAttributes | "className" | "view" | "label" | "ref" | "disabled" | "size" | "icon" | "appearance" | "loading" | "as" | "iconPosition" | "fullWidth" | "minWidth" | "counter">) | ({ variant: typeof BUTTON_TYPE.Simple; } & { 'data-test-id'?: string; } & AriaAttributes & { label?: string; icon?: ReactNode; iconPosition?: IconPosition; appearance?: Appearance; size?: Size; disabled?: boolean; loading?: boolean; fullWidth?: boolean; minWidth?: boolean; className?: string; view?: View; counter?: Omit<CounterProps, "size">; } & { as?: "button" | undefined; innerRef?: ((instance: HTMLButtonElement | null) => void | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | RefObject<HTMLButtonElement> | null | undefined; } & Omit<Omit<DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">, "data-test-id" | keyof AriaAttributes | "className" | "view" | "label" | "ref" | "disabled" | "size" | "icon" | "appearance" | "loading" | "as" | "iconPosition" | "fullWidth" | "minWidth" | "counter">) | ({ variant: typeof BUTTON_TYPE.Dropdown; } & { 'data-test-id'?: string; } & AriaAttributes & Omit<ButtonProps, "view" | "size" | "icon" | "iconPosition"> & { size?: "xs" | NonNullable<Size | undefined>; className?: string; open?: boolean; onOpenChange?: (open: boolean) => void; } & { items: Item[]; triggerClassName?: string | undefined; closeOnPopstate?: boolean | undefined; placement?: Placement | undefined; closeDroplistOnItemClick?: boolean | undefined; }) | ({ variant: typeof BUTTON_TYPE.Kebab; } & ButtonKebabProps) | ({ variant: typeof BUTTON_TYPE.Droplist; } & ButtonDroplistProps) | ({ variant: typeof BUTTON_TYPE.Quota; } & { 'data-test-id'?: string; } & AriaAttributes & QuotaWidgetPropsBase & { quotasUrl: string; onQuotasUrlClick?: () => void; buttonProps?: Pick<ButtonProps, "size" | "className" | "fullWidth" | "label" | "appearance" | "disabled" | "view">; }))`
766
+
767
+ **ActionsProps**
768
+
769
+ | Prop | Type | Default | Description |
770
+ |------|------|---------|-------------|
771
+ | `items` | `Action` \| `ButtonDropdownDroplistConfig` \| `ButtonDroplistProps` \| `ButtonKebabProps` \| `QuotaWidgetPropsBase` | — | |
772
+ | `maxVisibleItems` | `number \| undefined` | — | |
773
+
774
+ **ButtonDroplistProps**
775
+
776
+ | Prop | Type | Default | Description |
777
+ |------|------|---------|-------------|
778
+ | `button` | `ButtonProps` | — | |
779
+ | `list` | `DroplistListProps` \| `DroplistMobileSlots` \| `DroplistProps` \| `EmptyState` \| `PublicListContextType` \| `ScrollProps` \| `SelectionState` | — | |
780
+
781
+ **ButtonKebabProps**
782
+
783
+ | Prop | Type | Default | Description |
784
+ |------|------|---------|-------------|
785
+ | `button` | `ButtonProps` | — | |
786
+ | `list` | `DroplistListProps` \| `DroplistMobileSlots` \| `DroplistProps` \| `EmptyState` \| `PublicListContextType` \| `ScrollProps` \| `SelectionState` | — | |
787
+
788
+ ## MobilePageForm
789
+
790
+ ### Props `DesktopPageFormProps`
791
+
792
+ | Prop | Type | Default | Description |
793
+ |------|------|---------|-------------|
794
+ | `children` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
795
+ | `className` | `string` | — | |
796
+ | `data-test-id` | `string` | — | |
797
+ | `footer` | `ButtonPrimaryVariant` \| `ButtonProps` \| `ButtonSecondaryVariant` \| `TooltipProps` | — | |
798
+ | `priceSummary` | `{ total: ReactNode; content?: ReactNode; }` | — | |
799
+ | `sideBlock` | `ModalCustomProps` | — | |
800
+ | `stepper` | `ReactNode` | — | |
801
+ | `stickyFooter` | `boolean` | — | Закрепляет футер внизу формы при прокрутке контента. |
802
+ | `subtitle` | `ReactNode` | — | Подзаголовок под заголовком |
803
+ | `title` | `string` | — | Заголовок страницы |
804
+
805
+ #### Related types
806
+
807
+ - `ButtonPrimaryVariant` = `"add"` \| `"continue"` \| `"create"` \| `"rent"` \| `"restore"` \| `"save"` \| `"send"`
808
+
809
+ - `ButtonSecondaryVariant` = `"back"` \| `"cancel"`
810
+
811
+ ## MobilePageServices
812
+
813
+ ### Props `MobilePageServicesProps`
814
+
815
+ | Prop | Type | Default | Description |
816
+ |------|------|---------|-------------|
817
+ | `actions` | `ActionsProps` \| `ButtonDropdownDroplistConfig` \| `ButtonDroplistProps` \| `ButtonKebabProps` \| `QuotaWidgetPropsBase` | `[]` | |
818
+ | `children` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
819
+ | `className` | `string` | — | |
820
+ | `data-test-id` | `string` | — | |
821
+ | `maxVisibleActionsItems` | `ActionsProps` | — | |
822
+ | `sidebar` | `SidebarSelectProps` | — | |
823
+ | `slotAfterTitle` | `ReactNode` | — | Слот после заголовка (например, статус) |
824
+ | `slotBeforeTitle` | `ReactNode` | — | Слот перед заголовком (например, кнопка «назад») |
825
+ | `subtitle` | `ReactNode` | — | Подзаголовок под заголовком |
826
+ | `title` | `string` | — | Заголовок страницы |
827
+
828
+ #### Related types
829
+
830
+ **ButtonDroplistProps**
831
+
832
+ | Prop | Type | Default | Description |
833
+ |------|------|---------|-------------|
834
+ | `button` | `ButtonProps` | — | |
835
+ | `list` | `DroplistListProps` \| `DroplistMobileSlots` \| `DroplistProps` \| `EmptyState` \| `PublicListContextType` \| `ScrollProps` \| `SelectionState` | — | |
836
+
837
+ **ButtonKebabProps**
838
+
839
+ | Prop | Type | Default | Description |
840
+ |------|------|---------|-------------|
841
+ | `button` | `ButtonProps` | — | |
842
+ | `list` | `DroplistListProps` \| `DroplistMobileSlots` \| `DroplistProps` \| `EmptyState` \| `PublicListContextType` \| `ScrollProps` \| `SelectionState` | — | |
843
+
844
+ - `SidebarItem` = `SidebarItemWithHref | SidebarItemWithItems`
845
+
846
+ **SidebarItemBase**
847
+
848
+ | Prop | Type | Default | Description |
849
+ |------|------|---------|-------------|
850
+ | `afterContent` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
851
+ | `beforeContent` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
852
+ | `data-test-id` | `string \| undefined` | — | |
853
+ | `disabledReason` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
854
+ | `disabledReasonPlacement` | `"bottom"` \| `"bottom-end"` \| `"bottom-start"` \| `"left"` \| `"left-end"` \| `"left-start"` \| `"right"` \| `"right-end"` \| `"right-start"` \| `"top"` \| `"top-end"` \| `"top-start"` | — | |
855
+ | `id` | `string \| number` | — | |
856
+ | `label` | `string` | — | |
857
+ | `onClick` | `((e: MouseEvent<HTMLElement>) => void) \| undefined` | — | |
858
+
859
+ **SidebarSelectProps**
860
+
861
+ | Prop | Type | Default | Description |
862
+ |------|------|---------|-------------|
863
+ | `className` | `string \| undefined` | — | |
864
+ | `collapse` | `CollapseState` \| `DroplistProps` | — | |
865
+ | `data-test-id` | `string \| undefined` | — | |
866
+ | `footerItems` | `SidebarItem` \| `SidebarItemBase` | — | |
867
+ | `hasSearch` | `boolean \| undefined` | — | |
868
+ | `items` | `SidebarItem` \| `SidebarItemBase` | — | |
869
+ | `onSelect` | `((id: string \| number) => void) \| undefined` | — | |
870
+ | `selected` | `string \| number \| undefined` | — | |
871
+
872
+ ## SearchContextProvider
873
+
874
+ ### Props
875
+
876
+ | Prop | Type | Default | Description |
877
+ |------|------|---------|-------------|
878
+
879
+ ## SidebarSelect
880
+
881
+ ### Props `SidebarSelectProps`
882
+
883
+ | Prop | Type | Default | Description |
884
+ |------|------|---------|-------------|
885
+ | `className` | `string` | — | |
886
+ | `collapse` | `CollapseState` \| `DroplistProps` | — | |
887
+ | `data-test-id` | `string` | — | |
888
+ | `footerItems` | `SidebarItem` \| `SidebarItemBase` | — | |
889
+ | `hasSearch` | `boolean` | — | |
890
+ | `items` | `SidebarItem` \| `SidebarItemBase` | — | |
891
+ | `onSelect` | `((id: string \| number) => void)` | — | |
892
+ | `selected` | `string \| number` | — | |
893
+
894
+ #### Related types
895
+
896
+ - `SidebarItem` = `SidebarItemWithHref | SidebarItemWithItems`
897
+
898
+ **SidebarItemBase**
899
+
900
+ | Prop | Type | Default | Description |
901
+ |------|------|---------|-------------|
902
+ | `afterContent` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
903
+ | `beforeContent` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
904
+ | `data-test-id` | `string \| undefined` | — | |
905
+ | `disabledReason` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | |
906
+ | `disabledReasonPlacement` | `"bottom"` \| `"bottom-end"` \| `"bottom-start"` \| `"left"` \| `"left-end"` \| `"left-start"` \| `"right"` \| `"right-end"` \| `"right-start"` \| `"top"` \| `"top-end"` \| `"top-start"` | — | |
907
+ | `id` | `string \| number` | — | |
908
+ | `label` | `string` | — | |
909
+ | `onClick` | `((e: MouseEvent<HTMLElement>) => void) \| undefined` | — | |
910
+
911
+ ## SidebarTitle
912
+
913
+ ### Props
914
+
915
+ | Prop | Type | Default | Description |
916
+ |------|------|---------|-------------|
917
+ | `afterContent` | `ReactNode` | — | |
918
+ | `className` | `string` | — | |
919
+ | `icon` | `JSXElementConstructor<{ size?: number \| undefined; className?: string \| undefined; }>` | — | |
920
+ | `title` | `string` | — | |
921
+
922
+ ## useButtonWithTooltip
923
+
924
+ ### Props
925
+
926
+ | Prop | Type | Default | Description |
927
+ |------|------|---------|-------------|
928
+ | `tooltip` | `TooltipProps` | — | |
929
+ | `view` | `"elevated"` \| `"filled"` \| `"function"` \| `"outline"` \| `"simple"` \| `"tonal"` | — | |
930
+
931
+ ## useSearchFilter
932
+
933
+ ### Props
934
+
935
+ | Prop | Type | Default | Description |
936
+ |------|------|---------|-------------|
937
+
938
+ ## useStickyFooterShadow
939
+
940
+ ### Props
941
+
942
+ | Prop | Type | Default | Description |
943
+ |------|------|---------|-------------|