@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,174 @@
1
+ // Auto-generated from avatar.css
2
+ export const css = `/**
3
+ * Avatar Component Styles
4
+ * DuskMoonUI - Material Design 3 inspired avatar system
5
+ */
6
+
7
+ @layer components {
8
+ /* Base Avatar */
9
+ .avatar {
10
+ display: inline-flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ position: relative;
14
+ width: 3rem;
15
+ height: 3rem;
16
+ border-radius: 50%;
17
+ overflow: hidden;
18
+ background-color: var(--color-surface-container);
19
+ color: var(--color-on-surface);
20
+ font-weight: 500;
21
+ flex-shrink: 0;
22
+ }
23
+
24
+ .avatar img {
25
+ width: 100%;
26
+ height: 100%;
27
+ object-fit: cover;
28
+ }
29
+
30
+ /* Avatar Placeholder */
31
+ .avatar-placeholder {
32
+ display: flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ width: 100%;
36
+ height: 100%;
37
+ font-size: 1.25rem;
38
+ text-transform: uppercase;
39
+ }
40
+
41
+ /* Size Variants */
42
+ .avatar-xs {
43
+ width: 1.5rem;
44
+ height: 1.5rem;
45
+ font-size: 0.625rem;
46
+ }
47
+
48
+ .avatar-sm {
49
+ width: 2rem;
50
+ height: 2rem;
51
+ font-size: 0.75rem;
52
+ }
53
+
54
+ .avatar-md {
55
+ width: 3rem;
56
+ height: 3rem;
57
+ font-size: 1rem;
58
+ }
59
+
60
+ .avatar-lg {
61
+ width: 4rem;
62
+ height: 4rem;
63
+ font-size: 1.5rem;
64
+ }
65
+
66
+ .avatar-xl {
67
+ width: 6rem;
68
+ height: 6rem;
69
+ font-size: 2rem;
70
+ }
71
+
72
+ /* Shape Variants */
73
+ .avatar-rounded {
74
+ border-radius: 0.5rem;
75
+ }
76
+
77
+ .avatar-square {
78
+ border-radius: 0;
79
+ }
80
+
81
+ /* Color Variants */
82
+ .avatar-primary {
83
+ background-color: var(--color-primary);
84
+ color: var(--color-primary-content);
85
+ }
86
+
87
+ .avatar-secondary {
88
+ background-color: var(--color-secondary);
89
+ color: var(--color-secondary-content);
90
+ }
91
+
92
+ .avatar-tertiary {
93
+ background-color: var(--color-tertiary);
94
+ color: var(--color-tertiary-content);
95
+ }
96
+
97
+ /* Ring */
98
+ .avatar-ring {
99
+ outline: 2px solid var(--color-primary);
100
+ outline-offset: 2px;
101
+ }
102
+
103
+ .avatar-ring-primary {
104
+ outline-color: var(--color-primary);
105
+ }
106
+
107
+ .avatar-ring-secondary {
108
+ outline-color: var(--color-secondary);
109
+ }
110
+
111
+ .avatar-ring-tertiary {
112
+ outline-color: var(--color-tertiary);
113
+ }
114
+
115
+ /* Online/Offline Indicator */
116
+ .avatar-online::after,
117
+ .avatar-offline::after {
118
+ content: '';
119
+ position: absolute;
120
+ bottom: 0;
121
+ right: 0;
122
+ width: 25%;
123
+ height: 25%;
124
+ min-width: 0.5rem;
125
+ min-height: 0.5rem;
126
+ border-radius: 50%;
127
+ border: 2px solid var(--color-surface);
128
+ }
129
+
130
+ .avatar-online::after {
131
+ background-color: var(--color-success);
132
+ }
133
+
134
+ .avatar-offline::after {
135
+ background-color: var(--color-outline);
136
+ }
137
+
138
+ /* Avatar Group */
139
+ .avatar-group {
140
+ display: flex;
141
+ flex-direction: row-reverse;
142
+ justify-content: flex-end;
143
+ }
144
+
145
+ .avatar-group .avatar {
146
+ border: 2px solid var(--color-surface);
147
+ margin-left: -0.75rem;
148
+ }
149
+
150
+ .avatar-group .avatar:last-child {
151
+ margin-left: 0;
152
+ }
153
+
154
+ /* Avatar Group Sizes */
155
+ .avatar-group-sm .avatar {
156
+ margin-left: -0.5rem;
157
+ }
158
+
159
+ .avatar-group-lg .avatar {
160
+ margin-left: -1rem;
161
+ }
162
+
163
+ /* Focus State for Interactive Avatars */
164
+ .avatar:focus-visible {
165
+ outline: 2px solid var(--color-primary);
166
+ outline-offset: 2px;
167
+ }
168
+ }
169
+ `;
170
+
171
+ const sheet = new CSSStyleSheet();
172
+ sheet.replaceSync(css);
173
+ export const styles = sheet;
174
+ export default sheet;
@@ -0,0 +1,185 @@
1
+ // Auto-generated from badge.css
2
+ export const css = `/**
3
+ * Badge Component Styles
4
+ * DuskMoonUI - Material Design 3 inspired badge system
5
+ */
6
+
7
+ @layer components {
8
+ /* Base Badge */
9
+ .badge {
10
+ display: inline-flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ padding: 0.125rem 0.5rem;
14
+ font-size: 0.75rem;
15
+ font-weight: 500;
16
+ line-height: 1rem;
17
+ white-space: nowrap;
18
+ border-radius: 9999px;
19
+ background-color: var(--color-surface-container);
20
+ color: var(--color-on-surface);
21
+ }
22
+
23
+ /* Color Variants */
24
+ .badge-primary {
25
+ background-color: var(--color-primary);
26
+ color: var(--color-primary-content);
27
+ }
28
+
29
+ .badge-secondary {
30
+ background-color: var(--color-secondary);
31
+ color: var(--color-secondary-content);
32
+ }
33
+
34
+ .badge-tertiary {
35
+ background-color: var(--color-tertiary);
36
+ color: var(--color-tertiary-content);
37
+ }
38
+
39
+ .badge-info {
40
+ background-color: var(--color-info);
41
+ color: var(--color-info-content);
42
+ }
43
+
44
+ .badge-success {
45
+ background-color: var(--color-success);
46
+ color: var(--color-success-content);
47
+ }
48
+
49
+ .badge-warning {
50
+ background-color: var(--color-warning);
51
+ color: var(--color-warning-content);
52
+ }
53
+
54
+ .badge-error {
55
+ background-color: var(--color-error);
56
+ color: var(--color-error-content);
57
+ }
58
+
59
+ /* Outlined Variants */
60
+ .badge-outline {
61
+ background-color: transparent;
62
+ border: 1px solid currentColor;
63
+ }
64
+
65
+ .badge-outline.badge-primary {
66
+ color: var(--color-primary);
67
+ border-color: var(--color-primary);
68
+ }
69
+
70
+ .badge-outline.badge-secondary {
71
+ color: var(--color-secondary);
72
+ border-color: var(--color-secondary);
73
+ }
74
+
75
+ .badge-outline.badge-tertiary {
76
+ color: var(--color-tertiary);
77
+ border-color: var(--color-tertiary);
78
+ }
79
+
80
+ .badge-outline.badge-info {
81
+ color: var(--color-info);
82
+ border-color: var(--color-info);
83
+ }
84
+
85
+ .badge-outline.badge-success {
86
+ color: var(--color-success);
87
+ border-color: var(--color-success);
88
+ }
89
+
90
+ .badge-outline.badge-warning {
91
+ color: var(--color-warning);
92
+ border-color: var(--color-warning);
93
+ }
94
+
95
+ .badge-outline.badge-error {
96
+ color: var(--color-error);
97
+ border-color: var(--color-error);
98
+ }
99
+
100
+ /* Soft/Tonal Variants */
101
+ .badge-soft {
102
+ background-color: var(--color-primary-container);
103
+ color: var(--color-on-primary-container);
104
+ }
105
+
106
+ .badge-soft.badge-primary {
107
+ background-color: var(--color-primary-container);
108
+ color: var(--color-on-primary-container);
109
+ }
110
+
111
+ .badge-soft.badge-secondary {
112
+ background-color: var(--color-secondary-container);
113
+ color: var(--color-on-secondary-container);
114
+ }
115
+
116
+ .badge-soft.badge-tertiary {
117
+ background-color: var(--color-tertiary-container);
118
+ color: var(--color-on-tertiary-container);
119
+ }
120
+
121
+ .badge-soft.badge-info {
122
+ background-color: var(--color-info-container);
123
+ color: var(--color-on-info-container);
124
+ }
125
+
126
+ .badge-soft.badge-success {
127
+ background-color: var(--color-success-container);
128
+ color: var(--color-on-success-container);
129
+ }
130
+
131
+ .badge-soft.badge-warning {
132
+ background-color: var(--color-warning-container);
133
+ color: var(--color-on-warning-container);
134
+ }
135
+
136
+ .badge-soft.badge-error {
137
+ background-color: var(--color-error-container);
138
+ color: var(--color-on-error-container);
139
+ }
140
+
141
+ /* Size Variants */
142
+ .badge-sm {
143
+ padding: 0 0.375rem;
144
+ font-size: 0.625rem;
145
+ line-height: 0.875rem;
146
+ }
147
+
148
+ .badge-lg {
149
+ padding: 0.25rem 0.75rem;
150
+ font-size: 0.875rem;
151
+ line-height: 1.25rem;
152
+ }
153
+
154
+ /* Badge with Indicator Dot */
155
+ .badge-indicator {
156
+ position: relative;
157
+ padding-left: 1rem;
158
+ }
159
+
160
+ .badge-indicator::before {
161
+ content: '';
162
+ position: absolute;
163
+ left: 0.375rem;
164
+ top: 50%;
165
+ transform: translateY(-50%);
166
+ width: 0.375rem;
167
+ height: 0.375rem;
168
+ border-radius: 50%;
169
+ background-color: currentColor;
170
+ }
171
+
172
+ /* Empty Badge (just a dot) */
173
+ .badge-dot {
174
+ width: 0.5rem;
175
+ height: 0.5rem;
176
+ padding: 0;
177
+ border-radius: 50%;
178
+ }
179
+ }
180
+ `;
181
+
182
+ const sheet = new CSSStyleSheet();
183
+ sheet.replaceSync(css);
184
+ export const styles = sheet;
185
+ export default sheet;
@@ -0,0 +1,270 @@
1
+ // Auto-generated from bottom-navigation.css
2
+ export const css = `/**
3
+ * Bottom Navigation Component Styles
4
+ * DuskMoonUI - Material Design 3 inspired bottom navigation system
5
+ */
6
+
7
+ @layer components {
8
+ /* Base Bottom Navigation */
9
+ .bottom-nav {
10
+ position: fixed;
11
+ bottom: 0;
12
+ left: 0;
13
+ right: 0;
14
+ z-index: 1000;
15
+ display: flex;
16
+ align-items: stretch;
17
+ justify-content: space-around;
18
+ min-height: 5rem;
19
+ padding-bottom: env(safe-area-inset-bottom, 0);
20
+ background-color: var(--color-surface);
21
+ box-shadow: 0 -1px 3px 0 rgb(0 0 0 / 0.1);
22
+ }
23
+
24
+ /* Navigation Item */
25
+ .bottom-nav-item {
26
+ display: flex;
27
+ flex-direction: column;
28
+ align-items: center;
29
+ justify-content: center;
30
+ flex: 1;
31
+ min-width: 4rem;
32
+ max-width: 10rem;
33
+ padding: 0.75rem 0.25rem;
34
+ color: var(--color-on-surface-variant);
35
+ background-color: transparent;
36
+ border: none;
37
+ cursor: pointer;
38
+ transition: color 150ms ease-in-out;
39
+ text-decoration: none;
40
+ gap: 0.25rem;
41
+ }
42
+
43
+ .bottom-nav-item:hover {
44
+ color: var(--color-on-surface);
45
+ }
46
+
47
+ .bottom-nav-item:focus-visible {
48
+ outline: none;
49
+ }
50
+
51
+ .bottom-nav-item:focus-visible .bottom-nav-indicator {
52
+ outline: 2px solid var(--color-primary);
53
+ outline-offset: 2px;
54
+ }
55
+
56
+ /* Active State */
57
+ .bottom-nav-item.active {
58
+ color: var(--color-on-surface);
59
+ }
60
+
61
+ /* Icon Container with Indicator */
62
+ .bottom-nav-indicator {
63
+ position: relative;
64
+ display: flex;
65
+ align-items: center;
66
+ justify-content: center;
67
+ width: 4rem;
68
+ height: 2rem;
69
+ border-radius: 1rem;
70
+ transition: background-color 150ms ease-in-out;
71
+ }
72
+
73
+ .bottom-nav-item:hover .bottom-nav-indicator {
74
+ background-color: var(--color-surface-container);
75
+ }
76
+
77
+ .bottom-nav-item.active .bottom-nav-indicator {
78
+ background-color: var(--color-secondary-container);
79
+ }
80
+
81
+ /* Icon */
82
+ .bottom-nav-icon {
83
+ font-size: 1.5rem;
84
+ line-height: 1;
85
+ transition: font-size 150ms ease-in-out;
86
+ }
87
+
88
+ /* Label */
89
+ .bottom-nav-label {
90
+ font-size: 0.75rem;
91
+ font-weight: 500;
92
+ line-height: 1rem;
93
+ text-align: center;
94
+ overflow: hidden;
95
+ text-overflow: ellipsis;
96
+ white-space: nowrap;
97
+ max-width: 100%;
98
+ }
99
+
100
+ .bottom-nav-item.active .bottom-nav-label {
101
+ font-weight: 600;
102
+ }
103
+
104
+ /* Badge */
105
+ .bottom-nav-badge {
106
+ position: absolute;
107
+ top: 0;
108
+ right: 0.5rem;
109
+ min-width: 1rem;
110
+ height: 1rem;
111
+ padding: 0 0.25rem;
112
+ font-size: 0.625rem;
113
+ font-weight: 600;
114
+ line-height: 1rem;
115
+ color: var(--color-on-error);
116
+ background-color: var(--color-error);
117
+ border-radius: 9999px;
118
+ text-align: center;
119
+ }
120
+
121
+ .bottom-nav-badge-dot {
122
+ min-width: 0.5rem;
123
+ width: 0.5rem;
124
+ height: 0.5rem;
125
+ padding: 0;
126
+ top: 0.125rem;
127
+ right: 0.75rem;
128
+ }
129
+
130
+ /* Variants */
131
+ .bottom-nav-elevated {
132
+ box-shadow: 0 -4px 6px -1px rgb(0 0 0 / 0.1);
133
+ }
134
+
135
+ .bottom-nav-bordered {
136
+ box-shadow: none;
137
+ border-top: 1px solid var(--color-outline-variant);
138
+ }
139
+
140
+ .bottom-nav-filled {
141
+ background-color: var(--color-surface-container);
142
+ }
143
+
144
+ /* Color Variants */
145
+ .bottom-nav-primary .bottom-nav-item.active .bottom-nav-indicator {
146
+ background-color: var(--color-primary-container);
147
+ }
148
+
149
+ .bottom-nav-primary .bottom-nav-item.active {
150
+ color: var(--color-on-primary-container);
151
+ }
152
+
153
+ /* Hide Labels */
154
+ .bottom-nav-icons-only .bottom-nav-label {
155
+ display: none;
156
+ }
157
+
158
+ .bottom-nav-icons-only .bottom-nav-item {
159
+ padding: 1rem 0.25rem;
160
+ }
161
+
162
+ /* Show Labels Only on Active */
163
+ .bottom-nav-labels-active .bottom-nav-label {
164
+ opacity: 0;
165
+ max-height: 0;
166
+ overflow: hidden;
167
+ transition: opacity 150ms ease-in-out, max-height 150ms ease-in-out;
168
+ }
169
+
170
+ .bottom-nav-labels-active .bottom-nav-item.active .bottom-nav-label {
171
+ opacity: 1;
172
+ max-height: 1rem;
173
+ }
174
+
175
+ /* Shifting Animation (like older Material Design) */
176
+ .bottom-nav-shifting .bottom-nav-item {
177
+ flex: 0 1 4rem;
178
+ transition: flex 200ms ease-in-out;
179
+ }
180
+
181
+ .bottom-nav-shifting .bottom-nav-item.active {
182
+ flex: 1 1 6rem;
183
+ }
184
+
185
+ .bottom-nav-shifting .bottom-nav-label {
186
+ opacity: 0;
187
+ transform: translateY(0.5rem);
188
+ transition: opacity 150ms ease-in-out, transform 150ms ease-in-out;
189
+ }
190
+
191
+ .bottom-nav-shifting .bottom-nav-item.active .bottom-nav-label {
192
+ opacity: 1;
193
+ transform: translateY(0);
194
+ }
195
+
196
+ /* Rail Style (Side Navigation) */
197
+ .nav-rail {
198
+ position: fixed;
199
+ left: 0;
200
+ top: 0;
201
+ bottom: 0;
202
+ z-index: 1000;
203
+ display: flex;
204
+ flex-direction: column;
205
+ align-items: center;
206
+ width: 5rem;
207
+ padding: 1rem 0;
208
+ background-color: var(--color-surface);
209
+ border-right: 1px solid var(--color-outline-variant);
210
+ }
211
+
212
+ .nav-rail .bottom-nav-item {
213
+ width: 100%;
214
+ padding: 0.5rem;
215
+ margin: 0.25rem 0;
216
+ }
217
+
218
+ .nav-rail .bottom-nav-indicator {
219
+ width: 3.5rem;
220
+ height: 2rem;
221
+ }
222
+
223
+ /* Responsive - Convert to top tabs on larger screens */
224
+ @media (min-width: 768px) {
225
+ .bottom-nav-responsive {
226
+ position: relative;
227
+ bottom: auto;
228
+ justify-content: flex-start;
229
+ gap: 0.5rem;
230
+ min-height: 3rem;
231
+ padding: 0 1rem;
232
+ box-shadow: none;
233
+ border-bottom: 1px solid var(--color-outline-variant);
234
+ }
235
+
236
+ .bottom-nav-responsive .bottom-nav-item {
237
+ flex: 0 0 auto;
238
+ flex-direction: row;
239
+ gap: 0.5rem;
240
+ padding: 0.75rem 1rem;
241
+ }
242
+
243
+ .bottom-nav-responsive .bottom-nav-indicator {
244
+ width: auto;
245
+ height: auto;
246
+ background-color: transparent !important;
247
+ }
248
+
249
+ .bottom-nav-responsive .bottom-nav-item.active {
250
+ border-bottom: 2px solid var(--color-primary);
251
+ }
252
+ }
253
+
254
+ /* Reduce Motion */
255
+ @media (prefers-reduced-motion: reduce) {
256
+ .bottom-nav-item,
257
+ .bottom-nav-indicator,
258
+ .bottom-nav-icon,
259
+ .bottom-nav-label,
260
+ .bottom-nav-shifting .bottom-nav-item {
261
+ transition: none;
262
+ }
263
+ }
264
+ }
265
+ `;
266
+
267
+ const sheet = new CSSStyleSheet();
268
+ sheet.replaceSync(css);
269
+ export const styles = sheet;
270
+ export default sheet;