@duskmoon-dev/core 0.1.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 (86) hide show
  1. package/README.md +366 -78
  2. package/dist/components/accordion.css +244 -0
  3. package/dist/components/alert.css +199 -0
  4. package/dist/components/appbar.css +308 -0
  5. package/dist/components/autocomplete.css +269 -0
  6. package/dist/components/avatar.css +167 -0
  7. package/dist/components/badge.css +178 -0
  8. package/dist/components/bottom-navigation.css +263 -0
  9. package/dist/components/bottomsheet.css +334 -0
  10. package/dist/components/button.css +474 -0
  11. package/dist/components/card.css +220 -0
  12. package/dist/components/chip.css +211 -0
  13. package/dist/components/collapse.css +254 -0
  14. package/dist/components/datepicker.css +347 -0
  15. package/dist/components/dialog.css +173 -0
  16. package/dist/components/divider.css +284 -0
  17. package/dist/components/drawer.css +371 -0
  18. package/dist/components/file-upload.css +321 -0
  19. package/dist/components/form.css +441 -0
  20. package/dist/components/index.css +9994 -0
  21. package/dist/components/input.css +240 -0
  22. package/dist/components/list.css +188 -0
  23. package/dist/components/markdown-body.css +405 -0
  24. package/dist/components/modal.css +291 -0
  25. package/dist/components/navigation.css +392 -0
  26. package/dist/components/popover.css +326 -0
  27. package/dist/components/progress.css +238 -0
  28. package/dist/components/rating.css +230 -0
  29. package/dist/components/skeleton.css +216 -0
  30. package/dist/components/slider.css +327 -0
  31. package/dist/components/snackbar.css +311 -0
  32. package/dist/components/stepper.css +313 -0
  33. package/dist/components/switch.css +277 -0
  34. package/dist/components/table.css +199 -0
  35. package/dist/components/timeline.css +353 -0
  36. package/dist/components/toast.css +251 -0
  37. package/dist/components/tooltip.css +284 -0
  38. package/dist/esm/components/accordion.js +251 -0
  39. package/dist/esm/components/alert.js +206 -0
  40. package/dist/esm/components/appbar.js +315 -0
  41. package/dist/esm/components/autocomplete.js +276 -0
  42. package/dist/esm/components/avatar.js +174 -0
  43. package/dist/esm/components/badge.js +185 -0
  44. package/dist/esm/components/bottom-navigation.js +270 -0
  45. package/dist/esm/components/bottomsheet.js +341 -0
  46. package/dist/esm/components/button.js +481 -0
  47. package/dist/esm/components/card.js +227 -0
  48. package/dist/esm/components/chip.js +218 -0
  49. package/dist/esm/components/collapse.js +261 -0
  50. package/dist/esm/components/datepicker.js +354 -0
  51. package/dist/esm/components/dialog.js +180 -0
  52. package/dist/esm/components/divider.js +291 -0
  53. package/dist/esm/components/drawer.js +378 -0
  54. package/dist/esm/components/file-upload.js +328 -0
  55. package/dist/esm/components/form.js +448 -0
  56. package/dist/esm/components/input.js +247 -0
  57. package/dist/esm/components/list.js +195 -0
  58. package/dist/esm/components/markdown-body.js +412 -0
  59. package/dist/esm/components/modal.js +298 -0
  60. package/dist/esm/components/navigation.js +399 -0
  61. package/dist/esm/components/popover.js +333 -0
  62. package/dist/esm/components/progress.js +245 -0
  63. package/dist/esm/components/rating.js +237 -0
  64. package/dist/esm/components/skeleton.js +223 -0
  65. package/dist/esm/components/slider.js +334 -0
  66. package/dist/esm/components/snackbar.js +318 -0
  67. package/dist/esm/components/stepper.js +320 -0
  68. package/dist/esm/components/switch.js +284 -0
  69. package/dist/esm/components/table.js +206 -0
  70. package/dist/esm/components/timeline.js +360 -0
  71. package/dist/esm/components/toast.js +258 -0
  72. package/dist/esm/components/tooltip.js +291 -0
  73. package/dist/index.css +10699 -0
  74. package/dist/themes/moonlight.css +168 -0
  75. package/dist/themes/sunshine.css +166 -0
  76. package/dist/types/index.d.ts +14 -0
  77. package/dist/types/index.d.ts.map +1 -0
  78. package/dist/types/plugin.d.ts +69 -0
  79. package/dist/types/plugin.d.ts.map +1 -0
  80. package/dist/types/theme.d.ts +202 -0
  81. package/dist/types/theme.d.ts.map +1 -0
  82. package/package.json +207 -18
  83. package/dist/index.cjs +0 -243
  84. package/dist/index.cjs.map +0 -15
  85. package/dist/index.js +0 -211
  86. package/dist/index.js.map +0 -15
@@ -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;