@openwarelabs/blocks 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/features/Features01/Features01.d.cts +3 -0
  2. package/dist/features/Features01/Features01.d.ts +3 -0
  3. package/dist/features/Features01/Features01.types.d.cts +21 -0
  4. package/dist/features/Features01/Features01.types.d.ts +21 -0
  5. package/dist/features/Features02/Features02.d.cts +3 -0
  6. package/dist/features/Features02/Features02.d.ts +3 -0
  7. package/dist/features/Features02/Features02.types.d.cts +30 -0
  8. package/dist/features/Features02/Features02.types.d.ts +30 -0
  9. package/dist/features/Features03/Features03.d.cts +3 -0
  10. package/dist/features/Features03/Features03.d.ts +3 -0
  11. package/dist/features/Features03/Features03.types.d.cts +24 -0
  12. package/dist/features/Features03/Features03.types.d.ts +24 -0
  13. package/dist/features/Features04/Features04.d.cts +3 -0
  14. package/dist/features/Features04/Features04.d.ts +3 -0
  15. package/dist/features/Features04/Features04.types.d.cts +29 -0
  16. package/dist/features/Features04/Features04.types.d.ts +29 -0
  17. package/dist/features/Features05/Features05.d.cts +3 -0
  18. package/dist/features/Features05/Features05.d.ts +3 -0
  19. package/dist/features/Features05/Features05.types.d.cts +18 -0
  20. package/dist/features/Features05/Features05.types.d.ts +18 -0
  21. package/dist/footers/Footer01/Footer01.d.cts +3 -0
  22. package/dist/footers/Footer01/Footer01.d.ts +3 -0
  23. package/dist/footers/Footer01/Footer01.types.d.cts +32 -0
  24. package/dist/footers/Footer01/Footer01.types.d.ts +32 -0
  25. package/dist/footers/Footer02/Footer02.d.cts +3 -0
  26. package/dist/footers/Footer02/Footer02.d.ts +3 -0
  27. package/dist/footers/Footer02/Footer02.types.d.cts +18 -0
  28. package/dist/footers/Footer02/Footer02.types.d.ts +18 -0
  29. package/dist/footers/Footer03/Footer03.d.cts +3 -0
  30. package/dist/footers/Footer03/Footer03.d.ts +3 -0
  31. package/dist/footers/Footer03/Footer03.types.d.cts +53 -0
  32. package/dist/footers/Footer03/Footer03.types.d.ts +53 -0
  33. package/dist/footers/Footer04/Footer04.d.cts +3 -0
  34. package/dist/footers/Footer04/Footer04.d.ts +3 -0
  35. package/dist/footers/Footer04/Footer04.types.d.cts +18 -0
  36. package/dist/footers/Footer04/Footer04.types.d.ts +18 -0
  37. package/dist/headers/Header01/Header01.d.cts +6 -0
  38. package/dist/headers/Header01/Header01.d.ts +6 -0
  39. package/dist/headers/Header01/Header01.types.d.cts +18 -0
  40. package/dist/headers/Header01/Header01.types.d.ts +18 -0
  41. package/dist/headers/Header02/Header02.d.cts +6 -0
  42. package/dist/headers/Header02/Header02.d.ts +6 -0
  43. package/dist/headers/Header02/Header02.types.d.cts +69 -0
  44. package/dist/headers/Header02/Header02.types.d.ts +69 -0
  45. package/dist/headers/Header03/Header03.d.cts +6 -0
  46. package/dist/headers/Header03/Header03.d.ts +6 -0
  47. package/dist/headers/Header03/Header03.types.d.cts +24 -0
  48. package/dist/headers/Header03/Header03.types.d.ts +24 -0
  49. package/dist/headers/Header04/Header04.d.cts +3 -0
  50. package/dist/headers/Header04/Header04.d.ts +3 -0
  51. package/dist/headers/Header04/Header04.types.d.cts +47 -0
  52. package/dist/headers/Header04/Header04.types.d.ts +47 -0
  53. package/dist/headers/Header05/Header05.d.cts +3 -0
  54. package/dist/headers/Header05/Header05.d.ts +3 -0
  55. package/dist/headers/Header05/Header05.types.d.cts +27 -0
  56. package/dist/headers/Header05/Header05.types.d.ts +27 -0
  57. package/dist/index.cjs +1259 -7
  58. package/dist/index.cjs.map +4 -4
  59. package/dist/index.d.cts +39 -1
  60. package/dist/index.d.ts +39 -1
  61. package/dist/index.js +1272 -20
  62. package/dist/index.js.map +4 -4
  63. package/dist/pricing/Pricing01/Pricing01.d.cts +3 -0
  64. package/dist/pricing/Pricing01/Pricing01.d.ts +3 -0
  65. package/dist/pricing/Pricing01/Pricing01.types.d.cts +43 -0
  66. package/dist/pricing/Pricing01/Pricing01.types.d.ts +43 -0
  67. package/dist/pricing/Pricing02/Pricing02.d.cts +3 -0
  68. package/dist/pricing/Pricing02/Pricing02.d.ts +3 -0
  69. package/dist/pricing/Pricing02/Pricing02.types.d.cts +64 -0
  70. package/dist/pricing/Pricing02/Pricing02.types.d.ts +64 -0
  71. package/dist/pricing/Pricing03/Pricing03.d.cts +3 -0
  72. package/dist/pricing/Pricing03/Pricing03.d.ts +3 -0
  73. package/dist/pricing/Pricing03/Pricing03.types.d.cts +65 -0
  74. package/dist/pricing/Pricing03/Pricing03.types.d.ts +65 -0
  75. package/dist/pricing/Pricing04/Pricing04.d.cts +3 -0
  76. package/dist/pricing/Pricing04/Pricing04.d.ts +3 -0
  77. package/dist/pricing/Pricing04/Pricing04.types.d.cts +38 -0
  78. package/dist/pricing/Pricing04/Pricing04.types.d.ts +38 -0
  79. package/dist/pricing/Pricing05/Pricing05.d.cts +3 -0
  80. package/dist/pricing/Pricing05/Pricing05.d.ts +3 -0
  81. package/dist/pricing/Pricing05/Pricing05.types.d.cts +64 -0
  82. package/dist/pricing/Pricing05/Pricing05.types.d.ts +64 -0
  83. package/dist/shared/BlockActions.d.cts +1 -1
  84. package/dist/shared/BlockActions.d.ts +1 -1
  85. package/dist/shared/BlockBrandLink.d.cts +3 -0
  86. package/dist/shared/BlockBrandLink.d.ts +3 -0
  87. package/dist/shared/FooterColumns.d.cts +3 -0
  88. package/dist/shared/FooterColumns.d.ts +3 -0
  89. package/dist/shared/icons.d.cts +13 -3
  90. package/dist/shared/icons.d.ts +13 -3
  91. package/dist/shared/shared.types.d.cts +49 -1
  92. package/dist/shared/shared.types.d.ts +49 -1
  93. package/dist/styles.css +3428 -333
  94. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1,22 +1,26 @@
1
1
  // blocks/src/heroes/Hero01/Hero01.tsx
2
2
  import { useId } from "react";
3
- import { Chip, cx, Text } from "@openwarelabs/ui";
3
+ import { Chip, cx as cx2, Text } from "@openwarelabs/ui";
4
4
 
5
5
  // blocks/src/shared/BlockActions.tsx
6
- import { Button, buttonClassName } from "@openwarelabs/ui";
6
+ import { Button, buttonClassName, cx } from "@openwarelabs/ui";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
- function BlockActionButton({ action, variant }) {
8
+ function BlockActionButton({ action, variant, size = "lg", className, onAfterClick, fullWidth = false }) {
9
9
  const { label, href, onClick, startIcon, endIcon, target, "aria-label": ariaLabel } = action;
10
+ const click = onClick || onAfterClick ? (event) => {
11
+ onClick?.(event);
12
+ onAfterClick?.();
13
+ } : void 0;
10
14
  if (href !== void 0) {
11
15
  return /* @__PURE__ */ jsxs(
12
16
  "a",
13
17
  {
14
- className: buttonClassName({ variant, size: "lg", shape: "pill" }),
18
+ className: cx(buttonClassName({ variant, size, shape: "pill" }), fullWidth && "ow-button--full", className),
15
19
  href,
16
20
  target,
17
21
  rel: target === "_blank" ? "noopener noreferrer" : void 0,
18
22
  "aria-label": ariaLabel,
19
- onClick,
23
+ onClick: click,
20
24
  children: [
21
25
  startIcon ? /* @__PURE__ */ jsx("span", { className: "ow-button__icon", children: startIcon }) : null,
22
26
  label,
@@ -25,7 +29,21 @@ function BlockActionButton({ action, variant }) {
25
29
  }
26
30
  );
27
31
  }
28
- return /* @__PURE__ */ jsx(Button, { variant, shape: "pill", size: "lg", startIcon, endIcon, "aria-label": ariaLabel, onClick, children: label });
32
+ return /* @__PURE__ */ jsx(
33
+ Button,
34
+ {
35
+ variant,
36
+ shape: "pill",
37
+ size,
38
+ startIcon,
39
+ endIcon,
40
+ "aria-label": ariaLabel,
41
+ onClick: click,
42
+ fullWidth,
43
+ className,
44
+ children: label
45
+ }
46
+ );
29
47
  }
30
48
  function BlockActions({ primary, secondary, className }) {
31
49
  return /* @__PURE__ */ jsxs("div", { className, children: [
@@ -38,7 +56,7 @@ function BlockActions({ primary, secondary, className }) {
38
56
  import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
39
57
  function Hero01({ eyebrow, title, description, primaryAction, secondaryAction, note, visual, className, ...props }) {
40
58
  const titleId = useId();
41
- return /* @__PURE__ */ jsxs2("section", { className: cx("ow-hero01", className), "aria-labelledby": titleId, ...props, children: [
59
+ return /* @__PURE__ */ jsxs2("section", { className: cx2("ow-hero01", className), "aria-labelledby": titleId, ...props, children: [
42
60
  /* @__PURE__ */ jsxs2("div", { className: "ow-hero01__inner", children: [
43
61
  eyebrow ? /* @__PURE__ */ jsx2(Chip, { children: eyebrow }) : null,
44
62
  /* @__PURE__ */ jsx2(Text, { variant: "hero", align: "center", id: titleId, className: "ow-hero01__title", children: title }),
@@ -52,11 +70,11 @@ function Hero01({ eyebrow, title, description, primaryAction, secondaryAction, n
52
70
 
53
71
  // blocks/src/heroes/Hero02/Hero02.tsx
54
72
  import { useId as useId2 } from "react";
55
- import { Chip as Chip2, cx as cx2, Text as Text2 } from "@openwarelabs/ui";
73
+ import { Chip as Chip2, cx as cx3, Text as Text2 } from "@openwarelabs/ui";
56
74
 
57
75
  // blocks/src/shared/icons.tsx
58
76
  import { Fragment, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
59
- var icon = (paths) => function BlockIcon({ size = 16 }) {
77
+ var icon = (paths) => function BlockIcon({ size = 16, strokeWidth = 2 }) {
60
78
  return /* @__PURE__ */ jsx3(
61
79
  "svg",
62
80
  {
@@ -66,7 +84,7 @@ var icon = (paths) => function BlockIcon({ size = 16 }) {
66
84
  viewBox: "0 0 24 24",
67
85
  fill: "none",
68
86
  stroke: "currentColor",
69
- strokeWidth: 2,
87
+ strokeWidth,
70
88
  strokeLinecap: "round",
71
89
  strokeLinejoin: "round",
72
90
  "aria-hidden": "true",
@@ -88,12 +106,63 @@ var DownloadIcon = icon(
88
106
  /* @__PURE__ */ jsx3("path", { d: "m7 10 5 5 5-5" })
89
107
  ] })
90
108
  );
109
+ var MenuIcon = icon(
110
+ /* @__PURE__ */ jsxs3(Fragment, { children: [
111
+ /* @__PURE__ */ jsx3("path", { d: "M4 5h16" }),
112
+ /* @__PURE__ */ jsx3("path", { d: "M4 12h16" }),
113
+ /* @__PURE__ */ jsx3("path", { d: "M4 19h16" })
114
+ ] })
115
+ );
116
+ var XIcon = icon(
117
+ /* @__PURE__ */ jsxs3(Fragment, { children: [
118
+ /* @__PURE__ */ jsx3("path", { d: "M18 6 6 18" }),
119
+ /* @__PURE__ */ jsx3("path", { d: "m6 6 12 12" })
120
+ ] })
121
+ );
122
+ var ChevronDownIcon = icon(/* @__PURE__ */ jsx3("path", { d: "m6 9 6 6 6-6" }));
123
+ var ChevronRightIcon = icon(/* @__PURE__ */ jsx3("path", { d: "m9 18 6-6-6-6" }));
124
+ var ArrowRightIcon = icon(
125
+ /* @__PURE__ */ jsxs3(Fragment, { children: [
126
+ /* @__PURE__ */ jsx3("path", { d: "M5 12h14" }),
127
+ /* @__PURE__ */ jsx3("path", { d: "m12 5 7 7-7 7" })
128
+ ] })
129
+ );
130
+ var MinusIcon = icon(/* @__PURE__ */ jsx3("path", { d: "M5 12h14" }));
131
+ var SunIcon = icon(
132
+ /* @__PURE__ */ jsxs3(Fragment, { children: [
133
+ /* @__PURE__ */ jsx3("circle", { cx: "12", cy: "12", r: "4" }),
134
+ /* @__PURE__ */ jsx3("path", { d: "M12 2v2" }),
135
+ /* @__PURE__ */ jsx3("path", { d: "M12 20v2" }),
136
+ /* @__PURE__ */ jsx3("path", { d: "m4.93 4.93 1.41 1.41" }),
137
+ /* @__PURE__ */ jsx3("path", { d: "m17.66 17.66 1.41 1.41" }),
138
+ /* @__PURE__ */ jsx3("path", { d: "M2 12h2" }),
139
+ /* @__PURE__ */ jsx3("path", { d: "M20 12h2" }),
140
+ /* @__PURE__ */ jsx3("path", { d: "m6.34 17.66-1.41 1.41" }),
141
+ /* @__PURE__ */ jsx3("path", { d: "m19.07 4.93-1.41 1.41" })
142
+ ] })
143
+ );
144
+ var MoonIcon = icon(
145
+ /* @__PURE__ */ jsx3("path", { d: "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" })
146
+ );
147
+ var MonitorIcon = icon(
148
+ /* @__PURE__ */ jsxs3(Fragment, { children: [
149
+ /* @__PURE__ */ jsx3("rect", { width: "20", height: "14", x: "2", y: "3", rx: "2" }),
150
+ /* @__PURE__ */ jsx3("line", { x1: "8", x2: "16", y1: "21", y2: "21" }),
151
+ /* @__PURE__ */ jsx3("line", { x1: "12", x2: "12", y1: "17", y2: "21" })
152
+ ] })
153
+ );
154
+ var CircleCheckIcon = icon(
155
+ /* @__PURE__ */ jsxs3(Fragment, { children: [
156
+ /* @__PURE__ */ jsx3("circle", { cx: "12", cy: "12", r: "10" }),
157
+ /* @__PURE__ */ jsx3("path", { d: "m16 9-5.5 5.5L8 12" })
158
+ ] })
159
+ );
91
160
 
92
161
  // blocks/src/heroes/Hero02/Hero02.tsx
93
162
  import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
94
163
  function Hero02({ eyebrow, title, description, primaryAction, secondaryAction, points, visual, className, ...props }) {
95
164
  const titleId = useId2();
96
- return /* @__PURE__ */ jsx4("section", { className: cx2("ow-hero02", className), "aria-labelledby": titleId, ...props, children: /* @__PURE__ */ jsxs4("div", { className: "ow-hero02__inner", children: [
165
+ return /* @__PURE__ */ jsx4("section", { className: cx3("ow-hero02", className), "aria-labelledby": titleId, ...props, children: /* @__PURE__ */ jsxs4("div", { className: "ow-hero02__inner", children: [
97
166
  /* @__PURE__ */ jsxs4("div", { className: "ow-hero02__text", children: [
98
167
  eyebrow ? /* @__PURE__ */ jsx4(Chip2, { children: eyebrow }) : null,
99
168
  /* @__PURE__ */ jsx4(Text2, { variant: "page-title", id: titleId, className: "ow-hero02__title", children: title }),
@@ -110,7 +179,7 @@ function Hero02({ eyebrow, title, description, primaryAction, secondaryAction, p
110
179
 
111
180
  // blocks/src/heroes/Hero03/Hero03.tsx
112
181
  import { useEffect, useId as useId3, useRef, useState } from "react";
113
- import { Button as Button2, Chip as Chip3, cx as cx3, Input, Text as Text3 } from "@openwarelabs/ui";
182
+ import { Button as Button2, Chip as Chip3, cx as cx4, Input, Text as Text3 } from "@openwarelabs/ui";
114
183
  import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
115
184
  var emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
116
185
  function Hero03({
@@ -162,7 +231,7 @@ function Hero03({
162
231
  setSending(false);
163
232
  }
164
233
  };
165
- return /* @__PURE__ */ jsx5("section", { className: cx3("ow-hero03", className), "aria-labelledby": titleId, ...props, children: /* @__PURE__ */ jsxs5("div", { className: "ow-hero03__inner", children: [
234
+ return /* @__PURE__ */ jsx5("section", { className: cx4("ow-hero03", className), "aria-labelledby": titleId, ...props, children: /* @__PURE__ */ jsxs5("div", { className: "ow-hero03__inner", children: [
166
235
  eyebrow ? /* @__PURE__ */ jsx5(Chip3, { children: eyebrow }) : null,
167
236
  /* @__PURE__ */ jsx5(Text3, { variant: "hero", align: "center", id: titleId, className: "ow-hero03__title", children: title }),
168
237
  /* @__PURE__ */ jsx5(Text3, { variant: "lead", align: "center", className: "ow-hero03__lead", children: description }),
@@ -216,11 +285,11 @@ function Hero03({
216
285
 
217
286
  // blocks/src/heroes/Hero04/Hero04.tsx
218
287
  import { useId as useId4 } from "react";
219
- import { Chip as Chip4, cx as cx4, DotGrid, Text as Text4 } from "@openwarelabs/ui";
288
+ import { Chip as Chip4, cx as cx5, DotGrid, Text as Text4 } from "@openwarelabs/ui";
220
289
  import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
221
290
  function Hero04({ eyebrow, title, description, primaryAction, secondaryAction, start, end, interactive = true, className, ...props }) {
222
291
  const titleId = useId4();
223
- return /* @__PURE__ */ jsx6("section", { className: cx4("ow-hero04", className), "aria-labelledby": titleId, ...props, children: /* @__PURE__ */ jsx6(DotGrid, { fade: true, interactive, className: "ow-hero04__grid", children: /* @__PURE__ */ jsxs6("div", { className: "ow-hero04__layout", children: [
292
+ return /* @__PURE__ */ jsx6("section", { className: cx5("ow-hero04", className), "aria-labelledby": titleId, ...props, children: /* @__PURE__ */ jsx6(DotGrid, { fade: true, interactive, className: "ow-hero04__grid", children: /* @__PURE__ */ jsxs6("div", { className: "ow-hero04__layout", children: [
224
293
  start,
225
294
  /* @__PURE__ */ jsxs6("div", { className: "ow-hero04__text", children: [
226
295
  eyebrow ? /* @__PURE__ */ jsx6(Chip4, { children: eyebrow }) : null,
@@ -234,11 +303,11 @@ function Hero04({ eyebrow, title, description, primaryAction, secondaryAction, s
234
303
 
235
304
  // blocks/src/heroes/Hero05/Hero05.tsx
236
305
  import { useId as useId5 } from "react";
237
- import { Chip as Chip5, cx as cx5, Text as Text5 } from "@openwarelabs/ui";
306
+ import { Chip as Chip5, cx as cx6, Text as Text5 } from "@openwarelabs/ui";
238
307
  import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
239
308
  function Hero05({ eyebrow, title, description, primaryAction, secondaryAction, logosTitle, logos, className, ...props }) {
240
309
  const id = useId5();
241
- return /* @__PURE__ */ jsx7("section", { className: cx5("ow-hero05", className), "aria-labelledby": `${id}-title`, ...props, children: /* @__PURE__ */ jsxs7("div", { className: "ow-hero05__inner", children: [
310
+ return /* @__PURE__ */ jsx7("section", { className: cx6("ow-hero05", className), "aria-labelledby": `${id}-title`, ...props, children: /* @__PURE__ */ jsxs7("div", { className: "ow-hero05__inner", children: [
242
311
  /* @__PURE__ */ jsxs7("div", { className: "ow-hero05__top", children: [
243
312
  /* @__PURE__ */ jsxs7("div", { className: "ow-hero05__heading", children: [
244
313
  eyebrow ? /* @__PURE__ */ jsx7(Chip5, { children: eyebrow }) : null,
@@ -258,7 +327,7 @@ function Hero05({ eyebrow, title, description, primaryAction, secondaryAction, l
258
327
 
259
328
  // blocks/src/heroes/Hero06/Hero06.tsx
260
329
  import { useEffect as useEffect2, useId as useId6, useState as useState2 } from "react";
261
- import { Button as Button3, buttonClassName as buttonClassName2, Chip as Chip6, cx as cx6, Link, Text as Text6 } from "@openwarelabs/ui";
330
+ import { Button as Button3, buttonClassName as buttonClassName2, Chip as Chip6, cx as cx7, Link, Text as Text6 } from "@openwarelabs/ui";
262
331
  import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
263
332
  function detectPlatform() {
264
333
  const nav = navigator;
@@ -321,7 +390,7 @@ function Hero06({
321
390
  platform.id
322
391
  );
323
392
  };
324
- return /* @__PURE__ */ jsx8("section", { className: cx6("ow-hero06", className), "aria-labelledby": titleId, ...props, children: /* @__PURE__ */ jsxs8("div", { className: "ow-hero06__inner", children: [
393
+ return /* @__PURE__ */ jsx8("section", { className: cx7("ow-hero06", className), "aria-labelledby": titleId, ...props, children: /* @__PURE__ */ jsxs8("div", { className: "ow-hero06__inner", children: [
325
394
  /* @__PURE__ */ jsxs8("div", { className: "ow-hero06__text", children: [
326
395
  eyebrow ? /* @__PURE__ */ jsx8(Chip6, { children: eyebrow }) : null,
327
396
  /* @__PURE__ */ jsx8(Text6, { variant: "page-title", id: titleId, className: "ow-hero06__title", children: title }),
@@ -336,12 +405,1195 @@ function Hero06({
336
405
  visual
337
406
  ] }) });
338
407
  }
408
+
409
+ // blocks/src/headers/Header01/Header01.tsx
410
+ import { useEffect as useEffect3, useState as useState3 } from "react";
411
+ import { Button as Button4, cx as cx8, Link as Link3, Popover, SiteHeader } from "@openwarelabs/ui";
412
+
413
+ // blocks/src/shared/BlockBrandLink.tsx
414
+ import { forwardRef } from "react";
415
+ import { Link as Link2 } from "@openwarelabs/ui";
416
+ import { jsxs as jsxs9 } from "react/jsx-runtime";
417
+ var BlockBrandLink = forwardRef(function BlockBrandLink2({ brand, className }, ref) {
418
+ return /* @__PURE__ */ jsxs9(Link2, { ref, href: brand.href, variant: "standalone", className, children: [
419
+ brand.logo,
420
+ brand.name
421
+ ] });
422
+ });
423
+
424
+ // blocks/src/headers/Header01/Header01.tsx
425
+ import { Fragment as Fragment2, jsx as jsx9, jsxs as jsxs10 } from "react/jsx-runtime";
426
+ function Header01({ brand, links, primaryAction, secondaryLink, labels = {}, className, ...props }) {
427
+ const [menuOpen, setMenuOpen] = useState3(false);
428
+ const menuLabel = labels.menu ?? "Menu";
429
+ useEffect3(() => {
430
+ const wide = window.matchMedia("(min-width: 761px)");
431
+ const onChange = () => wide.matches && setMenuOpen(false);
432
+ wide.addEventListener("change", onChange);
433
+ return () => wide.removeEventListener("change", onChange);
434
+ }, []);
435
+ return /* @__PURE__ */ jsx9("div", { className: cx8("ow-header01", className), ...props, children: /* @__PURE__ */ jsx9(
436
+ SiteHeader,
437
+ {
438
+ brand: /* @__PURE__ */ jsx9(BlockBrandLink, { brand, className: "ow-header01__brand" }),
439
+ nav: links.map((link, index) => /* @__PURE__ */ jsx9(Link3, { href: link.href, variant: "standalone", "aria-current": link.current ? "page" : void 0, children: link.label }, index)),
440
+ actions: /* @__PURE__ */ jsxs10(Fragment2, { children: [
441
+ secondaryLink ? /* @__PURE__ */ jsx9(
442
+ Link3,
443
+ {
444
+ href: secondaryLink.href,
445
+ variant: "standalone",
446
+ className: "ow-header01__sign-in",
447
+ "aria-current": secondaryLink.current ? "page" : void 0,
448
+ children: secondaryLink.label
449
+ }
450
+ ) : null,
451
+ /* @__PURE__ */ jsx9(BlockActionButton, { action: primaryAction, variant: "primary", size: "sm" }),
452
+ /* @__PURE__ */ jsx9("span", { className: "ow-header01__phone-menu", children: /* @__PURE__ */ jsx9(
453
+ Popover,
454
+ {
455
+ "aria-label": menuLabel,
456
+ placement: "bottom-end",
457
+ width: 240,
458
+ open: menuOpen,
459
+ onOpenChange: setMenuOpen,
460
+ trigger: /* @__PURE__ */ jsx9(Button4, { variant: "ghost", shape: "pill", size: "sm", iconOnly: true, "aria-label": menuLabel, children: /* @__PURE__ */ jsx9(MenuIcon, { size: 16 }) }),
461
+ children: /* @__PURE__ */ jsxs10("nav", { className: "ow-header01__menu", "aria-label": "Main", children: [
462
+ links.map((link, index) => /* @__PURE__ */ jsx9(
463
+ Link3,
464
+ {
465
+ href: link.href,
466
+ variant: "standalone",
467
+ className: "ow-header01__menu-link",
468
+ "aria-current": link.current ? "page" : void 0,
469
+ onClick: () => setMenuOpen(false),
470
+ children: link.label
471
+ },
472
+ index
473
+ )),
474
+ secondaryLink ? /* @__PURE__ */ jsx9(
475
+ Link3,
476
+ {
477
+ href: secondaryLink.href,
478
+ variant: "standalone",
479
+ className: "ow-header01__menu-link ow-header01__menu-link--sign-in",
480
+ onClick: () => setMenuOpen(false),
481
+ children: secondaryLink.label
482
+ }
483
+ ) : null
484
+ ] })
485
+ }
486
+ ) })
487
+ ] })
488
+ }
489
+ ) });
490
+ }
491
+
492
+ // blocks/src/headers/Header02/Header02.tsx
493
+ import { Fragment as Fragment3, useEffect as useEffect4, useId as useId7, useState as useState4 } from "react";
494
+ import { Badge, Button as Button5, buttonClassName as buttonClassName3, cx as cx9, Link as Link4, Menu, MenuItem, MenuSeparator, Popover as Popover2, Text as Text7 } from "@openwarelabs/ui";
495
+ import { Fragment as Fragment4, jsx as jsx10, jsxs as jsxs11 } from "react/jsx-runtime";
496
+ var navigateTo = (href) => window.location.assign(href);
497
+ function PanelContent({ panel, onNavigate }) {
498
+ return /* @__PURE__ */ jsxs11("div", { className: "ow-header02__product", children: [
499
+ /* @__PURE__ */ jsx10("ul", { className: "ow-header02__features", children: panel.features.map((feature, index) => /* @__PURE__ */ jsx10("li", { children: /* @__PURE__ */ jsxs11(Link4, { href: feature.href, variant: "standalone", className: "ow-header02__feature", onClick: onNavigate, children: [
500
+ feature.icon ? /* @__PURE__ */ jsx10("span", { className: "ow-header02__feature-icon", "aria-hidden": "true", children: feature.icon }) : null,
501
+ /* @__PURE__ */ jsxs11("span", { className: "ow-header02__feature-text", children: [
502
+ /* @__PURE__ */ jsx10(Text7, { variant: "label", children: feature.title }),
503
+ /* @__PURE__ */ jsx10(Text7, { variant: "caption", children: feature.description })
504
+ ] })
505
+ ] }) }, index)) }),
506
+ panel.highlight ? /* @__PURE__ */ jsxs11(Link4, { href: panel.highlight.href, variant: "standalone", className: "ow-header02__news", onClick: onNavigate, children: [
507
+ panel.highlight.badge ? /* @__PURE__ */ jsx10(Badge, { size: "sm", variant: "active", children: panel.highlight.badge }) : null,
508
+ /* @__PURE__ */ jsx10(Text7, { variant: "label", children: panel.highlight.title }),
509
+ /* @__PURE__ */ jsxs11(Text7, { as: "span", tone: "primary", className: "ow-header02__news-link", children: [
510
+ panel.highlight.linkLabel,
511
+ /* @__PURE__ */ jsx10(ArrowRightIcon, { size: 14 })
512
+ ] })
513
+ ] }) : null
514
+ ] });
515
+ }
516
+ function Header02({
517
+ brand,
518
+ panel,
519
+ menus = [],
520
+ links = [],
521
+ primaryAction,
522
+ secondaryLink,
523
+ onNavigate = navigateTo,
524
+ defaultPanelOpen = false,
525
+ labels = {},
526
+ className,
527
+ ...props
528
+ }) {
529
+ const [productOpen, setProductOpen] = useState4(defaultPanelOpen);
530
+ const [phoneOpen, setPhoneOpen] = useState4(false);
531
+ const phoneId = useId7();
532
+ const closePhone = () => setPhoneOpen(false);
533
+ useEffect4(() => {
534
+ const wide = window.matchMedia("(min-width: 761px)");
535
+ const onChange = () => wide.matches ? setPhoneOpen(false) : setProductOpen(false);
536
+ wide.addEventListener("change", onChange);
537
+ return () => wide.removeEventListener("change", onChange);
538
+ }, []);
539
+ return /* @__PURE__ */ jsxs11("header", { className: cx9("ow-header02", className), ...props, children: [
540
+ /* @__PURE__ */ jsxs11("div", { className: "ow-header02__inner", children: [
541
+ /* @__PURE__ */ jsx10(BlockBrandLink, { brand, className: "ow-header02__brand" }),
542
+ /* @__PURE__ */ jsxs11("nav", { className: "ow-header02__nav", "aria-label": "Main", children: [
543
+ panel ? /* @__PURE__ */ jsx10(
544
+ Popover2,
545
+ {
546
+ className: "ow-header02__popover",
547
+ "aria-label": panel.label,
548
+ width: 720,
549
+ autoFocus: false,
550
+ open: productOpen,
551
+ onOpenChange: setProductOpen,
552
+ trigger: /* @__PURE__ */ jsx10(Button5, { variant: "ghost", shape: "pill", size: "sm", className: "ow-header02__item", endIcon: /* @__PURE__ */ jsx10(ChevronDownIcon, { size: 14 }), children: panel.label }),
553
+ children: /* @__PURE__ */ jsx10(PanelContent, { panel, onNavigate: () => setProductOpen(false) })
554
+ }
555
+ ) : null,
556
+ menus.map((menu) => /* @__PURE__ */ jsx10(
557
+ Menu,
558
+ {
559
+ label: menu.label,
560
+ width: 220,
561
+ trigger: /* @__PURE__ */ jsx10(Button5, { variant: "ghost", shape: "pill", size: "sm", className: "ow-header02__item", endIcon: /* @__PURE__ */ jsx10(ChevronDownIcon, { size: 14 }), children: menu.label }),
562
+ children: menu.groups.map((group, index) => /* @__PURE__ */ jsxs11(Fragment3, { children: [
563
+ index > 0 ? /* @__PURE__ */ jsx10(MenuSeparator, {}) : null,
564
+ group.map((entry) => /* @__PURE__ */ jsx10(MenuItem, { icon: entry.icon, onSelect: () => onNavigate(entry.href), children: entry.label }, entry.label))
565
+ ] }, index))
566
+ },
567
+ menu.label
568
+ )),
569
+ links.map((link, index) => /* @__PURE__ */ jsx10(
570
+ "a",
571
+ {
572
+ href: link.href,
573
+ className: cx9(buttonClassName3({ variant: "ghost", shape: "pill", size: "sm" }), "ow-header02__item"),
574
+ "aria-current": link.current ? "page" : void 0,
575
+ children: link.label
576
+ },
577
+ index
578
+ ))
579
+ ] }),
580
+ /* @__PURE__ */ jsxs11("div", { className: "ow-header02__actions", children: [
581
+ secondaryLink ? /* @__PURE__ */ jsx10(
582
+ "a",
583
+ {
584
+ href: secondaryLink.href,
585
+ className: cx9(buttonClassName3({ variant: "ghost", shape: "pill", size: "sm" }), "ow-header02__item ow-header02__sign-in"),
586
+ children: secondaryLink.label
587
+ }
588
+ ) : null,
589
+ /* @__PURE__ */ jsx10(BlockActionButton, { action: primaryAction, variant: "primary", size: "sm" }),
590
+ /* @__PURE__ */ jsx10(
591
+ Button5,
592
+ {
593
+ className: "ow-header02__toggle",
594
+ variant: "ghost",
595
+ size: "sm",
596
+ iconOnly: true,
597
+ "aria-label": labels.menu ?? "Menu",
598
+ "aria-expanded": phoneOpen,
599
+ "aria-controls": phoneId,
600
+ onClick: () => setPhoneOpen((open) => !open),
601
+ children: phoneOpen ? /* @__PURE__ */ jsx10(XIcon, { size: 18 }) : /* @__PURE__ */ jsx10(MenuIcon, { size: 18 })
602
+ }
603
+ )
604
+ ] })
605
+ ] }),
606
+ /* @__PURE__ */ jsxs11("nav", { id: phoneId, className: "ow-header02__panel", "aria-label": "Main", hidden: !phoneOpen, children: [
607
+ panel ? /* @__PURE__ */ jsxs11(Fragment4, { children: [
608
+ /* @__PURE__ */ jsx10(Text7, { variant: "overline", as: "p", className: "ow-header02__panel-label", children: panel.label }),
609
+ /* @__PURE__ */ jsx10("ul", { className: "ow-header02__panel-list", children: panel.features.map((feature, index) => /* @__PURE__ */ jsx10("li", { children: /* @__PURE__ */ jsxs11(Link4, { href: feature.href, variant: "standalone", className: "ow-header02__panel-link", onClick: closePhone, children: [
610
+ feature.icon,
611
+ feature.title
612
+ ] }) }, index)) })
613
+ ] }) : null,
614
+ menus.map((menu) => /* @__PURE__ */ jsxs11(Fragment3, { children: [
615
+ /* @__PURE__ */ jsx10(Text7, { variant: "overline", as: "p", className: "ow-header02__panel-label", children: menu.label }),
616
+ /* @__PURE__ */ jsx10("ul", { className: "ow-header02__panel-list ow-header02__panel-list--columns", children: menu.groups.flat().map((entry) => /* @__PURE__ */ jsx10("li", { children: /* @__PURE__ */ jsx10(Link4, { href: entry.href, variant: "standalone", className: "ow-header02__panel-link", onClick: closePhone, children: entry.label }) }, entry.label)) })
617
+ ] }, menu.label)),
618
+ links.length ? /* @__PURE__ */ jsx10("ul", { className: "ow-header02__panel-list ow-header02__panel-list--ruled", children: links.map((link, index) => /* @__PURE__ */ jsx10("li", { children: /* @__PURE__ */ jsx10(
619
+ Link4,
620
+ {
621
+ href: link.href,
622
+ variant: "standalone",
623
+ className: "ow-header02__panel-link",
624
+ "aria-current": link.current ? "page" : void 0,
625
+ onClick: closePhone,
626
+ children: link.label
627
+ }
628
+ ) }, index)) }) : null,
629
+ secondaryLink ? /* @__PURE__ */ jsx10("a", { href: secondaryLink.href, className: cx9(buttonClassName3({ shape: "pill" }), "ow-button--full"), onClick: closePhone, children: secondaryLink.label }) : null
630
+ ] })
631
+ ] });
632
+ }
633
+
634
+ // blocks/src/headers/Header03/Header03.tsx
635
+ import { cx as cx10, Link as Link5, ScrollShadow } from "@openwarelabs/ui";
636
+ import { jsx as jsx11, jsxs as jsxs12 } from "react/jsx-runtime";
637
+ function NavLink({ link }) {
638
+ return /* @__PURE__ */ jsx11(Link5, { href: link.href, variant: "standalone", className: "ow-header03__link", "aria-current": link.current ? "page" : void 0, children: link.label });
639
+ }
640
+ function Header03({ brand, start, end = [], primaryAction, secondaryLink, labels = {}, className, ...props }) {
641
+ return /* @__PURE__ */ jsxs12("header", { className: cx10("ow-header03", className), ...props, children: [
642
+ /* @__PURE__ */ jsxs12("div", { className: "ow-header03__inner", children: [
643
+ /* @__PURE__ */ jsx11("nav", { className: "ow-header03__nav", "aria-label": labels.start ?? "Primary", children: start.map((link, index) => /* @__PURE__ */ jsx11(NavLink, { link }, index)) }),
644
+ secondaryLink ? /* @__PURE__ */ jsx11(Link5, { href: secondaryLink.href, variant: "standalone", className: "ow-header03__link ow-header03__phone-only", children: secondaryLink.label }) : null,
645
+ /* @__PURE__ */ jsx11(BlockBrandLink, { brand, className: "ow-header03__brand" }),
646
+ /* @__PURE__ */ jsxs12("div", { className: "ow-header03__end", children: [
647
+ end.length ? /* @__PURE__ */ jsx11("nav", { className: "ow-header03__nav", "aria-label": labels.end ?? "More", children: end.map((link, index) => /* @__PURE__ */ jsx11(NavLink, { link }, index)) }) : null,
648
+ /* @__PURE__ */ jsxs12("div", { className: "ow-header03__actions", children: [
649
+ secondaryLink ? /* @__PURE__ */ jsx11(NavLink, { link: secondaryLink }) : null,
650
+ /* @__PURE__ */ jsx11(BlockActionButton, { action: primaryAction, variant: "primary", size: "sm" })
651
+ ] })
652
+ ] })
653
+ ] }),
654
+ /* @__PURE__ */ jsx11(ScrollShadow, { orientation: "horizontal", size: 24, className: "ow-header03__phone-only ow-header03__phone-nav", children: /* @__PURE__ */ jsx11("nav", { "aria-label": labels.all ?? "Main", children: /* @__PURE__ */ jsx11("ul", { className: "ow-header03__phone-links", children: [...start, ...end].map((link, index) => /* @__PURE__ */ jsx11("li", { children: /* @__PURE__ */ jsx11(NavLink, { link }) }, index)) }) }) })
655
+ ] });
656
+ }
657
+
658
+ // blocks/src/headers/Header04/Header04.tsx
659
+ import { useRef as useRef2, useState as useState5 } from "react";
660
+ import { Button as Button6, CloseButton, cx as cx11, Link as Link6, Menu as Menu2, MenuItem as MenuItem2, MenuSeparator as MenuSeparator2, Text as Text8 } from "@openwarelabs/ui";
661
+ import { Fragment as Fragment5, jsx as jsx12, jsxs as jsxs13 } from "react/jsx-runtime";
662
+ var navigateTo2 = (href) => window.location.assign(href);
663
+ function Header04({
664
+ announcement,
665
+ onDismiss,
666
+ defaultDismissed = false,
667
+ brand,
668
+ links,
669
+ primaryAction,
670
+ secondaryLink,
671
+ onNavigate = navigateTo2,
672
+ labels = {},
673
+ className,
674
+ ...props
675
+ }) {
676
+ const [closed, setClosed] = useState5(defaultDismissed);
677
+ const brandRef = useRef2(null);
678
+ const dismiss = () => {
679
+ setClosed(true);
680
+ onDismiss?.();
681
+ brandRef.current?.focus();
682
+ };
683
+ return /* @__PURE__ */ jsxs13("div", { className: cx11("ow-header04", className), ...props, children: [
684
+ /* @__PURE__ */ jsx12(
685
+ "aside",
686
+ {
687
+ className: "ow-header04__notice",
688
+ "aria-label": labels.announcement ?? "Announcement",
689
+ "data-closed": closed || void 0,
690
+ "aria-hidden": closed || void 0,
691
+ children: /* @__PURE__ */ jsx12("div", { className: "ow-header04__clip", children: /* @__PURE__ */ jsxs13("div", { className: "ow-header04__notice-inner", children: [
692
+ /* @__PURE__ */ jsxs13(Text8, { className: "ow-header04__message", children: [
693
+ /* @__PURE__ */ jsx12("span", { className: "ow-header04__dot", "aria-hidden": "true" }),
694
+ /* @__PURE__ */ jsx12("strong", { children: announcement.title }),
695
+ announcement.description ? /* @__PURE__ */ jsxs13(Fragment5, { children: [
696
+ " ",
697
+ /* @__PURE__ */ jsx12("span", { className: "ow-header04__detail", children: announcement.description })
698
+ ] }) : null,
699
+ announcement.link ? /* @__PURE__ */ jsxs13(Link6, { href: announcement.link.href, className: "ow-header04__link", children: [
700
+ /* @__PURE__ */ jsx12("span", { className: "ow-header04__link-wide", children: announcement.link.label }),
701
+ /* @__PURE__ */ jsx12("span", { className: "ow-header04__link-narrow", children: announcement.link.shortLabel ?? announcement.link.label }),
702
+ /* @__PURE__ */ jsx12(ArrowRightIcon, { size: 14 })
703
+ ] }) : null
704
+ ] }),
705
+ /* @__PURE__ */ jsx12(CloseButton, { size: "sm", label: labels.dismiss ?? "Dismiss the announcement", onClick: dismiss })
706
+ ] }) })
707
+ }
708
+ ),
709
+ /* @__PURE__ */ jsx12("header", { className: "ow-header04__header", children: /* @__PURE__ */ jsxs13("div", { className: "ow-header04__inner", children: [
710
+ /* @__PURE__ */ jsx12(BlockBrandLink, { ref: brandRef, brand, className: "ow-header04__brand" }),
711
+ /* @__PURE__ */ jsx12("nav", { className: "ow-header04__nav", "aria-label": "Main", children: links.map((link, index) => /* @__PURE__ */ jsx12(
712
+ Link6,
713
+ {
714
+ href: link.href,
715
+ variant: "standalone",
716
+ className: "ow-header04__link-plain",
717
+ "aria-current": link.current ? "page" : void 0,
718
+ children: link.label
719
+ },
720
+ index
721
+ )) }),
722
+ /* @__PURE__ */ jsxs13("div", { className: "ow-header04__actions", children: [
723
+ secondaryLink ? /* @__PURE__ */ jsx12(Link6, { href: secondaryLink.href, variant: "standalone", className: "ow-header04__link-plain", children: secondaryLink.label }) : null,
724
+ /* @__PURE__ */ jsx12(BlockActionButton, { action: primaryAction, variant: "primary", size: "sm" }),
725
+ /* @__PURE__ */ jsx12("span", { className: "ow-header04__phone-menu", children: /* @__PURE__ */ jsxs13(
726
+ Menu2,
727
+ {
728
+ label: labels.menu ?? "Menu",
729
+ align: "end",
730
+ width: 220,
731
+ trigger: /* @__PURE__ */ jsx12(Button6, { variant: "ghost", size: "sm", iconOnly: true, "aria-label": labels.menu ?? "Menu", children: /* @__PURE__ */ jsx12(MenuIcon, { size: 18 }) }),
732
+ children: [
733
+ links.map((link, index) => /* @__PURE__ */ jsx12(MenuItem2, { onSelect: () => onNavigate(link.href), children: link.label }, index)),
734
+ secondaryLink ? /* @__PURE__ */ jsxs13(Fragment5, { children: [
735
+ /* @__PURE__ */ jsx12(MenuSeparator2, {}),
736
+ /* @__PURE__ */ jsx12(MenuItem2, { onSelect: () => onNavigate(secondaryLink.href), children: secondaryLink.label })
737
+ ] }) : null
738
+ ]
739
+ }
740
+ ) })
741
+ ] })
742
+ ] }) })
743
+ ] });
744
+ }
745
+
746
+ // blocks/src/headers/Header05/Header05.tsx
747
+ import { useEffect as useEffect5, useId as useId8, useState as useState6 } from "react";
748
+ import { Button as Button7, buttonClassName as buttonClassName4, cx as cx12, Drawer, Link as Link7, Text as Text9 } from "@openwarelabs/ui";
749
+ import { Fragment as Fragment6, jsx as jsx13, jsxs as jsxs14 } from "react/jsx-runtime";
750
+ var narrow = "(max-width: 1024px)";
751
+ function Header05({ brand, links, more, primaryAction, secondaryLink, defaultOpen = false, labels = {}, className, ...props }) {
752
+ const [open, setOpen] = useState6(defaultOpen);
753
+ const moreId = useId8();
754
+ useEffect5(() => {
755
+ const query = window.matchMedia(narrow);
756
+ const onChange = () => !query.matches && setOpen(false);
757
+ query.addEventListener("change", onChange);
758
+ return () => query.removeEventListener("change", onChange);
759
+ }, []);
760
+ const close = () => setOpen(false);
761
+ return /* @__PURE__ */ jsxs14(Fragment6, { children: [
762
+ /* @__PURE__ */ jsx13("header", { className: cx12("ow-header05", className), ...props, children: /* @__PURE__ */ jsxs14("div", { className: "ow-header05__inner", children: [
763
+ /* @__PURE__ */ jsx13(BlockBrandLink, { brand, className: "ow-header05__brand" }),
764
+ /* @__PURE__ */ jsx13("nav", { className: "ow-header05__nav", "aria-label": "Main", children: links.map((link, index) => /* @__PURE__ */ jsx13(
765
+ Link7,
766
+ {
767
+ href: link.href,
768
+ variant: "standalone",
769
+ className: "ow-header05__link",
770
+ "aria-current": link.current ? "page" : void 0,
771
+ children: link.label
772
+ },
773
+ index
774
+ )) }),
775
+ /* @__PURE__ */ jsxs14("div", { className: "ow-header05__actions", children: [
776
+ secondaryLink ? /* @__PURE__ */ jsx13(Link7, { href: secondaryLink.href, variant: "standalone", className: "ow-header05__link", children: secondaryLink.label }) : null,
777
+ /* @__PURE__ */ jsx13(BlockActionButton, { action: primaryAction, variant: "primary", size: "sm" }),
778
+ /* @__PURE__ */ jsx13(
779
+ Button7,
780
+ {
781
+ className: "ow-header05__open",
782
+ variant: "ghost",
783
+ size: "sm",
784
+ iconOnly: true,
785
+ "aria-label": labels.open ?? "Open menu",
786
+ "aria-haspopup": "dialog",
787
+ "aria-expanded": open,
788
+ onClick: () => setOpen(true),
789
+ children: /* @__PURE__ */ jsx13(MenuIcon, { size: 18 })
790
+ }
791
+ )
792
+ ] })
793
+ ] }) }),
794
+ /* @__PURE__ */ jsx13(
795
+ Drawer,
796
+ {
797
+ className: "ow-header05__drawer",
798
+ open,
799
+ onClose: close,
800
+ title: labels.title ?? "Menu",
801
+ side: "right",
802
+ size: 320,
803
+ footer: /* @__PURE__ */ jsxs14(Fragment6, { children: [
804
+ secondaryLink ? /* @__PURE__ */ jsx13("a", { href: secondaryLink.href, className: buttonClassName4({ shape: "pill" }), onClick: close, children: secondaryLink.label }) : null,
805
+ /* @__PURE__ */ jsx13(BlockActionButton, { action: primaryAction, variant: "primary", size: "md", onAfterClick: close })
806
+ ] }),
807
+ children: /* @__PURE__ */ jsxs14("nav", { "aria-label": "Main", children: [
808
+ /* @__PURE__ */ jsx13("ul", { className: "ow-header05__drawer-list", children: links.map((link, index) => /* @__PURE__ */ jsx13("li", { children: /* @__PURE__ */ jsxs14(
809
+ Link7,
810
+ {
811
+ href: link.href,
812
+ variant: "standalone",
813
+ className: "ow-header05__drawer-link",
814
+ "aria-current": link.current ? "page" : void 0,
815
+ onClick: close,
816
+ children: [
817
+ link.label,
818
+ link.current ? /* @__PURE__ */ jsx13("span", { className: "ow-header05__current", "aria-hidden": "true" }) : null,
819
+ /* @__PURE__ */ jsx13(ChevronRightIcon, { size: 16 })
820
+ ]
821
+ }
822
+ ) }, index)) }),
823
+ more ? /* @__PURE__ */ jsxs14("div", { className: "ow-header05__more", children: [
824
+ /* @__PURE__ */ jsx13(Text9, { variant: "overline", as: "p", className: "ow-header05__more-label", id: moreId, children: more.title }),
825
+ /* @__PURE__ */ jsx13("ul", { className: "ow-header05__more-list", "aria-labelledby": moreId, children: more.links.map((link, index) => /* @__PURE__ */ jsx13("li", { children: /* @__PURE__ */ jsx13(Link7, { href: link.href, variant: "standalone", className: "ow-header05__more-link", onClick: close, children: link.label }) }, index)) })
826
+ ] }) : null
827
+ ] })
828
+ }
829
+ )
830
+ ] });
831
+ }
832
+
833
+ // blocks/src/pricing/Pricing01/Pricing01.tsx
834
+ import { useId as useId9 } from "react";
835
+ import { Badge as Badge2, Card, cx as cx13, Link as Link8, SectionHeading, Text as Text10 } from "@openwarelabs/ui";
836
+ import { jsx as jsx14, jsxs as jsxs15 } from "react/jsx-runtime";
837
+ function Pricing01({ eyebrow, title, description, plans, enterprise, note, className, ...props }) {
838
+ const id = useId9();
839
+ return /* @__PURE__ */ jsx14("section", { className: cx13("ow-pricing01", className), "aria-labelledby": `${id}-title`, ...props, children: /* @__PURE__ */ jsxs15("div", { className: "ow-pricing01__inner", children: [
840
+ /* @__PURE__ */ jsx14(SectionHeading, { align: "center", eyebrow, title: /* @__PURE__ */ jsx14("span", { id: `${id}-title`, children: title }), intro: description }),
841
+ /* @__PURE__ */ jsx14("div", { className: "ow-pricing01__grid", children: plans.map((plan, index) => /* @__PURE__ */ jsxs15(
842
+ Card,
843
+ {
844
+ padding: "none",
845
+ className: "ow-pricing01__card",
846
+ "data-recommended": plan.recommended || void 0,
847
+ "aria-labelledby": `${id}-plan-${index}`,
848
+ role: "group",
849
+ children: [
850
+ /* @__PURE__ */ jsxs15("div", { className: "ow-pricing01__head", children: [
851
+ /* @__PURE__ */ jsxs15("div", { className: "ow-pricing01__name-row", children: [
852
+ /* @__PURE__ */ jsx14(Text10, { variant: "card-title", id: `${id}-plan-${index}`, children: plan.name }),
853
+ plan.badge ? /* @__PURE__ */ jsx14(Badge2, { size: "sm", variant: "active", children: plan.badge }) : null
854
+ ] }),
855
+ plan.summary ? /* @__PURE__ */ jsx14(Text10, { variant: "copy", className: "ow-pricing01__summary", children: plan.summary }) : null,
856
+ /* @__PURE__ */ jsxs15(Text10, { as: "p", variant: "body", tone: "muted", className: "ow-pricing01__price", children: [
857
+ /* @__PURE__ */ jsx14(Text10, { as: "span", variant: "section-title", tone: "default", className: "ow-pricing01__amount", children: plan.price }),
858
+ plan.unit
859
+ ] }),
860
+ /* @__PURE__ */ jsx14(BlockActionButton, { action: plan.action, variant: plan.recommended ? "primary" : "secondary", size: "md", fullWidth: true })
861
+ ] }),
862
+ /* @__PURE__ */ jsxs15("div", { className: "ow-pricing01__body", children: [
863
+ plan.featuresTitle ? /* @__PURE__ */ jsx14(Text10, { as: "p", variant: "label", children: plan.featuresTitle }) : null,
864
+ /* @__PURE__ */ jsx14("ul", { className: "ow-pricing01__features", children: plan.features.map((feature, featureIndex) => /* @__PURE__ */ jsxs15(Text10, { as: "li", variant: "body", tone: "soft", children: [
865
+ /* @__PURE__ */ jsx14(CheckIcon, { size: 16 }),
866
+ feature
867
+ ] }, featureIndex)) })
868
+ ] })
869
+ ]
870
+ },
871
+ index
872
+ )) }),
873
+ enterprise ? /* @__PURE__ */ jsxs15("div", { className: "ow-pricing01__enterprise", children: [
874
+ enterprise.icon ? /* @__PURE__ */ jsx14("span", { className: "ow-pricing01__enterprise-icon", "aria-hidden": "true", children: enterprise.icon }) : null,
875
+ /* @__PURE__ */ jsxs15(Text10, { variant: "copy", className: "ow-pricing01__enterprise-text", children: [
876
+ /* @__PURE__ */ jsx14(Text10, { as: "strong", variant: "label", tone: "default", children: enterprise.title }),
877
+ " ",
878
+ enterprise.description
879
+ ] }),
880
+ /* @__PURE__ */ jsxs15(Link8, { href: enterprise.link.href, variant: "standalone", className: "ow-pricing01__enterprise-link", children: [
881
+ enterprise.link.label,
882
+ /* @__PURE__ */ jsx14(ArrowRightIcon, { size: 14 })
883
+ ] })
884
+ ] }) : null,
885
+ note ? /* @__PURE__ */ jsx14(Text10, { as: "p", variant: "caption", align: "center", className: "ow-pricing01__note", children: note }) : null
886
+ ] }) });
887
+ }
888
+
889
+ // blocks/src/pricing/Pricing02/Pricing02.tsx
890
+ import { useId as useId10, useState as useState7 } from "react";
891
+ import { Badge as Badge3, cx as cx14, SectionHeading as SectionHeading2, SegmentedControl, Text as Text11, VisuallyHidden } from "@openwarelabs/ui";
892
+ import { jsx as jsx15, jsxs as jsxs16 } from "react/jsx-runtime";
893
+ var priceFor = (plan, period) => "amount" in plan.price ? plan.price : plan.price[period];
894
+ var includes = (name) => `${name} includes`;
895
+ function Pricing02({
896
+ eyebrow,
897
+ title,
898
+ description,
899
+ plans,
900
+ periodNote,
901
+ defaultPeriod = "monthly",
902
+ onPeriodChange,
903
+ note,
904
+ labels = {},
905
+ className,
906
+ ...props
907
+ }) {
908
+ const [period, setPeriod] = useState7(defaultPeriod);
909
+ const id = useId10();
910
+ return /* @__PURE__ */ jsx15("section", { className: cx14("ow-pricing02", className), "aria-labelledby": `${id}-title`, ...props, children: /* @__PURE__ */ jsxs16("div", { className: "ow-pricing02__inner", children: [
911
+ /* @__PURE__ */ jsxs16("div", { className: "ow-pricing02__header", children: [
912
+ /* @__PURE__ */ jsx15(SectionHeading2, { eyebrow, title: /* @__PURE__ */ jsx15("span", { id: `${id}-title`, children: title }), intro: description }),
913
+ /* @__PURE__ */ jsxs16("div", { className: "ow-pricing02__switch", children: [
914
+ /* @__PURE__ */ jsx15(
915
+ SegmentedControl,
916
+ {
917
+ "aria-label": labels.period ?? "Billing period",
918
+ value: period,
919
+ onChange: (value) => {
920
+ setPeriod(value);
921
+ onPeriodChange?.(value);
922
+ },
923
+ options: [
924
+ { value: "monthly", label: labels.monthly ?? "Monthly" },
925
+ { value: "yearly", label: labels.yearly ?? "Yearly" }
926
+ ]
927
+ }
928
+ ),
929
+ periodNote ? /* @__PURE__ */ jsx15(Text11, { as: "p", variant: "caption", children: periodNote }) : null
930
+ ] })
931
+ ] }),
932
+ /* @__PURE__ */ jsx15(VisuallyHidden, { "aria-live": "polite", children: period === "yearly" ? labels.showingYearly ?? "Showing yearly prices." : labels.showingMonthly ?? "Showing monthly prices." }),
933
+ /* @__PURE__ */ jsx15("div", { className: "ow-pricing02__panel", children: plans.map((plan, index) => {
934
+ const price = priceFor(plan, period);
935
+ return /* @__PURE__ */ jsxs16("div", { className: "ow-pricing02__plan", "data-popular": plan.recommended || void 0, children: [
936
+ /* @__PURE__ */ jsxs16("div", { className: "ow-pricing02__name-row", children: [
937
+ /* @__PURE__ */ jsx15(Text11, { variant: "card-title", children: plan.name }),
938
+ plan.badge ? /* @__PURE__ */ jsx15(Badge3, { size: "sm", variant: "active", children: plan.badge }) : null
939
+ ] }),
940
+ plan.summary ? /* @__PURE__ */ jsx15(Text11, { variant: "copy", className: "ow-pricing02__summary", children: plan.summary }) : null,
941
+ /* @__PURE__ */ jsxs16("div", { className: "ow-pricing02__price", children: [
942
+ /* @__PURE__ */ jsxs16(Text11, { as: "p", variant: "body", tone: "muted", className: "ow-pricing02__figure", children: [
943
+ /* @__PURE__ */ jsx15(
944
+ Text11,
945
+ {
946
+ as: "span",
947
+ variant: "section-title",
948
+ tone: "default",
949
+ className: price.custom ? "ow-pricing02__amount ow-pricing02__amount--text" : "ow-pricing02__amount",
950
+ children: price.amount
951
+ },
952
+ price.amount
953
+ ),
954
+ price.unit
955
+ ] }),
956
+ price.billing ? /* @__PURE__ */ jsx15(Text11, { as: "p", variant: "caption", className: "ow-pricing02__billing", children: price.billing }) : null
957
+ ] }),
958
+ /* @__PURE__ */ jsx15(BlockActionButton, { action: plan.action, variant: plan.recommended ? "primary" : "secondary", size: "md", fullWidth: true }),
959
+ /* @__PURE__ */ jsx15("ul", { className: "ow-pricing02__features", "aria-label": (labels.includes ?? includes)(plan.name), children: plan.features.map((feature, featureIndex) => /* @__PURE__ */ jsxs16(Text11, { as: "li", variant: "body", tone: "soft", children: [
960
+ /* @__PURE__ */ jsx15(CheckIcon, { size: 16 }),
961
+ feature
962
+ ] }, featureIndex)) })
963
+ ] }, index);
964
+ }) }),
965
+ note ? /* @__PURE__ */ jsx15(Text11, { as: "p", variant: "caption", align: "center", className: "ow-pricing02__note", children: note }) : null
966
+ ] }) });
967
+ }
968
+
969
+ // blocks/src/pricing/Pricing03/Pricing03.tsx
970
+ import { useId as useId11, useState as useState8, useSyncExternalStore } from "react";
971
+ import { Badge as Badge4, cx as cx15, SectionHeading as SectionHeading3, SegmentedControl as SegmentedControl2, Table, Text as Text12, VisuallyHidden as VisuallyHidden2 } from "@openwarelabs/ui";
972
+ import { jsx as jsx16, jsxs as jsxs17 } from "react/jsx-runtime";
973
+ var phoneQuery = "(max-width: 760px)";
974
+ function useIsPhone() {
975
+ return useSyncExternalStore(
976
+ (onChange) => {
977
+ const list = window.matchMedia(phoneQuery);
978
+ list.addEventListener("change", onChange);
979
+ return () => list.removeEventListener("change", onChange);
980
+ },
981
+ () => window.matchMedia(phoneQuery).matches,
982
+ () => false
983
+ );
984
+ }
985
+ var caption = (title) => `${title}, by plan`;
986
+ function Pricing03({ eyebrow, title, description, plans, groups, pricesNote, defaultPlan, note, labels = {}, className, ...props }) {
987
+ const id = useId11();
988
+ const isPhone = useIsPhone();
989
+ const [picked, setPicked] = useState8(() => defaultPlan ?? (plans.find((plan) => plan.recommended) ?? plans[0])?.id ?? "");
990
+ const shown = isPhone ? plans.filter((plan) => plan.id === picked) : plans;
991
+ const cell = (value) => {
992
+ if (value === true) {
993
+ return /* @__PURE__ */ jsxs17("span", { className: "ow-pricing03__yes", children: [
994
+ /* @__PURE__ */ jsx16(CheckIcon, { size: 14, strokeWidth: 2.5 }),
995
+ /* @__PURE__ */ jsx16(VisuallyHidden2, { children: labels.included ?? "Included" })
996
+ ] });
997
+ }
998
+ if (value === false) {
999
+ return /* @__PURE__ */ jsxs17("span", { className: "ow-pricing03__no", children: [
1000
+ /* @__PURE__ */ jsx16(MinusIcon, { size: 16 }),
1001
+ /* @__PURE__ */ jsx16(VisuallyHidden2, { children: labels.notIncluded ?? "Not included" })
1002
+ ] });
1003
+ }
1004
+ return value;
1005
+ };
1006
+ const columns = (groupTitle) => [
1007
+ {
1008
+ key: "feature",
1009
+ header: groupTitle,
1010
+ render: (row) => /* @__PURE__ */ jsxs17(Text12, { as: "span", variant: "body", className: "ow-pricing03__feature", children: [
1011
+ row.feature,
1012
+ row.note ? /* @__PURE__ */ jsx16(Text12, { variant: "caption", className: "ow-pricing03__feature-note", children: row.note }) : null
1013
+ ] })
1014
+ },
1015
+ ...shown.map((plan) => ({
1016
+ key: plan.id,
1017
+ header: plan.name,
1018
+ render: (row) => cell(row.values[plan.id])
1019
+ }))
1020
+ ];
1021
+ return /* @__PURE__ */ jsx16("section", { className: cx15("ow-pricing03", className), "aria-labelledby": `${id}-title`, ...props, children: /* @__PURE__ */ jsxs17("div", { className: "ow-pricing03__inner", children: [
1022
+ /* @__PURE__ */ jsx16(SectionHeading3, { align: "center", eyebrow, title: /* @__PURE__ */ jsx16("span", { id: `${id}-title`, children: title }), intro: description }),
1023
+ /* @__PURE__ */ jsx16("div", { className: "ow-pricing03__picker", children: /* @__PURE__ */ jsx16(
1024
+ SegmentedControl2,
1025
+ {
1026
+ "aria-label": labels.picker ?? "Plan to compare",
1027
+ fullWidth: true,
1028
+ value: picked,
1029
+ onChange: setPicked,
1030
+ options: plans.map((plan) => ({ value: plan.id, label: plan.name }))
1031
+ }
1032
+ ) }),
1033
+ /* @__PURE__ */ jsxs17("div", { className: "ow-pricing03__plans", children: [
1034
+ pricesNote ? /* @__PURE__ */ jsx16(Text12, { as: "p", variant: "caption", className: "ow-pricing03__plans-label", children: pricesNote }) : null,
1035
+ shown.map((plan) => /* @__PURE__ */ jsxs17("div", { className: "ow-pricing03__plan", children: [
1036
+ /* @__PURE__ */ jsxs17(Text12, { as: "p", variant: "card-title", className: "ow-pricing03__plan-name", children: [
1037
+ plan.name,
1038
+ plan.badge ? /* @__PURE__ */ jsx16(Badge4, { size: "sm", variant: "active", children: plan.badge }) : null
1039
+ ] }),
1040
+ /* @__PURE__ */ jsxs17(Text12, { as: "p", variant: "caption", className: "ow-pricing03__plan-price", children: [
1041
+ /* @__PURE__ */ jsx16(Text12, { as: "strong", variant: "label", tone: "default", className: "ow-pricing03__plan-amount", children: plan.price }),
1042
+ " ",
1043
+ plan.unit
1044
+ ] }),
1045
+ /* @__PURE__ */ jsx16(BlockActionButton, { action: plan.action, variant: plan.recommended ? "primary" : "secondary", size: "sm" })
1046
+ ] }, plan.id))
1047
+ ] }),
1048
+ /* @__PURE__ */ jsx16("div", { className: "ow-pricing03__groups", children: groups.map((group) => /* @__PURE__ */ jsx16(
1049
+ Table,
1050
+ {
1051
+ className: "ow-pricing03__group",
1052
+ caption: (labels.caption ?? caption)(group.title),
1053
+ hideCaption: true,
1054
+ columns: columns(group.title),
1055
+ rows: group.rows.map((row, index) => ({ ...row, id: `${group.title}-${index}` }))
1056
+ },
1057
+ group.title
1058
+ )) }),
1059
+ note ? /* @__PURE__ */ jsx16(Text12, { as: "p", variant: "caption", align: "center", className: "ow-pricing03__note", children: note }) : null
1060
+ ] }) });
1061
+ }
1062
+
1063
+ // blocks/src/pricing/Pricing04/Pricing04.tsx
1064
+ import { useId as useId12 } from "react";
1065
+ import { Card as Card2, cx as cx16, SectionHeading as SectionHeading4, Text as Text13 } from "@openwarelabs/ui";
1066
+ import { jsx as jsx17, jsxs as jsxs18 } from "react/jsx-runtime";
1067
+ function Pricing04({ eyebrow, title, description, product, offer, promises, className, ...props }) {
1068
+ const id = useId12();
1069
+ return /* @__PURE__ */ jsx17("section", { className: cx16("ow-pricing04", className), "aria-labelledby": `${id}-title`, ...props, children: /* @__PURE__ */ jsxs18("div", { className: "ow-pricing04__inner", children: [
1070
+ /* @__PURE__ */ jsx17(SectionHeading4, { align: "center", eyebrow, title: /* @__PURE__ */ jsx17("span", { id: `${id}-title`, children: title }), intro: description }),
1071
+ /* @__PURE__ */ jsxs18(Card2, { padding: "none", className: "ow-pricing04__card", children: [
1072
+ /* @__PURE__ */ jsxs18("div", { className: "ow-pricing04__details", children: [
1073
+ /* @__PURE__ */ jsx17(Text13, { variant: "heading", children: product.name }),
1074
+ product.description ? /* @__PURE__ */ jsx17(Text13, { variant: "copy", className: "ow-pricing04__description", children: product.description }) : null,
1075
+ product.featuresTitle ? /* @__PURE__ */ jsx17(Text13, { as: "p", variant: "label", tone: "primary", className: "ow-pricing04__included", children: product.featuresTitle }) : null,
1076
+ /* @__PURE__ */ jsx17("ul", { className: "ow-pricing04__features", children: product.features.map((feature, index) => /* @__PURE__ */ jsxs18(Text13, { as: "li", variant: "body", tone: "soft", children: [
1077
+ /* @__PURE__ */ jsx17(CheckIcon, { size: 16 }),
1078
+ feature
1079
+ ] }, index)) })
1080
+ ] }),
1081
+ /* @__PURE__ */ jsxs18("div", { className: "ow-pricing04__offer", children: [
1082
+ offer.label ? /* @__PURE__ */ jsx17(Text13, { as: "p", variant: "label", tone: "soft", children: offer.label }) : null,
1083
+ /* @__PURE__ */ jsxs18(Text13, { as: "p", variant: "label", tone: "muted", className: "ow-pricing04__price", children: [
1084
+ /* @__PURE__ */ jsx17(Text13, { as: "span", variant: "page-title", tone: "default", className: "ow-pricing04__amount", children: offer.price }),
1085
+ offer.currency
1086
+ ] }),
1087
+ offer.unit ? /* @__PURE__ */ jsx17(Text13, { variant: "body", tone: "muted", className: "ow-pricing04__unit", children: offer.unit }) : null,
1088
+ /* @__PURE__ */ jsx17(BlockActionButton, { action: offer.action, variant: "primary", fullWidth: true }),
1089
+ offer.note ? /* @__PURE__ */ jsx17(Text13, { as: "p", variant: "caption", className: "ow-pricing04__fine", children: offer.note }) : null
1090
+ ] })
1091
+ ] }),
1092
+ promises?.length ? /* @__PURE__ */ jsx17("ul", { className: "ow-pricing04__promises", children: promises.map((promise, index) => /* @__PURE__ */ jsxs18(Text13, { as: "li", variant: "body", tone: "muted", children: [
1093
+ promise.icon,
1094
+ promise.text
1095
+ ] }, index)) }) : null
1096
+ ] }) });
1097
+ }
1098
+
1099
+ // blocks/src/pricing/Pricing05/Pricing05.tsx
1100
+ import { useId as useId13, useMemo, useState as useState9 } from "react";
1101
+ import { Card as Card3, cx as cx17, SectionHeading as SectionHeading5, Slider, Text as Text14 } from "@openwarelabs/ui";
1102
+ import { Fragment as Fragment7, jsx as jsx18, jsxs as jsxs19 } from "react/jsx-runtime";
1103
+ function estimate(tiers, units) {
1104
+ const lines = tiers.map((tier) => {
1105
+ const count = Math.max(0, Math.min(units, tier.to) - tier.from);
1106
+ return { tier, count, cost: count * tier.price };
1107
+ });
1108
+ return { lines, total: lines.reduce((sum, line) => sum + line.cost, 0) };
1109
+ }
1110
+ var capitalise = (text) => text.charAt(0).toUpperCase() + text.slice(1);
1111
+ function Pricing05({
1112
+ eyebrow,
1113
+ title,
1114
+ description,
1115
+ tiers,
1116
+ aside,
1117
+ estimate: words,
1118
+ max,
1119
+ step = max / 200,
1120
+ defaultValue,
1121
+ marks = [0, max / 4, max / 2, max * 3 / 4, max],
1122
+ currency = "EUR",
1123
+ locale,
1124
+ action,
1125
+ note,
1126
+ labels = {},
1127
+ className,
1128
+ ...props
1129
+ }) {
1130
+ const id = useId13();
1131
+ const [units, setUnits] = useState9(defaultValue);
1132
+ const { lines, total } = estimate(tiers, units);
1133
+ const current = tiers.findIndex((tier) => units <= tier.to);
1134
+ const unit = labels.unit ?? "unit";
1135
+ const plural = labels.units ?? "units";
1136
+ const perMonth = labels.perMonth ?? `${plural} a month`;
1137
+ const format = useMemo(() => {
1138
+ const number = new Intl.NumberFormat(locale);
1139
+ const money = new Intl.NumberFormat(locale, { style: "currency", currency });
1140
+ const unitPrice = new Intl.NumberFormat(locale, { style: "currency", currency, minimumFractionDigits: 2, maximumFractionDigits: 3 });
1141
+ return { number: (value) => number.format(value), money: (value) => money.format(value), unitPrice: (value) => unitPrice.format(value) };
1142
+ }, [locale, currency]);
1143
+ const rangeLabel = (tier) => {
1144
+ if (tier.from === 0) return `First ${format.number(tier.to)} ${plural}`;
1145
+ if (tier.to === Infinity) return `Over ${format.number(tier.from)}`;
1146
+ return `${format.number(tier.from + 1)} to ${format.number(tier.to)}`;
1147
+ };
1148
+ const mark = (value) => value === 0 ? "0" : value >= 1e3 && value % 1e3 === 0 ? `${value / 1e3}k` : format.number(value);
1149
+ return /* @__PURE__ */ jsx18("section", { className: cx17("ow-pricing05", className), "aria-labelledby": `${id}-title`, ...props, children: /* @__PURE__ */ jsxs19("div", { className: "ow-pricing05__inner", children: [
1150
+ /* @__PURE__ */ jsxs19("div", { children: [
1151
+ /* @__PURE__ */ jsx18(SectionHeading5, { eyebrow, title: /* @__PURE__ */ jsx18("span", { id: `${id}-title`, children: title }), intro: description }),
1152
+ /* @__PURE__ */ jsx18("ul", { className: "ow-pricing05__tiers", "aria-label": labels.tiers ?? `Price per ${unit}`, children: tiers.map((tier, index) => /* @__PURE__ */ jsxs19("li", { className: "ow-pricing05__tier", "data-current": index === current || void 0, children: [
1153
+ /* @__PURE__ */ jsx18("span", { className: "ow-pricing05__tier-dot", "aria-hidden": "true" }),
1154
+ /* @__PURE__ */ jsx18(Text14, { variant: index === current ? "label" : "body", tone: index === current ? "default" : "soft", children: rangeLabel(tier) }),
1155
+ /* @__PURE__ */ jsx18(Text14, { variant: "label", className: "ow-pricing05__tier-price", children: tier.price === 0 ? labels.free ?? "Free" : /* @__PURE__ */ jsxs19(Fragment7, { children: [
1156
+ format.unitPrice(tier.price),
1157
+ /* @__PURE__ */ jsxs19(Text14, { as: "small", variant: "caption", className: "ow-pricing05__tier-unit", children: [
1158
+ "a ",
1159
+ unit
1160
+ ] })
1161
+ ] }) })
1162
+ ] }, tier.from)) }),
1163
+ aside ? /* @__PURE__ */ jsx18(Text14, { variant: "copy", className: "ow-pricing05__aside", children: aside }) : null
1164
+ ] }),
1165
+ /* @__PURE__ */ jsxs19(Card3, { padding: "none", className: "ow-pricing05__card", children: [
1166
+ /* @__PURE__ */ jsx18(Text14, { variant: "card-title", children: words.title }),
1167
+ words.description ? /* @__PURE__ */ jsx18(Text14, { variant: "copy", className: "ow-pricing05__card-intro", children: words.description }) : null,
1168
+ /* @__PURE__ */ jsxs19(Text14, { as: "p", variant: "heading", className: "ow-pricing05__runs", "aria-hidden": "true", children: [
1169
+ format.number(units),
1170
+ " ",
1171
+ /* @__PURE__ */ jsx18(Text14, { as: "small", variant: "body", tone: "muted", className: "ow-pricing05__runs-unit", children: perMonth })
1172
+ ] }),
1173
+ /* @__PURE__ */ jsx18(
1174
+ Slider,
1175
+ {
1176
+ "aria-label": labels.slider ?? capitalise(perMonth),
1177
+ showValue: false,
1178
+ min: 0,
1179
+ max,
1180
+ step,
1181
+ value: units,
1182
+ onChange: setUnits,
1183
+ formatValue: (value) => `${format.number(value)} ${plural}, about ${format.money(estimate(tiers, value).total)} a month`
1184
+ }
1185
+ ),
1186
+ /* @__PURE__ */ jsx18("div", { className: "ow-pricing05__scale", "aria-hidden": "true", children: marks.map((value) => /* @__PURE__ */ jsx18("span", { children: mark(value) }, value)) }),
1187
+ /* @__PURE__ */ jsx18("div", { className: "ow-pricing05__breakdown", children: lines.map(({ tier, count, cost }) => /* @__PURE__ */ jsxs19(Text14, { as: "div", variant: "body", tone: "soft", className: "ow-pricing05__line", "data-idle": count === 0 || void 0, children: [
1188
+ /* @__PURE__ */ jsxs19("span", { children: [
1189
+ format.number(count),
1190
+ " ",
1191
+ plural,
1192
+ " ",
1193
+ tier.price === 0 ? (labels.free ?? "Free").toLowerCase() : `at ${format.unitPrice(tier.price)}`
1194
+ ] }),
1195
+ /* @__PURE__ */ jsx18("span", { children: format.money(cost) })
1196
+ ] }, tier.from)) }),
1197
+ /* @__PURE__ */ jsxs19("div", { className: "ow-pricing05__total", children: [
1198
+ /* @__PURE__ */ jsxs19(Text14, { as: "p", variant: "label", children: [
1199
+ words.totalLabel,
1200
+ words.totalNote ? /* @__PURE__ */ jsx18(Text14, { as: "small", variant: "caption", className: "ow-pricing05__total-note", children: words.totalNote }) : null
1201
+ ] }),
1202
+ /* @__PURE__ */ jsx18(Text14, { as: "p", variant: "section-title", className: "ow-pricing05__total-amount", children: format.money(total) })
1203
+ ] }),
1204
+ /* @__PURE__ */ jsx18(BlockActionButton, { action, variant: "primary", fullWidth: true, className: "ow-pricing05__action" }),
1205
+ note ? /* @__PURE__ */ jsx18(Text14, { as: "p", variant: "caption", align: "center", className: "ow-pricing05__fine", children: note }) : null
1206
+ ] })
1207
+ ] }) });
1208
+ }
1209
+
1210
+ // blocks/src/features/Features01/Features01.tsx
1211
+ import { useId as useId14 } from "react";
1212
+ import { cx as cx18, SectionHeading as SectionHeading6, Text as Text15 } from "@openwarelabs/ui";
1213
+ import { jsx as jsx19, jsxs as jsxs20 } from "react/jsx-runtime";
1214
+ function Features01({ eyebrow, title, description, features, footer, className, ...props }) {
1215
+ const id = useId14();
1216
+ return /* @__PURE__ */ jsx19("section", { className: cx18("ow-features01", className), "aria-labelledby": `${id}-title`, ...props, children: /* @__PURE__ */ jsxs20("div", { className: "ow-features01__inner", children: [
1217
+ /* @__PURE__ */ jsx19(SectionHeading6, { align: "center", eyebrow, title: /* @__PURE__ */ jsx19("span", { id: `${id}-title`, children: title }), intro: description }),
1218
+ /* @__PURE__ */ jsx19("ul", { className: "ow-features01__grid", children: features.map((feature, index) => /* @__PURE__ */ jsxs20("li", { className: "ow-features01__item", children: [
1219
+ feature.icon ? /* @__PURE__ */ jsx19("span", { className: "ow-features01__icon", "aria-hidden": "true", children: feature.icon }) : null,
1220
+ /* @__PURE__ */ jsx19(Text15, { variant: "card-title", className: "ow-features01__title", children: feature.title }),
1221
+ /* @__PURE__ */ jsx19(Text15, { variant: "copy", className: "ow-features01__text", children: feature.description })
1222
+ ] }, index)) }),
1223
+ footer ? /* @__PURE__ */ jsx19(Text15, { variant: "copy", align: "center", className: "ow-features01__more", children: footer }) : null
1224
+ ] }) });
1225
+ }
1226
+
1227
+ // blocks/src/features/Features02/Features02.tsx
1228
+ import { useId as useId15 } from "react";
1229
+ import { cx as cx19, DotGrid as DotGrid2, Link as Link9, SectionHeading as SectionHeading7, Text as Text16 } from "@openwarelabs/ui";
1230
+ import { jsx as jsx20, jsxs as jsxs21 } from "react/jsx-runtime";
1231
+ function Features02({ eyebrow, title, description, rows, className, ...props }) {
1232
+ const id = useId15();
1233
+ return /* @__PURE__ */ jsx20("section", { className: cx19("ow-features02", className), "aria-labelledby": `${id}-title`, ...props, children: /* @__PURE__ */ jsxs21("div", { className: "ow-features02__inner", children: [
1234
+ /* @__PURE__ */ jsx20(SectionHeading7, { eyebrow, title: /* @__PURE__ */ jsx20("span", { id: `${id}-title`, children: title }), intro: description }),
1235
+ /* @__PURE__ */ jsx20("div", { className: "ow-features02__rows", children: rows.map((row, index) => /* @__PURE__ */ jsxs21("article", { className: "ow-features02__row", "aria-labelledby": `${id}-row-${index}`, children: [
1236
+ /* @__PURE__ */ jsxs21("div", { className: "ow-features02__copy", children: [
1237
+ row.kicker || row.icon ? /* @__PURE__ */ jsxs21(Text16, { variant: "label", tone: "primary", className: "ow-features02__kicker", children: [
1238
+ row.icon,
1239
+ row.kicker
1240
+ ] }) : null,
1241
+ /* @__PURE__ */ jsx20(Text16, { variant: "heading", id: `${id}-row-${index}`, className: "ow-features02__title", children: row.title }),
1242
+ /* @__PURE__ */ jsx20(Text16, { variant: "lead", className: "ow-features02__text", children: row.description }),
1243
+ row.points?.length ? /* @__PURE__ */ jsx20("ul", { className: "ow-features02__points", children: row.points.map((point, pointIndex) => /* @__PURE__ */ jsxs21(Text16, { as: "li", tone: "soft", className: "ow-features02__point", children: [
1244
+ /* @__PURE__ */ jsx20(CheckIcon, { size: 16 }),
1245
+ point
1246
+ ] }, pointIndex)) }) : null,
1247
+ row.link ? /* @__PURE__ */ jsxs21(Link9, { href: row.link.href, variant: "standalone", className: "ow-features02__link", children: [
1248
+ row.link.label,
1249
+ " \u2192"
1250
+ ] }) : null
1251
+ ] }),
1252
+ /* @__PURE__ */ jsx20(
1253
+ DotGrid2,
1254
+ {
1255
+ className: "ow-features02__stage",
1256
+ role: row.visualLabel ? "img" : void 0,
1257
+ "aria-label": row.visualLabel,
1258
+ children: row.visual
1259
+ }
1260
+ )
1261
+ ] }, index)) })
1262
+ ] }) });
1263
+ }
1264
+
1265
+ // blocks/src/features/Features03/Features03.tsx
1266
+ import { useId as useId16 } from "react";
1267
+ import { cx as cx20, SectionHeading as SectionHeading8, Text as Text17 } from "@openwarelabs/ui";
1268
+ import { jsx as jsx21, jsxs as jsxs22 } from "react/jsx-runtime";
1269
+ function Features03({ eyebrow, title, description, cards, className, ...props }) {
1270
+ const id = useId16();
1271
+ return /* @__PURE__ */ jsx21("section", { className: cx20("ow-features03", className), "aria-labelledby": `${id}-title`, ...props, children: /* @__PURE__ */ jsxs22("div", { className: "ow-features03__inner", children: [
1272
+ /* @__PURE__ */ jsxs22("div", { className: "ow-features03__header", children: [
1273
+ /* @__PURE__ */ jsx21(SectionHeading8, { eyebrow, title: /* @__PURE__ */ jsx21("span", { id: `${id}-title`, children: title }) }),
1274
+ description ? /* @__PURE__ */ jsx21(Text17, { variant: "lead", className: "ow-features03__intro", children: description }) : null
1275
+ ] }),
1276
+ /* @__PURE__ */ jsx21("div", { className: "ow-features03__grid", children: cards.map((card, index) => {
1277
+ const featured = index === 0;
1278
+ return /* @__PURE__ */ jsxs22(
1279
+ "article",
1280
+ {
1281
+ className: cx20(
1282
+ "ow-features03__card",
1283
+ featured && "ow-features03__card--featured",
1284
+ index === cards.length - 1 && index > 0 && "ow-features03__card--last"
1285
+ ),
1286
+ "aria-labelledby": `${id}-card-${index}`,
1287
+ children: [
1288
+ /* @__PURE__ */ jsxs22("div", { className: "ow-features03__copy", children: [
1289
+ /* @__PURE__ */ jsx21(Text17, { variant: featured ? "heading" : "card-title", id: `${id}-card-${index}`, children: card.title }),
1290
+ /* @__PURE__ */ jsx21(Text17, { variant: featured ? "lead" : "copy", className: "ow-features03__text", children: card.description })
1291
+ ] }),
1292
+ /* @__PURE__ */ jsx21("div", { className: "ow-features03__visual", role: card.visualLabel ? "img" : void 0, "aria-label": card.visualLabel, children: card.visual })
1293
+ ]
1294
+ },
1295
+ index
1296
+ );
1297
+ }) })
1298
+ ] }) });
1299
+ }
1300
+
1301
+ // blocks/src/features/Features04/Features04.tsx
1302
+ import { useId as useId17 } from "react";
1303
+ import { cx as cx21, SectionHeading as SectionHeading9, Tab, TabList, TabPanel, Tabs, Text as Text18 } from "@openwarelabs/ui";
1304
+ import { jsx as jsx22, jsxs as jsxs23 } from "react/jsx-runtime";
1305
+ function Features04({ eyebrow, title, description, tabs, defaultTab = 0, labels = {}, className, ...props }) {
1306
+ const id = useId17();
1307
+ return /* @__PURE__ */ jsx22("section", { className: cx21("ow-features04", className), "aria-labelledby": `${id}-title`, ...props, children: /* @__PURE__ */ jsxs23("div", { className: "ow-features04__inner", children: [
1308
+ /* @__PURE__ */ jsx22(SectionHeading9, { align: "center", eyebrow, title: /* @__PURE__ */ jsx22("span", { id: `${id}-title`, children: title }), intro: description }),
1309
+ /* @__PURE__ */ jsxs23(Tabs, { defaultValue: String(defaultTab), className: "ow-features04__tabs", children: [
1310
+ /* @__PURE__ */ jsx22(TabList, { "aria-label": labels.tabs ?? "Features", children: tabs.map((tab, index) => /* @__PURE__ */ jsx22(Tab, { value: String(index), icon: tab.icon, children: tab.label }, index)) }),
1311
+ tabs.map((tab, index) => /* @__PURE__ */ jsxs23(TabPanel, { value: String(index), className: "ow-features04__panel", children: [
1312
+ tab.caption ? /* @__PURE__ */ jsx22(Text18, { variant: "copy", align: "center", className: "ow-features04__caption", children: tab.caption }) : null,
1313
+ tab.visual
1314
+ ] }, index))
1315
+ ] })
1316
+ ] }) });
1317
+ }
1318
+
1319
+ // blocks/src/features/Features05/Features05.tsx
1320
+ import { useId as useId18 } from "react";
1321
+ import { cx as cx22, Link as Link10, SectionHeading as SectionHeading10, Text as Text19 } from "@openwarelabs/ui";
1322
+ import { jsx as jsx23, jsxs as jsxs24 } from "react/jsx-runtime";
1323
+ function Features05({ eyebrow, title, description, items, primaryAction, secondaryLink, visual, className, ...props }) {
1324
+ const id = useId18();
1325
+ return /* @__PURE__ */ jsx23("section", { className: cx22("ow-features05", className), "aria-labelledby": `${id}-title`, ...props, children: /* @__PURE__ */ jsxs24("div", { className: "ow-features05__inner", children: [
1326
+ /* @__PURE__ */ jsxs24("div", { className: "ow-features05__copy", children: [
1327
+ /* @__PURE__ */ jsx23(SectionHeading10, { eyebrow, title: /* @__PURE__ */ jsx23("span", { id: `${id}-title`, children: title }), intro: description }),
1328
+ /* @__PURE__ */ jsx23("ul", { className: "ow-features05__list", children: items.map((item, index) => /* @__PURE__ */ jsxs24(Text19, { as: "li", tone: "soft", className: "ow-features05__item", children: [
1329
+ /* @__PURE__ */ jsx23("span", { className: "ow-features05__tick", "aria-hidden": "true", children: /* @__PURE__ */ jsx23(CheckIcon, { size: 12, strokeWidth: 3 }) }),
1330
+ item
1331
+ ] }, index)) }),
1332
+ primaryAction || secondaryLink ? /* @__PURE__ */ jsxs24("div", { className: "ow-features05__actions", children: [
1333
+ primaryAction ? /* @__PURE__ */ jsx23(BlockActionButton, { action: primaryAction, variant: "primary" }) : null,
1334
+ secondaryLink ? /* @__PURE__ */ jsx23(Link10, { href: secondaryLink.href, variant: "standalone", children: secondaryLink.label }) : null
1335
+ ] }) : null
1336
+ ] }),
1337
+ /* @__PURE__ */ jsx23("div", { className: "ow-features05__visual", children: visual })
1338
+ ] }) });
1339
+ }
1340
+
1341
+ // blocks/src/footers/Footer01/Footer01.tsx
1342
+ import { useEffect as useEffect6, useId as useId20, useState as useState10 } from "react";
1343
+ import { cx as cx23, Link as Link12, SegmentedControl as SegmentedControl3, Separator, Text as Text21 } from "@openwarelabs/ui";
1344
+
1345
+ // blocks/src/shared/FooterColumns.tsx
1346
+ import { useId as useId19 } from "react";
1347
+ import { Link as Link11, Text as Text20 } from "@openwarelabs/ui";
1348
+ import { Fragment as Fragment8, jsx as jsx24, jsxs as jsxs25 } from "react/jsx-runtime";
1349
+ function FooterColumns({ columns, headingClassName, listClassName, badgeClassName }) {
1350
+ const id = useId19();
1351
+ return /* @__PURE__ */ jsx24(Fragment8, { children: columns.map((column, index) => /* @__PURE__ */ jsxs25("nav", { "aria-labelledby": `${id}-${index}`, children: [
1352
+ /* @__PURE__ */ jsx24(Text20, { variant: "label", as: "h2", id: `${id}-${index}`, className: headingClassName, children: column.title }),
1353
+ /* @__PURE__ */ jsx24("ul", { className: listClassName, children: column.links.map((link, linkIndex) => /* @__PURE__ */ jsxs25("li", { children: [
1354
+ /* @__PURE__ */ jsx24(Link11, { href: link.href, variant: "standalone", children: link.label }),
1355
+ link.badge ? /* @__PURE__ */ jsx24(Text20, { variant: "badge", className: badgeClassName, children: link.badge }) : null
1356
+ ] }, linkIndex)) })
1357
+ ] }, index)) });
1358
+ }
1359
+
1360
+ // blocks/src/footers/Footer01/Footer01.tsx
1361
+ import { jsx as jsx25, jsxs as jsxs26 } from "react/jsx-runtime";
1362
+ var currentTheme = () => typeof document === "undefined" ? "system" : document.documentElement.dataset.theme ?? "system";
1363
+ function useTheme() {
1364
+ const [theme, setTheme] = useState10(currentTheme);
1365
+ useEffect6(() => {
1366
+ const observer = new MutationObserver(() => setTheme(currentTheme()));
1367
+ observer.observe(document.documentElement, { attributes: true, attributeFilter: ["data-theme"] });
1368
+ return () => observer.disconnect();
1369
+ }, []);
1370
+ const choose = (value) => {
1371
+ document.documentElement.dataset.theme = value;
1372
+ setTheme(value);
1373
+ };
1374
+ return [theme, choose];
1375
+ }
1376
+ function Footer01({ brand, description, status, columns, legal, legalLinks = [], themeSwitch = false, labels = {}, className, ...props }) {
1377
+ const [theme, setTheme] = useTheme();
1378
+ const themeId = useId20();
1379
+ const home = labels.home ?? (typeof brand.name === "string" ? `${brand.name} home` : void 0);
1380
+ return /* @__PURE__ */ jsx25("footer", { className: cx23("ow-footer01", className), ...props, children: /* @__PURE__ */ jsxs26("div", { className: "ow-footer01__inner", children: [
1381
+ /* @__PURE__ */ jsxs26("div", { className: "ow-footer01__top", children: [
1382
+ /* @__PURE__ */ jsxs26("div", { className: "ow-footer01__brand", children: [
1383
+ /* @__PURE__ */ jsxs26(Link12, { href: brand.href, variant: "standalone", className: "ow-footer01__logo", "aria-label": home, children: [
1384
+ brand.logo,
1385
+ /* @__PURE__ */ jsx25(Text21, { variant: "dialog-title", as: "span", children: brand.name })
1386
+ ] }),
1387
+ description ? /* @__PURE__ */ jsx25(Text21, { variant: "copy", children: description }) : null,
1388
+ status ? /* @__PURE__ */ jsxs26(Link12, { href: status.href, variant: "standalone", className: "ow-footer01__status", children: [
1389
+ /* @__PURE__ */ jsx25("span", { className: "ow-footer01__status-dot", "aria-hidden": "true" }),
1390
+ status.label
1391
+ ] }) : null
1392
+ ] }),
1393
+ /* @__PURE__ */ jsx25(FooterColumns, { columns, headingClassName: "ow-footer01__heading", listClassName: "ow-footer01__links", badgeClassName: "ow-footer01__new" })
1394
+ ] }),
1395
+ /* @__PURE__ */ jsx25(Separator, {}),
1396
+ /* @__PURE__ */ jsxs26("div", { className: "ow-footer01__bottom", children: [
1397
+ /* @__PURE__ */ jsxs26(Text21, { variant: "caption", as: "p", className: "ow-footer01__legal", children: [
1398
+ /* @__PURE__ */ jsx25("span", { children: legal }),
1399
+ legalLinks.map((link, index) => /* @__PURE__ */ jsx25(Link12, { href: link.href, variant: "muted", children: link.label }, index))
1400
+ ] }),
1401
+ themeSwitch ? /* @__PURE__ */ jsxs26("div", { className: "ow-footer01__theme", children: [
1402
+ /* @__PURE__ */ jsx25(Text21, { variant: "caption", id: themeId, children: labels.theme ?? "Theme" }),
1403
+ /* @__PURE__ */ jsx25(
1404
+ SegmentedControl3,
1405
+ {
1406
+ size: "sm",
1407
+ "aria-labelledby": themeId,
1408
+ options: [
1409
+ { value: "light", label: null, icon: /* @__PURE__ */ jsx25(SunIcon, { size: 15 }), "aria-label": labels.light ?? "Light" },
1410
+ { value: "dark", label: null, icon: /* @__PURE__ */ jsx25(MoonIcon, { size: 15 }), "aria-label": labels.dark ?? "Dark" },
1411
+ { value: "system", label: null, icon: /* @__PURE__ */ jsx25(MonitorIcon, { size: 15 }), "aria-label": labels.system ?? "Match the system" }
1412
+ ],
1413
+ value: theme,
1414
+ onChange: setTheme
1415
+ }
1416
+ )
1417
+ ] }) : null
1418
+ ] })
1419
+ ] }) });
1420
+ }
1421
+
1422
+ // blocks/src/footers/Footer02/Footer02.tsx
1423
+ import { cx as cx24, Link as Link13, Text as Text22 } from "@openwarelabs/ui";
1424
+ import { jsx as jsx26, jsxs as jsxs27 } from "react/jsx-runtime";
1425
+ function Footer02({ brand, links, legal, labels = {}, className, ...props }) {
1426
+ return /* @__PURE__ */ jsx26("footer", { className: cx24("ow-footer02", className), ...props, children: /* @__PURE__ */ jsxs27("div", { className: "ow-footer02__inner", children: [
1427
+ /* @__PURE__ */ jsx26(Link13, { href: brand.href, className: "ow-footer02__logo", "aria-label": labels.home ?? (typeof brand.name === "string" ? `${brand.name} home` : void 0), children: brand.logo }),
1428
+ /* @__PURE__ */ jsx26("nav", { "aria-label": labels.nav ?? "Footer", children: /* @__PURE__ */ jsx26("ul", { className: "ow-footer02__links", children: links.map((link, index) => /* @__PURE__ */ jsx26("li", { children: /* @__PURE__ */ jsx26(Link13, { href: link.href, variant: "standalone", children: link.label }) }, index)) }) }),
1429
+ /* @__PURE__ */ jsx26(Text22, { variant: "caption", as: "p", children: legal })
1430
+ ] }) });
1431
+ }
1432
+
1433
+ // blocks/src/footers/Footer03/Footer03.tsx
1434
+ import { useId as useId21, useRef as useRef3, useState as useState11 } from "react";
1435
+ import { Button as Button8, cx as cx25, Input as Input2, Link as Link14, Separator as Separator2, Text as Text23 } from "@openwarelabs/ui";
1436
+ import { jsx as jsx27, jsxs as jsxs28 } from "react/jsx-runtime";
1437
+ var emailPattern2 = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
1438
+ function Footer03({ newsletter, brand, description, columns, legal, legalLinks = [], labels = {}, className, ...props }) {
1439
+ const [email, setEmail] = useState11("");
1440
+ const [error, setError] = useState11("");
1441
+ const [sending, setSending] = useState11(false);
1442
+ const [sentTo, setSentTo] = useState11("");
1443
+ const input = useRef3(null);
1444
+ const id = useId21();
1445
+ const subscribe = async (event) => {
1446
+ event.preventDefault();
1447
+ const address = email.trim();
1448
+ if (!address) setError(labels.empty ?? "Enter your email address.");
1449
+ else if (!emailPattern2.test(address)) setError(labels.invalid ?? "That doesn't look like an email address. Check it for a typo.");
1450
+ else {
1451
+ setError("");
1452
+ setSending(true);
1453
+ try {
1454
+ await newsletter.onSubmit(address);
1455
+ setSentTo(address);
1456
+ return;
1457
+ } catch (failure) {
1458
+ setError(failure instanceof Error && failure.message ? failure.message : labels.failed ?? "That didn't go through. Try again in a moment.");
1459
+ } finally {
1460
+ setSending(false);
1461
+ }
1462
+ }
1463
+ input.current?.focus();
1464
+ };
1465
+ const startAgain = () => {
1466
+ setSentTo("");
1467
+ setEmail("");
1468
+ window.setTimeout(() => input.current?.focus());
1469
+ };
1470
+ return /* @__PURE__ */ jsx27("footer", { className: cx25("ow-footer03", className), ...props, children: /* @__PURE__ */ jsxs28("div", { className: "ow-footer03__inner", children: [
1471
+ /* @__PURE__ */ jsxs28("section", { className: "ow-footer03__signup", "aria-labelledby": `${id}-title`, children: [
1472
+ /* @__PURE__ */ jsxs28("div", { children: [
1473
+ /* @__PURE__ */ jsx27(Text23, { variant: "heading", as: "h2", id: `${id}-title`, children: newsletter.title }),
1474
+ newsletter.description ? /* @__PURE__ */ jsx27(Text23, { variant: "copy", className: "ow-footer03__intro", children: newsletter.description }) : null
1475
+ ] }),
1476
+ sentTo ? /* @__PURE__ */ jsxs28("div", { className: "ow-footer03__done", role: "status", children: [
1477
+ /* @__PURE__ */ jsx27(CircleCheckIcon, { size: 18 }),
1478
+ /* @__PURE__ */ jsxs28("span", { className: "ow-footer03__done-text", children: [
1479
+ /* @__PURE__ */ jsx27(Text23, { variant: "label", children: newsletter.successTitle }),
1480
+ newsletter.successDescription ? /* @__PURE__ */ jsx27(Text23, { variant: "body", as: "span", tone: "soft", className: "ow-footer03__done-detail", children: newsletter.successDescription(sentTo) }) : null
1481
+ ] }),
1482
+ /* @__PURE__ */ jsx27(Button8, { size: "sm", variant: "ghost", onClick: startAgain, children: labels.change ?? "Change" })
1483
+ ] }) : /* @__PURE__ */ jsxs28("form", { noValidate: true, onSubmit: subscribe, children: [
1484
+ /* @__PURE__ */ jsxs28("div", { className: "ow-footer03__row", children: [
1485
+ /* @__PURE__ */ jsx27(
1486
+ Input2,
1487
+ {
1488
+ ref: input,
1489
+ type: "email",
1490
+ autoComplete: "email",
1491
+ placeholder: labels.placeholder ?? "you@example.com",
1492
+ "aria-label": labels.email ?? "Email address",
1493
+ "aria-describedby": `${id}-note`,
1494
+ className: "ow-footer03__email",
1495
+ startContent: /* @__PURE__ */ jsx27(MailIcon, { size: 16 }),
1496
+ isInvalid: Boolean(error),
1497
+ value: email,
1498
+ onChange: (event) => {
1499
+ setEmail(event.target.value);
1500
+ if (error) setError("");
1501
+ }
1502
+ }
1503
+ ),
1504
+ /* @__PURE__ */ jsx27(Button8, { type: "submit", variant: "primary", shape: "pill", loading: sending, endIcon: newsletter.submitIcon, children: newsletter.submitLabel })
1505
+ ] }),
1506
+ /* @__PURE__ */ jsx27(
1507
+ Text23,
1508
+ {
1509
+ variant: "caption",
1510
+ as: "p",
1511
+ id: `${id}-note`,
1512
+ tone: error ? "danger" : void 0,
1513
+ className: "ow-footer03__note",
1514
+ "aria-live": "polite",
1515
+ children: error || newsletter.note
1516
+ }
1517
+ )
1518
+ ] })
1519
+ ] }),
1520
+ /* @__PURE__ */ jsxs28("div", { className: "ow-footer03__links", children: [
1521
+ /* @__PURE__ */ jsxs28("div", { className: "ow-footer03__brand", children: [
1522
+ /* @__PURE__ */ jsxs28(
1523
+ Link14,
1524
+ {
1525
+ href: brand.href,
1526
+ variant: "standalone",
1527
+ className: "ow-footer03__logo",
1528
+ "aria-label": labels.home ?? (typeof brand.name === "string" ? `${brand.name} home` : void 0),
1529
+ children: [
1530
+ brand.logo,
1531
+ /* @__PURE__ */ jsx27(Text23, { variant: "dialog-title", as: "span", children: brand.name })
1532
+ ]
1533
+ }
1534
+ ),
1535
+ description ? /* @__PURE__ */ jsx27(Text23, { variant: "copy", className: "ow-footer03__line", children: description }) : null
1536
+ ] }),
1537
+ /* @__PURE__ */ jsx27(FooterColumns, { columns, headingClassName: "ow-footer03__heading", listClassName: "ow-footer03__list" })
1538
+ ] }),
1539
+ /* @__PURE__ */ jsx27(Separator2, {}),
1540
+ /* @__PURE__ */ jsxs28("div", { className: "ow-footer03__bottom", children: [
1541
+ /* @__PURE__ */ jsx27(Text23, { variant: "caption", as: "p", children: legal }),
1542
+ legalLinks.length ? /* @__PURE__ */ jsx27(Text23, { variant: "caption", as: "ul", className: "ow-footer03__legal", children: legalLinks.map((link, index) => /* @__PURE__ */ jsx27("li", { children: /* @__PURE__ */ jsx27(Link14, { href: link.href, variant: "muted", children: link.label }) }, index)) }) : null
1543
+ ] })
1544
+ ] }) });
1545
+ }
1546
+
1547
+ // blocks/src/footers/Footer04/Footer04.tsx
1548
+ import { cx as cx26, Link as Link15, Text as Text24 } from "@openwarelabs/ui";
1549
+ import { Fragment as Fragment9, jsx as jsx28, jsxs as jsxs29 } from "react/jsx-runtime";
1550
+ function Footer04({ title, titleMuted, primaryAction, columns, legal, legalLinks = [], wordmark, className, ...props }) {
1551
+ return /* @__PURE__ */ jsx28("footer", { className: cx26("ow-footer04", className), ...props, children: /* @__PURE__ */ jsxs29("div", { className: "ow-footer04__inner", children: [
1552
+ /* @__PURE__ */ jsxs29("div", { className: "ow-footer04__top", children: [
1553
+ /* @__PURE__ */ jsxs29("div", { className: "ow-footer04__pitch", children: [
1554
+ /* @__PURE__ */ jsxs29(Text24, { variant: "heading", as: "p", children: [
1555
+ title,
1556
+ titleMuted ? /* @__PURE__ */ jsxs29(Fragment9, { children: [
1557
+ " ",
1558
+ /* @__PURE__ */ jsx28(Text24, { variant: "heading", as: "span", tone: "muted", children: titleMuted })
1559
+ ] }) : null
1560
+ ] }),
1561
+ primaryAction ? /* @__PURE__ */ jsx28(BlockActionButton, { action: primaryAction, variant: "primary", size: "md" }) : null
1562
+ ] }),
1563
+ /* @__PURE__ */ jsx28("div", { className: "ow-footer04__columns", children: /* @__PURE__ */ jsx28(FooterColumns, { columns, headingClassName: "ow-footer04__heading", listClassName: "ow-footer04__list" }) })
1564
+ ] }),
1565
+ /* @__PURE__ */ jsxs29("div", { className: "ow-footer04__legal", children: [
1566
+ /* @__PURE__ */ jsx28(Text24, { variant: "caption", as: "p", children: legal }),
1567
+ legalLinks.length ? /* @__PURE__ */ jsx28(Text24, { variant: "caption", as: "ul", className: "ow-footer04__legal-links", children: legalLinks.map((link, index) => /* @__PURE__ */ jsx28("li", { children: /* @__PURE__ */ jsx28(Link15, { href: link.href, variant: "muted", children: link.label }) }, index)) }) : null
1568
+ ] }),
1569
+ /* @__PURE__ */ jsx28("div", { className: "ow-footer04__name", "aria-hidden": "true", children: /* @__PURE__ */ jsx28("div", { className: "ow-footer04__crop", children: /* @__PURE__ */ jsx28("span", { children: wordmark }) }) })
1570
+ ] }) });
1571
+ }
339
1572
  export {
1573
+ Features01,
1574
+ Features02,
1575
+ Features03,
1576
+ Features04,
1577
+ Features05,
1578
+ Footer01,
1579
+ Footer02,
1580
+ Footer03,
1581
+ Footer04,
1582
+ Header01,
1583
+ Header02,
1584
+ Header03,
1585
+ Header04,
1586
+ Header05,
340
1587
  Hero01,
341
1588
  Hero02,
342
1589
  Hero03,
343
1590
  Hero04,
344
1591
  Hero05,
345
- Hero06
1592
+ Hero06,
1593
+ Pricing01,
1594
+ Pricing02,
1595
+ Pricing03,
1596
+ Pricing04,
1597
+ Pricing05
346
1598
  };
347
1599
  //# sourceMappingURL=index.js.map