boreal-ui 0.0.882 → 0.0.883

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.
@@ -26,6 +26,25 @@ const FooterBase = ({
26
26
  socialLinks = [],
27
27
  showThemeSelect = false,
28
28
  bottomEnd,
29
+ contentClassName,
30
+ leftClassName,
31
+ linksClassName,
32
+ linkClassName,
33
+ logoClassName,
34
+ socialClassName,
35
+ themeToggleClassName,
36
+ brandClassName,
37
+ brandLinkClassName,
38
+ brandTitleClassName,
39
+ brandDescriptionClassName,
40
+ sectionsClassName,
41
+ sectionTitleClassName,
42
+ actionsClassName,
43
+ actionGroupClassName,
44
+ bottomClassName,
45
+ bottomCopyrightClassName,
46
+ bottomEndClassName,
47
+ copyrightClassName,
29
48
  IconButton: IconButton2,
30
49
  ImageComponent = "img",
31
50
  ThemeSelect,
@@ -75,7 +94,7 @@ const FooterBase = ({
75
94
  return /* @__PURE__ */ jsx(
76
95
  "img",
77
96
  {
78
- className: classMap.logo,
97
+ className: combineClassNames(classMap.logo, logoClassName),
79
98
  "data-testid": `${testId}-logo`,
80
99
  loading: "lazy",
81
100
  src: logoSrc,
@@ -89,7 +108,7 @@ const FooterBase = ({
89
108
  return /* @__PURE__ */ jsx(
90
109
  ImageComponent,
91
110
  {
92
- className: classMap.logo,
111
+ className: combineClassNames(classMap.logo, logoClassName),
93
112
  "data-testid": `${testId}-logo`,
94
113
  src: logoSrc,
95
114
  alt: logoDecorative ? "" : logoAriaLabel,
@@ -105,7 +124,7 @@ const FooterBase = ({
105
124
  return /* @__PURE__ */ jsx(
106
125
  "span",
107
126
  {
108
- className: classMap.logo,
127
+ className: combineClassNames(classMap.logo, logoClassName),
109
128
  role: logoDecorative ? void 0 : "img",
110
129
  "aria-label": logoDecorative ? void 0 : logoAriaLabel,
111
130
  "aria-hidden": logoDecorative ? true : void 0,
@@ -114,14 +133,18 @@ const FooterBase = ({
114
133
  }
115
134
  );
116
135
  };
117
- const renderFooterLink = (link, index) => {
136
+ const renderFooterLink = (link, index, customLinkClassName) => {
118
137
  const slug = slugify(link.label || link.href || `link-${index}`);
119
138
  const key = `${link.href ?? slug}-${index}`;
139
+ const resolvedLinkClassName = combineClassNames(
140
+ classMap.link,
141
+ customLinkClassName
142
+ );
120
143
  if (link.disabled) {
121
144
  return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
122
145
  "span",
123
146
  {
124
- className: classMap.link,
147
+ className: resolvedLinkClassName,
125
148
  "data-testid": `${testId}-link-${slug}`,
126
149
  "aria-disabled": "true",
127
150
  title: link.title,
@@ -133,7 +156,7 @@ const FooterBase = ({
133
156
  LinkWrapper,
134
157
  {
135
158
  href: link.href,
136
- className: classMap.link,
159
+ className: resolvedLinkClassName,
137
160
  "data-testid": `${testId}-link-${slug}`,
138
161
  "aria-label": link["aria-label"],
139
162
  "aria-current": link["aria-current"],
@@ -151,7 +174,7 @@ const FooterBase = ({
151
174
  return /* @__PURE__ */ jsx(
152
175
  "nav",
153
176
  {
154
- className: classMap.social,
177
+ className: combineClassNames(classMap.social, socialClassName),
155
178
  "aria-label": socialNavAriaLabel,
156
179
  "data-testid": `${testId}-social`,
157
180
  children: socialLinks.map((social, index) => /* @__PURE__ */ jsx(
@@ -181,7 +204,10 @@ const FooterBase = ({
181
204
  return /* @__PURE__ */ jsx(
182
205
  "div",
183
206
  {
184
- className: classMap.themeToggle,
207
+ className: combineClassNames(
208
+ classMap.themeToggle,
209
+ themeToggleClassName
210
+ ),
185
211
  "data-testid": `${testId}-theme-select`,
186
212
  "aria-label": themeSelectAriaLabel,
187
213
  children: /* @__PURE__ */ jsx(
@@ -202,61 +228,117 @@ const FooterBase = ({
202
228
  brandTitle && /* @__PURE__ */ jsx(
203
229
  "span",
204
230
  {
205
- className: classMap.brandTitle,
231
+ className: combineClassNames(
232
+ classMap.brandTitle,
233
+ brandTitleClassName
234
+ ),
206
235
  "data-testid": `${testId}-brand-title`,
207
236
  children: brandTitle
208
237
  }
209
238
  )
210
239
  ] });
211
- return /* @__PURE__ */ jsxs("div", { className: classMap.brand, "data-testid": `${testId}-brand`, children: [
212
- brandHref ? /* @__PURE__ */ jsx(
213
- LinkWrapper,
214
- {
215
- href: brandHref,
216
- className: classMap.brandLink,
217
- "aria-label": typeof brandTitle === "string" ? brandTitle : logoAriaLabel,
218
- children: brandContent
219
- }
220
- ) : /* @__PURE__ */ jsx("div", { className: classMap.brandLink, children: brandContent }),
221
- brandDescription && /* @__PURE__ */ jsx(
222
- "p",
223
- {
224
- className: classMap.brandDescription,
225
- "data-testid": `${testId}-brand-description`,
226
- children: brandDescription
227
- }
228
- ),
229
- copyright && !shouldRenderCopyrightInBottom && /* @__PURE__ */ jsx(
230
- "div",
231
- {
232
- className: classMap.copyright,
233
- "data-testid": `${testId}-copyright`,
234
- children: /* @__PURE__ */ jsx("p", { id: labelId, children: copyright })
235
- }
236
- )
237
- ] });
240
+ return /* @__PURE__ */ jsxs(
241
+ "div",
242
+ {
243
+ className: combineClassNames(classMap.brand, brandClassName),
244
+ "data-testid": `${testId}-brand`,
245
+ children: [
246
+ brandHref ? /* @__PURE__ */ jsx(
247
+ LinkWrapper,
248
+ {
249
+ href: brandHref,
250
+ className: combineClassNames(
251
+ classMap.brandLink,
252
+ brandLinkClassName
253
+ ),
254
+ "aria-label": typeof brandTitle === "string" ? brandTitle : logoAriaLabel,
255
+ children: brandContent
256
+ }
257
+ ) : /* @__PURE__ */ jsx(
258
+ "div",
259
+ {
260
+ className: combineClassNames(
261
+ classMap.brandLink,
262
+ brandLinkClassName
263
+ ),
264
+ children: brandContent
265
+ }
266
+ ),
267
+ brandDescription && /* @__PURE__ */ jsx(
268
+ "p",
269
+ {
270
+ className: combineClassNames(
271
+ classMap.brandDescription,
272
+ brandDescriptionClassName
273
+ ),
274
+ "data-testid": `${testId}-brand-description`,
275
+ children: brandDescription
276
+ }
277
+ ),
278
+ copyright && !shouldRenderCopyrightInBottom && /* @__PURE__ */ jsx(
279
+ "div",
280
+ {
281
+ className: combineClassNames(
282
+ classMap.copyright,
283
+ copyrightClassName
284
+ ),
285
+ "data-testid": `${testId}-copyright`,
286
+ children: /* @__PURE__ */ jsx("p", { id: labelId, children: copyright })
287
+ }
288
+ )
289
+ ]
290
+ }
291
+ );
238
292
  };
239
293
  const renderSections = () => {
240
294
  if (normalizedSections.length === 0) {
241
295
  return null;
242
296
  }
243
- return /* @__PURE__ */ jsx("div", { className: classMap.sections, "data-testid": `${testId}-sections`, children: normalizedSections.map((section, sectionIndex) => {
244
- const titleText = typeof section.title === "string" ? section.title : `section-${sectionIndex + 1}`;
245
- const sectionSlug = section.testId ?? slugify(titleText);
246
- return /* @__PURE__ */ jsxs(
247
- "nav",
248
- {
249
- className: classMap.section,
250
- "aria-label": section["aria-label"] ?? `${titleText} links`,
251
- "data-testid": `${testId}-section-${sectionSlug}`,
252
- children: [
253
- /* @__PURE__ */ jsx("h2", { className: classMap.sectionTitle, children: section.title }),
254
- /* @__PURE__ */ jsx("ul", { className: classMap.sectionList, children: section.links.map(renderFooterLink) })
255
- ]
256
- },
257
- sectionSlug
258
- );
259
- }) });
297
+ return /* @__PURE__ */ jsx(
298
+ "div",
299
+ {
300
+ className: combineClassNames(classMap.sections, sectionsClassName),
301
+ "data-testid": `${testId}-sections`,
302
+ children: normalizedSections.map((section, sectionIndex) => {
303
+ const titleText = typeof section.title === "string" ? section.title : `section-${sectionIndex + 1}`;
304
+ const sectionSlug = section.testId ?? slugify(titleText);
305
+ return /* @__PURE__ */ jsxs(
306
+ "nav",
307
+ {
308
+ className: combineClassNames(classMap.section, section.className),
309
+ "aria-label": section["aria-label"] ?? `${titleText} links`,
310
+ "data-testid": `${testId}-section-${sectionSlug}`,
311
+ children: [
312
+ /* @__PURE__ */ jsx(
313
+ "h2",
314
+ {
315
+ className: combineClassNames(
316
+ classMap.sectionTitle,
317
+ sectionTitleClassName,
318
+ section.titleClassName
319
+ ),
320
+ children: section.title
321
+ }
322
+ ),
323
+ /* @__PURE__ */ jsx(
324
+ "ul",
325
+ {
326
+ className: combineClassNames(
327
+ classMap.sectionList,
328
+ section.listClassName
329
+ ),
330
+ children: section.links.map(
331
+ (link, index) => renderFooterLink(link, index, section.linkClassName)
332
+ )
333
+ }
334
+ )
335
+ ]
336
+ },
337
+ sectionSlug
338
+ );
339
+ })
340
+ }
341
+ );
260
342
  };
261
343
  if (layout === "columns") {
262
344
  return /* @__PURE__ */ jsxs(
@@ -270,36 +352,74 @@ const FooterBase = ({
270
352
  "aria-describedby": ariaDescribedBy,
271
353
  ...rest,
272
354
  children: [
273
- /* @__PURE__ */ jsxs("div", { className: classMap.content, children: [
355
+ /* @__PURE__ */ jsxs("div", { className: combineClassNames(classMap.content, contentClassName), children: [
274
356
  renderBrand(),
275
357
  renderSections(),
276
- (socialLinks.length > 0 || showThemeSelect) && /* @__PURE__ */ jsxs("div", { className: classMap.actions, "data-testid": `${testId}-actions`, children: [
277
- socialLinks.length > 0 && /* @__PURE__ */ jsxs("div", { className: classMap.actionGroup, children: [
278
- /* @__PURE__ */ jsx("h2", { className: classMap.sectionTitle, children: "Connect" }),
279
- renderSocialLinks()
280
- ] }),
281
- renderThemeSelect()
282
- ] })
283
- ] }),
284
- (copyright || bottomEnd) && /* @__PURE__ */ jsxs("div", { className: classMap.bottom, "data-testid": `${testId}-bottom`, children: [
285
- copyright && shouldRenderCopyrightInBottom && /* @__PURE__ */ jsx(
286
- "p",
287
- {
288
- id: labelId,
289
- className: classMap.bottomCopyright,
290
- "data-testid": `${testId}-copyright`,
291
- children: copyright
292
- }
293
- ),
294
- bottomEnd && /* @__PURE__ */ jsx(
358
+ (socialLinks.length > 0 || showThemeSelect) && /* @__PURE__ */ jsxs(
295
359
  "div",
296
360
  {
297
- className: classMap.bottomEnd,
298
- "data-testid": `${testId}-bottom-end`,
299
- children: bottomEnd
361
+ className: combineClassNames(classMap.actions, actionsClassName),
362
+ "data-testid": `${testId}-actions`,
363
+ children: [
364
+ socialLinks.length > 0 && /* @__PURE__ */ jsxs(
365
+ "div",
366
+ {
367
+ className: combineClassNames(
368
+ classMap.actionGroup,
369
+ actionGroupClassName
370
+ ),
371
+ children: [
372
+ /* @__PURE__ */ jsx(
373
+ "h2",
374
+ {
375
+ className: combineClassNames(
376
+ classMap.sectionTitle,
377
+ sectionTitleClassName
378
+ ),
379
+ children: "Connect"
380
+ }
381
+ ),
382
+ renderSocialLinks()
383
+ ]
384
+ }
385
+ ),
386
+ renderThemeSelect()
387
+ ]
300
388
  }
301
389
  )
302
- ] })
390
+ ] }),
391
+ (copyright || bottomEnd) && /* @__PURE__ */ jsxs(
392
+ "div",
393
+ {
394
+ className: combineClassNames(classMap.bottom, bottomClassName),
395
+ "data-testid": `${testId}-bottom`,
396
+ children: [
397
+ copyright && shouldRenderCopyrightInBottom && /* @__PURE__ */ jsx(
398
+ "p",
399
+ {
400
+ id: labelId,
401
+ className: combineClassNames(
402
+ classMap.bottomCopyright,
403
+ bottomCopyrightClassName
404
+ ),
405
+ "data-testid": `${testId}-copyright`,
406
+ children: copyright
407
+ }
408
+ ),
409
+ bottomEnd && /* @__PURE__ */ jsx(
410
+ "div",
411
+ {
412
+ className: combineClassNames(
413
+ classMap.bottomEnd,
414
+ bottomEndClassName
415
+ ),
416
+ "data-testid": `${testId}-bottom-end`,
417
+ children: bottomEnd
418
+ }
419
+ )
420
+ ]
421
+ }
422
+ )
303
423
  ]
304
424
  }
305
425
  );
@@ -314,25 +434,34 @@ const FooterBase = ({
314
434
  "aria-labelledby": ariaLabelledBy ?? labelId,
315
435
  "aria-describedby": ariaDescribedBy,
316
436
  ...rest,
317
- children: /* @__PURE__ */ jsxs("div", { className: classMap.content, children: [
318
- /* @__PURE__ */ jsxs("div", { className: classMap.left, "data-testid": `${testId}-left`, children: [
319
- renderLogo(),
320
- copyright && /* @__PURE__ */ jsx(
321
- "div",
322
- {
323
- className: classMap.copyright ?? classMap.left,
324
- "data-testid": `${testId}-copyright`,
325
- children: /* @__PURE__ */ jsx("p", { id: labelId, children: copyright })
326
- }
327
- )
328
- ] }),
437
+ children: /* @__PURE__ */ jsxs("div", { className: combineClassNames(classMap.content, contentClassName), children: [
438
+ /* @__PURE__ */ jsxs(
439
+ "div",
440
+ {
441
+ className: combineClassNames(classMap.left, leftClassName),
442
+ "data-testid": `${testId}-left`,
443
+ children: [
444
+ renderLogo(),
445
+ copyright && /* @__PURE__ */ jsx(
446
+ "div",
447
+ {
448
+ className: combineClassNames(classMap.copyright, copyrightClassName) ?? combineClassNames(classMap.left, leftClassName),
449
+ "data-testid": `${testId}-copyright`,
450
+ children: /* @__PURE__ */ jsx("p", { id: labelId, children: copyright })
451
+ }
452
+ )
453
+ ]
454
+ }
455
+ ),
329
456
  links.length > 0 && /* @__PURE__ */ jsx(
330
457
  "nav",
331
458
  {
332
- className: classMap.links,
459
+ className: combineClassNames(classMap.links, linksClassName),
333
460
  "aria-label": navAriaLabel,
334
461
  "data-testid": `${testId}-nav`,
335
- children: /* @__PURE__ */ jsx("ul", { children: links.map(renderFooterLink) })
462
+ children: /* @__PURE__ */ jsx("ul", { children: links.map(
463
+ (link, index) => renderFooterLink(link, index, linkClassName)
464
+ ) })
336
465
  }
337
466
  ),
338
467
  renderThemeSelect(),
@@ -439,4 +568,4 @@ export {
439
568
  Footer as F,
440
569
  UserThemeSettings as U
441
570
  };
442
- //# sourceMappingURL=Footer-Dwh-2P5I.js.map
571
+ //# sourceMappingURL=Footer-GVH6PVkB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Footer-GVH6PVkB.js","sources":["../../src/components/Footer/FooterBase.tsx","../../src/components/Select/ThemeSelect/core/ThemeSelect.tsx","../../src/components/Footer/core/Footer.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\r\nimport {\r\n BaseFooterProps,\r\n FooterLink,\r\n FooterSection,\r\n LogoSource,\r\n} from \"./Footer.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { getDefaultTheme } from \"../../config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\n\r\nconst slugify = (value: string) =>\r\n value.toLowerCase().trim().replace(/\\s+/g, \"-\");\r\n\r\nconst FooterBase: React.FC<BaseFooterProps> = ({\r\n theme = getDefaultTheme(),\r\n attachment = \"static\",\r\n shadow = \"none\",\r\n rounding = \"none\",\r\n layout = \"inline\",\r\n className = \"\",\r\n \"data-testid\": testId = \"footer\",\r\n\r\n copyright,\r\n copyrightInBottom,\r\n links = [],\r\n sections,\r\n logo,\r\n brandTitle,\r\n brandDescription,\r\n brandHref,\r\n\r\n socialLinks = [],\r\n showThemeSelect = false,\r\n bottomEnd,\r\n\r\n contentClassName,\r\n leftClassName,\r\n linksClassName,\r\n linkClassName,\r\n logoClassName,\r\n socialClassName,\r\n themeToggleClassName,\r\n\r\n brandClassName,\r\n brandLinkClassName,\r\n brandTitleClassName,\r\n brandDescriptionClassName,\r\n\r\n sectionsClassName,\r\n sectionTitleClassName,\r\n actionsClassName,\r\n actionGroupClassName,\r\n\r\n bottomClassName,\r\n bottomCopyrightClassName,\r\n bottomEndClassName,\r\n copyrightClassName,\r\n\r\n IconButton,\r\n ImageComponent = \"img\",\r\n ThemeSelect,\r\n classMap,\r\n LinkWrapper = ({ href, children, ...rest }) => (\r\n <a href={href} {...rest}>\r\n {children}\r\n </a>\r\n ),\r\n\r\n \"aria-label\": ariaLabel,\r\n \"aria-labelledby\": ariaLabelledBy,\r\n \"aria-describedby\": ariaDescribedBy,\r\n navAriaLabel = \"Footer site links\",\r\n socialNavAriaLabel = \"Social media\",\r\n themeSelectAriaLabel = \"Theme selector\",\r\n logoAriaLabel = \"Logo\",\r\n logoDecorative = false,\r\n labelId,\r\n ...rest\r\n}) => {\r\n const footerClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.footer,\r\n classMap[theme],\r\n layout !== \"inline\" && classMap[`layout${capitalize(layout)}`],\r\n shadow !== \"none\" && classMap[`shadow${capitalize(shadow)}`],\r\n rounding !== \"none\" && classMap[`round${capitalize(rounding)}`],\r\n classMap[`attachment${capitalize(attachment)}`],\r\n className,\r\n ),\r\n [classMap, theme, layout, shadow, rounding, attachment, className],\r\n );\r\n\r\n const isLogoImage = (\r\n value: unknown,\r\n ): value is { src: string; width?: number; height?: number } =>\r\n typeof value === \"object\" &&\r\n value !== null &&\r\n \"src\" in (value as Record<string, unknown>);\r\n\r\n const isImgLike = typeof logo === \"string\" || isLogoImage(logo);\r\n\r\n const imgLogo = isImgLike\r\n ? typeof logo === \"string\"\r\n ? { src: logo }\r\n : logo\r\n : undefined;\r\n\r\n const logoSrc = imgLogo?.src;\r\n const logoW = imgLogo?.width ?? 20;\r\n const logoH = imgLogo?.height ?? 20;\r\n\r\n const normalizedSections: FooterSection[] =\r\n sections && sections.length > 0\r\n ? sections\r\n : links.length > 0\r\n ? [\r\n {\r\n title: \"Links\",\r\n links,\r\n \"aria-label\": navAriaLabel,\r\n testId: \"links\",\r\n },\r\n ]\r\n : [];\r\n\r\n const shouldRenderCopyrightInBottom =\r\n copyrightInBottom ?? layout === \"columns\";\r\n\r\n const renderLogo = () => {\r\n if (isImgLike && logoSrc) {\r\n if (typeof ImageComponent === \"string\") {\r\n return (\r\n <img\r\n className={combineClassNames(classMap.logo, logoClassName)}\r\n data-testid={`${testId}-logo`}\r\n loading=\"lazy\"\r\n src={logoSrc}\r\n alt={logoDecorative ? \"\" : logoAriaLabel}\r\n aria-hidden={logoDecorative ? true : undefined}\r\n height={logoH}\r\n width={logoW}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <ImageComponent\r\n className={combineClassNames(classMap.logo, logoClassName)}\r\n data-testid={`${testId}-logo`}\r\n src={logoSrc}\r\n alt={logoDecorative ? \"\" : logoAriaLabel}\r\n aria-hidden={logoDecorative ? true : undefined}\r\n height={logoH}\r\n width={logoW}\r\n />\r\n );\r\n }\r\n\r\n if (!logo) {\r\n return null;\r\n }\r\n\r\n return (\r\n <span\r\n className={combineClassNames(classMap.logo, logoClassName)}\r\n role={logoDecorative ? undefined : \"img\"}\r\n aria-label={logoDecorative ? undefined : logoAriaLabel}\r\n aria-hidden={logoDecorative ? true : undefined}\r\n data-testid={`${testId}-logo`}\r\n >\r\n {\r\n logo as Exclude<\r\n LogoSource,\r\n string | { src: string; width?: number; height?: number }\r\n >\r\n }\r\n </span>\r\n );\r\n };\r\n\r\n const renderFooterLink = (\r\n link: FooterLink,\r\n index: number,\r\n customLinkClassName?: string,\r\n ) => {\r\n const slug = slugify(link.label || link.href || `link-${index}`);\r\n const key = `${link.href ?? slug}-${index}`;\r\n const resolvedLinkClassName = combineClassNames(\r\n classMap.link,\r\n customLinkClassName,\r\n );\r\n\r\n if (link.disabled) {\r\n return (\r\n <li key={key}>\r\n <span\r\n className={resolvedLinkClassName}\r\n data-testid={`${testId}-link-${slug}`}\r\n aria-disabled=\"true\"\r\n title={link.title}\r\n >\r\n {link.label}\r\n </span>\r\n </li>\r\n );\r\n }\r\n\r\n return (\r\n <li key={key}>\r\n <LinkWrapper\r\n href={link.href}\r\n className={resolvedLinkClassName}\r\n data-testid={`${testId}-link-${slug}`}\r\n aria-label={link[\"aria-label\"]}\r\n aria-current={link[\"aria-current\"]}\r\n title={link.title}\r\n rel={link.rel}\r\n target={link.target}\r\n >\r\n {link.label}\r\n </LinkWrapper>\r\n </li>\r\n );\r\n };\r\n\r\n const renderSocialLinks = () => {\r\n if (socialLinks.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <nav\r\n className={combineClassNames(classMap.social, socialClassName)}\r\n aria-label={socialNavAriaLabel}\r\n data-testid={`${testId}-social`}\r\n >\r\n {socialLinks.map((social, index) => (\r\n <IconButton\r\n key={`${social.href ?? social.title}-${index}`}\r\n icon={social.icon}\r\n href={social.href}\r\n isExternal={social.isExternal ?? true}\r\n shadow=\"none\"\r\n aria-label={social[\"aria-label\"] ?? social.title}\r\n title={social.tooltip ?? social.title}\r\n theme=\"clear\"\r\n disabled={social.disabled}\r\n rel={social.rel}\r\n target={social.target}\r\n data-testid={`${testId}-social-${slugify(social.title)}`}\r\n />\r\n ))}\r\n </nav>\r\n );\r\n };\r\n\r\n const renderThemeSelect = () => {\r\n if (!showThemeSelect) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n className={combineClassNames(\r\n classMap.themeToggle,\r\n themeToggleClassName,\r\n )}\r\n data-testid={`${testId}-theme-select`}\r\n aria-label={themeSelectAriaLabel}\r\n >\r\n <ThemeSelect\r\n theme=\"clear\"\r\n label={brandDescription}\r\n shadow=\"none\"\r\n aria-label={themeSelectAriaLabel}\r\n />\r\n </div>\r\n );\r\n };\r\n\r\n const renderBrand = () => {\r\n const brandContent = (\r\n <>\r\n {renderLogo()}\r\n\r\n {brandTitle && (\r\n <span\r\n className={combineClassNames(\r\n classMap.brandTitle,\r\n brandTitleClassName,\r\n )}\r\n data-testid={`${testId}-brand-title`}\r\n >\r\n {brandTitle}\r\n </span>\r\n )}\r\n </>\r\n );\r\n\r\n return (\r\n <div\r\n className={combineClassNames(classMap.brand, brandClassName)}\r\n data-testid={`${testId}-brand`}\r\n >\r\n {brandHref ? (\r\n <LinkWrapper\r\n href={brandHref}\r\n className={combineClassNames(\r\n classMap.brandLink,\r\n brandLinkClassName,\r\n )}\r\n aria-label={\r\n typeof brandTitle === \"string\" ? brandTitle : logoAriaLabel\r\n }\r\n >\r\n {brandContent}\r\n </LinkWrapper>\r\n ) : (\r\n <div\r\n className={combineClassNames(\r\n classMap.brandLink,\r\n brandLinkClassName,\r\n )}\r\n >\r\n {brandContent}\r\n </div>\r\n )}\r\n\r\n {brandDescription && (\r\n <p\r\n className={combineClassNames(\r\n classMap.brandDescription,\r\n brandDescriptionClassName,\r\n )}\r\n data-testid={`${testId}-brand-description`}\r\n >\r\n {brandDescription}\r\n </p>\r\n )}\r\n\r\n {copyright && !shouldRenderCopyrightInBottom && (\r\n <div\r\n className={combineClassNames(\r\n classMap.copyright,\r\n copyrightClassName,\r\n )}\r\n data-testid={`${testId}-copyright`}\r\n >\r\n <p id={labelId}>{copyright}</p>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n const renderSections = () => {\r\n if (normalizedSections.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n className={combineClassNames(classMap.sections, sectionsClassName)}\r\n data-testid={`${testId}-sections`}\r\n >\r\n {normalizedSections.map((section, sectionIndex) => {\r\n const titleText =\r\n typeof section.title === \"string\"\r\n ? section.title\r\n : `section-${sectionIndex + 1}`;\r\n\r\n const sectionSlug = section.testId ?? slugify(titleText);\r\n\r\n return (\r\n <nav\r\n key={sectionSlug}\r\n className={combineClassNames(classMap.section, section.className)}\r\n aria-label={section[\"aria-label\"] ?? `${titleText} links`}\r\n data-testid={`${testId}-section-${sectionSlug}`}\r\n >\r\n <h2\r\n className={combineClassNames(\r\n classMap.sectionTitle,\r\n sectionTitleClassName,\r\n section.titleClassName,\r\n )}\r\n >\r\n {section.title}\r\n </h2>\r\n\r\n <ul\r\n className={combineClassNames(\r\n classMap.sectionList,\r\n section.listClassName,\r\n )}\r\n >\r\n {section.links.map((link, index) =>\r\n renderFooterLink(link, index, section.linkClassName),\r\n )}\r\n </ul>\r\n </nav>\r\n );\r\n })}\r\n </div>\r\n );\r\n };\r\n\r\n if (layout === \"columns\") {\r\n return (\r\n <footer\r\n className={footerClass}\r\n data-testid={testId}\r\n role=\"contentinfo\"\r\n aria-label={ariaLabel}\r\n aria-labelledby={ariaLabelledBy ?? labelId}\r\n aria-describedby={ariaDescribedBy}\r\n {...rest}\r\n >\r\n <div className={combineClassNames(classMap.content, contentClassName)}>\r\n {renderBrand()}\r\n\r\n {renderSections()}\r\n\r\n {(socialLinks.length > 0 || showThemeSelect) && (\r\n <div\r\n className={combineClassNames(classMap.actions, actionsClassName)}\r\n data-testid={`${testId}-actions`}\r\n >\r\n {socialLinks.length > 0 && (\r\n <div\r\n className={combineClassNames(\r\n classMap.actionGroup,\r\n actionGroupClassName,\r\n )}\r\n >\r\n <h2\r\n className={combineClassNames(\r\n classMap.sectionTitle,\r\n sectionTitleClassName,\r\n )}\r\n >\r\n Connect\r\n </h2>\r\n {renderSocialLinks()}\r\n </div>\r\n )}\r\n\r\n {renderThemeSelect()}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {(copyright || bottomEnd) && (\r\n <div\r\n className={combineClassNames(classMap.bottom, bottomClassName)}\r\n data-testid={`${testId}-bottom`}\r\n >\r\n {copyright && shouldRenderCopyrightInBottom && (\r\n <p\r\n id={labelId}\r\n className={combineClassNames(\r\n classMap.bottomCopyright,\r\n bottomCopyrightClassName,\r\n )}\r\n data-testid={`${testId}-copyright`}\r\n >\r\n {copyright}\r\n </p>\r\n )}\r\n\r\n {bottomEnd && (\r\n <div\r\n className={combineClassNames(\r\n classMap.bottomEnd,\r\n bottomEndClassName,\r\n )}\r\n data-testid={`${testId}-bottom-end`}\r\n >\r\n {bottomEnd}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </footer>\r\n );\r\n }\r\n\r\n return (\r\n <footer\r\n className={footerClass}\r\n data-testid={testId}\r\n role=\"contentinfo\"\r\n aria-label={ariaLabel}\r\n aria-labelledby={ariaLabelledBy ?? labelId}\r\n aria-describedby={ariaDescribedBy}\r\n {...rest}\r\n >\r\n <div className={combineClassNames(classMap.content, contentClassName)}>\r\n <div\r\n className={combineClassNames(classMap.left, leftClassName)}\r\n data-testid={`${testId}-left`}\r\n >\r\n {renderLogo()}\r\n\r\n {copyright && (\r\n <div\r\n className={\r\n combineClassNames(classMap.copyright, copyrightClassName) ??\r\n combineClassNames(classMap.left, leftClassName)\r\n }\r\n data-testid={`${testId}-copyright`}\r\n >\r\n <p id={labelId}>{copyright}</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {links.length > 0 && (\r\n <nav\r\n className={combineClassNames(classMap.links, linksClassName)}\r\n aria-label={navAriaLabel}\r\n data-testid={`${testId}-nav`}\r\n >\r\n <ul>\r\n {links.map((link, index) =>\r\n renderFooterLink(link, index, linkClassName),\r\n )}\r\n </ul>\r\n </nav>\r\n )}\r\n\r\n {renderThemeSelect()}\r\n {renderSocialLinks()}\r\n </div>\r\n </footer>\r\n );\r\n};\r\n\r\nFooterBase.displayName = \"FooterBase\";\r\nexport default FooterBase;\r\n","import { useContext, useMemo, forwardRef } from \"react\";\r\nimport Select from \"../../core/Select\";\r\nimport { ThemeContext } from \"../../../../context/ThemeContext\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\nimport { ThemeSelectProps } from \"../../Select.types\";\r\n\r\nconst UserThemeSettings = forwardRef<HTMLSelectElement, ThemeSelectProps>(\r\n (\r\n {\r\n theme = getDefaultTheme(),\r\n shadow = getDefaultShadow(),\r\n rounding = getDefaultRounding(),\r\n \"data-testid\": testId = \"theme-select\",\r\n state = \"\",\r\n },\r\n ref,\r\n ) => {\r\n const ctx = useContext(ThemeContext);\r\n if (!ctx)\r\n throw new Error(\"ThemeContext is undefined. Wrap with ThemeProvider.\");\r\n\r\n const { selectedScheme, setSelectedScheme, schemes } = ctx;\r\n\r\n const options = useMemo(\r\n () =>\r\n schemes.map((scheme, index) => ({\r\n value: String(index),\r\n label: scheme.name,\r\n })),\r\n [schemes],\r\n );\r\n\r\n return (\r\n <div className=\"control-container\">\r\n <Select\r\n ref={ref}\r\n theme={theme}\r\n state={state}\r\n shadow={shadow}\r\n rounding={rounding}\r\n options={options}\r\n data-testid={testId}\r\n value={String(selectedScheme)}\r\n aria-label=\"Select Theme\"\r\n onChange={(value: string | number) =>\r\n setSelectedScheme(parseInt(String(value), 10))\r\n }\r\n />\r\n </div>\r\n );\r\n },\r\n);\r\nUserThemeSettings.displayName = \"UserThemeSettings\";\r\nexport default UserThemeSettings;\r\n","import React from \"react\";\r\nimport FooterBase from \"../FooterBase\";\r\nimport { FooterProps } from \"../Footer.types\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport ThemeSelect from \"../../Select/ThemeSelect/core/ThemeSelect\";\r\nimport \"./Footer.scss\";\r\n\r\nconst classes = {\r\n footer: \"footer\",\r\n\r\n primary: \"footer_primary\",\r\n secondary: \"footer_secondary\",\r\n tertiary: \"footer_tertiary\",\r\n quaternary: \"footer_quaternary\",\r\n clear: \"footer_clear\",\r\n\r\n layoutColumns: \"footer_layout-columns\",\r\n\r\n shadowNone: \"footer_shadow-None\",\r\n shadowLight: \"footer_shadow-Light\",\r\n shadowMedium: \"footer_shadow-Medium\",\r\n shadowStrong: \"footer_shadow-Strong\",\r\n shadowIntense: \"footer_shadow-Intense\",\r\n\r\n roundNone: \"footer_round-None\",\r\n roundSmall: \"footer_round-Small\",\r\n roundMedium: \"footer_round-Medium\",\r\n roundLarge: \"footer_round-Large\",\r\n\r\n attachmentStatic: \"footer_attachment-static\",\r\n attachmentFixed: \"footer_attachment-fixed\",\r\n attachmentSticky: \"footer_attachment-sticky\",\r\n\r\n content: \"footer_content\",\r\n\r\n // Existing inline layout\r\n logo: \"footer_logo\",\r\n left: \"footer_left\",\r\n links: \"footer_links\",\r\n link: \"footer_link\",\r\n social: \"footer_social\",\r\n themeToggle: \"footer_theme-toggle\",\r\n copyright: \"footer_copyright\",\r\n\r\n // New column layout\r\n brand: \"footer_brand\",\r\n brandLink: \"footer_brand-link\",\r\n brandTitle: \"footer_brand-title\",\r\n brandDescription: \"footer_brand-description\",\r\n\r\n sections: \"footer_sections\",\r\n section: \"footer_section\",\r\n sectionTitle: \"footer_section-title\",\r\n sectionList: \"footer_section-list\",\r\n\r\n actions: \"footer_actions\",\r\n actionGroup: \"footer_action-group\",\r\n\r\n bottom: \"footer_bottom\",\r\n bottomCopyright: \"footer_bottom-copyright\",\r\n bottomEnd: \"footer_bottom-end\",\r\n};\r\n\r\nconst Footer: React.FC<FooterProps> = (props) => {\r\n return (\r\n <FooterBase\r\n {...props}\r\n IconButton={IconButton}\r\n ThemeSelect={ThemeSelect}\r\n classMap={classes}\r\n />\r\n );\r\n};\r\n\r\nFooter.displayName = \"Footer\";\r\n\r\nexport default Footer;\r\n"],"names":["IconButton","rest","ThemeSelect"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
- const Footer = require("./Footer-Cwi11hLk.cjs");
2
+ const Footer = require("./Footer-Dz2WLlmG.cjs");
3
3
  module.exports = Footer.Footer;
4
4
  //# sourceMappingURL=Footer.cjs.js.map
@@ -484,7 +484,8 @@
484
484
 
485
485
  .footer_brand-link {
486
486
  display: inline-flex;
487
- align-items: center;
487
+ justify-content: center;
488
+ align-items: baseline;
488
489
  gap: var(--spacing-sm);
489
490
  color: var(--text-color);
490
491
  text-decoration: none;
@@ -500,8 +501,10 @@
500
501
  max-height: none;
501
502
  margin-right: 0;
502
503
  color: currentcolor;
504
+ flex-shrink: 0;
503
505
  }
504
506
  .footer_brand-link .footer_logo svg {
507
+ display: block;
505
508
  width: 100%;
506
509
  height: 100%;
507
510
  }
@@ -1,4 +1,4 @@
1
- import { F } from "./Footer-Dwh-2P5I.js";
1
+ import { F } from "./Footer-GVH6PVkB.js";
2
2
  export {
3
3
  F as default
4
4
  };
@@ -12,7 +12,7 @@ const ScrollToTop = require("./ScrollToTop-D_a7ZYwb.cjs");
12
12
  const TextInput = require("./TextInput-B78NR000.cjs");
13
13
  const TextArea = require("./TextArea-BRjtF3d9.cjs");
14
14
  const Select = require("./Select-BAv-TDRc.cjs");
15
- const Footer = require("./Footer-Cwi11hLk.cjs");
15
+ const Footer = require("./Footer-Dz2WLlmG.cjs");
16
16
  const FileUpload = require("./FileUpload-DQcxMDwI.cjs");
17
17
  const TagInput = require("./TagInput-D6GoiYJi.cjs");
18
18
  const RadioButton = require("./RadioButton-yRHlP7xo.cjs");
@@ -11,7 +11,7 @@ import { S } from "./ScrollToTop-DqVtYbF3.js";
11
11
  import { T as T3 } from "./TextInput-Bx_LhlBz.js";
12
12
  import { T as T4 } from "./TextArea-CU2VDvnv.js";
13
13
  import { S as S2 } from "./Select-btS45KZa.js";
14
- import { F, U } from "./Footer-Dwh-2P5I.js";
14
+ import { F, U } from "./Footer-GVH6PVkB.js";
15
15
  import { F as F2 } from "./FileUpload-34dJBxR9.js";
16
16
  import { T as T5 } from "./TagInput-BJA-6kCP.js";
17
17
  import { R } from "./RadioButton-CBXitpBe.js";