@lukeashford/aurelius 2.2.0 → 2.3.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.
@@ -13,13 +13,18 @@
13
13
  --color-slate: #2a2a2a;
14
14
  --color-ash: #3d3d3d;
15
15
 
16
- /* Gold spectrum */
16
+ /* Core RGB helpers (reduce repeated rgba() literals) */
17
+ --ink-rgb: 0 0 0;
18
+ --gold-rgb: 201 162 39;
19
+ --glass-rgb: 20 20 20;
20
+
21
+ /* Gold spectrum (derived from one base where possible) */
17
22
  --color-gold: #c9a227;
18
- --color-gold-light: #d4b84a;
19
- --color-gold-bright: #e5c84d;
20
- --color-gold-muted: #8b7355;
21
- --color-gold-pale: #d4c4a8;
22
- --color-gold-glow: rgba(201, 162, 39, 0.15);
23
+ --color-gold-light: color-mix(in oklab, var(--color-gold) 75%, white);
24
+ --color-gold-bright: color-mix(in oklab, var(--color-gold) 60%, white);
25
+ --color-gold-muted: color-mix(in oklab, var(--color-gold) 55%, #6b5a44);
26
+ --color-gold-pale: color-mix(in oklab, var(--color-gold) 25%, white);
27
+ --color-gold-glow: rgb(var(--gold-rgb) / 0.15);
23
28
 
24
29
  /* Neutrals */
25
30
  --color-white: #ffffff;
@@ -126,19 +131,31 @@
126
131
  --radius-full: 9999px;
127
132
 
128
133
  /* ===== SHADOWS ===== */
129
- --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.4);
130
- --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -2px rgba(0, 0, 0, 0.3);
131
- --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -4px rgba(0, 0, 0, 0.3);
132
- --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.4), 0 8px 10px -6px rgba(0, 0, 0, 0.3);
133
- --shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
134
- --shadow-glow: 0 0 20px rgba(201, 162, 39, 0.3);
135
- --shadow-glow-sm: 0 0 10px rgba(201, 162, 39, 0.2);
136
- --shadow-glow-md: 0 0 15px rgba(201, 162, 39, 0.3);
137
- --shadow-glow-lg: 0 0 40px rgba(201, 162, 39, 0.4);
138
- --shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, 0.3);
134
+ --shadow-sm: 0 1px 2px 0 rgb(var(--ink-rgb) / 0.4);
135
+ --shadow-md: 0 4px 6px -1px rgb(var(--ink-rgb) / 0.4),
136
+ 0 2px 4px -2px rgb(var(--ink-rgb) / 0.3);
137
+ --shadow-lg: 0 10px 15px -3px rgb(var(--ink-rgb) / 0.4),
138
+ 0 4px 6px -4px rgb(var(--ink-rgb) / 0.3);
139
+ --shadow-xl: 0 20px 25px -5px rgb(var(--ink-rgb) / 0.4),
140
+ 0 8px 10px -6px rgb(var(--ink-rgb) / 0.3);
141
+ --shadow-2xl: 0 25px 50px -12px rgb(var(--ink-rgb) / 0.5);
142
+
143
+ --shadow-glow: 0 0 20px rgb(var(--gold-rgb) / 0.3);
144
+ --shadow-glow-sm: 0 0 10px rgb(var(--gold-rgb) / 0.2);
145
+ --shadow-glow-md: 0 0 15px rgb(var(--gold-rgb) / 0.3);
146
+ --shadow-glow-lg: 0 0 40px rgb(var(--gold-rgb) / 0.4);
147
+
148
+ --shadow-inner: inset 0 2px 4px 0 rgb(var(--ink-rgb) / 0.3);
139
149
 
140
150
  /* ===== TRANSITIONS ===== */
141
- /* Durations */
151
+ /* Durations - use --transition-duration-* for Tailwind v4 duration-* utilities */
152
+ --transition-duration-instant: 75ms;
153
+ --transition-duration-fast: 150ms;
154
+ --transition-duration-normal: 200ms;
155
+ --transition-duration-slow: 300ms;
156
+ --transition-duration-slower: 500ms;
157
+
158
+ /* Legacy duration aliases for CSS usage */
142
159
  --duration-instant: 75ms;
143
160
  --duration-fast: 150ms;
144
161
  --duration-normal: 200ms;
@@ -149,6 +166,9 @@
149
166
  --ease-smooth: cubic-bezier(0.16, 1, 0.3, 1);
150
167
  --ease-snap: cubic-bezier(0.5, 0, 0.1, 1);
151
168
 
169
+ /* ===== ASPECT RATIOS ===== */
170
+ --aspect-ratio-wide: 21 / 9;
171
+
152
172
  /* ===== ANIMATIONS ===== */
153
173
  --animate-fade-in: fade-in 200ms ease-out;
154
174
  --animate-fade-out: fade-out 150ms ease-in;
@@ -156,6 +176,13 @@
156
176
  --animate-slide-out-right: slide-out-right 200ms ease-in;
157
177
  --animate-pulse-glow: pulse-glow 2s ease-in-out infinite;
158
178
  --animate-cursor-blink: cursor-blink 1s steps(1) infinite;
179
+
180
+ /* ===== LAYOUT TOKENS ===== */
181
+ --container-sm: 640px;
182
+ --container-md: 768px;
183
+ --container-lg: 1024px;
184
+ --container-xl: 1280px;
185
+ --container-2xl: 1536px;
159
186
  }
160
187
 
161
188
  @keyframes fade-in {
@@ -199,19 +226,22 @@
199
226
  }
200
227
 
201
228
  @keyframes pulse-glow {
202
- 0%, 100% {
203
- box-shadow: 0 0 20px rgba(201, 162, 39, 0.3);
229
+ 0%,
230
+ 100% {
231
+ box-shadow: 0 0 20px rgb(var(--gold-rgb) / 0.3);
204
232
  }
205
233
  50% {
206
- box-shadow: 0 0 30px rgba(201, 162, 39, 0.5);
234
+ box-shadow: 0 0 30px rgb(var(--gold-rgb) / 0.5);
207
235
  }
208
236
  }
209
237
 
210
238
  @keyframes cursor-blink {
211
- 0%, 50% {
239
+ 0%,
240
+ 50% {
212
241
  opacity: 1;
213
242
  }
214
- 51%, 100% {
243
+ 51%,
244
+ 100% {
215
245
  opacity: 0;
216
246
  }
217
247
  }
@@ -237,11 +267,14 @@
237
267
  width: 100%;
238
268
  }
239
269
 
240
- table, th, td {
270
+ table,
271
+ th,
272
+ td {
241
273
  border: 1px solid var(--color-gold-muted);
242
274
  }
243
275
 
244
- th, td {
276
+ th,
277
+ td {
245
278
  padding: 0.5rem 0.75rem;
246
279
  }
247
280
 
@@ -273,14 +306,20 @@
273
306
  }
274
307
 
275
308
  /* Headings */
276
- h1, h2, h3, h4, h5, h6 {
309
+ h1,
310
+ h2,
311
+ h3,
312
+ h4,
313
+ h5,
314
+ h6 {
277
315
  font-family: var(--font-heading);
278
316
  font-weight: 600;
279
317
  letter-spacing: -0.025em;
280
318
  color: var(--color-white);
281
319
  }
282
320
 
283
- h1, h2 {
321
+ h1,
322
+ h2 {
284
323
  color: var(--color-gold);
285
324
  }
286
325
 
@@ -315,7 +354,10 @@
315
354
  }
316
355
 
317
356
  /* Code */
318
- code, pre, kbd, samp {
357
+ code,
358
+ pre,
359
+ kbd,
360
+ samp {
319
361
  font-family: var(--font-mono);
320
362
  font-size: 0.875em;
321
363
  }
@@ -365,7 +407,12 @@
365
407
 
366
408
  /* ===== UTILITY CLASSES ===== */
367
409
  @utility text-gradient-gold {
368
- background: linear-gradient(to right, var(--color-gold), var(--color-gold-light), var(--color-gold));
410
+ background: linear-gradient(
411
+ to right,
412
+ var(--color-gold),
413
+ var(--color-gold-light),
414
+ var(--color-gold)
415
+ );
369
416
  -webkit-background-clip: text;
370
417
  background-clip: text;
371
418
  color: transparent;
@@ -402,12 +449,12 @@
402
449
 
403
450
  @utility backdrop-glass {
404
451
  backdrop-filter: blur(12px);
405
- background-color: rgba(20, 20, 20, 0.8);
452
+ background-color: rgb(var(--glass-rgb) / 0.8);
406
453
  }
407
454
 
408
455
  @utility focus-ring {
409
456
  &:focus-visible {
410
- outline: 2px solid #c9a227;
457
+ outline: 2px solid var(--color-gold);
411
458
  outline-offset: 2px;
412
459
  }
413
460
  }
@@ -432,3 +479,78 @@
432
479
  left: 50%;
433
480
  transform: translate(-50%, -50%);
434
481
  }
482
+
483
+ @utility aspect-wide {
484
+ aspect-ratio: var(--aspect-ratio-wide);
485
+ }
486
+
487
+ /* ===== LAYOUT COMPONENTS ===== */
488
+ /* Container - Responsive max-width wrapper with horizontal padding */
489
+ @utility container {
490
+ width: 100%;
491
+ margin-inline: auto;
492
+ padding-inline: var(--spacing-4);
493
+
494
+ @media (min-width: 640px) {
495
+ max-width: var(--container-sm);
496
+ }
497
+
498
+ @media (min-width: 768px) {
499
+ max-width: var(--container-md);
500
+ }
501
+
502
+ @media (min-width: 1024px) {
503
+ max-width: var(--container-lg);
504
+ }
505
+
506
+ @media (min-width: 1280px) {
507
+ max-width: var(--container-xl);
508
+ }
509
+
510
+ @media (min-width: 1536px) {
511
+ max-width: var(--container-2xl);
512
+ }
513
+ }
514
+
515
+ /* Container size variants */
516
+ @utility container-sm {
517
+ width: 100%;
518
+ max-width: var(--container-sm);
519
+ margin-inline: auto;
520
+ padding-inline: var(--spacing-4);
521
+ }
522
+
523
+ @utility container-md {
524
+ width: 100%;
525
+ max-width: var(--container-md);
526
+ margin-inline: auto;
527
+ padding-inline: var(--spacing-4);
528
+ }
529
+
530
+ @utility container-lg {
531
+ width: 100%;
532
+ max-width: var(--container-lg);
533
+ margin-inline: auto;
534
+ padding-inline: var(--spacing-4);
535
+ }
536
+
537
+ @utility container-xl {
538
+ width: 100%;
539
+ max-width: var(--container-xl);
540
+ margin-inline: auto;
541
+ padding-inline: var(--spacing-4);
542
+ }
543
+
544
+ @utility container-fluid {
545
+ width: 100%;
546
+ padding-inline: var(--spacing-4);
547
+ }
548
+
549
+ /* Row - CSS Grid-based 12-column layout
550
+ * Uses CSS Grid instead of flexbox for cleaner, modern layout.
551
+ * Children use Tailwind's col-span-* utilities (e.g., col-span-6, md:col-span-4).
552
+ */
553
+ @utility row {
554
+ display: grid;
555
+ grid-template-columns: repeat(12, minmax(0, 1fr));
556
+ }
package/llms.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  ```bash
8
8
  npm install @lukeashford/aurelius
9
- npm install -D eslint @typescript-eslint/parser eslint-plugin-better-tailwindcss @poupe/eslint-plugin-tailwindcss @eslint/css tailwind-csstree
9
+ npm install -D tailwindcss postcss @tailwindcss/postcss eslint @typescript-eslint/parser eslint-plugin-better-tailwindcss @poupe/eslint-plugin-tailwindcss @eslint/css tailwind-csstree
10
10
  ```
11
11
 
12
12
  ### 2. Import the design system
@@ -57,31 +57,51 @@ Import from `@lukeashford/aurelius`:
57
57
 
58
58
  | Component | Props |
59
59
  |-----------|-------|
60
+ | Accordion | defaultValue, value |
60
61
  | Alert | variant (info, success, warning, error), title |
61
62
  | Avatar | src, alt, name, size (xs, sm, md, lg, xl, 2xl), status (online, offline, busy) |
62
63
  | Badge | variant (default, gold, success, error, warning, info) |
63
64
  | BrandIcon | size (sm, md, lg), variant (solid, outline) |
65
+ | Breadcrumb | separator |
64
66
  | Button | variant (primary, important, elevated, outlined, featured, ghost, danger), size (sm, md, lg, xl), loading |
65
- | Card | variant (default, elevated, outlined, ghost, featured), interactive, selected |
67
+ | Card | variant (default, elevated, outlined, ghost, featured), interactive, selected, noPadding |
66
68
  | ChatHistory | messages |
67
69
  | Checkbox | label |
70
+ | Col | children |
68
71
  | ColorSwatch | color, label |
72
+ | Container | size (sm, md, lg, xl, fluid, responsive) |
73
+ | Dialog | description, confirmText, cancelText, isLoading |
74
+ | Divider | orientation (horizontal, vertical), variant (solid, dashed, dotted), label |
75
+ | Drawer | isOpen, position (left, right, top, bottom), title, children, className |
69
76
  | HelperText | error |
70
77
  | ImageCard | src, alt, title, subtitle, aspectRatio (${number}/${number}), overlay, mediaClassName, contentClassName |
71
78
  | Input | error, leadingIcon, trailingIcon |
79
+ | InputGroup | children |
72
80
  | Label | required |
81
+ | List | ordered |
73
82
  | MarkdownContent | content, sanitizeConfig |
83
+ | Menu | children, open |
74
84
  | Message | variant (user, assistant), content, isStreaming |
75
85
  | Modal | isOpen, title, children, className |
86
+ | Navbar | fixed, bordered |
87
+ | Pagination | page, totalPages, siblingCount, showEdges |
88
+ | Popover | children, trigger, position (top, bottom, left, right), align (start, center, end), open, closeOnClickOutside |
89
+ | Progress | value, max, size (sm, md, lg), variant (default, success, warning, error), showValue, indeterminate |
76
90
  | Radio | label |
91
+ | Row | gutter, gutterX, gutterY, justify (start, center, end, between, around, evenly), align (start, center, end, stretch, baseline) |
77
92
  | SectionHeading | level (h2, h3) |
78
93
  | Select | error, options |
79
94
  | Skeleton | children |
95
+ | Slider | value, defaultValue, min, max, step, disabled, showTooltip |
80
96
  | Spinner | size (sm, md, lg) |
97
+ | Stack | direction (horizontal, vertical), align (start, center, end, stretch, baseline), justify (start, center, end, between, around, evenly), gap, wrap |
81
98
  | Stepper | steps, currentStep, status (complete, error) |
82
99
  | StreamingCursor | children |
83
100
  | Switch | checked, defaultChecked, label |
101
+ | Table | responsive |
102
+ | Tabs | defaultValue, value |
84
103
  | Textarea | error |
104
+ | Toast | children, position (top-right, top-left, bottom-right, bottom-left, top-center, bottom-center), defaultDuration |
85
105
  | Tooltip | content, children, open, side (top, right, bottom, left) |
86
106
 
87
107
  ### Component usage example
@@ -118,8 +138,15 @@ border-void, border-obsidian, border-charcoal, border-graphite, border-slate, bo
118
138
 
119
139
  Standard Tailwind classes for size (`text-sm`, `text-lg`, etc.), weight (`font-medium`, `font-bold`), and spacing are available.
120
140
 
141
+ ### Layout Classes
142
+ **Containers:** `container`, `container-sm`, `container-md`, `container-lg`, `container-xl`, `container-fluid`
143
+
144
+ **Grid:** `row` (creates 12-column CSS Grid)
145
+
146
+ **Columns (Tailwind built-in):** `col-span-{1-12}`, `col-span-full`, `col-auto`, `sm:col-span-*`, `md:col-span-*`, `lg:col-span-*`, `xl:col-span-*`
147
+
121
148
  ### Custom Utilities
122
- text-gradient-gold, glow, glow-sm, glow-md, glow-lg, scroll-smooth, scrollbar-hide, backdrop-glass, focus-ring, line-clamp-2, line-clamp-3, center-absolute
149
+ text-gradient-gold, glow, glow-sm, glow-md, glow-lg, scroll-smooth, scrollbar-hide, backdrop-glass, focus-ring, line-clamp-2, line-clamp-3, center-absolute, aspect-wide, container, container-sm, container-md, container-lg, container-xl, container-fluid, row
123
150
 
124
151
  ### Opacity modifiers
125
152
  Append `/10`, `/20`, `/30`, etc. to colors: `bg-gold/20`, `border-ash/50`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lukeashford/aurelius",
3
- "version": "2.2.0",
3
+ "version": "2.3.0",
4
4
  "description": "Design system for Aurelius applications — A cohesive visual language for creative technologists",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -24,6 +24,9 @@
24
24
  "publishConfig": {
25
25
  "access": "public"
26
26
  },
27
+ "engines": {
28
+ "node": ">=22.14.0"
29
+ },
27
30
  "scripts": {
28
31
  "build": "npm run typecheck && npm run lint && tsup && node scripts/generate-manifest.js",
29
32
  "dev": "tsup --watch",
@@ -31,7 +34,8 @@
31
34
  "lint": "eslint src --max-warnings 0",
32
35
  "prepublishOnly": "npm run build",
33
36
  "dev:demo": "npm --prefix demo run dev",
34
- "dev:all": "concurrently -k \"npm run dev\" \"npm run dev:demo\""
37
+ "dev:all": "concurrently -k \"npm run dev\" \"npm run dev:demo\"",
38
+ "test": "npm run build && npm --prefix demo run test && npm --prefix demo run test:e2e"
35
39
  },
36
40
  "peerDependencies": {
37
41
  "@eslint/css": ">=0.9.0",
@@ -68,8 +72,13 @@
68
72
  }
69
73
  },
70
74
  "devDependencies": {
75
+ "@commitlint/cli": "*",
76
+ "@commitlint/config-conventional": "*",
71
77
  "@eslint/css": "^0.9.0",
72
78
  "@poupe/eslint-plugin-tailwindcss": "^0.2.4",
79
+ "@semantic-release/changelog": "*",
80
+ "@semantic-release/git": "*",
81
+ "@semantic-release/github": "*",
73
82
  "@testing-library/jest-dom": "^6.6.3",
74
83
  "@testing-library/react": "^16.1.0",
75
84
  "@testing-library/user-event": "^14.5.2",
@@ -81,20 +90,15 @@
81
90
  "@typescript-eslint/eslint-plugin": "^8.49.0",
82
91
  "@typescript-eslint/parser": "^8.49.0",
83
92
  "@vitejs/plugin-react": "^4.3.4",
84
- "@commitlint/cli": "*",
85
- "@commitlint/config-conventional": "*",
86
- "@semantic-release/changelog": "*",
87
- "@semantic-release/github": "*",
88
- "@semantic-release/git": "*",
89
93
  "concurrently": "^8.2.2",
90
94
  "conventional-changelog-conventionalcommits": "*",
91
95
  "eslint": "^9.0.0",
92
96
  "eslint-plugin-better-tailwindcss": "^4.0.0-beta",
93
97
  "jest": "^29.7.0",
94
98
  "jest-environment-jsdom": "^29.7.0",
95
- "semantic-release": "*",
96
99
  "react": "^19.2.1",
97
100
  "react-dom": "^19.2.1",
101
+ "semantic-release": "*",
98
102
  "tailwindcss": "^4.1.17",
99
103
  "ts-jest": "^29.2.5",
100
104
  "ts-node": "^10.9.2",