@duskmoon-dev/core 1.0.0 → 1.1.1

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 (39) hide show
  1. package/dist/components/button.css +47 -46
  2. package/dist/components/index.css +47 -46
  3. package/dist/esm/components/accordion.js +251 -0
  4. package/dist/esm/components/alert.js +206 -0
  5. package/dist/esm/components/appbar.js +315 -0
  6. package/dist/esm/components/autocomplete.js +276 -0
  7. package/dist/esm/components/avatar.js +174 -0
  8. package/dist/esm/components/badge.js +185 -0
  9. package/dist/esm/components/bottom-navigation.js +270 -0
  10. package/dist/esm/components/bottomsheet.js +341 -0
  11. package/dist/esm/components/button.js +482 -0
  12. package/dist/esm/components/card.js +227 -0
  13. package/dist/esm/components/chip.js +218 -0
  14. package/dist/esm/components/collapse.js +261 -0
  15. package/dist/esm/components/datepicker.js +354 -0
  16. package/dist/esm/components/dialog.js +180 -0
  17. package/dist/esm/components/divider.js +291 -0
  18. package/dist/esm/components/drawer.js +378 -0
  19. package/dist/esm/components/file-upload.js +328 -0
  20. package/dist/esm/components/form.js +448 -0
  21. package/dist/esm/components/input.js +247 -0
  22. package/dist/esm/components/list.js +195 -0
  23. package/dist/esm/components/markdown-body.js +412 -0
  24. package/dist/esm/components/modal.js +298 -0
  25. package/dist/esm/components/navigation.js +399 -0
  26. package/dist/esm/components/popover.js +333 -0
  27. package/dist/esm/components/progress.js +245 -0
  28. package/dist/esm/components/rating.js +237 -0
  29. package/dist/esm/components/skeleton.js +223 -0
  30. package/dist/esm/components/slider.js +334 -0
  31. package/dist/esm/components/snackbar.js +318 -0
  32. package/dist/esm/components/stepper.js +320 -0
  33. package/dist/esm/components/switch.js +284 -0
  34. package/dist/esm/components/table.js +206 -0
  35. package/dist/esm/components/timeline.js +360 -0
  36. package/dist/esm/components/toast.js +258 -0
  37. package/dist/esm/components/tooltip.js +291 -0
  38. package/dist/index.css +47 -46
  39. package/package.json +108 -38
@@ -0,0 +1,354 @@
1
+ // Auto-generated from datepicker.css
2
+ export const css = `/**
3
+ * Datepicker Component Styles
4
+ * DuskMoonUI - Material Design 3 inspired datepicker system
5
+ */
6
+
7
+ @layer components {
8
+ /* Datepicker Container */
9
+ .datepicker {
10
+ position: relative;
11
+ display: inline-block;
12
+ width: 100%;
13
+ }
14
+
15
+ /* Datepicker Input */
16
+ .datepicker-input {
17
+ width: 100%;
18
+ padding: 0.75rem 2.5rem 0.75rem 1rem;
19
+ font-size: 0.875rem;
20
+ line-height: 1.5;
21
+ color: var(--color-on-surface);
22
+ background-color: var(--color-surface);
23
+ border: 1px solid var(--color-outline);
24
+ border-radius: 0.5rem;
25
+ transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
26
+ }
27
+
28
+ .datepicker-input:focus {
29
+ outline: none;
30
+ border-color: var(--color-primary);
31
+ box-shadow: 0 0 0 3px var(--color-primary-container);
32
+ }
33
+
34
+ .datepicker-input:disabled {
35
+ background-color: var(--color-surface-container);
36
+ color: var(--color-on-surface-variant);
37
+ cursor: not-allowed;
38
+ opacity: 0.6;
39
+ }
40
+
41
+ /* Calendar Icon */
42
+ .datepicker-icon {
43
+ position: absolute;
44
+ right: 0.75rem;
45
+ top: 50%;
46
+ transform: translateY(-50%);
47
+ display: flex;
48
+ align-items: center;
49
+ justify-content: center;
50
+ width: 1.25rem;
51
+ height: 1.25rem;
52
+ color: var(--color-on-surface-variant);
53
+ pointer-events: none;
54
+ }
55
+
56
+ /* Datepicker Dropdown */
57
+ .datepicker-dropdown {
58
+ position: absolute;
59
+ top: 100%;
60
+ left: 0;
61
+ z-index: 1000;
62
+ margin-top: 0.25rem;
63
+ background-color: var(--color-surface);
64
+ border: 1px solid var(--color-outline);
65
+ border-radius: 0.75rem;
66
+ box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
67
+ opacity: 0;
68
+ visibility: hidden;
69
+ transform: translateY(-0.5rem);
70
+ transition: opacity 150ms ease-out, visibility 150ms ease-out, transform 150ms ease-out;
71
+ }
72
+
73
+ .datepicker.datepicker-open .datepicker-dropdown,
74
+ .datepicker-dropdown.show {
75
+ opacity: 1;
76
+ visibility: visible;
77
+ transform: translateY(0);
78
+ }
79
+
80
+ /* Calendar Header */
81
+ .datepicker-header {
82
+ display: flex;
83
+ align-items: center;
84
+ justify-content: space-between;
85
+ padding: 0.75rem;
86
+ border-bottom: 1px solid var(--color-outline-variant);
87
+ }
88
+
89
+ .datepicker-title {
90
+ font-size: 0.875rem;
91
+ font-weight: 600;
92
+ color: var(--color-on-surface);
93
+ }
94
+
95
+ .datepicker-nav {
96
+ display: flex;
97
+ gap: 0.25rem;
98
+ }
99
+
100
+ .datepicker-nav-btn {
101
+ display: flex;
102
+ align-items: center;
103
+ justify-content: center;
104
+ width: 2rem;
105
+ height: 2rem;
106
+ color: var(--color-on-surface-variant);
107
+ background-color: transparent;
108
+ border: none;
109
+ border-radius: 50%;
110
+ cursor: pointer;
111
+ transition: background-color 150ms ease-in-out, color 150ms ease-in-out;
112
+ }
113
+
114
+ .datepicker-nav-btn:hover {
115
+ background-color: var(--color-surface-container);
116
+ color: var(--color-on-surface);
117
+ }
118
+
119
+ .datepicker-nav-btn:disabled {
120
+ opacity: 0.4;
121
+ cursor: not-allowed;
122
+ }
123
+
124
+ /* Calendar Body */
125
+ .datepicker-calendar {
126
+ padding: 0.5rem;
127
+ }
128
+
129
+ /* Weekday Headers */
130
+ .datepicker-weekdays {
131
+ display: grid;
132
+ grid-template-columns: repeat(7, 1fr);
133
+ gap: 0.125rem;
134
+ margin-bottom: 0.25rem;
135
+ }
136
+
137
+ .datepicker-weekday {
138
+ display: flex;
139
+ align-items: center;
140
+ justify-content: center;
141
+ height: 2rem;
142
+ font-size: 0.75rem;
143
+ font-weight: 500;
144
+ color: var(--color-on-surface-variant);
145
+ }
146
+
147
+ /* Days Grid */
148
+ .datepicker-days {
149
+ display: grid;
150
+ grid-template-columns: repeat(7, 1fr);
151
+ gap: 0.125rem;
152
+ }
153
+
154
+ .datepicker-day {
155
+ display: flex;
156
+ align-items: center;
157
+ justify-content: center;
158
+ width: 2.5rem;
159
+ height: 2.5rem;
160
+ font-size: 0.875rem;
161
+ color: var(--color-on-surface);
162
+ background-color: transparent;
163
+ border: none;
164
+ border-radius: 50%;
165
+ cursor: pointer;
166
+ transition: background-color 150ms ease-in-out, color 150ms ease-in-out;
167
+ }
168
+
169
+ .datepicker-day:hover:not(:disabled):not(.datepicker-day-selected) {
170
+ background-color: var(--color-surface-container);
171
+ }
172
+
173
+ .datepicker-day:focus-visible {
174
+ outline: 2px solid var(--color-primary);
175
+ outline-offset: 2px;
176
+ }
177
+
178
+ .datepicker-day-other-month {
179
+ color: var(--color-on-surface-variant);
180
+ opacity: 0.5;
181
+ }
182
+
183
+ .datepicker-day-today {
184
+ border: 1px solid var(--color-primary);
185
+ }
186
+
187
+ .datepicker-day-selected {
188
+ background-color: var(--color-primary);
189
+ color: var(--color-on-primary);
190
+ }
191
+
192
+ .datepicker-day-selected:hover {
193
+ background-color: var(--color-primary);
194
+ opacity: 0.9;
195
+ }
196
+
197
+ .datepicker-day:disabled {
198
+ color: var(--color-on-surface-variant);
199
+ opacity: 0.4;
200
+ cursor: not-allowed;
201
+ }
202
+
203
+ /* Range Selection */
204
+ .datepicker-day-in-range {
205
+ background-color: var(--color-primary-container);
206
+ color: var(--color-on-primary-container);
207
+ border-radius: 0;
208
+ }
209
+
210
+ .datepicker-day-range-start {
211
+ background-color: var(--color-primary);
212
+ color: var(--color-on-primary);
213
+ border-radius: 50% 0 0 50%;
214
+ }
215
+
216
+ .datepicker-day-range-end {
217
+ background-color: var(--color-primary);
218
+ color: var(--color-on-primary);
219
+ border-radius: 0 50% 50% 0;
220
+ }
221
+
222
+ /* Month/Year View */
223
+ .datepicker-months,
224
+ .datepicker-years {
225
+ display: grid;
226
+ grid-template-columns: repeat(3, 1fr);
227
+ gap: 0.5rem;
228
+ padding: 0.5rem;
229
+ }
230
+
231
+ .datepicker-month,
232
+ .datepicker-year {
233
+ display: flex;
234
+ align-items: center;
235
+ justify-content: center;
236
+ height: 3rem;
237
+ font-size: 0.875rem;
238
+ color: var(--color-on-surface);
239
+ background-color: transparent;
240
+ border: none;
241
+ border-radius: 0.5rem;
242
+ cursor: pointer;
243
+ transition: background-color 150ms ease-in-out;
244
+ }
245
+
246
+ .datepicker-month:hover,
247
+ .datepicker-year:hover {
248
+ background-color: var(--color-surface-container);
249
+ }
250
+
251
+ .datepicker-month.selected,
252
+ .datepicker-year.selected {
253
+ background-color: var(--color-primary);
254
+ color: var(--color-on-primary);
255
+ }
256
+
257
+ /* Footer Actions */
258
+ .datepicker-footer {
259
+ display: flex;
260
+ justify-content: flex-end;
261
+ gap: 0.5rem;
262
+ padding: 0.75rem;
263
+ border-top: 1px solid var(--color-outline-variant);
264
+ }
265
+
266
+ /* Time Picker */
267
+ .datepicker-time {
268
+ display: flex;
269
+ align-items: center;
270
+ justify-content: center;
271
+ gap: 0.25rem;
272
+ padding: 0.75rem;
273
+ border-top: 1px solid var(--color-outline-variant);
274
+ }
275
+
276
+ .datepicker-time-input {
277
+ width: 3rem;
278
+ padding: 0.5rem;
279
+ font-size: 1rem;
280
+ text-align: center;
281
+ color: var(--color-on-surface);
282
+ background-color: var(--color-surface-container);
283
+ border: 1px solid var(--color-outline);
284
+ border-radius: 0.25rem;
285
+ }
286
+
287
+ .datepicker-time-input:focus {
288
+ outline: none;
289
+ border-color: var(--color-primary);
290
+ }
291
+
292
+ .datepicker-time-separator {
293
+ font-size: 1rem;
294
+ font-weight: 600;
295
+ color: var(--color-on-surface);
296
+ }
297
+
298
+ .datepicker-time-period {
299
+ display: flex;
300
+ flex-direction: column;
301
+ gap: 0.125rem;
302
+ margin-left: 0.5rem;
303
+ }
304
+
305
+ .datepicker-time-period-btn {
306
+ padding: 0.25rem 0.5rem;
307
+ font-size: 0.625rem;
308
+ font-weight: 500;
309
+ color: var(--color-on-surface-variant);
310
+ background-color: transparent;
311
+ border: 1px solid var(--color-outline);
312
+ cursor: pointer;
313
+ transition: background-color 150ms ease-in-out;
314
+ }
315
+
316
+ .datepicker-time-period-btn:first-child {
317
+ border-radius: 0.25rem 0.25rem 0 0;
318
+ }
319
+
320
+ .datepicker-time-period-btn:last-child {
321
+ border-radius: 0 0 0.25rem 0.25rem;
322
+ border-top: none;
323
+ }
324
+
325
+ .datepicker-time-period-btn.active {
326
+ background-color: var(--color-primary);
327
+ color: var(--color-on-primary);
328
+ border-color: var(--color-primary);
329
+ }
330
+
331
+ /* Size Variants */
332
+ .datepicker-sm .datepicker-input {
333
+ padding: 0.5rem 2rem 0.5rem 0.75rem;
334
+ font-size: 0.75rem;
335
+ }
336
+
337
+ .datepicker-lg .datepicker-input {
338
+ padding: 1rem 3rem 1rem 1.25rem;
339
+ font-size: 1rem;
340
+ }
341
+
342
+ /* Reduce Motion */
343
+ @media (prefers-reduced-motion: reduce) {
344
+ .datepicker-dropdown {
345
+ transition: none;
346
+ }
347
+ }
348
+ }
349
+ `;
350
+
351
+ const sheet = new CSSStyleSheet();
352
+ sheet.replaceSync(css);
353
+ export const styles = sheet;
354
+ export default sheet;
@@ -0,0 +1,180 @@
1
+ // Auto-generated from dialog.css
2
+ export const css = `/**
3
+ * Dialog Component Styles
4
+ * DuskMoonUI - Material Design 3 inspired dialog system
5
+ * Uses native HTML <dialog> element for accessibility and built-in functionality
6
+ */
7
+
8
+ @layer components {
9
+ /* Native Dialog Element */
10
+ dialog.dialog {
11
+ position: fixed;
12
+ margin: auto;
13
+ padding: 0;
14
+ border: none;
15
+ width: 100%;
16
+ max-width: 28rem;
17
+ max-height: calc(100vh - 4rem);
18
+ background-color: var(--color-surface);
19
+ color: var(--color-on-surface);
20
+ border-radius: 1.5rem;
21
+ box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
22
+ overflow: hidden;
23
+ }
24
+
25
+ /* Dialog Backdrop (native ::backdrop) */
26
+ dialog.dialog::backdrop {
27
+ background-color: rgb(0 0 0 / 0.5);
28
+ }
29
+
30
+ /* Dialog Box - inner container for flex layout */
31
+ .dialog-box {
32
+ display: flex;
33
+ flex-direction: column;
34
+ max-height: calc(100vh - 4rem);
35
+ overflow: hidden;
36
+ }
37
+
38
+ /* Dialog Header */
39
+ .dialog-header {
40
+ display: flex;
41
+ align-items: center;
42
+ gap: 1rem;
43
+ padding: 1.5rem 1.5rem 0;
44
+ }
45
+
46
+ .dialog-title {
47
+ flex: 1;
48
+ font-size: 1.25rem;
49
+ font-weight: 600;
50
+ line-height: 1.75rem;
51
+ margin: 0;
52
+ color: var(--color-on-surface);
53
+ }
54
+
55
+ /* Dialog Close Button */
56
+ .dialog-close {
57
+ display: flex;
58
+ align-items: center;
59
+ justify-content: center;
60
+ width: 2rem;
61
+ height: 2rem;
62
+ font-size: 1.25rem;
63
+ color: var(--color-on-surface-variant);
64
+ background-color: transparent;
65
+ border: none;
66
+ border-radius: 50%;
67
+ cursor: pointer;
68
+ transition: background-color 150ms ease-in-out, color 150ms ease-in-out;
69
+ flex-shrink: 0;
70
+ }
71
+
72
+ .dialog-close:hover {
73
+ background-color: var(--color-surface-container);
74
+ color: var(--color-on-surface);
75
+ }
76
+
77
+ .dialog-close:focus-visible {
78
+ outline: 2px solid var(--color-primary);
79
+ outline-offset: 2px;
80
+ }
81
+
82
+ /* Dialog Body */
83
+ .dialog-body {
84
+ padding: 1rem 1.5rem;
85
+ overflow-y: auto;
86
+ color: var(--color-on-surface-variant);
87
+ line-height: 1.5;
88
+ }
89
+
90
+ /* Dialog Footer */
91
+ .dialog-footer {
92
+ display: flex;
93
+ justify-content: flex-end;
94
+ gap: 0.5rem;
95
+ padding: 1rem 1.5rem 1.5rem;
96
+ }
97
+
98
+ .dialog-footer-start {
99
+ justify-content: flex-start;
100
+ }
101
+
102
+ .dialog-footer-center {
103
+ justify-content: center;
104
+ }
105
+
106
+ .dialog-footer-between {
107
+ justify-content: space-between;
108
+ }
109
+
110
+ /* Size Variants */
111
+ dialog.dialog.dialog-sm {
112
+ max-width: 20rem;
113
+ }
114
+
115
+ dialog.dialog.dialog-lg {
116
+ max-width: 40rem;
117
+ }
118
+
119
+ dialog.dialog.dialog-xl {
120
+ max-width: 56rem;
121
+ }
122
+
123
+ dialog.dialog.dialog-fullscreen {
124
+ max-width: 100%;
125
+ max-height: 100%;
126
+ width: 100%;
127
+ height: 100%;
128
+ border-radius: 0;
129
+ margin: 0;
130
+ }
131
+
132
+ dialog.dialog.dialog-fullscreen .dialog-box {
133
+ max-height: 100%;
134
+ }
135
+
136
+ /* Position Variants */
137
+ dialog.dialog.dialog-top {
138
+ margin-top: 2rem;
139
+ margin-bottom: auto;
140
+ }
141
+
142
+ dialog.dialog.dialog-bottom {
143
+ margin-top: auto;
144
+ margin-bottom: 2rem;
145
+ }
146
+
147
+ /* Scrollable Dialog */
148
+ .dialog-scrollable .dialog-body {
149
+ max-height: 50vh;
150
+ overflow-y: auto;
151
+ }
152
+
153
+ /* Dialog Dividers */
154
+ .dialog-divider .dialog-header {
155
+ border-bottom: 1px solid var(--color-outline-variant);
156
+ padding-bottom: 1rem;
157
+ }
158
+
159
+ .dialog-divider .dialog-footer {
160
+ border-top: 1px solid var(--color-outline-variant);
161
+ padding-top: 1rem;
162
+ }
163
+
164
+ /* Reduce Motion */
165
+ @media (prefers-reduced-motion: reduce) {
166
+ .dialog {
167
+ transition: visibility 0ms, opacity 0ms;
168
+ }
169
+
170
+ .dialog-box {
171
+ transition: transform 0ms;
172
+ }
173
+ }
174
+ }
175
+ `;
176
+
177
+ const sheet = new CSSStyleSheet();
178
+ sheet.replaceSync(css);
179
+ export const styles = sheet;
180
+ export default sheet;