@gravity-ui/navigation 6.4.2 → 6.5.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 (34) hide show
  1. package/build/cjs/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.d.ts +7 -0
  2. package/build/cjs/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.js +31 -0
  3. package/build/cjs/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.js.map +1 -1
  4. package/build/cjs/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js +1 -1
  5. package/build/cjs/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js.map +1 -1
  6. package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.js +10 -5
  7. package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.js.map +1 -1
  8. package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.css +1 -1
  9. package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.js +66 -12
  10. package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.js.map +1 -1
  11. package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.module.scss.js +1 -1
  12. package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.types.d.ts +8 -0
  13. package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.d.ts +6 -1
  14. package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.js +4 -2
  15. package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.js.map +1 -1
  16. package/build/cjs/components/types.d.ts +19 -0
  17. package/build/docs/components/AsideHeader.md +11 -7
  18. package/build/esm/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.d.ts +7 -0
  19. package/build/esm/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.js +31 -1
  20. package/build/esm/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.js.map +1 -1
  21. package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js +2 -2
  22. package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js.map +1 -1
  23. package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.js +10 -5
  24. package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.js.map +1 -1
  25. package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.css +1 -1
  26. package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.js +66 -12
  27. package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.js.map +1 -1
  28. package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.module.scss.js +1 -1
  29. package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.types.d.ts +8 -0
  30. package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.d.ts +6 -1
  31. package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.js +4 -2
  32. package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.js.map +1 -1
  33. package/build/esm/components/types.d.ts +19 -0
  34. package/package.json +1 -1
@@ -11,6 +11,13 @@ export declare function getCompositeBarHeaderGroupId(itemId: string): string | u
11
11
  export declare function rowsToAllPagesDisplayItems(rows: CompositeBarRow[], options?: {
12
12
  enableGroupHeaderPins?: boolean;
13
13
  }): AsideHeaderItem[];
14
+ /**
15
+ * View-mode list: original items plus a clickable header row for each group that has
16
+ * its own action (`MenuGroup.onItemClick` / `href`), inserted before the group's first
17
+ * item; actionable groups without items are appended at the end. Groups without an
18
+ * action are not represented by a row, as before.
19
+ */
20
+ export declare function getAllPagesViewModeFlatItems(asideHeaderItems: AsideHeaderItem[], menuGroups: MenuGroup[] | undefined): AsideHeaderItem[];
14
21
  /**
15
22
  * Edit-mode list: top-level items + one row per menu group (header only), same order as CompositeBar.
16
23
  */
@@ -27,6 +27,36 @@ function rowsToAllPagesDisplayItems(rows, options) {
27
27
  return Object.assign(Object.assign({}, header), { category: firstCategory !== null && firstCategory !== undefined ? firstCategory : row.group.title, hidden: Boolean(row.group.hidden), preventUserRemoving: !showPins });
28
28
  });
29
29
  }
30
+ /**
31
+ * View-mode list: original items plus a clickable header row for each group that has
32
+ * its own action (`MenuGroup.onItemClick` / `href`), inserted before the group's first
33
+ * item; actionable groups without items are appended at the end. Groups without an
34
+ * action are not represented by a row, as before.
35
+ */
36
+ function getAllPagesViewModeFlatItems(asideHeaderItems, menuGroups) {
37
+ const clickableGroups = (menuGroups !== null && menuGroups !== undefined ? menuGroups : []).filter((group) => group.onItemClick || group.href);
38
+ if (clickableGroups.length === 0) {
39
+ return asideHeaderItems;
40
+ }
41
+ const clickableGroupsById = new Map(clickableGroups.map((group) => [group.id, group]));
42
+ const makeHeaderRow = (group, category) => (Object.assign(Object.assign({}, utils.makeGroupHeaderAsideItem(group)), { category, hidden: Boolean(group.hidden), href: group.href, onItemClick: group.onItemClick }));
43
+ const insertedGroupIds = new Set();
44
+ const result = [];
45
+ for (const item of asideHeaderItems) {
46
+ const group = item.groupId ? clickableGroupsById.get(item.groupId) : undefined;
47
+ if (group && !insertedGroupIds.has(group.id)) {
48
+ insertedGroupIds.add(group.id);
49
+ result.push(makeHeaderRow(group, item.category));
50
+ }
51
+ result.push(item);
52
+ }
53
+ for (const group of clickableGroups) {
54
+ if (!insertedGroupIds.has(group.id)) {
55
+ result.push(makeHeaderRow(group));
56
+ }
57
+ }
58
+ return result;
59
+ }
30
60
  /**
31
61
  * Edit-mode list: top-level items + one row per menu group (header only), same order as CompositeBar.
32
62
  */
@@ -50,6 +80,7 @@ function reorderMenuItemsByCompositeBarRows(withoutAllPagesNoDividers, menuGroup
50
80
 
51
81
  exports.ALL_PAGES_PANEL_ROW_BUILD_OPTIONS = ALL_PAGES_PANEL_ROW_BUILD_OPTIONS;
52
82
  exports.getAllPagesEditModeFlatItems = getAllPagesEditModeFlatItems;
83
+ exports.getAllPagesViewModeFlatItems = getAllPagesViewModeFlatItems;
53
84
  exports.getCompositeBarHeaderGroupId = getCompositeBarHeaderGroupId;
54
85
  exports.reorderMenuItemsByCompositeBarRows = reorderMenuItemsByCompositeBarRows;
55
86
  exports.rowsToAllPagesDisplayItems = rowsToAllPagesDisplayItems;
@@ -1 +1 @@
1
- {"version":3,"file":"allPagesEditDisplay.js","sources":["../../../../../../../src/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.ts"],"sourcesContent":["import type {MenuGroup} from '../../../types';\nimport {AsideHeaderItem} from '../../types';\nimport {COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX} from '../CompositeBar/constants';\nimport {\n type CompositeBarRow,\n buildCompositeBarRows,\n flattenCompositeBarRows,\n} from '../CompositeBar/grouping';\nimport {makeGroupHeaderAsideItem} from '../CompositeBar/utils';\n\n/** Options passed to {@link buildCompositeBarRows} for All pages panel (edit-mode rows). */\nexport const ALL_PAGES_PANEL_ROW_BUILD_OPTIONS = {\n includeHidden: true,\n includeHiddenGroups: true,\n} as const;\n\nexport function isCompositeBarGroupHeaderItem(item: AsideHeaderItem): boolean {\n return item.id.startsWith(COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX);\n}\n\nexport function getCompositeBarHeaderGroupId(itemId: string): string | undefined {\n if (!itemId.startsWith(COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX)) {\n return undefined;\n }\n return itemId.slice(COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX.length);\n}\n\nexport function rowsToAllPagesDisplayItems(\n rows: CompositeBarRow[],\n options?: {enableGroupHeaderPins?: boolean},\n): AsideHeaderItem[] {\n const showPins = Boolean(options?.enableGroupHeaderPins);\n return rows.map((row) => {\n if (row.kind === 'item') {\n return row.item;\n }\n const header = makeGroupHeaderAsideItem(row.group);\n const firstCategory = row.items[0]?.category;\n return {\n ...header,\n category: firstCategory ?? row.group.title,\n hidden: Boolean(row.group.hidden),\n preventUserRemoving: !showPins,\n };\n });\n}\n\n/**\n * Edit-mode list: top-level items + one row per menu group (header only), same order as CompositeBar.\n */\nexport function getAllPagesEditModeFlatItems(\n asideHeaderItems: AsideHeaderItem[],\n menuGroups: MenuGroup[] | undefined,\n options?: {enableGroupHeaderPins?: boolean},\n): AsideHeaderItem[] {\n if (!menuGroups?.length) {\n return asideHeaderItems.filter((item) => !item.groupId);\n }\n const rows = buildCompositeBarRows(\n asideHeaderItems,\n menuGroups,\n ALL_PAGES_PANEL_ROW_BUILD_OPTIONS,\n );\n return rowsToAllPagesDisplayItems(rows, options);\n}\n\nexport function reorderMenuItemsByCompositeBarRows(\n withoutAllPagesNoDividers: AsideHeaderItem[],\n menuGroups: MenuGroup[],\n oldIndex: number,\n newIndex: number,\n): AsideHeaderItem[] {\n const rows = buildCompositeBarRows(\n withoutAllPagesNoDividers,\n menuGroups,\n ALL_PAGES_PANEL_ROW_BUILD_OPTIONS,\n );\n const reordered = [...rows];\n const [moved] = reordered.splice(oldIndex, 1);\n\n if (moved === undefined) {\n return flattenCompositeBarRows(rows);\n }\n\n reordered.splice(newIndex, 0, moved);\n\n return flattenCompositeBarRows(reordered);\n}\n"],"names":["COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX","makeGroupHeaderAsideItem","buildCompositeBarRows","flattenCompositeBarRows"],"mappings":";;;;;;AAUA;AACa,MAAA,iCAAiC,GAAG;AAC7C,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,mBAAmB,EAAE,IAAI;;AAOvB,SAAU,4BAA4B,CAAC,MAAc,EAAA;IACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAACA,8CAAoC,CAAC,EAAE;AAC1D,QAAA,OAAO,SAAS;;IAEpB,OAAO,MAAM,CAAC,KAAK,CAACA,8CAAoC,CAAC,MAAM,CAAC;AACpE;AAEgB,SAAA,0BAA0B,CACtC,IAAuB,EACvB,OAA2C,EAAA;AAE3C,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,SAAA,GAAA,SAAA,GAAP,OAAO,CAAE,qBAAqB,CAAC;AACxD,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;;AACpB,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;YACrB,OAAO,GAAG,CAAC,IAAI;;QAEnB,MAAM,MAAM,GAAGC,8BAAwB,CAAC,GAAG,CAAC,KAAK,CAAC;QAClD,MAAM,aAAa,GAAG,CAAA,EAAA,GAAA,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,SAAA,GAAA,EAAA,CAAA,QAAQ;AAC5C,QAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACO,MAAM,CAAA,EAAA,EACT,QAAQ,EAAE,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,SAAA,GAAb,aAAa,GAAI,GAAG,CAAC,KAAK,CAAC,KAAK,EAC1C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EACjC,mBAAmB,EAAE,CAAC,QAAQ,EAChC,CAAA;AACN,KAAC,CAAC;AACN;AAEA;;AAEG;SACa,4BAA4B,CACxC,gBAAmC,EACnC,UAAmC,EACnC,OAA2C,EAAA;IAE3C,IAAI,EAAC,UAAU,KAAV,IAAA,IAAA,UAAU,KAAV,SAAA,GAAA,SAAA,GAAA,UAAU,CAAE,MAAM,CAAA,EAAE;AACrB,QAAA,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;;IAE3D,MAAM,IAAI,GAAGC,8BAAqB,CAC9B,gBAAgB,EAChB,UAAU,EACV,iCAAiC,CACpC;AACD,IAAA,OAAO,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC;AACpD;AAEM,SAAU,kCAAkC,CAC9C,yBAA4C,EAC5C,UAAuB,EACvB,QAAgB,EAChB,QAAgB,EAAA;IAEhB,MAAM,IAAI,GAAGA,8BAAqB,CAC9B,yBAAyB,EACzB,UAAU,EACV,iCAAiC,CACpC;AACD,IAAA,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC;AAC3B,IAAA,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AAE7C,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,QAAA,OAAOC,gCAAuB,CAAC,IAAI,CAAC;;IAGxC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC;AAEpC,IAAA,OAAOA,gCAAuB,CAAC,SAAS,CAAC;AAC7C;;;;;;;;"}
1
+ {"version":3,"file":"allPagesEditDisplay.js","sources":["../../../../../../../src/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.ts"],"sourcesContent":["import type {MenuGroup} from '../../../types';\nimport {AsideHeaderItem} from '../../types';\nimport {COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX} from '../CompositeBar/constants';\nimport {\n type CompositeBarRow,\n buildCompositeBarRows,\n flattenCompositeBarRows,\n} from '../CompositeBar/grouping';\nimport {makeGroupHeaderAsideItem} from '../CompositeBar/utils';\n\n/** Options passed to {@link buildCompositeBarRows} for All pages panel (edit-mode rows). */\nexport const ALL_PAGES_PANEL_ROW_BUILD_OPTIONS = {\n includeHidden: true,\n includeHiddenGroups: true,\n} as const;\n\nexport function isCompositeBarGroupHeaderItem(item: AsideHeaderItem): boolean {\n return item.id.startsWith(COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX);\n}\n\nexport function getCompositeBarHeaderGroupId(itemId: string): string | undefined {\n if (!itemId.startsWith(COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX)) {\n return undefined;\n }\n return itemId.slice(COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX.length);\n}\n\nexport function rowsToAllPagesDisplayItems(\n rows: CompositeBarRow[],\n options?: {enableGroupHeaderPins?: boolean},\n): AsideHeaderItem[] {\n const showPins = Boolean(options?.enableGroupHeaderPins);\n return rows.map((row) => {\n if (row.kind === 'item') {\n return row.item;\n }\n const header = makeGroupHeaderAsideItem(row.group);\n const firstCategory = row.items[0]?.category;\n return {\n ...header,\n category: firstCategory ?? row.group.title,\n hidden: Boolean(row.group.hidden),\n preventUserRemoving: !showPins,\n };\n });\n}\n\n/**\n * View-mode list: original items plus a clickable header row for each group that has\n * its own action (`MenuGroup.onItemClick` / `href`), inserted before the group's first\n * item; actionable groups without items are appended at the end. Groups without an\n * action are not represented by a row, as before.\n */\nexport function getAllPagesViewModeFlatItems(\n asideHeaderItems: AsideHeaderItem[],\n menuGroups: MenuGroup[] | undefined,\n): AsideHeaderItem[] {\n const clickableGroups = (menuGroups ?? []).filter((group) => group.onItemClick || group.href);\n\n if (clickableGroups.length === 0) {\n return asideHeaderItems;\n }\n\n const clickableGroupsById = new Map(clickableGroups.map((group) => [group.id, group]));\n\n const makeHeaderRow = (group: MenuGroup, category?: string): AsideHeaderItem => ({\n ...makeGroupHeaderAsideItem(group),\n category,\n hidden: Boolean(group.hidden),\n href: group.href,\n onItemClick: group.onItemClick,\n });\n\n const insertedGroupIds = new Set<string>();\n const result: AsideHeaderItem[] = [];\n\n for (const item of asideHeaderItems) {\n const group = item.groupId ? clickableGroupsById.get(item.groupId) : undefined;\n\n if (group && !insertedGroupIds.has(group.id)) {\n insertedGroupIds.add(group.id);\n result.push(makeHeaderRow(group, item.category));\n }\n\n result.push(item);\n }\n\n for (const group of clickableGroups) {\n if (!insertedGroupIds.has(group.id)) {\n result.push(makeHeaderRow(group));\n }\n }\n\n return result;\n}\n\n/**\n * Edit-mode list: top-level items + one row per menu group (header only), same order as CompositeBar.\n */\nexport function getAllPagesEditModeFlatItems(\n asideHeaderItems: AsideHeaderItem[],\n menuGroups: MenuGroup[] | undefined,\n options?: {enableGroupHeaderPins?: boolean},\n): AsideHeaderItem[] {\n if (!menuGroups?.length) {\n return asideHeaderItems.filter((item) => !item.groupId);\n }\n const rows = buildCompositeBarRows(\n asideHeaderItems,\n menuGroups,\n ALL_PAGES_PANEL_ROW_BUILD_OPTIONS,\n );\n return rowsToAllPagesDisplayItems(rows, options);\n}\n\nexport function reorderMenuItemsByCompositeBarRows(\n withoutAllPagesNoDividers: AsideHeaderItem[],\n menuGroups: MenuGroup[],\n oldIndex: number,\n newIndex: number,\n): AsideHeaderItem[] {\n const rows = buildCompositeBarRows(\n withoutAllPagesNoDividers,\n menuGroups,\n ALL_PAGES_PANEL_ROW_BUILD_OPTIONS,\n );\n const reordered = [...rows];\n const [moved] = reordered.splice(oldIndex, 1);\n\n if (moved === undefined) {\n return flattenCompositeBarRows(rows);\n }\n\n reordered.splice(newIndex, 0, moved);\n\n return flattenCompositeBarRows(reordered);\n}\n"],"names":["COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX","makeGroupHeaderAsideItem","buildCompositeBarRows","flattenCompositeBarRows"],"mappings":"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"}
@@ -19,7 +19,7 @@ const useGroupedMenuItems = (asideHeaderItems, editMode, menuGroups, onMenuGroup
19
19
  const groupHeaderPins = Boolean(onMenuGroupsChanged);
20
20
  let flatForGrouping;
21
21
  if (!editMode) {
22
- flatForGrouping = base;
22
+ flatForGrouping = allPagesEditDisplay.getAllPagesViewModeFlatItems(base, menuGroups);
23
23
  }
24
24
  else if (menuGroups === null || menuGroups === undefined ? undefined : menuGroups.length) {
25
25
  flatForGrouping = allPagesEditDisplay.getAllPagesEditModeFlatItems(base, menuGroups, {
@@ -1 +1 @@
1
- {"version":3,"file":"useGroupedMenuItems.js","sources":["../../../../../../../src/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.ts"],"sourcesContent":["import {useMemo} from 'react';\n\nimport type {MenuGroup} from '../../../types';\nimport {ALL_PAGES_ID, AsideHeaderItem} from '../../types';\n\nimport {getAllPagesEditModeFlatItems} from './allPagesEditDisplay';\nimport i18n from './i18n';\n\n/**\n * Group menu items by category for the All pages panel.\n *\n * @param asideHeaderItems — items from context (includes synthetic All pages row).\n * @param editMode — when true, applies edit-mode row selection (headers when `menuGroups` is set).\n * @param menuGroups — when provided with edit mode, inserts one CompositeBar-style header per group.\n * @returns Items grouped by `category` key for rendering sections.\n */\nexport const useGroupedMenuItems = (\n asideHeaderItems: AsideHeaderItem[],\n editMode?: boolean,\n menuGroups?: MenuGroup[],\n onMenuGroupsChanged?: (menuGroups: MenuGroup[]) => void,\n) => {\n const allPagesMenuItems = useMemo(() => {\n const base = asideHeaderItems.filter(\n ({id, type}) => type !== 'divider' && id !== ALL_PAGES_ID,\n );\n\n const groupHeaderPins = Boolean(onMenuGroupsChanged);\n\n let flatForGrouping: AsideHeaderItem[];\n\n if (!editMode) {\n flatForGrouping = base;\n } else if (menuGroups?.length) {\n flatForGrouping = getAllPagesEditModeFlatItems(base, menuGroups, {\n enableGroupHeaderPins: groupHeaderPins,\n });\n } else {\n flatForGrouping = base.filter((item) => !item.groupId);\n }\n\n flatForGrouping.sort(({type: typeA}, {type: typeB}) => {\n if (typeA === 'action') {\n return 1;\n }\n if (typeB === 'action') {\n return -1;\n }\n return 0;\n });\n const groupedItems = flatForGrouping.reduce(\n (acc, asideHeaderItem) => {\n const category =\n asideHeaderItem.category || i18n('all-panel.menu.category.allOther');\n if (!acc[category]) {\n acc[category] = [];\n }\n acc[category].push(asideHeaderItem);\n return acc;\n },\n {} as {[key: string]: AsideHeaderItem[]},\n );\n return groupedItems;\n }, [asideHeaderItems, editMode, menuGroups, onMenuGroupsChanged]);\n\n return allPagesMenuItems;\n};\n"],"names":["useMemo","ALL_PAGES_ID","getAllPagesEditModeFlatItems","i18n"],"mappings":";;;;;;;AAQA;;;;;;;AAOG;AACI,MAAM,mBAAmB,GAAG,CAC/B,gBAAmC,EACnC,QAAkB,EAClB,UAAwB,EACxB,mBAAuD,KACvD;AACA,IAAA,MAAM,iBAAiB,GAAGA,aAAO,CAAC,MAAK;QACnC,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAChC,CAAC,EAAC,EAAE,EAAE,IAAI,EAAC,KAAK,IAAI,KAAK,SAAS,IAAI,EAAE,KAAKC,kBAAY,CAC5D;AAED,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAEpD,QAAA,IAAI,eAAkC;QAEtC,IAAI,CAAC,QAAQ,EAAE;YACX,eAAe,GAAG,IAAI;;aACnB,IAAI,UAAU,aAAV,UAAU,KAAA,SAAA,GAAA,SAAA,GAAV,UAAU,CAAE,MAAM,EAAE;AAC3B,YAAA,eAAe,GAAGC,gDAA4B,CAAC,IAAI,EAAE,UAAU,EAAE;AAC7D,gBAAA,qBAAqB,EAAE,eAAe;AACzC,aAAA,CAAC;;aACC;AACH,YAAA,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;;AAG1D,QAAA,eAAe,CAAC,IAAI,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,EAAE,EAAC,IAAI,EAAE,KAAK,EAAC,KAAI;AAClD,YAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;AACpB,gBAAA,OAAO,CAAC;;AAEZ,YAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;gBACpB,OAAO,EAAE;;AAEb,YAAA,OAAO,CAAC;AACZ,SAAC,CAAC;QACF,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CACvC,CAAC,GAAG,EAAE,eAAe,KAAI;YACrB,MAAM,QAAQ,GACV,eAAe,CAAC,QAAQ,IAAIC,aAAI,CAAC,kCAAkC,CAAC;AACxE,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAChB,gBAAA,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;;YAEtB,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;AACnC,YAAA,OAAO,GAAG;SACb,EACD,EAAwC,CAC3C;AACD,QAAA,OAAO,YAAY;KACtB,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;AAEjE,IAAA,OAAO,iBAAiB;AAC5B;;;;"}
1
+ {"version":3,"file":"useGroupedMenuItems.js","sources":["../../../../../../../src/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.ts"],"sourcesContent":["import {useMemo} from 'react';\n\nimport type {MenuGroup} from '../../../types';\nimport {ALL_PAGES_ID, AsideHeaderItem} from '../../types';\n\nimport {getAllPagesEditModeFlatItems, getAllPagesViewModeFlatItems} from './allPagesEditDisplay';\nimport i18n from './i18n';\n\n/**\n * Group menu items by category for the All pages panel.\n *\n * @param asideHeaderItems — items from context (includes synthetic All pages row).\n * @param editMode — when true, applies edit-mode row selection (headers when `menuGroups` is set).\n * @param menuGroups — when provided with edit mode, inserts one CompositeBar-style header per group.\n * @returns Items grouped by `category` key for rendering sections.\n */\nexport const useGroupedMenuItems = (\n asideHeaderItems: AsideHeaderItem[],\n editMode?: boolean,\n menuGroups?: MenuGroup[],\n onMenuGroupsChanged?: (menuGroups: MenuGroup[]) => void,\n) => {\n const allPagesMenuItems = useMemo(() => {\n const base = asideHeaderItems.filter(\n ({id, type}) => type !== 'divider' && id !== ALL_PAGES_ID,\n );\n\n const groupHeaderPins = Boolean(onMenuGroupsChanged);\n\n let flatForGrouping: AsideHeaderItem[];\n\n if (!editMode) {\n flatForGrouping = getAllPagesViewModeFlatItems(base, menuGroups);\n } else if (menuGroups?.length) {\n flatForGrouping = getAllPagesEditModeFlatItems(base, menuGroups, {\n enableGroupHeaderPins: groupHeaderPins,\n });\n } else {\n flatForGrouping = base.filter((item) => !item.groupId);\n }\n\n flatForGrouping.sort(({type: typeA}, {type: typeB}) => {\n if (typeA === 'action') {\n return 1;\n }\n if (typeB === 'action') {\n return -1;\n }\n return 0;\n });\n const groupedItems = flatForGrouping.reduce(\n (acc, asideHeaderItem) => {\n const category =\n asideHeaderItem.category || i18n('all-panel.menu.category.allOther');\n if (!acc[category]) {\n acc[category] = [];\n }\n acc[category].push(asideHeaderItem);\n return acc;\n },\n {} as {[key: string]: AsideHeaderItem[]},\n );\n return groupedItems;\n }, [asideHeaderItems, editMode, menuGroups, onMenuGroupsChanged]);\n\n return allPagesMenuItems;\n};\n"],"names":["useMemo","ALL_PAGES_ID","getAllPagesViewModeFlatItems","getAllPagesEditModeFlatItems","i18n"],"mappings":";;;;;;;AAQA;;;;;;;AAOG;AACI,MAAM,mBAAmB,GAAG,CAC/B,gBAAmC,EACnC,QAAkB,EAClB,UAAwB,EACxB,mBAAuD,KACvD;AACA,IAAA,MAAM,iBAAiB,GAAGA,aAAO,CAAC,MAAK;QACnC,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAChC,CAAC,EAAC,EAAE,EAAE,IAAI,EAAC,KAAK,IAAI,KAAK,SAAS,IAAI,EAAE,KAAKC,kBAAY,CAC5D;AAED,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAEpD,QAAA,IAAI,eAAkC;QAEtC,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,eAAe,GAAGC,gDAA4B,CAAC,IAAI,EAAE,UAAU,CAAC;;aAC7D,IAAI,UAAU,aAAV,UAAU,KAAA,SAAA,GAAA,SAAA,GAAV,UAAU,CAAE,MAAM,EAAE;AAC3B,YAAA,eAAe,GAAGC,gDAA4B,CAAC,IAAI,EAAE,UAAU,EAAE;AAC7D,gBAAA,qBAAqB,EAAE,eAAe;AACzC,aAAA,CAAC;;aACC;AACH,YAAA,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;;AAG1D,QAAA,eAAe,CAAC,IAAI,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,EAAE,EAAC,IAAI,EAAE,KAAK,EAAC,KAAI;AAClD,YAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;AACpB,gBAAA,OAAO,CAAC;;AAEZ,YAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;gBACpB,OAAO,EAAE;;AAEb,YAAA,OAAO,CAAC;AACZ,SAAC,CAAC;QACF,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CACvC,CAAC,GAAG,EAAE,eAAe,KAAI;YACrB,MAAM,QAAQ,GACV,eAAe,CAAC,QAAQ,IAAIC,aAAI,CAAC,kCAAkC,CAAC;AACxE,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAChB,gBAAA,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;;YAEtB,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;AACnC,YAAA,OAAO,GAAG;SACb,EACD,EAAwC,CAC3C;AACD,QAAA,OAAO,YAAY;KACtB,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;AAEjE,IAAA,OAAO,iBAAiB;AAC5B;;;;"}
@@ -34,7 +34,6 @@ const CompositeBarView = ({ type, rows, onItemClick, onMoreClick, collapseItems,
34
34
  onItemClick === null || onItemClick === undefined ? undefined : onItemClick(Object.assign(Object.assign({}, item), { onItemClick: orginalItemClick }), collapsed, event);
35
35
  }
36
36
  }, [onItemClick, onMoreClick]);
37
- const onSyntheticHeaderItemClick = React.useMemo(() => onItemClickByIndex(undefined), [onItemClickByIndex]);
38
37
  const itemHeight = React.useCallback((row) => {
39
38
  if (row.kind === 'item') {
40
39
  return utils.getItemHeight(row.item);
@@ -62,17 +61,23 @@ const CompositeBarView = ({ type, rows, onItemClick, onMoreClick, collapseItems,
62
61
  }
63
62
  const headerItem = utils.makeGroupHeaderAsideItem(row.group);
64
63
  const groupIsCollapsed = isGroupCollapsed(row.group.id);
64
+ const groupHasOwnAction = Boolean(row.group.onItemClick || row.group.href);
65
+ const onHeaderItemClick = onItemClickByIndex(row.group.onItemClick);
65
66
  if (!inlineGroupChildren) {
66
- return (React.createElement(Item.Item, Object.assign({}, headerItem, { compact: compact, popupItemClassName: menuItemClassName, menuPopupItems: row.items, menuPopupTitle: row.group.popupTitle, className: b('menu-group-header'), onMouseLeave: onMouseLeave, onPopupItemClick: onPopupItemClick, onItemClick: onSyntheticHeaderItemClick })));
67
+ return (React.createElement(Item.Item, Object.assign({}, headerItem, { href: row.group.href, compact: compact, popupItemClassName: menuItemClassName, menuPopupItems: row.items, menuPopupTitle: row.group.popupTitle, className: b('menu-group-header'), hideCompactChevron: row.group.hideCompactChevron, onMouseLeave: onMouseLeave, onPopupItemClick: onPopupItemClick, onItemClick: onHeaderItemClick })));
67
68
  }
68
69
  const selectedItemIndex = utils.getSelectedItemIndex(row.items);
69
70
  return (React.createElement("div", { className: b('menu-group', {
70
71
  expanded: !groupIsCollapsed,
71
72
  collapsed: groupIsCollapsed,
72
73
  }) },
73
- React.createElement(Item.Item, Object.assign({}, headerItem, { compact: compact, popupItemClassName: menuItemClassName, className: b('menu-group-header'), groupHeaderExpanded: !groupIsCollapsed, onMouseLeave: onMouseLeave, onItemClick: (item, isItemCollapsed, event) => {
74
- onToggleGroupCollapsed(row.group.id);
75
- onSyntheticHeaderItemClick(item, isItemCollapsed, event);
74
+ React.createElement(Item.Item, Object.assign({}, headerItem, { href: row.group.href, compact: compact, popupItemClassName: menuItemClassName, className: b('menu-group-header'), groupHeaderExpanded: !groupIsCollapsed, onMouseLeave: onMouseLeave, onGroupHeaderChevronClick: groupHasOwnAction
75
+ ? () => onToggleGroupCollapsed(row.group.id)
76
+ : undefined, onItemClick: (item, isItemCollapsed, event) => {
77
+ if (!groupHasOwnAction) {
78
+ onToggleGroupCollapsed(row.group.id);
79
+ }
80
+ onHeaderItemClick(item, isItemCollapsed, event);
76
81
  } })),
77
82
  !groupIsCollapsed && (React.createElement(uikit.List, { items: row.items, selectedItemIndex: selectedItemIndex, itemHeight: utils.getItemHeight, itemsHeight: utils.getItemsHeight, itemClassName: b('menu-group-nested-list-item'), virtualized: false, filterable: false, sortable: false, renderItem: (nestedItem, _isActive, groupItemIndex) => {
78
83
  const spineActive = selectedItemIndex !== undefined &&
@@ -1 +1 @@
1
- {"version":3,"file":"CompositeBar.js","sources":["../../../../../../../src/components/AsideHeader/components/CompositeBar/CompositeBar.tsx"],"sourcesContent":["import React, {FC, ReactNode, useCallback, useMemo, useRef, useState} from 'react';\n\nimport {List} from '@gravity-ui/uikit';\nimport AutoSizer, {Size} from 'react-virtualized-auto-sizer';\n\nimport {MenuGroup} from '../../../types';\nimport {createBlock} from '../../../utils/cn';\nimport {AsideHeaderItem, AsideHeaderMenuOverflow} from '../../types';\n\nimport {Item} from './Item/Item';\nimport {ItemProps} from './Item/Item.types';\nimport {ScrollableWithScrollbar} from './ScrollableWithScrollbar';\nimport {COLLAPSE_ITEM_ID} from './constants';\nimport {buildCompositeBarRows} from './grouping';\nimport type {CompositeBarRow} from './grouping';\nimport {\n getAutosizeCompositeBarRows,\n getCompositeBarRowsMinHeight,\n getItemHeight,\n getItemsHeight,\n getMoreButtonItem,\n getReorderedCompositeBarRows,\n getSelectedCompositeBarRowIndex,\n getSelectedItemIndex,\n makeGroupHeaderAsideItem,\n} from './utils';\n\nimport styles from './CompositeBar.module.scss';\n\nconst b = createBlock('composite-bar', styles);\n\n/** Row L-connector: vertical segment + rounded hook. viewBox matches `variables.$item-height`. */\nconst MENU_GROUP_NESTED_TREE_CONNECTOR_PATH =\n 'M8.03125 0V10.07935C8.03125 15.558375 11.5846 20 15.9678 20';\n\ntype CompositeBarProps = {\n type: 'menu' | 'subheader';\n items: AsideHeaderItem[];\n className?: string;\n menuGroups?: MenuGroup[];\n onItemClick?: (\n item: AsideHeaderItem,\n collapsed: boolean,\n event: React.MouseEvent<HTMLElement, MouseEvent>,\n ) => void;\n menuMoreTitle?: string;\n onMoreClick?: () => void;\n compact: boolean;\n compositeId?: string;\n menuItemClassName?: string;\n /**\n * @see AsideHeaderMenuOverflow\n */\n menuOverflow?: AsideHeaderMenuOverflow;\n collapsedMenuGroupIds?: Record<string, boolean>;\n defaultCollapsedMenuGroupIds?: Record<string, boolean>;\n onToggleMenuGroupCollapsed?: (groupId: string) => void;\n};\n\ntype CompositeBarViewProps = {\n type: 'menu' | 'subheader';\n compositeId?: string;\n compact: boolean;\n menuItemClassName?: string;\n rows: CompositeBarRow[];\n onItemClick?: CompositeBarProps['onItemClick'];\n onMoreClick?: () => void;\n collapseItems?: AsideHeaderItem[];\n /** Nested group list + tree connectors (expanded menu + scroll overflow only). */\n inlineGroupChildren: boolean;\n isGroupCollapsed: (groupId: string) => boolean;\n onToggleGroupCollapsed: (groupId: string) => void;\n};\n\nconst CompositeBarView: FC<CompositeBarViewProps> = ({\n type,\n rows,\n onItemClick,\n onMoreClick,\n collapseItems,\n compact,\n compositeId,\n menuItemClassName,\n inlineGroupChildren,\n isGroupCollapsed,\n onToggleGroupCollapsed,\n}) => {\n const ref = useRef<List<CompositeBarRow>>(null);\n\n const onMouseLeave = useCallback(() => {\n if (compact && document.hasFocus()) {\n ref.current?.activateItem(undefined as unknown as number);\n }\n }, [compact]);\n\n const onPopupItemClick = useCallback(\n (\n item: AsideHeaderItem,\n collapsed: boolean,\n event: React.MouseEvent<HTMLElement, MouseEvent>,\n ) => {\n onItemClick?.(item, collapsed, event);\n },\n [onItemClick],\n );\n\n const onItemClickByIndex = useCallback(\n (orginalItemClick: AsideHeaderItem['onItemClick']): ItemProps['onItemClick'] =>\n (item, collapsed, event) => {\n if (item.id === COLLAPSE_ITEM_ID && collapsed) {\n onMoreClick?.();\n } else {\n onItemClick?.(\n {\n ...item,\n onItemClick: orginalItemClick,\n },\n collapsed,\n event,\n );\n }\n },\n [onItemClick, onMoreClick],\n );\n\n const onSyntheticHeaderItemClick = useMemo(\n () => onItemClickByIndex(undefined) as NonNullable<ItemProps['onItemClick']>,\n [onItemClickByIndex],\n );\n\n const itemHeight = useCallback(\n (row: CompositeBarRow) => {\n if (row.kind === 'item') {\n return getItemHeight(row.item);\n }\n const headerH = getItemHeight(makeGroupHeaderAsideItem(row.group));\n if (!inlineGroupChildren || isGroupCollapsed(row.group.id)) {\n return headerH;\n }\n return headerH + getItemsHeight(row.items);\n },\n [inlineGroupChildren, isGroupCollapsed],\n );\n\n const itemsHeight = useCallback(\n (listRows: CompositeBarRow[]) => listRows.reduce((sum, row) => sum + itemHeight(row), 0),\n [itemHeight],\n );\n\n return (\n <List<CompositeBarRow>\n id={compositeId}\n ref={ref}\n items={rows}\n selectedItemIndex={type === 'menu' ? getSelectedCompositeBarRowIndex(rows) : undefined}\n itemHeight={itemHeight}\n itemsHeight={itemsHeight}\n itemClassName={b('root-menu-item', menuItemClassName)}\n virtualized={false}\n filterable={false}\n sortable={false}\n renderItem={(row) => {\n if (row.kind === 'item') {\n const item = row.item;\n let menuPopupItems: AsideHeaderItem[] | undefined;\n let menuPopupTitle: string | undefined;\n\n if (item.id === COLLAPSE_ITEM_ID) {\n menuPopupItems = collapseItems;\n } else {\n menuPopupItems = item.compositeBarMenuPopupItems;\n menuPopupTitle = item.compositeBarMenuPopupTitle;\n }\n\n return (\n <Item\n {...item}\n compact={compact}\n popupItemClassName={menuItemClassName}\n menuPopupItems={menuPopupItems}\n menuPopupTitle={menuPopupTitle}\n onMouseLeave={onMouseLeave}\n onPopupItemClick={onPopupItemClick}\n onItemClick={onItemClickByIndex(item.onItemClick)}\n />\n );\n }\n\n const headerItem = makeGroupHeaderAsideItem(row.group);\n const groupIsCollapsed = isGroupCollapsed(row.group.id);\n\n if (!inlineGroupChildren) {\n return (\n <Item\n {...headerItem}\n compact={compact}\n popupItemClassName={menuItemClassName}\n menuPopupItems={row.items}\n menuPopupTitle={row.group.popupTitle}\n className={b('menu-group-header')}\n onMouseLeave={onMouseLeave}\n onPopupItemClick={onPopupItemClick}\n onItemClick={onSyntheticHeaderItemClick}\n />\n );\n }\n\n const selectedItemIndex = getSelectedItemIndex(row.items);\n\n return (\n <div\n className={b('menu-group', {\n expanded: !groupIsCollapsed,\n collapsed: groupIsCollapsed,\n })}\n >\n <Item\n {...headerItem}\n compact={compact}\n popupItemClassName={menuItemClassName}\n className={b('menu-group-header')}\n groupHeaderExpanded={!groupIsCollapsed}\n onMouseLeave={onMouseLeave}\n onItemClick={(item, isItemCollapsed, event) => {\n onToggleGroupCollapsed(row.group.id);\n onSyntheticHeaderItemClick(item, isItemCollapsed, event);\n }}\n />\n {!groupIsCollapsed && (\n <List<AsideHeaderItem>\n items={row.items}\n selectedItemIndex={selectedItemIndex}\n itemHeight={getItemHeight}\n itemsHeight={getItemsHeight}\n itemClassName={b('menu-group-nested-list-item')}\n virtualized={false}\n filterable={false}\n sortable={false}\n renderItem={(nestedItem, _isActive, groupItemIndex) => {\n const spineActive =\n selectedItemIndex !== undefined &&\n groupItemIndex < selectedItemIndex;\n\n return (\n <div className={b('menu-group-nested-row-inner')}>\n <Item\n {...nestedItem}\n className={[\n nestedItem.className,\n b('menu-group-nested-item'),\n ]\n .filter(Boolean)\n .join(' ')}\n compact={compact}\n menuGroupNestedTreeConnector={\n <span\n className={b(\n 'menu-group-nested-connector',\n {'spine-active': spineActive},\n )}\n aria-hidden\n >\n <svg\n className={b(\n 'menu-group-nested-tree-svg',\n {\n active:\n selectedItemIndex ===\n groupItemIndex,\n },\n )}\n viewBox=\"0 0 16 40\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d={\n MENU_GROUP_NESTED_TREE_CONNECTOR_PATH\n }\n fill=\"none\"\n strokeLinecap=\"butt\"\n strokeWidth=\"1.3\"\n vectorEffect=\"non-scaling-stroke\"\n />\n </svg>\n </span>\n }\n onMouseLeave={onMouseLeave}\n onItemClick={onItemClickByIndex(\n nestedItem.onItemClick,\n )}\n />\n </div>\n );\n }}\n />\n )}\n </div>\n );\n }}\n />\n );\n};\n\nexport const CompositeBar: FC<CompositeBarProps> = ({\n type,\n className,\n items,\n menuGroups,\n menuMoreTitle,\n onItemClick,\n onMoreClick,\n compact,\n compositeId,\n menuItemClassName,\n menuOverflow = 'collapse',\n collapsedMenuGroupIds: collapsedMenuGroupIdsProp,\n defaultCollapsedMenuGroupIds,\n onToggleMenuGroupCollapsed,\n}) => {\n const rows = useMemo(() => buildCompositeBarRows(items, menuGroups), [items, menuGroups]);\n\n const isCollapsedControlled = collapsedMenuGroupIdsProp !== undefined;\n const [uncontrolledCollapsed, setUncontrolledCollapsed] = useState<Record<string, boolean>>(\n () => defaultCollapsedMenuGroupIds ?? {},\n );\n\n const collapsedMap = isCollapsedControlled ? collapsedMenuGroupIdsProp : uncontrolledCollapsed;\n\n const onToggleGroupCollapsed = useCallback(\n (groupId: string) => {\n onToggleMenuGroupCollapsed?.(groupId);\n if (!isCollapsedControlled) {\n setUncontrolledCollapsed((prev) => ({...prev, [groupId]: !prev[groupId]}));\n }\n },\n [isCollapsedControlled, onToggleMenuGroupCollapsed],\n );\n\n const isGroupCollapsed = useCallback(\n (groupId: string) => Boolean(collapsedMap[groupId]),\n [collapsedMap],\n );\n\n const inlineGroupChildren =\n !compact && menuOverflow === 'scroll' && type === 'menu' && Boolean(menuGroups?.length);\n\n const scrollableRows = useMemo(() => getReorderedCompositeBarRows(rows), [rows]);\n\n const scrollRecalcKey = useMemo(\n () =>\n `${items.length}:${menuGroups?.length ?? 0}:${JSON.stringify(\n Object.keys(collapsedMap)\n .sort()\n .reduce<Record<string, boolean>>((acc, k) => {\n acc[k] = Boolean(collapsedMap[k]);\n return acc;\n }, {}),\n )}`,\n [items.length, menuGroups?.length, collapsedMap],\n );\n\n if (rows.length === 0) {\n return null;\n }\n\n let node: ReactNode;\n\n if (type === 'menu') {\n if (menuOverflow === 'scroll' && !compact) {\n node = (\n <ScrollableWithScrollbar className={className} recalcDeps={[scrollRecalcKey]}>\n <CompositeBarView\n compositeId={compositeId}\n type=\"menu\"\n compact={compact}\n rows={scrollableRows}\n onItemClick={onItemClick}\n onMoreClick={onMoreClick}\n menuItemClassName={menuItemClassName}\n inlineGroupChildren={inlineGroupChildren}\n isGroupCollapsed={isGroupCollapsed}\n onToggleGroupCollapsed={onToggleGroupCollapsed}\n />\n </ScrollableWithScrollbar>\n );\n } else {\n const minHeight = getCompositeBarRowsMinHeight(rows);\n const collapseItem = getMoreButtonItem(menuMoreTitle);\n node = (\n <div className={b({autosizer: true})} style={{minHeight}}>\n {rows.length !== 0 && (\n <AutoSizer>\n {(size: Size) => {\n const width = Number.isNaN(size.width) ? 0 : size.width;\n const height = Number.isNaN(size.height) ? 0 : size.height;\n\n const {listRows, collapseItems} = getAutosizeCompositeBarRows(\n rows,\n height,\n collapseItem,\n );\n return (\n <div style={{width, height}}>\n <CompositeBarView\n compositeId={compositeId}\n type=\"menu\"\n compact={compact}\n rows={listRows}\n onItemClick={onItemClick}\n onMoreClick={onMoreClick}\n menuItemClassName={menuItemClassName}\n collapseItems={collapseItems}\n inlineGroupChildren={false}\n isGroupCollapsed={isGroupCollapsed}\n onToggleGroupCollapsed={onToggleGroupCollapsed}\n />\n </div>\n );\n }}\n </AutoSizer>\n )}\n </div>\n );\n }\n } else {\n node = (\n <div className={b({subheader: true})}>\n <CompositeBarView\n type=\"subheader\"\n menuItemClassName={menuItemClassName}\n compact={compact}\n rows={rows}\n onItemClick={onItemClick}\n inlineGroupChildren={false}\n isGroupCollapsed={isGroupCollapsed}\n onToggleGroupCollapsed={onToggleGroupCollapsed}\n />\n </div>\n );\n }\n return node;\n};\n"],"names":["createBlock","styles","useRef","useCallback","COLLAPSE_ITEM_ID","useMemo","getItemHeight","makeGroupHeaderAsideItem","getItemsHeight","List","getSelectedCompositeBarRowIndex","Item","getSelectedItemIndex","buildCompositeBarRows","useState","getReorderedCompositeBarRows","ScrollableWithScrollbar","getCompositeBarRowsMinHeight","getMoreButtonItem","getAutosizeCompositeBarRows"],"mappings":"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"}
1
+ {"version":3,"file":"CompositeBar.js","sources":["../../../../../../../src/components/AsideHeader/components/CompositeBar/CompositeBar.tsx"],"sourcesContent":["import React, {FC, ReactNode, useCallback, useMemo, useRef, useState} from 'react';\n\nimport {List} from '@gravity-ui/uikit';\nimport AutoSizer, {Size} from 'react-virtualized-auto-sizer';\n\nimport {MenuGroup} from '../../../types';\nimport {createBlock} from '../../../utils/cn';\nimport {AsideHeaderItem, AsideHeaderMenuOverflow} from '../../types';\n\nimport {Item} from './Item/Item';\nimport {ItemProps} from './Item/Item.types';\nimport {ScrollableWithScrollbar} from './ScrollableWithScrollbar';\nimport {COLLAPSE_ITEM_ID} from './constants';\nimport {buildCompositeBarRows} from './grouping';\nimport type {CompositeBarRow} from './grouping';\nimport {\n getAutosizeCompositeBarRows,\n getCompositeBarRowsMinHeight,\n getItemHeight,\n getItemsHeight,\n getMoreButtonItem,\n getReorderedCompositeBarRows,\n getSelectedCompositeBarRowIndex,\n getSelectedItemIndex,\n makeGroupHeaderAsideItem,\n} from './utils';\n\nimport styles from './CompositeBar.module.scss';\n\nconst b = createBlock('composite-bar', styles);\n\n/** Row L-connector: vertical segment + rounded hook. viewBox matches `variables.$item-height`. */\nconst MENU_GROUP_NESTED_TREE_CONNECTOR_PATH =\n 'M8.03125 0V10.07935C8.03125 15.558375 11.5846 20 15.9678 20';\n\ntype CompositeBarProps = {\n type: 'menu' | 'subheader';\n items: AsideHeaderItem[];\n className?: string;\n menuGroups?: MenuGroup[];\n onItemClick?: (\n item: AsideHeaderItem,\n collapsed: boolean,\n event: React.MouseEvent<HTMLElement, MouseEvent>,\n ) => void;\n menuMoreTitle?: string;\n onMoreClick?: () => void;\n compact: boolean;\n compositeId?: string;\n menuItemClassName?: string;\n /**\n * @see AsideHeaderMenuOverflow\n */\n menuOverflow?: AsideHeaderMenuOverflow;\n collapsedMenuGroupIds?: Record<string, boolean>;\n defaultCollapsedMenuGroupIds?: Record<string, boolean>;\n onToggleMenuGroupCollapsed?: (groupId: string) => void;\n};\n\ntype CompositeBarViewProps = {\n type: 'menu' | 'subheader';\n compositeId?: string;\n compact: boolean;\n menuItemClassName?: string;\n rows: CompositeBarRow[];\n onItemClick?: CompositeBarProps['onItemClick'];\n onMoreClick?: () => void;\n collapseItems?: AsideHeaderItem[];\n /** Nested group list + tree connectors (expanded menu + scroll overflow only). */\n inlineGroupChildren: boolean;\n isGroupCollapsed: (groupId: string) => boolean;\n onToggleGroupCollapsed: (groupId: string) => void;\n};\n\nconst CompositeBarView: FC<CompositeBarViewProps> = ({\n type,\n rows,\n onItemClick,\n onMoreClick,\n collapseItems,\n compact,\n compositeId,\n menuItemClassName,\n inlineGroupChildren,\n isGroupCollapsed,\n onToggleGroupCollapsed,\n}) => {\n const ref = useRef<List<CompositeBarRow>>(null);\n\n const onMouseLeave = useCallback(() => {\n if (compact && document.hasFocus()) {\n ref.current?.activateItem(undefined as unknown as number);\n }\n }, [compact]);\n\n const onPopupItemClick = useCallback(\n (\n item: AsideHeaderItem,\n collapsed: boolean,\n event: React.MouseEvent<HTMLElement, MouseEvent>,\n ) => {\n onItemClick?.(item, collapsed, event);\n },\n [onItemClick],\n );\n\n const onItemClickByIndex = useCallback(\n (orginalItemClick: AsideHeaderItem['onItemClick']): ItemProps['onItemClick'] =>\n (item, collapsed, event) => {\n if (item.id === COLLAPSE_ITEM_ID && collapsed) {\n onMoreClick?.();\n } else {\n onItemClick?.(\n {\n ...item,\n onItemClick: orginalItemClick,\n },\n collapsed,\n event,\n );\n }\n },\n [onItemClick, onMoreClick],\n );\n\n const itemHeight = useCallback(\n (row: CompositeBarRow) => {\n if (row.kind === 'item') {\n return getItemHeight(row.item);\n }\n const headerH = getItemHeight(makeGroupHeaderAsideItem(row.group));\n if (!inlineGroupChildren || isGroupCollapsed(row.group.id)) {\n return headerH;\n }\n return headerH + getItemsHeight(row.items);\n },\n [inlineGroupChildren, isGroupCollapsed],\n );\n\n const itemsHeight = useCallback(\n (listRows: CompositeBarRow[]) => listRows.reduce((sum, row) => sum + itemHeight(row), 0),\n [itemHeight],\n );\n\n return (\n <List<CompositeBarRow>\n id={compositeId}\n ref={ref}\n items={rows}\n selectedItemIndex={type === 'menu' ? getSelectedCompositeBarRowIndex(rows) : undefined}\n itemHeight={itemHeight}\n itemsHeight={itemsHeight}\n itemClassName={b('root-menu-item', menuItemClassName)}\n virtualized={false}\n filterable={false}\n sortable={false}\n renderItem={(row) => {\n if (row.kind === 'item') {\n const item = row.item;\n let menuPopupItems: AsideHeaderItem[] | undefined;\n let menuPopupTitle: string | undefined;\n\n if (item.id === COLLAPSE_ITEM_ID) {\n menuPopupItems = collapseItems;\n } else {\n menuPopupItems = item.compositeBarMenuPopupItems;\n menuPopupTitle = item.compositeBarMenuPopupTitle;\n }\n\n return (\n <Item\n {...item}\n compact={compact}\n popupItemClassName={menuItemClassName}\n menuPopupItems={menuPopupItems}\n menuPopupTitle={menuPopupTitle}\n onMouseLeave={onMouseLeave}\n onPopupItemClick={onPopupItemClick}\n onItemClick={onItemClickByIndex(item.onItemClick)}\n />\n );\n }\n\n const headerItem = makeGroupHeaderAsideItem(row.group);\n const groupIsCollapsed = isGroupCollapsed(row.group.id);\n const groupHasOwnAction = Boolean(row.group.onItemClick || row.group.href);\n const onHeaderItemClick = onItemClickByIndex(row.group.onItemClick) as NonNullable<\n ItemProps['onItemClick']\n >;\n\n if (!inlineGroupChildren) {\n return (\n <Item\n {...headerItem}\n href={row.group.href}\n compact={compact}\n popupItemClassName={menuItemClassName}\n menuPopupItems={row.items}\n menuPopupTitle={row.group.popupTitle}\n className={b('menu-group-header')}\n hideCompactChevron={row.group.hideCompactChevron}\n onMouseLeave={onMouseLeave}\n onPopupItemClick={onPopupItemClick}\n onItemClick={onHeaderItemClick}\n />\n );\n }\n\n const selectedItemIndex = getSelectedItemIndex(row.items);\n\n return (\n <div\n className={b('menu-group', {\n expanded: !groupIsCollapsed,\n collapsed: groupIsCollapsed,\n })}\n >\n <Item\n {...headerItem}\n href={row.group.href}\n compact={compact}\n popupItemClassName={menuItemClassName}\n className={b('menu-group-header')}\n groupHeaderExpanded={!groupIsCollapsed}\n onMouseLeave={onMouseLeave}\n onGroupHeaderChevronClick={\n groupHasOwnAction\n ? () => onToggleGroupCollapsed(row.group.id)\n : undefined\n }\n onItemClick={(item, isItemCollapsed, event) => {\n if (!groupHasOwnAction) {\n onToggleGroupCollapsed(row.group.id);\n }\n onHeaderItemClick(item, isItemCollapsed, event);\n }}\n />\n {!groupIsCollapsed && (\n <List<AsideHeaderItem>\n items={row.items}\n selectedItemIndex={selectedItemIndex}\n itemHeight={getItemHeight}\n itemsHeight={getItemsHeight}\n itemClassName={b('menu-group-nested-list-item')}\n virtualized={false}\n filterable={false}\n sortable={false}\n renderItem={(nestedItem, _isActive, groupItemIndex) => {\n const spineActive =\n selectedItemIndex !== undefined &&\n groupItemIndex < selectedItemIndex;\n\n return (\n <div className={b('menu-group-nested-row-inner')}>\n <Item\n {...nestedItem}\n className={[\n nestedItem.className,\n b('menu-group-nested-item'),\n ]\n .filter(Boolean)\n .join(' ')}\n compact={compact}\n menuGroupNestedTreeConnector={\n <span\n className={b(\n 'menu-group-nested-connector',\n {'spine-active': spineActive},\n )}\n aria-hidden\n >\n <svg\n className={b(\n 'menu-group-nested-tree-svg',\n {\n active:\n selectedItemIndex ===\n groupItemIndex,\n },\n )}\n viewBox=\"0 0 16 40\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d={\n MENU_GROUP_NESTED_TREE_CONNECTOR_PATH\n }\n fill=\"none\"\n strokeLinecap=\"butt\"\n strokeWidth=\"1.3\"\n vectorEffect=\"non-scaling-stroke\"\n />\n </svg>\n </span>\n }\n onMouseLeave={onMouseLeave}\n onItemClick={onItemClickByIndex(\n nestedItem.onItemClick,\n )}\n />\n </div>\n );\n }}\n />\n )}\n </div>\n );\n }}\n />\n );\n};\n\nexport const CompositeBar: FC<CompositeBarProps> = ({\n type,\n className,\n items,\n menuGroups,\n menuMoreTitle,\n onItemClick,\n onMoreClick,\n compact,\n compositeId,\n menuItemClassName,\n menuOverflow = 'collapse',\n collapsedMenuGroupIds: collapsedMenuGroupIdsProp,\n defaultCollapsedMenuGroupIds,\n onToggleMenuGroupCollapsed,\n}) => {\n const rows = useMemo(() => buildCompositeBarRows(items, menuGroups), [items, menuGroups]);\n\n const isCollapsedControlled = collapsedMenuGroupIdsProp !== undefined;\n const [uncontrolledCollapsed, setUncontrolledCollapsed] = useState<Record<string, boolean>>(\n () => defaultCollapsedMenuGroupIds ?? {},\n );\n\n const collapsedMap = isCollapsedControlled ? collapsedMenuGroupIdsProp : uncontrolledCollapsed;\n\n const onToggleGroupCollapsed = useCallback(\n (groupId: string) => {\n onToggleMenuGroupCollapsed?.(groupId);\n if (!isCollapsedControlled) {\n setUncontrolledCollapsed((prev) => ({...prev, [groupId]: !prev[groupId]}));\n }\n },\n [isCollapsedControlled, onToggleMenuGroupCollapsed],\n );\n\n const isGroupCollapsed = useCallback(\n (groupId: string) => Boolean(collapsedMap[groupId]),\n [collapsedMap],\n );\n\n const inlineGroupChildren =\n !compact && menuOverflow === 'scroll' && type === 'menu' && Boolean(menuGroups?.length);\n\n const scrollableRows = useMemo(() => getReorderedCompositeBarRows(rows), [rows]);\n\n const scrollRecalcKey = useMemo(\n () =>\n `${items.length}:${menuGroups?.length ?? 0}:${JSON.stringify(\n Object.keys(collapsedMap)\n .sort()\n .reduce<Record<string, boolean>>((acc, k) => {\n acc[k] = Boolean(collapsedMap[k]);\n return acc;\n }, {}),\n )}`,\n [items.length, menuGroups?.length, collapsedMap],\n );\n\n if (rows.length === 0) {\n return null;\n }\n\n let node: ReactNode;\n\n if (type === 'menu') {\n if (menuOverflow === 'scroll' && !compact) {\n node = (\n <ScrollableWithScrollbar className={className} recalcDeps={[scrollRecalcKey]}>\n <CompositeBarView\n compositeId={compositeId}\n type=\"menu\"\n compact={compact}\n rows={scrollableRows}\n onItemClick={onItemClick}\n onMoreClick={onMoreClick}\n menuItemClassName={menuItemClassName}\n inlineGroupChildren={inlineGroupChildren}\n isGroupCollapsed={isGroupCollapsed}\n onToggleGroupCollapsed={onToggleGroupCollapsed}\n />\n </ScrollableWithScrollbar>\n );\n } else {\n const minHeight = getCompositeBarRowsMinHeight(rows);\n const collapseItem = getMoreButtonItem(menuMoreTitle);\n node = (\n <div className={b({autosizer: true})} style={{minHeight}}>\n {rows.length !== 0 && (\n <AutoSizer>\n {(size: Size) => {\n const width = Number.isNaN(size.width) ? 0 : size.width;\n const height = Number.isNaN(size.height) ? 0 : size.height;\n\n const {listRows, collapseItems} = getAutosizeCompositeBarRows(\n rows,\n height,\n collapseItem,\n );\n return (\n <div style={{width, height}}>\n <CompositeBarView\n compositeId={compositeId}\n type=\"menu\"\n compact={compact}\n rows={listRows}\n onItemClick={onItemClick}\n onMoreClick={onMoreClick}\n menuItemClassName={menuItemClassName}\n collapseItems={collapseItems}\n inlineGroupChildren={false}\n isGroupCollapsed={isGroupCollapsed}\n onToggleGroupCollapsed={onToggleGroupCollapsed}\n />\n </div>\n );\n }}\n </AutoSizer>\n )}\n </div>\n );\n }\n } else {\n node = (\n <div className={b({subheader: true})}>\n <CompositeBarView\n type=\"subheader\"\n menuItemClassName={menuItemClassName}\n compact={compact}\n rows={rows}\n onItemClick={onItemClick}\n inlineGroupChildren={false}\n isGroupCollapsed={isGroupCollapsed}\n onToggleGroupCollapsed={onToggleGroupCollapsed}\n />\n </div>\n );\n }\n return node;\n};\n"],"names":["createBlock","styles","useRef","useCallback","COLLAPSE_ITEM_ID","getItemHeight","makeGroupHeaderAsideItem","getItemsHeight","List","getSelectedCompositeBarRowIndex","Item","getSelectedItemIndex","useMemo","buildCompositeBarRows","useState","getReorderedCompositeBarRows","ScrollableWithScrollbar","getCompositeBarRowsMinHeight","getMoreButtonItem","getAutosizeCompositeBarRows"],"mappings":"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"}
@@ -1 +1 @@
1
- .Item-module__gn-composite-bar-item___-pkx5{background:none;border:none;color:inherit;font:inherit;outline:inherit;text-decoration:inherit}.Item-module__gn-composite-bar-item___-pkx5:focus-visible{outline:solid var(--g-color-line-misc);outline-offset:-2px}.Item-module__gn-composite-bar-item___-pkx5{--gn-composite-bar-item-action-size:36px;--gn-aside-header-item-expanded-radius:8px;--_--horizontal-divider-line-color:var(--g-color-line-generic);--_--item-background-color-hover:var(--g-color-base-simple-hover);--_--item-general-icon-color:var(--g-color-text-primary);--_--item-icon-color:var(--g-color-text-complementary);--_--item-text-color:var(--g-color-text-primary);--_--item-collapsed-radius:7px;--_--item-action-color:var(--g-color-base-float);--_--item-action-color-hover:var(--g-color-base-float-hover);--_--item-selected-text-color:var(--g-color-text-primary);--_--item-selected-background-color:var(--g-color-base-selection);align-items:center;cursor:pointer;display:flex;height:100%;margin-inline:auto;min-width:0;padding:0;width:100%}.Item-module__gn-composite-bar-item___-pkx5.gn-footer-item.Item-module__gn-composite-bar-item_type_regular___wkhsT{--gn-aside-header-item-icon-background-size:32px;height:32px}.Item-module__gn-composite-bar-item__icon___ORFNf{color:var(--gn-aside-header-item-icon-color,var(--_--item-icon-color))}.Item-module__gn-composite-bar-item_current___NT2hB .Item-module__gn-composite-bar-item__icon___ORFNf{color:var(--gn-aside-header-item-current-icon-color,var(--gn-aside-header-item-icon-color,var(--_--item-icon-color)))}.gn-composite-bar-highlighted-item .Item-module__gn-composite-bar-item__icon___ORFNf, .gn-composite-bar_subheader .Item-module__gn-composite-bar-item__icon___ORFNf, .gn-footer-item .Item-module__gn-composite-bar-item__icon___ORFNf{color:var(--gn-aside-header-general-item-icon-color,var(--_--item-general-icon-color))}.gn-composite-bar-highlighted-item .Item-module__gn-composite-bar-item_current___NT2hB .Item-module__gn-composite-bar-item__icon___ORFNf, .gn-composite-bar_subheader .Item-module__gn-composite-bar-item_current___NT2hB .Item-module__gn-composite-bar-item__icon___ORFNf, .gn-footer-item .Item-module__gn-composite-bar-item_current___NT2hB .Item-module__gn-composite-bar-item__icon___ORFNf{color:var(--gn-aside-header-item-current-icon-color,var(--gn-aside-header-general-item-icon-color,var(--_--item-general-icon-color)))}.Item-module__gn-composite-bar-item__icon-tooltip___PxU2i .Item-module__g-action-tooltip__description___UsHcG{color:var(--g-color-text-light-primary);margin-block-start:0}.Item-module__gn-composite-bar-item__icon-place___jPKRh{align-items:center;display:flex;flex-shrink:0;height:100%;justify-content:center;width:var(--_--item-height,40px)}.Item-module__gn-composite-bar-item__title___wj5L5{align-items:center;display:flex;margin:0 var(--g-spacing-4) 0 var(--g-spacing-2);overflow:hidden}.Item-module__gn-composite-bar-item__title-text___cILJo{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:var(--gn-aside-header-item-text-color,var(--_--item-text-color));display:-webkit-box;overflow:hidden;text-align:start}.Item-module__gn-composite-bar-item_current___NT2hB .Item-module__gn-composite-bar-item__title-text___cILJo{color:var(--gn-aside-header-item-current-text-color,var(--_--item-selected-text-color))}.Item-module__gn-composite-bar-item__title-adornment___Xcopn{margin:0 10px}.Item-module__gn-composite-bar-item__collapse-item___Up6IX{background:none;border:none;color:inherit;font:inherit;outline:inherit;text-decoration:inherit}.Item-module__gn-composite-bar-item__collapse-item___Up6IX:focus-visible{outline:solid var(--g-color-line-misc);outline-offset:-2px}.Item-module__gn-composite-bar-item__collapse-item___Up6IX{--_--item-icon-color:var(--g-color-text-misc);align-items:center;cursor:pointer;display:flex;height:100%;padding:0 16px;width:100%}.Item-module__gn-composite-bar-item__collapse-item-icon___CD-ao{color:var(--gn-aside-header-item-icon-color,var(--_--item-icon-color));margin-right:10px}.Item-module__gn-composite-bar-item__collapse-item___Up6IX .Item-module__gn-composite-bar-item__title-adornment___Xcopn{margin-right:0}.Item-module__gn-composite-bar-item__menu-divider___hkm-Z{border-top:1px solid var(--gn-aside-header-divider-horizontal-color,var(--_--horizontal-divider-line-color));cursor:default;margin:0 8px;width:100%}.Item-module__gn-composite-bar-item__collapse-items-popup-content___a82to{padding:4px 0}.Item-module__gn-composite-bar-item__link___McAVN{align-items:center;display:flex;height:100%;width:100%}.Item-module__gn-composite-bar-item__link___McAVN, .Item-module__gn-composite-bar-item__link___McAVN:active, .Item-module__gn-composite-bar-item__link___McAVN:focus, .Item-module__gn-composite-bar-item__link___McAVN:hover, .Item-module__gn-composite-bar-item__link___McAVN:visited{color:inherit;outline:none;text-decoration:none}.Item-module__gn-composite-bar-item__btn-icon___SwT65{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.Item-module__gn-composite-bar-item_type_action___2jxO8{background:var(--gn-aside-header-item-action-color,var(--_--item-action-color));border-radius:var(--gn-composite-bar-item-action-size);box-shadow:0 0 0 1px rgba(0,0,0,.03),0 5px 6px rgba(0,0,0,.12);height:var(--gn-composite-bar-item-action-size);justify-content:center;margin:0 10px 8px;transition:transform .1s ease-out,background-color .15s linear}.Item-module__gn-composite-bar-item_type_action___2jxO8:focus-visible{box-shadow:0 0 0 2px var(--g-color-line-misc)}.Item-module__gn-composite-bar-item_type_action___2jxO8:hover{background-color:var(--gn-aside-header-item-action-color-hover,var(--_--item-action-color-hover))}.Item-module__gn-composite-bar-item_type_action___2jxO8:active{box-shadow:0 1px 2px var(--g-color-sfx-shadow);transform:scale(.96);transition:none}.Item-module__gn-composite-bar-item_type_action___2jxO8 .Item-module__gn-composite-bar-item__icon-place___jPKRh{width:var(--gn-composite-bar-item-action-size)}.Item-module__gn-composite-bar-item_type_action___2jxO8.gn-footer-item{width:calc(100% - 20px)}.Item-module__gn-composite-bar-item__icon-tooltip___PxU2i{align-items:center;box-sizing:border-box;display:flex;height:30px;padding:8px 12px}.Item-module__gn-composite-bar-item__icon-tooltip___PxU2i .g-action-tooltip__description{color:var(--g-color-text-light-primary);margin:0;margin-block:0}.Item-module__gn-composite-bar-item__icon-tooltip_item-type_action___HUhUR{margin-left:10px}.Item-module__gn-composite-bar-item__icon-popover___euq-P{align-items:center;border-radius:12px;box-sizing:border-box;display:flex;padding:var(--g-spacing-2)}.Item-module__gn-composite-bar-item__icon-popover_item-type_action___ep-D3{margin-left:10px}.Item-module__gn-composite-bar-item__popup-content___oys3t{border-radius:var(--gn-aside-header-item-expanded-radius);box-sizing:border-box}.Item-module__gn-composite-bar-item__popup-content___oys3t .Item-module__gn-composite-bar-item__root-menu-item___nlpvH[class]{background-color:transparent}.Item-module__gn-composite-bar-item__popup-title___2-tGd{color:var(--g-color-text-primary);font-size:var(--g-text-subheader-2-font-size);font-weight:var(--g-text-subheader-font-weight);line-height:var(--g-text-subheader-2-line-height);padding:var(--g-spacing-1) var(--g-spacing-2) 6px}.Item-module__gn-composite-bar-item__popup-item___MPgm3{box-sizing:border-box}.Item-module__gn-composite-bar-item__popup-item___MPgm3.Item-module__gn-composite-bar-item_type_regular___wkhsT{border-radius:var(--gn-aside-header-item-expanded-radius);height:32px}.Item-module__gn-composite-bar-item_hide-icon___bf5h3 .Item-module__gn-composite-bar-item__icon-place___jPKRh{display:none}.Item-module__gn-composite-bar-item_hide-icon___bf5h3 .Item-module__gn-composite-bar-item__title___wj5L5{margin-left:var(--g-spacing-4)}.Item-module__gn-composite-bar-item___-pkx5:not(.Item-module__gn-composite-bar-item_compact___PVTeM).Item-module__gn-composite-bar-item_current___NT2hB.Item-module__gn-composite-bar-item_type_regular___wkhsT{background-color:var(--gn-aside-header-item-current-background-color,var(--_--item-selected-background-color));border-radius:var(--gn-aside-header-item-expanded-radius)}.Item-module__gn-composite-bar-item___-pkx5:not(.Item-module__gn-composite-bar-item_compact___PVTeM):hover.Item-module__gn-composite-bar-item_type_regular___wkhsT{background-color:var(--gn-aside-header-item-current-background-color-hover,var(--gn-aside-header-item-current-background-color,var(--_--item-selected-background-color)));border-radius:var(--gn-aside-header-item-expanded-radius)}.Item-module__gn-composite-bar-item___-pkx5:not(.Item-module__gn-composite-bar-item_compact___PVTeM):not(.Item-module__gn-composite-bar-item_current___NT2hB):hover.Item-module__gn-composite-bar-item_type_regular___wkhsT{background-color:var(--gn-aside-header-item-background-color-hover,var(--_--item-background-color-hover));border-radius:var(--gn-aside-header-item-expanded-radius)}.Item-module__gn-composite-bar-item__chevron___ZZ-vf{align-items:center;display:flex;flex-shrink:0;margin-left:auto;margin-right:var(--g-spacing-1)}.Item-module__gn-composite-bar-item_compact___PVTeM .Item-module__gn-composite-bar-item__chevron___ZZ-vf{margin:0;position:absolute;right:8px}.Item-module__gn-composite-bar-item_compact___PVTeM .Item-module__gn-composite-bar-item__chevron___ZZ-vf svg{stroke:currentColor;stroke-width:1}.Item-module__gn-composite-bar-item_compact___PVTeM.Item-module__gn-composite-bar-item_type_action___2jxO8{width:var(--gn-composite-bar-item-action-size)}.Item-module__gn-composite-bar-item_compact___PVTeM.Item-module__gn-composite-bar-item_type_action___2jxO8 .Item-module__gn-composite-bar-item__title___wj5L5{margin:0}.Item-module__gn-composite-bar-item_compact___PVTeM.Item-module__gn-composite-bar-item_current___NT2hB.Item-module__gn-composite-bar-item_type_regular___wkhsT .Item-module__gn-composite-bar-item__btn-icon___SwT65{background-color:transparent;position:relative}.Item-module__gn-composite-bar-item_compact___PVTeM.Item-module__gn-composite-bar-item_current___NT2hB.Item-module__gn-composite-bar-item_type_regular___wkhsT .Item-module__gn-composite-bar-item__btn-icon___SwT65:before{background-color:var(--gn-aside-header-item-current-background-color,var(--_--item-selected-background-color));border-radius:var(--gn-aside-header-item-collapsed-radius,var(--_--item-collapsed-radius));content:"";height:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));z-index:-1}.Item-module__gn-composite-bar-item_compact___PVTeM:hover.Item-module__gn-composite-bar-item_type_regular___wkhsT .Item-module__gn-composite-bar-item__btn-icon___SwT65{background-color:transparent;position:relative}.Item-module__gn-composite-bar-item_compact___PVTeM:hover.Item-module__gn-composite-bar-item_type_regular___wkhsT .Item-module__gn-composite-bar-item__btn-icon___SwT65:before{background-color:var(--gn-aside-header-item-current-background-color-hover,var(--gn-aside-header-item-current-background-color,var(--_--item-selected-background-color)));border-radius:var(--gn-aside-header-item-collapsed-radius,var(--_--item-collapsed-radius));content:"";height:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));z-index:-1}.Item-module__gn-composite-bar-item_compact___PVTeM:not(.Item-module__gn-composite-bar-item_current___NT2hB):hover.Item-module__gn-composite-bar-item_type_regular___wkhsT .Item-module__gn-composite-bar-item__btn-icon___SwT65{background-color:transparent;position:relative}.Item-module__gn-composite-bar-item_compact___PVTeM:not(.Item-module__gn-composite-bar-item_current___NT2hB):hover.Item-module__gn-composite-bar-item_type_regular___wkhsT .Item-module__gn-composite-bar-item__btn-icon___SwT65:before{background-color:var(--gn-aside-header-item-background-color-hover,var(--_--item-background-color-hover));border-radius:var(--gn-aside-header-item-collapsed-radius,var(--_--item-collapsed-radius));content:"";height:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));z-index:-1}
1
+ .Item-module__gn-composite-bar-item___-pkx5{background:none;border:none;color:inherit;font:inherit;outline:inherit;text-decoration:inherit}.Item-module__gn-composite-bar-item___-pkx5:focus-visible{outline:solid var(--g-color-line-misc);outline-offset:-2px}.Item-module__gn-composite-bar-item___-pkx5{--gn-composite-bar-item-action-size:36px;--gn-aside-header-item-expanded-radius:8px;--_--horizontal-divider-line-color:var(--g-color-line-generic);--_--item-background-color-hover:var(--g-color-base-simple-hover);--_--item-general-icon-color:var(--g-color-text-primary);--_--item-icon-color:var(--g-color-text-complementary);--_--item-text-color:var(--g-color-text-primary);--_--item-collapsed-radius:7px;--_--item-action-color:var(--g-color-base-float);--_--item-action-color-hover:var(--g-color-base-float-hover);--_--item-chevron-padding-right:var(--g-spacing-1);--_--item-selected-text-color:var(--g-color-text-primary);--_--item-selected-background-color:var(--g-color-base-selection);align-items:center;cursor:pointer;display:flex;height:100%;margin-inline:auto;min-width:0;padding:0;width:100%}.Item-module__gn-composite-bar-item___-pkx5.gn-footer-item.Item-module__gn-composite-bar-item_type_regular___wkhsT{--gn-aside-header-item-icon-background-size:32px;height:32px}.Item-module__gn-composite-bar-item___-pkx5.gn-footer-item_regular-size.Item-module__gn-composite-bar-item_type_regular___wkhsT{--gn-aside-header-item-icon-background-size:38px;height:40px}.Item-module__gn-composite-bar-item__icon___ORFNf{color:var(--gn-aside-header-item-icon-color,var(--_--item-icon-color))}.Item-module__gn-composite-bar-item_current___NT2hB .Item-module__gn-composite-bar-item__icon___ORFNf{color:var(--gn-aside-header-item-current-icon-color,var(--gn-aside-header-item-icon-color,var(--_--item-icon-color)))}.gn-composite-bar-highlighted-item .Item-module__gn-composite-bar-item__icon___ORFNf, .gn-composite-bar_subheader .Item-module__gn-composite-bar-item__icon___ORFNf, .gn-footer-item .Item-module__gn-composite-bar-item__icon___ORFNf{color:var(--gn-aside-header-general-item-icon-color,var(--_--item-general-icon-color))}.gn-composite-bar-highlighted-item .Item-module__gn-composite-bar-item_current___NT2hB .Item-module__gn-composite-bar-item__icon___ORFNf, .gn-composite-bar_subheader .Item-module__gn-composite-bar-item_current___NT2hB .Item-module__gn-composite-bar-item__icon___ORFNf, .gn-footer-item .Item-module__gn-composite-bar-item_current___NT2hB .Item-module__gn-composite-bar-item__icon___ORFNf{color:var(--gn-aside-header-item-current-icon-color,var(--gn-aside-header-general-item-icon-color,var(--_--item-general-icon-color)))}.Item-module__gn-composite-bar-item__icon-tooltip___PxU2i .Item-module__g-action-tooltip__description___UsHcG{color:var(--g-color-text-light-primary);margin-block-start:0}.Item-module__gn-composite-bar-item__icon-place___jPKRh{align-items:center;display:flex;flex-shrink:0;height:100%;justify-content:center;width:var(--_--item-height,40px)}.Item-module__gn-composite-bar-item__title___wj5L5{align-items:center;display:flex;margin:0 var(--g-spacing-4) 0 var(--g-spacing-2);overflow:hidden}.Item-module__gn-composite-bar-item__title-text___cILJo{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:var(--gn-aside-header-item-text-color,var(--_--item-text-color));display:-webkit-box;overflow:hidden;text-align:start}.Item-module__gn-composite-bar-item_current___NT2hB .Item-module__gn-composite-bar-item__title-text___cILJo{color:var(--gn-aside-header-item-current-text-color,var(--_--item-selected-text-color))}.Item-module__gn-composite-bar-item__title-adornment___Xcopn{margin:0 10px}.Item-module__gn-composite-bar-item__collapse-item___Up6IX{background:none;border:none;color:inherit;font:inherit;outline:inherit;text-decoration:inherit}.Item-module__gn-composite-bar-item__collapse-item___Up6IX:focus-visible{outline:solid var(--g-color-line-misc);outline-offset:-2px}.Item-module__gn-composite-bar-item__collapse-item___Up6IX{--_--item-icon-color:var(--g-color-text-misc);align-items:center;cursor:pointer;display:flex;height:100%;padding:0 16px;width:100%}.Item-module__gn-composite-bar-item__collapse-item-icon___CD-ao{color:var(--gn-aside-header-item-icon-color,var(--_--item-icon-color));margin-right:10px}.Item-module__gn-composite-bar-item__collapse-item___Up6IX .Item-module__gn-composite-bar-item__title-adornment___Xcopn{margin-right:0}.Item-module__gn-composite-bar-item__menu-divider___hkm-Z{border-top:1px solid var(--gn-aside-header-divider-horizontal-color,var(--_--horizontal-divider-line-color));cursor:default;margin:0 8px;width:100%}.Item-module__gn-composite-bar-item__collapse-items-popup-content___a82to{padding:4px 0}.Item-module__gn-composite-bar-item__link___McAVN{align-items:center;display:flex;height:100%;width:100%}.Item-module__gn-composite-bar-item__link___McAVN, .Item-module__gn-composite-bar-item__link___McAVN:active, .Item-module__gn-composite-bar-item__link___McAVN:focus, .Item-module__gn-composite-bar-item__link___McAVN:hover, .Item-module__gn-composite-bar-item__link___McAVN:visited{color:inherit;outline:none;text-decoration:none}.Item-module__gn-composite-bar-item__btn-icon___SwT65{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.Item-module__gn-composite-bar-item_type_action___2jxO8{background:var(--gn-aside-header-item-action-color,var(--_--item-action-color));border-radius:var(--gn-composite-bar-item-action-size);box-shadow:0 0 0 1px rgba(0,0,0,.03),0 5px 6px rgba(0,0,0,.12);height:var(--gn-composite-bar-item-action-size);justify-content:center;margin:0 10px 8px;transition:transform .1s ease-out,background-color .15s linear}.Item-module__gn-composite-bar-item_type_action___2jxO8:focus-visible{box-shadow:0 0 0 2px var(--g-color-line-misc)}.Item-module__gn-composite-bar-item_type_action___2jxO8:hover{background-color:var(--gn-aside-header-item-action-color-hover,var(--_--item-action-color-hover))}.Item-module__gn-composite-bar-item_type_action___2jxO8:active{box-shadow:0 1px 2px var(--g-color-sfx-shadow);transform:scale(.96);transition:none}.Item-module__gn-composite-bar-item_type_action___2jxO8 .Item-module__gn-composite-bar-item__icon-place___jPKRh{width:var(--gn-composite-bar-item-action-size)}.Item-module__gn-composite-bar-item_type_action___2jxO8.gn-footer-item{width:calc(100% - 20px)}.Item-module__gn-composite-bar-item__icon-tooltip___PxU2i{align-items:center;box-sizing:border-box;display:flex;height:30px;padding:8px 12px}.Item-module__gn-composite-bar-item__icon-tooltip___PxU2i .g-action-tooltip__description{color:var(--g-color-text-light-primary);margin:0;margin-block:0}.Item-module__gn-composite-bar-item__icon-tooltip_item-type_action___HUhUR{margin-left:10px}.Item-module__gn-composite-bar-item__icon-popover___euq-P{align-items:center;border-radius:12px;box-sizing:border-box;display:flex;padding:var(--g-spacing-2)}.Item-module__gn-composite-bar-item__icon-popover_item-type_action___ep-D3{margin-left:10px}.Item-module__gn-composite-bar-item__popup-content___oys3t{border-radius:var(--gn-aside-header-item-expanded-radius);box-sizing:border-box}.Item-module__gn-composite-bar-item__popup-content___oys3t .Item-module__gn-composite-bar-item__root-menu-item___nlpvH[class]{background-color:transparent}.Item-module__gn-composite-bar-item__popup-title___2-tGd{color:var(--g-color-text-primary);font-size:var(--g-text-subheader-2-font-size);font-weight:var(--g-text-subheader-font-weight);line-height:var(--g-text-subheader-2-line-height);padding:var(--g-spacing-1) var(--g-spacing-2) 6px}.Item-module__gn-composite-bar-item__popup-item___MPgm3{box-sizing:border-box}.Item-module__gn-composite-bar-item__popup-item___MPgm3.Item-module__gn-composite-bar-item_type_regular___wkhsT{border-radius:var(--gn-aside-header-item-expanded-radius);height:32px}.Item-module__gn-composite-bar-item_hide-icon___bf5h3 .Item-module__gn-composite-bar-item__icon-place___jPKRh{display:none}.Item-module__gn-composite-bar-item_hide-icon___bf5h3 .Item-module__gn-composite-bar-item__title___wj5L5{margin-left:var(--g-spacing-4)}.Item-module__gn-composite-bar-item___-pkx5:not(.Item-module__gn-composite-bar-item_compact___PVTeM).Item-module__gn-composite-bar-item_current___NT2hB.Item-module__gn-composite-bar-item_type_regular___wkhsT{background-color:var(--gn-aside-header-item-current-background-color,var(--_--item-selected-background-color));border-radius:var(--gn-aside-header-item-expanded-radius)}.Item-module__gn-composite-bar-item___-pkx5:not(.Item-module__gn-composite-bar-item_compact___PVTeM):hover.Item-module__gn-composite-bar-item_type_regular___wkhsT{background-color:var(--gn-aside-header-item-current-background-color-hover,var(--gn-aside-header-item-current-background-color,var(--_--item-selected-background-color)));border-radius:var(--gn-aside-header-item-expanded-radius)}.Item-module__gn-composite-bar-item___-pkx5:not(.Item-module__gn-composite-bar-item_compact___PVTeM):not(.Item-module__gn-composite-bar-item_current___NT2hB):hover.Item-module__gn-composite-bar-item_type_regular___wkhsT{background-color:var(--gn-aside-header-item-background-color-hover,var(--_--item-background-color-hover));border-radius:var(--gn-aside-header-item-expanded-radius)}.Item-module__gn-composite-bar-item__group-header-row___m-4WB{--gn-aside-header-item-expanded-radius:8px;--_--item-background-color-hover:var(--g-color-base-simple-hover);--_--item-chevron-padding-right:var(--g-spacing-1);display:flex;height:100%;width:100%}.Item-module__gn-composite-bar-item__group-header-row___m-4WB:hover{background-color:var(--gn-aside-header-item-background-color-hover,var(--_--item-background-color-hover));border-radius:var(--gn-aside-header-item-expanded-radius)}.Item-module__gn-composite-bar-item_with-chevron-control___5F9O3{align-self:stretch;flex:1 1 auto;height:auto;min-width:0;width:auto}.Item-module__gn-composite-bar-item___-pkx5.Item-module__gn-composite-bar-item_with-chevron-control___5F9O3:not(.Item-module__gn-composite-bar-item_current___NT2hB):hover.Item-module__gn-composite-bar-item_type_regular___wkhsT{background-color:transparent}.Item-module__gn-composite-bar-item__chevron___ZZ-vf{align-items:center;align-self:stretch;display:flex;flex-shrink:0;margin-left:auto;padding-left:var(--g-spacing-2);padding-right:var(--gn-aside-header-item-chevron-padding-right,var(--_--item-chevron-padding-right))}.Item-module__gn-composite-bar-item__chevron_interactive___jmUhC{background:transparent;border:none;color:var(--g-color-text-secondary);cursor:pointer;padding-bottom:0;padding-top:0}.Item-module__gn-composite-bar-item__chevron_interactive___jmUhC:hover{color:var(--g-color-text-primary)}.Item-module__gn-composite-bar-item__chevron_interactive___jmUhC:focus-visible{box-shadow:inset 0 0 0 2px var(--g-color-line-misc);outline:none}.Item-module__gn-composite-bar-item_compact___PVTeM .Item-module__gn-composite-bar-item__chevron___ZZ-vf{align-self:auto;margin:0;padding:0;position:absolute;right:8px}.Item-module__gn-composite-bar-item_compact___PVTeM .Item-module__gn-composite-bar-item__chevron___ZZ-vf svg{stroke:currentColor;stroke-width:1}.Item-module__gn-composite-bar-item_compact___PVTeM.Item-module__gn-composite-bar-item_type_action___2jxO8{width:var(--gn-composite-bar-item-action-size)}.Item-module__gn-composite-bar-item_compact___PVTeM.Item-module__gn-composite-bar-item_type_action___2jxO8 .Item-module__gn-composite-bar-item__title___wj5L5{margin:0}.Item-module__gn-composite-bar-item_compact___PVTeM.Item-module__gn-composite-bar-item_current___NT2hB.Item-module__gn-composite-bar-item_type_regular___wkhsT .Item-module__gn-composite-bar-item__btn-icon___SwT65{background-color:transparent;position:relative}.Item-module__gn-composite-bar-item_compact___PVTeM.Item-module__gn-composite-bar-item_current___NT2hB.Item-module__gn-composite-bar-item_type_regular___wkhsT .Item-module__gn-composite-bar-item__btn-icon___SwT65:before{background-color:var(--gn-aside-header-item-current-background-color,var(--_--item-selected-background-color));border-radius:var(--gn-aside-header-item-collapsed-radius,var(--_--item-collapsed-radius));content:"";height:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));z-index:-1}.Item-module__gn-composite-bar-item_compact___PVTeM:hover.Item-module__gn-composite-bar-item_type_regular___wkhsT .Item-module__gn-composite-bar-item__btn-icon___SwT65{background-color:transparent;position:relative}.Item-module__gn-composite-bar-item_compact___PVTeM:hover.Item-module__gn-composite-bar-item_type_regular___wkhsT .Item-module__gn-composite-bar-item__btn-icon___SwT65:before{background-color:var(--gn-aside-header-item-current-background-color-hover,var(--gn-aside-header-item-current-background-color,var(--_--item-selected-background-color)));border-radius:var(--gn-aside-header-item-collapsed-radius,var(--_--item-collapsed-radius));content:"";height:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));z-index:-1}.Item-module__gn-composite-bar-item_compact___PVTeM:not(.Item-module__gn-composite-bar-item_current___NT2hB):hover.Item-module__gn-composite-bar-item_type_regular___wkhsT .Item-module__gn-composite-bar-item__btn-icon___SwT65{background-color:transparent;position:relative}.Item-module__gn-composite-bar-item_compact___PVTeM:not(.Item-module__gn-composite-bar-item_current___NT2hB):hover.Item-module__gn-composite-bar-item_type_regular___wkhsT .Item-module__gn-composite-bar-item__btn-icon___SwT65:before{background-color:var(--gn-aside-header-item-background-color-hover,var(--_--item-background-color-hover));border-radius:var(--gn-aside-header-item-collapsed-radius,var(--_--item-collapsed-radius));content:"";height:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));z-index:-1}
@@ -6,6 +6,7 @@ var icons = require('@gravity-ui/icons');
6
6
  var uikit = require('@gravity-ui/uikit');
7
7
  var constants$1 = require('../../../../constants.js');
8
8
  var cn = require('../../../../utils/cn.js');
9
+ var index = require('../../../i18n/index.js');
9
10
  var HighlightedItem = require('../HighlightedItem/HighlightedItem.js');
10
11
  var constants = require('../constants.js');
11
12
  var ItemPopup = require('./ItemPopup.js');
@@ -18,11 +19,24 @@ const defaultPopupPlacement = ['right-end'];
18
19
  const defaultPopupOffset = { mainAxis: 14 };
19
20
  const CHEVRON_SIZE = 16;
20
21
  const CHEVRON_SIZE_COMPACT = 10;
22
+ function getChevronFallbackLabel(expanded) {
23
+ return expanded ? index.default('button_collapse') : index.default('button_expand');
24
+ }
25
+ function resolveItemAriaLabel(ariaProps, titleLabel) {
26
+ var _a;
27
+ return (_a = ariaProps === null || ariaProps === undefined ? undefined : ariaProps['aria-label']) !== null && _a !== undefined ? _a : titleLabel;
28
+ }
29
+ function resolveAnchorRef(anchorRef, fallback) {
30
+ return (anchorRef === null || anchorRef === undefined ? undefined : anchorRef.current) ? anchorRef : fallback;
31
+ }
32
+ function shouldShowFlyoutChevron(hasPopupItems, compact, hideCompactChevron) {
33
+ return hasPopupItems && !(compact && hideCompactChevron);
34
+ }
21
35
  const Item = (props) => {
22
- const { className, popupItemClassName, menuPopupItems, menuPopupTitle, groupHeaderExpanded, compact, onMouseLeave, onMouseEnter, enableTooltip = true, popupVisible = false, popupRef: anchoreRefProp, popupPlacement = defaultPopupPlacement, popupOffset = defaultPopupOffset, popupKeepMounted, renderPopupContent, onOpenChangePopup, onItemClick, onPopupItemClick, onItemClickCapture, itemWrapper, bringForward, rightAdornment, title, href, qa, hideIcon = false, stopClickPropagation = false, menuGroupNestedTreeConnector, menuItemAriaProps, } = props;
36
+ const { className, popupItemClassName, menuPopupItems, menuPopupTitle, groupHeaderExpanded, compact, onMouseLeave, onMouseEnter, enableTooltip = true, popupVisible = false, popupRef: anchoreRefProp, popupPlacement = defaultPopupPlacement, popupOffset = defaultPopupOffset, popupKeepMounted, renderPopupContent, onOpenChangePopup, onItemClick, onPopupItemClick, onItemClickCapture, itemWrapper, bringForward, rightAdornment, title, href, qa, hideIcon = false, stopClickPropagation = false, menuGroupNestedTreeConnector, menuItemAriaProps, onGroupHeaderChevronClick, hideCompactChevron, } = props;
23
37
  const [compactNavPopoverOpen, setCompactNavPopoverOpen] = React.useState(false);
24
38
  const ref = React.useRef(null);
25
- const anchorRef = (anchoreRefProp === null || anchoreRefProp === undefined ? undefined : anchoreRefProp.current) ? anchoreRefProp : ref;
39
+ const anchorRef = resolveAnchorRef(anchoreRefProp, ref);
26
40
  const highlightedRef = React.useRef(null);
27
41
  const type = props.type || constants.ITEM_TYPE_REGULAR;
28
42
  const icon = props.icon;
@@ -63,6 +77,7 @@ const Item = (props) => {
63
77
  return React.createElement("div", { className: b('menu-divider') });
64
78
  }
65
79
  const compactPopoverDisabled = !enableTooltip || popupVisible || type === 'action';
80
+ const showFlyoutChevron = shouldShowFlyoutChevron(Boolean(resolvedMenuPopupItems === null || resolvedMenuPopupItems === undefined ? undefined : resolvedMenuPopupItems.length), compact, hideCompactChevron);
66
81
  const makeIconNode = (iconEl, withCompactPopover = true) => {
67
82
  if (!compact) {
68
83
  return iconEl;
@@ -75,13 +90,31 @@ const Item = (props) => {
75
90
  if (nextOpen && compactPopoverDisabled)
76
91
  return;
77
92
  setCompactNavPopoverOpen(nextOpen);
78
- }, hideIcon: true, itemClassName: popupItemClassName, disabled: compactPopoverDisabled, type: type, collapsed: compact, onPopupItemClick: onPopupItemClick, onItemClick: onItemClick }, iconButton));
93
+ }, hideIcon: true, itemClassName: popupItemClassName, disabled: compactPopoverDisabled, type: type, collapsed: compact,
94
+ /**
95
+ * No `onPopupItemClick` here on purpose: this popup renders the item itself
96
+ * (`items={[props]}`), whose `onItemClick` is already the row-level wrapper.
97
+ * Going through the wrapper keeps the original `item.onItemClick` intact for
98
+ * the AsideHeader handler; the direct path would pass the wrapper as
99
+ * `item.onItemClick` and trigger the handler twice (toggling All pages back).
100
+ */
101
+ onItemClick: onItemClick }, iconButton));
79
102
  };
103
+ const ariaLabel = typeof title === 'string' ? title : undefined;
104
+ const resolvedAriaLabel = resolveItemAriaLabel(menuItemAriaProps, ariaLabel);
80
105
  const makeNode = ({ icon: iconEl, title: titleEl }) => {
81
- var _a, _b;
106
+ var _a;
82
107
  const wrappedByItemWrapper = typeof itemWrapper === 'function';
83
- const rowClassName = b({ type, current, compact, 'hide-icon': hideIcon }, className);
84
- const ariaLabel = typeof title === 'string' ? title : undefined;
108
+ const chevronClick = inlineGroupHeader ? onGroupHeaderChevronClick : undefined;
109
+ /* With a sibling chevron control, the wrapper becomes the outer box of the row,
110
+ so the external className (outer layout) is applied to it instead of the row. */
111
+ const rowClassName = b({
112
+ type,
113
+ current,
114
+ compact,
115
+ 'hide-icon': hideIcon,
116
+ 'with-chevron-control': Boolean(chevronClick),
117
+ }, chevronClick ? undefined : className);
85
118
  const handleRowClick = (event) => {
86
119
  if (compact && !collapsedItem && !showMenuPopup && !current) {
87
120
  setCompactNavPopoverOpen(false);
@@ -91,14 +124,30 @@ const Item = (props) => {
91
124
  event.stopPropagation();
92
125
  }
93
126
  };
127
+ const chevronSize = compact ? CHEVRON_SIZE_COMPACT : CHEVRON_SIZE;
128
+ let chevronNode = null;
129
+ let chevronControl = null;
130
+ if (chevronClick) {
131
+ chevronControl = (React.createElement("button", { type: "button", className: b('chevron', { interactive: true }), "aria-label": resolvedAriaLabel !== null && resolvedAriaLabel !== undefined ? resolvedAriaLabel : getChevronFallbackLabel(groupHeaderExpanded), "aria-expanded": groupHeaderExpanded, onClick: (event) => {
132
+ event.stopPropagation();
133
+ chevronClick(event);
134
+ } },
135
+ React.createElement(uikit.Icon, { data: groupHeaderExpanded ? icons.ChevronUp : icons.ChevronDown, size: chevronSize })));
136
+ }
137
+ else if (inlineGroupHeader) {
138
+ chevronNode = (React.createElement("div", { className: b('chevron') },
139
+ React.createElement(uikit.Icon, { data: groupHeaderExpanded ? icons.ChevronUp : icons.ChevronDown, size: chevronSize })));
140
+ }
141
+ else if (showFlyoutChevron) {
142
+ chevronNode = (React.createElement("div", { className: b('chevron') },
143
+ React.createElement(uikit.Icon, { data: icons.ChevronRight, size: chevronSize })));
144
+ }
94
145
  const rowChildren = (React.createElement(React.Fragment, null,
95
146
  menuGroupNestedTreeConnector,
96
147
  React.createElement("div", { className: b('icon-place'), ref: highlightedRef }, makeIconNode(iconEl)),
97
- React.createElement("div", { className: b('title'), title: typeof title === 'string' ? title : undefined }, titleEl),
98
- inlineGroupHeader ? (React.createElement("div", { className: b('chevron') },
99
- React.createElement(uikit.Icon, { data: groupHeaderExpanded ? icons.ChevronUp : icons.ChevronDown, size: compact ? CHEVRON_SIZE_COMPACT : CHEVRON_SIZE }))) : (Boolean(resolvedMenuPopupItems === null || resolvedMenuPopupItems === undefined ? undefined : resolvedMenuPopupItems.length) && (React.createElement("div", { className: b('chevron') },
100
- React.createElement(uikit.Icon, { data: icons.ChevronRight, size: compact ? CHEVRON_SIZE_COMPACT : CHEVRON_SIZE }))))));
101
- const rowEventProps = Object.assign(Object.assign({}, (menuItemAriaProps !== null && menuItemAriaProps !== undefined ? menuItemAriaProps : {})), { className: rowClassName, 'data-type': type, 'data-qa': qa, 'aria-label': (_a = menuItemAriaProps === null || menuItemAriaProps === undefined ? undefined : menuItemAriaProps['aria-label']) !== null && _a !== undefined ? _a : ariaLabel, onClick: handleRowClick, onClickCapture: onItemClickCapture, onMouseEnter: () => {
148
+ React.createElement("div", { className: b('title'), title: ariaLabel }, titleEl),
149
+ chevronNode));
150
+ const rowEventProps = Object.assign(Object.assign({}, (menuItemAriaProps !== null && menuItemAriaProps !== undefined ? menuItemAriaProps : {})), { className: rowClassName, 'data-type': type, 'data-qa': qa, 'aria-label': resolvedAriaLabel, onClick: handleRowClick, onClickCapture: onItemClickCapture, onMouseEnter: () => {
102
151
  if (!compact) {
103
152
  onMouseEnter === null || onMouseEnter === undefined ? undefined : onMouseEnter();
104
153
  }
@@ -112,11 +161,16 @@ const Item = (props) => {
112
161
  tagNode = (React.createElement("a", Object.assign({}, rowEventProps, { href: href, ref: ref }), rowChildren));
113
162
  }
114
163
  else if (wrappedByItemWrapper) {
115
- tagNode = (React.createElement("div", Object.assign({}, rowEventProps, { role: (_b = menuItemAriaProps === null || menuItemAriaProps === undefined ? undefined : menuItemAriaProps.role) !== null && _b !== undefined ? _b : 'button', ref: ref }), rowChildren));
164
+ tagNode = (React.createElement("div", Object.assign({}, rowEventProps, { role: (_a = menuItemAriaProps === null || menuItemAriaProps === undefined ? undefined : menuItemAriaProps.role) !== null && _a !== undefined ? _a : 'button', ref: ref }), rowChildren));
116
165
  }
117
166
  else {
118
167
  tagNode = (React.createElement("button", Object.assign({}, rowEventProps, { ref: ref }), rowChildren));
119
168
  }
169
+ if (chevronControl) {
170
+ tagNode = (React.createElement("div", { className: b('group-header-row', className) },
171
+ tagNode,
172
+ chevronControl));
173
+ }
120
174
  const expandedMenuRows = resolvedMenuPopupItems;
121
175
  const wrappedTagNode = showMenuPopup && expandedMenuRows ? (React.createElement(ItemPopup.ItemPopup, { items: expandedMenuRows, title: resolvedMenuPopupTitle, open: compactNavPopoverOpen, itemClassName: popupItemClassName, onOpenChange: setCompactNavPopoverOpen, collapsed: collapsedItem ? true : compact, onPopupItemClick: onPopupItemClick, onItemClick: onItemClick }, tagNode)) : (tagNode);
122
176
  const createdNode = (React.createElement(React.Fragment, null,