baseline-foundry 0.1.4 → 0.1.6
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.
- package/README.md +17 -9
- package/config/experiments/ibm-plex-engine-smoke.json +1 -1
- package/config/experiments/ubuntu-engine-smoke.json +1 -1
- package/config/foundation-theme.json +1 -1
- package/config/tiers/app.json +6 -6
- package/config/tiers/documentation.json +2 -2
- package/config/tiers/editorial.json +1 -1
- package/config/tiers/os.json +6 -6
- package/dist/baseline-grid-overlay.js +2 -2
- package/dist/build.js +4 -4
- package/dist/code-snippet.js +1 -1
- package/dist/css-app-tier.js +16 -5
- package/dist/css-components/article-pagination.js +9 -8
- package/dist/css-components/button-actions.js +24 -4
- package/dist/css-components/cards-options.js +8 -8
- package/dist/css-components/chip-badge-status.d.ts +0 -3
- package/dist/css-components/chip-badge-status.js +57 -10
- package/dist/css-components/content-card.d.ts +7 -7
- package/dist/css-components/content-card.js +17 -16
- package/dist/css-components/control-row.d.ts +1 -1
- package/dist/css-components/control-row.js +1 -1
- package/dist/css-components/document-navigation.js +66 -29
- package/dist/css-components/editorial-content.js +1 -1
- package/dist/css-components/interactive-feedback.js +50 -28
- package/dist/css-components/interactive-tables.js +13 -8
- package/dist/css-components/legacy-navigation.d.ts +0 -1
- package/dist/css-components/legacy-navigation.js +108 -32
- package/dist/css-components/linked-logo-site-layout.d.ts +3 -3
- package/dist/css-components/linked-logo-site-layout.js +17 -20
- package/dist/css-components/list-tree.js +21 -19
- package/dist/css-components/list.js +9 -7
- package/dist/css-components/logo-media.d.ts +6 -6
- package/dist/css-components/logo-media.js +38 -27
- package/dist/css-components/navigation-layout.js +6 -8
- package/dist/css-components/panel.js +12 -12
- package/dist/css-components/search-box-and-filter.d.ts +0 -1
- package/dist/css-components/search-box-and-filter.js +18 -19
- package/dist/css-components/sites-editorial-ports.d.ts +3 -4
- package/dist/css-components/sites-editorial-ports.js +61 -29
- package/dist/css-components/sites-foundation.js +15 -19
- package/dist/css-components/sites-rich-lists.d.ts +5 -5
- package/dist/css-components/sites-rich-lists.js +26 -36
- package/dist/css-components/static-content-ports.d.ts +3 -3
- package/dist/css-components/static-content-ports.js +51 -37
- package/dist/css-components/tab-section.d.ts +3 -3
- package/dist/css-components/tab-section.js +34 -26
- package/dist/css-components/table.js +4 -7
- package/dist/css-components/tabs-choice-breadcrumbs.js +25 -21
- package/dist/css-components/tiered-list-equal-height-row.js +10 -10
- package/dist/css-components.js +243 -124
- package/dist/css-grid.d.ts +1 -1
- package/dist/css-grid.js +18 -8
- package/dist/css.js +94 -18
- package/dist/experiments/ibm-plex-engine-smoke/styles.css +1005 -563
- package/dist/experiments/ibm-plex-engine-smoke/surfaces.json +2 -2
- package/dist/experiments/ibm-plex-engine-smoke/tokens.json +1 -1
- package/dist/in-page-navigation.js +1 -1
- package/dist/presets/app-tier/styles.css +1046 -593
- package/dist/presets/app-tier/surfaces.json +17 -17
- package/dist/presets/app-tier/tokens.json +7 -7
- package/dist/presets/prose/styles.css +1036 -587
- package/dist/presets/prose/surfaces.json +17 -17
- package/dist/presets/prose/tokens.json +1 -1
- package/dist/resizable-aside.js +12 -4
- package/dist/styles.css +1036 -587
- package/dist/surfaces.json +17 -17
- package/dist/tiers/app/styles.css +1046 -593
- package/dist/tiers/app/surfaces.json +17 -17
- package/dist/tiers/app/tokens.json +7 -7
- package/dist/tiers/documentation/styles.css +1037 -588
- package/dist/tiers/documentation/surfaces.json +17 -17
- package/dist/tiers/documentation/tokens.json +2 -2
- package/dist/tiers/editorial/styles.css +1036 -587
- package/dist/tiers/editorial/surfaces.json +17 -17
- package/dist/tiers/editorial/tokens.json +1 -1
- package/dist/tiers/os/styles.css +1042 -593
- package/dist/tiers/os/surfaces.json +17 -17
- package/dist/tiers/os/tokens.json +7 -7
- package/dist/tokens.json +1 -1
- package/dist/types.d.ts +1 -1
- package/docs/publishing.md +1 -1
- package/package.json +2 -2
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
* content paired with one responsive image or video slot.
|
|
9
9
|
*
|
|
10
10
|
* Vanilla → BF spacing mapping:
|
|
11
|
-
* - horizontal item
|
|
12
|
-
* -
|
|
13
|
-
* -
|
|
14
|
-
* - the 620px/1036px page breakpoints → 38.75rem/64.75rem container
|
|
11
|
+
* - horizontal item 0.5rem/1rem block padding → `space-1`/`space-2`;
|
|
12
|
+
* - 1rem grid gutters → `grid-gap-inline`;
|
|
13
|
+
* - the 38.75rem/64.75rem page breakpoints → 38.75rem/64.75rem container
|
|
15
14
|
* thresholds for descendants. Text roles keep their own metric-derived
|
|
16
|
-
* margins and baseline compensation in every tier.
|
|
15
|
+
* margins and baseline compensation in every tier. Parent stacks own every
|
|
16
|
+
* boundary outside the pattern.
|
|
17
17
|
*/
|
|
18
18
|
export function sitesRichListsCss() {
|
|
19
19
|
return `/* ------------------------------------------------------------------ */
|
|
@@ -24,19 +24,13 @@ export function sitesRichListsCss() {
|
|
|
24
24
|
container-name: bf-rich-list;
|
|
25
25
|
container-type: inline-size;
|
|
26
26
|
min-inline-size: 0;
|
|
27
|
-
padding-block-end: calc(var(--bf-section-space) / 2);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
:where(.bf-theme) :where(.bf-rich-list.is-shallow) {
|
|
31
|
-
padding-block-end: var(--bf-section-space-shallow);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
:where(.bf-theme) :where(.bf-rich-list.is-deep) {
|
|
35
|
-
padding-block-end: calc(var(--bf-section-space-deep) / 2);
|
|
36
27
|
}
|
|
37
28
|
|
|
38
29
|
:where(.bf-theme) :where(.bf-rich-list-layout) {
|
|
30
|
+
--bf-stack-space: var(--bf-space-1);
|
|
31
|
+
align-content: start;
|
|
39
32
|
display: grid;
|
|
33
|
+
gap: var(--bf-stack-space);
|
|
40
34
|
grid-template-columns: minmax(0, 1fr);
|
|
41
35
|
min-inline-size: 0;
|
|
42
36
|
}
|
|
@@ -51,14 +45,11 @@ export function sitesRichListsCss() {
|
|
|
51
45
|
overflow-wrap: anywhere;
|
|
52
46
|
}
|
|
53
47
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
:where(.bf-theme) :where(.bf-rich-list.is-deep) {
|
|
60
|
-
padding-block-end: var(--bf-section-space-deep);
|
|
61
|
-
}
|
|
48
|
+
:where(.bf-theme) :where(.bf-rich-list-support, .bf-rich-list-content) {
|
|
49
|
+
--bf-stack-space: var(--bf-space-1);
|
|
50
|
+
align-content: start;
|
|
51
|
+
display: grid;
|
|
52
|
+
gap: var(--bf-stack-space);
|
|
62
53
|
}
|
|
63
54
|
|
|
64
55
|
/* ------------------------------------------------------------------ */
|
|
@@ -85,7 +76,7 @@ export function sitesRichListsCss() {
|
|
|
85
76
|
/* A full-width ratio inside a fluid Sites rail otherwise leaves the next
|
|
86
77
|
heading on a fractional pixel. The visual alone absorbs the trailing
|
|
87
78
|
compensation; semantic children retain their own margins unchanged. */
|
|
88
|
-
@supports (block-size: calc-size(auto, round(up, size,
|
|
79
|
+
@supports (block-size: calc-size(auto, round(up, size, 0.0625rem))) {
|
|
89
80
|
:where(.bf-theme) :where(.bf-rich-list-visual > .bf-aspect) {
|
|
90
81
|
block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
|
|
91
82
|
}
|
|
@@ -124,8 +115,12 @@ export function sitesRichListsCss() {
|
|
|
124
115
|
|
|
125
116
|
/* Prefixes are logical here even though the shared list predates BF's
|
|
126
117
|
logical-property rule. This keeps ticks, bullets and numbers RTL-safe. */
|
|
118
|
+
:where(.bf-theme) :where(.bf-rich-list-list:has(> .bf-list-item:is(.is-ticked, .is-crossed)), .bf-rich-list-list.is-bulleted, ol.bf-rich-list-list) {
|
|
119
|
+
padding-inline-start: var(--bf-leading-mark-group-inset);
|
|
120
|
+
}
|
|
121
|
+
|
|
127
122
|
:where(.bf-theme) :where(.bf-rich-list-list) > .bf-list-item:is(.is-ticked, .is-crossed) {
|
|
128
|
-
padding-inline-start:
|
|
123
|
+
padding-inline-start: var(--bf-leading-mark-offset);
|
|
129
124
|
}
|
|
130
125
|
|
|
131
126
|
:where(.bf-theme) :where(.bf-rich-list-list) > .bf-list-item:is(.is-ticked, .is-crossed)::before {
|
|
@@ -135,7 +130,7 @@ export function sitesRichListsCss() {
|
|
|
135
130
|
}
|
|
136
131
|
|
|
137
132
|
:where(.bf-theme) :where(.bf-rich-list-list.is-bulleted) > :where(.bf-list-item) {
|
|
138
|
-
padding-inline-start:
|
|
133
|
+
padding-inline-start: var(--bf-leading-mark-offset);
|
|
139
134
|
}
|
|
140
135
|
|
|
141
136
|
:where(.bf-theme) :where(.bf-rich-list-list.is-bulleted) > :where(.bf-list-item)::before {
|
|
@@ -154,7 +149,7 @@ export function sitesRichListsCss() {
|
|
|
154
149
|
|
|
155
150
|
:where(.bf-theme) :where(ol.bf-rich-list-list) > :where(.bf-list-item) {
|
|
156
151
|
counter-increment: bf-rich-horizontal-counter;
|
|
157
|
-
padding-inline-start:
|
|
152
|
+
padding-inline-start: var(--bf-leading-mark-offset);
|
|
158
153
|
}
|
|
159
154
|
|
|
160
155
|
:where(.bf-theme) :where(ol.bf-rich-list-list) > :where(.bf-list-item)::before {
|
|
@@ -201,7 +196,7 @@ export function sitesRichListsCss() {
|
|
|
201
196
|
}
|
|
202
197
|
}
|
|
203
198
|
|
|
204
|
-
@container bf-rich-list (width >=
|
|
199
|
+
@container bf-rich-list (width >= 45rem) {
|
|
205
200
|
:where(.bf-theme) :where(.bf-rich-list.is-horizontal.is-50-50) > :where(.bf-rich-list-layout) {
|
|
206
201
|
column-gap: var(--bf-grid-gap-inline);
|
|
207
202
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
@@ -215,7 +210,7 @@ export function sitesRichListsCss() {
|
|
|
215
210
|
grid-column: 2;
|
|
216
211
|
}
|
|
217
212
|
|
|
218
|
-
:where(.bf-theme) :where(.bf-rich-list.is-horizontal) > :where(.bf-rich-list-layout) > :where(.bf-rich-list-cta) {
|
|
213
|
+
:where(.bf-theme) :where(.bf-rich-list.is-horizontal.is-50-50) > :where(.bf-rich-list-layout) > :where(.bf-rich-list-cta) {
|
|
219
214
|
grid-column: 2;
|
|
220
215
|
}
|
|
221
216
|
}
|
|
@@ -230,7 +225,6 @@ export function sitesRichListsCss() {
|
|
|
230
225
|
|
|
231
226
|
:where(.bf-theme) :where(.bf-rich-list.is-vertical) :where(.bf-rich-list-media) {
|
|
232
227
|
container-type: inline-size;
|
|
233
|
-
padding-block-end: var(--bf-section-space-shallow);
|
|
234
228
|
}
|
|
235
229
|
|
|
236
230
|
:where(.bf-theme) :where(.bf-rich-list.is-vertical.is-flipped) :where(.bf-rich-list-media) {
|
|
@@ -249,7 +243,7 @@ export function sitesRichListsCss() {
|
|
|
249
243
|
/* The media object deliberately stretches across fluid 1/2 and 2/3 ratios.
|
|
250
244
|
Snap that resulting block, rather than resetting content spacing, so each
|
|
251
245
|
tier's baseline survives both portrait and landscape allocations. */
|
|
252
|
-
@supports (block-size: calc-size(auto, round(up, size,
|
|
246
|
+
@supports (block-size: calc-size(auto, round(up, size, 0.0625rem))) {
|
|
253
247
|
:where(.bf-theme) :where(.bf-rich-list-media-frame) {
|
|
254
248
|
block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
|
|
255
249
|
}
|
|
@@ -292,11 +286,7 @@ export function sitesRichListsCss() {
|
|
|
292
286
|
/* Auto height has no shallow media wrapper in Vanilla. At narrow widths it
|
|
293
287
|
remains a normal 3:2 frame; at the wide split it stretches with the content
|
|
294
288
|
rail, clamped between the equivalent 16:9 and 2:3 heights. */
|
|
295
|
-
|
|
296
|
-
padding-block-end: 0;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
@container bf-rich-list (width >= 64.75rem) {
|
|
289
|
+
@container bf-rich-list (width >= 45rem) {
|
|
300
290
|
:where(.bf-theme) :where(.bf-rich-list.is-vertical) > :where(.bf-rich-list-layout) {
|
|
301
291
|
align-items: stretch;
|
|
302
292
|
column-gap: var(--bf-grid-gap-inline);
|
|
@@ -345,7 +335,7 @@ export function sitesRichListsCss() {
|
|
|
345
335
|
min-block-size: 56.25cqi;
|
|
346
336
|
}
|
|
347
337
|
|
|
348
|
-
@supports (min-block-size: round(up,
|
|
338
|
+
@supports (min-block-size: round(up, 0.0625rem, 0.0625rem)) {
|
|
349
339
|
:where(.bf-theme) :where(.bf-rich-list-media.is-auto-height) :where(.bf-rich-list-media-frame) {
|
|
350
340
|
max-block-size: round(down, 150cqi, var(--bf-baseline));
|
|
351
341
|
min-block-size: round(up, 56.25cqi, var(--bf-baseline));
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Static Vanilla parity ports: data spotlight and divided section. The
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* allocated inline size.
|
|
3
|
+
* Components use an intrinsic medium threshold for their density changes and
|
|
4
|
+
* the shared 45rem readable-split threshold for default balanced content,
|
|
5
|
+
* while responding to their allocated inline size.
|
|
6
6
|
*
|
|
7
7
|
* Vanilla → BF token mapping:
|
|
8
8
|
* - `$spv--strip-shallow` (1.5rem) → `--bf-section-space-shallow`.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Static Vanilla parity ports: data spotlight and divided section. The
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* allocated inline size.
|
|
3
|
+
* Components use an intrinsic medium threshold for their density changes and
|
|
4
|
+
* the shared 45rem readable-split threshold for default balanced content,
|
|
5
|
+
* while responding to their allocated inline size.
|
|
6
6
|
*
|
|
7
7
|
* Vanilla → BF token mapping:
|
|
8
8
|
* - `$spv--strip-shallow` (1.5rem) → `--bf-section-space-shallow`.
|
|
@@ -15,16 +15,15 @@ export function staticContentPortsCss() {
|
|
|
15
15
|
return `/* ------------------------------------------------------------------ */
|
|
16
16
|
/* Static content ports — Vanilla data spotlight and divided section. */
|
|
17
17
|
/* Their children retain role-owned rhythm; these layout */
|
|
18
|
-
/* wrappers add only structural columns, rules, and
|
|
18
|
+
/* wrappers add only structural columns, rules, and internal gaps. */
|
|
19
19
|
/* ------------------------------------------------------------------ */
|
|
20
20
|
|
|
21
21
|
/* Data spotlight: Vanilla's equal-height wrap becomes an intrinsic grid.
|
|
22
22
|
Each item begins with a public highlighted rule using the shared emphasis
|
|
23
|
-
thickness.
|
|
24
|
-
shallow inter-row rhythm when the pattern narrows. */
|
|
23
|
+
thickness. The items container owns every inter-row gap. */
|
|
25
24
|
:where(.bf-theme) :where(.bf-data-spotlight) {
|
|
26
25
|
container-type: inline-size;
|
|
27
|
-
margin
|
|
26
|
+
margin: 0;
|
|
28
27
|
min-inline-size: 0;
|
|
29
28
|
}
|
|
30
29
|
|
|
@@ -37,15 +36,13 @@ export function staticContentPortsCss() {
|
|
|
37
36
|
display: grid;
|
|
38
37
|
grid-template-columns: minmax(0, 1fr);
|
|
39
38
|
min-inline-size: 0;
|
|
39
|
+
row-gap: var(--bf-section-space-shallow);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
:where(.bf-theme) :where(.bf-data-spotlight-item) {
|
|
43
43
|
min-inline-size: 0;
|
|
44
44
|
overflow-wrap: anywhere;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
:where(.bf-theme) :where(.bf-data-spotlight-item:not(:last-child)) {
|
|
48
|
-
padding-block-end: var(--bf-section-space-shallow);
|
|
45
|
+
padding: 0;
|
|
49
46
|
}
|
|
50
47
|
|
|
51
48
|
:where(.bf-theme) :where(.bf-data-spotlight-stat) {
|
|
@@ -98,6 +95,14 @@ export function staticContentPortsCss() {
|
|
|
98
95
|
@container (width >= 38.75rem) {
|
|
99
96
|
:where(.bf-theme) :where(.bf-data-spotlight-items) {
|
|
100
97
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
98
|
+
row-gap: var(--bf-space-1);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
:where(.bf-theme) :where(.bf-data-spotlight-items)::after {
|
|
102
|
+
block-size: calc(var(--bf-section-space-shallow) - (var(--bf-space-1) * 2));
|
|
103
|
+
content: "";
|
|
104
|
+
grid-column: 1 / -1;
|
|
105
|
+
grid-row: 6;
|
|
101
106
|
}
|
|
102
107
|
|
|
103
108
|
:where(.bf-theme) :where(.bf-data-spotlight-header, .bf-data-spotlight-item) {
|
|
@@ -106,10 +111,6 @@ export function staticContentPortsCss() {
|
|
|
106
111
|
grid-template-rows: subgrid;
|
|
107
112
|
}
|
|
108
113
|
|
|
109
|
-
:where(.bf-theme) :where(.bf-data-spotlight-item) {
|
|
110
|
-
padding-block-end: 0;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
114
|
:where(.bf-theme) :where(.bf-data-spotlight.is-three-blocks) :where(.bf-data-spotlight-header) {
|
|
114
115
|
block-size: 0;
|
|
115
116
|
overflow: visible;
|
|
@@ -117,7 +118,13 @@ export function staticContentPortsCss() {
|
|
|
117
118
|
|
|
118
119
|
:where(.bf-theme) :where(.bf-data-spotlight.is-three-blocks) :where(.bf-data-spotlight-item:first-of-type),
|
|
119
120
|
:where(.bf-theme) :where(.bf-data-spotlight.is-four-blocks) :where(.bf-data-spotlight-item:nth-child(-n + 2)) {
|
|
120
|
-
|
|
121
|
+
grid-row: span 5;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
:where(.bf-theme) :where(.bf-data-spotlight.is-two-blocks) :where(.bf-data-spotlight-item:nth-of-type(2)),
|
|
125
|
+
:where(.bf-theme) :where(.bf-data-spotlight.is-three-blocks) :where(.bf-data-spotlight-item:nth-of-type(n + 2)),
|
|
126
|
+
:where(.bf-theme) :where(.bf-data-spotlight.is-four-blocks) :where(.bf-data-spotlight-item:nth-of-type(n + 3)) {
|
|
127
|
+
grid-row: 7 / span 5;
|
|
121
128
|
}
|
|
122
129
|
}
|
|
123
130
|
|
|
@@ -130,15 +137,18 @@ export function staticContentPortsCss() {
|
|
|
130
137
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
131
138
|
}
|
|
132
139
|
|
|
140
|
+
:where(.bf-theme) :where(.bf-data-spotlight-items)::after {
|
|
141
|
+
content: none;
|
|
142
|
+
}
|
|
143
|
+
|
|
133
144
|
:where(.bf-theme) :where(.bf-data-spotlight.is-two-blocks) :where(.bf-data-spotlight-header) {
|
|
134
145
|
block-size: 0;
|
|
135
146
|
grid-column: span 2;
|
|
136
147
|
overflow: visible;
|
|
137
148
|
}
|
|
138
149
|
|
|
139
|
-
:where(.bf-theme) :where(.bf-data-spotlight
|
|
140
|
-
|
|
141
|
-
padding-block-end: 0;
|
|
150
|
+
:where(.bf-theme) :where(.bf-data-spotlight-item) {
|
|
151
|
+
grid-row: span 5;
|
|
142
152
|
}
|
|
143
153
|
}
|
|
144
154
|
|
|
@@ -147,7 +157,7 @@ export function staticContentPortsCss() {
|
|
|
147
157
|
headings, copy, and content items keep their own metric-derived rhythm. */
|
|
148
158
|
:where(.bf-theme) :where(.bf-divided-section) {
|
|
149
159
|
container-type: inline-size;
|
|
150
|
-
margin
|
|
160
|
+
margin: 0;
|
|
151
161
|
min-inline-size: 0;
|
|
152
162
|
}
|
|
153
163
|
|
|
@@ -166,37 +176,41 @@ export function staticContentPortsCss() {
|
|
|
166
176
|
}
|
|
167
177
|
|
|
168
178
|
:where(.bf-theme) :where(.bf-divided-section-list) {
|
|
169
|
-
|
|
170
|
-
|
|
179
|
+
--bf-divided-section-rule-to-content: calc(0.5rem - var(--bf-border-width));
|
|
180
|
+
--bf-stack-space: 1.5rem;
|
|
171
181
|
list-style: none;
|
|
172
182
|
margin: 0;
|
|
173
183
|
padding: 0;
|
|
174
184
|
}
|
|
175
185
|
|
|
186
|
+
/* Preserve the pre-0.1.5 list markup; canonical composition also carries
|
|
187
|
+
bf-stack so the container remains the explicit owner of item spacing. */
|
|
188
|
+
:where(.bf-theme) :where(.bf-divided-section-list:not(.bf-stack)) {
|
|
189
|
+
align-content: start;
|
|
190
|
+
display: grid;
|
|
191
|
+
gap: var(--bf-stack-space);
|
|
192
|
+
}
|
|
193
|
+
|
|
176
194
|
:where(.bf-theme) :where(.bf-divided-section-item) {
|
|
177
195
|
align-content: start;
|
|
178
196
|
display: grid;
|
|
197
|
+
margin: 0;
|
|
179
198
|
min-inline-size: 0;
|
|
180
199
|
overflow-wrap: anywhere;
|
|
200
|
+
padding: 0;
|
|
201
|
+
position: relative;
|
|
181
202
|
}
|
|
182
203
|
|
|
183
|
-
:where(.bf-theme) :where(.bf-divided-section-item
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
:
|
|
188
|
-
|
|
189
|
-
|
|
204
|
+
:where(.bf-theme) :where(.bf-divided-section-item + .bf-divided-section-item)::before {
|
|
205
|
+
background: var(--bf-color-border-low-contrast);
|
|
206
|
+
block-size: var(--bf-border-width);
|
|
207
|
+
content: "";
|
|
208
|
+
inset-block-start: calc((var(--bf-divided-section-rule-to-content) + var(--bf-border-width)) * -1);
|
|
209
|
+
inset-inline: 0;
|
|
210
|
+
position: absolute;
|
|
190
211
|
}
|
|
191
212
|
|
|
192
|
-
@container (width >=
|
|
193
|
-
:where(.bf-theme) :where(.bf-divided-section.is-split-medium) :where(.bf-divided-section-layout) {
|
|
194
|
-
column-gap: var(--bf-grid-gap-inline);
|
|
195
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
@container (width >= 64.75rem) {
|
|
213
|
+
@container (width >= 45rem) {
|
|
200
214
|
:where(.bf-theme) :where(.bf-divided-section) :where(.bf-divided-section-layout) {
|
|
201
215
|
column-gap: var(--bf-grid-gap-inline);
|
|
202
216
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
* divided-section and basic-section remain independent BF components.
|
|
8
8
|
*
|
|
9
9
|
* Vanilla → BF mapping:
|
|
10
|
-
* -
|
|
11
|
-
* -
|
|
10
|
+
* - 45rem readable split switch → the 45rem descendant container query.
|
|
11
|
+
* - section boundaries → the parent stack selected by the composition.
|
|
12
12
|
* - the intermediate p-section--shallow before a separate tab rail →
|
|
13
|
-
*
|
|
13
|
+
* a shallow gap owned by the tab-section body.
|
|
14
14
|
* - 8-column 4/4 and 2/6 spans → intrinsic 1/1 and 1/3 tracks.
|
|
15
15
|
*
|
|
16
16
|
* Heading type and content rhythm remain owned by semantic BF elements. The
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
* divided-section and basic-section remain independent BF components.
|
|
8
8
|
*
|
|
9
9
|
* Vanilla → BF mapping:
|
|
10
|
-
* -
|
|
11
|
-
* -
|
|
10
|
+
* - 45rem readable split switch → the 45rem descendant container query.
|
|
11
|
+
* - section boundaries → the parent stack selected by the composition.
|
|
12
12
|
* - the intermediate p-section--shallow before a separate tab rail →
|
|
13
|
-
*
|
|
13
|
+
* a shallow gap owned by the tab-section body.
|
|
14
14
|
* - 8-column 4/4 and 2/6 spans → intrinsic 1/1 and 1/3 tracks.
|
|
15
15
|
*
|
|
16
16
|
* Heading type and content rhythm remain owned by semantic BF elements. The
|
|
@@ -24,26 +24,35 @@ export function tabSectionCss() {
|
|
|
24
24
|
:where(.bf-theme) :where(.bf-tab-section) {
|
|
25
25
|
container-name: bf-tab-section;
|
|
26
26
|
container-type: inline-size;
|
|
27
|
-
margin
|
|
27
|
+
margin: 0;
|
|
28
28
|
min-inline-size: 0;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
:where(.bf-theme) :where(.bf-tab-section
|
|
32
|
-
|
|
31
|
+
:where(.bf-theme) :where(.bf-tab-section-layout) {
|
|
32
|
+
display: grid;
|
|
33
|
+
grid-template-columns: minmax(0, 1fr);
|
|
34
|
+
min-inline-size: 0;
|
|
33
35
|
}
|
|
34
36
|
|
|
35
|
-
:where(.bf-theme) :where(.bf-tab-section
|
|
36
|
-
|
|
37
|
+
:where(.bf-theme) :where(.bf-tab-section-rule) {
|
|
38
|
+
grid-column: 1 / -1;
|
|
37
39
|
}
|
|
38
40
|
|
|
39
|
-
:where(.bf-theme) :where(.bf-tab-section-
|
|
41
|
+
:where(.bf-theme) :where(.bf-tab-section-body) {
|
|
42
|
+
--bf-stack-space: var(--bf-section-space-shallow);
|
|
43
|
+
align-content: start;
|
|
40
44
|
display: grid;
|
|
45
|
+
gap: var(--bf-stack-space);
|
|
41
46
|
grid-template-columns: minmax(0, 1fr);
|
|
42
47
|
min-inline-size: 0;
|
|
43
48
|
}
|
|
44
49
|
|
|
45
|
-
:where(.bf-theme) :where(.bf-tab-section-
|
|
46
|
-
|
|
50
|
+
:where(.bf-theme) :where(.bf-tab-section-copy) {
|
|
51
|
+
align-content: start;
|
|
52
|
+
display: grid;
|
|
53
|
+
grid-template-columns: minmax(0, 1fr);
|
|
54
|
+
min-inline-size: 0;
|
|
55
|
+
row-gap: var(--bf-space-1);
|
|
47
56
|
}
|
|
48
57
|
|
|
49
58
|
:where(.bf-theme) :where(.bf-tab-section-header, .bf-tab-section-intro, .bf-tab-section-tabs) {
|
|
@@ -51,51 +60,50 @@ export function tabSectionCss() {
|
|
|
51
60
|
overflow-wrap: anywhere;
|
|
52
61
|
}
|
|
53
62
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
child's semantic margins. */
|
|
57
|
-
:where(.bf-theme) :where(.bf-tab-section:not(.is-50-50)) > :where(.bf-tab-section-layout) > :where(.bf-tab-section-tabs),
|
|
58
|
-
:where(.bf-theme) :where(.bf-tab-section.is-50-50) > :where(.bf-tab-section-layout:has(> .bf-tab-section-intro)) > :where(.bf-tab-section-tabs) {
|
|
59
|
-
padding-block-start: var(--bf-section-space-shallow);
|
|
63
|
+
:where(.bf-theme) :where(.bf-tab-section-tabs) {
|
|
64
|
+
align-self: start;
|
|
60
65
|
}
|
|
61
66
|
|
|
62
|
-
@container bf-tab-section (width >=
|
|
63
|
-
:where(.bf-theme) :where(.bf-tab-section
|
|
67
|
+
@container bf-tab-section (width >= 45rem) {
|
|
68
|
+
:where(.bf-theme) :where(.bf-tab-section-body) {
|
|
64
69
|
column-gap: var(--bf-grid-gap-inline);
|
|
65
70
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
66
71
|
}
|
|
67
72
|
|
|
68
|
-
:where(.bf-theme) :where(.bf-tab-section
|
|
73
|
+
:where(.bf-theme) :where(.bf-tab-section-copy) {
|
|
69
74
|
grid-column: 1 / -1;
|
|
75
|
+
grid-template-columns: subgrid;
|
|
70
76
|
}
|
|
71
77
|
|
|
72
78
|
/* With supporting copy or actions, Vanilla's heading row is 50/50 for all
|
|
73
79
|
three section layouts. The following tab rail retains its own requested
|
|
74
80
|
full, half or three-quarter span. */
|
|
75
|
-
:where(.bf-theme) :where(.bf-tab-section-
|
|
81
|
+
:where(.bf-theme) :where(.bf-tab-section-copy:has(> .bf-tab-section-intro)) > :where(.bf-tab-section-header) {
|
|
76
82
|
grid-column: 1 / 3;
|
|
77
83
|
}
|
|
78
84
|
|
|
79
|
-
:where(.bf-theme) :where(.bf-tab-section
|
|
85
|
+
:where(.bf-theme) :where(.bf-tab-section-copy) > :where(.bf-tab-section-intro) {
|
|
80
86
|
grid-column: 3 / -1;
|
|
81
87
|
}
|
|
82
88
|
|
|
83
|
-
:where(.bf-theme) :where(.bf-tab-section
|
|
89
|
+
:where(.bf-theme) :where(.bf-tab-section-body) > :where(.bf-tab-section-tabs) {
|
|
84
90
|
grid-column: 1 / -1;
|
|
85
91
|
}
|
|
86
92
|
|
|
87
93
|
/* An unadorned 50/50 section lets auto-placement put the heading and tabs
|
|
88
94
|
in the same row. If an intro exists, it occupies that right-hand cell and
|
|
89
95
|
the tabs move to the following row, matching the upstream rendering. */
|
|
90
|
-
:where(.bf-theme) :where(.bf-tab-section.is-50-50)
|
|
96
|
+
:where(.bf-theme) :where(.bf-tab-section.is-50-50) :where(.bf-tab-section-copy:not(:has(> .bf-tab-section-intro))) {
|
|
91
97
|
grid-column: 1 / 3;
|
|
98
|
+
grid-row: 1;
|
|
92
99
|
}
|
|
93
100
|
|
|
94
|
-
:where(.bf-theme) :where(.bf-tab-section.is-50-50)
|
|
101
|
+
:where(.bf-theme) :where(.bf-tab-section.is-50-50) :where(.bf-tab-section-copy:not(:has(> .bf-tab-section-intro))) + :where(.bf-tab-section-tabs) {
|
|
95
102
|
grid-column: 3 / -1;
|
|
103
|
+
grid-row: 1;
|
|
96
104
|
}
|
|
97
105
|
|
|
98
|
-
:where(.bf-theme) :where(.bf-tab-section.is-25-75)
|
|
106
|
+
:where(.bf-theme) :where(.bf-tab-section.is-25-75) :where(.bf-tab-section-body) > :where(.bf-tab-section-tabs) {
|
|
99
107
|
grid-column: 2 / -1;
|
|
100
108
|
}
|
|
101
109
|
}
|
|
@@ -37,15 +37,16 @@ ${bodyTypeStyles} color: var(--bf-color-text-muted);
|
|
|
37
37
|
line-height: var(--bf-table-row-line-height);
|
|
38
38
|
margin: 0;
|
|
39
39
|
overflow: hidden;
|
|
40
|
-
padding-block: var(--bf-table-row-padding);
|
|
41
|
-
padding-
|
|
40
|
+
padding-block-end: var(--bf-table-row-padding-block-end);
|
|
41
|
+
padding-block-start: var(--bf-table-row-padding-block-start);
|
|
42
|
+
padding-inline: var(--bf-component-inline-inset-field);
|
|
42
43
|
text-align: left;
|
|
43
44
|
text-overflow: ellipsis;
|
|
44
45
|
vertical-align: top;
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
:where(.bf-theme) :where(th.is-icon-placeholder, td.is-icon-placeholder, .bf-table-cell.is-icon-placeholder) {
|
|
48
|
-
padding-inline-start: calc(
|
|
49
|
+
padding-inline-start: calc(var(--bf-component-inline-inset-field) + var(--bf-leading-icon-size) + var(--bf-leading-icon-gap));
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
:where(.bf-theme) :where(th.is-icon-placeholder, td.is-icon-placeholder, .bf-table-cell.is-icon-placeholder) > :where(.bf-icon:first-child) {
|
|
@@ -68,10 +69,6 @@ ${bodyMediumTypeStyles} color: var(--bf-color-text-default);
|
|
|
68
69
|
border-block-end-color: var(--bf-color-border-low-contrast);
|
|
69
70
|
}
|
|
70
71
|
|
|
71
|
-
:where(.bf-theme) :where(tbody tr:has(.bf-status-label) > td) {
|
|
72
|
-
padding-block: calc((var(--bf-baseline) - var(--bf-table-row-border-size)) / 2);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
72
|
:where(.bf-theme) :where(tbody tr:hover td) {
|
|
76
73
|
background: color-mix(in srgb, var(--bf-color-background-hover) 68%, transparent);
|
|
77
74
|
}
|
|
@@ -2,18 +2,16 @@ export function tabsChoiceBreadcrumbsCss(options) {
|
|
|
2
2
|
const { bodyCaseTypeStyles, bodyStrongTypeStyles, bodyTypeStyles, buttonMarginBottom, buttonPadding, } = options;
|
|
3
3
|
return `:where(.bf-theme) :where(.bf-tabs) {
|
|
4
4
|
display: grid;
|
|
5
|
+
gap: var(--bf-space-2);
|
|
5
6
|
min-inline-size: 0;
|
|
6
7
|
}
|
|
7
8
|
|
|
8
9
|
:where(.bf-theme) :where(.bf-tabs-list) {
|
|
9
|
-
|
|
10
|
+
box-shadow: inset 0 calc(var(--bf-border-width) * -1) 0 var(--bf-color-border-default);
|
|
10
11
|
display: flex;
|
|
11
12
|
gap: 0;
|
|
12
13
|
list-style: none;
|
|
13
|
-
|
|
14
|
-
than leaving each link's control compensation between its active rule and
|
|
15
|
-
the list rule. */
|
|
16
|
-
margin: 0 0 calc((var(--bf-baseline) * 2) - var(--bf-border-width));
|
|
14
|
+
margin: 0;
|
|
17
15
|
min-inline-size: 0;
|
|
18
16
|
overflow-x: auto;
|
|
19
17
|
padding: 0;
|
|
@@ -30,16 +28,16 @@ export function tabsChoiceBreadcrumbsCss(options) {
|
|
|
30
28
|
${bodyTypeStyles} align-items: center;
|
|
31
29
|
background: transparent;
|
|
32
30
|
border: 0;
|
|
33
|
-
border-
|
|
31
|
+
border-block: var(--bf-border-width) solid transparent;
|
|
34
32
|
color: var(--bf-color-text-muted);
|
|
35
33
|
cursor: pointer;
|
|
36
|
-
display:
|
|
34
|
+
display: flex;
|
|
37
35
|
gap: calc(var(--bf-baseline) * 0.5);
|
|
38
36
|
justify-content: center;
|
|
39
37
|
margin-bottom: 0;
|
|
40
|
-
padding-block-end: calc(var(--bf-
|
|
41
|
-
padding-block-start: var(--bf-
|
|
42
|
-
padding-inline: var(--bf-
|
|
38
|
+
padding-block-end: calc(var(--bf-single-line-row-padding-block) + var(--bf-single-line-row-margin-block-end));
|
|
39
|
+
padding-block-start: var(--bf-single-line-row-padding-block);
|
|
40
|
+
padding-inline: var(--bf-component-inline-inset-action);
|
|
43
41
|
text-decoration: none;
|
|
44
42
|
}
|
|
45
43
|
|
|
@@ -48,18 +46,22 @@ ${bodyTypeStyles} align-items: center;
|
|
|
48
46
|
color: var(--bf-color-text-default);
|
|
49
47
|
}
|
|
50
48
|
|
|
49
|
+
:where(.bf-theme) :where(a.bf-tabs-link:hover) {
|
|
50
|
+
text-decoration: none;
|
|
51
|
+
}
|
|
52
|
+
|
|
51
53
|
:where(.bf-theme) :where(.bf-tabs-link:focus:not(:focus-visible)) {
|
|
52
54
|
outline: none;
|
|
53
55
|
}
|
|
54
56
|
|
|
55
57
|
:where(.bf-theme) :where(.bf-tabs-link:focus-visible) {
|
|
56
58
|
color: var(--bf-color-text-default);
|
|
57
|
-
outline:
|
|
58
|
-
outline-offset: -
|
|
59
|
+
outline: 0.125rem solid var(--bf-color-focus);
|
|
60
|
+
outline-offset: -0.125rem;
|
|
59
61
|
}
|
|
60
62
|
|
|
61
63
|
:where(.bf-theme) :where(.bf-tabs-link.is-active, .bf-tabs-link[aria-selected='true']) {
|
|
62
|
-
|
|
64
|
+
box-shadow: inset 0 calc(var(--bf-bar-thickness) * -1) 0 var(--bf-color-text-default);
|
|
63
65
|
color: var(--bf-color-text-default);
|
|
64
66
|
}
|
|
65
67
|
|
|
@@ -111,7 +113,7 @@ ${bodyTypeStyles} align-items: center;
|
|
|
111
113
|
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
112
114
|
margin: 0 0 ${buttonMarginBottom};
|
|
113
115
|
min-inline-size: 0;
|
|
114
|
-
${buttonPadding} padding-inline: var(--bf-
|
|
116
|
+
${buttonPadding} padding-inline: var(--bf-component-inline-inset-field);
|
|
115
117
|
}
|
|
116
118
|
|
|
117
119
|
:where(.bf-theme) :where(.bf-choice-row:hover) {
|
|
@@ -119,8 +121,8 @@ ${buttonPadding} padding-inline: var(--bf-control-inline-padding-field);
|
|
|
119
121
|
}
|
|
120
122
|
|
|
121
123
|
:where(.bf-theme) :where(.bf-choice-row:has(:focus-visible)) {
|
|
122
|
-
outline:
|
|
123
|
-
outline-offset: -
|
|
124
|
+
outline: 0.125rem solid var(--bf-color-focus);
|
|
125
|
+
outline-offset: -0.125rem;
|
|
124
126
|
}
|
|
125
127
|
|
|
126
128
|
:where(.bf-theme) :where(.bf-choice-row input[type='radio']) {
|
|
@@ -157,7 +159,7 @@ ${bodyTypeStyles} color: var(--bf-color-text-muted);
|
|
|
157
159
|
gap: var(--bf-field-gap);
|
|
158
160
|
padding-block-end: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
|
|
159
161
|
padding-block-start: var(--bf-panel-padding-block);
|
|
160
|
-
padding-inline: var(--bf-
|
|
162
|
+
padding-inline: var(--bf-component-inline-inset-continuation);
|
|
161
163
|
}
|
|
162
164
|
|
|
163
165
|
:where(.bf-theme) :where(.bf-inline-options-heading) {
|
|
@@ -224,7 +226,7 @@ ${bodyTypeStyles} align-items: center;
|
|
|
224
226
|
margin-bottom: ${buttonMarginBottom};
|
|
225
227
|
max-inline-size: 100%;
|
|
226
228
|
overflow: hidden;
|
|
227
|
-
${buttonPadding} padding-inline: var(--bf-control-inline-padding-action);
|
|
229
|
+
${buttonPadding} padding-inline: var(--bf-control-inline-padding-action-bordered);
|
|
228
230
|
text-align: center;
|
|
229
231
|
text-decoration: none;
|
|
230
232
|
text-overflow: ellipsis;
|
|
@@ -250,8 +252,8 @@ ${buttonPadding} padding-inline: var(--bf-control-inline-padding-action);
|
|
|
250
252
|
}
|
|
251
253
|
|
|
252
254
|
:where(.bf-theme) :where(.bf-segmented-control-button:focus-visible, .bf-tab-buttons-button:focus-visible) {
|
|
253
|
-
outline:
|
|
254
|
-
outline-offset: -
|
|
255
|
+
outline: 0.125rem solid var(--bf-color-focus);
|
|
256
|
+
outline-offset: -0.125rem;
|
|
255
257
|
z-index: 2;
|
|
256
258
|
}
|
|
257
259
|
|
|
@@ -280,8 +282,10 @@ ${buttonPadding} padding-inline: var(--bf-control-inline-padding-action);
|
|
|
280
282
|
|
|
281
283
|
:where(.bf-theme) :where(.bf-breadcrumbs-item) {
|
|
282
284
|
${bodyCaseTypeStyles} color: var(--bf-color-text-muted);
|
|
283
|
-
margin: 0;
|
|
285
|
+
margin: 0 0 var(--bf-body-margin-bottom);
|
|
284
286
|
min-inline-size: 0;
|
|
287
|
+
padding-block-end: 0;
|
|
288
|
+
padding-block-start: var(--bf-body-nudge-start);
|
|
285
289
|
}
|
|
286
290
|
|
|
287
291
|
:where(.bf-theme) :where(.bf-breadcrumbs-item) + :where(.bf-breadcrumbs-item)::before {
|