@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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 lukeashford
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,93 +1,146 @@
1
- # Aurelius Design System
1
+ # Aurelius
2
2
 
3
- **A cohesive visual language for creative technologists — combining technical sophistication with an
4
- artistic sensibility.**
3
+ [![npm version](https://img.shields.io/npm/v/@lukeashford/aurelius.svg)](https://www.npmjs.com/package/@lukeashford/aurelius)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
5
 
6
- [View the Live Demo](https://aurelius.lukeashford.com/)
6
+ **A dark-mode design system for creative technologists** — combining technical sophistication with a
7
+ cinematic aesthetic.
8
+
9
+ [Live Demo](https://aurelius.lukeashford.com/)
7
10
 
8
11
  ---
9
12
 
10
- ## The Philosophy
13
+ ## Philosophy
11
14
 
12
- Aurelius blends technical precision with a cinematic aesthetic, relying on deep blacks, rich golds,
13
- and refined typography to convey stability, trust, and quiet luxury.
15
+ Aurelius relies on deep blacks, rich golds, and refined typography to convey stability, trust, and
16
+ quiet luxury.
14
17
 
15
- **Core Principles:**
18
+ **Core principles:**
16
19
 
17
- 1. **Cinematic:** Strict dark mode. No white backgrounds.
18
- 2. **Refined:** Gold (#c9a227) is reserved for primary actions.
19
- 3. **Grounded:** 1px subtle borders (`border-ash`) replace heavy drop shadows.
20
+ - **Cinematic:** Strictly dark mode. No white backgrounds.
21
+ - **Refined:** Gold (`#c9a227`) is reserved for primary actions and key highlights.
22
+ - **Grounded:** Subtle 1px borders over heavy drop shadows.
20
23
 
21
- **Implementation Strategy:**
22
- We follow a strict hierarchy:
24
+ **Usage hierarchy:**
23
25
 
24
- 1. **React Components** (`<Button />`) *Always prefer these.*
25
- 2. **Component Classes** (`.btn`) *Fallback for non-React.*
26
- 3. **Utility Classes** (`bg-obsidian`) — *For custom layouts.*
27
- 4. **Design Tokens** — *Last resort.*
26
+ 1. **React Components** — Use `<Button />`, `<Card />`, etc. whenever possible
27
+ 2. **Tailwind utilities** — Build custom layouts with token-based classes (`bg-obsidian`,
28
+ `text-gold`)
29
+ 3. **Design tokens** — Direct access to values as a last resort
28
30
 
29
31
  ---
30
32
 
31
- ## AI Agent Support 🤖
33
+ ## AI Agent Optimization 🤖
34
+
35
+ This package includes a machine-readable manifest and ESLint enforcement for AI coding assistants.
36
+
37
+ **Prompt your agent:**
38
+
39
+ > Use the Aurelius design system for this project.
40
+ >
41
+ > 1. Run `npm install @lukeashford/aurelius`
42
+ > 2. Read `node_modules/@lukeashford/aurelius/llms.md` completely before writing any code
43
+ > 3. Follow its setup instructions (Tailwind config, ESLint, fonts)
44
+ > 4. Use only the components and Tailwind classes listed in that file
32
45
 
33
- This package is **AI-Optimized**. It includes a machine-readable manifest file that helps AI coding
34
- assistants understand the design system without hallucinating styles.
46
+ The manifest provides complete setup instructions, so agents can bootstrap a project from scratch
47
+ while staying within design system constraints.
35
48
 
36
- **How to Prompt Your Agent:**
37
- > "I have installed `@lukeashford/aurelius`. Before writing any code, read
38
- `node_modules/@lukeashford/aurelius/dist/llms.md`. This file contains the Design Philosophy (
39
- > which you must strictly follow) and the Component API you have available."
49
+ [View the manifest](./llms.md)
40
50
 
41
51
  ---
42
52
 
43
- ## Installation
53
+ ## Quick Start
44
54
 
45
- ### 1. Install Package
55
+ ### 1. Install
46
56
 
47
57
  ```bash
48
58
  npm install @lukeashford/aurelius
59
+ npm install -D eslint eslint-plugin-tailwindcss
60
+ ```
61
+
62
+ ### 2. Import the design system
63
+
64
+ Create or update your `index.css`:
65
+
66
+ ```css
67
+ /* Import the complete Aurelius design system (includes Tailwind v4, fonts, and theme) */
68
+ @import '@lukeashford/aurelius/styles/base.css';
69
+
70
+ /* Tell Tailwind to scan the Aurelius package for utility classes */
71
+ @source "../node_modules/@lukeashford/aurelius/dist";
49
72
  ```
50
73
 
51
- ### 2. Configure Tailwind
74
+ Then import it in your entry file:
75
+
76
+ ```typescript
77
+ // main.tsx or index.tsx
78
+ import './index.css'
79
+ ```
80
+
81
+ ### 3. Configure ESLint
82
+
83
+ This enforces the design system — agents and developers get errors when using arbitrary values or
84
+ non-Aurelius classes.
52
85
 
53
86
  ```javascript
54
- // tailwind.config.js
55
- const aureliusPreset = require('@lukeashford/aurelius/tailwind.preset')
87
+ // eslint.config.js
88
+ import tailwindcss from 'eslint-plugin-tailwindcss';
89
+
90
+ export default [
91
+ {
92
+ plugins: {tailwindcss},
93
+ rules: {
94
+ 'tailwindcss/no-arbitrary-value': 'error',
95
+ 'tailwindcss/no-custom-classname': 'error',
96
+ },
97
+ },
98
+ ];
99
+ ```
100
+
101
+ <details>
102
+ <summary>Legacy .eslintrc.js format</summary>
56
103
 
104
+ ```javascript
57
105
  module.exports = {
58
- presets: [aureliusPreset],
59
- content: [
60
- './src/**/*.{js,ts,jsx,tsx}',
61
- './node_modules/@lukeashford/aurelius/**/*.{js,mjs,ts}',
62
- ],
106
+ plugins: ['tailwindcss'],
107
+ rules: {
108
+ 'tailwindcss/no-arbitrary-value': 'error',
109
+ 'tailwindcss/no-custom-classname': 'error',
110
+ },
63
111
  }
64
112
  ```
65
113
 
66
- ### 3. Import Styles
114
+ </details>
67
115
 
68
- ```css
69
- /* In your global CSS */
70
- @import '@lukeashford/aurelius/styles/base.css';
71
- ```
116
+ ### 4. Update package.json scripts
72
117
 
73
- ---
118
+ ```json
119
+ {
120
+ "scripts": {
121
+ "lint": "eslint src --max-warnings 0",
122
+ "dev": "npm run lint && vite",
123
+ "build": "npm run lint && vite build"
124
+ }
125
+ }
126
+ ```
74
127
 
75
- ## Quick Start
128
+ ### 5. Use components
76
129
 
77
130
  ```tsx
78
131
  import {Button, Card, Input} from '@lukeashford/aurelius'
79
132
 
80
- export function LoginForm() {
133
+ function LoginForm() {
81
134
  return (
82
135
  <Card variant="featured" className="p-8 max-w-sm mx-auto">
83
136
  <h2 className="text-gold text-2xl mb-6">Sign In</h2>
84
- <div className="space-y-4">
85
- <Input placeholder="email@example.com"/>
86
- <Button variant="primary" className="w-full">
87
- Enter the System
88
- </Button>
89
- </div>
137
+ <Input placeholder="email@example.com"/>
138
+ <Button variant="primary" className="w-full mt-4">
139
+ Enter
140
+ </Button>
90
141
  </Card>
91
142
  )
92
143
  }
93
144
  ```
145
+
146
+ ---
package/dist/index.d.mts CHANGED
@@ -1,7 +1,4 @@
1
- export { default as tailwindPreset } from './tailwind.preset.mjs';
2
- export { ColorToken, DurationToken, EasingToken, RadiusToken, ShadowToken, SpacingToken, TypographyToken, colors, duration, easing, radii, shadows, spacing, typography } from './tokens/index.mjs';
3
1
  import React from 'react';
4
- import 'tailwindcss';
5
2
 
6
3
  type ButtonVariant = 'primary' | 'important' | 'elevated' | 'outlined' | 'featured' | 'ghost' | 'danger';
7
4
  type ButtonSize = 'sm' | 'md' | 'lg' | 'xl';
@@ -27,12 +24,13 @@ interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
27
24
  declare const Card: React.ForwardRefExoticComponent<CardProps & React.RefAttributes<HTMLDivElement>>;
28
25
 
29
26
  type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
27
+ type AvatarStatus = 'online' | 'offline' | 'busy';
30
28
  interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {
31
29
  src?: string;
32
30
  alt?: string;
33
31
  name?: string;
34
32
  size?: AvatarSize;
35
- status?: 'online' | 'offline' | 'busy';
33
+ status?: AvatarStatus;
36
34
  }
37
35
  declare const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLDivElement>>;
38
36
 
@@ -42,11 +40,12 @@ interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
42
40
  }
43
41
  declare const Badge: React.ForwardRefExoticComponent<BadgeProps & React.RefAttributes<HTMLSpanElement>>;
44
42
 
43
+ type TooltipSide = 'top' | 'right' | 'bottom' | 'left';
45
44
  interface TooltipProps {
46
45
  content: React.ReactNode;
47
46
  children: React.ReactElement;
48
47
  open?: boolean;
49
- side?: 'top' | 'right' | 'bottom' | 'left';
48
+ side?: TooltipSide;
50
49
  }
51
50
  declare const Tooltip: React.FC<TooltipProps>;
52
51
 
@@ -100,8 +99,9 @@ interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
100
99
  }
101
100
  declare const Alert: React.ForwardRefExoticComponent<AlertProps & React.RefAttributes<HTMLDivElement>>;
102
101
 
102
+ type SpinnerSize = 'sm' | 'md' | 'lg';
103
103
  interface SpinnerProps extends React.SVGAttributes<SVGElement> {
104
- size?: 'sm' | 'md' | 'lg';
104
+ size?: SpinnerSize;
105
105
  }
106
106
  declare const Spinner: {
107
107
  ({ className, size, ...rest }: SpinnerProps): React.JSX.Element;
@@ -129,8 +129,11 @@ declare const Modal: {
129
129
  *
130
130
  * A cohesive visual language for creative technologists.
131
131
  * Combines technical sophistication with artistic sensibility.
132
+ *
133
+ * CSS-first Tailwind v4 design system.
134
+ * Import '@lukeashford/aurelius/styles/base.css' for complete styling.
132
135
  */
133
136
 
134
- declare const version = "1.0.0";
137
+ declare const version = "2.0.0";
135
138
 
136
139
  export { Alert, type AlertProps, type AlertVariant, Avatar, type AvatarProps, type AvatarSize, Badge, type BadgeProps, type BadgeVariant, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Card, type CardProps, type CardVariant, Checkbox, type CheckboxProps, HelperText, type HelperTextProps, Input, type InputProps, Label, type LabelProps, Modal, type ModalProps, Radio, type RadioProps, Select, type SelectOption, type SelectProps, Skeleton, type SkeletonProps, Spinner, type SpinnerProps, Switch, type SwitchProps, Textarea, type TextareaProps, Tooltip, type TooltipProps, version };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,4 @@
1
- export { default as tailwindPreset } from './tailwind.preset.js';
2
- export { ColorToken, DurationToken, EasingToken, RadiusToken, ShadowToken, SpacingToken, TypographyToken, colors, duration, easing, radii, shadows, spacing, typography } from './tokens/index.js';
3
1
  import React from 'react';
4
- import 'tailwindcss';
5
2
 
6
3
  type ButtonVariant = 'primary' | 'important' | 'elevated' | 'outlined' | 'featured' | 'ghost' | 'danger';
7
4
  type ButtonSize = 'sm' | 'md' | 'lg' | 'xl';
@@ -27,12 +24,13 @@ interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
27
24
  declare const Card: React.ForwardRefExoticComponent<CardProps & React.RefAttributes<HTMLDivElement>>;
28
25
 
29
26
  type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
27
+ type AvatarStatus = 'online' | 'offline' | 'busy';
30
28
  interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {
31
29
  src?: string;
32
30
  alt?: string;
33
31
  name?: string;
34
32
  size?: AvatarSize;
35
- status?: 'online' | 'offline' | 'busy';
33
+ status?: AvatarStatus;
36
34
  }
37
35
  declare const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLDivElement>>;
38
36
 
@@ -42,11 +40,12 @@ interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
42
40
  }
43
41
  declare const Badge: React.ForwardRefExoticComponent<BadgeProps & React.RefAttributes<HTMLSpanElement>>;
44
42
 
43
+ type TooltipSide = 'top' | 'right' | 'bottom' | 'left';
45
44
  interface TooltipProps {
46
45
  content: React.ReactNode;
47
46
  children: React.ReactElement;
48
47
  open?: boolean;
49
- side?: 'top' | 'right' | 'bottom' | 'left';
48
+ side?: TooltipSide;
50
49
  }
51
50
  declare const Tooltip: React.FC<TooltipProps>;
52
51
 
@@ -100,8 +99,9 @@ interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
100
99
  }
101
100
  declare const Alert: React.ForwardRefExoticComponent<AlertProps & React.RefAttributes<HTMLDivElement>>;
102
101
 
102
+ type SpinnerSize = 'sm' | 'md' | 'lg';
103
103
  interface SpinnerProps extends React.SVGAttributes<SVGElement> {
104
- size?: 'sm' | 'md' | 'lg';
104
+ size?: SpinnerSize;
105
105
  }
106
106
  declare const Spinner: {
107
107
  ({ className, size, ...rest }: SpinnerProps): React.JSX.Element;
@@ -129,8 +129,11 @@ declare const Modal: {
129
129
  *
130
130
  * A cohesive visual language for creative technologists.
131
131
  * Combines technical sophistication with artistic sensibility.
132
+ *
133
+ * CSS-first Tailwind v4 design system.
134
+ * Import '@lukeashford/aurelius/styles/base.css' for complete styling.
132
135
  */
133
136
 
134
- declare const version = "1.0.0";
137
+ declare const version = "2.0.0";
135
138
 
136
139
  export { Alert, type AlertProps, type AlertVariant, Avatar, type AvatarProps, type AvatarSize, Badge, type BadgeProps, type BadgeVariant, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Card, type CardProps, type CardVariant, Checkbox, type CheckboxProps, HelperText, type HelperTextProps, Input, type InputProps, Label, type LabelProps, Modal, type ModalProps, Radio, type RadioProps, Select, type SelectOption, type SelectProps, Skeleton, type SkeletonProps, Spinner, type SpinnerProps, Switch, type SwitchProps, Textarea, type TextareaProps, Tooltip, type TooltipProps, version };