@puzzle-ui/pieces 0.0.0-stage → 0.5.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.
- package/dist/LICENSE +21 -0
- package/dist/components/hero/accommodation-hero.cjs +13 -0
- package/dist/components/hero/accommodation-hero.cjs.map +1 -0
- package/dist/components/hero/accommodation-hero.d.cts +3 -0
- package/dist/components/hero/accommodation-hero.d.ts +3 -0
- package/dist/components/hero/accommodation-hero.js +14 -0
- package/dist/components/hero/accommodation-hero.js.map +1 -0
- package/dist/components/hero/agency-hero.cjs +13 -0
- package/dist/components/hero/agency-hero.cjs.map +1 -0
- package/dist/components/hero/agency-hero.d.cts +3 -0
- package/dist/components/hero/agency-hero.d.ts +3 -0
- package/dist/components/hero/agency-hero.js +14 -0
- package/dist/components/hero/agency-hero.js.map +1 -0
- package/dist/components/hero/app-hero.cjs +13 -0
- package/dist/components/hero/app-hero.cjs.map +1 -0
- package/dist/components/hero/app-hero.d.cts +3 -0
- package/dist/components/hero/app-hero.d.ts +3 -0
- package/dist/components/hero/app-hero.js +14 -0
- package/dist/components/hero/app-hero.js.map +1 -0
- package/dist/components/hero/campaign-hero.cjs +13 -0
- package/dist/components/hero/campaign-hero.cjs.map +1 -0
- package/dist/components/hero/campaign-hero.d.cts +3 -0
- package/dist/components/hero/campaign-hero.d.ts +3 -0
- package/dist/components/hero/campaign-hero.js +14 -0
- package/dist/components/hero/campaign-hero.js.map +1 -0
- package/dist/components/hero/centered-hero.cjs +12 -0
- package/dist/components/hero/centered-hero.cjs.map +1 -0
- package/dist/components/hero/centered-hero.d.cts +3 -0
- package/dist/components/hero/centered-hero.d.ts +3 -0
- package/dist/components/hero/centered-hero.js +13 -0
- package/dist/components/hero/centered-hero.js.map +1 -0
- package/dist/components/hero/coming-soon-hero.cjs +12 -0
- package/dist/components/hero/coming-soon-hero.cjs.map +1 -0
- package/dist/components/hero/coming-soon-hero.d.cts +3 -0
- package/dist/components/hero/coming-soon-hero.d.ts +3 -0
- package/dist/components/hero/coming-soon-hero.js +13 -0
- package/dist/components/hero/coming-soon-hero.js.map +1 -0
- package/dist/components/hero/create-hero-preset.cjs +11 -0
- package/dist/components/hero/create-hero-preset.cjs.map +1 -0
- package/dist/components/hero/create-hero-preset.js +11 -0
- package/dist/components/hero/create-hero-preset.js.map +1 -0
- package/dist/components/hero/dashboard-welcome-hero.cjs +12 -0
- package/dist/components/hero/dashboard-welcome-hero.cjs.map +1 -0
- package/dist/components/hero/dashboard-welcome-hero.d.cts +3 -0
- package/dist/components/hero/dashboard-welcome-hero.d.ts +3 -0
- package/dist/components/hero/dashboard-welcome-hero.js +13 -0
- package/dist/components/hero/dashboard-welcome-hero.js.map +1 -0
- package/dist/components/hero/editorial-hero.cjs +13 -0
- package/dist/components/hero/editorial-hero.cjs.map +1 -0
- package/dist/components/hero/editorial-hero.d.cts +3 -0
- package/dist/components/hero/editorial-hero.d.ts +3 -0
- package/dist/components/hero/editorial-hero.js +14 -0
- package/dist/components/hero/editorial-hero.js.map +1 -0
- package/dist/components/hero/full-screen-hero.cjs +13 -0
- package/dist/components/hero/full-screen-hero.cjs.map +1 -0
- package/dist/components/hero/full-screen-hero.d.cts +3 -0
- package/dist/components/hero/full-screen-hero.d.ts +3 -0
- package/dist/components/hero/full-screen-hero.js +14 -0
- package/dist/components/hero/full-screen-hero.js.map +1 -0
- package/dist/components/hero/hero-video.cjs +45 -0
- package/dist/components/hero/hero-video.cjs.map +1 -0
- package/dist/components/hero/hero-video.js +45 -0
- package/dist/components/hero/hero-video.js.map +1 -0
- package/dist/components/hero/hero.cjs +98 -0
- package/dist/components/hero/hero.cjs.map +1 -0
- package/dist/components/hero/hero.css +312 -0
- package/dist/components/hero/hero.d.cts +3 -0
- package/dist/components/hero/hero.d.ts +3 -0
- package/dist/components/hero/hero.js +98 -0
- package/dist/components/hero/hero.js.map +1 -0
- package/dist/components/hero/hero.types.d.cts +44 -0
- package/dist/components/hero/hero.types.d.ts +44 -0
- package/dist/components/hero/hero.utils.cjs +8 -0
- package/dist/components/hero/hero.utils.cjs.map +1 -0
- package/dist/components/hero/hero.utils.js +8 -0
- package/dist/components/hero/hero.utils.js.map +1 -0
- package/dist/components/hero/image-hero.cjs +16 -0
- package/dist/components/hero/image-hero.cjs.map +1 -0
- package/dist/components/hero/image-hero.d.cts +6 -0
- package/dist/components/hero/image-hero.d.ts +6 -0
- package/dist/components/hero/image-hero.js +16 -0
- package/dist/components/hero/image-hero.js.map +1 -0
- package/dist/components/hero/index.d.cts +22 -0
- package/dist/components/hero/index.d.ts +22 -0
- package/dist/components/hero/minimal-hero.cjs +12 -0
- package/dist/components/hero/minimal-hero.cjs.map +1 -0
- package/dist/components/hero/minimal-hero.d.cts +3 -0
- package/dist/components/hero/minimal-hero.d.ts +3 -0
- package/dist/components/hero/minimal-hero.js +13 -0
- package/dist/components/hero/minimal-hero.js.map +1 -0
- package/dist/components/hero/print-shop-hero.cjs +13 -0
- package/dist/components/hero/print-shop-hero.cjs.map +1 -0
- package/dist/components/hero/print-shop-hero.d.cts +3 -0
- package/dist/components/hero/print-shop-hero.d.ts +3 -0
- package/dist/components/hero/print-shop-hero.js +14 -0
- package/dist/components/hero/print-shop-hero.js.map +1 -0
- package/dist/components/hero/product-hero.cjs +13 -0
- package/dist/components/hero/product-hero.cjs.map +1 -0
- package/dist/components/hero/product-hero.d.cts +3 -0
- package/dist/components/hero/product-hero.d.ts +3 -0
- package/dist/components/hero/product-hero.js +14 -0
- package/dist/components/hero/product-hero.js.map +1 -0
- package/dist/components/hero/restaurant-hero.cjs +13 -0
- package/dist/components/hero/restaurant-hero.cjs.map +1 -0
- package/dist/components/hero/restaurant-hero.d.cts +3 -0
- package/dist/components/hero/restaurant-hero.d.ts +3 -0
- package/dist/components/hero/restaurant-hero.js +14 -0
- package/dist/components/hero/restaurant-hero.js.map +1 -0
- package/dist/components/hero/saas-hero.cjs +13 -0
- package/dist/components/hero/saas-hero.cjs.map +1 -0
- package/dist/components/hero/saas-hero.d.cts +3 -0
- package/dist/components/hero/saas-hero.d.ts +3 -0
- package/dist/components/hero/saas-hero.js +14 -0
- package/dist/components/hero/saas-hero.js.map +1 -0
- package/dist/components/hero/search-hero.cjs +12 -0
- package/dist/components/hero/search-hero.cjs.map +1 -0
- package/dist/components/hero/search-hero.d.cts +3 -0
- package/dist/components/hero/search-hero.d.ts +3 -0
- package/dist/components/hero/search-hero.js +13 -0
- package/dist/components/hero/search-hero.js.map +1 -0
- package/dist/components/hero/split-hero.cjs +12 -0
- package/dist/components/hero/split-hero.cjs.map +1 -0
- package/dist/components/hero/split-hero.d.cts +3 -0
- package/dist/components/hero/split-hero.d.ts +3 -0
- package/dist/components/hero/split-hero.js +13 -0
- package/dist/components/hero/split-hero.js.map +1 -0
- package/dist/components/hero/store-hero.cjs +13 -0
- package/dist/components/hero/store-hero.cjs.map +1 -0
- package/dist/components/hero/store-hero.d.cts +3 -0
- package/dist/components/hero/store-hero.d.ts +3 -0
- package/dist/components/hero/store-hero.js +14 -0
- package/dist/components/hero/store-hero.js.map +1 -0
- package/dist/components/hero/video-hero.cjs +16 -0
- package/dist/components/hero/video-hero.cjs.map +1 -0
- package/dist/components/hero/video-hero.d.cts +6 -0
- package/dist/components/hero/video-hero.d.ts +6 -0
- package/dist/components/hero/video-hero.js +16 -0
- package/dist/components/hero/video-hero.js.map +1 -0
- package/dist/index.cjs +41 -0
- package/dist/index.d.cts +23 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +21 -0
- package/package.json +68 -4
- package/README.md +0 -3
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
const require_hero_video = require("./hero-video.cjs");
|
|
2
|
+
;/* empty css */
|
|
3
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
|
+
// src/components/hero/hero.tsx
|
|
5
|
+
const Hero = ({ as: Component = "section", titleAs: Heading = "h1", id, testId, className, contentClassName, mediaClassName, style, layout = "split", mediaPosition = "right", alignment = "start", height = "auto", theme = "light", overlay = "none", contentWidth = "normal", reverseOnMobile = true, eyebrow, title, description, media, backgroundImage, backgroundVideo, actions, search, meta, children, role, ariaLabel, ariaLabelledBy }) => {
|
|
6
|
+
const hasMedia = Boolean(media || backgroundImage || backgroundVideo);
|
|
7
|
+
const hasBackground = Boolean(backgroundImage || backgroundVideo || mediaPosition === "background" && media);
|
|
8
|
+
const rootClassName = ["puzzle-hero", className].filter(Boolean).join(" ");
|
|
9
|
+
const contentClasses = ["puzzle-hero__content", contentClassName].filter(Boolean).join(" ");
|
|
10
|
+
const mediaClasses = ["puzzle-hero__media", mediaClassName].filter(Boolean).join(" ");
|
|
11
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Component, {
|
|
12
|
+
id,
|
|
13
|
+
"data-testid": testId,
|
|
14
|
+
className: rootClassName,
|
|
15
|
+
style,
|
|
16
|
+
"data-layout": layout,
|
|
17
|
+
"data-media-position": mediaPosition,
|
|
18
|
+
"data-alignment": alignment,
|
|
19
|
+
"data-height": height,
|
|
20
|
+
"data-theme": theme,
|
|
21
|
+
"data-overlay": overlay,
|
|
22
|
+
"data-content-width": contentWidth,
|
|
23
|
+
"data-has-media": hasMedia,
|
|
24
|
+
"data-has-background": hasBackground,
|
|
25
|
+
"data-reverse-mobile": reverseOnMobile,
|
|
26
|
+
"aria-label": ariaLabel,
|
|
27
|
+
"aria-labelledby": ariaLabelledBy,
|
|
28
|
+
role,
|
|
29
|
+
children: [hasBackground && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
30
|
+
className: "puzzle-hero__background",
|
|
31
|
+
"aria-hidden": "true",
|
|
32
|
+
"data-hero-background": true,
|
|
33
|
+
children: [
|
|
34
|
+
backgroundImage && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
35
|
+
className: "puzzle-hero__background-image",
|
|
36
|
+
src: backgroundImage,
|
|
37
|
+
alt: "",
|
|
38
|
+
loading: "eager",
|
|
39
|
+
decoding: "async",
|
|
40
|
+
draggable: false
|
|
41
|
+
}),
|
|
42
|
+
backgroundVideo && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_hero_video.HeroVideo, {
|
|
43
|
+
source: backgroundVideo,
|
|
44
|
+
className: "puzzle-hero__background-video"
|
|
45
|
+
}),
|
|
46
|
+
mediaPosition === "background" && media && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
47
|
+
className: "puzzle-hero__background-media",
|
|
48
|
+
children: media
|
|
49
|
+
}),
|
|
50
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "puzzle-hero__overlay" })
|
|
51
|
+
]
|
|
52
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
53
|
+
className: "puzzle-hero__inner",
|
|
54
|
+
"data-hero-inner": true,
|
|
55
|
+
children: [media && mediaPosition !== "background" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
56
|
+
className: mediaClasses,
|
|
57
|
+
"data-hero-media": true,
|
|
58
|
+
children: media
|
|
59
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
60
|
+
className: contentClasses,
|
|
61
|
+
"data-hero-content": true,
|
|
62
|
+
children: [
|
|
63
|
+
eyebrow && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
64
|
+
className: "puzzle-hero__eyebrow",
|
|
65
|
+
children: eyebrow
|
|
66
|
+
}),
|
|
67
|
+
title && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Heading, {
|
|
68
|
+
className: "puzzle-hero__title",
|
|
69
|
+
children: title
|
|
70
|
+
}),
|
|
71
|
+
description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
72
|
+
className: "puzzle-hero__description",
|
|
73
|
+
children: description
|
|
74
|
+
}),
|
|
75
|
+
children && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
76
|
+
className: "puzzle-hero__children",
|
|
77
|
+
children
|
|
78
|
+
}),
|
|
79
|
+
actions && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
80
|
+
className: "puzzle-hero__actions",
|
|
81
|
+
children: actions
|
|
82
|
+
}),
|
|
83
|
+
search && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
84
|
+
className: "puzzle-hero__search",
|
|
85
|
+
children: search
|
|
86
|
+
}),
|
|
87
|
+
meta && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
88
|
+
className: "puzzle-hero__meta",
|
|
89
|
+
children: meta
|
|
90
|
+
})
|
|
91
|
+
]
|
|
92
|
+
})]
|
|
93
|
+
})]
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
exports.Hero = Hero;
|
|
97
|
+
|
|
98
|
+
//# sourceMappingURL=hero.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hero.cjs","names":["HeroVideo"],"sources":["../../../src/components/hero/hero.tsx"],"sourcesContent":["import { HeroVideo } from \"./hero-video\";\n\nimport type { HeroProps } from \"./hero.types\";\n\nimport \"./hero.css\";\n\nconst Hero = ({\n as: Component = \"section\",\n titleAs: Heading = \"h1\",\n\n id,\n testId,\n className,\n contentClassName,\n mediaClassName,\n style,\n\n layout = \"split\",\n mediaPosition = \"right\",\n alignment = \"start\",\n height = \"auto\",\n theme = \"light\",\n overlay = \"none\",\n contentWidth = \"normal\",\n\n reverseOnMobile = true,\n\n eyebrow,\n title,\n description,\n\n media,\n backgroundImage,\n backgroundVideo,\n\n actions,\n search,\n meta,\n\n children,\n\n role,\n ariaLabel,\n ariaLabelledBy,\n}: HeroProps) => {\n const hasMedia = Boolean(media || backgroundImage || backgroundVideo);\n\n const hasBackground = Boolean(\n backgroundImage ||\n backgroundVideo ||\n (mediaPosition === \"background\" && media),\n );\n\n const rootClassName = [\"puzzle-hero\", className].filter(Boolean).join(\" \");\n\n const contentClasses = [\"puzzle-hero__content\", contentClassName]\n .filter(Boolean)\n .join(\" \");\n\n const mediaClasses = [\"puzzle-hero__media\", mediaClassName]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <Component\n id={id}\n data-testid={testId}\n className={rootClassName}\n style={style}\n data-layout={layout}\n data-media-position={mediaPosition}\n data-alignment={alignment}\n data-height={height}\n data-theme={theme}\n data-overlay={overlay}\n data-content-width={contentWidth}\n data-has-media={hasMedia}\n data-has-background={hasBackground}\n data-reverse-mobile={reverseOnMobile}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n role={role}\n >\n {hasBackground && (\n <div\n className=\"puzzle-hero__background\"\n aria-hidden=\"true\"\n data-hero-background\n >\n {backgroundImage && (\n <img\n className=\"puzzle-hero__background-image\"\n src={backgroundImage}\n alt=\"\"\n loading=\"eager\"\n decoding=\"async\"\n draggable={false}\n />\n )}\n\n {backgroundVideo && (\n <HeroVideo\n source={backgroundVideo}\n className=\"puzzle-hero__background-video\"\n />\n )}\n\n {mediaPosition === \"background\" && media && (\n <div className=\"puzzle-hero__background-media\">{media}</div>\n )}\n\n <div className=\"puzzle-hero__overlay\" />\n </div>\n )}\n\n <div className=\"puzzle-hero__inner\" data-hero-inner>\n {media && mediaPosition !== \"background\" && (\n <div className={mediaClasses} data-hero-media>\n {media}\n </div>\n )}\n\n <div className={contentClasses} data-hero-content>\n {eyebrow && <div className=\"puzzle-hero__eyebrow\">{eyebrow}</div>}\n\n {title && <Heading className=\"puzzle-hero__title\">{title}</Heading>}\n\n {description && (\n <div className=\"puzzle-hero__description\">{description}</div>\n )}\n\n {children && <div className=\"puzzle-hero__children\">{children}</div>}\n\n {actions && <div className=\"puzzle-hero__actions\">{actions}</div>}\n\n {search && <div className=\"puzzle-hero__search\">{search}</div>}\n\n {meta && <div className=\"puzzle-hero__meta\">{meta}</div>}\n </div>\n </div>\n </Component>\n );\n};\n\nexport { Hero };\n"],"mappings":";;;;AAMA,MAAM,QAAQ,EACZ,IAAI,YAAY,WAChB,SAAS,UAAU,MAEnB,IACA,QACA,WACA,kBACA,gBACA,OAEA,SAAS,SACT,gBAAgB,SAChB,YAAY,SACZ,SAAS,QACT,QAAQ,SACR,UAAU,QACV,eAAe,UAEf,kBAAkB,MAElB,SACA,OACA,aAEA,OACA,iBACA,iBAEA,SACA,QACA,MAEA,UAEA,MACA,WACA,qBACe;CACf,MAAM,WAAW,QAAQ,SAAS,mBAAmB,eAAe;CAEpE,MAAM,gBAAgB,QACpB,mBACA,mBACC,kBAAkB,gBAAgB,KACrC;CAEA,MAAM,gBAAgB,CAAC,eAAe,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CAEzE,MAAM,iBAAiB,CAAC,wBAAwB,gBAAgB,CAAC,CAC9D,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,MAAM,eAAe,CAAC,sBAAsB,cAAc,CAAC,CACxD,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD;EACM;EACJ,eAAa;EACb,WAAW;EACJ;EACP,eAAa;EACb,uBAAqB;EACrB,kBAAgB;EAChB,eAAa;EACb,cAAY;EACZ,gBAAc;EACd,sBAAoB;EACpB,kBAAgB;EAChB,uBAAqB;EACrB,uBAAqB;EACrB,cAAY;EACZ,mBAAiB;EACX;EAjBR,UAAA,CAmBG,iBACC,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GACE,WAAU;GACV,eAAY;GACZ,wBAAA;GAHF,UAAA;IAKG,mBACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KACE,WAAU;KACV,KAAK;KACL,KAAI;KACJ,SAAQ;KACR,UAAS;KACT,WAAW;IACZ,CAAA;IAGF,mBACC,iBAAA,GAAA,kBAAA,IAAA,CAACA,mBAAAA,WAAD;KACE,QAAQ;KACR,WAAU;IACX,CAAA;IAGF,kBAAkB,gBAAgB,SACjC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KAAiC,UAAA;IAAW,CAAA;IAG7D,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,WAAU,uBAAwB,CAAA;GACpC;EAGP,CAAA,GAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAqB,mBAAA;GAApC,UAAA,CACG,SAAS,kBAAkB,gBAC1B,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAW;IAAc,mBAAA;IAC3B,UAAA;GACE,CAAA,GAGP,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAW;IAAgB,qBAAA;IAAhC,UAAA;KACG,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAAwB,UAAA;KAAa,CAAA;KAE/D,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAS,WAAU;MAAsB,UAAA;KAAe,CAAA;KAEjE,eACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAA4B,UAAA;KAAiB,CAAA;KAG7D,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAAyB;KAAc,CAAA;KAElE,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAAwB,UAAA;KAAa,CAAA;KAE/D,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAAuB,UAAA;KAAY,CAAA;KAE5D,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAAqB,UAAA;KAAU,CAAA;IACpD;GACF,CAAA,CAAA;EACI,CAAA,CAAA;;AAEf"}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
.puzzle-hero {
|
|
2
|
+
--puzzle-hero-background: var(--puzzle-color-background);
|
|
3
|
+
--puzzle-hero-foreground: var(--puzzle-color-text);
|
|
4
|
+
--puzzle-hero-muted: var(--puzzle-color-text-muted);
|
|
5
|
+
--puzzle-hero-padding-inline: var(--puzzle-space-5);
|
|
6
|
+
--puzzle-hero-padding-block: var(--puzzle-space-12);
|
|
7
|
+
--puzzle-hero-gap: var(--puzzle-space-8);
|
|
8
|
+
--puzzle-hero-content-width: var(--puzzle-content-width);
|
|
9
|
+
isolation: isolate;
|
|
10
|
+
width: 100%;
|
|
11
|
+
min-height: 0;
|
|
12
|
+
color: var(--puzzle-hero-foreground);
|
|
13
|
+
background: var(--puzzle-hero-background);
|
|
14
|
+
display: flex;
|
|
15
|
+
position: relative;
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.puzzle-hero[data-theme="light"] {
|
|
20
|
+
--puzzle-hero-background: var(--puzzle-color-background);
|
|
21
|
+
--puzzle-hero-foreground: var(--puzzle-color-text);
|
|
22
|
+
--puzzle-hero-muted: var(--puzzle-color-text-muted);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.puzzle-hero[data-theme="dark"] {
|
|
26
|
+
--puzzle-hero-background: var(--puzzle-color-text);
|
|
27
|
+
--puzzle-hero-foreground: var(--puzzle-color-background);
|
|
28
|
+
--puzzle-hero-muted: var(--puzzle-color-background);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.puzzle-hero[data-theme="contrast"] {
|
|
32
|
+
--puzzle-hero-background: var(--puzzle-color-surface);
|
|
33
|
+
--puzzle-hero-foreground: var(--puzzle-color-text);
|
|
34
|
+
--puzzle-hero-muted: var(--puzzle-color-text-muted);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.puzzle-hero[data-theme="brand"] {
|
|
38
|
+
--puzzle-hero-background: var(--puzzle-color-primary);
|
|
39
|
+
--puzzle-hero-foreground: var(--puzzle-color-background);
|
|
40
|
+
--puzzle-hero-muted: var(--puzzle-color-background);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.puzzle-hero__background {
|
|
44
|
+
z-index: 0;
|
|
45
|
+
pointer-events: none;
|
|
46
|
+
position: absolute;
|
|
47
|
+
inset: 0;
|
|
48
|
+
overflow: hidden;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.puzzle-hero__background-image, .puzzle-hero__background-video, .puzzle-hero__background-media {
|
|
52
|
+
object-fit: cover;
|
|
53
|
+
width: 100%;
|
|
54
|
+
height: 100%;
|
|
55
|
+
position: absolute;
|
|
56
|
+
inset: 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.puzzle-hero__background-image, .puzzle-hero__background-video {
|
|
60
|
+
object-position: center;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.puzzle-hero__background-media {
|
|
64
|
+
overflow: hidden;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.puzzle-hero__background-media img, .puzzle-hero__background-media video, .puzzle-hero__background-media picture {
|
|
68
|
+
object-fit: cover;
|
|
69
|
+
width: 100%;
|
|
70
|
+
height: 100%;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.puzzle-hero__overlay {
|
|
74
|
+
z-index: 1;
|
|
75
|
+
background: none;
|
|
76
|
+
position: absolute;
|
|
77
|
+
inset: 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.puzzle-hero[data-overlay="subtle"] .puzzle-hero__overlay {
|
|
81
|
+
background: var(--puzzle-color-overlay-subtle);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.puzzle-hero[data-overlay="strong"] .puzzle-hero__overlay {
|
|
85
|
+
background: var(--puzzle-color-overlay-strong);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.puzzle-hero[data-overlay="gradient"] .puzzle-hero__overlay {
|
|
89
|
+
background: linear-gradient(90deg,
|
|
90
|
+
var(--puzzle-color-overlay-strong) 0%,
|
|
91
|
+
var(--puzzle-color-overlay-subtle) 65%,
|
|
92
|
+
transparent 100%);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.puzzle-hero__inner {
|
|
96
|
+
z-index: 2;
|
|
97
|
+
width: min(calc(100% - var(--puzzle-hero-padding-inline) * 2), var(--puzzle-container-width));
|
|
98
|
+
min-height: inherit;
|
|
99
|
+
padding-block: var(--puzzle-hero-padding-block);
|
|
100
|
+
align-items: center;
|
|
101
|
+
gap: var(--puzzle-hero-gap);
|
|
102
|
+
grid-template-columns: minmax(0, 1fr);
|
|
103
|
+
margin-inline: auto;
|
|
104
|
+
display: grid;
|
|
105
|
+
position: relative;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.puzzle-hero[data-layout="split"] .puzzle-hero__inner {
|
|
109
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.puzzle-hero[data-layout="asymmetric"] .puzzle-hero__inner {
|
|
113
|
+
grid-template-columns: minmax(0, 1.2fr) minmax(0, .8fr);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.puzzle-hero[data-layout="full-width"] .puzzle-hero__inner {
|
|
117
|
+
width: 100%;
|
|
118
|
+
max-width: none;
|
|
119
|
+
padding-inline: var(--puzzle-hero-padding-inline);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.puzzle-hero[data-layout="centered"] .puzzle-hero__inner, .puzzle-hero[data-media-position="background"] .puzzle-hero__inner, .puzzle-hero[data-has-media="false"] .puzzle-hero__inner {
|
|
123
|
+
grid-template-columns: minmax(0, 1fr);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.puzzle-hero__content {
|
|
127
|
+
justify-content: center;
|
|
128
|
+
align-items: flex-start;
|
|
129
|
+
gap: var(--puzzle-space-5);
|
|
130
|
+
flex-direction: column;
|
|
131
|
+
min-width: 0;
|
|
132
|
+
display: flex;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.puzzle-hero[data-alignment="start"] .puzzle-hero__content {
|
|
136
|
+
text-align: start;
|
|
137
|
+
align-items: flex-start;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.puzzle-hero[data-alignment="center"] .puzzle-hero__content {
|
|
141
|
+
text-align: center;
|
|
142
|
+
align-items: center;
|
|
143
|
+
margin-inline: auto;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.puzzle-hero[data-alignment="end"] .puzzle-hero__content {
|
|
147
|
+
text-align: end;
|
|
148
|
+
align-items: flex-end;
|
|
149
|
+
margin-inline-start: auto;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.puzzle-hero[data-content-width="narrow"] .puzzle-hero__content {
|
|
153
|
+
max-width: var(--puzzle-prose-width);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.puzzle-hero[data-content-width="normal"] .puzzle-hero__content {
|
|
157
|
+
max-width: var(--puzzle-content-width);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.puzzle-hero[data-content-width="wide"] .puzzle-hero__content {
|
|
161
|
+
max-width: var(--puzzle-container-width);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.puzzle-hero[data-content-width="full"] .puzzle-hero__content {
|
|
165
|
+
max-width: none;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.puzzle-hero[data-layout="centered"] .puzzle-hero__content {
|
|
169
|
+
width: 100%;
|
|
170
|
+
margin-inline: auto;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.puzzle-hero__eyebrow {
|
|
174
|
+
color: var(--puzzle-hero-muted);
|
|
175
|
+
font-family: var(--puzzle-font-body);
|
|
176
|
+
font-size: var(--puzzle-font-size-sm);
|
|
177
|
+
font-weight: var(--puzzle-font-weight-semibold);
|
|
178
|
+
line-height: var(--puzzle-font-line-height-normal);
|
|
179
|
+
letter-spacing: var(--puzzle-font-letter-spacing-wide);
|
|
180
|
+
text-transform: uppercase;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.puzzle-hero__title {
|
|
184
|
+
max-width: 100%;
|
|
185
|
+
color: inherit;
|
|
186
|
+
font-family: var(--puzzle-font-heading);
|
|
187
|
+
font-size: clamp(var(--puzzle-font-size-4xl), 5.5vw, var(--puzzle-font-size-6xl));
|
|
188
|
+
font-weight: var(--puzzle-font-weight-bold);
|
|
189
|
+
line-height: var(--puzzle-font-line-height-tight);
|
|
190
|
+
letter-spacing: var(--puzzle-font-letter-spacing-tighter);
|
|
191
|
+
text-wrap: balance;
|
|
192
|
+
margin: 0;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.puzzle-hero__description {
|
|
196
|
+
max-width: var(--puzzle-prose-width);
|
|
197
|
+
color: var(--puzzle-hero-muted);
|
|
198
|
+
font-family: var(--puzzle-font-body);
|
|
199
|
+
font-size: var(--puzzle-font-size-lg);
|
|
200
|
+
line-height: var(--puzzle-font-line-height-relaxed);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.puzzle-hero__children {
|
|
204
|
+
width: 100%;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.puzzle-hero__actions {
|
|
208
|
+
align-items: center;
|
|
209
|
+
gap: var(--puzzle-space-3);
|
|
210
|
+
flex-wrap: wrap;
|
|
211
|
+
width: 100%;
|
|
212
|
+
display: flex;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.puzzle-hero__search {
|
|
216
|
+
width: 100%;
|
|
217
|
+
max-width: var(--puzzle-container-width);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.puzzle-hero__meta {
|
|
221
|
+
align-items: center;
|
|
222
|
+
gap: var(--puzzle-space-4);
|
|
223
|
+
color: var(--puzzle-hero-muted);
|
|
224
|
+
font-size: var(--puzzle-font-size-sm);
|
|
225
|
+
flex-wrap: wrap;
|
|
226
|
+
display: flex;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.puzzle-hero__media {
|
|
230
|
+
justify-content: center;
|
|
231
|
+
align-self: stretch;
|
|
232
|
+
align-items: center;
|
|
233
|
+
width: 100%;
|
|
234
|
+
min-width: 0;
|
|
235
|
+
display: flex;
|
|
236
|
+
position: relative;
|
|
237
|
+
overflow: hidden;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.puzzle-hero__media img, .puzzle-hero__media video, .puzzle-hero__media picture {
|
|
241
|
+
max-width: 100%;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.puzzle-hero__media img, .puzzle-hero__media video {
|
|
245
|
+
object-fit: cover;
|
|
246
|
+
height: auto;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.puzzle-hero[data-layout="split"][data-media-position="left"] .puzzle-hero__media, .puzzle-hero[data-layout="asymmetric"][data-media-position="left"] .puzzle-hero__media {
|
|
250
|
+
grid-area: 1 / 1;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.puzzle-hero[data-layout="split"][data-media-position="left"] .puzzle-hero__content, .puzzle-hero[data-layout="asymmetric"][data-media-position="left"] .puzzle-hero__content, .puzzle-hero[data-layout="split"][data-media-position="right"] .puzzle-hero__media, .puzzle-hero[data-layout="asymmetric"][data-media-position="right"] .puzzle-hero__media {
|
|
254
|
+
grid-area: 1 / 2;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.puzzle-hero[data-layout="split"][data-media-position="right"] .puzzle-hero__content, .puzzle-hero[data-layout="asymmetric"][data-media-position="right"] .puzzle-hero__content {
|
|
258
|
+
grid-area: 1 / 1;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.puzzle-hero[data-height="large"] {
|
|
262
|
+
min-height: clamp(var(--puzzle-space-20), 75svh, var(--puzzle-space-24) * 2);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.puzzle-hero[data-height="viewport"] {
|
|
266
|
+
min-height: 100svh;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
@media (width <= 48rem) {
|
|
270
|
+
.puzzle-hero {
|
|
271
|
+
--puzzle-hero-padding-inline: var(--puzzle-space-4);
|
|
272
|
+
--puzzle-hero-padding-block: var(--puzzle-space-8);
|
|
273
|
+
--puzzle-hero-gap: var(--puzzle-space-6);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.puzzle-hero__inner, .puzzle-hero[data-layout="split"] .puzzle-hero__inner, .puzzle-hero[data-layout="asymmetric"] .puzzle-hero__inner {
|
|
277
|
+
gap: var(--puzzle-hero-gap);
|
|
278
|
+
grid-template-columns: minmax(0, 1fr);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.puzzle-hero[data-height="large"] {
|
|
282
|
+
min-height: auto;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
.puzzle-hero[data-layout="split"] .puzzle-hero__content, .puzzle-hero[data-layout="asymmetric"] .puzzle-hero__content, .puzzle-hero[data-layout="split"] .puzzle-hero__media, .puzzle-hero[data-layout="asymmetric"] .puzzle-hero__media {
|
|
286
|
+
grid-area: auto / 1;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.puzzle-hero[data-reverse-mobile="true"] .puzzle-hero__media, .puzzle-hero[data-reverse-mobile="false"] .puzzle-hero__content {
|
|
290
|
+
order: -1;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
.puzzle-hero__title {
|
|
294
|
+
font-size: clamp(var(--puzzle-font-size-3xl), 10vw, var(--puzzle-font-size-5xl));
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.puzzle-hero[data-overlay="gradient"] .puzzle-hero__overlay {
|
|
298
|
+
background: linear-gradient(180deg,
|
|
299
|
+
var(--puzzle-color-overlay-strong) 0%,
|
|
300
|
+
var(--puzzle-color-overlay-subtle) 65%,
|
|
301
|
+
transparent 100%);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
@media (prefers-reduced-motion: reduce) {
|
|
306
|
+
.puzzle-hero, .puzzle-hero *, .puzzle-hero :before, .puzzle-hero :after {
|
|
307
|
+
scroll-behavior: auto;
|
|
308
|
+
animation-duration: var(--puzzle-duration-0);
|
|
309
|
+
transition-duration: var(--puzzle-duration-0);
|
|
310
|
+
animation-iteration-count: 1;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { HeroProps } from "./hero.types.cjs";
|
|
2
|
+
declare const Hero: ({ as: Component, titleAs: Heading, id, testId, className, contentClassName, mediaClassName, style, layout, mediaPosition, alignment, height, theme, overlay, contentWidth, reverseOnMobile, eyebrow, title, description, media, backgroundImage, backgroundVideo, actions, search, meta, children, role, ariaLabel, ariaLabelledBy }: HeroProps) => import("react").JSX.Element;
|
|
3
|
+
export { Hero };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { HeroProps } from "./hero.types.js";
|
|
2
|
+
declare const Hero: ({ as: Component, titleAs: Heading, id, testId, className, contentClassName, mediaClassName, style, layout, mediaPosition, alignment, height, theme, overlay, contentWidth, reverseOnMobile, eyebrow, title, description, media, backgroundImage, backgroundVideo, actions, search, meta, children, role, ariaLabel, ariaLabelledBy }: HeroProps) => import("react").JSX.Element;
|
|
3
|
+
export { Hero };
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { HeroVideo } from "./hero-video.js";
|
|
2
|
+
import "./hero.css";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
// src/components/hero/hero.tsx
|
|
5
|
+
const Hero = ({ as: Component = "section", titleAs: Heading = "h1", id, testId, className, contentClassName, mediaClassName, style, layout = "split", mediaPosition = "right", alignment = "start", height = "auto", theme = "light", overlay = "none", contentWidth = "normal", reverseOnMobile = true, eyebrow, title, description, media, backgroundImage, backgroundVideo, actions, search, meta, children, role, ariaLabel, ariaLabelledBy }) => {
|
|
6
|
+
const hasMedia = Boolean(media || backgroundImage || backgroundVideo);
|
|
7
|
+
const hasBackground = Boolean(backgroundImage || backgroundVideo || mediaPosition === "background" && media);
|
|
8
|
+
const rootClassName = ["puzzle-hero", className].filter(Boolean).join(" ");
|
|
9
|
+
const contentClasses = ["puzzle-hero__content", contentClassName].filter(Boolean).join(" ");
|
|
10
|
+
const mediaClasses = ["puzzle-hero__media", mediaClassName].filter(Boolean).join(" ");
|
|
11
|
+
return /* @__PURE__ */ jsxs(Component, {
|
|
12
|
+
id,
|
|
13
|
+
"data-testid": testId,
|
|
14
|
+
className: rootClassName,
|
|
15
|
+
style,
|
|
16
|
+
"data-layout": layout,
|
|
17
|
+
"data-media-position": mediaPosition,
|
|
18
|
+
"data-alignment": alignment,
|
|
19
|
+
"data-height": height,
|
|
20
|
+
"data-theme": theme,
|
|
21
|
+
"data-overlay": overlay,
|
|
22
|
+
"data-content-width": contentWidth,
|
|
23
|
+
"data-has-media": hasMedia,
|
|
24
|
+
"data-has-background": hasBackground,
|
|
25
|
+
"data-reverse-mobile": reverseOnMobile,
|
|
26
|
+
"aria-label": ariaLabel,
|
|
27
|
+
"aria-labelledby": ariaLabelledBy,
|
|
28
|
+
role,
|
|
29
|
+
children: [hasBackground && /* @__PURE__ */ jsxs("div", {
|
|
30
|
+
className: "puzzle-hero__background",
|
|
31
|
+
"aria-hidden": "true",
|
|
32
|
+
"data-hero-background": true,
|
|
33
|
+
children: [
|
|
34
|
+
backgroundImage && /* @__PURE__ */ jsx("img", {
|
|
35
|
+
className: "puzzle-hero__background-image",
|
|
36
|
+
src: backgroundImage,
|
|
37
|
+
alt: "",
|
|
38
|
+
loading: "eager",
|
|
39
|
+
decoding: "async",
|
|
40
|
+
draggable: false
|
|
41
|
+
}),
|
|
42
|
+
backgroundVideo && /* @__PURE__ */ jsx(HeroVideo, {
|
|
43
|
+
source: backgroundVideo,
|
|
44
|
+
className: "puzzle-hero__background-video"
|
|
45
|
+
}),
|
|
46
|
+
mediaPosition === "background" && media && /* @__PURE__ */ jsx("div", {
|
|
47
|
+
className: "puzzle-hero__background-media",
|
|
48
|
+
children: media
|
|
49
|
+
}),
|
|
50
|
+
/* @__PURE__ */ jsx("div", { className: "puzzle-hero__overlay" })
|
|
51
|
+
]
|
|
52
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
53
|
+
className: "puzzle-hero__inner",
|
|
54
|
+
"data-hero-inner": true,
|
|
55
|
+
children: [media && mediaPosition !== "background" && /* @__PURE__ */ jsx("div", {
|
|
56
|
+
className: mediaClasses,
|
|
57
|
+
"data-hero-media": true,
|
|
58
|
+
children: media
|
|
59
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
60
|
+
className: contentClasses,
|
|
61
|
+
"data-hero-content": true,
|
|
62
|
+
children: [
|
|
63
|
+
eyebrow && /* @__PURE__ */ jsx("div", {
|
|
64
|
+
className: "puzzle-hero__eyebrow",
|
|
65
|
+
children: eyebrow
|
|
66
|
+
}),
|
|
67
|
+
title && /* @__PURE__ */ jsx(Heading, {
|
|
68
|
+
className: "puzzle-hero__title",
|
|
69
|
+
children: title
|
|
70
|
+
}),
|
|
71
|
+
description && /* @__PURE__ */ jsx("div", {
|
|
72
|
+
className: "puzzle-hero__description",
|
|
73
|
+
children: description
|
|
74
|
+
}),
|
|
75
|
+
children && /* @__PURE__ */ jsx("div", {
|
|
76
|
+
className: "puzzle-hero__children",
|
|
77
|
+
children
|
|
78
|
+
}),
|
|
79
|
+
actions && /* @__PURE__ */ jsx("div", {
|
|
80
|
+
className: "puzzle-hero__actions",
|
|
81
|
+
children: actions
|
|
82
|
+
}),
|
|
83
|
+
search && /* @__PURE__ */ jsx("div", {
|
|
84
|
+
className: "puzzle-hero__search",
|
|
85
|
+
children: search
|
|
86
|
+
}),
|
|
87
|
+
meta && /* @__PURE__ */ jsx("div", {
|
|
88
|
+
className: "puzzle-hero__meta",
|
|
89
|
+
children: meta
|
|
90
|
+
})
|
|
91
|
+
]
|
|
92
|
+
})]
|
|
93
|
+
})]
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
export { Hero };
|
|
97
|
+
|
|
98
|
+
//# sourceMappingURL=hero.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hero.js","names":[],"sources":["../../../src/components/hero/hero.tsx"],"sourcesContent":["import { HeroVideo } from \"./hero-video\";\n\nimport type { HeroProps } from \"./hero.types\";\n\nimport \"./hero.css\";\n\nconst Hero = ({\n as: Component = \"section\",\n titleAs: Heading = \"h1\",\n\n id,\n testId,\n className,\n contentClassName,\n mediaClassName,\n style,\n\n layout = \"split\",\n mediaPosition = \"right\",\n alignment = \"start\",\n height = \"auto\",\n theme = \"light\",\n overlay = \"none\",\n contentWidth = \"normal\",\n\n reverseOnMobile = true,\n\n eyebrow,\n title,\n description,\n\n media,\n backgroundImage,\n backgroundVideo,\n\n actions,\n search,\n meta,\n\n children,\n\n role,\n ariaLabel,\n ariaLabelledBy,\n}: HeroProps) => {\n const hasMedia = Boolean(media || backgroundImage || backgroundVideo);\n\n const hasBackground = Boolean(\n backgroundImage ||\n backgroundVideo ||\n (mediaPosition === \"background\" && media),\n );\n\n const rootClassName = [\"puzzle-hero\", className].filter(Boolean).join(\" \");\n\n const contentClasses = [\"puzzle-hero__content\", contentClassName]\n .filter(Boolean)\n .join(\" \");\n\n const mediaClasses = [\"puzzle-hero__media\", mediaClassName]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <Component\n id={id}\n data-testid={testId}\n className={rootClassName}\n style={style}\n data-layout={layout}\n data-media-position={mediaPosition}\n data-alignment={alignment}\n data-height={height}\n data-theme={theme}\n data-overlay={overlay}\n data-content-width={contentWidth}\n data-has-media={hasMedia}\n data-has-background={hasBackground}\n data-reverse-mobile={reverseOnMobile}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n role={role}\n >\n {hasBackground && (\n <div\n className=\"puzzle-hero__background\"\n aria-hidden=\"true\"\n data-hero-background\n >\n {backgroundImage && (\n <img\n className=\"puzzle-hero__background-image\"\n src={backgroundImage}\n alt=\"\"\n loading=\"eager\"\n decoding=\"async\"\n draggable={false}\n />\n )}\n\n {backgroundVideo && (\n <HeroVideo\n source={backgroundVideo}\n className=\"puzzle-hero__background-video\"\n />\n )}\n\n {mediaPosition === \"background\" && media && (\n <div className=\"puzzle-hero__background-media\">{media}</div>\n )}\n\n <div className=\"puzzle-hero__overlay\" />\n </div>\n )}\n\n <div className=\"puzzle-hero__inner\" data-hero-inner>\n {media && mediaPosition !== \"background\" && (\n <div className={mediaClasses} data-hero-media>\n {media}\n </div>\n )}\n\n <div className={contentClasses} data-hero-content>\n {eyebrow && <div className=\"puzzle-hero__eyebrow\">{eyebrow}</div>}\n\n {title && <Heading className=\"puzzle-hero__title\">{title}</Heading>}\n\n {description && (\n <div className=\"puzzle-hero__description\">{description}</div>\n )}\n\n {children && <div className=\"puzzle-hero__children\">{children}</div>}\n\n {actions && <div className=\"puzzle-hero__actions\">{actions}</div>}\n\n {search && <div className=\"puzzle-hero__search\">{search}</div>}\n\n {meta && <div className=\"puzzle-hero__meta\">{meta}</div>}\n </div>\n </div>\n </Component>\n );\n};\n\nexport { Hero };\n"],"mappings":";;;;AAMA,MAAM,QAAQ,EACZ,IAAI,YAAY,WAChB,SAAS,UAAU,MAEnB,IACA,QACA,WACA,kBACA,gBACA,OAEA,SAAS,SACT,gBAAgB,SAChB,YAAY,SACZ,SAAS,QACT,QAAQ,SACR,UAAU,QACV,eAAe,UAEf,kBAAkB,MAElB,SACA,OACA,aAEA,OACA,iBACA,iBAEA,SACA,QACA,MAEA,UAEA,MACA,WACA,qBACe;CACf,MAAM,WAAW,QAAQ,SAAS,mBAAmB,eAAe;CAEpE,MAAM,gBAAgB,QACpB,mBACA,mBACC,kBAAkB,gBAAgB,KACrC;CAEA,MAAM,gBAAgB,CAAC,eAAe,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CAEzE,MAAM,iBAAiB,CAAC,wBAAwB,gBAAgB,CAAC,CAC9D,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,MAAM,eAAe,CAAC,sBAAsB,cAAc,CAAC,CACxD,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,OACE,qBAAC,WAAD;EACM;EACJ,eAAa;EACb,WAAW;EACJ;EACP,eAAa;EACb,uBAAqB;EACrB,kBAAgB;EAChB,eAAa;EACb,cAAY;EACZ,gBAAc;EACd,sBAAoB;EACpB,kBAAgB;EAChB,uBAAqB;EACrB,uBAAqB;EACrB,cAAY;EACZ,mBAAiB;EACX;EAjBR,UAAA,CAmBG,iBACC,qBAAC,OAAD;GACE,WAAU;GACV,eAAY;GACZ,wBAAA;GAHF,UAAA;IAKG,mBACC,oBAAC,OAAD;KACE,WAAU;KACV,KAAK;KACL,KAAI;KACJ,SAAQ;KACR,UAAS;KACT,WAAW;IACZ,CAAA;IAGF,mBACC,oBAAC,WAAD;KACE,QAAQ;KACR,WAAU;IACX,CAAA;IAGF,kBAAkB,gBAAgB,SACjC,oBAAC,OAAD;KAAK,WAAU;KAAiC,UAAA;IAAW,CAAA;IAG7D,oBAAC,OAAD,EAAK,WAAU,uBAAwB,CAAA;GACpC;EAGP,CAAA,GAAA,qBAAC,OAAD;GAAK,WAAU;GAAqB,mBAAA;GAApC,UAAA,CACG,SAAS,kBAAkB,gBAC1B,oBAAC,OAAD;IAAK,WAAW;IAAc,mBAAA;IAC3B,UAAA;GACE,CAAA,GAGP,qBAAC,OAAD;IAAK,WAAW;IAAgB,qBAAA;IAAhC,UAAA;KACG,WAAW,oBAAC,OAAD;MAAK,WAAU;MAAwB,UAAA;KAAa,CAAA;KAE/D,SAAS,oBAAC,SAAD;MAAS,WAAU;MAAsB,UAAA;KAAe,CAAA;KAEjE,eACC,oBAAC,OAAD;MAAK,WAAU;MAA4B,UAAA;KAAiB,CAAA;KAG7D,YAAY,oBAAC,OAAD;MAAK,WAAU;MAAyB;KAAc,CAAA;KAElE,WAAW,oBAAC,OAAD;MAAK,WAAU;MAAwB,UAAA;KAAa,CAAA;KAE/D,UAAU,oBAAC,OAAD;MAAK,WAAU;MAAuB,UAAA;KAAY,CAAA;KAE5D,QAAQ,oBAAC,OAAD;MAAK,WAAU;MAAqB,UAAA;KAAU,CAAA;IACpD;GACF,CAAA,CAAA;EACI,CAAA,CAAA;;AAEf"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { AriaRole, CSSProperties, ElementType, ReactNode } from "react";
|
|
2
|
+
export type HeroLayout = "centered" | "split" | "full-width" | "asymmetric";
|
|
3
|
+
export type HeroMediaPosition = "left" | "right" | "background";
|
|
4
|
+
export type HeroAlignment = "start" | "center" | "end";
|
|
5
|
+
export type HeroHeight = "auto" | "large" | "viewport";
|
|
6
|
+
export type HeroTheme = "light" | "dark" | "contrast" | "brand";
|
|
7
|
+
export type HeroOverlay = "none" | "subtle" | "strong" | "gradient";
|
|
8
|
+
export type HeroContentWidth = "narrow" | "normal" | "wide" | "full";
|
|
9
|
+
export type HeroVideoSource = {
|
|
10
|
+
src: string;
|
|
11
|
+
type?: string;
|
|
12
|
+
poster?: string;
|
|
13
|
+
};
|
|
14
|
+
export type HeroProps = {
|
|
15
|
+
as?: ElementType;
|
|
16
|
+
titleAs?: ElementType;
|
|
17
|
+
id?: string;
|
|
18
|
+
testId?: string;
|
|
19
|
+
className?: string;
|
|
20
|
+
contentClassName?: string;
|
|
21
|
+
mediaClassName?: string;
|
|
22
|
+
style?: CSSProperties;
|
|
23
|
+
layout?: HeroLayout;
|
|
24
|
+
mediaPosition?: HeroMediaPosition;
|
|
25
|
+
alignment?: HeroAlignment;
|
|
26
|
+
height?: HeroHeight;
|
|
27
|
+
theme?: HeroTheme;
|
|
28
|
+
overlay?: HeroOverlay;
|
|
29
|
+
contentWidth?: HeroContentWidth;
|
|
30
|
+
reverseOnMobile?: boolean;
|
|
31
|
+
eyebrow?: ReactNode;
|
|
32
|
+
title?: ReactNode;
|
|
33
|
+
description?: ReactNode;
|
|
34
|
+
media?: ReactNode;
|
|
35
|
+
backgroundImage?: string;
|
|
36
|
+
backgroundVideo?: HeroVideoSource;
|
|
37
|
+
actions?: ReactNode;
|
|
38
|
+
search?: ReactNode;
|
|
39
|
+
meta?: ReactNode;
|
|
40
|
+
children?: ReactNode;
|
|
41
|
+
role?: AriaRole;
|
|
42
|
+
ariaLabel?: string;
|
|
43
|
+
ariaLabelledBy?: string;
|
|
44
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { AriaRole, CSSProperties, ElementType, ReactNode } from "react";
|
|
2
|
+
export type HeroLayout = "centered" | "split" | "full-width" | "asymmetric";
|
|
3
|
+
export type HeroMediaPosition = "left" | "right" | "background";
|
|
4
|
+
export type HeroAlignment = "start" | "center" | "end";
|
|
5
|
+
export type HeroHeight = "auto" | "large" | "viewport";
|
|
6
|
+
export type HeroTheme = "light" | "dark" | "contrast" | "brand";
|
|
7
|
+
export type HeroOverlay = "none" | "subtle" | "strong" | "gradient";
|
|
8
|
+
export type HeroContentWidth = "narrow" | "normal" | "wide" | "full";
|
|
9
|
+
export type HeroVideoSource = {
|
|
10
|
+
src: string;
|
|
11
|
+
type?: string;
|
|
12
|
+
poster?: string;
|
|
13
|
+
};
|
|
14
|
+
export type HeroProps = {
|
|
15
|
+
as?: ElementType;
|
|
16
|
+
titleAs?: ElementType;
|
|
17
|
+
id?: string;
|
|
18
|
+
testId?: string;
|
|
19
|
+
className?: string;
|
|
20
|
+
contentClassName?: string;
|
|
21
|
+
mediaClassName?: string;
|
|
22
|
+
style?: CSSProperties;
|
|
23
|
+
layout?: HeroLayout;
|
|
24
|
+
mediaPosition?: HeroMediaPosition;
|
|
25
|
+
alignment?: HeroAlignment;
|
|
26
|
+
height?: HeroHeight;
|
|
27
|
+
theme?: HeroTheme;
|
|
28
|
+
overlay?: HeroOverlay;
|
|
29
|
+
contentWidth?: HeroContentWidth;
|
|
30
|
+
reverseOnMobile?: boolean;
|
|
31
|
+
eyebrow?: ReactNode;
|
|
32
|
+
title?: ReactNode;
|
|
33
|
+
description?: ReactNode;
|
|
34
|
+
media?: ReactNode;
|
|
35
|
+
backgroundImage?: string;
|
|
36
|
+
backgroundVideo?: HeroVideoSource;
|
|
37
|
+
actions?: ReactNode;
|
|
38
|
+
search?: ReactNode;
|
|
39
|
+
meta?: ReactNode;
|
|
40
|
+
children?: ReactNode;
|
|
41
|
+
role?: AriaRole;
|
|
42
|
+
ariaLabel?: string;
|
|
43
|
+
ariaLabelledBy?: string;
|
|
44
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hero.utils.cjs","names":[],"sources":["../../../src/components/hero/hero.utils.ts"],"sourcesContent":["import type { HeroProps } from \"./hero.types\";\n\nexport const mergeHeroPresetProps = <T extends HeroProps>(\n defaults: Partial<HeroProps>,\n props: T,\n): T & Partial<HeroProps> => ({\n ...defaults,\n ...props,\n});\n"],"mappings":";AAEA,MAAa,wBACX,UACA,WAC4B;CAC5B,GAAG;CACH,GAAG;AACL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hero.utils.js","names":[],"sources":["../../../src/components/hero/hero.utils.ts"],"sourcesContent":["import type { HeroProps } from \"./hero.types\";\n\nexport const mergeHeroPresetProps = <T extends HeroProps>(\n defaults: Partial<HeroProps>,\n props: T,\n): T & Partial<HeroProps> => ({\n ...defaults,\n ...props,\n});\n"],"mappings":";AAEA,MAAa,wBACX,UACA,WAC4B;CAC5B,GAAG;CACH,GAAG;AACL"}
|