@timmbr/ui 1.7.0 → 1.9.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.
@@ -14,6 +14,8 @@ export interface NavHeaderContextValue {
14
14
  handleItemMouseLeave: () => void;
15
15
  handleItemClick: (id: string, item: NavHeaderItem) => void;
16
16
  handleSearchSubmit: (query: string) => void;
17
+ /** Closes the desktop popover and the mobile tab panel (e.g. after a menu link is followed). */
18
+ closeMenus?: () => void;
17
19
  }
18
20
  export declare const NavHeaderContext: React.Context<NavHeaderContextValue | null>;
19
21
  export declare function useNavHeaderContext(): NavHeaderContextValue;
@@ -1 +1 @@
1
- {"version":3,"file":"NavHeader.context.d.ts","sourceRoot":"","sources":["../../../src/components/NavHeader/NavHeader.context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAChD,oBAAoB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3D,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,gBAAgB,6CAA0D,CAAC;AAExF,wBAAgB,mBAAmB,IAAI,qBAAqB,CAM3D"}
1
+ {"version":3,"file":"NavHeader.context.d.ts","sourceRoot":"","sources":["../../../src/components/NavHeader/NavHeader.context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAChD,oBAAoB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3D,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,gGAAgG;IAChG,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,eAAO,MAAM,gBAAgB,6CAA0D,CAAC;AAExF,wBAAgB,mBAAmB,IAAI,qBAAqB,CAM3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"NavHeader.d.ts","sourceRoot":"","sources":["../../../src/components/NavHeader/NavHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EACV,cAAc,EAMf,MAAM,mBAAmB,CAAC;AAa3B,eAAO,MAAM,SAAS,oFA8pBrB,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,MAAM,oFAAY,CAAC"}
1
+ {"version":3,"file":"NavHeader.d.ts","sourceRoot":"","sources":["../../../src/components/NavHeader/NavHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EACV,cAAc,EAMf,MAAM,mBAAmB,CAAC;AAa3B,eAAO,MAAM,SAAS,oFA0qBrB,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,MAAM,oFAAY,CAAC"}
@@ -263,7 +263,7 @@ const NavHeader = React.forwardRef(
263
263
  const mobileActiveItemId = controlledMobileActiveId !== void 0 ? controlledMobileActiveId : uncontrolledMobileActiveId;
264
264
  const handleMobileItemClick = React.useCallback(
265
265
  (id, item) => {
266
- if (item.content) {
266
+ if (item.mobileContent ?? item.content) {
267
267
  const nextId = mobileActiveItemId === id ? null : id;
268
268
  if (controlledMobileActiveId === void 0) {
269
269
  setUncontrolledMobileActiveId(nextId);
@@ -273,6 +273,14 @@ const NavHeader = React.forwardRef(
273
273
  },
274
274
  [mobileActiveItemId, controlledMobileActiveId, onMobileActiveItemChange]
275
275
  );
276
+ const closeMenus = React.useCallback(() => {
277
+ setActiveItemId(null);
278
+ if (mobileActiveItemId === null) return;
279
+ if (controlledMobileActiveId === void 0) {
280
+ setUncontrolledMobileActiveId(null);
281
+ }
282
+ onMobileActiveItemChange?.(null);
283
+ }, [setActiveItemId, mobileActiveItemId, controlledMobileActiveId, onMobileActiveItemChange]);
276
284
  const activeMobileItem = React.useMemo(() => {
277
285
  return navItems.find((item) => item.id === mobileActiveItemId) ?? null;
278
286
  }, [navItems, mobileActiveItemId]);
@@ -307,6 +315,7 @@ const NavHeader = React.forwardRef(
307
315
  handleItemMouseLeave,
308
316
  handleItemClick,
309
317
  handleSearchSubmit,
318
+ closeMenus,
310
319
  autoMaxVisibleActions: autoMaxVisible
311
320
  }),
312
321
  [
@@ -323,6 +332,7 @@ const NavHeader = React.forwardRef(
323
332
  handleItemMouseLeave,
324
333
  handleItemClick,
325
334
  handleSearchSubmit,
335
+ closeMenus,
326
336
  autoMaxVisible
327
337
  ]
328
338
  );
@@ -59,6 +59,8 @@ export interface NavHeaderItem {
59
59
  crossZone?: boolean;
60
60
  /** Rich popover or mega-menu content. If provided, renders dropdown below header */
61
61
  content?: React.ReactNode;
62
+ /** Content for the mobile/tablet tab panel (< 1024px), e.g. image tiles. Defaults to `content`. */
63
+ mobileContent?: React.ReactNode;
62
64
  /** Width mode of the popover: 'container' (1216px centered), 'full' (100vw), 'dropdown' (anchor-aligned), or explicit number */
63
65
  popoverWidth?: 'container' | 'full' | 'dropdown' | number;
64
66
  /** Optional badge displayed adjacent to the label */
@@ -1 +1 @@
1
- {"version":3,"file":"NavHeader.types.d.ts","sourceRoot":"","sources":["../../../src/components/NavHeader/NavHeader.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NavHeader.types.d.ts","sourceRoot":"","sources":["../../../src/components/NavHeader/NavHeader.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"NavMobileTabContent.d.ts","sourceRoot":"","sources":["../../../../src/components/NavHeader/subcomponents/NavMobileTabContent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,aAAa,GAAG,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAuClE,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"NavMobileTabContent.d.ts","sourceRoot":"","sources":["../../../../src/components/NavHeader/subcomponents/NavMobileTabContent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,aAAa,GAAG,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAwClE,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -21,7 +21,8 @@ const NavMobileTabContent = ({
21
21
  document.addEventListener("keydown", handleKeyDown);
22
22
  return () => document.removeEventListener("keydown", handleKeyDown);
23
23
  }, [activeItem, onClose]);
24
- const hasContent = Boolean(activeItem && activeItem.content);
24
+ const panelContent = activeItem ? activeItem.mobileContent ?? activeItem.content : null;
25
+ const hasContent = Boolean(panelContent);
25
26
  return /* @__PURE__ */ jsx(AnimatePresence, { initial: false, children: hasContent && /* @__PURE__ */ jsx(
26
27
  motion.div,
27
28
  {
@@ -31,7 +32,7 @@ const NavMobileTabContent = ({
31
32
  transition: { duration: 0.22, ease: [0.25, 1, 0.5, 1] },
32
33
  className: cn(mobileTabContentPanelVariants(), motionClass),
33
34
  "data-slot": "nav-mobile-tab-content-panel",
34
- children: /* @__PURE__ */ jsx("div", { className: "w-full", children: activeItem.content })
35
+ children: /* @__PURE__ */ jsx("div", { className: "w-full", children: panelContent })
35
36
  },
36
37
  activeItem.id
37
38
  ) });
@@ -45,7 +45,7 @@ const NavMobileTabSlider = ({
45
45
  transition: { type: "spring", stiffness: 380, damping: 30 }
46
46
  }
47
47
  ) : isActive ? /* @__PURE__ */ jsx("div", { className: "absolute bottom-0 left-0 right-0 h-[2.5px] bg-primary rounded-full" }) : null;
48
- if (resolvedHref && !item.content && !item.disabled) {
48
+ if (resolvedHref && !(item.mobileContent ?? item.content) && !item.disabled) {
49
49
  if (CustomLink && !requiresCrossZone) {
50
50
  return /* @__PURE__ */ jsxs(
51
51
  CustomLink,
@@ -0,0 +1,37 @@
1
+ import * as React from 'react';
2
+ import type { NavHeaderItem } from '../NavHeader/NavHeader.types';
3
+ import type { NavMenuColumnsProps, NavMenuData, NavMenuGroup, NavMenuPromoProps, NavMenuTilesProps, ToNavMenuItemsOptions } from './NavMenuColumns.types';
4
+ /**
5
+ * Splits groups, in order, into at most `maxColumns` stacks so the tallest
6
+ * stack is as short as possible (groups never split). Uses up to
7
+ * `min(maxColumns, groups)` columns; an exact search, fine for menu sizes.
8
+ */
9
+ export declare function packNavMenuGroups(groups: NavMenuGroup[], maxColumns: number): NavMenuGroup[][];
10
+ /**
11
+ * A mega-menu panel: bold group headings with their links, packed into
12
+ * balanced columns split by thin dividers, with an optional aside (e.g. a
13
+ * `NavMenuPromo`). For a `NavHeader` item's popover (`content`) or any menu
14
+ * panel. Clicking a link closes the header's popover.
15
+ */
16
+ export declare const NavMenuColumns: React.ForwardRefExoticComponent<NavMenuColumnsProps & React.RefAttributes<HTMLElement>>;
17
+ /**
18
+ * Image promo card for a menu's `aside`: a headline (words in `<em>` use the
19
+ * display face), an optional subtitle and an offer badge over a cover image.
20
+ */
21
+ export declare const NavMenuPromo: React.ForwardRefExoticComponent<NavMenuPromoProps & React.RefAttributes<HTMLElement>>;
22
+ /** Tile width in px; matches `size-[88px]` in navMenuTileImageVariants. */
23
+ export declare const NAV_MENU_TILE_PX = 88;
24
+ /**
25
+ * Image tiles for a mobile menu panel (a `NavHeader` item's `mobileContent`):
26
+ * a horizontally scrolling grid, `rows` tiles tall, each a rounded square
27
+ * image with its label below. Tiles without an image show the label's
28
+ * initial on a muted square.
29
+ */
30
+ export declare const NavMenuTiles: React.ForwardRefExoticComponent<NavMenuTilesProps & React.RefAttributes<HTMLElement>>;
31
+ /**
32
+ * Turns plain menu data into `NavHeader` items: each opens a popover with
33
+ * `NavMenuColumns` on desktop and, when `tiles` are given, `NavMenuTiles` in
34
+ * the mobile tab panel. The item label itself is not a link.
35
+ */
36
+ export declare function toNavMenuItems(menus: readonly NavMenuData[], { crossZone, linkComponent, popoverWidth }?: ToNavMenuItemsOptions): NavHeaderItem[];
37
+ //# sourceMappingURL=NavMenuColumns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavMenuColumns.d.ts","sourceRoot":"","sources":["../../../src/components/NavMenuColumns/NavMenuColumns.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAiBlE,OAAO,KAAK,EAEV,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,wBAAwB,CAAC;AA8BhC;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,EAAE,EAAE,CA+B9F;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,yFAgE1B,CAAC;AAGF;;;GAGG;AACH,eAAO,MAAM,YAAY,uFA0CxB,CAAC;AAGF,2EAA2E;AAC3E,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;;;GAKG;AACH,eAAO,MAAM,YAAY,uFAuCxB,CAAC;AAGF;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,EAAE,SAAiB,EAAE,aAAa,EAAE,YAA0B,EAAE,GAAE,qBAA0B,GAC3F,aAAa,EAAE,CAuBjB"}
@@ -0,0 +1,164 @@
1
+ "use client";
2
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
3
+ import * as React from 'react';
4
+ import { cn } from '@timmbr/utils';
5
+ import { NavHeaderContext } from '../NavHeader/NavHeader.context.js';
6
+ import { navMenuTitleVariants, navMenuLinkVariants, navMenuMoreVariants, navMenuColumnVariants, navMenuAsideVariants, navMenuColumnsGridVariants, navMenuPromoTitleVariants, navMenuPromoVariants, navMenuTileImageVariants, navMenuTileLabelVariants, navMenuTileVariants, navMenuTilesVariants } from './NavMenuColumns.styles.js';
7
+ import { Divider } from '../Divider/Divider.js';
8
+ import { Badge } from '../Badge/Badge.js';
9
+
10
+ const DefaultLink = ({ href, className, children, ...rest }) => /* @__PURE__ */ jsx("a", { href, className, ...rest, children });
11
+ function useMenuLink(linkComponent, crossZone) {
12
+ const header = React.useContext(NavHeaderContext);
13
+ const Link = crossZone ? DefaultLink : linkComponent ?? header?.linkComponent ?? DefaultLink;
14
+ const close = React.useCallback(
15
+ () => header?.closeMenus ? header.closeMenus() : header?.setActiveItemId(null),
16
+ [header]
17
+ );
18
+ return { Link, close };
19
+ }
20
+ const atLeastOne = (value, fallback) => Number.isFinite(value) && value >= 1 ? Math.floor(value) : fallback;
21
+ const groupRows = (group) => 2 + (group.links?.length ?? 0) + (group.more ? 1 : 0);
22
+ function packNavMenuGroups(groups, maxColumns) {
23
+ const n = groups.length;
24
+ if (!n) return [];
25
+ const k = Math.min(atLeastOne(maxColumns, 1), n);
26
+ const prefix = [0];
27
+ for (const group of groups) prefix.push(prefix[prefix.length - 1] + groupRows(group));
28
+ const height = (from, to) => prefix[to] - prefix[from];
29
+ const best = Array.from({ length: k + 1 }, () => new Array(n + 1).fill(Infinity));
30
+ const cut = Array.from({ length: k + 1 }, () => new Array(n + 1).fill(0));
31
+ best[0][0] = 0;
32
+ for (let c = 1; c <= k; c++) {
33
+ for (let i = c; i <= n; i++) {
34
+ for (let j = c - 1; j < i; j++) {
35
+ const value = Math.max(best[c - 1][j], height(j, i));
36
+ if (value < best[c][i]) {
37
+ best[c][i] = value;
38
+ cut[c][i] = j;
39
+ }
40
+ }
41
+ }
42
+ }
43
+ const columns = [];
44
+ for (let c = k, i = n; c > 0; c--) {
45
+ const j = cut[c][i];
46
+ columns.unshift(groups.slice(j, i));
47
+ i = j;
48
+ }
49
+ return columns;
50
+ }
51
+ const NavMenuColumns = React.forwardRef(
52
+ ({ groups, columns, aside, linkComponent, crossZone = false, className, style, "aria-label": ariaLabel, ...props }, ref) => {
53
+ const { Link, close } = useMenuLink(linkComponent, crossZone);
54
+ const maxColumns = atLeastOne(columns, aside ? 3 : 4);
55
+ const stacks = React.useMemo(() => packNavMenuGroups(groups, maxColumns), [groups, maxColumns]);
56
+ return /* @__PURE__ */ jsxs(
57
+ "nav",
58
+ {
59
+ ref,
60
+ "aria-label": ariaLabel,
61
+ "data-slot": "nav-menu-columns",
62
+ className: cn(navMenuColumnsGridVariants({ aside: Boolean(aside) }), className),
63
+ style: { "--nav-menu-cols": Math.max(stacks.length, maxColumns), ...style },
64
+ ...props,
65
+ children: [
66
+ stacks.map((stack, index) => /* @__PURE__ */ jsx("div", { className: navMenuColumnVariants(), "data-slot": "nav-menu-column", children: stack.map((group) => /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-2.5", "data-slot": "nav-menu-group", children: [
67
+ group.href ? /* @__PURE__ */ jsx(Link, { href: group.href, className: navMenuTitleVariants({ link: true }), onClick: close, children: group.title }) : /* @__PURE__ */ jsx("span", { className: navMenuTitleVariants(), children: group.title }),
68
+ (Boolean(group.links?.length) || group.more) && /* @__PURE__ */ jsxs("ul", { className: "flex flex-col gap-2.5", role: "list", children: [
69
+ group.links?.map((link) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Link, { href: link.href, className: navMenuLinkVariants(), onClick: close, children: link.label }) }, link.id)),
70
+ group.more && /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Link, { href: group.more.href, className: navMenuMoreVariants(), onClick: close, children: group.more.label }) })
71
+ ] })
72
+ ] }, group.id)) }, stack[0]?.id ?? index)),
73
+ aside && /* @__PURE__ */ jsx(
74
+ "div",
75
+ {
76
+ className: navMenuAsideVariants(),
77
+ style: { gridColumnStart: Math.max(stacks.length, maxColumns) + 1 },
78
+ "data-slot": "nav-menu-aside",
79
+ children: aside
80
+ }
81
+ )
82
+ ]
83
+ }
84
+ );
85
+ }
86
+ );
87
+ NavMenuColumns.displayName = "NavMenuColumns";
88
+ const NavMenuPromo = React.forwardRef(
89
+ ({ imageSrc, imageAlt = "", title, subtitle, badge, href, linkComponent, crossZone = false, className, ...props }, ref) => {
90
+ const { Link, close } = useMenuLink(linkComponent, crossZone);
91
+ const lines = Array.isArray(title) ? title : [title];
92
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
93
+ /* @__PURE__ */ jsx("img", { src: imageSrc, alt: imageAlt, className: "absolute inset-0 -z-10 size-full object-cover" }),
94
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "absolute inset-0 -z-10 bg-grey-1000/15" }),
95
+ /* @__PURE__ */ jsxs("span", { className: "flex w-full flex-col gap-1", children: [
96
+ lines.map((line, index) => /* @__PURE__ */ jsx("span", { className: navMenuPromoTitleVariants(), children: line }, index)),
97
+ subtitle && /* @__PURE__ */ jsx("span", { className: "text-caption font-medium opacity-90", children: subtitle })
98
+ ] }),
99
+ /* @__PURE__ */ jsx(Divider, { className: "w-6 border-grey-50 bg-grey-50" }),
100
+ badge && /* @__PURE__ */ jsx(Badge, { variant: "brand", size: "sm", className: "mt-auto rounded-[3px] px-2.5 py-1 text-caption font-bold", children: badge })
101
+ ] });
102
+ return /* @__PURE__ */ jsx("div", { ref, "data-slot": "nav-menu-promo", className, ...props, children: href ? /* @__PURE__ */ jsx(Link, { href, className: navMenuPromoVariants(), onClick: close, children: content }) : /* @__PURE__ */ jsx("div", { className: navMenuPromoVariants(), children: content }) });
103
+ }
104
+ );
105
+ NavMenuPromo.displayName = "NavMenuPromo";
106
+ const NAV_MENU_TILE_PX = 88;
107
+ const NavMenuTiles = React.forwardRef(
108
+ ({ items, rows = 2, linkComponent, crossZone = false, className, style, "aria-label": ariaLabel, ...props }, ref) => {
109
+ const { Link, close } = useMenuLink(linkComponent, crossZone);
110
+ const columnCount = Math.max(1, Math.ceil(items.length / atLeastOne(rows, 2)));
111
+ if (!items.length) return null;
112
+ return /* @__PURE__ */ jsx(
113
+ "nav",
114
+ {
115
+ ref,
116
+ "aria-label": ariaLabel,
117
+ "data-slot": "nav-menu-tiles",
118
+ className: cn(navMenuTilesVariants(), className),
119
+ style: { gridTemplateColumns: `repeat(${columnCount}, ${NAV_MENU_TILE_PX}px)`, ...style },
120
+ ...props,
121
+ children: items.map((item) => /* @__PURE__ */ jsxs(Link, { href: item.href, className: navMenuTileVariants(), onClick: close, children: [
122
+ /* @__PURE__ */ jsx("span", { className: navMenuTileImageVariants(), children: item.imageSrc ? /* @__PURE__ */ jsx("img", { src: item.imageSrc, alt: item.imageAlt ?? "", loading: "lazy", className: "size-full object-cover" }) : /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "font-display text-h5 text-muted-foreground", children: typeof item.label === "string" ? item.label.charAt(0) : null }) }),
123
+ /* @__PURE__ */ jsx(
124
+ "span",
125
+ {
126
+ className: navMenuTileLabelVariants(),
127
+ title: typeof item.label === "string" ? item.label : void 0,
128
+ children: item.label
129
+ }
130
+ )
131
+ ] }, item.id))
132
+ }
133
+ );
134
+ }
135
+ );
136
+ NavMenuTiles.displayName = "NavMenuTiles";
137
+ function toNavMenuItems(menus, { crossZone = false, linkComponent, popoverWidth = "container" } = {}) {
138
+ return menus.map((menu) => ({
139
+ id: menu.id,
140
+ label: menu.label,
141
+ popoverWidth,
142
+ content: /* @__PURE__ */ jsx(
143
+ NavMenuColumns,
144
+ {
145
+ "aria-label": typeof menu.label === "string" ? menu.label : void 0,
146
+ groups: menu.groups,
147
+ aside: menu.aside,
148
+ crossZone,
149
+ linkComponent
150
+ }
151
+ ),
152
+ mobileContent: menu.tiles ? /* @__PURE__ */ jsx(
153
+ NavMenuTiles,
154
+ {
155
+ "aria-label": typeof menu.label === "string" ? menu.label : void 0,
156
+ items: menu.tiles,
157
+ crossZone,
158
+ linkComponent
159
+ }
160
+ ) : void 0
161
+ }));
162
+ }
163
+
164
+ export { NAV_MENU_TILE_PX, NavMenuColumns, NavMenuPromo, NavMenuTiles, packNavMenuGroups, toNavMenuItems };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Phones (the header's tab panel): one stacked column. Large screens:
3
+ * `--nav-menu-cols` equal link columns, plus an auto-width aside when present.
4
+ */
5
+ export declare const navMenuColumnsGridVariants: (props?: ({
6
+ aside?: boolean | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
+ /** Thin dividers between link columns (Figma: 1px #E5E5E5 → `border`). */
9
+ export declare const navMenuColumnVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
10
+ export declare const navMenuTitleVariants: (props?: ({
11
+ link?: boolean | null | undefined;
12
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
13
+ export declare const navMenuLinkVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
14
+ export declare const navMenuMoreVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
15
+ export declare const navMenuAsideVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
16
+ /** Figma promo card: 312×270, ~10px radius, 20px padding, 15% dark overlay. */
17
+ export declare const navMenuPromoVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
18
+ export declare const navMenuPromoTitleVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
19
+ /** Mobile tiles: fixed 88px tiles in rows that scroll sideways (columns set inline, see NAV_MENU_TILE_PX). */
20
+ export declare const navMenuTilesVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
21
+ export declare const navMenuTileVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
22
+ export declare const navMenuTileImageVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
23
+ export declare const navMenuTileLabelVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
24
+ //# sourceMappingURL=NavMenuColumns.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavMenuColumns.styles.d.ts","sourceRoot":"","sources":["../../../src/components/NavMenuColumns/NavMenuColumns.styles.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;8EAQrC,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,oFAEjC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;8EAWhC,CAAC;AAEF,eAAO,MAAM,mBAAmB,oFAE/B,CAAC;AAEF,eAAO,MAAM,mBAAmB,oFAE/B,CAAC;AAEF,eAAO,MAAM,oBAAoB,oFAAyE,CAAC;AAE3G,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,oFAEhC,CAAC;AAEF,eAAO,MAAM,yBAAyB,oFAErC,CAAC;AAEF,8GAA8G;AAC9G,eAAO,MAAM,oBAAoB,oFAEhC,CAAC;AAEF,eAAO,MAAM,mBAAmB,oFAE/B,CAAC;AAEF,eAAO,MAAM,wBAAwB,oFAEpC,CAAC;AAEF,eAAO,MAAM,wBAAwB,oFAEpC,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { cva } from 'class-variance-authority';
2
+
3
+ const navMenuColumnsGridVariants = cva("grid grid-cols-1 bg-grey-50 sm:grid-cols-2", {
4
+ variants: {
5
+ aside: {
6
+ true: "lg:[grid-template-columns:repeat(var(--nav-menu-cols),minmax(0,1fr))_auto]",
7
+ false: "lg:[grid-template-columns:repeat(var(--nav-menu-cols),minmax(0,1fr))]"
8
+ }
9
+ },
10
+ defaultVariants: { aside: false }
11
+ });
12
+ const navMenuColumnVariants = cva(
13
+ "flex min-w-0 flex-col gap-6 px-5 py-4 lg:px-7 lg:py-7 lg:first:pl-8 lg:border-border lg:[&:not(:first-child)]:border-l"
14
+ );
15
+ const navMenuTitleVariants = cva(
16
+ "block font-sans text-body-2 font-bold text-grey-950 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm",
17
+ {
18
+ variants: {
19
+ link: {
20
+ true: "hover:text-primary transition-colors",
21
+ false: ""
22
+ }
23
+ },
24
+ defaultVariants: { link: false }
25
+ }
26
+ );
27
+ const navMenuLinkVariants = cva(
28
+ "block font-sans text-body-3 font-medium text-grey-700 hover:text-primary transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm"
29
+ );
30
+ const navMenuMoreVariants = cva(
31
+ "block font-sans text-body-3 font-semibold text-primary underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm"
32
+ );
33
+ const navMenuAsideVariants = cva("hidden lg:flex flex-col items-end justify-center py-7 pl-5 pr-8");
34
+ const navMenuPromoVariants = cva(
35
+ "relative isolate flex w-[312px] aspect-[312/270] flex-col items-start gap-1.5 overflow-hidden rounded-[10px] p-5 text-grey-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
36
+ );
37
+ const navMenuPromoTitleVariants = cva(
38
+ "font-sans text-[20px] leading-[1.3] [&_em]:font-display [&_em]:not-italic"
39
+ );
40
+ const navMenuTilesVariants = cva(
41
+ "grid gap-x-3 gap-y-4 overflow-x-auto bg-grey-50 px-5 py-4 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"
42
+ );
43
+ const navMenuTileVariants = cva(
44
+ "group flex flex-col items-center gap-2 rounded-xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
45
+ );
46
+ const navMenuTileImageVariants = cva(
47
+ "flex size-[88px] items-center justify-center overflow-hidden rounded-xl bg-muted transition-transform group-hover:scale-[1.02]"
48
+ );
49
+ const navMenuTileLabelVariants = cva(
50
+ "w-full truncate text-center font-sans text-body-2 font-semibold leading-tight text-grey-800"
51
+ );
52
+
53
+ export { navMenuAsideVariants, navMenuColumnVariants, navMenuColumnsGridVariants, navMenuLinkVariants, navMenuMoreVariants, navMenuPromoTitleVariants, navMenuPromoVariants, navMenuTileImageVariants, navMenuTileLabelVariants, navMenuTileVariants, navMenuTilesVariants, navMenuTitleVariants };
@@ -0,0 +1,102 @@
1
+ import type * as React from 'react';
2
+ export interface NavMenuLink {
3
+ id: string;
4
+ label: React.ReactNode;
5
+ href: string;
6
+ }
7
+ /** A heading with the links under it. */
8
+ export interface NavMenuGroup {
9
+ id: string;
10
+ /** Group heading. A link when `href` is set; plain text otherwise. */
11
+ title: React.ReactNode;
12
+ href?: string;
13
+ links?: NavMenuLink[];
14
+ /** Trailing "see more" link, e.g. when `links` was capped. */
15
+ more?: {
16
+ label: React.ReactNode;
17
+ href: string;
18
+ };
19
+ }
20
+ export interface NavMenuColumnsLinkProps {
21
+ href: string;
22
+ className?: string;
23
+ children: React.ReactNode;
24
+ onClick?: React.MouseEventHandler<HTMLAnchorElement>;
25
+ }
26
+ export interface NavMenuColumnsProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
27
+ /** Groups in reading order; they're packed top-to-bottom into balanced columns. */
28
+ groups: NavMenuGroup[];
29
+ /**
30
+ * Link columns on wide screens. Content is packed into at most this many,
31
+ * and the grid keeps this many tracks so column widths stay steady.
32
+ * Defaults to 3 with an `aside`, 4 without.
33
+ */
34
+ columns?: number;
35
+ /** Content after the link columns, e.g. a `NavMenuPromo` card. Hidden on small screens. */
36
+ aside?: React.ReactNode;
37
+ /**
38
+ * Link to render with (e.g. `next/link`). Defaults to `<a>`. Inside a
39
+ * `NavHeader`, the header's own `linkComponent` is used when this is unset.
40
+ */
41
+ linkComponent?: React.ComponentType<NavMenuColumnsLinkProps>;
42
+ /** The links lead to another zone: always render plain `<a>` (full navigation). */
43
+ crossZone?: boolean;
44
+ /** Accessible name of the navigation landmark. */
45
+ 'aria-label'?: string;
46
+ }
47
+ export interface NavMenuPromoProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {
48
+ /** Background image (cover). */
49
+ imageSrc: string;
50
+ imageAlt?: string;
51
+ /**
52
+ * Headline. Wrap words in `<em>` to set them in the display (serif) face,
53
+ * e.g. `<>Cherish <em>Moments</em></>`. An array renders one line each.
54
+ */
55
+ title: React.ReactNode | React.ReactNode[];
56
+ subtitle?: React.ReactNode;
57
+ /** Short offer label, e.g. "UP TO 55% OFF". */
58
+ badge?: React.ReactNode;
59
+ /** Makes the whole card a link. */
60
+ href?: string;
61
+ linkComponent?: React.ComponentType<NavMenuColumnsLinkProps>;
62
+ /** Plain `<a>` even with a link component (full navigation). */
63
+ crossZone?: boolean;
64
+ }
65
+ export interface NavMenuTile {
66
+ id: string;
67
+ label: React.ReactNode;
68
+ href: string;
69
+ /** Square-cropped image (88px); without one the tile shows the label's initial. */
70
+ imageSrc?: string | null;
71
+ imageAlt?: string;
72
+ }
73
+ export interface NavMenuTilesProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
74
+ items: NavMenuTile[];
75
+ /** Tile rows; extra tiles scroll sideways. Defaults to 2. */
76
+ rows?: number;
77
+ /** Link to render with (e.g. `next/link`). Inside a `NavHeader`, defaults to the header's. */
78
+ linkComponent?: React.ComponentType<NavMenuColumnsLinkProps>;
79
+ /** Plain `<a>` even with a link component (full navigation). */
80
+ crossZone?: boolean;
81
+ /** Accessible name of the navigation landmark. */
82
+ 'aria-label'?: string;
83
+ }
84
+ /** Plain data for one header menu: desktop groups, optional mobile tiles and aside. */
85
+ export interface NavMenuData {
86
+ id: string;
87
+ label: React.ReactNode;
88
+ groups: NavMenuGroup[];
89
+ /** Mobile tab panel tiles; without them the mobile panel shows the groups. */
90
+ tiles?: NavMenuTile[];
91
+ /** Desktop aside, e.g. a `NavMenuPromo`. */
92
+ aside?: React.ReactNode;
93
+ }
94
+ export interface ToNavMenuItemsOptions {
95
+ /** The menu links lead to another zone: plain `<a>` (full navigation). */
96
+ crossZone?: boolean;
97
+ /** Link component for same-zone links (e.g. `next/link`). */
98
+ linkComponent?: React.ComponentType<NavMenuColumnsLinkProps>;
99
+ /** Desktop popover width. Defaults to 'container'. */
100
+ popoverWidth?: 'container' | 'full' | 'dropdown' | number;
101
+ }
102
+ //# sourceMappingURL=NavMenuColumns.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavMenuColumns.types.d.ts","sourceRoot":"","sources":["../../../src/components/NavMenuColumns/NavMenuColumns.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './NavMenuColumns';
2
+ export * from './NavMenuColumns.types';
3
+ export * from './NavMenuColumns.styles';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/NavMenuColumns/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -28,6 +28,7 @@ export * from './components/Tooltip';
28
28
  export * from './components/Tabs';
29
29
  export * from './components/SideBarNavigation';
30
30
  export * from './components/NavHeader';
31
+ export * from './components/NavMenuColumns';
31
32
  export * from './components/NavFooter';
32
33
  export * from './components/AuthModal';
33
34
  export * from './components/Button';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG3D,cAAc,aAAa,CAAC;AAG5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG3D,cAAc,aAAa,CAAC;AAG5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -51,6 +51,7 @@ export { Label } from './components/Label/Label.js';
51
51
  export { LinkButton } from './components/LinkButton/LinkButton.js';
52
52
  export { List, ListItem, ListItemAction, ListItemIcon, ListItemText } from './components/List/List.js';
53
53
  export { MediaCard } from './components/MediaCard/MediaCard.js';
54
+ export { NAV_MENU_TILE_PX, NavMenuColumns, NavMenuPromo, NavMenuTiles, packNavMenuGroups, toNavMenuItems } from './components/NavMenuColumns/NavMenuColumns.js';
54
55
  export { NavActions } from './components/NavHeader/subcomponents/NavActions.js';
55
56
  export { NavBrand } from './components/NavHeader/subcomponents/NavBrand.js';
56
57
  export { NavItems } from './components/NavHeader/subcomponents/NavItems.js';
@@ -129,6 +130,7 @@ export { listDividedClass, listItemActionVariants, listItemIconVariants, listIte
129
130
  export { mediaCardMediaVariants, mediaCardOverlayVariants, mediaCardVariants } from './components/MediaCard/MediaCard.styles.js';
130
131
  export { megaMenuCardVariants, navActionVariants, navHeaderContainerVariants, navHeaderItemVariants, navHeaderVariants, offerBannerVariants, searchPopoverCardVariants } from './components/NavHeader/NavHeader.styles.js';
131
132
  export { navBadgeVariants, navItemVariants, sidebarContainerVariants, sidebarToggleVariants, subItemVariants } from './components/SideBarNavigation/SideBarNavigation.styles.js';
133
+ export { navMenuAsideVariants, navMenuColumnVariants, navMenuColumnsGridVariants, navMenuLinkVariants, navMenuMoreVariants, navMenuPromoTitleVariants, navMenuPromoVariants, navMenuTileImageVariants, navMenuTileLabelVariants, navMenuTileVariants, navMenuTilesVariants, navMenuTitleVariants } from './components/NavMenuColumns/NavMenuColumns.styles.js';
132
134
  export { otpContainerVariants, otpSlotVariants } from './components/OtpInput/OtpInput.styles.js';
133
135
  export { pageHeaderTitleVariants, pageHeaderVariants } from './components/PageHeader/PageHeader.styles.js';
134
136
  export { paginationLinkVariants } from './components/Pagination/Pagination.styles.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timmbr/ui",
3
- "version": "1.7.0",
3
+ "version": "1.9.0",
4
4
  "description": "High-performance, Next.js App Router-compatible UI design system components for Timmbr",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -43,10 +43,10 @@
43
43
  "class-variance-authority": "^0.7.1",
44
44
  "input-otp": "^1.5.0",
45
45
  "@timmbr/hooks": "1.0.0",
46
- "@timmbr/motion": "1.2.2",
47
- "@timmbr/icons": "1.4.0",
46
+ "@timmbr/motion": "1.2.3",
47
+ "@timmbr/utils": "1.5.0",
48
48
  "@timmbr/theme": "1.3.0",
49
- "@timmbr/utils": "1.4.0"
49
+ "@timmbr/icons": "1.4.1"
50
50
  },
51
51
  "peerDependencies": {
52
52
  "next": ">=13.0.0 || >=14.0.0 || >=15.0.0 || >=16.0.0",