@duskmoon-dev/core 1.1.0 → 1.2.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 (33) hide show
  1. package/dist/components/button.css +47 -46
  2. package/dist/components/checkbox.css +231 -0
  3. package/dist/components/datepicker.css +404 -10
  4. package/dist/components/form-group.css +308 -0
  5. package/dist/components/index.css +4077 -687
  6. package/dist/components/multi-select.css +491 -0
  7. package/dist/components/navigation.css +153 -2
  8. package/dist/components/otp-input.css +195 -0
  9. package/dist/components/pin-input.css +184 -0
  10. package/dist/components/radio.css +183 -0
  11. package/dist/components/segment-control.css +186 -0
  12. package/dist/components/select.css +205 -0
  13. package/dist/components/switch.css +150 -193
  14. package/dist/components/textarea.css +202 -0
  15. package/dist/components/time-input.css +252 -0
  16. package/dist/components/tree-select.css +439 -0
  17. package/dist/esm/components/button.js +47 -46
  18. package/dist/esm/components/checkbox.js +238 -0
  19. package/dist/esm/components/datepicker.js +404 -10
  20. package/dist/esm/components/form-group.js +315 -0
  21. package/dist/esm/components/multi-select.js +498 -0
  22. package/dist/esm/components/navigation.js +153 -2
  23. package/dist/esm/components/otp-input.js +202 -0
  24. package/dist/esm/components/pin-input.js +191 -0
  25. package/dist/esm/components/radio.js +190 -0
  26. package/dist/esm/components/segment-control.js +193 -0
  27. package/dist/esm/components/select.js +212 -0
  28. package/dist/esm/components/switch.js +150 -193
  29. package/dist/esm/components/textarea.js +209 -0
  30. package/dist/esm/components/time-input.js +259 -0
  31. package/dist/esm/components/tree-select.js +446 -0
  32. package/dist/index.css +4073 -683
  33. package/package.json +56 -1
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Segment Control Component Styles
3
+ * DuskMoonUI - Material Design 3 inspired segmented button/toggle group
4
+ */
5
+
6
+ @layer components {
7
+ /* Base Segment Control */
8
+ .segment-control {
9
+ display: inline-flex;
10
+ align-items: stretch;
11
+ background-color: var(--color-surface-container);
12
+ border: 1px solid var(--color-outline);
13
+ border-radius: 1.25rem;
14
+ padding: 0.25rem;
15
+ gap: 0.25rem;
16
+ }
17
+
18
+ /* Segment Item */
19
+ .segment-item {
20
+ position: relative;
21
+ display: inline-flex;
22
+ align-items: center;
23
+ justify-content: center;
24
+ gap: 0.5rem;
25
+ padding: 0.5rem 1rem;
26
+ font-size: 0.875rem;
27
+ font-weight: 500;
28
+ line-height: 1.25rem;
29
+ color: var(--color-on-surface);
30
+ background-color: transparent;
31
+ border: none;
32
+ border-radius: 1rem;
33
+ cursor: pointer;
34
+ transition: background-color 150ms ease-in-out, color 150ms ease-in-out;
35
+ user-select: none;
36
+ white-space: nowrap;
37
+ }
38
+
39
+ .segment-item:hover:not(:disabled):not(.segment-item-active) {
40
+ background-color: var(--color-surface-container-high);
41
+ }
42
+
43
+ .segment-item:focus-visible {
44
+ outline: 2px solid var(--color-primary);
45
+ outline-offset: 2px;
46
+ }
47
+
48
+ .segment-item:disabled {
49
+ opacity: 0.38;
50
+ cursor: not-allowed;
51
+ }
52
+
53
+ /* Active State */
54
+ .segment-item-active {
55
+ background-color: var(--color-primary-container);
56
+ color: var(--color-on-primary-container);
57
+ }
58
+
59
+ .segment-item-active:hover:not(:disabled) {
60
+ background-color: color-mix(in oklch, var(--color-primary-container), black 5%);
61
+ }
62
+
63
+ /* Segment Icon */
64
+ .segment-icon {
65
+ display: flex;
66
+ align-items: center;
67
+ justify-content: center;
68
+ width: 1.125rem;
69
+ height: 1.125rem;
70
+ }
71
+
72
+ /* Size Variants */
73
+ .segment-control-sm {
74
+ padding: 0.125rem;
75
+ gap: 0.125rem;
76
+ border-radius: 1rem;
77
+ }
78
+
79
+ .segment-control-sm .segment-item {
80
+ padding: 0.375rem 0.75rem;
81
+ font-size: 0.75rem;
82
+ line-height: 1rem;
83
+ border-radius: 0.75rem;
84
+ }
85
+
86
+ .segment-control-lg {
87
+ padding: 0.375rem;
88
+ gap: 0.375rem;
89
+ border-radius: 1.5rem;
90
+ }
91
+
92
+ .segment-control-lg .segment-item {
93
+ padding: 0.75rem 1.5rem;
94
+ font-size: 1rem;
95
+ line-height: 1.5rem;
96
+ border-radius: 1.25rem;
97
+ }
98
+
99
+ /* Color Variants */
100
+ .segment-control-primary .segment-item-active {
101
+ background-color: var(--color-primary);
102
+ color: var(--color-primary-content);
103
+ }
104
+
105
+ .segment-control-secondary .segment-item-active {
106
+ background-color: var(--color-secondary-container);
107
+ color: var(--color-on-secondary-container);
108
+ }
109
+
110
+ .segment-control-tertiary .segment-item-active {
111
+ background-color: var(--color-tertiary-container);
112
+ color: var(--color-on-tertiary-container);
113
+ }
114
+
115
+ /* Full Width */
116
+ .segment-control-full {
117
+ display: flex;
118
+ width: 100%;
119
+ }
120
+
121
+ .segment-control-full .segment-item {
122
+ flex: 1;
123
+ }
124
+
125
+ /* Outlined Variant */
126
+ .segment-control-outlined {
127
+ background-color: transparent;
128
+ padding: 0;
129
+ gap: 0;
130
+ }
131
+
132
+ .segment-control-outlined .segment-item {
133
+ border: 1px solid var(--color-outline);
134
+ border-radius: 0;
135
+ margin-left: -1px;
136
+ }
137
+
138
+ .segment-control-outlined .segment-item:first-child {
139
+ margin-left: 0;
140
+ border-top-left-radius: 1.25rem;
141
+ border-bottom-left-radius: 1.25rem;
142
+ }
143
+
144
+ .segment-control-outlined .segment-item:last-child {
145
+ border-top-right-radius: 1.25rem;
146
+ border-bottom-right-radius: 1.25rem;
147
+ }
148
+
149
+ .segment-control-outlined .segment-item-active {
150
+ background-color: var(--color-primary-container);
151
+ border-color: var(--color-primary);
152
+ z-index: 1;
153
+ }
154
+
155
+ /* Ghost Variant */
156
+ .segment-control-ghost {
157
+ background-color: transparent;
158
+ border-color: transparent;
159
+ }
160
+
161
+ /* Icon Only */
162
+ .segment-control-icon-only .segment-item {
163
+ padding: 0.625rem;
164
+ }
165
+
166
+ .segment-control-icon-only.segment-control-sm .segment-item {
167
+ padding: 0.5rem;
168
+ }
169
+
170
+ .segment-control-icon-only.segment-control-lg .segment-item {
171
+ padding: 0.75rem;
172
+ }
173
+
174
+ /* Multiple Selection (Toggle Group) */
175
+ .segment-control-multi .segment-item-active {
176
+ background-color: var(--color-primary-container);
177
+ color: var(--color-on-primary-container);
178
+ }
179
+
180
+ /* Reduce Motion */
181
+ @media (prefers-reduced-motion: reduce) {
182
+ .segment-item {
183
+ transition: none;
184
+ }
185
+ }
186
+ }
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Select Component Styles
3
+ * DuskMoonUI - Material Design 3 inspired select/dropdown system
4
+ */
5
+
6
+ @layer components {
7
+ /* Base Select */
8
+ .select {
9
+ display: block;
10
+ width: 100%;
11
+ padding: 0.75rem 2.5rem 0.75rem 1rem;
12
+ font-size: 1rem;
13
+ line-height: 1.5rem;
14
+ color: var(--color-on-surface);
15
+ background-color: var(--color-surface);
16
+ border: 1px solid var(--color-outline);
17
+ border-radius: 0.5rem;
18
+ outline: none;
19
+ cursor: pointer;
20
+ appearance: none;
21
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
22
+ background-position: right 0.75rem center;
23
+ background-repeat: no-repeat;
24
+ background-size: 1.25rem 1.25rem;
25
+ transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
26
+ }
27
+
28
+ .select:hover:not(:disabled) {
29
+ border-color: var(--color-on-surface-variant);
30
+ }
31
+
32
+ .select:focus {
33
+ outline: none;
34
+ }
35
+
36
+ .select:focus-visible {
37
+ border-color: var(--color-primary);
38
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
39
+ }
40
+
41
+ .select:disabled {
42
+ cursor: not-allowed;
43
+ opacity: 0.5;
44
+ background-color: var(--color-surface-container);
45
+ }
46
+
47
+ /* Filled Variant */
48
+ .select-filled {
49
+ background-color: var(--color-surface-container);
50
+ border: none;
51
+ border-bottom: 2px solid var(--color-outline);
52
+ border-radius: 0.5rem 0.5rem 0 0;
53
+ }
54
+
55
+ .select-filled:hover:not(:disabled) {
56
+ background-color: var(--color-surface-container-high);
57
+ border-bottom-color: var(--color-on-surface);
58
+ }
59
+
60
+ .select-filled:focus-visible {
61
+ border-bottom-color: var(--color-primary);
62
+ box-shadow: none;
63
+ }
64
+
65
+ /* Outlined Variant (default is outlined) */
66
+ .select-outlined {
67
+ background-color: transparent;
68
+ border: 1px solid var(--color-outline);
69
+ border-radius: 0.5rem;
70
+ }
71
+
72
+ /* Color Variants */
73
+ .select-primary:focus-visible {
74
+ border-color: var(--color-primary);
75
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
76
+ }
77
+
78
+ .select-secondary:focus-visible {
79
+ border-color: var(--color-secondary);
80
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
81
+ }
82
+
83
+ .select-tertiary:focus-visible {
84
+ border-color: var(--color-tertiary);
85
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
86
+ }
87
+
88
+ /* Semantic Colors */
89
+ .select-error {
90
+ border-color: var(--color-error);
91
+ }
92
+
93
+ .select-error:focus-visible {
94
+ border-color: var(--color-error);
95
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
96
+ }
97
+
98
+ .select-success {
99
+ border-color: var(--color-success);
100
+ }
101
+
102
+ .select-success:focus-visible {
103
+ border-color: var(--color-success);
104
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
105
+ }
106
+
107
+ /* Size Variants */
108
+ .select-xs {
109
+ padding: 0.375rem 2rem 0.375rem 0.625rem;
110
+ font-size: 0.75rem;
111
+ line-height: 1rem;
112
+ border-radius: 0.25rem;
113
+ background-size: 1rem 1rem;
114
+ }
115
+
116
+ .select-sm {
117
+ padding: 0.5rem 2.25rem 0.5rem 0.75rem;
118
+ font-size: 0.875rem;
119
+ line-height: 1.25rem;
120
+ border-radius: 0.375rem;
121
+ background-size: 1.125rem 1.125rem;
122
+ }
123
+
124
+ .select-lg {
125
+ padding: 1rem 3rem 1rem 1.25rem;
126
+ font-size: 1.125rem;
127
+ line-height: 1.75rem;
128
+ border-radius: 0.625rem;
129
+ background-size: 1.5rem 1.5rem;
130
+ background-position: right 1rem center;
131
+ }
132
+
133
+ /* Select Container */
134
+ .select-container {
135
+ position: relative;
136
+ display: flex;
137
+ flex-direction: column;
138
+ gap: 0.25rem;
139
+ width: 100%;
140
+ }
141
+
142
+ .select-label {
143
+ font-size: 0.875rem;
144
+ font-weight: 500;
145
+ color: var(--color-on-surface);
146
+ }
147
+
148
+ .select-helper {
149
+ font-size: 0.75rem;
150
+ color: var(--color-on-surface-variant);
151
+ }
152
+
153
+ .select-container-error .select-helper {
154
+ color: var(--color-error);
155
+ }
156
+
157
+ /* Select Group */
158
+ .select-group {
159
+ display: flex;
160
+ flex-direction: column;
161
+ gap: 0.25rem;
162
+ }
163
+
164
+ /* Multiple Select */
165
+ .select-multiple {
166
+ padding: 0.5rem;
167
+ height: auto;
168
+ min-height: 6rem;
169
+ background-image: none;
170
+ }
171
+
172
+ .select-multiple option {
173
+ padding: 0.5rem 0.75rem;
174
+ border-radius: 0.25rem;
175
+ }
176
+
177
+ .select-multiple option:checked {
178
+ background-color: var(--color-primary-container);
179
+ color: var(--color-on-primary-container);
180
+ }
181
+
182
+ /* Ghost Select */
183
+ .select-ghost {
184
+ background-color: transparent;
185
+ border-color: transparent;
186
+ }
187
+
188
+ .select-ghost:hover:not(:disabled) {
189
+ background-color: var(--color-surface-container);
190
+ border-color: transparent;
191
+ }
192
+
193
+ .select-ghost:focus-visible {
194
+ background-color: var(--color-surface-container);
195
+ border-color: transparent;
196
+ box-shadow: none;
197
+ }
198
+
199
+ /* Reduce Motion */
200
+ @media (prefers-reduced-motion: reduce) {
201
+ .select {
202
+ transition: none;
203
+ }
204
+ }
205
+ }