@j3m-quantum/ui 0.1.0 → 0.2.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.
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var React7 = require('react');
3
+ var React10 = require('react');
4
4
  var reactSlot = require('@radix-ui/react-slot');
5
5
  var classVarianceAuthority = require('class-variance-authority');
6
6
  var clsx = require('clsx');
@@ -62,7 +62,7 @@ function _interopNamespace(e) {
62
62
  return Object.freeze(n);
63
63
  }
64
64
 
65
- var React7__namespace = /*#__PURE__*/_interopNamespace(React7);
65
+ var React10__namespace = /*#__PURE__*/_interopNamespace(React10);
66
66
  var SeparatorPrimitive__namespace = /*#__PURE__*/_interopNamespace(SeparatorPrimitive);
67
67
  var CheckboxPrimitive__namespace = /*#__PURE__*/_interopNamespace(CheckboxPrimitive);
68
68
  var RadioGroupPrimitive__namespace = /*#__PURE__*/_interopNamespace(RadioGroupPrimitive);
@@ -95,8 +95,8 @@ var ResizablePrimitive__namespace = /*#__PURE__*/_interopNamespace(ResizablePrim
95
95
  // src/hooks/use-mobile.ts
96
96
  var MOBILE_BREAKPOINT = 768;
97
97
  function useIsMobile() {
98
- const [isMobile, setIsMobile] = React7__namespace.useState(void 0);
99
- React7__namespace.useEffect(() => {
98
+ const [isMobile, setIsMobile] = React10__namespace.useState(void 0);
99
+ React10__namespace.useEffect(() => {
100
100
  const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
101
101
  const onChange = () => {
102
102
  setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
@@ -111,24 +111,73 @@ function cn(...inputs) {
111
111
  return tailwindMerge.twMerge(clsx.clsx(inputs));
112
112
  }
113
113
  var buttonVariants = classVarianceAuthority.cva(
114
- "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",
114
+ // Base styles - shared across all variants
115
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
115
116
  {
116
117
  variants: {
117
118
  variant: {
118
- default: "bg-primary text-primary-foreground hover:bg-primary/90",
119
- destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
120
- 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",
121
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
122
- ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
123
- link: "text-primary underline-offset-4 hover:underline"
119
+ // Primary CTA - J3M Orange
120
+ default: [
121
+ "text-[var(--color-text-on-accent)]",
122
+ "bg-[var(--j3m-primary-300)]",
123
+ "hover:bg-[var(--j3m-primary-400)]",
124
+ "active:bg-[var(--j3m-primary-500)]",
125
+ "focus-visible:ring-[var(--j3m-primary-300)]",
126
+ "rounded-[var(--j3m-radius-2xs)]",
127
+ "shadow-sm"
128
+ ].join(" "),
129
+ // Secondary - Neutral surface
130
+ secondary: [
131
+ "text-[var(--color-text-main)]",
132
+ "bg-[var(--j3m-neutral-200)]",
133
+ "hover:bg-[var(--j3m-neutral-300)]",
134
+ "active:bg-[var(--j3m-neutral-400)]",
135
+ "focus-visible:ring-[var(--j3m-neutral-400)]",
136
+ "rounded-[var(--j3m-radius-2xs)]"
137
+ ].join(" "),
138
+ // Outline - Border only
139
+ outline: [
140
+ "text-[var(--color-text-main)]",
141
+ "bg-transparent",
142
+ "border border-[var(--color-border-strong)]",
143
+ "hover:bg-[var(--j3m-neutral-200)]",
144
+ "active:bg-[var(--j3m-neutral-300)]",
145
+ "focus-visible:ring-[var(--j3m-neutral-400)]",
146
+ "rounded-[var(--j3m-radius-2xs)]"
147
+ ].join(" "),
148
+ // Ghost - Minimal
149
+ ghost: [
150
+ "text-[var(--color-text-muted)]",
151
+ "bg-transparent",
152
+ "hover:bg-[var(--j3m-neutral-200)]",
153
+ "hover:text-[var(--color-text-main)]",
154
+ "active:bg-[var(--j3m-neutral-300)]",
155
+ "focus-visible:ring-[var(--j3m-neutral-400)]",
156
+ "rounded-[var(--j3m-radius-2xs)]"
157
+ ].join(" "),
158
+ // Destructive - Error/danger actions
159
+ destructive: [
160
+ "text-[var(--color-text-on-accent)]",
161
+ "bg-[var(--j3m-red-100)]",
162
+ "hover:bg-[var(--j3m-red-200)]",
163
+ "active:bg-[var(--j3m-red-200)]",
164
+ "focus-visible:ring-[var(--j3m-red-100)]",
165
+ "rounded-[var(--j3m-radius-2xs)]",
166
+ "shadow-sm"
167
+ ].join(" "),
168
+ // Link - Text only
169
+ link: [
170
+ "text-[var(--j3m-primary-300)]",
171
+ "underline-offset-4",
172
+ "hover:underline",
173
+ "hover:text-[var(--j3m-primary-400)]"
174
+ ].join(" ")
124
175
  },
125
176
  size: {
126
- default: "h-9 px-4 py-2 has-[>svg]:px-3",
127
- sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
128
- lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
129
- icon: "size-9",
130
- "icon-sm": "size-8",
131
- "icon-lg": "size-10"
177
+ sm: "h-8 px-[var(--j3m-spacing-s)] text-xs",
178
+ default: "h-10 px-[var(--j3m-spacing-m)] py-[var(--j3m-spacing-xs)] text-sm",
179
+ lg: "h-12 px-[var(--j3m-spacing-xl)] text-base",
180
+ icon: "h-10 w-10"
132
181
  }
133
182
  },
134
183
  defaultVariants: {
@@ -137,23 +186,20 @@ var buttonVariants = classVarianceAuthority.cva(
137
186
  }
138
187
  }
139
188
  );
140
- function Button({
141
- className,
142
- variant,
143
- size,
144
- asChild = false,
145
- ...props
146
- }) {
147
- const Comp = asChild ? reactSlot.Slot : "button";
148
- return /* @__PURE__ */ jsxRuntime.jsx(
149
- Comp,
150
- {
151
- "data-slot": "button",
152
- className: cn(buttonVariants({ variant, size, className })),
153
- ...props
154
- }
155
- );
156
- }
189
+ var Button = React10__namespace.forwardRef(
190
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
191
+ const Comp = asChild ? reactSlot.Slot : "button";
192
+ return /* @__PURE__ */ jsxRuntime.jsx(
193
+ Comp,
194
+ {
195
+ className: cn(buttonVariants({ variant, size, className })),
196
+ ref,
197
+ ...props
198
+ }
199
+ );
200
+ }
201
+ );
202
+ Button.displayName = "Button";
157
203
  function Separator({
158
204
  className,
159
205
  orientation = "horizontal",
@@ -239,22 +285,59 @@ function ButtonGroupSeparator({
239
285
  }
240
286
  );
241
287
  }
242
- function Input({ className, type, ...props }) {
243
- return /* @__PURE__ */ jsxRuntime.jsx(
244
- "input",
245
- {
246
- type,
247
- "data-slot": "input",
248
- className: cn(
249
- "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
250
- "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
251
- "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
252
- className
253
- ),
254
- ...props
255
- }
256
- );
257
- }
288
+ var Input = React10__namespace.forwardRef(
289
+ ({ className, type, ...props }, ref) => {
290
+ return /* @__PURE__ */ jsxRuntime.jsx(
291
+ "input",
292
+ {
293
+ type,
294
+ "data-slot": "input",
295
+ className: cn(
296
+ // Base
297
+ "flex h-10 w-full min-w-0 text-sm",
298
+ "px-[var(--j3m-spacing-s)] py-[var(--j3m-spacing-xs)]",
299
+ "rounded-[var(--j3m-radius-2xs)]",
300
+ // Colors
301
+ "bg-[var(--color-bg-surface)]",
302
+ "text-[var(--color-text-main)]",
303
+ "border border-[var(--color-border-subtle)]",
304
+ // Placeholder
305
+ "placeholder:text-[var(--color-text-soft)]",
306
+ // Focus state
307
+ "focus-visible:outline-none",
308
+ "focus-visible:ring-2",
309
+ "focus-visible:ring-[var(--j3m-primary-300)]",
310
+ "focus-visible:ring-offset-1",
311
+ "focus-visible:border-[var(--j3m-primary-300)]",
312
+ // Hover state
313
+ "hover:border-[var(--color-border-strong)]",
314
+ // Disabled state
315
+ "disabled:cursor-not-allowed",
316
+ "disabled:opacity-50",
317
+ "disabled:bg-[var(--color-bg-subtle)]",
318
+ // Error state (via aria-invalid)
319
+ "aria-invalid:border-[var(--j3m-red-100)]",
320
+ "aria-invalid:focus-visible:ring-[var(--j3m-red-100)]",
321
+ // File input
322
+ "file:border-0",
323
+ "file:bg-transparent",
324
+ "file:text-sm",
325
+ "file:font-medium",
326
+ "file:text-[var(--color-text-main)]",
327
+ // Selection
328
+ "selection:bg-[var(--j3m-primary-100)]",
329
+ "selection:text-[var(--color-text-main)]",
330
+ // Transition
331
+ "transition-colors duration-150",
332
+ className
333
+ ),
334
+ ref,
335
+ ...props
336
+ }
337
+ );
338
+ }
339
+ );
340
+ Input.displayName = "Input";
258
341
  function Textarea({ className, ...props }) {
259
342
  return /* @__PURE__ */ jsxRuntime.jsx(
260
343
  "textarea",
@@ -502,7 +585,7 @@ function Slider({
502
585
  max = 100,
503
586
  ...props
504
587
  }) {
505
- const _values = React7__namespace.useMemo(
588
+ const _values = React10__namespace.useMemo(
506
589
  () => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],
507
590
  [value, defaultValue, min, max]
508
591
  );
@@ -788,7 +871,7 @@ function Toggle({
788
871
  }
789
872
  );
790
873
  }
791
- var ToggleGroupContext = React7__namespace.createContext({
874
+ var ToggleGroupContext = React10__namespace.createContext({
792
875
  size: "default",
793
876
  variant: "default",
794
877
  spacing: 0
@@ -825,7 +908,7 @@ function ToggleGroupItem({
825
908
  size,
826
909
  ...props
827
910
  }) {
828
- const context = React7__namespace.useContext(ToggleGroupContext);
911
+ const context = React10__namespace.useContext(ToggleGroupContext);
829
912
  return /* @__PURE__ */ jsxRuntime.jsx(
830
913
  ToggleGroupPrimitive__namespace.Item,
831
914
  {
@@ -880,7 +963,7 @@ function InputOTPSlot({
880
963
  className,
881
964
  ...props
882
965
  }) {
883
- const inputOTPContext = React7__namespace.useContext(inputOtp.OTPInputContext);
966
+ const inputOTPContext = React10__namespace.useContext(inputOtp.OTPInputContext);
884
967
  const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
885
968
  return /* @__PURE__ */ jsxRuntime.jsxs(
886
969
  "div",
@@ -919,7 +1002,7 @@ function Label2({
919
1002
  );
920
1003
  }
921
1004
  var Form = reactHookForm.FormProvider;
922
- var FormFieldContext = React7__namespace.createContext(
1005
+ var FormFieldContext = React10__namespace.createContext(
923
1006
  {}
924
1007
  );
925
1008
  var FormField = ({
@@ -928,8 +1011,8 @@ var FormField = ({
928
1011
  return /* @__PURE__ */ jsxRuntime.jsx(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsxRuntime.jsx(reactHookForm.Controller, { ...props }) });
929
1012
  };
930
1013
  var useFormField = () => {
931
- const fieldContext = React7__namespace.useContext(FormFieldContext);
932
- const itemContext = React7__namespace.useContext(FormItemContext);
1014
+ const fieldContext = React10__namespace.useContext(FormFieldContext);
1015
+ const itemContext = React10__namespace.useContext(FormItemContext);
933
1016
  const { getFieldState } = reactHookForm.useFormContext();
934
1017
  const formState = reactHookForm.useFormState({ name: fieldContext.name });
935
1018
  const fieldState = getFieldState(fieldContext.name, formState);
@@ -946,11 +1029,11 @@ var useFormField = () => {
946
1029
  ...fieldState
947
1030
  };
948
1031
  };
949
- var FormItemContext = React7__namespace.createContext(
1032
+ var FormItemContext = React10__namespace.createContext(
950
1033
  {}
951
1034
  );
952
1035
  function FormItem({ className, ...props }) {
953
- const id = React7__namespace.useId();
1036
+ const id = React10__namespace.useId();
954
1037
  return /* @__PURE__ */ jsxRuntime.jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsxRuntime.jsx(
955
1038
  "div",
956
1039
  {
@@ -1198,7 +1281,7 @@ function FieldError({
1198
1281
  errors,
1199
1282
  ...props
1200
1283
  }) {
1201
- const content = React7.useMemo(() => {
1284
+ const content = React10.useMemo(() => {
1202
1285
  if (children) {
1203
1286
  return children;
1204
1287
  }
@@ -1229,85 +1312,148 @@ function FieldError({
1229
1312
  }
1230
1313
  );
1231
1314
  }
1232
- function Card({ className, ...props }) {
1233
- return /* @__PURE__ */ jsxRuntime.jsx(
1315
+ var cardVariants = classVarianceAuthority.cva(
1316
+ // Base styles
1317
+ "flex flex-col rounded-[var(--j3m-radius-2xs)]",
1318
+ {
1319
+ variants: {
1320
+ variant: {
1321
+ // Default solid card
1322
+ default: [
1323
+ "bg-[var(--color-bg-surface)]",
1324
+ "border border-[var(--color-border-subtle)]",
1325
+ "text-[var(--color-text-main)]",
1326
+ "shadow-sm"
1327
+ ].join(" "),
1328
+ // Glass Light - for light backgrounds or over images
1329
+ "glass-light": [
1330
+ "bg-[var(--j3m-glass-light)]",
1331
+ "backdrop-blur-[var(--j3m-blur-md)]",
1332
+ "border border-[var(--j3m-glass-border-light)]",
1333
+ "text-[var(--color-text-main)]",
1334
+ "shadow-[var(--j3m-glass-shadow-md)]"
1335
+ ].join(" "),
1336
+ // Glass Dark - for light backgrounds, dark card
1337
+ "glass-dark": [
1338
+ "bg-[var(--j3m-glass-dark)]",
1339
+ "backdrop-blur-[var(--j3m-blur-md)]",
1340
+ "border border-[var(--j3m-glass-border-dark)]",
1341
+ "text-white",
1342
+ "shadow-[var(--j3m-glass-shadow-lg)]"
1343
+ ].join(" "),
1344
+ // Glass Neutral - subtle frosted effect
1345
+ "glass-neutral": [
1346
+ "bg-[var(--j3m-glass-neutral)]",
1347
+ "backdrop-blur-[var(--j3m-blur-lg)]",
1348
+ "border border-[var(--j3m-glass-border-subtle)]",
1349
+ "text-[var(--color-text-main)]",
1350
+ "shadow-[var(--j3m-glass-shadow-sm)]"
1351
+ ].join(" "),
1352
+ // Glass Primary - with orange tint
1353
+ "glass-primary": [
1354
+ "bg-[var(--j3m-glass-primary)]",
1355
+ "backdrop-blur-[var(--j3m-blur-lg)]",
1356
+ "border border-[var(--j3m-glass-border-light)]",
1357
+ "text-[var(--color-text-main)]",
1358
+ "shadow-[var(--j3m-glass-shadow-glow)]"
1359
+ ].join(" ")
1360
+ }
1361
+ },
1362
+ defaultVariants: {
1363
+ variant: "default"
1364
+ }
1365
+ }
1366
+ );
1367
+ var Card = React10__namespace.forwardRef(
1368
+ ({ className, variant, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1234
1369
  "div",
1235
1370
  {
1371
+ ref,
1236
1372
  "data-slot": "card",
1237
- className: cn(
1238
- "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",
1239
- className
1240
- ),
1373
+ className: cn(cardVariants({ variant, className })),
1241
1374
  ...props
1242
1375
  }
1243
- );
1244
- }
1245
- function CardHeader({ className, ...props }) {
1246
- return /* @__PURE__ */ jsxRuntime.jsx(
1376
+ )
1377
+ );
1378
+ Card.displayName = "Card";
1379
+ var CardHeader = React10__namespace.forwardRef(
1380
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1247
1381
  "div",
1248
1382
  {
1383
+ ref,
1249
1384
  "data-slot": "card-header",
1250
1385
  className: cn(
1251
- "@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",
1386
+ "flex flex-col gap-[var(--j3m-spacing-2xs)]",
1387
+ "px-[var(--j3m-spacing-l)] py-[var(--j3m-spacing-m)]",
1252
1388
  className
1253
1389
  ),
1254
1390
  ...props
1255
1391
  }
1256
- );
1257
- }
1258
- function CardTitle({ className, ...props }) {
1259
- return /* @__PURE__ */ jsxRuntime.jsx(
1260
- "div",
1392
+ )
1393
+ );
1394
+ CardHeader.displayName = "CardHeader";
1395
+ var CardTitle = React10__namespace.forwardRef(
1396
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1397
+ "h3",
1261
1398
  {
1399
+ ref,
1262
1400
  "data-slot": "card-title",
1263
- className: cn("leading-none font-semibold", className),
1401
+ className: cn(
1402
+ "text-lg font-semibold leading-none tracking-tight",
1403
+ className
1404
+ ),
1264
1405
  ...props
1265
1406
  }
1266
- );
1267
- }
1268
- function CardDescription({ className, ...props }) {
1269
- return /* @__PURE__ */ jsxRuntime.jsx(
1270
- "div",
1407
+ )
1408
+ );
1409
+ CardTitle.displayName = "CardTitle";
1410
+ var CardDescription = React10__namespace.forwardRef(
1411
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1412
+ "p",
1271
1413
  {
1414
+ ref,
1272
1415
  "data-slot": "card-description",
1273
- className: cn("text-muted-foreground text-sm", className),
1274
- ...props
1275
- }
1276
- );
1277
- }
1278
- function CardAction({ className, ...props }) {
1279
- return /* @__PURE__ */ jsxRuntime.jsx(
1280
- "div",
1281
- {
1282
- "data-slot": "card-action",
1283
1416
  className: cn(
1284
- "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
1417
+ "text-sm opacity-80",
1285
1418
  className
1286
1419
  ),
1287
1420
  ...props
1288
1421
  }
1289
- );
1290
- }
1291
- function CardContent({ className, ...props }) {
1292
- return /* @__PURE__ */ jsxRuntime.jsx(
1422
+ )
1423
+ );
1424
+ CardDescription.displayName = "CardDescription";
1425
+ var CardContent = React10__namespace.forwardRef(
1426
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1293
1427
  "div",
1294
1428
  {
1429
+ ref,
1295
1430
  "data-slot": "card-content",
1296
- className: cn("px-6", className),
1431
+ className: cn(
1432
+ "px-[var(--j3m-spacing-l)] pb-[var(--j3m-spacing-m)]",
1433
+ className
1434
+ ),
1297
1435
  ...props
1298
1436
  }
1299
- );
1300
- }
1301
- function CardFooter({ className, ...props }) {
1302
- return /* @__PURE__ */ jsxRuntime.jsx(
1437
+ )
1438
+ );
1439
+ CardContent.displayName = "CardContent";
1440
+ var CardFooter = React10__namespace.forwardRef(
1441
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1303
1442
  "div",
1304
1443
  {
1444
+ ref,
1305
1445
  "data-slot": "card-footer",
1306
- className: cn("flex items-center px-6 [.border-t]:pt-6", className),
1446
+ className: cn(
1447
+ "flex items-center",
1448
+ "px-[var(--j3m-spacing-l)] py-[var(--j3m-spacing-m)]",
1449
+ "border-t border-[inherit]",
1450
+ className
1451
+ ),
1307
1452
  ...props
1308
1453
  }
1309
- );
1310
- }
1454
+ )
1455
+ );
1456
+ CardFooter.displayName = "CardFooter";
1311
1457
  function Table({ className, ...props }) {
1312
1458
  return /* @__PURE__ */ jsxRuntime.jsx(
1313
1459
  "div",
@@ -1762,8 +1908,8 @@ function CalendarDayButton({
1762
1908
  ...props
1763
1909
  }) {
1764
1910
  const defaultClassNames = reactDayPicker.getDefaultClassNames();
1765
- const ref = React7__namespace.useRef(null);
1766
- React7__namespace.useEffect(() => {
1911
+ const ref = React10__namespace.useRef(null);
1912
+ React10__namespace.useEffect(() => {
1767
1913
  if (modifiers.focused) ref.current?.focus();
1768
1914
  }, [modifiers.focused]);
1769
1915
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -1786,9 +1932,9 @@ function CalendarDayButton({
1786
1932
  }
1787
1933
  );
1788
1934
  }
1789
- var CarouselContext = React7__namespace.createContext(null);
1935
+ var CarouselContext = React10__namespace.createContext(null);
1790
1936
  function useCarousel() {
1791
- const context = React7__namespace.useContext(CarouselContext);
1937
+ const context = React10__namespace.useContext(CarouselContext);
1792
1938
  if (!context) {
1793
1939
  throw new Error("useCarousel must be used within a <Carousel />");
1794
1940
  }
@@ -1810,20 +1956,20 @@ function Carousel({
1810
1956
  },
1811
1957
  plugins
1812
1958
  );
1813
- const [canScrollPrev, setCanScrollPrev] = React7__namespace.useState(false);
1814
- const [canScrollNext, setCanScrollNext] = React7__namespace.useState(false);
1815
- const onSelect = React7__namespace.useCallback((api2) => {
1959
+ const [canScrollPrev, setCanScrollPrev] = React10__namespace.useState(false);
1960
+ const [canScrollNext, setCanScrollNext] = React10__namespace.useState(false);
1961
+ const onSelect = React10__namespace.useCallback((api2) => {
1816
1962
  if (!api2) return;
1817
1963
  setCanScrollPrev(api2.canScrollPrev());
1818
1964
  setCanScrollNext(api2.canScrollNext());
1819
1965
  }, []);
1820
- const scrollPrev = React7__namespace.useCallback(() => {
1966
+ const scrollPrev = React10__namespace.useCallback(() => {
1821
1967
  api?.scrollPrev();
1822
1968
  }, [api]);
1823
- const scrollNext = React7__namespace.useCallback(() => {
1969
+ const scrollNext = React10__namespace.useCallback(() => {
1824
1970
  api?.scrollNext();
1825
1971
  }, [api]);
1826
- const handleKeyDown = React7__namespace.useCallback(
1972
+ const handleKeyDown = React10__namespace.useCallback(
1827
1973
  (event) => {
1828
1974
  if (event.key === "ArrowLeft") {
1829
1975
  event.preventDefault();
@@ -1835,11 +1981,11 @@ function Carousel({
1835
1981
  },
1836
1982
  [scrollPrev, scrollNext]
1837
1983
  );
1838
- React7__namespace.useEffect(() => {
1984
+ React10__namespace.useEffect(() => {
1839
1985
  if (!api || !setApi) return;
1840
1986
  setApi(api);
1841
1987
  }, [api, setApi]);
1842
- React7__namespace.useEffect(() => {
1988
+ React10__namespace.useEffect(() => {
1843
1989
  if (!api) return;
1844
1990
  onSelect(api);
1845
1991
  api.on("reInit", onSelect);
@@ -1972,9 +2118,9 @@ function CarouselNext({
1972
2118
  );
1973
2119
  }
1974
2120
  var THEMES = { light: "", dark: ".dark" };
1975
- var ChartContext = React7__namespace.createContext(null);
2121
+ var ChartContext = React10__namespace.createContext(null);
1976
2122
  function useChart() {
1977
- const context = React7__namespace.useContext(ChartContext);
2123
+ const context = React10__namespace.useContext(ChartContext);
1978
2124
  if (!context) {
1979
2125
  throw new Error("useChart must be used within a <ChartContainer />");
1980
2126
  }
@@ -1987,7 +2133,7 @@ function ChartContainer({
1987
2133
  config,
1988
2134
  ...props
1989
2135
  }) {
1990
- const uniqueId = React7__namespace.useId();
2136
+ const uniqueId = React10__namespace.useId();
1991
2137
  const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
1992
2138
  return /* @__PURE__ */ jsxRuntime.jsx(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxRuntime.jsxs(
1993
2139
  "div",
@@ -2048,7 +2194,7 @@ function ChartTooltipContent({
2048
2194
  labelKey
2049
2195
  }) {
2050
2196
  const { config } = useChart();
2051
- const tooltipLabel = React7__namespace.useMemo(() => {
2197
+ const tooltipLabel = React10__namespace.useMemo(() => {
2052
2198
  if (hideLabel || !payload?.length) {
2053
2199
  return null;
2054
2200
  }
@@ -2771,16 +2917,16 @@ var M = (e, i, s, u, m, a, l, h) => {
2771
2917
  } catch (n) {
2772
2918
  }
2773
2919
  };
2774
- var x = React7__namespace.createContext(void 0);
2920
+ var x = React10__namespace.createContext(void 0);
2775
2921
  var U = { setTheme: (e) => {
2776
2922
  }, themes: [] };
2777
2923
  var z = () => {
2778
2924
  var e;
2779
- return (e = React7__namespace.useContext(x)) != null ? e : U;
2925
+ return (e = React10__namespace.useContext(x)) != null ? e : U;
2780
2926
  };
2781
- React7__namespace.memo(({ forcedTheme: e, storageKey: i, attribute: s, enableSystem: u, enableColorScheme: m, defaultTheme: a, value: l, themes: h, nonce: d, scriptProps: w }) => {
2927
+ React10__namespace.memo(({ forcedTheme: e, storageKey: i, attribute: s, enableSystem: u, enableColorScheme: m, defaultTheme: a, value: l, themes: h, nonce: d, scriptProps: w }) => {
2782
2928
  let p = JSON.stringify([s, i, a, e, h, l, u, m]).slice(1, -1);
2783
- return React7__namespace.createElement("script", { ...w, suppressHydrationWarning: true, nonce: typeof window == "undefined" ? d : "", dangerouslySetInnerHTML: { __html: `(${M.toString()})(${p})` } });
2929
+ return React10__namespace.createElement("script", { ...w, suppressHydrationWarning: true, nonce: typeof window == "undefined" ? d : "", dangerouslySetInnerHTML: { __html: `(${M.toString()})(${p})` } });
2784
2930
  });
2785
2931
  var Toaster = ({ ...props }) => {
2786
2932
  const { theme = "system" } = z();
@@ -3012,126 +3158,153 @@ function PaginationEllipsis({
3012
3158
  }
3013
3159
  );
3014
3160
  }
3015
- function Dialog({
3016
- ...props
3017
- }) {
3018
- return /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Root, { "data-slot": "dialog", ...props });
3019
- }
3020
- function DialogTrigger({
3021
- ...props
3022
- }) {
3023
- return /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Trigger, { "data-slot": "dialog-trigger", ...props });
3024
- }
3025
- function DialogPortal({
3026
- ...props
3027
- }) {
3028
- return /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Portal, { "data-slot": "dialog-portal", ...props });
3029
- }
3030
- function DialogClose({
3031
- ...props
3032
- }) {
3033
- return /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Close, { "data-slot": "dialog-close", ...props });
3034
- }
3035
- function DialogOverlay({
3036
- className,
3037
- ...props
3038
- }) {
3039
- return /* @__PURE__ */ jsxRuntime.jsx(
3040
- DialogPrimitive__namespace.Overlay,
3041
- {
3042
- "data-slot": "dialog-overlay",
3043
- className: cn(
3044
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
3045
- className
3046
- ),
3047
- ...props
3048
- }
3049
- );
3050
- }
3051
- function DialogContent({
3052
- className,
3053
- children,
3054
- showCloseButton = true,
3055
- ...props
3056
- }) {
3057
- return /* @__PURE__ */ jsxRuntime.jsxs(DialogPortal, { "data-slot": "dialog-portal", children: [
3058
- /* @__PURE__ */ jsxRuntime.jsx(DialogOverlay, {}),
3059
- /* @__PURE__ */ jsxRuntime.jsxs(
3060
- DialogPrimitive__namespace.Content,
3061
- {
3062
- "data-slot": "dialog-content",
3063
- className: cn(
3064
- "bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
3065
- className
3066
- ),
3067
- ...props,
3068
- children: [
3069
- children,
3070
- showCloseButton && /* @__PURE__ */ jsxRuntime.jsxs(
3071
- DialogPrimitive__namespace.Close,
3072
- {
3073
- "data-slot": "dialog-close",
3074
- className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3075
- children: [
3076
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XIcon, {}),
3077
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Close" })
3078
- ]
3079
- }
3080
- )
3081
- ]
3082
- }
3083
- )
3084
- ] });
3085
- }
3086
- function DialogHeader({ className, ...props }) {
3087
- return /* @__PURE__ */ jsxRuntime.jsx(
3088
- "div",
3089
- {
3090
- "data-slot": "dialog-header",
3091
- className: cn("flex flex-col gap-2 text-center sm:text-left", className),
3092
- ...props
3093
- }
3094
- );
3095
- }
3096
- function DialogFooter({ className, ...props }) {
3097
- return /* @__PURE__ */ jsxRuntime.jsx(
3098
- "div",
3161
+ var Dialog = DialogPrimitive__namespace.Root;
3162
+ var DialogTrigger = DialogPrimitive__namespace.Trigger;
3163
+ var DialogPortal = DialogPrimitive__namespace.Portal;
3164
+ var DialogClose = DialogPrimitive__namespace.Close;
3165
+ var DialogOverlay = React10__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
3166
+ DialogPrimitive__namespace.Overlay,
3167
+ {
3168
+ ref,
3169
+ className: cn(
3170
+ "fixed inset-0 z-50",
3171
+ "bg-[var(--j3m-neutral-1000)]/50",
3172
+ "backdrop-blur-sm",
3173
+ // Animations
3174
+ "data-[state=open]:animate-in",
3175
+ "data-[state=closed]:animate-out",
3176
+ "data-[state=closed]:fade-out-0",
3177
+ "data-[state=open]:fade-in-0",
3178
+ className
3179
+ ),
3180
+ ...props
3181
+ }
3182
+ ));
3183
+ DialogOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
3184
+ var DialogContent = React10__namespace.forwardRef(({ className, children, showCloseButton = true, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(DialogPortal, { children: [
3185
+ /* @__PURE__ */ jsxRuntime.jsx(DialogOverlay, {}),
3186
+ /* @__PURE__ */ jsxRuntime.jsxs(
3187
+ DialogPrimitive__namespace.Content,
3099
3188
  {
3100
- "data-slot": "dialog-footer",
3189
+ ref,
3101
3190
  className: cn(
3102
- "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
3191
+ // Positioning
3192
+ "fixed left-[50%] top-[50%] z-50",
3193
+ "translate-x-[-50%] translate-y-[-50%]",
3194
+ "w-full max-w-lg",
3195
+ "max-h-[90vh] overflow-y-auto",
3196
+ // Card-like styling
3197
+ "rounded-[var(--j3m-radius-2xs)]",
3198
+ "border border-[var(--color-border-subtle)]",
3199
+ "bg-[var(--color-bg-surface)]",
3200
+ "shadow-lg",
3201
+ // Padding
3202
+ "p-[var(--j3m-spacing-l)]",
3203
+ // Animations
3204
+ "duration-200",
3205
+ "data-[state=open]:animate-in",
3206
+ "data-[state=closed]:animate-out",
3207
+ "data-[state=closed]:fade-out-0",
3208
+ "data-[state=open]:fade-in-0",
3209
+ "data-[state=closed]:zoom-out-95",
3210
+ "data-[state=open]:zoom-in-95",
3211
+ "data-[state=closed]:slide-out-to-left-1/2",
3212
+ "data-[state=closed]:slide-out-to-top-[48%]",
3213
+ "data-[state=open]:slide-in-from-left-1/2",
3214
+ "data-[state=open]:slide-in-from-top-[48%]",
3103
3215
  className
3104
3216
  ),
3105
- ...props
3217
+ ...props,
3218
+ children: [
3219
+ children,
3220
+ showCloseButton && /* @__PURE__ */ jsxRuntime.jsxs(
3221
+ DialogPrimitive__namespace.Close,
3222
+ {
3223
+ className: cn(
3224
+ "absolute right-[var(--j3m-spacing-m)] top-[var(--j3m-spacing-m)]",
3225
+ "rounded-[var(--j3m-radius-2xs)]",
3226
+ "p-1",
3227
+ "text-[var(--color-text-muted)]",
3228
+ "opacity-70",
3229
+ "ring-offset-background",
3230
+ "transition-opacity",
3231
+ "hover:opacity-100",
3232
+ "hover:bg-[var(--j3m-neutral-200)]",
3233
+ "focus:outline-none",
3234
+ "focus:ring-2",
3235
+ "focus:ring-[var(--j3m-primary-300)]",
3236
+ "focus:ring-offset-2",
3237
+ "disabled:pointer-events-none"
3238
+ ),
3239
+ children: [
3240
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4" }),
3241
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Close" })
3242
+ ]
3243
+ }
3244
+ )
3245
+ ]
3106
3246
  }
3107
- );
3108
- }
3109
- function DialogTitle({
3247
+ )
3248
+ ] }));
3249
+ DialogContent.displayName = DialogPrimitive__namespace.Content.displayName;
3250
+ var DialogHeader = ({
3110
3251
  className,
3111
3252
  ...props
3112
- }) {
3113
- return /* @__PURE__ */ jsxRuntime.jsx(
3114
- DialogPrimitive__namespace.Title,
3115
- {
3116
- "data-slot": "dialog-title",
3117
- className: cn("text-lg leading-none font-semibold", className),
3118
- ...props
3119
- }
3120
- );
3121
- }
3122
- function DialogDescription({
3253
+ }) => /* @__PURE__ */ jsxRuntime.jsx(
3254
+ "div",
3255
+ {
3256
+ className: cn(
3257
+ "flex flex-col gap-[var(--j3m-spacing-2xs)]",
3258
+ "mb-[var(--j3m-spacing-m)]",
3259
+ "text-center sm:text-left",
3260
+ className
3261
+ ),
3262
+ ...props
3263
+ }
3264
+ );
3265
+ DialogHeader.displayName = "DialogHeader";
3266
+ var DialogFooter = ({
3123
3267
  className,
3124
3268
  ...props
3125
- }) {
3126
- return /* @__PURE__ */ jsxRuntime.jsx(
3127
- DialogPrimitive__namespace.Description,
3128
- {
3129
- "data-slot": "dialog-description",
3130
- className: cn("text-muted-foreground text-sm", className),
3131
- ...props
3132
- }
3133
- );
3134
- }
3269
+ }) => /* @__PURE__ */ jsxRuntime.jsx(
3270
+ "div",
3271
+ {
3272
+ className: cn(
3273
+ "flex flex-col-reverse sm:flex-row sm:justify-end",
3274
+ "gap-[var(--j3m-spacing-s)]",
3275
+ "mt-[var(--j3m-spacing-l)]",
3276
+ className
3277
+ ),
3278
+ ...props
3279
+ }
3280
+ );
3281
+ DialogFooter.displayName = "DialogFooter";
3282
+ var DialogTitle = React10__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
3283
+ DialogPrimitive__namespace.Title,
3284
+ {
3285
+ ref,
3286
+ className: cn(
3287
+ "text-lg font-semibold leading-none tracking-tight",
3288
+ "text-[var(--color-text-main)]",
3289
+ className
3290
+ ),
3291
+ ...props
3292
+ }
3293
+ ));
3294
+ DialogTitle.displayName = DialogPrimitive__namespace.Title.displayName;
3295
+ var DialogDescription = React10__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
3296
+ DialogPrimitive__namespace.Description,
3297
+ {
3298
+ ref,
3299
+ className: cn(
3300
+ "text-sm",
3301
+ "text-[var(--color-text-muted)]",
3302
+ className
3303
+ ),
3304
+ ...props
3305
+ }
3306
+ ));
3307
+ DialogDescription.displayName = DialogPrimitive__namespace.Description.displayName;
3135
3308
  function Command({
3136
3309
  className,
3137
3310
  ...props
@@ -4496,9 +4669,9 @@ var SIDEBAR_WIDTH = "16rem";
4496
4669
  var SIDEBAR_WIDTH_MOBILE = "18rem";
4497
4670
  var SIDEBAR_WIDTH_ICON = "3rem";
4498
4671
  var SIDEBAR_KEYBOARD_SHORTCUT = "b";
4499
- var SidebarContext = React7__namespace.createContext(null);
4672
+ var SidebarContext = React10__namespace.createContext(null);
4500
4673
  function useSidebar() {
4501
- const context = React7__namespace.useContext(SidebarContext);
4674
+ const context = React10__namespace.useContext(SidebarContext);
4502
4675
  if (!context) {
4503
4676
  throw new Error("useSidebar must be used within a SidebarProvider.");
4504
4677
  }
@@ -4514,10 +4687,10 @@ function SidebarProvider({
4514
4687
  ...props
4515
4688
  }) {
4516
4689
  const isMobile = useIsMobile();
4517
- const [openMobile, setOpenMobile] = React7__namespace.useState(false);
4518
- const [_open, _setOpen] = React7__namespace.useState(defaultOpen);
4690
+ const [openMobile, setOpenMobile] = React10__namespace.useState(false);
4691
+ const [_open, _setOpen] = React10__namespace.useState(defaultOpen);
4519
4692
  const open = openProp ?? _open;
4520
- const setOpen = React7__namespace.useCallback(
4693
+ const setOpen = React10__namespace.useCallback(
4521
4694
  (value) => {
4522
4695
  const openState = typeof value === "function" ? value(open) : value;
4523
4696
  if (setOpenProp) {
@@ -4529,10 +4702,10 @@ function SidebarProvider({
4529
4702
  },
4530
4703
  [setOpenProp, open]
4531
4704
  );
4532
- const toggleSidebar = React7__namespace.useCallback(() => {
4705
+ const toggleSidebar = React10__namespace.useCallback(() => {
4533
4706
  return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
4534
4707
  }, [isMobile, setOpen, setOpenMobile]);
4535
- React7__namespace.useEffect(() => {
4708
+ React10__namespace.useEffect(() => {
4536
4709
  const handleKeyDown = (event) => {
4537
4710
  if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
4538
4711
  event.preventDefault();
@@ -4543,7 +4716,7 @@ function SidebarProvider({
4543
4716
  return () => window.removeEventListener("keydown", handleKeyDown);
4544
4717
  }, [toggleSidebar]);
4545
4718
  const state = open ? "expanded" : "collapsed";
4546
- const contextValue = React7__namespace.useMemo(
4719
+ const contextValue = React10__namespace.useMemo(
4547
4720
  () => ({
4548
4721
  state,
4549
4722
  open,
@@ -5001,7 +5174,7 @@ function SidebarMenuSkeleton({
5001
5174
  showIcon = false,
5002
5175
  ...props
5003
5176
  }) {
5004
- const width = React7__namespace.useMemo(() => {
5177
+ const width = React10__namespace.useMemo(() => {
5005
5178
  return `${Math.floor(Math.random() * 40) + 50}%`;
5006
5179
  }, []);
5007
5180
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -5089,6 +5262,146 @@ function SidebarMenuSubButton({
5089
5262
  }
5090
5263
  );
5091
5264
  }
5265
+ var sectionVariants = classVarianceAuthority.cva(
5266
+ // Base styles - larger padding than Card for section grouping
5267
+ "flex flex-col rounded-[var(--j3m-radius-l)]",
5268
+ {
5269
+ variants: {
5270
+ variant: {
5271
+ // Default solid section
5272
+ default: [
5273
+ "bg-[var(--color-bg-surface)]",
5274
+ "border border-[var(--color-border-subtle)]",
5275
+ "text-[var(--color-text-main)]",
5276
+ "shadow-sm"
5277
+ ].join(" "),
5278
+ // Glass Light - for dark or image backgrounds
5279
+ "glass-light": [
5280
+ "glass-context",
5281
+ // Enables glass semantic token overrides
5282
+ "bg-[var(--j3m-glass-light-20)]",
5283
+ "backdrop-blur-[var(--j3m-blur-2xl)]",
5284
+ "border border-[var(--j3m-glass-border-light)]",
5285
+ "text-[var(--color-text-main)]",
5286
+ "shadow-[var(--j3m-glass-shadow-md)]"
5287
+ ].join(" "),
5288
+ // Glass Dark - dark frosted glass
5289
+ "glass-dark": [
5290
+ "bg-[var(--j3m-glass-dark)]",
5291
+ "backdrop-blur-[var(--j3m-blur-md)]",
5292
+ "border border-[var(--j3m-glass-border-dark)]",
5293
+ "text-white",
5294
+ "shadow-[var(--j3m-glass-shadow-lg)]"
5295
+ ].join(" "),
5296
+ // Glass Neutral - subtle frosted effect (most common)
5297
+ "glass-neutral": [
5298
+ "bg-[var(--j3m-glass-neutral)]",
5299
+ "backdrop-blur-[var(--j3m-blur-lg)]",
5300
+ "border border-[var(--j3m-glass-border-subtle)]",
5301
+ "text-[var(--color-text-main)]",
5302
+ "shadow-[var(--j3m-glass-shadow-sm)]"
5303
+ ].join(" "),
5304
+ // Glass Primary - with orange tint
5305
+ "glass-primary": [
5306
+ "bg-[var(--j3m-glass-primary)]",
5307
+ "backdrop-blur-[var(--j3m-blur-lg)]",
5308
+ "border border-[var(--j3m-glass-border-light)]",
5309
+ "text-[var(--color-text-main)]",
5310
+ "shadow-[var(--j3m-glass-shadow-glow)]"
5311
+ ].join(" ")
5312
+ }
5313
+ },
5314
+ defaultVariants: {
5315
+ variant: "default"
5316
+ }
5317
+ }
5318
+ );
5319
+ var isGlassVariant = (variant) => variant?.startsWith("glass-") ?? false;
5320
+ var Section = React10__namespace.forwardRef(
5321
+ ({ className, variant, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
5322
+ "section",
5323
+ {
5324
+ ref,
5325
+ className: cn(sectionVariants({ variant, className })),
5326
+ "data-glass-context": isGlassVariant(variant) ? "true" : void 0,
5327
+ ...props
5328
+ }
5329
+ )
5330
+ );
5331
+ Section.displayName = "Section";
5332
+ var SectionHeader = React10__namespace.forwardRef(
5333
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
5334
+ "div",
5335
+ {
5336
+ ref,
5337
+ className: cn(
5338
+ "flex flex-col gap-[var(--j3m-spacing-xs)]",
5339
+ "px-[var(--j3m-spacing-xl)] pt-[var(--j3m-spacing-xl)] pb-[var(--j3m-spacing-m)]",
5340
+ className
5341
+ ),
5342
+ ...props
5343
+ }
5344
+ )
5345
+ );
5346
+ SectionHeader.displayName = "SectionHeader";
5347
+ var SectionTitle = React10__namespace.forwardRef(
5348
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
5349
+ "h2",
5350
+ {
5351
+ ref,
5352
+ className: cn(
5353
+ "text-xl font-semibold leading-none tracking-tight",
5354
+ className
5355
+ ),
5356
+ ...props
5357
+ }
5358
+ )
5359
+ );
5360
+ SectionTitle.displayName = "SectionTitle";
5361
+ var SectionDescription = React10__namespace.forwardRef(
5362
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
5363
+ "p",
5364
+ {
5365
+ ref,
5366
+ className: cn(
5367
+ "text-sm opacity-70",
5368
+ className
5369
+ ),
5370
+ ...props
5371
+ }
5372
+ )
5373
+ );
5374
+ SectionDescription.displayName = "SectionDescription";
5375
+ var SectionContent = React10__namespace.forwardRef(
5376
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
5377
+ "div",
5378
+ {
5379
+ ref,
5380
+ className: cn(
5381
+ "px-[var(--j3m-spacing-xl)] py-[var(--j3m-spacing-l)]",
5382
+ className
5383
+ ),
5384
+ ...props
5385
+ }
5386
+ )
5387
+ );
5388
+ SectionContent.displayName = "SectionContent";
5389
+ var SectionFooter = React10__namespace.forwardRef(
5390
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
5391
+ "div",
5392
+ {
5393
+ ref,
5394
+ className: cn(
5395
+ "flex items-center",
5396
+ "px-[var(--j3m-spacing-xl)] py-[var(--j3m-spacing-l)]",
5397
+ "border-t border-[inherit]",
5398
+ className
5399
+ ),
5400
+ ...props
5401
+ }
5402
+ )
5403
+ );
5404
+ SectionFooter.displayName = "SectionFooter";
5092
5405
 
5093
5406
  exports.Accordion = Accordion;
5094
5407
  exports.AccordionContent = AccordionContent;
@@ -5127,7 +5440,6 @@ exports.ButtonGroupText = ButtonGroupText;
5127
5440
  exports.Calendar = Calendar;
5128
5441
  exports.CalendarDayButton = CalendarDayButton;
5129
5442
  exports.Card = Card;
5130
- exports.CardAction = CardAction;
5131
5443
  exports.CardContent = CardContent;
5132
5444
  exports.CardDescription = CardDescription;
5133
5445
  exports.CardFooter = CardFooter;
@@ -5303,6 +5615,12 @@ exports.ResizablePanel = ResizablePanel;
5303
5615
  exports.ResizablePanelGroup = ResizablePanelGroup;
5304
5616
  exports.ScrollArea = ScrollArea;
5305
5617
  exports.ScrollBar = ScrollBar;
5618
+ exports.Section = Section;
5619
+ exports.SectionContent = SectionContent;
5620
+ exports.SectionDescription = SectionDescription;
5621
+ exports.SectionFooter = SectionFooter;
5622
+ exports.SectionHeader = SectionHeader;
5623
+ exports.SectionTitle = SectionTitle;
5306
5624
  exports.Select = Select;
5307
5625
  exports.SelectContent = SelectContent;
5308
5626
  exports.SelectGroup = SelectGroup;
@@ -5373,7 +5691,9 @@ exports.TooltipTrigger = TooltipTrigger;
5373
5691
  exports.badgeVariants = badgeVariants;
5374
5692
  exports.buttonGroupVariants = buttonGroupVariants;
5375
5693
  exports.buttonVariants = buttonVariants;
5694
+ exports.cardVariants = cardVariants;
5376
5695
  exports.navigationMenuTriggerStyle = navigationMenuTriggerStyle;
5696
+ exports.sectionVariants = sectionVariants;
5377
5697
  exports.toggleVariants = toggleVariants;
5378
5698
  exports.useFormField = useFormField;
5379
5699
  exports.useIsMobile = useIsMobile;