@openwarelabs/blocks 0.0.0-stage → 0.7.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 (39) hide show
  1. package/README.md +45 -2
  2. package/dist/heroes/Hero01/Hero01.d.cts +3 -0
  3. package/dist/heroes/Hero01/Hero01.d.ts +3 -0
  4. package/dist/heroes/Hero01/Hero01.types.d.cts +18 -0
  5. package/dist/heroes/Hero01/Hero01.types.d.ts +18 -0
  6. package/dist/heroes/Hero02/Hero02.d.cts +3 -0
  7. package/dist/heroes/Hero02/Hero02.d.ts +3 -0
  8. package/dist/heroes/Hero02/Hero02.types.d.cts +18 -0
  9. package/dist/heroes/Hero02/Hero02.types.d.ts +18 -0
  10. package/dist/heroes/Hero03/Hero03.d.cts +3 -0
  11. package/dist/heroes/Hero03/Hero03.d.ts +3 -0
  12. package/dist/heroes/Hero03/Hero03.types.d.cts +40 -0
  13. package/dist/heroes/Hero03/Hero03.types.d.ts +40 -0
  14. package/dist/heroes/Hero04/Hero04.d.cts +3 -0
  15. package/dist/heroes/Hero04/Hero04.d.ts +3 -0
  16. package/dist/heroes/Hero04/Hero04.types.d.cts +21 -0
  17. package/dist/heroes/Hero04/Hero04.types.d.ts +21 -0
  18. package/dist/heroes/Hero05/Hero05.d.cts +3 -0
  19. package/dist/heroes/Hero05/Hero05.d.ts +3 -0
  20. package/dist/heroes/Hero05/Hero05.types.d.cts +24 -0
  21. package/dist/heroes/Hero05/Hero05.types.d.ts +24 -0
  22. package/dist/heroes/Hero06/Hero06.d.cts +3 -0
  23. package/dist/heroes/Hero06/Hero06.d.ts +3 -0
  24. package/dist/heroes/Hero06/Hero06.types.d.cts +37 -0
  25. package/dist/heroes/Hero06/Hero06.types.d.ts +37 -0
  26. package/dist/index.cjs +370 -0
  27. package/dist/index.cjs.map +7 -0
  28. package/dist/index.d.cts +13 -0
  29. package/dist/index.d.ts +13 -0
  30. package/dist/index.js +347 -0
  31. package/dist/index.js.map +7 -0
  32. package/dist/shared/BlockActions.d.cts +5 -0
  33. package/dist/shared/BlockActions.d.ts +5 -0
  34. package/dist/shared/icons.d.cts +4 -0
  35. package/dist/shared/icons.d.ts +4 -0
  36. package/dist/shared/shared.types.d.cts +38 -0
  37. package/dist/shared/shared.types.d.ts +38 -0
  38. package/dist/styles.css +569 -0
  39. package/package.json +55 -4
package/dist/index.cjs ADDED
@@ -0,0 +1,370 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // blocks/src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ Hero01: () => Hero01,
24
+ Hero02: () => Hero02,
25
+ Hero03: () => Hero03,
26
+ Hero04: () => Hero04,
27
+ Hero05: () => Hero05,
28
+ Hero06: () => Hero06
29
+ });
30
+ module.exports = __toCommonJS(index_exports);
31
+
32
+ // blocks/src/heroes/Hero01/Hero01.tsx
33
+ var import_react = require("react");
34
+ var import_ui2 = require("@openwarelabs/ui");
35
+
36
+ // blocks/src/shared/BlockActions.tsx
37
+ var import_ui = require("@openwarelabs/ui");
38
+ var import_jsx_runtime = require("react/jsx-runtime");
39
+ function BlockActionButton({ action, variant }) {
40
+ const { label, href, onClick, startIcon, endIcon, target, "aria-label": ariaLabel } = action;
41
+ if (href !== void 0) {
42
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
43
+ "a",
44
+ {
45
+ className: (0, import_ui.buttonClassName)({ variant, size: "lg", shape: "pill" }),
46
+ href,
47
+ target,
48
+ rel: target === "_blank" ? "noopener noreferrer" : void 0,
49
+ "aria-label": ariaLabel,
50
+ onClick,
51
+ children: [
52
+ startIcon ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "ow-button__icon", children: startIcon }) : null,
53
+ label,
54
+ endIcon ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "ow-button__icon", children: endIcon }) : null
55
+ ]
56
+ }
57
+ );
58
+ }
59
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ui.Button, { variant, shape: "pill", size: "lg", startIcon, endIcon, "aria-label": ariaLabel, onClick, children: label });
60
+ }
61
+ function BlockActions({ primary, secondary, className }) {
62
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className, children: [
63
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BlockActionButton, { action: primary, variant: "primary" }),
64
+ secondary ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BlockActionButton, { action: secondary, variant: "secondary" }) : null
65
+ ] });
66
+ }
67
+
68
+ // blocks/src/heroes/Hero01/Hero01.tsx
69
+ var import_jsx_runtime2 = require("react/jsx-runtime");
70
+ function Hero01({ eyebrow, title, description, primaryAction, secondaryAction, note, visual, className, ...props }) {
71
+ const titleId = (0, import_react.useId)();
72
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("section", { className: (0, import_ui2.cx)("ow-hero01", className), "aria-labelledby": titleId, ...props, children: [
73
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "ow-hero01__inner", children: [
74
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Chip, { children: eyebrow }) : null,
75
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Text, { variant: "hero", align: "center", id: titleId, className: "ow-hero01__title", children: title }),
76
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Text, { variant: "lead", align: "center", className: "ow-hero01__lead", children: description }),
77
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(BlockActions, { className: "ow-hero01__actions", primary: primaryAction, secondary: secondaryAction }),
78
+ note ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Text, { variant: "caption", as: "p", className: "ow-hero01__note", children: note }) : null
79
+ ] }),
80
+ visual ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "ow-hero01__visual", children: visual }) : null
81
+ ] });
82
+ }
83
+
84
+ // blocks/src/heroes/Hero02/Hero02.tsx
85
+ var import_react2 = require("react");
86
+ var import_ui3 = require("@openwarelabs/ui");
87
+
88
+ // blocks/src/shared/icons.tsx
89
+ var import_jsx_runtime3 = require("react/jsx-runtime");
90
+ var icon = (paths) => function BlockIcon({ size = 16 }) {
91
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
92
+ "svg",
93
+ {
94
+ xmlns: "http://www.w3.org/2000/svg",
95
+ width: size,
96
+ height: size,
97
+ viewBox: "0 0 24 24",
98
+ fill: "none",
99
+ stroke: "currentColor",
100
+ strokeWidth: 2,
101
+ strokeLinecap: "round",
102
+ strokeLinejoin: "round",
103
+ "aria-hidden": "true",
104
+ children: paths
105
+ }
106
+ );
107
+ };
108
+ var CheckIcon = icon(/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M20 6 9 17l-5-5" }));
109
+ var MailIcon = icon(
110
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
111
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" }),
112
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2" })
113
+ ] })
114
+ );
115
+ var DownloadIcon = icon(
116
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
117
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M12 15V3" }),
118
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
119
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "m7 10 5 5 5-5" })
120
+ ] })
121
+ );
122
+
123
+ // blocks/src/heroes/Hero02/Hero02.tsx
124
+ var import_jsx_runtime4 = require("react/jsx-runtime");
125
+ function Hero02({ eyebrow, title, description, primaryAction, secondaryAction, points, visual, className, ...props }) {
126
+ const titleId = (0, import_react2.useId)();
127
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("section", { className: (0, import_ui3.cx)("ow-hero02", className), "aria-labelledby": titleId, ...props, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "ow-hero02__inner", children: [
128
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "ow-hero02__text", children: [
129
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_ui3.Chip, { children: eyebrow }) : null,
130
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_ui3.Text, { variant: "page-title", id: titleId, className: "ow-hero02__title", children: title }),
131
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_ui3.Text, { variant: "lead", className: "ow-hero02__lead", children: description }),
132
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(BlockActions, { className: "ow-hero02__actions", primary: primaryAction, secondary: secondaryAction }),
133
+ points?.length ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "ow-hero02__points", children: points.map((point, index) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_ui3.Text, { as: "li", tone: "muted", className: "ow-hero02__point", children: [
134
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CheckIcon, { size: 15 }),
135
+ point
136
+ ] }, index)) }) : null
137
+ ] }),
138
+ visual
139
+ ] }) });
140
+ }
141
+
142
+ // blocks/src/heroes/Hero03/Hero03.tsx
143
+ var import_react3 = require("react");
144
+ var import_ui4 = require("@openwarelabs/ui");
145
+ var import_jsx_runtime5 = require("react/jsx-runtime");
146
+ var emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
147
+ function Hero03({
148
+ eyebrow,
149
+ title,
150
+ description,
151
+ submitLabel,
152
+ onSubmit,
153
+ note,
154
+ successTitle,
155
+ successDescription,
156
+ visual,
157
+ labels = {},
158
+ className,
159
+ ...props
160
+ }) {
161
+ const [email, setEmail] = (0, import_react3.useState)("");
162
+ const [error, setError] = (0, import_react3.useState)(null);
163
+ const [sending, setSending] = (0, import_react3.useState)(false);
164
+ const [joined, setJoined] = (0, import_react3.useState)(null);
165
+ const inputRef = (0, import_react3.useRef)(null);
166
+ const doneRef = (0, import_react3.useRef)(null);
167
+ const touched = (0, import_react3.useRef)(false);
168
+ const id = (0, import_react3.useId)();
169
+ const titleId = `${id}-title`;
170
+ (0, import_react3.useEffect)(() => {
171
+ if (!touched.current) return;
172
+ if (joined) doneRef.current?.focus();
173
+ else inputRef.current?.focus();
174
+ }, [joined]);
175
+ const submit = async (event) => {
176
+ event.preventDefault();
177
+ const value = email.trim();
178
+ const problem = !value ? labels.empty ?? "Enter your work email to join the waitlist." : !emailPattern.test(value) ? labels.invalid ?? "That doesn't look like an email address. Try one like maya@example.com." : null;
179
+ setError(problem);
180
+ if (problem) {
181
+ inputRef.current?.focus();
182
+ return;
183
+ }
184
+ setSending(true);
185
+ try {
186
+ await onSubmit(value);
187
+ touched.current = true;
188
+ setJoined(value);
189
+ } catch (failure) {
190
+ setError(failure instanceof Error && failure.message ? failure.message : labels.failed ?? "That didn't go through. Try again in a moment.");
191
+ inputRef.current?.focus();
192
+ } finally {
193
+ setSending(false);
194
+ }
195
+ };
196
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { className: (0, import_ui4.cx)("ow-hero03", className), "aria-labelledby": titleId, ...props, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "ow-hero03__inner", children: [
197
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_ui4.Chip, { children: eyebrow }) : null,
198
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_ui4.Text, { variant: "hero", align: "center", id: titleId, className: "ow-hero03__title", children: title }),
199
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_ui4.Text, { variant: "lead", align: "center", className: "ow-hero03__lead", children: description }),
200
+ joined ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { ref: doneRef, className: "ow-hero03__done", tabIndex: -1, children: [
201
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "ow-hero03__done-icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CheckIcon, { size: 16 }) }),
202
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "ow-hero03__done-text", children: [
203
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_ui4.Text, { variant: "label", children: successTitle }),
204
+ successDescription ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_ui4.Text, { variant: "caption", as: "p", className: "ow-hero03__done-detail", children: successDescription(joined) }) : null
205
+ ] }),
206
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
207
+ import_ui4.Button,
208
+ {
209
+ variant: "ghost",
210
+ size: "sm",
211
+ onClick: () => {
212
+ touched.current = true;
213
+ setJoined(null);
214
+ },
215
+ children: labels.change ?? "Change email"
216
+ }
217
+ )
218
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("form", { className: "ow-hero03__form", noValidate: true, onSubmit: submit, children: [
219
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "ow-hero03__row", children: [
220
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
221
+ import_ui4.Input,
222
+ {
223
+ ref: inputRef,
224
+ className: "ow-hero03__input",
225
+ type: "email",
226
+ autoComplete: "email",
227
+ "aria-label": labels.email ?? "Work email",
228
+ "aria-describedby": error ? `${id}-error` : note ? `${id}-note` : void 0,
229
+ placeholder: labels.placeholder ?? "you@company.com",
230
+ startContent: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MailIcon, { size: 16 }),
231
+ value: email,
232
+ isInvalid: Boolean(error),
233
+ onChange: (event) => {
234
+ setEmail(event.target.value);
235
+ if (error) setError(null);
236
+ }
237
+ }
238
+ ),
239
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_ui4.Button, { type: "submit", variant: "primary", shape: "pill", size: "lg", loading: sending, children: submitLabel })
240
+ ] }),
241
+ error ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_ui4.Text, { tone: "danger", id: `${id}-error`, className: "ow-hero03__error", role: "alert", children: error }) : null,
242
+ note ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_ui4.Text, { variant: "caption", as: "p", id: `${id}-note`, className: "ow-hero03__note", children: note }) : null
243
+ ] }),
244
+ visual
245
+ ] }) });
246
+ }
247
+
248
+ // blocks/src/heroes/Hero04/Hero04.tsx
249
+ var import_react4 = require("react");
250
+ var import_ui5 = require("@openwarelabs/ui");
251
+ var import_jsx_runtime6 = require("react/jsx-runtime");
252
+ function Hero04({ eyebrow, title, description, primaryAction, secondaryAction, start, end, interactive = true, className, ...props }) {
253
+ const titleId = (0, import_react4.useId)();
254
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("section", { className: (0, import_ui5.cx)("ow-hero04", className), "aria-labelledby": titleId, ...props, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_ui5.DotGrid, { fade: true, interactive, className: "ow-hero04__grid", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "ow-hero04__layout", children: [
255
+ start,
256
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "ow-hero04__text", children: [
257
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_ui5.Chip, { children: eyebrow }) : null,
258
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_ui5.Text, { variant: "hero", align: "center", id: titleId, className: "ow-hero04__title", children: title }),
259
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_ui5.Text, { variant: "lead", align: "center", className: "ow-hero04__lead", children: description }),
260
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(BlockActions, { className: "ow-hero04__actions", primary: primaryAction, secondary: secondaryAction })
261
+ ] }),
262
+ end
263
+ ] }) }) });
264
+ }
265
+
266
+ // blocks/src/heroes/Hero05/Hero05.tsx
267
+ var import_react5 = require("react");
268
+ var import_ui6 = require("@openwarelabs/ui");
269
+ var import_jsx_runtime7 = require("react/jsx-runtime");
270
+ function Hero05({ eyebrow, title, description, primaryAction, secondaryAction, logosTitle, logos, className, ...props }) {
271
+ const id = (0, import_react5.useId)();
272
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("section", { className: (0, import_ui6.cx)("ow-hero05", className), "aria-labelledby": `${id}-title`, ...props, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "ow-hero05__inner", children: [
273
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "ow-hero05__top", children: [
274
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "ow-hero05__heading", children: [
275
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_ui6.Chip, { children: eyebrow }) : null,
276
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_ui6.Text, { variant: "hero", id: `${id}-title`, className: "ow-hero05__title", children: title })
277
+ ] }),
278
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { children: [
279
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_ui6.Text, { variant: "lead", children: description }),
280
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(BlockActions, { className: "ow-hero05__actions", primary: primaryAction, secondary: secondaryAction })
281
+ ] })
282
+ ] }),
283
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "ow-hero05__proof", children: [
284
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_ui6.Text, { tone: "muted", id: `${id}-logos`, children: logosTitle }),
285
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("ul", { className: "ow-hero05__list", "aria-labelledby": `${id}-logos`, children: logos.map((logo) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("li", { className: "ow-hero05__logo", children: logo.logo }, logo.name)) })
286
+ ] })
287
+ ] }) });
288
+ }
289
+
290
+ // blocks/src/heroes/Hero06/Hero06.tsx
291
+ var import_react6 = require("react");
292
+ var import_ui7 = require("@openwarelabs/ui");
293
+ var import_jsx_runtime8 = require("react/jsx-runtime");
294
+ function detectPlatform() {
295
+ const nav = navigator;
296
+ const name = `${nav.userAgentData?.platform ?? ""} ${navigator.platform} ${navigator.userAgent}`.toLowerCase();
297
+ if (/android|iphone|ipad|ipod/.test(name) || name.includes("mac") && navigator.maxTouchPoints > 1) return null;
298
+ if (name.includes("mac")) return "mac";
299
+ if (name.includes("win")) return "windows";
300
+ if (name.includes("linux") || name.includes("x11")) return "linux";
301
+ return null;
302
+ }
303
+ var defaultLabel = (name) => `Download for ${name}`;
304
+ function Hero06({
305
+ eyebrow,
306
+ title,
307
+ description,
308
+ platforms,
309
+ version,
310
+ otherDownloads,
311
+ downloadLabel = defaultLabel,
312
+ visual,
313
+ className,
314
+ ...props
315
+ }) {
316
+ const titleId = (0, import_react6.useId)();
317
+ const [detected, setDetected] = (0, import_react6.useState)(null);
318
+ (0, import_react6.useEffect)(() => setDetected(detectPlatform()), []);
319
+ const current = platforms.find((platform) => platform.id === detected) ?? platforms[0];
320
+ const order = current ? [current, ...platforms.filter((platform) => platform !== current)] : [];
321
+ const button = (platform, primary) => {
322
+ const label = downloadLabel(platform.name);
323
+ const content = primary ? label : platform.name;
324
+ const icon2 = primary ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(DownloadIcon, { size: 16 }) : null;
325
+ if (platform.href !== void 0) {
326
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
327
+ "a",
328
+ {
329
+ className: (0, import_ui7.buttonClassName)({ variant: primary ? "primary" : "secondary", size: "lg", shape: "pill" }),
330
+ href: platform.href,
331
+ "aria-label": primary ? void 0 : label,
332
+ onClick: platform.onDownload,
333
+ children: [
334
+ icon2 ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "ow-button__icon", children: icon2 }) : null,
335
+ content
336
+ ]
337
+ },
338
+ platform.id
339
+ );
340
+ }
341
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
342
+ import_ui7.Button,
343
+ {
344
+ variant: primary ? "primary" : "secondary",
345
+ shape: "pill",
346
+ size: "lg",
347
+ startIcon: icon2,
348
+ "aria-label": primary ? void 0 : label,
349
+ onClick: platform.onDownload,
350
+ children: content
351
+ },
352
+ platform.id
353
+ );
354
+ };
355
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("section", { className: (0, import_ui7.cx)("ow-hero06", className), "aria-labelledby": titleId, ...props, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "ow-hero06__inner", children: [
356
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "ow-hero06__text", children: [
357
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_ui7.Chip, { children: eyebrow }) : null,
358
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_ui7.Text, { variant: "page-title", id: titleId, className: "ow-hero06__title", children: title }),
359
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_ui7.Text, { variant: "lead", className: "ow-hero06__lead", children: description }),
360
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "ow-hero06__buttons", children: order.map((platform, index) => button(platform, index === 0)) }),
361
+ version || current?.requirement || otherDownloads ? /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_ui7.Text, { variant: "caption", as: "p", className: "ow-hero06__meta", children: [
362
+ version ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { children: version }) : null,
363
+ current?.requirement ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { children: current.requirement }) : null,
364
+ otherDownloads ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "ow-hero06__other", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_ui7.Link, { href: otherDownloads.href, variant: "muted", children: otherDownloads.label }) }) : null
365
+ ] }) : null
366
+ ] }),
367
+ visual
368
+ ] }) });
369
+ }
370
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/heroes/Hero01/Hero01.tsx", "../src/shared/BlockActions.tsx", "../src/heroes/Hero02/Hero02.tsx", "../src/shared/icons.tsx", "../src/heroes/Hero03/Hero03.tsx", "../src/heroes/Hero04/Hero04.tsx", "../src/heroes/Hero05/Hero05.tsx", "../src/heroes/Hero06/Hero06.tsx"],
4
+ "sourcesContent": ["// @openwarelabs/blocks: whole page sections built from @openwarelabs/ui, as components that take their content as props.\n// Styles: import \"@openwarelabs/blocks/styles.css\" once, after \"@openwarelabs/ui/styles.css\".\nexport { Hero01 } from \"./heroes/Hero01/Hero01\";\nexport type { Hero01Props } from \"./heroes/Hero01/Hero01.types\";\nexport { Hero02 } from \"./heroes/Hero02/Hero02\";\nexport type { Hero02Props } from \"./heroes/Hero02/Hero02.types\";\nexport { Hero03 } from \"./heroes/Hero03/Hero03\";\nexport type { Hero03Labels, Hero03Props } from \"./heroes/Hero03/Hero03.types\";\nexport { Hero04 } from \"./heroes/Hero04/Hero04\";\nexport type { Hero04Props } from \"./heroes/Hero04/Hero04.types\";\nexport { Hero05 } from \"./heroes/Hero05/Hero05\";\nexport type { Hero05Logo, Hero05Props } from \"./heroes/Hero05/Hero05.types\";\nexport { Hero06 } from \"./heroes/Hero06/Hero06\";\nexport type { Hero06Platform, Hero06PlatformId, Hero06Props } from \"./heroes/Hero06/Hero06.types\";\n\nexport type { BlockAction, BlockLink } from \"./shared/shared.types\";\n", "import { useId } from \"react\";\n\nimport { Chip, cx, Text } from \"@openwarelabs/ui\";\n\nimport { BlockActions } from \"@blocks/shared/BlockActions\";\nimport type { Hero01Props } from \"./Hero01.types\";\n\n/** A centred hero: an eyebrow, the headline, a lead, two actions and a note, with the product below, running on into the page. */\nexport function Hero01({ eyebrow, title, description, primaryAction, secondaryAction, note, visual, className, ...props }: Hero01Props) {\n const titleId = useId();\n return (\n <section className={cx(\"ow-hero01\", className)} aria-labelledby={titleId} {...props}>\n <div className=\"ow-hero01__inner\">\n {eyebrow ? <Chip>{eyebrow}</Chip> : null}\n <Text variant=\"hero\" align=\"center\" id={titleId} className=\"ow-hero01__title\">\n {title}\n </Text>\n <Text variant=\"lead\" align=\"center\" className=\"ow-hero01__lead\">\n {description}\n </Text>\n <BlockActions className=\"ow-hero01__actions\" primary={primaryAction} secondary={secondaryAction} />\n {note ? (\n <Text variant=\"caption\" as=\"p\" className=\"ow-hero01__note\">\n {note}\n </Text>\n ) : null}\n </div>\n {visual ? <div className=\"ow-hero01__visual\">{visual}</div> : null}\n </section>\n );\n}\n", "import { Button, buttonClassName } from \"@openwarelabs/ui\";\n\nimport type { BlockActionButtonProps, BlockActionsProps } from \"@blocks/shared/shared.types\";\n\n/** One action as a large pill: a link styled as a button when it has an href, a button otherwise. */\nexport function BlockActionButton({ action, variant }: BlockActionButtonProps) {\n const { label, href, onClick, startIcon, endIcon, target, \"aria-label\": ariaLabel } = action;\n if (href !== undefined) {\n return (\n <a\n className={buttonClassName({ variant, size: \"lg\", shape: \"pill\" })}\n href={href}\n target={target}\n rel={target === \"_blank\" ? \"noopener noreferrer\" : undefined}\n aria-label={ariaLabel}\n onClick={onClick}\n >\n {startIcon ? <span className=\"ow-button__icon\">{startIcon}</span> : null}\n {label}\n {endIcon ? <span className=\"ow-button__icon\">{endIcon}</span> : null}\n </a>\n );\n }\n return (\n <Button variant={variant} shape=\"pill\" size=\"lg\" startIcon={startIcon} endIcon={endIcon} aria-label={ariaLabel} onClick={onClick}>\n {label}\n </Button>\n );\n}\n\n/** The primary action and an optional secondary one, side by side. */\nexport function BlockActions({ primary, secondary, className }: BlockActionsProps) {\n return (\n <div className={className}>\n <BlockActionButton action={primary} variant=\"primary\" />\n {secondary ? <BlockActionButton action={secondary} variant=\"secondary\" /> : null}\n </div>\n );\n}\n", "import { useId } from \"react\";\n\nimport { Chip, cx, Text } from \"@openwarelabs/ui\";\n\nimport { BlockActions } from \"@blocks/shared/BlockActions\";\nimport { CheckIcon } from \"@blocks/shared/icons\";\nimport type { Hero02Props } from \"./Hero02.types\";\n\n/** A split hero: the words on the left and the product on the right. They stack on phones. */\nexport function Hero02({ eyebrow, title, description, primaryAction, secondaryAction, points, visual, className, ...props }: Hero02Props) {\n const titleId = useId();\n return (\n <section className={cx(\"ow-hero02\", className)} aria-labelledby={titleId} {...props}>\n <div className=\"ow-hero02__inner\">\n <div className=\"ow-hero02__text\">\n {eyebrow ? <Chip>{eyebrow}</Chip> : null}\n <Text variant=\"page-title\" id={titleId} className=\"ow-hero02__title\">\n {title}\n </Text>\n <Text variant=\"lead\" className=\"ow-hero02__lead\">\n {description}\n </Text>\n <BlockActions className=\"ow-hero02__actions\" primary={primaryAction} secondary={secondaryAction} />\n {points?.length ? (\n <ul className=\"ow-hero02__points\">\n {points.map((point, index) => (\n <Text as=\"li\" key={index} tone=\"muted\" className=\"ow-hero02__point\">\n <CheckIcon size={15} />\n {point}\n </Text>\n ))}\n </ul>\n ) : null}\n </div>\n {visual}\n </div>\n </section>\n );\n}\n", "import type { ReactNode } from \"react\";\n\nimport type { BlockIconProps } from \"@blocks/shared/shared.types\";\n\n// The few icons the blocks draw themselves, as Lucide shapes (ISC licence), so the package needs no icon library.\nconst icon = (paths: ReactNode) =>\n function BlockIcon({ size = 16 }: BlockIconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n {paths}\n </svg>\n );\n };\n\nexport const CheckIcon = icon(<path d=\"M20 6 9 17l-5-5\" />);\nexport const MailIcon = icon(\n <>\n <path d=\"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\" />\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n </>,\n);\nexport const DownloadIcon = icon(\n <>\n <path d=\"M12 15V3\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <path d=\"m7 10 5 5 5-5\" />\n </>,\n);\n", "import { useEffect, useId, useRef, useState, type FormEvent } from \"react\";\n\nimport { Button, Chip, cx, Input, Text } from \"@openwarelabs/ui\";\n\nimport { CheckIcon, MailIcon } from \"@blocks/shared/icons\";\nimport type { Hero03Props } from \"./Hero03.types\";\n\nconst emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\n/** A hero with an email field: join a waitlist or start a trial in one step, with a confirmation in place of the form. */\nexport function Hero03({\n eyebrow,\n title,\n description,\n submitLabel,\n onSubmit,\n note,\n successTitle,\n successDescription,\n visual,\n labels = {},\n className,\n ...props\n}: Hero03Props) {\n const [email, setEmail] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n const [sending, setSending] = useState(false);\n const [joined, setJoined] = useState<string | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const doneRef = useRef<HTMLDivElement>(null);\n const touched = useRef(false);\n const id = useId();\n const titleId = `${id}-title`;\n\n // Moving between the form and the confirmation, take focus along so it isn't lost with the element that had it.\n useEffect(() => {\n if (!touched.current) return;\n if (joined) doneRef.current?.focus();\n else inputRef.current?.focus();\n }, [joined]);\n\n const submit = async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const value = email.trim();\n const problem = !value\n ? (labels.empty ?? \"Enter your work email to join the waitlist.\")\n : !emailPattern.test(value)\n ? (labels.invalid ?? \"That doesn't look like an email address. Try one like maya@example.com.\")\n : null;\n setError(problem);\n if (problem) {\n inputRef.current?.focus();\n return;\n }\n setSending(true);\n try {\n await onSubmit(value);\n touched.current = true;\n setJoined(value);\n } catch (failure) {\n setError(failure instanceof Error && failure.message ? failure.message : (labels.failed ?? \"That didn't go through. Try again in a moment.\"));\n inputRef.current?.focus();\n } finally {\n setSending(false);\n }\n };\n\n return (\n <section className={cx(\"ow-hero03\", className)} aria-labelledby={titleId} {...props}>\n <div className=\"ow-hero03__inner\">\n {eyebrow ? <Chip>{eyebrow}</Chip> : null}\n <Text variant=\"hero\" align=\"center\" id={titleId} className=\"ow-hero03__title\">\n {title}\n </Text>\n <Text variant=\"lead\" align=\"center\" className=\"ow-hero03__lead\">\n {description}\n </Text>\n\n {joined ? (\n <div ref={doneRef} className=\"ow-hero03__done\" tabIndex={-1}>\n <span className=\"ow-hero03__done-icon\" aria-hidden=\"true\">\n <CheckIcon size={16} />\n </span>\n <div className=\"ow-hero03__done-text\">\n <Text variant=\"label\">{successTitle}</Text>\n {successDescription ? (\n <Text variant=\"caption\" as=\"p\" className=\"ow-hero03__done-detail\">\n {successDescription(joined)}\n </Text>\n ) : null}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n touched.current = true;\n setJoined(null);\n }}\n >\n {labels.change ?? \"Change email\"}\n </Button>\n </div>\n ) : (\n <form className=\"ow-hero03__form\" noValidate onSubmit={submit}>\n <div className=\"ow-hero03__row\">\n <Input\n ref={inputRef}\n className=\"ow-hero03__input\"\n type=\"email\"\n autoComplete=\"email\"\n aria-label={labels.email ?? \"Work email\"}\n aria-describedby={error ? `${id}-error` : note ? `${id}-note` : undefined}\n placeholder={labels.placeholder ?? \"you@company.com\"}\n startContent={<MailIcon size={16} />}\n value={email}\n isInvalid={Boolean(error)}\n onChange={(event) => {\n setEmail(event.target.value);\n if (error) setError(null);\n }}\n />\n <Button type=\"submit\" variant=\"primary\" shape=\"pill\" size=\"lg\" loading={sending}>\n {submitLabel}\n </Button>\n </div>\n {error ? (\n <Text tone=\"danger\" id={`${id}-error`} className=\"ow-hero03__error\" role=\"alert\">\n {error}\n </Text>\n ) : null}\n {note ? (\n <Text variant=\"caption\" as=\"p\" id={`${id}-note`} className=\"ow-hero03__note\">\n {note}\n </Text>\n ) : null}\n </form>\n )}\n\n {visual}\n </div>\n </section>\n );\n}\n", "import { useId } from \"react\";\n\nimport { Chip, cx, DotGrid, Text } from \"@openwarelabs/ui\";\n\nimport { BlockActions } from \"@blocks/shared/BlockActions\";\nimport type { Hero04Props } from \"./Hero04.types\";\n\n/** A hero on Openware's dot grid, with the dots turning brass under the pointer and room for something either side. */\nexport function Hero04({ eyebrow, title, description, primaryAction, secondaryAction, start, end, interactive = true, className, ...props }: Hero04Props) {\n const titleId = useId();\n return (\n <section className={cx(\"ow-hero04\", className)} aria-labelledby={titleId} {...props}>\n <DotGrid fade interactive={interactive} className=\"ow-hero04__grid\">\n <div className=\"ow-hero04__layout\">\n {start}\n <div className=\"ow-hero04__text\">\n {eyebrow ? <Chip>{eyebrow}</Chip> : null}\n <Text variant=\"hero\" align=\"center\" id={titleId} className=\"ow-hero04__title\">\n {title}\n </Text>\n <Text variant=\"lead\" align=\"center\" className=\"ow-hero04__lead\">\n {description}\n </Text>\n <BlockActions className=\"ow-hero04__actions\" primary={primaryAction} secondary={secondaryAction} />\n </div>\n {end}\n </div>\n </DotGrid>\n </section>\n );\n}\n", "import { useId } from \"react\";\n\nimport { Chip, cx, Text } from \"@openwarelabs/ui\";\n\nimport { BlockActions } from \"@blocks/shared/BlockActions\";\nimport type { Hero05Props } from \"./Hero05.types\";\n\n/** The usual hero, with the headline beside the lead, then a row of customers' logos as the first proof. */\nexport function Hero05({ eyebrow, title, description, primaryAction, secondaryAction, logosTitle, logos, className, ...props }: Hero05Props) {\n const id = useId();\n return (\n <section className={cx(\"ow-hero05\", className)} aria-labelledby={`${id}-title`} {...props}>\n <div className=\"ow-hero05__inner\">\n <div className=\"ow-hero05__top\">\n <div className=\"ow-hero05__heading\">\n {eyebrow ? <Chip>{eyebrow}</Chip> : null}\n <Text variant=\"hero\" id={`${id}-title`} className=\"ow-hero05__title\">\n {title}\n </Text>\n </div>\n <div>\n <Text variant=\"lead\">{description}</Text>\n <BlockActions className=\"ow-hero05__actions\" primary={primaryAction} secondary={secondaryAction} />\n </div>\n </div>\n\n <div className=\"ow-hero05__proof\">\n <Text tone=\"muted\" id={`${id}-logos`}>\n {logosTitle}\n </Text>\n <ul className=\"ow-hero05__list\" aria-labelledby={`${id}-logos`}>\n {logos.map((logo) => (\n <li key={logo.name} className=\"ow-hero05__logo\">\n {logo.logo}\n </li>\n ))}\n </ul>\n </div>\n </div>\n </section>\n );\n}\n", "import { useEffect, useId, useState } from \"react\";\n\nimport { Button, buttonClassName, Chip, cx, Link, Text } from \"@openwarelabs/ui\";\n\nimport { DownloadIcon } from \"@blocks/shared/icons\";\nimport type { Hero06Platform, Hero06PlatformId, Hero06Props } from \"./Hero06.types\";\n\n/** The computer this page is open on, or null for phones, tablets and anything unknown. */\nfunction detectPlatform(): Hero06PlatformId | null {\n const nav = navigator as Navigator & { userAgentData?: { platform?: string } };\n const name = `${nav.userAgentData?.platform ?? \"\"} ${navigator.platform} ${navigator.userAgent}`.toLowerCase();\n if (/android|iphone|ipad|ipod/.test(name) || (name.includes(\"mac\") && navigator.maxTouchPoints > 1)) return null;\n if (name.includes(\"mac\")) return \"mac\";\n if (name.includes(\"win\")) return \"windows\";\n if (name.includes(\"linux\") || name.includes(\"x11\")) return \"linux\";\n return null;\n}\n\nconst defaultLabel = (name: string) => `Download for ${name}`;\n\n/** A hero for a desktop app: a download button for each system, with the visitor's own first, and the app beside it. */\nexport function Hero06({\n eyebrow,\n title,\n description,\n platforms,\n version,\n otherDownloads,\n downloadLabel = defaultLabel,\n visual,\n className,\n ...props\n}: Hero06Props) {\n const titleId = useId();\n // Until the page knows which computer it's on (after it mounts), the first platform leads.\n const [detected, setDetected] = useState<Hero06PlatformId | null>(null);\n useEffect(() => setDetected(detectPlatform()), []);\n\n const current = platforms.find((platform) => platform.id === detected) ?? platforms[0];\n const order = current ? [current, ...platforms.filter((platform) => platform !== current)] : [];\n\n const button = (platform: Hero06Platform, primary: boolean) => {\n const label = downloadLabel(platform.name);\n const content = primary ? label : platform.name;\n const icon = primary ? <DownloadIcon size={16} /> : null;\n if (platform.href !== undefined) {\n return (\n <a\n key={platform.id}\n className={buttonClassName({ variant: primary ? \"primary\" : \"secondary\", size: \"lg\", shape: \"pill\" })}\n href={platform.href}\n aria-label={primary ? undefined : label}\n onClick={platform.onDownload}\n >\n {icon ? <span className=\"ow-button__icon\">{icon}</span> : null}\n {content}\n </a>\n );\n }\n return (\n <Button\n key={platform.id}\n variant={primary ? \"primary\" : \"secondary\"}\n shape=\"pill\"\n size=\"lg\"\n startIcon={icon}\n aria-label={primary ? undefined : label}\n onClick={platform.onDownload}\n >\n {content}\n </Button>\n );\n };\n\n return (\n <section className={cx(\"ow-hero06\", className)} aria-labelledby={titleId} {...props}>\n <div className=\"ow-hero06__inner\">\n <div className=\"ow-hero06__text\">\n {eyebrow ? <Chip>{eyebrow}</Chip> : null}\n <Text variant=\"page-title\" id={titleId} className=\"ow-hero06__title\">\n {title}\n </Text>\n <Text variant=\"lead\" className=\"ow-hero06__lead\">\n {description}\n </Text>\n <div className=\"ow-hero06__buttons\">{order.map((platform, index) => button(platform, index === 0))}</div>\n {version || current?.requirement || otherDownloads ? (\n <Text variant=\"caption\" as=\"p\" className=\"ow-hero06__meta\">\n {version ? <span>{version}</span> : null}\n {current?.requirement ? <span>{current.requirement}</span> : null}\n {otherDownloads ? (\n <span className=\"ow-hero06__other\">\n <Link href={otherDownloads.href} variant=\"muted\">\n {otherDownloads.label}\n </Link>\n </span>\n ) : null}\n </Text>\n ) : null}\n </div>\n {visual}\n </div>\n </section>\n );\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_ui", "import_jsx_runtime", "import_react", "import_ui", "import_jsx_runtime", "import_jsx_runtime", "import_react", "import_ui", "import_jsx_runtime", "import_react", "import_ui", "import_jsx_runtime", "import_react", "import_ui", "import_jsx_runtime", "import_react", "import_ui", "import_jsx_runtime", "icon"]
7
+ }
@@ -0,0 +1,13 @@
1
+ export { Hero01 } from "./heroes/Hero01/Hero01.cjs";
2
+ export type { Hero01Props } from "./heroes/Hero01/Hero01.types.cjs";
3
+ export { Hero02 } from "./heroes/Hero02/Hero02.cjs";
4
+ export type { Hero02Props } from "./heroes/Hero02/Hero02.types.cjs";
5
+ export { Hero03 } from "./heroes/Hero03/Hero03.cjs";
6
+ export type { Hero03Labels, Hero03Props } from "./heroes/Hero03/Hero03.types.cjs";
7
+ export { Hero04 } from "./heroes/Hero04/Hero04.cjs";
8
+ export type { Hero04Props } from "./heroes/Hero04/Hero04.types.cjs";
9
+ export { Hero05 } from "./heroes/Hero05/Hero05.cjs";
10
+ export type { Hero05Logo, Hero05Props } from "./heroes/Hero05/Hero05.types.cjs";
11
+ export { Hero06 } from "./heroes/Hero06/Hero06.cjs";
12
+ export type { Hero06Platform, Hero06PlatformId, Hero06Props } from "./heroes/Hero06/Hero06.types.cjs";
13
+ export type { BlockAction, BlockLink } from "./shared/shared.types.cjs";
@@ -0,0 +1,13 @@
1
+ export { Hero01 } from "./heroes/Hero01/Hero01.js";
2
+ export type { Hero01Props } from "./heroes/Hero01/Hero01.types.js";
3
+ export { Hero02 } from "./heroes/Hero02/Hero02.js";
4
+ export type { Hero02Props } from "./heroes/Hero02/Hero02.types.js";
5
+ export { Hero03 } from "./heroes/Hero03/Hero03.js";
6
+ export type { Hero03Labels, Hero03Props } from "./heroes/Hero03/Hero03.types.js";
7
+ export { Hero04 } from "./heroes/Hero04/Hero04.js";
8
+ export type { Hero04Props } from "./heroes/Hero04/Hero04.types.js";
9
+ export { Hero05 } from "./heroes/Hero05/Hero05.js";
10
+ export type { Hero05Logo, Hero05Props } from "./heroes/Hero05/Hero05.types.js";
11
+ export { Hero06 } from "./heroes/Hero06/Hero06.js";
12
+ export type { Hero06Platform, Hero06PlatformId, Hero06Props } from "./heroes/Hero06/Hero06.types.js";
13
+ export type { BlockAction, BlockLink } from "./shared/shared.types.js";