@digiko-npm/designsystem 0.7.2 → 0.8.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 (58) hide show
  1. package/dist/designsystem.css +6682 -4515
  2. package/dist/designsystem.min.css +2 -2
  3. package/package.json +18 -3
  4. package/src/components/accordion.css +129 -128
  5. package/src/components/alert.css +137 -134
  6. package/src/components/avatar.css +77 -77
  7. package/src/components/badge.css +52 -52
  8. package/src/components/bottom-nav.css +71 -71
  9. package/src/components/bottom-sheet.css +146 -0
  10. package/src/components/breadcrumb.css +61 -61
  11. package/src/components/button.css +162 -154
  12. package/src/components/card.css +94 -72
  13. package/src/components/chip.css +38 -38
  14. package/src/components/collapsible.css +96 -100
  15. package/src/components/color-picker.css +82 -0
  16. package/src/components/combobox.css +418 -0
  17. package/src/components/command.css +141 -140
  18. package/src/components/copy-button.css +106 -0
  19. package/src/components/datepicker.css +257 -251
  20. package/src/components/description-list.css +89 -87
  21. package/src/components/divider.css +45 -45
  22. package/src/components/drawer.css +185 -174
  23. package/src/components/drop-zone.css +85 -84
  24. package/src/components/dropdown.css +148 -140
  25. package/src/components/empty-state.css +50 -50
  26. package/src/components/field.css +35 -0
  27. package/src/components/gallery.css +257 -0
  28. package/src/components/icon-btn.css +2 -1
  29. package/src/components/index.css +14 -3
  30. package/src/components/input.css +205 -146
  31. package/src/components/kbd.css +10 -10
  32. package/src/components/modal.css +92 -90
  33. package/src/components/nav.css +140 -138
  34. package/src/components/number-input.css +163 -0
  35. package/src/components/pagination.css +152 -139
  36. package/src/components/pin-input.css +136 -0
  37. package/src/components/popover.css +72 -72
  38. package/src/components/progress.css +128 -129
  39. package/src/components/result.css +53 -57
  40. package/src/components/scroll-area.css +73 -0
  41. package/src/components/search.css +10 -4
  42. package/src/components/segmented-control.css +93 -0
  43. package/src/components/skeleton.css +58 -58
  44. package/src/components/slider.css +102 -100
  45. package/src/components/sortable.css +44 -45
  46. package/src/components/spinner.css +27 -27
  47. package/src/components/star-rating.css +121 -0
  48. package/src/components/stat-card.css +38 -25
  49. package/src/components/table.css +288 -3
  50. package/src/components/tabs.css +121 -121
  51. package/src/components/tag.css +124 -124
  52. package/src/components/timeline.css +99 -99
  53. package/src/components/toast.css +37 -38
  54. package/src/components/toggle.css +88 -88
  55. package/src/components/toolbar.css +137 -121
  56. package/src/components/tooltip.css +150 -150
  57. package/src/components/truncated-text.css +75 -0
  58. package/src/tokens/tokens.json +413 -0
@@ -0,0 +1,106 @@
1
+ /* ==========================================================================
2
+ Component: Copy Button
3
+ Icon button with clipboard feedback state (idle → copied).
4
+
5
+ ARIA requirements (consumer responsibility):
6
+ - Button: aria-label="Copy [description]"
7
+ - After copy: update aria-label to "Copied" temporarily
8
+ - Use role="status" or aria-live="polite" for screen reader feedback
9
+
10
+ Usage:
11
+ <button class="ds-copy-btn" aria-label="Copy address">
12
+ <svg class="ds-copy-btn__icon">...</svg> <!-- copy icon -->
13
+ <svg class="ds-copy-btn__icon-check">...</svg> <!-- check icon -->
14
+ </button>
15
+
16
+ <!-- Active state (after copy): -->
17
+ <button class="ds-copy-btn ds-copy-btn--copied" aria-label="Copied">...</button>
18
+
19
+ Modifiers:
20
+ .ds-copy-btn--copied — Show check icon, hide copy icon
21
+ .ds-copy-btn--sm — Smaller (24px)
22
+ .ds-copy-btn--lg — Larger (40px)
23
+ ========================================================================== */
24
+
25
+ .ds-copy-btn {
26
+ display: inline-flex;
27
+ align-items: center;
28
+ justify-content: center;
29
+ position: relative;
30
+ width: var(--ds-size-2);
31
+ height: var(--ds-size-2);
32
+ padding: var(--ds-space-1-5);
33
+ border: none;
34
+ border-radius: var(--ds-radius-md);
35
+ background: transparent;
36
+ color: var(--ds-color-text-tertiary);
37
+ cursor: pointer;
38
+ flex-shrink: 0;
39
+ transition:
40
+ color var(--ds-duration-fast) var(--ds-ease-default),
41
+ background-color var(--ds-duration-fast) var(--ds-ease-default);
42
+
43
+ &:hover {
44
+ background-color: var(--ds-color-surface-hover);
45
+ color: var(--ds-color-text-secondary);
46
+ }
47
+
48
+ &:focus-visible {
49
+ outline: none;
50
+ box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
51
+ scroll-margin-block: var(--ds-space-16, 4rem);
52
+ }
53
+
54
+ /* --- Icons --- */
55
+ &__icon,
56
+ &__icon-check {
57
+ width: 1rem;
58
+ height: 1rem;
59
+ transition: opacity var(--ds-duration-fast) var(--ds-ease-default);
60
+ }
61
+
62
+ &__icon-check {
63
+ position: absolute;
64
+ opacity: 0;
65
+ color: var(--ds-color-success);
66
+ }
67
+
68
+ /* --- Copied state --- */
69
+ &--copied {
70
+ color: var(--ds-color-success);
71
+
72
+ & .ds-copy-btn__icon {
73
+ opacity: 0;
74
+ }
75
+
76
+ & .ds-copy-btn__icon-check {
77
+ opacity: 1;
78
+ }
79
+ }
80
+
81
+ /* --- Sizes --- */
82
+ &--sm {
83
+ width: var(--ds-size-1);
84
+ height: var(--ds-size-1);
85
+ padding: var(--ds-space-0-5);
86
+ border-radius: var(--ds-radius-sm);
87
+
88
+ & .ds-copy-btn__icon,
89
+ & .ds-copy-btn__icon-check {
90
+ width: 0.75rem;
91
+ height: 0.75rem;
92
+ }
93
+ }
94
+
95
+ &--lg {
96
+ width: var(--ds-size-3);
97
+ height: var(--ds-size-3);
98
+ padding: var(--ds-space-2);
99
+
100
+ & .ds-copy-btn__icon,
101
+ & .ds-copy-btn__icon-check {
102
+ width: 1.25rem;
103
+ height: 1.25rem;
104
+ }
105
+ }
106
+ }
@@ -37,259 +37,265 @@
37
37
  .ds-datepicker__day--other-month — Dims days from adjacent months
38
38
  ========================================================================== */
39
39
 
40
- /* Wrapper */
41
40
  .ds-datepicker {
41
+ /* Wrapper */
42
42
  position: relative;
43
43
  display: inline-flex;
44
- }
45
-
46
- /* Trigger button */
47
- .ds-datepicker__trigger {
48
- display: inline-flex;
49
- align-items: center;
50
- gap: var(--ds-space-1);
51
- cursor: pointer;
52
- background: none;
53
- border: none;
54
- padding: 0;
55
- color: var(--ds-color-text);
56
- font: inherit;
57
- line-height: 1;
58
- }
59
-
60
- .ds-datepicker__trigger:focus-visible {
61
- outline: none;
62
- box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
63
- }
64
-
65
- /* Calendar panel */
66
- .ds-datepicker__panel {
67
- position: absolute;
68
- z-index: var(--ds-z-dropdown);
69
- inset-block-start: calc(100% + var(--ds-offset-sm));
70
- inset-inline-start: 0;
71
- background-color: var(--ds-color-surface);
72
- border: 1px solid var(--ds-color-border);
73
- border-radius: var(--ds-radius-xl);
74
- box-shadow: var(--ds-shadow-lg);
75
- padding: var(--ds-space-3);
76
- min-width: 17rem;
77
- opacity: 0;
78
- visibility: hidden;
79
- transform: scale(0.96);
80
- transition:
81
- opacity var(--ds-duration-fast) var(--ds-ease-default),
82
- visibility var(--ds-duration-fast) var(--ds-ease-default),
83
- transform var(--ds-duration-fast) var(--ds-ease-out-expo);
84
- }
85
-
86
- /* Open state */
87
- .ds-datepicker--open .ds-datepicker__panel {
88
- opacity: 1;
89
- visibility: visible;
90
- transform: scale(1);
91
- }
92
-
93
- /* Header — month/year + nav arrows */
94
- .ds-datepicker__header {
95
- display: flex;
96
- align-items: center;
97
- justify-content: space-between;
98
- margin-block-end: var(--ds-space-2);
99
- }
100
-
101
- .ds-datepicker__title {
102
- font-size: var(--ds-text-sm);
103
- font-weight: var(--ds-weight-semibold);
104
- color: var(--ds-color-text);
105
- user-select: none;
106
- }
107
-
108
- .ds-datepicker__nav {
109
- display: inline-flex;
110
- align-items: center;
111
- justify-content: center;
112
- width: 1.75rem;
113
- height: 1.75rem;
114
- border: none;
115
- background: none;
116
- border-radius: var(--ds-radius-md);
117
- color: var(--ds-color-text-secondary);
118
- cursor: pointer;
119
- font-size: var(--ds-text-base);
120
- transition: all var(--ds-duration-fast) var(--ds-ease-default);
121
- }
122
-
123
- .ds-datepicker__nav:hover {
124
- background-color: var(--ds-color-bg-elevated);
125
- color: var(--ds-color-text);
126
- }
127
- .ds-datepicker__nav:focus-visible {
128
- outline: none;
129
- box-shadow: inset 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
130
- }
131
-
132
- /* Weekday header row */
133
- .ds-datepicker__weekdays {
134
- display: grid;
135
- grid-template-columns: repeat(7, 1fr);
136
- margin-block-end: var(--ds-space-1);
137
- }
138
-
139
- .ds-datepicker__weekday {
140
- font-size: var(--ds-text-xs);
141
- color: var(--ds-color-text-tertiary);
142
- text-align: center;
143
- padding: var(--ds-space-1) 0;
144
- user-select: none;
145
- font-weight: var(--ds-weight-medium);
146
- }
147
-
148
- /* Day grid */
149
- .ds-datepicker__grid {
150
- display: grid;
151
- grid-template-columns: repeat(7, 1fr);
152
- gap: 1px;
153
- }
154
-
155
- /* Day cell */
156
- .ds-datepicker__day {
157
- display: inline-flex;
158
- align-items: center;
159
- justify-content: center;
160
- aspect-ratio: 1;
161
- border: none;
162
- background: none;
163
- border-radius: var(--ds-radius-md);
164
- font-size: var(--ds-text-sm);
165
- color: var(--ds-color-text);
166
- cursor: pointer;
167
- transition: all var(--ds-duration-fast) var(--ds-ease-default);
168
- padding: 0;
169
- line-height: 1;
170
- user-select: none;
171
- }
172
-
173
- .ds-datepicker__day:hover {
174
- background-color: var(--ds-color-bg-elevated);
175
- }
176
- .ds-datepicker__day:focus-visible {
177
- outline: none;
178
- box-shadow: inset 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
179
- }
180
-
181
- /* Today — subtle ring */
182
- .ds-datepicker__day--today {
183
- box-shadow: inset 0 0 0 1px var(--ds-color-border-active);
184
- font-weight: var(--ds-weight-semibold);
185
- }
186
-
187
- /* Selected — inverted fill */
188
- .ds-datepicker__day--selected {
189
- background-color: var(--ds-color-text);
190
- color: var(--ds-color-bg);
191
- font-weight: var(--ds-weight-semibold);
192
- }
193
-
194
- .ds-datepicker__day--selected:hover {
195
- background-color: var(--ds-color-text);
196
- opacity: 0.85;
197
- }
198
-
199
- /* Other month days — dimmed */
200
- .ds-datepicker__day--other-month {
201
- color: var(--ds-color-text-tertiary);
202
- opacity: 0.4;
203
- }
204
-
205
- /* Footer — Today pill */
206
- .ds-datepicker__footer {
207
- display: flex;
208
- justify-content: center;
209
- margin-block-start: var(--ds-space-2);
210
- padding-block-start: var(--ds-space-2);
211
- border-block-start: 1px solid var(--ds-color-border);
212
- }
213
-
214
- .ds-datepicker__today {
215
- font-size: var(--ds-text-xs);
216
- font-weight: var(--ds-weight-medium);
217
- color: var(--ds-color-text-secondary);
218
- background: none;
219
- border: 1px solid var(--ds-color-border);
220
- border-radius: var(--ds-radius-full);
221
- padding: var(--ds-space-1) var(--ds-space-3);
222
- cursor: pointer;
223
- transition: all var(--ds-duration-fast) var(--ds-ease-default);
224
- }
225
-
226
- .ds-datepicker__today:hover {
227
- background-color: var(--ds-color-bg-elevated);
228
- color: var(--ds-color-text);
229
- border-color: var(--ds-color-border-hover);
230
- }
231
- .ds-datepicker__today:focus-visible {
232
- outline: none;
233
- box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
234
- }
235
-
236
- /* Step arrows — prev/next day buttons beside the date text */
237
- .ds-datepicker__step {
238
- display: inline-flex;
239
- align-items: center;
240
- justify-content: center;
241
- width: 1.25rem;
242
- height: 1.25rem;
243
- border: none;
244
- background: none;
245
- border-radius: var(--ds-radius-default);
246
- color: var(--ds-color-text-tertiary);
247
- cursor: pointer;
248
- font-size: var(--ds-text-xs);
249
- transition: all var(--ds-duration-fast) var(--ds-ease-default);
250
- padding: 0;
251
- flex-shrink: 0;
252
- }
253
-
254
- .ds-datepicker__step:hover {
255
- background-color: var(--ds-color-bg-elevated);
256
- color: var(--ds-color-text);
257
- }
258
- .ds-datepicker__step:focus-visible {
259
- outline: none;
260
- box-shadow: inset 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
261
- }
262
-
263
- /* Compact mode — for inline table cells */
264
- .ds-datepicker--compact .ds-datepicker__panel {
265
- min-width: 14rem;
266
- padding: var(--ds-space-2);
267
- }
268
-
269
- .ds-datepicker--compact .ds-datepicker__title {
270
- font-size: var(--ds-text-xs);
271
- }
272
-
273
- .ds-datepicker--compact .ds-datepicker__nav {
274
- width: 1.5rem;
275
- height: 1.5rem;
276
- font-size: var(--ds-text-sm);
277
- }
278
-
279
- .ds-datepicker--compact .ds-datepicker__weekday {
280
- font-size: var(--ds-text-2xs);
281
- }
282
-
283
- .ds-datepicker--compact .ds-datepicker__day {
284
- font-size: var(--ds-text-xs);
285
- }
286
-
287
- .ds-datepicker--compact .ds-datepicker__today {
288
- font-size: var(--ds-text-2xs);
289
- padding: 2px var(--ds-space-2);
290
- }
291
44
 
292
- .ds-datepicker--compact .ds-datepicker__footer {
293
- margin-block-start: var(--ds-space-1);
294
- padding-block-start: var(--ds-space-1);
45
+ /* Trigger button */
46
+ &__trigger {
47
+ display: inline-flex;
48
+ align-items: center;
49
+ gap: var(--ds-space-1);
50
+ cursor: pointer;
51
+ background: none;
52
+ border: none;
53
+ padding: 0;
54
+ color: var(--ds-color-text);
55
+ font: inherit;
56
+ line-height: 1;
57
+
58
+ &:focus-visible {
59
+ outline: none;
60
+ box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
61
+ }
62
+ }
63
+
64
+ /* Calendar panel */
65
+ &__panel {
66
+ position: absolute;
67
+ z-index: var(--ds-z-dropdown);
68
+ inset-block-start: calc(100% + var(--ds-offset-sm));
69
+ inset-inline-start: 0;
70
+ background-color: var(--ds-color-surface);
71
+ border: 1px solid var(--ds-color-border);
72
+ border-radius: var(--ds-radius-xl);
73
+ box-shadow: var(--ds-shadow-lg);
74
+ padding: var(--ds-space-3);
75
+ min-width: 17rem;
76
+ opacity: 0;
77
+ visibility: hidden;
78
+ transform: scale(0.96);
79
+ transition:
80
+ opacity var(--ds-duration-fast) var(--ds-ease-default),
81
+ visibility var(--ds-duration-fast) var(--ds-ease-default),
82
+ transform var(--ds-duration-fast) var(--ds-ease-out-expo);
83
+ }
84
+
85
+ /* Open state */
86
+ &--open &__panel {
87
+ opacity: 1;
88
+ visibility: visible;
89
+ transform: scale(1);
90
+ }
91
+
92
+ /* Header — month/year + nav arrows */
93
+ &__header {
94
+ display: flex;
95
+ align-items: center;
96
+ justify-content: space-between;
97
+ margin-block-end: var(--ds-space-2);
98
+ }
99
+
100
+ &__title {
101
+ font-size: var(--ds-text-sm);
102
+ font-weight: var(--ds-weight-semibold);
103
+ color: var(--ds-color-text);
104
+ user-select: none;
105
+ }
106
+
107
+ &__nav {
108
+ display: inline-flex;
109
+ align-items: center;
110
+ justify-content: center;
111
+ width: 1.75rem;
112
+ height: 1.75rem;
113
+ border: none;
114
+ background: none;
115
+ border-radius: var(--ds-radius-md);
116
+ color: var(--ds-color-text-secondary);
117
+ cursor: pointer;
118
+ font-size: var(--ds-text-base);
119
+ transition: all var(--ds-duration-fast) var(--ds-ease-default);
120
+
121
+ &:hover {
122
+ background-color: var(--ds-color-bg-elevated);
123
+ color: var(--ds-color-text);
124
+ }
125
+
126
+ &:focus-visible {
127
+ outline: none;
128
+ box-shadow: inset 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
129
+ }
130
+ }
131
+
132
+ /* Weekday header row */
133
+ &__weekdays {
134
+ display: grid;
135
+ grid-template-columns: repeat(7, 1fr);
136
+ margin-block-end: var(--ds-space-1);
137
+ }
138
+
139
+ &__weekday {
140
+ font-size: var(--ds-text-xs);
141
+ color: var(--ds-color-text-tertiary);
142
+ text-align: center;
143
+ padding: var(--ds-space-1) 0;
144
+ user-select: none;
145
+ font-weight: var(--ds-weight-medium);
146
+ }
147
+
148
+ /* Day grid */
149
+ &__grid {
150
+ display: grid;
151
+ grid-template-columns: repeat(7, 1fr);
152
+ gap: 1px;
153
+ }
154
+
155
+ /* Day cell */
156
+ &__day {
157
+ display: inline-flex;
158
+ align-items: center;
159
+ justify-content: center;
160
+ aspect-ratio: 1;
161
+ border: none;
162
+ background: none;
163
+ border-radius: var(--ds-radius-md);
164
+ font-size: var(--ds-text-sm);
165
+ color: var(--ds-color-text);
166
+ cursor: pointer;
167
+ transition: all var(--ds-duration-fast) var(--ds-ease-default);
168
+ padding: 0;
169
+ line-height: 1;
170
+ user-select: none;
171
+
172
+ &:hover {
173
+ background-color: var(--ds-color-bg-elevated);
174
+ }
175
+
176
+ &:focus-visible {
177
+ outline: none;
178
+ box-shadow: inset 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
179
+ }
180
+
181
+ /* Today — subtle ring */
182
+ &--today {
183
+ box-shadow: inset 0 0 0 1px var(--ds-color-border-active);
184
+ font-weight: var(--ds-weight-semibold);
185
+ }
186
+
187
+ /* Selected — inverted fill */
188
+ &--selected {
189
+ background-color: var(--ds-color-text);
190
+ color: var(--ds-color-bg);
191
+ font-weight: var(--ds-weight-semibold);
192
+
193
+ &:hover {
194
+ background-color: var(--ds-color-text);
195
+ opacity: 0.85;
196
+ }
197
+ }
198
+
199
+ /* Other month days — dimmed */
200
+ &--other-month {
201
+ color: var(--ds-color-text-tertiary);
202
+ opacity: 0.4;
203
+ }
204
+ }
205
+
206
+ /* Footer — Today pill */
207
+ &__footer {
208
+ display: flex;
209
+ justify-content: center;
210
+ margin-block-start: var(--ds-space-2);
211
+ padding-block-start: var(--ds-space-2);
212
+ border-block-start: 1px solid var(--ds-color-border);
213
+ }
214
+
215
+ &__today {
216
+ font-size: var(--ds-text-xs);
217
+ font-weight: var(--ds-weight-medium);
218
+ color: var(--ds-color-text-secondary);
219
+ background: none;
220
+ border: 1px solid var(--ds-color-border);
221
+ border-radius: var(--ds-radius-full);
222
+ padding: var(--ds-space-1) var(--ds-space-3);
223
+ cursor: pointer;
224
+ transition: all var(--ds-duration-fast) var(--ds-ease-default);
225
+
226
+ &:hover {
227
+ background-color: var(--ds-color-bg-elevated);
228
+ color: var(--ds-color-text);
229
+ border-color: var(--ds-color-border-hover);
230
+ }
231
+
232
+ &:focus-visible {
233
+ outline: none;
234
+ box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
235
+ }
236
+ }
237
+
238
+ /* Step arrows — prev/next day buttons beside the date text */
239
+ &__step {
240
+ display: inline-flex;
241
+ align-items: center;
242
+ justify-content: center;
243
+ width: 1.25rem;
244
+ height: 1.25rem;
245
+ border: none;
246
+ background: none;
247
+ border-radius: var(--ds-radius-default);
248
+ color: var(--ds-color-text-tertiary);
249
+ cursor: pointer;
250
+ font-size: var(--ds-text-xs);
251
+ transition: all var(--ds-duration-fast) var(--ds-ease-default);
252
+ padding: 0;
253
+ flex-shrink: 0;
254
+
255
+ &:hover {
256
+ background-color: var(--ds-color-bg-elevated);
257
+ color: var(--ds-color-text);
258
+ }
259
+
260
+ &:focus-visible {
261
+ outline: none;
262
+ box-shadow: inset 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
263
+ }
264
+ }
265
+
266
+ /* Compact mode — for inline table cells */
267
+ &--compact {
268
+ & .ds-datepicker__panel {
269
+ min-width: 14rem;
270
+ padding: var(--ds-space-2);
271
+ }
272
+
273
+ & .ds-datepicker__title {
274
+ font-size: var(--ds-text-xs);
275
+ }
276
+
277
+ & .ds-datepicker__nav {
278
+ width: 1.5rem;
279
+ height: 1.5rem;
280
+ font-size: var(--ds-text-sm);
281
+ }
282
+
283
+ & .ds-datepicker__weekday {
284
+ font-size: var(--ds-text-2xs);
285
+ }
286
+
287
+ & .ds-datepicker__day {
288
+ font-size: var(--ds-text-xs);
289
+ }
290
+
291
+ & .ds-datepicker__today {
292
+ font-size: var(--ds-text-2xs);
293
+ padding: 2px var(--ds-space-2);
294
+ }
295
+
296
+ & .ds-datepicker__footer {
297
+ margin-block-start: var(--ds-space-1);
298
+ padding-block-start: var(--ds-space-1);
299
+ }
300
+ }
295
301
  }