@devslab/dds-css 0.28.0 → 0.29.1

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.
@@ -7,6 +7,14 @@
7
7
  .dds-choice-input {flex:1;inline-size:100%;outline:none;}
8
8
  .dds-choice-trigger {cursor:pointer;text-align:start;}
9
9
  .dds-choice-control > .dds-choice-trigger:first-child {inline-size:100%;}
10
+ /* SelectPicker keeps a single line in the field; the popup exposes full labels.
11
+ * Other choice adapters may virtualize fixed rows, so wrapping is opt-in here. */
12
+ .dds-select-picker .dds-choice-control {block-size:var(--dds-space-40);}
13
+ .dds-select-picker .dds-choice-trigger {display:flex;align-items:center;gap:var(--dds-space-8);flex:1;}
14
+ .dds-select-picker .dds-choice-value {flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
15
+ .dds-select-picker .dds-choice-indicator {display:flex;align-items:center;flex:none;color:var(--dds-color-text-secondary);pointer-events:none;}
16
+ .dds-select-picker[data-label-placement="inside"] .dds-choice-control {block-size:calc(var(--dds-space-40) + var(--dds-space-16));}
17
+ .dds-select-picker-content .dds-choice-item {padding-block:var(--dds-space-8);white-space:normal;overflow-wrap:anywhere;}
10
18
  .dds-choice-clear {flex:none;min-inline-size:var(--dds-space-32);min-block-size:var(--dds-space-32);padding:var(--dds-space-4);border:0;border-radius:var(--dds-radius-sm);background:transparent;color:var(--dds-color-text-secondary);cursor:pointer;}
11
19
  .dds-choice-content {box-sizing:border-box;min-inline-size:var(--reference-width);max-inline-size:calc(100vw - var(--dds-space-32));max-block-size:min(320px,var(--available-height,320px));overflow:auto;padding:var(--dds-space-4);background:var(--dds-color-bg-elevated);color:var(--dds-color-text-primary);border:1px solid var(--dds-color-border-default);border-radius:var(--dds-radius-md);box-shadow:var(--dds-elevation-2);font-family:var(--dds-font-family-sans);font-size:var(--dds-typo-body-2-font-size);}
12
20
  .dds-choice-item {box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;min-block-size:var(--dds-space-40);padding-inline:var(--dds-space-12);border-radius:var(--dds-radius-sm);cursor:pointer;outline:none;overflow:hidden;white-space:nowrap;}
@@ -26,4 +34,4 @@
26
34
  .dds-choice[data-label-placement="inside"]:not(:focus-within):not([data-has-value]) .dds-choice-input::placeholder {color:transparent;}
27
35
  .dds-choice[data-label-placement="inside"]:not(:focus-within):not([data-has-value]) .dds-choice-value {visibility:hidden;}
28
36
  .dds-choice[data-disabled] {opacity:.45;}
29
- @media(pointer:coarse){.dds-choice-input,.dds-choice-trigger,.dds-choice-clear {min-block-size:44px;min-inline-size:44px;}}
37
+ @media(pointer:coarse){.dds-select-picker .dds-choice-control {min-block-size:44px;}.dds-choice-input,.dds-choice-trigger,.dds-choice-clear {min-block-size:44px;min-inline-size:44px;}}
@@ -358,3 +358,63 @@
358
358
  transition: none;
359
359
  }
360
360
  }
361
+
362
+ /* Optional disclosures: legacy navigation retains its layout. */
363
+ .dds-console-rail__group[data-collapsible="true"] > ul {
364
+ padding-inline-start: var(--dds-space-12);
365
+ }
366
+ .dds-console-rail__group[data-collapsible="true"] > .dds-console-rail__group-label {
367
+ padding: 0;
368
+ }
369
+ .dds-console-rail__group-toggle {
370
+ display: flex;
371
+ align-items: center;
372
+ justify-content: space-between;
373
+ gap: var(--dds-space-8);
374
+ inline-size: 100%;
375
+ min-block-size: var(--dds-space-40);
376
+ padding: var(--dds-space-8);
377
+ border: 0;
378
+ border-radius: var(--dds-radius-md);
379
+ background: transparent;
380
+ color: var(--dds-color-text-secondary);
381
+ font: inherit;
382
+ font-size: .75rem;
383
+ font-weight: 650;
384
+ letter-spacing: normal;
385
+ text-align: start;
386
+ cursor: pointer;
387
+ }
388
+ .dds-console-rail__group-toggle[hidden] { display: none; }
389
+ .dds-console-rail__group-toggle:hover { background: var(--dds-color-bg-subtle); }
390
+ .dds-console-rail__group-toggle:focus-visible {
391
+ outline: 2px solid var(--dds-color-border-focus);
392
+ outline-offset: 2px;
393
+ }
394
+ .dds-console-rail__chevron {
395
+ inline-size: .375rem;
396
+ block-size: .375rem;
397
+ border-inline-end: 1.5px solid currentColor;
398
+ border-block-end: 1.5px solid currentColor;
399
+ transform: rotate(-45deg);
400
+ }
401
+ .dds-console-rail__group-toggle[aria-expanded="true"] .dds-console-rail__chevron {
402
+ transform: rotate(45deg);
403
+ }
404
+ .dds-console-rail__item-content {
405
+ display: inline-flex;
406
+ align-items: center;
407
+ gap: var(--dds-space-8);
408
+ min-inline-size: 0;
409
+ }
410
+ .dds-console-rail__item-content[hidden] { display: none; }
411
+ .dds-console-rail__item-icon {
412
+ display: inline-flex;
413
+ align-items: center;
414
+ justify-content: center;
415
+ flex: 0 0 1rem;
416
+ inline-size: 1rem;
417
+ block-size: 1rem;
418
+ }
419
+ .dds-console-rail__item-icon[hidden] { display: none; }
420
+ .dds-console-rail__item-icon > svg { inline-size: 100%; block-size: 100%; }
@@ -5,6 +5,10 @@
5
5
  .dds-input__control::placeholder {color:var(--dds-color-text-muted);}
6
6
  .dds-input__control:focus-visible {outline:var(--dds-space-2) solid var(--dds-color-border-focus);outline-offset:0;}
7
7
  .dds-input__control[aria-invalid="true"] {border-color:var(--dds-color-status-danger);}
8
+ .dds-input:has(.dds-input__search) .dds-input__control {padding-inline-start:var(--dds-space-40);}
9
+ .dds-input__search {position:absolute;inset-inline-start:var(--dds-space-12);inset-block-end:var(--dds-space-12);color:var(--dds-color-text-secondary);pointer-events:none;}
10
+ .dds-input[data-label-placement="inside"]:has(.dds-input__search) .dds-input__label {inset-inline-start:var(--dds-space-40);}
11
+ .dds-input[data-label-placement="inside"] .dds-input__search {inset-block-end:var(--dds-space-20);}
8
12
  .dds-input:has(.dds-input__clear) .dds-input__control {padding-inline-end:var(--dds-space-48);}
9
13
  .dds-input__clear {position:absolute;inset-inline-end:var(--dds-space-4);inset-block-end:var(--dds-space-4);display:grid;place-items:center;inline-size:var(--dds-space-32);block-size:var(--dds-space-32);padding:0;border:0;border-radius:var(--dds-radius-sm);background:transparent;color:var(--dds-color-text-secondary);font:inherit;cursor:pointer;}
10
14
  .dds-input__clear:hover {background:var(--dds-color-bg-subtle);}
@@ -17,7 +21,7 @@
17
21
  .dds-input[data-label-placement="inside"]:is(:focus-within,[data-filled],:has(input:-webkit-autofill)) .dds-input__label {inset-block-start:var(--dds-space-4);font-size:var(--dds-typo-caption-font-size);}
18
22
  .dds-input[data-label-placement="inside"]:not(:focus-within):not([data-filled]):not(:has(input:-webkit-autofill)) .dds-input__control::placeholder {color:transparent;}
19
23
  .dds-input[data-label-placement="inside"] .dds-input__clear {inset-block-end:var(--dds-space-12);}
20
- .dds-input__control[type="search"]::-webkit-search-cancel-button {appearance:none;}
24
+ .dds-input__control[type="search"]::-webkit-search-cancel-button,.dds-input__control[type="search"]::-webkit-search-decoration {appearance:none;}
21
25
  .dds-input-group {display:flex;align-items:flex-end;gap:var(--dds-space-8);inline-size:100%;min-inline-size:0;color:var(--dds-color-text-primary);}
22
26
  .dds-input-group > .dds-input {flex:1;min-inline-size:0;}
23
27
  .dds-input-group__start,.dds-input-group__end {display:flex;align-items:center;justify-content:center;flex:none;min-block-size:var(--dds-space-40);color:var(--dds-color-text-secondary);}
@@ -0,0 +1,219 @@
1
+ /* Shared application geometry and type. Framework adapters contain no CSS. */
2
+ .dds-layout {
3
+ display: grid;
4
+ grid-template-columns: 14.5rem minmax(0, 1fr);
5
+ min-block-size: 100dvh;
6
+ font-family: var(--dds-font-family-sans);
7
+ font-size: var(--dds-typo-body-2-font-size);
8
+ line-height: var(--dds-typo-body-2-line-height);
9
+ font-weight: var(--dds-typo-body-2-font-weight);
10
+ color: var(--dds-color-text-primary);
11
+ background: var(--dds-color-bg-default);
12
+ }
13
+ .dds-layout[hidden] {
14
+ display: none;
15
+ }
16
+ .dds-layout *,
17
+ .dds-layout *::before,
18
+ .dds-layout *::after {
19
+ box-sizing: border-box;
20
+ }
21
+ .dds-layout[data-navigation-position="top"] {
22
+ grid-template-columns: minmax(0, 1fr);
23
+ grid-template-rows: auto minmax(0, 1fr);
24
+ }
25
+ .dds-layout .dds-layout__navigation {
26
+ padding: var(--dds-space-20) var(--dds-space-12);
27
+ }
28
+ .dds-layout[data-navigation-position="top"] .dds-layout__navigation {
29
+ position: relative;
30
+ display: flex;
31
+ align-items: center;
32
+ flex-wrap: wrap;
33
+ flex-direction: row;
34
+ gap: var(--dds-space-16);
35
+ block-size: auto;
36
+ min-block-size: 3.5rem;
37
+ padding: var(--dds-space-8) var(--dds-space-32);
38
+ overflow: visible;
39
+ border-inline-end: 0;
40
+ border-block-end: 1px solid var(--dds-color-border-default);
41
+ }
42
+ .dds-layout[data-navigation-position="top"] .dds-layout__navigation[hidden] {
43
+ display: none;
44
+ }
45
+ .dds-layout .dds-layout__main {
46
+ min-inline-size: 0;
47
+ padding: var(--dds-space-32);
48
+ }
49
+ .dds-layout__content {
50
+ display: flex;
51
+ flex-direction: column;
52
+ gap: var(--dds-space-32);
53
+ inline-size: 100%;
54
+ max-inline-size: 68.75rem;
55
+ margin-inline: auto;
56
+ min-inline-size: 0;
57
+ overflow-wrap: anywhere;
58
+ }
59
+ .dds-layout__content[hidden] {
60
+ display: none;
61
+ }
62
+ .dds-layout__content[data-width="form"] {
63
+ max-inline-size: 56.25rem;
64
+ }
65
+ .dds-layout__content[data-width="settings"] {
66
+ max-inline-size: 50rem;
67
+ }
68
+ .dds-layout__content[data-width="full"] {
69
+ max-inline-size: none;
70
+ }
71
+ .dds-layout h1 {
72
+ font-size: var(--dds-typo-title-1-font-size);
73
+ line-height: var(--dds-typo-title-1-line-height);
74
+ font-weight: var(--dds-typo-title-1-font-weight);
75
+ }
76
+ .dds-layout h2 {
77
+ font-size: var(--dds-typo-title-2-font-size);
78
+ line-height: var(--dds-typo-title-2-line-height);
79
+ font-weight: var(--dds-typo-title-2-font-weight);
80
+ }
81
+ .dds-layout h3 {
82
+ font-size: var(--dds-typo-title-3-font-size);
83
+ line-height: var(--dds-typo-title-3-line-height);
84
+ font-weight: var(--dds-typo-title-3-font-weight);
85
+ }
86
+ .dds-layout h1,
87
+ .dds-layout h2,
88
+ .dds-layout h3,
89
+ .dds-layout p {
90
+ margin: 0;
91
+ }
92
+ .dds-layout__header,
93
+ .dds-layout__section {
94
+ display: grid;
95
+ gap: var(--dds-space-16);
96
+ }
97
+ .dds-layout__header[hidden],
98
+ .dds-layout__section[hidden] {
99
+ display: none;
100
+ }
101
+ .dds-layout__panel {
102
+ padding: var(--dds-space-24);
103
+ border: 1px solid var(--dds-color-border-default);
104
+ border-radius: var(--dds-radius-md);
105
+ background: var(--dds-color-bg-elevated);
106
+ }
107
+ .dds-layout__fields {
108
+ display: grid;
109
+ gap: var(--dds-space-16);
110
+ }
111
+ .dds-layout__fields[hidden] {
112
+ display: none;
113
+ }
114
+ .dds-layout__reading {
115
+ font-size: var(--dds-typo-body-1-font-size);
116
+ line-height: var(--dds-typo-body-1-line-height);
117
+ font-weight: var(--dds-typo-body-1-font-weight);
118
+ }
119
+ .dds-layout__caption {
120
+ font-size: var(--dds-typo-caption-font-size);
121
+ line-height: var(--dds-typo-caption-line-height);
122
+ font-weight: var(--dds-typo-caption-font-weight);
123
+ color: var(--dds-color-text-muted);
124
+ }
125
+ .dds-layout .dds-console-rail__group-label,
126
+ .dds-layout .dds-console-rail__group-toggle {
127
+ font-size: var(--dds-typo-caption-font-size);
128
+ line-height: var(--dds-typo-caption-line-height);
129
+ font-weight: 600;
130
+ }
131
+ .dds-layout .dds-console-rail__item {
132
+ min-block-size: var(--dds-space-40);
133
+ font-size: var(--dds-typo-body-2-font-size);
134
+ line-height: var(--dds-typo-body-2-line-height);
135
+ }
136
+ .dds-layout .dds-console-page-header {
137
+ margin: 0;
138
+ }
139
+ .dds-layout__footer {
140
+ padding-block-start: var(--dds-space-24);
141
+ border-block-start: 1px solid var(--dds-color-border-default);
142
+ }
143
+ @media (max-width: 56.25rem) {
144
+ .dds-layout {
145
+ grid-template-columns: minmax(0, 1fr);
146
+ }
147
+ .dds-layout .dds-layout__main {
148
+ padding: 4rem var(--dds-space-16) var(--dds-space-16);
149
+ }
150
+ .dds-layout .dds-layout__navigation,
151
+ .dds-layout[data-navigation-position="top"] .dds-layout__navigation {
152
+ position: fixed;
153
+ inset-block: 0;
154
+ inset-inline-start: 0;
155
+ z-index: 60;
156
+ display: flex;
157
+ flex-direction: column;
158
+ align-items: stretch;
159
+ inline-size: min(20rem, 85vw);
160
+ block-size: 100dvh;
161
+ padding: 4rem var(--dds-space-12) var(--dds-space-20);
162
+ overflow-y: auto;
163
+ visibility: hidden;
164
+ pointer-events: none;
165
+ transform: translateX(-105%);
166
+ border-inline-end: 1px solid var(--dds-color-border-default);
167
+ }
168
+ .dds-layout .dds-layout__navigation[hidden] {
169
+ display: none;
170
+ }
171
+ .dds-layout .dds-layout__navigation[data-open="true"] {
172
+ visibility: visible;
173
+ pointer-events: auto;
174
+ transform: none;
175
+ }
176
+ [dir="rtl"] .dds-layout .dds-layout__navigation:not([data-open="true"]) {
177
+ transform: translateX(105%);
178
+ }
179
+ .dds-layout__panel {
180
+ padding: var(--dds-space-16);
181
+ }
182
+ .dds-layout .dds-console-rail__item,
183
+ .dds-layout .dds-console-rail__group-toggle {
184
+ min-block-size: 2.75rem;
185
+ }
186
+ }
187
+
188
+ .dds-layout .dds-console-rail__scrim {
189
+ border: 0;
190
+ padding: 0;
191
+ }
192
+
193
+ .dds-layout .dds-field-label {
194
+ font-size: var(--dds-typo-label-font-size);
195
+ line-height: var(--dds-typo-label-line-height);
196
+ font-weight: var(--dds-typo-label-font-weight);
197
+ }
198
+
199
+ .dds-left-nav {
200
+ font-family: var(--dds-font-family-sans);
201
+ font-size: var(--dds-typo-body-2-font-size);
202
+ line-height: var(--dds-typo-body-2-line-height);
203
+ color: var(--dds-color-text-primary);
204
+ }
205
+ .dds-left-nav .dds-console-rail__group-label,
206
+ .dds-left-nav .dds-console-rail__group-toggle {
207
+ font-size: var(--dds-typo-caption-font-size);
208
+ line-height: var(--dds-typo-caption-line-height);
209
+ font-weight: 600;
210
+ }
211
+ @media (max-width: 56.25rem) {
212
+ .dds-layout[data-navigation-position="top"] {
213
+ grid-template-rows: minmax(0, 1fr);
214
+ }
215
+ .dds-left-nav .dds-console-rail__item,
216
+ .dds-left-nav .dds-console-rail__group-toggle {
217
+ min-block-size: 44px;
218
+ }
219
+ }
@@ -0,0 +1,104 @@
1
+ .dds-top-nav {
2
+ display: flex;
3
+ align-items: center;
4
+ flex-wrap: wrap;
5
+ gap: var(--dds-space-8);
6
+ font-family: var(--dds-font-family-sans);
7
+ font-size: var(--dds-typo-body-2-font-size);
8
+ line-height: var(--dds-typo-body-2-line-height);
9
+ }
10
+ .dds-top-nav[hidden] {
11
+ display: none;
12
+ }
13
+ .dds-top-nav__group {
14
+ position: relative;
15
+ }
16
+ .dds-top-nav__trigger,
17
+ .dds-top-nav__item {
18
+ display: flex;
19
+ align-items: center;
20
+ gap: var(--dds-space-8);
21
+ min-block-size: var(--dds-space-40);
22
+ padding: var(--dds-space-8) var(--dds-space-12);
23
+ border-radius: var(--dds-radius-md);
24
+ color: var(--dds-color-text-secondary);
25
+ font-weight: 500;
26
+ text-decoration: none;
27
+ cursor: pointer;
28
+ }
29
+ .dds-top-nav__trigger[hidden],
30
+ .dds-top-nav__item[hidden] {
31
+ display: none;
32
+ }
33
+ .dds-top-nav__trigger {
34
+ list-style: none;
35
+ }
36
+ .dds-top-nav__trigger::-webkit-details-marker {
37
+ display: none;
38
+ }
39
+ .dds-top-nav__trigger::after {
40
+ content: "";
41
+ inline-size: 0.375rem;
42
+ block-size: 0.375rem;
43
+ border-inline-end: 1.5px solid currentColor;
44
+ border-block-end: 1.5px solid currentColor;
45
+ transform: rotate(45deg);
46
+ margin-inline-start: var(--dds-space-8);
47
+ }
48
+ .dds-top-nav__trigger:hover,
49
+ .dds-top-nav__item:hover {
50
+ background: var(--dds-color-bg-subtle);
51
+ }
52
+ .dds-top-nav__trigger:focus-visible,
53
+ .dds-top-nav__item:focus-visible {
54
+ outline: 2px solid var(--dds-color-border-focus);
55
+ outline-offset: 2px;
56
+ }
57
+ .dds-top-nav__item[aria-current="page"] {
58
+ color: var(--dds-color-text-brand);
59
+ background: var(--dds-color-bg-brand-subtle);
60
+ font-weight: 600;
61
+ }
62
+ .dds-top-nav__items {
63
+ position: absolute;
64
+ inset-inline-start: 0;
65
+ z-index: 40;
66
+ min-inline-size: 12rem;
67
+ max-inline-size: min(24rem, 85vw);
68
+ padding: var(--dds-space-8);
69
+ margin: 0;
70
+ list-style: none;
71
+ border: 1px solid var(--dds-color-border-default);
72
+ border-radius: var(--dds-radius-md);
73
+ background: var(--dds-color-bg-elevated);
74
+ overflow-wrap: anywhere;
75
+ }
76
+ .dds-top-nav__item-icon {
77
+ display: inline-flex;
78
+ flex: 0 0 1rem;
79
+ inline-size: 1rem;
80
+ block-size: 1rem;
81
+ }
82
+ .dds-top-nav__item-icon[hidden] {
83
+ display: none;
84
+ }
85
+ .dds-top-nav__item-icon > svg {
86
+ inline-size: 100%;
87
+ block-size: 100%;
88
+ }
89
+ @media (max-width: 56.25rem) {
90
+ .dds-top-nav {
91
+ flex-direction: column;
92
+ align-items: stretch;
93
+ }
94
+ .dds-top-nav__items {
95
+ position: static;
96
+ max-inline-size: none;
97
+ border: 0;
98
+ padding-inline-start: var(--dds-space-16);
99
+ }
100
+ .dds-top-nav__trigger,
101
+ .dds-top-nav__item {
102
+ min-block-size: 2.75rem;
103
+ }
104
+ }
package/dist/dds.css CHANGED
@@ -364,6 +364,10 @@
364
364
  .dds-input__control::placeholder {color:var(--dds-color-text-muted);}
365
365
  .dds-input__control:focus-visible {outline:var(--dds-space-2) solid var(--dds-color-border-focus);outline-offset:0;}
366
366
  .dds-input__control[aria-invalid="true"] {border-color:var(--dds-color-status-danger);}
367
+ .dds-input:has(.dds-input__search) .dds-input__control {padding-inline-start:var(--dds-space-40);}
368
+ .dds-input__search {position:absolute;inset-inline-start:var(--dds-space-12);inset-block-end:var(--dds-space-12);color:var(--dds-color-text-secondary);pointer-events:none;}
369
+ .dds-input[data-label-placement="inside"]:has(.dds-input__search) .dds-input__label {inset-inline-start:var(--dds-space-40);}
370
+ .dds-input[data-label-placement="inside"] .dds-input__search {inset-block-end:var(--dds-space-20);}
367
371
  .dds-input:has(.dds-input__clear) .dds-input__control {padding-inline-end:var(--dds-space-48);}
368
372
  .dds-input__clear {position:absolute;inset-inline-end:var(--dds-space-4);inset-block-end:var(--dds-space-4);display:grid;place-items:center;inline-size:var(--dds-space-32);block-size:var(--dds-space-32);padding:0;border:0;border-radius:var(--dds-radius-sm);background:transparent;color:var(--dds-color-text-secondary);font:inherit;cursor:pointer;}
369
373
  .dds-input__clear:hover {background:var(--dds-color-bg-subtle);}
@@ -376,7 +380,7 @@
376
380
  .dds-input[data-label-placement="inside"]:is(:focus-within,[data-filled],:has(input:-webkit-autofill)) .dds-input__label {inset-block-start:var(--dds-space-4);font-size:var(--dds-typo-caption-font-size);}
377
381
  .dds-input[data-label-placement="inside"]:not(:focus-within):not([data-filled]):not(:has(input:-webkit-autofill)) .dds-input__control::placeholder {color:transparent;}
378
382
  .dds-input[data-label-placement="inside"] .dds-input__clear {inset-block-end:var(--dds-space-12);}
379
- .dds-input__control[type="search"]::-webkit-search-cancel-button {appearance:none;}
383
+ .dds-input__control[type="search"]::-webkit-search-cancel-button,.dds-input__control[type="search"]::-webkit-search-decoration {appearance:none;}
380
384
  .dds-input-group {display:flex;align-items:flex-end;gap:var(--dds-space-8);inline-size:100%;min-inline-size:0;color:var(--dds-color-text-primary);}
381
385
  .dds-input-group > .dds-input {flex:1;min-inline-size:0;}
382
386
  .dds-input-group__start,.dds-input-group__end {display:flex;align-items:center;justify-content:center;flex:none;min-block-size:var(--dds-space-40);color:var(--dds-color-text-secondary);}
@@ -501,6 +505,14 @@
501
505
  .dds-choice-input {flex:1;inline-size:100%;outline:none;}
502
506
  .dds-choice-trigger {cursor:pointer;text-align:start;}
503
507
  .dds-choice-control > .dds-choice-trigger:first-child {inline-size:100%;}
508
+ /* SelectPicker keeps a single line in the field; the popup exposes full labels.
509
+ * Other choice adapters may virtualize fixed rows, so wrapping is opt-in here. */
510
+ .dds-select-picker .dds-choice-control {block-size:var(--dds-space-40);}
511
+ .dds-select-picker .dds-choice-trigger {display:flex;align-items:center;gap:var(--dds-space-8);flex:1;}
512
+ .dds-select-picker .dds-choice-value {flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
513
+ .dds-select-picker .dds-choice-indicator {display:flex;align-items:center;flex:none;color:var(--dds-color-text-secondary);pointer-events:none;}
514
+ .dds-select-picker[data-label-placement="inside"] .dds-choice-control {block-size:calc(var(--dds-space-40) + var(--dds-space-16));}
515
+ .dds-select-picker-content .dds-choice-item {padding-block:var(--dds-space-8);white-space:normal;overflow-wrap:anywhere;}
504
516
  .dds-choice-clear {flex:none;min-inline-size:var(--dds-space-32);min-block-size:var(--dds-space-32);padding:var(--dds-space-4);border:0;border-radius:var(--dds-radius-sm);background:transparent;color:var(--dds-color-text-secondary);cursor:pointer;}
505
517
  .dds-choice-content {box-sizing:border-box;min-inline-size:var(--reference-width);max-inline-size:calc(100vw - var(--dds-space-32));max-block-size:min(320px,var(--available-height,320px));overflow:auto;padding:var(--dds-space-4);background:var(--dds-color-bg-elevated);color:var(--dds-color-text-primary);border:1px solid var(--dds-color-border-default);border-radius:var(--dds-radius-md);box-shadow:var(--dds-elevation-2);font-family:var(--dds-font-family-sans);font-size:var(--dds-typo-body-2-font-size);}
506
518
  .dds-choice-item {box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;min-block-size:var(--dds-space-40);padding-inline:var(--dds-space-12);border-radius:var(--dds-radius-sm);cursor:pointer;outline:none;overflow:hidden;white-space:nowrap;}
@@ -520,7 +532,7 @@
520
532
  .dds-choice[data-label-placement="inside"]:not(:focus-within):not([data-has-value]) .dds-choice-input::placeholder {color:transparent;}
521
533
  .dds-choice[data-label-placement="inside"]:not(:focus-within):not([data-has-value]) .dds-choice-value {visibility:hidden;}
522
534
  .dds-choice[data-disabled] {opacity:.45;}
523
- @media(pointer:coarse){.dds-choice-input,.dds-choice-trigger,.dds-choice-clear {min-block-size:44px;min-inline-size:44px;}}
535
+ @media(pointer:coarse){.dds-select-picker .dds-choice-control {min-block-size:44px;}.dds-choice-input,.dds-choice-trigger,.dds-choice-clear {min-block-size:44px;min-inline-size:44px;}}
524
536
 
525
537
  /* Ark DatePicker interaction with DDS visual tokens. */
526
538
  .dds-date-picker-control {display:flex;align-items:stretch;gap:var(--dds-space-8);}
@@ -2356,3 +2368,388 @@ dialog.dds-dialog::backdrop {
2356
2368
  transition: none;
2357
2369
  }
2358
2370
  }
2371
+
2372
+ /* Optional disclosures: legacy navigation retains its layout. */
2373
+ .dds-console-rail__group[data-collapsible="true"] > ul {
2374
+ padding-inline-start: var(--dds-space-12);
2375
+ }
2376
+ .dds-console-rail__group[data-collapsible="true"] > .dds-console-rail__group-label {
2377
+ padding: 0;
2378
+ }
2379
+ .dds-console-rail__group-toggle {
2380
+ display: flex;
2381
+ align-items: center;
2382
+ justify-content: space-between;
2383
+ gap: var(--dds-space-8);
2384
+ inline-size: 100%;
2385
+ min-block-size: var(--dds-space-40);
2386
+ padding: var(--dds-space-8);
2387
+ border: 0;
2388
+ border-radius: var(--dds-radius-md);
2389
+ background: transparent;
2390
+ color: var(--dds-color-text-secondary);
2391
+ font: inherit;
2392
+ font-size: .75rem;
2393
+ font-weight: 650;
2394
+ letter-spacing: normal;
2395
+ text-align: start;
2396
+ cursor: pointer;
2397
+ }
2398
+ .dds-console-rail__group-toggle[hidden] { display: none; }
2399
+ .dds-console-rail__group-toggle:hover { background: var(--dds-color-bg-subtle); }
2400
+ .dds-console-rail__group-toggle:focus-visible {
2401
+ outline: 2px solid var(--dds-color-border-focus);
2402
+ outline-offset: 2px;
2403
+ }
2404
+ .dds-console-rail__chevron {
2405
+ inline-size: .375rem;
2406
+ block-size: .375rem;
2407
+ border-inline-end: 1.5px solid currentColor;
2408
+ border-block-end: 1.5px solid currentColor;
2409
+ transform: rotate(-45deg);
2410
+ }
2411
+ .dds-console-rail__group-toggle[aria-expanded="true"] .dds-console-rail__chevron {
2412
+ transform: rotate(45deg);
2413
+ }
2414
+ .dds-console-rail__item-content {
2415
+ display: inline-flex;
2416
+ align-items: center;
2417
+ gap: var(--dds-space-8);
2418
+ min-inline-size: 0;
2419
+ }
2420
+ .dds-console-rail__item-content[hidden] { display: none; }
2421
+ .dds-console-rail__item-icon {
2422
+ display: inline-flex;
2423
+ align-items: center;
2424
+ justify-content: center;
2425
+ flex: 0 0 1rem;
2426
+ inline-size: 1rem;
2427
+ block-size: 1rem;
2428
+ }
2429
+ .dds-console-rail__item-icon[hidden] { display: none; }
2430
+ .dds-console-rail__item-icon > svg { inline-size: 100%; block-size: 100%; }
2431
+
2432
+ /* Shared application geometry and type. Framework adapters contain no CSS. */
2433
+ .dds-layout {
2434
+ display: grid;
2435
+ grid-template-columns: 14.5rem minmax(0, 1fr);
2436
+ min-block-size: 100dvh;
2437
+ font-family: var(--dds-font-family-sans);
2438
+ font-size: var(--dds-typo-body-2-font-size);
2439
+ line-height: var(--dds-typo-body-2-line-height);
2440
+ font-weight: var(--dds-typo-body-2-font-weight);
2441
+ color: var(--dds-color-text-primary);
2442
+ background: var(--dds-color-bg-default);
2443
+ }
2444
+ .dds-layout[hidden] {
2445
+ display: none;
2446
+ }
2447
+ .dds-layout *,
2448
+ .dds-layout *::before,
2449
+ .dds-layout *::after {
2450
+ box-sizing: border-box;
2451
+ }
2452
+ .dds-layout[data-navigation-position="top"] {
2453
+ grid-template-columns: minmax(0, 1fr);
2454
+ grid-template-rows: auto minmax(0, 1fr);
2455
+ }
2456
+ .dds-layout .dds-layout__navigation {
2457
+ padding: var(--dds-space-20) var(--dds-space-12);
2458
+ }
2459
+ .dds-layout[data-navigation-position="top"] .dds-layout__navigation {
2460
+ position: relative;
2461
+ display: flex;
2462
+ align-items: center;
2463
+ flex-wrap: wrap;
2464
+ flex-direction: row;
2465
+ gap: var(--dds-space-16);
2466
+ block-size: auto;
2467
+ min-block-size: 3.5rem;
2468
+ padding: var(--dds-space-8) var(--dds-space-32);
2469
+ overflow: visible;
2470
+ border-inline-end: 0;
2471
+ border-block-end: 1px solid var(--dds-color-border-default);
2472
+ }
2473
+ .dds-layout[data-navigation-position="top"] .dds-layout__navigation[hidden] {
2474
+ display: none;
2475
+ }
2476
+ .dds-layout .dds-layout__main {
2477
+ min-inline-size: 0;
2478
+ padding: var(--dds-space-32);
2479
+ }
2480
+ .dds-layout__content {
2481
+ display: flex;
2482
+ flex-direction: column;
2483
+ gap: var(--dds-space-32);
2484
+ inline-size: 100%;
2485
+ max-inline-size: 68.75rem;
2486
+ margin-inline: auto;
2487
+ min-inline-size: 0;
2488
+ overflow-wrap: anywhere;
2489
+ }
2490
+ .dds-layout__content[hidden] {
2491
+ display: none;
2492
+ }
2493
+ .dds-layout__content[data-width="form"] {
2494
+ max-inline-size: 56.25rem;
2495
+ }
2496
+ .dds-layout__content[data-width="settings"] {
2497
+ max-inline-size: 50rem;
2498
+ }
2499
+ .dds-layout__content[data-width="full"] {
2500
+ max-inline-size: none;
2501
+ }
2502
+ .dds-layout h1 {
2503
+ font-size: var(--dds-typo-title-1-font-size);
2504
+ line-height: var(--dds-typo-title-1-line-height);
2505
+ font-weight: var(--dds-typo-title-1-font-weight);
2506
+ }
2507
+ .dds-layout h2 {
2508
+ font-size: var(--dds-typo-title-2-font-size);
2509
+ line-height: var(--dds-typo-title-2-line-height);
2510
+ font-weight: var(--dds-typo-title-2-font-weight);
2511
+ }
2512
+ .dds-layout h3 {
2513
+ font-size: var(--dds-typo-title-3-font-size);
2514
+ line-height: var(--dds-typo-title-3-line-height);
2515
+ font-weight: var(--dds-typo-title-3-font-weight);
2516
+ }
2517
+ .dds-layout h1,
2518
+ .dds-layout h2,
2519
+ .dds-layout h3,
2520
+ .dds-layout p {
2521
+ margin: 0;
2522
+ }
2523
+ .dds-layout__header,
2524
+ .dds-layout__section {
2525
+ display: grid;
2526
+ gap: var(--dds-space-16);
2527
+ }
2528
+ .dds-layout__header[hidden],
2529
+ .dds-layout__section[hidden] {
2530
+ display: none;
2531
+ }
2532
+ .dds-layout__panel {
2533
+ padding: var(--dds-space-24);
2534
+ border: 1px solid var(--dds-color-border-default);
2535
+ border-radius: var(--dds-radius-md);
2536
+ background: var(--dds-color-bg-elevated);
2537
+ }
2538
+ .dds-layout__fields {
2539
+ display: grid;
2540
+ gap: var(--dds-space-16);
2541
+ }
2542
+ .dds-layout__fields[hidden] {
2543
+ display: none;
2544
+ }
2545
+ .dds-layout__reading {
2546
+ font-size: var(--dds-typo-body-1-font-size);
2547
+ line-height: var(--dds-typo-body-1-line-height);
2548
+ font-weight: var(--dds-typo-body-1-font-weight);
2549
+ }
2550
+ .dds-layout__caption {
2551
+ font-size: var(--dds-typo-caption-font-size);
2552
+ line-height: var(--dds-typo-caption-line-height);
2553
+ font-weight: var(--dds-typo-caption-font-weight);
2554
+ color: var(--dds-color-text-muted);
2555
+ }
2556
+ .dds-layout .dds-console-rail__group-label,
2557
+ .dds-layout .dds-console-rail__group-toggle {
2558
+ font-size: var(--dds-typo-caption-font-size);
2559
+ line-height: var(--dds-typo-caption-line-height);
2560
+ font-weight: 600;
2561
+ }
2562
+ .dds-layout .dds-console-rail__item {
2563
+ min-block-size: var(--dds-space-40);
2564
+ font-size: var(--dds-typo-body-2-font-size);
2565
+ line-height: var(--dds-typo-body-2-line-height);
2566
+ }
2567
+ .dds-layout .dds-console-page-header {
2568
+ margin: 0;
2569
+ }
2570
+ .dds-layout__footer {
2571
+ padding-block-start: var(--dds-space-24);
2572
+ border-block-start: 1px solid var(--dds-color-border-default);
2573
+ }
2574
+ @media (max-width: 56.25rem) {
2575
+ .dds-layout {
2576
+ grid-template-columns: minmax(0, 1fr);
2577
+ }
2578
+ .dds-layout .dds-layout__main {
2579
+ padding: 4rem var(--dds-space-16) var(--dds-space-16);
2580
+ }
2581
+ .dds-layout .dds-layout__navigation,
2582
+ .dds-layout[data-navigation-position="top"] .dds-layout__navigation {
2583
+ position: fixed;
2584
+ inset-block: 0;
2585
+ inset-inline-start: 0;
2586
+ z-index: 60;
2587
+ display: flex;
2588
+ flex-direction: column;
2589
+ align-items: stretch;
2590
+ inline-size: min(20rem, 85vw);
2591
+ block-size: 100dvh;
2592
+ padding: 4rem var(--dds-space-12) var(--dds-space-20);
2593
+ overflow-y: auto;
2594
+ visibility: hidden;
2595
+ pointer-events: none;
2596
+ transform: translateX(-105%);
2597
+ border-inline-end: 1px solid var(--dds-color-border-default);
2598
+ }
2599
+ .dds-layout .dds-layout__navigation[hidden] {
2600
+ display: none;
2601
+ }
2602
+ .dds-layout .dds-layout__navigation[data-open="true"] {
2603
+ visibility: visible;
2604
+ pointer-events: auto;
2605
+ transform: none;
2606
+ }
2607
+ [dir="rtl"] .dds-layout .dds-layout__navigation:not([data-open="true"]) {
2608
+ transform: translateX(105%);
2609
+ }
2610
+ .dds-layout__panel {
2611
+ padding: var(--dds-space-16);
2612
+ }
2613
+ .dds-layout .dds-console-rail__item,
2614
+ .dds-layout .dds-console-rail__group-toggle {
2615
+ min-block-size: 2.75rem;
2616
+ }
2617
+ }
2618
+
2619
+ .dds-layout .dds-console-rail__scrim {
2620
+ border: 0;
2621
+ padding: 0;
2622
+ }
2623
+
2624
+ .dds-layout .dds-field-label {
2625
+ font-size: var(--dds-typo-label-font-size);
2626
+ line-height: var(--dds-typo-label-line-height);
2627
+ font-weight: var(--dds-typo-label-font-weight);
2628
+ }
2629
+
2630
+ .dds-left-nav {
2631
+ font-family: var(--dds-font-family-sans);
2632
+ font-size: var(--dds-typo-body-2-font-size);
2633
+ line-height: var(--dds-typo-body-2-line-height);
2634
+ color: var(--dds-color-text-primary);
2635
+ }
2636
+ .dds-left-nav .dds-console-rail__group-label,
2637
+ .dds-left-nav .dds-console-rail__group-toggle {
2638
+ font-size: var(--dds-typo-caption-font-size);
2639
+ line-height: var(--dds-typo-caption-line-height);
2640
+ font-weight: 600;
2641
+ }
2642
+ @media (max-width: 56.25rem) {
2643
+ .dds-layout[data-navigation-position="top"] {
2644
+ grid-template-rows: minmax(0, 1fr);
2645
+ }
2646
+ .dds-left-nav .dds-console-rail__item,
2647
+ .dds-left-nav .dds-console-rail__group-toggle {
2648
+ min-block-size: 44px;
2649
+ }
2650
+ }
2651
+
2652
+ .dds-top-nav {
2653
+ display: flex;
2654
+ align-items: center;
2655
+ flex-wrap: wrap;
2656
+ gap: var(--dds-space-8);
2657
+ font-family: var(--dds-font-family-sans);
2658
+ font-size: var(--dds-typo-body-2-font-size);
2659
+ line-height: var(--dds-typo-body-2-line-height);
2660
+ }
2661
+ .dds-top-nav[hidden] {
2662
+ display: none;
2663
+ }
2664
+ .dds-top-nav__group {
2665
+ position: relative;
2666
+ }
2667
+ .dds-top-nav__trigger,
2668
+ .dds-top-nav__item {
2669
+ display: flex;
2670
+ align-items: center;
2671
+ gap: var(--dds-space-8);
2672
+ min-block-size: var(--dds-space-40);
2673
+ padding: var(--dds-space-8) var(--dds-space-12);
2674
+ border-radius: var(--dds-radius-md);
2675
+ color: var(--dds-color-text-secondary);
2676
+ font-weight: 500;
2677
+ text-decoration: none;
2678
+ cursor: pointer;
2679
+ }
2680
+ .dds-top-nav__trigger[hidden],
2681
+ .dds-top-nav__item[hidden] {
2682
+ display: none;
2683
+ }
2684
+ .dds-top-nav__trigger {
2685
+ list-style: none;
2686
+ }
2687
+ .dds-top-nav__trigger::-webkit-details-marker {
2688
+ display: none;
2689
+ }
2690
+ .dds-top-nav__trigger::after {
2691
+ content: "";
2692
+ inline-size: 0.375rem;
2693
+ block-size: 0.375rem;
2694
+ border-inline-end: 1.5px solid currentColor;
2695
+ border-block-end: 1.5px solid currentColor;
2696
+ transform: rotate(45deg);
2697
+ margin-inline-start: var(--dds-space-8);
2698
+ }
2699
+ .dds-top-nav__trigger:hover,
2700
+ .dds-top-nav__item:hover {
2701
+ background: var(--dds-color-bg-subtle);
2702
+ }
2703
+ .dds-top-nav__trigger:focus-visible,
2704
+ .dds-top-nav__item:focus-visible {
2705
+ outline: 2px solid var(--dds-color-border-focus);
2706
+ outline-offset: 2px;
2707
+ }
2708
+ .dds-top-nav__item[aria-current="page"] {
2709
+ color: var(--dds-color-text-brand);
2710
+ background: var(--dds-color-bg-brand-subtle);
2711
+ font-weight: 600;
2712
+ }
2713
+ .dds-top-nav__items {
2714
+ position: absolute;
2715
+ inset-inline-start: 0;
2716
+ z-index: 40;
2717
+ min-inline-size: 12rem;
2718
+ max-inline-size: min(24rem, 85vw);
2719
+ padding: var(--dds-space-8);
2720
+ margin: 0;
2721
+ list-style: none;
2722
+ border: 1px solid var(--dds-color-border-default);
2723
+ border-radius: var(--dds-radius-md);
2724
+ background: var(--dds-color-bg-elevated);
2725
+ overflow-wrap: anywhere;
2726
+ }
2727
+ .dds-top-nav__item-icon {
2728
+ display: inline-flex;
2729
+ flex: 0 0 1rem;
2730
+ inline-size: 1rem;
2731
+ block-size: 1rem;
2732
+ }
2733
+ .dds-top-nav__item-icon[hidden] {
2734
+ display: none;
2735
+ }
2736
+ .dds-top-nav__item-icon > svg {
2737
+ inline-size: 100%;
2738
+ block-size: 100%;
2739
+ }
2740
+ @media (max-width: 56.25rem) {
2741
+ .dds-top-nav {
2742
+ flex-direction: column;
2743
+ align-items: stretch;
2744
+ }
2745
+ .dds-top-nav__items {
2746
+ position: static;
2747
+ max-inline-size: none;
2748
+ border: 0;
2749
+ padding-inline-start: var(--dds-space-16);
2750
+ }
2751
+ .dds-top-nav__trigger,
2752
+ .dds-top-nav__item {
2753
+ min-block-size: 2.75rem;
2754
+ }
2755
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devslab/dds-css",
3
- "version": "0.28.0",
3
+ "version": "0.29.1",
4
4
  "description": "DDS CSS component layer — class-based, framework-neutral, semantic-token-only (spec §4.3 v1 inventory, 20 components)",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE",