@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.
Files changed (146) hide show
  1. package/README.md +8 -19
  2. package/dist/chunks/dist-fahbq1psobj0ox6s.js +1327 -0
  3. package/dist/chunks/dist-fahbq1psobj0ox6s.js.map +1 -0
  4. package/dist/chunks/dist-o8x0ip0z71xkr2oh.js +37 -0
  5. package/dist/chunks/dist-o8x0ip0z71xkr2oh.js.map +1 -0
  6. package/dist/components/accordion.js +62 -0
  7. package/dist/components/accordion.js.map +1 -0
  8. package/dist/components/alert-dialog.js +108 -0
  9. package/dist/components/alert-dialog.js.map +1 -0
  10. package/dist/components/alert.js +49 -0
  11. package/dist/components/alert.js.map +1 -0
  12. package/dist/components/aspect-ratio.js +16 -0
  13. package/dist/components/aspect-ratio.js.map +1 -0
  14. package/dist/components/avatar.js +58 -0
  15. package/dist/components/avatar.js.map +1 -0
  16. package/dist/components/badge.js +33 -0
  17. package/dist/components/badge.js.map +1 -0
  18. package/dist/components/box.js +16 -0
  19. package/dist/components/box.js.map +1 -0
  20. package/dist/components/breadcrumb.js +85 -0
  21. package/dist/components/breadcrumb.js.map +1 -0
  22. package/dist/components/button-group.js +47 -0
  23. package/dist/components/button-group.js.map +1 -0
  24. package/dist/components/button.js +48 -3
  25. package/dist/components/button.js.map +1 -0
  26. package/dist/components/calendar.js +3004 -0
  27. package/dist/components/calendar.js.map +1 -0
  28. package/dist/components/card.js +65 -0
  29. package/dist/components/card.js.map +1 -0
  30. package/dist/components/carousel.js +1198 -0
  31. package/dist/components/carousel.js.map +1 -0
  32. package/dist/components/chart.js +10596 -0
  33. package/dist/components/chart.js.map +1 -0
  34. package/dist/components/checkbox.js +23 -0
  35. package/dist/components/checkbox.js.map +1 -0
  36. package/dist/components/collapsible.js +28 -0
  37. package/dist/components/collapsible.js.map +1 -0
  38. package/dist/components/combobox.js +192 -0
  39. package/dist/components/combobox.js.map +1 -0
  40. package/dist/components/command.js +663 -0
  41. package/dist/components/command.js.map +1 -0
  42. package/dist/components/context-menu.js +153 -0
  43. package/dist/components/context-menu.js.map +1 -0
  44. package/dist/components/dialog.js +104 -0
  45. package/dist/components/dialog.js.map +1 -0
  46. package/dist/components/direction.js +6 -0
  47. package/dist/components/drawer.js +1042 -0
  48. package/dist/components/drawer.js.map +1 -0
  49. package/dist/components/dropdown-menu.js +157 -0
  50. package/dist/components/dropdown-menu.js.map +1 -0
  51. package/dist/components/empty.js +67 -0
  52. package/dist/components/empty.js.map +1 -0
  53. package/dist/components/enya-logo.js +42 -42
  54. package/dist/components/enya-logo.js.map +1 -1
  55. package/dist/components/field.js +119 -0
  56. package/dist/components/field.js.map +1 -0
  57. package/dist/components/heading.js +39 -0
  58. package/dist/components/heading.js.map +1 -0
  59. package/dist/components/hover-card.js +40 -0
  60. package/dist/components/hover-card.js.map +1 -0
  61. package/dist/components/input-group.js +85 -0
  62. package/dist/components/input-group.js.map +1 -0
  63. package/dist/components/input-otp.js +417 -0
  64. package/dist/components/input-otp.js.map +1 -0
  65. package/dist/components/input.js +18 -0
  66. package/dist/components/input.js.map +1 -0
  67. package/dist/components/item.js +133 -0
  68. package/dist/components/item.js.map +1 -0
  69. package/dist/components/kbd.js +23 -0
  70. package/dist/components/kbd.js.map +1 -0
  71. package/dist/components/label.js +16 -0
  72. package/dist/components/label.js.map +1 -0
  73. package/dist/components/menubar.js +154 -0
  74. package/dist/components/menubar.js.map +1 -0
  75. package/dist/components/native-select.js +45 -0
  76. package/dist/components/native-select.js.map +1 -0
  77. package/dist/components/navigation-menu.js +95 -0
  78. package/dist/components/navigation-menu.js.map +1 -0
  79. package/dist/components/pagination.js +98 -0
  80. package/dist/components/pagination.js.map +1 -0
  81. package/dist/components/popover.js +62 -0
  82. package/dist/components/popover.js.map +1 -0
  83. package/dist/components/progress.js +50 -0
  84. package/dist/components/progress.js.map +1 -0
  85. package/dist/components/radio-group.js +30 -0
  86. package/dist/components/radio-group.js.map +1 -0
  87. package/dist/components/resizable.js +1562 -0
  88. package/dist/components/resizable.js.map +1 -0
  89. package/dist/components/scroll-area.js +40 -0
  90. package/dist/components/scroll-area.js.map +1 -0
  91. package/dist/components/select.js +116 -0
  92. package/dist/components/select.js.map +1 -0
  93. package/dist/components/separator.js +17 -0
  94. package/dist/components/separator.js.map +1 -0
  95. package/dist/components/sheet.js +99 -0
  96. package/dist/components/sheet.js.map +1 -0
  97. package/dist/components/sidebar.js +399 -0
  98. package/dist/components/sidebar.js.map +1 -0
  99. package/dist/components/skeleton.js +15 -0
  100. package/dist/components/skeleton.js.map +1 -0
  101. package/dist/components/slider.js +36 -0
  102. package/dist/components/slider.js.map +1 -0
  103. package/dist/components/sonner.js +738 -0
  104. package/dist/components/sonner.js.map +1 -0
  105. package/dist/components/spinner.js +19 -0
  106. package/dist/components/spinner.js.map +1 -0
  107. package/dist/components/switch.js +21 -0
  108. package/dist/components/switch.js.map +1 -0
  109. package/dist/components/table.js +76 -0
  110. package/dist/components/table.js.map +1 -0
  111. package/dist/components/tabs.js +51 -0
  112. package/dist/components/tabs.js.map +1 -0
  113. package/dist/components/text.js +47 -0
  114. package/dist/components/text.js.map +1 -0
  115. package/dist/components/textarea.js +16 -0
  116. package/dist/components/textarea.js.map +1 -0
  117. package/dist/components/toggle-group.js +55 -0
  118. package/dist/components/toggle-group.js.map +1 -0
  119. package/dist/components/toggle.js +39 -0
  120. package/dist/components/toggle.js.map +1 -0
  121. package/dist/components/tooltip.js +46 -0
  122. package/dist/components/tooltip.js.map +1 -0
  123. package/dist/index.js +25 -23241
  124. package/dist/src/components/badge/badge.d.ts +1 -1
  125. package/dist/src/components/box/box.d.ts +7 -0
  126. package/dist/src/components/box/index.d.ts +1 -0
  127. package/dist/src/components/button/button.d.ts +1 -1
  128. package/dist/src/components/heading/heading.d.ts +15 -0
  129. package/dist/src/components/heading/index.d.ts +1 -0
  130. package/dist/src/components/item/item.d.ts +1 -1
  131. package/dist/src/components/spinner/spinner.d.ts +2 -1
  132. package/dist/src/components/tabs/tabs.d.ts +1 -1
  133. package/dist/src/components/text/index.d.ts +1 -0
  134. package/dist/src/components/text/text.d.ts +13 -0
  135. package/dist/src/index.d.ts +4 -53
  136. package/dist/styles/nova-binding.css +355 -255
  137. package/dist/styles/nova.css +205 -38
  138. package/dist/styles/typography.css +22 -130
  139. package/package.json +31 -10
  140. package/src/eslint/no-primitive-colors.js +2 -2
  141. package/src/eslint/no-primitive-colors.test.ts +97 -0
  142. package/dist/chunks/button-kvgr8g13fe959ju0.js +0 -81
  143. package/dist/chunks/button-kvgr8g13fe959ju0.js.map +0 -1
  144. package/dist/index.js.map +0 -1
  145. package/dist/styles/globals.css +0 -77
  146. package/dist/styles/theme-nova.css +0 -201
@@ -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
- * Remaps shadcn CSS variables to nova tokens.
6
- * shadcn components (bg-primary, text-muted-foreground, etc.) continue
7
- * working without modification they now reflect nova brand values.
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
- @layer base {
10
- :root {
11
- --background: var(--color-nova-background);
12
- --foreground: var(--color-nova-foreground);
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
- --card: var(--color-nova-card);
15
- --card-foreground: var(--color-nova-card-foreground);
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
- --popover: var(--color-nova-popover);
18
- --popover-foreground: var(--color-nova-popover-foreground);
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
- --primary: var(--color-nova-primary);
21
- --primary-foreground: var(--color-nova-primary-foreground);
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
- --secondary: var(--color-nova-secondary);
24
- --secondary-foreground: var(--color-nova-secondary-foreground);
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
- --muted: var(--color-nova-muted);
27
- --muted-foreground: var(--color-nova-muted-foreground);
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
- --accent: var(--color-nova-accent);
30
- --accent-foreground: var(--color-nova-accent-foreground);
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
- --destructive: var(--color-nova-destructive);
33
- --destructive-foreground: var(--color-nova-destructive-foreground);
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
- --border: var(--color-nova-border);
36
- --input: var(--color-nova-input);
37
- --ring: var(--color-nova-ring);
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
- --radius: 0.625rem;
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
- --chart-1: var(--color-nova-chart-1);
42
- --chart-2: var(--color-nova-chart-2);
43
- --chart-3: var(--color-nova-chart-3);
44
- --chart-4: var(--color-nova-chart-4);
45
- --chart-5: var(--color-nova-chart-5);
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
- --sidebar: var(--color-nova-sidebar);
48
- --sidebar-foreground: var(--color-nova-sidebar-foreground);
49
- --sidebar-primary: var(--color-nova-sidebar-primary);
50
- --sidebar-primary-foreground: var(--color-nova-sidebar-primary-foreground);
51
- --sidebar-accent: var(--color-nova-sidebar-accent);
52
- --sidebar-accent-foreground: var(--color-nova-sidebar-accent-foreground);
53
- --sidebar-border: var(--color-nova-sidebar-border);
54
- --sidebar-ring: var(--color-nova-sidebar-ring);
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-heading-32, hover:text-label-14, etc. */
4
+ All classes work with Tailwind variants: md:text-label-16, hover:text-label-14, etc. */
4
5
 
5
- /* ─── Headings ─────────────────────────────────────────────────────────────── */
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-heading-24 {
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.02em;
60
- font-weight: 600;
11
+ letter-spacing: -0.01em;
12
+ font-weight: 400;
61
13
  }
62
-
63
- @utility text-heading-16 {
64
- font-size: 1rem;
14
+ @utility text-button-20 {
15
+ font-size: 1.25rem;
65
16
  line-height: 1.5;
66
- letter-spacing: -0.02em;
67
- font-weight: 600;
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: 500;
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: 500;
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: 500;
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: 500;
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: 500;
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: 500;
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: 500;
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: 500;
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: 500;
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: 500;
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: 500;
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.4.3",
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
- "lucide-react": "^1.17.0",
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
- "eslint": "^10",
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": "eslint",
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-background, bg-nova-primary, etc.).
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-background, text-foreground, bg-nova-primary, bg-nova-white). " +
92
+ "(e.g. bg-surface-1, text-foreground, bg-primary, bg-white). " +
93
93
  "See the Nova Colours docs.",
94
94
  },
95
95
  },