@lukeashford/aurelius 1.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,16 +1,3 @@
1
- import {
2
- tailwind_preset_default
3
- } from "./chunk-H4EGEZQH.mjs";
4
- import {
5
- colors,
6
- duration,
7
- easing,
8
- radii,
9
- shadows,
10
- spacing,
11
- typography
12
- } from "./chunk-MDNHT46W.mjs";
13
-
14
1
  // src/components/Button.tsx
15
2
  import React from "react";
16
3
  function cx(...classes) {
@@ -19,13 +6,29 @@ function cx(...classes) {
19
6
  var Button = React.forwardRef(
20
7
  ({ variant = "primary", size = "md", loading = false, className, disabled, children, ...rest }, ref) => {
21
8
  const isDisabled = disabled || loading;
22
- 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";
23
- const sizeClass = `btn-${size}`;
9
+ 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";
10
+ const variantClasses = {
11
+ 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",
12
+ 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",
13
+ 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",
14
+ 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",
15
+ 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",
16
+ 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",
17
+ 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"
18
+ };
19
+ const sizeClasses = {
20
+ sm: "h-8 px-3 text-sm",
21
+ md: "h-10 px-4 text-sm",
22
+ lg: "h-12 px-6 text-base",
23
+ xl: "h-14 px-8 text-lg"
24
+ };
25
+ const variantClass = variantClasses[variant];
26
+ const sizeClass = sizeClasses[size];
24
27
  return /* @__PURE__ */ React.createElement(
25
28
  "button",
26
29
  {
27
30
  ref,
28
- className: cx("btn", variantClass, sizeClass, loading && "opacity-80", className),
31
+ className: cx(base, variantClass, sizeClass, loading && "opacity-80", className),
29
32
  disabled: isDisabled,
30
33
  ...rest
31
34
  },
@@ -49,8 +52,8 @@ function cx2(...classes) {
49
52
  }
50
53
  var Input = React2.forwardRef(
51
54
  ({ error = false, className, leadingIcon, trailingIcon, disabled, ...rest }, ref) => {
52
- const base = "input";
53
- const errorCls = error ? "input-error" : "";
55
+ 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";
56
+ const errorCls = error ? "border-error focus:border-error focus:ring-error" : "";
54
57
  return /* @__PURE__ */ React2.createElement("div", { className: cx2("relative", disabled && "opacity-90") }, leadingIcon && /* @__PURE__ */ React2.createElement("span", { className: "pointer-events-none absolute inset-y-0 left-3 flex items-center text-silver" }, leadingIcon), /* @__PURE__ */ React2.createElement(
55
58
  "input",
56
59
  {
@@ -58,7 +61,7 @@ var Input = React2.forwardRef(
58
61
  className: cx2(
59
62
  base,
60
63
  errorCls,
61
- (leadingIcon || trailingIcon) && "pl-9 pr-9",
64
+ leadingIcon || trailingIcon ? "pl-9 pr-9" : false,
62
65
  className
63
66
  ),
64
67
  disabled,
@@ -76,9 +79,16 @@ function cx3(...classes) {
76
79
  }
77
80
  var Card = React3.forwardRef(
78
81
  ({ variant = "default", interactive = false, className, ...rest }, ref) => {
79
- const base = "card";
80
- const variantClass = variant === "elevated" ? "card-elevated" : variant === "outlined" ? "card-outlined" : variant === "ghost" ? "bg-transparent shadow-none border-0" : variant === "featured" ? "card-featured" : "";
81
- const interactiveClass = interactive ? "card-interactive" : "";
82
+ const base = "rounded-none p-6";
83
+ const variantClasses = {
84
+ default: "bg-charcoal shadow-sm border border-gold/30",
85
+ elevated: "bg-charcoal shadow-lg border-0",
86
+ outlined: "bg-charcoal shadow-none border border-ash",
87
+ ghost: "bg-transparent shadow-none border-0",
88
+ featured: "bg-charcoal border border-gold shadow-[0_0_10px_rgba(201,162,39,0.2)]"
89
+ };
90
+ const interactiveClass = interactive ? "transition-all duration-200 hover:border-gold hover:shadow-glow cursor-pointer" : "";
91
+ const variantClass = variantClasses[variant];
82
92
  return /* @__PURE__ */ React3.createElement(
83
93
  "div",
84
94
  {
@@ -150,8 +160,17 @@ function cx5(...classes) {
150
160
  }
151
161
  var Badge = React5.forwardRef(
152
162
  ({ variant = "default", className, ...rest }, ref) => {
153
- 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";
154
- return /* @__PURE__ */ React5.createElement("span", { ref, className: cx5("badge", variantClass, className), ...rest });
163
+ const base = "inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium border";
164
+ const variantClasses = {
165
+ default: "bg-slate text-silver border-slate",
166
+ gold: "bg-gold/20 text-gold border-gold/30",
167
+ success: "bg-success/20 text-success border-success/30",
168
+ error: "bg-error/20 text-error border-error/30",
169
+ warning: "bg-warning/20 text-warning border-warning/30",
170
+ info: "bg-info/20 text-info border-info/30"
171
+ };
172
+ const variantClass = variantClasses[variant];
173
+ return /* @__PURE__ */ React5.createElement("span", { ref, className: cx5(base, variantClass, className), ...rest });
155
174
  }
156
175
  );
157
176
  Badge.displayName = "Badge";
@@ -190,10 +209,11 @@ var Label = React7.forwardRef(
190
209
  "label",
191
210
  {
192
211
  ref,
193
- className: cx7("label", required && "label-required", className),
212
+ className: cx7("block text-sm font-medium text-silver mb-1.5", className),
194
213
  ...rest
195
214
  },
196
- children
215
+ children,
216
+ required && /* @__PURE__ */ React7.createElement("span", { className: "text-error ml-1" }, "*")
197
217
  );
198
218
  }
199
219
  );
@@ -226,7 +246,7 @@ function cx9(...classes) {
226
246
  }
227
247
  var Textarea = React9.forwardRef(
228
248
  ({ error = false, className, disabled, ...rest }, ref) => {
229
- const base = "textarea";
249
+ 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";
230
250
  const errorCls = error ? "border-error focus:border-error focus:ring-error" : "";
231
251
  return /* @__PURE__ */ React9.createElement(
232
252
  "textarea",
@@ -246,15 +266,26 @@ import React10 from "react";
246
266
  function cx10(...classes) {
247
267
  return classes.filter(Boolean).join(" ");
248
268
  }
269
+ 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")`;
249
270
  var Select = React10.forwardRef(
250
271
  ({ error = false, className, disabled, options, children, ...rest }, ref) => {
251
- const base = "select";
252
- const errorCls = error ? "border-error focus:border-error focus:ring-error" : "";
253
272
  return /* @__PURE__ */ React10.createElement(
254
273
  "select",
255
274
  {
256
275
  ref,
257
- className: cx10(base, errorCls, disabled && "opacity-90", className),
276
+ className: cx10(
277
+ "appearance-none bg-graphite border border-ash rounded-none text-white px-3 py-2 pr-8",
278
+ "focus:border-gold focus:ring-1 focus:ring-gold focus:outline-none",
279
+ "disabled:opacity-50 disabled:cursor-not-allowed",
280
+ error && "border-error focus:border-error focus:ring-error",
281
+ className
282
+ ),
283
+ style: {
284
+ backgroundImage: selectBgImage,
285
+ backgroundPosition: "right 0.5rem center",
286
+ backgroundRepeat: "no-repeat",
287
+ backgroundSize: "1.5em 1.5em"
288
+ },
258
289
  disabled,
259
290
  ...rest
260
291
  },
@@ -265,20 +296,54 @@ var Select = React10.forwardRef(
265
296
  Select.displayName = "Select";
266
297
 
267
298
  // src/components/Checkbox.tsx
268
- import React11 from "react";
299
+ import React11, { useCallback } from "react";
269
300
  function cx11(...classes) {
270
301
  return classes.filter(Boolean).join(" ");
271
302
  }
303
+ 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")`;
272
304
  var Checkbox = React11.forwardRef(
273
305
  ({ className, label, id, ...rest }, ref) => {
274
306
  const inputId = id || rest.name || Math.random().toString(36).substr(2, 9);
307
+ const setRef = useCallback((node) => {
308
+ if (node) {
309
+ if (node.checked) {
310
+ node.style.backgroundImage = checkmarkSvg;
311
+ }
312
+ }
313
+ if (typeof ref === "function") {
314
+ ref(node);
315
+ } else if (ref) {
316
+ ref.current = node;
317
+ }
318
+ }, [ref]);
275
319
  return /* @__PURE__ */ React11.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React11.createElement(
276
320
  "input",
277
321
  {
278
322
  type: "checkbox",
279
323
  id: inputId,
280
- ref,
281
- className: cx11("checkbox", className),
324
+ ref: setRef,
325
+ className: cx11(
326
+ "appearance-none h-4 w-4 border border-ash rounded-sm bg-graphite",
327
+ "checked:bg-gold checked:border-gold",
328
+ "focus:ring-1 focus:ring-gold focus:ring-offset-1 focus:ring-offset-obsidian",
329
+ "transition duration-200 ease-in-out cursor-pointer",
330
+ "disabled:opacity-50 disabled:cursor-not-allowed",
331
+ className
332
+ ),
333
+ style: {
334
+ backgroundPosition: "center",
335
+ backgroundSize: "contain",
336
+ backgroundRepeat: "no-repeat"
337
+ },
338
+ onChange: (e) => {
339
+ const input = e.currentTarget;
340
+ if (input.checked) {
341
+ input.style.backgroundImage = checkmarkSvg;
342
+ } else {
343
+ input.style.backgroundImage = "none";
344
+ }
345
+ rest.onChange?.(e);
346
+ },
282
347
  ...rest
283
348
  }
284
349
  ), label && /* @__PURE__ */ React11.createElement("label", { htmlFor: inputId, className: "ml-2 text-sm text-silver cursor-pointer select-none" }, label));
@@ -287,20 +352,62 @@ var Checkbox = React11.forwardRef(
287
352
  Checkbox.displayName = "Checkbox";
288
353
 
289
354
  // src/components/Radio.tsx
290
- import React12 from "react";
355
+ import React12, { useCallback as useCallback2 } from "react";
291
356
  function cx12(...classes) {
292
357
  return classes.filter(Boolean).join(" ");
293
358
  }
359
+ 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")`;
294
360
  var Radio = React12.forwardRef(
295
361
  ({ className, label, id, ...rest }, ref) => {
296
362
  const inputId = id || rest.name || Math.random().toString(36).substr(2, 9);
363
+ const setRef = useCallback2((node) => {
364
+ if (node) {
365
+ if (node.checked) {
366
+ node.style.backgroundImage = radioDotSvg;
367
+ }
368
+ }
369
+ if (typeof ref === "function") {
370
+ ref(node);
371
+ } else if (ref) {
372
+ ref.current = node;
373
+ }
374
+ }, [ref]);
297
375
  return /* @__PURE__ */ React12.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React12.createElement(
298
376
  "input",
299
377
  {
300
378
  type: "radio",
301
379
  id: inputId,
302
- ref,
303
- className: cx12("radio", className),
380
+ ref: setRef,
381
+ className: cx12(
382
+ "appearance-none h-4 w-4 border border-ash rounded-full bg-graphite",
383
+ "checked:bg-gold checked:border-gold",
384
+ "focus:ring-1 focus:ring-gold focus:ring-offset-1 focus:ring-offset-obsidian",
385
+ "transition duration-200 ease-in-out cursor-pointer",
386
+ "disabled:opacity-50 disabled:cursor-not-allowed",
387
+ className
388
+ ),
389
+ style: {
390
+ backgroundPosition: "center",
391
+ backgroundSize: "contain",
392
+ backgroundRepeat: "no-repeat"
393
+ },
394
+ onChange: (e) => {
395
+ const input = e.currentTarget;
396
+ if (input.checked) {
397
+ input.style.backgroundImage = radioDotSvg;
398
+ if (input.name) {
399
+ const radios = document.querySelectorAll(`input[type="radio"][name="${input.name}"]`);
400
+ radios.forEach((radio) => {
401
+ if (radio !== input) {
402
+ radio.style.backgroundImage = "none";
403
+ }
404
+ });
405
+ }
406
+ } else {
407
+ input.style.backgroundImage = "none";
408
+ }
409
+ rest.onChange?.(e);
410
+ },
304
411
  ...rest
305
412
  }
306
413
  ), label && /* @__PURE__ */ React12.createElement("label", { htmlFor: inputId, className: "ml-2 text-sm text-silver cursor-pointer select-none" }, label));
@@ -309,7 +416,7 @@ var Radio = React12.forwardRef(
309
416
  Radio.displayName = "Radio";
310
417
 
311
418
  // src/components/Switch.tsx
312
- import React13, { useState } from "react";
419
+ import React13, { useCallback as useCallback3, useRef, useState } from "react";
313
420
  function cx13(...classes) {
314
421
  return classes.filter(Boolean).join(" ");
315
422
  }
@@ -318,6 +425,18 @@ var Switch = React13.forwardRef(
318
425
  const [internalChecked, setInternalChecked] = useState(defaultChecked);
319
426
  const isControlled = controlledChecked !== void 0;
320
427
  const checked = isControlled ? controlledChecked : internalChecked;
428
+ const buttonRef = useRef(null);
429
+ const setRefs = useCallback3(
430
+ (node) => {
431
+ buttonRef.current = node;
432
+ if (typeof ref === "function") {
433
+ ref(node);
434
+ } else if (ref) {
435
+ ref.current = node;
436
+ }
437
+ },
438
+ [ref]
439
+ );
321
440
  const handleClick = (e) => {
322
441
  if (disabled) return;
323
442
  const newChecked = !checked;
@@ -335,13 +454,39 @@ var Switch = React13.forwardRef(
335
454
  "aria-checked": checked,
336
455
  "data-state": checked ? "checked" : "unchecked",
337
456
  disabled,
338
- ref,
457
+ ref: setRefs,
339
458
  onClick: handleClick,
340
- className: cx13("switch", className),
459
+ className: cx13(
460
+ "relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent",
461
+ "transition-colors duration-200 ease-in-out",
462
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 focus-visible:ring-offset-obsidian",
463
+ "disabled:opacity-50 disabled:cursor-not-allowed",
464
+ checked ? "bg-gold" : "bg-charcoal",
465
+ className
466
+ ),
341
467
  ...rest
342
468
  },
343
- /* @__PURE__ */ React13.createElement("span", { className: "switch-thumb" })
344
- ), label && /* @__PURE__ */ React13.createElement("span", { className: "text-sm text-silver cursor-pointer", onClick: () => !disabled && handleClick({}) }, label));
469
+ /* @__PURE__ */ React13.createElement(
470
+ "span",
471
+ {
472
+ className: cx13(
473
+ "pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0",
474
+ "transition duration-200 ease-in-out",
475
+ checked ? "translate-x-5" : "translate-x-0"
476
+ )
477
+ }
478
+ )
479
+ ), label && /* @__PURE__ */ React13.createElement(
480
+ "span",
481
+ {
482
+ className: "text-sm text-silver cursor-pointer",
483
+ onClick: () => {
484
+ if (disabled) return;
485
+ buttonRef.current?.click();
486
+ }
487
+ },
488
+ label
489
+ ));
345
490
  }
346
491
  );
347
492
  Switch.displayName = "Switch";
@@ -358,16 +503,25 @@ var icons = {
358
503
  warning: AlertTriangle,
359
504
  error: XCircle
360
505
  };
506
+ var variantStyles = {
507
+ info: "bg-info/10 border-info text-info",
508
+ success: "bg-success/10 border-success text-success",
509
+ warning: "bg-warning/10 border-warning text-warning",
510
+ error: "bg-error/10 border-error text-error"
511
+ };
361
512
  var Alert = React14.forwardRef(
362
513
  ({ variant = "info", title, children, className, ...rest }, ref) => {
363
514
  const Icon = icons[variant];
364
- const variantClass = `alert-${variant}`;
365
515
  return /* @__PURE__ */ React14.createElement(
366
516
  "div",
367
517
  {
368
518
  ref,
369
519
  role: "alert",
370
- className: cx14("alert", variantClass, "flex gap-3", className),
520
+ className: cx14(
521
+ "relative w-full p-4 rounded-none border border-l-4 flex gap-3",
522
+ variantStyles[variant],
523
+ className
524
+ ),
371
525
  ...rest
372
526
  },
373
527
  /* @__PURE__ */ React14.createElement(Icon, { className: "h-5 w-5 shrink-0" }),
@@ -456,12 +610,15 @@ var Modal = ({ isOpen, onClose, title, children, className }) => {
456
610
  }, [onClose]);
457
611
  if (!mounted) return null;
458
612
  if (!isOpen) return null;
459
- const content = /* @__PURE__ */ React17.createElement("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4 sm:p-6", onClick: onClose }, /* @__PURE__ */ React17.createElement("div", { className: "modal-backdrop", "aria-hidden": "true" }), /* @__PURE__ */ React17.createElement(
613
+ const content = /* @__PURE__ */ React17.createElement("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4 sm:p-6", onClick: onClose }, /* @__PURE__ */ React17.createElement("div", { className: "fixed inset-0 z-40 bg-obsidian/80 backdrop-blur-sm", "aria-hidden": "true" }), /* @__PURE__ */ React17.createElement(
460
614
  "div",
461
615
  {
462
616
  role: "dialog",
463
617
  "aria-modal": "true",
464
- className: cx17("modal-content relative", className),
618
+ className: cx17(
619
+ "bg-charcoal border border-gold/30 shadow-2xl z-50 w-full max-w-lg p-6 rounded-none relative",
620
+ className
621
+ ),
465
622
  "data-state": "open",
466
623
  onClick: (e) => e.stopPropagation()
467
624
  },
@@ -473,7 +630,7 @@ var Modal = ({ isOpen, onClose, title, children, className }) => {
473
630
  Modal.displayName = "Modal";
474
631
 
475
632
  // src/index.ts
476
- var version = "1.0.0";
633
+ var version = "2.0.0";
477
634
  export {
478
635
  Alert,
479
636
  Avatar,
@@ -492,14 +649,6 @@ export {
492
649
  Switch,
493
650
  Textarea,
494
651
  Tooltip,
495
- colors,
496
- duration,
497
- easing,
498
- radii,
499
- shadows,
500
- spacing,
501
- tailwind_preset_default as tailwindPreset,
502
- typography,
503
652
  version
504
653
  };
505
654
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Button.tsx","../src/components/Input.tsx","../src/components/Card.tsx","../src/components/Avatar.tsx","../src/components/Badge.tsx","../src/components/Tooltip.tsx","../src/components/Label.tsx","../src/components/HelperText.tsx","../src/components/Textarea.tsx","../src/components/Select.tsx","../src/components/Checkbox.tsx","../src/components/Radio.tsx","../src/components/Switch.tsx","../src/components/Alert.tsx","../src/components/Spinner.tsx","../src/components/Skeleton.tsx","../src/components/Modal.tsx","../src/index.ts"],"sourcesContent":["import React from 'react'\n\nexport type ButtonVariant =\n | 'primary'\n | 'important'\n | 'elevated'\n | 'outlined'\n | 'featured'\n | 'ghost'\n | 'danger'\n\nexport type ButtonSize = 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant\n size?: ButtonSize\n loading?: boolean\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({variant = 'primary', size = 'md', loading = false, className, disabled, children, ...rest},\n ref) => {\n const isDisabled = disabled || loading\n const variantClass =\n variant === 'primary'\n ? 'btn-primary'\n : variant === 'important'\n ? 'btn-important'\n : variant === 'elevated'\n ? 'btn-elevated'\n : variant === 'outlined'\n ? 'btn-outlined'\n : variant === 'featured'\n ? 'btn-featured'\n : variant === 'ghost'\n ? 'btn-ghost'\n : 'btn-danger'\n\n const sizeClass = `btn-${size}`\n\n return (\n <button\n ref={ref}\n className={cx('btn', variantClass, sizeClass, loading && 'opacity-80', className)}\n disabled={isDisabled}\n {...rest}\n >\n {loading && (\n <span className=\"mr-2 inline-block h-4 w-4 animate-pulse rounded-full bg-gold\"\n aria-hidden/>\n )}\n {children}\n </button>\n )\n }\n)\n\nButton.displayName = 'Button'\n\nexport default Button\n","import React from 'react'\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n error?: boolean\n leadingIcon?: React.ReactNode\n trailingIcon?: React.ReactNode\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ error = false, className, leadingIcon, trailingIcon, disabled, ...rest }, ref) => {\n const base = 'input'\n const errorCls = error ? 'input-error' : ''\n\n return (\n <div className={cx('relative', disabled && 'opacity-90')}> \n {leadingIcon && (\n <span className=\"pointer-events-none absolute inset-y-0 left-3 flex items-center text-silver\">\n {leadingIcon}\n </span>\n )}\n <input\n ref={ref}\n className={cx(\n base,\n errorCls,\n (leadingIcon || trailingIcon) && 'pl-9 pr-9',\n className\n )}\n disabled={disabled}\n {...rest}\n />\n {trailingIcon && (\n <span className=\"pointer-events-none absolute inset-y-0 right-3 flex items-center text-silver\">\n {trailingIcon}\n </span>\n )}\n </div>\n )\n }\n)\n\nInput.displayName = 'Input'\n\nexport default Input\n","import React from 'react'\n\nexport type CardVariant = 'default' | 'elevated' | 'outlined' | 'ghost' | 'featured'\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: CardVariant\n interactive?: boolean\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({variant = 'default', interactive = false, className, ...rest}, ref) => {\n const base = 'card'\n const variantClass =\n variant === 'elevated'\n ? 'card-elevated'\n : variant === 'outlined'\n ? 'card-outlined'\n : variant === 'ghost'\n ? 'bg-transparent shadow-none border-0'\n : variant === 'featured'\n ? 'card-featured'\n : ''\n\n // Use the design system's interactive class so hover styles match CSS\n const interactiveClass = interactive ? 'card-interactive' : ''\n\n return <div ref={ref}\n className={cx(base, variantClass, interactiveClass, className)} {...rest} />\n }\n)\n\nCard.displayName = 'Card'\n\nexport default Card\n","import React from 'react'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n src?: string\n alt?: string\n name?: string\n size?: AvatarSize\n status?: 'online' | 'offline' | 'busy'\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nconst sizeMap: Record<AvatarSize, string> = {\n xs: 'h-6 w-6 text-[10px]',\n sm: 'h-8 w-8 text-[11px]',\n md: 'h-10 w-10 text-xs',\n lg: 'h-12 w-12 text-sm',\n xl: 'h-16 w-16 text-base',\n '2xl': 'h-24 w-24 text-lg',\n}\n\nfunction initials(name?: string) {\n if (!name) return ''\n const parts = name.trim().split(/\\s+/)\n return parts.slice(0, 2).map(p => p[0]!.toUpperCase()).join('')\n}\n\nexport const Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n ({ src, alt = '', name, size = 'md', status, className, ...rest }, ref) => {\n const statusColor =\n status === 'online' ? 'bg-success' : status === 'busy' ? 'bg-warning' : 'bg-zinc'\n\n return (\n <div\n ref={ref}\n className={cx(\n 'relative inline-flex items-center justify-center rounded-full border-2 border-ash bg-slate text-silver font-semibold select-none overflow-hidden',\n sizeMap[size],\n className\n )}\n {...rest}\n >\n {src ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img src={src} alt={alt || name || 'Avatar'} className=\"h-full w-full object-cover\" />\n ) : (\n <span aria-hidden>{initials(name) || '·'}</span>\n )}\n {status && (\n <span\n className={cx(\n 'absolute bottom-0 right-0 rounded-full ring-2 ring-charcoal',\n // 25% of avatar size\n size === 'xs' ? 'h-1.5 w-1.5' :\n size === 'sm' ? 'h-2 w-2' :\n size === 'md' ? 'h-2.5 w-2.5' :\n size === 'lg' ? 'h-3 w-3' :\n size === 'xl' ? 'h-4 w-4' : 'h-5 w-5',\n statusColor\n )}\n />\n )}\n </div>\n )\n }\n)\n\nAvatar.displayName = 'Avatar'\n\nexport default Avatar\n","import React from 'react'\n\nexport type BadgeVariant = 'default' | 'gold' | 'success' | 'error' | 'warning' | 'info'\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ variant = 'default', className, ...rest }, ref) => {\n const variantClass =\n variant === 'gold'\n ? 'badge-gold'\n : variant === 'success'\n ? 'badge-success'\n : variant === 'error'\n ? 'badge-error'\n : variant === 'warning'\n ? 'bg-warning/20 text-warning border-warning/30'\n : variant === 'info'\n ? 'bg-info/20 text-info border-info/30'\n : 'badge-default'\n\n return <span ref={ref} className={cx('badge', variantClass, className)} {...rest} />\n }\n)\n\nBadge.displayName = 'Badge'\n\nexport default Badge\n","import React from 'react'\n\nexport interface TooltipProps {\n content: React.ReactNode\n children: React.ReactElement\n open?: boolean\n side?: 'top' | 'right' | 'bottom' | 'left'\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\n// Simple, controlled tooltip. Consumer handles open state.\nexport const Tooltip: React.FC<TooltipProps> = ({ content, children, open = false, side = 'top' }) => {\n return (\n <span className=\"relative inline-block\">\n {children}\n <span\n role=\"tooltip\"\n className={cx(\n 'pointer-events-none absolute z-50 whitespace-nowrap rounded-md border border-ash bg-graphite px-3 py-1.5 text-sm text-white shadow-lg transition-opacity duration-fast ease-out',\n open ? 'opacity-100' : 'opacity-0',\n side === 'top' && 'left-1/2 -translate-x-1/2 -top-2 translate-y-[-100%]',\n side === 'bottom' && 'left-1/2 -translate-x-1/2 -bottom-2 translate-y-[100%]',\n side === 'left' && 'top-1/2 -translate-y-1/2 -left-2 -translate-x-[100%]',\n side === 'right' && 'top-1/2 -translate-y-1/2 -right-2 translate-x-[100%]'\n )}\n >\n {content}\n </span>\n </span>\n )\n}\n\nexport default Tooltip\n","import React from 'react'\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, required, children, ...rest }, ref) => {\n return (\n <label\n ref={ref}\n className={cx('label', required && 'label-required', className)}\n {...rest}\n >\n {children}\n </label>\n )\n }\n)\n\nLabel.displayName = 'Label'\n\nexport default Label\n","import React from 'react'\n\nexport interface HelperTextProps extends React.HTMLAttributes<HTMLParagraphElement> {\n error?: boolean\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const HelperText = React.forwardRef<HTMLParagraphElement, HelperTextProps>(\n ({ className, error, children, ...rest }, ref) => {\n return (\n <p\n ref={ref}\n className={cx('mt-1.5 text-xs', error ? 'text-error' : 'text-silver', className)}\n {...rest}\n >\n {children}\n </p>\n )\n }\n)\n\nHelperText.displayName = 'HelperText'\n\nexport default HelperText\n","import React from 'react'\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n error?: boolean\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ error = false, className, disabled, ...rest }, ref) => {\n const base = 'textarea'\n const errorCls = error ? 'border-error focus:border-error focus:ring-error' : ''\n\n return (\n <textarea\n ref={ref}\n className={cx(base, errorCls, disabled && 'opacity-90', className)}\n disabled={disabled}\n {...rest}\n />\n )\n }\n)\n\nTextarea.displayName = 'Textarea'\n\nexport default Textarea\n","import React from 'react'\n\nexport interface SelectOption {\n label: string\n value: string | number\n}\n\nexport interface SelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {\n error?: boolean\n options?: SelectOption[]\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ error = false, className, disabled, options, children, ...rest }, ref) => {\n const base = 'select'\n const errorCls = error ? 'border-error focus:border-error focus:ring-error' : ''\n\n return (\n <select\n ref={ref}\n className={cx(base, errorCls, disabled && 'opacity-90', className)}\n disabled={disabled}\n {...rest}\n >\n {options\n ? options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))\n : children}\n </select>\n )\n }\n)\n\nSelect.displayName = 'Select'\n\nexport default Select\n","import React from 'react'\n\nexport interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, label, id, ...rest }, ref) => {\n const inputId = id || rest.name || Math.random().toString(36).substr(2, 9)\n\n return (\n <div className=\"flex items-center\">\n <input\n type=\"checkbox\"\n id={inputId}\n ref={ref}\n className={cx('checkbox', className)}\n {...rest}\n />\n {label && (\n <label htmlFor={inputId} className=\"ml-2 text-sm text-silver cursor-pointer select-none\">\n {label}\n </label>\n )}\n </div>\n )\n }\n)\n\nCheckbox.displayName = 'Checkbox'\n\nexport default Checkbox\n","import React from 'react'\n\nexport interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Radio = React.forwardRef<HTMLInputElement, RadioProps>(\n ({ className, label, id, ...rest }, ref) => {\n const inputId = id || rest.name || Math.random().toString(36).substr(2, 9)\n\n return (\n <div className=\"flex items-center\">\n <input\n type=\"radio\"\n id={inputId}\n ref={ref}\n className={cx('radio', className)}\n {...rest}\n />\n {label && (\n <label htmlFor={inputId} className=\"ml-2 text-sm text-silver cursor-pointer select-none\">\n {label}\n </label>\n )}\n </div>\n )\n }\n)\n\nRadio.displayName = 'Radio'\n\nexport default Radio\n","import React, { useState } from 'react'\n\nexport interface SwitchProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n checked?: boolean\n defaultChecked?: boolean\n onCheckedChange?: (checked: boolean) => void\n label?: string\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n ({ checked: controlledChecked, defaultChecked = false, onCheckedChange, disabled, className, label, ...rest }, ref) => {\n const [internalChecked, setInternalChecked] = useState(defaultChecked)\n const isControlled = controlledChecked !== undefined\n const checked = isControlled ? controlledChecked : internalChecked\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return\n const newChecked = !checked\n if (!isControlled) {\n setInternalChecked(newChecked)\n }\n onCheckedChange?.(newChecked)\n rest.onClick?.(e)\n }\n\n return (\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n data-state={checked ? 'checked' : 'unchecked'}\n disabled={disabled}\n ref={ref}\n onClick={handleClick}\n className={cx('switch', className)}\n {...rest}\n >\n <span className=\"switch-thumb\" />\n </button>\n {label && (\n <span className=\"text-sm text-silver cursor-pointer\" onClick={() => !disabled && handleClick({} as any)}>\n {label}\n </span>\n )}\n </div>\n )\n }\n)\n\nSwitch.displayName = 'Switch'\n\nexport default Switch\n","import React from 'react'\nimport { Info, CheckCircle, AlertTriangle, XCircle } from 'lucide-react'\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error'\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant\n title?: string\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nconst icons = {\n info: Info,\n success: CheckCircle,\n warning: AlertTriangle,\n error: XCircle,\n}\n\nexport const Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ variant = 'info', title, children, className, ...rest }, ref) => {\n const Icon = icons[variant]\n const variantClass = `alert-${variant}`\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cx('alert', variantClass, 'flex gap-3', className)}\n {...rest}\n >\n <Icon className=\"h-5 w-5 shrink-0\" />\n <div className=\"flex-1\">\n {title && <h5 className=\"mb-1 font-medium leading-none tracking-tight text-current\">{title}</h5>}\n <div className=\"text-sm opacity-90\">{children}</div>\n </div>\n </div>\n )\n }\n)\n\nAlert.displayName = 'Alert'\n\nexport default Alert\n","import React from 'react'\n\nexport interface SpinnerProps extends React.SVGAttributes<SVGElement> {\n size?: 'sm' | 'md' | 'lg'\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Spinner = ({ className, size = 'md', ...rest }: SpinnerProps) => {\n const sizeClass =\n size === 'sm' ? 'h-4 w-4' : size === 'lg' ? 'h-8 w-8' : 'h-6 w-6'\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cx('animate-spin text-gold', sizeClass, className)}\n {...rest}\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n )\n}\n\nSpinner.displayName = 'Spinner'\n\nexport default Spinner\n","import React from 'react'\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, ...rest }, ref) => {\n return (\n <div\n ref={ref}\n className={cx('animate-pulse bg-ash rounded-sm', className)}\n {...rest}\n />\n )\n }\n)\n\nSkeleton.displayName = 'Skeleton'\n\nexport default Skeleton\n","import React, { useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X } from 'lucide-react'\n\nexport interface ModalProps {\n isOpen: boolean\n onClose: () => void\n title?: string\n children: React.ReactNode\n className?: string\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Modal = ({ isOpen, onClose, title, children, className }: ModalProps) => {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n useEffect(() => {\n if (isOpen) {\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n document.body.style.overflow = 'hidden'\n document.body.style.paddingRight = `${scrollbarWidth}px`\n } else {\n document.body.style.overflow = 'unset'\n document.body.style.paddingRight = '0px'\n }\n return () => {\n document.body.style.overflow = 'unset'\n document.body.style.paddingRight = '0px'\n }\n }, [isOpen])\n\n useEffect(() => {\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n window.addEventListener('keydown', handleEsc)\n return () => window.removeEventListener('keydown', handleEsc)\n }, [onClose])\n\n if (!mounted) return null\n\n // Don't render anything if closed, unless we want exit animations. \n // My CSS relies on data-state, but if I unmount immediately, exit animation won't play.\n // To support exit animations, I'd need a transition manager (like framer-motion or headlessui).\n // For this simple implementation, I'll render conditionally. \n // If I want animation, I need to keep it mounted until animation ends.\n // Given the prompt \"add all suggestions\" and \"premium\", a simple unmount is acceptable for v1 without heavy deps.\n // However, the CSS I wrote has `data-state=closed`. \n // Without a transition library, handling exit animation is tricky. \n // I'll just conditional render for now. The entry animation `animate-fade-in` will play.\n \n if (!isOpen) return null;\n\n const content = (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4 sm:p-6\" onClick={onClose}>\n <div className=\"modal-backdrop\" aria-hidden=\"true\" />\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n className={cx('modal-content relative', className)}\n data-state=\"open\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-between mb-2\">\n {title ? <h3 className=\"text-xl font-semibold text-white m-0\">{title}</h3> : <div />}\n <button onClick={onClose} className=\"text-silver hover:text-white transition-colors ml-auto\">\n <X className=\"h-5 w-5\" />\n <span className=\"sr-only\">Close</span>\n </button>\n </div>\n <div>{children}</div>\n </div>\n </div>\n )\n\n return createPortal(content, document.body)\n}\n\nModal.displayName = 'Modal'\n\nexport default Modal\n","/**\n * Aurelius Design System\n *\n * A cohesive visual language for creative technologists.\n * Combines technical sophistication with artistic sensibility.\n */\n\n// Export Tailwind preset\nexport { default as tailwindPreset } from './tailwind.preset'\n\n// Export design tokens\nexport * from './tokens'\n\n// Re-export individual token modules for convenience\nexport { colors, type ColorToken } from './tokens/colors'\nexport { typography, type TypographyToken } from './tokens/typography'\nexport { spacing, type SpacingToken } from './tokens/spacing'\n\n// React components\nexport * from './components'\n\n// Version\nexport const version = '1.0.0'\n"],"mappings":"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","names":["React","cx","React","cx","React","cx","React","cx","React","cx","React","cx","React","cx","React","cx","React","cx","React","cx","React","cx","React","cx","React","cx","React","cx","React","cx","React","useState","cx"]}
1
+ {"version":3,"sources":["../src/components/Button.tsx","../src/components/Input.tsx","../src/components/Card.tsx","../src/components/Avatar.tsx","../src/components/Badge.tsx","../src/components/Tooltip.tsx","../src/components/Label.tsx","../src/components/HelperText.tsx","../src/components/Textarea.tsx","../src/components/Select.tsx","../src/components/Checkbox.tsx","../src/components/Radio.tsx","../src/components/Switch.tsx","../src/components/Alert.tsx","../src/components/Spinner.tsx","../src/components/Skeleton.tsx","../src/components/Modal.tsx","../src/index.ts"],"sourcesContent":["import React from 'react'\n\nexport type ButtonVariant =\n | 'primary'\n | 'important'\n | 'elevated'\n | 'outlined'\n | 'featured'\n | 'ghost'\n | 'danger'\n\nexport type ButtonSize = 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant\n size?: ButtonSize\n loading?: boolean\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({variant = 'primary', size = 'md', loading = false, className, disabled, children, ...rest},\n ref) => {\n const isDisabled = disabled || loading\n\n // Base button styles - common to all variants\n const base =\n 'inline-flex items-center justify-center font-semibold tracking-wide ' +\n 'transition-all duration-fast ' +\n 'rounded-none ' +\n 'disabled:opacity-50 disabled:cursor-not-allowed'\n\n // Variant styles\n const variantClasses = {\n primary:\n 'bg-charcoal text-white border border-gold/30 ' +\n 'hover:border-gold hover:shadow-glow hover:text-gold-light ' +\n 'active:bg-white/5 ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n important:\n 'bg-gold text-obsidian border border-gold ' +\n 'hover:bg-gold-light hover:text-obsidian ' +\n 'active:bg-gold-bright ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n elevated:\n 'bg-charcoal text-white border-0 shadow-lg ' +\n 'hover:shadow-xl hover:text-gold-light ' +\n 'active:bg-white/5 ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n outlined:\n 'bg-transparent text-white border border-ash ' +\n 'hover:border-white hover:text-white ' +\n 'active:bg-white/5 ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n featured:\n 'bg-charcoal text-white border border-gold ' +\n 'shadow-[0_0_10px_rgba(201,162,39,0.2)] ' +\n 'hover:shadow-[0_0_15px_rgba(201,162,39,0.4)] hover:text-gold-light ' +\n 'active:bg-white/5 ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n ghost:\n 'bg-transparent text-gold border-0 ' +\n 'hover:text-gold-light ' +\n 'active:text-gold-bright ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n danger:\n 'bg-error text-white border-0 ' +\n 'hover:bg-error/90 ' +\n 'active:bg-error/80 ' +\n 'focus-visible:ring-2 focus-visible:ring-error focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n }\n\n // Size styles\n const sizeClasses = {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-4 text-sm',\n lg: 'h-12 px-6 text-base',\n xl: 'h-14 px-8 text-lg',\n }\n\n const variantClass = variantClasses[variant]\n const sizeClass = sizeClasses[size]\n\n return (\n <button\n ref={ref}\n className={cx(base, variantClass, sizeClass, loading && 'opacity-80', className)}\n disabled={isDisabled}\n {...rest}\n >\n {loading && (\n <span\n className=\"mr-2 inline-block h-4 w-4 animate-pulse rounded-full bg-gold\"\n aria-hidden\n />\n )}\n {children}\n </button>\n )\n }\n)\n\nButton.displayName = 'Button'\n\nexport default Button\n","import React from 'react'\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n error?: boolean\n leadingIcon?: React.ReactNode\n trailingIcon?: React.ReactNode\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ error = false, className, leadingIcon, trailingIcon, disabled, ...rest }, ref) => {\n // Base input styles\n const base =\n 'w-full h-10 px-3 bg-graphite border border-ash rounded-none ' +\n 'text-white placeholder:text-zinc ' +\n 'transition-all duration-fast ' +\n 'focus:border-gold focus:ring-1 focus:ring-gold focus:outline-none ' +\n 'disabled:bg-slate disabled:text-dim disabled:cursor-not-allowed'\n\n // Error styles\n const errorCls = error ? 'border-error focus:border-error focus:ring-error' : ''\n\n return (\n <div className={cx('relative', disabled && 'opacity-90')}>\n {leadingIcon && (\n <span className=\"pointer-events-none absolute inset-y-0 left-3 flex items-center text-silver\">\n {leadingIcon}\n </span>\n )}\n <input\n ref={ref}\n className={cx(\n base,\n errorCls,\n (leadingIcon || trailingIcon) ? 'pl-9 pr-9' : false,\n className\n )}\n disabled={disabled}\n {...rest}\n />\n {trailingIcon && (\n <span className=\"pointer-events-none absolute inset-y-0 right-3 flex items-center text-silver\">\n {trailingIcon}\n </span>\n )}\n </div>\n )\n }\n)\n\nInput.displayName = 'Input'\n\nexport default Input\n","import React from 'react'\n\nexport type CardVariant = 'default' | 'elevated' | 'outlined' | 'ghost' | 'featured'\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: CardVariant\n interactive?: boolean\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({variant = 'default', interactive = false, className, ...rest}, ref) => {\n // Base card styles\n const base = 'rounded-none p-6'\n\n // Variant styles\n const variantClasses = {\n default: 'bg-charcoal shadow-sm border border-gold/30',\n elevated: 'bg-charcoal shadow-lg border-0',\n outlined: 'bg-charcoal shadow-none border border-ash',\n ghost: 'bg-transparent shadow-none border-0',\n featured: 'bg-charcoal border border-gold shadow-[0_0_10px_rgba(201,162,39,0.2)]',\n }\n\n // Interactive styles\n const interactiveClass = interactive\n ? 'transition-all duration-200 hover:border-gold hover:shadow-glow cursor-pointer'\n : ''\n\n const variantClass = variantClasses[variant]\n\n return (\n <div\n ref={ref}\n className={cx(base, variantClass, interactiveClass, className)}\n {...rest}\n />\n )\n }\n)\n\nCard.displayName = 'Card'\n\nexport default Card\n","import React from 'react'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\nexport type AvatarStatus = 'online' | 'offline' | 'busy'\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n src?: string\n alt?: string\n name?: string\n size?: AvatarSize\n status?: AvatarStatus\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nconst sizeMap: Record<AvatarSize, string> = {\n xs: 'h-6 w-6 text-[10px]',\n sm: 'h-8 w-8 text-[11px]',\n md: 'h-10 w-10 text-xs',\n lg: 'h-12 w-12 text-sm',\n xl: 'h-16 w-16 text-base',\n '2xl': 'h-24 w-24 text-lg',\n}\n\nfunction initials(name?: string) {\n if (!name) return ''\n const parts = name.trim().split(/\\s+/)\n return parts.slice(0, 2).map(p => p[0]!.toUpperCase()).join('')\n}\n\nexport const Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n ({ src, alt = '', name, size = 'md', status, className, ...rest }, ref) => {\n const statusColor =\n status === 'online' ? 'bg-success' : status === 'busy' ? 'bg-warning' : 'bg-zinc'\n\n return (\n <div\n ref={ref}\n className={cx(\n 'relative inline-flex items-center justify-center rounded-full border-2 border-ash bg-slate text-silver font-semibold select-none overflow-hidden',\n sizeMap[size],\n className\n )}\n {...rest}\n >\n {src ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img src={src} alt={alt || name || 'Avatar'} className=\"h-full w-full object-cover\" />\n ) : (\n <span aria-hidden>{initials(name) || '·'}</span>\n )}\n {status && (\n <span\n className={cx(\n 'absolute bottom-0 right-0 rounded-full ring-2 ring-charcoal',\n // 25% of avatar size\n size === 'xs' ? 'h-1.5 w-1.5' :\n size === 'sm' ? 'h-2 w-2' :\n size === 'md' ? 'h-2.5 w-2.5' :\n size === 'lg' ? 'h-3 w-3' :\n size === 'xl' ? 'h-4 w-4' : 'h-5 w-5',\n statusColor\n )}\n />\n )}\n </div>\n )\n }\n)\n\nAvatar.displayName = 'Avatar'\n\nexport default Avatar\n","import React from 'react'\n\nexport type BadgeVariant = 'default' | 'gold' | 'success' | 'error' | 'warning' | 'info'\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ variant = 'default', className, ...rest }, ref) => {\n // Base badge styles\n const base = 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium border'\n\n // Variant styles\n const variantClasses = {\n default: 'bg-slate text-silver border-slate',\n gold: 'bg-gold/20 text-gold border-gold/30',\n success: 'bg-success/20 text-success border-success/30',\n error: 'bg-error/20 text-error border-error/30',\n warning: 'bg-warning/20 text-warning border-warning/30',\n info: 'bg-info/20 text-info border-info/30',\n }\n\n const variantClass = variantClasses[variant]\n\n return <span ref={ref} className={cx(base, variantClass, className)} {...rest} />\n }\n)\n\nBadge.displayName = 'Badge'\n\nexport default Badge\n","import React from 'react'\n\nexport type TooltipSide = 'top' | 'right' | 'bottom' | 'left'\n\nexport interface TooltipProps {\n content: React.ReactNode\n children: React.ReactElement\n open?: boolean\n side?: TooltipSide\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\n// Simple, controlled tooltip. Consumer handles open state.\nexport const Tooltip: React.FC<TooltipProps> = ({ content, children, open = false, side = 'top' }) => {\n return (\n <span className=\"relative inline-block\">\n {children}\n <span\n role=\"tooltip\"\n className={cx(\n 'pointer-events-none absolute z-50 whitespace-nowrap rounded-md border border-ash bg-graphite px-3 py-1.5 text-sm text-white shadow-lg transition-opacity duration-fast ease-out',\n open ? 'opacity-100' : 'opacity-0',\n side === 'top' && 'left-1/2 -translate-x-1/2 -top-2 translate-y-[-100%]',\n side === 'bottom' && 'left-1/2 -translate-x-1/2 -bottom-2 translate-y-[100%]',\n side === 'left' && 'top-1/2 -translate-y-1/2 -left-2 -translate-x-[100%]',\n side === 'right' && 'top-1/2 -translate-y-1/2 -right-2 translate-x-[100%]'\n )}\n >\n {content}\n </span>\n </span>\n )\n}\n\nexport default Tooltip\n","import React from 'react'\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, required, children, ...rest }, ref) => {\n return (\n <label\n ref={ref}\n className={cx('block text-sm font-medium text-silver mb-1.5', className)}\n {...rest}\n >\n {children}\n {required && <span className=\"text-error ml-1\">*</span>}\n </label>\n )\n }\n)\n\nLabel.displayName = 'Label'\n\nexport default Label\n","import React from 'react'\n\nexport interface HelperTextProps extends React.HTMLAttributes<HTMLParagraphElement> {\n error?: boolean\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const HelperText = React.forwardRef<HTMLParagraphElement, HelperTextProps>(\n ({ className, error, children, ...rest }, ref) => {\n return (\n <p\n ref={ref}\n className={cx('mt-1.5 text-xs', error ? 'text-error' : 'text-silver', className)}\n {...rest}\n >\n {children}\n </p>\n )\n }\n)\n\nHelperText.displayName = 'HelperText'\n\nexport default HelperText\n","import React from 'react'\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n error?: boolean\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ error = false, className, disabled, ...rest }, ref) => {\n // Base textarea styles\n const base =\n 'w-full px-3 py-2 bg-graphite border border-ash rounded-none ' +\n 'text-white placeholder:text-zinc min-h-[80px] ' +\n 'transition-all duration-fast ' +\n 'focus:border-gold focus:ring-1 focus:ring-gold focus:outline-none ' +\n 'disabled:bg-slate disabled:text-dim disabled:cursor-not-allowed'\n\n // Error styles\n const errorCls = error ? 'border-error focus:border-error focus:ring-error' : ''\n\n return (\n <textarea\n ref={ref}\n className={cx(base, errorCls, disabled && 'opacity-90', className)}\n disabled={disabled}\n {...rest}\n />\n )\n }\n)\n\nTextarea.displayName = 'Textarea'\n\nexport default Textarea\n","import React from 'react'\n\nexport interface SelectOption {\n label: string\n value: string | number\n}\n\nexport interface SelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {\n error?: boolean\n options?: SelectOption[]\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nconst 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\\\")\"\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ error = false, className, disabled, options, children, ...rest }, ref) => {\n return (\n <select\n ref={ref}\n className={cx(\n 'appearance-none bg-graphite border border-ash rounded-none text-white px-3 py-2 pr-8',\n 'focus:border-gold focus:ring-1 focus:ring-gold focus:outline-none',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n error && 'border-error focus:border-error focus:ring-error',\n className\n )}\n style={{\n backgroundImage: selectBgImage,\n backgroundPosition: 'right 0.5rem center',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '1.5em 1.5em',\n }}\n disabled={disabled}\n {...rest}\n >\n {options\n ? options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))\n : children}\n </select>\n )\n }\n)\n\nSelect.displayName = 'Select'\n\nexport default Select\n","import React, { useCallback } from 'react'\n\nexport interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nconst 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\\\")\"\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, label, id, ...rest }, ref) => {\n const inputId = id || rest.name || Math.random().toString(36).substr(2, 9)\n\n const setRef = useCallback((node: HTMLInputElement | null) => {\n if (node) {\n // Set initial background image based on checked state\n if (node.checked) {\n node.style.backgroundImage = checkmarkSvg\n }\n }\n // Forward ref\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n }, [ref])\n\n return (\n <div className=\"flex items-center\">\n <input\n type=\"checkbox\"\n id={inputId}\n ref={setRef}\n className={cx(\n 'appearance-none h-4 w-4 border border-ash rounded-sm bg-graphite',\n 'checked:bg-gold checked:border-gold',\n 'focus:ring-1 focus:ring-gold focus:ring-offset-1 focus:ring-offset-obsidian',\n 'transition duration-200 ease-in-out cursor-pointer',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n className\n )}\n style={{\n backgroundPosition: 'center',\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n }}\n onChange={(e) => {\n const input = e.currentTarget\n if (input.checked) {\n input.style.backgroundImage = checkmarkSvg\n } else {\n input.style.backgroundImage = 'none'\n }\n rest.onChange?.(e)\n }}\n {...rest}\n />\n {label && (\n <label htmlFor={inputId} className=\"ml-2 text-sm text-silver cursor-pointer select-none\">\n {label}\n </label>\n )}\n </div>\n )\n }\n)\n\nCheckbox.displayName = 'Checkbox'\n\nexport default Checkbox\n","import React, { useCallback } from 'react'\n\nexport interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nconst 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\\\")\"\n\nexport const Radio = React.forwardRef<HTMLInputElement, RadioProps>(\n ({ className, label, id, ...rest }, ref) => {\n const inputId = id || rest.name || Math.random().toString(36).substr(2, 9)\n\n const setRef = useCallback((node: HTMLInputElement | null) => {\n if (node) {\n // Set initial background image based on checked state\n if (node.checked) {\n node.style.backgroundImage = radioDotSvg\n }\n }\n // Forward ref\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n }, [ref])\n\n return (\n <div className=\"flex items-center\">\n <input\n type=\"radio\"\n id={inputId}\n ref={setRef}\n className={cx(\n 'appearance-none h-4 w-4 border border-ash rounded-full bg-graphite',\n 'checked:bg-gold checked:border-gold',\n 'focus:ring-1 focus:ring-gold focus:ring-offset-1 focus:ring-offset-obsidian',\n 'transition duration-200 ease-in-out cursor-pointer',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n className\n )}\n style={{\n backgroundPosition: 'center',\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n }}\n onChange={(e) => {\n const input = e.currentTarget\n if (input.checked) {\n input.style.backgroundImage = radioDotSvg\n // Clear other radios in the same group\n if (input.name) {\n const radios = document.querySelectorAll<HTMLInputElement>(`input[type=\"radio\"][name=\"${input.name}\"]`)\n radios.forEach((radio) => {\n if (radio !== input) {\n radio.style.backgroundImage = 'none'\n }\n })\n }\n } else {\n input.style.backgroundImage = 'none'\n }\n rest.onChange?.(e)\n }}\n {...rest}\n />\n {label && (\n <label htmlFor={inputId} className=\"ml-2 text-sm text-silver cursor-pointer select-none\">\n {label}\n </label>\n )}\n </div>\n )\n }\n)\n\nRadio.displayName = 'Radio'\n\nexport default Radio\n","import React, { useCallback, useRef, useState } from 'react'\n\nexport interface SwitchProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n checked?: boolean\n defaultChecked?: boolean\n onCheckedChange?: (checked: boolean) => void\n label?: string\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n ({ checked: controlledChecked, defaultChecked = false, onCheckedChange, disabled, className, label, ...rest }, ref) => {\n const [internalChecked, setInternalChecked] = useState(defaultChecked)\n const isControlled = controlledChecked !== undefined\n const checked = isControlled ? controlledChecked : internalChecked\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n const setRefs = useCallback(\n (node: HTMLButtonElement | null) => {\n buttonRef.current = node\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n },\n [ref]\n )\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return\n const newChecked = !checked\n if (!isControlled) {\n setInternalChecked(newChecked)\n }\n onCheckedChange?.(newChecked)\n rest.onClick?.(e)\n }\n\n return (\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n data-state={checked ? 'checked' : 'unchecked'}\n disabled={disabled}\n ref={setRefs}\n onClick={handleClick}\n className={cx(\n 'relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent',\n 'transition-colors duration-200 ease-in-out',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 focus-visible:ring-offset-obsidian',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n checked ? 'bg-gold' : 'bg-charcoal',\n className\n )}\n {...rest}\n >\n <span\n className={cx(\n 'pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0',\n 'transition duration-200 ease-in-out',\n checked ? 'translate-x-5' : 'translate-x-0'\n )}\n />\n </button>\n {label && (\n <span\n className=\"text-sm text-silver cursor-pointer\"\n onClick={() => {\n if (disabled) return\n buttonRef.current?.click()\n }}\n >\n {label}\n </span>\n )}\n </div>\n )\n }\n)\n\nSwitch.displayName = 'Switch'\n\nexport default Switch\n","import React from 'react'\nimport { Info, CheckCircle, AlertTriangle, XCircle } from 'lucide-react'\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error'\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant\n title?: string\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nconst icons = {\n info: Info,\n success: CheckCircle,\n warning: AlertTriangle,\n error: XCircle,\n}\n\nconst variantStyles = {\n info: 'bg-info/10 border-info text-info',\n success: 'bg-success/10 border-success text-success',\n warning: 'bg-warning/10 border-warning text-warning',\n error: 'bg-error/10 border-error text-error',\n}\n\nexport const Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ variant = 'info', title, children, className, ...rest }, ref) => {\n const Icon = icons[variant]\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cx(\n 'relative w-full p-4 rounded-none border border-l-4 flex gap-3',\n variantStyles[variant],\n className\n )}\n {...rest}\n >\n <Icon className=\"h-5 w-5 shrink-0\" />\n <div className=\"flex-1\">\n {title && <h5 className=\"mb-1 font-medium leading-none tracking-tight text-current\">{title}</h5>}\n <div className=\"text-sm opacity-90\">{children}</div>\n </div>\n </div>\n )\n }\n)\n\nAlert.displayName = 'Alert'\n\nexport default Alert\n","import React from 'react'\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg'\n\nexport interface SpinnerProps extends React.SVGAttributes<SVGElement> {\n size?: SpinnerSize\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Spinner = ({ className, size = 'md', ...rest }: SpinnerProps) => {\n const sizeClass =\n size === 'sm' ? 'h-4 w-4' : size === 'lg' ? 'h-8 w-8' : 'h-6 w-6'\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cx('animate-spin text-gold', sizeClass, className)}\n {...rest}\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n )\n}\n\nSpinner.displayName = 'Spinner'\n\nexport default Spinner\n","import React from 'react'\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, ...rest }, ref) => {\n return (\n <div\n ref={ref}\n className={cx('animate-pulse bg-ash rounded-sm', className)}\n {...rest}\n />\n )\n }\n)\n\nSkeleton.displayName = 'Skeleton'\n\nexport default Skeleton\n","import React, { useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X } from 'lucide-react'\n\nexport interface ModalProps {\n isOpen: boolean\n onClose: () => void\n title?: string\n children: React.ReactNode\n className?: string\n}\n\nfunction cx(...classes: Array<string | number | false | null | undefined>) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Modal = ({ isOpen, onClose, title, children, className }: ModalProps) => {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n useEffect(() => {\n if (isOpen) {\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n document.body.style.overflow = 'hidden'\n document.body.style.paddingRight = `${scrollbarWidth}px`\n } else {\n document.body.style.overflow = 'unset'\n document.body.style.paddingRight = '0px'\n }\n return () => {\n document.body.style.overflow = 'unset'\n document.body.style.paddingRight = '0px'\n }\n }, [isOpen])\n\n useEffect(() => {\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n window.addEventListener('keydown', handleEsc)\n return () => window.removeEventListener('keydown', handleEsc)\n }, [onClose])\n\n if (!mounted) return null\n\n // Don't render anything if closed, unless we want exit animations. \n // My CSS relies on data-state, but if I unmount immediately, exit animation won't play.\n // To support exit animations, I'd need a transition manager (like framer-motion or headlessui).\n // For this simple implementation, I'll render conditionally. \n // If I want animation, I need to keep it mounted until animation ends.\n // Given the prompt \"add all suggestions\" and \"premium\", a simple unmount is acceptable for v1 without heavy deps.\n // However, the CSS I wrote has `data-state=closed`. \n // Without a transition library, handling exit animation is tricky. \n // I'll just conditional render for now. The entry animation `animate-fade-in` will play.\n \n if (!isOpen) return null;\n\n const content = (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4 sm:p-6\" onClick={onClose}>\n <div className=\"fixed inset-0 z-40 bg-obsidian/80 backdrop-blur-sm\" aria-hidden=\"true\" />\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n className={cx(\n 'bg-charcoal border border-gold/30 shadow-2xl z-50 w-full max-w-lg p-6 rounded-none relative',\n className\n )}\n data-state=\"open\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-between mb-2\">\n {title ? <h3 className=\"text-xl font-semibold text-white m-0\">{title}</h3> : <div />}\n <button onClick={onClose} className=\"text-silver hover:text-white transition-colors ml-auto\">\n <X className=\"h-5 w-5\" />\n <span className=\"sr-only\">Close</span>\n </button>\n </div>\n <div>{children}</div>\n </div>\n </div>\n )\n\n return createPortal(content, document.body)\n}\n\nModal.displayName = 'Modal'\n\nexport default Modal\n","/**\n * Aurelius Design System\n *\n * A cohesive visual language for creative technologists.\n * Combines technical sophistication with artistic sensibility.\n *\n * CSS-first Tailwind v4 design system.\n * Import '@lukeashford/aurelius/styles/base.css' for complete styling.\n */\n\n// React components\nexport * from './components'\n\n// Version\nexport const version = '2.0.0'\n"],"mappings":"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","names":["React","cx","React","cx","React","cx","React","cx","React","cx","React","cx","React","cx","React","cx","React","cx","React","cx","React","useCallback","cx","React","useCallback","cx","React","cx","React","cx","React","cx","React","useState","cx"]}