@phillips/seldon 1.177.0 → 1.178.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.
@@ -1,7 +1,7 @@
1
1
  import { jsxs as r, jsx as f } from "react/jsx-runtime";
2
+ import o from "../../../node_modules/classnames/index.js";
2
3
  import * as a from "react";
3
4
  import { px as n } from "../../../utils/index.js";
4
- import o from "../../../node_modules/classnames/index.js";
5
5
  import { TextVariants as d } from "../../Text/types.js";
6
6
  import u from "../../Text/Text.js";
7
7
  const g = a.forwardRef(
@@ -0,0 +1,18 @@
1
+ import { ComponentProps } from 'react';
2
+ export type NotificationBannerProps = ComponentProps<'div'> & {
3
+ /**
4
+ * The content to display inside the notification banner.
5
+ */
6
+ children: React.ReactNode;
7
+ };
8
+ /**
9
+ * ## Overview
10
+ *
11
+ * The `NotificationBanner` component displays a prominent message at the top of the page or section to inform users about important information, updates, or alerts. It is designed to be highly visible and can contain any custom content passed as children. Use this component to draw attention to critical messages that require user awareness.
12
+ *
13
+ * [Figma Link](https://www.figma.com/design/qEd5aXjQeiboeJ8GJMOJba/Global-Notification-Banner?node-id=1-1899&m=dev)
14
+ *
15
+ * [Storybook Link](https://phillips-seldon.netlify.app/?path=/docs/components-notificationbanner--overview)
16
+ */
17
+ declare const NotificationBanner: import('react').ForwardRefExoticComponent<Omit<NotificationBannerProps, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
18
+ export default NotificationBanner;
@@ -0,0 +1,12 @@
1
+ import { jsx as s } from "react/jsx-runtime";
2
+ import e from "../../node_modules/classnames/index.js";
3
+ import { forwardRef as c } from "react";
4
+ import { getCommonProps as f } from "../../utils/index.js";
5
+ const l = c(({ className: a, ...o }, i) => {
6
+ const { className: m, ...n } = f(o, "NotificationBanner"), { children: r, id: t } = o;
7
+ return /* @__PURE__ */ s("div", { ...n, ...o, className: e(m, a), ref: i, id: t, children: r });
8
+ });
9
+ l.displayName = "NotificationBanner";
10
+ export {
11
+ l as default
12
+ };
@@ -0,0 +1,19 @@
1
+ import { default as React } from 'react';
2
+ import { AuthState } from '../../patterns/UserManagement/types';
3
+ import { HeaderProps } from '../../site-furniture/Header/Header';
4
+ import { NotificationBannerProps } from './NotificationBanner';
5
+ declare const meta: {
6
+ title: string;
7
+ component: React.ForwardRefExoticComponent<Omit<NotificationBannerProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ };
9
+ export default meta;
10
+ export declare const Playground: {
11
+ (props: NotificationBannerProps): import("react/jsx-runtime").JSX.Element;
12
+ args: {
13
+ children: import("react/jsx-runtime").JSX.Element;
14
+ };
15
+ argTypes: {};
16
+ };
17
+ export declare const WithHeader: ({ authState, ...props }: HeaderProps & {
18
+ authState?: AuthState;
19
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export { default as NotificationBanner, type NotificationBannerProps } from './NotificationBanner';
package/dist/index.d.ts CHANGED
@@ -78,10 +78,13 @@ export * from './components/AddToCalendar';
78
78
  export * from './components/Article';
79
79
  export * from './components/Countdown';
80
80
  export * from './components/Countdown/types';
81
+ export * from './components/DescriptiveRadioButton';
82
+ export * from './components/DescriptiveRadioButtonGroup';
81
83
  export * from './components/Divider';
82
84
  export * from './components/FavoritingTileButton';
83
85
  export * from './components/Filter';
84
86
  export * from './components/Icon';
87
+ export * from './components/NotificationBanner';
85
88
  export * from './components/Pictogram';
86
89
  export * from './components/TextArea';
87
90
  export * from './components/Toast';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { PaddingTokens as a, SpacingTokens as f, defaultYear as s, emailValidation as l, encodeURLSearchParams as d, findChildrenExcludingTypes as m, findChildrenOfType as p, focusElementById as u, generatePaddingClassName as i, getCommonProps as x, noOp as n, px as c, useNormalizedInputProps as g } from "./utils/index.js";
2
2
  import { default as C } from "./pages/Page.js";
3
- import { SSRMediaQuery as P, ssrMediaQueryStyle as B } from "./providers/SeldonProvider/utils.js";
3
+ import { SSRMediaQuery as B, ssrMediaQueryStyle as P } from "./providers/SeldonProvider/utils.js";
4
4
  import { usePendingState as A } from "./utils/hooks.js";
5
5
  import { AuctionStatus as V, LotStatus as b, SupportedLanguages as y } from "./types/commonTypes.js";
6
6
  import { default as v } from "./components/Button/Button.js";
@@ -27,7 +27,7 @@ import { default as ie } from "./components/Detail/Detail.js";
27
27
  import { default as ne } from "./components/Drawer/Drawer.js";
28
28
  import { default as ge } from "./components/Dropdown/Dropdown.js";
29
29
  import { default as Ce } from "./components/ErrorBoundary/ErrorBoundary.js";
30
- import { default as Pe } from "./components/Grid/Grid.js";
30
+ import { default as Be } from "./components/Grid/Grid.js";
31
31
  import { default as Ie } from "./components/GridItem/GridItem.js";
32
32
  import { GridItemAlign as Le } from "./components/GridItem/types.js";
33
33
  import { default as be } from "./components/Input/Input.js";
@@ -53,7 +53,7 @@ import { default as pt } from "./components/Tabs/TabsContent.js";
53
53
  import { Tag as it, default as xt } from "./components/Tags/Tags.js";
54
54
  import { TextAlignments as ct, TextVariants as gt } from "./components/Text/types.js";
55
55
  import { default as Ct } from "./components/Text/Text.js";
56
- import { TextSymbolVariants as Pt } from "./components/TextSymbol/types.js";
56
+ import { TextSymbolVariants as Bt } from "./components/TextSymbol/types.js";
57
57
  import { default as It } from "./components/TextSymbol/TextSymbol.js";
58
58
  import { default as Lt } from "./components/Video/Video.js";
59
59
  import { default as bt } from "./patterns/DetailList/DetailList.js";
@@ -79,7 +79,7 @@ import { default as uo } from "./components/PageContentWrapper/PageContentWrappe
79
79
  import { default as xo } from "./components/PhoneNumberPicker/PhoneNumberPicker.js";
80
80
  import { default as co } from "./patterns/FiltersInline/FiltersInline.js";
81
81
  import { FilterButtonIconType as So, FilterButtonType as Co } from "./patterns/FiltersInline/types.js";
82
- import { default as Po } from "./patterns/SaleCard/SaleCard.js";
82
+ import { default as Bo } from "./patterns/SaleCard/SaleCard.js";
83
83
  import { SaleCardActions as Io } from "./patterns/SaleCard/SaleCardActions.js";
84
84
  import { SaleCardVariants as Lo } from "./patterns/SaleCard/types.js";
85
85
  import { default as bo } from "./patterns/ViewingDetails/ViewingDetails.js";
@@ -90,39 +90,40 @@ import { default as Ho } from "./components/AddToCalendar/AddToCalendar.js";
90
90
  import { default as No } from "./components/Article/Article.js";
91
91
  import { default as Go } from "./components/Countdown/Countdown.js";
92
92
  import { CountdownVariants as Uo } from "./components/Countdown/types.js";
93
- import { default as Qo } from "./components/Divider/Divider.js";
94
- import { default as zo } from "./components/FavoritingTileButton/FavoritingTileButton.js";
95
- import { default as Yo } from "./components/Filter/Filter.js";
96
- import { default as qo } from "./components/Filter/FilterInput.js";
97
- import { default as Ko } from "./components/Filter/FilterHeader.js";
98
- import { default as _o } from "./components/Pictogram/Pictogram.js";
99
- import { default as er } from "./components/TextArea/TextArea.js";
100
- import { default as or } from "./components/Toast/Toast.js";
101
- import { ToastProvider as ar } from "./components/Toast/ToastContextProvider.js";
102
- import { useToast as sr } from "./components/Toast/useToast.js";
103
- import { default as dr } from "./patterns/AccountPageHeader/AccountPageHeader.js";
104
- import { default as pr } from "./patterns/BidSnapshot/BidSnapshot.js";
105
- import { default as ir } from "./patterns/BidSnapshot/BidMessage.js";
106
- import { BidMessageVariants as nr, BidStatusEnum as cr } from "./patterns/BidSnapshot/types.js";
107
- import { default as Sr } from "./patterns/FilterMenu/FilterMenu.js";
108
- import { default as Tr } from "./patterns/ObjectTile/ObjectTile.js";
109
- import { default as Br } from "./patterns/CountryPicker/CountryPicker.js";
110
- import { default as Ar } from "./components/DescriptiveRadioButton/DescriptiveRadioButton.js";
111
- import { default as Vr } from "./components/DescriptiveRadioButtonGroup/DescriptiveRadioButtonGroup.js";
93
+ import { default as Qo } from "./components/DescriptiveRadioButton/DescriptiveRadioButton.js";
94
+ import { default as zo } from "./components/DescriptiveRadioButtonGroup/DescriptiveRadioButtonGroup.js";
95
+ import { default as Yo } from "./components/Divider/Divider.js";
96
+ import { default as qo } from "./components/FavoritingTileButton/FavoritingTileButton.js";
97
+ import { default as Ko } from "./components/Filter/Filter.js";
98
+ import { default as _o } from "./components/Filter/FilterInput.js";
99
+ import { default as er } from "./components/Filter/FilterHeader.js";
100
+ import { default as or } from "./components/NotificationBanner/NotificationBanner.js";
101
+ import { default as ar } from "./components/Pictogram/Pictogram.js";
102
+ import { default as sr } from "./components/TextArea/TextArea.js";
103
+ import { default as dr } from "./components/Toast/Toast.js";
104
+ import { ToastProvider as pr } from "./components/Toast/ToastContextProvider.js";
105
+ import { useToast as ir } from "./components/Toast/useToast.js";
106
+ import { default as nr } from "./patterns/AccountPageHeader/AccountPageHeader.js";
107
+ import { default as gr } from "./patterns/BidSnapshot/BidSnapshot.js";
108
+ import { default as Cr } from "./patterns/BidSnapshot/BidMessage.js";
109
+ import { BidMessageVariants as Br, BidStatusEnum as Pr } from "./patterns/BidSnapshot/types.js";
110
+ import { default as Ar } from "./patterns/FilterMenu/FilterMenu.js";
111
+ import { default as Vr } from "./patterns/ObjectTile/ObjectTile.js";
112
+ import { default as yr } from "./patterns/CountryPicker/CountryPicker.js";
112
113
  export {
113
114
  M as Accordion,
114
115
  E as AccordionItem,
115
116
  R as AccordionItemVariant,
116
117
  U as AccordionVariants,
117
- dr as AccountPageHeader,
118
+ nr as AccountPageHeader,
118
119
  Ho as AddToCalendar,
119
120
  No as Article,
120
121
  V as AuctionStatus,
121
122
  Yt as AuthState,
122
- ir as BidMessage,
123
- nr as BidMessageVariants,
124
- pr as BidSnapshot,
125
- cr as BidStatusEnum,
123
+ Cr as BidMessage,
124
+ Br as BidMessageVariants,
125
+ gr as BidSnapshot,
126
+ Pr as BidStatusEnum,
126
127
  Q as Breadcrumb,
127
128
  v as Button,
128
129
  w as ButtonVariants,
@@ -140,28 +141,28 @@ export {
140
141
  pe as ContentPeekHeightUnits,
141
142
  Go as Countdown,
142
143
  Uo as CountdownVariants,
143
- Br as CountryPicker,
144
- Ar as DescriptiveRadioButton,
145
- Vr as DescriptiveRadioButtonGroup,
144
+ yr as CountryPicker,
145
+ Qo as DescriptiveRadioButton,
146
+ zo as DescriptiveRadioButtonGroup,
146
147
  ie as Detail,
147
148
  bt as DetailList,
148
149
  kt as DetailListAlignment,
149
- Qo as Divider,
150
+ Yo as Divider,
150
151
  ne as Drawer,
151
152
  ge as Dropdown,
152
153
  Ce as ErrorBoundary,
153
154
  so as ExitGateCard,
154
155
  ht as FavoritesCollectionTile,
155
- zo as FavoritingTileButton,
156
- Yo as Filter,
156
+ qo as FavoritingTileButton,
157
+ Ko as Filter,
157
158
  So as FilterButtonIconType,
158
159
  Co as FilterButtonType,
159
- Ko as FilterHeader,
160
- qo as FilterInput,
161
- Sr as FilterMenu,
160
+ er as FilterHeader,
161
+ _o as FilterInput,
162
+ Ar as FilterMenu,
162
163
  co as FiltersInline,
163
164
  ho as Footer,
164
- Pe as Grid,
165
+ Be as Grid,
165
166
  Ie as GridItem,
166
167
  Le as GridItemAlign,
167
168
  Do as Header,
@@ -181,18 +182,19 @@ export {
181
182
  Ue as NavigationItem,
182
183
  Qe as NavigationItemTrigger,
183
184
  ze as NavigationList,
184
- Tr as ObjectTile,
185
+ or as NotificationBanner,
186
+ Vr as ObjectTile,
185
187
  a as PaddingTokens,
186
188
  C as Page,
187
189
  uo as PageContentWrapper,
188
190
  Ye as Pagination,
189
191
  xo as PhoneNumberPicker,
190
- _o as Pictogram,
192
+ ar as Pictogram,
191
193
  qe as PinchZoom,
192
194
  ko as ProgressIndicator,
193
195
  Ke as Row,
194
- P as SSRMediaQuery,
195
- Po as SaleCard,
196
+ B as SSRMediaQuery,
197
+ Bo as SaleCard,
196
198
  Io as SaleCardActions,
197
199
  Lo as SaleCardVariants,
198
200
  Nt as SaleHeaderBanner,
@@ -215,12 +217,12 @@ export {
215
217
  xt as TagsList,
216
218
  Ct as Text,
217
219
  ct as TextAlignments,
218
- er as TextArea,
219
- Pt as TextSymbolVariants,
220
+ sr as TextArea,
221
+ Bt as TextSymbolVariants,
220
222
  It as TextSymbols,
221
223
  gt as TextVariants,
222
- or as Toast,
223
- ar as ToastProvider,
224
+ dr as Toast,
225
+ pr as ToastProvider,
224
226
  qt as UserManagement,
225
227
  Lt as Video,
226
228
  bo as ViewingDetails,
@@ -235,8 +237,8 @@ export {
235
237
  x as getCommonProps,
236
238
  n as noOp,
237
239
  c as px,
238
- B as ssrMediaQueryStyle,
240
+ P as ssrMediaQueryStyle,
239
241
  g as useNormalizedInputProps,
240
242
  A as usePendingState,
241
- sr as useToast
243
+ ir as useToast
242
244
  };
@@ -397,6 +397,7 @@ $margin-xxl: var(--spacing-xxl);
397
397
  :root {
398
398
  --header-height: 56px; // ideally we would calculate the size from the current text size plus spacing components so that it scales with the text size and spacing
399
399
  --search-size: 2.625rem; // This should be calculated from the scaling text and scaling spacing tokens instead of hardcoding in case they change
400
+ --banner-height: 0px;
400
401
 
401
402
  @media (min-width: $breakpoint-md) {
402
403
  --header-height: 123px; // ideally we would calculate the size from the current text size plus spacing components so that it scales with the text size and spacing
@@ -418,6 +419,7 @@ $desktop-max-width: var(--desktop-max-width);
418
419
  /// z-index TOKENS:
419
420
  ///////////////////////
420
421
  $modal-z-index: 30;
422
+ $z-index-notification-banner: 1000;
421
423
 
422
424
  ////////////////////////
423
425
  /// Our tokens usually support at least 4 sizes.
@@ -397,6 +397,7 @@ $margin-xxl: var(--spacing-xxl);
397
397
  :root {
398
398
  --header-height: 56px; // ideally we would calculate the size from the current text size plus spacing components so that it scales with the text size and spacing
399
399
  --search-size: 2.625rem; // This should be calculated from the scaling text and scaling spacing tokens instead of hardcoding in case they change
400
+ --banner-height: 0px;
400
401
 
401
402
  @media (min-width: $breakpoint-md) {
402
403
  --header-height: 123px; // ideally we would calculate the size from the current text size plus spacing components so that it scales with the text size and spacing
@@ -418,6 +419,7 @@ $desktop-max-width: var(--desktop-max-width);
418
419
  /// z-index TOKENS:
419
420
  ///////////////////////
420
421
  $modal-z-index: 30;
422
+ $z-index-notification-banner: 1000;
421
423
 
422
424
  ////////////////////////
423
425
  /// Our tokens usually support at least 4 sizes.
@@ -88,3 +88,4 @@
88
88
  @use 'components/Divider/divider';
89
89
  @use 'components/TextArea/textArea';
90
90
  @use 'components/AddToCalendar/addToCalendar';
91
+ @use 'components/NotificationBanner/notificationBanner';
@@ -41,7 +41,10 @@
41
41
  pointer-events: none;
42
42
  position: fixed; // has to bust out of the box containing it on desktop
43
43
  right: 0;
44
- top: calc($header-height + 1px);
44
+ top: calc(
45
+ var(--banner-height) + #{$header-height} + 1px
46
+ ); // will be dynamically set again when notification banner is shown
47
+
45
48
  transition:
46
49
  max-height 0.3s cubic-bezier(0.4, 0, 0.2, 1),
47
50
  opacity 0.2s cubic-bezier(0.65, 0, 0.35, 1);
@@ -56,7 +59,7 @@
56
59
  &--hovered &__submenu {
57
60
  cursor: default;
58
61
  left: 0;
59
- max-height: calc(90vh - #{$header-height});
62
+ max-height: calc(90vh - #{$header-height} + var(--banner-height));
60
63
  opacity: 1;
61
64
  -ms-overflow-style: none; /* Internet Explorer 10+ */
62
65
  overflow-y: scroll;
@@ -0,0 +1,11 @@
1
+ @use '../../allPartials' as *;
2
+
3
+ .#{$px}-notification-banner {
4
+ background: $light-gray;
5
+ left: 0;
6
+ padding: $spacing-sm $spacing-md;
7
+ position: fixed;
8
+ top: 0;
9
+ width: 100%;
10
+ z-index: $z-index-notification-banner;
11
+ }
@@ -7,7 +7,7 @@
7
7
  display: flex;
8
8
  flex-direction: column;
9
9
  position: fixed;
10
- top: 0;
10
+ top: var(--banner-height);
11
11
  width: 100%;
12
12
  z-index: 10;
13
13
 
@@ -24,6 +24,10 @@ export interface HeaderProps extends ComponentProps<'header'> {
24
24
  * Is the header disabled
25
25
  */
26
26
  disabled?: boolean;
27
+ /**
28
+ * Reference to the notification banner
29
+ */
30
+ bannerRef?: React.MutableRefObject<HTMLDivElement | null>;
27
31
  }
28
32
  export type HeaderContextType = {
29
33
  /**
@@ -1,88 +1,108 @@
1
- import { jsxs as o, jsx as t } from "react/jsx-runtime";
2
- import e, { createContext as w, forwardRef as A, useState as g } from "react";
3
- import l from "../../node_modules/classnames/index.js";
4
- import { findChildrenOfType as d, findChildrenExcludingTypes as L, px as a } from "../../utils/index.js";
5
- import f from "../../patterns/UserManagement/UserManagement.js";
6
- import _ from "../../patterns/LanguageSelector/LanguageSelector.js";
7
- import v from "../../components/Navigation/Navigation.js";
8
- import { defaultHeaderContext as k } from "./utils.js";
9
- import { SSRMediaQuery as q } from "../../providers/SeldonProvider/utils.js";
10
- import { useMobileMenu as Q } from "./hooks.js";
11
- import U from "../../components/Icon/Icon.js";
12
- const z = w(k), B = A(
1
+ import { jsxs as l, jsx as r } from "react/jsx-runtime";
2
+ import i from "../../node_modules/classnames/index.js";
3
+ import t, { createContext as k, forwardRef as q, useState as c, useEffect as B } from "react";
4
+ import Q from "../../components/Icon/Icon.js";
5
+ import b from "../../components/Navigation/Navigation.js";
6
+ import x from "../../patterns/LanguageSelector/LanguageSelector.js";
7
+ import C from "../../patterns/UserManagement/UserManagement.js";
8
+ import { SSRMediaQuery as U } from "../../providers/SeldonProvider/utils.js";
9
+ import { findChildrenOfType as m, findChildrenExcludingTypes as D, px as n } from "../../utils/index.js";
10
+ import { useMobileMenu as F } from "./hooks.js";
11
+ import { defaultHeaderContext as G } from "./utils.js";
12
+ const J = k(G), K = q(
13
13
  ({
14
- logo: i = /* @__PURE__ */ t(U, { icon: "PhillipsLogo" }),
15
- logoHref: E = "/",
16
- className: C,
17
- children: n,
18
- toggleOpenText: M = "Open Menu",
19
- toggleCloseText: x = "Close Menu",
20
- logoText: b = "Home Page",
21
- disabled: m,
22
- ...S
23
- }, y) => {
24
- const c = d(n, f), $ = e.isValidElement(c?.[0]) ? e.cloneElement(c[0], { disabled: m }) : "", h = d(n, _), u = e.isValidElement(h?.[0]) ? e.cloneElement(h[0], { disabled: m }) : "", [p, N] = g(!1), T = d(n, v), H = L(n, [v, f, _]), { closeMenu: R, handleMenuToggle: I, isMenuOpen: s, toggleText: O } = Q({ toggleOpenText: M, toggleCloseText: x }), [P, j] = g(null), V = e.useRef(null);
25
- return /* @__PURE__ */ o("header", { ...S, className: l(`${a}-header`, C), ref: y, children: [
26
- /* @__PURE__ */ o("div", { className: `${a}-header__top-row`, children: [
27
- /* @__PURE__ */ t(q.Media, { greaterThanOrEqual: "md", children: u }),
28
- /* @__PURE__ */ o(
29
- "button",
30
- {
31
- "aria-label": O,
32
- "data-testid": "mobile-menu-toggle",
33
- type: "button",
34
- onClick: I,
35
- className: l(`${a}-header__toggle-btn`, {
36
- [`${a}-header__toggle-btn--open`]: s
37
- }),
38
- children: [
39
- /* @__PURE__ */ t("span", {}),
40
- " "
41
- ]
42
- }
43
- ),
44
- /* @__PURE__ */ t("h1", { "data-testid": "header-logo", className: `${a}-header__logo`, children: /* @__PURE__ */ t("a", { href: E, "aria-label": b, children: typeof i == "object" ? i : /* @__PURE__ */ t("img", { alt: "Phillips", "data-testid": "header-logo-img", src: i }) }) }),
45
- $
46
- ] }),
47
- /* @__PURE__ */ t("div", { className: l(`${a}-header__nav`, { [`${a}-header__nav--closed`]: !s }), children: /* @__PURE__ */ o(
48
- z.Provider,
49
- {
50
- value: {
51
- activeSubmenuId: P,
52
- setActiveSubmenuId: j,
53
- closeTimeoutRef: V,
54
- isMenuOpen: s,
55
- isSearchExpanded: p,
56
- setIsSearchExpanded: N,
57
- closeMenu: R
58
- },
59
- children: [
60
- e.Children.map(
61
- T,
62
- (r) => e.isValidElement(r) ? e.cloneElement(r, {
14
+ logo: s = /* @__PURE__ */ r(Q, { icon: "PhillipsLogo" }),
15
+ logoHref: M = "/",
16
+ className: y,
17
+ children: a,
18
+ toggleOpenText: H = "Open Menu",
19
+ toggleCloseText: S = "Close Menu",
20
+ logoText: $ = "Home Page",
21
+ disabled: h,
22
+ bannerRef: o,
23
+ ...N
24
+ }, O) => {
25
+ const u = m(a, C), T = t.isValidElement(u?.[0]) ? t.cloneElement(u[0], { disabled: h }) : "", g = m(a, x), p = t.isValidElement(g?.[0]) ? t.cloneElement(g[0], { disabled: h }) : "", [f, w] = c(!1), I = m(a, b), P = D(a, [b, C, x]), { closeMenu: j, handleMenuToggle: R, isMenuOpen: d, toggleText: V } = F({ toggleOpenText: H, toggleCloseText: S }), [z, A] = c(null), L = t.useRef(null), [_, v] = c(o?.current ? o.current.clientHeight : 0);
26
+ return B(() => {
27
+ const e = o?.current;
28
+ if (!e) return;
29
+ v(e.clientHeight);
30
+ const E = new window.ResizeObserver(() => {
31
+ v(e.clientHeight);
32
+ });
33
+ return E.observe(e), () => {
34
+ E.disconnect();
35
+ };
36
+ }, [o, _]), /* @__PURE__ */ l(
37
+ "header",
38
+ {
39
+ ...N,
40
+ className: i(`${n}-header`, y),
41
+ ref: O,
42
+ style: { "--banner-height": `${_}px` },
43
+ children: [
44
+ /* @__PURE__ */ l("div", { className: `${n}-header__top-row`, children: [
45
+ /* @__PURE__ */ r(U.Media, { greaterThanOrEqual: "md", children: p }),
46
+ /* @__PURE__ */ l(
47
+ "button",
48
+ {
49
+ "aria-label": V,
50
+ "data-testid": "mobile-menu-toggle",
51
+ type: "button",
52
+ onClick: R,
53
+ className: i(`${n}-header__toggle-btn`, {
54
+ [`${n}-header__toggle-btn--open`]: d
55
+ }),
63
56
  children: [
64
- ...e.Children.toArray(r.props.children),
65
- u
57
+ /* @__PURE__ */ r("span", {}),
58
+ " "
66
59
  ]
67
- }) : r
60
+ }
68
61
  ),
69
- H
70
- ]
71
- }
72
- ) }),
73
- /* @__PURE__ */ t(
74
- "div",
75
- {
76
- className: l(`${a}-header__overlay`, {
77
- [`${a}-header__overlay--active`]: p
78
- })
79
- }
80
- )
81
- ] });
62
+ /* @__PURE__ */ r("h1", { "data-testid": "header-logo", className: `${n}-header__logo`, children: /* @__PURE__ */ r("a", { href: M, "aria-label": $, children: typeof s == "object" ? s : /* @__PURE__ */ r("img", { alt: "Phillips", "data-testid": "header-logo-img", src: s }) }) }),
63
+ T
64
+ ] }),
65
+ /* @__PURE__ */ r("div", { className: i(`${n}-header__nav`, { [`${n}-header__nav--closed`]: !d }), children: /* @__PURE__ */ l(
66
+ J.Provider,
67
+ {
68
+ value: {
69
+ activeSubmenuId: z,
70
+ setActiveSubmenuId: A,
71
+ closeTimeoutRef: L,
72
+ isMenuOpen: d,
73
+ isSearchExpanded: f,
74
+ setIsSearchExpanded: w,
75
+ closeMenu: j
76
+ },
77
+ children: [
78
+ t.Children.map(
79
+ I,
80
+ (e) => t.isValidElement(e) ? t.cloneElement(e, {
81
+ children: [
82
+ ...t.Children.toArray(e.props.children),
83
+ p
84
+ ]
85
+ }) : e
86
+ ),
87
+ P
88
+ ]
89
+ }
90
+ ) }),
91
+ /* @__PURE__ */ r(
92
+ "div",
93
+ {
94
+ className: i(`${n}-header__overlay`, {
95
+ [`${n}-header__overlay--active`]: f
96
+ })
97
+ }
98
+ )
99
+ ]
100
+ }
101
+ );
82
102
  }
83
103
  );
84
- B.displayName = "Header";
104
+ K.displayName = "Header";
85
105
  export {
86
- z as HeaderContext,
87
- B as default
106
+ J as HeaderContext,
107
+ K as default
88
108
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phillips/seldon",
3
- "version": "1.177.0",
3
+ "version": "1.178.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/PhillipsAuctionHouse/seldon"