@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.
Files changed (105) hide show
  1. package/README.md +13 -8
  2. package/dist/cjs/components/Button.cjs +1 -1
  3. package/dist/cjs/components/Button.cjs.map +1 -1
  4. package/dist/cjs/components/CTA/CTA.cjs +1 -1
  5. package/dist/cjs/components/CTA/CTA.cjs.map +1 -1
  6. package/dist/cjs/components/CTA/parts.cjs +1 -1
  7. package/dist/cjs/components/CTA/parts.cjs.map +1 -1
  8. package/dist/cjs/components/CTA/variants/Panel.cjs +1 -1
  9. package/dist/cjs/components/CTA/variants/Panel.cjs.map +1 -1
  10. package/dist/cjs/components/CTA/variants/Surface.cjs +1 -1
  11. package/dist/cjs/components/CTA/variants/Surface.cjs.map +1 -1
  12. package/dist/cjs/components/Footer/Footer.cjs +1 -1
  13. package/dist/cjs/components/Footer/Footer.cjs.map +1 -1
  14. package/dist/cjs/components/Footer/parts.cjs +1 -1
  15. package/dist/cjs/components/Footer/parts.cjs.map +1 -1
  16. package/dist/cjs/components/Footer/variants/Columns.cjs +2 -0
  17. package/dist/cjs/components/Footer/variants/Columns.cjs.map +1 -0
  18. package/dist/cjs/components/Footer/variants/Editorial.cjs +1 -1
  19. package/dist/cjs/components/Footer/variants/Editorial.cjs.map +1 -1
  20. package/dist/cjs/components/Footer/variants/Minimal.cjs +1 -1
  21. package/dist/cjs/components/Footer/variants/Minimal.cjs.map +1 -1
  22. package/dist/cjs/components/Hero/parts.cjs +1 -1
  23. package/dist/cjs/components/Hero/parts.cjs.map +1 -1
  24. package/dist/cjs/components/Hero/variants/Centered.cjs +1 -1
  25. package/dist/cjs/components/Hero/variants/Centered.cjs.map +1 -1
  26. package/dist/cjs/components/Hero/variants/Parallax.cjs +1 -1
  27. package/dist/cjs/components/Hero/variants/Parallax.cjs.map +1 -1
  28. package/dist/cjs/components/Hero/variants/Split.cjs +1 -1
  29. package/dist/cjs/components/Hero/variants/Split.cjs.map +1 -1
  30. package/dist/cjs/components/Hero/variants/Statement.cjs +1 -1
  31. package/dist/cjs/components/Hero/variants/Statement.cjs.map +1 -1
  32. package/dist/cjs/components/LanguageSwitcher/parts.cjs +1 -1
  33. package/dist/cjs/components/LanguageSwitcher/parts.cjs.map +1 -1
  34. package/dist/cjs/components/MegaMenu/MegaMenu.cjs +1 -1
  35. package/dist/cjs/components/MegaMenu/MegaMenu.cjs.map +1 -1
  36. package/dist/cjs/components/Navbar/Navbar.cjs +1 -1
  37. package/dist/cjs/components/Navbar/Navbar.cjs.map +1 -1
  38. package/dist/cjs/components/Stats/Stats.cjs +1 -1
  39. package/dist/cjs/components/Stats/Stats.cjs.map +1 -1
  40. package/dist/cjs/components/Stats/variants/{Hairline.cjs → Divided.cjs} +2 -2
  41. package/dist/cjs/components/Stats/variants/Divided.cjs.map +1 -0
  42. package/dist/cjs/components/Stats/variants/{Editorial.cjs → Stacked.cjs} +2 -2
  43. package/dist/cjs/components/Stats/variants/Stacked.cjs.map +1 -0
  44. package/dist/cjs/utils/surface.cjs +2 -0
  45. package/dist/cjs/utils/surface.cjs.map +1 -0
  46. package/dist/es/components/Button.js +41 -31
  47. package/dist/es/components/Button.js.map +1 -1
  48. package/dist/es/components/CTA/CTA.js +5 -6
  49. package/dist/es/components/CTA/CTA.js.map +1 -1
  50. package/dist/es/components/CTA/parts.js +19 -14
  51. package/dist/es/components/CTA/parts.js.map +1 -1
  52. package/dist/es/components/CTA/variants/Panel.js +15 -17
  53. package/dist/es/components/CTA/variants/Panel.js.map +1 -1
  54. package/dist/es/components/CTA/variants/Surface.js +21 -11
  55. package/dist/es/components/CTA/variants/Surface.js.map +1 -1
  56. package/dist/es/components/Footer/Footer.js +5 -5
  57. package/dist/es/components/Footer/Footer.js.map +1 -1
  58. package/dist/es/components/Footer/parts.js +21 -20
  59. package/dist/es/components/Footer/parts.js.map +1 -1
  60. package/dist/es/components/Footer/variants/Columns.js +76 -0
  61. package/dist/es/components/Footer/variants/Columns.js.map +1 -0
  62. package/dist/es/components/Footer/variants/Editorial.js +68 -35
  63. package/dist/es/components/Footer/variants/Editorial.js.map +1 -1
  64. package/dist/es/components/Footer/variants/Minimal.js +50 -16
  65. package/dist/es/components/Footer/variants/Minimal.js.map +1 -1
  66. package/dist/es/components/Hero/parts.js +13 -11
  67. package/dist/es/components/Hero/parts.js.map +1 -1
  68. package/dist/es/components/Hero/variants/Centered.js +29 -17
  69. package/dist/es/components/Hero/variants/Centered.js.map +1 -1
  70. package/dist/es/components/Hero/variants/Parallax.js +23 -23
  71. package/dist/es/components/Hero/variants/Parallax.js.map +1 -1
  72. package/dist/es/components/Hero/variants/Split.js +35 -23
  73. package/dist/es/components/Hero/variants/Split.js.map +1 -1
  74. package/dist/es/components/Hero/variants/Statement.js +28 -23
  75. package/dist/es/components/Hero/variants/Statement.js.map +1 -1
  76. package/dist/es/components/LanguageSwitcher/parts.js +44 -44
  77. package/dist/es/components/LanguageSwitcher/parts.js.map +1 -1
  78. package/dist/es/components/MegaMenu/MegaMenu.js +131 -126
  79. package/dist/es/components/MegaMenu/MegaMenu.js.map +1 -1
  80. package/dist/es/components/Navbar/Navbar.js +110 -92
  81. package/dist/es/components/Navbar/Navbar.js.map +1 -1
  82. package/dist/es/components/Stats/Stats.js +8 -8
  83. package/dist/es/components/Stats/Stats.js.map +1 -1
  84. package/dist/es/components/Stats/variants/{Hairline.js → Divided.js} +13 -13
  85. package/dist/es/components/Stats/variants/Divided.js.map +1 -0
  86. package/dist/es/components/Stats/variants/{Editorial.js → Stacked.js} +12 -12
  87. package/dist/es/components/Stats/variants/Stacked.js.map +1 -0
  88. package/dist/es/utils/surface.js +16 -0
  89. package/dist/es/utils/surface.js.map +1 -0
  90. package/dist/index.d.ts +48 -9
  91. package/dist/styles.css +79 -98
  92. package/dist/theme.css +27 -0
  93. package/package.json +1 -1
  94. package/dist/cjs/components/CTA/variants/Inverse.cjs +0 -2
  95. package/dist/cjs/components/CTA/variants/Inverse.cjs.map +0 -1
  96. package/dist/cjs/components/Footer/variants/Classic.cjs +0 -2
  97. package/dist/cjs/components/Footer/variants/Classic.cjs.map +0 -1
  98. package/dist/cjs/components/Stats/variants/Editorial.cjs.map +0 -1
  99. package/dist/cjs/components/Stats/variants/Hairline.cjs.map +0 -1
  100. package/dist/es/components/CTA/variants/Inverse.js +0 -42
  101. package/dist/es/components/CTA/variants/Inverse.js.map +0 -1
  102. package/dist/es/components/Footer/variants/Classic.js +0 -43
  103. package/dist/es/components/Footer/variants/Classic.js.map +0 -1
  104. package/dist/es/components/Stats/variants/Editorial.js.map +0 -1
  105. package/dist/es/components/Stats/variants/Hairline.js.map +0 -1
@@ -1,9 +1,10 @@
1
1
  "use client";
2
- import { jsx as e, jsxs as t } from "react/jsx-runtime";
3
- import { useState as D } from "react";
4
- import { cn as n } from "../../utils/cn.js";
5
- import { X as P, Menu as T } from "../../icons.js";
6
- const f = "text-on-secondary", d = "text-foreground", C = {
2
+ import { jsx as e, jsxs as a } from "react/jsx-runtime";
3
+ import { useState as P } from "react";
4
+ import { cn as o } from "../../utils/cn.js";
5
+ import { X as T, Menu as C } from "../../icons.js";
6
+ import { emphasisSurfaceStyle as M } from "../../utils/surface.js";
7
+ const O = {
7
8
  classic: {
8
9
  shell: "border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75",
9
10
  bar: "mx-auto max-w-6xl px-5 sm:px-8",
@@ -11,8 +12,8 @@ const f = "text-on-secondary", d = "text-foreground", C = {
11
12
  link: "text-muted-foreground hover:text-foreground",
12
13
  mobilePanel: "border-t border-border bg-background",
13
14
  mobileLink: "text-muted-foreground hover:bg-surface hover:text-foreground",
14
- menuButton: `${d} hover:bg-surface`,
15
- brandText: d,
15
+ menuButton: "text-foreground hover:bg-surface",
16
+ brandText: "text-foreground",
16
17
  brandDot: "bg-foreground",
17
18
  desktopList: "hidden items-center gap-7 md:flex"
18
19
  },
@@ -23,117 +24,134 @@ const f = "text-on-secondary", d = "text-foreground", C = {
23
24
  link: "text-muted-foreground hover:text-foreground",
24
25
  mobilePanel: "mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface",
25
26
  mobileLink: "text-muted-foreground hover:bg-surface hover:text-foreground",
26
- menuButton: `${d} hover:bg-surface`,
27
- brandText: d,
27
+ menuButton: "text-foreground hover:bg-surface",
28
+ brandText: "text-foreground",
28
29
  brandDot: "bg-foreground",
29
30
  desktopList: "hidden items-center gap-7 md:flex"
30
- },
31
- inverse: {
32
- shell: "border-b border-white/10 bg-[#101010]/85 backdrop-blur-md",
33
- bar: "mx-auto max-w-6xl px-5 sm:px-8",
34
- header: "px-0",
35
- link: "text-on-secondary/60 hover:text-on-secondary",
36
- mobilePanel: "border-t border-white/10 bg-[#101010]",
37
- mobileLink: "text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary",
38
- menuButton: `${f} hover:bg-white/10`,
39
- brandText: f,
40
- brandDot: "bg-on-secondary",
41
- desktopList: "hidden items-center gap-7 md:flex"
42
31
  }
43
- }, $ = ({
32
+ }, _ = {
33
+ shell: "",
34
+ bar: "mx-auto max-w-6xl px-5 sm:px-8",
35
+ header: "px-0",
36
+ link: "text-current/70 hover:text-current",
37
+ mobilePanel: "border-t border-current/15",
38
+ mobileLink: "text-current/70 hover:bg-current/10 hover:text-current",
39
+ menuButton: "text-current hover:bg-current/10",
40
+ brandText: "text-current",
41
+ brandDot: "bg-current",
42
+ desktopList: "hidden items-center gap-7 md:flex"
43
+ }, z = ({
44
44
  className: g,
45
- variant: b = "classic",
45
+ variant: u = "classic",
46
46
  brand: s,
47
47
  logo: v,
48
- logoSrc: u,
48
+ logoSrc: b,
49
49
  logoAlt: N,
50
- logoClassName: k,
51
- brandHref: w = "#",
50
+ logoClassName: w,
51
+ brandHref: k = "#",
52
52
  links: x,
53
- actions: l,
53
+ actions: d,
54
54
  cta: i,
55
- languageSwitcher: c,
55
+ languageSwitcher: m,
56
56
  sticky: y = !0,
57
+ background: n,
57
58
  LinkComponent: L,
59
+ style: f,
58
60
  ...j
59
61
  }) => {
60
- const [a, h] = D(!1), m = L ?? "a", o = C[b], p = v ?? (u ? /* @__PURE__ */ e(
62
+ const [l, p] = P(!1), c = L ?? "a", t = n ? _ : O[u], B = !n && u === "floating", h = v ?? (b ? /* @__PURE__ */ e(
61
63
  "img",
62
64
  {
63
- src: u,
65
+ src: b,
64
66
  alt: N ?? (typeof s == "string" ? s : "Logo"),
65
- className: n("h-7 w-auto", k)
67
+ className: o("h-7 w-auto", w)
66
68
  }
67
- ) : null), B = p ? /* @__PURE__ */ e("span", { className: "flex items-center", children: p }) : /* @__PURE__ */ t("span", { className: n("flex items-center gap-2 font-display text-[17px] font-bold tracking-tight", o.brandText), children: [
68
- /* @__PURE__ */ e("span", { "aria-hidden": !0, className: n("inline-block h-2.5 w-2.5 rounded-sm", o.brandDot) }),
69
+ ) : null), D = h ? /* @__PURE__ */ e("span", { className: "flex items-center", children: h }) : /* @__PURE__ */ a("span", { className: o("flex items-center gap-2 font-display text-[17px] font-bold tracking-tight", t.brandText), children: [
70
+ /* @__PURE__ */ e("span", { "aria-hidden": !0, className: o("inline-block h-2.5 w-2.5 rounded-sm", t.brandDot) }),
69
71
  s
70
72
  ] });
71
- return /* @__PURE__ */ t("header", { className: n("w-full transition-colors duration-200", y && "sticky top-0 z-50", o.shell, o.header, g), ...j, children: [
72
- /* @__PURE__ */ t("nav", { className: n("flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200", o.bar), "aria-label": "Main navigation", children: [
73
- /* @__PURE__ */ e(m, { href: w, className: "shrink-0", children: B }),
74
- /* @__PURE__ */ e("ul", { className: o.desktopList, children: x.map((r) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
75
- m,
76
- {
77
- href: r.href,
78
- target: r.external ? "_blank" : void 0,
79
- rel: r.external ? "noopener noreferrer" : void 0,
80
- className: n("text-sm font-medium transition-colors duration-150", o.link),
81
- children: r.label
82
- }
83
- ) }, r.href)) }),
84
- /* @__PURE__ */ t("div", { className: "hidden items-center gap-3 md:flex", children: [
85
- c,
86
- l,
87
- i
88
- ] }),
89
- /* @__PURE__ */ e(
90
- "button",
91
- {
92
- type: "button",
93
- "aria-label": a ? "Close menu" : "Open menu",
94
- "aria-expanded": a,
95
- onClick: () => h((r) => !r),
96
- className: n(
97
- "inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md md:hidden",
98
- "transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
99
- o.menuButton
100
- ),
101
- children: a ? /* @__PURE__ */ e(P, { className: "h-5 w-5" }) : /* @__PURE__ */ e(T, { className: "h-5 w-5" })
102
- }
103
- )
104
- ] }),
105
- /* @__PURE__ */ e(
106
- "div",
107
- {
108
- className: n(
109
- "grid transition-[grid-template-rows,opacity] duration-200 md:hidden",
110
- a ? "grid-rows-[1fr] opacity-100" : "grid-rows-[0fr] opacity-0",
111
- o.mobilePanel
112
- ),
113
- children: /* @__PURE__ */ e("div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ t("ul", { className: n("flex flex-col py-4", b !== "floating" && "px-5"), children: [
114
- c ? /* @__PURE__ */ e("li", { className: "px-2 pb-4", children: c }) : null,
115
- x.map((r) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
116
- m,
73
+ return /* @__PURE__ */ a(
74
+ "header",
75
+ {
76
+ "data-emphasis": n ? "" : void 0,
77
+ style: n ? { ...M(n), ...f } : f,
78
+ className: o(
79
+ "w-full transition-colors duration-200",
80
+ y && "sticky top-0 z-50",
81
+ t.shell,
82
+ t.header,
83
+ g
84
+ ),
85
+ ...j,
86
+ children: [
87
+ /* @__PURE__ */ a("nav", { className: o("flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200", t.bar), "aria-label": "Main navigation", children: [
88
+ /* @__PURE__ */ e(c, { href: k, className: "shrink-0", children: D }),
89
+ /* @__PURE__ */ e("ul", { className: t.desktopList, children: x.map((r) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
90
+ c,
117
91
  {
118
92
  href: r.href,
119
93
  target: r.external ? "_blank" : void 0,
120
94
  rel: r.external ? "noopener noreferrer" : void 0,
121
- onClick: () => h(!1),
122
- className: n(
123
- "block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150",
124
- o.mobileLink
125
- ),
95
+ className: o("text-sm font-medium transition-colors duration-150", t.link),
126
96
  children: r.label
127
97
  }
128
- ) }, r.href)),
129
- i ? /* @__PURE__ */ e("li", { className: "mt-3 px-2 pb-2", children: i }) : l ? /* @__PURE__ */ e("li", { className: "mt-3 flex flex-wrap gap-3 px-2 pb-2", children: l }) : null
130
- ] }) })
131
- }
132
- )
133
- ] });
98
+ ) }, r.href)) }),
99
+ /* @__PURE__ */ a("div", { className: "hidden items-center gap-3 md:flex", children: [
100
+ m,
101
+ d,
102
+ i
103
+ ] }),
104
+ /* @__PURE__ */ e(
105
+ "button",
106
+ {
107
+ type: "button",
108
+ "aria-label": l ? "Close menu" : "Open menu",
109
+ "aria-expanded": l,
110
+ onClick: () => p((r) => !r),
111
+ className: o(
112
+ "inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md md:hidden",
113
+ "transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
114
+ t.menuButton
115
+ ),
116
+ children: l ? /* @__PURE__ */ e(T, { className: "h-5 w-5" }) : /* @__PURE__ */ e(C, { className: "h-5 w-5" })
117
+ }
118
+ )
119
+ ] }),
120
+ /* @__PURE__ */ e(
121
+ "div",
122
+ {
123
+ className: o(
124
+ "grid transition-[grid-template-rows,opacity] duration-200 md:hidden",
125
+ l ? "grid-rows-[1fr] opacity-100" : "grid-rows-[0fr] opacity-0",
126
+ t.mobilePanel,
127
+ n && "bg-transparent"
128
+ ),
129
+ children: /* @__PURE__ */ e("div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ a("ul", { className: o("flex flex-col py-4", !B && "px-5"), children: [
130
+ m ? /* @__PURE__ */ e("li", { className: "px-2 pb-4", children: m }) : null,
131
+ x.map((r) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
132
+ c,
133
+ {
134
+ href: r.href,
135
+ target: r.external ? "_blank" : void 0,
136
+ rel: r.external ? "noopener noreferrer" : void 0,
137
+ onClick: () => p(!1),
138
+ className: o(
139
+ "block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150",
140
+ t.mobileLink
141
+ ),
142
+ children: r.label
143
+ }
144
+ ) }, r.href)),
145
+ i ? /* @__PURE__ */ e("li", { className: "mt-3 px-2 pb-2", children: i }) : d ? /* @__PURE__ */ e("li", { className: "mt-3 flex flex-wrap gap-3 px-2 pb-2", children: d }) : null
146
+ ] }) })
147
+ }
148
+ )
149
+ ]
150
+ }
151
+ );
134
152
  };
135
- $.displayName = "Navbar";
153
+ z.displayName = "Navbar";
136
154
  export {
137
- $ as Navbar
155
+ z as Navbar
138
156
  };
139
157
  //# sourceMappingURL=Navbar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Navbar.js","sources":["../../../../src/components/Navbar/Navbar.tsx"],"sourcesContent":["\"use client\";\nimport { useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Menu, X } from \"../../icons\";\nimport type { NavbarProps, NavbarVariant } from \"./types\";\n\ninterface NavbarStyle {\n shell: string;\n bar: string;\n header: string;\n link: string;\n mobilePanel: string;\n mobileLink: string;\n menuButton: string;\n brandText: string;\n brandDot: string;\n desktopList: string;\n}\n\nconst inverse = \"text-on-secondary\";\nconst light = \"text-foreground\";\n\nconst styles: Record<NavbarVariant, NavbarStyle> = {\n classic: {\n shell: \"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n link: \"text-muted-foreground hover:text-foreground\",\n mobilePanel: \"border-t border-border bg-background\",\n mobileLink:\n \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n menuButton: `${light} hover:bg-surface`,\n brandText: light,\n brandDot: \"bg-foreground\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n floating: {\n shell: \"px-0\",\n bar: \"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70\",\n header: \"px-3 sm:px-6\",\n link: \"text-muted-foreground hover:text-foreground\",\n mobilePanel:\n \"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface\",\n mobileLink:\n \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n menuButton: `${light} hover:bg-surface`,\n brandText: light,\n brandDot: \"bg-foreground\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n inverse: {\n shell: \"border-b border-white/10 bg-[#101010]/85 backdrop-blur-md\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n link: \"text-on-secondary/60 hover:text-on-secondary\",\n mobilePanel: \"border-t border-white/10 bg-[#101010]\",\n mobileLink:\n \"text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary\",\n menuButton: `${inverse} hover:bg-white/10`,\n brandText: inverse,\n brandDot: \"bg-on-secondary\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n};\n\nexport const Navbar = ({\n className,\n variant = \"classic\",\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n brandHref = \"#\",\n links,\n actions,\n cta,\n languageSwitcher,\n sticky = true,\n LinkComponent,\n ...props\n}: NavbarProps) => {\n const [open, setOpen] = useState(false);\n const Link = LinkComponent ?? \"a\";\n const s = styles[variant];\n\n const logoNode =\n logo ??\n (logoSrc ? (\n <img\n src={logoSrc}\n alt={logoAlt ?? (typeof brand === \"string\" ? brand : \"Logo\")}\n className={cn(\"h-7 w-auto\", logoClassName)}\n />\n ) : null);\n\n const brandNode = logoNode ? (\n <span className=\"flex items-center\">{logoNode}</span>\n ) : (\n <span className={cn(\"flex items-center gap-2 font-display text-[17px] font-bold tracking-tight\", s.brandText)}>\n <span aria-hidden className={cn(\"inline-block h-2.5 w-2.5 rounded-sm\", s.brandDot)} />\n {brand}\n </span>\n );\n\n return (\n <header className={cn(\"w-full transition-colors duration-200\", sticky && \"sticky top-0 z-50\", s.shell, s.header, className)} {...props}>\n <nav className={cn(\"flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200\", s.bar)} aria-label=\"Main navigation\">\n <Link href={brandHref} className=\"shrink-0\">\n {brandNode}\n </Link>\n\n <ul className={s.desktopList}>\n {links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n className={cn(\"text-sm font-medium transition-colors duration-150\", s.link)}\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n\n <div className=\"hidden items-center gap-3 md:flex\">\n {languageSwitcher}\n {actions}\n {cta}\n </div>\n\n <button\n type=\"button\"\n aria-label={open ? \"Close menu\" : \"Open menu\"}\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n className={cn(\n \"inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md md:hidden\",\n \"transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n s.menuButton,\n )}\n >\n {open ? <X className=\"h-5 w-5\" /> : <Menu className=\"h-5 w-5\" />}\n </button>\n </nav>\n\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200 md:hidden\",\n open ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\",\n s.mobilePanel,\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <ul className={cn(\"flex flex-col py-4\", variant !== \"floating\" && \"px-5\")}>\n {languageSwitcher ? (\n <li className=\"px-2 pb-4\">{languageSwitcher}</li>\n ) : null}\n {links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n onClick={() => setOpen(false)}\n className={cn(\n \"block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n s.mobileLink,\n )}\n >\n {link.label}\n </Link>\n </li>\n ))}\n {cta ? (\n <li className=\"mt-3 px-2 pb-2\">{cta}</li>\n ) : actions ? (\n <li className=\"mt-3 flex flex-wrap gap-3 px-2 pb-2\">{actions}</li>\n ) : null}\n </ul>\n </div>\n </div>\n </header>\n );\n};\nNavbar.displayName = \"Navbar\";"],"names":["inverse","light","styles","Navbar","className","variant","brand","logo","logoSrc","logoAlt","logoClassName","brandHref","links","actions","cta","languageSwitcher","sticky","LinkComponent","props","open","setOpen","useState","Link","s","logoNode","jsx","cn","brandNode","jsxs","link","o","X","Menu"],"mappings":"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"}
1
+ {"version":3,"file":"Navbar.js","sources":["../../../../src/components/Navbar/Navbar.tsx"],"sourcesContent":["\"use client\";\nimport { useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Menu, X } from \"../../icons\";\nimport { emphasisSurfaceStyle } from \"../../utils/surface\";\nimport type { NavbarProps, NavbarVariant } from \"./types\";\n\ninterface NavbarStyle {\n shell: string;\n bar: string;\n header: string;\n link: string;\n mobilePanel: string;\n mobileLink: string;\n menuButton: string;\n brandText: string;\n brandDot: string;\n desktopList: string;\n}\n\nconst styles: Record<NavbarVariant, NavbarStyle> = {\n classic: {\n shell: \"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n link: \"text-muted-foreground hover:text-foreground\",\n mobilePanel: \"border-t border-border bg-background\",\n mobileLink:\n \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n menuButton: \"text-foreground hover:bg-surface\",\n brandText: \"text-foreground\",\n brandDot: \"bg-foreground\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n floating: {\n shell: \"px-0\",\n bar: \"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70\",\n header: \"px-3 sm:px-6\",\n link: \"text-muted-foreground hover:text-foreground\",\n mobilePanel:\n \"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface\",\n mobileLink:\n \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n menuButton: \"text-foreground hover:bg-surface\",\n brandText: \"text-foreground\",\n brandDot: \"bg-foreground\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n};\n\n/**\n * On an emphasis (custom-background) bar everything inherits the resolved\n * contrast color instead of the page's --color-foreground/--color-border tokens.\n */\nconst emphatic: NavbarStyle = {\n shell: \"\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n link: \"text-current/70 hover:text-current\",\n mobilePanel: \"border-t border-current/15\",\n mobileLink: \"text-current/70 hover:bg-current/10 hover:text-current\",\n menuButton: \"text-current hover:bg-current/10\",\n brandText: \"text-current\",\n brandDot: \"bg-current\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n};\n\nexport const Navbar = ({\n className,\n variant = \"classic\",\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n brandHref = \"#\",\n links,\n actions,\n cta,\n languageSwitcher,\n sticky = true,\n background,\n LinkComponent,\n style,\n ...props\n}: NavbarProps) => {\n const [open, setOpen] = useState(false);\n const Link = LinkComponent ?? \"a\";\n const s = background ? emphatic : styles[variant];\n const floating = !background && variant === \"floating\";\n\n const logoNode =\n logo ??\n (logoSrc ? (\n <img\n src={logoSrc}\n alt={logoAlt ?? (typeof brand === \"string\" ? brand : \"Logo\")}\n className={cn(\"h-7 w-auto\", logoClassName)}\n />\n ) : null);\n\n const brandNode = logoNode ? (\n <span className=\"flex items-center\">{logoNode}</span>\n ) : (\n <span className={cn(\"flex items-center gap-2 font-display text-[17px] font-bold tracking-tight\", s.brandText)}>\n <span aria-hidden className={cn(\"inline-block h-2.5 w-2.5 rounded-sm\", s.brandDot)} />\n {brand}\n </span>\n );\n\n return (\n <header\n data-emphasis={background ? \"\" : undefined}\n style={background ? { ...emphasisSurfaceStyle(background), ...style } : style}\n className={cn(\n \"w-full transition-colors duration-200\",\n sticky && \"sticky top-0 z-50\",\n s.shell,\n s.header,\n className,\n )}\n {...props}\n >\n <nav className={cn(\"flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200\", s.bar)} aria-label=\"Main navigation\">\n <Link href={brandHref} className=\"shrink-0\">\n {brandNode}\n </Link>\n\n <ul className={s.desktopList}>\n {links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n className={cn(\"text-sm font-medium transition-colors duration-150\", s.link)}\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n\n <div className=\"hidden items-center gap-3 md:flex\">\n {languageSwitcher}\n {actions}\n {cta}\n </div>\n\n <button\n type=\"button\"\n aria-label={open ? \"Close menu\" : \"Open menu\"}\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n className={cn(\n \"inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md md:hidden\",\n \"transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n s.menuButton,\n )}\n >\n {open ? <X className=\"h-5 w-5\" /> : <Menu className=\"h-5 w-5\" />}\n </button>\n </nav>\n\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200 md:hidden\",\n open ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\",\n s.mobilePanel,\n background && \"bg-transparent\",\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <ul className={cn(\"flex flex-col py-4\", !floating && \"px-5\")}>\n {languageSwitcher ? (\n <li className=\"px-2 pb-4\">{languageSwitcher}</li>\n ) : null}\n {links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n onClick={() => setOpen(false)}\n className={cn(\n \"block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n s.mobileLink,\n )}\n >\n {link.label}\n </Link>\n </li>\n ))}\n {cta ? (\n <li className=\"mt-3 px-2 pb-2\">{cta}</li>\n ) : actions ? (\n <li className=\"mt-3 flex flex-wrap gap-3 px-2 pb-2\">{actions}</li>\n ) : null}\n </ul>\n </div>\n </div>\n </header>\n );\n};\nNavbar.displayName = \"Navbar\";\n"],"names":["styles","emphatic","Navbar","className","variant","brand","logo","logoSrc","logoAlt","logoClassName","brandHref","links","actions","cta","languageSwitcher","sticky","background","LinkComponent","style","props","open","setOpen","useState","Link","s","floating","logoNode","jsx","cn","brandNode","jsxs","emphasisSurfaceStyle","link","o","X","Menu"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import { jsx as i } from "react/jsx-runtime";
2
- import { forwardRef as m } from "react";
3
- import { StatsEditorial as e } from "./variants/Editorial.js";
4
- import { StatsHairline as o } from "./variants/Hairline.js";
5
- import { StatsCells as l } from "./variants/Cells.js";
2
+ import { forwardRef as e } from "react";
3
+ import { StatsStacked as a } from "./variants/Stacked.js";
4
+ import { StatsDivided as d } from "./variants/Divided.js";
5
+ import { StatsCells as s } from "./variants/Cells.js";
6
6
  import { StatsTicker as f } from "./variants/Ticker.js";
7
- const s = m(
8
- ({ option: a = "editorial", ...t }, r) => a === "ticker" ? /* @__PURE__ */ i(f, { ref: r, ...t }) : a === "cells" ? /* @__PURE__ */ i(l, { ref: r, ...t }) : a === "hairline" ? /* @__PURE__ */ i(o, { ref: r, ...t }) : /* @__PURE__ */ i(e, { ref: r, ...t })
7
+ const o = e(
8
+ ({ option: m = "stacked", ...t }, r) => m === "ticker" ? /* @__PURE__ */ i(f, { ref: r, ...t }) : m === "cells" ? /* @__PURE__ */ i(s, { ref: r, ...t }) : m === "divided" ? /* @__PURE__ */ i(d, { ref: r, ...t }) : /* @__PURE__ */ i(a, { ref: r, ...t })
9
9
  );
10
- s.displayName = "Stats";
10
+ o.displayName = "Stats";
11
11
  export {
12
- s as Stats
12
+ o as Stats
13
13
  };
14
14
  //# sourceMappingURL=Stats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Stats.js","sources":["../../../../src/components/Stats/Stats.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { StatsProps } from \"./types\";\nimport { StatsEditorial } from \"./variants/Editorial\";\nimport { StatsHairline } from \"./variants/Hairline\";\nimport { StatsCells } from \"./variants/Cells\";\nimport { StatsTicker } from \"./variants/Ticker\";\n\nexport const Stats = forwardRef<HTMLDListElement, StatsProps>(\n ({ option = \"editorial\", ...props }, ref) => {\n if (option === \"ticker\") return <StatsTicker ref={ref} {...props} />;\n if (option === \"cells\") return <StatsCells ref={ref} {...props} />;\n if (option === \"hairline\") return <StatsHairline ref={ref} {...props} />;\n return <StatsEditorial ref={ref} {...props} />;\n },\n);\nStats.displayName = \"Stats\";"],"names":["Stats","forwardRef","option","props","ref","StatsTicker","StatsCells","StatsHairline","jsx","StatsEditorial"],"mappings":";;;;;;AAOO,MAAMA,IAAQC;AAAA,EACnB,CAAC,EAAE,QAAAC,IAAS,aAAa,GAAGC,EAAA,GAASC,MAC/BF,MAAW,6BAAkBG,GAAA,EAAY,KAAAD,GAAW,GAAGD,GAAO,IAC9DD,MAAW,4BAAiBI,GAAA,EAAW,KAAAF,GAAW,GAAGD,GAAO,IAC5DD,MAAW,+BAAoBK,GAAA,EAAc,KAAAH,GAAW,GAAGD,GAAO,IAC/D,gBAAAK,EAACC,GAAA,EAAe,KAAAL,GAAW,GAAGD,EAAA,CAAO;AAEhD;AACAH,EAAM,cAAc;"}
1
+ {"version":3,"file":"Stats.js","sources":["../../../../src/components/Stats/Stats.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { StatsProps } from \"./types\";\nimport { StatsStacked } from \"./variants/Stacked\";\nimport { StatsDivided } from \"./variants/Divided\";\nimport { StatsCells } from \"./variants/Cells\";\nimport { StatsTicker } from \"./variants/Ticker\";\n\nexport const Stats = forwardRef<HTMLDListElement, StatsProps>(\n ({ option = \"stacked\", ...props }, ref) => {\n if (option === \"ticker\") return <StatsTicker ref={ref} {...props} />;\n if (option === \"cells\") return <StatsCells ref={ref} {...props} />;\n if (option === \"divided\") return <StatsDivided ref={ref} {...props} />;\n return <StatsStacked ref={ref} {...props} />;\n },\n);\nStats.displayName = \"Stats\";\n"],"names":["Stats","forwardRef","option","props","ref","StatsTicker","StatsCells","StatsDivided","jsx","StatsStacked"],"mappings":";;;;;;AAOO,MAAMA,IAAQC;AAAA,EACnB,CAAC,EAAE,QAAAC,IAAS,WAAW,GAAGC,EAAA,GAASC,MAC7BF,MAAW,6BAAkBG,GAAA,EAAY,KAAAD,GAAW,GAAGD,GAAO,IAC9DD,MAAW,4BAAiBI,GAAA,EAAW,KAAAF,GAAW,GAAGD,GAAO,IAC5DD,MAAW,8BAAmBK,GAAA,EAAa,KAAAH,GAAW,GAAGD,GAAO,IAC7D,gBAAAK,EAACC,GAAA,EAAa,KAAAL,GAAW,GAAGD,EAAA,CAAO;AAE9C;AACAH,EAAM,cAAc;"}
@@ -1,35 +1,35 @@
1
- import { jsx as l, jsxs as a } from "react/jsx-runtime";
1
+ import { jsx as l, jsxs as d } from "react/jsx-runtime";
2
2
  import { forwardRef as c } from "react";
3
- import { cn as d } from "../../../utils/cn.js";
4
- import { suffixBase as n, valueBase as o, DeltaMark as x, gridDivider as f, gridCols as p } from "../parts.js";
3
+ import { cn as a } from "../../../utils/cn.js";
4
+ import { suffixBase as o, valueBase as x, DeltaMark as n, gridDivider as f, gridCols as p } from "../parts.js";
5
5
  const u = c(
6
6
  ({ className: i, stats: m, columns: r = 4, ...s }, t) => /* @__PURE__ */ l(
7
7
  "dl",
8
8
  {
9
9
  ref: t,
10
- className: d("grid grid-cols-1 gap-y-10", p[r], f[r], i),
10
+ className: a("grid grid-cols-1 gap-y-10", p[r], f[r], i),
11
11
  ...s,
12
- children: m.map((e) => /* @__PURE__ */ a(
12
+ children: m.map((e) => /* @__PURE__ */ d(
13
13
  "div",
14
14
  {
15
15
  className: "flex flex-col items-center gap-2.5 border-border text-center sm:px-6",
16
16
  children: [
17
- /* @__PURE__ */ a(
17
+ /* @__PURE__ */ d(
18
18
  "dd",
19
19
  {
20
- className: d(
21
- o,
20
+ className: a(
21
+ x,
22
22
  "text-4xl sm:text-5xl",
23
23
  e.accent ? "text-primary" : void 0
24
24
  ),
25
25
  children: [
26
26
  e.value,
27
- e.suffix ? /* @__PURE__ */ l("span", { className: n, children: e.suffix }) : null
27
+ e.suffix ? /* @__PURE__ */ l("span", { className: o, children: e.suffix }) : null
28
28
  ]
29
29
  }
30
30
  ),
31
31
  /* @__PURE__ */ l("dt", { className: "text-sm leading-5 text-muted-foreground", children: e.label }),
32
- typeof e.delta == "number" ? /* @__PURE__ */ l(x, { delta: e.delta, className: "mt-0.5" }) : null,
32
+ typeof e.delta == "number" ? /* @__PURE__ */ l(n, { delta: e.delta, className: "mt-0.5" }) : null,
33
33
  e.sub ? /* @__PURE__ */ l("p", { className: "mt-1 max-w-[22ch] text-[13px] leading-5 text-muted-foreground", children: e.sub }) : null
34
34
  ]
35
35
  },
@@ -38,8 +38,8 @@ const u = c(
38
38
  }
39
39
  )
40
40
  );
41
- u.displayName = "StatsHairline";
41
+ u.displayName = "StatsDivided";
42
42
  export {
43
- u as StatsHairline
43
+ u as StatsDivided
44
44
  };
45
- //# sourceMappingURL=Hairline.js.map
45
+ //# sourceMappingURL=Divided.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Divided.js","sources":["../../../../../src/components/Stats/variants/Divided.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { valueBase, suffixBase, gridCols, gridDivider, DeltaMark } from \"../parts\";\nimport type { Stat } from \"../types\";\n\ninterface DividedProps extends HTMLAttributes<HTMLDListElement> {\n stats: Stat[];\n columns?: 2 | 3 | 4;\n}\n\n/** divided — centered numerals in a symmetric run, divided by true vertical hairlines. */\nexport const StatsDivided = forwardRef<HTMLDListElement, DividedProps>(\n ({ className, stats, columns = 4, ...props }, ref) => (\n <dl\n ref={ref}\n className={cn(\"grid grid-cols-1 gap-y-10\", gridCols[columns], gridDivider[columns], className)}\n {...props}\n >\n {stats.map((stat) => (\n <div\n key={stat.label}\n className=\"flex flex-col items-center gap-2.5 border-border text-center sm:px-6\"\n >\n <dd\n className={cn(\n valueBase,\n \"text-4xl sm:text-5xl\",\n stat.accent ? \"text-primary\" : undefined,\n )}\n >\n {stat.value}\n {stat.suffix ? <span className={suffixBase}>{stat.suffix}</span> : null}\n </dd>\n <dt className=\"text-sm leading-5 text-muted-foreground\">{stat.label}</dt>\n {typeof stat.delta === \"number\" ? (\n <DeltaMark delta={stat.delta} className=\"mt-0.5\" />\n ) : null}\n {stat.sub ? (\n <p className=\"mt-1 max-w-[22ch] text-[13px] leading-5 text-muted-foreground\">\n {stat.sub}\n </p>\n ) : null}\n </div>\n ))}\n </dl>\n ),\n);\nStatsDivided.displayName = \"StatsDivided\";\n"],"names":["StatsDivided","forwardRef","className","stats","columns","props","ref","jsx","cn","gridCols","gridDivider","stat","jsxs","valueBase","suffixBase","DeltaMark"],"mappings":";;;;AAWO,MAAMA,IAAeC;AAAA,EAC1B,CAAC,EAAE,WAAAC,GAAW,OAAAC,GAAO,SAAAC,IAAU,GAAG,GAAGC,EAAA,GAASC,MAC5C,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAWE,EAAG,6BAA6BC,EAASL,CAAO,GAAGM,EAAYN,CAAO,GAAGF,CAAS;AAAA,MAC5F,GAAGG;AAAA,MAEH,UAAAF,EAAM,IAAI,CAACQ,MACV,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAU;AAAA,UAEV,UAAA;AAAA,YAAA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWJ;AAAA,kBACTK;AAAA,kBACA;AAAA,kBACAF,EAAK,SAAS,iBAAiB;AAAA,gBAAA;AAAA,gBAGhC,UAAA;AAAA,kBAAAA,EAAK;AAAA,kBACLA,EAAK,SAAS,gBAAAJ,EAAC,QAAA,EAAK,WAAWO,GAAa,UAAAH,EAAK,QAAO,IAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAErE,gBAAAJ,EAAC,MAAA,EAAG,WAAU,2CAA2C,YAAK,OAAM;AAAA,YACnE,OAAOI,EAAK,SAAU,WACrB,gBAAAJ,EAACQ,GAAA,EAAU,OAAOJ,EAAK,OAAO,WAAU,SAAA,CAAS,IAC/C;AAAA,YACHA,EAAK,MACJ,gBAAAJ,EAAC,KAAA,EAAE,WAAU,iEACV,UAAAI,EAAK,KACR,IACE;AAAA,UAAA;AAAA,QAAA;AAAA,QArBCA,EAAK;AAAA,MAAA,CAuBb;AAAA,IAAA;AAAA,EAAA;AAGP;AACAX,EAAa,cAAc;"}
@@ -1,40 +1,40 @@
1
1
  import { jsx as l, jsxs as r } from "react/jsx-runtime";
2
2
  import { forwardRef as n } from "react";
3
3
  import { cn as a } from "../../../utils/cn.js";
4
- import { suffixBase as t, valueBase as x, DeltaMark as c, gridCols as p } from "../parts.js";
4
+ import { suffixBase as c, valueBase as t, DeltaMark as x, gridCols as p } from "../parts.js";
5
5
  const f = n(
6
- ({ className: d, stats: i, columns: m = 4, ...o }, s) => /* @__PURE__ */ l(
6
+ ({ className: d, stats: m, columns: i = 4, ...s }, o) => /* @__PURE__ */ l(
7
7
  "dl",
8
8
  {
9
- ref: s,
10
- className: a("grid grid-cols-1 gap-x-10 gap-y-10", p[m], d),
11
- ...o,
12
- children: i.map((e) => /* @__PURE__ */ r("div", { className: "border-t border-border pt-5", children: [
9
+ ref: o,
10
+ className: a("grid grid-cols-1 gap-x-10 gap-y-10", p[i], d),
11
+ ...s,
12
+ children: m.map((e) => /* @__PURE__ */ r("div", { className: "border-t border-border pt-5", children: [
13
13
  /* @__PURE__ */ l("dt", { className: "text-sm leading-5 text-muted-foreground", children: e.label }),
14
14
  /* @__PURE__ */ r(
15
15
  "dd",
16
16
  {
17
17
  className: a(
18
- x,
18
+ t,
19
19
  "mt-3 text-5xl sm:text-6xl",
20
20
  e.accent ? "text-primary" : void 0
21
21
  ),
22
22
  children: [
23
23
  e.value,
24
- e.suffix ? /* @__PURE__ */ l("span", { className: t, children: e.suffix }) : null
24
+ e.suffix ? /* @__PURE__ */ l("span", { className: c, children: e.suffix }) : null
25
25
  ]
26
26
  }
27
27
  ),
28
28
  typeof e.delta == "number" || e.sub ? /* @__PURE__ */ r("div", { className: "mt-4 flex flex-wrap items-baseline gap-x-3 gap-y-1", children: [
29
- typeof e.delta == "number" ? /* @__PURE__ */ l(c, { delta: e.delta }) : null,
29
+ typeof e.delta == "number" ? /* @__PURE__ */ l(x, { delta: e.delta }) : null,
30
30
  e.sub ? /* @__PURE__ */ l("p", { className: "text-[13px] leading-5 text-muted-foreground", children: e.sub }) : null
31
31
  ] }) : null
32
32
  ] }, e.label))
33
33
  }
34
34
  )
35
35
  );
36
- f.displayName = "StatsEditorial";
36
+ f.displayName = "StatsStacked";
37
37
  export {
38
- f as StatsEditorial
38
+ f as StatsStacked
39
39
  };
40
- //# sourceMappingURL=Editorial.js.map
40
+ //# sourceMappingURL=Stacked.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stacked.js","sources":["../../../../../src/components/Stats/variants/Stacked.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { valueBase, suffixBase, gridCols, DeltaMark } from \"../parts\";\nimport type { Stat } from \"../types\";\n\ninterface StackedProps extends HTMLAttributes<HTMLDListElement> {\n stats: Stat[];\n columns?: 2 | 3 | 4;\n}\n\n/** stacked — a ruled ledger: label on the rule, oversized numeral, typed meta. */\nexport const StatsStacked = forwardRef<HTMLDListElement, StackedProps>(\n ({ className, stats, columns = 4, ...props }, ref) => (\n <dl\n ref={ref}\n className={cn(\"grid grid-cols-1 gap-x-10 gap-y-10\", gridCols[columns], className)}\n {...props}\n >\n {stats.map((stat) => (\n <div key={stat.label} className=\"border-t border-border pt-5\">\n <dt className=\"text-sm leading-5 text-muted-foreground\">{stat.label}</dt>\n <dd\n className={cn(\n valueBase,\n \"mt-3 text-5xl sm:text-6xl\",\n stat.accent ? \"text-primary\" : undefined,\n )}\n >\n {stat.value}\n {stat.suffix ? <span className={suffixBase}>{stat.suffix}</span> : null}\n </dd>\n {typeof stat.delta === \"number\" || stat.sub ? (\n <div className=\"mt-4 flex flex-wrap items-baseline gap-x-3 gap-y-1\">\n {typeof stat.delta === \"number\" ? <DeltaMark delta={stat.delta} /> : null}\n {stat.sub ? (\n <p className=\"text-[13px] leading-5 text-muted-foreground\">{stat.sub}</p>\n ) : null}\n </div>\n ) : null}\n </div>\n ))}\n </dl>\n ),\n);\nStatsStacked.displayName = \"StatsStacked\";\n"],"names":["StatsStacked","forwardRef","className","stats","columns","props","ref","jsx","cn","gridCols","stat","jsxs","valueBase","suffixBase","DeltaMark"],"mappings":";;;;AAWO,MAAMA,IAAeC;AAAA,EAC1B,CAAC,EAAE,WAAAC,GAAW,OAAAC,GAAO,SAAAC,IAAU,GAAG,GAAGC,EAAA,GAASC,MAC5C,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAWE,EAAG,sCAAsCC,EAASL,CAAO,GAAGF,CAAS;AAAA,MAC/E,GAAGG;AAAA,MAEH,YAAM,IAAI,CAACK,MACV,gBAAAC,EAAC,OAAA,EAAqB,WAAU,+BAC9B,UAAA;AAAA,QAAA,gBAAAJ,EAAC,MAAA,EAAG,WAAU,2CAA2C,UAAAG,EAAK,OAAM;AAAA,QACpE,gBAAAC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWH;AAAA,cACTI;AAAA,cACA;AAAA,cACAF,EAAK,SAAS,iBAAiB;AAAA,YAAA;AAAA,YAGhC,UAAA;AAAA,cAAAA,EAAK;AAAA,cACLA,EAAK,SAAS,gBAAAH,EAAC,QAAA,EAAK,WAAWM,GAAa,UAAAH,EAAK,QAAO,IAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAEpE,OAAOA,EAAK,SAAU,YAAYA,EAAK,MACtC,gBAAAC,EAAC,OAAA,EAAI,WAAU,sDACZ,UAAA;AAAA,UAAA,OAAOD,EAAK,SAAU,WAAW,gBAAAH,EAACO,KAAU,OAAOJ,EAAK,OAAO,IAAK;AAAA,UACpEA,EAAK,MACJ,gBAAAH,EAAC,KAAA,EAAE,WAAU,+CAA+C,UAAAG,EAAK,KAAI,IACnE;AAAA,QAAA,EAAA,CACN,IACE;AAAA,MAAA,EAAA,GAnBIA,EAAK,KAoBf,CACD;AAAA,IAAA;AAAA,EAAA;AAGP;AACAV,EAAa,cAAc;"}
@@ -0,0 +1,16 @@
1
+ const o = "radial-gradient(120% 160% at 0% 0%, rgb(var(--color-primary)), rgb(var(--color-primary-hover)) 55%, rgb(var(--color-primary) / 0.85))";
2
+ function a(r) {
3
+ return r ? {
4
+ "--lc-bg": r,
5
+ backgroundColor: "var(--lc-bg)",
6
+ color: "contrast-color(var(--lc-bg))"
7
+ } : {
8
+ background: o,
9
+ color: "contrast-color(rgb(var(--color-primary)))"
10
+ };
11
+ }
12
+ export {
13
+ o as emphasisGradient,
14
+ a as emphasisSurfaceStyle
15
+ };
16
+ //# sourceMappingURL=surface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface.js","sources":["../../../src/utils/surface.ts"],"sourcesContent":["import type { CSSProperties } from \"react\";\n\n/**\n * Default brand fill for \"emphasis\" (bold) sections. Defined once so every\n * emphasis surface — CTA panels, Hero statements, and any future band — paints\n * the exact same gradient and reads as one design language.\n */\nexport const emphasisGradient =\n \"radial-gradient(120% 160% at 0% 0%, rgb(var(--color-primary)), rgb(var(--color-primary-hover)) 55%, rgb(var(--color-primary) / 0.85))\";\n\n/**\n * Inline style for an emphasis surface.\n *\n * - Without a `background`, the surface is painted with the brand gradient and\n * the text color is derived from `--color-primary` via CSS `contrast-color()`.\n * - With a `background` (any CSS color), it binds `--lc-bg` so the background\n * and its text color share one source; `contrast-color(var(--lc-bg))` picks\n * white/black and re-evaluates automatically when the value changes.\n *\n * This is the CSS-only contrast path mandated by AGENTS.md — no JS luminance\n * helpers.\n */\nexport function emphasisSurfaceStyle(background?: string): CSSProperties {\n if (background) {\n return {\n \"--lc-bg\": background,\n backgroundColor: \"var(--lc-bg)\",\n color: \"contrast-color(var(--lc-bg))\",\n } as CSSProperties;\n }\n\n return {\n background: emphasisGradient,\n color: \"contrast-color(rgb(var(--color-primary)))\",\n };\n}\n"],"names":["emphasisGradient","emphasisSurfaceStyle","background"],"mappings":"AAOO,MAAMA,IACX;AAcK,SAASC,EAAqBC,GAAoC;AACvE,SAAIA,IACK;AAAA,IACL,WAAWA;AAAA,IACX,iBAAiB;AAAA,IACjB,OAAO;AAAA,EAAA,IAIJ;AAAA,IACL,YAAYF;AAAA,IACZ,OAAO;AAAA,EAAA;AAEX;"}