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