@lukeashford/aurelius 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +93 -0
  2. package/dist/chunk-7DDWFQNU.mjs +136 -0
  3. package/dist/chunk-7DDWFQNU.mjs.map +1 -0
  4. package/dist/chunk-OPJXDW4C.mjs +150 -0
  5. package/dist/chunk-OPJXDW4C.mjs.map +1 -0
  6. package/dist/index.d.mts +136 -0
  7. package/dist/index.d.ts +136 -0
  8. package/dist/index.js +816 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/index.mjs +505 -0
  11. package/dist/index.mjs.map +1 -0
  12. package/dist/llms.md +325 -0
  13. package/dist/styles/base.css +537 -0
  14. package/dist/styles/fonts/1Ptsg8zYS_SKggPNyCg4Q4FqL_KWxWMT.woff2 +0 -0
  15. package/dist/styles/fonts/1Ptsg8zYS_SKggPNyCg4QIFqL_KWxWMT.woff2 +0 -0
  16. package/dist/styles/fonts/1Ptsg8zYS_SKggPNyCg4QoFqL_KWxWMT.woff2 +0 -0
  17. package/dist/styles/fonts/1Ptsg8zYS_SKggPNyCg4SYFqL_KWxWMT.woff2 +0 -0
  18. package/dist/styles/fonts/1Ptsg8zYS_SKggPNyCg4TYFqL_KWxQ.woff2 +0 -0
  19. package/dist/styles/fonts/1Ptug8zYS_SKggPNyC0IT4ttDfA.woff2 +0 -0
  20. package/dist/styles/fonts/1Ptug8zYS_SKggPNyCAIT4ttDfCmxA.woff2 +0 -0
  21. package/dist/styles/fonts/1Ptug8zYS_SKggPNyCIIT4ttDfCmxA.woff2 +0 -0
  22. package/dist/styles/fonts/1Ptug8zYS_SKggPNyCMIT4ttDfCmxA.woff2 +0 -0
  23. package/dist/styles/fonts/1Ptug8zYS_SKggPNyCkIT4ttDfCmxA.woff2 +0 -0
  24. package/dist/styles/fonts/OFL_JetBrainsMono.txt +93 -0
  25. package/dist/styles/fonts/OFL_Marcellus.txt +93 -0
  26. package/dist/styles/fonts/OFL_Raleway.txt +93 -0
  27. package/dist/styles/fonts/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwgknk-6nFg.woff2 +0 -0
  28. package/dist/styles/fonts/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwgknk-6nFg.woff2 +0 -0
  29. package/dist/styles/fonts/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwgknk-4.woff2 +0 -0
  30. package/dist/styles/fonts/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwgknk-6nFg.woff2 +0 -0
  31. package/dist/styles/fonts/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwgknk-6nFg.woff2 +0 -0
  32. package/dist/styles/fonts/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwgknk-6nFg.woff2 +0 -0
  33. package/dist/styles/fonts/wEO_EBrOk8hQLDvIAF81VvoK_kgXiQ.woff2 +0 -0
  34. package/dist/styles/fonts/wEO_EBrOk8hQLDvIAF81WPoK_kgXiYvO.woff2 +0 -0
  35. package/dist/styles/fonts.css +317 -0
  36. package/dist/tailwind.preset.d.mts +5 -0
  37. package/dist/tailwind.preset.d.ts +5 -0
  38. package/dist/tailwind.preset.js +288 -0
  39. package/dist/tailwind.preset.js.map +1 -0
  40. package/dist/tailwind.preset.mjs +8 -0
  41. package/dist/tailwind.preset.mjs.map +1 -0
  42. package/dist/tokens/index.d.mts +156 -0
  43. package/dist/tokens/index.d.ts +156 -0
  44. package/dist/tokens/index.js +182 -0
  45. package/dist/tokens/index.js.map +1 -0
  46. package/dist/tokens/index.mjs +19 -0
  47. package/dist/tokens/index.mjs.map +1 -0
  48. package/package.json +65 -0
package/dist/index.js ADDED
@@ -0,0 +1,816 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ Alert: () => Alert,
34
+ Avatar: () => Avatar,
35
+ Badge: () => Badge,
36
+ Button: () => Button,
37
+ Card: () => Card,
38
+ Checkbox: () => Checkbox,
39
+ HelperText: () => HelperText,
40
+ Input: () => Input,
41
+ Label: () => Label,
42
+ Modal: () => Modal,
43
+ Radio: () => Radio,
44
+ Select: () => Select,
45
+ Skeleton: () => Skeleton,
46
+ Spinner: () => Spinner,
47
+ Switch: () => Switch,
48
+ Textarea: () => Textarea,
49
+ Tooltip: () => Tooltip,
50
+ colors: () => colors,
51
+ duration: () => duration,
52
+ easing: () => easing,
53
+ radii: () => radii,
54
+ shadows: () => shadows,
55
+ spacing: () => spacing,
56
+ tailwindPreset: () => tailwind_preset_default,
57
+ typography: () => typography,
58
+ version: () => version
59
+ });
60
+ module.exports = __toCommonJS(index_exports);
61
+
62
+ // src/tokens/colors.ts
63
+ var colors = {
64
+ // Black spectrum
65
+ void: "#000000",
66
+ obsidian: "#0a0a0a",
67
+ charcoal: "#141414",
68
+ graphite: "#1f1f1f",
69
+ slate: "#2a2a2a",
70
+ ash: "#3d3d3d",
71
+ // Gold spectrum
72
+ gold: "#c9a227",
73
+ goldLight: "#d4b84a",
74
+ goldBright: "#e5c84d",
75
+ goldMuted: "#8b7355",
76
+ goldPale: "#d4c4a8",
77
+ goldGlow: "rgba(201, 162, 39, 0.15)",
78
+ // Neutrals
79
+ white: "#ffffff",
80
+ silver: "#a3a3a3",
81
+ zinc: "#71717a",
82
+ dim: "#52525b",
83
+ // Semantic
84
+ success: "#22c55e",
85
+ successMuted: "#166534",
86
+ error: "#dc2626",
87
+ errorMuted: "#991b1b",
88
+ warning: "#d97706",
89
+ warningMuted: "#92400e",
90
+ info: "#0ea5e9",
91
+ infoMuted: "#0369a1"
92
+ };
93
+
94
+ // src/tokens/typography.ts
95
+ var typography = {
96
+ // Headings use Marcellus, a classic serif
97
+ fontHeading: ["Marcellus", "serif"],
98
+ // Body and UI use Raleway
99
+ fontBody: ["Raleway", "system-ui", "sans-serif"],
100
+ fontMono: ["JetBrains Mono", "Fira Code", "SF Mono", "monospace"],
101
+ fontSize: {
102
+ xs: ["0.75rem", { lineHeight: "1rem" }],
103
+ sm: ["0.875rem", { lineHeight: "1.25rem" }],
104
+ base: ["1rem", { lineHeight: "1.5rem" }],
105
+ lg: ["1.125rem", { lineHeight: "1.75rem" }],
106
+ xl: ["1.25rem", { lineHeight: "1.75rem" }],
107
+ "2xl": ["1.5rem", { lineHeight: "2rem" }],
108
+ "3xl": ["1.875rem", { lineHeight: "2.25rem" }],
109
+ "4xl": ["2.25rem", { lineHeight: "2.5rem" }],
110
+ "5xl": ["3rem", { lineHeight: "1" }],
111
+ "6xl": ["3.75rem", { lineHeight: "1" }]
112
+ },
113
+ fontWeight: {
114
+ normal: "400",
115
+ medium: "500",
116
+ semibold: "600",
117
+ bold: "700"
118
+ },
119
+ lineHeight: {
120
+ none: "1",
121
+ tight: "1.25",
122
+ snug: "1.375",
123
+ normal: "1.5",
124
+ relaxed: "1.625",
125
+ loose: "2"
126
+ },
127
+ letterSpacing: {
128
+ tighter: "-0.05em",
129
+ tight: "-0.025em",
130
+ normal: "0",
131
+ wide: "0.025em",
132
+ wider: "0.05em",
133
+ widest: "0.1em"
134
+ }
135
+ };
136
+
137
+ // src/tokens/spacing.ts
138
+ var spacing = {
139
+ px: "1px",
140
+ 0: "0",
141
+ 0.5: "0.125rem",
142
+ 1: "0.25rem",
143
+ 1.5: "0.375rem",
144
+ 2: "0.5rem",
145
+ 2.5: "0.625rem",
146
+ 3: "0.75rem",
147
+ 3.5: "0.875rem",
148
+ 4: "1rem",
149
+ 5: "1.25rem",
150
+ 6: "1.5rem",
151
+ 7: "1.75rem",
152
+ 8: "2rem",
153
+ 9: "2.25rem",
154
+ 10: "2.5rem",
155
+ 11: "2.75rem",
156
+ 12: "3rem",
157
+ 14: "3.5rem",
158
+ 16: "4rem",
159
+ 20: "5rem",
160
+ 24: "6rem",
161
+ 28: "7rem",
162
+ 32: "8rem"
163
+ };
164
+
165
+ // src/tokens/shadows.ts
166
+ var shadows = {
167
+ sm: "0 1px 2px 0 rgba(0, 0, 0, 0.4)",
168
+ md: "0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -2px rgba(0, 0, 0, 0.3)",
169
+ lg: "0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -4px rgba(0, 0, 0, 0.3)",
170
+ xl: "0 20px 25px -5px rgba(0, 0, 0, 0.4), 0 8px 10px -6px rgba(0, 0, 0, 0.3)",
171
+ "2xl": "0 25px 50px -12px rgba(0, 0, 0, 0.5)",
172
+ glow: "0 0 20px rgba(201, 162, 39, 0.3)",
173
+ "glow-sm": "0 0 10px rgba(201, 162, 39, 0.2)",
174
+ "glow-lg": "0 0 40px rgba(201, 162, 39, 0.4)",
175
+ inner: "inset 0 2px 4px 0 rgba(0, 0, 0, 0.3)"
176
+ };
177
+
178
+ // src/tokens/transitions.ts
179
+ var duration = {
180
+ instant: "75ms",
181
+ fast: "150ms",
182
+ normal: "200ms",
183
+ slow: "300ms",
184
+ slower: "500ms"
185
+ };
186
+ var easing = {
187
+ smooth: "cubic-bezier(0.16, 1, 0.3, 1)",
188
+ snap: "cubic-bezier(0.5, 0, 0.1, 1)"
189
+ };
190
+
191
+ // src/tokens/radii.ts
192
+ var radii = {
193
+ sm: "0.125rem",
194
+ md: "0.25rem",
195
+ lg: "0.375rem",
196
+ xl: "0.5rem",
197
+ "2xl": "0.75rem",
198
+ "3xl": "1rem",
199
+ full: "9999px"
200
+ };
201
+
202
+ // src/tailwind.preset.ts
203
+ 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
+ theme: {
235
+ extend: {
236
+ colors: {
237
+ // Black spectrum
238
+ void: colors.void,
239
+ obsidian: colors.obsidian,
240
+ charcoal: colors.charcoal,
241
+ graphite: colors.graphite,
242
+ slate: colors.slate,
243
+ ash: colors.ash,
244
+ // Gold spectrum
245
+ gold: {
246
+ DEFAULT: colors.gold,
247
+ light: colors.goldLight,
248
+ bright: colors.goldBright,
249
+ muted: colors.goldMuted,
250
+ pale: colors.goldPale,
251
+ glow: colors.goldGlow
252
+ },
253
+ // Neutrals
254
+ white: colors.white,
255
+ silver: colors.silver,
256
+ zinc: colors.zinc,
257
+ dim: colors.dim,
258
+ // Semantic
259
+ success: {
260
+ DEFAULT: colors.success,
261
+ muted: colors.successMuted
262
+ },
263
+ error: {
264
+ DEFAULT: colors.error,
265
+ muted: colors.errorMuted
266
+ },
267
+ warning: {
268
+ DEFAULT: colors.warning,
269
+ muted: colors.warningMuted
270
+ },
271
+ info: {
272
+ DEFAULT: colors.info,
273
+ muted: colors.infoMuted
274
+ }
275
+ },
276
+ fontFamily: {
277
+ heading: typography.fontHeading,
278
+ body: typography.fontBody,
279
+ mono: typography.fontMono
280
+ },
281
+ fontSize: typography.fontSize,
282
+ fontWeight: typography.fontWeight,
283
+ lineHeight: typography.lineHeight,
284
+ letterSpacing: typography.letterSpacing,
285
+ spacing,
286
+ borderRadius: radii,
287
+ boxShadow: shadows,
288
+ transitionDuration: duration,
289
+ transitionTimingFunction: easing,
290
+ animation: {
291
+ "fade-in": "fade-in 200ms ease-out",
292
+ "fade-out": "fade-out 150ms ease-in",
293
+ "slide-in-right": `slide-in-right 300ms ${easing.smooth}`,
294
+ "slide-out-right": "slide-out-right 200ms ease-in",
295
+ "pulse-glow": "pulse-glow 2s ease-in-out infinite"
296
+ },
297
+ keyframes: {
298
+ "fade-in": {
299
+ "0%": { opacity: "0" },
300
+ "100%": { opacity: "1" }
301
+ },
302
+ "fade-out": {
303
+ "0%": { opacity: "1" },
304
+ "100%": { opacity: "0" }
305
+ },
306
+ "slide-in-right": {
307
+ "0%": { transform: "translateX(100%)", opacity: "0" },
308
+ "100%": { transform: "translateX(0)", opacity: "1" }
309
+ },
310
+ "slide-out-right": {
311
+ "0%": { transform: "translateX(0)", opacity: "1" },
312
+ "100%": { transform: "translateX(100%)", opacity: "0" }
313
+ },
314
+ "pulse-glow": {
315
+ "0%, 100%": { boxShadow: "0 0 20px rgba(201, 162, 39, 0.3)" },
316
+ "50%": { boxShadow: "0 0 30px rgba(201, 162, 39, 0.5)" }
317
+ }
318
+ }
319
+ }
320
+ }
321
+ };
322
+ var tailwind_preset_default = preset;
323
+
324
+ // src/components/Button.tsx
325
+ var import_react = __toESM(require("react"));
326
+ function cx(...classes) {
327
+ return classes.filter(Boolean).join(" ");
328
+ }
329
+ var Button = import_react.default.forwardRef(
330
+ ({ variant = "primary", size = "md", loading = false, className, disabled, children, ...rest }, ref) => {
331
+ 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}`;
334
+ return /* @__PURE__ */ import_react.default.createElement(
335
+ "button",
336
+ {
337
+ ref,
338
+ className: cx("btn", variantClass, sizeClass, loading && "opacity-80", className),
339
+ disabled: isDisabled,
340
+ ...rest
341
+ },
342
+ loading && /* @__PURE__ */ import_react.default.createElement(
343
+ "span",
344
+ {
345
+ className: "mr-2 inline-block h-4 w-4 animate-pulse rounded-full bg-gold",
346
+ "aria-hidden": true
347
+ }
348
+ ),
349
+ children
350
+ );
351
+ }
352
+ );
353
+ Button.displayName = "Button";
354
+
355
+ // src/components/Input.tsx
356
+ var import_react2 = __toESM(require("react"));
357
+ function cx2(...classes) {
358
+ return classes.filter(Boolean).join(" ");
359
+ }
360
+ var Input = import_react2.default.forwardRef(
361
+ ({ error = false, className, leadingIcon, trailingIcon, disabled, ...rest }, ref) => {
362
+ const base = "input";
363
+ const errorCls = error ? "input-error" : "";
364
+ 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
+ "input",
366
+ {
367
+ ref,
368
+ className: cx2(
369
+ base,
370
+ errorCls,
371
+ (leadingIcon || trailingIcon) && "pl-9 pr-9",
372
+ className
373
+ ),
374
+ disabled,
375
+ ...rest
376
+ }
377
+ ), trailingIcon && /* @__PURE__ */ import_react2.default.createElement("span", { className: "pointer-events-none absolute inset-y-0 right-3 flex items-center text-silver" }, trailingIcon));
378
+ }
379
+ );
380
+ Input.displayName = "Input";
381
+
382
+ // src/components/Card.tsx
383
+ var import_react3 = __toESM(require("react"));
384
+ function cx3(...classes) {
385
+ return classes.filter(Boolean).join(" ");
386
+ }
387
+ var Card = import_react3.default.forwardRef(
388
+ ({ 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" : "";
392
+ return /* @__PURE__ */ import_react3.default.createElement(
393
+ "div",
394
+ {
395
+ ref,
396
+ className: cx3(base, variantClass, interactiveClass, className),
397
+ ...rest
398
+ }
399
+ );
400
+ }
401
+ );
402
+ Card.displayName = "Card";
403
+
404
+ // src/components/Avatar.tsx
405
+ var import_react4 = __toESM(require("react"));
406
+ function cx4(...classes) {
407
+ return classes.filter(Boolean).join(" ");
408
+ }
409
+ var sizeMap = {
410
+ xs: "h-6 w-6 text-[10px]",
411
+ sm: "h-8 w-8 text-[11px]",
412
+ md: "h-10 w-10 text-xs",
413
+ lg: "h-12 w-12 text-sm",
414
+ xl: "h-16 w-16 text-base",
415
+ "2xl": "h-24 w-24 text-lg"
416
+ };
417
+ function initials(name) {
418
+ if (!name) return "";
419
+ const parts = name.trim().split(/\s+/);
420
+ return parts.slice(0, 2).map((p) => p[0].toUpperCase()).join("");
421
+ }
422
+ var Avatar = import_react4.default.forwardRef(
423
+ ({ src, alt = "", name, size = "md", status, className, ...rest }, ref) => {
424
+ const statusColor = status === "online" ? "bg-success" : status === "busy" ? "bg-warning" : "bg-zinc";
425
+ return /* @__PURE__ */ import_react4.default.createElement(
426
+ "div",
427
+ {
428
+ ref,
429
+ className: cx4(
430
+ "relative inline-flex items-center justify-center rounded-full border-2 border-ash bg-slate text-silver font-semibold select-none overflow-hidden",
431
+ sizeMap[size],
432
+ className
433
+ ),
434
+ ...rest
435
+ },
436
+ src ? (
437
+ // eslint-disable-next-line @next/next/no-img-element
438
+ /* @__PURE__ */ import_react4.default.createElement("img", { src, alt: alt || name || "Avatar", className: "h-full w-full object-cover" })
439
+ ) : /* @__PURE__ */ import_react4.default.createElement("span", { "aria-hidden": true }, initials(name) || "\xB7"),
440
+ status && /* @__PURE__ */ import_react4.default.createElement(
441
+ "span",
442
+ {
443
+ className: cx4(
444
+ "absolute bottom-0 right-0 rounded-full ring-2 ring-charcoal",
445
+ // 25% of avatar size
446
+ size === "xs" ? "h-1.5 w-1.5" : size === "sm" ? "h-2 w-2" : size === "md" ? "h-2.5 w-2.5" : size === "lg" ? "h-3 w-3" : size === "xl" ? "h-4 w-4" : "h-5 w-5",
447
+ statusColor
448
+ )
449
+ }
450
+ )
451
+ );
452
+ }
453
+ );
454
+ Avatar.displayName = "Avatar";
455
+
456
+ // src/components/Badge.tsx
457
+ var import_react5 = __toESM(require("react"));
458
+ function cx5(...classes) {
459
+ return classes.filter(Boolean).join(" ");
460
+ }
461
+ var Badge = import_react5.default.forwardRef(
462
+ ({ 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 });
465
+ }
466
+ );
467
+ Badge.displayName = "Badge";
468
+
469
+ // src/components/Tooltip.tsx
470
+ var import_react6 = __toESM(require("react"));
471
+ function cx6(...classes) {
472
+ return classes.filter(Boolean).join(" ");
473
+ }
474
+ var Tooltip = ({ content, children, open = false, side = "top" }) => {
475
+ return /* @__PURE__ */ import_react6.default.createElement("span", { className: "relative inline-block" }, children, /* @__PURE__ */ import_react6.default.createElement(
476
+ "span",
477
+ {
478
+ role: "tooltip",
479
+ className: cx6(
480
+ "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",
481
+ open ? "opacity-100" : "opacity-0",
482
+ side === "top" && "left-1/2 -translate-x-1/2 -top-2 translate-y-[-100%]",
483
+ side === "bottom" && "left-1/2 -translate-x-1/2 -bottom-2 translate-y-[100%]",
484
+ side === "left" && "top-1/2 -translate-y-1/2 -left-2 -translate-x-[100%]",
485
+ side === "right" && "top-1/2 -translate-y-1/2 -right-2 translate-x-[100%]"
486
+ )
487
+ },
488
+ content
489
+ ));
490
+ };
491
+
492
+ // src/components/Label.tsx
493
+ var import_react7 = __toESM(require("react"));
494
+ function cx7(...classes) {
495
+ return classes.filter(Boolean).join(" ");
496
+ }
497
+ var Label = import_react7.default.forwardRef(
498
+ ({ className, required, children, ...rest }, ref) => {
499
+ return /* @__PURE__ */ import_react7.default.createElement(
500
+ "label",
501
+ {
502
+ ref,
503
+ className: cx7("label", required && "label-required", className),
504
+ ...rest
505
+ },
506
+ children
507
+ );
508
+ }
509
+ );
510
+ Label.displayName = "Label";
511
+
512
+ // src/components/HelperText.tsx
513
+ var import_react8 = __toESM(require("react"));
514
+ function cx8(...classes) {
515
+ return classes.filter(Boolean).join(" ");
516
+ }
517
+ var HelperText = import_react8.default.forwardRef(
518
+ ({ className, error, children, ...rest }, ref) => {
519
+ return /* @__PURE__ */ import_react8.default.createElement(
520
+ "p",
521
+ {
522
+ ref,
523
+ className: cx8("mt-1.5 text-xs", error ? "text-error" : "text-silver", className),
524
+ ...rest
525
+ },
526
+ children
527
+ );
528
+ }
529
+ );
530
+ HelperText.displayName = "HelperText";
531
+
532
+ // src/components/Textarea.tsx
533
+ var import_react9 = __toESM(require("react"));
534
+ function cx9(...classes) {
535
+ return classes.filter(Boolean).join(" ");
536
+ }
537
+ var Textarea = import_react9.default.forwardRef(
538
+ ({ error = false, className, disabled, ...rest }, ref) => {
539
+ const base = "textarea";
540
+ const errorCls = error ? "border-error focus:border-error focus:ring-error" : "";
541
+ return /* @__PURE__ */ import_react9.default.createElement(
542
+ "textarea",
543
+ {
544
+ ref,
545
+ className: cx9(base, errorCls, disabled && "opacity-90", className),
546
+ disabled,
547
+ ...rest
548
+ }
549
+ );
550
+ }
551
+ );
552
+ Textarea.displayName = "Textarea";
553
+
554
+ // src/components/Select.tsx
555
+ var import_react10 = __toESM(require("react"));
556
+ function cx10(...classes) {
557
+ return classes.filter(Boolean).join(" ");
558
+ }
559
+ var Select = import_react10.default.forwardRef(
560
+ ({ 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
+ return /* @__PURE__ */ import_react10.default.createElement(
564
+ "select",
565
+ {
566
+ ref,
567
+ className: cx10(base, errorCls, disabled && "opacity-90", className),
568
+ disabled,
569
+ ...rest
570
+ },
571
+ options ? options.map((opt) => /* @__PURE__ */ import_react10.default.createElement("option", { key: opt.value, value: opt.value }, opt.label)) : children
572
+ );
573
+ }
574
+ );
575
+ Select.displayName = "Select";
576
+
577
+ // src/components/Checkbox.tsx
578
+ var import_react11 = __toESM(require("react"));
579
+ function cx11(...classes) {
580
+ return classes.filter(Boolean).join(" ");
581
+ }
582
+ var Checkbox = import_react11.default.forwardRef(
583
+ ({ className, label, id, ...rest }, ref) => {
584
+ const inputId = id || rest.name || Math.random().toString(36).substr(2, 9);
585
+ return /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react11.default.createElement(
586
+ "input",
587
+ {
588
+ type: "checkbox",
589
+ id: inputId,
590
+ ref,
591
+ className: cx11("checkbox", className),
592
+ ...rest
593
+ }
594
+ ), label && /* @__PURE__ */ import_react11.default.createElement("label", { htmlFor: inputId, className: "ml-2 text-sm text-silver cursor-pointer select-none" }, label));
595
+ }
596
+ );
597
+ Checkbox.displayName = "Checkbox";
598
+
599
+ // src/components/Radio.tsx
600
+ var import_react12 = __toESM(require("react"));
601
+ function cx12(...classes) {
602
+ return classes.filter(Boolean).join(" ");
603
+ }
604
+ var Radio = import_react12.default.forwardRef(
605
+ ({ className, label, id, ...rest }, ref) => {
606
+ const inputId = id || rest.name || Math.random().toString(36).substr(2, 9);
607
+ return /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react12.default.createElement(
608
+ "input",
609
+ {
610
+ type: "radio",
611
+ id: inputId,
612
+ ref,
613
+ className: cx12("radio", className),
614
+ ...rest
615
+ }
616
+ ), label && /* @__PURE__ */ import_react12.default.createElement("label", { htmlFor: inputId, className: "ml-2 text-sm text-silver cursor-pointer select-none" }, label));
617
+ }
618
+ );
619
+ Radio.displayName = "Radio";
620
+
621
+ // src/components/Switch.tsx
622
+ var import_react13 = __toESM(require("react"));
623
+ function cx13(...classes) {
624
+ return classes.filter(Boolean).join(" ");
625
+ }
626
+ var Switch = import_react13.default.forwardRef(
627
+ ({ checked: controlledChecked, defaultChecked = false, onCheckedChange, disabled, className, label, ...rest }, ref) => {
628
+ const [internalChecked, setInternalChecked] = (0, import_react13.useState)(defaultChecked);
629
+ const isControlled = controlledChecked !== void 0;
630
+ const checked = isControlled ? controlledChecked : internalChecked;
631
+ const handleClick = (e) => {
632
+ if (disabled) return;
633
+ const newChecked = !checked;
634
+ if (!isControlled) {
635
+ setInternalChecked(newChecked);
636
+ }
637
+ onCheckedChange?.(newChecked);
638
+ rest.onClick?.(e);
639
+ };
640
+ return /* @__PURE__ */ import_react13.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react13.default.createElement(
641
+ "button",
642
+ {
643
+ type: "button",
644
+ role: "switch",
645
+ "aria-checked": checked,
646
+ "data-state": checked ? "checked" : "unchecked",
647
+ disabled,
648
+ ref,
649
+ onClick: handleClick,
650
+ className: cx13("switch", className),
651
+ ...rest
652
+ },
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));
655
+ }
656
+ );
657
+ Switch.displayName = "Switch";
658
+
659
+ // src/components/Alert.tsx
660
+ var import_react14 = __toESM(require("react"));
661
+ var import_lucide_react = require("lucide-react");
662
+ function cx14(...classes) {
663
+ return classes.filter(Boolean).join(" ");
664
+ }
665
+ var icons = {
666
+ info: import_lucide_react.Info,
667
+ success: import_lucide_react.CheckCircle,
668
+ warning: import_lucide_react.AlertTriangle,
669
+ error: import_lucide_react.XCircle
670
+ };
671
+ var Alert = import_react14.default.forwardRef(
672
+ ({ variant = "info", title, children, className, ...rest }, ref) => {
673
+ const Icon = icons[variant];
674
+ const variantClass = `alert-${variant}`;
675
+ return /* @__PURE__ */ import_react14.default.createElement(
676
+ "div",
677
+ {
678
+ ref,
679
+ role: "alert",
680
+ className: cx14("alert", variantClass, "flex gap-3", className),
681
+ ...rest
682
+ },
683
+ /* @__PURE__ */ import_react14.default.createElement(Icon, { className: "h-5 w-5 shrink-0" }),
684
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex-1" }, title && /* @__PURE__ */ import_react14.default.createElement("h5", { className: "mb-1 font-medium leading-none tracking-tight text-current" }, title), /* @__PURE__ */ import_react14.default.createElement("div", { className: "text-sm opacity-90" }, children))
685
+ );
686
+ }
687
+ );
688
+ Alert.displayName = "Alert";
689
+
690
+ // src/components/Spinner.tsx
691
+ var import_react15 = __toESM(require("react"));
692
+ function cx15(...classes) {
693
+ return classes.filter(Boolean).join(" ");
694
+ }
695
+ var Spinner = ({ className, size = "md", ...rest }) => {
696
+ const sizeClass = size === "sm" ? "h-4 w-4" : size === "lg" ? "h-8 w-8" : "h-6 w-6";
697
+ return /* @__PURE__ */ import_react15.default.createElement(
698
+ "svg",
699
+ {
700
+ xmlns: "http://www.w3.org/2000/svg",
701
+ viewBox: "0 0 24 24",
702
+ fill: "none",
703
+ stroke: "currentColor",
704
+ strokeWidth: "2",
705
+ strokeLinecap: "round",
706
+ strokeLinejoin: "round",
707
+ className: cx15("animate-spin text-gold", sizeClass, className),
708
+ ...rest
709
+ },
710
+ /* @__PURE__ */ import_react15.default.createElement("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" })
711
+ );
712
+ };
713
+ Spinner.displayName = "Spinner";
714
+
715
+ // src/components/Skeleton.tsx
716
+ var import_react16 = __toESM(require("react"));
717
+ function cx16(...classes) {
718
+ return classes.filter(Boolean).join(" ");
719
+ }
720
+ var Skeleton = import_react16.default.forwardRef(
721
+ ({ className, ...rest }, ref) => {
722
+ return /* @__PURE__ */ import_react16.default.createElement(
723
+ "div",
724
+ {
725
+ ref,
726
+ className: cx16("animate-pulse bg-ash rounded-sm", className),
727
+ ...rest
728
+ }
729
+ );
730
+ }
731
+ );
732
+ Skeleton.displayName = "Skeleton";
733
+
734
+ // src/components/Modal.tsx
735
+ var import_react17 = __toESM(require("react"));
736
+ var import_react_dom = require("react-dom");
737
+ var import_lucide_react2 = require("lucide-react");
738
+ function cx17(...classes) {
739
+ return classes.filter(Boolean).join(" ");
740
+ }
741
+ var Modal = ({ isOpen, onClose, title, children, className }) => {
742
+ const [mounted, setMounted] = (0, import_react17.useState)(false);
743
+ (0, import_react17.useEffect)(() => {
744
+ setMounted(true);
745
+ }, []);
746
+ (0, import_react17.useEffect)(() => {
747
+ if (isOpen) {
748
+ const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;
749
+ document.body.style.overflow = "hidden";
750
+ document.body.style.paddingRight = `${scrollbarWidth}px`;
751
+ } else {
752
+ document.body.style.overflow = "unset";
753
+ document.body.style.paddingRight = "0px";
754
+ }
755
+ return () => {
756
+ document.body.style.overflow = "unset";
757
+ document.body.style.paddingRight = "0px";
758
+ };
759
+ }, [isOpen]);
760
+ (0, import_react17.useEffect)(() => {
761
+ const handleEsc = (e) => {
762
+ if (e.key === "Escape") onClose();
763
+ };
764
+ window.addEventListener("keydown", handleEsc);
765
+ return () => window.removeEventListener("keydown", handleEsc);
766
+ }, [onClose]);
767
+ if (!mounted) return null;
768
+ 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(
770
+ "div",
771
+ {
772
+ role: "dialog",
773
+ "aria-modal": "true",
774
+ className: cx17("modal-content relative", className),
775
+ "data-state": "open",
776
+ onClick: (e) => e.stopPropagation()
777
+ },
778
+ /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex items-center justify-between mb-2" }, title ? /* @__PURE__ */ import_react17.default.createElement("h3", { className: "text-xl font-semibold text-white m-0" }, title) : /* @__PURE__ */ import_react17.default.createElement("div", null), /* @__PURE__ */ import_react17.default.createElement("button", { onClick: onClose, className: "text-silver hover:text-white transition-colors ml-auto" }, /* @__PURE__ */ import_react17.default.createElement(import_lucide_react2.X, { className: "h-5 w-5" }), /* @__PURE__ */ import_react17.default.createElement("span", { className: "sr-only" }, "Close"))),
779
+ /* @__PURE__ */ import_react17.default.createElement("div", null, children)
780
+ ));
781
+ return (0, import_react_dom.createPortal)(content, document.body);
782
+ };
783
+ Modal.displayName = "Modal";
784
+
785
+ // src/index.ts
786
+ var version = "1.0.0";
787
+ // Annotate the CommonJS export names for ESM import in node:
788
+ 0 && (module.exports = {
789
+ Alert,
790
+ Avatar,
791
+ Badge,
792
+ Button,
793
+ Card,
794
+ Checkbox,
795
+ HelperText,
796
+ Input,
797
+ Label,
798
+ Modal,
799
+ Radio,
800
+ Select,
801
+ Skeleton,
802
+ Spinner,
803
+ Switch,
804
+ Textarea,
805
+ Tooltip,
806
+ colors,
807
+ duration,
808
+ easing,
809
+ radii,
810
+ shadows,
811
+ spacing,
812
+ tailwindPreset,
813
+ typography,
814
+ version
815
+ });
816
+ //# sourceMappingURL=index.js.map