@duskmoon-dev/core 1.0.0 → 1.1.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 (36) hide show
  1. package/dist/esm/components/accordion.js +251 -0
  2. package/dist/esm/components/alert.js +206 -0
  3. package/dist/esm/components/appbar.js +315 -0
  4. package/dist/esm/components/autocomplete.js +276 -0
  5. package/dist/esm/components/avatar.js +174 -0
  6. package/dist/esm/components/badge.js +185 -0
  7. package/dist/esm/components/bottom-navigation.js +270 -0
  8. package/dist/esm/components/bottomsheet.js +341 -0
  9. package/dist/esm/components/button.js +481 -0
  10. package/dist/esm/components/card.js +227 -0
  11. package/dist/esm/components/chip.js +218 -0
  12. package/dist/esm/components/collapse.js +261 -0
  13. package/dist/esm/components/datepicker.js +354 -0
  14. package/dist/esm/components/dialog.js +180 -0
  15. package/dist/esm/components/divider.js +291 -0
  16. package/dist/esm/components/drawer.js +378 -0
  17. package/dist/esm/components/file-upload.js +328 -0
  18. package/dist/esm/components/form.js +448 -0
  19. package/dist/esm/components/input.js +247 -0
  20. package/dist/esm/components/list.js +195 -0
  21. package/dist/esm/components/markdown-body.js +412 -0
  22. package/dist/esm/components/modal.js +298 -0
  23. package/dist/esm/components/navigation.js +399 -0
  24. package/dist/esm/components/popover.js +333 -0
  25. package/dist/esm/components/progress.js +245 -0
  26. package/dist/esm/components/rating.js +237 -0
  27. package/dist/esm/components/skeleton.js +223 -0
  28. package/dist/esm/components/slider.js +334 -0
  29. package/dist/esm/components/snackbar.js +318 -0
  30. package/dist/esm/components/stepper.js +320 -0
  31. package/dist/esm/components/switch.js +284 -0
  32. package/dist/esm/components/table.js +206 -0
  33. package/dist/esm/components/timeline.js +360 -0
  34. package/dist/esm/components/toast.js +258 -0
  35. package/dist/esm/components/tooltip.js +291 -0
  36. package/package.json +108 -38
@@ -0,0 +1,448 @@
1
+ // Auto-generated from form.css
2
+ export const css = `/**
3
+ * Form Component Styles
4
+ * DuskMoonUI - Material Design 3 inspired form system
5
+ */
6
+
7
+ @layer components {
8
+ /* Form Control */
9
+ .form-control {
10
+ display: flex;
11
+ flex-direction: column;
12
+ gap: 0.25rem;
13
+ width: 100%;
14
+ margin-bottom: 1rem;
15
+ }
16
+
17
+ /* Label */
18
+ .label {
19
+ display: flex;
20
+ justify-content: space-between;
21
+ align-items: center;
22
+ padding: 0.25rem 0;
23
+ }
24
+
25
+ .label-text {
26
+ font-size: 0.875rem;
27
+ font-weight: 500;
28
+ color: var(--color-base-content);
29
+ padding-bottom: 0.25rem;
30
+ }
31
+
32
+ .label-text-alt {
33
+ font-size: 0.75rem;
34
+ color: var(--color-on-surface-variant);
35
+ }
36
+
37
+ /* Checkbox */
38
+ .checkbox {
39
+ appearance: none;
40
+ width: 1.25rem;
41
+ height: 1.25rem;
42
+ border: 2px solid var(--color-outline);
43
+ border-radius: 0.25rem;
44
+ background-color: transparent;
45
+ cursor: pointer;
46
+ transition: all 150ms ease-in-out;
47
+ position: relative;
48
+ }
49
+
50
+ .checkbox:hover {
51
+ border-color: var(--color-primary);
52
+ }
53
+
54
+ .checkbox:checked {
55
+ background-color: var(--color-primary);
56
+ border-color: var(--color-primary);
57
+ }
58
+
59
+ .checkbox:checked::after {
60
+ content: '';
61
+ position: absolute;
62
+ left: 0.25rem;
63
+ top: 0.0625rem;
64
+ width: 0.375rem;
65
+ height: 0.625rem;
66
+ border: solid var(--color-primary-content);
67
+ border-width: 0 2px 2px 0;
68
+ transform: rotate(45deg);
69
+ }
70
+
71
+ .checkbox:focus-visible {
72
+ outline: 2px solid var(--color-primary);
73
+ outline-offset: 2px;
74
+ }
75
+
76
+ .checkbox:disabled {
77
+ cursor: not-allowed;
78
+ opacity: 0.5;
79
+ }
80
+
81
+ /* Checkbox Color Variants */
82
+ .checkbox-primary:checked {
83
+ background-color: var(--color-primary);
84
+ border-color: var(--color-primary);
85
+ }
86
+
87
+ .checkbox-secondary:checked {
88
+ background-color: var(--color-secondary);
89
+ border-color: var(--color-secondary);
90
+ }
91
+
92
+ .checkbox-success:checked {
93
+ background-color: var(--color-success);
94
+ border-color: var(--color-success);
95
+ }
96
+
97
+ .checkbox-error:checked {
98
+ background-color: var(--color-error);
99
+ border-color: var(--color-error);
100
+ }
101
+
102
+ /* Checkbox Sizes */
103
+ .checkbox-xs {
104
+ width: 0.875rem;
105
+ height: 0.875rem;
106
+ }
107
+
108
+ .checkbox-sm {
109
+ width: 1rem;
110
+ height: 1rem;
111
+ }
112
+
113
+ .checkbox-lg {
114
+ width: 1.5rem;
115
+ height: 1.5rem;
116
+ }
117
+
118
+ /* Radio */
119
+ .radio {
120
+ appearance: none;
121
+ width: 1.25rem;
122
+ height: 1.25rem;
123
+ border: 2px solid var(--color-outline);
124
+ border-radius: 50%;
125
+ background-color: transparent;
126
+ cursor: pointer;
127
+ transition: all 150ms ease-in-out;
128
+ position: relative;
129
+ }
130
+
131
+ .radio:hover {
132
+ border-color: var(--color-primary);
133
+ }
134
+
135
+ .radio:checked {
136
+ border-color: var(--color-primary);
137
+ }
138
+
139
+ .radio:checked::after {
140
+ content: '';
141
+ position: absolute;
142
+ left: 50%;
143
+ top: 50%;
144
+ width: 0.5rem;
145
+ height: 0.5rem;
146
+ background-color: var(--color-primary);
147
+ border-radius: 50%;
148
+ transform: translate(-50%, -50%);
149
+ }
150
+
151
+ .radio:focus-visible {
152
+ outline: 2px solid var(--color-primary);
153
+ outline-offset: 2px;
154
+ }
155
+
156
+ .radio:disabled {
157
+ cursor: not-allowed;
158
+ opacity: 0.5;
159
+ }
160
+
161
+ /* Radio Color Variants */
162
+ .radio-primary:checked {
163
+ border-color: var(--color-primary);
164
+ }
165
+
166
+ .radio-primary:checked::after {
167
+ background-color: var(--color-primary);
168
+ }
169
+
170
+ .radio-secondary:checked {
171
+ border-color: var(--color-secondary);
172
+ }
173
+
174
+ .radio-secondary:checked::after {
175
+ background-color: var(--color-secondary);
176
+ }
177
+
178
+ /* Toggle/Switch */
179
+ .toggle {
180
+ appearance: none;
181
+ width: 3rem;
182
+ height: 1.5rem;
183
+ border-radius: 1rem;
184
+ background-color: var(--color-surface-container-highest);
185
+ cursor: pointer;
186
+ transition: all 150ms ease-in-out;
187
+ position: relative;
188
+ }
189
+
190
+ .toggle::after {
191
+ content: '';
192
+ position: absolute;
193
+ left: 0.25rem;
194
+ top: 50%;
195
+ transform: translateY(-50%);
196
+ width: 1rem;
197
+ height: 1rem;
198
+ background-color: var(--color-on-surface-variant);
199
+ border-radius: 50%;
200
+ transition: all 150ms ease-in-out;
201
+ }
202
+
203
+ .toggle:checked {
204
+ background-color: var(--color-primary);
205
+ }
206
+
207
+ .toggle:checked::after {
208
+ left: calc(100% - 1.25rem);
209
+ background-color: var(--color-primary-content);
210
+ }
211
+
212
+ .toggle:focus-visible {
213
+ outline: 2px solid var(--color-primary);
214
+ outline-offset: 2px;
215
+ }
216
+
217
+ .toggle:disabled {
218
+ cursor: not-allowed;
219
+ opacity: 0.5;
220
+ }
221
+
222
+ /* Toggle Sizes */
223
+ .toggle-xs {
224
+ width: 2rem;
225
+ height: 1rem;
226
+ }
227
+
228
+ .toggle-xs::after {
229
+ width: 0.625rem;
230
+ height: 0.625rem;
231
+ left: 0.1875rem;
232
+ }
233
+
234
+ .toggle-xs:checked::after {
235
+ left: calc(100% - 0.8125rem);
236
+ }
237
+
238
+ .toggle-sm {
239
+ width: 2.5rem;
240
+ height: 1.25rem;
241
+ }
242
+
243
+ .toggle-sm::after {
244
+ width: 0.75rem;
245
+ height: 0.75rem;
246
+ }
247
+
248
+ .toggle-lg {
249
+ width: 4rem;
250
+ height: 2rem;
251
+ }
252
+
253
+ .toggle-lg::after {
254
+ width: 1.5rem;
255
+ height: 1.5rem;
256
+ }
257
+
258
+ /* Select */
259
+ .select {
260
+ appearance: none;
261
+ width: 100%;
262
+ padding: 0.75rem 2.5rem 0.75rem 1rem;
263
+ font-size: 1rem;
264
+ line-height: 1.5rem;
265
+ background-color: var(--color-surface);
266
+ color: var(--color-on-surface);
267
+ border: 1px solid var(--color-outline);
268
+ border-radius: 0.5rem;
269
+ cursor: pointer;
270
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
271
+ background-position: right 0.75rem center;
272
+ background-repeat: no-repeat;
273
+ background-size: 1.25rem;
274
+ transition: border-color 150ms ease-in-out;
275
+ }
276
+
277
+ .select:focus {
278
+ outline: none;
279
+ }
280
+
281
+ .select:focus-visible {
282
+ border-color: var(--color-primary);
283
+ outline: none;
284
+ }
285
+
286
+ .select:disabled {
287
+ cursor: not-allowed;
288
+ opacity: 0.5;
289
+ }
290
+
291
+ /* Select Bordered */
292
+ .select-bordered {
293
+ border-color: var(--color-outline);
294
+ }
295
+
296
+ /* Select Color Variants */
297
+ .select-primary:focus-visible {
298
+ border-color: var(--color-primary);
299
+ }
300
+
301
+ .select-secondary:focus-visible {
302
+ border-color: var(--color-secondary);
303
+ }
304
+
305
+ /* Select Sizes */
306
+ .select-xs {
307
+ padding: 0.375rem 2rem 0.375rem 0.625rem;
308
+ font-size: 0.75rem;
309
+ line-height: 1rem;
310
+ }
311
+
312
+ .select-sm {
313
+ padding: 0.5rem 2.25rem 0.5rem 0.75rem;
314
+ font-size: 0.875rem;
315
+ line-height: 1.25rem;
316
+ }
317
+
318
+ .select-lg {
319
+ padding: 1rem 3rem 1rem 1.25rem;
320
+ font-size: 1.125rem;
321
+ line-height: 1.75rem;
322
+ }
323
+
324
+ /* Textarea */
325
+ .textarea {
326
+ width: 100%;
327
+ min-height: 6rem;
328
+ padding: 0.75rem 1rem;
329
+ font-size: 1rem;
330
+ line-height: 1.5rem;
331
+ background-color: var(--color-surface);
332
+ color: var(--color-on-surface);
333
+ border: 1px solid var(--color-outline);
334
+ border-radius: 0.5rem;
335
+ resize: vertical;
336
+ transition: border-color 150ms ease-in-out;
337
+ }
338
+
339
+ .textarea::placeholder {
340
+ color: var(--color-on-surface-variant);
341
+ opacity: 0.7;
342
+ }
343
+
344
+ .textarea:focus {
345
+ outline: none;
346
+ }
347
+
348
+ .textarea:focus-visible {
349
+ border-color: var(--color-primary);
350
+ }
351
+
352
+ .textarea:disabled {
353
+ cursor: not-allowed;
354
+ opacity: 0.5;
355
+ resize: none;
356
+ }
357
+
358
+ .textarea-bordered {
359
+ border-color: var(--color-outline);
360
+ }
361
+
362
+ /* Validation States */
363
+ .form-control.error .input,
364
+ .form-control.error .select,
365
+ .form-control.error .textarea,
366
+ .input-error {
367
+ border-color: var(--color-error);
368
+ }
369
+
370
+ .form-control.error .label-text {
371
+ color: var(--color-error);
372
+ }
373
+
374
+ .form-control.success .input,
375
+ .form-control.success .select,
376
+ .form-control.success .textarea {
377
+ border-color: var(--color-success);
378
+ }
379
+
380
+ .form-control.success .label-text {
381
+ color: var(--color-success);
382
+ }
383
+
384
+ /* Helper Text */
385
+ .helper-text {
386
+ font-size: 0.75rem;
387
+ color: var(--color-on-surface-variant);
388
+ margin-top: 0.25rem;
389
+ }
390
+
391
+ .helper-text.error {
392
+ color: var(--color-error);
393
+ }
394
+
395
+ .helper-text.success {
396
+ color: var(--color-success);
397
+ }
398
+
399
+ /* Required Field Indicator */
400
+ .label-text.required::after {
401
+ content: ' *';
402
+ color: var(--color-error);
403
+ }
404
+
405
+ /* Range Input */
406
+ .range {
407
+ appearance: none;
408
+ width: 100%;
409
+ height: 0.5rem;
410
+ background-color: var(--color-surface-container-highest);
411
+ border-radius: 0.25rem;
412
+ cursor: pointer;
413
+ }
414
+
415
+ .range::-webkit-slider-thumb {
416
+ appearance: none;
417
+ width: 1.25rem;
418
+ height: 1.25rem;
419
+ background-color: var(--color-primary);
420
+ border-radius: 50%;
421
+ cursor: pointer;
422
+ transition: transform 150ms ease-in-out;
423
+ }
424
+
425
+ .range::-webkit-slider-thumb:hover {
426
+ transform: scale(1.1);
427
+ }
428
+
429
+ .range::-moz-range-thumb {
430
+ width: 1.25rem;
431
+ height: 1.25rem;
432
+ background-color: var(--color-primary);
433
+ border: none;
434
+ border-radius: 50%;
435
+ cursor: pointer;
436
+ }
437
+
438
+ .range:focus-visible {
439
+ outline: 2px solid var(--color-primary);
440
+ outline-offset: 2px;
441
+ }
442
+ }
443
+ `;
444
+
445
+ const sheet = new CSSStyleSheet();
446
+ sheet.replaceSync(css);
447
+ export const styles = sheet;
448
+ export default sheet;
@@ -0,0 +1,247 @@
1
+ // Auto-generated from input.css
2
+ export const css = `/**
3
+ * Input Component Styles
4
+ * DuskMoonUI - Material Design 3 inspired input system
5
+ */
6
+
7
+ @layer components {
8
+ /* Base Input */
9
+ .input {
10
+ display: flex;
11
+ width: 100%;
12
+ padding: 0.75rem 1rem;
13
+ font-size: 1rem;
14
+ line-height: 1.5rem;
15
+ background-color: var(--color-surface);
16
+ color: var(--color-on-surface);
17
+ border: 1px solid transparent;
18
+ border-radius: 0.5rem;
19
+ transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
20
+ }
21
+
22
+ .input::placeholder {
23
+ color: var(--color-on-surface-variant);
24
+ opacity: 0.7;
25
+ }
26
+
27
+ .input:focus {
28
+ outline: none;
29
+ }
30
+
31
+ .input:focus-visible {
32
+ border-color: var(--color-primary);
33
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
34
+ outline: none;
35
+ }
36
+
37
+ .input:disabled {
38
+ cursor: not-allowed;
39
+ opacity: 0.5;
40
+ background-color: var(--color-surface-container);
41
+ }
42
+
43
+ /* Bordered Input */
44
+ .input-bordered {
45
+ border-color: var(--color-outline);
46
+ background-color: var(--color-surface);
47
+ }
48
+
49
+ .input-bordered:hover:not(:disabled):not(:focus) {
50
+ border-color: var(--color-outline-variant);
51
+ }
52
+
53
+ /* Color Variants */
54
+ .input-primary {
55
+ border-color: var(--color-primary);
56
+ }
57
+
58
+ .input-primary:focus-visible {
59
+ border-color: var(--color-primary);
60
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
61
+ }
62
+
63
+ .input-secondary {
64
+ border-color: var(--color-secondary);
65
+ }
66
+
67
+ .input-secondary:focus-visible {
68
+ border-color: var(--color-secondary);
69
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
70
+ }
71
+
72
+ .input-tertiary {
73
+ border-color: var(--color-tertiary);
74
+ }
75
+
76
+ .input-tertiary:focus-visible {
77
+ border-color: var(--color-tertiary);
78
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
79
+ }
80
+
81
+ /* Semantic Colors */
82
+ .input-info {
83
+ border-color: var(--color-info);
84
+ }
85
+
86
+ .input-info:focus-visible {
87
+ border-color: var(--color-info);
88
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-info) 10%, transparent);
89
+ }
90
+
91
+ .input-success {
92
+ border-color: var(--color-success);
93
+ }
94
+
95
+ .input-success:focus-visible {
96
+ border-color: var(--color-success);
97
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
98
+ }
99
+
100
+ .input-warning {
101
+ border-color: var(--color-warning);
102
+ }
103
+
104
+ .input-warning:focus-visible {
105
+ border-color: var(--color-warning);
106
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
107
+ }
108
+
109
+ .input-error {
110
+ border-color: var(--color-error);
111
+ }
112
+
113
+ .input-error:focus-visible {
114
+ border-color: var(--color-error);
115
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
116
+ }
117
+
118
+ /* Size Variants */
119
+ .input-xs {
120
+ padding: 0.375rem 0.625rem;
121
+ font-size: 0.75rem;
122
+ line-height: 1rem;
123
+ border-radius: 0.25rem;
124
+ height: 1.75rem;
125
+ }
126
+
127
+ .input-sm {
128
+ padding: 0.5rem 0.75rem;
129
+ font-size: 0.875rem;
130
+ line-height: 1.25rem;
131
+ border-radius: 0.375rem;
132
+ height: 2.25rem;
133
+ }
134
+
135
+ .input-lg {
136
+ padding: 1rem 1.25rem;
137
+ font-size: 1.125rem;
138
+ line-height: 1.75rem;
139
+ border-radius: 0.625rem;
140
+ height: 3.5rem;
141
+ }
142
+
143
+ /* Ghost Input */
144
+ .input-ghost {
145
+ background-color: transparent;
146
+ border-color: transparent;
147
+ }
148
+
149
+ .input-ghost:focus-visible {
150
+ background-color: var(--color-surface-container);
151
+ border-color: transparent;
152
+ box-shadow: none;
153
+ }
154
+
155
+ /* Filled Input */
156
+ .input-filled {
157
+ background-color: var(--color-surface-container);
158
+ border-color: transparent;
159
+ border-bottom: 2px solid var(--color-outline);
160
+ border-radius: 0.5rem 0.5rem 0 0;
161
+ }
162
+
163
+ .input-filled:focus-visible {
164
+ border-bottom-color: var(--color-primary);
165
+ box-shadow: none;
166
+ }
167
+
168
+ /* Input with Icon */
169
+ .input-group {
170
+ display: flex;
171
+ align-items: stretch;
172
+ }
173
+
174
+ .input-group > .input {
175
+ flex: 1;
176
+ border-radius: 0;
177
+ }
178
+
179
+ .input-group > .input:first-child {
180
+ border-top-left-radius: 0.5rem;
181
+ border-bottom-left-radius: 0.5rem;
182
+ }
183
+
184
+ .input-group > .input:last-child {
185
+ border-top-right-radius: 0.5rem;
186
+ border-bottom-right-radius: 0.5rem;
187
+ }
188
+
189
+ .input-group-text {
190
+ display: flex;
191
+ align-items: center;
192
+ justify-content: center;
193
+ padding: 0 1rem;
194
+ background-color: var(--color-surface-container);
195
+ color: var(--color-on-surface-variant);
196
+ border: 1px solid var(--color-outline);
197
+ }
198
+
199
+ .input-group-text:first-child {
200
+ border-top-left-radius: 0.5rem;
201
+ border-bottom-left-radius: 0.5rem;
202
+ border-right: none;
203
+ }
204
+
205
+ .input-group-text:last-child {
206
+ border-top-right-radius: 0.5rem;
207
+ border-bottom-right-radius: 0.5rem;
208
+ border-left: none;
209
+ }
210
+
211
+ /* File Input */
212
+ .file-input {
213
+ display: flex;
214
+ width: 100%;
215
+ padding: 0;
216
+ background-color: var(--color-surface);
217
+ border: 1px solid var(--color-outline);
218
+ border-radius: 0.5rem;
219
+ overflow: hidden;
220
+ cursor: pointer;
221
+ }
222
+
223
+ .file-input::file-selector-button {
224
+ padding: 0.75rem 1rem;
225
+ background-color: var(--color-surface-container);
226
+ color: var(--color-on-surface);
227
+ border: none;
228
+ border-right: 1px solid var(--color-outline);
229
+ cursor: pointer;
230
+ transition: background-color 150ms ease-in-out;
231
+ }
232
+
233
+ .file-input::file-selector-button:hover {
234
+ background-color: var(--color-surface-container-high);
235
+ }
236
+
237
+ .file-input:focus-visible {
238
+ border-color: var(--color-primary);
239
+ outline: none;
240
+ }
241
+ }
242
+ `;
243
+
244
+ const sheet = new CSSStyleSheet();
245
+ sheet.replaceSync(css);
246
+ export const styles = sheet;
247
+ export default sheet;