@opensite/ui 0.0.1

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 (75) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +315 -0
  3. package/dist/animated-dialog.cjs +168 -0
  4. package/dist/animated-dialog.cjs.map +1 -0
  5. package/dist/animated-dialog.d.cts +24 -0
  6. package/dist/animated-dialog.d.ts +24 -0
  7. package/dist/animated-dialog.js +166 -0
  8. package/dist/animated-dialog.js.map +1 -0
  9. package/dist/badge.cjs +49 -0
  10. package/dist/badge.cjs.map +1 -0
  11. package/dist/badge.d.cts +13 -0
  12. package/dist/badge.d.ts +13 -0
  13. package/dist/badge.js +46 -0
  14. package/dist/badge.js.map +1 -0
  15. package/dist/button.cjs +63 -0
  16. package/dist/button.cjs.map +1 -0
  17. package/dist/button.d.cts +14 -0
  18. package/dist/button.d.ts +14 -0
  19. package/dist/button.js +60 -0
  20. package/dist/button.js.map +1 -0
  21. package/dist/card.cjs +99 -0
  22. package/dist/card.cjs.map +1 -0
  23. package/dist/card.d.cts +12 -0
  24. package/dist/card.d.ts +12 -0
  25. package/dist/card.js +91 -0
  26. package/dist/card.js.map +1 -0
  27. package/dist/components.cjs +533 -0
  28. package/dist/components.cjs.map +1 -0
  29. package/dist/components.d.cts +14 -0
  30. package/dist/components.d.ts +14 -0
  31. package/dist/components.js +494 -0
  32. package/dist/components.js.map +1 -0
  33. package/dist/container.cjs +47 -0
  34. package/dist/container.cjs.map +1 -0
  35. package/dist/container.d.cts +16 -0
  36. package/dist/container.d.ts +16 -0
  37. package/dist/container.js +41 -0
  38. package/dist/container.js.map +1 -0
  39. package/dist/index.cjs +534 -0
  40. package/dist/index.cjs.map +1 -0
  41. package/dist/index.d.cts +16 -0
  42. package/dist/index.d.ts +16 -0
  43. package/dist/index.js +494 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/page-hero-banner.cjs +119 -0
  46. package/dist/page-hero-banner.cjs.map +1 -0
  47. package/dist/page-hero-banner.d.cts +22 -0
  48. package/dist/page-hero-banner.d.ts +22 -0
  49. package/dist/page-hero-banner.js +113 -0
  50. package/dist/page-hero-banner.js.map +1 -0
  51. package/dist/popover.cjs +73 -0
  52. package/dist/popover.cjs.map +1 -0
  53. package/dist/popover.d.cts +10 -0
  54. package/dist/popover.d.ts +10 -0
  55. package/dist/popover.js +48 -0
  56. package/dist/popover.js.map +1 -0
  57. package/dist/section.cjs +96 -0
  58. package/dist/section.cjs.map +1 -0
  59. package/dist/section.d.cts +21 -0
  60. package/dist/section.d.ts +21 -0
  61. package/dist/section.js +90 -0
  62. package/dist/section.js.map +1 -0
  63. package/dist/types.cjs +4 -0
  64. package/dist/types.cjs.map +1 -0
  65. package/dist/types.d.cts +180 -0
  66. package/dist/types.d.ts +180 -0
  67. package/dist/types.js +3 -0
  68. package/dist/types.js.map +1 -0
  69. package/dist/utils.cjs +13 -0
  70. package/dist/utils.cjs.map +1 -0
  71. package/dist/utils.d.cts +5 -0
  72. package/dist/utils.d.ts +5 -0
  73. package/dist/utils.js +11 -0
  74. package/dist/utils.js.map +1 -0
  75. package/package.json +152 -0
package/dist/card.js ADDED
@@ -0,0 +1,91 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ // lib/utils.ts
6
+ function cn(...inputs) {
7
+ return twMerge(clsx(inputs));
8
+ }
9
+ function Card({ className, ...props }) {
10
+ return /* @__PURE__ */ jsx(
11
+ "div",
12
+ {
13
+ "data-slot": "card",
14
+ className: cn(
15
+ "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",
16
+ className
17
+ ),
18
+ ...props
19
+ }
20
+ );
21
+ }
22
+ function CardHeader({ className, ...props }) {
23
+ return /* @__PURE__ */ jsx(
24
+ "div",
25
+ {
26
+ "data-slot": "card-header",
27
+ className: cn(
28
+ "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
29
+ className
30
+ ),
31
+ ...props
32
+ }
33
+ );
34
+ }
35
+ function CardTitle({ className, ...props }) {
36
+ return /* @__PURE__ */ jsx(
37
+ "div",
38
+ {
39
+ "data-slot": "card-title",
40
+ className: cn("leading-none font-semibold", className),
41
+ ...props
42
+ }
43
+ );
44
+ }
45
+ function CardDescription({ className, ...props }) {
46
+ return /* @__PURE__ */ jsx(
47
+ "div",
48
+ {
49
+ "data-slot": "card-description",
50
+ className: cn("text-muted-foreground text-sm", className),
51
+ ...props
52
+ }
53
+ );
54
+ }
55
+ function CardAction({ className, ...props }) {
56
+ return /* @__PURE__ */ jsx(
57
+ "div",
58
+ {
59
+ "data-slot": "card-action",
60
+ className: cn(
61
+ "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
62
+ className
63
+ ),
64
+ ...props
65
+ }
66
+ );
67
+ }
68
+ function CardContent({ className, ...props }) {
69
+ return /* @__PURE__ */ jsx(
70
+ "div",
71
+ {
72
+ "data-slot": "card-content",
73
+ className: cn("px-6", className),
74
+ ...props
75
+ }
76
+ );
77
+ }
78
+ function CardFooter({ className, ...props }) {
79
+ return /* @__PURE__ */ jsx(
80
+ "div",
81
+ {
82
+ "data-slot": "card-footer",
83
+ className: cn("flex items-center px-6 [.border-t]:pt-6", className),
84
+ ...props
85
+ }
86
+ );
87
+ }
88
+
89
+ export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };
90
+ //# sourceMappingURL=card.js.map
91
+ //# sourceMappingURL=card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../lib/utils.ts","../components/ui/card.tsx"],"names":[],"mappings":";;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACDA,SAAS,IAAA,CAAK,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAClE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,MAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,mFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,0JAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACvE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,4BAAA,EAA8B,SAAS,CAAA;AAAA,MACpD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC7E,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,gEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACzE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,SAAS,CAAA;AAAA,MAC9B,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,yCAAA,EAA2C,SAAS,CAAA;AAAA,MACjE,GAAG;AAAA;AAAA,GACN;AAEJ","file":"card.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n"]}
@@ -0,0 +1,533 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var clsx = require('clsx');
5
+ var tailwindMerge = require('tailwind-merge');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+ var framerMotion = require('framer-motion');
8
+ var hooks = require('@opensite/hooks');
9
+ var reactSlot = require('@radix-ui/react-slot');
10
+ var classVarianceAuthority = require('class-variance-authority');
11
+ var PopoverPrimitive = require('@radix-ui/react-popover');
12
+
13
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
+
15
+ function _interopNamespace(e) {
16
+ if (e && e.__esModule) return e;
17
+ var n = Object.create(null);
18
+ if (e) {
19
+ Object.keys(e).forEach(function (k) {
20
+ if (k !== 'default') {
21
+ var d = Object.getOwnPropertyDescriptor(e, k);
22
+ Object.defineProperty(n, k, d.get ? d : {
23
+ enumerable: true,
24
+ get: function () { return e[k]; }
25
+ });
26
+ }
27
+ });
28
+ }
29
+ n.default = e;
30
+ return Object.freeze(n);
31
+ }
32
+
33
+ var React__default = /*#__PURE__*/_interopDefault(React);
34
+ var PopoverPrimitive__namespace = /*#__PURE__*/_interopNamespace(PopoverPrimitive);
35
+
36
+ // components/ui/container.tsx
37
+ function cn(...inputs) {
38
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
39
+ }
40
+ var maxWidthStyles = {
41
+ sm: "max-w-screen-sm",
42
+ md: "max-w-screen-md",
43
+ lg: "max-w-screen-lg",
44
+ xl: "max-w-screen-xl",
45
+ "2xl": "max-w-screen-2xl",
46
+ "4xl": "max-w-[1536px]",
47
+ full: "max-w-full"
48
+ };
49
+ var Container = React__default.default.forwardRef(
50
+ ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
51
+ const Component = as;
52
+ return /* @__PURE__ */ jsxRuntime.jsx(
53
+ Component,
54
+ {
55
+ ref,
56
+ className: cn(
57
+ "mx-auto w-full px-4 sm:px-6 lg:px-8",
58
+ maxWidthStyles[maxWidth],
59
+ className
60
+ ),
61
+ ...props,
62
+ children
63
+ }
64
+ );
65
+ }
66
+ );
67
+ Container.displayName = "Container";
68
+ var backgroundStyles = {
69
+ white: "bg-background text-foreground",
70
+ gray: "bg-muted/30 text-foreground",
71
+ dark: "bg-foreground text-background",
72
+ gradient: "bg-gradient-to-br from-primary via-primary/90 to-foreground text-primary-foreground",
73
+ primary: "bg-primary text-primary-foreground",
74
+ secondary: "bg-secondary text-secondary-foreground",
75
+ muted: "bg-muted text-muted-foreground"
76
+ };
77
+ var spacingStyles = {
78
+ sm: "py-12 md:py-16",
79
+ md: "py-16 md:py-24",
80
+ lg: "py-20 md:py-32",
81
+ xl: "py-24 md:py-40"
82
+ };
83
+ var Section = React__default.default.forwardRef(
84
+ ({
85
+ id,
86
+ title,
87
+ subtitle,
88
+ children,
89
+ className,
90
+ background = "white",
91
+ spacing = "lg",
92
+ ...props
93
+ }, ref) => {
94
+ return /* @__PURE__ */ jsxRuntime.jsx(
95
+ "section",
96
+ {
97
+ ref,
98
+ id,
99
+ className: cn(
100
+ backgroundStyles[background],
101
+ spacingStyles[spacing],
102
+ className
103
+ ),
104
+ ...props,
105
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Container, { children: [
106
+ (title || subtitle) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center mb-12 md:mb-16", children: [
107
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-semibold uppercase tracking-wider mb-2 text-primary", children: subtitle }),
108
+ title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-3xl md:text-4xl lg:text-5xl font-bold tracking-tight", children: title })
109
+ ] }),
110
+ children
111
+ ] })
112
+ }
113
+ );
114
+ }
115
+ );
116
+ Section.displayName = "Section";
117
+ var sizeStyles = {
118
+ sm: "max-w-md",
119
+ md: "max-w-2xl",
120
+ lg: "max-w-4xl",
121
+ xl: "max-w-5xl",
122
+ full: "max-w-7xl"
123
+ };
124
+ var dialogTransition = {
125
+ duration: 0.35,
126
+ ease: [0.16, 1, 0.3, 1]
127
+ };
128
+ function AnimatedDialog({
129
+ open,
130
+ onOpenChange,
131
+ title,
132
+ eyebrow,
133
+ description,
134
+ children,
135
+ header,
136
+ footer,
137
+ size = "lg",
138
+ className,
139
+ contentClassName
140
+ }) {
141
+ const titleId = React.useId();
142
+ const descriptionId = React.useId();
143
+ const containerRef = React.useRef(null);
144
+ hooks.useOnClickOutside(containerRef, () => {
145
+ if (open) {
146
+ onOpenChange(false);
147
+ }
148
+ });
149
+ React.useEffect(() => {
150
+ if (!open) {
151
+ return;
152
+ }
153
+ const onKeyDown = (event) => {
154
+ if (event.key === "Escape") {
155
+ onOpenChange(false);
156
+ }
157
+ };
158
+ const previousOverflow = document.body.style.overflow;
159
+ document.body.style.overflow = "hidden";
160
+ window.addEventListener("keydown", onKeyDown);
161
+ return () => {
162
+ document.body.style.overflow = previousOverflow;
163
+ window.removeEventListener("keydown", onKeyDown);
164
+ };
165
+ }, [open, onOpenChange]);
166
+ return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: open ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "fixed inset-0 z-50 h-screen overflow-y-auto", children: [
167
+ /* @__PURE__ */ jsxRuntime.jsx(
168
+ framerMotion.motion.div,
169
+ {
170
+ initial: { opacity: 0 },
171
+ animate: { opacity: 1, transition: dialogTransition },
172
+ exit: { opacity: 0, transition: dialogTransition },
173
+ className: "fixed inset-0 h-full w-full bg-foreground/80 backdrop-blur-lg"
174
+ }
175
+ ),
176
+ /* @__PURE__ */ jsxRuntime.jsxs(
177
+ framerMotion.motion.div,
178
+ {
179
+ initial: { opacity: 0, y: 24, scale: 0.98 },
180
+ animate: {
181
+ opacity: 1,
182
+ y: 0,
183
+ scale: 1,
184
+ transition: dialogTransition
185
+ },
186
+ exit: {
187
+ opacity: 0,
188
+ y: 12,
189
+ scale: 0.98,
190
+ transition: dialogTransition
191
+ },
192
+ ref: containerRef,
193
+ role: "dialog",
194
+ "aria-modal": "true",
195
+ "aria-labelledby": title ? titleId : void 0,
196
+ "aria-describedby": description ? descriptionId : void 0,
197
+ className: cn(
198
+ "relative z-[60] mx-auto my-10 flex w-[92vw] max-h-[85vh] flex-col overflow-hidden rounded-3xl bg-card p-4 shadow-2xl ring-1 ring-border/10 md:my-16 md:p-10",
199
+ sizeStyles[size],
200
+ className
201
+ ),
202
+ children: [
203
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-6", children: [
204
+ header ? header : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
205
+ eyebrow ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-primary", children: eyebrow }) : null,
206
+ title ? /* @__PURE__ */ jsxRuntime.jsx(
207
+ "h2",
208
+ {
209
+ id: titleId,
210
+ className: "text-2xl font-semibold text-card-foreground md:text-4xl",
211
+ children: title
212
+ }
213
+ ) : null,
214
+ description ? /* @__PURE__ */ jsxRuntime.jsx(
215
+ "p",
216
+ {
217
+ id: descriptionId,
218
+ className: "text-sm text-muted-foreground md:text-base",
219
+ children: description
220
+ }
221
+ ) : null
222
+ ] }),
223
+ /* @__PURE__ */ jsxRuntime.jsx(
224
+ "button",
225
+ {
226
+ type: "button",
227
+ "aria-label": "Close dialog",
228
+ className: "flex h-9 w-9 items-center justify-center rounded-full bg-foreground text-background transition hover:bg-foreground/80",
229
+ onClick: () => onOpenChange(false),
230
+ children: /* @__PURE__ */ jsxRuntime.jsx(
231
+ "svg",
232
+ {
233
+ xmlns: "http://www.w3.org/2000/svg",
234
+ width: "24",
235
+ height: "24",
236
+ viewBox: "0 0 24 24",
237
+ children: /* @__PURE__ */ jsxRuntime.jsx(
238
+ "path",
239
+ {
240
+ fill: "none",
241
+ stroke: "currentColor",
242
+ strokeLinecap: "round",
243
+ strokeLinejoin: "round",
244
+ strokeWidth: "2",
245
+ d: "M18 6L6 18M6 6l12 12"
246
+ }
247
+ )
248
+ }
249
+ )
250
+ }
251
+ )
252
+ ] }),
253
+ children ? /* @__PURE__ */ jsxRuntime.jsx(
254
+ "div",
255
+ {
256
+ className: cn(
257
+ "mt-6 flex-1 min-h-0 overflow-y-auto pr-2",
258
+ contentClassName
259
+ ),
260
+ children
261
+ }
262
+ ) : null,
263
+ footer ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-6", children: footer }) : null
264
+ ]
265
+ }
266
+ )
267
+ ] }) : null });
268
+ }
269
+ function PageHeroBanner({
270
+ imageUrl,
271
+ videoUrl,
272
+ alt = "Hero banner",
273
+ children,
274
+ className = "",
275
+ loading = "eager",
276
+ minHeight = "500px",
277
+ showOverlay = true,
278
+ overlayOpacity = 0.6,
279
+ contentMaxWidth = "4xl",
280
+ style,
281
+ ...props
282
+ }) {
283
+ if (!imageUrl && !videoUrl) {
284
+ throw new Error("PageHeroBanner requires either imageUrl or videoUrl");
285
+ }
286
+ if (imageUrl && videoUrl) {
287
+ throw new Error(
288
+ "PageHeroBanner cannot have both imageUrl and videoUrl. Please provide only one."
289
+ );
290
+ }
291
+ return /* @__PURE__ */ jsxRuntime.jsxs(
292
+ "div",
293
+ {
294
+ className: cn("relative w-full overflow-hidden", className),
295
+ style: {
296
+ minHeight,
297
+ ...style
298
+ },
299
+ ...props,
300
+ children: [
301
+ imageUrl && /* @__PURE__ */ jsxRuntime.jsx(
302
+ "img",
303
+ {
304
+ src: imageUrl,
305
+ alt,
306
+ loading,
307
+ className: "absolute inset-0 w-full h-full object-cover"
308
+ }
309
+ ),
310
+ videoUrl && /* @__PURE__ */ jsxRuntime.jsx(
311
+ "video",
312
+ {
313
+ src: videoUrl,
314
+ className: "absolute inset-0 w-full h-full object-cover",
315
+ autoPlay: true,
316
+ loop: true,
317
+ muted: true,
318
+ playsInline: true,
319
+ preload: "auto"
320
+ }
321
+ ),
322
+ showOverlay && /* @__PURE__ */ jsxRuntime.jsx(
323
+ "div",
324
+ {
325
+ className: "absolute inset-0 bg-gradient-to-b from-foreground/70 via-foreground/50 to-foreground/80",
326
+ style: { opacity: overlayOpacity }
327
+ }
328
+ ),
329
+ /* @__PURE__ */ jsxRuntime.jsx(
330
+ Container,
331
+ {
332
+ maxWidth: contentMaxWidth,
333
+ className: "relative h-full flex items-center",
334
+ style: { minHeight },
335
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative text-background drop-shadow-lg py-16 md:py-24", children })
336
+ }
337
+ )
338
+ ]
339
+ }
340
+ );
341
+ }
342
+ var buttonVariants = classVarianceAuthority.cva(
343
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
344
+ {
345
+ variants: {
346
+ variant: {
347
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
348
+ destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
349
+ outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
350
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
351
+ ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
352
+ link: "text-primary underline-offset-4 hover:underline"
353
+ },
354
+ size: {
355
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
356
+ sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
357
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
358
+ icon: "size-9",
359
+ "icon-sm": "size-8",
360
+ "icon-lg": "size-10"
361
+ }
362
+ },
363
+ defaultVariants: {
364
+ variant: "default",
365
+ size: "default"
366
+ }
367
+ }
368
+ );
369
+ function Button({
370
+ className,
371
+ variant = "default",
372
+ size = "default",
373
+ asChild = false,
374
+ ...props
375
+ }) {
376
+ const Comp = asChild ? reactSlot.Slot : "button";
377
+ return /* @__PURE__ */ jsxRuntime.jsx(
378
+ Comp,
379
+ {
380
+ "data-slot": "button",
381
+ "data-variant": variant,
382
+ "data-size": size,
383
+ className: cn(buttonVariants({ variant, size, className })),
384
+ ...props
385
+ }
386
+ );
387
+ }
388
+ function Card({ className, ...props }) {
389
+ return /* @__PURE__ */ jsxRuntime.jsx(
390
+ "div",
391
+ {
392
+ "data-slot": "card",
393
+ className: cn(
394
+ "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",
395
+ className
396
+ ),
397
+ ...props
398
+ }
399
+ );
400
+ }
401
+ function CardHeader({ className, ...props }) {
402
+ return /* @__PURE__ */ jsxRuntime.jsx(
403
+ "div",
404
+ {
405
+ "data-slot": "card-header",
406
+ className: cn(
407
+ "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
408
+ className
409
+ ),
410
+ ...props
411
+ }
412
+ );
413
+ }
414
+ function CardTitle({ className, ...props }) {
415
+ return /* @__PURE__ */ jsxRuntime.jsx(
416
+ "div",
417
+ {
418
+ "data-slot": "card-title",
419
+ className: cn("leading-none font-semibold", className),
420
+ ...props
421
+ }
422
+ );
423
+ }
424
+ function CardDescription({ className, ...props }) {
425
+ return /* @__PURE__ */ jsxRuntime.jsx(
426
+ "div",
427
+ {
428
+ "data-slot": "card-description",
429
+ className: cn("text-muted-foreground text-sm", className),
430
+ ...props
431
+ }
432
+ );
433
+ }
434
+ function CardContent({ className, ...props }) {
435
+ return /* @__PURE__ */ jsxRuntime.jsx(
436
+ "div",
437
+ {
438
+ "data-slot": "card-content",
439
+ className: cn("px-6", className),
440
+ ...props
441
+ }
442
+ );
443
+ }
444
+ function CardFooter({ className, ...props }) {
445
+ return /* @__PURE__ */ jsxRuntime.jsx(
446
+ "div",
447
+ {
448
+ "data-slot": "card-footer",
449
+ className: cn("flex items-center px-6 [.border-t]:pt-6", className),
450
+ ...props
451
+ }
452
+ );
453
+ }
454
+ var badgeVariants = classVarianceAuthority.cva(
455
+ "inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
456
+ {
457
+ variants: {
458
+ variant: {
459
+ default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
460
+ secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
461
+ destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
462
+ outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
463
+ }
464
+ },
465
+ defaultVariants: {
466
+ variant: "default"
467
+ }
468
+ }
469
+ );
470
+ function Badge({
471
+ className,
472
+ variant,
473
+ asChild = false,
474
+ ...props
475
+ }) {
476
+ const Comp = asChild ? reactSlot.Slot : "span";
477
+ return /* @__PURE__ */ jsxRuntime.jsx(
478
+ Comp,
479
+ {
480
+ "data-slot": "badge",
481
+ className: cn(badgeVariants({ variant }), className),
482
+ ...props
483
+ }
484
+ );
485
+ }
486
+ function Popover({
487
+ ...props
488
+ }) {
489
+ return /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Root, { "data-slot": "popover", ...props });
490
+ }
491
+ function PopoverTrigger({
492
+ ...props
493
+ }) {
494
+ return /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Trigger, { "data-slot": "popover-trigger", ...props });
495
+ }
496
+ function PopoverContent({
497
+ className,
498
+ align = "center",
499
+ sideOffset = 4,
500
+ ...props
501
+ }) {
502
+ return /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
503
+ PopoverPrimitive__namespace.Content,
504
+ {
505
+ "data-slot": "popover-content",
506
+ align,
507
+ sideOffset,
508
+ className: cn(
509
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",
510
+ className
511
+ ),
512
+ ...props
513
+ }
514
+ ) });
515
+ }
516
+
517
+ exports.AnimatedDialog = AnimatedDialog;
518
+ exports.Badge = Badge;
519
+ exports.Button = Button;
520
+ exports.Card = Card;
521
+ exports.CardContent = CardContent;
522
+ exports.CardDescription = CardDescription;
523
+ exports.CardFooter = CardFooter;
524
+ exports.CardHeader = CardHeader;
525
+ exports.CardTitle = CardTitle;
526
+ exports.Container = Container;
527
+ exports.PageHeroBanner = PageHeroBanner;
528
+ exports.Popover = Popover;
529
+ exports.PopoverContent = PopoverContent;
530
+ exports.PopoverTrigger = PopoverTrigger;
531
+ exports.Section = Section;
532
+ //# sourceMappingURL=components.cjs.map
533
+ //# sourceMappingURL=components.cjs.map