@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,334 @@
1
+ // Auto-generated from slider.css
2
+ export const css = `/**
3
+ * Slider Component Styles
4
+ * DuskMoonUI - Material Design 3 inspired slider system
5
+ */
6
+
7
+ @layer components {
8
+ /* Base Slider */
9
+ .slider {
10
+ position: relative;
11
+ display: flex;
12
+ align-items: center;
13
+ width: 100%;
14
+ height: 2.5rem;
15
+ touch-action: none;
16
+ user-select: none;
17
+ }
18
+
19
+ /* Slider Track */
20
+ .slider-track {
21
+ position: relative;
22
+ width: 100%;
23
+ height: 0.25rem;
24
+ background-color: var(--color-surface-container-highest);
25
+ border-radius: 9999px;
26
+ }
27
+
28
+ /* Slider Track Filled (Progress) */
29
+ .slider-track-filled {
30
+ position: absolute;
31
+ top: 0;
32
+ left: 0;
33
+ height: 100%;
34
+ background-color: var(--color-primary);
35
+ border-radius: 9999px;
36
+ }
37
+
38
+ /* Slider Thumb */
39
+ .slider-thumb {
40
+ position: absolute;
41
+ top: 50%;
42
+ width: 1.25rem;
43
+ height: 1.25rem;
44
+ background-color: var(--color-primary);
45
+ border: none;
46
+ border-radius: 50%;
47
+ box-shadow: 0 2px 4px rgb(0 0 0 / 0.2);
48
+ transform: translate(-50%, -50%);
49
+ cursor: grab;
50
+ transition: box-shadow 150ms ease-in-out, transform 150ms ease-in-out;
51
+ }
52
+
53
+ .slider-thumb:hover {
54
+ box-shadow: 0 0 0 8px var(--color-primary-container), 0 2px 4px rgb(0 0 0 / 0.2);
55
+ }
56
+
57
+ .slider-thumb:focus-visible {
58
+ outline: none;
59
+ box-shadow: 0 0 0 8px var(--color-primary-container), 0 2px 4px rgb(0 0 0 / 0.2);
60
+ }
61
+
62
+ .slider-thumb:active {
63
+ cursor: grabbing;
64
+ transform: translate(-50%, -50%) scale(1.1);
65
+ }
66
+
67
+ /* Slider Thumb Label (Value tooltip) */
68
+ .slider-thumb-label {
69
+ position: absolute;
70
+ bottom: 100%;
71
+ left: 50%;
72
+ transform: translateX(-50%);
73
+ padding: 0.25rem 0.5rem;
74
+ margin-bottom: 0.5rem;
75
+ font-size: 0.75rem;
76
+ font-weight: 500;
77
+ color: var(--color-on-primary);
78
+ background-color: var(--color-primary);
79
+ border-radius: 0.25rem;
80
+ white-space: nowrap;
81
+ opacity: 0;
82
+ visibility: hidden;
83
+ transition: opacity 150ms ease-out, visibility 150ms ease-out;
84
+ }
85
+
86
+ .slider-thumb-label::after {
87
+ content: '';
88
+ position: absolute;
89
+ top: 100%;
90
+ left: 50%;
91
+ transform: translateX(-50%);
92
+ border: 0.25rem solid transparent;
93
+ border-top-color: var(--color-primary);
94
+ }
95
+
96
+ .slider-thumb:hover .slider-thumb-label,
97
+ .slider-thumb:focus-visible .slider-thumb-label,
98
+ .slider-thumb:active .slider-thumb-label {
99
+ opacity: 1;
100
+ visibility: visible;
101
+ }
102
+
103
+ /* Always Show Labels Variant */
104
+ .slider-labels-always .slider-thumb-label {
105
+ opacity: 1;
106
+ visibility: visible;
107
+ }
108
+
109
+ /* Marks Container */
110
+ .slider-marks {
111
+ position: absolute;
112
+ top: 50%;
113
+ left: 0;
114
+ right: 0;
115
+ display: flex;
116
+ justify-content: space-between;
117
+ transform: translateY(-50%);
118
+ pointer-events: none;
119
+ }
120
+
121
+ /* Individual Mark */
122
+ .slider-mark {
123
+ position: relative;
124
+ width: 0.125rem;
125
+ height: 0.5rem;
126
+ background-color: var(--color-outline);
127
+ border-radius: 9999px;
128
+ }
129
+
130
+ .slider-mark-active {
131
+ background-color: var(--color-on-primary);
132
+ }
133
+
134
+ /* Mark Label */
135
+ .slider-mark-label {
136
+ position: absolute;
137
+ top: 1rem;
138
+ left: 50%;
139
+ transform: translateX(-50%);
140
+ font-size: 0.75rem;
141
+ color: var(--color-on-surface-variant);
142
+ white-space: nowrap;
143
+ }
144
+
145
+ /* Min/Max Labels Container */
146
+ .slider-labels {
147
+ display: flex;
148
+ justify-content: space-between;
149
+ margin-top: 0.25rem;
150
+ font-size: 0.75rem;
151
+ color: var(--color-on-surface-variant);
152
+ }
153
+
154
+ /* Size Variants */
155
+ .slider-sm {
156
+ height: 2rem;
157
+ }
158
+
159
+ .slider-sm .slider-track {
160
+ height: 0.125rem;
161
+ }
162
+
163
+ .slider-sm .slider-thumb {
164
+ width: 1rem;
165
+ height: 1rem;
166
+ }
167
+
168
+ .slider-lg {
169
+ height: 3rem;
170
+ }
171
+
172
+ .slider-lg .slider-track {
173
+ height: 0.375rem;
174
+ }
175
+
176
+ .slider-lg .slider-thumb {
177
+ width: 1.5rem;
178
+ height: 1.5rem;
179
+ }
180
+
181
+ /* Color Variants */
182
+ .slider-secondary .slider-track-filled,
183
+ .slider-secondary .slider-thumb {
184
+ background-color: var(--color-secondary);
185
+ }
186
+
187
+ .slider-secondary .slider-thumb:hover,
188
+ .slider-secondary .slider-thumb:focus-visible {
189
+ box-shadow: 0 0 0 8px var(--color-secondary-container), 0 2px 4px rgb(0 0 0 / 0.2);
190
+ }
191
+
192
+ .slider-secondary .slider-thumb-label {
193
+ background-color: var(--color-secondary);
194
+ color: var(--color-on-secondary);
195
+ }
196
+
197
+ .slider-secondary .slider-thumb-label::after {
198
+ border-top-color: var(--color-secondary);
199
+ }
200
+
201
+ .slider-tertiary .slider-track-filled,
202
+ .slider-tertiary .slider-thumb {
203
+ background-color: var(--color-tertiary);
204
+ }
205
+
206
+ .slider-tertiary .slider-thumb:hover,
207
+ .slider-tertiary .slider-thumb:focus-visible {
208
+ box-shadow: 0 0 0 8px var(--color-tertiary-container), 0 2px 4px rgb(0 0 0 / 0.2);
209
+ }
210
+
211
+ .slider-tertiary .slider-thumb-label {
212
+ background-color: var(--color-tertiary);
213
+ color: var(--color-on-tertiary);
214
+ }
215
+
216
+ .slider-tertiary .slider-thumb-label::after {
217
+ border-top-color: var(--color-tertiary);
218
+ }
219
+
220
+ /* Disabled State */
221
+ .slider-disabled {
222
+ opacity: 0.6;
223
+ pointer-events: none;
224
+ }
225
+
226
+ .slider-disabled .slider-thumb {
227
+ cursor: not-allowed;
228
+ }
229
+
230
+ /* Range Slider */
231
+ .slider-range .slider-track-filled {
232
+ left: var(--slider-start, 0%);
233
+ width: var(--slider-range, 100%);
234
+ }
235
+
236
+ /* Vertical Slider */
237
+ .slider-vertical {
238
+ flex-direction: column;
239
+ width: 2.5rem;
240
+ height: 12rem;
241
+ }
242
+
243
+ .slider-vertical .slider-track {
244
+ width: 0.25rem;
245
+ height: 100%;
246
+ }
247
+
248
+ .slider-vertical .slider-track-filled {
249
+ width: 100%;
250
+ height: auto;
251
+ bottom: 0;
252
+ top: auto;
253
+ }
254
+
255
+ .slider-vertical .slider-thumb {
256
+ left: 50%;
257
+ top: auto;
258
+ transform: translate(-50%, 50%);
259
+ }
260
+
261
+ .slider-vertical .slider-thumb-label {
262
+ bottom: auto;
263
+ left: 100%;
264
+ top: 50%;
265
+ transform: translateY(-50%);
266
+ margin-left: 0.5rem;
267
+ margin-bottom: 0;
268
+ }
269
+
270
+ .slider-vertical .slider-thumb-label::after {
271
+ top: 50%;
272
+ left: auto;
273
+ right: 100%;
274
+ transform: translateY(-50%);
275
+ border-top-color: transparent;
276
+ border-right-color: var(--color-primary);
277
+ }
278
+
279
+ .slider-vertical .slider-marks {
280
+ flex-direction: column;
281
+ top: 0;
282
+ bottom: 0;
283
+ left: 50%;
284
+ right: auto;
285
+ transform: translateX(-50%);
286
+ }
287
+
288
+ .slider-vertical .slider-mark-label {
289
+ top: 50%;
290
+ left: 1rem;
291
+ transform: translateY(-50%);
292
+ }
293
+
294
+ /* Input Integration */
295
+ .slider-with-input {
296
+ display: flex;
297
+ align-items: center;
298
+ gap: 1rem;
299
+ }
300
+
301
+ .slider-with-input .slider {
302
+ flex: 1;
303
+ }
304
+
305
+ .slider-input {
306
+ width: 4rem;
307
+ padding: 0.5rem;
308
+ font-size: 0.875rem;
309
+ text-align: center;
310
+ color: var(--color-on-surface);
311
+ background-color: var(--color-surface);
312
+ border: 1px solid var(--color-outline);
313
+ border-radius: 0.375rem;
314
+ }
315
+
316
+ .slider-input:focus {
317
+ outline: none;
318
+ border-color: var(--color-primary);
319
+ }
320
+
321
+ /* Reduce Motion */
322
+ @media (prefers-reduced-motion: reduce) {
323
+ .slider-thumb,
324
+ .slider-thumb-label {
325
+ transition: none;
326
+ }
327
+ }
328
+ }
329
+ `;
330
+
331
+ const sheet = new CSSStyleSheet();
332
+ sheet.replaceSync(css);
333
+ export const styles = sheet;
334
+ export default sheet;
@@ -0,0 +1,318 @@
1
+ // Auto-generated from snackbar.css
2
+ export const css = `/**
3
+ * Snackbar Component Styles
4
+ * DuskMoonUI - Material Design 3 inspired snackbar system
5
+ */
6
+
7
+ @layer components {
8
+ /* Snackbar Container */
9
+ .snackbar-container {
10
+ position: fixed;
11
+ z-index: 1100;
12
+ display: flex;
13
+ flex-direction: column;
14
+ gap: 0.5rem;
15
+ padding: 1rem;
16
+ pointer-events: none;
17
+ }
18
+
19
+ /* Position Variants */
20
+ .snackbar-container-bottom {
21
+ bottom: 0;
22
+ left: 50%;
23
+ transform: translateX(-50%);
24
+ align-items: center;
25
+ }
26
+
27
+ .snackbar-container-bottom-left {
28
+ bottom: 0;
29
+ left: 0;
30
+ align-items: flex-start;
31
+ }
32
+
33
+ .snackbar-container-bottom-right {
34
+ bottom: 0;
35
+ right: 0;
36
+ align-items: flex-end;
37
+ }
38
+
39
+ .snackbar-container-top {
40
+ top: 0;
41
+ left: 50%;
42
+ transform: translateX(-50%);
43
+ align-items: center;
44
+ }
45
+
46
+ .snackbar-container-top-left {
47
+ top: 0;
48
+ left: 0;
49
+ align-items: flex-start;
50
+ }
51
+
52
+ .snackbar-container-top-right {
53
+ top: 0;
54
+ right: 0;
55
+ align-items: flex-end;
56
+ }
57
+
58
+ /* Base Snackbar */
59
+ .snackbar {
60
+ display: flex;
61
+ align-items: center;
62
+ gap: 0.75rem;
63
+ min-width: 20rem;
64
+ max-width: 40rem;
65
+ padding: 0.875rem 1rem;
66
+ background-color: var(--color-surface-container-highest);
67
+ color: var(--color-on-surface);
68
+ border-radius: 0.5rem;
69
+ box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
70
+ pointer-events: auto;
71
+ opacity: 0;
72
+ transform: translateY(100%);
73
+ transition: opacity 200ms ease-out, transform 200ms ease-out;
74
+ }
75
+
76
+ .snackbar-container-top .snackbar,
77
+ .snackbar-container-top-left .snackbar,
78
+ .snackbar-container-top-right .snackbar {
79
+ transform: translateY(-100%);
80
+ }
81
+
82
+ /* Snackbar Open State */
83
+ .snackbar.snackbar-open,
84
+ .snackbar.snackbar-show,
85
+ .snackbar.show {
86
+ opacity: 1;
87
+ transform: translateY(0);
88
+ }
89
+
90
+ /* Standalone Position Variants (for snackbar without container) */
91
+ .snackbar.snackbar-bottom {
92
+ position: fixed;
93
+ bottom: 1rem;
94
+ left: 50%;
95
+ transform: translateX(-50%) translateY(100%);
96
+ z-index: 1100;
97
+ }
98
+
99
+ .snackbar.snackbar-bottom.snackbar-show {
100
+ transform: translateX(-50%) translateY(0);
101
+ }
102
+
103
+ .snackbar.snackbar-bottom-left {
104
+ position: fixed;
105
+ bottom: 1rem;
106
+ left: 1rem;
107
+ z-index: 1100;
108
+ }
109
+
110
+ .snackbar.snackbar-bottom-right {
111
+ position: fixed;
112
+ bottom: 1rem;
113
+ right: 1rem;
114
+ z-index: 1100;
115
+ }
116
+
117
+ .snackbar.snackbar-top {
118
+ position: fixed;
119
+ top: 1rem;
120
+ left: 50%;
121
+ transform: translateX(-50%) translateY(-100%);
122
+ z-index: 1100;
123
+ }
124
+
125
+ .snackbar.snackbar-top.snackbar-show {
126
+ transform: translateX(-50%) translateY(0);
127
+ }
128
+
129
+ .snackbar.snackbar-top-left {
130
+ position: fixed;
131
+ top: 1rem;
132
+ left: 1rem;
133
+ transform: translateY(-100%);
134
+ z-index: 1100;
135
+ }
136
+
137
+ .snackbar.snackbar-top-left.snackbar-show {
138
+ transform: translateY(0);
139
+ }
140
+
141
+ .snackbar.snackbar-top-right {
142
+ position: fixed;
143
+ top: 1rem;
144
+ right: 1rem;
145
+ transform: translateY(-100%);
146
+ z-index: 1100;
147
+ }
148
+
149
+ .snackbar.snackbar-top-right.snackbar-show {
150
+ transform: translateY(0);
151
+ }
152
+
153
+ .snackbar.snackbar-bottom-left.snackbar-show,
154
+ .snackbar.snackbar-bottom-right.snackbar-show {
155
+ transform: translateY(0);
156
+ }
157
+
158
+ /* Snackbar Message */
159
+ .snackbar-message {
160
+ flex: 1;
161
+ font-size: 0.875rem;
162
+ line-height: 1.25rem;
163
+ }
164
+
165
+ /* Snackbar Action */
166
+ .snackbar-action {
167
+ display: inline-flex;
168
+ align-items: center;
169
+ padding: 0.375rem 0.75rem;
170
+ font-size: 0.875rem;
171
+ font-weight: 500;
172
+ color: var(--color-primary);
173
+ background-color: transparent;
174
+ border: none;
175
+ border-radius: 0.25rem;
176
+ cursor: pointer;
177
+ transition: background-color 150ms ease-in-out;
178
+ white-space: nowrap;
179
+ flex-shrink: 0;
180
+ }
181
+
182
+ .snackbar-action:hover {
183
+ background-color: var(--color-primary-container);
184
+ }
185
+
186
+ .snackbar-action:focus-visible {
187
+ outline: 2px solid var(--color-primary);
188
+ outline-offset: 2px;
189
+ }
190
+
191
+ /* Snackbar Close */
192
+ .snackbar-close {
193
+ display: flex;
194
+ align-items: center;
195
+ justify-content: center;
196
+ width: 1.5rem;
197
+ height: 1.5rem;
198
+ font-size: 1rem;
199
+ color: var(--color-on-surface-variant);
200
+ background-color: transparent;
201
+ border: none;
202
+ border-radius: 50%;
203
+ cursor: pointer;
204
+ transition: background-color 150ms ease-in-out;
205
+ flex-shrink: 0;
206
+ }
207
+
208
+ .snackbar-close:hover {
209
+ background-color: var(--color-surface-container);
210
+ }
211
+
212
+ /* Color Variants */
213
+ .snackbar-info {
214
+ background-color: var(--color-info-container);
215
+ color: var(--color-on-info-container);
216
+ }
217
+
218
+ .snackbar-success {
219
+ background-color: var(--color-success-container);
220
+ color: var(--color-on-success-container);
221
+ }
222
+
223
+ .snackbar-warning {
224
+ background-color: var(--color-warning-container);
225
+ color: var(--color-on-warning-container);
226
+ }
227
+
228
+ .snackbar-error {
229
+ background-color: var(--color-error-container);
230
+ color: var(--color-on-error-container);
231
+ }
232
+
233
+ /* Brand Color Variants */
234
+ .snackbar-primary {
235
+ background-color: var(--color-primary-container);
236
+ color: var(--color-on-primary-container);
237
+ }
238
+
239
+ .snackbar-secondary {
240
+ background-color: var(--color-secondary-container);
241
+ color: var(--color-on-secondary-container);
242
+ }
243
+
244
+ .snackbar-tertiary {
245
+ background-color: var(--color-tertiary-container);
246
+ color: var(--color-on-tertiary-container);
247
+ }
248
+
249
+ /* Dark Snackbar (default MD3 style) */
250
+ .snackbar-dark {
251
+ background-color: var(--color-on-surface);
252
+ color: var(--color-surface);
253
+ }
254
+
255
+ .snackbar-dark .snackbar-action {
256
+ color: var(--color-primary-container);
257
+ }
258
+
259
+ .snackbar-dark .snackbar-close {
260
+ color: var(--color-surface);
261
+ }
262
+
263
+ /* Icon */
264
+ .snackbar-icon {
265
+ display: flex;
266
+ align-items: center;
267
+ justify-content: center;
268
+ flex-shrink: 0;
269
+ font-size: 1.25rem;
270
+ }
271
+
272
+ /* Multiline */
273
+ .snackbar-multiline {
274
+ flex-wrap: wrap;
275
+ min-height: 4rem;
276
+ }
277
+
278
+ .snackbar-multiline .snackbar-message {
279
+ width: 100%;
280
+ margin-bottom: 0.5rem;
281
+ }
282
+
283
+ .snackbar-multiline .snackbar-action {
284
+ margin-left: auto;
285
+ }
286
+
287
+ /* Responsive */
288
+ @media (max-width: 640px) {
289
+ .snackbar {
290
+ min-width: calc(100vw - 2rem);
291
+ max-width: calc(100vw - 2rem);
292
+ }
293
+
294
+ .snackbar-container {
295
+ left: 0;
296
+ right: 0;
297
+ transform: none;
298
+ }
299
+
300
+ .snackbar-container-bottom,
301
+ .snackbar-container-top {
302
+ align-items: stretch;
303
+ }
304
+ }
305
+
306
+ /* Reduce Motion */
307
+ @media (prefers-reduced-motion: reduce) {
308
+ .snackbar {
309
+ transition: opacity 0ms, transform 0ms;
310
+ }
311
+ }
312
+ }
313
+ `;
314
+
315
+ const sheet = new CSSStyleSheet();
316
+ sheet.replaceSync(css);
317
+ export const styles = sheet;
318
+ export default sheet;