@duskmoon-dev/core 1.19.4 → 1.19.6

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 (42) hide show
  1. package/README.md +1 -1
  2. package/dist/components/alert.css +81 -3
  3. package/dist/components/dialog.css +29 -3
  4. package/dist/components/dropdown.css +91 -0
  5. package/dist/components/fab.css +182 -0
  6. package/dist/components/index.css +1119 -232
  7. package/dist/components/loading.css +105 -0
  8. package/dist/components/modal.css +66 -4
  9. package/dist/components/navigation.css +94 -54
  10. package/dist/components/progress.css +74 -0
  11. package/dist/components/radial-progress.css +47 -0
  12. package/dist/components/skeleton.css +13 -1
  13. package/dist/components/snackbar.css +48 -18
  14. package/dist/components/swap.css +116 -0
  15. package/dist/components/toast.css +188 -34
  16. package/dist/components/tooltip.css +2 -47
  17. package/dist/esm/components/alert.js +81 -3
  18. package/dist/esm/components/dialog.js +29 -3
  19. package/dist/esm/components/dropdown.d.ts +5 -0
  20. package/dist/esm/components/dropdown.js +100 -0
  21. package/dist/esm/components/fab.d.ts +5 -0
  22. package/dist/esm/components/fab.js +191 -0
  23. package/dist/esm/components/loading.d.ts +5 -0
  24. package/dist/esm/components/loading.js +114 -0
  25. package/dist/esm/components/modal.js +66 -4
  26. package/dist/esm/components/navigation.js +94 -54
  27. package/dist/esm/components/progress.js +74 -0
  28. package/dist/esm/components/radial-progress.d.ts +5 -0
  29. package/dist/esm/components/radial-progress.js +56 -0
  30. package/dist/esm/components/skeleton.js +13 -1
  31. package/dist/esm/components/snackbar.js +48 -18
  32. package/dist/esm/components/swap.d.ts +5 -0
  33. package/dist/esm/components/swap.js +125 -0
  34. package/dist/esm/components/toast.js +188 -34
  35. package/dist/esm/components/tooltip.js +2 -47
  36. package/dist/index.css +1119 -232
  37. package/dist/index.min.css +1 -1
  38. package/dist/standalone/duskmoonui-themes.css +1 -1
  39. package/dist/standalone/duskmoonui.css +1120 -233
  40. package/dist/standalone/duskmoonui.js +25 -9
  41. package/dist/standalone/duskmoonui.mjs +25 -9
  42. package/package.json +31 -1
@@ -31,7 +31,7 @@ export const css = `/**
31
31
  position: relative;
32
32
  z-index: 1;
33
33
  max-width: 32rem;
34
- max-height: calc(100vh - 5rem);
34
+ max-height: calc(100dvh - 5rem);
35
35
  padding: 1.5rem;
36
36
  background-color: var(--color-surface);
37
37
  color: var(--color-on-surface);
@@ -63,8 +63,10 @@ export const css = `/**
63
63
  }
64
64
 
65
65
  /* Modal Action */
66
- .modal-action {
66
+ .modal-action,
67
+ .modal-footer {
67
68
  display: flex;
69
+ flex-wrap: wrap;
68
70
  justify-content: flex-end;
69
71
  gap: 0.5rem;
70
72
  margin-top: 1.5rem;
@@ -94,10 +96,18 @@ export const css = `/**
94
96
  max-width: 20rem;
95
97
  }
96
98
 
99
+ .modal-md .modal-box {
100
+ max-width: 32rem;
101
+ }
102
+
97
103
  .modal-lg .modal-box {
98
104
  max-width: 48rem;
99
105
  }
100
106
 
107
+ .modal-xl .modal-box {
108
+ max-width: 64rem;
109
+ }
110
+
101
111
  .modal-full .modal-box {
102
112
  max-width: calc(100vw - 2rem);
103
113
  max-height: calc(100vh - 2rem);
@@ -120,6 +130,38 @@ export const css = `/**
120
130
  align-items: center;
121
131
  }
122
132
 
133
+ /* Animation Variants */
134
+ .modal-slide-up .modal-box {
135
+ transform: translateY(6rem) scale(0.95);
136
+ }
137
+
138
+ .modal-slide-down .modal-box {
139
+ transform: translateY(-6rem) scale(0.95);
140
+ }
141
+
142
+ .modal-zoom .modal-box {
143
+ transform: scale(0.75);
144
+ }
145
+
146
+ :is(.modal-slide-up, .modal-slide-down, .modal-zoom).modal-open .modal-box,
147
+ :is(.modal-slide-up, .modal-slide-down, .modal-zoom):target .modal-box {
148
+ transform: translateY(0) scale(1);
149
+ }
150
+
151
+ /* Backdrop Variants */
152
+ .modal-backdrop-light {
153
+ background-color: color-mix(in srgb, white 80%, transparent);
154
+ }
155
+
156
+ .modal-backdrop-blur {
157
+ background-color: color-mix(in srgb, var(--color-scrim) 30%, transparent);
158
+ backdrop-filter: blur(8px);
159
+ }
160
+
161
+ .modal-no-backdrop {
162
+ background-color: transparent;
163
+ }
164
+
123
165
  /* Modal Close Button */
124
166
  .modal-close {
125
167
  position: absolute;
@@ -168,6 +210,22 @@ export const css = `/**
168
210
  line-height: 1.5;
169
211
  }
170
212
 
213
+ .modal-scrollable .modal-body {
214
+ max-height: 60vh;
215
+ overflow-y: auto;
216
+ }
217
+
218
+ .modal-no-padding .modal-body {
219
+ padding: 0;
220
+ }
221
+
222
+ .modal-centered .modal-body {
223
+ display: flex;
224
+ align-items: center;
225
+ justify-content: center;
226
+ text-align: center;
227
+ }
228
+
171
229
  /* Responsive Modal */
172
230
  @media (max-width: 640px) {
173
231
  .modal-box {
@@ -182,7 +240,7 @@ export const css = `/**
182
240
 
183
241
  .modal-responsive .modal-box {
184
242
  max-width: 100%;
185
- max-height: 90vh;
243
+ max-height: 90dvh;
186
244
  margin: 0;
187
245
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;
188
246
  }
@@ -197,7 +255,7 @@ export const css = `/**
197
255
 
198
256
  .drawer-modal .modal-box {
199
257
  max-width: 20rem;
200
- max-height: 100vh;
258
+ max-height: 100dvh;
201
259
  height: 100%;
202
260
  margin: 0;
203
261
  border-radius: 0;
@@ -289,6 +347,10 @@ export const css = `/**
289
347
  white-space: nowrap;
290
348
  border: 0;
291
349
  }
350
+
351
+ body.modal-open {
352
+ overflow: hidden;
353
+ }
292
354
  }
293
355
  `;
294
356
 
@@ -4,6 +4,100 @@ export const css = `/**
4
4
  * DuskMoonUI - Material Design 3 inspired navigation system
5
5
  */
6
6
 
7
+ /* Preserve the Navigation entrypoint's published Dropdown coverage. */
8
+ /**
9
+ * Dropdown Component Styles
10
+ * Native Popover disclosure with logical CSS anchor positioning.
11
+ */
12
+
13
+ @layer components {
14
+ .dropdown {
15
+ position: relative;
16
+ display: inline-block;
17
+ }
18
+
19
+ .dropdown > .dropdown-content[popover] {
20
+ display: none;
21
+ position: fixed;
22
+ inset-block-start: auto;
23
+ inset-block-end: max(0.5rem, env(safe-area-inset-bottom, 0px));
24
+ inset-inline-start: auto;
25
+ inset-inline-end: max(
26
+ 0.5rem,
27
+ env(safe-area-inset-left, 0px),
28
+ env(safe-area-inset-right, 0px)
29
+ );
30
+ z-index: 50;
31
+ min-inline-size: 12rem;
32
+ max-inline-size: min(24rem, calc(100dvw - 1rem));
33
+ max-block-size: calc(100dvh - 1rem);
34
+ margin: 0;
35
+ padding: 0.5rem;
36
+ overflow: auto;
37
+ color: var(--color-on-surface);
38
+ background-color: var(--color-surface);
39
+ border: 1px solid var(--color-outline);
40
+ border-radius: var(--radius-sm);
41
+ box-shadow: var(--shadow-lg);
42
+ opacity: 0;
43
+ visibility: hidden;
44
+ pointer-events: none;
45
+ transform: translateY(-0.5rem);
46
+ transition:
47
+ opacity 150ms ease-out,
48
+ transform 150ms ease-out,
49
+ overlay 150ms ease-out allow-discrete,
50
+ display 150ms ease-out allow-discrete;
51
+ }
52
+
53
+ .dropdown > .dropdown-content[popover]:popover-open {
54
+ display: block;
55
+ opacity: 1;
56
+ visibility: visible;
57
+ pointer-events: auto;
58
+ transform: translateY(0);
59
+ }
60
+
61
+ @starting-style {
62
+ .dropdown > .dropdown-content[popover]:popover-open {
63
+ opacity: 0;
64
+ transform: translateY(-0.5rem);
65
+ }
66
+ }
67
+
68
+ @supports (position-area: block-end) {
69
+ .dropdown > .dropdown-content[popover] {
70
+ inset: auto;
71
+ margin: 0.25rem;
72
+ position-area: block-end span-inline-end;
73
+ position-try-fallbacks: flip-block, flip-inline, flip-block flip-inline;
74
+ }
75
+
76
+ .dropdown.dropdown-block-start > .dropdown-content[popover] {
77
+ position-area: block-start span-inline-end;
78
+ }
79
+
80
+ .dropdown.dropdown-block-end > .dropdown-content[popover] {
81
+ position-area: block-end span-inline-end;
82
+ }
83
+
84
+ .dropdown.dropdown-inline-start > .dropdown-content[popover] {
85
+ position-area: inline-start span-block-end;
86
+ }
87
+
88
+ .dropdown.dropdown-inline-end > .dropdown-content[popover] {
89
+ position-area: inline-end span-block-end;
90
+ }
91
+ }
92
+
93
+ @media (prefers-reduced-motion: reduce) {
94
+ .dropdown > .dropdown-content[popover] {
95
+ transition: none;
96
+ }
97
+ }
98
+ }
99
+
100
+
7
101
  @layer components {
8
102
  /* Navbar Base */
9
103
  .navbar {
@@ -590,60 +684,6 @@ export const css = `/**
590
684
  font-size: 1rem;
591
685
  }
592
686
 
593
- /* Dropdown */
594
- .dropdown {
595
- position: relative;
596
- display: inline-block;
597
- }
598
-
599
- .dropdown-content {
600
- position: absolute;
601
- z-index: 50;
602
- min-width: 12rem;
603
- padding: 0.5rem;
604
- background-color: var(--color-surface);
605
- border: 1px solid var(--color-outline);
606
- border-radius: var(--radius-sm);
607
- box-shadow: var(--shadow-lg);
608
- opacity: 0;
609
- visibility: hidden;
610
- transform: translateY(-0.5rem);
611
- transition: all 150ms ease-in-out;
612
- }
613
-
614
- .dropdown:hover .dropdown-content,
615
- .dropdown:focus-within .dropdown-content,
616
- .dropdown.dropdown-open .dropdown-content {
617
- opacity: 1;
618
- visibility: visible;
619
- transform: translateY(0);
620
- }
621
-
622
- /* Dropdown Positions */
623
- .dropdown-end .dropdown-content {
624
- right: 0;
625
- }
626
-
627
- .dropdown-top .dropdown-content {
628
- bottom: 100%;
629
- top: auto;
630
- margin-bottom: 0.25rem;
631
- }
632
-
633
- .dropdown-left .dropdown-content {
634
- right: 100%;
635
- left: auto;
636
- top: 0;
637
- margin-right: 0.25rem;
638
- }
639
-
640
- .dropdown-right .dropdown-content {
641
- left: 100%;
642
- right: auto;
643
- top: 0;
644
- margin-left: 0.25rem;
645
- }
646
-
647
687
  /* Pagination */
648
688
  .pagination {
649
689
  display: flex;
@@ -15,6 +15,36 @@ export const css = `/**
15
15
  overflow: hidden;
16
16
  }
17
17
 
18
+ /* Native progress keeps the platform's accessible value/max contract. */
19
+ progress.progress {
20
+ appearance: none;
21
+ border: 0;
22
+ display: block;
23
+ }
24
+
25
+ progress.progress::-webkit-progress-bar {
26
+ background: var(--color-surface-container-highest);
27
+ border-radius: var(--radius-full);
28
+ }
29
+
30
+ progress.progress::-webkit-progress-value {
31
+ background: var(--color-primary);
32
+ border-radius: var(--radius-full);
33
+ transition: width 300ms ease-in-out;
34
+ }
35
+
36
+ progress.progress::-moz-progress-bar {
37
+ background: var(--color-primary);
38
+ border-radius: var(--radius-full);
39
+ transition: width 300ms ease-in-out;
40
+ }
41
+
42
+ progress.progress:indeterminate::-webkit-progress-value,
43
+ progress.progress:indeterminate::-moz-progress-bar {
44
+ width: 30%;
45
+ animation: progress-indeterminate 1.5s infinite ease-in-out;
46
+ }
47
+
18
48
  /* Progress Bar */
19
49
  .progress-bar {
20
50
  position: absolute;
@@ -67,6 +97,21 @@ export const css = `/**
67
97
  background-color: var(--color-base-content);
68
98
  }
69
99
 
100
+ progress.progress-primary::-webkit-progress-value,
101
+ progress.progress-primary::-moz-progress-bar { background: var(--color-primary); }
102
+ progress.progress-secondary::-webkit-progress-value,
103
+ progress.progress-secondary::-moz-progress-bar { background: var(--color-secondary); }
104
+ progress.progress-tertiary::-webkit-progress-value,
105
+ progress.progress-tertiary::-moz-progress-bar { background: var(--color-tertiary); }
106
+ progress.progress-info::-webkit-progress-value,
107
+ progress.progress-info::-moz-progress-bar { background: var(--color-info); }
108
+ progress.progress-success::-webkit-progress-value,
109
+ progress.progress-success::-moz-progress-bar { background: var(--color-success); }
110
+ progress.progress-warning::-webkit-progress-value,
111
+ progress.progress-warning::-moz-progress-bar { background: var(--color-warning); }
112
+ progress.progress-error::-webkit-progress-value,
113
+ progress.progress-error::-moz-progress-bar { background: var(--color-error); }
114
+
70
115
  /* Size Variants */
71
116
  .progress-xs {
72
117
  height: 0.25rem;
@@ -142,6 +187,25 @@ export const css = `/**
142
187
  }
143
188
  }
144
189
 
190
+ /* Buffer tracks belong to custom markup, not native <progress>. */
191
+ .progress-buffer {
192
+ position: relative;
193
+ }
194
+
195
+ .progress-buffer-bar {
196
+ position: absolute;
197
+ inset-block: 0;
198
+ inset-inline-start: 0;
199
+ width: 0;
200
+ background: color-mix(in oklch, var(--color-primary) 30%, transparent);
201
+ border-radius: var(--radius-full);
202
+ transition: width 300ms ease-in-out;
203
+ }
204
+
205
+ .progress-buffer .progress-bar {
206
+ z-index: 1;
207
+ }
208
+
145
209
  /* Circular Progress */
146
210
  .progress-circular {
147
211
  position: relative;
@@ -241,7 +305,17 @@ export const css = `/**
241
305
 
242
306
  /* Reduce Motion */
243
307
  @media (prefers-reduced-motion: reduce) {
308
+ .progress-bar,
309
+ progress.progress::-webkit-progress-value,
310
+ progress.progress::-moz-progress-bar,
311
+ .progress-circular-bar,
312
+ .progress-buffer-bar {
313
+ transition: none;
314
+ }
315
+
244
316
  .progress-indeterminate .progress-bar,
317
+ progress.progress:indeterminate::-webkit-progress-value,
318
+ progress.progress:indeterminate::-moz-progress-bar,
245
319
  .progress-striped.progress-animated .progress-bar,
246
320
  .progress-circular-indeterminate svg,
247
321
  .progress-circular-indeterminate .progress-circular-bar {
@@ -0,0 +1,5 @@
1
+ // Auto-generated type declaration for radial-progress
2
+ export declare const css: string;
3
+ export declare const styles: CSSStyleSheet | null;
4
+ declare const sheet: CSSStyleSheet | null;
5
+ export default sheet;
@@ -0,0 +1,56 @@
1
+ // Auto-generated from radial-progress.css
2
+ export const css = `/**
3
+ * Radial Progress Component Styles
4
+ * Determinate percentage progress without circumference arithmetic.
5
+ */
6
+
7
+ @layer components {
8
+ .radial-progress {
9
+ --radial-progress-value: 0;
10
+ --radial-progress-size: 3rem;
11
+ --radial-progress-thickness: 0.375rem;
12
+ --radial-progress-track: var(--color-surface-container-highest);
13
+ position: relative;
14
+ display: inline-grid;
15
+ width: var(--radial-progress-size);
16
+ height: var(--radial-progress-size);
17
+ place-items: center;
18
+ color: var(--color-primary);
19
+ border-radius: var(--radius-full);
20
+ background: conic-gradient(currentColor calc(clamp(0, var(--radial-progress-value), 100) * 1%), var(--radial-progress-track) 0);
21
+ isolation: isolate;
22
+ }
23
+
24
+ .radial-progress::before {
25
+ content: "";
26
+ position: absolute;
27
+ inset: var(--radial-progress-thickness);
28
+ z-index: 0;
29
+ border-radius: inherit;
30
+ background: var(--color-surface);
31
+ }
32
+
33
+ .radial-progress-primary { color: var(--color-primary); }
34
+ .radial-progress-secondary { color: var(--color-secondary); }
35
+ .radial-progress-tertiary { color: var(--color-tertiary); }
36
+ .radial-progress-info { color: var(--color-info); }
37
+ .radial-progress-success { color: var(--color-success); }
38
+ .radial-progress-warning { color: var(--color-warning); }
39
+ .radial-progress-error { color: var(--color-error); }
40
+
41
+ .radial-progress-sm { --radial-progress-size: 2rem; --radial-progress-thickness: 0.25rem; }
42
+ .radial-progress-lg { --radial-progress-size: 4rem; --radial-progress-thickness: 0.5rem; }
43
+ .radial-progress-xl { --radial-progress-size: 6rem; --radial-progress-thickness: 0.625rem; }
44
+
45
+ @media (prefers-reduced-motion: reduce) {
46
+ .radial-progress { transition: none; }
47
+ }
48
+ }
49
+ `;
50
+
51
+ const sheet = typeof CSSStyleSheet !== 'undefined' ? new CSSStyleSheet() : null;
52
+ if (sheet) {
53
+ sheet.replaceSync(css);
54
+ }
55
+ export const styles = sheet;
56
+ export default sheet;
@@ -32,6 +32,10 @@ export const css = `/**
32
32
  border-radius: var(--radius-sm);
33
33
  }
34
34
 
35
+ .skeleton-static {
36
+ animation: none;
37
+ }
38
+
35
39
  /* Size Variants */
36
40
  .skeleton-xs {
37
41
  height: 0.5rem;
@@ -134,7 +138,7 @@ export const css = `/**
134
138
  background: linear-gradient(
135
139
  90deg,
136
140
  transparent,
137
- rgba(255, 255, 255, 0.3),
141
+ color-mix(in oklch, var(--color-surface-bright) 35%, transparent),
138
142
  transparent
139
143
  );
140
144
  animation: skeleton-wave 1.5s infinite;
@@ -212,6 +216,14 @@ export const css = `/**
212
216
 
213
217
  .skeleton-wave::after {
214
218
  animation: none;
219
+ transform: translateX(0);
220
+ opacity: 0.35;
221
+ }
222
+
223
+ .skeleton-static::after {
224
+ animation: none;
225
+ transform: translateX(0);
226
+ opacity: 0.35;
215
227
  }
216
228
  }
217
229
  }
@@ -211,49 +211,49 @@ export const css = `/**
211
211
 
212
212
  /* Color Variants */
213
213
  .snackbar-info {
214
- background-color: var(--color-info-container);
215
- color: var(--color-on-info-container);
214
+ background-color: var(--color-info);
215
+ color: var(--color-info-content);
216
216
  }
217
217
 
218
218
  .snackbar-success {
219
- background-color: var(--color-success-container);
220
- color: var(--color-on-success-container);
219
+ background-color: var(--color-success);
220
+ color: var(--color-success-content);
221
221
  }
222
222
 
223
223
  .snackbar-warning {
224
- background-color: var(--color-warning-container);
225
- color: var(--color-on-warning-container);
224
+ background-color: var(--color-warning);
225
+ color: var(--color-warning-content);
226
226
  }
227
227
 
228
228
  .snackbar-error {
229
- background-color: var(--color-error-container);
230
- color: var(--color-on-error-container);
229
+ background-color: var(--color-error);
230
+ color: var(--color-error-content);
231
231
  }
232
232
 
233
233
  /* Brand Color Variants */
234
234
  .snackbar-primary {
235
- background-color: var(--color-primary-container);
236
- color: var(--color-on-primary-container);
235
+ background-color: var(--color-primary);
236
+ color: var(--color-primary-content);
237
237
  }
238
238
 
239
239
  .snackbar-secondary {
240
- background-color: var(--color-secondary-container);
241
- color: var(--color-on-secondary-container);
240
+ background-color: var(--color-secondary);
241
+ color: var(--color-secondary-content);
242
242
  }
243
243
 
244
244
  .snackbar-tertiary {
245
- background-color: var(--color-tertiary-container);
246
- color: var(--color-on-tertiary-container);
245
+ background-color: var(--color-tertiary);
246
+ color: var(--color-tertiary-content);
247
247
  }
248
248
 
249
249
  .snackbar-accent {
250
- background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
251
- color: var(--color-on-surface);
250
+ background-color: var(--color-accent);
251
+ color: var(--color-accent-content);
252
252
  }
253
253
 
254
254
  .snackbar-neutral {
255
- background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
256
- color: var(--color-on-surface);
255
+ background-color: var(--color-neutral);
256
+ color: var(--color-neutral-content);
257
257
  }
258
258
 
259
259
  .snackbar-base {
@@ -261,6 +261,36 @@ export const css = `/**
261
261
  color: var(--color-base-content);
262
262
  }
263
263
 
264
+ :is(
265
+ .snackbar-info,
266
+ .snackbar-success,
267
+ .snackbar-warning,
268
+ .snackbar-error,
269
+ .snackbar-primary,
270
+ .snackbar-secondary,
271
+ .snackbar-tertiary,
272
+ .snackbar-accent,
273
+ .snackbar-neutral,
274
+ .snackbar-base
275
+ ) :is(.snackbar-action, .snackbar-close) {
276
+ color: inherit;
277
+ }
278
+
279
+ :is(
280
+ .snackbar-info,
281
+ .snackbar-success,
282
+ .snackbar-warning,
283
+ .snackbar-error,
284
+ .snackbar-primary,
285
+ .snackbar-secondary,
286
+ .snackbar-tertiary,
287
+ .snackbar-accent,
288
+ .snackbar-neutral,
289
+ .snackbar-base
290
+ ) :is(.snackbar-action, .snackbar-close):hover {
291
+ background-color: color-mix(in oklch, currentColor 12%, transparent);
292
+ }
293
+
264
294
  /* Dark Snackbar (default MD3 style) */
265
295
  .snackbar-dark {
266
296
  background-color: var(--color-on-surface);
@@ -0,0 +1,5 @@
1
+ // Auto-generated type declaration for swap
2
+ export declare const css: string;
3
+ export declare const styles: CSSStyleSheet | null;
4
+ declare const sheet: CSSStyleSheet | null;
5
+ export default sheet;