@gravity-ui/navigation 5.0.0-beta.2 → 5.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 (458) hide show
  1. package/build/cjs/assets/icons/{control-menu-button.svg.js → divider-collapsed-compact.svg.js} +7 -7
  2. package/build/cjs/assets/icons/divider-collapsed-compact.svg.js.map +1 -0
  3. package/build/cjs/components/AsideHeader/AsideHeader.css +1 -1
  4. package/build/cjs/components/AsideHeader/AsideHeader.js +3 -3
  5. package/build/cjs/components/AsideHeader/AsideHeader.js.map +1 -1
  6. package/build/cjs/components/AsideHeader/AsideHeader.module.scss.js +1 -1
  7. package/build/cjs/components/AsideHeader/AsideHeaderContext.d.ts +28 -3
  8. package/build/cjs/components/AsideHeader/AsideHeaderContext.js +10 -4
  9. package/build/cjs/components/AsideHeader/AsideHeaderContext.js.map +1 -1
  10. package/build/cjs/components/AsideHeader/FooterLayoutContext.d.ts +7 -0
  11. package/build/cjs/components/AsideHeader/FooterLayoutContext.js +10 -0
  12. package/build/cjs/components/AsideHeader/FooterLayoutContext.js.map +1 -0
  13. package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.css +1 -1
  14. package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.js +103 -45
  15. package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.js.map +1 -1
  16. package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.module.scss.js +1 -1
  17. package/build/cjs/components/AsideHeader/components/AllPagesPanel/constants.d.ts +1 -0
  18. package/build/cjs/components/AsideHeader/components/AllPagesPanel/constants.js +2 -0
  19. package/build/cjs/components/AsideHeader/components/AllPagesPanel/constants.js.map +1 -1
  20. package/build/cjs/components/AsideHeader/components/AllPagesPanel/i18n/en.json.js +0 -1
  21. package/build/cjs/components/AsideHeader/components/AllPagesPanel/i18n/en.json.js.map +1 -1
  22. package/build/cjs/components/AsideHeader/components/AllPagesPanel/i18n/index.d.ts +4 -4
  23. package/build/cjs/components/AsideHeader/components/AllPagesPanel/i18n/ru.json.js +0 -1
  24. package/build/cjs/components/AsideHeader/components/AllPagesPanel/i18n/ru.json.js.map +1 -1
  25. package/build/cjs/components/AsideHeader/components/AllPagesPanel/index.d.ts +0 -1
  26. package/build/cjs/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.d.ts +3 -4
  27. package/build/cjs/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js +67 -15
  28. package/build/cjs/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js.map +1 -1
  29. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.d.ts +3 -0
  30. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.js +17 -0
  31. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.js.map +1 -0
  32. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.d.ts +9 -0
  33. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.js +27 -0
  34. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.js.map +1 -0
  35. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getIsMenuItem.d.ts +2 -0
  36. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getIsMenuItem.js +13 -0
  37. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getIsMenuItem.js.map +1 -0
  38. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.d.ts +73 -0
  39. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.js +144 -0
  40. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.js.map +1 -0
  41. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.d.ts +5 -0
  42. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.js +45 -0
  43. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.js.map +1 -0
  44. package/build/cjs/components/AsideHeader/components/CollapseButton/CollapseButton.css +1 -1
  45. package/build/cjs/components/AsideHeader/components/CollapseButton/CollapseButton.d.ts +2 -1
  46. package/build/cjs/components/AsideHeader/components/CollapseButton/CollapseButton.js +16 -11
  47. package/build/cjs/components/AsideHeader/components/CollapseButton/CollapseButton.js.map +1 -1
  48. package/build/cjs/components/AsideHeader/components/CollapseButton/CollapseButton.module.scss.js +1 -1
  49. package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.css +1 -1
  50. package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.d.ts +35 -5
  51. package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.js +79 -124
  52. package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.js.map +1 -1
  53. package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.module.scss.js +1 -1
  54. package/build/cjs/components/AsideHeader/components/CompositeBar/HighlightedItem/HighlightedItem.css +1 -1
  55. package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.css +25 -1
  56. package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.d.ts +9 -2
  57. package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.js +46 -73
  58. package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.js.map +1 -1
  59. package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.module.scss.js +1 -1
  60. package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.css +1 -0
  61. package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.d.ts +8 -0
  62. package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js +27 -0
  63. package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js.map +1 -0
  64. package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.module.scss.js +8 -0
  65. package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.module.scss.js.map +1 -0
  66. package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/index.d.ts +1 -0
  67. package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.d.ts +21 -0
  68. package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.js +146 -0
  69. package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.js.map +1 -0
  70. package/build/cjs/components/AsideHeader/components/CompositeBar/constants.d.ts +0 -3
  71. package/build/cjs/components/AsideHeader/components/CompositeBar/constants.js +0 -4
  72. package/build/cjs/components/AsideHeader/components/CompositeBar/constants.js.map +1 -1
  73. package/build/cjs/components/AsideHeader/components/CompositeBar/utils.d.ts +5 -9
  74. package/build/cjs/components/AsideHeader/components/CompositeBar/utils.js +57 -73
  75. package/build/cjs/components/AsideHeader/components/CompositeBar/utils.js.map +1 -1
  76. package/build/cjs/components/AsideHeader/components/FirstPanel.js +45 -20
  77. package/build/cjs/components/AsideHeader/components/FirstPanel.js.map +1 -1
  78. package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.css +1 -0
  79. package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.d.ts +19 -0
  80. package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.js +95 -0
  81. package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.js.map +1 -0
  82. package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.module.scss.js +8 -0
  83. package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.module.scss.js.map +1 -0
  84. package/build/cjs/components/AsideHeader/components/FooterBar/constants.d.ts +1 -0
  85. package/build/cjs/components/AsideHeader/components/FooterBar/constants.js +6 -0
  86. package/build/cjs/components/AsideHeader/components/FooterBar/constants.js.map +1 -0
  87. package/build/cjs/components/AsideHeader/components/FooterBar/index.d.ts +1 -0
  88. package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.css +1 -1
  89. package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.d.ts +2 -0
  90. package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.js +12 -1
  91. package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.js.map +1 -1
  92. package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.module.scss.js +1 -1
  93. package/build/cjs/components/AsideHeader/components/Header.js +13 -5
  94. package/build/cjs/components/AsideHeader/components/Header.js.map +1 -1
  95. package/build/cjs/components/AsideHeader/components/PageLayout/AsideFallback.css +2 -0
  96. package/build/cjs/components/AsideHeader/components/PageLayout/AsideFallback.js +4 -3
  97. package/build/cjs/components/AsideHeader/components/PageLayout/AsideFallback.js.map +1 -1
  98. package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.css +2 -0
  99. package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.d.ts +4 -1
  100. package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.js +19 -6
  101. package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.js.map +1 -1
  102. package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.css +2 -0
  103. package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.d.ts +1 -1
  104. package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.js +8 -2
  105. package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.js.map +1 -1
  106. package/build/cjs/components/AsideHeader/components/Panels.d.ts +1 -1
  107. package/build/cjs/components/AsideHeader/components/Panels.js +17 -3
  108. package/build/cjs/components/AsideHeader/components/Panels.js.map +1 -1
  109. package/build/cjs/components/AsideHeader/hooks/useDelayedToggle.d.ts +6 -0
  110. package/build/cjs/components/AsideHeader/hooks/useDelayedToggle.js +57 -0
  111. package/build/cjs/components/AsideHeader/hooks/useDelayedToggle.js.map +1 -0
  112. package/build/cjs/components/AsideHeader/hooks/useIsExpanded.d.ts +9 -0
  113. package/build/cjs/components/AsideHeader/hooks/useIsExpanded.js +67 -0
  114. package/build/cjs/components/AsideHeader/hooks/useIsExpanded.js.map +1 -0
  115. package/build/cjs/components/AsideHeader/i18n/en.json.js +4 -1
  116. package/build/cjs/components/AsideHeader/i18n/en.json.js.map +1 -1
  117. package/build/cjs/components/AsideHeader/i18n/index.d.ts +4 -4
  118. package/build/cjs/components/AsideHeader/i18n/ru.json.js +4 -1
  119. package/build/cjs/components/AsideHeader/i18n/ru.json.js.map +1 -1
  120. package/build/cjs/components/AsideHeader/index.d.ts +3 -2
  121. package/build/cjs/components/AsideHeader/types.d.ts +40 -9
  122. package/build/cjs/components/AsideHeader/types.js.map +1 -1
  123. package/build/cjs/components/AsideHeader/useAsideHeaderInnerContextValue.d.ts +6 -1
  124. package/build/cjs/components/AsideHeader/useAsideHeaderInnerContextValue.js +41 -6
  125. package/build/cjs/components/AsideHeader/useAsideHeaderInnerContextValue.js.map +1 -1
  126. package/build/cjs/components/AsideHeader/utils/getGroupHeight.d.ts +2 -0
  127. package/build/cjs/components/AsideHeader/utils/getGroupHeight.js +16 -0
  128. package/build/cjs/components/AsideHeader/utils/getGroupHeight.js.map +1 -0
  129. package/build/cjs/components/Footer/desktop/Footer.js +1 -1
  130. package/build/cjs/components/Footer/desktop/Footer.js.map +1 -1
  131. package/build/cjs/components/Footer/mobile/Footer.js +1 -1
  132. package/build/cjs/components/Footer/mobile/Footer.js.map +1 -1
  133. package/build/cjs/components/HotkeysPanel/HotkeysPanel.d.ts +5 -3
  134. package/build/cjs/components/HotkeysPanel/HotkeysPanel.js +4 -7
  135. package/build/cjs/components/HotkeysPanel/HotkeysPanel.js.map +1 -1
  136. package/build/cjs/components/Logo/Logo.css +1 -1
  137. package/build/cjs/components/Logo/Logo.d.ts +7 -3
  138. package/build/cjs/components/Logo/Logo.js +19 -6
  139. package/build/cjs/components/Logo/Logo.js.map +1 -1
  140. package/build/cjs/components/Logo/Logo.module.scss.js +1 -1
  141. package/build/cjs/components/MobileHeader/BurgerMenu/BurgerCompositeBar/BurgerCompositeBar.css +1 -1
  142. package/build/cjs/components/MobileHeader/BurgerMenu/BurgerCompositeBar/BurgerCompositeBar.module.scss.js +1 -1
  143. package/build/cjs/components/MobileHeader/MobileHeader.d.ts +1 -1
  144. package/build/cjs/components/MobileHeader/MobileHeader.js +6 -6
  145. package/build/cjs/components/MobileHeader/MobileHeader.js.map +1 -1
  146. package/build/cjs/components/MobileHeader/types.d.ts +1 -1
  147. package/build/cjs/components/MobileLogo/MobileLogo.d.ts +1 -1
  148. package/build/cjs/components/MobileLogo/MobileLogo.js +2 -2
  149. package/build/cjs/components/MobileLogo/MobileLogo.js.map +1 -1
  150. package/build/cjs/components/Settings/Settings.css +1 -1
  151. package/build/cjs/components/Settings/SettingsMenu/SettingsMenu.css +1 -1
  152. package/build/cjs/components/Settings/SettingsMenu/SettingsMenu.js +5 -1
  153. package/build/cjs/components/Settings/SettingsMenu/SettingsMenu.js.map +1 -1
  154. package/build/cjs/components/Settings/SettingsMenu/SettingsMenu.module.scss.js +1 -1
  155. package/build/cjs/components/constants.d.ts +10 -4
  156. package/build/cjs/components/constants.js +17 -5
  157. package/build/cjs/components/constants.js.map +1 -1
  158. package/build/cjs/components/types.d.ts +24 -12
  159. package/build/cjs/components/utils/getCollapsedWidth.d.ts +1 -0
  160. package/build/cjs/components/utils/getCollapsedWidth.js +10 -0
  161. package/build/cjs/components/utils/getCollapsedWidth.js.map +1 -0
  162. package/build/cjs/index.js +4 -0
  163. package/build/cjs/index.js.map +1 -1
  164. package/build/esm/assets/icons/{control-menu-button.svg.js → divider-collapsed-compact.svg.js} +7 -7
  165. package/build/esm/assets/icons/divider-collapsed-compact.svg.js.map +1 -0
  166. package/build/esm/components/AsideHeader/AsideHeader.css +1 -1
  167. package/build/esm/components/AsideHeader/AsideHeader.js +3 -3
  168. package/build/esm/components/AsideHeader/AsideHeader.js.map +1 -1
  169. package/build/esm/components/AsideHeader/AsideHeader.module.scss.js +1 -1
  170. package/build/esm/components/AsideHeader/AsideHeaderContext.d.ts +28 -3
  171. package/build/esm/components/AsideHeader/AsideHeaderContext.js +10 -5
  172. package/build/esm/components/AsideHeader/AsideHeaderContext.js.map +1 -1
  173. package/build/esm/components/AsideHeader/FooterLayoutContext.d.ts +7 -0
  174. package/build/esm/components/AsideHeader/FooterLayoutContext.js +7 -0
  175. package/build/esm/components/AsideHeader/FooterLayoutContext.js.map +1 -0
  176. package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.css +1 -1
  177. package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.js +104 -46
  178. package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.js.map +1 -1
  179. package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.module.scss.js +1 -1
  180. package/build/esm/components/AsideHeader/components/AllPagesPanel/constants.d.ts +1 -0
  181. package/build/esm/components/AsideHeader/components/AllPagesPanel/constants.js +2 -1
  182. package/build/esm/components/AsideHeader/components/AllPagesPanel/constants.js.map +1 -1
  183. package/build/esm/components/AsideHeader/components/AllPagesPanel/i18n/en.json.js +0 -1
  184. package/build/esm/components/AsideHeader/components/AllPagesPanel/i18n/en.json.js.map +1 -1
  185. package/build/esm/components/AsideHeader/components/AllPagesPanel/i18n/index.d.ts +4 -4
  186. package/build/esm/components/AsideHeader/components/AllPagesPanel/i18n/ru.json.js +0 -1
  187. package/build/esm/components/AsideHeader/components/AllPagesPanel/i18n/ru.json.js.map +1 -1
  188. package/build/esm/components/AsideHeader/components/AllPagesPanel/index.d.ts +0 -1
  189. package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.d.ts +3 -4
  190. package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js +67 -15
  191. package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js.map +1 -1
  192. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.d.ts +3 -0
  193. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.js +15 -0
  194. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.js.map +1 -0
  195. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.d.ts +9 -0
  196. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.js +25 -0
  197. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.js.map +1 -0
  198. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getIsMenuItem.d.ts +2 -0
  199. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getIsMenuItem.js +11 -0
  200. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getIsMenuItem.js.map +1 -0
  201. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.d.ts +73 -0
  202. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.js +136 -0
  203. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.js.map +1 -0
  204. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.d.ts +5 -0
  205. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.js +43 -0
  206. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.js.map +1 -0
  207. package/build/esm/components/AsideHeader/components/CollapseButton/CollapseButton.css +1 -1
  208. package/build/esm/components/AsideHeader/components/CollapseButton/CollapseButton.d.ts +2 -1
  209. package/build/esm/components/AsideHeader/components/CollapseButton/CollapseButton.js +18 -13
  210. package/build/esm/components/AsideHeader/components/CollapseButton/CollapseButton.js.map +1 -1
  211. package/build/esm/components/AsideHeader/components/CollapseButton/CollapseButton.module.scss.js +1 -1
  212. package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.css +1 -1
  213. package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.d.ts +35 -5
  214. package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.js +80 -126
  215. package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.js.map +1 -1
  216. package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.module.scss.js +1 -1
  217. package/build/esm/components/AsideHeader/components/CompositeBar/HighlightedItem/HighlightedItem.css +1 -1
  218. package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.css +25 -1
  219. package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.d.ts +9 -2
  220. package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.js +49 -76
  221. package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.js.map +1 -1
  222. package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.module.scss.js +1 -1
  223. package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.css +1 -0
  224. package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.d.ts +8 -0
  225. package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js +25 -0
  226. package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js.map +1 -0
  227. package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.module.scss.js +4 -0
  228. package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.module.scss.js.map +1 -0
  229. package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/index.d.ts +1 -0
  230. package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.d.ts +21 -0
  231. package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.js +144 -0
  232. package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.js.map +1 -0
  233. package/build/esm/components/AsideHeader/components/CompositeBar/constants.d.ts +0 -3
  234. package/build/esm/components/AsideHeader/components/CompositeBar/constants.js +1 -3
  235. package/build/esm/components/AsideHeader/components/CompositeBar/constants.js.map +1 -1
  236. package/build/esm/components/AsideHeader/components/CompositeBar/utils.d.ts +5 -9
  237. package/build/esm/components/AsideHeader/components/CompositeBar/utils.js +57 -72
  238. package/build/esm/components/AsideHeader/components/CompositeBar/utils.js.map +1 -1
  239. package/build/esm/components/AsideHeader/components/FirstPanel.js +46 -21
  240. package/build/esm/components/AsideHeader/components/FirstPanel.js.map +1 -1
  241. package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.css +1 -0
  242. package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.d.ts +19 -0
  243. package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.js +93 -0
  244. package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.js.map +1 -0
  245. package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.module.scss.js +4 -0
  246. package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.module.scss.js.map +1 -0
  247. package/build/esm/components/AsideHeader/components/FooterBar/constants.d.ts +1 -0
  248. package/build/esm/components/AsideHeader/components/FooterBar/constants.js +4 -0
  249. package/build/esm/components/AsideHeader/components/FooterBar/constants.js.map +1 -0
  250. package/build/esm/components/AsideHeader/components/FooterBar/index.d.ts +1 -0
  251. package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.css +1 -1
  252. package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.d.ts +2 -0
  253. package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.js +12 -1
  254. package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.js.map +1 -1
  255. package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.module.scss.js +1 -1
  256. package/build/esm/components/AsideHeader/components/Header.js +15 -7
  257. package/build/esm/components/AsideHeader/components/Header.js.map +1 -1
  258. package/build/esm/components/AsideHeader/components/PageLayout/AsideFallback.css +2 -0
  259. package/build/esm/components/AsideHeader/components/PageLayout/AsideFallback.js +5 -4
  260. package/build/esm/components/AsideHeader/components/PageLayout/AsideFallback.js.map +1 -1
  261. package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.css +2 -0
  262. package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.d.ts +4 -1
  263. package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.js +20 -7
  264. package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.js.map +1 -1
  265. package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.css +2 -0
  266. package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.d.ts +1 -1
  267. package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.js +8 -2
  268. package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.js.map +1 -1
  269. package/build/esm/components/AsideHeader/components/Panels.d.ts +1 -1
  270. package/build/esm/components/AsideHeader/components/Panels.js +18 -4
  271. package/build/esm/components/AsideHeader/components/Panels.js.map +1 -1
  272. package/build/esm/components/AsideHeader/hooks/useDelayedToggle.d.ts +6 -0
  273. package/build/esm/components/AsideHeader/hooks/useDelayedToggle.js +55 -0
  274. package/build/esm/components/AsideHeader/hooks/useDelayedToggle.js.map +1 -0
  275. package/build/esm/components/AsideHeader/hooks/useIsExpanded.d.ts +9 -0
  276. package/build/esm/components/AsideHeader/hooks/useIsExpanded.js +65 -0
  277. package/build/esm/components/AsideHeader/hooks/useIsExpanded.js.map +1 -0
  278. package/build/esm/components/AsideHeader/i18n/en.json.js +4 -2
  279. package/build/esm/components/AsideHeader/i18n/en.json.js.map +1 -1
  280. package/build/esm/components/AsideHeader/i18n/index.d.ts +4 -4
  281. package/build/esm/components/AsideHeader/i18n/ru.json.js +4 -2
  282. package/build/esm/components/AsideHeader/i18n/ru.json.js.map +1 -1
  283. package/build/esm/components/AsideHeader/index.d.ts +3 -2
  284. package/build/esm/components/AsideHeader/types.d.ts +40 -9
  285. package/build/esm/components/AsideHeader/types.js.map +1 -1
  286. package/build/esm/components/AsideHeader/useAsideHeaderInnerContextValue.d.ts +6 -1
  287. package/build/esm/components/AsideHeader/useAsideHeaderInnerContextValue.js +41 -6
  288. package/build/esm/components/AsideHeader/useAsideHeaderInnerContextValue.js.map +1 -1
  289. package/build/esm/components/AsideHeader/utils/getGroupHeight.d.ts +2 -0
  290. package/build/esm/components/AsideHeader/utils/getGroupHeight.js +14 -0
  291. package/build/esm/components/AsideHeader/utils/getGroupHeight.js.map +1 -0
  292. package/build/esm/components/Footer/desktop/Footer.js +1 -1
  293. package/build/esm/components/Footer/desktop/Footer.js.map +1 -1
  294. package/build/esm/components/Footer/mobile/Footer.js +1 -1
  295. package/build/esm/components/Footer/mobile/Footer.js.map +1 -1
  296. package/build/esm/components/HotkeysPanel/HotkeysPanel.d.ts +5 -3
  297. package/build/esm/components/HotkeysPanel/HotkeysPanel.js +4 -7
  298. package/build/esm/components/HotkeysPanel/HotkeysPanel.js.map +1 -1
  299. package/build/esm/components/Logo/Logo.css +1 -1
  300. package/build/esm/components/Logo/Logo.d.ts +7 -3
  301. package/build/esm/components/Logo/Logo.js +19 -6
  302. package/build/esm/components/Logo/Logo.js.map +1 -1
  303. package/build/esm/components/Logo/Logo.module.scss.js +1 -1
  304. package/build/esm/components/MobileHeader/BurgerMenu/BurgerCompositeBar/BurgerCompositeBar.css +1 -1
  305. package/build/esm/components/MobileHeader/BurgerMenu/BurgerCompositeBar/BurgerCompositeBar.module.scss.js +1 -1
  306. package/build/esm/components/MobileHeader/MobileHeader.d.ts +1 -1
  307. package/build/esm/components/MobileHeader/MobileHeader.js +7 -7
  308. package/build/esm/components/MobileHeader/MobileHeader.js.map +1 -1
  309. package/build/esm/components/MobileHeader/types.d.ts +1 -1
  310. package/build/esm/components/MobileLogo/MobileLogo.d.ts +1 -1
  311. package/build/esm/components/MobileLogo/MobileLogo.js +2 -2
  312. package/build/esm/components/MobileLogo/MobileLogo.js.map +1 -1
  313. package/build/esm/components/Settings/Settings.css +1 -1
  314. package/build/esm/components/Settings/SettingsMenu/SettingsMenu.css +1 -1
  315. package/build/esm/components/Settings/SettingsMenu/SettingsMenu.js +5 -1
  316. package/build/esm/components/Settings/SettingsMenu/SettingsMenu.js.map +1 -1
  317. package/build/esm/components/Settings/SettingsMenu/SettingsMenu.module.scss.js +1 -1
  318. package/build/esm/components/constants.d.ts +10 -4
  319. package/build/esm/components/constants.js +11 -5
  320. package/build/esm/components/constants.js.map +1 -1
  321. package/build/esm/components/types.d.ts +24 -12
  322. package/build/esm/components/utils/getCollapsedWidth.d.ts +1 -0
  323. package/build/esm/components/utils/getCollapsedWidth.js +8 -0
  324. package/build/esm/components/utils/getCollapsedWidth.js.map +1 -0
  325. package/build/esm/index.js +2 -1
  326. package/build/esm/index.js.map +1 -1
  327. package/codemods/bin/cli.js +19 -6
  328. package/codemods/transforms/compactToIsExpanded.ts +345 -0
  329. package/codemods/transforms/compactToPinned.ts +135 -0
  330. package/codemods/transforms/unifyInterfaces.ts +1 -0
  331. package/codemods/transforms/v5.ts +36 -0
  332. package/package.json +5 -4
  333. package/build/cjs/assets/icons/control-menu-button.svg.js.map +0 -1
  334. package/build/cjs/components/ActionBar/__stories__/ActionBar.stories.d.ts +0 -20
  335. package/build/cjs/components/ActionBar/__stories__/ActionBarShowcase.d.ts +0 -2
  336. package/build/cjs/components/ActionBar/__stories__/ActionBarSingleSection.d.ts +0 -2
  337. package/build/cjs/components/ActionBar/__stories__/ActionBarStretchGroupShowcase.d.ts +0 -2
  338. package/build/cjs/components/ActionBar/__tests__/helpersPlaywright.d.ts +0 -5
  339. package/build/cjs/components/AsideHeader/__stories__/AsideHeader.stories.d.ts +0 -21
  340. package/build/cjs/components/AsideHeader/__stories__/AsideHeaderShowcase.d.ts +0 -13
  341. package/build/cjs/components/AsideHeader/__stories__/getAsideHeaderWrapper.d.ts +0 -3
  342. package/build/cjs/components/AsideHeader/__stories__/moc.d.ts +0 -13
  343. package/build/cjs/components/AsideHeader/__tests__/helpersPlaywright.d.ts +0 -2
  344. package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.css +0 -1
  345. package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.d.ts +0 -12
  346. package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.js +0 -44
  347. package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.js.map +0 -1
  348. package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.module.scss.js +0 -8
  349. package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.module.scss.js.map +0 -1
  350. package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/index.d.ts +0 -1
  351. package/build/cjs/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.d.ts +0 -2
  352. package/build/cjs/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.js +0 -29
  353. package/build/cjs/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.js.map +0 -1
  354. package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.css +0 -2
  355. package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.d.ts +0 -9
  356. package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.js +0 -34
  357. package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.js.map +0 -1
  358. package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.module.scss.js +0 -8
  359. package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.module.scss.js.map +0 -1
  360. package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.d.ts +0 -24
  361. package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.js +0 -29
  362. package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.js.map +0 -1
  363. package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/index.d.ts +0 -2
  364. package/build/cjs/components/AsideHeader/components/FooterItem/__stories__/FooterItem.stories.d.ts +0 -6
  365. package/build/cjs/components/AsideHeader/components/FooterItem/__tests__/helpersPlaywright.d.ts +0 -2
  366. package/build/cjs/components/Footer/desktop/__stories__/Footer.stories.d.ts +0 -8
  367. package/build/cjs/components/Footer/desktop/__stories__/FooterShowcase.d.ts +0 -4
  368. package/build/cjs/components/Footer/desktop/__stories__/moc.d.ts +0 -3
  369. package/build/cjs/components/Footer/desktop/__tests__/helpersPlaywright.d.ts +0 -2
  370. package/build/cjs/components/Footer/mobile/__stories__/MobileFooter.stories.d.ts +0 -8
  371. package/build/cjs/components/Footer/mobile/__stories__/MobileFooterShowcase.d.ts +0 -4
  372. package/build/cjs/components/Footer/mobile/__stories__/moc.d.ts +0 -3
  373. package/build/cjs/components/Footer/mobile/__tests__/helpersPlaywright.d.ts +0 -2
  374. package/build/cjs/components/HotkeysPanel/__stories__/HotkeysPanel.stories.d.ts +0 -5
  375. package/build/cjs/components/HotkeysPanel/__stories__/HotkeysPanelShowcase.d.ts +0 -6
  376. package/build/cjs/components/HotkeysPanel/__stories__/moc.d.ts +0 -2
  377. package/build/cjs/components/HotkeysPanel/__tests__/helpersPlaywright.d.ts +0 -2
  378. package/build/cjs/components/Logo/__stories__/Logo.stories.d.ts +0 -7
  379. package/build/cjs/components/Logo/__tests__/helpersPlaywright.d.ts +0 -2
  380. package/build/cjs/components/MobileHeader/BurgerMenu/__stories__/BurgerMenu.stories.d.ts +0 -6
  381. package/build/cjs/components/MobileHeader/BurgerMenu/__stories__/moc.d.ts +0 -2
  382. package/build/cjs/components/MobileHeader/BurgerMenu/__tests__/helpersPlaywright.d.ts +0 -2
  383. package/build/cjs/components/MobileHeader/OverlapPanel/__stories__/OverlapPanel.stories.d.ts +0 -6
  384. package/build/cjs/components/MobileHeader/OverlapPanel/__stories__/moc.d.ts +0 -2
  385. package/build/cjs/components/MobileHeader/OverlapPanel/__tests__/helpersPlaywright.d.ts +0 -2
  386. package/build/cjs/components/MobileHeader/__stories__/MobileHeader.stories.d.ts +0 -4
  387. package/build/cjs/components/MobileHeader/__stories__/MobileHeaderShowcase.d.ts +0 -3
  388. package/build/cjs/components/MobileHeader/__stories__/moc.d.ts +0 -1
  389. package/build/cjs/components/MobileHeader/__tests__/helpersPlaywright.d.ts +0 -2
  390. package/build/cjs/components/MobileLogo/__stories__/MobileLogo.stories.d.ts +0 -6
  391. package/build/cjs/components/MobileLogo/__tests__/helpersPlaywright.d.ts +0 -2
  392. package/build/cjs/components/Settings/__stories__/Settings.stories.d.ts +0 -5
  393. package/build/cjs/components/Settings/__stories__/SettingsDemo.d.ts +0 -14
  394. package/build/cjs/components/Settings/__stories__/SettingsMobileDemo.d.ts +0 -8
  395. package/build/cjs/components/Settings/__tests__/helpersPlaywright.d.ts +0 -2
  396. package/build/esm/assets/icons/control-menu-button.svg.js.map +0 -1
  397. package/build/esm/components/ActionBar/__stories__/ActionBar.stories.d.ts +0 -20
  398. package/build/esm/components/ActionBar/__stories__/ActionBarShowcase.d.ts +0 -2
  399. package/build/esm/components/ActionBar/__stories__/ActionBarSingleSection.d.ts +0 -2
  400. package/build/esm/components/ActionBar/__stories__/ActionBarStretchGroupShowcase.d.ts +0 -2
  401. package/build/esm/components/ActionBar/__tests__/helpersPlaywright.d.ts +0 -5
  402. package/build/esm/components/AsideHeader/__stories__/AsideHeader.stories.d.ts +0 -21
  403. package/build/esm/components/AsideHeader/__stories__/AsideHeaderShowcase.d.ts +0 -13
  404. package/build/esm/components/AsideHeader/__stories__/getAsideHeaderWrapper.d.ts +0 -3
  405. package/build/esm/components/AsideHeader/__stories__/moc.d.ts +0 -13
  406. package/build/esm/components/AsideHeader/__tests__/helpersPlaywright.d.ts +0 -2
  407. package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.css +0 -1
  408. package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.d.ts +0 -12
  409. package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.js +0 -42
  410. package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.js.map +0 -1
  411. package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.module.scss.js +0 -4
  412. package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.module.scss.js.map +0 -1
  413. package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/index.d.ts +0 -1
  414. package/build/esm/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.d.ts +0 -2
  415. package/build/esm/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.js +0 -27
  416. package/build/esm/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.js.map +0 -1
  417. package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.css +0 -2
  418. package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.d.ts +0 -9
  419. package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.js +0 -32
  420. package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.js.map +0 -1
  421. package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.module.scss.js +0 -4
  422. package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.module.scss.js.map +0 -1
  423. package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.d.ts +0 -24
  424. package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.js +0 -26
  425. package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.js.map +0 -1
  426. package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/index.d.ts +0 -2
  427. package/build/esm/components/AsideHeader/components/FooterItem/__stories__/FooterItem.stories.d.ts +0 -6
  428. package/build/esm/components/AsideHeader/components/FooterItem/__tests__/helpersPlaywright.d.ts +0 -2
  429. package/build/esm/components/Footer/desktop/__stories__/Footer.stories.d.ts +0 -8
  430. package/build/esm/components/Footer/desktop/__stories__/FooterShowcase.d.ts +0 -4
  431. package/build/esm/components/Footer/desktop/__stories__/moc.d.ts +0 -3
  432. package/build/esm/components/Footer/desktop/__tests__/helpersPlaywright.d.ts +0 -2
  433. package/build/esm/components/Footer/mobile/__stories__/MobileFooter.stories.d.ts +0 -8
  434. package/build/esm/components/Footer/mobile/__stories__/MobileFooterShowcase.d.ts +0 -4
  435. package/build/esm/components/Footer/mobile/__stories__/moc.d.ts +0 -3
  436. package/build/esm/components/Footer/mobile/__tests__/helpersPlaywright.d.ts +0 -2
  437. package/build/esm/components/HotkeysPanel/__stories__/HotkeysPanel.stories.d.ts +0 -5
  438. package/build/esm/components/HotkeysPanel/__stories__/HotkeysPanelShowcase.d.ts +0 -6
  439. package/build/esm/components/HotkeysPanel/__stories__/moc.d.ts +0 -2
  440. package/build/esm/components/HotkeysPanel/__tests__/helpersPlaywright.d.ts +0 -2
  441. package/build/esm/components/Logo/__stories__/Logo.stories.d.ts +0 -7
  442. package/build/esm/components/Logo/__tests__/helpersPlaywright.d.ts +0 -2
  443. package/build/esm/components/MobileHeader/BurgerMenu/__stories__/BurgerMenu.stories.d.ts +0 -6
  444. package/build/esm/components/MobileHeader/BurgerMenu/__stories__/moc.d.ts +0 -2
  445. package/build/esm/components/MobileHeader/BurgerMenu/__tests__/helpersPlaywright.d.ts +0 -2
  446. package/build/esm/components/MobileHeader/OverlapPanel/__stories__/OverlapPanel.stories.d.ts +0 -6
  447. package/build/esm/components/MobileHeader/OverlapPanel/__stories__/moc.d.ts +0 -2
  448. package/build/esm/components/MobileHeader/OverlapPanel/__tests__/helpersPlaywright.d.ts +0 -2
  449. package/build/esm/components/MobileHeader/__stories__/MobileHeader.stories.d.ts +0 -4
  450. package/build/esm/components/MobileHeader/__stories__/MobileHeaderShowcase.d.ts +0 -3
  451. package/build/esm/components/MobileHeader/__stories__/moc.d.ts +0 -1
  452. package/build/esm/components/MobileHeader/__tests__/helpersPlaywright.d.ts +0 -2
  453. package/build/esm/components/MobileLogo/__stories__/MobileLogo.stories.d.ts +0 -6
  454. package/build/esm/components/MobileLogo/__tests__/helpersPlaywright.d.ts +0 -2
  455. package/build/esm/components/Settings/__stories__/Settings.stories.d.ts +0 -5
  456. package/build/esm/components/Settings/__stories__/SettingsDemo.d.ts +0 -14
  457. package/build/esm/components/Settings/__stories__/SettingsMobileDemo.d.ts +0 -8
  458. package/build/esm/components/Settings/__tests__/helpersPlaywright.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsMenu.js","sources":["../../../../../../src/components/Settings/SettingsMenu/SettingsMenu.tsx"],"sourcesContent":["import React from 'react';\n\nimport {Icon} from '@gravity-ui/uikit';\n\nimport {createBlock} from '../../utils/cn';\nimport {useCurrent, useStableCallback} from '../helpers';\nimport {Item, SettingsMenuProps} from '../types';\n\nimport styles from './SettingsMenu.module.scss';\n\nconst b = createBlock('settings-menu', styles);\n\nexport interface SettingsMenuInstance {\n handleKeyDown(event: React.KeyboardEvent): boolean;\n clearFocus(): void;\n}\n\nexport const SettingsMenu = React.forwardRef<SettingsMenuInstance, SettingsMenuProps>(\n // eslint-disable-next-line prefer-arrow-callback\n function SettingsMenu({items, onChange, activeItemId}, ref) {\n const [focusItemId, setFocusId] = React.useState<string>();\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleChange = useStableCallback(onChange);\n const getFocused = useCurrent(focusItemId);\n\n React.useImperativeHandle(\n ref,\n () => ({\n handleKeyDown(event) {\n if (!containerRef.current) {\n return false;\n }\n const focused = getFocused();\n if (focused && event.key === 'Enter') {\n handleChange(focused);\n return true;\n } else if (event.key === 'ArrowDown') {\n setFocusId(focusNext(containerRef.current, focused, 1));\n return true;\n } else if (event.key === 'ArrowUp') {\n setFocusId(focusNext(containerRef.current, focused, -1));\n return true;\n }\n return false;\n },\n clearFocus() {\n setFocusId(undefined);\n },\n }),\n [getFocused, handleChange],\n );\n\n return (\n <div ref={containerRef} className={b()}>\n {items.map((firstLevelItem) => {\n if ('groupTitle' in firstLevelItem) {\n return (\n <div key={firstLevelItem.groupTitle} className={b('group')}>\n <span className={b('group-heading')}>\n {firstLevelItem.groupTitle}\n </span>\n {firstLevelItem.items.map((item) => {\n return renderMenuItem(\n item,\n onChange,\n activeItemId,\n focusItemId,\n );\n })}\n </div>\n );\n }\n return renderMenuItem(firstLevelItem, onChange, activeItemId, focusItemId);\n })}\n </div>\n );\n },\n);\n\nfunction renderMenuItem(\n item: Item,\n onChange: (id: string) => void,\n activeItemId: string | undefined,\n focusItemId: string | undefined,\n) {\n return (\n <span\n key={item.title}\n className={b('item', {\n selected: activeItemId === item.id,\n disabled: item.disabled,\n focused: focusItemId === item.id,\n badge: item.withBadge,\n })}\n onClick={() => {\n if (!item.disabled) {\n onChange(item.id);\n }\n }}\n data-id={item.id}\n >\n {item.icon ? <Icon size={16} {...item.icon} className={b('item-icon')} /> : undefined}\n <span>{item.title}</span>\n </span>\n );\n}\n\nfunction focusNext(container: HTMLElement, focused: string | undefined, direction: number) {\n const elements = container.querySelectorAll(`.${b('item')}:not(.${b('item')}_disabled)`);\n if (elements.length === 0) {\n return undefined;\n }\n\n let currentIndex = direction > 0 ? -1 : 0;\n if (focused) {\n currentIndex = Array.prototype.findIndex.call(\n elements,\n (element) => element.getAttribute('data-id') === focused,\n );\n }\n\n currentIndex = (elements.length + currentIndex + direction) % elements.length;\n return elements[currentIndex].getAttribute('data-id') ?? undefined;\n}\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"SettingsMenu.js","sources":["../../../../../../src/components/Settings/SettingsMenu/SettingsMenu.tsx"],"sourcesContent":["import React from 'react';\n\nimport {Icon} from '@gravity-ui/uikit';\n\nimport {createBlock} from '../../utils/cn';\nimport {useCurrent, useStableCallback} from '../helpers';\nimport {Item, SettingsMenuProps} from '../types';\n\nimport styles from './SettingsMenu.module.scss';\n\nconst b = createBlock('settings-menu', styles);\n\nexport interface SettingsMenuInstance {\n handleKeyDown(event: React.KeyboardEvent): boolean;\n clearFocus(): void;\n}\n\nexport const SettingsMenu = React.forwardRef<SettingsMenuInstance, SettingsMenuProps>(\n // eslint-disable-next-line prefer-arrow-callback\n function SettingsMenu({items, onChange, activeItemId}, ref) {\n const [focusItemId, setFocusId] = React.useState<string>();\n const [scrolled, setScrolled] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleChange = useStableCallback(onChange);\n const getFocused = useCurrent(focusItemId);\n\n const handleScroll = React.useCallback((event: React.UIEvent<HTMLDivElement>) => {\n setScrolled(event.currentTarget.scrollTop > 0);\n }, []);\n\n React.useImperativeHandle(\n ref,\n () => ({\n handleKeyDown(event) {\n if (!containerRef.current) {\n return false;\n }\n const focused = getFocused();\n if (focused && event.key === 'Enter') {\n handleChange(focused);\n return true;\n } else if (event.key === 'ArrowDown') {\n setFocusId(focusNext(containerRef.current, focused, 1));\n return true;\n } else if (event.key === 'ArrowUp') {\n setFocusId(focusNext(containerRef.current, focused, -1));\n return true;\n }\n return false;\n },\n clearFocus() {\n setFocusId(undefined);\n },\n }),\n [getFocused, handleChange],\n );\n\n return (\n <div ref={containerRef} className={b({scrolled})} onScroll={handleScroll}>\n {items.map((firstLevelItem) => {\n if ('groupTitle' in firstLevelItem) {\n return (\n <div key={firstLevelItem.groupTitle} className={b('group')}>\n <span className={b('group-heading')}>\n {firstLevelItem.groupTitle}\n </span>\n {firstLevelItem.items.map((item) => {\n return renderMenuItem(\n item,\n onChange,\n activeItemId,\n focusItemId,\n );\n })}\n </div>\n );\n }\n return renderMenuItem(firstLevelItem, onChange, activeItemId, focusItemId);\n })}\n </div>\n );\n },\n);\n\nfunction renderMenuItem(\n item: Item,\n onChange: (id: string) => void,\n activeItemId: string | undefined,\n focusItemId: string | undefined,\n) {\n return (\n <span\n key={item.title}\n className={b('item', {\n selected: activeItemId === item.id,\n disabled: item.disabled,\n focused: focusItemId === item.id,\n badge: item.withBadge,\n })}\n onClick={() => {\n if (!item.disabled) {\n onChange(item.id);\n }\n }}\n data-id={item.id}\n >\n {item.icon ? <Icon size={16} {...item.icon} className={b('item-icon')} /> : undefined}\n <span>{item.title}</span>\n </span>\n );\n}\n\nfunction focusNext(container: HTMLElement, focused: string | undefined, direction: number) {\n const elements = container.querySelectorAll(`.${b('item')}:not(.${b('item')}_disabled)`);\n if (elements.length === 0) {\n return undefined;\n }\n\n let currentIndex = direction > 0 ? -1 : 0;\n if (focused) {\n currentIndex = Array.prototype.findIndex.call(\n elements,\n (element) => element.getAttribute('data-id') === focused,\n );\n }\n\n currentIndex = (elements.length + currentIndex + direction) % elements.length;\n return elements[currentIndex].getAttribute('data-id') ?? undefined;\n}\n"],"names":["React"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- var styles = {"gn-settings-menu__group-heading":"SettingsMenu-module__gn-settings-menu__group-heading___b3rMA","gnSettingsMenuGroupHeading":"SettingsMenu-module__gn-settings-menu__group-heading___b3rMA","gn-settings-menu__group":"SettingsMenu-module__gn-settings-menu__group___zBrCj","gnSettingsMenuGroup":"SettingsMenu-module__gn-settings-menu__group___zBrCj","gn-settings-menu__item":"SettingsMenu-module__gn-settings-menu__item___QGz0Y","gnSettingsMenuItem":"SettingsMenu-module__gn-settings-menu__item___QGz0Y","gn-settings-menu__item-icon":"SettingsMenu-module__gn-settings-menu__item-icon___B-h-X","gnSettingsMenuItemIcon":"SettingsMenu-module__gn-settings-menu__item-icon___B-h-X","gn-settings-menu__item_focused":"SettingsMenu-module__gn-settings-menu__item_focused___pKQBC","gnSettingsMenuItemFocused":"SettingsMenu-module__gn-settings-menu__item_focused___pKQBC","gn-settings-menu__item_selected":"SettingsMenu-module__gn-settings-menu__item_selected___Og2Jr","gnSettingsMenuItemSelected":"SettingsMenu-module__gn-settings-menu__item_selected___Og2Jr","gn-settings-menu__item_disabled":"SettingsMenu-module__gn-settings-menu__item_disabled___xv9E8","gnSettingsMenuItemDisabled":"SettingsMenu-module__gn-settings-menu__item_disabled___xv9E8","gn-settings-menu__item_badge":"SettingsMenu-module__gn-settings-menu__item_badge___I-O-X","gnSettingsMenuItemBadge":"SettingsMenu-module__gn-settings-menu__item_badge___I-O-X"};
1
+ var styles = {"gn-settings-menu":"SettingsMenu-module__gn-settings-menu___ChFyc","gnSettingsMenu":"SettingsMenu-module__gn-settings-menu___ChFyc","gn-settings-menu_scrolled":"SettingsMenu-module__gn-settings-menu_scrolled___QYbnX","gnSettingsMenuScrolled":"SettingsMenu-module__gn-settings-menu_scrolled___QYbnX","gn-settings-menu__group-heading":"SettingsMenu-module__gn-settings-menu__group-heading___b3rMA","gnSettingsMenuGroupHeading":"SettingsMenu-module__gn-settings-menu__group-heading___b3rMA","gn-settings-menu__group":"SettingsMenu-module__gn-settings-menu__group___zBrCj","gnSettingsMenuGroup":"SettingsMenu-module__gn-settings-menu__group___zBrCj","gn-settings-menu__item":"SettingsMenu-module__gn-settings-menu__item___QGz0Y","gnSettingsMenuItem":"SettingsMenu-module__gn-settings-menu__item___QGz0Y","gn-settings-menu__item-icon":"SettingsMenu-module__gn-settings-menu__item-icon___B-h-X","gnSettingsMenuItemIcon":"SettingsMenu-module__gn-settings-menu__item-icon___B-h-X","gn-settings-menu__item_focused":"SettingsMenu-module__gn-settings-menu__item_focused___pKQBC","gnSettingsMenuItemFocused":"SettingsMenu-module__gn-settings-menu__item_focused___pKQBC","gn-settings-menu__item_selected":"SettingsMenu-module__gn-settings-menu__item_selected___Og2Jr","gnSettingsMenuItemSelected":"SettingsMenu-module__gn-settings-menu__item_selected___Og2Jr","gn-settings-menu__item_disabled":"SettingsMenu-module__gn-settings-menu__item_disabled___xv9E8","gnSettingsMenuItemDisabled":"SettingsMenu-module__gn-settings-menu__item_disabled___xv9E8","gn-settings-menu__item_badge":"SettingsMenu-module__gn-settings-menu__item_badge___I-O-X","gnSettingsMenuItemBadge":"SettingsMenu-module__gn-settings-menu__item_badge___I-O-X"};
2
2
 
3
3
  export { styles as default };
4
4
  //# sourceMappingURL=SettingsMenu.module.scss.js.map
@@ -1,5 +1,11 @@
1
- export declare const ASIDE_HEADER_ICON_SIZE = 18;
2
- export declare const ASIDE_HEADER_COMPACT_WIDTH = 56;
3
- export declare const ASIDE_HEADER_EXPANDED_WIDTH = 236;
4
- export declare const ITEM_HEIGHT = 40;
1
+ export declare const ASIDE_HEADER_ICON_SIZE = 16;
2
+ export declare const ASIDE_HEADER_COLLAPSED_WIDTH = 56;
3
+ export declare const ASIDE_HEADER_COLLAPSED_WIDTH_COMPACT_MODE = 40;
4
+ export declare const ASIDE_HEADER_EXPANDED_WIDTH = 240;
5
+ export declare const ITEM_HEIGHT = 36;
6
+ export declare const ITEM_HEIGHT_COMPACT = 28;
5
7
  export declare const HEADER_DIVIDER_HEIGHT = 29;
8
+ export declare const HEADER_DIVIDER_HEIGHT_COMPACT = 22;
9
+ export declare const ASIDE_HEADER_EXPAND_TRANSITION_DELAY = 150;
10
+ export declare const ASIDE_HEADER_EXPAND_DELAY = 250;
11
+ export declare const ITEM_GAP = 2;
@@ -1,8 +1,14 @@
1
- const ASIDE_HEADER_ICON_SIZE = 18;
2
- const ASIDE_HEADER_COMPACT_WIDTH = 56;
3
- const ASIDE_HEADER_EXPANDED_WIDTH = 236;
4
- const ITEM_HEIGHT = 40;
1
+ const ASIDE_HEADER_ICON_SIZE = 16;
2
+ const ASIDE_HEADER_COLLAPSED_WIDTH = 56;
3
+ const ASIDE_HEADER_COLLAPSED_WIDTH_COMPACT_MODE = 40;
4
+ const ASIDE_HEADER_EXPANDED_WIDTH = 240;
5
+ const ITEM_HEIGHT = 36;
6
+ const ITEM_HEIGHT_COMPACT = 28;
5
7
  const HEADER_DIVIDER_HEIGHT = 29;
8
+ const HEADER_DIVIDER_HEIGHT_COMPACT = 22;
9
+ const ASIDE_HEADER_EXPAND_TRANSITION_DELAY = 150;
10
+ const ASIDE_HEADER_EXPAND_DELAY = 250;
11
+ const ITEM_GAP = 2;
6
12
 
7
- export { ASIDE_HEADER_COMPACT_WIDTH, ASIDE_HEADER_EXPANDED_WIDTH, ASIDE_HEADER_ICON_SIZE, HEADER_DIVIDER_HEIGHT, ITEM_HEIGHT };
13
+ export { ASIDE_HEADER_COLLAPSED_WIDTH, ASIDE_HEADER_COLLAPSED_WIDTH_COMPACT_MODE, ASIDE_HEADER_EXPANDED_WIDTH, ASIDE_HEADER_EXPAND_DELAY, ASIDE_HEADER_EXPAND_TRANSITION_DELAY, ASIDE_HEADER_ICON_SIZE, HEADER_DIVIDER_HEIGHT, HEADER_DIVIDER_HEIGHT_COMPACT, ITEM_GAP, ITEM_HEIGHT, ITEM_HEIGHT_COMPACT };
8
14
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../src/components/constants.ts"],"sourcesContent":["export const ASIDE_HEADER_ICON_SIZE = 18;\nexport const ASIDE_HEADER_COMPACT_WIDTH = 56;\nexport const ASIDE_HEADER_EXPANDED_WIDTH = 236;\nexport const ITEM_HEIGHT = 40;\nexport const HEADER_DIVIDER_HEIGHT = 29;\n"],"names":[],"mappings":"AAAO,MAAM,sBAAsB,GAAG;AAC/B,MAAM,0BAA0B,GAAG;AACnC,MAAM,2BAA2B,GAAG;AACpC,MAAM,WAAW,GAAG;AACpB,MAAM,qBAAqB,GAAG;;;;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../../src/components/constants.ts"],"sourcesContent":["export const ASIDE_HEADER_ICON_SIZE = 16;\nexport const ASIDE_HEADER_COLLAPSED_WIDTH = 56;\nexport const ASIDE_HEADER_COLLAPSED_WIDTH_COMPACT_MODE = 40;\nexport const ASIDE_HEADER_EXPANDED_WIDTH = 240;\nexport const ITEM_HEIGHT = 36;\nexport const ITEM_HEIGHT_COMPACT = 28;\nexport const HEADER_DIVIDER_HEIGHT = 29;\nexport const HEADER_DIVIDER_HEIGHT_COMPACT = 22;\nexport const ASIDE_HEADER_EXPAND_TRANSITION_DELAY = 150;\nexport const ASIDE_HEADER_EXPAND_DELAY = 250;\nexport const ITEM_GAP = 2;\n"],"names":[],"mappings":"AAAO,MAAM,sBAAsB,GAAG;AAC/B,MAAM,4BAA4B,GAAG;AACrC,MAAM,yCAAyC,GAAG;AAClD,MAAM,2BAA2B,GAAG;AACpC,MAAM,WAAW,GAAG;AACpB,MAAM,mBAAmB,GAAG;AAC5B,MAAM,qBAAqB,GAAG;AAC9B,MAAM,6BAA6B,GAAG;AACtC,MAAM,oCAAoC,GAAG;AAC7C,MAAM,yBAAyB,GAAG;AAClC,MAAM,QAAQ,GAAG;;;;"}
@@ -1,5 +1,6 @@
1
1
  import React, { HTMLAttributeAnchorTarget } from 'react';
2
2
  import { AlertProps, IconProps, QAProps } from '@gravity-ui/uikit';
3
+ import { SetCollapseBlocker } from './AsideHeader/types';
3
4
  export type MenuItemType = 'regular' | 'action' | 'divider';
4
5
  export type OpenModalSubscriber = (open: boolean) => void;
5
6
  export interface MakeItemParams {
@@ -15,33 +16,43 @@ export interface MenuItem extends QAProps {
15
16
  iconQa?: string;
16
17
  href?: string;
17
18
  current?: boolean;
18
- pinned?: boolean;
19
- onItemClick?: (item: MenuItem, collapsed: boolean, event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
19
+ onItemClick?: (item: MenuItem, collapsed: boolean, event: React.MouseEvent<HTMLElement, MouseEvent>, options: {
20
+ setCollapseBlocker: SetCollapseBlocker | undefined;
21
+ }) => void;
20
22
  onItemClickCapture?: (event: React.SyntheticEvent) => void;
21
23
  itemWrapper?: (p: MakeItemParams, makeItem: (p: MakeItemParams) => React.ReactNode, opts: {
22
- collapsed: boolean;
23
- compact: boolean;
24
+ isExpanded: boolean;
24
25
  item: MenuItem;
25
26
  ref: React.RefObject<HTMLElement>;
27
+ /** Call with `true` when a popup opens, `false` when it closes, to block sidebar collapse while open. */
28
+ setCollapseBlocker: SetCollapseBlocker | undefined;
26
29
  }) => React.ReactNode;
27
30
  preventUserRemoving?: boolean;
28
31
  rightAdornment?: React.ReactNode;
29
32
  type?: MenuItemType;
30
- afterMoreButton?: boolean;
31
- /**
32
- * Order number. Used to determine the display order in the side menu
33
- */
34
- order?: number;
35
33
  /**
36
34
  * Visibility flag in the side menu
37
35
  */
38
36
  hidden?: boolean;
39
37
  /**
40
- * The category to which the menu item belongs. Need for grouping in the display/editing mode of all pages
38
+ * The group ID to which the menu item belongs. Used for grouping menu items
41
39
  */
42
- category?: string;
40
+ groupId?: string;
43
41
  className?: string;
44
42
  }
43
+ export interface MenuGroup {
44
+ id: string;
45
+ title: string;
46
+ icon?: IconProps['data'];
47
+ /** Hide the group from display */
48
+ hidden?: boolean;
49
+ /** Allow collapsing the group via UI */
50
+ collapsible?: boolean;
51
+ /** Initial collapsed state when collapsible is true */
52
+ collapsedByDefault?: boolean;
53
+ /** Current collapsed state. When undefined, collapsedByDefault is used for display. */
54
+ collapsed?: boolean;
55
+ }
45
56
  export interface LogoProps {
46
57
  text: (() => React.ReactNode) | string;
47
58
  className?: string;
@@ -52,7 +63,8 @@ export interface LogoProps {
52
63
  textSize?: number;
53
64
  href?: string;
54
65
  target?: HTMLAttributeAnchorTarget;
55
- wrapper?: (node: React.ReactNode, compact: boolean) => React.ReactNode;
66
+ /** Wrapper function for the logo. The `isExpanded` parameter indicates if the navigation is expanded. */
67
+ wrapper?: (node: React.ReactNode, isExpanded: boolean) => React.ReactNode;
56
68
  onClick?: (event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
57
69
  'aria-label'?: string;
58
70
  'aria-labelledby'?: string;
@@ -0,0 +1 @@
1
+ export declare function getCollapsedWidth(isCompactMode?: boolean): number;
@@ -0,0 +1,8 @@
1
+ import { ASIDE_HEADER_COLLAPSED_WIDTH_COMPACT_MODE, ASIDE_HEADER_COLLAPSED_WIDTH } from '../constants.js';
2
+
3
+ function getCollapsedWidth(isCompactMode) {
4
+ return isCompactMode ? ASIDE_HEADER_COLLAPSED_WIDTH_COMPACT_MODE : ASIDE_HEADER_COLLAPSED_WIDTH;
5
+ }
6
+
7
+ export { getCollapsedWidth };
8
+ //# sourceMappingURL=getCollapsedWidth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCollapsedWidth.js","sources":["../../../../../src/components/utils/getCollapsedWidth.ts"],"sourcesContent":["import {\n ASIDE_HEADER_COLLAPSED_WIDTH,\n ASIDE_HEADER_COLLAPSED_WIDTH_COMPACT_MODE,\n} from '../constants';\n\nexport function getCollapsedWidth(isCompactMode?: boolean): number {\n return isCompactMode ? ASIDE_HEADER_COLLAPSED_WIDTH_COMPACT_MODE : ASIDE_HEADER_COLLAPSED_WIDTH;\n}\n"],"names":[],"mappings":";;AAKM,SAAU,iBAAiB,CAAC,aAAuB,EAAA;IACrD,OAAO,aAAa,GAAG,yCAAyC,GAAG,4BAA4B;AACnG;;;;"}
@@ -1,9 +1,10 @@
1
1
  export { AsideHeader } from './components/AsideHeader/AsideHeader.js';
2
- export { AsideHeaderContextProvider, useAsideHeaderContext } from './components/AsideHeader/AsideHeaderContext.js';
2
+ export { AsideHeaderContextProvider, useAsideHeaderContext, useAsideHeaderContextOptional } from './components/AsideHeader/AsideHeaderContext.js';
3
3
  export { FooterItem } from './components/AsideHeader/components/FooterItem/FooterItem.js';
4
4
  export { PageLayout } from './components/AsideHeader/components/PageLayout/PageLayout.js';
5
5
  export { PageLayoutAside } from './components/AsideHeader/components/PageLayout/PageLayoutAside.js';
6
6
  export { AsideFallback } from './components/AsideHeader/components/PageLayout/AsideFallback.js';
7
+ export { FooterLayoutContext, useFooterLayout } from './components/AsideHeader/FooterLayoutContext.js';
7
8
  export { ActionBar } from './components/ActionBar/ActionBar.js';
8
9
  export { Title } from './components/Title/Title.js';
9
10
  export { HotkeysPanel } from './components/HotkeysPanel/HotkeysPanel.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
@@ -9,7 +9,7 @@ const {program} = require('commander');
9
9
  const PACKAGE_DIR = path.dirname(__dirname);
10
10
  const TRANSFORMS_DIR = path.join(PACKAGE_DIR, 'transforms');
11
11
 
12
- const AVAILABLE_TRANSFORMS = ['v4'];
12
+ const AVAILABLE_TRANSFORMS = ['v4', 'v5'];
13
13
 
14
14
  // Get available transforms
15
15
  const availableTransforms = fs
@@ -114,18 +114,30 @@ program
114
114
  });
115
115
  });
116
116
 
117
- // Default command to run v4 transforms
117
+ // Command to run v4 transforms
118
118
  program
119
119
  .command('v4 <path>')
120
- .description('Run all transforms in sequence')
120
+ .description('Run v4 migration transforms')
121
121
  .option('-d, --dry', 'Dry run (no changes will be made)')
122
122
  .option('-v, --verbose', 'Verbose output')
123
123
  .option('--ignore-pattern <pattern>', 'Ignore files matching this pattern')
124
124
  .action((targetPath, options) => {
125
- console.log('Running all transforms in sequence...');
125
+ console.log('Running v4 migration transforms...');
126
126
  runTransform('v4', targetPath, options);
127
127
  });
128
128
 
129
+ // Command to run v5 transforms
130
+ program
131
+ .command('v5 <path>')
132
+ .description('Run v5 migration transforms (compact → isExpanded)')
133
+ .option('-d, --dry', 'Dry run (no changes will be made)')
134
+ .option('-v, --verbose', 'Verbose output')
135
+ .option('--ignore-pattern <pattern>', 'Ignore files matching this pattern')
136
+ .action((targetPath, options) => {
137
+ console.log('Running v5 migration transforms...');
138
+ runTransform('v5', targetPath, options);
139
+ });
140
+
129
141
  // Help command
130
142
  program
131
143
  .command('help')
@@ -138,8 +150,9 @@ program
138
150
  program.on('--help', () => {
139
151
  console.log('');
140
152
  console.log('Examples:');
141
- console.log(' $ navigation-codemod transform v4 ./src');
142
- console.log(' $ navigation-codemod transform v4 ./src --dry');
153
+ console.log(' $ navigation-codemod v4 ./src');
154
+ console.log(' $ navigation-codemod v5 ./src');
155
+ console.log(' $ navigation-codemod v5 ./src --dry');
143
156
  console.log(' $ navigation-codemod list');
144
157
  console.log('');
145
158
  console.log('Available transforms:');
@@ -0,0 +1,345 @@
1
+ /* eslint-disable no-param-reassign */
2
+ import {execSync} from 'child_process';
3
+
4
+ import type {
5
+ API,
6
+ ASTPath,
7
+ ArrowFunctionExpression,
8
+ Collection,
9
+ FileInfo,
10
+ FunctionExpression,
11
+ JSCodeshift,
12
+ JSXAttribute,
13
+ JSXIdentifier,
14
+ ObjectPattern,
15
+ ObjectProperty,
16
+ } from 'jscodeshift';
17
+
18
+ /**
19
+ * Codemod to transform `compact` prop to `isExpanded` with inverted boolean logic.
20
+ *
21
+ * Transformations:
22
+ * - compact={true} → isExpanded={false}
23
+ * - compact={false} → isExpanded={true}
24
+ * - compact (shorthand) → isExpanded={false}
25
+ * - compact={someVar} → isExpanded={!someVar}
26
+ * - compact={!someVar} → isExpanded={someVar}
27
+ * - compact={expression} → isExpanded={!(expression)}
28
+ *
29
+ * Special case for destructured parameters:
30
+ * - renderFooter={({ compact }) => <FooterItem compact={compact} />}
31
+ * - → renderFooter={({ isExpanded }) => <FooterItem isExpanded={isExpanded} />}
32
+ * - (No inversion when the value is the renamed destructured parameter)
33
+ *
34
+ * Also handles:
35
+ * - Function parameter destructuring: ({ compact }) => → ({ isExpanded }) =>
36
+ * - Callback second parameter: (node, compact) => → (node, isExpanded) =>
37
+ */
38
+
39
+ const TARGET_JSX_COMPONENTS = new Set(['FooterItem', 'MobileLogo', 'Item']);
40
+
41
+ const RENDER_CALLBACK_PROPS = new Set(['renderFooter', 'collapseButtonWrapper']);
42
+
43
+ export default function transformer(file: FileInfo, api: API) {
44
+ const j = api.jscodeshift;
45
+ const root = j(file.source);
46
+
47
+ // First pass: rename destructuring parameters and callback params
48
+ const hasDestructuringUpdate = updateDestructuringParams(root, j);
49
+ const hasCallbackParamUpdate = updateCallbackSecondParam(root, j);
50
+
51
+ // Second pass: update JSX props with awareness of renamed identifiers
52
+ const hasJsxPropsUpdate = updateJsxProps(root, j);
53
+
54
+ if (!hasJsxPropsUpdate && !hasDestructuringUpdate && !hasCallbackParamUpdate) {
55
+ return null;
56
+ }
57
+
58
+ const output = root.toSource();
59
+
60
+ // Format with Prettier to ensure consistent output
61
+ // Uses project's prettier config if available (searches from cwd)
62
+ // Falls back to unformatted output if Prettier is not installed or fails
63
+ try {
64
+ const formatted = execSync('prettier --parser typescript', {
65
+ input: output,
66
+ encoding: 'utf-8',
67
+ maxBuffer: 10 * 1024 * 1024,
68
+ stdio: ['pipe', 'pipe', 'pipe'],
69
+ });
70
+ return formatted;
71
+ } catch {
72
+ // Prettier not installed or failed - return unformatted output
73
+ // User can run their own formatter afterwards
74
+ return output;
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Inverts a JSX expression value.
80
+ * - true → false
81
+ * - false → true
82
+ * - someVar → !someVar
83
+ * - !someVar → someVar
84
+ * - (expression) → !(expression)
85
+ */
86
+ function invertExpression(j: JSCodeshift, expr: any): any {
87
+ // Handle literal booleans - modify in place to preserve formatting
88
+ if (j.BooleanLiteral.check(expr) || j.Literal.check(expr)) {
89
+ const value = expr.value;
90
+ if (typeof value === 'boolean') {
91
+ expr.value = !value;
92
+ return expr;
93
+ }
94
+ }
95
+
96
+ // Handle unary negation: !something → something
97
+ if (j.UnaryExpression.check(expr) && expr.operator === '!') {
98
+ return expr.argument;
99
+ }
100
+
101
+ // Handle identifiers and other expressions: something → !something
102
+ return j.unaryExpression('!', expr);
103
+ }
104
+
105
+ /**
106
+ * Update JSX props: compact → isExpanded with inverted value
107
+ * Special handling: if value is an identifier that was renamed from destructuring,
108
+ * just rename it without inversion.
109
+ */
110
+ function updateJsxProps(root: Collection, j: JSCodeshift): boolean {
111
+ let hasChanges = false;
112
+
113
+ root.find(j.JSXAttribute, {
114
+ name: {type: 'JSXIdentifier', name: 'compact'},
115
+ }).forEach((path: ASTPath<JSXAttribute>) => {
116
+ const jsxElement = path.parentPath.parentPath;
117
+
118
+ // Check if this is on a target component
119
+ if (jsxElement && j.JSXOpeningElement.check(jsxElement.node)) {
120
+ const elementName = jsxElement.node.name;
121
+ let componentName: string | null = null;
122
+
123
+ if (j.JSXIdentifier.check(elementName)) {
124
+ componentName = elementName.name;
125
+ }
126
+
127
+ // Only transform if it's a target component or if we can't determine
128
+ if (componentName && !TARGET_JSX_COMPONENTS.has(componentName)) {
129
+ return;
130
+ }
131
+ }
132
+
133
+ const attrNode = path.node;
134
+ const attrValue = attrNode.value;
135
+
136
+ // Rename compact → isExpanded
137
+ (attrNode.name as JSXIdentifier).name = 'isExpanded';
138
+
139
+ if (attrValue === null) {
140
+ // Shorthand: compact → isExpanded={false}
141
+ attrNode.value = j.jsxExpressionContainer(j.booleanLiteral(false));
142
+ hasChanges = true;
143
+ } else if (j.JSXExpressionContainer.check(attrValue)) {
144
+ const expr = attrValue.expression;
145
+
146
+ if (!j.JSXEmptyExpression.check(expr)) {
147
+ // Check if this is a simple identifier named 'compact'
148
+ // that might be from a renamed destructuring parameter
149
+ if (j.Identifier.check(expr) && expr.name === 'compact') {
150
+ // Just rename it to isExpanded in place (no inversion)
151
+ // This handles the case: compact={compact} → isExpanded={isExpanded}
152
+ expr.name = 'isExpanded';
153
+ } else if (j.Identifier.check(expr) && expr.name === 'isExpanded') {
154
+ // Already renamed by destructuring pass, leave as is
155
+ } else {
156
+ // Invert the expression
157
+ attrValue.expression = invertExpression(j, expr);
158
+ }
159
+ }
160
+ hasChanges = true;
161
+ } else if (j.StringLiteral.check(attrValue)) {
162
+ // Edge case: compact="true" or compact="false" (unusual but handle it)
163
+ const strValue = attrValue.value;
164
+ if (strValue === 'true') {
165
+ attrNode.value = j.jsxExpressionContainer(j.booleanLiteral(false));
166
+ hasChanges = true;
167
+ } else if (strValue === 'false') {
168
+ attrNode.value = j.jsxExpressionContainer(j.booleanLiteral(true));
169
+ hasChanges = true;
170
+ }
171
+ }
172
+ });
173
+
174
+ return hasChanges;
175
+ }
176
+
177
+ /**
178
+ * Update destructuring parameters in render callbacks:
179
+ * renderFooter={({ compact }) => ...} → renderFooter={({ isExpanded }) => ...}
180
+ */
181
+ function updateDestructuringParams(root: Collection, j: JSCodeshift): boolean {
182
+ let hasChanges = false;
183
+
184
+ // Find JSX attributes that are render callbacks
185
+ root.find(j.JSXAttribute).forEach((attrPath: ASTPath<JSXAttribute>) => {
186
+ const attrName = attrPath.node.name;
187
+ if (!j.JSXIdentifier.check(attrName)) return;
188
+
189
+ if (!RENDER_CALLBACK_PROPS.has(attrName.name)) return;
190
+
191
+ const attrValue = attrPath.node.value;
192
+ if (!j.JSXExpressionContainer.check(attrValue)) return;
193
+
194
+ const expr = attrValue.expression;
195
+ if (!j.ArrowFunctionExpression.check(expr) && !j.FunctionExpression.check(expr)) return;
196
+
197
+ const funcExpr = expr as ArrowFunctionExpression | FunctionExpression;
198
+ const params = funcExpr.params;
199
+
200
+ // Look for destructuring pattern with 'compact'
201
+ params.forEach((param) => {
202
+ if (j.ObjectPattern.check(param)) {
203
+ const objPattern = param as ObjectPattern;
204
+ objPattern.properties.forEach((prop) => {
205
+ if (j.ObjectProperty.check(prop) || j.Property.check(prop)) {
206
+ const key = (prop as ObjectProperty).key;
207
+ if (j.Identifier.check(key) && key.name === 'compact') {
208
+ key.name = 'isExpanded';
209
+ hasChanges = true;
210
+
211
+ // Also update the value if it's a shorthand (compact → isExpanded)
212
+ const value = (prop as ObjectProperty).value;
213
+ if (j.Identifier.check(value) && value.name === 'compact') {
214
+ value.name = 'isExpanded';
215
+
216
+ // Rename all references to 'compact' in the function body to 'isExpanded'
217
+ // and invert ternary expressions where compact is the test
218
+ j(funcExpr)
219
+ .find(j.Identifier, {name: 'compact'})
220
+ .forEach((identPath) => {
221
+ // Skip if this is the parameter itself
222
+ if (identPath.value !== value) {
223
+ identPath.value.name = 'isExpanded';
224
+
225
+ // Check if this identifier is the test of a conditional expression
226
+ if (
227
+ identPath.parent &&
228
+ j.ConditionalExpression.check(
229
+ identPath.parent.value,
230
+ ) &&
231
+ identPath.parent.value.test === identPath.value
232
+ ) {
233
+ // Swap consequent and alternate to invert the logic
234
+ const temp = identPath.parent.value.consequent;
235
+ identPath.parent.value.consequent =
236
+ identPath.parent.value.alternate;
237
+ identPath.parent.value.alternate = temp;
238
+ }
239
+ }
240
+ });
241
+ }
242
+ }
243
+ }
244
+ });
245
+ }
246
+ });
247
+ });
248
+
249
+ // Also find object properties that are render callbacks
250
+ root.find(j.ObjectProperty).forEach((propPath: ASTPath<ObjectProperty>) => {
251
+ const propKey = propPath.node.key;
252
+ if (!j.Identifier.check(propKey)) return;
253
+
254
+ if (!RENDER_CALLBACK_PROPS.has(propKey.name) && propKey.name !== 'wrapper') return;
255
+
256
+ const propValue = propPath.node.value;
257
+ if (!j.ArrowFunctionExpression.check(propValue) && !j.FunctionExpression.check(propValue))
258
+ return;
259
+
260
+ const funcExpr = propValue as ArrowFunctionExpression | FunctionExpression;
261
+ const params = funcExpr.params;
262
+
263
+ // Look for destructuring pattern with 'compact'
264
+ params.forEach((param) => {
265
+ if (j.ObjectPattern.check(param)) {
266
+ const objPattern = param as ObjectPattern;
267
+ objPattern.properties.forEach((prop) => {
268
+ if (j.ObjectProperty.check(prop) || j.Property.check(prop)) {
269
+ const key = (prop as ObjectProperty).key;
270
+ if (j.Identifier.check(key) && key.name === 'compact') {
271
+ key.name = 'isExpanded';
272
+ hasChanges = true;
273
+
274
+ const value = (prop as ObjectProperty).value;
275
+ if (j.Identifier.check(value) && value.name === 'compact') {
276
+ value.name = 'isExpanded';
277
+
278
+ // Rename all references to 'compact' in the function body to 'isExpanded'
279
+ // and invert ternary expressions where compact is the test
280
+ j(funcExpr)
281
+ .find(j.Identifier, {name: 'compact'})
282
+ .forEach((identPath) => {
283
+ // Skip if this is the parameter itself
284
+ if (identPath.value !== value) {
285
+ identPath.value.name = 'isExpanded';
286
+
287
+ // Check if this identifier is the test of a conditional expression
288
+ if (
289
+ identPath.parent &&
290
+ j.ConditionalExpression.check(
291
+ identPath.parent.value,
292
+ ) &&
293
+ identPath.parent.value.test === identPath.value
294
+ ) {
295
+ // Swap consequent and alternate to invert the logic
296
+ const temp = identPath.parent.value.consequent;
297
+ identPath.parent.value.consequent =
298
+ identPath.parent.value.alternate;
299
+ identPath.parent.value.alternate = temp;
300
+ }
301
+ }
302
+ });
303
+ }
304
+ }
305
+ }
306
+ });
307
+ }
308
+ });
309
+ });
310
+
311
+ return hasChanges;
312
+ }
313
+
314
+ /**
315
+ * Update callback second parameter:
316
+ * wrapper: (node, compact) => ... → wrapper: (node, isExpanded) => ...
317
+ */
318
+ function updateCallbackSecondParam(root: Collection, j: JSCodeshift): boolean {
319
+ let hasChanges = false;
320
+
321
+ // Find 'wrapper' property in objects (e.g., logo={{ wrapper: (node, compact) => ... }})
322
+ root.find(j.ObjectProperty, {
323
+ key: {type: 'Identifier', name: 'wrapper'},
324
+ }).forEach((propPath: ASTPath<ObjectProperty>) => {
325
+ const propValue = propPath.node.value;
326
+
327
+ if (!j.ArrowFunctionExpression.check(propValue) && !j.FunctionExpression.check(propValue)) {
328
+ return;
329
+ }
330
+
331
+ const funcExpr = propValue as ArrowFunctionExpression | FunctionExpression;
332
+ const params = funcExpr.params;
333
+
334
+ // Check if second parameter is 'compact'
335
+ if (params.length >= 2) {
336
+ const secondParam = params[1];
337
+ if (j.Identifier.check(secondParam) && secondParam.name === 'compact') {
338
+ secondParam.name = 'isExpanded';
339
+ hasChanges = true;
340
+ }
341
+ }
342
+ });
343
+
344
+ return hasChanges;
345
+ }