From c18af3b18ad8349f443fe62f605682d19d65e8ac Mon Sep 17 00:00:00 2001 From: Jialecl Date: Fri, 7 Nov 2025 13:42:33 +0100 Subject: [PATCH 01/23] new header component added --- packages/lib/src/base-menu/GroupItem.tsx | 18 +- packages/lib/src/base-menu/ItemAction.tsx | 25 ++- packages/lib/src/base-menu/MenuItem.tsx | 1 + packages/lib/src/base-menu/Section.tsx | 4 +- packages/lib/src/base-menu/SubMenu.tsx | 40 +++- packages/lib/src/base-menu/types.ts | 17 +- packages/lib/src/base-menu/useGroupItem.ts | 3 +- packages/lib/src/base-menu/useItemAction.ts | 5 +- packages/lib/src/contextual-menu/types.ts | 4 +- .../lib/src/navigation-tree/GroupItem.tsx | 6 +- .../src/navigation-tree/NavigationTree.tsx | 10 +- .../lib/src/new-header/new-header.stories.tsx | 70 ++++++ packages/lib/src/new-header/new-header.tsx | 212 ++++++++++++++++++ packages/lib/src/new-header/types.tsx | 25 +++ packages/lib/src/sidenav/Sidenav.tsx | 2 +- 15 files changed, 400 insertions(+), 42 deletions(-) create mode 100644 packages/lib/src/new-header/new-header.stories.tsx create mode 100644 packages/lib/src/new-header/new-header.tsx create mode 100644 packages/lib/src/new-header/types.tsx diff --git a/packages/lib/src/base-menu/GroupItem.tsx b/packages/lib/src/base-menu/GroupItem.tsx index db9c6b328..e72c73bf4 100644 --- a/packages/lib/src/base-menu/GroupItem.tsx +++ b/packages/lib/src/base-menu/GroupItem.tsx @@ -13,10 +13,10 @@ const GroupItem = ({ items, ...props }: GroupItemProps) => { const NavigationTreeId = `sidenav-${useId()}`; const contextValue = useContext(BaseMenuContext) ?? {}; - const { groupSelected, isOpen, toggleOpen, responsiveView } = useGroupItem(items, contextValue); + const { groupSelected, isOpen, toggleOpen, hasPopOver, isHorizontal } = useGroupItem(items, contextValue); // TODO: SET A FIXED WIDTH TO PREVENT MOVING CONTENT WHEN EXPANDING/COLLAPSING IN RESPONSIVEVIEW - return responsiveView ? ( + return hasPopOver ? ( <> { /> - + { @@ -47,12 +47,18 @@ const GroupItem = ({ items, ...props }: GroupItemProps) => { event.preventDefault(); }} align="start" - side="right" + side={isHorizontal ? "bottom" : "right"} style={{ zIndex: "var(--z-contextualmenu)" }} + sideOffset={isHorizontal ? 16 : 0} + onInteractOutside={isHorizontal ? () => toggleOpen() : undefined} > - + {items.map((item, index) => ( - + ))} diff --git a/packages/lib/src/base-menu/ItemAction.tsx b/packages/lib/src/base-menu/ItemAction.tsx index 681e24bbf..5b22aa878 100644 --- a/packages/lib/src/base-menu/ItemAction.tsx +++ b/packages/lib/src/base-menu/ItemAction.tsx @@ -9,19 +9,20 @@ const Action = styled.button<{ depthLevel: ItemActionProps["depthLevel"]; selected: ItemActionProps["selected"]; displayGroupLines: boolean; - responsiveView?: boolean; + hasPopOver?: boolean; + isHorizontal?: boolean; }>` box-sizing: content-box; border: none; border-radius: var(--border-radius-s); - ${({ displayGroupLines, depthLevel, responsiveView }) => ` - ${!responsiveView ? `padding: var(--spacing-padding-xxs) var(--spacing-padding-xxs) var(--spacing-padding-xxs) calc(var(--spacing-padding-xs) + ${!displayGroupLines ? depthLevel : 0} * var(--spacing-padding-l))` : "padding: var(--spacing-padding-xxs) var(--spacing-padding-none)"}; + ${({ displayGroupLines, depthLevel, hasPopOver, isHorizontal }) => ` + ${!hasPopOver || isHorizontal ? `padding: var(--spacing-padding-xxs) var(--spacing-padding-xxs) var(--spacing-padding-xxs) calc(var(--spacing-padding-xs) + ${!displayGroupLines ? depthLevel : 0} * var(--spacing-padding-l))` : "padding: var(--spacing-padding-xxs) var(--spacing-padding-none)"}; ${displayGroupLines && depthLevel > 0 ? "margin-left: var(--spacing-padding-xs);" : ""} `} display: flex; align-items: center; gap: var(--spacing-gap-m); - justify-content: ${({ responsiveView }) => (responsiveView ? "center" : "space-between")}; + justify-content: ${({ hasPopOver }) => (hasPopOver ? "center" : "space-between")}; background-color: ${({ selected }) => (selected ? "var(--color-bg-primary-lighter)" : "transparent")}; height: var(--height-s); cursor: pointer; @@ -84,8 +85,9 @@ const ItemAction = memo( hasTooltip, modifiedBadge, displayControlsAfter, - responsiveView, + hasPopOver, displayGroupLines, + isHorizontal, handleTextMouseEnter, getWrapper, } = useItemAction(props); @@ -100,31 +102,32 @@ const ItemAction = memo( depthLevel={depthLevel} selected={selected} displayGroupLines={!!displayGroupLines} - responsiveView={responsiveView} + hasPopOver={hasPopOver} + isHorizontal={isHorizontal} {...(href && { href })} {...rest} aria-pressed={!href ? ariaPressed : undefined} > -