@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,238 @@
1
+ /**
2
+ * Progress Component Styles
3
+ * DuskMoonUI - Material Design 3 inspired progress system
4
+ */
5
+
6
+ @layer components {
7
+ /* Base Progress (Linear) */
8
+ .progress {
9
+ position: relative;
10
+ width: 100%;
11
+ height: 0.5rem;
12
+ background-color: var(--color-surface-container-highest);
13
+ border-radius: 9999px;
14
+ overflow: hidden;
15
+ }
16
+
17
+ /* Progress Bar */
18
+ .progress-bar {
19
+ position: absolute;
20
+ top: 0;
21
+ left: 0;
22
+ height: 100%;
23
+ background-color: var(--color-primary);
24
+ border-radius: 9999px;
25
+ transition: width 300ms ease-in-out;
26
+ }
27
+
28
+ /* Color Variants */
29
+ .progress-primary .progress-bar {
30
+ background-color: var(--color-primary);
31
+ }
32
+
33
+ .progress-secondary .progress-bar {
34
+ background-color: var(--color-secondary);
35
+ }
36
+
37
+ .progress-tertiary .progress-bar {
38
+ background-color: var(--color-tertiary);
39
+ }
40
+
41
+ .progress-info .progress-bar {
42
+ background-color: var(--color-info);
43
+ }
44
+
45
+ .progress-success .progress-bar {
46
+ background-color: var(--color-success);
47
+ }
48
+
49
+ .progress-warning .progress-bar {
50
+ background-color: var(--color-warning);
51
+ }
52
+
53
+ .progress-error .progress-bar {
54
+ background-color: var(--color-error);
55
+ }
56
+
57
+ /* Size Variants */
58
+ .progress-xs {
59
+ height: 0.25rem;
60
+ }
61
+
62
+ .progress-sm {
63
+ height: 0.375rem;
64
+ }
65
+
66
+ .progress-lg {
67
+ height: 0.75rem;
68
+ }
69
+
70
+ .progress-xl {
71
+ height: 1rem;
72
+ }
73
+
74
+ /* Indeterminate Animation */
75
+ .progress-indeterminate .progress-bar {
76
+ width: 30%;
77
+ animation: progress-indeterminate 1.5s infinite ease-in-out;
78
+ }
79
+
80
+ @keyframes progress-indeterminate {
81
+ 0% {
82
+ left: -30%;
83
+ }
84
+ 100% {
85
+ left: 100%;
86
+ }
87
+ }
88
+
89
+ /* Progress with Label */
90
+ .progress-labeled {
91
+ position: relative;
92
+ }
93
+
94
+ .progress-label {
95
+ position: absolute;
96
+ top: 50%;
97
+ left: 50%;
98
+ transform: translate(-50%, -50%);
99
+ font-size: 0.625rem;
100
+ font-weight: 600;
101
+ color: var(--color-on-surface);
102
+ }
103
+
104
+ /* Striped Progress */
105
+ .progress-striped .progress-bar {
106
+ background-image: linear-gradient(
107
+ 45deg,
108
+ rgba(255, 255, 255, 0.15) 25%,
109
+ transparent 25%,
110
+ transparent 50%,
111
+ rgba(255, 255, 255, 0.15) 50%,
112
+ rgba(255, 255, 255, 0.15) 75%,
113
+ transparent 75%,
114
+ transparent
115
+ );
116
+ background-size: 1rem 1rem;
117
+ }
118
+
119
+ .progress-striped.progress-animated .progress-bar {
120
+ animation: progress-striped 1s linear infinite;
121
+ }
122
+
123
+ @keyframes progress-striped {
124
+ from {
125
+ background-position: 1rem 0;
126
+ }
127
+ to {
128
+ background-position: 0 0;
129
+ }
130
+ }
131
+
132
+ /* Circular Progress */
133
+ .progress-circular {
134
+ position: relative;
135
+ width: 3rem;
136
+ height: 3rem;
137
+ display: inline-flex;
138
+ align-items: center;
139
+ justify-content: center;
140
+ }
141
+
142
+ .progress-circular svg {
143
+ width: 100%;
144
+ height: 100%;
145
+ transform: rotate(-90deg);
146
+ }
147
+
148
+ .progress-circular-track {
149
+ fill: none;
150
+ stroke: var(--color-surface-container-highest);
151
+ stroke-width: 4;
152
+ }
153
+
154
+ .progress-circular-bar {
155
+ fill: none;
156
+ stroke: var(--color-primary);
157
+ stroke-width: 4;
158
+ stroke-linecap: round;
159
+ transition: stroke-dashoffset 300ms ease-in-out;
160
+ }
161
+
162
+ .progress-circular-label {
163
+ position: absolute;
164
+ font-size: 0.75rem;
165
+ font-weight: 600;
166
+ color: var(--color-on-surface);
167
+ }
168
+
169
+ /* Circular Size Variants */
170
+ .progress-circular-sm {
171
+ width: 2rem;
172
+ height: 2rem;
173
+ }
174
+
175
+ .progress-circular-sm .progress-circular-label {
176
+ font-size: 0.5rem;
177
+ }
178
+
179
+ .progress-circular-lg {
180
+ width: 4rem;
181
+ height: 4rem;
182
+ }
183
+
184
+ .progress-circular-lg .progress-circular-label {
185
+ font-size: 1rem;
186
+ }
187
+
188
+ .progress-circular-xl {
189
+ width: 6rem;
190
+ height: 6rem;
191
+ }
192
+
193
+ .progress-circular-xl .progress-circular-label {
194
+ font-size: 1.25rem;
195
+ }
196
+
197
+ /* Circular Indeterminate */
198
+ .progress-circular-indeterminate svg {
199
+ animation: progress-circular-rotate 2s linear infinite;
200
+ }
201
+
202
+ .progress-circular-indeterminate .progress-circular-bar {
203
+ stroke-dasharray: 80, 200;
204
+ stroke-dashoffset: 0;
205
+ animation: progress-circular-dash 1.5s ease-in-out infinite;
206
+ }
207
+
208
+ @keyframes progress-circular-rotate {
209
+ 100% {
210
+ transform: rotate(270deg);
211
+ }
212
+ }
213
+
214
+ @keyframes progress-circular-dash {
215
+ 0% {
216
+ stroke-dasharray: 1, 200;
217
+ stroke-dashoffset: 0;
218
+ }
219
+ 50% {
220
+ stroke-dasharray: 100, 200;
221
+ stroke-dashoffset: -15;
222
+ }
223
+ 100% {
224
+ stroke-dasharray: 100, 200;
225
+ stroke-dashoffset: -125;
226
+ }
227
+ }
228
+
229
+ /* Reduce Motion */
230
+ @media (prefers-reduced-motion: reduce) {
231
+ .progress-indeterminate .progress-bar,
232
+ .progress-striped.progress-animated .progress-bar,
233
+ .progress-circular-indeterminate svg,
234
+ .progress-circular-indeterminate .progress-circular-bar {
235
+ animation: none;
236
+ }
237
+ }
238
+ }
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Rating Component Styles
3
+ * DuskMoonUI - Material Design 3 inspired rating system
4
+ */
5
+
6
+ @layer components {
7
+ /* Base Rating */
8
+ .rating {
9
+ display: inline-flex;
10
+ align-items: center;
11
+ gap: 0.125rem;
12
+ }
13
+
14
+ /* Rating Item */
15
+ .rating-item {
16
+ position: relative;
17
+ display: flex;
18
+ align-items: center;
19
+ justify-content: center;
20
+ color: var(--color-outline);
21
+ cursor: pointer;
22
+ transition: color 150ms ease-in-out, transform 150ms ease-in-out;
23
+ }
24
+
25
+ .rating-item:hover {
26
+ transform: scale(1.1);
27
+ }
28
+
29
+ .rating-item.active {
30
+ color: var(--color-warning-container);
31
+ }
32
+
33
+ .rating-item.filled {
34
+ color: var(--color-warning);
35
+ }
36
+
37
+ /* Rating Input (hidden) */
38
+ .rating-input {
39
+ position: absolute;
40
+ width: 0;
41
+ height: 0;
42
+ opacity: 0;
43
+ overflow: hidden;
44
+ }
45
+
46
+ /* Rating Icon */
47
+ .rating-icon {
48
+ width: 1.5rem;
49
+ height: 1.5rem;
50
+ font-size: 1.5rem;
51
+ line-height: 1;
52
+ }
53
+
54
+ /* Half Rating */
55
+ .rating-half {
56
+ position: relative;
57
+ overflow: hidden;
58
+ }
59
+
60
+ .rating-half .rating-icon-empty {
61
+ color: var(--color-outline);
62
+ }
63
+
64
+ .rating-half .rating-icon-filled {
65
+ position: absolute;
66
+ left: 0;
67
+ top: 0;
68
+ width: 50%;
69
+ overflow: hidden;
70
+ color: var(--color-warning);
71
+ }
72
+
73
+ /* Size Variants */
74
+ .rating-xs .rating-icon {
75
+ width: 0.875rem;
76
+ height: 0.875rem;
77
+ font-size: 0.875rem;
78
+ }
79
+
80
+ .rating-sm .rating-icon {
81
+ width: 1.25rem;
82
+ height: 1.25rem;
83
+ font-size: 1.25rem;
84
+ }
85
+
86
+ .rating-lg .rating-icon {
87
+ width: 2rem;
88
+ height: 2rem;
89
+ font-size: 2rem;
90
+ }
91
+
92
+ .rating-xl .rating-icon {
93
+ width: 2.5rem;
94
+ height: 2.5rem;
95
+ font-size: 2.5rem;
96
+ }
97
+
98
+ /* Color Variants */
99
+ .rating-primary .rating-item.filled {
100
+ color: var(--color-primary);
101
+ }
102
+
103
+ .rating-secondary .rating-item.filled {
104
+ color: var(--color-secondary);
105
+ }
106
+
107
+ .rating-error .rating-item.filled {
108
+ color: var(--color-error);
109
+ }
110
+
111
+ .rating-success .rating-item.filled {
112
+ color: var(--color-success);
113
+ }
114
+
115
+ /* Read Only */
116
+ .rating-readonly .rating-item {
117
+ cursor: default;
118
+ }
119
+
120
+ .rating-readonly .rating-item:hover {
121
+ transform: none;
122
+ }
123
+
124
+ /* Disabled */
125
+ .rating-disabled {
126
+ opacity: 0.6;
127
+ pointer-events: none;
128
+ }
129
+
130
+ /* With Label */
131
+ .rating-labeled {
132
+ display: flex;
133
+ align-items: center;
134
+ gap: 0.5rem;
135
+ }
136
+
137
+ .rating-label {
138
+ font-size: 0.875rem;
139
+ color: var(--color-on-surface-variant);
140
+ }
141
+
142
+ /* With Count */
143
+ .rating-count {
144
+ font-size: 0.75rem;
145
+ color: var(--color-on-surface-variant);
146
+ margin-left: 0.25rem;
147
+ }
148
+
149
+ /* Hover Preview */
150
+ .rating:not(.rating-readonly) .rating-item:hover ~ .rating-item {
151
+ color: var(--color-outline);
152
+ }
153
+
154
+ .rating:not(.rating-readonly):hover .rating-item {
155
+ color: var(--color-warning);
156
+ }
157
+
158
+ /* Focus Visible */
159
+ .rating-item:focus-visible {
160
+ outline: 2px solid var(--color-primary);
161
+ outline-offset: 2px;
162
+ border-radius: 0.25rem;
163
+ }
164
+
165
+ /* Rating Display (static) */
166
+ .rating-display {
167
+ display: inline-flex;
168
+ align-items: center;
169
+ gap: 0.375rem;
170
+ }
171
+
172
+ .rating-display-value {
173
+ font-size: 0.875rem;
174
+ font-weight: 600;
175
+ color: var(--color-on-surface);
176
+ }
177
+
178
+ .rating-display-stars {
179
+ display: flex;
180
+ gap: 0.0625rem;
181
+ color: var(--color-warning);
182
+ }
183
+
184
+ .rating-display-max {
185
+ font-size: 0.75rem;
186
+ color: var(--color-on-surface-variant);
187
+ }
188
+
189
+ /* Compact Rating */
190
+ .rating-compact {
191
+ gap: 0;
192
+ }
193
+
194
+ .rating-compact .rating-item {
195
+ padding: 0.125rem;
196
+ }
197
+
198
+ /* Animated */
199
+ .rating-animated .rating-item {
200
+ transition: color 150ms ease-in-out, transform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);
201
+ }
202
+
203
+ .rating-animated .rating-item.filled {
204
+ animation: rating-pop 300ms ease-out;
205
+ }
206
+
207
+ @keyframes rating-pop {
208
+ 0% {
209
+ transform: scale(1);
210
+ }
211
+ 50% {
212
+ transform: scale(1.3);
213
+ }
214
+ 100% {
215
+ transform: scale(1);
216
+ }
217
+ }
218
+
219
+ /* Reduce Motion */
220
+ @media (prefers-reduced-motion: reduce) {
221
+ .rating-item,
222
+ .rating-animated .rating-item {
223
+ transition: color 0ms;
224
+ }
225
+
226
+ .rating-animated .rating-item.filled {
227
+ animation: none;
228
+ }
229
+ }
230
+ }
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Skeleton Component Styles
3
+ * DuskMoonUI - Material Design 3 inspired skeleton loading system
4
+ */
5
+
6
+ @layer components {
7
+ /* Base Skeleton */
8
+ .skeleton {
9
+ background-color: var(--color-surface-container-high);
10
+ border-radius: 0.25rem;
11
+ animation: skeleton-pulse 2s ease-in-out infinite;
12
+ }
13
+
14
+ /* Skeleton Variants */
15
+ .skeleton-text {
16
+ height: 1rem;
17
+ width: 100%;
18
+ border-radius: 0.25rem;
19
+ }
20
+
21
+ .skeleton-circle {
22
+ border-radius: 50%;
23
+ aspect-ratio: 1;
24
+ }
25
+
26
+ .skeleton-rect {
27
+ border-radius: 0.5rem;
28
+ }
29
+
30
+ .skeleton-rounded {
31
+ border-radius: 0.5rem;
32
+ }
33
+
34
+ /* Size Variants */
35
+ .skeleton-xs {
36
+ height: 0.5rem;
37
+ }
38
+
39
+ .skeleton-sm {
40
+ height: 0.75rem;
41
+ }
42
+
43
+ .skeleton-md {
44
+ height: 1rem;
45
+ }
46
+
47
+ .skeleton-lg {
48
+ height: 1.5rem;
49
+ }
50
+
51
+ .skeleton-xl {
52
+ height: 2rem;
53
+ }
54
+
55
+ /* Common Skeleton Patterns */
56
+ .skeleton-avatar {
57
+ width: 3rem;
58
+ height: 3rem;
59
+ border-radius: 50%;
60
+ }
61
+
62
+ .skeleton-avatar-sm {
63
+ width: 2rem;
64
+ height: 2rem;
65
+ }
66
+
67
+ .skeleton-avatar-lg {
68
+ width: 4rem;
69
+ height: 4rem;
70
+ }
71
+
72
+ .skeleton-button {
73
+ height: 2.5rem;
74
+ width: 6rem;
75
+ border-radius: 0.5rem;
76
+ }
77
+
78
+ .skeleton-image {
79
+ aspect-ratio: 16 / 9;
80
+ width: 100%;
81
+ border-radius: 0.5rem;
82
+ }
83
+
84
+ .skeleton-card {
85
+ width: 100%;
86
+ border-radius: 1rem;
87
+ padding: 1rem;
88
+ }
89
+
90
+ /* Line Patterns */
91
+ .skeleton-line {
92
+ height: 0.875rem;
93
+ width: 100%;
94
+ margin-bottom: 0.5rem;
95
+ border-radius: 0.25rem;
96
+ }
97
+
98
+ .skeleton-line:last-child {
99
+ width: 75%;
100
+ margin-bottom: 0;
101
+ }
102
+
103
+ .skeleton-line-short {
104
+ width: 40%;
105
+ }
106
+
107
+ .skeleton-line-medium {
108
+ width: 70%;
109
+ }
110
+
111
+ /* Pulse Animation */
112
+ @keyframes skeleton-pulse {
113
+ 0%, 100% {
114
+ opacity: 1;
115
+ }
116
+ 50% {
117
+ opacity: 0.4;
118
+ }
119
+ }
120
+
121
+ /* Wave Animation */
122
+ .skeleton-wave {
123
+ position: relative;
124
+ overflow: hidden;
125
+ animation: none;
126
+ }
127
+
128
+ .skeleton-wave::after {
129
+ content: '';
130
+ position: absolute;
131
+ inset: 0;
132
+ transform: translateX(-100%);
133
+ background: linear-gradient(
134
+ 90deg,
135
+ transparent,
136
+ rgba(255, 255, 255, 0.3),
137
+ transparent
138
+ );
139
+ animation: skeleton-wave 1.5s infinite;
140
+ }
141
+
142
+ @keyframes skeleton-wave {
143
+ 100% {
144
+ transform: translateX(100%);
145
+ }
146
+ }
147
+
148
+ /* Skeleton Group */
149
+ .skeleton-group {
150
+ display: flex;
151
+ flex-direction: column;
152
+ gap: 0.75rem;
153
+ }
154
+
155
+ /* Card Skeleton Pattern */
156
+ .skeleton-card-content {
157
+ display: flex;
158
+ flex-direction: column;
159
+ gap: 0.75rem;
160
+ }
161
+
162
+ .skeleton-card-header {
163
+ display: flex;
164
+ align-items: center;
165
+ gap: 0.75rem;
166
+ }
167
+
168
+ .skeleton-card-body {
169
+ display: flex;
170
+ flex-direction: column;
171
+ gap: 0.5rem;
172
+ }
173
+
174
+ /* Table Skeleton */
175
+ .skeleton-table {
176
+ width: 100%;
177
+ }
178
+
179
+ .skeleton-table-row {
180
+ display: flex;
181
+ gap: 1rem;
182
+ padding: 0.75rem 0;
183
+ border-bottom: 1px solid var(--color-outline-variant);
184
+ }
185
+
186
+ .skeleton-table-cell {
187
+ flex: 1;
188
+ height: 1rem;
189
+ border-radius: 0.25rem;
190
+ }
191
+
192
+ /* List Skeleton */
193
+ .skeleton-list {
194
+ display: flex;
195
+ flex-direction: column;
196
+ gap: 0.5rem;
197
+ }
198
+
199
+ .skeleton-list-item {
200
+ display: flex;
201
+ align-items: center;
202
+ gap: 0.75rem;
203
+ padding: 0.5rem 0;
204
+ }
205
+
206
+ /* Reduce Motion */
207
+ @media (prefers-reduced-motion: reduce) {
208
+ .skeleton {
209
+ animation: none;
210
+ }
211
+
212
+ .skeleton-wave::after {
213
+ animation: none;
214
+ }
215
+ }
216
+ }