@lukeashford/aurelius 1.0.1 → 1.1.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.js CHANGED
@@ -59,6 +59,9 @@ __export(index_exports, {
59
59
  });
60
60
  module.exports = __toCommonJS(index_exports);
61
61
 
62
+ // src/tailwind.preset.ts
63
+ var import_plugin = __toESM(require("tailwindcss/plugin"));
64
+
62
65
  // src/tokens/colors.ts
63
66
  var colors = {
64
67
  // Black spectrum
@@ -200,37 +203,142 @@ var radii = {
200
203
  };
201
204
 
202
205
  // src/tailwind.preset.ts
206
+ var aureliusPlugin = (0, import_plugin.default)(function({ addBase, addUtilities, theme }) {
207
+ addBase({
208
+ "html": {
209
+ fontFamily: theme("fontFamily.body"),
210
+ backgroundColor: theme("colors.obsidian"),
211
+ color: theme("colors.white"),
212
+ "-webkit-font-smoothing": "antialiased",
213
+ "-moz-osx-font-smoothing": "grayscale"
214
+ },
215
+ "body": {
216
+ minHeight: "100vh",
217
+ lineHeight: "1.5"
218
+ },
219
+ "table": {
220
+ borderCollapse: "collapse",
221
+ width: "100%"
222
+ },
223
+ "table, th, td": {
224
+ border: `1px solid ${theme("colors.gold.muted")}`
225
+ },
226
+ "th, td": {
227
+ padding: "0.5rem 0.75rem"
228
+ },
229
+ "table:hover": {
230
+ boxShadow: theme("boxShadow.glow")
231
+ },
232
+ "progress": {
233
+ appearance: "none",
234
+ "-webkit-appearance": "none",
235
+ border: `1px solid ${theme("colors.gold.muted")}`,
236
+ borderRadius: "0",
237
+ backgroundColor: theme("colors.charcoal"),
238
+ width: "100%",
239
+ height: "0.5rem"
240
+ },
241
+ "progress::-webkit-progress-bar": {
242
+ backgroundColor: theme("colors.charcoal")
243
+ },
244
+ "progress::-webkit-progress-value": {
245
+ backgroundColor: theme("colors.gold.DEFAULT")
246
+ },
247
+ "progress::-moz-progress-bar": {
248
+ backgroundColor: theme("colors.gold.DEFAULT")
249
+ },
250
+ "h1, h2, h3, h4, h5, h6": {
251
+ fontFamily: theme("fontFamily.heading"),
252
+ fontWeight: "600",
253
+ letterSpacing: "-0.025em",
254
+ color: theme("colors.white")
255
+ },
256
+ "h1": { fontSize: "2.25rem", lineHeight: "1.25" },
257
+ "h2": { fontSize: "1.875rem", lineHeight: "1.25" },
258
+ "h3": { fontSize: "1.5rem", lineHeight: "1.375" },
259
+ "h4": { fontSize: "1.25rem", lineHeight: "1.375" },
260
+ "h5": { fontSize: "1.125rem", lineHeight: "1.5" },
261
+ "h6": { fontSize: "1rem", lineHeight: "1.5" },
262
+ "code, pre, kbd, samp": {
263
+ fontFamily: theme("fontFamily.mono"),
264
+ fontSize: "0.875em"
265
+ },
266
+ "a": {
267
+ color: theme("colors.gold.DEFAULT"),
268
+ textDecoration: "none",
269
+ transition: `color ${theme("transitionDuration.fast")} ease-out`
270
+ },
271
+ "a:hover": {
272
+ color: theme("colors.gold.light")
273
+ },
274
+ ":focus-visible": {
275
+ outline: `2px solid ${theme("colors.gold.DEFAULT")}`,
276
+ outlineOffset: "2px"
277
+ },
278
+ "::selection": {
279
+ backgroundColor: theme("colors.gold.DEFAULT"),
280
+ color: theme("colors.obsidian")
281
+ },
282
+ "::-webkit-scrollbar": { width: "8px", height: "8px" },
283
+ "::-webkit-scrollbar-track": { background: theme("colors.charcoal") },
284
+ "::-webkit-scrollbar-thumb": {
285
+ background: theme("colors.ash"),
286
+ borderRadius: theme("borderRadius.full")
287
+ },
288
+ "::-webkit-scrollbar-thumb:hover": { background: theme("colors.silver") }
289
+ });
290
+ addUtilities({
291
+ ".text-gradient-gold": {
292
+ background: `linear-gradient(to right, ${theme("colors.gold.DEFAULT")}, ${theme(
293
+ "colors.gold.light"
294
+ )}, ${theme("colors.gold.DEFAULT")})`,
295
+ "-webkit-background-clip": "text",
296
+ "background-clip": "text",
297
+ color: "transparent"
298
+ },
299
+ ".glow": { boxShadow: theme("boxShadow.glow") },
300
+ ".glow-sm": { boxShadow: theme("boxShadow.glow-sm") },
301
+ ".glow-lg": { boxShadow: theme("boxShadow.glow-lg") },
302
+ ".scroll-smooth": {
303
+ scrollBehavior: "smooth",
304
+ "-webkit-overflow-scrolling": "touch"
305
+ },
306
+ ".scrollbar-hide": {
307
+ "-ms-overflow-style": "none",
308
+ "scrollbar-width": "none",
309
+ "&::-webkit-scrollbar": { display: "none" }
310
+ },
311
+ ".backdrop-glass": {
312
+ backdropFilter: "blur(12px)",
313
+ backgroundColor: "rgba(20, 20, 20, 0.8)"
314
+ },
315
+ ".focus-ring": {
316
+ "&:focus-visible": {
317
+ outline: "2px solid #c9a227",
318
+ outlineOffset: "2px"
319
+ }
320
+ },
321
+ ".line-clamp-2": {
322
+ display: "-webkit-box",
323
+ "-webkit-line-clamp": "2",
324
+ "-webkit-box-orient": "vertical",
325
+ overflow: "hidden"
326
+ },
327
+ ".line-clamp-3": {
328
+ display: "-webkit-box",
329
+ "-webkit-line-clamp": "3",
330
+ "-webkit-box-orient": "vertical",
331
+ overflow: "hidden"
332
+ },
333
+ ".center-absolute": {
334
+ position: "absolute",
335
+ top: "50%",
336
+ left: "50%",
337
+ transform: "translate(-50%, -50%)"
338
+ }
339
+ });
340
+ });
203
341
  var preset = {
204
- // Safelist color utilities used dynamically in the demo so Tailwind doesn't purge them
205
- safelist: [
206
- // Black spectrum
207
- "bg-void",
208
- "bg-obsidian",
209
- "bg-charcoal",
210
- "bg-graphite",
211
- "bg-slate",
212
- "bg-ash",
213
- // Gold spectrum
214
- "bg-gold",
215
- "bg-gold-light",
216
- "bg-gold-bright",
217
- "bg-gold-muted",
218
- "bg-gold-pale",
219
- // Neutrals
220
- "bg-white",
221
- "bg-silver",
222
- "bg-zinc",
223
- "bg-dim",
224
- // Semantic
225
- "bg-success",
226
- "bg-success-muted",
227
- "bg-error",
228
- "bg-error-muted",
229
- "bg-warning",
230
- "bg-warning-muted",
231
- "bg-info",
232
- "bg-info-muted"
233
- ],
234
342
  theme: {
235
343
  extend: {
236
344
  colors: {
@@ -317,7 +425,8 @@ var preset = {
317
425
  }
318
426
  }
319
427
  }
320
- }
428
+ },
429
+ plugins: [aureliusPlugin]
321
430
  };
322
431
  var tailwind_preset_default = preset;
323
432
 
@@ -329,13 +438,29 @@ function cx(...classes) {
329
438
  var Button = import_react.default.forwardRef(
330
439
  ({ variant = "primary", size = "md", loading = false, className, disabled, children, ...rest }, ref) => {
331
440
  const isDisabled = disabled || loading;
332
- const variantClass = variant === "primary" ? "btn-primary" : variant === "important" ? "btn-important" : variant === "elevated" ? "btn-elevated" : variant === "outlined" ? "btn-outlined" : variant === "featured" ? "btn-featured" : variant === "ghost" ? "btn-ghost" : "btn-danger";
333
- const sizeClass = `btn-${size}`;
441
+ const base = "inline-flex items-center justify-center font-semibold tracking-wide transition-all duration-fast rounded-none disabled:opacity-50 disabled:cursor-not-allowed";
442
+ const variantClasses = {
443
+ primary: "bg-charcoal text-white border border-gold/30 hover:border-gold hover:shadow-glow hover:text-gold-light active:bg-white/5 focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 focus-visible:ring-offset-obsidian",
444
+ important: "bg-gold text-obsidian border border-gold hover:bg-gold-light hover:text-obsidian active:bg-gold-bright focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 focus-visible:ring-offset-obsidian",
445
+ elevated: "bg-charcoal text-white border-0 shadow-lg hover:shadow-xl hover:text-gold-light active:bg-white/5 focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 focus-visible:ring-offset-obsidian",
446
+ outlined: "bg-transparent text-white border border-ash hover:border-white hover:text-white active:bg-white/5 focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 focus-visible:ring-offset-obsidian",
447
+ featured: "bg-charcoal text-white border border-gold shadow-[0_0_10px_rgba(201,162,39,0.2)] hover:shadow-[0_0_15px_rgba(201,162,39,0.4)] hover:text-gold-light active:bg-white/5 focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 focus-visible:ring-offset-obsidian",
448
+ ghost: "bg-transparent text-gold border-0 hover:text-gold-light active:text-gold-bright focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 focus-visible:ring-offset-obsidian",
449
+ danger: "bg-error text-white border-0 hover:bg-error/90 active:bg-error/80 focus-visible:ring-2 focus-visible:ring-error focus-visible:ring-offset-2 focus-visible:ring-offset-obsidian"
450
+ };
451
+ const sizeClasses = {
452
+ sm: "h-8 px-3 text-sm",
453
+ md: "h-10 px-4 text-sm",
454
+ lg: "h-12 px-6 text-base",
455
+ xl: "h-14 px-8 text-lg"
456
+ };
457
+ const variantClass = variantClasses[variant];
458
+ const sizeClass = sizeClasses[size];
334
459
  return /* @__PURE__ */ import_react.default.createElement(
335
460
  "button",
336
461
  {
337
462
  ref,
338
- className: cx("btn", variantClass, sizeClass, loading && "opacity-80", className),
463
+ className: cx(base, variantClass, sizeClass, loading && "opacity-80", className),
339
464
  disabled: isDisabled,
340
465
  ...rest
341
466
  },
@@ -359,8 +484,8 @@ function cx2(...classes) {
359
484
  }
360
485
  var Input = import_react2.default.forwardRef(
361
486
  ({ error = false, className, leadingIcon, trailingIcon, disabled, ...rest }, ref) => {
362
- const base = "input";
363
- const errorCls = error ? "input-error" : "";
487
+ const base = "w-full h-10 px-3 bg-graphite border border-ash rounded-none text-white placeholder:text-zinc transition-all duration-fast focus:border-gold focus:ring-1 focus:ring-gold focus:outline-none disabled:bg-slate disabled:text-dim disabled:cursor-not-allowed";
488
+ const errorCls = error ? "border-error focus:border-error focus:ring-error" : "";
364
489
  return /* @__PURE__ */ import_react2.default.createElement("div", { className: cx2("relative", disabled && "opacity-90") }, leadingIcon && /* @__PURE__ */ import_react2.default.createElement("span", { className: "pointer-events-none absolute inset-y-0 left-3 flex items-center text-silver" }, leadingIcon), /* @__PURE__ */ import_react2.default.createElement(
365
490
  "input",
366
491
  {
@@ -386,9 +511,16 @@ function cx3(...classes) {
386
511
  }
387
512
  var Card = import_react3.default.forwardRef(
388
513
  ({ variant = "default", interactive = false, className, ...rest }, ref) => {
389
- const base = "card";
390
- const variantClass = variant === "elevated" ? "card-elevated" : variant === "outlined" ? "card-outlined" : variant === "ghost" ? "bg-transparent shadow-none border-0" : variant === "featured" ? "card-featured" : "";
391
- const interactiveClass = interactive ? "card-interactive" : "";
514
+ const base = "rounded-none p-6";
515
+ const variantClasses = {
516
+ default: "bg-charcoal shadow-sm border border-gold/30",
517
+ elevated: "bg-charcoal shadow-lg border-0",
518
+ outlined: "bg-charcoal shadow-none border border-ash",
519
+ ghost: "bg-transparent shadow-none border-0",
520
+ featured: "bg-charcoal border border-gold shadow-[0_0_10px_rgba(201,162,39,0.2)]"
521
+ };
522
+ const interactiveClass = interactive ? "transition-all duration-normal hover:border-gold hover:shadow-glow cursor-pointer" : "";
523
+ const variantClass = variantClasses[variant];
392
524
  return /* @__PURE__ */ import_react3.default.createElement(
393
525
  "div",
394
526
  {
@@ -460,8 +592,17 @@ function cx5(...classes) {
460
592
  }
461
593
  var Badge = import_react5.default.forwardRef(
462
594
  ({ variant = "default", className, ...rest }, ref) => {
463
- const variantClass = variant === "gold" ? "badge-gold" : variant === "success" ? "badge-success" : variant === "error" ? "badge-error" : variant === "warning" ? "bg-warning/20 text-warning border-warning/30" : variant === "info" ? "bg-info/20 text-info border-info/30" : "badge-default";
464
- return /* @__PURE__ */ import_react5.default.createElement("span", { ref, className: cx5("badge", variantClass, className), ...rest });
595
+ const base = "inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium border";
596
+ const variantClasses = {
597
+ default: "bg-slate text-silver border-slate",
598
+ gold: "bg-gold/20 text-gold border-gold/30",
599
+ success: "bg-success/20 text-success border-success/30",
600
+ error: "bg-error/20 text-error border-error/30",
601
+ warning: "bg-warning/20 text-warning border-warning/30",
602
+ info: "bg-info/20 text-info border-info/30"
603
+ };
604
+ const variantClass = variantClasses[variant];
605
+ return /* @__PURE__ */ import_react5.default.createElement("span", { ref, className: cx5(base, variantClass, className), ...rest });
465
606
  }
466
607
  );
467
608
  Badge.displayName = "Badge";
@@ -500,10 +641,11 @@ var Label = import_react7.default.forwardRef(
500
641
  "label",
501
642
  {
502
643
  ref,
503
- className: cx7("label", required && "label-required", className),
644
+ className: cx7("block text-sm font-medium text-silver mb-1.5", className),
504
645
  ...rest
505
646
  },
506
- children
647
+ children,
648
+ required && /* @__PURE__ */ import_react7.default.createElement("span", { className: "text-error ml-1" }, "*")
507
649
  );
508
650
  }
509
651
  );
@@ -536,7 +678,7 @@ function cx9(...classes) {
536
678
  }
537
679
  var Textarea = import_react9.default.forwardRef(
538
680
  ({ error = false, className, disabled, ...rest }, ref) => {
539
- const base = "textarea";
681
+ const base = "w-full px-3 py-2 bg-graphite border border-ash rounded-none text-white placeholder:text-zinc min-h-[80px] transition-all duration-fast focus:border-gold focus:ring-1 focus:ring-gold focus:outline-none disabled:bg-slate disabled:text-dim disabled:cursor-not-allowed";
540
682
  const errorCls = error ? "border-error focus:border-error focus:ring-error" : "";
541
683
  return /* @__PURE__ */ import_react9.default.createElement(
542
684
  "textarea",
@@ -556,15 +698,26 @@ var import_react10 = __toESM(require("react"));
556
698
  function cx10(...classes) {
557
699
  return classes.filter(Boolean).join(" ");
558
700
  }
701
+ var selectBgImage = `url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%23C9A227' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e")`;
559
702
  var Select = import_react10.default.forwardRef(
560
703
  ({ error = false, className, disabled, options, children, ...rest }, ref) => {
561
- const base = "select";
562
- const errorCls = error ? "border-error focus:border-error focus:ring-error" : "";
563
704
  return /* @__PURE__ */ import_react10.default.createElement(
564
705
  "select",
565
706
  {
566
707
  ref,
567
- className: cx10(base, errorCls, disabled && "opacity-90", className),
708
+ className: cx10(
709
+ "appearance-none bg-graphite border border-ash rounded-none text-white px-3 py-2 pr-8",
710
+ "focus:border-gold focus:ring-1 focus:ring-gold focus:outline-none",
711
+ "disabled:opacity-50 disabled:cursor-not-allowed",
712
+ error && "border-error focus:border-error focus:ring-error",
713
+ className
714
+ ),
715
+ style: {
716
+ backgroundImage: selectBgImage,
717
+ backgroundPosition: "right 0.5rem center",
718
+ backgroundRepeat: "no-repeat",
719
+ backgroundSize: "1.5em 1.5em"
720
+ },
568
721
  disabled,
569
722
  ...rest
570
723
  },
@@ -579,16 +732,50 @@ var import_react11 = __toESM(require("react"));
579
732
  function cx11(...classes) {
580
733
  return classes.filter(Boolean).join(" ");
581
734
  }
735
+ var checkmarkSvg = `url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='%231A1A1A' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")`;
582
736
  var Checkbox = import_react11.default.forwardRef(
583
737
  ({ className, label, id, ...rest }, ref) => {
584
738
  const inputId = id || rest.name || Math.random().toString(36).substr(2, 9);
739
+ const setRef = (0, import_react11.useCallback)((node) => {
740
+ if (node) {
741
+ if (node.checked) {
742
+ node.style.backgroundImage = checkmarkSvg;
743
+ }
744
+ }
745
+ if (typeof ref === "function") {
746
+ ref(node);
747
+ } else if (ref) {
748
+ ref.current = node;
749
+ }
750
+ }, [ref]);
585
751
  return /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react11.default.createElement(
586
752
  "input",
587
753
  {
588
754
  type: "checkbox",
589
755
  id: inputId,
590
- ref,
591
- className: cx11("checkbox", className),
756
+ ref: setRef,
757
+ className: cx11(
758
+ "appearance-none h-4 w-4 border border-ash rounded-sm bg-graphite",
759
+ "checked:bg-gold checked:border-gold",
760
+ "focus:ring-1 focus:ring-gold focus:ring-offset-1 focus:ring-offset-obsidian",
761
+ "transition duration-200 ease-in-out cursor-pointer",
762
+ "disabled:opacity-50 disabled:cursor-not-allowed",
763
+ className
764
+ ),
765
+ style: {
766
+ backgroundPosition: "center",
767
+ backgroundSize: "contain",
768
+ backgroundRepeat: "no-repeat"
769
+ },
770
+ onChange: (e) => {
771
+ const input = e.currentTarget;
772
+ if (input.checked) {
773
+ input.style.backgroundImage = checkmarkSvg;
774
+ } else {
775
+ input.style.backgroundImage = "none";
776
+ }
777
+ rest.onChange?.(e);
778
+ },
592
779
  ...rest
593
780
  }
594
781
  ), label && /* @__PURE__ */ import_react11.default.createElement("label", { htmlFor: inputId, className: "ml-2 text-sm text-silver cursor-pointer select-none" }, label));
@@ -601,16 +788,58 @@ var import_react12 = __toESM(require("react"));
601
788
  function cx12(...classes) {
602
789
  return classes.filter(Boolean).join(" ");
603
790
  }
791
+ var radioDotSvg = `url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='%231A1A1A' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")`;
604
792
  var Radio = import_react12.default.forwardRef(
605
793
  ({ className, label, id, ...rest }, ref) => {
606
794
  const inputId = id || rest.name || Math.random().toString(36).substr(2, 9);
795
+ const setRef = (0, import_react12.useCallback)((node) => {
796
+ if (node) {
797
+ if (node.checked) {
798
+ node.style.backgroundImage = radioDotSvg;
799
+ }
800
+ }
801
+ if (typeof ref === "function") {
802
+ ref(node);
803
+ } else if (ref) {
804
+ ref.current = node;
805
+ }
806
+ }, [ref]);
607
807
  return /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react12.default.createElement(
608
808
  "input",
609
809
  {
610
810
  type: "radio",
611
811
  id: inputId,
612
- ref,
613
- className: cx12("radio", className),
812
+ ref: setRef,
813
+ className: cx12(
814
+ "appearance-none h-4 w-4 border border-ash rounded-full bg-graphite",
815
+ "checked:bg-gold checked:border-gold",
816
+ "focus:ring-1 focus:ring-gold focus:ring-offset-1 focus:ring-offset-obsidian",
817
+ "transition duration-200 ease-in-out cursor-pointer",
818
+ "disabled:opacity-50 disabled:cursor-not-allowed",
819
+ className
820
+ ),
821
+ style: {
822
+ backgroundPosition: "center",
823
+ backgroundSize: "contain",
824
+ backgroundRepeat: "no-repeat"
825
+ },
826
+ onChange: (e) => {
827
+ const input = e.currentTarget;
828
+ if (input.checked) {
829
+ input.style.backgroundImage = radioDotSvg;
830
+ if (input.name) {
831
+ const radios = document.querySelectorAll(`input[type="radio"][name="${input.name}"]`);
832
+ radios.forEach((radio) => {
833
+ if (radio !== input) {
834
+ radio.style.backgroundImage = "none";
835
+ }
836
+ });
837
+ }
838
+ } else {
839
+ input.style.backgroundImage = "none";
840
+ }
841
+ rest.onChange?.(e);
842
+ },
614
843
  ...rest
615
844
  }
616
845
  ), label && /* @__PURE__ */ import_react12.default.createElement("label", { htmlFor: inputId, className: "ml-2 text-sm text-silver cursor-pointer select-none" }, label));
@@ -628,6 +857,18 @@ var Switch = import_react13.default.forwardRef(
628
857
  const [internalChecked, setInternalChecked] = (0, import_react13.useState)(defaultChecked);
629
858
  const isControlled = controlledChecked !== void 0;
630
859
  const checked = isControlled ? controlledChecked : internalChecked;
860
+ const buttonRef = (0, import_react13.useRef)(null);
861
+ const setRefs = (0, import_react13.useCallback)(
862
+ (node) => {
863
+ buttonRef.current = node;
864
+ if (typeof ref === "function") {
865
+ ref(node);
866
+ } else if (ref) {
867
+ ref.current = node;
868
+ }
869
+ },
870
+ [ref]
871
+ );
631
872
  const handleClick = (e) => {
632
873
  if (disabled) return;
633
874
  const newChecked = !checked;
@@ -645,13 +886,39 @@ var Switch = import_react13.default.forwardRef(
645
886
  "aria-checked": checked,
646
887
  "data-state": checked ? "checked" : "unchecked",
647
888
  disabled,
648
- ref,
889
+ ref: setRefs,
649
890
  onClick: handleClick,
650
- className: cx13("switch", className),
891
+ className: cx13(
892
+ "relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent",
893
+ "transition-colors duration-200 ease-in-out",
894
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 focus-visible:ring-offset-obsidian",
895
+ "disabled:opacity-50 disabled:cursor-not-allowed",
896
+ checked ? "bg-gold" : "bg-charcoal",
897
+ className
898
+ ),
651
899
  ...rest
652
900
  },
653
- /* @__PURE__ */ import_react13.default.createElement("span", { className: "switch-thumb" })
654
- ), label && /* @__PURE__ */ import_react13.default.createElement("span", { className: "text-sm text-silver cursor-pointer", onClick: () => !disabled && handleClick({}) }, label));
901
+ /* @__PURE__ */ import_react13.default.createElement(
902
+ "span",
903
+ {
904
+ className: cx13(
905
+ "pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0",
906
+ "transition duration-200 ease-in-out",
907
+ checked ? "translate-x-5" : "translate-x-0"
908
+ )
909
+ }
910
+ )
911
+ ), label && /* @__PURE__ */ import_react13.default.createElement(
912
+ "span",
913
+ {
914
+ className: "text-sm text-silver cursor-pointer",
915
+ onClick: () => {
916
+ if (disabled) return;
917
+ buttonRef.current?.click();
918
+ }
919
+ },
920
+ label
921
+ ));
655
922
  }
656
923
  );
657
924
  Switch.displayName = "Switch";
@@ -668,16 +935,25 @@ var icons = {
668
935
  warning: import_lucide_react.AlertTriangle,
669
936
  error: import_lucide_react.XCircle
670
937
  };
938
+ var variantStyles = {
939
+ info: "bg-info/10 border-info text-info",
940
+ success: "bg-success/10 border-success text-success",
941
+ warning: "bg-warning/10 border-warning text-warning",
942
+ error: "bg-error/10 border-error text-error"
943
+ };
671
944
  var Alert = import_react14.default.forwardRef(
672
945
  ({ variant = "info", title, children, className, ...rest }, ref) => {
673
946
  const Icon = icons[variant];
674
- const variantClass = `alert-${variant}`;
675
947
  return /* @__PURE__ */ import_react14.default.createElement(
676
948
  "div",
677
949
  {
678
950
  ref,
679
951
  role: "alert",
680
- className: cx14("alert", variantClass, "flex gap-3", className),
952
+ className: cx14(
953
+ "relative w-full p-4 rounded-none border border-l-4 flex gap-3",
954
+ variantStyles[variant],
955
+ className
956
+ ),
681
957
  ...rest
682
958
  },
683
959
  /* @__PURE__ */ import_react14.default.createElement(Icon, { className: "h-5 w-5 shrink-0" }),
@@ -766,12 +1042,15 @@ var Modal = ({ isOpen, onClose, title, children, className }) => {
766
1042
  }, [onClose]);
767
1043
  if (!mounted) return null;
768
1044
  if (!isOpen) return null;
769
- const content = /* @__PURE__ */ import_react17.default.createElement("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4 sm:p-6", onClick: onClose }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "modal-backdrop", "aria-hidden": "true" }), /* @__PURE__ */ import_react17.default.createElement(
1045
+ const content = /* @__PURE__ */ import_react17.default.createElement("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4 sm:p-6", onClick: onClose }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "fixed inset-0 z-40 bg-obsidian/80 backdrop-blur-sm", "aria-hidden": "true" }), /* @__PURE__ */ import_react17.default.createElement(
770
1046
  "div",
771
1047
  {
772
1048
  role: "dialog",
773
1049
  "aria-modal": "true",
774
- className: cx17("modal-content relative", className),
1050
+ className: cx17(
1051
+ "bg-charcoal border border-gold/30 shadow-2xl z-50 w-full max-w-lg p-6 rounded-none relative",
1052
+ className
1053
+ ),
775
1054
  "data-state": "open",
776
1055
  onClick: (e) => e.stopPropagation()
777
1056
  },