@jarllyng/nostromo 3.1.0 → 3.2.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 +21 -0
- package/README.md +96 -0
- package/dist/base.css +0 -48
- package/dist/chunk-2DNQXAMB.cjs +1 -0
- package/dist/chunk-2HYJSYQX.js +3 -0
- package/dist/chunk-2HYJSYQX.js.map +1 -0
- package/dist/chunk-2JQROMCM.js +1 -0
- package/dist/chunk-3BNGK67W.js +1 -0
- package/dist/chunk-3V3OIZWQ.cjs +1 -0
- package/dist/chunk-44HISN45.js +1 -0
- package/dist/chunk-4FSJEW7W.cjs +1 -0
- package/dist/chunk-4PN7OGLX.cjs +1 -0
- package/dist/chunk-4TYVEXRA.cjs +1 -0
- package/dist/chunk-55N2IT62.cjs +1 -0
- package/dist/chunk-5PVFLXPO.cjs +1 -0
- package/dist/chunk-6QAYHUNV.js +1 -0
- package/dist/chunk-7PPAI3MM.cjs +1 -0
- package/dist/chunk-7SPPGTBT.cjs +1 -0
- package/dist/chunk-7W456HZL.js +1 -0
- package/dist/chunk-7WEIVLG3.cjs +1 -0
- package/dist/chunk-7YFUAGIW.cjs +1 -0
- package/dist/chunk-ABA7B5DE.js +1 -0
- package/dist/chunk-AC2JBXHQ.js +1 -0
- package/dist/chunk-AHRTNKXE.js +1 -0
- package/dist/chunk-AVTJE2O2.js +1 -0
- package/dist/chunk-B2BWBKZA.cjs +1 -0
- package/dist/chunk-BSUHBLZO.cjs +1 -0
- package/dist/chunk-BYV75TDY.cjs +1 -0
- package/dist/chunk-BZF3ZOAN.js +1 -0
- package/dist/chunk-CEMOHO3Z.js +1 -0
- package/dist/chunk-COXN6XBA.js +1 -0
- package/dist/chunk-CVOSWGQZ.js +1 -0
- package/dist/chunk-EFCNLYYW.cjs +1 -0
- package/dist/chunk-EGQ2Q37R.cjs +1 -0
- package/dist/chunk-EIXD3Y4R.js +1 -0
- package/dist/chunk-EVRQYWZ3.cjs +1 -0
- package/dist/chunk-FUENXWR7.cjs +1 -0
- package/dist/chunk-G35BR7SK.cjs +1 -0
- package/dist/chunk-G5ZSOVJY.cjs +1 -0
- package/dist/chunk-G6TR5RGR.js +1 -0
- package/dist/chunk-GUJB555L.js +1 -0
- package/dist/chunk-HD3TMQPR.js +1 -0
- package/dist/chunk-HWZTMVQV.cjs +1 -0
- package/dist/chunk-IOX4WPJL.cjs +1 -0
- package/dist/chunk-ITRGJNWL.cjs +1 -0
- package/dist/chunk-J4VRJVTO.cjs +1 -0
- package/dist/chunk-JEHIMQQZ.js +1 -0
- package/dist/chunk-JUOCEYUF.cjs +1 -0
- package/dist/chunk-JZROH43C.js +1 -0
- package/dist/chunk-K2JCGDU7.cjs +1 -0
- package/dist/chunk-LR4VUFOQ.js +1 -0
- package/dist/chunk-LXQT7FH6.cjs +1 -0
- package/dist/chunk-LYVCB45L.js +1 -0
- package/dist/chunk-M5IBD3KV.js +1 -0
- package/dist/chunk-MLJZU63I.cjs +1 -0
- package/dist/chunk-MLSE5XSB.cjs +1 -0
- package/dist/chunk-MRZOLUSF.js +1 -0
- package/dist/chunk-MVCGR7JQ.js +1 -0
- package/dist/chunk-NLD4R74T.js +1 -0
- package/dist/chunk-OEN63W3G.cjs +1 -0
- package/dist/chunk-OUWOPYAX.js +1 -0
- package/dist/chunk-OZ3RIKZO.cjs +1 -0
- package/dist/chunk-PEYPRWZP.js +1 -0
- package/dist/chunk-PMNNV4ML.cjs +1 -0
- package/dist/chunk-PVHTEE5T.cjs +1 -0
- package/dist/chunk-Q6QMSAJR.js +1 -0
- package/dist/chunk-QBAURT3I.js +1 -0
- package/dist/chunk-QF5CRDZI.js +1 -0
- package/dist/chunk-RC2THAIA.js +1 -0
- package/dist/chunk-RPRISB7O.cjs +1 -0
- package/dist/chunk-SD4IIQ2I.cjs +1 -0
- package/dist/chunk-TGPWW7FC.js +1 -0
- package/dist/chunk-TJFZAMBB.js +1 -0
- package/dist/chunk-UL6MF7ES.js +1 -0
- package/dist/{chunk-4WFEVNXW.cjs → chunk-V45EOCAD.cjs} +3 -2
- package/dist/chunk-V45EOCAD.cjs.map +1 -0
- package/dist/chunk-V77N662N.cjs +1 -0
- package/dist/chunk-VD6S2PE4.js +1 -0
- package/dist/chunk-VXMDVKAD.js +1 -0
- package/dist/chunk-WW2DDHCI.js +1 -0
- package/dist/chunk-XPIBRXTW.cjs +1 -0
- package/dist/chunk-XQUZ7DUN.js +1 -0
- package/dist/chunk-YNSODGYK.js +1 -0
- package/dist/chunk-ZC4HJSII.cjs +1 -0
- package/dist/chunk-ZEJAFIOC.js +1 -0
- package/dist/chunk-ZQDFYSZB.cjs +1 -0
- package/dist/chunk-ZYP2PDSX.cjs +1 -0
- package/dist/components/core/accordion.cjs +1 -0
- package/dist/components/core/accordion.js +1 -0
- package/dist/components/core/alert.cjs +1 -0
- package/dist/components/core/alert.js +1 -0
- package/dist/components/core/avatar.cjs +1 -0
- package/dist/components/core/avatar.js +1 -0
- package/dist/components/core/badge.cjs +1 -0
- package/dist/components/core/badge.d.cts +1 -1
- package/dist/components/core/badge.d.ts +1 -1
- package/dist/components/core/badge.js +1 -0
- package/dist/components/core/breadcrumb.cjs +1 -0
- package/dist/components/core/breadcrumb.d.cts +2 -2
- package/dist/components/core/breadcrumb.d.ts +2 -2
- package/dist/components/core/breadcrumb.js +1 -0
- package/dist/components/core/button.cjs +1 -0
- package/dist/components/core/button.js +1 -0
- package/dist/components/core/calendar.cjs +1 -0
- package/dist/components/core/calendar.js +1 -0
- package/dist/components/core/card.cjs +1 -0
- package/dist/components/core/card.js +1 -0
- package/dist/components/core/charts-lazy.cjs +1 -0
- package/dist/components/core/charts-lazy.js +1 -0
- package/dist/components/core/charts.cjs +1 -0
- package/dist/components/core/charts.js +1 -0
- package/dist/components/core/checkbox.cjs +1 -0
- package/dist/components/core/checkbox.js +1 -0
- package/dist/components/core/data-table.cjs +1 -0
- package/dist/components/core/data-table.d.cts +2 -2
- package/dist/components/core/data-table.d.ts +2 -2
- package/dist/components/core/data-table.js +1 -0
- package/dist/components/core/dialog.cjs +1 -0
- package/dist/components/core/dialog.js +1 -0
- package/dist/components/core/error-boundary.cjs +1 -0
- package/dist/components/core/error-boundary.d.cts +1 -1
- package/dist/components/core/error-boundary.d.ts +1 -1
- package/dist/components/core/error-boundary.js +1 -0
- package/dist/components/core/error-message.cjs +1 -0
- package/dist/components/core/error-message.js +1 -0
- package/dist/components/core/helper-text.cjs +1 -0
- package/dist/components/core/helper-text.js +1 -0
- package/dist/components/core/icon.cjs +1 -0
- package/dist/components/core/icon.d.cts +2 -2
- package/dist/components/core/icon.d.ts +2 -2
- package/dist/components/core/icon.js +1 -0
- package/dist/components/core/input.cjs +1 -0
- package/dist/components/core/input.js +1 -0
- package/dist/components/core/label.cjs +1 -0
- package/dist/components/core/label.d.cts +1 -1
- package/dist/components/core/label.d.ts +1 -1
- package/dist/components/core/label.js +1 -0
- package/dist/components/core/pagination.cjs +1 -0
- package/dist/components/core/pagination.js +1 -0
- package/dist/components/core/progress.cjs +1 -0
- package/dist/components/core/progress.js +1 -0
- package/dist/components/core/radio-group.cjs +1 -0
- package/dist/components/core/radio-group.js +1 -0
- package/dist/components/core/select.cjs +1 -0
- package/dist/components/core/select.js +1 -0
- package/dist/components/core/separator.cjs +1 -0
- package/dist/components/core/separator.js +1 -0
- package/dist/components/core/skeleton.cjs +1 -0
- package/dist/components/core/skeleton.js +1 -0
- package/dist/components/core/switch.cjs +1 -0
- package/dist/components/core/switch.js +1 -0
- package/dist/components/core/table.cjs +1 -0
- package/dist/components/core/table.js +1 -0
- package/dist/components/core/tabs.cjs +1 -0
- package/dist/components/core/tabs.js +1 -0
- package/dist/components/core/textarea.cjs +2 -1
- package/dist/components/core/textarea.js +2 -1
- package/dist/components/core/toast.cjs +1 -0
- package/dist/components/core/toast.js +1 -0
- package/dist/components/core/tooltip.cjs +1 -0
- package/dist/components/core/tooltip.js +1 -0
- package/dist/components/marketing/features.cjs +1 -0
- package/dist/components/marketing/features.d.cts +1 -1
- package/dist/components/marketing/features.d.ts +1 -1
- package/dist/components/marketing/features.js +1 -0
- package/dist/components/marketing/gallery.cjs +1 -0
- package/dist/components/marketing/gallery.js +1 -0
- package/dist/components/marketing/hero.cjs +1 -0
- package/dist/components/marketing/hero.js +1 -0
- package/dist/components/marketing/logo-wall.cjs +1 -0
- package/dist/components/marketing/logo-wall.js +1 -0
- package/dist/components/marketing/pricing.cjs +1 -0
- package/dist/components/marketing/pricing.js +1 -0
- package/dist/components/marketing/testimonials.cjs +1 -0
- package/dist/components/marketing/testimonials.js +1 -0
- package/dist/index.cjs +2 -1
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.js +2 -1
- package/dist/lib/lazy.cjs +1 -0
- package/dist/lib/lazy.d.cts +3 -3
- package/dist/lib/lazy.d.ts +3 -3
- package/dist/lib/lazy.js +1 -0
- package/dist/lib/performance.cjs +1 -0
- package/dist/lib/performance.js +1 -0
- package/dist/themes/lv-426.css +48 -52
- package/dist/themes/mother.css +52 -58
- package/dist/themes/nostromo.css +35 -30
- package/dist/themes/sulaco.css +47 -51
- package/dist/tokens.css +1 -1
- package/package.json +31 -4
- package/dist/chunk-4WFEVNXW.cjs.map +0 -1
- package/dist/chunk-SLGMKBST.js +0 -2
- package/dist/chunk-SLGMKBST.js.map +0 -1
package/dist/themes/mother.css
CHANGED
|
@@ -80,34 +80,32 @@
|
|
|
80
80
|
--nostromo-color-info-950: 210 100% 5%;
|
|
81
81
|
|
|
82
82
|
/* Semantic Colors */
|
|
83
|
-
--nostromo-color-background:
|
|
84
|
-
--nostromo-color-foreground:
|
|
85
|
-
--nostromo-color-muted:
|
|
86
|
-
--nostromo-color-muted-foreground:
|
|
87
|
-
--nostromo-color-popover:
|
|
88
|
-
--nostromo-color-popover-foreground:
|
|
89
|
-
--nostromo-color-card:
|
|
90
|
-
--nostromo-color-card-foreground:
|
|
91
|
-
--nostromo-color-border:
|
|
92
|
-
--nostromo-color-input:
|
|
83
|
+
--nostromo-color-background: var(--nostromo-color-neutral-50);
|
|
84
|
+
--nostromo-color-foreground: var(--nostromo-color-neutral-900);
|
|
85
|
+
--nostromo-color-muted: var(--nostromo-color-neutral-100);
|
|
86
|
+
--nostromo-color-muted-foreground: var(--nostromo-color-neutral-600);
|
|
87
|
+
--nostromo-color-popover: var(--nostromo-color-neutral-50);
|
|
88
|
+
--nostromo-color-popover-foreground: var(--nostromo-color-neutral-900);
|
|
89
|
+
--nostromo-color-card: var(--nostromo-color-neutral-50);
|
|
90
|
+
--nostromo-color-card-foreground: var(--nostromo-color-neutral-900);
|
|
91
|
+
--nostromo-color-border: var(--nostromo-color-neutral-200);
|
|
92
|
+
--nostromo-color-input: var(--nostromo-color-neutral-200);
|
|
93
93
|
/* Contrast validated: primary-foreground/primary 4.52:1 */
|
|
94
|
-
--nostromo-color-primary:
|
|
95
|
-
--nostromo-color-primary-foreground:
|
|
96
|
-
|
|
97
|
-
); /*
|
|
98
|
-
--nostromo-color-secondary:
|
|
99
|
-
--nostromo-color-secondary-foreground:
|
|
100
|
-
--nostromo-color-accent:
|
|
101
|
-
--nostromo-color-accent-foreground:
|
|
102
|
-
--nostromo-color-destructive:
|
|
103
|
-
--nostromo-color-destructive-foreground:
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
--nostromo-color-
|
|
107
|
-
--nostromo-color-
|
|
108
|
-
--nostromo-color-
|
|
109
|
-
--nostromo-color-info-foreground: hsl(var(--nostromo-color-neutral-50));
|
|
110
|
-
--nostromo-color-ring: hsl(var(--nostromo-color-brand-500));
|
|
94
|
+
--nostromo-color-primary: var(--nostromo-color-brand-500);
|
|
95
|
+
--nostromo-color-primary-foreground: var(
|
|
96
|
+
--nostromo-color-neutral-900
|
|
97
|
+
); /* Dark: white on this cyan is 2.12:1 */
|
|
98
|
+
--nostromo-color-secondary: var(--nostromo-color-neutral-100);
|
|
99
|
+
--nostromo-color-secondary-foreground: var(--nostromo-color-neutral-900);
|
|
100
|
+
--nostromo-color-accent: var(--nostromo-color-brand-100);
|
|
101
|
+
--nostromo-color-accent-foreground: var(--nostromo-color-brand-900);
|
|
102
|
+
--nostromo-color-destructive: var(--nostromo-color-error-600);
|
|
103
|
+
--nostromo-color-destructive-foreground: var(--nostromo-color-neutral-50);
|
|
104
|
+
--nostromo-color-success-foreground: 0 0% 9%;
|
|
105
|
+
--nostromo-color-warning-foreground: 0 0% 9%;
|
|
106
|
+
--nostromo-color-error-foreground: 0 0% 98%;
|
|
107
|
+
--nostromo-color-info-foreground: 0 0% 9%;
|
|
108
|
+
--nostromo-color-ring: var(--nostromo-color-brand-500);
|
|
111
109
|
|
|
112
110
|
/* Typography */
|
|
113
111
|
--nostromo-font-sans:
|
|
@@ -166,41 +164,37 @@
|
|
|
166
164
|
/* Dark mode overrides for Mother theme */
|
|
167
165
|
/* Contrast validated: All combinations meet WCAG AA */
|
|
168
166
|
[data-theme="mother"][data-color-scheme="dark"] {
|
|
169
|
-
--nostromo-color-background:
|
|
170
|
-
--nostromo-color-foreground:
|
|
171
|
-
--nostromo-color-muted:
|
|
172
|
-
--nostromo-color-muted-foreground:
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
--nostromo-color-popover: hsl(
|
|
176
|
-
var(--nostromo-color-neutral-900)
|
|
167
|
+
--nostromo-color-background: var(--nostromo-color-neutral-900);
|
|
168
|
+
--nostromo-color-foreground: var(--nostromo-color-neutral-50);
|
|
169
|
+
--nostromo-color-muted: var(--nostromo-color-neutral-800);
|
|
170
|
+
--nostromo-color-muted-foreground: 0 0% 65%; /* Adjusted for 4.5:1 contrast */
|
|
171
|
+
--nostromo-color-popover: var(
|
|
172
|
+
--nostromo-color-neutral-900
|
|
177
173
|
); /* Changed from 800 to 900 for better contrast */
|
|
178
|
-
--nostromo-color-popover-foreground:
|
|
179
|
-
--nostromo-color-card:
|
|
180
|
-
|
|
174
|
+
--nostromo-color-popover-foreground: var(--nostromo-color-neutral-50);
|
|
175
|
+
--nostromo-color-card: var(
|
|
176
|
+
--nostromo-color-neutral-900
|
|
181
177
|
); /* Changed from 800 to 900 for better contrast */
|
|
182
|
-
--nostromo-color-card-foreground:
|
|
183
|
-
--nostromo-color-border:
|
|
184
|
-
--nostromo-color-input:
|
|
185
|
-
--nostromo-color-primary:
|
|
186
|
-
|
|
178
|
+
--nostromo-color-card-foreground: var(--nostromo-color-neutral-50);
|
|
179
|
+
--nostromo-color-border: var(--nostromo-color-neutral-700);
|
|
180
|
+
--nostromo-color-input: var(--nostromo-color-neutral-700);
|
|
181
|
+
--nostromo-color-primary: var(
|
|
182
|
+
--nostromo-color-brand-300
|
|
187
183
|
); /* Lighter for better contrast with dark text */
|
|
188
|
-
--nostromo-color-primary-foreground:
|
|
189
|
-
--nostromo-color-secondary:
|
|
190
|
-
|
|
184
|
+
--nostromo-color-primary-foreground: var(--nostromo-color-neutral-900);
|
|
185
|
+
--nostromo-color-secondary: var(
|
|
186
|
+
--nostromo-color-neutral-900
|
|
191
187
|
); /* Changed from 700 to 900 for better contrast */
|
|
192
|
-
--nostromo-color-secondary-foreground:
|
|
193
|
-
--nostromo-color-accent:
|
|
194
|
-
--nostromo-color-accent-foreground:
|
|
195
|
-
--nostromo-color-destructive:
|
|
196
|
-
--nostromo-color-destructive-foreground:
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
--nostromo-color-
|
|
200
|
-
--nostromo-color-
|
|
201
|
-
--nostromo-color-
|
|
202
|
-
--nostromo-color-info-foreground: hsl(var(--nostromo-color-neutral-50));
|
|
203
|
-
--nostromo-color-ring: hsl(var(--nostromo-color-brand-400));
|
|
188
|
+
--nostromo-color-secondary-foreground: var(--nostromo-color-neutral-50);
|
|
189
|
+
--nostromo-color-accent: var(--nostromo-color-brand-800);
|
|
190
|
+
--nostromo-color-accent-foreground: var(--nostromo-color-brand-100);
|
|
191
|
+
--nostromo-color-destructive: var(--nostromo-color-error-400);
|
|
192
|
+
--nostromo-color-destructive-foreground: var(--nostromo-color-neutral-900);
|
|
193
|
+
--nostromo-color-success-foreground: 0 0% 9%;
|
|
194
|
+
--nostromo-color-warning-foreground: 0 0% 9%;
|
|
195
|
+
--nostromo-color-error-foreground: 0 0% 98%;
|
|
196
|
+
--nostromo-color-info-foreground: 0 0% 9%;
|
|
197
|
+
--nostromo-color-ring: var(--nostromo-color-brand-400);
|
|
204
198
|
}
|
|
205
199
|
|
|
206
200
|
/* Mother theme specific styles */
|
package/dist/themes/nostromo.css
CHANGED
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
--nostromo-color-error-300: 0 84% 70%;
|
|
61
61
|
--nostromo-color-error-400: 0 84% 60%;
|
|
62
62
|
--nostromo-color-error-500: 0 84% 60%;
|
|
63
|
-
--nostromo-color-error-600: 0 84%
|
|
63
|
+
--nostromo-color-error-600: 0 84% 48%;
|
|
64
64
|
--nostromo-color-error-700: 0 84% 40%;
|
|
65
65
|
--nostromo-color-error-800: 0 84% 30%;
|
|
66
66
|
--nostromo-color-error-900: 0 84% 20%;
|
|
@@ -179,12 +179,12 @@
|
|
|
179
179
|
--nostromo-color-secondary-foreground: 0 0% 9%;
|
|
180
180
|
--nostromo-color-accent: 262 84% 90%;
|
|
181
181
|
--nostromo-color-accent-foreground: 262 84% 15%;
|
|
182
|
-
--nostromo-color-destructive: 0 84%
|
|
182
|
+
--nostromo-color-destructive: 0 84% 48%;
|
|
183
183
|
--nostromo-color-destructive-foreground: 0 0% 98%;
|
|
184
|
-
--nostromo-color-success-foreground: 0 0%
|
|
184
|
+
--nostromo-color-success-foreground: 0 0% 9%;
|
|
185
185
|
--nostromo-color-warning-foreground: 0 0% 9%;
|
|
186
186
|
--nostromo-color-error-foreground: 0 0% 98%;
|
|
187
|
-
--nostromo-color-info-foreground: 0 0%
|
|
187
|
+
--nostromo-color-info-foreground: 0 0% 9%;
|
|
188
188
|
--nostromo-color-ring: 262 84% 52%;
|
|
189
189
|
}
|
|
190
190
|
|
|
@@ -240,32 +240,36 @@
|
|
|
240
240
|
/* Note: Use DIRECT raw HSL values, NOT var() references */
|
|
241
241
|
--nostromo-color-background: 0 0% 9%; /* Dark background - using neutral-900 value directly */
|
|
242
242
|
--nostromo-color-foreground: 0 0% 95%; /* Light text on dark background */
|
|
243
|
-
--nostromo-color-muted: 0 0%
|
|
244
|
-
--nostromo-color-muted-foreground: 0 0% 65%; /*
|
|
245
|
-
--nostromo-color-popover: 0 0%
|
|
243
|
+
--nostromo-color-muted: 0 0% 20%;
|
|
244
|
+
--nostromo-color-muted-foreground: 0 0% 65%; /* 5.2:1 against muted (20%) */
|
|
245
|
+
--nostromo-color-popover: 0 0% 15%; /* Dark popover background */
|
|
246
246
|
--nostromo-color-popover-foreground: 0 0% 95%; /* Light text on dark popover */
|
|
247
|
-
--nostromo-color-card: 0 0%
|
|
247
|
+
--nostromo-color-card: 0 0% 15%;
|
|
248
248
|
--nostromo-color-card-foreground: 0 0% 95%;
|
|
249
249
|
--nostromo-color-border: 0 0% 75%;
|
|
250
250
|
--nostromo-color-input: 0 0% 75%;
|
|
251
251
|
--nostromo-color-primary: 262 84% 60%;
|
|
252
|
-
--nostromo-color-primary-foreground: 0 0%
|
|
253
|
-
--nostromo-color-secondary: 0 0%
|
|
252
|
+
--nostromo-color-primary-foreground: 0 0% 98%;
|
|
253
|
+
--nostromo-color-secondary: 0 0% 20%;
|
|
254
254
|
--nostromo-color-secondary-foreground: 0 0% 95%;
|
|
255
255
|
--nostromo-color-accent: 262 84% 25%;
|
|
256
256
|
--nostromo-color-accent-foreground: 262 84% 90%;
|
|
257
|
-
--nostromo-color-destructive: 0 84%
|
|
258
|
-
--nostromo-color-destructive-foreground: 0 0%
|
|
259
|
-
--nostromo-color-success-foreground: 0 0% 9%;
|
|
260
|
-
--nostromo-color-warning-foreground: 0 0%
|
|
261
|
-
--nostromo-color-error-foreground: 0 0%
|
|
262
|
-
--nostromo-color-info-foreground: 0 0% 9%;
|
|
257
|
+
--nostromo-color-destructive: 0 84% 48%;
|
|
258
|
+
--nostromo-color-destructive-foreground: 0 0% 98%;
|
|
259
|
+
--nostromo-color-success-foreground: 0 0% 9%;
|
|
260
|
+
--nostromo-color-warning-foreground: 0 0% 9%;
|
|
261
|
+
--nostromo-color-error-foreground: 0 0% 98%;
|
|
262
|
+
--nostromo-color-info-foreground: 0 0% 9%;
|
|
263
263
|
--nostromo-color-ring: 262 84% 60%;
|
|
264
264
|
}
|
|
265
265
|
|
|
266
266
|
/* System Preference Dark Mode */
|
|
267
|
+
/* OS preference acts as the default only. The guard matters: without it this
|
|
268
|
+
* block has the same specificity as the base [data-theme] rule but comes later,
|
|
269
|
+
* so on a dark-OS machine it beat an explicit data-color-scheme="light" and the
|
|
270
|
+
* light scheme could not be selected at all. */
|
|
267
271
|
@media (prefers-color-scheme: dark) {
|
|
268
|
-
[data-theme="nostromo"] {
|
|
272
|
+
[data-theme="nostromo"]:not([data-color-scheme]) {
|
|
269
273
|
/* Invert neutral colors for dark mode */
|
|
270
274
|
--nostromo-color-neutral-50: 0 0% 9%;
|
|
271
275
|
--nostromo-color-neutral-100: 0 0% 15%;
|
|
@@ -285,31 +289,32 @@
|
|
|
285
289
|
--nostromo-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.4);
|
|
286
290
|
--nostromo-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.4);
|
|
287
291
|
|
|
288
|
-
/* Semantic Colors - Dark mode overrides
|
|
292
|
+
/* Semantic Colors - Dark mode overrides */
|
|
293
|
+
/* Contrast validated: foreground/background 17.18:1, muted-foreground/muted 4.51:1 */
|
|
289
294
|
/* IMPORTANT: In dark mode, neutral-950 is 98% (light), so we use neutral-900 (95%) for dark background */
|
|
290
295
|
/* Note: Use DIRECT raw HSL values, NOT var() references */
|
|
291
296
|
--nostromo-color-background: 0 0% 9%; /* Dark background - using neutral-900 value directly */
|
|
292
297
|
--nostromo-color-foreground: 0 0% 95%; /* Light text on dark background */
|
|
293
|
-
--nostromo-color-muted: 0 0%
|
|
294
|
-
--nostromo-color-muted-foreground: 0 0% 65%; /*
|
|
295
|
-
--nostromo-color-popover: 0 0%
|
|
298
|
+
--nostromo-color-muted: 0 0% 20%;
|
|
299
|
+
--nostromo-color-muted-foreground: 0 0% 65%; /* 5.2:1 against muted (20%) */
|
|
300
|
+
--nostromo-color-popover: 0 0% 15%; /* Dark popover background */
|
|
296
301
|
--nostromo-color-popover-foreground: 0 0% 95%; /* Light text on dark popover */
|
|
297
|
-
--nostromo-color-card: 0 0%
|
|
302
|
+
--nostromo-color-card: 0 0% 15%;
|
|
298
303
|
--nostromo-color-card-foreground: 0 0% 95%;
|
|
299
304
|
--nostromo-color-border: 0 0% 75%;
|
|
300
305
|
--nostromo-color-input: 0 0% 75%;
|
|
301
306
|
--nostromo-color-primary: 262 84% 60%;
|
|
302
|
-
--nostromo-color-primary-foreground: 0 0%
|
|
303
|
-
--nostromo-color-secondary: 0 0%
|
|
307
|
+
--nostromo-color-primary-foreground: 0 0% 98%;
|
|
308
|
+
--nostromo-color-secondary: 0 0% 20%;
|
|
304
309
|
--nostromo-color-secondary-foreground: 0 0% 95%;
|
|
305
310
|
--nostromo-color-accent: 262 84% 25%;
|
|
306
311
|
--nostromo-color-accent-foreground: 262 84% 90%;
|
|
307
|
-
--nostromo-color-destructive: 0 84%
|
|
308
|
-
--nostromo-color-destructive-foreground: 0 0%
|
|
309
|
-
--nostromo-color-success-foreground: 0 0% 9%;
|
|
310
|
-
--nostromo-color-warning-foreground: 0 0%
|
|
311
|
-
--nostromo-color-error-foreground: 0 0%
|
|
312
|
-
--nostromo-color-info-foreground: 0 0% 9%;
|
|
312
|
+
--nostromo-color-destructive: 0 84% 48%;
|
|
313
|
+
--nostromo-color-destructive-foreground: 0 0% 98%;
|
|
314
|
+
--nostromo-color-success-foreground: 0 0% 9%;
|
|
315
|
+
--nostromo-color-warning-foreground: 0 0% 9%;
|
|
316
|
+
--nostromo-color-error-foreground: 0 0% 98%;
|
|
317
|
+
--nostromo-color-info-foreground: 0 0% 9%;
|
|
313
318
|
--nostromo-color-ring: 262 84% 60%;
|
|
314
319
|
}
|
|
315
320
|
}
|
package/dist/themes/sulaco.css
CHANGED
|
@@ -80,34 +80,32 @@
|
|
|
80
80
|
--nostromo-color-info-950: 210 100% 5%;
|
|
81
81
|
|
|
82
82
|
/* Semantic Colors */
|
|
83
|
-
--nostromo-color-background:
|
|
84
|
-
--nostromo-color-foreground:
|
|
85
|
-
--nostromo-color-muted:
|
|
86
|
-
--nostromo-color-muted-foreground:
|
|
87
|
-
--nostromo-color-popover:
|
|
88
|
-
--nostromo-color-popover-foreground:
|
|
89
|
-
--nostromo-color-card:
|
|
90
|
-
--nostromo-color-card-foreground:
|
|
91
|
-
--nostromo-color-border:
|
|
92
|
-
--nostromo-color-input:
|
|
83
|
+
--nostromo-color-background: var(--nostromo-color-neutral-50);
|
|
84
|
+
--nostromo-color-foreground: var(--nostromo-color-neutral-900);
|
|
85
|
+
--nostromo-color-muted: var(--nostromo-color-neutral-100);
|
|
86
|
+
--nostromo-color-muted-foreground: var(--nostromo-color-neutral-600);
|
|
87
|
+
--nostromo-color-popover: var(--nostromo-color-neutral-50);
|
|
88
|
+
--nostromo-color-popover-foreground: var(--nostromo-color-neutral-900);
|
|
89
|
+
--nostromo-color-card: var(--nostromo-color-neutral-50);
|
|
90
|
+
--nostromo-color-card-foreground: var(--nostromo-color-neutral-900);
|
|
91
|
+
--nostromo-color-border: var(--nostromo-color-neutral-200);
|
|
92
|
+
--nostromo-color-input: var(--nostromo-color-neutral-200);
|
|
93
93
|
/* Contrast validated: primary-foreground/primary 4.52:1 */
|
|
94
|
-
--nostromo-color-primary:
|
|
95
|
-
--nostromo-color-primary-foreground:
|
|
96
|
-
|
|
94
|
+
--nostromo-color-primary: var(--nostromo-color-brand-600);
|
|
95
|
+
--nostromo-color-primary-foreground: var(
|
|
96
|
+
--nostromo-color-neutral-50
|
|
97
97
|
); /* White for better contrast */
|
|
98
|
-
--nostromo-color-secondary:
|
|
99
|
-
--nostromo-color-secondary-foreground:
|
|
100
|
-
--nostromo-color-accent:
|
|
101
|
-
--nostromo-color-accent-foreground:
|
|
102
|
-
--nostromo-color-destructive:
|
|
103
|
-
--nostromo-color-destructive-foreground:
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
--nostromo-color-
|
|
107
|
-
--nostromo-color-
|
|
108
|
-
--nostromo-color-
|
|
109
|
-
--nostromo-color-info-foreground: hsl(var(--nostromo-color-neutral-50));
|
|
110
|
-
--nostromo-color-ring: hsl(var(--nostromo-color-brand-500));
|
|
98
|
+
--nostromo-color-secondary: var(--nostromo-color-neutral-100);
|
|
99
|
+
--nostromo-color-secondary-foreground: var(--nostromo-color-neutral-900);
|
|
100
|
+
--nostromo-color-accent: var(--nostromo-color-brand-100);
|
|
101
|
+
--nostromo-color-accent-foreground: var(--nostromo-color-brand-900);
|
|
102
|
+
--nostromo-color-destructive: var(--nostromo-color-error-600);
|
|
103
|
+
--nostromo-color-destructive-foreground: var(--nostromo-color-neutral-50);
|
|
104
|
+
--nostromo-color-success-foreground: 0 0% 9%;
|
|
105
|
+
--nostromo-color-warning-foreground: 0 0% 9%;
|
|
106
|
+
--nostromo-color-error-foreground: 0 0% 98%;
|
|
107
|
+
--nostromo-color-info-foreground: 0 0% 9%;
|
|
108
|
+
--nostromo-color-ring: var(--nostromo-color-brand-500);
|
|
111
109
|
|
|
112
110
|
/* Typography */
|
|
113
111
|
--nostromo-font-sans:
|
|
@@ -165,31 +163,29 @@
|
|
|
165
163
|
|
|
166
164
|
/* Dark mode overrides for Sulaco theme */
|
|
167
165
|
[data-theme="sulaco"][data-color-scheme="dark"] {
|
|
168
|
-
--nostromo-color-background:
|
|
169
|
-
--nostromo-color-foreground:
|
|
170
|
-
--nostromo-color-muted:
|
|
171
|
-
--nostromo-color-muted-foreground:
|
|
172
|
-
--nostromo-color-popover:
|
|
173
|
-
--nostromo-color-popover-foreground:
|
|
174
|
-
--nostromo-color-card:
|
|
175
|
-
--nostromo-color-card-foreground:
|
|
176
|
-
--nostromo-color-border:
|
|
177
|
-
--nostromo-color-input:
|
|
178
|
-
--nostromo-color-primary:
|
|
179
|
-
--nostromo-color-primary-foreground:
|
|
180
|
-
--nostromo-color-secondary:
|
|
181
|
-
--nostromo-color-secondary-foreground:
|
|
182
|
-
--nostromo-color-accent:
|
|
183
|
-
--nostromo-color-accent-foreground:
|
|
184
|
-
--nostromo-color-destructive:
|
|
185
|
-
--nostromo-color-destructive-foreground:
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
--nostromo-color-
|
|
189
|
-
--nostromo-color-
|
|
190
|
-
--nostromo-color-
|
|
191
|
-
--nostromo-color-info-foreground: hsl(var(--nostromo-color-neutral-50));
|
|
192
|
-
--nostromo-color-ring: hsl(var(--nostromo-color-brand-400));
|
|
166
|
+
--nostromo-color-background: var(--nostromo-color-neutral-900);
|
|
167
|
+
--nostromo-color-foreground: var(--nostromo-color-neutral-50);
|
|
168
|
+
--nostromo-color-muted: var(--nostromo-color-neutral-800);
|
|
169
|
+
--nostromo-color-muted-foreground: var(--nostromo-color-neutral-400);
|
|
170
|
+
--nostromo-color-popover: var(--nostromo-color-neutral-800);
|
|
171
|
+
--nostromo-color-popover-foreground: var(--nostromo-color-neutral-50);
|
|
172
|
+
--nostromo-color-card: var(--nostromo-color-neutral-800);
|
|
173
|
+
--nostromo-color-card-foreground: var(--nostromo-color-neutral-50);
|
|
174
|
+
--nostromo-color-border: var(--nostromo-color-neutral-700);
|
|
175
|
+
--nostromo-color-input: var(--nostromo-color-neutral-700);
|
|
176
|
+
--nostromo-color-primary: var(--nostromo-color-brand-400);
|
|
177
|
+
--nostromo-color-primary-foreground: var(--nostromo-color-neutral-900);
|
|
178
|
+
--nostromo-color-secondary: var(--nostromo-color-neutral-700);
|
|
179
|
+
--nostromo-color-secondary-foreground: var(--nostromo-color-neutral-50);
|
|
180
|
+
--nostromo-color-accent: var(--nostromo-color-brand-800);
|
|
181
|
+
--nostromo-color-accent-foreground: var(--nostromo-color-brand-100);
|
|
182
|
+
--nostromo-color-destructive: var(--nostromo-color-error-400);
|
|
183
|
+
--nostromo-color-destructive-foreground: var(--nostromo-color-neutral-900);
|
|
184
|
+
--nostromo-color-success-foreground: 0 0% 9%;
|
|
185
|
+
--nostromo-color-warning-foreground: 0 0% 9%;
|
|
186
|
+
--nostromo-color-error-foreground: 0 0% 98%;
|
|
187
|
+
--nostromo-color-info-foreground: 0 0% 9%;
|
|
188
|
+
--nostromo-color-ring: var(--nostromo-color-brand-400);
|
|
193
189
|
}
|
|
194
190
|
|
|
195
191
|
/* Sulaco theme specific styles */
|
package/dist/tokens.css
CHANGED
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
--color-success-foreground: hsl(var(--nostromo-color-success-foreground));
|
|
112
112
|
--color-warning: hsl(var(--nostromo-color-warning-500));
|
|
113
113
|
--color-warning-foreground: hsl(var(--nostromo-color-warning-foreground));
|
|
114
|
-
--color-error: hsl(var(--nostromo-color-error-
|
|
114
|
+
--color-error: hsl(var(--nostromo-color-error-600));
|
|
115
115
|
--color-error-foreground: hsl(var(--nostromo-color-error-foreground));
|
|
116
116
|
--color-info: hsl(var(--nostromo-color-info-500));
|
|
117
117
|
--color-info-foreground: hsl(var(--nostromo-color-info-foreground));
|
package/package.json
CHANGED
|
@@ -1,7 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jarllyng/nostromo",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "3.2.0",
|
|
4
|
+
"description": "Accessible React component library with CSS-first Tailwind v4 theming",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"react",
|
|
7
|
+
"ui",
|
|
8
|
+
"components",
|
|
9
|
+
"component-library",
|
|
10
|
+
"design-system",
|
|
11
|
+
"tailwind",
|
|
12
|
+
"tailwindcss",
|
|
13
|
+
"tailwind-v4",
|
|
14
|
+
"accessibility",
|
|
15
|
+
"a11y",
|
|
16
|
+
"wcag",
|
|
17
|
+
"radix-ui",
|
|
18
|
+
"typescript"
|
|
19
|
+
],
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"author": "Jarl Lyng",
|
|
22
|
+
"homepage": "https://jarllyng.github.io/nostromo-ui/",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://github.com/JarlLyng/nostromo-ui.git",
|
|
26
|
+
"directory": "packages/nostromo"
|
|
27
|
+
},
|
|
28
|
+
"bugs": {
|
|
29
|
+
"url": "https://github.com/JarlLyng/nostromo-ui/issues"
|
|
30
|
+
},
|
|
5
31
|
"type": "module",
|
|
6
32
|
"main": "./dist/index.cjs",
|
|
7
33
|
"module": "./dist/index.js",
|
|
@@ -259,8 +285,9 @@
|
|
|
259
285
|
"@testing-library/react": "^16.3.2",
|
|
260
286
|
"@testing-library/user-event": "^14.6.1",
|
|
261
287
|
"@types/jest-axe": "^3.5.9",
|
|
262
|
-
"@types/
|
|
263
|
-
"@types/react
|
|
288
|
+
"@types/node": "25.0.10",
|
|
289
|
+
"@types/react": "19.2.18",
|
|
290
|
+
"@types/react-dom": "19.2.4",
|
|
264
291
|
"@typescript-eslint/eslint-plugin": "^8.65.0",
|
|
265
292
|
"@typescript-eslint/parser": "^8.65.0",
|
|
266
293
|
"@vitejs/plugin-react": "^5.2.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/core/textarea.tsx"],"names":["textareaVariants","cva","Textarea","e","className","label","helperText","error","required","variant","size","autoResize","id","props","ref","generatedId","textareaId","helperTextId","errorId","textareaVariant","textareaRef","combinedRef","node","adjustHeight","handleInput","event","cn"],"mappings":"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","file":"chunk-4WFEVNXW.cjs","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst textareaVariants = cva(\n \"flex min-h-[80px] w-full rounded-md border border-border bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200\",\n {\n variants: {\n variant: {\n default:\n \"border-border focus-visible:ring-ring focus-visible:ring-offset-background\",\n error:\n \"border-destructive focus-visible:ring-destructive focus-visible:ring-offset-background\",\n success:\n \"border-success focus-visible:ring-success focus-visible:ring-offset-background\",\n },\n size: {\n sm: \"min-h-[60px] px-2 py-1 text-xs\",\n default: \"min-h-[80px] px-3 py-2 text-sm\",\n lg: \"min-h-[120px] px-4 py-3 text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface TextareaProps\n extends\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n VariantProps<typeof textareaVariants> {\n label?: string;\n helperText?: string;\n error?: boolean;\n required?: boolean;\n autoResize?: boolean;\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n className,\n label,\n helperText,\n error,\n required,\n variant,\n size,\n autoResize = true,\n id,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const textareaId = id || generatedId;\n const helperTextId = helperText ? `${textareaId}-helper` : undefined;\n const errorId = error ? `${textareaId}-error` : undefined;\n\n const textareaVariant = error ? \"error\" : variant || \"default\";\n\n // Auto-resize functionality\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n const combinedRef = React.useMemo(() => {\n return (node: HTMLTextAreaElement | null) => {\n (\n textareaRef as React.MutableRefObject<HTMLTextAreaElement | null>\n ).current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLTextAreaElement | null>).current =\n node;\n }\n };\n }, [ref]);\n\n const adjustHeight = React.useCallback(() => {\n if (textareaRef.current && autoResize) {\n textareaRef.current.style.height = \"auto\";\n textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;\n }\n }, [autoResize]);\n\n React.useEffect(() => {\n adjustHeight();\n }, [adjustHeight]);\n\n const handleInput = (event: React.FormEvent<HTMLTextAreaElement>) => {\n adjustHeight();\n if (props.onInput) {\n props.onInput(event);\n }\n };\n\n return (\n <div className=\"space-y-2\">\n {label && (\n <label\n htmlFor={textareaId}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n {required && <span className=\"text-error-500 ml-1\">*</span>}\n </label>\n )}\n <textarea\n ref={combinedRef}\n id={textareaId}\n className={cn(\n textareaVariants({ variant: textareaVariant, size }),\n autoResize && \"resize-none\",\n className,\n )}\n aria-describedby={cn(helperTextId, errorId) || undefined}\n aria-invalid={error}\n aria-required={required}\n onInput={handleInput}\n {...props}\n />\n {helperText && (\n <p\n id={helperTextId}\n className={cn(\n \"text-sm text-muted-foreground\",\n error && \"text-destructive\",\n )}\n >\n {helperText}\n </p>\n )}\n </div>\n );\n },\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea, textareaVariants };\n"]}
|
package/dist/chunk-SLGMKBST.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {a}from'./chunk-AC2JBXHQ.js';import*as e from'react';import {cva}from'class-variance-authority';var H=cva("flex min-h-[80px] w-full rounded-md border border-border bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200",{variants:{variant:{default:"border-border focus-visible:ring-ring focus-visible:ring-offset-background",error:"border-destructive focus-visible:ring-destructive focus-visible:ring-offset-background",success:"border-success focus-visible:ring-success focus-visible:ring-offset-background"},size:{sm:"min-h-[60px] px-2 py-1 text-xs",default:"min-h-[80px] px-3 py-2 text-sm",lg:"min-h-[120px] px-4 py-3 text-base"}},defaultVariants:{variant:"default",size:"default"}}),E=e.forwardRef(({className:x,label:d,helperText:o,error:n,required:f,variant:m,size:p,autoResize:l=true,id:g,...c},t)=>{let v=e.useId(),s=g||v,b=o?`${s}-helper`:void 0,T=n?`${s}-error`:void 0,R=n?"error":m||"default",r=e.useRef(null),h=e.useMemo(()=>a=>{r.current=a,typeof t=="function"?t(a):t&&(t.current=a);},[t]),u=e.useCallback(()=>{r.current&&l&&(r.current.style.height="auto",r.current.style.height=`${r.current.scrollHeight}px`);},[l]);e.useEffect(()=>{u();},[u]);let y=a=>{u(),c.onInput&&c.onInput(a);};return e.createElement("div",{className:"space-y-2"},d&&e.createElement("label",{htmlFor:s,className:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"},d,f&&e.createElement("span",{className:"text-error-500 ml-1"},"*")),e.createElement("textarea",{ref:h,id:s,className:a(H({variant:R,size:p}),l&&"resize-none",x),"aria-describedby":a(b,T)||void 0,"aria-invalid":n,"aria-required":f,onInput:y,...c}),o&&e.createElement("p",{id:b,className:a("text-sm text-muted-foreground",n&&"text-destructive")},o))});E.displayName="Textarea";export{H as a,E as b};//# sourceMappingURL=chunk-SLGMKBST.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-SLGMKBST.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/core/textarea.tsx"],"names":["textareaVariants","cva","Textarea","className","label","helperText","error","required","variant","size","autoResize","id","props","ref","generatedId","textareaId","helperTextId","errorId","textareaVariant","textareaRef","combinedRef","node","adjustHeight","handleInput","event","cn"],"mappings":"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","file":"chunk-SLGMKBST.js","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst textareaVariants = cva(\n \"flex min-h-[80px] w-full rounded-md border border-border bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200\",\n {\n variants: {\n variant: {\n default:\n \"border-border focus-visible:ring-ring focus-visible:ring-offset-background\",\n error:\n \"border-destructive focus-visible:ring-destructive focus-visible:ring-offset-background\",\n success:\n \"border-success focus-visible:ring-success focus-visible:ring-offset-background\",\n },\n size: {\n sm: \"min-h-[60px] px-2 py-1 text-xs\",\n default: \"min-h-[80px] px-3 py-2 text-sm\",\n lg: \"min-h-[120px] px-4 py-3 text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface TextareaProps\n extends\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n VariantProps<typeof textareaVariants> {\n label?: string;\n helperText?: string;\n error?: boolean;\n required?: boolean;\n autoResize?: boolean;\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n className,\n label,\n helperText,\n error,\n required,\n variant,\n size,\n autoResize = true,\n id,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const textareaId = id || generatedId;\n const helperTextId = helperText ? `${textareaId}-helper` : undefined;\n const errorId = error ? `${textareaId}-error` : undefined;\n\n const textareaVariant = error ? \"error\" : variant || \"default\";\n\n // Auto-resize functionality\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n const combinedRef = React.useMemo(() => {\n return (node: HTMLTextAreaElement | null) => {\n (\n textareaRef as React.MutableRefObject<HTMLTextAreaElement | null>\n ).current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLTextAreaElement | null>).current =\n node;\n }\n };\n }, [ref]);\n\n const adjustHeight = React.useCallback(() => {\n if (textareaRef.current && autoResize) {\n textareaRef.current.style.height = \"auto\";\n textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;\n }\n }, [autoResize]);\n\n React.useEffect(() => {\n adjustHeight();\n }, [adjustHeight]);\n\n const handleInput = (event: React.FormEvent<HTMLTextAreaElement>) => {\n adjustHeight();\n if (props.onInput) {\n props.onInput(event);\n }\n };\n\n return (\n <div className=\"space-y-2\">\n {label && (\n <label\n htmlFor={textareaId}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n {required && <span className=\"text-error-500 ml-1\">*</span>}\n </label>\n )}\n <textarea\n ref={combinedRef}\n id={textareaId}\n className={cn(\n textareaVariants({ variant: textareaVariant, size }),\n autoResize && \"resize-none\",\n className,\n )}\n aria-describedby={cn(helperTextId, errorId) || undefined}\n aria-invalid={error}\n aria-required={required}\n onInput={handleInput}\n {...props}\n />\n {helperText && (\n <p\n id={helperTextId}\n className={cn(\n \"text-sm text-muted-foreground\",\n error && \"text-destructive\",\n )}\n >\n {helperText}\n </p>\n )}\n </div>\n );\n },\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea, textareaVariants };\n"]}
|