@enya-learning/nova 0.4.3 → 0.6.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/README.md +8 -19
- package/dist/chunks/dist-fahbq1psobj0ox6s.js +1327 -0
- package/dist/chunks/dist-fahbq1psobj0ox6s.js.map +1 -0
- package/dist/chunks/dist-o8x0ip0z71xkr2oh.js +37 -0
- package/dist/chunks/dist-o8x0ip0z71xkr2oh.js.map +1 -0
- package/dist/components/accordion.js +62 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/alert-dialog.js +108 -0
- package/dist/components/alert-dialog.js.map +1 -0
- package/dist/components/alert.js +49 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/aspect-ratio.js +16 -0
- package/dist/components/aspect-ratio.js.map +1 -0
- package/dist/components/avatar.js +58 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.js +33 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/box.js +16 -0
- package/dist/components/box.js.map +1 -0
- package/dist/components/breadcrumb.js +85 -0
- package/dist/components/breadcrumb.js.map +1 -0
- package/dist/components/button-group.js +47 -0
- package/dist/components/button-group.js.map +1 -0
- package/dist/components/button.js +48 -3
- package/dist/components/button.js.map +1 -0
- package/dist/components/calendar.js +3004 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/card.js +65 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/carousel.js +1198 -0
- package/dist/components/carousel.js.map +1 -0
- package/dist/components/chart.js +10596 -0
- package/dist/components/chart.js.map +1 -0
- package/dist/components/checkbox.js +23 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/collapsible.js +28 -0
- package/dist/components/collapsible.js.map +1 -0
- package/dist/components/combobox.js +192 -0
- package/dist/components/combobox.js.map +1 -0
- package/dist/components/command.js +663 -0
- package/dist/components/command.js.map +1 -0
- package/dist/components/context-menu.js +153 -0
- package/dist/components/context-menu.js.map +1 -0
- package/dist/components/dialog.js +104 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/direction.js +6 -0
- package/dist/components/drawer.js +1042 -0
- package/dist/components/drawer.js.map +1 -0
- package/dist/components/dropdown-menu.js +157 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/empty.js +67 -0
- package/dist/components/empty.js.map +1 -0
- package/dist/components/enya-logo.js +42 -42
- package/dist/components/enya-logo.js.map +1 -1
- package/dist/components/field.js +119 -0
- package/dist/components/field.js.map +1 -0
- package/dist/components/heading.js +39 -0
- package/dist/components/heading.js.map +1 -0
- package/dist/components/hover-card.js +40 -0
- package/dist/components/hover-card.js.map +1 -0
- package/dist/components/input-group.js +85 -0
- package/dist/components/input-group.js.map +1 -0
- package/dist/components/input-otp.js +417 -0
- package/dist/components/input-otp.js.map +1 -0
- package/dist/components/input.js +18 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/item.js +133 -0
- package/dist/components/item.js.map +1 -0
- package/dist/components/kbd.js +23 -0
- package/dist/components/kbd.js.map +1 -0
- package/dist/components/label.js +16 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/menubar.js +154 -0
- package/dist/components/menubar.js.map +1 -0
- package/dist/components/native-select.js +45 -0
- package/dist/components/native-select.js.map +1 -0
- package/dist/components/navigation-menu.js +95 -0
- package/dist/components/navigation-menu.js.map +1 -0
- package/dist/components/pagination.js +98 -0
- package/dist/components/pagination.js.map +1 -0
- package/dist/components/popover.js +62 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/progress.js +50 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/radio-group.js +30 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/resizable.js +1562 -0
- package/dist/components/resizable.js.map +1 -0
- package/dist/components/scroll-area.js +40 -0
- package/dist/components/scroll-area.js.map +1 -0
- package/dist/components/select.js +116 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/separator.js +17 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/sheet.js +99 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/sidebar.js +399 -0
- package/dist/components/sidebar.js.map +1 -0
- package/dist/components/skeleton.js +15 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/slider.js +36 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/sonner.js +738 -0
- package/dist/components/sonner.js.map +1 -0
- package/dist/components/spinner.js +19 -0
- package/dist/components/spinner.js.map +1 -0
- package/dist/components/switch.js +21 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/table.js +76 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tabs.js +51 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/text.js +47 -0
- package/dist/components/text.js.map +1 -0
- package/dist/components/textarea.js +16 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/toggle-group.js +55 -0
- package/dist/components/toggle-group.js.map +1 -0
- package/dist/components/toggle.js +39 -0
- package/dist/components/toggle.js.map +1 -0
- package/dist/components/tooltip.js +46 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/index.js +25 -23241
- package/dist/src/components/badge/badge.d.ts +1 -1
- package/dist/src/components/box/box.d.ts +7 -0
- package/dist/src/components/box/index.d.ts +1 -0
- package/dist/src/components/button/button.d.ts +1 -1
- package/dist/src/components/heading/heading.d.ts +15 -0
- package/dist/src/components/heading/index.d.ts +1 -0
- package/dist/src/components/item/item.d.ts +1 -1
- package/dist/src/components/spinner/spinner.d.ts +2 -1
- package/dist/src/components/tabs/tabs.d.ts +1 -1
- package/dist/src/components/text/index.d.ts +1 -0
- package/dist/src/components/text/text.d.ts +13 -0
- package/dist/src/index.d.ts +4 -53
- package/dist/styles/nova-binding.css +355 -255
- package/dist/styles/nova.css +205 -38
- package/dist/styles/typography.css +22 -130
- package/package.json +31 -10
- package/src/eslint/no-primitive-colors.js +2 -2
- package/src/eslint/no-primitive-colors.test.ts +97 -0
- package/dist/chunks/button-kvgr8g13fe959ju0.js +0 -81
- package/dist/chunks/button-kvgr8g13fe959ju0.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/styles/globals.css +0 -77
- package/dist/styles/theme-nova.css +0 -201
package/dist/styles/nova.css
CHANGED
|
@@ -1,58 +1,225 @@
|
|
|
1
|
+
@import "tailwindcss";
|
|
2
|
+
@import "@fontsource-variable/inter";
|
|
3
|
+
@import "@fontsource-variable/geist-mono";
|
|
1
4
|
@import "./nova-binding.css";
|
|
2
5
|
@import "./typography.css";
|
|
6
|
+
@import "tw-animate-css";
|
|
7
|
+
@import "shadcn/tailwind.css";
|
|
8
|
+
|
|
9
|
+
@custom-variant dark (&:is([data-mode="dark"] *));
|
|
10
|
+
@source "../../../../apps/**/*.{ts,tsx,astro}";
|
|
11
|
+
@source "../**/*.{ts,tsx}";
|
|
3
12
|
|
|
4
13
|
/*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
14
|
+
* Semantic color tokens — maps palette stops to meaning (--color-primary,
|
|
15
|
+
* --color-surface-1, --color-destructive, etc.) with light-dark() for
|
|
16
|
+
* automatic light/dark switching. Raw palette values live in
|
|
17
|
+
* nova-binding.css and are referenced here.
|
|
8
18
|
*/
|
|
9
|
-
@
|
|
10
|
-
:
|
|
11
|
-
|
|
12
|
-
|
|
19
|
+
@theme {
|
|
20
|
+
--color-surface-1: light-dark(var(--color-white), var(--color-black));
|
|
21
|
+
--color-surface-2: light-dark(var(--color-grey-100), var(--color-grey-900));
|
|
22
|
+
|
|
23
|
+
--color-surface-3: light-dark(var(--color-grey-200), var(--color-grey-800));
|
|
24
|
+
|
|
25
|
+
--color-foreground: light-dark(var(--color-grey-900), var(--color-grey-100));
|
|
13
26
|
|
|
14
|
-
|
|
15
|
-
|
|
27
|
+
--color-accent: light-dark(var(--color-brand-500), var(--color-brand-400));
|
|
28
|
+
--color-accent-foreground: light-dark(
|
|
29
|
+
var(--color-white),
|
|
30
|
+
var(--color-brand-900)
|
|
31
|
+
);
|
|
16
32
|
|
|
17
|
-
|
|
18
|
-
|
|
33
|
+
--color-info: light-dark(var(--color-blue-500), var(--color-blue-400));
|
|
34
|
+
--color-info-foreground: light-dark(
|
|
35
|
+
var(--color-white),
|
|
36
|
+
var(--color-grey-900)
|
|
37
|
+
);
|
|
38
|
+
--color-info-soft: light-dark(var(--color-blue-50), var(--color-blue-950));
|
|
39
|
+
--color-info-soft-foreground: light-dark(
|
|
40
|
+
var(--color-blue-500),
|
|
41
|
+
var(--color-blue-300)
|
|
42
|
+
);
|
|
19
43
|
|
|
20
|
-
|
|
21
|
-
|
|
44
|
+
--color-success: light-dark(
|
|
45
|
+
var(--color-emerald-500),
|
|
46
|
+
var(--color-emerald-400)
|
|
47
|
+
);
|
|
48
|
+
--color-success-foreground: light-dark(
|
|
49
|
+
var(--color-emerald-50),
|
|
50
|
+
var(--color-emerald-900)
|
|
51
|
+
);
|
|
52
|
+
--color-success-soft: light-dark(
|
|
53
|
+
var(--color-emerald-50),
|
|
54
|
+
var(--color-emerald-950)
|
|
55
|
+
);
|
|
56
|
+
--color-success-soft-foreground: light-dark(
|
|
57
|
+
var(--color-emerald-500),
|
|
58
|
+
var(--color-emerald-300)
|
|
59
|
+
);
|
|
22
60
|
|
|
23
|
-
|
|
24
|
-
|
|
61
|
+
--color-warning: light-dark(var(--color-amber-500), var(--color-amber-400));
|
|
62
|
+
--color-warning-foreground: light-dark(
|
|
63
|
+
var(--color-white),
|
|
64
|
+
var(--color-amber-900)
|
|
65
|
+
);
|
|
66
|
+
--color-warning-soft: light-dark(
|
|
67
|
+
var(--color-amber-50),
|
|
68
|
+
var(--color-amber-950)
|
|
69
|
+
);
|
|
70
|
+
--color-warning-soft-foreground: light-dark(
|
|
71
|
+
var(--color-amber-500),
|
|
72
|
+
var(--color-amber-300)
|
|
73
|
+
);
|
|
25
74
|
|
|
26
|
-
|
|
27
|
-
|
|
75
|
+
--color-destructive: light-dark(var(--color-red-600), var(--color-red-400));
|
|
76
|
+
--color-destructive-foreground: light-dark(
|
|
77
|
+
var(--color-white),
|
|
78
|
+
var(--color-red-900)
|
|
79
|
+
);
|
|
80
|
+
--color-destructive-soft: light-dark(
|
|
81
|
+
var(--color-red-50),
|
|
82
|
+
var(--color-red-950)
|
|
83
|
+
);
|
|
84
|
+
--color-destructive-soft-foreground: light-dark(
|
|
85
|
+
var(--color-red-500),
|
|
86
|
+
var(--color-red-300)
|
|
87
|
+
);
|
|
28
88
|
|
|
29
|
-
|
|
30
|
-
|
|
89
|
+
--color-border: light-dark(var(--color-grey-300), var(--color-grey-700));
|
|
90
|
+
--color-ring: light-dark(var(--color-brand-500), var(--color-brand-400));
|
|
31
91
|
|
|
32
|
-
|
|
33
|
-
|
|
92
|
+
--color-chart-1: light-dark(var(--color-brand-600), var(--color-brand-400));
|
|
93
|
+
--color-chart-2: light-dark(
|
|
94
|
+
var(--color-emerald-800),
|
|
95
|
+
var(--color-emerald-200)
|
|
96
|
+
);
|
|
97
|
+
--color-chart-3: light-dark(var(--color-yellow-600), var(--color-yellow-400));
|
|
98
|
+
--color-chart-4: light-dark(var(--color-blue-800), var(--color-blue-400));
|
|
99
|
+
--color-chart-5: light-dark(var(--color-red-600), var(--color-red-400));
|
|
34
100
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
101
|
+
--color-sidebar: light-dark(var(--color-grey-50), var(--color-grey-950));
|
|
102
|
+
--color-sidebar-foreground: light-dark(
|
|
103
|
+
var(--color-grey-900),
|
|
104
|
+
var(--color-grey-100)
|
|
105
|
+
);
|
|
106
|
+
--color-sidebar-primary: light-dark(
|
|
107
|
+
var(--color-brand-600),
|
|
108
|
+
var(--color-brand-400)
|
|
109
|
+
);
|
|
110
|
+
--color-sidebar-primary-foreground: light-dark(
|
|
111
|
+
var(--color-grey-100),
|
|
112
|
+
var(--color-grey-900)
|
|
113
|
+
);
|
|
114
|
+
--color-sidebar-accent: light-dark(
|
|
115
|
+
var(--color-grey-100),
|
|
116
|
+
var(--color-grey-800)
|
|
117
|
+
);
|
|
118
|
+
--color-sidebar-accent-foreground: light-dark(
|
|
119
|
+
var(--color-grey-900),
|
|
120
|
+
var(--color-grey-100)
|
|
121
|
+
);
|
|
122
|
+
--color-sidebar-border: light-dark(
|
|
123
|
+
var(--color-grey-200),
|
|
124
|
+
var(--color-grey-800)
|
|
125
|
+
);
|
|
126
|
+
--color-sidebar-ring: light-dark(
|
|
127
|
+
var(--color-brand-600),
|
|
128
|
+
var(--color-brand-400)
|
|
129
|
+
);
|
|
38
130
|
|
|
39
|
-
|
|
131
|
+
--color-primary: light-dark(var(--color-grey-900), var(--color-grey-100));
|
|
132
|
+
--color-primary-foreground: light-dark(
|
|
133
|
+
var(--color-grey-50),
|
|
134
|
+
var(--color-grey-900)
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
--color-surface-muted: light-dark(
|
|
138
|
+
var(--color-grey-50),
|
|
139
|
+
var(--color-grey-950)
|
|
140
|
+
);
|
|
141
|
+
--color-muted-foreground: light-dark(
|
|
142
|
+
var(--color-grey-500),
|
|
143
|
+
var(--color-grey-400)
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
/*------ TO BE REMOVED -----*/
|
|
147
|
+
|
|
148
|
+
--color-card: light-dark(var(--color-grey-50), var(--color-grey-900));
|
|
149
|
+
--color-card-foreground: light-dark(
|
|
150
|
+
var(--color-grey-900),
|
|
151
|
+
var(--color-grey-100)
|
|
152
|
+
);
|
|
153
|
+
--color-popover: light-dark(var(--color-grey-50), var(--color-grey-900));
|
|
154
|
+
--color-popover-foreground: light-dark(
|
|
155
|
+
var(--color-grey-900),
|
|
156
|
+
var(--color-grey-100)
|
|
157
|
+
);
|
|
158
|
+
}
|
|
40
159
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
160
|
+
/*
|
|
161
|
+
* Nova-owned theme extensions (radius scale, spacing scale, fonts) that
|
|
162
|
+
* don't have a bare equivalent elsewhere. Spacing keys stay nova- prefixed
|
|
163
|
+
* on purpose — they use literal pixel values (spacing-nova-4 = 4px), not
|
|
164
|
+
* Tailwind's multiplier scale, so a bare --spacing-4 would silently
|
|
165
|
+
* override Tailwind's own numeric spacing utilities for any consumer.
|
|
166
|
+
*/
|
|
167
|
+
@theme inline {
|
|
168
|
+
--radius-sm: 0.375rem;
|
|
169
|
+
--radius-md: 0.5rem;
|
|
170
|
+
--radius-lg: 0.5rem;
|
|
171
|
+
--radius-xl: 0.75rem;
|
|
172
|
+
--radius-2xl: 1rem;
|
|
173
|
+
--radius-3xl: 1.5rem;
|
|
174
|
+
--radius-4xl: 2rem;
|
|
175
|
+
--spacing-nova-4: var(--nova-space);
|
|
176
|
+
--spacing-nova-8: var(--nova-space-2x);
|
|
177
|
+
--spacing-nova-12: var(--nova-space-3x);
|
|
178
|
+
--spacing-nova-16: var(--nova-space-4x);
|
|
179
|
+
--spacing-nova-24: var(--nova-space-6x);
|
|
180
|
+
--spacing-nova-32: var(--nova-space-8x);
|
|
181
|
+
--spacing-nova-40: var(--nova-space-10x);
|
|
182
|
+
--spacing-nova-64: var(--nova-space-16x);
|
|
183
|
+
--spacing-nova-96: var(--nova-space-24x);
|
|
184
|
+
--spacing-nova-128: var(--nova-space-32x);
|
|
185
|
+
--font-sans: "Inter Variable", sans-serif;
|
|
186
|
+
--font-mono: "Geist Mono Variable", ui-monospace, monospace;
|
|
187
|
+
--font-heading: var(--font-sans);
|
|
188
|
+
}
|
|
46
189
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
190
|
+
@layer base {
|
|
191
|
+
* {
|
|
192
|
+
@apply border-border outline-ring/50;
|
|
193
|
+
}
|
|
194
|
+
body {
|
|
195
|
+
@apply bg-surface-1 text-foreground;
|
|
196
|
+
}
|
|
197
|
+
button:not(:disabled),
|
|
198
|
+
[role="button"]:not(:disabled) {
|
|
199
|
+
cursor: pointer;
|
|
55
200
|
}
|
|
56
201
|
}
|
|
57
202
|
|
|
203
|
+
/* Scan nova's built component and chunk JS files so all component class
|
|
204
|
+
* names (data-open:, group-aria-expanded:, etc.) are included in the
|
|
205
|
+
* consumer's Tailwind output without any additional @source config. */
|
|
206
|
+
@source "../components/*.js";
|
|
207
|
+
@source "../chunks/*.js";
|
|
208
|
+
@source "../index.js";
|
|
209
|
+
|
|
210
|
+
/* prettier-ignore */
|
|
211
|
+
@source inline("text-button-24 text-button-20 text-button-16 text-button-14 text-button-12");
|
|
212
|
+
/* prettier-ignore */
|
|
213
|
+
@source inline("text-label-20 text-label-18 text-label-16 text-label-14 text-label-14-mono text-label-13 text-label-13-mono text-label-12 text-label-12-mono");
|
|
214
|
+
/* prettier-ignore */
|
|
215
|
+
@source inline("bg-success text-success-foreground bg-success-soft text-success-soft-foreground bg-warning text-warning-foreground bg-warning-soft text-warning-soft-foreground bg-destructive bg-destructive-soft text-destructive-foreground text-destructive-soft-foreground bg-info text-info-foreground bg-info-soft text-info-soft-foreground");
|
|
216
|
+
/* prettier-ignore */
|
|
217
|
+
@source inline("text-foreground bg-surface-1 bg-surface-2 bg-surface-3 bg-accent text-accent-foreground border-border ring-ring");
|
|
218
|
+
/* prettier-ignore */
|
|
219
|
+
@source inline("bg-chart-1 bg-chart-2 bg-chart-3 bg-chart-4 bg-chart-5");
|
|
220
|
+
/* prettier-ignore */
|
|
221
|
+
@source inline("bg-sidebar text-sidebar-foreground bg-sidebar-primary text-sidebar-primary-foreground bg-sidebar-accent text-sidebar-accent-foreground border-sidebar-border ring-sidebar-ring");
|
|
222
|
+
/* prettier-ignore */
|
|
223
|
+
@source inline("bg-primary text-primary-foreground bg-surface-muted text-muted-foreground bg-card text-card-foreground bg-popover text-popover-foreground");
|
|
224
|
+
|
|
58
225
|
/* Component-specific styles added here as components are built */
|
|
@@ -1,99 +1,41 @@
|
|
|
1
|
-
/* Geist-style typography utilities.
|
|
1
|
+
/* Geist-style typography utilities for labels and button text.
|
|
2
|
+
Headings and body copy are set through the Heading and Text components instead.
|
|
2
3
|
Each class pre-sets font-size, line-height, letter-spacing, and font-weight.
|
|
3
|
-
All classes work with Tailwind variants: md:text-
|
|
4
|
+
All classes work with Tailwind variants: md:text-label-16, hover:text-label-14, etc. */
|
|
4
5
|
|
|
5
|
-
/* ───
|
|
6
|
-
|
|
7
|
-
@utility text-heading-72 {
|
|
8
|
-
font-size: 4.5rem;
|
|
9
|
-
line-height: 4.5rem;
|
|
10
|
-
letter-spacing: -0.02em;
|
|
11
|
-
font-weight: 600;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
@utility text-heading-64 {
|
|
15
|
-
font-size: 4rem;
|
|
16
|
-
line-height: 4rem;
|
|
17
|
-
letter-spacing: -0.02em;
|
|
18
|
-
font-weight: 600;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
@utility text-heading-56 {
|
|
22
|
-
font-size: 3.5rem;
|
|
23
|
-
line-height: 3.5rem;
|
|
24
|
-
letter-spacing: -0.02em;
|
|
25
|
-
font-weight: 600;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
@utility text-heading-48 {
|
|
29
|
-
font-size: 3rem;
|
|
30
|
-
line-height: 3.5rem;
|
|
31
|
-
letter-spacing: -0.02em;
|
|
32
|
-
font-weight: 600;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
@utility text-heading-40 {
|
|
36
|
-
font-size: 2.5rem;
|
|
37
|
-
line-height: 3rem;
|
|
38
|
-
letter-spacing: -0.02em;
|
|
39
|
-
font-weight: 600;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
@utility text-heading-32 {
|
|
43
|
-
font-size: 2rem;
|
|
44
|
-
line-height: 2.5rem;
|
|
45
|
-
letter-spacing: -0.02em;
|
|
46
|
-
font-weight: 600;
|
|
47
|
-
}
|
|
6
|
+
/* ─── Buttons ──────────────────────────────────────────────────────────────── */
|
|
48
7
|
|
|
49
|
-
@utility text-
|
|
8
|
+
@utility text-button-24 {
|
|
50
9
|
font-size: 1.5rem;
|
|
51
|
-
line-height: 2rem;
|
|
52
|
-
letter-spacing: -0.02em;
|
|
53
|
-
font-weight: 600;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
@utility text-heading-20 {
|
|
57
|
-
font-size: 1.25rem;
|
|
58
10
|
line-height: 1.625;
|
|
59
|
-
letter-spacing: -0.
|
|
60
|
-
font-weight:
|
|
11
|
+
letter-spacing: -0.01em;
|
|
12
|
+
font-weight: 400;
|
|
61
13
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
font-size: 1rem;
|
|
14
|
+
@utility text-button-20 {
|
|
15
|
+
font-size: 1.25rem;
|
|
65
16
|
line-height: 1.5;
|
|
66
|
-
letter-spacing: -0.
|
|
67
|
-
font-weight:
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
@utility text-heading-14 {
|
|
71
|
-
font-size: 0.875rem;
|
|
72
|
-
line-height: 1.25;
|
|
73
|
-
font-weight: 600;
|
|
17
|
+
letter-spacing: -0.01em;
|
|
18
|
+
font-weight: 400;
|
|
74
19
|
}
|
|
75
|
-
|
|
76
|
-
/* ─── Buttons ──────────────────────────────────────────────────────────────── */
|
|
77
|
-
|
|
78
20
|
@utility text-button-16 {
|
|
79
21
|
font-size: 1rem;
|
|
80
22
|
line-height: 1.5;
|
|
81
23
|
letter-spacing: -0.01em;
|
|
82
|
-
font-weight:
|
|
24
|
+
font-weight: 400;
|
|
83
25
|
}
|
|
84
26
|
|
|
85
27
|
@utility text-button-14 {
|
|
86
28
|
font-size: 0.875rem;
|
|
87
29
|
line-height: 1.4286;
|
|
88
30
|
letter-spacing: -0.01em;
|
|
89
|
-
font-weight:
|
|
31
|
+
font-weight: 400;
|
|
90
32
|
}
|
|
91
33
|
|
|
92
34
|
@utility text-button-12 {
|
|
93
35
|
font-size: 0.75rem;
|
|
94
36
|
line-height: 1.3333;
|
|
95
37
|
letter-spacing: 0;
|
|
96
|
-
font-weight:
|
|
38
|
+
font-weight: 400;
|
|
97
39
|
}
|
|
98
40
|
|
|
99
41
|
/* ─── Labels ───────────────────────────────────────────────────────────────── */
|
|
@@ -102,35 +44,35 @@
|
|
|
102
44
|
font-size: 1.25rem;
|
|
103
45
|
line-height: 1.4;
|
|
104
46
|
letter-spacing: -0.01em;
|
|
105
|
-
font-weight:
|
|
47
|
+
font-weight: 400;
|
|
106
48
|
}
|
|
107
49
|
|
|
108
50
|
@utility text-label-18 {
|
|
109
51
|
font-size: 1.125rem;
|
|
110
52
|
line-height: 1.3333;
|
|
111
53
|
letter-spacing: -0.01em;
|
|
112
|
-
font-weight:
|
|
54
|
+
font-weight: 400;
|
|
113
55
|
}
|
|
114
56
|
|
|
115
57
|
@utility text-label-16 {
|
|
116
58
|
font-size: 1rem;
|
|
117
59
|
line-height: 1.5;
|
|
118
60
|
letter-spacing: -0.01em;
|
|
119
|
-
font-weight:
|
|
61
|
+
font-weight: 400;
|
|
120
62
|
}
|
|
121
63
|
|
|
122
64
|
@utility text-label-14 {
|
|
123
65
|
font-size: 0.875rem;
|
|
124
66
|
line-height: 1.4286;
|
|
125
67
|
letter-spacing: -0.01em;
|
|
126
|
-
font-weight:
|
|
68
|
+
font-weight: 400;
|
|
127
69
|
}
|
|
128
70
|
|
|
129
71
|
@utility text-label-14-mono {
|
|
130
72
|
font-size: 0.875rem;
|
|
131
73
|
line-height: 1.4286;
|
|
132
74
|
letter-spacing: 0;
|
|
133
|
-
font-weight:
|
|
75
|
+
font-weight: 400;
|
|
134
76
|
font-family: var(--font-mono);
|
|
135
77
|
}
|
|
136
78
|
|
|
@@ -138,14 +80,14 @@
|
|
|
138
80
|
font-size: 0.8125rem;
|
|
139
81
|
line-height: 1.2308;
|
|
140
82
|
letter-spacing: 0;
|
|
141
|
-
font-weight:
|
|
83
|
+
font-weight: 400;
|
|
142
84
|
}
|
|
143
85
|
|
|
144
86
|
@utility text-label-13-mono {
|
|
145
87
|
font-size: 0.8125rem;
|
|
146
88
|
line-height: 1.2308;
|
|
147
89
|
letter-spacing: 0;
|
|
148
|
-
font-weight:
|
|
90
|
+
font-weight: 400;
|
|
149
91
|
font-family: var(--font-mono);
|
|
150
92
|
}
|
|
151
93
|
|
|
@@ -153,63 +95,13 @@
|
|
|
153
95
|
font-size: 0.75rem;
|
|
154
96
|
line-height: 1.3333;
|
|
155
97
|
letter-spacing: 0;
|
|
156
|
-
font-weight:
|
|
98
|
+
font-weight: 400;
|
|
157
99
|
}
|
|
158
100
|
|
|
159
101
|
@utility text-label-12-mono {
|
|
160
102
|
font-size: 0.75rem;
|
|
161
103
|
line-height: 1.3333;
|
|
162
104
|
letter-spacing: 0;
|
|
163
|
-
font-weight: 500;
|
|
164
|
-
font-family: var(--font-mono);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/* ─── Copy ─────────────────────────────────────────────────────────────────── */
|
|
168
|
-
|
|
169
|
-
@utility text-copy-24 {
|
|
170
|
-
font-size: 1.5rem;
|
|
171
|
-
line-height: 1.6667;
|
|
172
|
-
font-weight: 400;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
@utility text-copy-20 {
|
|
176
|
-
font-size: 1.25rem;
|
|
177
|
-
line-height: 1.6;
|
|
178
|
-
font-weight: 400;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
@utility text-copy-18 {
|
|
182
|
-
font-size: 1.125rem;
|
|
183
|
-
line-height: 1.5556;
|
|
184
|
-
font-weight: 400;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
@utility text-copy-16 {
|
|
188
|
-
font-size: 1rem;
|
|
189
|
-
line-height: 1.625;
|
|
190
|
-
font-weight: 400;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
@utility text-copy-14 {
|
|
194
|
-
font-size: 0.875rem;
|
|
195
|
-
line-height: 1.7143;
|
|
196
|
-
font-weight: 400;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
@utility text-copy-13 {
|
|
200
|
-
font-size: 0.8125rem;
|
|
201
|
-
line-height: 1.5385;
|
|
202
|
-
font-weight: 400;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
@utility text-copy-13-mono {
|
|
206
|
-
font-size: 0.8125rem;
|
|
207
|
-
line-height: 1.5385;
|
|
208
105
|
font-weight: 400;
|
|
209
106
|
font-family: var(--font-mono);
|
|
210
107
|
}
|
|
211
|
-
@utility text-copy-12 {
|
|
212
|
-
font-size: 0.75rem;
|
|
213
|
-
line-height: 150%;
|
|
214
|
-
font-weight: 400;
|
|
215
|
-
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enya-learning/nova",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"publishConfig": {
|
|
@@ -27,12 +27,12 @@
|
|
|
27
27
|
"zod": "^4.4.3"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
|
-
"
|
|
30
|
+
"@hugeicons/core-free-icons": "^4.2.2",
|
|
31
|
+
"@hugeicons/react": "^1.1.9",
|
|
31
32
|
"react": "^19.2.6",
|
|
32
33
|
"react-dom": "^19.2.6"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
|
-
"@eslint/js": "^10",
|
|
36
36
|
"@storybook/addon-a11y": "^10.4.2",
|
|
37
37
|
"@storybook/addon-docs": "^10.4.2",
|
|
38
38
|
"@storybook/addon-themes": "^10.4.2",
|
|
@@ -45,10 +45,7 @@
|
|
|
45
45
|
"@types/react-dom": "^19",
|
|
46
46
|
"@vitejs/plugin-react": "^6.0.2",
|
|
47
47
|
"@vitest/ui": "^4.1.8",
|
|
48
|
-
"
|
|
49
|
-
"eslint-plugin-react-hooks": "^7.1.1",
|
|
50
|
-
"eslint-plugin-react-refresh": "^0.5.2",
|
|
51
|
-
"globals": "^17",
|
|
48
|
+
"oxlint": "latest",
|
|
52
49
|
"plop": "^4.0.0",
|
|
53
50
|
"react-docgen-typescript": "^2.4.0",
|
|
54
51
|
"shadcn": "^4.10.0",
|
|
@@ -56,7 +53,6 @@
|
|
|
56
53
|
"tailwindcss": "^4",
|
|
57
54
|
"tsx": "^4.22.4",
|
|
58
55
|
"typescript": "~6",
|
|
59
|
-
"typescript-eslint": "^8",
|
|
60
56
|
"vite": "^8.0.16",
|
|
61
57
|
"vite-plugin-dts": "^5.0.2",
|
|
62
58
|
"vitest": "^4.1.8"
|
|
@@ -68,11 +64,30 @@
|
|
|
68
64
|
},
|
|
69
65
|
"./styles/tailwind": "./dist/styles/nova.css",
|
|
70
66
|
"./styles": "./dist/styles/nova.css",
|
|
71
|
-
"./globals.css": "./dist/styles/globals.css",
|
|
72
67
|
"./components/button": {
|
|
73
68
|
"types": "./dist/src/components/button/index.d.ts",
|
|
74
69
|
"default": "./dist/components/button.js"
|
|
75
70
|
},
|
|
71
|
+
"./components/heading": {
|
|
72
|
+
"types": "./dist/src/components/heading/index.d.ts",
|
|
73
|
+
"default": "./dist/components/heading.js"
|
|
74
|
+
},
|
|
75
|
+
"./components/text": {
|
|
76
|
+
"types": "./dist/src/components/text/index.d.ts",
|
|
77
|
+
"default": "./dist/components/text.js"
|
|
78
|
+
},
|
|
79
|
+
"./components/box": {
|
|
80
|
+
"types": "./dist/src/components/box/index.d.ts",
|
|
81
|
+
"default": "./dist/components/box.js"
|
|
82
|
+
},
|
|
83
|
+
"./components/button-group": {
|
|
84
|
+
"types": "./dist/src/components/button-group/index.d.ts",
|
|
85
|
+
"default": "./dist/components/button-group.js"
|
|
86
|
+
},
|
|
87
|
+
"./components/spinner": {
|
|
88
|
+
"types": "./dist/src/components/spinner/index.d.ts",
|
|
89
|
+
"default": "./dist/components/spinner.js"
|
|
90
|
+
},
|
|
76
91
|
"./components/enya-logo": {
|
|
77
92
|
"types": "./dist/src/components/enya-logo/index.d.ts",
|
|
78
93
|
"default": "./dist/components/enya-logo.js"
|
|
@@ -90,6 +105,12 @@
|
|
|
90
105
|
"components/button": [
|
|
91
106
|
"./dist/src/components/button/index.d.ts"
|
|
92
107
|
],
|
|
108
|
+
"components/button-group": [
|
|
109
|
+
"./dist/src/components/button-group/index.d.ts"
|
|
110
|
+
],
|
|
111
|
+
"components/spinner": [
|
|
112
|
+
"./dist/src/components/spinner/index.d.ts"
|
|
113
|
+
],
|
|
93
114
|
"components/enya-logo": [
|
|
94
115
|
"./dist/src/components/enya-logo/index.d.ts"
|
|
95
116
|
],
|
|
@@ -109,7 +130,7 @@
|
|
|
109
130
|
"build": "vite build --mode production && tsx scripts/css-build.ts",
|
|
110
131
|
"dev": "vite build --watch --mode development",
|
|
111
132
|
"clean": "rm -rf dist",
|
|
112
|
-
"lint": "
|
|
133
|
+
"lint": "oxlint --config oxlint.json src",
|
|
113
134
|
"format": "prettier --write \"**/*.{ts,tsx}\" --ignore-path ../../.prettierignore",
|
|
114
135
|
"typecheck": "tsc --noEmit",
|
|
115
136
|
"test": "vitest run",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Flags raw Tailwind palette classes (e.g. bg-blue-500, text-red-600, bg-white)
|
|
5
5
|
* in className / class attributes and in cn/clsx/cva/twMerge call arguments.
|
|
6
|
-
* Consumers should use Nova semantic tokens instead (bg-
|
|
6
|
+
* Consumers should use Nova semantic tokens instead (bg-primary, bg-surface-1, etc.).
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
const PREFIXES = [
|
|
@@ -89,7 +89,7 @@ export const noPrimitiveColors = {
|
|
|
89
89
|
messages: {
|
|
90
90
|
noPrimitive:
|
|
91
91
|
'Raw Tailwind color "{{match}}" — use a Nova semantic token instead ' +
|
|
92
|
-
"(e.g. bg-
|
|
92
|
+
"(e.g. bg-surface-1, text-foreground, bg-primary, bg-white). " +
|
|
93
93
|
"See the Nova Colours docs.",
|
|
94
94
|
},
|
|
95
95
|
},
|