@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,298 @@
1
+ // Auto-generated from modal.css
2
+ export const css = `/**
3
+ * Modal Component Styles
4
+ * DuskMoonUI - Material Design 3 inspired modal/dialog system
5
+ */
6
+
7
+ @layer components {
8
+ /* Modal Container */
9
+ .modal {
10
+ position: fixed;
11
+ inset: 0;
12
+ z-index: 999;
13
+ display: flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+ padding: 1rem;
17
+ visibility: hidden;
18
+ opacity: 0;
19
+ transition: visibility 200ms ease-out, opacity 200ms ease-out;
20
+ }
21
+
22
+ /* Modal Open State */
23
+ .modal.modal-open,
24
+ .modal:target {
25
+ visibility: visible;
26
+ opacity: 1;
27
+ }
28
+
29
+ /* Modal Box */
30
+ .modal-box {
31
+ position: relative;
32
+ z-index: 1;
33
+ max-width: 32rem;
34
+ max-height: calc(100vh - 5rem);
35
+ padding: 1.5rem;
36
+ background-color: var(--color-surface);
37
+ color: var(--color-on-surface);
38
+ border-radius: 1rem;
39
+ box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
40
+ overflow-y: auto;
41
+ transform: scale(0.95);
42
+ transition: transform 200ms ease-out;
43
+ }
44
+
45
+ .modal.modal-open .modal-box,
46
+ .modal:target .modal-box {
47
+ transform: scale(1);
48
+ }
49
+
50
+ /* Modal Backdrop */
51
+ .modal-backdrop {
52
+ position: fixed;
53
+ inset: 0;
54
+ z-index: -1;
55
+ background-color: rgb(0 0 0 / 0.5);
56
+ cursor: pointer;
57
+ }
58
+
59
+ .modal-backdrop::before {
60
+ content: '';
61
+ position: absolute;
62
+ inset: 0;
63
+ }
64
+
65
+ /* Modal Action */
66
+ .modal-action {
67
+ display: flex;
68
+ justify-content: flex-end;
69
+ gap: 0.5rem;
70
+ margin-top: 1.5rem;
71
+ padding-top: 1rem;
72
+ }
73
+
74
+ /* Modal Toggle (CSS-only) */
75
+ .modal-toggle {
76
+ position: fixed;
77
+ width: 0;
78
+ height: 0;
79
+ appearance: none;
80
+ opacity: 0;
81
+ }
82
+
83
+ .modal-toggle:checked + .modal {
84
+ visibility: visible;
85
+ opacity: 1;
86
+ }
87
+
88
+ .modal-toggle:checked + .modal .modal-box {
89
+ transform: scale(1);
90
+ }
91
+
92
+ /* Modal Sizes */
93
+ .modal-sm .modal-box {
94
+ max-width: 20rem;
95
+ }
96
+
97
+ .modal-lg .modal-box {
98
+ max-width: 48rem;
99
+ }
100
+
101
+ .modal-full .modal-box {
102
+ max-width: calc(100vw - 2rem);
103
+ max-height: calc(100vh - 2rem);
104
+ width: 100%;
105
+ height: 100%;
106
+ }
107
+
108
+ /* Modal Positions */
109
+ .modal-top {
110
+ align-items: flex-start;
111
+ padding-top: 2rem;
112
+ }
113
+
114
+ .modal-bottom {
115
+ align-items: flex-end;
116
+ padding-bottom: 2rem;
117
+ }
118
+
119
+ .modal-middle {
120
+ align-items: center;
121
+ }
122
+
123
+ /* Modal Close Button */
124
+ .modal-close {
125
+ position: absolute;
126
+ top: 0.75rem;
127
+ right: 0.75rem;
128
+ display: flex;
129
+ align-items: center;
130
+ justify-content: center;
131
+ width: 2rem;
132
+ height: 2rem;
133
+ font-size: 1.25rem;
134
+ color: var(--color-on-surface-variant);
135
+ background-color: transparent;
136
+ border: none;
137
+ border-radius: 50%;
138
+ cursor: pointer;
139
+ transition: background-color 150ms ease-in-out, color 150ms ease-in-out;
140
+ }
141
+
142
+ .modal-close:hover {
143
+ background-color: var(--color-surface-container);
144
+ color: var(--color-on-surface);
145
+ }
146
+
147
+ .modal-close:focus-visible {
148
+ outline: 2px solid var(--color-primary);
149
+ outline-offset: 2px;
150
+ }
151
+
152
+ /* Modal Header */
153
+ .modal-header {
154
+ margin-bottom: 1rem;
155
+ padding-right: 2rem;
156
+ }
157
+
158
+ .modal-title {
159
+ font-size: 1.25rem;
160
+ font-weight: 600;
161
+ color: var(--color-on-surface);
162
+ margin: 0;
163
+ }
164
+
165
+ /* Modal Body */
166
+ .modal-body {
167
+ color: var(--color-on-surface-variant);
168
+ line-height: 1.5;
169
+ }
170
+
171
+ /* Responsive Modal */
172
+ @media (max-width: 640px) {
173
+ .modal-box {
174
+ max-width: calc(100vw - 2rem);
175
+ margin: 1rem;
176
+ }
177
+
178
+ .modal-responsive {
179
+ align-items: flex-end;
180
+ padding: 0;
181
+ }
182
+
183
+ .modal-responsive .modal-box {
184
+ max-width: 100%;
185
+ max-height: 90vh;
186
+ margin: 0;
187
+ border-radius: 1rem 1rem 0 0;
188
+ }
189
+ }
190
+
191
+ /* Drawer Modal */
192
+ .drawer-modal {
193
+ align-items: stretch;
194
+ justify-content: flex-end;
195
+ padding: 0;
196
+ }
197
+
198
+ .drawer-modal .modal-box {
199
+ max-width: 20rem;
200
+ max-height: 100vh;
201
+ height: 100%;
202
+ margin: 0;
203
+ border-radius: 0;
204
+ transform: translateX(100%);
205
+ }
206
+
207
+ .drawer-modal.modal-open .modal-box,
208
+ .drawer-modal:target .modal-box {
209
+ transform: translateX(0);
210
+ }
211
+
212
+ .drawer-modal-left {
213
+ justify-content: flex-start;
214
+ }
215
+
216
+ .drawer-modal-left .modal-box {
217
+ transform: translateX(-100%);
218
+ }
219
+
220
+ .drawer-modal-left.modal-open .modal-box,
221
+ .drawer-modal-left:target .modal-box {
222
+ transform: translateX(0);
223
+ }
224
+
225
+ /* Alert/Confirm Dialog */
226
+ .alert-dialog {
227
+ text-align: center;
228
+ }
229
+
230
+ .alert-dialog .modal-box {
231
+ max-width: 24rem;
232
+ }
233
+
234
+ .alert-dialog .modal-icon {
235
+ width: 4rem;
236
+ height: 4rem;
237
+ margin: 0 auto 1rem;
238
+ display: flex;
239
+ align-items: center;
240
+ justify-content: center;
241
+ border-radius: 50%;
242
+ font-size: 2rem;
243
+ }
244
+
245
+ .alert-dialog .modal-icon.info {
246
+ background-color: var(--color-info-container);
247
+ color: var(--color-on-info-container);
248
+ }
249
+
250
+ .alert-dialog .modal-icon.success {
251
+ background-color: var(--color-success-container);
252
+ color: var(--color-on-success-container);
253
+ }
254
+
255
+ .alert-dialog .modal-icon.warning {
256
+ background-color: var(--color-warning-container);
257
+ color: var(--color-on-warning-container);
258
+ }
259
+
260
+ .alert-dialog .modal-icon.error {
261
+ background-color: var(--color-error-container);
262
+ color: var(--color-on-error-container);
263
+ }
264
+
265
+ .alert-dialog .modal-action {
266
+ justify-content: center;
267
+ }
268
+
269
+ /* Reduce Motion */
270
+ @media (prefers-reduced-motion: reduce) {
271
+ .modal {
272
+ transition: visibility 0ms, opacity 0ms;
273
+ }
274
+
275
+ .modal-box {
276
+ transition: transform 0ms;
277
+ }
278
+ }
279
+
280
+ /* Focus Trap Helper */
281
+ .modal-focus-trap {
282
+ position: absolute;
283
+ width: 1px;
284
+ height: 1px;
285
+ padding: 0;
286
+ margin: -1px;
287
+ overflow: hidden;
288
+ clip: rect(0, 0, 0, 0);
289
+ white-space: nowrap;
290
+ border: 0;
291
+ }
292
+ }
293
+ `;
294
+
295
+ const sheet = new CSSStyleSheet();
296
+ sheet.replaceSync(css);
297
+ export const styles = sheet;
298
+ export default sheet;
@@ -0,0 +1,399 @@
1
+ // Auto-generated from navigation.css
2
+ export const css = `/**
3
+ * Navigation Component Styles
4
+ * DuskMoonUI - Material Design 3 inspired navigation system
5
+ */
6
+
7
+ @layer components {
8
+ /* Navbar Base */
9
+ .navbar {
10
+ display: flex;
11
+ align-items: center;
12
+ width: 100%;
13
+ min-height: 4rem;
14
+ padding: 0.5rem 1rem;
15
+ background-color: var(--color-surface);
16
+ color: var(--color-on-surface);
17
+ }
18
+
19
+ .navbar-start {
20
+ display: flex;
21
+ align-items: center;
22
+ flex: 1;
23
+ justify-content: flex-start;
24
+ gap: 0.5rem;
25
+ }
26
+
27
+ .navbar-center {
28
+ display: flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ flex-shrink: 0;
32
+ gap: 0.5rem;
33
+ }
34
+
35
+ .navbar-end {
36
+ display: flex;
37
+ align-items: center;
38
+ flex: 1;
39
+ justify-content: flex-end;
40
+ gap: 0.5rem;
41
+ }
42
+
43
+ /* Menu */
44
+ .menu {
45
+ display: flex;
46
+ flex-wrap: wrap;
47
+ list-style: none;
48
+ margin: 0;
49
+ padding: 0.5rem;
50
+ gap: 0.25rem;
51
+ }
52
+
53
+ .menu li {
54
+ display: flex;
55
+ flex-shrink: 0;
56
+ }
57
+
58
+ .menu li > a,
59
+ .menu li > button,
60
+ .menu-item {
61
+ display: flex;
62
+ align-items: center;
63
+ gap: 0.5rem;
64
+ padding: 0.5rem 1rem;
65
+ font-size: 0.875rem;
66
+ color: var(--color-on-surface);
67
+ text-decoration: none;
68
+ border-radius: 0.5rem;
69
+ cursor: pointer;
70
+ transition: background-color 150ms ease-in-out, color 150ms ease-in-out;
71
+ white-space: nowrap;
72
+ }
73
+
74
+ .menu li > a:hover,
75
+ .menu li > button:hover,
76
+ .menu-item:hover {
77
+ background-color: var(--color-surface-container);
78
+ }
79
+
80
+ .menu li > a:focus-visible,
81
+ .menu li > button:focus-visible,
82
+ .menu-item:focus-visible {
83
+ outline: 2px solid var(--color-primary);
84
+ outline-offset: -2px;
85
+ }
86
+
87
+ .menu li > a.active,
88
+ .menu li > button.active,
89
+ .menu-item.active,
90
+ .menu li > a[aria-current="page"],
91
+ .menu li > button[aria-current="page"] {
92
+ background-color: var(--color-primary-container);
93
+ color: var(--color-on-primary-container);
94
+ }
95
+
96
+ .menu li.disabled > a,
97
+ .menu li.disabled > button,
98
+ .menu-item:disabled {
99
+ opacity: 0.5;
100
+ pointer-events: none;
101
+ }
102
+
103
+ /* Menu Horizontal */
104
+ .menu-horizontal {
105
+ flex-direction: row;
106
+ }
107
+
108
+ /* Menu Vertical */
109
+ .menu-vertical {
110
+ flex-direction: column;
111
+ }
112
+
113
+ .menu-vertical li {
114
+ width: 100%;
115
+ }
116
+
117
+ .menu-vertical li > a,
118
+ .menu-vertical li > button,
119
+ .menu-vertical .menu-item {
120
+ width: 100%;
121
+ }
122
+
123
+ /* Menu Compact */
124
+ .menu-compact li > a,
125
+ .menu-compact li > button,
126
+ .menu-compact .menu-item {
127
+ padding: 0.375rem 0.75rem;
128
+ font-size: 0.8125rem;
129
+ }
130
+
131
+ /* Menu Title */
132
+ .menu-title {
133
+ padding: 0.5rem 1rem;
134
+ font-size: 0.75rem;
135
+ font-weight: 600;
136
+ text-transform: uppercase;
137
+ letter-spacing: 0.05em;
138
+ color: var(--color-on-surface-variant);
139
+ }
140
+
141
+ /* Breadcrumbs */
142
+ .breadcrumbs {
143
+ display: flex;
144
+ align-items: center;
145
+ flex-wrap: wrap;
146
+ gap: 0.5rem;
147
+ padding: 0.5rem 0;
148
+ list-style: none;
149
+ margin: 0;
150
+ font-size: 0.875rem;
151
+ }
152
+
153
+ .breadcrumbs li {
154
+ display: flex;
155
+ align-items: center;
156
+ gap: 0.5rem;
157
+ }
158
+
159
+ .breadcrumbs li::after {
160
+ content: '/';
161
+ color: var(--color-on-surface-variant);
162
+ opacity: 0.5;
163
+ }
164
+
165
+ .breadcrumbs li:last-child::after {
166
+ display: none;
167
+ }
168
+
169
+ .breadcrumbs li > a {
170
+ color: var(--color-primary);
171
+ text-decoration: none;
172
+ transition: color 150ms ease-in-out;
173
+ }
174
+
175
+ .breadcrumbs li > a:hover {
176
+ text-decoration: underline;
177
+ }
178
+
179
+ .breadcrumbs li:last-child {
180
+ color: var(--color-on-surface-variant);
181
+ }
182
+
183
+ /* Tabs */
184
+ .tabs {
185
+ display: flex;
186
+ flex-wrap: wrap;
187
+ gap: 0.25rem;
188
+ border-bottom: 1px solid var(--color-outline);
189
+ }
190
+
191
+ .tab {
192
+ display: inline-flex;
193
+ align-items: center;
194
+ justify-content: center;
195
+ gap: 0.5rem;
196
+ padding: 0.75rem 1.25rem;
197
+ font-size: 0.875rem;
198
+ font-weight: 500;
199
+ color: var(--color-on-surface-variant);
200
+ text-decoration: none;
201
+ background-color: transparent;
202
+ border: none;
203
+ border-bottom: 2px solid transparent;
204
+ cursor: pointer;
205
+ transition: all 150ms ease-in-out;
206
+ position: relative;
207
+ margin-bottom: -1px;
208
+ }
209
+
210
+ .tab:hover {
211
+ color: var(--color-on-surface);
212
+ background-color: var(--color-surface-container);
213
+ }
214
+
215
+ .tab:focus-visible {
216
+ outline: 2px solid var(--color-primary);
217
+ outline-offset: -2px;
218
+ }
219
+
220
+ .tab.tab-active,
221
+ .tab[aria-selected="true"] {
222
+ color: var(--color-primary);
223
+ border-bottom-color: var(--color-primary);
224
+ }
225
+
226
+ .tab:disabled {
227
+ opacity: 0.5;
228
+ cursor: not-allowed;
229
+ }
230
+
231
+ /* Tabs Boxed */
232
+ .tabs-boxed {
233
+ background-color: var(--color-surface-container);
234
+ border-radius: 0.5rem;
235
+ padding: 0.25rem;
236
+ border: none;
237
+ }
238
+
239
+ .tabs-boxed .tab {
240
+ border-radius: 0.375rem;
241
+ border-bottom: none;
242
+ margin-bottom: 0;
243
+ }
244
+
245
+ .tabs-boxed .tab.tab-active,
246
+ .tabs-boxed .tab[aria-selected="true"] {
247
+ background-color: var(--color-surface);
248
+ color: var(--color-on-surface);
249
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
250
+ }
251
+
252
+ /* Tabs Lifted */
253
+ .tabs-lifted {
254
+ border: none;
255
+ }
256
+
257
+ .tabs-lifted .tab {
258
+ border: 1px solid transparent;
259
+ border-bottom: none;
260
+ border-radius: 0.5rem 0.5rem 0 0;
261
+ margin-bottom: -1px;
262
+ }
263
+
264
+ .tabs-lifted .tab.tab-active,
265
+ .tabs-lifted .tab[aria-selected="true"] {
266
+ background-color: var(--color-surface);
267
+ border-color: var(--color-outline);
268
+ border-bottom-color: var(--color-surface);
269
+ }
270
+
271
+ /* Tab Sizes */
272
+ .tab-xs {
273
+ padding: 0.375rem 0.625rem;
274
+ font-size: 0.75rem;
275
+ }
276
+
277
+ .tab-sm {
278
+ padding: 0.5rem 0.875rem;
279
+ font-size: 0.8125rem;
280
+ }
281
+
282
+ .tab-lg {
283
+ padding: 1rem 1.5rem;
284
+ font-size: 1rem;
285
+ }
286
+
287
+ /* Dropdown */
288
+ .dropdown {
289
+ position: relative;
290
+ display: inline-block;
291
+ }
292
+
293
+ .dropdown-content {
294
+ position: absolute;
295
+ z-index: 50;
296
+ min-width: 12rem;
297
+ padding: 0.5rem;
298
+ background-color: var(--color-surface);
299
+ border: 1px solid var(--color-outline);
300
+ border-radius: 0.5rem;
301
+ box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
302
+ opacity: 0;
303
+ visibility: hidden;
304
+ transform: translateY(-0.5rem);
305
+ transition: all 150ms ease-in-out;
306
+ }
307
+
308
+ .dropdown:hover .dropdown-content,
309
+ .dropdown:focus-within .dropdown-content,
310
+ .dropdown.dropdown-open .dropdown-content {
311
+ opacity: 1;
312
+ visibility: visible;
313
+ transform: translateY(0);
314
+ }
315
+
316
+ /* Dropdown Positions */
317
+ .dropdown-end .dropdown-content {
318
+ right: 0;
319
+ }
320
+
321
+ .dropdown-top .dropdown-content {
322
+ bottom: 100%;
323
+ top: auto;
324
+ margin-bottom: 0.25rem;
325
+ }
326
+
327
+ .dropdown-left .dropdown-content {
328
+ right: 100%;
329
+ left: auto;
330
+ top: 0;
331
+ margin-right: 0.25rem;
332
+ }
333
+
334
+ .dropdown-right .dropdown-content {
335
+ left: 100%;
336
+ right: auto;
337
+ top: 0;
338
+ margin-left: 0.25rem;
339
+ }
340
+
341
+ /* Pagination */
342
+ .pagination {
343
+ display: flex;
344
+ align-items: center;
345
+ gap: 0.25rem;
346
+ list-style: none;
347
+ margin: 0;
348
+ padding: 0;
349
+ }
350
+
351
+ .pagination li > a,
352
+ .pagination li > button {
353
+ display: flex;
354
+ align-items: center;
355
+ justify-content: center;
356
+ min-width: 2.5rem;
357
+ height: 2.5rem;
358
+ padding: 0 0.5rem;
359
+ font-size: 0.875rem;
360
+ color: var(--color-on-surface);
361
+ background-color: transparent;
362
+ border: 1px solid var(--color-outline);
363
+ border-radius: 0.5rem;
364
+ cursor: pointer;
365
+ transition: all 150ms ease-in-out;
366
+ }
367
+
368
+ .pagination li > a:hover,
369
+ .pagination li > button:hover {
370
+ background-color: var(--color-surface-container);
371
+ }
372
+
373
+ .pagination li > a.active,
374
+ .pagination li > button.active,
375
+ .pagination li > a[aria-current="page"],
376
+ .pagination li > button[aria-current="page"] {
377
+ background-color: var(--color-primary);
378
+ color: var(--color-primary-content);
379
+ border-color: var(--color-primary);
380
+ }
381
+
382
+ .pagination li > a:focus-visible,
383
+ .pagination li > button:focus-visible {
384
+ outline: 2px solid var(--color-primary);
385
+ outline-offset: 2px;
386
+ }
387
+
388
+ .pagination li > a:disabled,
389
+ .pagination li > button:disabled {
390
+ opacity: 0.5;
391
+ cursor: not-allowed;
392
+ }
393
+ }
394
+ `;
395
+
396
+ const sheet = new CSSStyleSheet();
397
+ sheet.replaceSync(css);
398
+ export const styles = sheet;
399
+ export default sheet;