@mieweb/ui 0.10.0-dev.23 → 0.10.0-dev.25

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 (147) hide show
  1. package/dist/brands/bluehive.cjs +3 -3
  2. package/dist/brands/bluehive.css +3 -0
  3. package/dist/brands/bluehive.js +1 -1
  4. package/dist/brands/index.cjs +9 -9
  5. package/dist/brands/index.js +3 -3
  6. package/dist/{chunk-YQDA366U.js → chunk-33DEVA3P.js} +2 -2
  7. package/dist/{chunk-YQDA366U.js.map → chunk-33DEVA3P.js.map} +1 -1
  8. package/dist/{chunk-WNJRS7Y7.cjs → chunk-3ZWCIPFT.cjs} +4 -2
  9. package/dist/chunk-3ZWCIPFT.cjs.map +1 -0
  10. package/dist/{chunk-J5CSLNCN.cjs → chunk-6VFDHJSO.cjs} +2 -2
  11. package/dist/{chunk-J5CSLNCN.cjs.map → chunk-6VFDHJSO.cjs.map} +1 -1
  12. package/dist/{chunk-ZTW4KODY.js → chunk-6ZPTZTKN.js} +3 -3
  13. package/dist/{chunk-ZTW4KODY.js.map → chunk-6ZPTZTKN.js.map} +1 -1
  14. package/dist/{chunk-SQ2D7AON.cjs → chunk-AAYXCZMV.cjs} +6 -6
  15. package/dist/{chunk-SQ2D7AON.cjs.map → chunk-AAYXCZMV.cjs.map} +1 -1
  16. package/dist/{chunk-WCDJFMZO.cjs → chunk-ADW7ZYCY.cjs} +1235 -495
  17. package/dist/chunk-ADW7ZYCY.cjs.map +1 -0
  18. package/dist/{chunk-2G75X6TS.cjs → chunk-AHHFFXJR.cjs} +3 -3
  19. package/dist/{chunk-2G75X6TS.cjs.map → chunk-AHHFFXJR.cjs.map} +1 -1
  20. package/dist/{chunk-HQ4CGVWX.cjs → chunk-B2X732V3.cjs} +7 -7
  21. package/dist/{chunk-HQ4CGVWX.cjs.map → chunk-B2X732V3.cjs.map} +1 -1
  22. package/dist/{chunk-UAMXCMST.cjs → chunk-CFI3TQMA.cjs} +3 -3
  23. package/dist/{chunk-UAMXCMST.cjs.map → chunk-CFI3TQMA.cjs.map} +1 -1
  24. package/dist/{chunk-2ABWFQQH.js → chunk-CRS2CQWM.js} +4 -4
  25. package/dist/{chunk-2ABWFQQH.js.map → chunk-CRS2CQWM.js.map} +1 -1
  26. package/dist/{chunk-MZNCLXXU.js → chunk-D22GE27K.js} +3 -3
  27. package/dist/{chunk-MZNCLXXU.js.map → chunk-D22GE27K.js.map} +1 -1
  28. package/dist/{chunk-IH55BEB3.js → chunk-DZFGTWYF.js} +6 -6
  29. package/dist/{chunk-IH55BEB3.js.map → chunk-DZFGTWYF.js.map} +1 -1
  30. package/dist/{chunk-TF7YWJHU.js → chunk-E2PBPQGS.js} +3 -3
  31. package/dist/{chunk-TF7YWJHU.js.map → chunk-E2PBPQGS.js.map} +1 -1
  32. package/dist/chunk-FBCDYTWM.js +385 -0
  33. package/dist/chunk-FBCDYTWM.js.map +1 -0
  34. package/dist/{chunk-R2O72G6Z.cjs → chunk-HC3NAN55.cjs} +7 -7
  35. package/dist/{chunk-R2O72G6Z.cjs.map → chunk-HC3NAN55.cjs.map} +1 -1
  36. package/dist/{chunk-DSB4DKWG.js → chunk-K34DXMLZ.js} +2 -2
  37. package/dist/{chunk-DSB4DKWG.js.map → chunk-K34DXMLZ.js.map} +1 -1
  38. package/dist/{chunk-Z5V7SAZ4.js → chunk-KFEN2SRZ.js} +3 -3
  39. package/dist/{chunk-Z5V7SAZ4.js.map → chunk-KFEN2SRZ.js.map} +1 -1
  40. package/dist/{chunk-MQPG3KVK.cjs → chunk-KGKBZN3T.cjs} +2 -2
  41. package/dist/{chunk-MQPG3KVK.cjs.map → chunk-KGKBZN3T.cjs.map} +1 -1
  42. package/dist/{chunk-G45FBKKV.js → chunk-P4VGVJVI.js} +4 -4
  43. package/dist/{chunk-G45FBKKV.js.map → chunk-P4VGVJVI.js.map} +1 -1
  44. package/dist/{chunk-3T7QGLNB.js → chunk-PJEL5ZZV.js} +4 -2
  45. package/dist/chunk-PJEL5ZZV.js.map +1 -0
  46. package/dist/{chunk-LJZKEMAH.cjs → chunk-R5Z7AOVU.cjs} +10 -10
  47. package/dist/{chunk-LJZKEMAH.cjs.map → chunk-R5Z7AOVU.cjs.map} +1 -1
  48. package/dist/{chunk-RJ6NTJHC.js → chunk-SRMTRD7F.js} +3 -3
  49. package/dist/{chunk-RJ6NTJHC.js.map → chunk-SRMTRD7F.js.map} +1 -1
  50. package/dist/{chunk-KHSFJTEX.js → chunk-T4JYUICS.js} +1177 -444
  51. package/dist/chunk-T4JYUICS.js.map +1 -0
  52. package/dist/{chunk-NJ6MY6V5.js → chunk-T5BBZQ66.js} +3 -3
  53. package/dist/{chunk-NJ6MY6V5.js.map → chunk-T5BBZQ66.js.map} +1 -1
  54. package/dist/{chunk-VYPPQPSZ.cjs → chunk-TJCX4OML.cjs} +3 -3
  55. package/dist/{chunk-VYPPQPSZ.cjs.map → chunk-TJCX4OML.cjs.map} +1 -1
  56. package/dist/{chunk-TAXD5ADA.cjs → chunk-UEDTZYGI.cjs} +3 -3
  57. package/dist/{chunk-TAXD5ADA.cjs.map → chunk-UEDTZYGI.cjs.map} +1 -1
  58. package/dist/{chunk-UQ3VVR6A.cjs → chunk-UPWIJC6I.cjs} +3 -3
  59. package/dist/{chunk-UQ3VVR6A.cjs.map → chunk-UPWIJC6I.cjs.map} +1 -1
  60. package/dist/{chunk-QNDP6PE5.cjs → chunk-VCCGR4J3.cjs} +92 -3
  61. package/dist/chunk-VCCGR4J3.cjs.map +1 -0
  62. package/dist/{chunk-S7WCHDBO.js → chunk-VCI2Y7ST.js} +3 -3
  63. package/dist/{chunk-S7WCHDBO.js.map → chunk-VCI2Y7ST.js.map} +1 -1
  64. package/dist/{chunk-Z4JR23IB.cjs → chunk-VOQJHSXN.cjs} +9 -9
  65. package/dist/{chunk-Z4JR23IB.cjs.map → chunk-VOQJHSXN.cjs.map} +1 -1
  66. package/dist/{chunk-EK3BCET6.js → chunk-WFVE36PO.js} +92 -3
  67. package/dist/chunk-WFVE36PO.js.map +1 -0
  68. package/dist/chunk-XI74P5F2.cjs +424 -0
  69. package/dist/chunk-XI74P5F2.cjs.map +1 -0
  70. package/dist/components/BoardView/index.d.cts +2 -90
  71. package/dist/components/BoardView/index.d.ts +2 -90
  72. package/dist/components/CalendarView/index.d.cts +1 -1
  73. package/dist/components/CalendarView/index.d.ts +1 -1
  74. package/dist/components/CountryCodeDropdown/index.cjs +5 -5
  75. package/dist/components/CountryCodeDropdown/index.js +2 -2
  76. package/dist/components/Dropdown/index.cjs +9 -9
  77. package/dist/components/Dropdown/index.js +2 -2
  78. package/dist/components/GanttView/index.d.cts +1 -1
  79. package/dist/components/GanttView/index.d.ts +1 -1
  80. package/dist/components/GlossaryTooltip/index.cjs +3 -3
  81. package/dist/components/GlossaryTooltip/index.js +2 -2
  82. package/dist/components/Markdown/index.cjs +15 -15
  83. package/dist/components/Markdown/index.js +3 -3
  84. package/dist/components/MediaEditor/index.cjs +10 -10
  85. package/dist/components/MediaEditor/index.js +5 -5
  86. package/dist/components/RadialExplorer/index.cjs +1 -1
  87. package/dist/components/RadialExplorer/index.js +1 -1
  88. package/dist/components/RichTextEditor/index.cjs +6 -6
  89. package/dist/components/RichTextEditor/index.js +3 -3
  90. package/dist/components/Select/index.cjs +4 -4
  91. package/dist/components/Select/index.js +2 -2
  92. package/dist/components/SourceTip/index.cjs +3 -3
  93. package/dist/components/SourceTip/index.js +2 -2
  94. package/dist/components/SuperChat/index.cjs +11 -11
  95. package/dist/components/SuperChat/index.js +4 -4
  96. package/dist/components/SuperChat/plugins/index.cjs +5 -5
  97. package/dist/components/SuperChat/plugins/index.js +4 -4
  98. package/dist/components/ViewSet/index.d.cts +1 -101
  99. package/dist/components/ViewSet/index.d.ts +1 -101
  100. package/dist/components/ViewSwitcher/index.d.cts +4 -57
  101. package/dist/components/ViewSwitcher/index.d.ts +4 -57
  102. package/dist/datavis.cjs +1 -1
  103. package/dist/datavis.js +1 -1
  104. package/dist/deck.cjs +3360 -0
  105. package/dist/deck.cjs.map +1 -0
  106. package/dist/deck.d.cts +712 -0
  107. package/dist/deck.d.ts +712 -0
  108. package/dist/deck.js +3316 -0
  109. package/dist/deck.js.map +1 -0
  110. package/dist/esheet.cjs +10 -10
  111. package/dist/esheet.js +7 -7
  112. package/dist/hooks/index.cjs +15 -15
  113. package/dist/hooks/index.js +3 -3
  114. package/dist/icons-wBacj6BW.d.cts +142 -0
  115. package/dist/icons-wBacj6BW.d.ts +142 -0
  116. package/dist/index-DoYYWsNc.d.cts +127 -0
  117. package/dist/index-DoYYWsNc.d.ts +127 -0
  118. package/dist/index.cjs +604 -551
  119. package/dist/index.cjs.map +1 -1
  120. package/dist/index.d.cts +313 -4
  121. package/dist/index.d.ts +313 -4
  122. package/dist/index.js +60 -59
  123. package/dist/index.js.map +1 -1
  124. package/dist/maps.cjs +160 -0
  125. package/dist/maps.cjs.map +1 -0
  126. package/dist/maps.d.cts +42 -0
  127. package/dist/maps.d.ts +42 -0
  128. package/dist/maps.js +138 -0
  129. package/dist/maps.js.map +1 -0
  130. package/dist/styles/effects.css +100 -0
  131. package/dist/styles/init.css +3 -0
  132. package/dist/styles.css +1 -1
  133. package/dist/tailwind-preset.cjs +4 -4
  134. package/dist/tailwind-preset.js +1 -1
  135. package/dist/templates.cjs +82 -29
  136. package/dist/templates.d.cts +316 -142
  137. package/dist/templates.d.ts +316 -142
  138. package/dist/templates.js +2 -1
  139. package/dist/{types-C3HQe74F.d.cts → types-DsdZvEI1.d.cts} +7 -1
  140. package/dist/{types-C3HQe74F.d.ts → types-DsdZvEI1.d.ts} +7 -1
  141. package/package.json +27 -1
  142. package/dist/chunk-3T7QGLNB.js.map +0 -1
  143. package/dist/chunk-EK3BCET6.js.map +0 -1
  144. package/dist/chunk-KHSFJTEX.js.map +0 -1
  145. package/dist/chunk-QNDP6PE5.cjs.map +0 -1
  146. package/dist/chunk-WCDJFMZO.cjs.map +0 -1
  147. package/dist/chunk-WNJRS7Y7.cjs.map +0 -1
@@ -1,10 +1,11 @@
1
1
  'use strict';
2
2
 
3
+ var chunkXI74P5F2_cjs = require('./chunk-XI74P5F2.cjs');
3
4
  var chunkZ5S5JEJD_cjs = require('./chunk-Z5S5JEJD.cjs');
4
5
  var chunkYVL3XATO_cjs = require('./chunk-YVL3XATO.cjs');
5
6
  var chunkDXEPYK3I_cjs = require('./chunk-DXEPYK3I.cjs');
6
7
  var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
7
- var React = require('react');
8
+ var React5 = require('react');
8
9
  var lucideReact = require('lucide-react');
9
10
  var jsxRuntime = require('react/jsx-runtime');
10
11
 
@@ -26,330 +27,10 @@ function _interopNamespace(e) {
26
27
  return Object.freeze(n);
27
28
  }
28
29
 
29
- var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
+ var React5__namespace = /*#__PURE__*/_interopNamespace(React5);
30
31
 
31
- // src/utils/own.ts
32
- function ownProperty(map, key) {
33
- return map != null && Object.hasOwn(map, key) ? map[key] : void 0;
34
- }
35
- var templateIcons = {
36
- activity: lucideReact.Activity,
37
- award: lucideReact.Award,
38
- "badge-check": lucideReact.BadgeCheck,
39
- bell: lucideReact.Bell,
40
- briefcase: lucideReact.Briefcase,
41
- building: lucideReact.Building2,
42
- calendar: lucideReact.Calendar,
43
- "calendar-check": lucideReact.CalendarCheck,
44
- "chart-column": lucideReact.ChartColumn,
45
- "chart-line": lucideReact.ChartLine,
46
- "circle-check": lucideReact.CircleCheck,
47
- "clipboard-check": lucideReact.ClipboardCheck,
48
- clock: lucideReact.Clock,
49
- cloud: lucideReact.Cloud,
50
- database: lucideReact.Database,
51
- "dollar-sign": lucideReact.DollarSign,
52
- factory: lucideReact.Factory,
53
- "file-text": lucideReact.FileText,
54
- flask: lucideReact.FlaskConical,
55
- globe: lucideReact.Globe,
56
- "graduation-cap": lucideReact.GraduationCap,
57
- handshake: lucideReact.Handshake,
58
- "hard-hat": lucideReact.HardHat,
59
- headset: lucideReact.Headset,
60
- "heart-pulse": lucideReact.HeartPulse,
61
- hospital: lucideReact.Hospital,
62
- layers: lucideReact.Layers,
63
- leaf: lucideReact.Leaf,
64
- lightbulb: lucideReact.Lightbulb,
65
- lock: lucideReact.Lock,
66
- mail: lucideReact.Mail,
67
- "map-pin": lucideReact.MapPin,
68
- "message-square": lucideReact.MessageSquare,
69
- microscope: lucideReact.Microscope,
70
- phone: lucideReact.Phone,
71
- plane: lucideReact.Plane,
72
- plug: lucideReact.Plug,
73
- rocket: lucideReact.Rocket,
74
- scale: lucideReact.Scale,
75
- search: lucideReact.Search,
76
- settings: lucideReact.Settings,
77
- shield: lucideReact.Shield,
78
- "shield-check": lucideReact.ShieldCheck,
79
- smartphone: lucideReact.Smartphone,
80
- sparkles: lucideReact.Sparkles,
81
- stethoscope: lucideReact.Stethoscope,
82
- syringe: lucideReact.Syringe,
83
- target: lucideReact.Target,
84
- timer: lucideReact.Timer,
85
- "trending-up": lucideReact.TrendingUp,
86
- truck: lucideReact.Truck,
87
- "user-check": lucideReact.UserCheck,
88
- users: lucideReact.Users,
89
- workflow: lucideReact.Workflow,
90
- wrench: lucideReact.Wrench,
91
- zap: lucideReact.Zap
92
- };
93
- function TemplateIcon({ name, icons, className }) {
94
- const Icon = ownProperty(icons, name) ?? ownProperty(templateIcons, name);
95
- if (Icon)
96
- return /* @__PURE__ */ jsxRuntime.jsx(
97
- Icon,
98
- {
99
- "aria-hidden": "true",
100
- strokeWidth: 1.75,
101
- className: chunkS5RVSXDV_cjs.cn("size-5", className)
102
- }
103
- );
104
- if (name.length <= 4)
105
- return /* @__PURE__ */ jsxRuntime.jsx(
106
- "span",
107
- {
108
- "aria-hidden": "true",
109
- className: chunkS5RVSXDV_cjs.cn("text-xs font-bold tracking-wide", className),
110
- children: name
111
- }
112
- );
113
- return null;
114
- }
115
- var toneSurface = {
116
- default: "bg-background text-foreground",
117
- muted: "bg-muted text-foreground",
118
- brand: "bg-primary-900 text-white"
119
- };
120
- var toneClass = (tone) => toneSurface[tone];
121
- var cardClass = (tone) => tone === "brand" ? "border border-white/15 bg-white/5 text-white" : "border border-border bg-card text-card-foreground";
122
- var mutedTextClass = (tone) => tone === "brand" ? "text-white/80" : tone === "muted" ? "text-foreground/80" : "text-muted-foreground";
123
- var headingTextClass = (tone) => tone === "brand" ? "text-white" : "text-foreground";
124
- var accentTextClass = (tone) => tone === "brand" ? "text-white" : "text-primary-800 dark:text-primary-300";
125
- var containerClass = (width = "wide") => chunkS5RVSXDV_cjs.cn(
126
- "mx-auto w-full px-4 sm:px-6 lg:px-8",
127
- width === "narrow" ? "max-w-3xl" : "max-w-7xl"
128
- );
129
- var SAFE_HREF_SCHEME = /^(?:https?|mailto|tel):/i;
130
- function safeHref(href) {
131
- if (href == null) return void 0;
132
- const stripped = href.replace(/[\u0000-\u0020]/g, "");
133
- if (!stripped) return void 0;
134
- if (!/^[a-z][a-z0-9+.-]*:/i.test(stripped)) return href;
135
- return SAFE_HREF_SCHEME.test(stripped) ? href : void 0;
136
- }
137
- function TemplateAnchor({
138
- components,
139
- trackingId,
140
- children,
141
- ...props
142
- }) {
143
- const Link = components?.Link;
144
- const href = safeHref(props.href);
145
- const all = { ...props, href, "data-track": trackingId };
146
- return Link && href != null ? /* @__PURE__ */ jsxRuntime.jsx(Link, { ...all, href, children }) : /* @__PURE__ */ jsxRuntime.jsx("a", { ...all, children });
147
- }
148
- var fetchPriorityHigh = React__namespace.version.startsWith("18.") ? { fetchpriority: "high" } : { fetchPriority: "high" };
149
- function TemplateImg({
150
- components,
151
- priority,
152
- ...image
153
- }) {
154
- const Image = components?.Image;
155
- if (Image) return /* @__PURE__ */ jsxRuntime.jsx(Image, { ...image, priority });
156
- return /* @__PURE__ */ jsxRuntime.jsx(
157
- "img",
158
- {
159
- ...image,
160
- alt: image.alt,
161
- loading: priority ? void 0 : "lazy",
162
- ...priority ? fetchPriorityHigh : {},
163
- decoding: "async"
164
- }
165
- );
166
- }
167
- function SectionHeading({
168
- eyebrow,
169
- title,
170
- description,
171
- as: Heading = "h2",
172
- size = "section",
173
- align = "start",
174
- tone = "default",
175
- titleId,
176
- className
177
- }) {
178
- if (!eyebrow && !title && !description) return null;
179
- return /* @__PURE__ */ jsxRuntime.jsxs(
180
- "div",
181
- {
182
- "data-slot": "section-heading",
183
- className: chunkS5RVSXDV_cjs.cn(
184
- "max-w-3xl",
185
- align === "center" && "mx-auto text-center",
186
- className
187
- ),
188
- children: [
189
- eyebrow && /* @__PURE__ */ jsxRuntime.jsx(
190
- "p",
191
- {
192
- className: chunkS5RVSXDV_cjs.cn(
193
- "mb-3 text-sm font-semibold tracking-wider uppercase",
194
- accentTextClass(tone)
195
- ),
196
- children: eyebrow
197
- }
198
- ),
199
- title && /* @__PURE__ */ jsxRuntime.jsx(
200
- Heading,
201
- {
202
- id: titleId,
203
- className: chunkS5RVSXDV_cjs.cn(
204
- "font-bold tracking-tight text-balance",
205
- headingTextClass(tone),
206
- size === "hero" ? "text-4xl sm:text-5xl lg:text-6xl" : "text-3xl sm:text-4xl"
207
- ),
208
- children: title
209
- }
210
- ),
211
- description && /* @__PURE__ */ jsxRuntime.jsx(
212
- "p",
213
- {
214
- className: chunkS5RVSXDV_cjs.cn(
215
- "mt-4 text-pretty",
216
- size === "hero" ? "text-lg sm:text-xl" : "text-lg",
217
- mutedTextClass(tone)
218
- ),
219
- children: description
220
- }
221
- )
222
- ]
223
- }
224
- );
225
- }
226
- var SectionShell = React__namespace.forwardRef(
227
- ({
228
- eyebrow,
229
- title,
230
- description,
231
- tone = "default",
232
- align = "start",
233
- width = "wide",
234
- spacing = "default",
235
- className,
236
- children,
237
- components,
238
- ...rest
239
- }, ref) => {
240
- const titleId = React__namespace.useId();
241
- return /* @__PURE__ */ jsxRuntime.jsx(
242
- "section",
243
- {
244
- ref,
245
- "data-slot": "landing-section",
246
- "data-tone": tone,
247
- "aria-labelledby": title ? titleId : void 0,
248
- className: chunkS5RVSXDV_cjs.cn(
249
- spacing === "compact" ? "py-10 sm:py-14" : "py-16 sm:py-24",
250
- toneClass(tone),
251
- className
252
- ),
253
- ...rest,
254
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: containerClass(width), children: [
255
- /* @__PURE__ */ jsxRuntime.jsx(
256
- SectionHeading,
257
- {
258
- eyebrow,
259
- title,
260
- description,
261
- align,
262
- tone,
263
- titleId,
264
- className: chunkS5RVSXDV_cjs.cn(width === "narrow" && "max-w-none")
265
- }
266
- ),
267
- children
268
- ] })
269
- }
270
- );
271
- }
272
- );
273
- SectionShell.displayName = "SectionShell";
274
- function CtaLinks({
275
- primary,
276
- secondary,
277
- tone = "default",
278
- align = "start",
279
- className,
280
- components
281
- }) {
282
- if (!primary && !secondary) return null;
283
- const onBrand = tone === "brand";
284
- const wrap = "h-auto min-h-12 py-3 whitespace-normal text-center";
285
- return /* @__PURE__ */ jsxRuntime.jsxs(
286
- "div",
287
- {
288
- "data-slot": "cta-links",
289
- className: chunkS5RVSXDV_cjs.cn(
290
- "flex flex-col gap-3 sm:flex-row sm:flex-wrap",
291
- align === "center" && "sm:justify-center",
292
- className
293
- ),
294
- children: [
295
- primary && /* @__PURE__ */ jsxRuntime.jsxs(
296
- TemplateAnchor,
297
- {
298
- href: primary.href,
299
- trackingId: primary.trackingId,
300
- components,
301
- "data-slot": "cta-primary",
302
- className: chunkS5RVSXDV_cjs.cn(
303
- chunkDXEPYK3I_cjs.buttonVariants({ variant: "primary", size: "lg" }),
304
- wrap,
305
- onBrand && "text-primary-900 hover:bg-primary-50 active:bg-primary-100 bg-white"
306
- ),
307
- children: [
308
- primary.label,
309
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { "aria-hidden": "true", className: "size-5 rtl:-scale-x-100" })
310
- ]
311
- }
312
- ),
313
- secondary && /* @__PURE__ */ jsxRuntime.jsx(
314
- TemplateAnchor,
315
- {
316
- href: secondary.href,
317
- trackingId: secondary.trackingId,
318
- components,
319
- "data-slot": "cta-secondary",
320
- className: chunkS5RVSXDV_cjs.cn(
321
- chunkDXEPYK3I_cjs.buttonVariants({ variant: "outline", size: "lg" }),
322
- wrap,
323
- onBrand && "border-white/70 text-white hover:bg-white/10 hover:text-white dark:border-white/70 dark:text-white dark:hover:bg-white/10"
324
- ),
325
- children: secondary.label
326
- }
327
- )
328
- ]
329
- }
330
- );
331
- }
332
- function IconTile({
333
- name,
334
- icons,
335
- tone = "default",
336
- className
337
- }) {
338
- return /* @__PURE__ */ jsxRuntime.jsx(
339
- "span",
340
- {
341
- "data-slot": "icon-tile",
342
- className: chunkS5RVSXDV_cjs.cn(
343
- "inline-flex size-11 shrink-0 items-center justify-center rounded-xl",
344
- tone === "brand" ? "bg-white/10 text-white" : "bg-primary-100 text-primary-900 dark:bg-primary-900/60 dark:text-primary-200",
345
- className
346
- ),
347
- children: /* @__PURE__ */ jsxRuntime.jsx(TemplateIcon, { name, icons })
348
- }
349
- );
350
- }
351
32
  var cellClass = "px-3 py-3 sm:px-5 sm:py-4";
352
- var ComparisonSection = React__namespace.forwardRef(
33
+ var ComparisonSection = React5__namespace.forwardRef(
353
34
  ({
354
35
  columns,
355
36
  rows,
@@ -375,13 +56,13 @@ var ComparisonSection = React__namespace.forwardRef(
375
56
  lucideReact.X,
376
57
  {
377
58
  "aria-hidden": "true",
378
- className: chunkS5RVSXDV_cjs.cn("mx-auto size-5", mutedTextClass(tone))
59
+ className: chunkS5RVSXDV_cjs.cn("mx-auto size-5", chunkXI74P5F2_cjs.mutedTextClass(tone))
379
60
  }
380
61
  ),
381
62
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: labels?.notIncluded ?? "Not included" })
382
63
  ] });
383
64
  return /* @__PURE__ */ jsxRuntime.jsx(
384
- SectionShell,
65
+ chunkXI74P5F2_cjs.SectionShell,
385
66
  {
386
67
  ref,
387
68
  "data-slot": "comparison-section",
@@ -392,7 +73,7 @@ var ComparisonSection = React__namespace.forwardRef(
392
73
  children: /* @__PURE__ */ jsxRuntime.jsx(
393
74
  "div",
394
75
  {
395
- className: chunkS5RVSXDV_cjs.cn("mt-12 overflow-x-auto rounded-2xl", cardClass(tone)),
76
+ className: chunkS5RVSXDV_cjs.cn("mt-12 overflow-x-auto rounded-2xl", chunkXI74P5F2_cjs.cardClass(tone)),
396
77
  children: /* @__PURE__ */ jsxRuntime.jsxs(
397
78
  "table",
398
79
  {
@@ -468,7 +149,7 @@ var ComparisonSection = React__namespace.forwardRef(
468
149
  }
469
150
  );
470
151
  ComparisonSection.displayName = "ComparisonSection";
471
- var CtaSection = React__namespace.forwardRef(
152
+ var CtaSection = React5__namespace.forwardRef(
472
153
  ({
473
154
  eyebrow,
474
155
  title,
@@ -483,10 +164,10 @@ var CtaSection = React__namespace.forwardRef(
483
164
  className,
484
165
  ...rest
485
166
  }, ref) => {
486
- const titleId = React__namespace.useId();
167
+ const titleId = React5__namespace.useId();
487
168
  const body = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
488
169
  /* @__PURE__ */ jsxRuntime.jsx(
489
- SectionHeading,
170
+ chunkXI74P5F2_cjs.SectionHeading,
490
171
  {
491
172
  eyebrow,
492
173
  title,
@@ -497,7 +178,7 @@ var CtaSection = React__namespace.forwardRef(
497
178
  }
498
179
  ),
499
180
  /* @__PURE__ */ jsxRuntime.jsx(
500
- CtaLinks,
181
+ chunkXI74P5F2_cjs.CtaLinks,
501
182
  {
502
183
  primary: primaryCta,
503
184
  secondary: secondaryCta,
@@ -512,7 +193,7 @@ var CtaSection = React__namespace.forwardRef(
512
193
  {
513
194
  className: chunkS5RVSXDV_cjs.cn(
514
195
  "mt-4 text-sm",
515
- mutedTextClass(tone),
196
+ chunkXI74P5F2_cjs.mutedTextClass(tone),
516
197
  align === "center" && "text-center"
517
198
  ),
518
199
  children: note
@@ -528,16 +209,16 @@ var CtaSection = React__namespace.forwardRef(
528
209
  "aria-labelledby": titleId,
529
210
  className: chunkS5RVSXDV_cjs.cn(
530
211
  "py-16 sm:py-24",
531
- layout === "band" ? toneClass(tone) : "bg-background",
212
+ layout === "band" ? chunkXI74P5F2_cjs.toneClass(tone) : "bg-background",
532
213
  className
533
214
  ),
534
215
  ...rest,
535
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: containerClass(), children: layout === "panel" ? /* @__PURE__ */ jsxRuntime.jsx(
216
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkXI74P5F2_cjs.containerClass(), children: layout === "panel" ? /* @__PURE__ */ jsxRuntime.jsx(
536
217
  "div",
537
218
  {
538
219
  className: chunkS5RVSXDV_cjs.cn(
539
220
  "rounded-3xl px-6 py-12 sm:px-12 sm:py-16",
540
- toneClass(tone),
221
+ chunkXI74P5F2_cjs.toneClass(tone),
541
222
  tone !== "brand" && "border-border border"
542
223
  ),
543
224
  children: body
@@ -548,9 +229,9 @@ var CtaSection = React__namespace.forwardRef(
548
229
  }
549
230
  );
550
231
  CtaSection.displayName = "CtaSection";
551
- var FaqSection = React__namespace.forwardRef(
232
+ var FaqSection = React5__namespace.forwardRef(
552
233
  ({ items, tone = "default", align = "center", ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
553
- SectionShell,
234
+ chunkXI74P5F2_cjs.SectionShell,
554
235
  {
555
236
  ref,
556
237
  "data-slot": "faq-section",
@@ -562,7 +243,7 @@ var FaqSection = React__namespace.forwardRef(
562
243
  "details",
563
244
  {
564
245
  id: item.id,
565
- className: chunkS5RVSXDV_cjs.cn("group rounded-xl", cardClass(tone)),
246
+ className: chunkS5RVSXDV_cjs.cn("group rounded-xl", chunkXI74P5F2_cjs.cardClass(tone)),
566
247
  children: [
567
248
  /* @__PURE__ */ jsxRuntime.jsxs(
568
249
  "summary",
@@ -589,7 +270,7 @@ var FaqSection = React__namespace.forwardRef(
589
270
  {
590
271
  className: chunkS5RVSXDV_cjs.cn(
591
272
  "px-5 pb-5 whitespace-pre-line",
592
- mutedTextClass(tone)
273
+ chunkXI74P5F2_cjs.mutedTextClass(tone)
593
274
  ),
594
275
  children: item.answer
595
276
  }
@@ -607,7 +288,7 @@ var columnClass = {
607
288
  3: "lg:grid-cols-3",
608
289
  4: "lg:grid-cols-4"
609
290
  };
610
- var FeatureGridSection = React__namespace.forwardRef(
291
+ var FeatureGridSection = React5__namespace.forwardRef(
611
292
  ({
612
293
  features,
613
294
  columns = 3,
@@ -618,7 +299,7 @@ var FeatureGridSection = React__namespace.forwardRef(
618
299
  components,
619
300
  ...rest
620
301
  }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
621
- SectionShell,
302
+ chunkXI74P5F2_cjs.SectionShell,
622
303
  {
623
304
  ref,
624
305
  "data-slot": "feature-grid-section",
@@ -634,31 +315,31 @@ var FeatureGridSection = React__namespace.forwardRef(
634
315
  {
635
316
  className: chunkS5RVSXDV_cjs.cn(
636
317
  "flex flex-col gap-3",
637
- variant === "cards" && chunkS5RVSXDV_cjs.cn("rounded-2xl p-6", cardClass(tone))
318
+ variant === "cards" && chunkS5RVSXDV_cjs.cn("rounded-2xl p-6", chunkXI74P5F2_cjs.cardClass(tone))
638
319
  ),
639
320
  children: [
640
- feature.icon && /* @__PURE__ */ jsxRuntime.jsx(IconTile, { name: feature.icon, icons, tone }),
321
+ feature.icon && /* @__PURE__ */ jsxRuntime.jsx(chunkXI74P5F2_cjs.IconTile, { name: feature.icon, icons, tone }),
641
322
  feature.tag && /* @__PURE__ */ jsxRuntime.jsx(
642
323
  "p",
643
324
  {
644
325
  className: chunkS5RVSXDV_cjs.cn(
645
326
  "text-xs font-semibold tracking-wider uppercase",
646
- accentTextClass(tone)
327
+ chunkXI74P5F2_cjs.accentTextClass(tone)
647
328
  ),
648
329
  children: feature.tag
649
330
  }
650
331
  ),
651
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: chunkS5RVSXDV_cjs.cn("text-lg font-semibold", headingTextClass(tone)), children: feature.title }),
652
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: mutedTextClass(tone), children: feature.description }),
332
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: chunkS5RVSXDV_cjs.cn("text-lg font-semibold", chunkXI74P5F2_cjs.headingTextClass(tone)), children: feature.title }),
333
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkXI74P5F2_cjs.mutedTextClass(tone), children: feature.description }),
653
334
  feature.link && /* @__PURE__ */ jsxRuntime.jsxs(
654
- TemplateAnchor,
335
+ chunkXI74P5F2_cjs.TemplateAnchor,
655
336
  {
656
337
  href: feature.link.href,
657
338
  trackingId: feature.link.trackingId,
658
339
  components,
659
340
  className: chunkS5RVSXDV_cjs.cn(
660
341
  "mt-auto inline-flex items-center gap-1 font-semibold hover:underline",
661
- accentTextClass(tone)
342
+ chunkXI74P5F2_cjs.accentTextClass(tone)
662
343
  ),
663
344
  children: [
664
345
  feature.link.label,
@@ -682,7 +363,7 @@ var FeatureGridSection = React__namespace.forwardRef(
682
363
  )
683
364
  );
684
365
  FeatureGridSection.displayName = "FeatureGridSection";
685
- var HeroSection = React__namespace.forwardRef(
366
+ var HeroSection = React5__namespace.forwardRef(
686
367
  ({
687
368
  eyebrow,
688
369
  title,
@@ -693,6 +374,8 @@ var HeroSection = React__namespace.forwardRef(
693
374
  secondaryCta,
694
375
  ctaNote,
695
376
  highlights,
377
+ meta,
378
+ logo,
696
379
  image,
697
380
  breadcrumbs,
698
381
  headingLevel = "h1",
@@ -701,7 +384,7 @@ var HeroSection = React__namespace.forwardRef(
701
384
  className,
702
385
  ...rest
703
386
  }, ref) => {
704
- const titleId = React__namespace.useId();
387
+ const titleId = React5__namespace.useId();
705
388
  const split = variant === "split" && !!image;
706
389
  const align = split ? "start" : "center";
707
390
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -711,13 +394,13 @@ var HeroSection = React__namespace.forwardRef(
711
394
  "data-slot": "hero-section",
712
395
  "data-tone": tone,
713
396
  "aria-labelledby": titleId,
714
- className: chunkS5RVSXDV_cjs.cn("py-16 sm:py-24 lg:py-28", toneClass(tone), className),
397
+ className: chunkS5RVSXDV_cjs.cn("py-16 sm:py-24 lg:py-28", chunkXI74P5F2_cjs.toneClass(tone), className),
715
398
  ...rest,
716
399
  children: /* @__PURE__ */ jsxRuntime.jsxs(
717
400
  "div",
718
401
  {
719
402
  className: chunkS5RVSXDV_cjs.cn(
720
- containerClass(),
403
+ chunkXI74P5F2_cjs.containerClass(),
721
404
  split && "grid items-center gap-12 lg:grid-cols-2"
722
405
  ),
723
406
  children: [
@@ -732,14 +415,14 @@ var HeroSection = React__namespace.forwardRef(
732
415
  {
733
416
  className: chunkS5RVSXDV_cjs.cn(
734
417
  "flex flex-wrap items-center gap-1 text-sm",
735
- mutedTextClass(tone),
418
+ chunkXI74P5F2_cjs.mutedTextClass(tone),
736
419
  !split && "justify-center"
737
420
  ),
738
421
  children: breadcrumbs.map((crumb, i) => {
739
422
  const last = i === breadcrumbs.length - 1;
740
423
  return /* @__PURE__ */ jsxRuntime.jsx("li", { className: "flex items-center gap-1", children: last ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-current": "page", children: crumb.label }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
741
424
  /* @__PURE__ */ jsxRuntime.jsx(
742
- TemplateAnchor,
425
+ chunkXI74P5F2_cjs.TemplateAnchor,
743
426
  {
744
427
  href: crumb.href,
745
428
  trackingId: crumb.trackingId,
@@ -761,8 +444,16 @@ var HeroSection = React__namespace.forwardRef(
761
444
  )
762
445
  }
763
446
  ),
447
+ logo && /* @__PURE__ */ jsxRuntime.jsx(
448
+ chunkXI74P5F2_cjs.TemplateImg,
449
+ {
450
+ ...logo,
451
+ components,
452
+ className: "mb-6 h-12 w-auto"
453
+ }
454
+ ),
764
455
  /* @__PURE__ */ jsxRuntime.jsx(
765
- SectionHeading,
456
+ chunkXI74P5F2_cjs.SectionHeading,
766
457
  {
767
458
  as: headingLevel,
768
459
  size: "hero",
@@ -774,8 +465,23 @@ var HeroSection = React__namespace.forwardRef(
774
465
  titleId
775
466
  }
776
467
  ),
468
+ meta && meta.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
469
+ "p",
470
+ {
471
+ "data-slot": "hero-meta",
472
+ className: chunkS5RVSXDV_cjs.cn(
473
+ "mt-6 flex flex-wrap gap-x-2 gap-y-1 text-sm font-medium",
474
+ chunkXI74P5F2_cjs.mutedTextClass(tone),
475
+ !split && "justify-center"
476
+ ),
477
+ children: meta.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(React5__namespace.Fragment, { children: [
478
+ i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", children: "\xB7" }),
479
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: item })
480
+ ] }, item))
481
+ }
482
+ ),
777
483
  /* @__PURE__ */ jsxRuntime.jsx(
778
- CtaLinks,
484
+ chunkXI74P5F2_cjs.CtaLinks,
779
485
  {
780
486
  primary: primaryCta,
781
487
  secondary: secondaryCta,
@@ -785,7 +491,7 @@ var HeroSection = React__namespace.forwardRef(
785
491
  className: "mt-8"
786
492
  }
787
493
  ),
788
- ctaNote && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-4 text-sm", mutedTextClass(tone)), children: ctaNote }),
494
+ ctaNote && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-4 text-sm", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: ctaNote }),
789
495
  highlights && highlights.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
790
496
  "ul",
791
497
  {
@@ -798,7 +504,7 @@ var HeroSection = React__namespace.forwardRef(
798
504
  lucideReact.CircleCheck,
799
505
  {
800
506
  "aria-hidden": "true",
801
- className: chunkS5RVSXDV_cjs.cn("size-4 shrink-0", accentTextClass(tone))
507
+ className: chunkS5RVSXDV_cjs.cn("size-4 shrink-0", chunkXI74P5F2_cjs.accentTextClass(tone))
802
508
  }
803
509
  ),
804
510
  item
@@ -807,7 +513,7 @@ var HeroSection = React__namespace.forwardRef(
807
513
  )
808
514
  ] }),
809
515
  image && /* @__PURE__ */ jsxRuntime.jsx(
810
- TemplateImg,
516
+ chunkXI74P5F2_cjs.TemplateImg,
811
517
  {
812
518
  ...image,
813
519
  priority: true,
@@ -861,7 +567,7 @@ var controlClass = chunkS5RVSXDV_cjs.cn(
861
567
  chunkZ5S5JEJD_cjs.inputVariants({ size: "md" }),
862
568
  "block h-auto py-2.5"
863
569
  );
864
- var LeadFormSection = React__namespace.forwardRef(
570
+ var LeadFormSection = React5__namespace.forwardRef(
865
571
  ({
866
572
  eyebrow,
867
573
  title,
@@ -873,16 +579,17 @@ var LeadFormSection = React__namespace.forwardRef(
873
579
  submitLabel = "Submit",
874
580
  note,
875
581
  layout = "split",
582
+ highlights,
876
583
  tone = "muted",
877
584
  submitTrackingId,
878
585
  components,
879
586
  className,
880
587
  ...rest
881
588
  }, ref) => {
882
- const baseId = React__namespace.useId();
589
+ const baseId = React5__namespace.useId();
883
590
  const titleId = `${baseId}-title`;
884
591
  const split = layout === "split";
885
- const resolvedAction = typeof action === "string" ? safeHref(action) : action;
592
+ const resolvedAction = typeof action === "string" ? chunkXI74P5F2_cjs.safeHref(action) : action;
886
593
  if (resolvedAction == null) return null;
887
594
  return /* @__PURE__ */ jsxRuntime.jsx(
888
595
  "section",
@@ -891,27 +598,52 @@ var LeadFormSection = React__namespace.forwardRef(
891
598
  "data-slot": "lead-form-section",
892
599
  "data-tone": tone,
893
600
  "aria-labelledby": titleId,
894
- className: chunkS5RVSXDV_cjs.cn("py-16 sm:py-24", toneClass(tone), className),
601
+ className: chunkS5RVSXDV_cjs.cn("py-16 sm:py-24", chunkXI74P5F2_cjs.toneClass(tone), className),
895
602
  ...rest,
896
603
  children: /* @__PURE__ */ jsxRuntime.jsxs(
897
604
  "div",
898
605
  {
899
606
  className: chunkS5RVSXDV_cjs.cn(
900
- containerClass(split ? "wide" : "narrow"),
607
+ chunkXI74P5F2_cjs.containerClass(split ? "wide" : "narrow"),
901
608
  split && "grid items-start gap-12 lg:grid-cols-2"
902
609
  ),
903
610
  children: [
904
- /* @__PURE__ */ jsxRuntime.jsx(
905
- SectionHeading,
906
- {
907
- eyebrow,
908
- title,
909
- description,
910
- align: split ? "start" : "center",
911
- tone,
912
- titleId
913
- }
914
- ),
611
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
612
+ /* @__PURE__ */ jsxRuntime.jsx(
613
+ chunkXI74P5F2_cjs.SectionHeading,
614
+ {
615
+ eyebrow,
616
+ title,
617
+ description,
618
+ align: split ? "start" : "center",
619
+ tone,
620
+ titleId
621
+ }
622
+ ),
623
+ highlights && highlights.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
624
+ "ul",
625
+ {
626
+ className: chunkS5RVSXDV_cjs.cn(
627
+ "mt-6 space-y-2",
628
+ !split && "mx-auto w-fit",
629
+ chunkXI74P5F2_cjs.mutedTextClass(tone)
630
+ ),
631
+ children: highlights.map((item) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start gap-2", children: [
632
+ /* @__PURE__ */ jsxRuntime.jsx(
633
+ lucideReact.CircleCheck,
634
+ {
635
+ "aria-hidden": "true",
636
+ className: chunkS5RVSXDV_cjs.cn(
637
+ "mt-0.5 size-4 shrink-0",
638
+ chunkXI74P5F2_cjs.accentTextClass(tone)
639
+ )
640
+ }
641
+ ),
642
+ item
643
+ ] }, item))
644
+ }
645
+ )
646
+ ] }),
915
647
  /* @__PURE__ */ jsxRuntime.jsxs(
916
648
  "form",
917
649
  {
@@ -921,7 +653,7 @@ var LeadFormSection = React__namespace.forwardRef(
921
653
  className: chunkS5RVSXDV_cjs.cn(
922
654
  "grid gap-5 rounded-2xl p-6 sm:grid-cols-2 sm:p-8",
923
655
  // The form card always uses the theme surface so inputs stay legible on a brand band.
924
- cardClass("default"),
656
+ chunkXI74P5F2_cjs.cardClass("default"),
925
657
  !split && "mt-10"
926
658
  ),
927
659
  children: [
@@ -991,7 +723,7 @@ var LeadFormSection = React__namespace.forwardRef(
991
723
  children: submitLabel
992
724
  }
993
725
  ),
994
- note && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-3 text-xs", mutedTextClass("default")), children: note })
726
+ note && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-3 text-xs", chunkXI74P5F2_cjs.mutedTextClass("default")), children: note })
995
727
  ] })
996
728
  ]
997
729
  }
@@ -1029,13 +761,13 @@ function Logo({
1029
761
  {
1030
762
  className: chunkS5RVSXDV_cjs.cn(
1031
763
  "text-lg font-semibold whitespace-nowrap",
1032
- mutedTextClass(tone ?? "default")
764
+ chunkXI74P5F2_cjs.mutedTextClass(tone ?? "default")
1033
765
  ),
1034
766
  children: logo.name
1035
767
  }
1036
768
  );
1037
769
  return logo.href ? /* @__PURE__ */ jsxRuntime.jsx(
1038
- TemplateAnchor,
770
+ chunkXI74P5F2_cjs.TemplateAnchor,
1039
771
  {
1040
772
  href: logo.href,
1041
773
  trackingId: logo.trackingId,
@@ -1046,7 +778,7 @@ function Logo({
1046
778
  }
1047
779
  ) : mark;
1048
780
  }
1049
- var LogoCloudSection = React__namespace.forwardRef(
781
+ var LogoCloudSection = React5__namespace.forwardRef(
1050
782
  ({
1051
783
  logos,
1052
784
  variant = "grid",
@@ -1056,7 +788,7 @@ var LogoCloudSection = React__namespace.forwardRef(
1056
788
  components,
1057
789
  ...rest
1058
790
  }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1059
- SectionShell,
791
+ chunkXI74P5F2_cjs.SectionShell,
1060
792
  {
1061
793
  ref,
1062
794
  "data-slot": "logo-cloud-section",
@@ -1095,9 +827,9 @@ var columnClass2 = [
1095
827
  "lg:grid-cols-3",
1096
828
  "lg:grid-cols-4"
1097
829
  ];
1098
- var PricingSection = React__namespace.forwardRef(
830
+ var PricingSection = React5__namespace.forwardRef(
1099
831
  ({ plans, note, tone = "default", align = "center", components, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
1100
- SectionShell,
832
+ chunkXI74P5F2_cjs.SectionShell,
1101
833
  {
1102
834
  ref,
1103
835
  "data-slot": "pricing-section",
@@ -1118,25 +850,25 @@ var PricingSection = React__namespace.forwardRef(
1118
850
  {
1119
851
  className: chunkS5RVSXDV_cjs.cn(
1120
852
  "relative flex flex-col rounded-2xl p-6 sm:p-8",
1121
- cardClass(tone),
853
+ chunkXI74P5F2_cjs.cardClass(tone),
1122
854
  plan.highlighted && "ring-primary-600 dark:ring-primary-400 ring-2"
1123
855
  ),
1124
856
  children: [
1125
857
  plan.highlighted && plan.badge && /* @__PURE__ */ jsxRuntime.jsx(chunkYVL3XATO_cjs.Badge, { className: "bg-primary-800 dark:bg-primary-800 absolute start-6 -top-3 px-3 py-1 text-xs font-semibold text-white dark:text-white", children: plan.badge }),
1126
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: chunkS5RVSXDV_cjs.cn("text-lg font-semibold", headingTextClass(tone)), children: plan.name }),
1127
- plan.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-2 text-sm", mutedTextClass(tone)), children: plan.description }),
858
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: chunkS5RVSXDV_cjs.cn("text-lg font-semibold", chunkXI74P5F2_cjs.headingTextClass(tone)), children: plan.name }),
859
+ plan.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-2 text-sm", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: plan.description }),
1128
860
  /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mt-6 flex flex-wrap items-baseline gap-x-2", children: [
1129
861
  /* @__PURE__ */ jsxRuntime.jsx(
1130
862
  "span",
1131
863
  {
1132
864
  className: chunkS5RVSXDV_cjs.cn(
1133
865
  "text-4xl font-bold tracking-tight",
1134
- headingTextClass(tone)
866
+ chunkXI74P5F2_cjs.headingTextClass(tone)
1135
867
  ),
1136
868
  children: plan.price
1137
869
  }
1138
870
  ),
1139
- plan.period && /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkS5RVSXDV_cjs.cn("text-sm", mutedTextClass(tone)), children: plan.period })
871
+ plan.period && /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkS5RVSXDV_cjs.cn("text-sm", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: plan.period })
1140
872
  ] }),
1141
873
  /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "mt-6 flex-1 space-y-3 text-sm", children: plan.features.map((feature) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex gap-3", children: [
1142
874
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1145,14 +877,14 @@ var PricingSection = React__namespace.forwardRef(
1145
877
  "aria-hidden": "true",
1146
878
  className: chunkS5RVSXDV_cjs.cn(
1147
879
  "mt-0.5 size-4 shrink-0",
1148
- accentTextClass(tone)
880
+ chunkXI74P5F2_cjs.accentTextClass(tone)
1149
881
  )
1150
882
  }
1151
883
  ),
1152
884
  feature
1153
885
  ] }, feature)) }),
1154
886
  plan.cta && /* @__PURE__ */ jsxRuntime.jsx(
1155
- TemplateAnchor,
887
+ chunkXI74P5F2_cjs.TemplateAnchor,
1156
888
  {
1157
889
  href: plan.cta.href,
1158
890
  trackingId: plan.cta.trackingId,
@@ -1180,7 +912,7 @@ var PricingSection = React__namespace.forwardRef(
1180
912
  {
1181
913
  className: chunkS5RVSXDV_cjs.cn(
1182
914
  "mt-8 text-sm",
1183
- mutedTextClass(tone),
915
+ chunkXI74P5F2_cjs.mutedTextClass(tone),
1184
916
  align === "center" && "text-center"
1185
917
  ),
1186
918
  children: note
@@ -1205,10 +937,10 @@ var connectorInset = [
1205
937
  "inset-x-[16.667%]",
1206
938
  "inset-x-[12.5%]"
1207
939
  ];
1208
- var ProcessStepsSection = React__namespace.forwardRef(({ steps, icons, tone = "default", align = "center", ...rest }, ref) => {
940
+ var ProcessStepsSection = React5__namespace.forwardRef(({ steps, icons, tone = "default", align = "center", ...rest }, ref) => {
1209
941
  const columns = Math.min(steps.length, 4);
1210
942
  return /* @__PURE__ */ jsxRuntime.jsx(
1211
- SectionShell,
943
+ chunkXI74P5F2_cjs.SectionShell,
1212
944
  {
1213
945
  ref,
1214
946
  "data-slot": "process-steps-section",
@@ -1240,7 +972,7 @@ var ProcessStepsSection = React__namespace.forwardRef(({ steps, icons, tone = "d
1240
972
  "flex size-12 items-center justify-center rounded-full text-lg font-bold",
1241
973
  tone === "brand" ? "text-primary-900 bg-white" : "bg-primary-800 text-white"
1242
974
  ),
1243
- children: step.icon ? /* @__PURE__ */ jsxRuntime.jsx(TemplateIcon, { name: step.icon, icons }) : i + 1
975
+ children: step.icon ? /* @__PURE__ */ jsxRuntime.jsx(chunkXI74P5F2_cjs.TemplateIcon, { name: step.icon, icons }) : i + 1
1244
976
  }
1245
977
  ),
1246
978
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1248,12 +980,12 @@ var ProcessStepsSection = React__namespace.forwardRef(({ steps, icons, tone = "d
1248
980
  {
1249
981
  className: chunkS5RVSXDV_cjs.cn(
1250
982
  "mt-5 text-lg font-semibold",
1251
- headingTextClass(tone)
983
+ chunkXI74P5F2_cjs.headingTextClass(tone)
1252
984
  ),
1253
985
  children: step.title
1254
986
  }
1255
987
  ),
1256
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-2 max-w-xs", mutedTextClass(tone)), children: step.description })
988
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-2 max-w-xs", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: step.description })
1257
989
  ]
1258
990
  },
1259
991
  step.title
@@ -1268,7 +1000,7 @@ var columnClass4 = {
1268
1000
  3: "lg:grid-cols-3",
1269
1001
  4: "lg:grid-cols-4"
1270
1002
  };
1271
- var ResourceCardsSection = React__namespace.forwardRef(
1003
+ var ResourceCardsSection = React5__namespace.forwardRef(
1272
1004
  ({
1273
1005
  items,
1274
1006
  columns = 3,
@@ -1278,7 +1010,7 @@ var ResourceCardsSection = React__namespace.forwardRef(
1278
1010
  components,
1279
1011
  ...rest
1280
1012
  }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
1281
- SectionShell,
1013
+ chunkXI74P5F2_cjs.SectionShell,
1282
1014
  {
1283
1015
  ref,
1284
1016
  "data-slot": "resource-cards-section",
@@ -1296,11 +1028,11 @@ var ResourceCardsSection = React__namespace.forwardRef(
1296
1028
  className: chunkS5RVSXDV_cjs.cn(
1297
1029
  "group relative flex flex-col overflow-hidden rounded-2xl",
1298
1030
  "focus-within:ring-ring focus-within:ring-2",
1299
- cardClass(tone)
1031
+ chunkXI74P5F2_cjs.cardClass(tone)
1300
1032
  ),
1301
1033
  children: [
1302
1034
  item.image && /* @__PURE__ */ jsxRuntime.jsx(
1303
- TemplateImg,
1035
+ chunkXI74P5F2_cjs.TemplateImg,
1304
1036
  {
1305
1037
  ...item.image,
1306
1038
  components,
@@ -1313,7 +1045,7 @@ var ResourceCardsSection = React__namespace.forwardRef(
1313
1045
  {
1314
1046
  className: chunkS5RVSXDV_cjs.cn(
1315
1047
  "text-xs font-semibold tracking-wider uppercase",
1316
- accentTextClass(tone)
1048
+ chunkXI74P5F2_cjs.accentTextClass(tone)
1317
1049
  ),
1318
1050
  children: item.kind
1319
1051
  }
@@ -1321,9 +1053,9 @@ var ResourceCardsSection = React__namespace.forwardRef(
1321
1053
  /* @__PURE__ */ jsxRuntime.jsx(
1322
1054
  "h3",
1323
1055
  {
1324
- className: chunkS5RVSXDV_cjs.cn("text-lg font-semibold", headingTextClass(tone)),
1056
+ className: chunkS5RVSXDV_cjs.cn("text-lg font-semibold", chunkXI74P5F2_cjs.headingTextClass(tone)),
1325
1057
  children: /* @__PURE__ */ jsxRuntime.jsx(
1326
- TemplateAnchor,
1058
+ chunkXI74P5F2_cjs.TemplateAnchor,
1327
1059
  {
1328
1060
  href: item.href,
1329
1061
  trackingId: item.trackingId,
@@ -1334,8 +1066,8 @@ var ResourceCardsSection = React__namespace.forwardRef(
1334
1066
  )
1335
1067
  }
1336
1068
  ),
1337
- item.excerpt && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("line-clamp-3", mutedTextClass(tone)), children: item.excerpt }),
1338
- item.meta && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-auto pt-2 text-sm", mutedTextClass(tone)), children: item.meta })
1069
+ item.excerpt && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("line-clamp-3", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: item.excerpt }),
1070
+ item.meta && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-auto pt-2 text-sm", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: item.meta })
1339
1071
  ] })
1340
1072
  ]
1341
1073
  },
@@ -1344,14 +1076,14 @@ var ResourceCardsSection = React__namespace.forwardRef(
1344
1076
  }
1345
1077
  ),
1346
1078
  viewAll && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-10", align === "center" && "text-center"), children: /* @__PURE__ */ jsxRuntime.jsxs(
1347
- TemplateAnchor,
1079
+ chunkXI74P5F2_cjs.TemplateAnchor,
1348
1080
  {
1349
1081
  href: viewAll.href,
1350
1082
  trackingId: viewAll.trackingId,
1351
1083
  components,
1352
1084
  className: chunkS5RVSXDV_cjs.cn(
1353
1085
  "inline-flex items-center gap-1 font-semibold hover:underline",
1354
- accentTextClass(tone)
1086
+ chunkXI74P5F2_cjs.accentTextClass(tone)
1355
1087
  ),
1356
1088
  children: [
1357
1089
  viewAll.label,
@@ -1370,7 +1102,7 @@ var ResourceCardsSection = React__namespace.forwardRef(
1370
1102
  )
1371
1103
  );
1372
1104
  ResourceCardsSection.displayName = "ResourceCardsSection";
1373
- var SplitContentSection = React__namespace.forwardRef(
1105
+ var SplitContentSection = React5__namespace.forwardRef(
1374
1106
  ({
1375
1107
  eyebrow,
1376
1108
  title,
@@ -1386,7 +1118,7 @@ var SplitContentSection = React__namespace.forwardRef(
1386
1118
  className,
1387
1119
  ...rest
1388
1120
  }, ref) => {
1389
- const titleId = React__namespace.useId();
1121
+ const titleId = React5__namespace.useId();
1390
1122
  return /* @__PURE__ */ jsxRuntime.jsx(
1391
1123
  "section",
1392
1124
  {
@@ -1394,19 +1126,19 @@ var SplitContentSection = React__namespace.forwardRef(
1394
1126
  "data-slot": "split-content-section",
1395
1127
  "data-tone": tone,
1396
1128
  "aria-labelledby": titleId,
1397
- className: chunkS5RVSXDV_cjs.cn("py-16 sm:py-24", toneClass(tone), className),
1129
+ className: chunkS5RVSXDV_cjs.cn("py-16 sm:py-24", chunkXI74P5F2_cjs.toneClass(tone), className),
1398
1130
  ...rest,
1399
1131
  children: /* @__PURE__ */ jsxRuntime.jsxs(
1400
1132
  "div",
1401
1133
  {
1402
1134
  className: chunkS5RVSXDV_cjs.cn(
1403
- containerClass(),
1135
+ chunkXI74P5F2_cjs.containerClass(),
1404
1136
  "grid items-center gap-12 lg:grid-cols-2"
1405
1137
  ),
1406
1138
  children: [
1407
1139
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1408
1140
  /* @__PURE__ */ jsxRuntime.jsx(
1409
- SectionHeading,
1141
+ chunkXI74P5F2_cjs.SectionHeading,
1410
1142
  {
1411
1143
  eyebrow,
1412
1144
  title,
@@ -1422,14 +1154,14 @@ var SplitContentSection = React__namespace.forwardRef(
1422
1154
  "aria-hidden": "true",
1423
1155
  className: chunkS5RVSXDV_cjs.cn(
1424
1156
  "mt-0.5 size-5 shrink-0",
1425
- accentTextClass(tone)
1157
+ chunkXI74P5F2_cjs.accentTextClass(tone)
1426
1158
  )
1427
1159
  }
1428
1160
  ),
1429
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: mutedTextClass(tone), children: item })
1161
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkXI74P5F2_cjs.mutedTextClass(tone), children: item })
1430
1162
  ] }, item)) }),
1431
1163
  /* @__PURE__ */ jsxRuntime.jsx(
1432
- CtaLinks,
1164
+ chunkXI74P5F2_cjs.CtaLinks,
1433
1165
  {
1434
1166
  primary: primaryCta,
1435
1167
  secondary: secondaryCta,
@@ -1441,14 +1173,14 @@ var SplitContentSection = React__namespace.forwardRef(
1441
1173
  ] }),
1442
1174
  /* @__PURE__ */ jsxRuntime.jsxs("figure", { className: chunkS5RVSXDV_cjs.cn(mediaPosition === "start" && "lg:order-first"), children: [
1443
1175
  /* @__PURE__ */ jsxRuntime.jsx(
1444
- TemplateImg,
1176
+ chunkXI74P5F2_cjs.TemplateImg,
1445
1177
  {
1446
1178
  ...image,
1447
1179
  components,
1448
1180
  className: "h-auto w-full rounded-2xl object-cover shadow-lg"
1449
1181
  }
1450
1182
  ),
1451
- caption && /* @__PURE__ */ jsxRuntime.jsx("figcaption", { className: chunkS5RVSXDV_cjs.cn("mt-3 text-sm", mutedTextClass(tone)), children: caption })
1183
+ caption && /* @__PURE__ */ jsxRuntime.jsx("figcaption", { className: chunkS5RVSXDV_cjs.cn("mt-3 text-sm", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: caption })
1452
1184
  ] })
1453
1185
  ]
1454
1186
  }
@@ -1465,7 +1197,7 @@ var columnClass5 = [
1465
1197
  "lg:grid-cols-3",
1466
1198
  "lg:grid-cols-4"
1467
1199
  ];
1468
- var StatsSection = React__namespace.forwardRef(
1200
+ var StatsSection = React5__namespace.forwardRef(
1469
1201
  ({
1470
1202
  stats,
1471
1203
  variant = "plain",
@@ -1476,7 +1208,7 @@ var StatsSection = React__namespace.forwardRef(
1476
1208
  }, ref) => {
1477
1209
  const format = new Intl.NumberFormat(locale);
1478
1210
  return /* @__PURE__ */ jsxRuntime.jsx(
1479
- SectionShell,
1211
+ chunkXI74P5F2_cjs.SectionShell,
1480
1212
  {
1481
1213
  ref,
1482
1214
  "data-slot": "stats-section",
@@ -1492,13 +1224,17 @@ var StatsSection = React__namespace.forwardRef(
1492
1224
  ),
1493
1225
  children: stats.map((stat) => {
1494
1226
  const Trend = stat.trend === "down" ? lucideReact.TrendingDown : lucideReact.TrendingUp;
1227
+ const ruled = variant === "ruled";
1228
+ const shown = typeof stat.value === "number" ? format.format(stat.value) : stat.value;
1229
+ const long = `${stat.prefix ?? ""}${shown}${stat.suffix ?? ""}`.length > 6;
1495
1230
  return /* @__PURE__ */ jsxRuntime.jsxs(
1496
1231
  "div",
1497
1232
  {
1498
1233
  className: chunkS5RVSXDV_cjs.cn(
1499
1234
  "flex flex-col-reverse gap-2",
1500
- align === "center" && "items-center text-center",
1501
- variant === "cards" && chunkS5RVSXDV_cjs.cn("rounded-2xl p-6", cardClass(tone))
1235
+ align === "center" && !ruled && "items-center text-center",
1236
+ variant === "cards" && chunkS5RVSXDV_cjs.cn("rounded-2xl p-6", chunkXI74P5F2_cjs.cardClass(tone)),
1237
+ ruled && "border-accent/70 border-s-2 ps-5"
1502
1238
  ),
1503
1239
  children: [
1504
1240
  /* @__PURE__ */ jsxRuntime.jsxs("dt", { children: [
@@ -1506,7 +1242,7 @@ var StatsSection = React__namespace.forwardRef(
1506
1242
  stat.description && /* @__PURE__ */ jsxRuntime.jsx(
1507
1243
  "span",
1508
1244
  {
1509
- className: chunkS5RVSXDV_cjs.cn("mt-1 block text-sm", mutedTextClass(tone)),
1245
+ className: chunkS5RVSXDV_cjs.cn("mt-1 block text-sm", chunkXI74P5F2_cjs.mutedTextClass(tone)),
1510
1246
  children: stat.description
1511
1247
  }
1512
1248
  )
@@ -1515,13 +1251,14 @@ var StatsSection = React__namespace.forwardRef(
1515
1251
  "dd",
1516
1252
  {
1517
1253
  className: chunkS5RVSXDV_cjs.cn(
1518
- "flex items-center gap-2 text-4xl font-bold tracking-tight tabular-nums sm:text-5xl",
1254
+ "flex items-center gap-2 font-bold tracking-tight tabular-nums",
1255
+ ruled && long ? "text-2xl sm:text-3xl" : "text-4xl sm:text-5xl",
1519
1256
  tone === "brand" ? "text-white" : "text-primary-800 dark:text-primary-300"
1520
1257
  ),
1521
1258
  children: [
1522
1259
  stat.trend && /* @__PURE__ */ jsxRuntime.jsx(Trend, { "aria-hidden": "true", className: "size-7 shrink-0" }),
1523
1260
  stat.prefix,
1524
- typeof stat.value === "number" ? format.format(stat.value) : stat.value,
1261
+ shown,
1525
1262
  stat.suffix
1526
1263
  ]
1527
1264
  }
@@ -1538,7 +1275,7 @@ var StatsSection = React__namespace.forwardRef(
1538
1275
  }
1539
1276
  );
1540
1277
  StatsSection.displayName = "StatsSection";
1541
- var TestimonialSection = React__namespace.forwardRef(
1278
+ var TestimonialSection = React5__namespace.forwardRef(
1542
1279
  ({
1543
1280
  testimonials,
1544
1281
  variant = "cards",
@@ -1551,7 +1288,7 @@ var TestimonialSection = React__namespace.forwardRef(
1551
1288
  const featured = variant === "featured";
1552
1289
  const items = featured ? testimonials.slice(0, 1) : testimonials;
1553
1290
  return /* @__PURE__ */ jsxRuntime.jsx(
1554
- SectionShell,
1291
+ chunkXI74P5F2_cjs.SectionShell,
1555
1292
  {
1556
1293
  ref,
1557
1294
  "data-slot": "testimonial-section",
@@ -1571,7 +1308,7 @@ var TestimonialSection = React__namespace.forwardRef(
1571
1308
  {
1572
1309
  className: chunkS5RVSXDV_cjs.cn(
1573
1310
  "flex h-full flex-col gap-6",
1574
- featured ? "items-center text-center" : chunkS5RVSXDV_cjs.cn("rounded-2xl p-6", cardClass(tone))
1311
+ featured ? "items-center text-center" : chunkS5RVSXDV_cjs.cn("rounded-2xl p-6", chunkXI74P5F2_cjs.cardClass(tone))
1575
1312
  ),
1576
1313
  children: [
1577
1314
  rating && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-warning flex gap-0.5", children: [
@@ -1598,7 +1335,7 @@ var TestimonialSection = React__namespace.forwardRef(
1598
1335
  "text-pretty",
1599
1336
  featured ? chunkS5RVSXDV_cjs.cn(
1600
1337
  "text-2xl font-medium sm:text-3xl",
1601
- headingTextClass(tone)
1338
+ chunkXI74P5F2_cjs.headingTextClass(tone)
1602
1339
  ) : "text-base"
1603
1340
  ),
1604
1341
  children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: t.quote })
@@ -1606,7 +1343,7 @@ var TestimonialSection = React__namespace.forwardRef(
1606
1343
  ),
1607
1344
  /* @__PURE__ */ jsxRuntime.jsxs("figcaption", { className: "mt-auto flex items-center gap-3", children: [
1608
1345
  t.avatar && /* @__PURE__ */ jsxRuntime.jsx(
1609
- TemplateImg,
1346
+ chunkXI74P5F2_cjs.TemplateImg,
1610
1347
  {
1611
1348
  src: t.avatar,
1612
1349
  alt: "",
@@ -1621,7 +1358,7 @@ var TestimonialSection = React__namespace.forwardRef(
1621
1358
  (t.role || t.company) && /* @__PURE__ */ jsxRuntime.jsx(
1622
1359
  "span",
1623
1360
  {
1624
- className: chunkS5RVSXDV_cjs.cn("block text-sm", mutedTextClass(tone)),
1361
+ className: chunkS5RVSXDV_cjs.cn("block text-sm", chunkXI74P5F2_cjs.mutedTextClass(tone)),
1625
1362
  children: [t.role, t.company].filter(Boolean).join(", ")
1626
1363
  }
1627
1364
  )
@@ -1637,9 +1374,9 @@ var TestimonialSection = React__namespace.forwardRef(
1637
1374
  }
1638
1375
  );
1639
1376
  TestimonialSection.displayName = "TestimonialSection";
1640
- var VideoSection = React__namespace.forwardRef(
1377
+ var VideoSection = React5__namespace.forwardRef(
1641
1378
  ({ video, caption, tone = "default", align = "center", ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1642
- SectionShell,
1379
+ chunkXI74P5F2_cjs.SectionShell,
1643
1380
  {
1644
1381
  ref,
1645
1382
  "data-slot": "video-section",
@@ -1685,7 +1422,7 @@ var VideoSection = React__namespace.forwardRef(
1685
1422
  {
1686
1423
  className: chunkS5RVSXDV_cjs.cn(
1687
1424
  "mt-3 text-sm",
1688
- mutedTextClass(tone),
1425
+ chunkXI74P5F2_cjs.mutedTextClass(tone),
1689
1426
  align === "center" && "text-center"
1690
1427
  ),
1691
1428
  children: caption
@@ -1696,64 +1433,1022 @@ var VideoSection = React__namespace.forwardRef(
1696
1433
  )
1697
1434
  );
1698
1435
  VideoSection.displayName = "VideoSection";
1699
- var sections = {
1700
- hero: HeroSection,
1701
- logos: LogoCloudSection,
1702
- features: FeatureGridSection,
1703
- split: SplitContentSection,
1704
- process: ProcessStepsSection,
1705
- stats: StatsSection,
1706
- comparison: ComparisonSection,
1707
- pricing: PricingSection,
1708
- video: VideoSection,
1709
- testimonials: TestimonialSection,
1710
- resources: ResourceCardsSection,
1711
- faq: FaqSection,
1712
- "lead-form": LeadFormSection,
1713
- cta: CtaSection
1714
- };
1715
- var landingBlockTypes = [
1716
- ...Object.keys(sections),
1717
- "custom"
1718
- ];
1719
- var takesIcons = /* @__PURE__ */ new Set(["features", "process"]);
1720
- var LandingPage = React__namespace.forwardRef(
1721
- ({ blocks, icons, components, custom, actions, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, "data-slot": "landing-page", ...rest, children: blocks.map((block, i) => {
1722
- const key = block.id ?? `${block.type}-${i}`;
1723
- if (block.type === "custom") {
1724
- const Custom = ownProperty(custom, block.component);
1725
- return Custom ? /* @__PURE__ */ jsxRuntime.jsx(Custom, { id: block.id, ...block.props }, key) : null;
1726
- }
1727
- const { type, ...props } = block;
1728
- const Section = ownProperty(
1729
- sections,
1730
- type
1436
+ var BenchmarkTableSection = React5__namespace.forwardRef(
1437
+ ({
1438
+ columns,
1439
+ rows,
1440
+ rowHeader,
1441
+ caption,
1442
+ footnote,
1443
+ locale,
1444
+ tone = "default",
1445
+ components,
1446
+ title,
1447
+ ...rest
1448
+ }, ref) => {
1449
+ const formatters = columns.map(
1450
+ (col) => new Intl.NumberFormat(locale, col.format)
1731
1451
  );
1732
- if (!Section) return null;
1733
- const action = block.type === "lead-form" ? ownProperty(actions, block.action) ?? safeHref(block.action) : void 0;
1734
- if (block.type === "lead-form" && action == null) return null;
1735
- const data = { ...props };
1736
- delete data.children;
1737
- delete data.dangerouslySetInnerHTML;
1738
- return /* @__PURE__ */ jsxRuntime.jsx(
1739
- Section,
1452
+ const maxima = columns.map(
1453
+ (col) => col.bar ? Math.max(
1454
+ 1,
1455
+ ...rows.map((r) => {
1456
+ const v = r.values[col.key];
1457
+ return typeof v === "number" ? v : 0;
1458
+ })
1459
+ ) : 1
1460
+ );
1461
+ const cellBase = "px-4 py-3 tabular-nums";
1462
+ const stickyBg = tone === "brand" ? "bg-primary-900" : "bg-card";
1463
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1464
+ chunkXI74P5F2_cjs.SectionShell,
1740
1465
  {
1741
- ...data,
1466
+ ref,
1467
+ "data-slot": "benchmark-table-section",
1468
+ tone,
1469
+ title,
1742
1470
  components,
1743
- ...takesIcons.has(type) ? { icons } : {},
1744
- ...block.type === "lead-form" ? { action } : {}
1745
- },
1746
- key
1471
+ ...rest,
1472
+ children: [
1473
+ /* @__PURE__ */ jsxRuntime.jsx(
1474
+ "div",
1475
+ {
1476
+ className: chunkS5RVSXDV_cjs.cn("mt-10 overflow-x-auto rounded-2xl", chunkXI74P5F2_cjs.cardClass(tone)),
1477
+ children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "divide-border min-w-full divide-y text-sm", children: [
1478
+ (caption ?? title) && /* @__PURE__ */ jsxRuntime.jsx("caption", { className: "sr-only", children: caption ?? title }),
1479
+ /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
1480
+ /* @__PURE__ */ jsxRuntime.jsx(
1481
+ "th",
1482
+ {
1483
+ scope: "col",
1484
+ className: chunkS5RVSXDV_cjs.cn(
1485
+ "sticky start-0 z-10 px-4 py-3 text-start font-semibold",
1486
+ stickyBg
1487
+ ),
1488
+ children: rowHeader
1489
+ }
1490
+ ),
1491
+ columns.map((col) => /* @__PURE__ */ jsxRuntime.jsx(
1492
+ "th",
1493
+ {
1494
+ scope: "col",
1495
+ className: chunkS5RVSXDV_cjs.cn(
1496
+ "px-4 py-3 font-semibold whitespace-nowrap",
1497
+ col.bar ? "text-start" : "text-end",
1498
+ col.emphasis && "bg-primary-500/10"
1499
+ ),
1500
+ children: col.label
1501
+ },
1502
+ col.key
1503
+ ))
1504
+ ] }) }),
1505
+ /* @__PURE__ */ jsxRuntime.jsx("tbody", { className: "divide-border divide-y", children: rows.map((row) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
1506
+ /* @__PURE__ */ jsxRuntime.jsxs(
1507
+ "th",
1508
+ {
1509
+ scope: "row",
1510
+ className: chunkS5RVSXDV_cjs.cn(
1511
+ "sticky start-0 z-10 px-4 py-3 text-start font-medium",
1512
+ stickyBg
1513
+ ),
1514
+ children: [
1515
+ row.href ? /* @__PURE__ */ jsxRuntime.jsx(
1516
+ chunkXI74P5F2_cjs.TemplateAnchor,
1517
+ {
1518
+ href: row.href,
1519
+ components,
1520
+ className: chunkS5RVSXDV_cjs.cn(
1521
+ "underline-offset-2 hover:underline",
1522
+ chunkXI74P5F2_cjs.accentTextClass(tone)
1523
+ ),
1524
+ children: row.label
1525
+ }
1526
+ ) : row.label,
1527
+ row.sublabel && /* @__PURE__ */ jsxRuntime.jsx(
1528
+ "span",
1529
+ {
1530
+ className: chunkS5RVSXDV_cjs.cn(
1531
+ "block text-xs font-normal",
1532
+ chunkXI74P5F2_cjs.mutedTextClass(tone)
1533
+ ),
1534
+ children: row.sublabel
1535
+ }
1536
+ )
1537
+ ]
1538
+ }
1539
+ ),
1540
+ columns.map((col, c) => {
1541
+ const v = row.values[col.key];
1542
+ const shown = v == null ? "\u2014" : typeof v === "number" ? formatters[c].format(v) : v;
1543
+ return /* @__PURE__ */ jsxRuntime.jsx(
1544
+ "td",
1545
+ {
1546
+ className: chunkS5RVSXDV_cjs.cn(
1547
+ cellBase,
1548
+ col.bar ? "text-start" : "text-end whitespace-nowrap",
1549
+ col.emphasis && chunkS5RVSXDV_cjs.cn(
1550
+ "bg-primary-500/10 font-semibold",
1551
+ chunkXI74P5F2_cjs.accentTextClass(tone)
1552
+ )
1553
+ ),
1554
+ children: col.bar && typeof v === "number" ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-3", children: [
1555
+ /* @__PURE__ */ jsxRuntime.jsx(
1556
+ "span",
1557
+ {
1558
+ "aria-hidden": "true",
1559
+ className: "bg-muted h-2 w-32 max-w-full flex-none overflow-hidden rounded-full",
1560
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1561
+ "span",
1562
+ {
1563
+ className: "bg-primary-600 block h-full rounded-full",
1564
+ style: {
1565
+ width: `${Math.round(v / maxima[c] * 100)}%`
1566
+ }
1567
+ }
1568
+ )
1569
+ }
1570
+ ),
1571
+ shown
1572
+ ] }) : shown
1573
+ },
1574
+ col.key
1575
+ );
1576
+ })
1577
+ ] }, row.label)) })
1578
+ ] })
1579
+ }
1580
+ ),
1581
+ footnote && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-4 max-w-3xl text-sm", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: footnote })
1582
+ ]
1583
+ }
1747
1584
  );
1748
- }) })
1585
+ }
1749
1586
  );
1750
- LandingPage.displayName = "LandingPage";
1751
-
1752
- // src/components/LandingPage/presets.ts
1753
- var landingPresets = {
1754
- "vertical-hub": {
1755
- label: "Industry / vertical hub",
1756
- description: "One page per industry served: the sector problem, what the product does for it, proof, and a way in.",
1587
+ BenchmarkTableSection.displayName = "BenchmarkTableSection";
1588
+ var LinkGroupsSection = React5__namespace.forwardRef(({ groups, columns = 3, tone = "muted", components, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1589
+ chunkXI74P5F2_cjs.SectionShell,
1590
+ {
1591
+ ref,
1592
+ "data-slot": "link-groups-section",
1593
+ tone,
1594
+ components,
1595
+ ...rest,
1596
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1597
+ "div",
1598
+ {
1599
+ className: chunkS5RVSXDV_cjs.cn(
1600
+ "mt-10 grid gap-6",
1601
+ columns === 3 ? "lg:grid-cols-3" : "md:grid-cols-2"
1602
+ ),
1603
+ children: groups.map((group) => /* @__PURE__ */ jsxRuntime.jsxs(
1604
+ "div",
1605
+ {
1606
+ className: chunkS5RVSXDV_cjs.cn("rounded-2xl p-6", chunkXI74P5F2_cjs.cardClass(tone)),
1607
+ children: [
1608
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: chunkS5RVSXDV_cjs.cn("text-lg font-semibold", chunkXI74P5F2_cjs.headingTextClass(tone)), children: group.title }),
1609
+ group.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-1 text-sm", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: group.description }),
1610
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "mt-4 space-y-1", children: group.links.map((link) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
1611
+ chunkXI74P5F2_cjs.TemplateAnchor,
1612
+ {
1613
+ href: link.href,
1614
+ trackingId: link.trackingId,
1615
+ components,
1616
+ className: chunkS5RVSXDV_cjs.cn(
1617
+ "group flex items-center justify-between gap-2 rounded-lg px-3 py-2 text-sm font-medium transition-colors",
1618
+ tone === "brand" ? "hover:bg-white/10" : "hover:bg-primary-500/10 hover:text-primary-800 dark:hover:text-primary-300"
1619
+ ),
1620
+ children: [
1621
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: link.label }),
1622
+ /* @__PURE__ */ jsxRuntime.jsx(
1623
+ lucideReact.ArrowRight,
1624
+ {
1625
+ "aria-hidden": "true",
1626
+ className: "size-4 flex-none opacity-50 group-hover:opacity-100 rtl:-scale-x-100"
1627
+ }
1628
+ )
1629
+ ]
1630
+ }
1631
+ ) }, link.href)) })
1632
+ ]
1633
+ },
1634
+ group.title
1635
+ ))
1636
+ }
1637
+ )
1638
+ }
1639
+ ));
1640
+ LinkGroupsSection.displayName = "LinkGroupsSection";
1641
+ var MetricListSection = React5__namespace.forwardRef(
1642
+ ({
1643
+ metrics,
1644
+ takeaway,
1645
+ positive,
1646
+ labels,
1647
+ tone = "default",
1648
+ components,
1649
+ ...rest
1650
+ }, ref) => {
1651
+ const measured = metrics.some((m) => m.value);
1652
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1653
+ chunkXI74P5F2_cjs.SectionShell,
1654
+ {
1655
+ ref,
1656
+ "data-slot": "metric-list-section",
1657
+ "data-measured": measured || void 0,
1658
+ tone,
1659
+ spacing: "compact",
1660
+ status: measured ? "live" : "maturing",
1661
+ components,
1662
+ ...rest,
1663
+ children: [
1664
+ !measured && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-3 text-xs font-medium", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: labels?.preview ?? "Roadmap preview" }),
1665
+ takeaway && /* @__PURE__ */ jsxRuntime.jsx(
1666
+ "p",
1667
+ {
1668
+ className: chunkS5RVSXDV_cjs.cn(
1669
+ "mt-6 max-w-3xl rounded-xl border p-4 text-sm leading-relaxed font-medium",
1670
+ tone === "brand" ? "border-white/20 bg-white/5" : "border-success/30 bg-success/10 text-foreground"
1671
+ ),
1672
+ children: takeaway
1673
+ }
1674
+ ),
1675
+ /* @__PURE__ */ jsxRuntime.jsx(
1676
+ "ul",
1677
+ {
1678
+ className: chunkS5RVSXDV_cjs.cn(
1679
+ "mt-8 grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
1680
+ !measured && "border-border rounded-3xl border border-dashed p-4"
1681
+ ),
1682
+ children: metrics.map((metric) => /* @__PURE__ */ jsxRuntime.jsxs(
1683
+ "li",
1684
+ {
1685
+ className: chunkS5RVSXDV_cjs.cn(
1686
+ "rounded-xl p-5",
1687
+ chunkXI74P5F2_cjs.cardClass(tone),
1688
+ positive && metric.value && "border-s-success border-s-4"
1689
+ ),
1690
+ children: [
1691
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-3", children: [
1692
+ /* @__PURE__ */ jsxRuntime.jsx(
1693
+ "h3",
1694
+ {
1695
+ className: chunkS5RVSXDV_cjs.cn(
1696
+ "min-w-0 text-sm font-semibold",
1697
+ chunkXI74P5F2_cjs.headingTextClass(tone)
1698
+ ),
1699
+ children: metric.label
1700
+ }
1701
+ ),
1702
+ metric.unit && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "bg-primary-500/10 flex-none rounded-full px-2 py-0.5 text-xs font-medium", children: metric.unit })
1703
+ ] }),
1704
+ metric.value && /* @__PURE__ */ jsxRuntime.jsx(
1705
+ "p",
1706
+ {
1707
+ className: chunkS5RVSXDV_cjs.cn(
1708
+ "mt-3 text-3xl font-bold tracking-tight tabular-nums",
1709
+ chunkXI74P5F2_cjs.headingTextClass(tone)
1710
+ ),
1711
+ children: metric.value
1712
+ }
1713
+ ),
1714
+ /* @__PURE__ */ jsxRuntime.jsx(
1715
+ "p",
1716
+ {
1717
+ className: chunkS5RVSXDV_cjs.cn(
1718
+ "mt-2 text-sm leading-relaxed",
1719
+ chunkXI74P5F2_cjs.mutedTextClass(tone)
1720
+ ),
1721
+ children: metric.description
1722
+ }
1723
+ )
1724
+ ]
1725
+ },
1726
+ metric.label
1727
+ ))
1728
+ }
1729
+ )
1730
+ ]
1731
+ }
1732
+ );
1733
+ }
1734
+ );
1735
+ MetricListSection.displayName = "MetricListSection";
1736
+ var PdfEmbedSection = React5__namespace.forwardRef(
1737
+ ({
1738
+ title,
1739
+ src,
1740
+ downloadAs,
1741
+ aspectRatio = 0.5625,
1742
+ notice,
1743
+ labels,
1744
+ tone = "muted",
1745
+ align = "center",
1746
+ components,
1747
+ ...rest
1748
+ }, ref) => {
1749
+ const pdfSrc = chunkXI74P5F2_cjs.safeHref(src);
1750
+ const viewerSrc = pdfSrc && (pdfSrc.includes("#") ? pdfSrc : `${pdfSrc}#view=FitH`);
1751
+ const onBrand = tone === "brand";
1752
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1753
+ chunkXI74P5F2_cjs.SectionShell,
1754
+ {
1755
+ ref,
1756
+ "data-slot": "pdf-embed-section",
1757
+ title,
1758
+ tone,
1759
+ align,
1760
+ components,
1761
+ ...rest,
1762
+ children: [
1763
+ notice && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "border-primary-500/30 bg-primary-500/10 mx-auto mt-8 flex max-w-3xl items-start gap-3 rounded-xl border px-4 py-3 text-start text-sm", children: [
1764
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Info, { "aria-hidden": "true", className: "mt-0.5 size-5 flex-none" }),
1765
+ notice
1766
+ ] }),
1767
+ pdfSrc && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1768
+ /* @__PURE__ */ jsxRuntime.jsx(
1769
+ "div",
1770
+ {
1771
+ className: "border-border bg-card relative mt-10 overflow-hidden rounded-2xl border shadow-lg",
1772
+ style: { paddingTop: `${(aspectRatio * 100).toFixed(4)}%` },
1773
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1774
+ "object",
1775
+ {
1776
+ data: viewerSrc,
1777
+ type: "application/pdf",
1778
+ "aria-label": title,
1779
+ className: "absolute inset-0 size-full",
1780
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1781
+ "p",
1782
+ {
1783
+ className: chunkS5RVSXDV_cjs.cn(
1784
+ "flex size-full items-center justify-center p-6 text-center text-sm",
1785
+ chunkXI74P5F2_cjs.mutedTextClass("default")
1786
+ ),
1787
+ children: /* @__PURE__ */ jsxRuntime.jsx("a", { href: pdfSrc, className: "underline underline-offset-2", children: labels?.fallback ?? "Open the PDF" })
1788
+ }
1789
+ )
1790
+ }
1791
+ )
1792
+ }
1793
+ ),
1794
+ /* @__PURE__ */ jsxRuntime.jsxs(
1795
+ "div",
1796
+ {
1797
+ className: chunkS5RVSXDV_cjs.cn(
1798
+ "mt-6 flex flex-wrap gap-3",
1799
+ align === "center" && "justify-center"
1800
+ ),
1801
+ children: [
1802
+ /* @__PURE__ */ jsxRuntime.jsxs(
1803
+ "a",
1804
+ {
1805
+ href: pdfSrc,
1806
+ download: downloadAs ?? true,
1807
+ className: chunkS5RVSXDV_cjs.cn(
1808
+ chunkDXEPYK3I_cjs.buttonVariants({ variant: "primary" }),
1809
+ onBrand && "text-primary-900 hover:bg-primary-50 bg-white"
1810
+ ),
1811
+ children: [
1812
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Download, { "aria-hidden": "true", className: "size-4" }),
1813
+ labels?.download ?? "Download PDF"
1814
+ ]
1815
+ }
1816
+ ),
1817
+ /* @__PURE__ */ jsxRuntime.jsxs(
1818
+ "a",
1819
+ {
1820
+ href: pdfSrc,
1821
+ target: "_blank",
1822
+ rel: "noopener noreferrer",
1823
+ className: chunkS5RVSXDV_cjs.cn(
1824
+ chunkDXEPYK3I_cjs.buttonVariants({ variant: "outline" }),
1825
+ onBrand && "border-white/70 text-white hover:bg-white/10"
1826
+ ),
1827
+ children: [
1828
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ExternalLink, { "aria-hidden": "true", className: "size-4" }),
1829
+ labels?.open ?? "Open in new tab"
1830
+ ]
1831
+ }
1832
+ )
1833
+ ]
1834
+ }
1835
+ )
1836
+ ] })
1837
+ ]
1838
+ }
1839
+ );
1840
+ }
1841
+ );
1842
+ PdfEmbedSection.displayName = "PdfEmbedSection";
1843
+ var barClass = {
1844
+ primary: "bg-primary-600",
1845
+ accent: "bg-accent",
1846
+ success: "bg-success"
1847
+ };
1848
+ var RankedListSection = React5__namespace.forwardRef(
1849
+ ({
1850
+ lists,
1851
+ numbered,
1852
+ layout = "stacked",
1853
+ bar = "primary",
1854
+ locale,
1855
+ tone = "default",
1856
+ components,
1857
+ ...rest
1858
+ }, ref) => {
1859
+ const format = new Intl.NumberFormat(locale);
1860
+ return /* @__PURE__ */ jsxRuntime.jsx(
1861
+ chunkXI74P5F2_cjs.SectionShell,
1862
+ {
1863
+ ref,
1864
+ "data-slot": "ranked-list-section",
1865
+ tone,
1866
+ components,
1867
+ ...rest,
1868
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1869
+ "div",
1870
+ {
1871
+ className: chunkS5RVSXDV_cjs.cn(
1872
+ "mt-10 grid gap-6",
1873
+ lists.length > 1 && "lg:grid-cols-2"
1874
+ ),
1875
+ children: lists.map((list, l) => {
1876
+ const max = Math.max(1, ...list.items.map((i) => i.value));
1877
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1878
+ "div",
1879
+ {
1880
+ className: chunkS5RVSXDV_cjs.cn(
1881
+ layout === "inline" && chunkS5RVSXDV_cjs.cn("rounded-2xl p-6", chunkXI74P5F2_cjs.cardClass(tone))
1882
+ ),
1883
+ children: [
1884
+ list.title && /* @__PURE__ */ jsxRuntime.jsx(
1885
+ "h3",
1886
+ {
1887
+ className: chunkS5RVSXDV_cjs.cn(
1888
+ "mb-4 text-lg font-semibold",
1889
+ chunkXI74P5F2_cjs.headingTextClass(tone)
1890
+ ),
1891
+ children: list.title
1892
+ }
1893
+ ),
1894
+ /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "space-y-3", children: list.items.map((item, i) => {
1895
+ const label = item.href ? /* @__PURE__ */ jsxRuntime.jsx(
1896
+ chunkXI74P5F2_cjs.TemplateAnchor,
1897
+ {
1898
+ href: item.href,
1899
+ components,
1900
+ className: chunkS5RVSXDV_cjs.cn(
1901
+ "font-medium underline-offset-2 hover:underline",
1902
+ chunkXI74P5F2_cjs.accentTextClass(tone)
1903
+ ),
1904
+ children: item.label
1905
+ }
1906
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
1907
+ "span",
1908
+ {
1909
+ className: chunkS5RVSXDV_cjs.cn("font-medium", chunkXI74P5F2_cjs.headingTextClass(tone)),
1910
+ children: item.label
1911
+ }
1912
+ );
1913
+ const track = /* @__PURE__ */ jsxRuntime.jsx(
1914
+ "span",
1915
+ {
1916
+ "aria-hidden": "true",
1917
+ className: chunkS5RVSXDV_cjs.cn(
1918
+ "block h-2 overflow-hidden rounded-full",
1919
+ tone === "brand" ? "bg-white/10" : "bg-muted"
1920
+ ),
1921
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1922
+ "span",
1923
+ {
1924
+ className: chunkS5RVSXDV_cjs.cn(
1925
+ "block h-full rounded-full",
1926
+ barClass[bar]
1927
+ ),
1928
+ style: {
1929
+ width: `${Math.round(item.value / max * 100)}%`
1930
+ }
1931
+ }
1932
+ )
1933
+ }
1934
+ );
1935
+ const rank = numbered && /* @__PURE__ */ jsxRuntime.jsx(
1936
+ "span",
1937
+ {
1938
+ className: chunkS5RVSXDV_cjs.cn(
1939
+ "text-sm font-semibold tabular-nums",
1940
+ chunkXI74P5F2_cjs.mutedTextClass(tone)
1941
+ ),
1942
+ children: String(i + 1).padStart(2, "0")
1943
+ }
1944
+ );
1945
+ const value = item.display ?? format.format(item.value);
1946
+ return layout === "inline" ? /* @__PURE__ */ jsxRuntime.jsxs(
1947
+ "li",
1948
+ {
1949
+ className: "flex items-center gap-3 text-sm",
1950
+ children: [
1951
+ rank,
1952
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-28 flex-none truncate sm:w-36", children: label }),
1953
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1", children: track }),
1954
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-20 flex-none text-end font-semibold tabular-nums", children: value })
1955
+ ]
1956
+ },
1957
+ item.label
1958
+ ) : /* @__PURE__ */ jsxRuntime.jsxs(
1959
+ "li",
1960
+ {
1961
+ className: chunkS5RVSXDV_cjs.cn("rounded-xl p-4", chunkXI74P5F2_cjs.cardClass(tone)),
1962
+ children: [
1963
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-4", children: [
1964
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-3", children: [
1965
+ rank,
1966
+ label
1967
+ ] }),
1968
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: chunkS5RVSXDV_cjs.cn("text-xs", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: [
1969
+ item.note ?? value,
1970
+ item.note && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "sr-only", children: [
1971
+ ": ",
1972
+ value
1973
+ ] })
1974
+ ] })
1975
+ ] }),
1976
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mt-2 block", children: track })
1977
+ ]
1978
+ },
1979
+ item.label
1980
+ );
1981
+ }) })
1982
+ ]
1983
+ },
1984
+ list.title ?? l
1985
+ );
1986
+ })
1987
+ }
1988
+ )
1989
+ }
1990
+ );
1991
+ }
1992
+ );
1993
+ RankedListSection.displayName = "RankedListSection";
1994
+ var ReportByline = React5__namespace.forwardRef(
1995
+ ({
1996
+ authors,
1997
+ published,
1998
+ updated,
1999
+ labels,
2000
+ tone = "default",
2001
+ components,
2002
+ className,
2003
+ ...rest
2004
+ }, ref) => {
2005
+ const headingId = React5__namespace.useId();
2006
+ return /* @__PURE__ */ jsxRuntime.jsx(
2007
+ "section",
2008
+ {
2009
+ ref,
2010
+ "data-slot": "report-byline",
2011
+ "data-tone": tone,
2012
+ "aria-labelledby": headingId,
2013
+ className: chunkS5RVSXDV_cjs.cn(
2014
+ "border-border border-t py-8",
2015
+ chunkXI74P5F2_cjs.toneClass(tone),
2016
+ className
2017
+ ),
2018
+ ...rest,
2019
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkXI74P5F2_cjs.containerClass(), children: [
2020
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { id: headingId, className: "sr-only", children: labels?.heading ?? "About the author" }),
2021
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-6", children: authors.map((author) => /* @__PURE__ */ jsxRuntime.jsxs(
2022
+ "li",
2023
+ {
2024
+ className: "flex flex-wrap items-center gap-4",
2025
+ children: [
2026
+ author.avatar && /* @__PURE__ */ jsxRuntime.jsx(
2027
+ chunkXI74P5F2_cjs.TemplateImg,
2028
+ {
2029
+ ...author.avatar,
2030
+ width: author.avatar.width ?? 48,
2031
+ height: author.avatar.height ?? 48,
2032
+ components,
2033
+ className: "ring-border size-12 flex-none rounded-full object-cover ring-1"
2034
+ }
2035
+ ),
2036
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
2037
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: chunkS5RVSXDV_cjs.cn("text-sm", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: [
2038
+ labels?.by ?? "By",
2039
+ " ",
2040
+ author.href ? /* @__PURE__ */ jsxRuntime.jsx(
2041
+ chunkXI74P5F2_cjs.TemplateAnchor,
2042
+ {
2043
+ href: author.href,
2044
+ components,
2045
+ className: chunkS5RVSXDV_cjs.cn(
2046
+ "font-semibold underline-offset-2 hover:underline",
2047
+ chunkXI74P5F2_cjs.headingTextClass(tone)
2048
+ ),
2049
+ children: author.name
2050
+ }
2051
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
2052
+ "span",
2053
+ {
2054
+ className: chunkS5RVSXDV_cjs.cn("font-semibold", chunkXI74P5F2_cjs.headingTextClass(tone)),
2055
+ children: author.name
2056
+ }
2057
+ ),
2058
+ author.role && /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
2059
+ " \xB7 ",
2060
+ author.role
2061
+ ] })
2062
+ ] }),
2063
+ (published || updated) && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: chunkS5RVSXDV_cjs.cn("text-sm", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: [
2064
+ published && `${labels?.published ?? "Published"} ${published}`,
2065
+ published && updated && " \xB7 ",
2066
+ updated && `${labels?.updated ?? "Updated"} ${updated}`
2067
+ ] })
2068
+ ] }),
2069
+ author.profiles && author.profiles.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ms-auto flex flex-wrap gap-2", children: author.profiles.map((profile) => {
2070
+ const href = chunkXI74P5F2_cjs.safeHref(profile.href);
2071
+ if (!href) return null;
2072
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2073
+ "a",
2074
+ {
2075
+ href,
2076
+ target: "_blank",
2077
+ rel: "noopener noreferrer",
2078
+ "data-track": profile.trackingId,
2079
+ className: "border-border hover:border-primary-600 hover:text-primary-800 dark:hover:text-primary-300 inline-flex items-center rounded-full border px-3 py-1.5 text-sm font-medium",
2080
+ children: [
2081
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "sr-only", children: [
2082
+ author.name,
2083
+ " on "
2084
+ ] }),
2085
+ profile.label
2086
+ ]
2087
+ },
2088
+ profile.href
2089
+ );
2090
+ }) })
2091
+ ]
2092
+ },
2093
+ author.name
2094
+ )) })
2095
+ ] })
2096
+ }
2097
+ );
2098
+ }
2099
+ );
2100
+ ReportByline.displayName = "ReportByline";
2101
+ var ReportLegend = React5__namespace.forwardRef(
2102
+ ({
2103
+ entries,
2104
+ title = "How to read the data",
2105
+ tone = "muted",
2106
+ components,
2107
+ ...rest
2108
+ }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
2109
+ chunkXI74P5F2_cjs.SectionShell,
2110
+ {
2111
+ ref,
2112
+ "data-slot": "report-legend",
2113
+ title,
2114
+ tone,
2115
+ spacing: "compact",
2116
+ components,
2117
+ ...rest,
2118
+ children: /* @__PURE__ */ jsxRuntime.jsx("dl", { className: "mt-6 grid gap-3 sm:grid-cols-2 lg:grid-cols-3", children: entries.map((entry) => /* @__PURE__ */ jsxRuntime.jsxs(
2119
+ "div",
2120
+ {
2121
+ className: chunkS5RVSXDV_cjs.cn(
2122
+ "flex flex-col gap-2 rounded-xl p-4",
2123
+ chunkXI74P5F2_cjs.cardClass(tone)
2124
+ ),
2125
+ children: [
2126
+ /* @__PURE__ */ jsxRuntime.jsx("dt", { children: /* @__PURE__ */ jsxRuntime.jsx(
2127
+ chunkXI74P5F2_cjs.MetricStatusBadge,
2128
+ {
2129
+ status: entry.status,
2130
+ label: entry.label,
2131
+ onDark: tone === "brand"
2132
+ }
2133
+ ) }),
2134
+ /* @__PURE__ */ jsxRuntime.jsx("dd", { className: chunkS5RVSXDV_cjs.cn("text-sm leading-snug", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: entry.description })
2135
+ ]
2136
+ },
2137
+ entry.status
2138
+ )) })
2139
+ }
2140
+ )
2141
+ );
2142
+ ReportLegend.displayName = "ReportLegend";
2143
+ var ReportMethodology = React5__namespace.forwardRef(
2144
+ ({
2145
+ sources,
2146
+ citation,
2147
+ notes,
2148
+ resources,
2149
+ labels,
2150
+ tone = "muted",
2151
+ components,
2152
+ ...rest
2153
+ }, ref) => {
2154
+ const card = chunkS5RVSXDV_cjs.cn("rounded-2xl p-6", chunkXI74P5F2_cjs.cardClass(tone));
2155
+ const subheading = chunkS5RVSXDV_cjs.cn(
2156
+ "text-sm font-semibold tracking-wide uppercase",
2157
+ chunkXI74P5F2_cjs.mutedTextClass(tone)
2158
+ );
2159
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2160
+ chunkXI74P5F2_cjs.SectionShell,
2161
+ {
2162
+ ref,
2163
+ "data-slot": "report-methodology",
2164
+ tone,
2165
+ components,
2166
+ ...rest,
2167
+ children: [
2168
+ /* @__PURE__ */ jsxRuntime.jsx("dl", { className: "mt-10 grid gap-6 sm:grid-cols-2", children: sources.map((source) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: card, children: [
2169
+ /* @__PURE__ */ jsxRuntime.jsx("dt", { className: chunkS5RVSXDV_cjs.cn("font-semibold", chunkXI74P5F2_cjs.headingTextClass(tone)), children: source.label }),
2170
+ /* @__PURE__ */ jsxRuntime.jsxs("dd", { className: chunkS5RVSXDV_cjs.cn("mt-2 text-sm", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: [
2171
+ source.description,
2172
+ chunkXI74P5F2_cjs.safeHref(source.href) && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2173
+ " ",
2174
+ /* @__PURE__ */ jsxRuntime.jsxs(
2175
+ "a",
2176
+ {
2177
+ href: chunkXI74P5F2_cjs.safeHref(source.href),
2178
+ rel: "noopener noreferrer",
2179
+ className: chunkS5RVSXDV_cjs.cn(
2180
+ "font-medium underline underline-offset-2",
2181
+ chunkXI74P5F2_cjs.accentTextClass(tone)
2182
+ ),
2183
+ children: [
2184
+ labels?.sourceLink ?? "Source",
2185
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "sr-only", children: [
2186
+ ": ",
2187
+ source.label
2188
+ ] })
2189
+ ]
2190
+ }
2191
+ )
2192
+ ] })
2193
+ ] })
2194
+ ] }, source.label)) }),
2195
+ citation && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkS5RVSXDV_cjs.cn(card, "mt-10 border-dashed"), children: [
2196
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: subheading, children: labels?.citation ?? "How to cite this report" }),
2197
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 font-mono text-sm break-words select-all", children: citation })
2198
+ ] }),
2199
+ notes?.map((note) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkS5RVSXDV_cjs.cn(card, "mt-6"), children: [
2200
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: subheading, children: note.title }),
2201
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-3 max-w-3xl text-sm", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: note.body })
2202
+ ] }, note.title)),
2203
+ resources && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkS5RVSXDV_cjs.cn(card, "mt-6"), children: [
2204
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: subheading, children: resources.title }),
2205
+ resources.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-3 max-w-3xl text-sm", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: resources.description }),
2206
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 flex flex-wrap gap-3", children: resources.links.map((link) => /* @__PURE__ */ jsxRuntime.jsx(
2207
+ chunkXI74P5F2_cjs.TemplateAnchor,
2208
+ {
2209
+ href: link.href,
2210
+ trackingId: link.trackingId,
2211
+ components,
2212
+ className: chunkS5RVSXDV_cjs.cn(
2213
+ "border-border hover:border-primary-600 inline-flex items-center rounded-full border px-4 py-2 text-sm font-medium",
2214
+ chunkXI74P5F2_cjs.accentTextClass(tone)
2215
+ ),
2216
+ children: link.label
2217
+ },
2218
+ link.href
2219
+ )) })
2220
+ ] })
2221
+ ]
2222
+ }
2223
+ );
2224
+ }
2225
+ );
2226
+ ReportMethodology.displayName = "ReportMethodology";
2227
+
2228
+ // src/components/TileCartogramSection/tiles.ts
2229
+ var grid = [
2230
+ ["AK", "Alaska", 0, 0],
2231
+ ["ME", "Maine", 0, 10],
2232
+ ["VT", "Vermont", 1, 9],
2233
+ ["NH", "New Hampshire", 1, 10],
2234
+ ["WA", "Washington", 2, 0],
2235
+ ["ID", "Idaho", 2, 1],
2236
+ ["MT", "Montana", 2, 2],
2237
+ ["ND", "North Dakota", 2, 3],
2238
+ ["MN", "Minnesota", 2, 4],
2239
+ ["IL", "Illinois", 2, 5],
2240
+ ["WI", "Wisconsin", 2, 6],
2241
+ ["MI", "Michigan", 2, 8],
2242
+ ["NY", "New York", 2, 9],
2243
+ ["MA", "Massachusetts", 2, 10],
2244
+ ["OR", "Oregon", 3, 0],
2245
+ ["NV", "Nevada", 3, 1],
2246
+ ["WY", "Wyoming", 3, 2],
2247
+ ["SD", "South Dakota", 3, 3],
2248
+ ["IA", "Iowa", 3, 4],
2249
+ ["IN", "Indiana", 3, 5],
2250
+ ["OH", "Ohio", 3, 6],
2251
+ ["PA", "Pennsylvania", 3, 7],
2252
+ ["NJ", "New Jersey", 3, 8],
2253
+ ["CT", "Connecticut", 3, 9],
2254
+ ["RI", "Rhode Island", 3, 10],
2255
+ ["CA", "California", 4, 0],
2256
+ ["UT", "Utah", 4, 1],
2257
+ ["CO", "Colorado", 4, 2],
2258
+ ["NE", "Nebraska", 4, 3],
2259
+ ["MO", "Missouri", 4, 4],
2260
+ ["KY", "Kentucky", 4, 5],
2261
+ ["WV", "West Virginia", 4, 6],
2262
+ ["VA", "Virginia", 4, 7],
2263
+ ["MD", "Maryland", 4, 8],
2264
+ ["DE", "Delaware", 4, 9],
2265
+ ["AZ", "Arizona", 5, 1],
2266
+ ["NM", "New Mexico", 5, 2],
2267
+ ["KS", "Kansas", 5, 3],
2268
+ ["AR", "Arkansas", 5, 4],
2269
+ ["TN", "Tennessee", 5, 5],
2270
+ ["NC", "North Carolina", 5, 6],
2271
+ ["SC", "South Carolina", 5, 7],
2272
+ ["DC", "District of Columbia", 5, 8],
2273
+ ["OK", "Oklahoma", 6, 3],
2274
+ ["LA", "Louisiana", 6, 4],
2275
+ ["MS", "Mississippi", 6, 5],
2276
+ ["AL", "Alabama", 6, 6],
2277
+ ["GA", "Georgia", 6, 7],
2278
+ ["HI", "Hawaii", 7, 0],
2279
+ ["TX", "Texas", 7, 3],
2280
+ ["FL", "Florida", 7, 7]
2281
+ ];
2282
+ var usStateTiles = grid.map(
2283
+ ([code, name, row, col]) => ({ code, name, row, col })
2284
+ );
2285
+ function quartileBuckets(values) {
2286
+ const sorted = Object.values(values).filter((v) => typeof v === "number").sort((a, b) => a - b);
2287
+ const q = (p) => sorted[Math.floor((sorted.length - 1) * p)];
2288
+ const out = {};
2289
+ for (const [code, v] of Object.entries(values)) {
2290
+ out[code] = typeof v !== "number" || sorted.length === 0 ? 0 : v <= q(0.25) ? 1 : v <= q(0.5) ? 2 : v <= q(0.75) ? 3 : 4;
2291
+ }
2292
+ return out;
2293
+ }
2294
+ var bucketClass = {
2295
+ 0: "bg-muted text-muted-foreground",
2296
+ 1: "bg-primary-600/20 text-foreground",
2297
+ 2: "bg-primary-600/40 text-foreground",
2298
+ 3: "bg-primary-800 text-white",
2299
+ 4: "bg-primary-950 text-white"
2300
+ };
2301
+ var TileCartogramSection = React5__namespace.forwardRef(
2302
+ ({
2303
+ values,
2304
+ legend,
2305
+ layout = usStateTiles,
2306
+ mapTitle,
2307
+ mapDescription,
2308
+ tone = "default",
2309
+ components,
2310
+ ...rest
2311
+ }, ref) => {
2312
+ const columns = Math.max(...layout.map((t) => t.col)) + 1;
2313
+ return /* @__PURE__ */ jsxRuntime.jsx(
2314
+ chunkXI74P5F2_cjs.SectionShell,
2315
+ {
2316
+ ref,
2317
+ "data-slot": "tile-cartogram-section",
2318
+ tone,
2319
+ components,
2320
+ ...rest,
2321
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkS5RVSXDV_cjs.cn("mt-10 rounded-2xl p-6", chunkXI74P5F2_cjs.cardClass(tone)), children: [
2322
+ mapTitle && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: chunkS5RVSXDV_cjs.cn("text-lg font-semibold", chunkXI74P5F2_cjs.headingTextClass(tone)), children: mapTitle }),
2323
+ mapDescription && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkS5RVSXDV_cjs.cn("mt-1 text-sm", chunkXI74P5F2_cjs.mutedTextClass(tone)), children: mapDescription }),
2324
+ /* @__PURE__ */ jsxRuntime.jsx(
2325
+ "ul",
2326
+ {
2327
+ className: "mx-auto mt-6 grid w-full max-w-xl gap-1",
2328
+ style: {
2329
+ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`
2330
+ },
2331
+ children: layout.map((tile) => {
2332
+ const value = values[tile.code];
2333
+ const bucket = value?.bucket ?? 0;
2334
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2335
+ "li",
2336
+ {
2337
+ title: value?.detail ? `${tile.name}: ${value.detail}` : tile.name,
2338
+ style: {
2339
+ gridColumnStart: tile.col + 1,
2340
+ gridRowStart: tile.row + 1
2341
+ },
2342
+ className: chunkS5RVSXDV_cjs.cn(
2343
+ "flex aspect-square items-center justify-center rounded-md text-[9px] font-semibold sm:text-[11px]",
2344
+ bucketClass[bucket]
2345
+ ),
2346
+ children: [
2347
+ /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", children: tile.code }),
2348
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "sr-only", children: [
2349
+ tile.name,
2350
+ value?.detail ? `: ${value.detail}` : ""
2351
+ ] })
2352
+ ]
2353
+ },
2354
+ tile.code
2355
+ );
2356
+ })
2357
+ }
2358
+ ),
2359
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "mt-6 flex flex-wrap items-center justify-center gap-x-4 gap-y-2 text-xs", children: legend.map((entry) => /* @__PURE__ */ jsxRuntime.jsxs(
2360
+ "li",
2361
+ {
2362
+ className: "inline-flex items-center gap-1.5",
2363
+ children: [
2364
+ /* @__PURE__ */ jsxRuntime.jsx(
2365
+ "span",
2366
+ {
2367
+ "aria-hidden": "true",
2368
+ className: chunkS5RVSXDV_cjs.cn(
2369
+ "ring-border size-3 rounded ring-1",
2370
+ bucketClass[entry.bucket]
2371
+ )
2372
+ }
2373
+ ),
2374
+ entry.label
2375
+ ]
2376
+ },
2377
+ entry.bucket
2378
+ )) })
2379
+ ] })
2380
+ }
2381
+ );
2382
+ }
2383
+ );
2384
+ TileCartogramSection.displayName = "TileCartogramSection";
2385
+ var sections = {
2386
+ hero: HeroSection,
2387
+ logos: LogoCloudSection,
2388
+ features: FeatureGridSection,
2389
+ split: SplitContentSection,
2390
+ process: ProcessStepsSection,
2391
+ stats: StatsSection,
2392
+ comparison: ComparisonSection,
2393
+ pricing: PricingSection,
2394
+ video: VideoSection,
2395
+ testimonials: TestimonialSection,
2396
+ resources: ResourceCardsSection,
2397
+ faq: FaqSection,
2398
+ "lead-form": LeadFormSection,
2399
+ cta: CtaSection,
2400
+ "report-legend": ReportLegend,
2401
+ "benchmark-table": BenchmarkTableSection,
2402
+ "ranked-list": RankedListSection,
2403
+ "tile-cartogram": TileCartogramSection,
2404
+ "metric-list": MetricListSection,
2405
+ methodology: ReportMethodology,
2406
+ byline: ReportByline,
2407
+ "link-groups": LinkGroupsSection,
2408
+ "pdf-embed": PdfEmbedSection
2409
+ };
2410
+ var landingBlockTypes = [
2411
+ ...Object.keys(sections),
2412
+ "custom"
2413
+ ];
2414
+ var takesIcons = /* @__PURE__ */ new Set(["features", "process"]);
2415
+ var LandingPage = React5__namespace.forwardRef(
2416
+ ({ blocks, icons, components, custom, actions, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, "data-slot": "landing-page", ...rest, children: blocks.map((block, i) => {
2417
+ const key = block.id ?? `${block.type}-${i}`;
2418
+ if (block.type === "custom") {
2419
+ const Custom = chunkXI74P5F2_cjs.ownProperty(custom, block.component);
2420
+ return Custom ? /* @__PURE__ */ jsxRuntime.jsx(Custom, { id: block.id, ...block.props }, key) : null;
2421
+ }
2422
+ const { type, ...props } = block;
2423
+ const Section = chunkXI74P5F2_cjs.ownProperty(
2424
+ sections,
2425
+ type
2426
+ );
2427
+ if (!Section) return null;
2428
+ const action = block.type === "lead-form" ? chunkXI74P5F2_cjs.ownProperty(actions, block.action) ?? chunkXI74P5F2_cjs.safeHref(block.action) : void 0;
2429
+ if (block.type === "lead-form" && action == null) return null;
2430
+ const data = { ...props };
2431
+ delete data.children;
2432
+ delete data.dangerouslySetInnerHTML;
2433
+ return /* @__PURE__ */ jsxRuntime.jsx(
2434
+ Section,
2435
+ {
2436
+ ...data,
2437
+ components,
2438
+ ...takesIcons.has(type) ? { icons } : {},
2439
+ ...block.type === "lead-form" ? { action } : {}
2440
+ },
2441
+ key
2442
+ );
2443
+ }) })
2444
+ );
2445
+ LandingPage.displayName = "LandingPage";
2446
+
2447
+ // src/components/LandingPage/presets.ts
2448
+ var landingPresets = {
2449
+ "vertical-hub": {
2450
+ label: "Industry / vertical hub",
2451
+ description: "One page per industry served: the sector problem, what the product does for it, proof, and a way in.",
1757
2452
  sequence: [
1758
2453
  "hero",
1759
2454
  "logos",
@@ -1824,14 +2519,38 @@ var landingPresets = {
1824
2519
  "cta"
1825
2520
  ],
1826
2521
  required: ["hero", "pricing", "faq"]
2522
+ },
2523
+ "benchmark-report": {
2524
+ label: "Benchmark report",
2525
+ description: "A published data report: headline findings, the figures with their provenance, how they were built, and who wrote it.",
2526
+ sequence: [
2527
+ "hero",
2528
+ "stats",
2529
+ "report-legend",
2530
+ "features",
2531
+ "benchmark-table",
2532
+ "tile-cartogram",
2533
+ "ranked-list",
2534
+ "metric-list",
2535
+ "methodology",
2536
+ "byline",
2537
+ "link-groups",
2538
+ "pdf-embed",
2539
+ "lead-form",
2540
+ "cta"
2541
+ ],
2542
+ required: ["hero", "methodology"]
1827
2543
  }
1828
2544
  };
1829
2545
  var headedItems = /* @__PURE__ */ new Set([
1830
2546
  "features",
1831
2547
  "process",
1832
2548
  "pricing",
1833
- "resources"
2549
+ "resources",
2550
+ "metric-list",
2551
+ "link-groups"
1834
2552
  ]);
2553
+ var rendersH3 = (b) => headedItems.has(b.type) || b.type === "ranked-list" && b.lists.some((l) => l.title) || b.type === "tile-cartogram" && !!b.mapTitle || b.type === "methodology" && !!(b.citation || b.notes?.length || b.resources);
1835
2554
  function validateLandingPage(blocks, preset) {
1836
2555
  const issues = [];
1837
2556
  const types = blocks.map((b) => b.type);
@@ -1843,7 +2562,7 @@ function validateLandingPage(blocks, preset) {
1843
2562
  index,
1844
2563
  message: `Unknown block type "${b.type}": the renderer skips this block.`
1845
2564
  });
1846
- if (b.type === "lead-form" && safeHref(b.action) == null)
2565
+ if (b.type === "lead-form" && chunkXI74P5F2_cjs.safeHref(b.action) == null)
1847
2566
  issues.push({
1848
2567
  severity: "error",
1849
2568
  index,
@@ -1896,12 +2615,24 @@ function validateLandingPage(blocks, preset) {
1896
2615
  });
1897
2616
  });
1898
2617
  blocks.forEach((b, index) => {
1899
- if (headedItems.has(b.type) && !("title" in b && b.title))
2618
+ if (rendersH3(b) && !("title" in b && b.title))
1900
2619
  issues.push({
1901
2620
  severity: "warning",
1902
2621
  index,
1903
2622
  message: `"${b.type}" has no title, so its h3 item titles skip the h2 level.`
1904
2623
  });
2624
+ if (b.type === "benchmark-table") {
2625
+ const keys = new Set(b.columns.map((c) => c.key));
2626
+ b.rows.forEach((row) => {
2627
+ const unknown = Object.keys(row.values).filter((k) => !keys.has(k));
2628
+ if (unknown.length)
2629
+ issues.push({
2630
+ severity: "warning",
2631
+ index,
2632
+ message: `Benchmark row "${row.label}" has values for unknown columns: ${unknown.join(", ")}.`
2633
+ });
2634
+ });
2635
+ }
1905
2636
  if (b.type !== "comparison") return;
1906
2637
  b.rows.forEach((row, r) => {
1907
2638
  if (row.values.length !== b.columns.length)
@@ -1927,9 +2658,11 @@ function validateLandingPage(blocks, preset) {
1927
2658
  message: `Missing required "${type}" block for the ${spec.label} preset.`
1928
2659
  });
1929
2660
  let last = -1;
2661
+ const placed = /* @__PURE__ */ new Set();
1930
2662
  blocks.forEach((b, index) => {
1931
2663
  const rank = spec.sequence.indexOf(b.type);
1932
- if (rank === -1) return;
2664
+ if (rank === -1 || placed.has(b.type)) return;
2665
+ placed.add(b.type);
1933
2666
  if (rank < last)
1934
2667
  issues.push({
1935
2668
  severity: "warning",
@@ -1941,6 +2674,7 @@ function validateLandingPage(blocks, preset) {
1941
2674
  return issues;
1942
2675
  }
1943
2676
 
2677
+ exports.BenchmarkTableSection = BenchmarkTableSection;
1944
2678
  exports.ComparisonSection = ComparisonSection;
1945
2679
  exports.CtaSection = CtaSection;
1946
2680
  exports.FaqSection = FaqSection;
@@ -1948,20 +2682,26 @@ exports.FeatureGridSection = FeatureGridSection;
1948
2682
  exports.HeroSection = HeroSection;
1949
2683
  exports.LandingPage = LandingPage;
1950
2684
  exports.LeadFormSection = LeadFormSection;
2685
+ exports.LinkGroupsSection = LinkGroupsSection;
1951
2686
  exports.LogoCloudSection = LogoCloudSection;
2687
+ exports.MetricListSection = MetricListSection;
2688
+ exports.PdfEmbedSection = PdfEmbedSection;
1952
2689
  exports.PricingSection = PricingSection;
1953
2690
  exports.ProcessStepsSection = ProcessStepsSection;
2691
+ exports.RankedListSection = RankedListSection;
2692
+ exports.ReportByline = ReportByline;
2693
+ exports.ReportLegend = ReportLegend;
2694
+ exports.ReportMethodology = ReportMethodology;
1954
2695
  exports.ResourceCardsSection = ResourceCardsSection;
1955
- exports.SectionHeading = SectionHeading;
1956
- exports.SectionShell = SectionShell;
1957
2696
  exports.SplitContentSection = SplitContentSection;
1958
2697
  exports.StatsSection = StatsSection;
1959
- exports.TemplateIcon = TemplateIcon;
1960
2698
  exports.TestimonialSection = TestimonialSection;
2699
+ exports.TileCartogramSection = TileCartogramSection;
1961
2700
  exports.VideoSection = VideoSection;
1962
2701
  exports.defaultLeadFormFields = defaultLeadFormFields;
1963
2702
  exports.landingPresets = landingPresets;
1964
- exports.templateIcons = templateIcons;
2703
+ exports.quartileBuckets = quartileBuckets;
2704
+ exports.usStateTiles = usStateTiles;
1965
2705
  exports.validateLandingPage = validateLandingPage;
1966
- //# sourceMappingURL=chunk-WCDJFMZO.cjs.map
1967
- //# sourceMappingURL=chunk-WCDJFMZO.cjs.map
2706
+ //# sourceMappingURL=chunk-ADW7ZYCY.cjs.map
2707
+ //# sourceMappingURL=chunk-ADW7ZYCY.cjs.map