@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,315 @@
1
+ // Auto-generated from appbar.css
2
+ export const css = `/**
3
+ * App Bar Component Styles
4
+ * DuskMoonUI - Material Design 3 inspired app bar system
5
+ */
6
+
7
+ @layer components {
8
+ /* Base App Bar */
9
+ .appbar {
10
+ display: flex;
11
+ align-items: center;
12
+ gap: 0.5rem;
13
+ width: 100%;
14
+ min-height: 4rem;
15
+ padding: 0 1rem;
16
+ background-color: var(--color-surface);
17
+ color: var(--color-on-surface);
18
+ }
19
+
20
+ /* Fixed App Bar */
21
+ .appbar-fixed {
22
+ position: fixed;
23
+ top: 0;
24
+ left: 0;
25
+ right: 0;
26
+ z-index: 1000;
27
+ }
28
+
29
+ /* Sticky App Bar */
30
+ .appbar-sticky {
31
+ position: sticky;
32
+ top: 0;
33
+ z-index: 1000;
34
+ }
35
+
36
+ /* App Bar with Shadow */
37
+ .appbar-elevated {
38
+ box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
39
+ }
40
+
41
+ /* App Bar with Border */
42
+ .appbar-bordered {
43
+ border-bottom: 1px solid var(--color-outline-variant);
44
+ }
45
+
46
+ /* Transparent App Bar */
47
+ .appbar-transparent {
48
+ background-color: transparent;
49
+ }
50
+
51
+ /* App Bar Navigation Icon */
52
+ .appbar-nav {
53
+ display: flex;
54
+ align-items: center;
55
+ justify-content: center;
56
+ width: 2.5rem;
57
+ height: 2.5rem;
58
+ color: var(--color-on-surface);
59
+ background-color: transparent;
60
+ border: none;
61
+ border-radius: 50%;
62
+ cursor: pointer;
63
+ transition: background-color 150ms ease-in-out;
64
+ flex-shrink: 0;
65
+ }
66
+
67
+ .appbar-nav:hover {
68
+ background-color: var(--color-surface-container);
69
+ }
70
+
71
+ .appbar-nav:focus-visible {
72
+ outline: 2px solid var(--color-primary);
73
+ outline-offset: 2px;
74
+ }
75
+
76
+ /* App Bar Title */
77
+ .appbar-title {
78
+ flex: 1;
79
+ font-size: 1.25rem;
80
+ font-weight: 500;
81
+ line-height: 1.75rem;
82
+ overflow: hidden;
83
+ text-overflow: ellipsis;
84
+ white-space: nowrap;
85
+ }
86
+
87
+ /* App Bar Subtitle */
88
+ .appbar-subtitle {
89
+ font-size: 0.75rem;
90
+ color: var(--color-on-surface-variant);
91
+ overflow: hidden;
92
+ text-overflow: ellipsis;
93
+ white-space: nowrap;
94
+ }
95
+
96
+ /* App Bar Title Group */
97
+ .appbar-title-group {
98
+ flex: 1;
99
+ min-width: 0;
100
+ }
101
+
102
+ .appbar-title-group .appbar-title {
103
+ font-size: 1rem;
104
+ line-height: 1.25rem;
105
+ }
106
+
107
+ /* App Bar Actions */
108
+ .appbar-actions {
109
+ display: flex;
110
+ align-items: center;
111
+ gap: 0.25rem;
112
+ flex-shrink: 0;
113
+ }
114
+
115
+ .appbar-action {
116
+ display: flex;
117
+ align-items: center;
118
+ justify-content: center;
119
+ width: 2.5rem;
120
+ height: 2.5rem;
121
+ color: var(--color-on-surface-variant);
122
+ background-color: transparent;
123
+ border: none;
124
+ border-radius: 50%;
125
+ cursor: pointer;
126
+ transition: background-color 150ms ease-in-out, color 150ms ease-in-out;
127
+ }
128
+
129
+ .appbar-action:hover {
130
+ background-color: var(--color-surface-container);
131
+ color: var(--color-on-surface);
132
+ }
133
+
134
+ .appbar-action:focus-visible {
135
+ outline: 2px solid var(--color-primary);
136
+ outline-offset: 2px;
137
+ }
138
+
139
+ /* App Bar Logo/Brand */
140
+ .appbar-brand {
141
+ display: flex;
142
+ align-items: center;
143
+ gap: 0.75rem;
144
+ flex-shrink: 0;
145
+ }
146
+
147
+ .appbar-logo {
148
+ height: 2rem;
149
+ width: auto;
150
+ }
151
+
152
+ /* Size Variants */
153
+ .appbar-sm {
154
+ min-height: 3rem;
155
+ padding: 0 0.75rem;
156
+ }
157
+
158
+ .appbar-sm .appbar-title {
159
+ font-size: 1rem;
160
+ }
161
+
162
+ .appbar-lg {
163
+ min-height: 5rem;
164
+ padding: 0 1.5rem;
165
+ }
166
+
167
+ .appbar-lg .appbar-title {
168
+ font-size: 1.5rem;
169
+ }
170
+
171
+ /* Color Variants */
172
+ .appbar-primary {
173
+ background-color: var(--color-primary);
174
+ color: var(--color-on-primary);
175
+ }
176
+
177
+ .appbar-primary .appbar-nav,
178
+ .appbar-primary .appbar-action {
179
+ color: var(--color-on-primary);
180
+ }
181
+
182
+ .appbar-primary .appbar-nav:hover,
183
+ .appbar-primary .appbar-action:hover {
184
+ background-color: var(--color-primary-container);
185
+ color: var(--color-on-primary-container);
186
+ }
187
+
188
+ .appbar-primary .appbar-subtitle {
189
+ color: var(--color-on-primary);
190
+ opacity: 0.8;
191
+ }
192
+
193
+ .appbar-secondary {
194
+ background-color: var(--color-secondary);
195
+ color: var(--color-on-secondary);
196
+ }
197
+
198
+ .appbar-secondary .appbar-nav,
199
+ .appbar-secondary .appbar-action {
200
+ color: var(--color-on-secondary);
201
+ }
202
+
203
+ .appbar-secondary .appbar-nav:hover,
204
+ .appbar-secondary .appbar-action:hover {
205
+ background-color: var(--color-secondary-container);
206
+ color: var(--color-on-secondary-container);
207
+ }
208
+
209
+ .appbar-surface {
210
+ background-color: var(--color-surface-container);
211
+ }
212
+
213
+ /* Center Title */
214
+ .appbar-center {
215
+ justify-content: space-between;
216
+ }
217
+
218
+ .appbar-center .appbar-title {
219
+ position: absolute;
220
+ left: 50%;
221
+ transform: translateX(-50%);
222
+ flex: none;
223
+ }
224
+
225
+ /* Dense App Bar */
226
+ .appbar-dense {
227
+ min-height: 3rem;
228
+ padding: 0 0.5rem;
229
+ }
230
+
231
+ .appbar-dense .appbar-nav,
232
+ .appbar-dense .appbar-action {
233
+ width: 2rem;
234
+ height: 2rem;
235
+ }
236
+
237
+ /* Prominent App Bar (Large Title) */
238
+ .appbar-prominent {
239
+ flex-direction: column;
240
+ align-items: flex-start;
241
+ min-height: 8rem;
242
+ padding: 1rem;
243
+ }
244
+
245
+ .appbar-prominent .appbar-row {
246
+ display: flex;
247
+ align-items: center;
248
+ width: 100%;
249
+ gap: 0.5rem;
250
+ }
251
+
252
+ .appbar-prominent .appbar-title {
253
+ font-size: 2rem;
254
+ font-weight: 400;
255
+ margin-top: auto;
256
+ padding-bottom: 0.5rem;
257
+ }
258
+
259
+ /* Search in App Bar */
260
+ .appbar-search {
261
+ flex: 1;
262
+ max-width: 32rem;
263
+ margin: 0 1rem;
264
+ }
265
+
266
+ .appbar-search-input {
267
+ width: 100%;
268
+ padding: 0.5rem 1rem;
269
+ font-size: 0.875rem;
270
+ color: var(--color-on-surface);
271
+ background-color: var(--color-surface-container);
272
+ border: none;
273
+ border-radius: 9999px;
274
+ transition: background-color 150ms ease-in-out;
275
+ }
276
+
277
+ .appbar-search-input:focus {
278
+ outline: none;
279
+ background-color: var(--color-surface-container-high);
280
+ }
281
+
282
+ .appbar-search-input::placeholder {
283
+ color: var(--color-on-surface-variant);
284
+ }
285
+
286
+ /* Responsive */
287
+ @media (max-width: 640px) {
288
+ .appbar {
289
+ padding: 0 0.5rem;
290
+ }
291
+
292
+ .appbar-title {
293
+ font-size: 1rem;
294
+ }
295
+
296
+ .appbar-search {
297
+ margin: 0 0.5rem;
298
+ }
299
+ }
300
+
301
+ /* Reduce Motion */
302
+ @media (prefers-reduced-motion: reduce) {
303
+ .appbar-nav,
304
+ .appbar-action,
305
+ .appbar-search-input {
306
+ transition: none;
307
+ }
308
+ }
309
+ }
310
+ `;
311
+
312
+ const sheet = new CSSStyleSheet();
313
+ sheet.replaceSync(css);
314
+ export const styles = sheet;
315
+ export default sheet;
@@ -0,0 +1,276 @@
1
+ // Auto-generated from autocomplete.css
2
+ export const css = `/**
3
+ * Autocomplete Component Styles
4
+ * DuskMoonUI - Material Design 3 inspired autocomplete system
5
+ */
6
+
7
+ @layer components {
8
+ /* Autocomplete Container */
9
+ .autocomplete {
10
+ position: relative;
11
+ display: inline-block;
12
+ width: 100%;
13
+ }
14
+
15
+ /* Autocomplete Input */
16
+ .autocomplete-input {
17
+ width: 100%;
18
+ padding: 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
+ .autocomplete-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
+ .autocomplete-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
+ /* Autocomplete Dropdown */
42
+ .autocomplete-dropdown {
43
+ position: absolute;
44
+ top: 100%;
45
+ left: 0;
46
+ right: 0;
47
+ z-index: 1000;
48
+ max-height: 15rem;
49
+ margin-top: 0.25rem;
50
+ background-color: var(--color-surface);
51
+ border: 1px solid var(--color-outline);
52
+ border-radius: 0.5rem;
53
+ box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
54
+ overflow-y: auto;
55
+ opacity: 0;
56
+ visibility: hidden;
57
+ transform: translateY(-0.5rem);
58
+ transition: opacity 150ms ease-out, visibility 150ms ease-out, transform 150ms ease-out;
59
+ }
60
+
61
+ .autocomplete.autocomplete-open .autocomplete-dropdown,
62
+ .autocomplete-dropdown.show {
63
+ opacity: 1;
64
+ visibility: visible;
65
+ transform: translateY(0);
66
+ }
67
+
68
+ /* Autocomplete Options */
69
+ .autocomplete-option {
70
+ display: flex;
71
+ align-items: center;
72
+ gap: 0.75rem;
73
+ padding: 0.75rem 1rem;
74
+ font-size: 0.875rem;
75
+ color: var(--color-on-surface);
76
+ cursor: pointer;
77
+ transition: background-color 150ms ease-in-out;
78
+ }
79
+
80
+ .autocomplete-option:hover,
81
+ .autocomplete-option:focus,
82
+ .autocomplete-option.highlighted {
83
+ background-color: var(--color-surface-container);
84
+ }
85
+
86
+ .autocomplete-option.selected {
87
+ background-color: var(--color-primary-container);
88
+ color: var(--color-on-primary-container);
89
+ }
90
+
91
+ .autocomplete-option:disabled,
92
+ .autocomplete-option.disabled {
93
+ color: var(--color-on-surface-variant);
94
+ cursor: not-allowed;
95
+ opacity: 0.6;
96
+ }
97
+
98
+ /* Option Icon */
99
+ .autocomplete-option-icon {
100
+ display: flex;
101
+ align-items: center;
102
+ justify-content: center;
103
+ width: 1.25rem;
104
+ height: 1.25rem;
105
+ flex-shrink: 0;
106
+ }
107
+
108
+ /* Option Content */
109
+ .autocomplete-option-content {
110
+ flex: 1;
111
+ min-width: 0;
112
+ }
113
+
114
+ .autocomplete-option-label {
115
+ font-weight: 500;
116
+ overflow: hidden;
117
+ text-overflow: ellipsis;
118
+ white-space: nowrap;
119
+ }
120
+
121
+ .autocomplete-option-description {
122
+ font-size: 0.75rem;
123
+ color: var(--color-on-surface-variant);
124
+ overflow: hidden;
125
+ text-overflow: ellipsis;
126
+ white-space: nowrap;
127
+ }
128
+
129
+ /* Highlight Match */
130
+ .autocomplete-highlight {
131
+ background-color: var(--color-primary-container);
132
+ color: var(--color-on-primary-container);
133
+ font-weight: 600;
134
+ border-radius: 0.125rem;
135
+ }
136
+
137
+ /* Group Header */
138
+ .autocomplete-group-header {
139
+ padding: 0.5rem 1rem;
140
+ font-size: 0.75rem;
141
+ font-weight: 600;
142
+ text-transform: uppercase;
143
+ color: var(--color-on-surface-variant);
144
+ background-color: var(--color-surface-container);
145
+ border-bottom: 1px solid var(--color-outline-variant);
146
+ }
147
+
148
+ /* No Results */
149
+ .autocomplete-no-results {
150
+ padding: 1rem;
151
+ text-align: center;
152
+ font-size: 0.875rem;
153
+ color: var(--color-on-surface-variant);
154
+ }
155
+
156
+ /* Loading State */
157
+ .autocomplete-loading {
158
+ display: flex;
159
+ align-items: center;
160
+ justify-content: center;
161
+ gap: 0.5rem;
162
+ padding: 1rem;
163
+ color: var(--color-on-surface-variant);
164
+ }
165
+
166
+ /* Clear Button */
167
+ .autocomplete-clear {
168
+ position: absolute;
169
+ right: 0.75rem;
170
+ top: 50%;
171
+ transform: translateY(-50%);
172
+ display: flex;
173
+ align-items: center;
174
+ justify-content: center;
175
+ width: 1.5rem;
176
+ height: 1.5rem;
177
+ color: var(--color-on-surface-variant);
178
+ background-color: transparent;
179
+ border: none;
180
+ border-radius: 50%;
181
+ cursor: pointer;
182
+ transition: background-color 150ms ease-in-out, color 150ms ease-in-out;
183
+ }
184
+
185
+ .autocomplete-clear:hover {
186
+ background-color: var(--color-surface-container);
187
+ color: var(--color-on-surface);
188
+ }
189
+
190
+ /* With Clear Button */
191
+ .autocomplete-clearable .autocomplete-input {
192
+ padding-right: 2.5rem;
193
+ }
194
+
195
+ /* Multi-select Tags */
196
+ .autocomplete-tags {
197
+ display: flex;
198
+ flex-wrap: wrap;
199
+ gap: 0.25rem;
200
+ padding: 0.375rem;
201
+ padding-right: 2.5rem;
202
+ min-height: 2.75rem;
203
+ background-color: var(--color-surface);
204
+ border: 1px solid var(--color-outline);
205
+ border-radius: 0.5rem;
206
+ }
207
+
208
+ .autocomplete-tags:focus-within {
209
+ border-color: var(--color-primary);
210
+ box-shadow: 0 0 0 3px var(--color-primary-container);
211
+ }
212
+
213
+ .autocomplete-tag {
214
+ display: inline-flex;
215
+ align-items: center;
216
+ gap: 0.25rem;
217
+ padding: 0.25rem 0.5rem;
218
+ font-size: 0.75rem;
219
+ background-color: var(--color-primary-container);
220
+ color: var(--color-on-primary-container);
221
+ border-radius: 0.25rem;
222
+ }
223
+
224
+ .autocomplete-tag-remove {
225
+ display: flex;
226
+ align-items: center;
227
+ justify-content: center;
228
+ width: 1rem;
229
+ height: 1rem;
230
+ font-size: 0.75rem;
231
+ background-color: transparent;
232
+ border: none;
233
+ cursor: pointer;
234
+ border-radius: 50%;
235
+ transition: background-color 150ms ease-in-out;
236
+ }
237
+
238
+ .autocomplete-tag-remove:hover {
239
+ background-color: var(--color-on-primary-container);
240
+ color: var(--color-primary-container);
241
+ }
242
+
243
+ .autocomplete-tags-input {
244
+ flex: 1;
245
+ min-width: 5rem;
246
+ padding: 0.25rem;
247
+ font-size: 0.875rem;
248
+ background-color: transparent;
249
+ border: none;
250
+ outline: none;
251
+ }
252
+
253
+ /* Size Variants */
254
+ .autocomplete-sm .autocomplete-input {
255
+ padding: 0.5rem 0.75rem;
256
+ font-size: 0.75rem;
257
+ }
258
+
259
+ .autocomplete-lg .autocomplete-input {
260
+ padding: 1rem 1.25rem;
261
+ font-size: 1rem;
262
+ }
263
+
264
+ /* Reduce Motion */
265
+ @media (prefers-reduced-motion: reduce) {
266
+ .autocomplete-dropdown {
267
+ transition: none;
268
+ }
269
+ }
270
+ }
271
+ `;
272
+
273
+ const sheet = new CSSStyleSheet();
274
+ sheet.replaceSync(css);
275
+ export const styles = sheet;
276
+ export default sheet;