@mdxui/tremor 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +255 -0
  2. package/dist/dashboard/components/index.d.ts +355 -0
  3. package/dist/dashboard/components/index.js +549 -0
  4. package/dist/dashboard/components/index.js.map +1 -0
  5. package/dist/dashboard/index.d.ts +275 -0
  6. package/dist/dashboard/index.js +1062 -0
  7. package/dist/dashboard/index.js.map +1 -0
  8. package/dist/database/index.d.ts +334 -0
  9. package/dist/database/index.js +474 -0
  10. package/dist/database/index.js.map +1 -0
  11. package/dist/index.d.ts +9 -0
  12. package/dist/index.js +1089 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/insights/components/index.d.ts +362 -0
  15. package/dist/insights/components/index.js +1397 -0
  16. package/dist/insights/components/index.js.map +1 -0
  17. package/dist/insights/index.d.ts +360 -0
  18. package/dist/insights/index.js +1815 -0
  19. package/dist/insights/index.js.map +1 -0
  20. package/dist/overview/components/index.d.ts +86 -0
  21. package/dist/overview/components/index.js +775 -0
  22. package/dist/overview/components/index.js.map +1 -0
  23. package/dist/overview/index.d.ts +301 -0
  24. package/dist/overview/index.js +1077 -0
  25. package/dist/overview/index.js.map +1 -0
  26. package/dist/shared/index.d.ts +296 -0
  27. package/dist/shared/index.js +395 -0
  28. package/dist/shared/index.js.map +1 -0
  29. package/dist/solar/components/index.d.ts +341 -0
  30. package/dist/solar/components/index.js +831 -0
  31. package/dist/solar/components/index.js.map +1 -0
  32. package/dist/solar/index.d.ts +301 -0
  33. package/dist/solar/index.js +1130 -0
  34. package/dist/solar/index.js.map +1 -0
  35. package/package.json +135 -0
@@ -0,0 +1,1130 @@
1
+ // src/solar/shared/utils.ts
2
+ import { twMerge } from "tailwind-merge";
3
+ function cx(...args) {
4
+ return twMerge(
5
+ args.flat().filter(
6
+ (x) => typeof x === "string" || typeof x === "number"
7
+ ).join(" ")
8
+ );
9
+ }
10
+ var focusRing = [
11
+ "outline outline-offset-2 outline-0 focus-visible:outline-2",
12
+ "outline-blue-500 dark:outline-blue-500"
13
+ ];
14
+
15
+ // src/solar/components/cta/cta.tsx
16
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
17
+ function DefaultLink({ href, children, className }) {
18
+ return /* @__PURE__ */ jsx("a", { href, className, children });
19
+ }
20
+ function resolveAction(action, defaultHref = "#") {
21
+ if (!action) return { href: defaultHref };
22
+ if (typeof action === "string") return { href: action };
23
+ return { href: action.href, onClick: action.onClick, target: action.target };
24
+ }
25
+ function CTA({
26
+ title,
27
+ description,
28
+ callToAction,
29
+ secondaryCallToAction,
30
+ image,
31
+ imageAlt = "CTA image",
32
+ actions,
33
+ LinkComponent = DefaultLink,
34
+ className
35
+ }) {
36
+ const primaryAction = resolveAction(actions?.primary, "#");
37
+ const secondaryAction = resolveAction(actions?.secondary, "#");
38
+ const PrimaryButton = primaryAction.onClick ? /* @__PURE__ */ jsx(
39
+ "button",
40
+ {
41
+ type: "button",
42
+ onClick: primaryAction.onClick,
43
+ className: cx(
44
+ "inline-flex items-center justify-center rounded-md border-b-[1.5px] border-orange-700 bg-gradient-to-b from-orange-400 to-orange-500 px-4 py-2.5 text-base font-medium text-white shadow-sm transition-all hover:shadow-orange-300",
45
+ focusRing
46
+ ),
47
+ children: callToAction
48
+ }
49
+ ) : /* @__PURE__ */ jsx(
50
+ LinkComponent,
51
+ {
52
+ href: primaryAction.href,
53
+ className: cx(
54
+ "inline-flex items-center justify-center rounded-md border-b-[1.5px] border-orange-700 bg-gradient-to-b from-orange-400 to-orange-500 px-4 py-2.5 text-base font-medium text-white shadow-sm transition-all hover:shadow-orange-300",
55
+ focusRing
56
+ ),
57
+ children: callToAction
58
+ }
59
+ );
60
+ const SecondaryButton = secondaryCallToAction ? secondaryAction.onClick ? /* @__PURE__ */ jsx(
61
+ "button",
62
+ {
63
+ type: "button",
64
+ onClick: secondaryAction.onClick,
65
+ className: cx(
66
+ "inline-flex items-center justify-center rounded-md border border-gray-300 bg-white px-4 py-2.5 text-base font-medium text-gray-900 shadow-xs transition-colors hover:bg-gray-50",
67
+ focusRing
68
+ ),
69
+ children: secondaryCallToAction
70
+ }
71
+ ) : /* @__PURE__ */ jsx(
72
+ LinkComponent,
73
+ {
74
+ href: secondaryAction.href,
75
+ className: cx(
76
+ "inline-flex items-center justify-center rounded-md border border-gray-300 bg-white px-4 py-2.5 text-base font-medium text-gray-900 shadow-xs transition-colors hover:bg-gray-50",
77
+ focusRing
78
+ ),
79
+ children: secondaryCallToAction
80
+ }
81
+ ) : null;
82
+ return /* @__PURE__ */ jsx(
83
+ "section",
84
+ {
85
+ "aria-labelledby": "cta-title",
86
+ className: cx("mx-auto max-w-6xl px-4 xl:px-0", className),
87
+ children: /* @__PURE__ */ jsxs("div", { className: "grid items-center gap-8 sm:grid-cols-6", children: [
88
+ /* @__PURE__ */ jsxs("div", { className: "sm:col-span-2", children: [
89
+ /* @__PURE__ */ jsx(
90
+ "h2",
91
+ {
92
+ id: "cta-title",
93
+ className: "scroll-my-60 text-3xl font-semibold tracking-tighter text-balance text-gray-900 md:text-4xl",
94
+ children: title
95
+ }
96
+ ),
97
+ description && /* @__PURE__ */ jsx("p", { className: "mt-3 mb-8 text-lg text-gray-600", children: description }),
98
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-4", children: [
99
+ PrimaryButton,
100
+ SecondaryButton
101
+ ] })
102
+ ] }),
103
+ /* @__PURE__ */ jsx("div", { className: "relative isolate rounded-xl sm:col-span-4 sm:h-full", children: typeof image === "string" ? /* @__PURE__ */ jsxs(Fragment, { children: [
104
+ /* @__PURE__ */ jsx(
105
+ "img",
106
+ {
107
+ "aria-hidden": true,
108
+ alt: imageAlt,
109
+ src: image,
110
+ className: "absolute inset-0 -z-10 rounded-2xl blur-xl"
111
+ }
112
+ ),
113
+ /* @__PURE__ */ jsx(
114
+ "img",
115
+ {
116
+ alt: imageAlt,
117
+ src: image,
118
+ className: "relative z-10 rounded-2xl w-full h-auto"
119
+ }
120
+ )
121
+ ] }) : image ? image : /* @__PURE__ */ jsx("div", { className: "h-64 w-full rounded-2xl bg-gradient-to-br from-orange-100 to-orange-200" }) })
122
+ ] })
123
+ }
124
+ );
125
+ }
126
+
127
+ // src/solar/components/features/features.tsx
128
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
129
+ function Features({
130
+ id = "solutions",
131
+ blocks = [],
132
+ items = [],
133
+ columns = 3,
134
+ className,
135
+ children
136
+ }) {
137
+ const columnClasses = {
138
+ 2: "md:grid-cols-2",
139
+ 3: "md:grid-cols-3",
140
+ 4: "md:grid-cols-4"
141
+ };
142
+ if (children) {
143
+ return /* @__PURE__ */ jsx2(
144
+ "section",
145
+ {
146
+ "aria-label": "Features",
147
+ id,
148
+ className: cx(
149
+ "relative mx-auto max-w-6xl scroll-my-24 px-4 xl:px-0",
150
+ className
151
+ ),
152
+ children
153
+ }
154
+ );
155
+ }
156
+ if (blocks.length > 0) {
157
+ return /* @__PURE__ */ jsxs2(
158
+ "section",
159
+ {
160
+ "aria-label": "Features",
161
+ id,
162
+ className: cx("relative mx-auto max-w-6xl scroll-my-24", className),
163
+ children: [
164
+ /* @__PURE__ */ jsxs2("div", { className: "pointer-events-none inset-0 select-none", children: [
165
+ /* @__PURE__ */ jsx2(
166
+ "div",
167
+ {
168
+ className: "absolute inset-y-0 -my-20 w-px",
169
+ style: {
170
+ maskImage: "linear-gradient(transparent, white 5rem, white calc(100% - 5rem), transparent)"
171
+ },
172
+ children: /* @__PURE__ */ jsx2("svg", { className: "h-full w-full", preserveAspectRatio: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx2(
173
+ "line",
174
+ {
175
+ x1: "0",
176
+ y1: "0",
177
+ x2: "0",
178
+ y2: "100%",
179
+ className: "stroke-gray-300",
180
+ strokeWidth: "2",
181
+ strokeDasharray: "3 3"
182
+ }
183
+ ) })
184
+ }
185
+ ),
186
+ /* @__PURE__ */ jsx2(
187
+ "div",
188
+ {
189
+ className: "absolute inset-y-0 right-0 -my-20 w-px",
190
+ style: {
191
+ maskImage: "linear-gradient(transparent, white 5rem, white calc(100% - 5rem), transparent)"
192
+ },
193
+ children: /* @__PURE__ */ jsx2("svg", { className: "h-full w-full", preserveAspectRatio: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx2(
194
+ "line",
195
+ {
196
+ x1: "0",
197
+ y1: "0",
198
+ x2: "0",
199
+ y2: "100%",
200
+ className: "stroke-gray-300",
201
+ strokeWidth: "2",
202
+ strokeDasharray: "3 3"
203
+ }
204
+ ) })
205
+ }
206
+ ),
207
+ /* @__PURE__ */ jsx2(
208
+ "div",
209
+ {
210
+ className: "absolute inset-y-0 left-1/2 -z-10 -my-20 w-px",
211
+ style: {
212
+ maskImage: "linear-gradient(transparent, white 5rem, white calc(100% - 5rem), transparent)"
213
+ },
214
+ children: /* @__PURE__ */ jsx2("svg", { className: "h-full w-full", preserveAspectRatio: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx2(
215
+ "line",
216
+ {
217
+ x1: "0",
218
+ y1: "0",
219
+ x2: "0",
220
+ y2: "100%",
221
+ className: "stroke-gray-300",
222
+ strokeWidth: "2",
223
+ strokeDasharray: "3 3"
224
+ }
225
+ ) })
226
+ }
227
+ )
228
+ ] }),
229
+ /* @__PURE__ */ jsx2("div", { className: "grid grid-cols-1 gap-12 md:grid-cols-4 md:gap-0", children: blocks.map((block, index) => /* @__PURE__ */ jsxs2("div", { className: "contents", children: [
230
+ /* @__PURE__ */ jsxs2(
231
+ "div",
232
+ {
233
+ className: cx(
234
+ "col-span-2 my-auto px-2",
235
+ index % 2 === 1 ? "md:order-2" : ""
236
+ ),
237
+ children: [
238
+ /* @__PURE__ */ jsxs2("h2", { className: "relative text-lg font-semibold tracking-tight text-orange-500", children: [
239
+ block.badge,
240
+ /* @__PURE__ */ jsx2("div", { className: "absolute top-1 -left-[8px] h-5 w-[3px] rounded-r-sm bg-orange-500" })
241
+ ] }),
242
+ /* @__PURE__ */ jsx2("p", { className: "mt-2 text-3xl font-semibold tracking-tighter text-balance text-gray-900 md:text-4xl", children: block.title }),
243
+ /* @__PURE__ */ jsx2("p", { className: "mt-4 text-balance text-gray-700", children: block.description })
244
+ ]
245
+ }
246
+ ),
247
+ /* @__PURE__ */ jsx2(
248
+ "div",
249
+ {
250
+ className: cx(
251
+ "relative col-span-2 flex items-center justify-center overflow-hidden",
252
+ index % 2 === 1 ? "md:order-1" : ""
253
+ ),
254
+ children: block.illustration || /* @__PURE__ */ jsx2("div", { className: "h-64 w-full bg-gradient-to-br from-orange-50 to-orange-100 rounded-lg" })
255
+ }
256
+ )
257
+ ] }, block.badge)) })
258
+ ]
259
+ }
260
+ );
261
+ }
262
+ if (items.length > 0) {
263
+ return /* @__PURE__ */ jsx2(
264
+ "section",
265
+ {
266
+ "aria-label": "Features",
267
+ id,
268
+ className: cx("mx-auto max-w-6xl px-4 xl:px-0", className),
269
+ children: /* @__PURE__ */ jsx2("div", { className: cx("grid grid-cols-1 gap-8", columnClasses[columns]), children: items.map((item) => /* @__PURE__ */ jsxs2(
270
+ "div",
271
+ {
272
+ className: "rounded-lg border border-gray-200 bg-white p-6 shadow-sm",
273
+ children: [
274
+ item.icon && /* @__PURE__ */ jsx2("div", { className: "mb-4 inline-flex size-10 items-center justify-center rounded-lg bg-orange-100 text-orange-600", children: item.icon }),
275
+ /* @__PURE__ */ jsx2("h3", { className: "text-lg font-semibold text-gray-900", children: item.title }),
276
+ /* @__PURE__ */ jsx2("p", { className: "mt-2 text-sm text-gray-600", children: item.description })
277
+ ]
278
+ },
279
+ item.title
280
+ )) })
281
+ }
282
+ );
283
+ }
284
+ return null;
285
+ }
286
+
287
+ // src/solar/components/footer/index.tsx
288
+ import { twMerge as twMerge2 } from "tailwind-merge";
289
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
290
+ function DefaultLink2({
291
+ href,
292
+ children,
293
+ className,
294
+ target,
295
+ rel
296
+ }) {
297
+ return /* @__PURE__ */ jsx3("a", { href, className, target, rel, children });
298
+ }
299
+ function SocialIcon({ platform }) {
300
+ const iconClass = "size-5";
301
+ switch (platform) {
302
+ case "twitter":
303
+ return /* @__PURE__ */ jsx3(
304
+ "svg",
305
+ {
306
+ className: iconClass,
307
+ fill: "currentColor",
308
+ viewBox: "0 0 24 24",
309
+ "aria-hidden": "true",
310
+ children: /* @__PURE__ */ jsx3("path", { d: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" })
311
+ }
312
+ );
313
+ case "github":
314
+ return /* @__PURE__ */ jsx3(
315
+ "svg",
316
+ {
317
+ className: iconClass,
318
+ fill: "currentColor",
319
+ viewBox: "0 0 24 24",
320
+ "aria-hidden": "true",
321
+ children: /* @__PURE__ */ jsx3(
322
+ "path",
323
+ {
324
+ fillRule: "evenodd",
325
+ clipRule: "evenodd",
326
+ d: "M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
327
+ }
328
+ )
329
+ }
330
+ );
331
+ case "youtube":
332
+ return /* @__PURE__ */ jsx3(
333
+ "svg",
334
+ {
335
+ className: iconClass,
336
+ fill: "currentColor",
337
+ viewBox: "0 0 24 24",
338
+ "aria-hidden": "true",
339
+ children: /* @__PURE__ */ jsx3(
340
+ "path",
341
+ {
342
+ fillRule: "evenodd",
343
+ clipRule: "evenodd",
344
+ d: "M19.812 5.418c.861.23 1.538.907 1.768 1.768C21.998 8.746 22 12 22 12s0 3.255-.418 4.814a2.504 2.504 0 0 1-1.768 1.768c-1.56.419-7.814.419-7.814.419s-6.255 0-7.814-.419a2.505 2.505 0 0 1-1.768-1.768C2 15.255 2 12 2 12s0-3.255.417-4.814a2.507 2.507 0 0 1 1.768-1.768C5.744 5 11.998 5 11.998 5s6.255 0 7.814.418ZM15.194 12 10 15V9l5.194 3Z"
345
+ }
346
+ )
347
+ }
348
+ );
349
+ case "discord":
350
+ return /* @__PURE__ */ jsx3(
351
+ "svg",
352
+ {
353
+ className: iconClass,
354
+ fill: "currentColor",
355
+ viewBox: "0 0 24 24",
356
+ "aria-hidden": "true",
357
+ children: /* @__PURE__ */ jsx3("path", { d: "M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028 14.09 14.09 0 0 0 1.226-1.994.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z" })
358
+ }
359
+ );
360
+ case "linkedin":
361
+ return /* @__PURE__ */ jsx3(
362
+ "svg",
363
+ {
364
+ className: iconClass,
365
+ fill: "currentColor",
366
+ viewBox: "0 0 24 24",
367
+ "aria-hidden": "true",
368
+ children: /* @__PURE__ */ jsx3("path", { d: "M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" })
369
+ }
370
+ );
371
+ case "instagram":
372
+ return /* @__PURE__ */ jsx3(
373
+ "svg",
374
+ {
375
+ className: iconClass,
376
+ fill: "currentColor",
377
+ viewBox: "0 0 24 24",
378
+ "aria-hidden": "true",
379
+ children: /* @__PURE__ */ jsx3(
380
+ "path",
381
+ {
382
+ fillRule: "evenodd",
383
+ clipRule: "evenodd",
384
+ d: "M12.315 2c2.43 0 2.784.013 3.808.06 1.064.049 1.791.218 2.427.465a4.902 4.902 0 011.772 1.153 4.902 4.902 0 011.153 1.772c.247.636.416 1.363.465 2.427.048 1.067.06 1.407.06 4.123v.08c0 2.643-.012 2.987-.06 4.043-.049 1.064-.218 1.791-.465 2.427a4.902 4.902 0 01-1.153 1.772 4.902 4.902 0 01-1.772 1.153c-.636.247-1.363.416-2.427.465-1.067.048-1.407.06-4.123.06h-.08c-2.643 0-2.987-.012-4.043-.06-1.064-.049-1.791-.218-2.427-.465a4.902 4.902 0 01-1.772-1.153 4.902 4.902 0 01-1.153-1.772c-.247-.636-.416-1.363-.465-2.427-.047-1.024-.06-1.379-.06-3.808v-.63c0-2.43.013-2.784.06-3.808.049-1.064.218-1.791.465-2.427a4.902 4.902 0 011.153-1.772A4.902 4.902 0 015.45 2.525c.636-.247 1.363-.416 2.427-.465C8.901 2.013 9.256 2 11.685 2h.63zm-.081 1.802h-.468c-2.456 0-2.784.011-3.807.058-.975.045-1.504.207-1.857.344-.467.182-.8.398-1.15.748-.35.35-.566.683-.748 1.15-.137.353-.3.882-.344 1.857-.047 1.023-.058 1.351-.058 3.807v.468c0 2.456.011 2.784.058 3.807.045.975.207 1.504.344 1.857.182.466.399.8.748 1.15.35.35.683.566 1.15.748.353.137.882.3 1.857.344 1.054.048 1.37.058 4.041.058h.08c2.597 0 2.917-.01 3.96-.058.976-.045 1.505-.207 1.858-.344.466-.182.8-.398 1.15-.748.35-.35.566-.683.748-1.15.137-.353.3-.882.344-1.857.048-1.055.058-1.37.058-4.041v-.08c0-2.597-.01-2.917-.058-3.96-.045-.976-.207-1.505-.344-1.858a3.097 3.097 0 00-.748-1.15 3.098 3.098 0 00-1.15-.748c-.353-.137-.882-.3-1.857-.344-1.023-.047-1.351-.058-3.807-.058zM12 6.865a5.135 5.135 0 110 10.27 5.135 5.135 0 010-10.27zm0 1.802a3.333 3.333 0 100 6.666 3.333 3.333 0 000-6.666zm5.338-3.205a1.2 1.2 0 110 2.4 1.2 1.2 0 010-2.4z"
385
+ }
386
+ )
387
+ }
388
+ );
389
+ default:
390
+ return /* @__PURE__ */ jsx3(
391
+ "svg",
392
+ {
393
+ className: iconClass,
394
+ fill: "currentColor",
395
+ viewBox: "0 0 24 24",
396
+ "aria-hidden": "true",
397
+ children: /* @__PURE__ */ jsx3("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z" })
398
+ }
399
+ );
400
+ }
401
+ }
402
+ function Footer({
403
+ logo,
404
+ links,
405
+ linkGroups = [],
406
+ social,
407
+ copyright,
408
+ LinkComponent = DefaultLink2,
409
+ className
410
+ }) {
411
+ const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
412
+ const defaultCopyright = `${currentYear} All rights reserved.`;
413
+ return /* @__PURE__ */ jsxs3(
414
+ "footer",
415
+ {
416
+ id: "footer",
417
+ className: twMerge2(
418
+ "relative mx-auto flex max-w-6xl flex-wrap px-4 pt-4 xl:px-0",
419
+ className
420
+ ),
421
+ children: [
422
+ /* @__PURE__ */ jsxs3("div", { className: "pointer-events-none inset-0", children: [
423
+ /* @__PURE__ */ jsx3(
424
+ "div",
425
+ {
426
+ className: "absolute inset-y-0 -my-20 w-px",
427
+ style: { maskImage: "linear-gradient(transparent, white 5rem)" },
428
+ children: /* @__PURE__ */ jsx3("svg", { className: "h-full w-full", preserveAspectRatio: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx3(
429
+ "line",
430
+ {
431
+ x1: "0",
432
+ y1: "0",
433
+ x2: "0",
434
+ y2: "100%",
435
+ className: "stroke-gray-300",
436
+ strokeWidth: "2",
437
+ strokeDasharray: "3 3"
438
+ }
439
+ ) })
440
+ }
441
+ ),
442
+ /* @__PURE__ */ jsx3(
443
+ "div",
444
+ {
445
+ className: "absolute inset-y-0 right-0 -my-20 w-px",
446
+ style: { maskImage: "linear-gradient(transparent, white 5rem)" },
447
+ children: /* @__PURE__ */ jsx3("svg", { className: "h-full w-full", preserveAspectRatio: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx3(
448
+ "line",
449
+ {
450
+ x1: "0",
451
+ y1: "0",
452
+ x2: "0",
453
+ y2: "100%",
454
+ className: "stroke-gray-300",
455
+ strokeWidth: "2",
456
+ strokeDasharray: "3 3"
457
+ }
458
+ ) })
459
+ }
460
+ )
461
+ ] }),
462
+ /* @__PURE__ */ jsxs3("svg", { className: "mb-10 h-20 w-full border-y border-dashed border-gray-300 stroke-gray-300", "aria-hidden": "true", children: [
463
+ /* @__PURE__ */ jsx3("defs", { children: /* @__PURE__ */ jsx3(
464
+ "pattern",
465
+ {
466
+ id: "diagonal-footer-pattern",
467
+ patternUnits: "userSpaceOnUse",
468
+ width: "64",
469
+ height: "64",
470
+ children: Array.from({ length: 17 }, (_, i) => {
471
+ const offset = i * 8;
472
+ return /* @__PURE__ */ jsx3(
473
+ "path",
474
+ {
475
+ d: `M${-106 + offset} 110L${22 + offset} -18`,
476
+ strokeWidth: "1"
477
+ },
478
+ i.toString()
479
+ );
480
+ })
481
+ }
482
+ ) }),
483
+ /* @__PURE__ */ jsx3(
484
+ "rect",
485
+ {
486
+ stroke: "none",
487
+ width: "100%",
488
+ height: "100%",
489
+ fill: "url(#diagonal-footer-pattern)"
490
+ }
491
+ )
492
+ ] }),
493
+ /* @__PURE__ */ jsxs3("div", { className: "mr-auto flex w-full justify-between lg:w-fit lg:flex-col", children: [
494
+ logo && /* @__PURE__ */ jsx3(
495
+ LinkComponent,
496
+ {
497
+ href: "/",
498
+ className: "flex items-center font-medium text-gray-700 select-none sm:text-sm",
499
+ children: typeof logo === "string" ? /* @__PURE__ */ jsx3("span", { className: "ml-2 text-xl font-semibold", children: logo }) : logo
500
+ }
501
+ ),
502
+ /* @__PURE__ */ jsxs3("div", { children: [
503
+ social && social.length > 0 && /* @__PURE__ */ jsx3("div", { className: "mt-4 flex items-center", children: social.map((item) => /* @__PURE__ */ jsx3(
504
+ LinkComponent,
505
+ {
506
+ href: item.href,
507
+ target: "_blank",
508
+ rel: "noopener noreferrer",
509
+ className: "rounded-sm p-2 text-gray-700 transition-colors duration-200 hover:bg-gray-200 hover:text-gray-900",
510
+ children: /* @__PURE__ */ jsx3(SocialIcon, { platform: item.platform })
511
+ },
512
+ item.platform
513
+ )) }),
514
+ /* @__PURE__ */ jsx3("div", { className: "ml-2 hidden text-sm text-gray-700 lg:inline", children: copyright || defaultCopyright })
515
+ ] })
516
+ ] }),
517
+ linkGroups.map((group) => /* @__PURE__ */ jsxs3("div", { className: "mt-10 min-w-44 pl-2 lg:mt-0 lg:pl-0", children: [
518
+ /* @__PURE__ */ jsx3("h3", { className: "mb-4 font-medium text-gray-900 sm:text-sm", children: group.title }),
519
+ /* @__PURE__ */ jsx3("ul", { className: "space-y-4", children: group.links.map((link) => /* @__PURE__ */ jsx3("li", { className: "text-sm", children: /* @__PURE__ */ jsx3(
520
+ LinkComponent,
521
+ {
522
+ href: link.href,
523
+ target: link.external ? "_blank" : void 0,
524
+ rel: link.external ? "noopener noreferrer" : void 0,
525
+ className: "text-gray-600 transition-colors duration-200 hover:text-gray-900",
526
+ children: link.label
527
+ }
528
+ ) }, link.label)) })
529
+ ] }, group.title)),
530
+ linkGroups.length === 0 && links.length > 0 && /* @__PURE__ */ jsx3("div", { className: "mt-10 flex flex-wrap gap-6 lg:mt-0", children: links.map((link) => /* @__PURE__ */ jsx3(
531
+ LinkComponent,
532
+ {
533
+ href: link.href,
534
+ target: link.external ? "_blank" : void 0,
535
+ rel: link.external ? "noopener noreferrer" : void 0,
536
+ className: "text-sm text-gray-600 transition-colors duration-200 hover:text-gray-900",
537
+ children: link.label
538
+ },
539
+ link.label
540
+ )) }),
541
+ /* @__PURE__ */ jsx3("div", { className: "mt-10 w-full text-center text-sm text-gray-700 lg:hidden", children: copyright || defaultCopyright })
542
+ ]
543
+ }
544
+ );
545
+ }
546
+
547
+ // src/solar/components/header/index.tsx
548
+ import { useEffect, useState } from "react";
549
+ import { twMerge as twMerge3 } from "tailwind-merge";
550
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
551
+ function DefaultLink3({ href, children, className, onClick }) {
552
+ return /* @__PURE__ */ jsx4("a", { href, className, onClick, children });
553
+ }
554
+ function MenuIcon({ className }) {
555
+ return /* @__PURE__ */ jsx4("svg", { className, fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, stroke: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx4("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5" }) });
556
+ }
557
+ function CloseIcon({ className }) {
558
+ return /* @__PURE__ */ jsx4("svg", { className, fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, stroke: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx4("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) });
559
+ }
560
+ function Header({
561
+ logo,
562
+ navItems,
563
+ cta,
564
+ LinkComponent = DefaultLink3,
565
+ sticky = true,
566
+ transparentOnTop = false,
567
+ className
568
+ }) {
569
+ const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
570
+ const [scrolled, setScrolled] = useState(false);
571
+ useEffect(() => {
572
+ const handleScroll = () => {
573
+ setScrolled(window.scrollY > 15);
574
+ };
575
+ window.addEventListener("scroll", handleScroll);
576
+ return () => window.removeEventListener("scroll", handleScroll);
577
+ }, []);
578
+ const closeMobileMenu = () => setMobileMenuOpen(false);
579
+ const showBackground = scrolled || mobileMenuOpen || !transparentOnTop;
580
+ return /* @__PURE__ */ jsx4(
581
+ "header",
582
+ {
583
+ className: twMerge3(
584
+ "inset-x-4 top-4 z-50 mx-auto flex max-w-6xl justify-center rounded-lg border border-transparent px-3 py-3 transition duration-300",
585
+ sticky && "fixed",
586
+ showBackground ? "border-gray-200/50 bg-white/80 shadow-2xl shadow-black/5 backdrop-blur-sm" : "bg-white/0",
587
+ className
588
+ ),
589
+ children: /* @__PURE__ */ jsxs4("div", { className: "w-full md:my-auto", children: [
590
+ /* @__PURE__ */ jsxs4("div", { className: "relative flex items-center justify-between", children: [
591
+ /* @__PURE__ */ jsx4(LinkComponent, { href: "/", className: "flex items-center", children: typeof logo === "string" ? /* @__PURE__ */ jsx4("span", { className: "text-xl font-semibold text-gray-900", children: logo }) : logo }),
592
+ navItems.length > 0 && /* @__PURE__ */ jsx4("nav", { className: "hidden sm:block md:absolute md:top-1/2 md:left-1/2 md:-translate-x-1/2 md:-translate-y-1/2", children: /* @__PURE__ */ jsx4("div", { className: "flex items-center gap-10 font-medium", children: navItems.map((item) => /* @__PURE__ */ jsx4(LinkComponent, { href: item.href, className: "px-2 py-1 text-gray-900 hover:text-gray-600 transition-colors", children: item.label }, item.href)) }) }),
593
+ cta && /* @__PURE__ */ jsx4(
594
+ "button",
595
+ {
596
+ type: "button",
597
+ className: "hidden h-10 rounded-md border border-gray-200 bg-white px-4 font-semibold text-gray-900 transition-colors hover:bg-gray-50 sm:block",
598
+ onClick: cta.onClick,
599
+ children: cta.label
600
+ }
601
+ ),
602
+ /* @__PURE__ */ jsx4(
603
+ "button",
604
+ {
605
+ type: "button",
606
+ onClick: () => setMobileMenuOpen(!mobileMenuOpen),
607
+ className: "rounded-md border border-gray-200 bg-white p-1.5 sm:hidden",
608
+ "aria-label": mobileMenuOpen ? "Close navigation menu" : "Open navigation menu",
609
+ children: mobileMenuOpen ? /* @__PURE__ */ jsx4(CloseIcon, { className: "size-6 shrink-0 text-gray-900" }) : /* @__PURE__ */ jsx4(MenuIcon, { className: "size-6 shrink-0 text-gray-900" })
610
+ }
611
+ )
612
+ ] }),
613
+ mobileMenuOpen && /* @__PURE__ */ jsxs4("nav", { className: "mt-6 flex flex-col gap-6 text-lg sm:hidden", children: [
614
+ /* @__PURE__ */ jsx4("ul", { className: "space-y-4 font-medium", children: navItems.map((item) => (
615
+ // biome-ignore lint/a11y/useKeyWithClickEvents: Header is a client component
616
+ /* @__PURE__ */ jsx4("li", { onClick: closeMobileMenu, children: /* @__PURE__ */ jsx4(LinkComponent, { href: item.href, className: "text-gray-900", children: item.label }) }, item.href)
617
+ )) }),
618
+ cta && /* @__PURE__ */ jsx4(
619
+ "button",
620
+ {
621
+ type: "button",
622
+ className: "rounded-md border border-gray-200 bg-white px-4 py-3 text-lg font-medium text-gray-900 transition-colors hover:bg-gray-50",
623
+ onClick: cta.onClick,
624
+ children: cta.label
625
+ }
626
+ )
627
+ ] })
628
+ ] })
629
+ }
630
+ );
631
+ }
632
+
633
+ // src/solar/components/hero/index.tsx
634
+ import { twMerge as twMerge4 } from "tailwind-merge";
635
+ import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
636
+ function DefaultLink4({ href, children, className }) {
637
+ return /* @__PURE__ */ jsx5("a", { href, className, children });
638
+ }
639
+ function resolveAction2(action) {
640
+ if (!action) return {};
641
+ if (typeof action === "string") return { href: action };
642
+ return { onClick: action };
643
+ }
644
+ function CTAButton({
645
+ children,
646
+ action,
647
+ variant = "primary",
648
+ LinkComponent
649
+ }) {
650
+ const resolved = resolveAction2(action);
651
+ const isPrimary = variant === "primary";
652
+ const className = twMerge4(
653
+ "inline-flex items-center justify-center gap-1 rounded-md px-5 py-3 font-medium tracking-wide whitespace-nowrap transition-all duration-200",
654
+ isPrimary ? "border-b-[1.5px] border-orange-700 bg-gradient-to-b from-orange-400 to-orange-500 text-white shadow-[0_0_0_2px_rgba(0,0,0,0.04),0_0_14px_0_rgba(255,255,255,0.19)] hover:shadow-orange-300" : "border border-gray-300 bg-white text-gray-900 hover:bg-gray-50"
655
+ );
656
+ if (resolved.onClick) {
657
+ return /* @__PURE__ */ jsx5("button", { type: "button", className, onClick: resolved.onClick, children });
658
+ }
659
+ if (resolved.href) {
660
+ return /* @__PURE__ */ jsx5(LinkComponent, { href: resolved.href, className, children });
661
+ }
662
+ return /* @__PURE__ */ jsx5("button", { type: "button", className, children });
663
+ }
664
+ function Hero({
665
+ title,
666
+ subtitle,
667
+ badge,
668
+ callToAction,
669
+ secondaryCallToAction,
670
+ variant = "default",
671
+ actions,
672
+ LinkComponent = DefaultLink4,
673
+ className,
674
+ children
675
+ }) {
676
+ if (variant === "minimal") {
677
+ return /* @__PURE__ */ jsx5(
678
+ HeroMinimal,
679
+ {
680
+ title,
681
+ subtitle,
682
+ badge,
683
+ callToAction,
684
+ secondaryCallToAction,
685
+ actions,
686
+ LinkComponent,
687
+ className,
688
+ children
689
+ }
690
+ );
691
+ }
692
+ if (variant === "gradient") {
693
+ return /* @__PURE__ */ jsx5(
694
+ HeroGradient,
695
+ {
696
+ title,
697
+ subtitle,
698
+ badge,
699
+ callToAction,
700
+ secondaryCallToAction,
701
+ actions,
702
+ LinkComponent,
703
+ className,
704
+ children
705
+ }
706
+ );
707
+ }
708
+ return /* @__PURE__ */ jsx5("section", { "aria-label": "hero", className: twMerge4("relative", className), children: /* @__PURE__ */ jsxs5("div", { className: "relative flex flex-col items-center justify-center py-16 sm:py-24", children: [
709
+ badge && /* @__PURE__ */ jsx5("div", { className: "mb-6", children: /* @__PURE__ */ jsx5("div", { className: "inline-flex items-center gap-3 rounded-full bg-white/5 px-2.5 py-0.5 pr-3 pl-0.5 font-medium text-gray-900 ring-1 shadow-lg shadow-orange-400/20 ring-black/10 backdrop-blur-[1px] transition-colors hover:bg-orange-500/5 sm:text-sm", children: /* @__PURE__ */ jsx5("span", { className: "shrink-0 rounded-full border bg-gray-50 px-2.5 py-1 text-sm text-gray-600 sm:text-xs", children: badge }) }) }),
710
+ /* @__PURE__ */ jsx5("h1", { className: "mt-2 text-center text-5xl font-semibold tracking-tighter text-gray-900 sm:text-8xl sm:leading-[1.1]", children: title }),
711
+ subtitle && /* @__PURE__ */ jsx5("p", { className: "mt-5 max-w-xl text-center text-base text-balance text-gray-700 sm:mt-8 sm:text-xl", children: subtitle }),
712
+ (callToAction || secondaryCallToAction) && /* @__PURE__ */ jsxs5("div", { className: "mt-6 flex flex-wrap items-center justify-center gap-4", children: [
713
+ callToAction && /* @__PURE__ */ jsx5(
714
+ CTAButton,
715
+ {
716
+ action: typeof actions?.primary === "string" ? actions.primary : actions?.primary?.href,
717
+ variant: "primary",
718
+ LinkComponent,
719
+ children: callToAction
720
+ }
721
+ ),
722
+ secondaryCallToAction && /* @__PURE__ */ jsx5(
723
+ CTAButton,
724
+ {
725
+ action: typeof actions?.secondary === "string" ? actions.secondary : actions?.secondary?.href,
726
+ variant: "secondary",
727
+ LinkComponent,
728
+ children: secondaryCallToAction
729
+ }
730
+ )
731
+ ] }),
732
+ children
733
+ ] }) });
734
+ }
735
+ function HeroMinimal({
736
+ title,
737
+ subtitle,
738
+ badge,
739
+ callToAction,
740
+ secondaryCallToAction,
741
+ actions,
742
+ LinkComponent = DefaultLink4,
743
+ className,
744
+ children
745
+ }) {
746
+ return /* @__PURE__ */ jsx5("section", { "aria-label": "hero", className: twMerge4("relative", className), children: /* @__PURE__ */ jsxs5("div", { className: "flex flex-col items-center justify-center py-12 sm:py-20", children: [
747
+ badge && /* @__PURE__ */ jsx5("div", { className: "mb-4", children: /* @__PURE__ */ jsx5("span", { className: "inline-flex rounded-full bg-gray-100 px-3 py-1 text-sm font-medium text-gray-700", children: badge }) }),
748
+ /* @__PURE__ */ jsx5("h1", { className: "text-center text-4xl font-semibold tracking-tight text-gray-900 sm:text-6xl", children: title }),
749
+ subtitle && /* @__PURE__ */ jsx5("p", { className: "mt-4 max-w-lg text-center text-base text-gray-600 sm:mt-6 sm:text-lg", children: subtitle }),
750
+ (callToAction || secondaryCallToAction) && /* @__PURE__ */ jsxs5("div", { className: "mt-6 flex flex-wrap items-center justify-center gap-4", children: [
751
+ callToAction && /* @__PURE__ */ jsx5(
752
+ CTAButton,
753
+ {
754
+ action: typeof actions?.primary === "string" ? actions.primary : actions?.primary?.href,
755
+ variant: "primary",
756
+ LinkComponent,
757
+ children: callToAction
758
+ }
759
+ ),
760
+ secondaryCallToAction && /* @__PURE__ */ jsx5(
761
+ CTAButton,
762
+ {
763
+ action: typeof actions?.secondary === "string" ? actions.secondary : actions?.secondary?.href,
764
+ variant: "secondary",
765
+ LinkComponent,
766
+ children: secondaryCallToAction
767
+ }
768
+ )
769
+ ] }),
770
+ children
771
+ ] }) });
772
+ }
773
+ function HeroGradient({
774
+ title,
775
+ subtitle,
776
+ badge,
777
+ callToAction,
778
+ secondaryCallToAction,
779
+ actions,
780
+ LinkComponent = DefaultLink4,
781
+ className,
782
+ children
783
+ }) {
784
+ return /* @__PURE__ */ jsxs5(
785
+ "section",
786
+ {
787
+ "aria-label": "hero",
788
+ className: twMerge4("relative overflow-hidden", className),
789
+ children: [
790
+ /* @__PURE__ */ jsx5("div", { className: "absolute inset-0 -z-10 bg-gradient-to-br from-orange-50 via-white to-orange-100" }),
791
+ /* @__PURE__ */ jsx5("div", { className: "absolute inset-0 -z-10 bg-gradient-radial from-orange-200/30 via-transparent to-transparent" }),
792
+ /* @__PURE__ */ jsxs5("div", { className: "flex flex-col items-center justify-center py-16 sm:py-24", children: [
793
+ badge && /* @__PURE__ */ jsx5("div", { className: "mb-6", children: /* @__PURE__ */ jsx5("div", { className: "inline-flex items-center gap-3 rounded-full bg-white/80 px-2.5 py-0.5 pr-3 pl-0.5 font-medium text-gray-900 ring-1 shadow-lg shadow-orange-400/20 ring-black/10 backdrop-blur-sm transition-colors hover:bg-white sm:text-sm", children: /* @__PURE__ */ jsx5("span", { className: "shrink-0 rounded-full border bg-orange-50 px-2.5 py-1 text-sm text-orange-700 sm:text-xs", children: badge }) }) }),
794
+ /* @__PURE__ */ jsx5("h1", { className: "text-center text-5xl font-semibold tracking-tighter text-gray-900 sm:text-8xl sm:leading-[1.1]", children: title }),
795
+ subtitle && /* @__PURE__ */ jsx5("p", { className: "mt-5 max-w-xl text-center text-base text-balance text-gray-700 sm:mt-8 sm:text-xl", children: subtitle }),
796
+ (callToAction || secondaryCallToAction) && /* @__PURE__ */ jsxs5("div", { className: "mt-6 flex flex-wrap items-center justify-center gap-4", children: [
797
+ callToAction && /* @__PURE__ */ jsx5(
798
+ CTAButton,
799
+ {
800
+ action: typeof actions?.primary === "string" ? actions.primary : actions?.primary?.href,
801
+ variant: "primary",
802
+ LinkComponent,
803
+ children: callToAction
804
+ }
805
+ ),
806
+ secondaryCallToAction && /* @__PURE__ */ jsx5(
807
+ CTAButton,
808
+ {
809
+ action: typeof actions?.secondary === "string" ? actions.secondary : actions?.secondary?.href,
810
+ variant: "secondary",
811
+ LinkComponent,
812
+ children: secondaryCallToAction
813
+ }
814
+ )
815
+ ] }),
816
+ children
817
+ ] })
818
+ ]
819
+ }
820
+ );
821
+ }
822
+
823
+ // src/solar/layouts/landing-page.tsx
824
+ import { isValidElement } from "react";
825
+ import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
826
+ function HeroSection({
827
+ title,
828
+ subtitle,
829
+ callToAction,
830
+ secondaryCallToAction,
831
+ actions,
832
+ variant: _variant
833
+ }) {
834
+ return /* @__PURE__ */ jsx6("section", { className: "relative py-20 lg:py-32 bg-gradient-to-br from-slate-900 to-slate-800", children: /* @__PURE__ */ jsxs6("div", { className: "mx-auto max-w-7xl px-6 lg:px-8 text-center", children: [
835
+ /* @__PURE__ */ jsx6("h1", { className: "text-4xl font-bold tracking-tight text-white sm:text-6xl", children: title }),
836
+ subtitle && /* @__PURE__ */ jsx6("p", { className: "mt-6 text-lg leading-8 text-slate-300", children: subtitle }),
837
+ /* @__PURE__ */ jsxs6("div", { className: "mt-10 flex items-center justify-center gap-x-6", children: [
838
+ /* @__PURE__ */ jsx6(
839
+ "a",
840
+ {
841
+ href: typeof actions?.primary === "string" ? actions.primary : actions?.primary?.href ?? "#",
842
+ className: "rounded-md bg-indigo-600 px-3.5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500",
843
+ children: callToAction
844
+ }
845
+ ),
846
+ secondaryCallToAction && /* @__PURE__ */ jsxs6(
847
+ "a",
848
+ {
849
+ href: typeof actions?.secondary === "string" ? actions.secondary : actions?.secondary?.href ?? "#",
850
+ className: "text-sm font-semibold leading-6 text-white",
851
+ children: [
852
+ secondaryCallToAction,
853
+ " ",
854
+ /* @__PURE__ */ jsx6("span", { "aria-hidden": "true", children: "->" })
855
+ ]
856
+ }
857
+ )
858
+ ] })
859
+ ] }) });
860
+ }
861
+ function FeaturesSection({
862
+ title,
863
+ description,
864
+ features,
865
+ variant: _variant,
866
+ columns = 3
867
+ }) {
868
+ return /* @__PURE__ */ jsx6("section", { className: "py-20 lg:py-24 bg-white", children: /* @__PURE__ */ jsxs6("div", { className: "mx-auto max-w-7xl px-6 lg:px-8", children: [
869
+ title && /* @__PURE__ */ jsxs6("div", { className: "mx-auto max-w-2xl text-center", children: [
870
+ /* @__PURE__ */ jsx6("h2", { className: "text-3xl font-bold tracking-tight text-slate-900 sm:text-4xl", children: title }),
871
+ description && /* @__PURE__ */ jsx6("p", { className: "mt-4 text-lg leading-8 text-slate-600", children: description })
872
+ ] }),
873
+ /* @__PURE__ */ jsx6(
874
+ "div",
875
+ {
876
+ className: `mx-auto mt-16 grid max-w-2xl gap-x-8 gap-y-16 lg:max-w-none ${columns === 2 ? "sm:grid-cols-2" : columns === 4 ? "sm:grid-cols-2 lg:grid-cols-4" : "sm:grid-cols-2 lg:grid-cols-3"}`,
877
+ children: features.map((feature, index) => /* @__PURE__ */ jsxs6("div", { className: "flex flex-col", children: [
878
+ /* @__PURE__ */ jsx6("h3", { className: "text-lg font-semibold leading-8 text-slate-900", children: feature.title }),
879
+ /* @__PURE__ */ jsx6("p", { className: "mt-2 text-base leading-7 text-slate-600", children: feature.description })
880
+ ] }, index.toString()))
881
+ }
882
+ )
883
+ ] }) });
884
+ }
885
+ function PricingSection({
886
+ title,
887
+ description,
888
+ tiers,
889
+ showToggle: _showToggle
890
+ }) {
891
+ return /* @__PURE__ */ jsx6("section", { className: "py-20 lg:py-24 bg-slate-50", children: /* @__PURE__ */ jsxs6("div", { className: "mx-auto max-w-7xl px-6 lg:px-8", children: [
892
+ title && /* @__PURE__ */ jsxs6("div", { className: "mx-auto max-w-2xl text-center", children: [
893
+ /* @__PURE__ */ jsx6("h2", { className: "text-3xl font-bold tracking-tight text-slate-900 sm:text-4xl", children: title }),
894
+ description && /* @__PURE__ */ jsx6("p", { className: "mt-4 text-lg leading-8 text-slate-600", children: description })
895
+ ] }),
896
+ /* @__PURE__ */ jsx6("div", { className: "mx-auto mt-16 grid max-w-lg gap-8 lg:max-w-none lg:grid-cols-3", children: tiers.map((tier, index) => /* @__PURE__ */ jsxs6(
897
+ "div",
898
+ {
899
+ className: `flex flex-col rounded-2xl p-8 ring-1 ${tier.highlighted ? "ring-2 ring-indigo-600 bg-white" : "ring-slate-200 bg-white"}`,
900
+ children: [
901
+ /* @__PURE__ */ jsx6("h3", { className: "text-lg font-semibold leading-8 text-slate-900", children: tier.name }),
902
+ /* @__PURE__ */ jsx6("p", { className: "mt-4 text-4xl font-bold tracking-tight text-slate-900", children: tier.price }),
903
+ tier.description && /* @__PURE__ */ jsx6("p", { className: "mt-4 text-base leading-7 text-slate-600", children: tier.description }),
904
+ /* @__PURE__ */ jsx6("ul", { className: "mt-8 space-y-3 text-sm leading-6 text-slate-600", children: tier.features.map((feature, featureIndex) => /* @__PURE__ */ jsxs6("li", { className: "flex gap-x-3", children: [
905
+ /* @__PURE__ */ jsx6("span", { className: "text-indigo-600", children: "*" }),
906
+ feature
907
+ ] }, featureIndex.toString())) }),
908
+ /* @__PURE__ */ jsx6(
909
+ "a",
910
+ {
911
+ href: typeof tier.actions?.primary === "string" ? tier.actions.primary : tier.actions?.primary?.href ?? "#",
912
+ className: `mt-8 block rounded-md px-3 py-2 text-center text-sm font-semibold shadow-sm ${tier.highlighted ? "bg-indigo-600 text-white hover:bg-indigo-500" : "bg-white text-indigo-600 ring-1 ring-inset ring-indigo-200 hover:ring-indigo-300"}`,
913
+ children: tier.callToAction
914
+ }
915
+ )
916
+ ]
917
+ },
918
+ index.toString()
919
+ )) })
920
+ ] }) });
921
+ }
922
+ function TestimonialsSection({
923
+ title,
924
+ testimonials,
925
+ variant: _variant
926
+ }) {
927
+ return /* @__PURE__ */ jsx6("section", { className: "py-20 lg:py-24 bg-white", children: /* @__PURE__ */ jsxs6("div", { className: "mx-auto max-w-7xl px-6 lg:px-8", children: [
928
+ title && /* @__PURE__ */ jsx6("h2", { className: "text-center text-3xl font-bold tracking-tight text-slate-900 sm:text-4xl", children: title }),
929
+ /* @__PURE__ */ jsx6("div", { className: "mx-auto mt-16 grid max-w-2xl gap-8 lg:max-w-none lg:grid-cols-3", children: testimonials.map((testimonial, index) => /* @__PURE__ */ jsxs6(
930
+ "div",
931
+ {
932
+ className: "flex flex-col bg-slate-50 p-8 rounded-2xl",
933
+ children: [
934
+ /* @__PURE__ */ jsxs6("blockquote", { className: "text-lg leading-7 text-slate-700", children: [
935
+ "\u201C",
936
+ testimonial.quote,
937
+ "\u201D"
938
+ ] }),
939
+ /* @__PURE__ */ jsxs6("div", { className: "mt-6", children: [
940
+ /* @__PURE__ */ jsx6("p", { className: "font-semibold text-slate-900", children: testimonial.author }),
941
+ (testimonial.title || testimonial.company) && /* @__PURE__ */ jsxs6("p", { className: "text-sm text-slate-500", children: [
942
+ testimonial.title,
943
+ testimonial.title && testimonial.company ? ", " : "",
944
+ testimonial.company
945
+ ] })
946
+ ] })
947
+ ]
948
+ },
949
+ index.toString()
950
+ )) })
951
+ ] }) });
952
+ }
953
+ function CTASection({
954
+ title,
955
+ description,
956
+ callToAction,
957
+ secondaryCallToAction,
958
+ actions,
959
+ variant: _variant
960
+ }) {
961
+ return /* @__PURE__ */ jsx6("section", { className: "py-20 lg:py-24 bg-indigo-600", children: /* @__PURE__ */ jsxs6("div", { className: "mx-auto max-w-7xl px-6 lg:px-8 text-center", children: [
962
+ /* @__PURE__ */ jsx6("h2", { className: "text-3xl font-bold tracking-tight text-white sm:text-4xl", children: title }),
963
+ description && /* @__PURE__ */ jsx6("p", { className: "mx-auto mt-6 max-w-xl text-lg leading-8 text-indigo-100", children: description }),
964
+ /* @__PURE__ */ jsxs6("div", { className: "mt-10 flex items-center justify-center gap-x-6", children: [
965
+ /* @__PURE__ */ jsx6(
966
+ "a",
967
+ {
968
+ href: typeof actions?.primary === "string" ? actions.primary : actions?.primary?.href ?? "#",
969
+ className: "rounded-md bg-white px-3.5 py-2.5 text-sm font-semibold text-indigo-600 shadow-sm hover:bg-indigo-50",
970
+ children: callToAction
971
+ }
972
+ ),
973
+ secondaryCallToAction && /* @__PURE__ */ jsxs6(
974
+ "a",
975
+ {
976
+ href: typeof actions?.secondary === "string" ? actions.secondary : actions?.secondary?.href ?? "#",
977
+ className: "text-sm font-semibold leading-6 text-white",
978
+ children: [
979
+ secondaryCallToAction,
980
+ " ",
981
+ /* @__PURE__ */ jsx6("span", { "aria-hidden": "true", children: "->" })
982
+ ]
983
+ }
984
+ )
985
+ ] })
986
+ ] }) });
987
+ }
988
+ function FAQSection({ title, items, variant: _variant }) {
989
+ return /* @__PURE__ */ jsx6("section", { className: "py-20 lg:py-24 bg-white", children: /* @__PURE__ */ jsxs6("div", { className: "mx-auto max-w-7xl px-6 lg:px-8", children: [
990
+ title && /* @__PURE__ */ jsx6("h2", { className: "text-center text-3xl font-bold tracking-tight text-slate-900 sm:text-4xl", children: title }),
991
+ /* @__PURE__ */ jsx6("div", { className: "mx-auto mt-16 max-w-3xl divide-y divide-slate-200", children: items.map((item, index) => /* @__PURE__ */ jsxs6("div", { className: "py-6", children: [
992
+ /* @__PURE__ */ jsx6("h3", { className: "text-lg font-semibold leading-7 text-slate-900", children: item.question }),
993
+ /* @__PURE__ */ jsx6("p", { className: "mt-2 text-base leading-7 text-slate-600", children: item.answer })
994
+ ] }, index.toString())) })
995
+ ] }) });
996
+ }
997
+ function LandingPage({
998
+ hero,
999
+ features,
1000
+ pricing,
1001
+ testimonials,
1002
+ cta,
1003
+ faq,
1004
+ sections,
1005
+ children,
1006
+ className
1007
+ }) {
1008
+ return /* @__PURE__ */ jsxs6("div", { className, children: [
1009
+ hero && (isValidElement(hero) ? hero : /* @__PURE__ */ jsx6(HeroSection, { ...hero })),
1010
+ features && (isValidElement(features) ? features : /* @__PURE__ */ jsx6(FeaturesSection, { ...features })),
1011
+ pricing && (isValidElement(pricing) ? pricing : /* @__PURE__ */ jsx6(PricingSection, { ...pricing })),
1012
+ testimonials && (isValidElement(testimonials) ? testimonials : /* @__PURE__ */ jsx6(TestimonialsSection, { ...testimonials })),
1013
+ cta && (isValidElement(cta) ? cta : /* @__PURE__ */ jsx6(CTASection, { ...cta })),
1014
+ faq && (isValidElement(faq) ? faq : /* @__PURE__ */ jsx6(FAQSection, { ...faq })),
1015
+ sections?.map((section, index) => /* @__PURE__ */ jsx6("div", { children: section }, index.toString())),
1016
+ children
1017
+ ] });
1018
+ }
1019
+
1020
+ // src/solar/layouts/site.tsx
1021
+ import { isValidElement as isValidElement2 } from "react";
1022
+ import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
1023
+ function Header2({ logo, nav, cta, LinkComponent }) {
1024
+ const Link = LinkComponent ?? (({
1025
+ href,
1026
+ children,
1027
+ className
1028
+ }) => /* @__PURE__ */ jsx7("a", { href, className, children }));
1029
+ return /* @__PURE__ */ jsx7("header", { className: "sticky top-0 z-50 bg-white/80 backdrop-blur-md border-b border-slate-200", children: /* @__PURE__ */ jsxs7("nav", { className: "mx-auto flex max-w-7xl items-center justify-between p-6 lg:px-8", children: [
1030
+ /* @__PURE__ */ jsx7("div", { className: "flex lg:flex-1", children: /* @__PURE__ */ jsx7(Link, { href: "/", className: "-m-1.5 p-1.5", children: logo }) }),
1031
+ /* @__PURE__ */ jsx7("div", { className: "hidden lg:flex lg:gap-x-12", children: nav.map((item, index) => /* @__PURE__ */ jsx7(
1032
+ Link,
1033
+ {
1034
+ href: item.href,
1035
+ className: "text-sm font-semibold leading-6 text-slate-900 hover:text-slate-600",
1036
+ children: item.label
1037
+ },
1038
+ index.toString()
1039
+ )) }),
1040
+ /* @__PURE__ */ jsx7("div", { className: "hidden lg:flex lg:flex-1 lg:justify-end", children: cta && /* @__PURE__ */ jsx7(
1041
+ Link,
1042
+ {
1043
+ href: cta.href,
1044
+ className: "rounded-md bg-indigo-600 px-3.5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500",
1045
+ children: cta.text
1046
+ }
1047
+ ) })
1048
+ ] }) });
1049
+ }
1050
+ function Footer2({ logo, links, social, copyright }) {
1051
+ return /* @__PURE__ */ jsx7("footer", { className: "bg-slate-900", children: /* @__PURE__ */ jsxs7("div", { className: "mx-auto max-w-7xl px-6 py-12 lg:px-8 lg:py-16", children: [
1052
+ /* @__PURE__ */ jsxs7("div", { className: "xl:grid xl:grid-cols-3 xl:gap-8", children: [
1053
+ /* @__PURE__ */ jsx7("div", { className: "space-y-8", children: logo }),
1054
+ links.length > 0 && /* @__PURE__ */ jsx7("div", { className: "mt-16 grid grid-cols-2 gap-8 xl:col-span-2 xl:mt-0", children: links.map((group, groupIndex) => /* @__PURE__ */ jsxs7("div", { children: [
1055
+ /* @__PURE__ */ jsx7("h3", { className: "text-sm font-semibold leading-6 text-white", children: group.title }),
1056
+ /* @__PURE__ */ jsx7("ul", { className: "mt-6 space-y-4", children: group.links.map((link, linkIndex) => /* @__PURE__ */ jsx7("li", { children: /* @__PURE__ */ jsx7(
1057
+ "a",
1058
+ {
1059
+ href: link.href,
1060
+ className: "text-sm leading-6 text-slate-300 hover:text-white",
1061
+ children: link.label
1062
+ }
1063
+ ) }, linkIndex.toString())) })
1064
+ ] }, groupIndex.toString())) })
1065
+ ] }),
1066
+ (social || copyright) && /* @__PURE__ */ jsx7("div", { className: "mt-16 border-t border-slate-700 pt-8 sm:mt-20 lg:mt-24", children: /* @__PURE__ */ jsxs7("div", { className: "flex items-center justify-between", children: [
1067
+ copyright && /* @__PURE__ */ jsx7("p", { className: "text-sm leading-5 text-slate-400", children: copyright }),
1068
+ social && social.length > 0 && /* @__PURE__ */ jsx7("div", { className: "flex space-x-6", children: social.map((item, index) => /* @__PURE__ */ jsxs7(
1069
+ "a",
1070
+ {
1071
+ href: item.href,
1072
+ className: "text-slate-400 hover:text-slate-300",
1073
+ children: [
1074
+ /* @__PURE__ */ jsx7("span", { className: "sr-only", children: item.platform }),
1075
+ item.icon ?? item.platform
1076
+ ]
1077
+ },
1078
+ index.toString()
1079
+ )) })
1080
+ ] }) })
1081
+ ] }) });
1082
+ }
1083
+ function Site({
1084
+ name: _name,
1085
+ domain: _domain,
1086
+ theme,
1087
+ header,
1088
+ footer,
1089
+ children
1090
+ }) {
1091
+ const isHeaderNode = isValidElement2(header);
1092
+ const isFooterNode = isValidElement2(footer);
1093
+ return /* @__PURE__ */ jsxs7("div", { className: "min-h-screen flex flex-col", "data-theme": theme, children: [
1094
+ isHeaderNode ? header : /* @__PURE__ */ jsx7(Header2, { ...header }),
1095
+ /* @__PURE__ */ jsx7("main", { className: "flex-1", children }),
1096
+ isFooterNode ? footer : /* @__PURE__ */ jsx7(Footer2, { ...footer })
1097
+ ] });
1098
+ }
1099
+
1100
+ // src/solar/index.ts
1101
+ var components = {
1102
+ // Layout components (required by SiteComponents)
1103
+ Site,
1104
+ Header,
1105
+ Footer,
1106
+ LandingPage,
1107
+ // Section components
1108
+ Hero,
1109
+ HeroMinimal,
1110
+ HeroGradient,
1111
+ Features,
1112
+ CTA,
1113
+ // Page component (using LandingPage as default Page)
1114
+ Page: LandingPage
1115
+ };
1116
+ var siteComponents = components;
1117
+ export {
1118
+ CTA,
1119
+ Features,
1120
+ Footer,
1121
+ Header,
1122
+ Hero,
1123
+ HeroGradient,
1124
+ HeroMinimal,
1125
+ LandingPage,
1126
+ Site,
1127
+ components,
1128
+ siteComponents
1129
+ };
1130
+ //# sourceMappingURL=index.js.map