@duskmoon-dev/core 1.1.0 → 1.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.
Files changed (33) hide show
  1. package/dist/components/button.css +47 -46
  2. package/dist/components/checkbox.css +231 -0
  3. package/dist/components/datepicker.css +404 -10
  4. package/dist/components/form-group.css +308 -0
  5. package/dist/components/index.css +4077 -687
  6. package/dist/components/multi-select.css +491 -0
  7. package/dist/components/navigation.css +153 -2
  8. package/dist/components/otp-input.css +195 -0
  9. package/dist/components/pin-input.css +184 -0
  10. package/dist/components/radio.css +183 -0
  11. package/dist/components/segment-control.css +186 -0
  12. package/dist/components/select.css +205 -0
  13. package/dist/components/switch.css +150 -193
  14. package/dist/components/textarea.css +202 -0
  15. package/dist/components/time-input.css +252 -0
  16. package/dist/components/tree-select.css +439 -0
  17. package/dist/esm/components/button.js +47 -46
  18. package/dist/esm/components/checkbox.js +238 -0
  19. package/dist/esm/components/datepicker.js +404 -10
  20. package/dist/esm/components/form-group.js +315 -0
  21. package/dist/esm/components/multi-select.js +498 -0
  22. package/dist/esm/components/navigation.js +153 -2
  23. package/dist/esm/components/otp-input.js +202 -0
  24. package/dist/esm/components/pin-input.js +191 -0
  25. package/dist/esm/components/radio.js +190 -0
  26. package/dist/esm/components/segment-control.js +193 -0
  27. package/dist/esm/components/select.js +212 -0
  28. package/dist/esm/components/switch.js +150 -193
  29. package/dist/esm/components/textarea.js +209 -0
  30. package/dist/esm/components/time-input.js +259 -0
  31. package/dist/esm/components/tree-select.js +446 -0
  32. package/dist/index.css +4073 -683
  33. package/package.json +56 -1
@@ -9,6 +9,7 @@ export const css = `/**
9
9
  .btn {
10
10
  --btn-p: 1.25rem;
11
11
  --btn-py: 0.625rem;
12
+ --btn-text-color: var(--color-on-surface);
12
13
  display: inline-flex;
13
14
  align-items: center;
14
15
  justify-content: center;
@@ -28,7 +29,7 @@ export const css = `/**
28
29
  border-radius: 0.5rem;
29
30
  transition: all 150ms ease-in-out;
30
31
  background-color: var(--color-surface-container);
31
- color: var(--color-on-surface);
32
+ color: var(--btn-text-color);
32
33
  }
33
34
 
34
35
  .btn:hover {
@@ -56,8 +57,8 @@ export const css = `/**
56
57
 
57
58
  /* Primary Button */
58
59
  .btn-primary {
60
+ --btn-text-color: var(--color-primary-content);
59
61
  background-color: var(--color-primary);
60
- color: var(--color-primary-content);
61
62
  border-color: var(--color-primary);
62
63
  }
63
64
 
@@ -73,8 +74,8 @@ export const css = `/**
73
74
 
74
75
  /* Secondary Button */
75
76
  .btn-secondary {
77
+ --btn-text-color: var(--color-secondary-content);
76
78
  background-color: var(--color-secondary);
77
- color: var(--color-secondary-content);
78
79
  border-color: var(--color-secondary);
79
80
  }
80
81
 
@@ -90,8 +91,8 @@ export const css = `/**
90
91
 
91
92
  /* Tertiary Button */
92
93
  .btn-tertiary {
94
+ --btn-text-color: var(--color-tertiary-content);
93
95
  background-color: var(--color-tertiary);
94
- color: var(--color-tertiary-content);
95
96
  border-color: var(--color-tertiary);
96
97
  }
97
98
 
@@ -107,9 +108,9 @@ export const css = `/**
107
108
 
108
109
  /* Outline Variant */
109
110
  .btn-outline {
111
+ --btn-text-color: var(--color-on-surface);
110
112
  background-color: transparent;
111
113
  border: 1px solid var(--color-outline);
112
- color: var(--color-on-surface);
113
114
  }
114
115
 
115
116
  .btn-outline:hover {
@@ -118,40 +119,40 @@ export const css = `/**
118
119
  }
119
120
 
120
121
  .btn-outline.btn-primary {
122
+ --btn-text-color: var(--color-primary);
121
123
  border-color: var(--color-primary);
122
- color: var(--color-primary);
123
124
  }
124
125
 
125
126
  .btn-outline.btn-primary:hover {
127
+ --btn-text-color: var(--color-primary-content);
126
128
  background-color: var(--color-primary);
127
- color: var(--color-primary-content);
128
129
  }
129
130
 
130
131
  .btn-outline.btn-secondary {
132
+ --btn-text-color: var(--color-secondary);
131
133
  border-color: var(--color-secondary);
132
- color: var(--color-secondary);
133
134
  }
134
135
 
135
136
  .btn-outline.btn-secondary:hover {
137
+ --btn-text-color: var(--color-secondary-content);
136
138
  background-color: var(--color-secondary);
137
- color: var(--color-secondary-content);
138
139
  }
139
140
 
140
141
  .btn-outline.btn-tertiary {
142
+ --btn-text-color: var(--color-tertiary);
141
143
  border-color: var(--color-tertiary);
142
- color: var(--color-tertiary);
143
144
  }
144
145
 
145
146
  .btn-outline.btn-tertiary:hover {
147
+ --btn-text-color: var(--color-tertiary-content);
146
148
  background-color: var(--color-tertiary);
147
- color: var(--color-tertiary-content);
148
149
  }
149
150
 
150
151
  /* Outlined Variant (alias for .btn-outline - documentation aligned) */
151
152
  .btn-outlined {
153
+ --btn-text-color: var(--color-on-surface);
152
154
  background-color: transparent;
153
155
  border: 1px solid var(--color-outline);
154
- color: var(--color-on-surface);
155
156
  }
156
157
 
157
158
  .btn-outlined:hover {
@@ -160,40 +161,40 @@ export const css = `/**
160
161
  }
161
162
 
162
163
  .btn-outlined.btn-primary {
164
+ --btn-text-color: var(--color-primary);
163
165
  border-color: var(--color-primary);
164
- color: var(--color-primary);
165
166
  }
166
167
 
167
168
  .btn-outlined.btn-primary:hover {
169
+ --btn-text-color: var(--color-primary-content);
168
170
  background-color: var(--color-primary);
169
- color: var(--color-primary-content);
170
171
  }
171
172
 
172
173
  .btn-outlined.btn-secondary {
174
+ --btn-text-color: var(--color-secondary);
173
175
  border-color: var(--color-secondary);
174
- color: var(--color-secondary);
175
176
  }
176
177
 
177
178
  .btn-outlined.btn-secondary:hover {
179
+ --btn-text-color: var(--color-secondary-content);
178
180
  background-color: var(--color-secondary);
179
- color: var(--color-secondary-content);
180
181
  }
181
182
 
182
183
  .btn-outlined.btn-tertiary {
184
+ --btn-text-color: var(--color-tertiary);
183
185
  border-color: var(--color-tertiary);
184
- color: var(--color-tertiary);
185
186
  }
186
187
 
187
188
  .btn-outlined.btn-tertiary:hover {
189
+ --btn-text-color: var(--color-tertiary-content);
188
190
  background-color: var(--color-tertiary);
189
- color: var(--color-tertiary-content);
190
191
  }
191
192
 
192
193
  /* Ghost Variant */
193
194
  .btn-ghost {
195
+ --btn-text-color: var(--color-on-surface);
194
196
  background-color: transparent;
195
197
  border-color: transparent;
196
- color: var(--color-on-surface);
197
198
  }
198
199
 
199
200
  .btn-ghost:hover {
@@ -202,37 +203,37 @@ export const css = `/**
202
203
  }
203
204
 
204
205
  .btn-ghost.btn-primary {
205
- color: var(--color-primary);
206
+ --btn-text-color: var(--color-primary);
206
207
  }
207
208
 
208
209
  .btn-ghost.btn-primary:hover {
210
+ --btn-text-color: var(--color-on-primary-container);
209
211
  background-color: var(--color-primary-container);
210
- color: var(--color-on-primary-container);
211
212
  }
212
213
 
213
214
  .btn-ghost.btn-secondary {
214
- color: var(--color-secondary);
215
+ --btn-text-color: var(--color-secondary);
215
216
  }
216
217
 
217
218
  .btn-ghost.btn-secondary:hover {
219
+ --btn-text-color: var(--color-on-secondary-container);
218
220
  background-color: var(--color-secondary-container);
219
- color: var(--color-on-secondary-container);
220
221
  }
221
222
 
222
223
  .btn-ghost.btn-tertiary {
223
- color: var(--color-tertiary);
224
+ --btn-text-color: var(--color-tertiary);
224
225
  }
225
226
 
226
227
  .btn-ghost.btn-tertiary:hover {
228
+ --btn-text-color: var(--color-on-tertiary-container);
227
229
  background-color: var(--color-tertiary-container);
228
- color: var(--color-on-tertiary-container);
229
230
  }
230
231
 
231
232
  /* Text Variant (alias for .btn-ghost - documentation aligned) */
232
233
  .btn-text {
234
+ --btn-text-color: var(--color-on-surface);
233
235
  background-color: transparent;
234
236
  border-color: transparent;
235
- color: var(--color-on-surface);
236
237
  }
237
238
 
238
239
  .btn-text:hover {
@@ -241,36 +242,36 @@ export const css = `/**
241
242
  }
242
243
 
243
244
  .btn-text.btn-primary {
244
- color: var(--color-primary);
245
+ --btn-text-color: var(--color-primary);
245
246
  }
246
247
 
247
248
  .btn-text.btn-primary:hover {
249
+ --btn-text-color: var(--color-on-primary-container);
248
250
  background-color: var(--color-primary-container);
249
- color: var(--color-on-primary-container);
250
251
  }
251
252
 
252
253
  .btn-text.btn-secondary {
253
- color: var(--color-secondary);
254
+ --btn-text-color: var(--color-secondary);
254
255
  }
255
256
 
256
257
  .btn-text.btn-secondary:hover {
258
+ --btn-text-color: var(--color-on-secondary-container);
257
259
  background-color: var(--color-secondary-container);
258
- color: var(--color-on-secondary-container);
259
260
  }
260
261
 
261
262
  .btn-text.btn-tertiary {
262
- color: var(--color-tertiary);
263
+ --btn-text-color: var(--color-tertiary);
263
264
  }
264
265
 
265
266
  .btn-text.btn-tertiary:hover {
267
+ --btn-text-color: var(--color-on-tertiary-container);
266
268
  background-color: var(--color-tertiary-container);
267
- color: var(--color-on-tertiary-container);
268
269
  }
269
270
 
270
271
  /* Tonal Variant - uses container colors for subtle appearance */
271
272
  .btn-tonal {
273
+ --btn-text-color: var(--color-on-primary-container);
272
274
  background-color: var(--color-primary-container);
273
- color: var(--color-on-primary-container);
274
275
  border-color: transparent;
275
276
  }
276
277
 
@@ -279,44 +280,44 @@ export const css = `/**
279
280
  }
280
281
 
281
282
  .btn-tonal.btn-primary {
283
+ --btn-text-color: var(--color-on-primary-container);
282
284
  background-color: var(--color-primary-container);
283
- color: var(--color-on-primary-container);
284
285
  }
285
286
 
286
287
  .btn-tonal.btn-secondary {
288
+ --btn-text-color: var(--color-on-secondary-container);
287
289
  background-color: var(--color-secondary-container);
288
- color: var(--color-on-secondary-container);
289
290
  }
290
291
 
291
292
  .btn-tonal.btn-tertiary {
293
+ --btn-text-color: var(--color-on-tertiary-container);
292
294
  background-color: var(--color-tertiary-container);
293
- color: var(--color-on-tertiary-container);
294
295
  }
295
296
 
296
297
  .btn-tonal.btn-info {
298
+ --btn-text-color: var(--color-on-info-container);
297
299
  background-color: var(--color-info-container);
298
- color: var(--color-on-info-container);
299
300
  }
300
301
 
301
302
  .btn-tonal.btn-success {
303
+ --btn-text-color: var(--color-on-success-container);
302
304
  background-color: var(--color-success-container);
303
- color: var(--color-on-success-container);
304
305
  }
305
306
 
306
307
  .btn-tonal.btn-warning {
308
+ --btn-text-color: var(--color-on-warning-container);
307
309
  background-color: var(--color-warning-container);
308
- color: var(--color-on-warning-container);
309
310
  }
310
311
 
311
312
  .btn-tonal.btn-error {
313
+ --btn-text-color: var(--color-on-error-container);
312
314
  background-color: var(--color-error-container);
313
- color: var(--color-on-error-container);
314
315
  }
315
316
 
316
317
  /* Semantic Colors */
317
318
  .btn-info {
319
+ --btn-text-color: var(--color-info-content);
318
320
  background-color: var(--color-info);
319
- color: var(--color-info-content);
320
321
  border-color: var(--color-info);
321
322
  }
322
323
 
@@ -327,8 +328,8 @@ export const css = `/**
327
328
  }
328
329
 
329
330
  .btn-success {
331
+ --btn-text-color: var(--color-success-content);
330
332
  background-color: var(--color-success);
331
- color: var(--color-success-content);
332
333
  border-color: var(--color-success);
333
334
  }
334
335
 
@@ -339,8 +340,8 @@ export const css = `/**
339
340
  }
340
341
 
341
342
  .btn-warning {
343
+ --btn-text-color: var(--color-warning-content);
342
344
  background-color: var(--color-warning);
343
- color: var(--color-warning-content);
344
345
  border-color: var(--color-warning);
345
346
  }
346
347
 
@@ -351,8 +352,8 @@ export const css = `/**
351
352
  }
352
353
 
353
354
  .btn-error {
355
+ --btn-text-color: var(--color-error-content);
354
356
  background-color: var(--color-error);
355
- color: var(--color-error-content);
356
357
  border-color: var(--color-error);
357
358
  }
358
359
 
@@ -428,7 +429,7 @@ export const css = `/**
428
429
  .btn-loading {
429
430
  pointer-events: none;
430
431
  position: relative;
431
- color: transparent;
432
+ color: transparent !important;
432
433
  }
433
434
 
434
435
  .btn-loading::after {
@@ -436,7 +437,7 @@ export const css = `/**
436
437
  position: absolute;
437
438
  width: 1rem;
438
439
  height: 1rem;
439
- border: 2px solid currentColor;
440
+ border: 2px solid var(--btn-text-color);
440
441
  border-right-color: transparent;
441
442
  border-radius: 50%;
442
443
  animation: btn-spin 0.6s linear infinite;
@@ -0,0 +1,238 @@
1
+ // Auto-generated from checkbox.css
2
+ export const css = `/**
3
+ * Checkbox Component Styles
4
+ * DuskMoonUI - Material Design 3 inspired checkbox
5
+ *
6
+ * Usage: <input type="checkbox" class="checkbox" />
7
+ * With label: <label class="label cursor-pointer gap-2"><input type="checkbox" class="checkbox" /><span>Label</span></label>
8
+ */
9
+
10
+ @layer components {
11
+ /* Base Checkbox - applied directly to input[type="checkbox"] */
12
+ .checkbox {
13
+ --checkbox-size: 1.25rem;
14
+ --checkbox-color: var(--color-primary);
15
+ --checkbox-border-color: var(--color-on-surface-variant);
16
+
17
+ position: relative;
18
+ display: inline-grid;
19
+ place-content: center;
20
+ width: var(--checkbox-size);
21
+ height: var(--checkbox-size);
22
+ margin: 0;
23
+ cursor: pointer;
24
+ appearance: none;
25
+ background-color: transparent;
26
+ border: 2px solid var(--checkbox-border-color);
27
+ border-radius: 0.125rem;
28
+ transition: background-color 150ms ease-in-out, border-color 150ms ease-in-out;
29
+ }
30
+
31
+ /* Checkmark using ::before pseudo-element */
32
+ .checkbox::before {
33
+ content: "";
34
+ width: 0.65em;
35
+ height: 0.35em;
36
+ transform: scale(0) rotate(-45deg);
37
+ transform-origin: center;
38
+ border-bottom: 2px solid var(--color-on-primary);
39
+ border-left: 2px solid var(--color-on-primary);
40
+ transition: transform 150ms ease-in-out;
41
+ }
42
+
43
+ /* Checked State */
44
+ .checkbox:checked {
45
+ background-color: var(--checkbox-color);
46
+ border-color: var(--checkbox-color);
47
+ }
48
+
49
+ .checkbox:checked::before {
50
+ transform: scale(1) rotate(-45deg);
51
+ }
52
+
53
+ /* Indeterminate State */
54
+ .checkbox:indeterminate {
55
+ background-color: var(--checkbox-color);
56
+ border-color: var(--checkbox-color);
57
+ }
58
+
59
+ .checkbox:indeterminate::before {
60
+ width: 0.5em;
61
+ height: 0;
62
+ border-bottom: 2px solid var(--color-on-primary);
63
+ border-left: 0;
64
+ transform: scale(1) rotate(0deg);
65
+ }
66
+
67
+ /* Hover State */
68
+ .checkbox:hover:not(:disabled):not(:checked) {
69
+ border-color: var(--color-on-surface);
70
+ }
71
+
72
+ .checkbox:checked:hover:not(:disabled) {
73
+ background-color: color-mix(in oklch, var(--checkbox-color), black 10%);
74
+ border-color: color-mix(in oklch, var(--checkbox-color), black 10%);
75
+ }
76
+
77
+ /* Focus State */
78
+ .checkbox:focus-visible {
79
+ outline: 2px solid var(--checkbox-color);
80
+ outline-offset: 2px;
81
+ }
82
+
83
+ /* Disabled State */
84
+ .checkbox:disabled {
85
+ cursor: not-allowed;
86
+ opacity: 0.38;
87
+ }
88
+
89
+ /* ========================================
90
+ * Size Variants
91
+ * ======================================== */
92
+
93
+ .checkbox-xs {
94
+ --checkbox-size: 0.875rem;
95
+ }
96
+
97
+ .checkbox-sm {
98
+ --checkbox-size: 1rem;
99
+ }
100
+
101
+ .checkbox-md {
102
+ --checkbox-size: 1.25rem;
103
+ }
104
+
105
+ .checkbox-lg {
106
+ --checkbox-size: 1.5rem;
107
+ }
108
+
109
+ .checkbox-xl {
110
+ --checkbox-size: 1.75rem;
111
+ }
112
+
113
+ /* ========================================
114
+ * Color Variants
115
+ * ======================================== */
116
+
117
+ .checkbox-primary {
118
+ --checkbox-color: var(--color-primary);
119
+ }
120
+
121
+ .checkbox-primary:checked::before,
122
+ .checkbox-primary:indeterminate::before {
123
+ border-color: var(--color-primary-content);
124
+ }
125
+
126
+ .checkbox-secondary {
127
+ --checkbox-color: var(--color-secondary);
128
+ }
129
+
130
+ .checkbox-secondary:checked::before,
131
+ .checkbox-secondary:indeterminate::before {
132
+ border-color: var(--color-secondary-content);
133
+ }
134
+
135
+ .checkbox-tertiary {
136
+ --checkbox-color: var(--color-tertiary);
137
+ }
138
+
139
+ .checkbox-tertiary:checked::before,
140
+ .checkbox-tertiary:indeterminate::before {
141
+ border-color: var(--color-tertiary-content);
142
+ }
143
+
144
+ .checkbox-success {
145
+ --checkbox-color: var(--color-success);
146
+ }
147
+
148
+ .checkbox-success:checked::before,
149
+ .checkbox-success:indeterminate::before {
150
+ border-color: var(--color-success-content);
151
+ }
152
+
153
+ .checkbox-warning {
154
+ --checkbox-color: var(--color-warning);
155
+ }
156
+
157
+ .checkbox-warning:checked::before,
158
+ .checkbox-warning:indeterminate::before {
159
+ border-color: var(--color-warning-content);
160
+ }
161
+
162
+ .checkbox-error {
163
+ --checkbox-color: var(--color-error);
164
+ }
165
+
166
+ .checkbox-error:checked::before,
167
+ .checkbox-error:indeterminate::before {
168
+ border-color: var(--color-error-content);
169
+ }
170
+
171
+ .checkbox-info {
172
+ --checkbox-color: var(--color-info);
173
+ }
174
+
175
+ .checkbox-info:checked::before,
176
+ .checkbox-info:indeterminate::before {
177
+ border-color: var(--color-info-content);
178
+ }
179
+
180
+ /* ========================================
181
+ * Checkbox with Label (wrapper pattern)
182
+ * ======================================== */
183
+
184
+ .checkbox-label {
185
+ display: inline-flex;
186
+ align-items: center;
187
+ gap: 0.5rem;
188
+ cursor: pointer;
189
+ user-select: none;
190
+ font-size: 0.875rem;
191
+ color: var(--color-on-surface);
192
+ }
193
+
194
+ .checkbox-label:has(.checkbox:disabled) {
195
+ cursor: not-allowed;
196
+ opacity: 0.38;
197
+ }
198
+
199
+ /* ========================================
200
+ * Checkbox Group
201
+ * ======================================== */
202
+
203
+ .checkbox-group {
204
+ display: flex;
205
+ flex-direction: column;
206
+ gap: 0.75rem;
207
+ }
208
+
209
+ .checkbox-group-horizontal {
210
+ flex-direction: row;
211
+ flex-wrap: wrap;
212
+ gap: 1.5rem;
213
+ }
214
+
215
+ .checkbox-group-label {
216
+ font-size: 0.875rem;
217
+ font-weight: 500;
218
+ color: var(--color-on-surface);
219
+ margin-bottom: 0.5rem;
220
+ }
221
+
222
+ /* ========================================
223
+ * Reduce Motion
224
+ * ======================================== */
225
+
226
+ @media (prefers-reduced-motion: reduce) {
227
+ .checkbox,
228
+ .checkbox::before {
229
+ transition: none;
230
+ }
231
+ }
232
+ }
233
+ `;
234
+
235
+ const sheet = new CSSStyleSheet();
236
+ sheet.replaceSync(css);
237
+ export const styles = sheet;
238
+ export default sheet;