@ugurdemirel/landcraft 0.1.23 → 0.1.24
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/README.md +13 -8
- package/dist/cjs/components/Button.cjs +1 -1
- package/dist/cjs/components/Button.cjs.map +1 -1
- package/dist/cjs/components/CTA/CTA.cjs +1 -1
- package/dist/cjs/components/CTA/CTA.cjs.map +1 -1
- package/dist/cjs/components/CTA/parts.cjs +1 -1
- package/dist/cjs/components/CTA/parts.cjs.map +1 -1
- package/dist/cjs/components/CTA/variants/Panel.cjs +1 -1
- package/dist/cjs/components/CTA/variants/Panel.cjs.map +1 -1
- package/dist/cjs/components/CTA/variants/Surface.cjs +1 -1
- package/dist/cjs/components/CTA/variants/Surface.cjs.map +1 -1
- package/dist/cjs/components/Footer/Footer.cjs +1 -1
- package/dist/cjs/components/Footer/Footer.cjs.map +1 -1
- package/dist/cjs/components/Footer/parts.cjs +1 -1
- package/dist/cjs/components/Footer/parts.cjs.map +1 -1
- package/dist/cjs/components/Footer/variants/Columns.cjs +2 -0
- package/dist/cjs/components/Footer/variants/Columns.cjs.map +1 -0
- package/dist/cjs/components/Footer/variants/Editorial.cjs +1 -1
- package/dist/cjs/components/Footer/variants/Editorial.cjs.map +1 -1
- package/dist/cjs/components/Footer/variants/Minimal.cjs +1 -1
- package/dist/cjs/components/Footer/variants/Minimal.cjs.map +1 -1
- package/dist/cjs/components/Hero/parts.cjs +1 -1
- package/dist/cjs/components/Hero/parts.cjs.map +1 -1
- package/dist/cjs/components/Hero/variants/Centered.cjs +1 -1
- package/dist/cjs/components/Hero/variants/Centered.cjs.map +1 -1
- package/dist/cjs/components/Hero/variants/Parallax.cjs +1 -1
- package/dist/cjs/components/Hero/variants/Parallax.cjs.map +1 -1
- package/dist/cjs/components/Hero/variants/Split.cjs +1 -1
- package/dist/cjs/components/Hero/variants/Split.cjs.map +1 -1
- package/dist/cjs/components/Hero/variants/Statement.cjs +1 -1
- package/dist/cjs/components/Hero/variants/Statement.cjs.map +1 -1
- package/dist/cjs/components/LanguageSwitcher/parts.cjs +1 -1
- package/dist/cjs/components/LanguageSwitcher/parts.cjs.map +1 -1
- package/dist/cjs/components/MegaMenu/MegaMenu.cjs +1 -1
- package/dist/cjs/components/MegaMenu/MegaMenu.cjs.map +1 -1
- package/dist/cjs/components/Navbar/Navbar.cjs +1 -1
- package/dist/cjs/components/Navbar/Navbar.cjs.map +1 -1
- package/dist/cjs/components/Stats/Stats.cjs +1 -1
- package/dist/cjs/components/Stats/Stats.cjs.map +1 -1
- package/dist/cjs/components/Stats/variants/{Hairline.cjs → Divided.cjs} +2 -2
- package/dist/cjs/components/Stats/variants/Divided.cjs.map +1 -0
- package/dist/cjs/components/Stats/variants/{Editorial.cjs → Stacked.cjs} +2 -2
- package/dist/cjs/components/Stats/variants/Stacked.cjs.map +1 -0
- package/dist/cjs/utils/surface.cjs +2 -0
- package/dist/cjs/utils/surface.cjs.map +1 -0
- package/dist/es/components/Button.js +41 -31
- package/dist/es/components/Button.js.map +1 -1
- package/dist/es/components/CTA/CTA.js +5 -6
- package/dist/es/components/CTA/CTA.js.map +1 -1
- package/dist/es/components/CTA/parts.js +19 -14
- package/dist/es/components/CTA/parts.js.map +1 -1
- package/dist/es/components/CTA/variants/Panel.js +15 -17
- package/dist/es/components/CTA/variants/Panel.js.map +1 -1
- package/dist/es/components/CTA/variants/Surface.js +21 -11
- package/dist/es/components/CTA/variants/Surface.js.map +1 -1
- package/dist/es/components/Footer/Footer.js +5 -5
- package/dist/es/components/Footer/Footer.js.map +1 -1
- package/dist/es/components/Footer/parts.js +21 -20
- package/dist/es/components/Footer/parts.js.map +1 -1
- package/dist/es/components/Footer/variants/Columns.js +76 -0
- package/dist/es/components/Footer/variants/Columns.js.map +1 -0
- package/dist/es/components/Footer/variants/Editorial.js +68 -35
- package/dist/es/components/Footer/variants/Editorial.js.map +1 -1
- package/dist/es/components/Footer/variants/Minimal.js +50 -16
- package/dist/es/components/Footer/variants/Minimal.js.map +1 -1
- package/dist/es/components/Hero/parts.js +13 -11
- package/dist/es/components/Hero/parts.js.map +1 -1
- package/dist/es/components/Hero/variants/Centered.js +29 -17
- package/dist/es/components/Hero/variants/Centered.js.map +1 -1
- package/dist/es/components/Hero/variants/Parallax.js +23 -23
- package/dist/es/components/Hero/variants/Parallax.js.map +1 -1
- package/dist/es/components/Hero/variants/Split.js +35 -23
- package/dist/es/components/Hero/variants/Split.js.map +1 -1
- package/dist/es/components/Hero/variants/Statement.js +28 -23
- package/dist/es/components/Hero/variants/Statement.js.map +1 -1
- package/dist/es/components/LanguageSwitcher/parts.js +44 -44
- package/dist/es/components/LanguageSwitcher/parts.js.map +1 -1
- package/dist/es/components/MegaMenu/MegaMenu.js +131 -126
- package/dist/es/components/MegaMenu/MegaMenu.js.map +1 -1
- package/dist/es/components/Navbar/Navbar.js +110 -92
- package/dist/es/components/Navbar/Navbar.js.map +1 -1
- package/dist/es/components/Stats/Stats.js +8 -8
- package/dist/es/components/Stats/Stats.js.map +1 -1
- package/dist/es/components/Stats/variants/{Hairline.js → Divided.js} +13 -13
- package/dist/es/components/Stats/variants/Divided.js.map +1 -0
- package/dist/es/components/Stats/variants/{Editorial.js → Stacked.js} +12 -12
- package/dist/es/components/Stats/variants/Stacked.js.map +1 -0
- package/dist/es/utils/surface.js +16 -0
- package/dist/es/utils/surface.js.map +1 -0
- package/dist/index.d.ts +48 -9
- package/dist/styles.css +79 -98
- package/dist/theme.css +27 -0
- package/package.json +1 -1
- package/dist/cjs/components/CTA/variants/Inverse.cjs +0 -2
- package/dist/cjs/components/CTA/variants/Inverse.cjs.map +0 -1
- package/dist/cjs/components/Footer/variants/Classic.cjs +0 -2
- package/dist/cjs/components/Footer/variants/Classic.cjs.map +0 -1
- package/dist/cjs/components/Stats/variants/Editorial.cjs.map +0 -1
- package/dist/cjs/components/Stats/variants/Hairline.cjs.map +0 -1
- package/dist/es/components/CTA/variants/Inverse.js +0 -42
- package/dist/es/components/CTA/variants/Inverse.js.map +0 -1
- package/dist/es/components/Footer/variants/Classic.js +0 -43
- package/dist/es/components/Footer/variants/Classic.js.map +0 -1
- package/dist/es/components/Stats/variants/Editorial.js.map +0 -1
- package/dist/es/components/Stats/variants/Hairline.js.map +0 -1
package/README.md
CHANGED
|
@@ -59,26 +59,31 @@ Every component accepts an `option` / `variant` prop — same API, different loo
|
|
|
59
59
|
|
|
60
60
|
| Component | Options |
|
|
61
61
|
| --- | --- |
|
|
62
|
-
| Button | `primary` · `
|
|
62
|
+
| Button | `primary` · `outline` · `ghost` · `link` (`customColor` for custom fills) |
|
|
63
63
|
| Badge | `soft` · `solid` · `outline` · `dot` |
|
|
64
64
|
| Card | `outlined` · `elevated` · `inset` |
|
|
65
|
-
| Navbar | `classic` · `floating`
|
|
66
|
-
| MegaMenu | `classic` · `floating`
|
|
67
|
-
| Hero | `split` · `centered` · `statement` · `parallax` |
|
|
65
|
+
| Navbar | `classic` · `floating` (+ `background`) |
|
|
66
|
+
| MegaMenu | `classic` · `floating` (+ `background`) |
|
|
67
|
+
| Hero | `split` · `centered` · `statement` · `parallax` (+ `background` on `statement`) |
|
|
68
68
|
| LogoCloud | `quiet` · `marquee` · `strip` |
|
|
69
69
|
| FeatureGrid | `columns` · `bento` · `editorialRows` |
|
|
70
70
|
| FeatureShowcase | `mediaSide`: `left` · `right` |
|
|
71
|
-
| Stats | `
|
|
71
|
+
| Stats | `stacked` · `divided` · `cells` · `ticker` |
|
|
72
72
|
| Pricing | `cards` · `bento` · `compact` |
|
|
73
73
|
| Testimonials | `grid` · `carousel` · `marquee` |
|
|
74
|
-
| CTA | `panel` · `surface`
|
|
74
|
+
| CTA | `panel` · `surface` (+ `background` on `panel`) |
|
|
75
75
|
| FAQ | `accordion` · `split` · `cards` (`allowMultiple`, `defaultOpen`) |
|
|
76
|
-
| Footer | `
|
|
76
|
+
| Footer | `columns` · `minimal` · `editorial` (+ `background`) |
|
|
77
77
|
| Newsletter | `inline` · `card` · `underline` |
|
|
78
78
|
| Blog (BlogSection/BlogCard) | `card` · `row` (`limit` shows the latest N posts) |
|
|
79
79
|
| Modal | `size`: `sm` · `md` · `lg` |
|
|
80
80
|
| LanguageSwitcher | `dropdown` · `modal` |
|
|
81
81
|
|
|
82
|
+
**Layout, not skin.** Variants describe how content is arranged, never its color
|
|
83
|
+
or type — see [DESIGN.md](./DESIGN.md). Emphasis comes from `--color-primary`;
|
|
84
|
+
sections, nav bars and footers accept a `background` prop for a custom surface
|
|
85
|
+
instead of the brand gradient. There are no built-in "inverse"/ink variants.
|
|
86
|
+
|
|
82
87
|
**Brand mark.** `Navbar`, `MegaMenu` and `Footer` accept a custom logo in place
|
|
83
88
|
of the wordmark: pass any node to `logo` (SVG, `<img>`, component…), or use
|
|
84
89
|
`logoSrc`/`logoAlt` for a quick image (`logoClassName` tunes its size, defaults
|
|
@@ -102,7 +107,7 @@ paired `--color-on-*` value; set them together so text stays readable.
|
|
|
102
107
|
| `--color-primary-hover` | `67 56 202` | Primary hover / pressed |
|
|
103
108
|
| `--color-primary-soft` | `238 242 255` | Soft primary fills (badges, highlights) |
|
|
104
109
|
| `--color-on-primary` | `255 255 255` | Text on primary |
|
|
105
|
-
| `--color-secondary` | `15 15 15` |
|
|
110
|
+
| `--color-secondary` | `15 15 15` | Neutral ink token (legacy component skins are being retired — see DESIGN.md) |
|
|
106
111
|
| `--color-secondary-hover` | `38 38 38` | Ink surface hover / pressed |
|
|
107
112
|
| `--color-on-secondary` | `250 250 250` | Text on ink surfaces |
|
|
108
113
|
| `--color-accent` | `5 150 105` | Promo / success |
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),y=require("react"),n=require("../utils/cn.cjs"),k=require("./Slot.cjs"),j={primary:"bg-primary text-on-primary hover:bg-primary-hover",outline:"border border-border bg-transparent text-foreground hover:border-foreground/30 hover:bg-surface",ghost:"text-foreground hover:bg-surface",link:"px-0 h-auto text-primary hover:text-primary-hover"},N={sm:"h-9 px-4 text-[13px] gap-1.5",md:"h-11 px-5 text-sm gap-2",lg:"h-12 px-7 text-[15px] gap-2"},S="group inline-flex select-none items-center justify-center rounded-lg font-medium tracking-tight transition-[background-color,border-color,color,box-shadow] duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 cursor-pointer",f=y.forwardRef(({className:p,variant:e="primary",size:h="md",iconLeft:s,iconRight:i,customColor:r,fullWidth:x,asChild:m,style:a,type:v="button",children:l,...c},u)=>{const d=r?{...a,"--lc-bg":r,backgroundColor:"var(--lc-bg)",color:"contrast-color(var(--lc-bg))"}:a,t=e==="link",g=!r&&(e==="outline"||e==="ghost"),b=n.cn(S,N[h],r?"hover:brightness-95":j[e],t&&"underline-offset-4 hover:underline",x&&"w-full",p);return m?o.jsx(k.Slot,{ref:u,"data-unfilled":g?"":void 0,style:d,className:b,...c,children:l}):o.jsxs("button",{ref:u,type:v,"data-unfilled":g?"":void 0,style:d,className:b,...c,children:[s?o.jsx("span",{className:n.cn("shrink-0",!t&&"opacity-70"),children:s}):null,l,i?o.jsx("span",{className:n.cn("shrink-0 transition-transform duration-200",!t&&"opacity-70 group-hover:translate-x-0.5"),children:i}):null]})});f.displayName="Button";exports.Button=f;
|
|
2
2
|
//# sourceMappingURL=Button.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.cjs","sources":["../../../src/components/Button.tsx"],"sourcesContent":["import { forwardRef, type ButtonHTMLAttributes, type CSSProperties, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Slot } from \"./Slot\";\n\nexport type ButtonVariant = \"primary\" | \"
|
|
1
|
+
{"version":3,"file":"Button.cjs","sources":["../../../src/components/Button.tsx"],"sourcesContent":["import { forwardRef, type ButtonHTMLAttributes, type CSSProperties, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Slot } from \"./Slot\";\n\nexport type ButtonVariant = \"primary\" | \"outline\" | \"ghost\" | \"link\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n iconLeft?: ReactNode;\n iconRight?: ReactNode;\n /** Paints the button with an arbitrary CSS color; text color is computed for contrast. */\n customColor?: string;\n fullWidth?: boolean;\n /**\n * When `true`, the button styling is applied to a single child element\n * instead of a `<button>`. Use it to render a framework router `<Link>`\n * (Next.js, Remix, React Router…). `iconLeft` / `iconRight` are ignored;\n * pass icons inside the child instead.\n */\n asChild?: boolean;\n}\n\nconst variants: Record<ButtonVariant, string> = {\n primary: \"bg-primary text-on-primary hover:bg-primary-hover\",\n outline:\n \"border border-border bg-transparent text-foreground hover:border-foreground/30 hover:bg-surface\",\n ghost: \"text-foreground hover:bg-surface\",\n link: \"px-0 h-auto text-primary hover:text-primary-hover\",\n};\n\nconst sizes: Record<ButtonSize, string> = {\n sm: \"h-9 px-4 text-[13px] gap-1.5\",\n md: \"h-11 px-5 text-sm gap-2\",\n lg: \"h-12 px-7 text-[15px] gap-2\",\n};\n\nconst base =\n \"group inline-flex select-none items-center justify-center rounded-lg font-medium tracking-tight transition-[background-color,border-color,color,box-shadow] duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 cursor-pointer\";\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = \"primary\",\n size = \"md\",\n iconLeft,\n iconRight,\n customColor,\n fullWidth,\n asChild,\n style,\n type = \"button\",\n children,\n ...props\n },\n ref,\n ) => {\n const customStyle: CSSProperties | undefined = customColor\n ? ({\n ...style,\n \"--lc-bg\": customColor,\n backgroundColor: \"var(--lc-bg)\",\n color: \"contrast-color(var(--lc-bg))\",\n } as CSSProperties)\n : style;\n\n const isLink = variant === \"link\";\n // Outline/ghost have no fill of their own: on an emphasis band they should\n // inherit the band's contrast color. Marked here so the CSS has an exact,\n // unambiguous hook (skipping it for filled buttons and customColor).\n const unfilled = !customColor && (variant === \"outline\" || variant === \"ghost\");\n\n const classes = cn(\n base,\n sizes[size],\n customColor ? \"hover:brightness-95\" : variants[variant],\n isLink && \"underline-offset-4 hover:underline\",\n fullWidth && \"w-full\",\n className,\n );\n\n if (asChild) {\n return (\n <Slot\n ref={ref}\n data-unfilled={unfilled ? \"\" : undefined}\n style={customStyle}\n className={classes}\n {...props}\n >\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n type={type}\n data-unfilled={unfilled ? \"\" : undefined}\n style={customStyle}\n className={classes}\n {...props}\n >\n {iconLeft ? <span className={cn(\"shrink-0\", !isLink && \"opacity-70\")}>{iconLeft}</span> : null}\n {children}\n {iconRight ? (\n <span\n className={cn(\n \"shrink-0 transition-transform duration-200\",\n !isLink && \"opacity-70 group-hover:translate-x-0.5\",\n )}\n >\n {iconRight}\n </span>\n ) : null}\n </button>\n );\n },\n);\nButton.displayName = \"Button\";"],"names":["variants","sizes","base","Button","forwardRef","className","variant","size","iconLeft","iconRight","customColor","fullWidth","asChild","style","type","children","props","ref","customStyle","isLink","unfilled","classes","cn","jsx","Slot","jsxs"],"mappings":"6LAwBMA,EAA0C,CAC9C,QAAS,oDACT,QACE,kGACF,MAAO,mCACP,KAAM,mDACR,EAEMC,EAAoC,CACxC,GAAI,+BACJ,GAAI,0BACJ,GAAI,6BACN,EAEMC,EACJ,oXAEWC,EAASC,EAAAA,WACpB,CACE,CACE,UAAAC,EACA,QAAAC,EAAU,UACV,KAAAC,EAAO,KACP,SAAAC,EACA,UAAAC,EACA,YAAAC,EACA,UAAAC,EACA,QAAAC,EACA,MAAAC,EACA,KAAAC,EAAO,SACP,SAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,MAAMC,EAAyCR,EAC1C,CACC,GAAGG,EACH,UAAWH,EACX,gBAAiB,eACjB,MAAO,8BAAA,EAETG,EAEEM,EAASb,IAAY,OAIrBc,EAAW,CAACV,IAAgBJ,IAAY,WAAaA,IAAY,SAEjEe,EAAUC,EAAAA,GACdpB,EACAD,EAAMM,CAAI,EACVG,EAAc,sBAAwBV,EAASM,CAAO,EACtDa,GAAU,qCACVR,GAAa,SACbN,CAAA,EAGF,OAAIO,EAEAW,EAAAA,IAACC,EAAAA,KAAA,CACC,IAAAP,EACA,gBAAeG,EAAW,GAAK,OAC/B,MAAOF,EACP,UAAWG,EACV,GAAGL,EAEH,SAAAD,CAAA,CAAA,EAMLU,EAAAA,KAAC,SAAA,CACC,IAAAR,EACA,KAAAH,EACA,gBAAeM,EAAW,GAAK,OAC/B,MAAOF,EACP,UAAWG,EACV,GAAGL,EAEH,SAAA,CAAAR,EAAWe,EAAAA,IAAC,OAAA,CAAK,UAAWD,EAAAA,GAAG,WAAY,CAACH,GAAU,YAAY,EAAI,SAAAX,CAAA,CAAS,EAAU,KACzFO,EACAN,EACCc,EAAAA,IAAC,OAAA,CACC,UAAWD,EAAAA,GACT,6CACA,CAACH,GAAU,wCAAA,EAGZ,SAAAV,CAAA,CAAA,EAED,IAAA,CAAA,CAAA,CAGV,CACF,EACAN,EAAO,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),a=require("react"),c=require("./variants/Panel.cjs"),s=require("./variants/Surface.cjs"),n=a.forwardRef(({option:u="panel",...e},r)=>u==="surface"?t.jsx(s.CTASurface,{ref:r,...e}):t.jsx(c.CTAPanel,{ref:r,...e}));n.displayName="CTA";exports.CTA=n;
|
|
2
2
|
//# sourceMappingURL=CTA.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CTA.cjs","sources":["../../../../src/components/CTA/CTA.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { CTAProps } from \"./types\";\nimport { CTAPanel } from \"./variants/Panel\";\nimport { CTASurface } from \"./variants/Surface\";\
|
|
1
|
+
{"version":3,"file":"CTA.cjs","sources":["../../../../src/components/CTA/CTA.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { CTAProps } from \"./types\";\nimport { CTAPanel } from \"./variants/Panel\";\nimport { CTASurface } from \"./variants/Surface\";\n\nexport const CTA = forwardRef<HTMLElement, CTAProps>(({ option = \"panel\", ...props }, ref) => {\n if (option === \"surface\") return <CTASurface ref={ref} {...props} />;\n return <CTAPanel ref={ref} {...props} />;\n});\nCTA.displayName = \"CTA\";\n"],"names":["CTA","forwardRef","option","props","ref","CTASurface","jsx","CTAPanel"],"mappings":"8MAKaA,EAAMC,EAAAA,WAAkC,CAAC,CAAE,OAAAC,EAAS,QAAS,GAAGC,CAAA,EAASC,IAChFF,IAAW,gBAAmBG,EAAAA,WAAA,CAAW,IAAAD,EAAW,GAAGD,EAAO,EAC3DG,EAAAA,IAACC,EAAAA,SAAA,CAAS,IAAAH,EAAW,GAAGD,CAAA,CAAO,CACvC,EACDH,EAAI,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),c=require("../../utils/cn.cjs"),l="font-display text-balance text-4xl font-semibold leading-[1.05] tracking-[-0.03em] sm:text-5xl",r="mt-5 max-w-xl text-pretty text-base leading-7 sm:text-lg";function o({action:e,secondaryAction:t,align:s,actionClassName:a="flex flex-wrap items-center gap-4",emphasis:i=!1}){return n.jsxs("div",{"data-emphasis":i?"":void 0,className:c.cn(a,s==="center"&&"justify-center"),children:[e,t]})}exports.CTAActions=o;exports.ctaDescriptionBase=r;exports.ctaTitleBase=l;
|
|
2
2
|
//# sourceMappingURL=parts.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parts.cjs","sources":["../../../../src/components/CTA/parts.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport function CTAActions({\n action,\n secondaryAction,\n align,\n actionClassName = \"flex flex-wrap items-center gap-4\",\n}: {\n action?: ReactNode;\n secondaryAction?: ReactNode;\n align?: \"left\" | \"center\";\n actionClassName?: string;\n}) {\n return (\n <div\n className={cn(\n actionClassName,\n align === \"center\" && \"justify-center\",\n )}\n >\n {action}\n {secondaryAction}\n </div>\n );\n}"],"names":["CTAActions","action","secondaryAction","align","actionClassName","jsxs","cn"],"mappings":"
|
|
1
|
+
{"version":3,"file":"parts.cjs","sources":["../../../../src/components/CTA/parts.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n/**\n * Shared emphasis typography. Every CTA layout uses these so switching option\n * changes only the arrangement, never the type.\n */\nexport const ctaTitleBase =\n \"font-display text-balance text-4xl font-semibold leading-[1.05] tracking-[-0.03em] sm:text-5xl\";\n\nexport const ctaDescriptionBase = \"mt-5 max-w-xl text-pretty text-base leading-7 sm:text-lg\";\n\nexport function CTAActions({\n action,\n secondaryAction,\n align,\n actionClassName = \"flex flex-wrap items-center gap-4\",\n emphasis = false,\n}: {\n action?: ReactNode;\n secondaryAction?: ReactNode;\n align?: \"left\" | \"center\";\n actionClassName?: string;\n /** Marks the actions as sitting on an emphasis band so descendant buttons inherit its contrast color. */\n emphasis?: boolean;\n}) {\n return (\n <div\n data-emphasis={emphasis ? \"\" : undefined}\n className={cn(\n actionClassName,\n align === \"center\" && \"justify-center\",\n )}\n >\n {action}\n {secondaryAction}\n </div>\n );\n}\n"],"names":["ctaTitleBase","ctaDescriptionBase","CTAActions","action","secondaryAction","align","actionClassName","emphasis","jsxs","cn"],"mappings":"qJAOaA,EACX,iGAEWC,EAAqB,2DAE3B,SAASC,EAAW,CACzB,OAAAC,EACA,gBAAAC,EACA,MAAAC,EACA,gBAAAC,EAAkB,oCAClB,SAAAC,EAAW,EACb,EAOG,CACD,OACEC,EAAAA,KAAC,MAAA,CACC,gBAAeD,EAAW,GAAK,OAC/B,UAAWE,EAAAA,GACTH,EACAD,IAAU,UAAY,gBAAA,EAGvB,SAAA,CAAAF,EACAC,CAAA,CAAA,CAAA,CAGP"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),p=require("react"),r=require("../../../utils/cn.cjs"),h=require("../../Container.cjs"),v=require("../../../utils/surface.cjs"),t=require("../parts.cjs"),n=p.forwardRef(({className:c,title:i,description:a,action:l,secondaryAction:o,align:s="left",background:d,id:u,...m},x)=>e.jsx("section",{ref:x,id:u,className:r.cn("w-full py-6 pb-20",c),...m,children:e.jsx(h.Container,{children:e.jsxs("div",{className:"relative overflow-hidden rounded-[1.75rem] px-7 py-14 sm:px-14 sm:py-20",style:v.emphasisSurfaceStyle(d),children:[e.jsx("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-0 grain opacity-[0.07] mix-blend-overlay"}),e.jsx("div",{"aria-hidden":!0,className:"pointer-events-none absolute -right-24 -top-24 h-72 w-72 rounded-full",style:{background:"rgb(var(--color-accent))",opacity:.35,filter:"blur(60px)"}}),e.jsxs("div",{className:r.cn("relative flex flex-col gap-9",s==="center"?"items-center text-center":"items-start"),children:[e.jsxs("div",{className:r.cn("max-w-2xl",s==="center"&&"mx-auto"),children:[e.jsx("h2",{className:t.ctaTitleBase,children:i}),a?e.jsx("p",{className:r.cn(t.ctaDescriptionBase,s==="center"&&"mx-auto"),children:a}):null]}),e.jsx(t.CTAActions,{action:l,secondaryAction:o,align:s,emphasis:!0})]})]})})}));n.displayName="CTAPanel";exports.CTAPanel=n;
|
|
2
2
|
//# sourceMappingURL=Panel.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.cjs","sources":["../../../../../src/components/CTA/variants/Panel.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { Container } from \"../../Container\";\nimport { CTAActions } from \"../parts\";\nimport type { CTAProps } from \"../types\";\n\n
|
|
1
|
+
{"version":3,"file":"Panel.cjs","sources":["../../../../../src/components/CTA/variants/Panel.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { Container } from \"../../Container\";\nimport { emphasisSurfaceStyle } from \"../../../utils/surface\";\nimport { CTAActions, ctaDescriptionBase, ctaTitleBase } from \"../parts\";\nimport type { CTAProps } from \"../types\";\n\n/**\n * panel — brand emphasis panel: a gradient derived from `--color-primary`,\n * with a shared grain texture. Passing `background` replaces the gradient with\n * a custom color while keeping the contrast behavior.\n */\nexport const CTAPanel = forwardRef<HTMLElement, CTAProps>(\n (\n { className, title, description, action, secondaryAction, align = \"left\", background, id, ...props },\n ref,\n ) => {\n return (\n <section ref={ref} id={id} className={cn(\"w-full py-6 pb-20\", className)} {...props}>\n <Container>\n <div\n className=\"relative overflow-hidden rounded-[1.75rem] px-7 py-14 sm:px-14 sm:py-20\"\n style={emphasisSurfaceStyle(background)}\n >\n <div aria-hidden className=\"pointer-events-none absolute inset-0 grain opacity-[0.07] mix-blend-overlay\" />\n <div\n aria-hidden\n className=\"pointer-events-none absolute -right-24 -top-24 h-72 w-72 rounded-full\"\n style={{ background: \"rgb(var(--color-accent))\", opacity: 0.35, filter: \"blur(60px)\" }}\n />\n <div\n className={cn(\n \"relative flex flex-col gap-9\",\n align === \"center\" ? \"items-center text-center\" : \"items-start\",\n )}\n >\n <div className={cn(\"max-w-2xl\", align === \"center\" && \"mx-auto\")}>\n <h2 className={ctaTitleBase}>{title}</h2>\n {description ? (\n <p\n className={cn(\n ctaDescriptionBase,\n align === \"center\" && \"mx-auto\",\n )}\n >\n {description}\n </p>\n ) : null}\n </div>\n <CTAActions action={action} secondaryAction={secondaryAction} align={align} emphasis />\n </div>\n </div>\n </Container>\n </section>\n );\n },\n);\nCTAPanel.displayName = \"CTAPanel\";\n"],"names":["CTAPanel","forwardRef","className","title","description","action","secondaryAction","align","background","id","props","ref","jsx","cn","Container","jsxs","emphasisSurfaceStyle","ctaTitleBase","ctaDescriptionBase","CTAActions"],"mappings":"8QAYaA,EAAWC,EAAAA,WACtB,CACE,CAAE,UAAAC,EAAW,MAAAC,EAAO,YAAAC,EAAa,OAAAC,EAAQ,gBAAAC,EAAiB,MAAAC,EAAQ,OAAQ,WAAAC,EAAY,GAAAC,EAAI,GAAGC,CAAA,EAC7FC,IAGEC,EAAAA,IAAC,UAAA,CAAQ,IAAAD,EAAU,GAAAF,EAAQ,UAAWI,KAAG,oBAAqBX,CAAS,EAAI,GAAGQ,EAC5E,SAAAE,EAAAA,IAACE,EAAAA,UAAA,CACC,SAAAC,EAAAA,KAAC,MAAA,CACC,UAAU,0EACV,MAAOC,EAAAA,qBAAqBR,CAAU,EAEtC,SAAA,CAAAI,EAAAA,IAAC,MAAA,CAAI,cAAW,GAAC,UAAU,8EAA8E,EACzGA,EAAAA,IAAC,MAAA,CACC,cAAW,GACX,UAAU,wEACV,MAAO,CAAE,WAAY,2BAA4B,QAAS,IAAM,OAAQ,YAAA,CAAa,CAAA,EAEvFG,EAAAA,KAAC,MAAA,CACC,UAAWF,EAAAA,GACT,+BACAN,IAAU,SAAW,2BAA6B,aAAA,EAGpD,SAAA,CAAAQ,OAAC,OAAI,UAAWF,EAAAA,GAAG,YAAaN,IAAU,UAAY,SAAS,EAC7D,SAAA,CAAAK,EAAAA,IAAC,KAAA,CAAG,UAAWK,EAAAA,aAAe,SAAAd,EAAM,EACnCC,EACCQ,EAAAA,IAAC,IAAA,CACC,UAAWC,EAAAA,GACTK,EAAAA,mBACAX,IAAU,UAAY,SAAA,EAGvB,SAAAH,CAAA,CAAA,EAED,IAAA,EACN,QACCe,EAAAA,WAAA,CAAW,OAAAd,EAAgB,gBAAAC,EAAkC,MAAAC,EAAc,SAAQ,EAAA,CAAC,CAAA,CAAA,CAAA,CACvF,CAAA,CAAA,EAEJ,CAAA,CACF,CAGN,EACAP,EAAS,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),x=require("react"),r=require("../../../utils/cn.cjs"),f=require("../../Container.cjs"),t=require("../parts.cjs"),n=x.forwardRef(({className:a,title:o,description:c,action:l,secondaryAction:i,align:s="left",background:j,id:m,...u},d)=>e.jsx("section",{ref:d,id:m,className:r.cn("w-full",a),...u,children:e.jsx(f.Container,{className:"py-20 sm:py-24",children:e.jsxs("div",{className:r.cn("flex flex-col gap-10 border-t border-border pt-14 sm:flex-row sm:items-end sm:justify-between sm:pt-16",s==="center"&&"items-center text-center sm:flex-col sm:items-center"),children:[e.jsxs("div",{className:r.cn("max-w-3xl",s==="center"&&"mx-auto"),children:[e.jsx("h2",{className:r.cn(t.ctaTitleBase,"text-foreground"),children:o}),c?e.jsx("p",{className:r.cn(t.ctaDescriptionBase,"text-muted-foreground",s==="center"&&"mx-auto"),children:c}):null]}),e.jsx(t.CTAActions,{action:l,secondaryAction:i,align:s})]})})}));n.displayName="CTASurface";exports.CTASurface=n;
|
|
2
2
|
//# sourceMappingURL=Surface.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Surface.cjs","sources":["../../../../../src/components/CTA/variants/Surface.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { Container } from \"../../Container\";\nimport { CTAActions } from \"../parts\";\nimport type { CTAProps } from \"../types\";\n\n/** surface — quiet paper band: hairline rule,
|
|
1
|
+
{"version":3,"file":"Surface.cjs","sources":["../../../../../src/components/CTA/variants/Surface.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { Container } from \"../../Container\";\nimport { CTAActions, ctaDescriptionBase, ctaTitleBase } from \"../parts\";\nimport type { CTAProps } from \"../types\";\n\n/** surface — quiet paper band: hairline rule, display type, actions on the right. */\nexport const CTASurface = forwardRef<HTMLElement, CTAProps>(\n (\n { className, title, description, action, secondaryAction, align = \"left\", background, id, ...props },\n ref,\n ) => (\n <section ref={ref} id={id} className={cn(\"w-full\", className)} {...props}>\n <Container className=\"py-20 sm:py-24\">\n <div\n className={cn(\n \"flex flex-col gap-10 border-t border-border pt-14 sm:flex-row sm:items-end sm:justify-between sm:pt-16\",\n align === \"center\" && \"items-center text-center sm:flex-col sm:items-center\",\n )}\n >\n <div className={cn(\"max-w-3xl\", align === \"center\" && \"mx-auto\")}>\n <h2 className={cn(ctaTitleBase, \"text-foreground\")}>{title}</h2>\n {description ? (\n <p\n className={cn(\n ctaDescriptionBase,\n \"text-muted-foreground\",\n align === \"center\" && \"mx-auto\",\n )}\n >\n {description}\n </p>\n ) : null}\n </div>\n <CTAActions action={action} secondaryAction={secondaryAction} align={align} />\n </div>\n </Container>\n </section>\n ),\n);\nCTASurface.displayName = \"CTASurface\";\n"],"names":["CTASurface","forwardRef","className","title","description","action","secondaryAction","align","background","id","props","ref","jsx","cn","Container","jsxs","ctaTitleBase","ctaDescriptionBase","CTAActions"],"mappings":"sOAOaA,EAAaC,EAAAA,WACxB,CACE,CAAE,UAAAC,EAAW,MAAAC,EAAO,YAAAC,EAAa,OAAAC,EAAQ,gBAAAC,EAAiB,MAAAC,EAAQ,OAAQ,WAAAC,EAAY,GAAAC,EAAI,GAAGC,CAAA,EAC7FC,IAEAC,EAAAA,IAAC,UAAA,CAAQ,IAAAD,EAAU,GAAAF,EAAQ,UAAWI,EAAAA,GAAG,SAAUX,CAAS,EAAI,GAAGQ,EACjE,SAAAE,EAAAA,IAACE,EAAAA,UAAA,CAAU,UAAU,iBACnB,SAAAC,EAAAA,KAAC,MAAA,CACC,UAAWF,EAAAA,GACT,yGACAN,IAAU,UAAY,sDAAA,EAGxB,SAAA,CAAAQ,OAAC,OAAI,UAAWF,EAAAA,GAAG,YAAaN,IAAU,UAAY,SAAS,EAC7D,SAAA,CAAAK,MAAC,MAAG,UAAWC,EAAAA,GAAGG,EAAAA,aAAc,iBAAiB,EAAI,SAAAb,EAAM,EAC1DC,EACCQ,EAAAA,IAAC,IAAA,CACC,UAAWC,EAAAA,GACTI,EAAAA,mBACA,wBACAV,IAAU,UAAY,SAAA,EAGvB,SAAAH,CAAA,CAAA,EAED,IAAA,EACN,EACAQ,EAAAA,IAACM,EAAAA,WAAA,CAAW,OAAAb,EAAgB,gBAAAC,EAAkC,MAAAC,CAAA,CAAc,CAAA,CAAA,CAAA,EAEhF,CAAA,CACF,CAEJ,EACAP,EAAW,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),i=require("./variants/Columns.cjs"),n=require("./variants/Minimal.cjs"),u=require("./variants/Editorial.cjs"),t=({option:o="columns",...e})=>o==="minimal"?r.jsx(n.FooterMinimal,{...e}):o==="editorial"?r.jsx(u.FooterEditorial,{...e}):r.jsx(i.FooterColumns,{...e});t.displayName="Footer";exports.Footer=t;
|
|
2
2
|
//# sourceMappingURL=Footer.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.cjs","sources":["../../../../src/components/Footer/Footer.tsx"],"sourcesContent":["import type { FooterProps } from \"./types\";\nimport {
|
|
1
|
+
{"version":3,"file":"Footer.cjs","sources":["../../../../src/components/Footer/Footer.tsx"],"sourcesContent":["import type { FooterProps } from \"./types\";\nimport { FooterColumns } from \"./variants/Columns\";\nimport { FooterMinimal } from \"./variants/Minimal\";\nimport { FooterEditorial } from \"./variants/Editorial\";\n\nexport const Footer = ({ option = \"columns\", ...props }: FooterProps) => {\n if (option === \"minimal\") return <FooterMinimal {...props} />;\n if (option === \"editorial\") return <FooterEditorial {...props} />;\n return <FooterColumns {...props} />;\n};\nFooter.displayName = \"Footer\";\n"],"names":["Footer","option","props","jsx","FooterMinimal","FooterEditorial","FooterColumns"],"mappings":"mOAKaA,EAAS,CAAC,CAAE,OAAAC,EAAS,UAAW,GAAGC,KAC1CD,IAAW,UAAkBE,EAAAA,IAACC,EAAAA,cAAA,CAAe,GAAGF,EAAO,EACvDD,IAAW,YAAoBE,EAAAA,IAACE,EAAAA,gBAAA,CAAiB,GAAGH,EAAO,EACxDC,MAACG,EAAAA,cAAA,CAAe,GAAGJ,CAAA,CAAO,EAEnCF,EAAO,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),i=require("../../utils/cn.cjs");function a({logo:r,logoSrc:s,logoAlt:o,logoClassName:n,brand:t,imageClassName:l="h-7 w-auto"}){return r||(s?e.jsx("img",{src:s,alt:o??(typeof t=="string"?t:"Logo"),className:i.cn(l,n)}):null)}function c({brand:r}){return e.jsxs("span",{className:"flex items-center gap-2 font-display text-lg font-bold tracking-tight",children:[e.jsx("span",{"aria-hidden":!0,className:"inline-block h-2.5 w-2.5 rounded-sm bg-current"}),r]})}function d({brand:r}){return e.jsx("span",{className:"font-display text-5xl font-bold tracking-[-0.03em] text-current sm:text-7xl",children:r})}function m({columns:r,Link:s,linkClassName:o,columnTitleClassName:n="text-muted-foreground"}){return e.jsx("div",{className:"grid grid-cols-2 gap-8 md:grid-cols-4",children:r.map(t=>e.jsxs("div",{children:[e.jsx("h3",{className:i.cn("text-xs font-semibold uppercase tracking-[0.16em]",n),children:t.title}),e.jsx("ul",{className:"mt-4 space-y-2.5",children:t.links.map(l=>e.jsx("li",{children:e.jsx(s,{href:l.href,className:o,children:l.label})},l.href))})]},t.title))})}function u({bottom:r,languageSwitcher:s,brand:o,wrapperClassName:n,textClassName:t}){return e.jsxs("div",{className:n,children:[e.jsx("span",{className:i.cn(t),children:r}),s?e.jsx("div",{children:s}):null,e.jsxs("span",{className:i.cn(t),children:["© ",new Date().getFullYear()," ",o,". All rights reserved."]})]})}exports.FooterBottomBar=u;exports.FooterColumnsBlock=m;exports.FooterEditorialWordmark=d;exports.FooterLogoNode=a;exports.FooterWordmark=c;
|
|
2
2
|
//# sourceMappingURL=parts.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parts.cjs","sources":["../../../../src/components/Footer/parts.tsx"],"sourcesContent":["import type { ElementType, ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { FooterColumn } from \"./types\";\n\nexport function FooterLogoNode({\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n brand,\n imageClassName = \"h-7 w-auto\",\n}: {\n logo?: ReactNode;\n logoSrc?: string;\n logoAlt?: string;\n logoClassName?: string;\n brand?: ReactNode;\n imageClassName?: string;\n}) {\n if (logo) return logo;\n if (logoSrc) {\n return (\n <img\n src={logoSrc}\n alt={logoAlt ?? (typeof brand === \"string\" ? brand : \"Logo\")}\n className={cn(imageClassName, logoClassName)}\n />\n );\n }\n return null;\n}\n\nexport function FooterWordmark({ brand }: { brand?: ReactNode }) {\n return (\n <span className=\"flex items-center gap-2 font-display text-lg font-bold tracking-tight\">\n <span aria-hidden className=\"inline-block h-2.5 w-2.5 rounded-sm bg-current\" />\n {brand}\n </span>\n );\n}\n\nexport function FooterEditorialWordmark({ brand }: { brand?: ReactNode }) {\n return (\n <span className=\"font-display text-5xl font-bold tracking-[-0.03em] text-
|
|
1
|
+
{"version":3,"file":"parts.cjs","sources":["../../../../src/components/Footer/parts.tsx"],"sourcesContent":["import type { ElementType, ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { FooterColumn } from \"./types\";\n\nexport function FooterLogoNode({\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n brand,\n imageClassName = \"h-7 w-auto\",\n}: {\n logo?: ReactNode;\n logoSrc?: string;\n logoAlt?: string;\n logoClassName?: string;\n brand?: ReactNode;\n imageClassName?: string;\n}) {\n if (logo) return logo;\n if (logoSrc) {\n return (\n <img\n src={logoSrc}\n alt={logoAlt ?? (typeof brand === \"string\" ? brand : \"Logo\")}\n className={cn(imageClassName, logoClassName)}\n />\n );\n }\n return null;\n}\n\nexport function FooterWordmark({ brand }: { brand?: ReactNode }) {\n return (\n <span className=\"flex items-center gap-2 font-display text-lg font-bold tracking-tight\">\n <span aria-hidden className=\"inline-block h-2.5 w-2.5 rounded-sm bg-current\" />\n {brand}\n </span>\n );\n}\n\nexport function FooterEditorialWordmark({ brand }: { brand?: ReactNode }) {\n return (\n <span className=\"font-display text-5xl font-bold tracking-[-0.03em] text-current sm:text-7xl\">\n {brand}\n </span>\n );\n}\n\nexport function FooterColumnsBlock({\n columns,\n Link,\n linkClassName,\n columnTitleClassName = \"text-muted-foreground\",\n}: {\n columns: FooterColumn[];\n Link: ElementType;\n linkClassName: string;\n columnTitleClassName?: string;\n}) {\n return (\n <div className=\"grid grid-cols-2 gap-8 md:grid-cols-4\">\n {columns.map((column) => (\n <div key={column.title}>\n <h3 className={cn(\"text-xs font-semibold uppercase tracking-[0.16em]\", columnTitleClassName)}>\n {column.title}\n </h3>\n <ul className=\"mt-4 space-y-2.5\">\n {column.links.map((link) => (\n <li key={link.href}>\n <Link href={link.href} className={linkClassName}>\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n );\n}\n\nexport function FooterBottomBar({\n bottom,\n languageSwitcher,\n brand,\n wrapperClassName,\n textClassName,\n}: {\n bottom?: ReactNode;\n languageSwitcher?: ReactNode;\n brand?: ReactNode;\n wrapperClassName: string;\n textClassName: string;\n}) {\n return (\n <div className={wrapperClassName}>\n <span className={cn(textClassName)}>{bottom}</span>\n {languageSwitcher ? <div>{languageSwitcher}</div> : null}\n <span className={cn(textClassName)}>© {new Date().getFullYear()} {brand}. All rights reserved.</span>\n </div>\n );\n}"],"names":["FooterLogoNode","logo","logoSrc","logoAlt","logoClassName","brand","imageClassName","jsx","cn","FooterWordmark","jsxs","FooterEditorialWordmark","FooterColumnsBlock","columns","Link","linkClassName","columnTitleClassName","column","link","FooterBottomBar","bottom","languageSwitcher","wrapperClassName","textClassName"],"mappings":"qJAIO,SAASA,EAAe,CAC7B,KAAAC,EACA,QAAAC,EACA,QAAAC,EACA,cAAAC,EACA,MAAAC,EACA,eAAAC,EAAiB,YACnB,EAOG,CACD,OAAIL,IACAC,EAEAK,EAAAA,IAAC,MAAA,CACC,IAAKL,EACL,IAAKC,IAAY,OAAOE,GAAU,SAAWA,EAAQ,QACrD,UAAWG,EAAAA,GAAGF,EAAgBF,CAAa,CAAA,CAAA,EAI1C,KACT,CAEO,SAASK,EAAe,CAAE,MAAAJ,GAAgC,CAC/D,OACEK,EAAAA,KAAC,OAAA,CAAK,UAAU,wEACd,SAAA,CAAAH,EAAAA,IAAC,OAAA,CAAK,cAAW,GAAC,UAAU,iDAAiD,EAC5EF,CAAA,EACH,CAEJ,CAEO,SAASM,EAAwB,CAAE,MAAAN,GAAgC,CACxE,OACEE,EAAAA,IAAC,OAAA,CAAK,UAAU,8EACb,SAAAF,EACH,CAEJ,CAEO,SAASO,EAAmB,CACjC,QAAAC,EACA,KAAAC,EACA,cAAAC,EACA,qBAAAC,EAAuB,uBACzB,EAKG,CACD,OACET,EAAAA,IAAC,OAAI,UAAU,wCACZ,WAAQ,IAAKU,GACZP,EAAAA,KAAC,MAAA,CACC,SAAA,CAAAH,EAAAA,IAAC,MAAG,UAAWC,KAAG,oDAAqDQ,CAAoB,EACxF,WAAO,MACV,EACAT,EAAAA,IAAC,KAAA,CAAG,UAAU,mBACX,SAAAU,EAAO,MAAM,IAAKC,GACjBX,EAAAA,IAAC,KAAA,CACC,SAAAA,EAAAA,IAACO,GAAK,KAAMI,EAAK,KAAM,UAAWH,EAC/B,SAAAG,EAAK,MACR,CAAA,EAHOA,EAAK,IAId,CACD,CAAA,CACH,CAAA,CAAA,EAZQD,EAAO,KAajB,CACD,EACH,CAEJ,CAEO,SAASE,EAAgB,CAC9B,OAAAC,EACA,iBAAAC,EACA,MAAAhB,EACA,iBAAAiB,EACA,cAAAC,CACF,EAMG,CACD,OACEb,EAAAA,KAAC,MAAA,CAAI,UAAWY,EACd,SAAA,CAAAf,MAAC,OAAA,CAAK,UAAWC,EAAAA,GAAGe,CAAa,EAAI,SAAAH,EAAO,EAC3CC,EAAmBd,EAAAA,IAAC,MAAA,CAAK,SAAAc,CAAA,CAAiB,EAAS,KACpDX,EAAAA,KAAC,OAAA,CAAK,UAAWF,EAAAA,GAAGe,CAAa,EAAG,SAAA,CAAA,KAAG,IAAI,KAAA,EAAO,YAAA,EAAc,IAAElB,EAAM,wBAAA,CAAA,CAAsB,CAAA,EAChG,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("../../../utils/cn.cjs"),q=require("../../Container.cjs"),w=require("../../../utils/surface.cjs"),c=require("../parts.cjs");function u({className:x,brand:s,logo:h,logoSrc:f,logoAlt:p,logoClassName:g,description:l,columns:j,socials:a,bottom:N,languageSwitcher:b,badge:d,background:i,LinkComponent:v,style:m,...y}){const C=v??"a",F=c.FooterLogoNode({logo:h,logoSrc:f,logoAlt:p,logoClassName:g,brand:s})??e.jsx(c.FooterWordmark,{brand:s}),r=!!i;return e.jsx("footer",{"data-emphasis":r?"":void 0,style:r?{...w.emphasisSurfaceStyle(i),...m}:m,className:t.cn("w-full border-t border-border bg-background",r&&"border-current/15",x),...y,children:e.jsxs(q.Container,{className:"py-16",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-10 md:grid-cols-4 lg:grid-cols-6",children:[e.jsxs("div",{className:"col-span-2",children:[e.jsx("span",{className:t.cn(r?"text-current":"text-foreground"),children:F}),l?e.jsx("p",{className:t.cn("mt-4 max-w-xs text-sm leading-6",r?"text-current/60":"text-muted-foreground"),children:l}):null,a?e.jsx("div",{className:"mt-6 flex items-center gap-3",children:a}):null,d?e.jsx("div",{className:"mt-6",children:d}):null]}),j.map(o=>e.jsxs("div",{children:[e.jsx("h3",{className:t.cn("text-xs font-semibold uppercase tracking-[0.16em]",r?"text-current/50":"text-muted-foreground"),children:o.title}),e.jsx("ul",{className:"mt-4 space-y-2.5",children:o.links.map(n=>e.jsx("li",{children:e.jsx(C,{href:n.href,className:t.cn("text-sm transition-colors duration-150",r?"text-current/70 hover:text-current":"text-muted-foreground hover:text-foreground"),children:n.label})},n.href))})]},o.title))]}),e.jsx(c.FooterBottomBar,{bottom:N,languageSwitcher:b,brand:s,wrapperClassName:t.cn("mt-14 flex flex-col items-center justify-between gap-4 border-t pt-8 text-sm sm:flex-row",r?"border-current/15 text-current/50":"border-border text-muted-foreground"),textClassName:""})]})})}u.displayName="FooterColumns";exports.FooterColumns=u;
|
|
2
|
+
//# sourceMappingURL=Columns.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Columns.cjs","sources":["../../../../../src/components/Footer/variants/Columns.tsx"],"sourcesContent":["import { cn } from \"../../../utils/cn\";\nimport { Container } from \"../../Container\";\nimport { emphasisSurfaceStyle } from \"../../../utils/surface\";\nimport type { FooterProps } from \"../types\";\nimport {\n FooterWordmark,\n FooterLogoNode,\n FooterBottomBar,\n} from \"../parts\";\n\ninterface ColumnsProps extends FooterProps {}\n\nexport function FooterColumns({\n className,\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n description,\n columns,\n socials,\n bottom,\n languageSwitcher,\n badge,\n background,\n LinkComponent,\n style,\n ...props\n}: ColumnsProps) {\n const Link = LinkComponent ?? \"a\";\n const brandNode = FooterLogoNode({ logo, logoSrc, logoAlt, logoClassName, brand }) ?? <FooterWordmark brand={brand} />;\n const emphatic = Boolean(background);\n\n return (\n <footer\n data-emphasis={emphatic ? \"\" : undefined}\n style={emphatic ? { ...emphasisSurfaceStyle(background), ...style } : style}\n className={cn(\"w-full border-t border-border bg-background\", emphatic && \"border-current/15\", className)}\n {...props}\n >\n <Container className=\"py-16\">\n <div className=\"grid grid-cols-2 gap-10 md:grid-cols-4 lg:grid-cols-6\">\n <div className=\"col-span-2\">\n <span className={cn(emphatic ? \"text-current\" : \"text-foreground\")}>{brandNode}</span>\n {description ? (\n <p className={cn(\"mt-4 max-w-xs text-sm leading-6\", emphatic ? \"text-current/60\" : \"text-muted-foreground\")}>\n {description}\n </p>\n ) : null}\n {socials ? <div className=\"mt-6 flex items-center gap-3\">{socials}</div> : null}\n {badge ? <div className=\"mt-6\">{badge}</div> : null}\n </div>\n {columns.map((column) => (\n <div key={column.title}>\n <h3 className={cn(\"text-xs font-semibold uppercase tracking-[0.16em]\", emphatic ? \"text-current/50\" : \"text-muted-foreground\")}>\n {column.title}\n </h3>\n <ul className=\"mt-4 space-y-2.5\">\n {column.links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n className={cn(\n \"text-sm transition-colors duration-150\",\n emphatic\n ? \"text-current/70 hover:text-current\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n <FooterBottomBar\n bottom={bottom}\n languageSwitcher={languageSwitcher}\n brand={brand}\n wrapperClassName={cn(\n \"mt-14 flex flex-col items-center justify-between gap-4 border-t pt-8 text-sm sm:flex-row\",\n emphatic ? \"border-current/15 text-current/50\" : \"border-border text-muted-foreground\",\n )}\n textClassName=\"\"\n />\n </Container>\n </footer>\n );\n}\nFooterColumns.displayName = \"FooterColumns\";\n"],"names":["FooterColumns","className","brand","logo","logoSrc","logoAlt","logoClassName","description","columns","socials","bottom","languageSwitcher","badge","background","LinkComponent","style","props","Link","brandNode","FooterLogoNode","jsx","FooterWordmark","emphatic","emphasisSurfaceStyle","cn","jsxs","Container","column","link","FooterBottomBar"],"mappings":"2PAYO,SAASA,EAAc,CAC5B,UAAAC,EACA,MAAAC,EACA,KAAAC,EACA,QAAAC,EACA,QAAAC,EACA,cAAAC,EACA,YAAAC,EACA,QAAAC,EACA,QAAAC,EACA,OAAAC,EACA,iBAAAC,EACA,MAAAC,EACA,WAAAC,EACA,cAAAC,EACA,MAAAC,EACA,GAAGC,CACL,EAAiB,CACf,MAAMC,EAAOH,GAAiB,IACxBI,EAAYC,EAAAA,eAAe,CAAE,KAAAhB,EAAM,QAAAC,EAAS,QAAAC,EAAS,cAAAC,EAAe,MAAAJ,CAAA,CAAO,GAAKkB,EAAAA,IAACC,EAAAA,eAAA,CAAe,MAAAnB,CAAA,CAAc,EAC9GoB,EAAW,EAAQT,EAEzB,OACEO,EAAAA,IAAC,SAAA,CACC,gBAAeE,EAAW,GAAK,OAC/B,MAAOA,EAAW,CAAE,GAAGC,EAAAA,qBAAqBV,CAAU,EAAG,GAAGE,CAAA,EAAUA,EACtE,UAAWS,EAAAA,GAAG,8CAA+CF,GAAY,oBAAqBrB,CAAS,EACtG,GAAGe,EAEJ,SAAAS,EAAAA,KAACC,EAAAA,UAAA,CAAU,UAAU,QACnB,SAAA,CAAAD,EAAAA,KAAC,MAAA,CAAI,UAAU,wDACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,aACb,SAAA,CAAAL,EAAAA,IAAC,QAAK,UAAWI,KAAGF,EAAW,eAAiB,iBAAiB,EAAI,SAAAJ,EAAU,EAC9EX,EACCa,EAAAA,IAAC,IAAA,CAAE,UAAWI,EAAAA,GAAG,kCAAmCF,EAAW,kBAAoB,uBAAuB,EACvG,SAAAf,CAAA,CACH,EACE,KACHE,EAAUW,EAAAA,IAAC,MAAA,CAAI,UAAU,+BAAgC,WAAQ,EAAS,KAC1ER,EAAQQ,EAAAA,IAAC,MAAA,CAAI,UAAU,OAAQ,WAAM,EAAS,IAAA,EACjD,EACCZ,EAAQ,IAAKmB,UACX,MAAA,CACC,SAAA,CAAAP,EAAAA,IAAC,KAAA,CAAG,UAAWI,EAAAA,GAAG,oDAAqDF,EAAW,kBAAoB,uBAAuB,EAC1H,SAAAK,EAAO,KAAA,CACV,EACAP,EAAAA,IAAC,KAAA,CAAG,UAAU,mBACX,SAAAO,EAAO,MAAM,IAAKC,GACjBR,EAAAA,IAAC,KAAA,CACC,SAAAA,EAAAA,IAACH,EAAA,CACC,KAAMW,EAAK,KACX,UAAWJ,EAAAA,GACT,yCACAF,EACI,qCACA,6CAAA,EAGL,SAAAM,EAAK,KAAA,CAAA,GAVDA,EAAK,IAYd,CACD,CAAA,CACH,CAAA,CAAA,EApBQD,EAAO,KAqBjB,CACD,CAAA,EACH,EACAP,EAAAA,IAACS,EAAAA,gBAAA,CACC,OAAAnB,EACA,iBAAAC,EACA,MAAAT,EACA,iBAAkBsB,EAAAA,GAChB,2FACAF,EAAW,oCAAsC,qCAAA,EAEnD,cAAc,EAAA,CAAA,CAChB,CAAA,CACF,CAAA,CAAA,CAGN,CACAtB,EAAc,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("../../../utils/cn.cjs"),w=require("../../Container.cjs"),y=require("../../../utils/surface.cjs"),o=require("../parts.cjs");function i({className:d,brand:s,logo:m,logoSrc:u,logoAlt:x,logoClassName:f,description:n,columns:b,socials:a,bottom:p,languageSwitcher:g,background:l,LinkComponent:j,style:c,...N}){const h=j??"a",v=o.FooterLogoNode({logo:m,logoSrc:u,logoAlt:x,logoClassName:f,brand:s,imageClassName:"h-12 w-auto"})??e.jsx(o.FooterEditorialWordmark,{brand:s}),r=!!l;return e.jsx("footer",{"data-emphasis":r?"":void 0,style:r?{...y.emphasisSurfaceStyle(l),...c}:c,className:t.cn("w-full border-t border-border bg-background",r&&"border-current/15",d),...N,children:e.jsxs(w.Container,{className:"py-16 sm:py-20",children:[e.jsxs("div",{className:"mb-14 flex flex-col justify-between gap-8 sm:flex-row sm:items-end",children:[e.jsxs("div",{children:[e.jsx("span",{className:t.cn(r?"text-current":"text-foreground"),children:v}),n?e.jsx("p",{className:t.cn("mt-3 max-w-sm text-sm leading-6",r?"text-current/60":"text-muted-foreground"),children:n}):null]}),a?e.jsx("div",{className:"flex items-center gap-3",children:a}):null]}),e.jsx("div",{className:t.cn("border-t pt-12",r?"border-current/15":"border-border"),children:e.jsx(o.FooterColumnsBlock,{columns:b,Link:h,columnTitleClassName:r?"text-current/50":"text-muted-foreground",linkClassName:t.cn("text-[15px] transition-colors duration-150",r?"text-current/80 hover:text-current":"text-foreground/80 hover:text-foreground")})}),e.jsx(o.FooterBottomBar,{bottom:p,languageSwitcher:g,brand:s,wrapperClassName:t.cn("mt-12 flex flex-col items-center justify-between gap-4 border-t pt-8 text-sm sm:flex-row",r?"border-current/15 text-current/60":"border-border text-muted-foreground"),textClassName:""})]})})}i.displayName="FooterEditorial";exports.FooterEditorial=i;
|
|
2
2
|
//# sourceMappingURL=Editorial.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Editorial.cjs","sources":["../../../../../src/components/Footer/variants/Editorial.tsx"],"sourcesContent":["import { cn } from \"../../../utils/cn\";\nimport { Container } from \"../../Container\";\nimport type { FooterProps } from \"../types\";\nimport {\n FooterColumnsBlock,\n FooterEditorialWordmark,\n FooterLogoNode,\n FooterBottomBar,\n} from \"../parts\";\n\ninterface EditorialProps extends FooterProps {}\n\nexport function FooterEditorial({
|
|
1
|
+
{"version":3,"file":"Editorial.cjs","sources":["../../../../../src/components/Footer/variants/Editorial.tsx"],"sourcesContent":["import { cn } from \"../../../utils/cn\";\nimport { Container } from \"../../Container\";\nimport { emphasisSurfaceStyle } from \"../../../utils/surface\";\nimport type { FooterProps } from \"../types\";\nimport {\n FooterColumnsBlock,\n FooterEditorialWordmark,\n FooterLogoNode,\n FooterBottomBar,\n} from \"../parts\";\n\ninterface EditorialProps extends FooterProps {}\n\nexport function FooterEditorial({\n className,\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n description,\n columns,\n socials,\n bottom,\n languageSwitcher,\n background,\n LinkComponent,\n style,\n ...props\n}: EditorialProps) {\n const Link = LinkComponent ?? \"a\";\n const brandNode = FooterLogoNode({ logo, logoSrc, logoAlt, logoClassName, brand, imageClassName: \"h-12 w-auto\" }) ?? <FooterEditorialWordmark brand={brand} />;\n const emphatic = Boolean(background);\n\n return (\n <footer\n data-emphasis={emphatic ? \"\" : undefined}\n style={emphatic ? { ...emphasisSurfaceStyle(background), ...style } : style}\n className={cn(\"w-full border-t border-border bg-background\", emphatic && \"border-current/15\", className)}\n {...props}\n >\n <Container className=\"py-16 sm:py-20\">\n <div className=\"mb-14 flex flex-col justify-between gap-8 sm:flex-row sm:items-end\">\n <div>\n <span className={cn(emphatic ? \"text-current\" : \"text-foreground\")}>{brandNode}</span>\n {description ? (\n <p className={cn(\"mt-3 max-w-sm text-sm leading-6\", emphatic ? \"text-current/60\" : \"text-muted-foreground\")}>\n {description}\n </p>\n ) : null}\n </div>\n {socials ? <div className=\"flex items-center gap-3\">{socials}</div> : null}\n </div>\n <div className={cn(\"border-t pt-12\", emphatic ? \"border-current/15\" : \"border-border\")}>\n <FooterColumnsBlock\n columns={columns}\n Link={Link}\n columnTitleClassName={emphatic ? \"text-current/50\" : \"text-muted-foreground\"}\n linkClassName={cn(\n \"text-[15px] transition-colors duration-150\",\n emphatic ? \"text-current/80 hover:text-current\" : \"text-foreground/80 hover:text-foreground\",\n )}\n />\n </div>\n <FooterBottomBar\n bottom={bottom}\n languageSwitcher={languageSwitcher}\n brand={brand}\n wrapperClassName={cn(\n \"mt-12 flex flex-col items-center justify-between gap-4 border-t pt-8 text-sm sm:flex-row\",\n emphatic ? \"border-current/15 text-current/60\" : \"border-border text-muted-foreground\",\n )}\n textClassName=\"\"\n />\n </Container>\n </footer>\n );\n}\nFooterEditorial.displayName = \"FooterEditorial\";\n"],"names":["FooterEditorial","className","brand","logo","logoSrc","logoAlt","logoClassName","description","columns","socials","bottom","languageSwitcher","background","LinkComponent","style","props","Link","brandNode","FooterLogoNode","jsx","FooterEditorialWordmark","emphatic","emphasisSurfaceStyle","cn","jsxs","Container","FooterColumnsBlock","FooterBottomBar"],"mappings":"2PAaO,SAASA,EAAgB,CAC9B,UAAAC,EACA,MAAAC,EACA,KAAAC,EACA,QAAAC,EACA,QAAAC,EACA,cAAAC,EACA,YAAAC,EACA,QAAAC,EACA,QAAAC,EACA,OAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,cAAAC,EACA,MAAAC,EACA,GAAGC,CACL,EAAmB,CACjB,MAAMC,EAAOH,GAAiB,IACxBI,EAAYC,EAAAA,eAAe,CAAE,KAAAf,EAAM,QAAAC,EAAS,QAAAC,EAAS,cAAAC,EAAe,MAAAJ,EAAO,eAAgB,aAAA,CAAe,GAAKiB,EAAAA,IAACC,EAAAA,yBAAwB,MAAAlB,EAAc,EACtJmB,EAAW,EAAQT,EAEzB,OACEO,EAAAA,IAAC,SAAA,CACC,gBAAeE,EAAW,GAAK,OAC/B,MAAOA,EAAW,CAAE,GAAGC,EAAAA,qBAAqBV,CAAU,EAAG,GAAGE,CAAA,EAAUA,EACtE,UAAWS,EAAAA,GAAG,8CAA+CF,GAAY,oBAAqBpB,CAAS,EACtG,GAAGc,EAEJ,SAAAS,EAAAA,KAACC,EAAAA,UAAA,CAAU,UAAU,iBACnB,SAAA,CAAAD,EAAAA,KAAC,MAAA,CAAI,UAAU,qEACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAL,EAAAA,IAAC,QAAK,UAAWI,KAAGF,EAAW,eAAiB,iBAAiB,EAAI,SAAAJ,EAAU,EAC9EV,EACCY,EAAAA,IAAC,IAAA,CAAE,UAAWI,EAAAA,GAAG,kCAAmCF,EAAW,kBAAoB,uBAAuB,EACvG,SAAAd,CAAA,CACH,EACE,IAAA,EACN,EACCE,EAAUU,EAAAA,IAAC,MAAA,CAAI,UAAU,0BAA2B,WAAQ,EAAS,IAAA,EACxE,EACAA,EAAAA,IAAC,OAAI,UAAWI,KAAG,iBAAkBF,EAAW,oBAAsB,eAAe,EACnF,SAAAF,EAAAA,IAACO,EAAAA,mBAAA,CACC,QAAAlB,EACA,KAAAQ,EACA,qBAAsBK,EAAW,kBAAoB,wBACrD,cAAeE,EAAAA,GACb,6CACAF,EAAW,qCAAuC,0CAAA,CACpD,CAAA,EAEJ,EACAF,EAAAA,IAACQ,EAAAA,gBAAA,CACC,OAAAjB,EACA,iBAAAC,EACA,MAAAT,EACA,iBAAkBqB,EAAAA,GAChB,2FACAF,EAAW,oCAAsC,qCAAA,EAEnD,cAAc,EAAA,CAAA,CAChB,CAAA,CACF,CAAA,CAAA,CAGN,CACArB,EAAgB,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),s=require("../../../utils/cn.cjs"),y=require("../../Container.cjs"),v=require("../../../utils/surface.cjs"),i=require("../parts.cjs");function l({className:d,brand:o,logo:u,logoSrc:x,logoAlt:m,logoClassName:f,columns:h,languageSwitcher:n,bottom:p,background:c,LinkComponent:j,style:a,...g}){const N=j??"a",b=i.FooterLogoNode({logo:u,logoSrc:x,logoAlt:m,logoClassName:f,brand:o})??e.jsx(i.FooterWordmark,{brand:o}),r=!!c;return e.jsx("footer",{"data-emphasis":r?"":void 0,style:r?{...v.emphasisSurfaceStyle(c),...a}:a,className:s.cn("w-full border-t border-border bg-background",r&&"border-current/15",d),...g,children:e.jsxs(y.Container,{className:"flex flex-col items-center justify-between gap-6 py-10 sm:flex-row",children:[e.jsx("span",{className:s.cn(r?"text-current":"text-foreground"),children:b}),e.jsx("ul",{className:"flex flex-wrap items-center justify-center gap-x-8 gap-y-3",children:h.flatMap(t=>t.links).slice(0,6).map(t=>e.jsx("li",{children:e.jsx(N,{href:t.href,className:s.cn("text-sm transition-colors duration-150",r?"text-current/70 hover:text-current":"text-muted-foreground hover:text-foreground"),children:t.label})},t.href))}),e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[n?e.jsx("div",{children:n}):null,e.jsx("div",{className:s.cn("text-sm",r?"text-current/60":"text-muted-foreground"),children:p})]})]})})}l.displayName="FooterMinimal";exports.FooterMinimal=l;
|
|
2
2
|
//# sourceMappingURL=Minimal.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Minimal.cjs","sources":["../../../../../src/components/Footer/variants/Minimal.tsx"],"sourcesContent":["import { cn } from \"../../../utils/cn\";\nimport { Container } from \"../../Container\";\nimport type { FooterProps } from \"../types\";\nimport { FooterWordmark, FooterLogoNode } from \"../parts\";\n\ninterface MinimalProps extends FooterProps {}\n\nexport function FooterMinimal({
|
|
1
|
+
{"version":3,"file":"Minimal.cjs","sources":["../../../../../src/components/Footer/variants/Minimal.tsx"],"sourcesContent":["import { cn } from \"../../../utils/cn\";\nimport { Container } from \"../../Container\";\nimport { emphasisSurfaceStyle } from \"../../../utils/surface\";\nimport type { FooterProps } from \"../types\";\nimport { FooterWordmark, FooterLogoNode } from \"../parts\";\n\ninterface MinimalProps extends FooterProps {}\n\nexport function FooterMinimal({\n className,\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n columns,\n languageSwitcher,\n bottom,\n background,\n LinkComponent,\n style,\n ...props\n}: MinimalProps) {\n const Link = LinkComponent ?? \"a\";\n const brandNode = FooterLogoNode({ logo, logoSrc, logoAlt, logoClassName, brand }) ?? <FooterWordmark brand={brand} />;\n const emphatic = Boolean(background);\n\n return (\n <footer\n data-emphasis={emphatic ? \"\" : undefined}\n style={emphatic ? { ...emphasisSurfaceStyle(background), ...style } : style}\n className={cn(\"w-full border-t border-border bg-background\", emphatic && \"border-current/15\", className)}\n {...props}\n >\n <Container className=\"flex flex-col items-center justify-between gap-6 py-10 sm:flex-row\">\n <span className={cn(emphatic ? \"text-current\" : \"text-foreground\")}>{brandNode}</span>\n <ul className=\"flex flex-wrap items-center justify-center gap-x-8 gap-y-3\">\n {columns.flatMap((c) => c.links).slice(0, 6).map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n className={cn(\n \"text-sm transition-colors duration-150\",\n emphatic ? \"text-current/70 hover:text-current\" : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n <div className=\"flex flex-col items-center gap-3\">\n {languageSwitcher ? <div>{languageSwitcher}</div> : null}\n <div className={cn(\"text-sm\", emphatic ? \"text-current/60\" : \"text-muted-foreground\")}>{bottom}</div>\n </div>\n </Container>\n </footer>\n );\n}\nFooterMinimal.displayName = \"FooterMinimal\";\n"],"names":["FooterMinimal","className","brand","logo","logoSrc","logoAlt","logoClassName","columns","languageSwitcher","bottom","background","LinkComponent","style","props","Link","brandNode","FooterLogoNode","jsx","FooterWordmark","emphatic","emphasisSurfaceStyle","cn","jsxs","Container","c","link"],"mappings":"2PAQO,SAASA,EAAc,CAC5B,UAAAC,EACA,MAAAC,EACA,KAAAC,EACA,QAAAC,EACA,QAAAC,EACA,cAAAC,EACA,QAAAC,EACA,iBAAAC,EACA,OAAAC,EACA,WAAAC,EACA,cAAAC,EACA,MAAAC,EACA,GAAGC,CACL,EAAiB,CACf,MAAMC,EAAOH,GAAiB,IACxBI,EAAYC,EAAAA,eAAe,CAAE,KAAAb,EAAM,QAAAC,EAAS,QAAAC,EAAS,cAAAC,EAAe,MAAAJ,CAAA,CAAO,GAAKe,EAAAA,IAACC,EAAAA,eAAA,CAAe,MAAAhB,CAAA,CAAc,EAC9GiB,EAAW,EAAQT,EAEzB,OACEO,EAAAA,IAAC,SAAA,CACC,gBAAeE,EAAW,GAAK,OAC/B,MAAOA,EAAW,CAAE,GAAGC,EAAAA,qBAAqBV,CAAU,EAAG,GAAGE,CAAA,EAAUA,EACtE,UAAWS,EAAAA,GAAG,8CAA+CF,GAAY,oBAAqBlB,CAAS,EACtG,GAAGY,EAEJ,SAAAS,EAAAA,KAACC,EAAAA,UAAA,CAAU,UAAU,qEACnB,SAAA,CAAAN,EAAAA,IAAC,QAAK,UAAWI,KAAGF,EAAW,eAAiB,iBAAiB,EAAI,SAAAJ,EAAU,QAC9E,KAAA,CAAG,UAAU,6DACX,SAAAR,EAAQ,QAASiB,GAAMA,EAAE,KAAK,EAAE,MAAM,EAAG,CAAC,EAAE,IAAKC,SAC/C,KAAA,CACC,SAAAR,EAAAA,IAACH,EAAA,CACC,KAAMW,EAAK,KACX,UAAWJ,EAAAA,GACT,yCACAF,EAAW,qCAAuC,6CAAA,EAGnD,SAAAM,EAAK,KAAA,CAAA,CACR,EATOA,EAAK,IAUd,CACD,EACH,EACAH,EAAAA,KAAC,MAAA,CAAI,UAAU,mCACZ,SAAA,CAAAd,EAAmBS,EAAAA,IAAC,MAAA,CAAK,SAAAT,CAAA,CAAiB,EAAS,KACpDS,EAAAA,IAAC,OAAI,UAAWI,KAAG,UAAWF,EAAW,kBAAoB,uBAAuB,EAAI,SAAAV,CAAA,CAAO,CAAA,CAAA,CACjG,CAAA,CAAA,CACF,CAAA,CAAA,CAGN,CACAT,EAAc,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),i="relative mx-auto flex w-full max-w-6xl flex-col items-center px-5 sm:px-8",s="font-display font-semibold leading-[1.04] tracking-[-0.03em] text-balance",l="text-pretty leading-relaxed sm:text-lg";function o({eyebrow:e}){return typeof e=="string"?t.jsx("p",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-primary",children:e}):e?t.jsx("div",{children:e}):null}function a({primaryAction:e,secondaryAction:r,emphasis:n=!1}){return!e&&!r?null:t.jsxs("div",{"data-emphasis":n?"":void 0,className:"flex flex-wrap items-center gap-4",children:[e,r]})}exports.HeroActions=a;exports.HeroEyebrow=o;exports.heroContainer=i;exports.heroDescriptionBase=l;exports.heroTitleType=s;
|
|
2
2
|
//# sourceMappingURL=parts.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parts.cjs","sources":["../../../../src/components/Hero/parts.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\nexport const heroContainer =\n \"relative mx-auto flex w-full max-w-6xl flex-col items-center px-5 sm:px-8\";\n\nexport const
|
|
1
|
+
{"version":3,"file":"parts.cjs","sources":["../../../../src/components/Hero/parts.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\nexport const heroContainer =\n \"relative mx-auto flex w-full max-w-6xl flex-col items-center px-5 sm:px-8\";\n\n/**\n * Shared display type for every hero layout. Layouts add their own color\n * (`text-foreground` on paper, inherited contrast color on the emphasis band)\n * and size, but never re-declare the family, weight, leading or tracking.\n */\nexport const heroTitleType =\n \"font-display font-semibold leading-[1.04] tracking-[-0.03em] text-balance\";\n\n/** Shared supporting-copy type; layouts add their own color. */\nexport const heroDescriptionBase = \"text-pretty leading-relaxed sm:text-lg\";\n\nexport function HeroEyebrow({ eyebrow }: { eyebrow?: ReactNode }) {\n if (typeof eyebrow === \"string\") {\n return (\n <p className=\"text-xs font-semibold uppercase tracking-[0.2em] text-primary\">\n {eyebrow}\n </p>\n );\n }\n return eyebrow ? <div>{eyebrow}</div> : null;\n}\n\nexport function HeroActions({\n primaryAction,\n secondaryAction,\n emphasis = false,\n}: {\n primaryAction?: ReactNode;\n secondaryAction?: ReactNode;\n /** Marks the actions as sitting on an emphasis band so descendant buttons inherit its contrast color. */\n emphasis?: boolean;\n}) {\n if (!primaryAction && !secondaryAction) return null;\n return (\n <div data-emphasis={emphasis ? \"\" : undefined} className=\"flex flex-wrap items-center gap-4\">\n {primaryAction}\n {secondaryAction}\n </div>\n );\n}\n"],"names":["heroContainer","heroTitleType","heroDescriptionBase","HeroEyebrow","eyebrow","jsx","HeroActions","primaryAction","secondaryAction","emphasis"],"mappings":"qHAEaA,EACX,4EAOWC,EACX,4EAGWC,EAAsB,yCAE5B,SAASC,EAAY,CAAE,QAAAC,GAAoC,CAChE,OAAI,OAAOA,GAAY,SAEnBC,EAAAA,IAAC,IAAA,CAAE,UAAU,gEACV,SAAAD,EACH,EAGGA,EAAUC,EAAAA,IAAC,MAAA,CAAK,SAAAD,CAAA,CAAQ,EAAS,IAC1C,CAEO,SAASE,EAAY,CAC1B,cAAAC,EACA,gBAAAC,EACA,SAAAC,EAAW,EACb,EAKG,CACD,MAAI,CAACF,GAAiB,CAACC,EAAwB,YAE5C,MAAA,CAAI,gBAAeC,EAAW,GAAK,OAAW,UAAU,oCACtD,SAAA,CAAAF,EACAC,CAAA,EACH,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),f=require("react"),r=require("../../../utils/cn.cjs"),t=require("../parts.cjs"),x=f.forwardRef(({className:d,eyebrow:i,title:u,description:s,primaryAction:n,secondaryAction:c,media:o,meta:a,background:g,id:m,...b},j)=>e.jsx("section",{ref:j,id:m,className:r.cn("relative w-full border-b border-border bg-background",d),...b,children:e.jsxs("div",{className:r.cn(t.heroContainer,"pt-24 pb-20 text-center sm:pt-32 sm:pb-24"),children:[e.jsx(t.HeroEyebrow,{eyebrow:i}),e.jsx("h1",{className:r.cn(t.heroTitleType,"mt-7 max-w-4xl text-5xl text-foreground sm:text-6xl lg:text-7xl"),children:u}),s?e.jsx("p",{className:r.cn(t.heroDescriptionBase,"mx-auto mt-7 max-w-xl text-muted-foreground"),children:s}):null,n||c?e.jsx("div",{className:"mt-10 justify-center",children:e.jsx(t.HeroActions,{primaryAction:n,secondaryAction:c})}):null,a?e.jsx("ul",{className:"mt-14 flex flex-wrap items-center justify-center gap-x-9 gap-y-3",children:a.map((l,p)=>e.jsxs("li",{className:r.cn("flex items-center gap-2 text-sm text-muted-foreground",p>0&&"sm:border-l sm:border-border sm:pl-9"),children:[l.icon?e.jsx("span",{className:"text-foreground/35",children:l.icon}):null,l.label]},l.label))}):null,o?e.jsx("div",{className:"mt-16 w-full",children:o}):null]})}));x.displayName="HeroCentered";exports.HeroCentered=x;
|
|
2
2
|
//# sourceMappingURL=Centered.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Centered.cjs","sources":["../../../../../src/components/Hero/variants/Centered.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport {
|
|
1
|
+
{"version":3,"file":"Centered.cjs","sources":["../../../../../src/components/Hero/variants/Centered.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport {\n HeroActions,\n HeroEyebrow,\n heroContainer,\n heroDescriptionBase,\n heroTitleType,\n} from \"../parts\";\nimport type { HeroProps } from \"../types\";\n\n/** Centered — understated, one statement, generous white space. */\nexport const HeroCentered = forwardRef<HTMLElement, HeroProps>(\n (\n {\n className,\n eyebrow,\n title,\n description,\n primaryAction,\n secondaryAction,\n media,\n meta,\n background,\n id,\n ...props\n },\n ref,\n ) => (\n <section\n ref={ref}\n id={id}\n className={cn(\"relative w-full border-b border-border bg-background\", className)}\n {...props}\n >\n <div className={cn(heroContainer, \"pt-24 pb-20 text-center sm:pt-32 sm:pb-24\")}>\n <HeroEyebrow eyebrow={eyebrow} />\n <h1 className={cn(heroTitleType, \"mt-7 max-w-4xl text-5xl text-foreground sm:text-6xl lg:text-7xl\")}>\n {title}\n </h1>\n {description ? (\n <p className={cn(heroDescriptionBase, \"mx-auto mt-7 max-w-xl text-muted-foreground\")}>\n {description}\n </p>\n ) : null}\n {primaryAction || secondaryAction ? (\n <div className=\"mt-10 justify-center\">\n <HeroActions primaryAction={primaryAction} secondaryAction={secondaryAction} />\n </div>\n ) : null}\n {meta ? (\n <ul className=\"mt-14 flex flex-wrap items-center justify-center gap-x-9 gap-y-3\">\n {meta.map((m, i) => (\n <li\n key={m.label}\n className={cn(\n \"flex items-center gap-2 text-sm text-muted-foreground\",\n i > 0 && \"sm:border-l sm:border-border sm:pl-9\",\n )}\n >\n {m.icon ? <span className=\"text-foreground/35\">{m.icon}</span> : null}\n {m.label}\n </li>\n ))}\n </ul>\n ) : null}\n {media ? <div className=\"mt-16 w-full\">{media}</div> : null}\n </div>\n </section>\n ),\n);\nHeroCentered.displayName = \"HeroCentered\";\n"],"names":["HeroCentered","forwardRef","className","eyebrow","title","description","primaryAction","secondaryAction","media","meta","background","id","props","ref","jsx","cn","heroContainer","HeroEyebrow","heroTitleType","heroDescriptionBase","HeroActions","m","i","jsxs"],"mappings":"qMAYaA,EAAeC,EAAAA,WAC1B,CACE,CACE,UAAAC,EACA,QAAAC,EACA,MAAAC,EACA,YAAAC,EACA,cAAAC,EACA,gBAAAC,EACA,MAAAC,EACA,KAAAC,EACA,WAAAC,EACA,GAAAC,EACA,GAAGC,CAAA,EAELC,IAEAC,EAAAA,IAAC,UAAA,CACC,IAAAD,EACA,GAAAF,EACA,UAAWI,EAAAA,GAAG,uDAAwDb,CAAS,EAC9E,GAAGU,EAEJ,gBAAC,MAAA,CAAI,UAAWG,EAAAA,GAAGC,EAAAA,cAAe,2CAA2C,EAC3E,SAAA,CAAAF,MAACG,EAAAA,aAAY,QAAAd,EAAkB,QAC9B,KAAA,CAAG,UAAWY,EAAAA,GAAGG,EAAAA,cAAe,iEAAiE,EAC/F,SAAAd,EACH,EACCC,QACE,IAAA,CAAE,UAAWU,EAAAA,GAAGI,sBAAqB,6CAA6C,EAChF,SAAAd,CAAA,CACH,EACE,KACHC,GAAiBC,EAChBO,EAAAA,IAAC,MAAA,CAAI,UAAU,uBACb,SAAAA,EAAAA,IAACM,EAAAA,YAAA,CAAY,cAAAd,EAA8B,gBAAAC,CAAA,CAAkC,CAAA,CAC/E,EACE,KACHE,QACE,KAAA,CAAG,UAAU,mEACX,SAAAA,EAAK,IAAI,CAACY,EAAGC,IACZC,EAAAA,KAAC,KAAA,CAEC,UAAWR,EAAAA,GACT,wDACAO,EAAI,GAAK,sCAAA,EAGV,SAAA,CAAAD,EAAE,KAAOP,MAAC,OAAA,CAAK,UAAU,qBAAsB,SAAAO,EAAE,KAAK,EAAU,KAChEA,EAAE,KAAA,CAAA,EAPEA,EAAE,KAAA,CASV,EACH,EACE,KACHb,EAAQM,EAAAA,IAAC,MAAA,CAAI,UAAU,eAAgB,WAAM,EAAS,IAAA,CAAA,CACzD,CAAA,CAAA,CAGN,EACAd,EAAa,YAAc"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),a=require("react"),i=require("../../../utils/cn.cjs"),u=require("../parts.cjs"),
|
|
2
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),a=require("react"),i=require("../../../utils/cn.cjs"),u=require("../parts.cjs"),O=18,F=5,P=.7;function k(s,d,o){d.current=s,typeof o=="function"?o(s):o&&(o.current=s)}function C(s){return{x:(s.x-50)*4,y:(s.y-50)*4}}const N=a.forwardRef(({className:s,eyebrow:d,title:o,description:f,primaryAction:x,secondaryAction:m,meta:h,media:p,logos:w=[],background:_,id:T,...M},E)=>{const y=a.useRef(null),[b,j]=a.useState({x:0,y:0}),[R,$]=a.useState(!1),[c,v]=a.useState(!1);a.useEffect(()=>{var r;if(typeof window.matchMedia!="function")return;const e=window.matchMedia("(prefers-reduced-motion: reduce)"),n=()=>v(e.matches);return v(e.matches),(r=e.addEventListener)==null||r.call(e,"change",n),()=>{var l;return(l=e.removeEventListener)==null?void 0:l.call(e,"change",n)}},[]),a.useEffect(()=>{if(c)return;const e=requestAnimationFrame(()=>$(!0));return()=>cancelAnimationFrame(e)},[c]);const L=e=>{if(c)return;const n=y.current;if(!n)return;const r=n.getBoundingClientRect();j({x:((e.clientX-r.left)/r.width-.5)*2,y:((e.clientY-r.top)/r.height-.5)*2})},S=()=>j({x:0,y:0}),g=R||c;return t.jsxs("section",{ref:e=>k(e,y,E),id:T,onMouseMove:L,onMouseLeave:S,className:i.cn("relative w-full overflow-hidden border-b border-border bg-background",s),...M,children:[w.map((e,n)=>{const r=e.depth??O,l=C(e),A=`translate(calc(-50% + ${l.x}px), calc(-50% + ${l.y}px)) scale(0.6)`,D="translate(-50%, -50%)",H=c?"translate(0px, 0px)":`translate(${b.x*r}px, ${b.y*r}px)`;return t.jsx("div",{"aria-hidden":!0,"data-logo":e.label,className:"pointer-events-none absolute z-10 hidden transition-[transform,opacity] duration-700 ease-out md:block",style:{left:`${e.x}%`,top:`${e.y}%`,transform:g?D:A,opacity:g?1:0,transitionDelay:`${n*90}ms`},children:t.jsx("div",{className:"transition-transform duration-200 ease-out",style:{transform:H},children:t.jsx("div",{className:"flex h-16 w-16 items-center justify-center rounded-2xl border border-border bg-surface shadow-raised",style:c?void 0:{animation:`hero-float ${F}s ease-in-out infinite`,animationDelay:`-${n*P}s`},children:e.icon})})},e.label)}),t.jsxs("div",{className:i.cn(u.heroContainer,"relative z-20 pt-24 pb-20 text-center sm:pt-32 sm:pb-24"),children:[t.jsx(u.HeroEyebrow,{eyebrow:d}),t.jsx("h1",{className:i.cn(u.heroTitleType,"mt-7 max-w-4xl text-5xl text-foreground sm:text-6xl lg:text-7xl"),children:o}),f?t.jsx("p",{className:i.cn(u.heroDescriptionBase,"mx-auto mt-7 max-w-xl text-muted-foreground"),children:f}):null,x||m?t.jsx("div",{className:"mt-10 justify-center",children:t.jsx(u.HeroActions,{primaryAction:x,secondaryAction:m})}):null,h?t.jsx("ul",{className:"mt-14 flex flex-wrap items-center justify-center gap-x-9 gap-y-3",children:h.map((e,n)=>t.jsxs("li",{className:i.cn("flex items-center gap-2 text-sm text-muted-foreground",n>0&&"sm:border-l sm:border-border sm:pl-9"),children:[e.icon?t.jsx("span",{className:"text-foreground/35",children:e.icon}):null,e.label]},e.label))}):null,p?t.jsx("div",{className:"mt-16 w-full",children:p}):null]})]})});N.displayName="HeroParallax";exports.HeroParallax=N;
|
|
3
3
|
//# sourceMappingURL=Parallax.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Parallax.cjs","sources":["../../../../../src/components/Hero/variants/Parallax.tsx"],"sourcesContent":["\"use client\";\nimport {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type ForwardedRef,\n type MouseEvent,\n type MutableRefObject,\n} from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { HeroActions, HeroEyebrow, heroContainer, heroTitleBase } from \"../parts\";\nimport type { HeroLogo, HeroProps } from \"../types\";\n\nconst DEFAULT_DEPTH = 18;\nconst FLOAT_DURATION = 5; // seconds per breathing cycle\nconst FLOAT_STAGGER = 0.7; // seconds of desync between consecutive tiles\n\nfunction setSectionRef(\n node: HTMLElement | null,\n localRef: MutableRefObject<HTMLElement | null>,\n forwarded: ForwardedRef<HTMLElement>,\n) {\n localRef.current = node;\n if (typeof forwarded === \"function\") forwarded(node);\n else if (forwarded) (forwarded as MutableRefObject<HTMLElement | null>).current = node;\n}\n\nfunction tileEntryOffset(logo: HeroLogo) {\n // Push the tile further out from the centre along the line it already sits on,\n // so it appears to fly in from off-screen.\n return { x: (logo.x - 50) * 4, y: (logo.y - 50) * 4 };\n}\n\n/** Parallax — centred copy with floating logo tiles that react to the mouse. */\nexport const HeroParallax = forwardRef<HTMLElement, HeroProps>(\n (\n { className, eyebrow, title, description, primaryAction, secondaryAction, meta, media, logos = [], id, ...props },\n ref,\n ) => {\n const sectionRef = useRef<HTMLElement | null>(null);\n const [offset, setOffset] = useState({ x: 0, y: 0 });\n const [entered, setEntered] = useState(false);\n const [reduceMotion, setReduceMotion] = useState(false);\n\n useEffect(() => {\n if (typeof window.matchMedia !== \"function\") return;\n const mq = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const onChange = () => setReduceMotion(mq.matches);\n setReduceMotion(mq.matches);\n mq.addEventListener?.(\"change\", onChange);\n return () => mq.removeEventListener?.(\"change\", onChange);\n }, []);\n\n useEffect(() => {\n if (reduceMotion) return;\n const raf = requestAnimationFrame(() => setEntered(true));\n return () => cancelAnimationFrame(raf);\n }, [reduceMotion]);\n\n const handleMouseMove = (e: MouseEvent<HTMLElement>) => {\n if (reduceMotion) return;\n const el = sectionRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setOffset({\n x: ((e.clientX - rect.left) / rect.width - 0.5) * 2,\n y: ((e.clientY - rect.top) / rect.height - 0.5) * 2,\n });\n };\n\n const handleMouseLeave = () => setOffset({ x: 0, y: 0 });\n\n const showResting = entered || reduceMotion;\n\n return (\n <section\n ref={(node) => setSectionRef(node, sectionRef, ref)}\n id={id}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n className={cn(\"relative w-full overflow-hidden border-b border-border bg-background\", className)}\n {...props}\n >\n {logos.map((logo, i) => {\n const depth = logo.depth ?? DEFAULT_DEPTH;\n const entry = tileEntryOffset(logo);\n const entryTransform = `translate(calc(-50% + ${entry.x}px), calc(-50% + ${entry.y}px)) scale(0.6)`;\n const restingTransform = \"translate(-50%, -50%)\";\n const parallaxTransform = reduceMotion\n ? \"translate(0px, 0px)\"\n : `translate(${offset.x * depth}px, ${offset.y * depth}px)`;\n\n return (\n <div\n key={logo.label}\n aria-hidden\n data-logo={logo.label}\n className=\"pointer-events-none absolute z-10 hidden transition-[transform,opacity] duration-700 ease-out md:block\"\n style={{\n left: `${logo.x}%`,\n top: `${logo.y}%`,\n transform: showResting ? restingTransform : entryTransform,\n opacity: showResting ? 1 : 0,\n transitionDelay: `${i * 90}ms`,\n }}\n >\n <div\n className=\"transition-transform duration-200 ease-out\"\n style={{ transform: parallaxTransform }}\n >\n <div\n className=\"flex h-16 w-16 items-center justify-center rounded-2xl border border-border bg-surface shadow-raised\"\n style={\n reduceMotion\n ? undefined\n : {\n animation: `hero-float ${FLOAT_DURATION}s ease-in-out infinite`,\n animationDelay: `-${i * FLOAT_STAGGER}s`,\n }\n }\n >\n {logo.icon}\n </div>\n </div>\n </div>\n );\n })}\n\n <div className={cn(heroContainer, \"relative z-20 pt-24 pb-20 text-center sm:pt-32 sm:pb-24\")}>\n <HeroEyebrow eyebrow={eyebrow} />\n <h1 className={cn(heroTitleBase, \"mt-7 max-w-4xl text-5xl leading-[1.04] sm:text-6xl lg:text-7xl\")}>\n {title}\n </h1>\n {description ? (\n <p className=\"mx-auto mt-7 max-w-xl text-pretty leading-relaxed text-muted-foreground sm:text-lg\">\n {description}\n </p>\n ) : null}\n {primaryAction || secondaryAction ? (\n <div className=\"mt-10 justify-center\">\n <HeroActions primaryAction={primaryAction} secondaryAction={secondaryAction} />\n </div>\n ) : null}\n {meta ? (\n <ul className=\"mt-14 flex flex-wrap items-center justify-center gap-x-9 gap-y-3\">\n {meta.map((m, i) => (\n <li\n key={m.label}\n className={cn(\n \"flex items-center gap-2 text-sm text-muted-foreground\",\n i > 0 && \"sm:border-l sm:border-border sm:pl-9\",\n )}\n >\n {m.icon ? <span className=\"text-foreground/35\">{m.icon}</span> : null}\n {m.label}\n </li>\n ))}\n </ul>\n ) : null}\n {media ? <div className=\"mt-16 w-full\">{media}</div> : null}\n </div>\n </section>\n );\n },\n);\nHeroParallax.displayName = \"HeroParallax\";\n"],"names":["DEFAULT_DEPTH","FLOAT_DURATION","FLOAT_STAGGER","setSectionRef","node","localRef","forwarded","tileEntryOffset","logo","HeroParallax","forwardRef","className","eyebrow","title","description","primaryAction","secondaryAction","meta","media","logos","id","props","ref","sectionRef","useRef","offset","setOffset","useState","entered","setEntered","reduceMotion","setReduceMotion","useEffect","mq","onChange","_a","raf","handleMouseMove","el","rect","handleMouseLeave","showResting","jsxs","cn","i","depth","entry","entryTransform","restingTransform","parallaxTransform","jsx","heroContainer","HeroEyebrow","heroTitleBase","HeroActions","m"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Parallax.cjs","sources":["../../../../../src/components/Hero/variants/Parallax.tsx"],"sourcesContent":["\"use client\";\nimport {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type ForwardedRef,\n type MouseEvent,\n type MutableRefObject,\n} from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport {\n HeroActions,\n HeroEyebrow,\n heroContainer,\n heroDescriptionBase,\n heroTitleType,\n} from \"../parts\";\nimport type { HeroLogo, HeroProps } from \"../types\";\n\nconst DEFAULT_DEPTH = 18;\nconst FLOAT_DURATION = 5; // seconds per breathing cycle\nconst FLOAT_STAGGER = 0.7; // seconds of desync between consecutive tiles\n\nfunction setSectionRef(\n node: HTMLElement | null,\n localRef: MutableRefObject<HTMLElement | null>,\n forwarded: ForwardedRef<HTMLElement>,\n) {\n localRef.current = node;\n if (typeof forwarded === \"function\") forwarded(node);\n else if (forwarded) (forwarded as MutableRefObject<HTMLElement | null>).current = node;\n}\n\nfunction tileEntryOffset(logo: HeroLogo) {\n // Push the tile further out from the centre along the line it already sits on,\n // so it appears to fly in from off-screen.\n return { x: (logo.x - 50) * 4, y: (logo.y - 50) * 4 };\n}\n\n/** Parallax — centred copy with floating logo tiles that react to the mouse. */\nexport const HeroParallax = forwardRef<HTMLElement, HeroProps>(\n (\n { className, eyebrow, title, description, primaryAction, secondaryAction, meta, media, logos = [], background, id, ...props },\n ref,\n ) => {\n const sectionRef = useRef<HTMLElement | null>(null);\n const [offset, setOffset] = useState({ x: 0, y: 0 });\n const [entered, setEntered] = useState(false);\n const [reduceMotion, setReduceMotion] = useState(false);\n\n useEffect(() => {\n if (typeof window.matchMedia !== \"function\") return;\n const mq = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const onChange = () => setReduceMotion(mq.matches);\n setReduceMotion(mq.matches);\n mq.addEventListener?.(\"change\", onChange);\n return () => mq.removeEventListener?.(\"change\", onChange);\n }, []);\n\n useEffect(() => {\n if (reduceMotion) return;\n const raf = requestAnimationFrame(() => setEntered(true));\n return () => cancelAnimationFrame(raf);\n }, [reduceMotion]);\n\n const handleMouseMove = (e: MouseEvent<HTMLElement>) => {\n if (reduceMotion) return;\n const el = sectionRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setOffset({\n x: ((e.clientX - rect.left) / rect.width - 0.5) * 2,\n y: ((e.clientY - rect.top) / rect.height - 0.5) * 2,\n });\n };\n\n const handleMouseLeave = () => setOffset({ x: 0, y: 0 });\n\n const showResting = entered || reduceMotion;\n\n return (\n <section\n ref={(node) => setSectionRef(node, sectionRef, ref)}\n id={id}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n className={cn(\"relative w-full overflow-hidden border-b border-border bg-background\", className)}\n {...props}\n >\n {logos.map((logo, i) => {\n const depth = logo.depth ?? DEFAULT_DEPTH;\n const entry = tileEntryOffset(logo);\n const entryTransform = `translate(calc(-50% + ${entry.x}px), calc(-50% + ${entry.y}px)) scale(0.6)`;\n const restingTransform = \"translate(-50%, -50%)\";\n const parallaxTransform = reduceMotion\n ? \"translate(0px, 0px)\"\n : `translate(${offset.x * depth}px, ${offset.y * depth}px)`;\n\n return (\n <div\n key={logo.label}\n aria-hidden\n data-logo={logo.label}\n className=\"pointer-events-none absolute z-10 hidden transition-[transform,opacity] duration-700 ease-out md:block\"\n style={{\n left: `${logo.x}%`,\n top: `${logo.y}%`,\n transform: showResting ? restingTransform : entryTransform,\n opacity: showResting ? 1 : 0,\n transitionDelay: `${i * 90}ms`,\n }}\n >\n <div\n className=\"transition-transform duration-200 ease-out\"\n style={{ transform: parallaxTransform }}\n >\n <div\n className=\"flex h-16 w-16 items-center justify-center rounded-2xl border border-border bg-surface shadow-raised\"\n style={\n reduceMotion\n ? undefined\n : {\n animation: `hero-float ${FLOAT_DURATION}s ease-in-out infinite`,\n animationDelay: `-${i * FLOAT_STAGGER}s`,\n }\n }\n >\n {logo.icon}\n </div>\n </div>\n </div>\n );\n })}\n\n <div className={cn(heroContainer, \"relative z-20 pt-24 pb-20 text-center sm:pt-32 sm:pb-24\")}>\n <HeroEyebrow eyebrow={eyebrow} />\n <h1 className={cn(heroTitleType, \"mt-7 max-w-4xl text-5xl text-foreground sm:text-6xl lg:text-7xl\")}>\n {title}\n </h1>\n {description ? (\n <p className={cn(heroDescriptionBase, \"mx-auto mt-7 max-w-xl text-muted-foreground\")}>\n {description}\n </p>\n ) : null}\n {primaryAction || secondaryAction ? (\n <div className=\"mt-10 justify-center\">\n <HeroActions primaryAction={primaryAction} secondaryAction={secondaryAction} />\n </div>\n ) : null}\n {meta ? (\n <ul className=\"mt-14 flex flex-wrap items-center justify-center gap-x-9 gap-y-3\">\n {meta.map((m, i) => (\n <li\n key={m.label}\n className={cn(\n \"flex items-center gap-2 text-sm text-muted-foreground\",\n i > 0 && \"sm:border-l sm:border-border sm:pl-9\",\n )}\n >\n {m.icon ? <span className=\"text-foreground/35\">{m.icon}</span> : null}\n {m.label}\n </li>\n ))}\n </ul>\n ) : null}\n {media ? <div className=\"mt-16 w-full\">{media}</div> : null}\n </div>\n </section>\n );\n },\n);\nHeroParallax.displayName = \"HeroParallax\";\n"],"names":["DEFAULT_DEPTH","FLOAT_DURATION","FLOAT_STAGGER","setSectionRef","node","localRef","forwarded","tileEntryOffset","logo","HeroParallax","forwardRef","className","eyebrow","title","description","primaryAction","secondaryAction","meta","media","logos","background","id","props","ref","sectionRef","useRef","offset","setOffset","useState","entered","setEntered","reduceMotion","setReduceMotion","useEffect","mq","onChange","_a","raf","handleMouseMove","el","rect","handleMouseLeave","showResting","jsxs","cn","i","depth","entry","entryTransform","restingTransform","parallaxTransform","jsx","heroContainer","HeroEyebrow","heroTitleType","heroDescriptionBase","HeroActions","m"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),b=require("react"),s=require("../../../utils/cn.cjs"),r=require("../parts.cjs"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),b=require("react"),s=require("../../../utils/cn.cjs"),r=require("../parts.cjs"),i=b.forwardRef(({className:d,eyebrow:x,title:m,description:t,primaryAction:a,secondaryAction:n,media:c,meta:o,background:f,id:u,...g},p)=>e.jsx("section",{ref:p,id:u,className:s.cn("relative w-full border-b border-border bg-background",d),...g,children:e.jsxs("div",{className:s.cn(r.heroContainer,"items-start gap-14 pt-20 pb-20 sm:pt-28 sm:pb-28 lg:grid lg:grid-cols-[1.05fr_0.95fr] lg:gap-20"),children:[e.jsxs("div",{className:"max-w-xl",children:[e.jsx(r.HeroEyebrow,{eyebrow:x}),e.jsx("h1",{className:s.cn(r.heroTitleType,"mt-6 text-5xl text-foreground sm:text-6xl lg:text-7xl"),children:m}),t?e.jsx("p",{className:s.cn(r.heroDescriptionBase,"mt-7 max-w-md text-muted-foreground"),children:t}):null,a||n?e.jsx("div",{className:"mt-10",children:e.jsx(r.HeroActions,{primaryAction:a,secondaryAction:n})}):null,o?e.jsx("ul",{className:"mt-14 flex flex-wrap items-center gap-x-8 gap-y-3 border-t border-border pt-6",children:o.map(l=>e.jsxs("li",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[l.icon?e.jsx("span",{className:"text-foreground/35",children:l.icon}):null,l.label]},l.label))}):null]}),c?e.jsx("div",{className:"w-full self-center",children:c}):null]})}));i.displayName="HeroSplit";exports.HeroSplit=i;
|
|
2
2
|
//# sourceMappingURL=Split.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Split.cjs","sources":["../../../../../src/components/Hero/variants/Split.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport {
|
|
1
|
+
{"version":3,"file":"Split.cjs","sources":["../../../../../src/components/Hero/variants/Split.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport {\n HeroActions,\n HeroEyebrow,\n heroContainer,\n heroDescriptionBase,\n heroTitleType,\n} from \"../parts\";\nimport type { HeroProps } from \"../types\";\n\n/** Split — editorial grid: huge type left, media right, meta rule under. */\nexport const HeroSplit = forwardRef<HTMLElement, HeroProps>(\n (\n {\n className,\n eyebrow,\n title,\n description,\n primaryAction,\n secondaryAction,\n media,\n meta,\n background,\n id,\n ...props\n },\n ref,\n ) => (\n <section\n ref={ref}\n id={id}\n className={cn(\"relative w-full border-b border-border bg-background\", className)}\n {...props}\n >\n <div className={cn(\n heroContainer,\n \"items-start gap-14 pt-20 pb-20 sm:pt-28 sm:pb-28 lg:grid lg:grid-cols-[1.05fr_0.95fr] lg:gap-20\",\n )}>\n <div className=\"max-w-xl\">\n <HeroEyebrow eyebrow={eyebrow} />\n <h1 className={cn(heroTitleType, \"mt-6 text-5xl text-foreground sm:text-6xl lg:text-7xl\")}>\n {title}\n </h1>\n {description ? (\n <p className={cn(heroDescriptionBase, \"mt-7 max-w-md text-muted-foreground\")}>\n {description}\n </p>\n ) : null}\n {primaryAction || secondaryAction ? (\n <div className=\"mt-10\">\n <HeroActions primaryAction={primaryAction} secondaryAction={secondaryAction} />\n </div>\n ) : null}\n {meta ? (\n <ul className=\"mt-14 flex flex-wrap items-center gap-x-8 gap-y-3 border-t border-border pt-6\">\n {meta.map((m) => (\n <li key={m.label} className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n {m.icon ? <span className=\"text-foreground/35\">{m.icon}</span> : null}\n {m.label}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n {media ? <div className=\"w-full self-center\">{media}</div> : null}\n </div>\n </section>\n ),\n);\nHeroSplit.displayName = \"HeroSplit\";\n"],"names":["HeroSplit","forwardRef","className","eyebrow","title","description","primaryAction","secondaryAction","media","meta","background","id","props","ref","jsx","cn","jsxs","heroContainer","HeroEyebrow","heroTitleType","heroDescriptionBase","HeroActions","m"],"mappings":"qMAYaA,EAAYC,EAAAA,WACvB,CACE,CACE,UAAAC,EACA,QAAAC,EACA,MAAAC,EACA,YAAAC,EACA,cAAAC,EACA,gBAAAC,EACA,MAAAC,EACA,KAAAC,EACA,WAAAC,EACA,GAAAC,EACA,GAAGC,CAAA,EAELC,IAEAC,EAAAA,IAAC,UAAA,CACC,IAAAD,EACA,GAAAF,EACA,UAAWI,EAAAA,GAAG,uDAAwDb,CAAS,EAC9E,GAAGU,EAEJ,SAAAI,EAAAA,KAAC,OAAI,UAAWD,EAAAA,GACdE,EAAAA,cACA,iGAAA,EAEA,SAAA,CAAAD,EAAAA,KAAC,MAAA,CAAI,UAAU,WACb,SAAA,CAAAF,MAACI,EAAAA,aAAY,QAAAf,EAAkB,QAC9B,KAAA,CAAG,UAAWY,EAAAA,GAAGI,EAAAA,cAAe,uDAAuD,EACrF,SAAAf,EACH,EACCC,QACE,IAAA,CAAE,UAAWU,EAAAA,GAAGK,sBAAqB,qCAAqC,EACxE,SAAAf,CAAA,CACH,EACE,KACHC,GAAiBC,EAChBO,EAAAA,IAAC,MAAA,CAAI,UAAU,QACb,SAAAA,EAAAA,IAACO,EAAAA,YAAA,CAAY,cAAAf,EAA8B,gBAAAC,CAAA,CAAkC,CAAA,CAC/E,EACE,KACHE,EACCK,EAAAA,IAAC,KAAA,CAAG,UAAU,gFACX,SAAAL,EAAK,IAAKa,GACTN,EAAAA,KAAC,KAAA,CAAiB,UAAU,wDACzB,SAAA,CAAAM,EAAE,KAAOR,MAAC,OAAA,CAAK,UAAU,qBAAsB,SAAAQ,EAAE,KAAK,EAAU,KAChEA,EAAE,KAAA,CAAA,EAFIA,EAAE,KAGX,CACD,CAAA,CACH,EACE,IAAA,EACN,EACCd,EAAQM,EAAAA,IAAC,MAAA,CAAI,UAAU,qBAAsB,WAAM,EAAS,IAAA,CAAA,CAC/D,CAAA,CAAA,CAGN,EACAd,EAAU,YAAc"}
|