baseline-foundry 0.1.3 → 0.1.5

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 (84) hide show
  1. package/README.md +577 -553
  2. package/config/experiments/ibm-plex-engine-smoke.json +115 -115
  3. package/config/experiments/ubuntu-engine-smoke.json +115 -115
  4. package/config/foundation-theme.json +110 -110
  5. package/config/tiers/app.json +116 -116
  6. package/config/tiers/documentation.json +116 -116
  7. package/config/tiers/editorial.json +116 -116
  8. package/config/tiers/os.json +116 -116
  9. package/dist/baseline-grid-overlay.js +43 -43
  10. package/dist/build.js +4 -4
  11. package/dist/code-snippet.js +1 -1
  12. package/dist/css-app-tier.js +78 -73
  13. package/dist/css-components/article-pagination.js +141 -140
  14. package/dist/css-components/button-actions.js +181 -161
  15. package/dist/css-components/cards-options.js +176 -176
  16. package/dist/css-components/chip-badge-status.d.ts +0 -3
  17. package/dist/css-components/chip-badge-status.js +174 -159
  18. package/dist/css-components/content-card.d.ts +7 -7
  19. package/dist/css-components/content-card.js +498 -497
  20. package/dist/css-components/control-row.d.ts +1 -1
  21. package/dist/css-components/control-row.js +15 -15
  22. package/dist/css-components/cta-figure-aspect.js +120 -120
  23. package/dist/css-components/document-navigation.js +427 -390
  24. package/dist/css-components/editorial-content.js +42 -42
  25. package/dist/css-components/icon.js +72 -72
  26. package/dist/css-components/interactive-feedback.js +239 -217
  27. package/dist/css-components/interactive-tables.js +160 -155
  28. package/dist/css-components/legacy-navigation.d.ts +8 -0
  29. package/dist/css-components/legacy-navigation.js +816 -0
  30. package/dist/css-components/linked-logo-site-layout.d.ts +3 -3
  31. package/dist/css-components/linked-logo-site-layout.js +177 -180
  32. package/dist/css-components/list-tree.js +96 -94
  33. package/dist/css-components/list.js +9 -7
  34. package/dist/css-components/logo-media.d.ts +6 -6
  35. package/dist/css-components/logo-media.js +218 -207
  36. package/dist/css-components/navigation-layout.js +144 -144
  37. package/dist/css-components/panel.js +148 -144
  38. package/dist/css-components/search-box-and-filter.d.ts +0 -1
  39. package/dist/css-components/search-box-and-filter.js +263 -264
  40. package/dist/css-components/sites-editorial-ports.d.ts +3 -4
  41. package/dist/css-components/sites-editorial-ports.js +279 -247
  42. package/dist/css-components/sites-foundation.js +142 -146
  43. package/dist/css-components/sites-rich-lists.d.ts +5 -5
  44. package/dist/css-components/sites-rich-lists.js +339 -349
  45. package/dist/css-components/static-content-ports.d.ts +3 -3
  46. package/dist/css-components/static-content-ports.js +200 -186
  47. package/dist/css-components/tab-section.d.ts +3 -3
  48. package/dist/css-components/tab-section.js +93 -85
  49. package/dist/css-components/table.js +76 -75
  50. package/dist/css-components/tabs-choice-breadcrumbs.js +307 -303
  51. package/dist/css-components/tiered-list-equal-height-row.js +271 -271
  52. package/dist/css-components.js +1881 -2554
  53. package/dist/css-grid.d.ts +1 -1
  54. package/dist/css-grid.js +183 -173
  55. package/dist/css.js +317 -241
  56. package/dist/experiments/ibm-plex-engine-smoke/styles.css +894 -538
  57. package/dist/experiments/ibm-plex-engine-smoke/surfaces.json +2 -2
  58. package/dist/experiments/ibm-plex-engine-smoke/tokens.json +1 -1
  59. package/dist/in-page-navigation.js +1 -1
  60. package/dist/presets/app-tier/styles.css +928 -568
  61. package/dist/presets/app-tier/surfaces.json +17 -17
  62. package/dist/presets/app-tier/tokens.json +7 -7
  63. package/dist/presets/prose/styles.css +919 -562
  64. package/dist/presets/prose/surfaces.json +17 -17
  65. package/dist/presets/prose/tokens.json +1 -1
  66. package/dist/resizable-aside.js +12 -4
  67. package/dist/styles.css +919 -562
  68. package/dist/surfaces.json +17 -17
  69. package/dist/tiers/app/styles.css +928 -568
  70. package/dist/tiers/app/surfaces.json +17 -17
  71. package/dist/tiers/app/tokens.json +7 -7
  72. package/dist/tiers/documentation/styles.css +920 -563
  73. package/dist/tiers/documentation/surfaces.json +17 -17
  74. package/dist/tiers/documentation/tokens.json +2 -2
  75. package/dist/tiers/editorial/styles.css +919 -562
  76. package/dist/tiers/editorial/surfaces.json +17 -17
  77. package/dist/tiers/editorial/tokens.json +1 -1
  78. package/dist/tiers/os/styles.css +925 -568
  79. package/dist/tiers/os/surfaces.json +17 -17
  80. package/dist/tiers/os/tokens.json +7 -7
  81. package/dist/tokens.json +1 -1
  82. package/dist/types.d.ts +1 -1
  83. package/docs/publishing.md +31 -14
  84. package/package.json +119 -108
@@ -3,149 +3,149 @@
3
3
  * primitives without changing their interaction ownership.
4
4
  */
5
5
  export function navigationLayoutCss() {
6
- return `/* ------------------------------------------------------------------ */
7
- /* Navigation layout and page shell */
8
- /* ------------------------------------------------------------------ */
9
-
10
- /* The row is only a layout owner. Interactive children own the occupied
11
- * block; row padding would leave an unpainted strip below their highlights. */
12
- :where(.bf-theme) :where(.bf-top-navigation-row) {
13
- padding-block: 0;
14
- }
15
-
16
- /* The tagged treatment is opt-in. The Circle of Friends is aligned to the
17
- * first title line, then the 38px tag extends upward to the navigation edge.
18
- * Its 22px inline size preserves the established 38:22 (~1.73) tag ratio; the
19
- * tag must not stretch to the full occupied navigation row. */
20
- :where(.bf-theme) :where(.bf-top-navigation-logo.is-canonical-tagged) {
21
- min-inline-size: 0;
22
- }
23
-
24
- :where(.bf-theme) :where(.bf-top-navigation-logo.is-canonical-tagged) > :where(.bf-top-navigation-link) {
25
- align-items: start;
26
- column-gap: 0;
27
- display: inline-flex;
28
- inline-size: 100%;
29
- justify-content: flex-start;
30
- padding-block: 0;
31
- padding-inline: 0;
32
- padding-inline-start: calc(var(--bf-top-navigation-logo-tag-inline-size) + var(--bf-top-navigation-logo-tag-gap));
33
- position: relative;
34
- }
35
-
36
- :where(.bf-theme) :where(.bf-top-navigation-logo.is-canonical-tagged) :where(.bf-top-navigation-logo-tag) {
37
- align-items: flex-end;
38
- background: var(--bf-color-brand);
39
- block-size: var(--bf-top-navigation-logo-tag-block-size);
40
- box-sizing: border-box;
41
- display: flex;
42
- inline-size: var(--bf-top-navigation-logo-tag-inline-size);
43
- inset-block-start: 0;
44
- inset-inline-start: 0;
45
- justify-content: center;
46
- padding-block: 0 var(--bf-top-navigation-logo-icon-bottom-offset);
47
- padding-inline: 0;
48
- position: absolute;
49
- }
50
-
51
- :where(.bf-theme) :where(.bf-top-navigation-logo.is-canonical-tagged) ~ :where(.bf-top-navigation-list.is-banner-actions) :where(.bf-top-navigation-menu-toggle, .bf-top-navigation-search-toggle),
52
- :where(.bf-theme) :where(.bf-top-navigation.is-grid-aligned) :where(.bf-top-navigation-nav) :where(.bf-top-navigation-link, .bf-top-navigation-search-toggle) {
53
- block-size: 100%;
54
- }
55
-
56
- :where(.bf-theme) :where(.bf-top-navigation-logo.is-canonical-tagged) :where(.bf-top-navigation-logo-icon) {
57
- block-size: var(--bf-top-navigation-logo-icon-size);
58
- display: block;
59
- flex: 0 0 auto;
60
- inline-size: var(--bf-top-navigation-logo-icon-size);
61
- transform: translateX(var(--bf-top-navigation-logo-icon-optical-offset-inline));
62
- }
63
-
64
- :where(.bf-theme) :where(.bf-top-navigation-logo.is-canonical-tagged) :where(.bf-top-navigation-logo-title) {
65
- align-self: start;
66
- color: var(--bf-color-text-default);
67
- font-size: var(--bf-top-navigation-logo-title-font-size, var(--bf-body-font-size, 1rem));
68
- font-weight: 300;
69
- line-height: var(--bf-top-navigation-logo-title-line-height, var(--bf-body-line-height, 1.5));
70
- overflow: visible;
71
- overflow-wrap: anywhere;
72
- /* The first title line and the 16px mark share the mark's fixed centre:
73
- * tag block-end minus the 6px inset minus half the mark. Symmetric title
74
- * padding keeps the occupied row stable across all four type-density tiers. */
75
- padding-block: calc(
76
- var(--bf-top-navigation-logo-tag-block-size)
77
- - var(--bf-top-navigation-logo-icon-bottom-offset)
78
- - (var(--bf-top-navigation-logo-icon-size) / 2)
79
- - (var(--bf-top-navigation-logo-title-line-height, var(--bf-body-line-height, 1.5rem)) / 2)
80
- );
81
- text-overflow: clip;
82
- white-space: normal;
83
- }
84
-
85
- /* A grid-aligned header uses the same eight tracks and gutter as page content.
86
- * The brand/banner owns columns one and two; primary navigation starts at
87
- * column three. No independent brand-width token can drift from that grid. */
88
- :where(.bf-theme) :where(.bf-top-navigation.is-grid-aligned) {
89
- container-type: inline-size;
90
- }
91
-
92
- @media (min-width: 64.75rem) {
93
- :where(.bf-theme) :where(.bf-top-navigation.is-grid-aligned) :where(.bf-top-navigation-row) {
94
- column-gap: var(--bf-grid-gap-inline);
95
- display: grid;
96
- grid-template-columns: repeat(8, minmax(0, 1fr));
97
- }
98
-
99
- :where(.bf-theme) :where(.bf-top-navigation.is-grid-aligned) :where(.bf-top-navigation-banner) {
100
- grid-column: 1 / span 2;
101
- min-inline-size: 0;
102
- }
103
-
104
- :where(.bf-theme) :where(.bf-top-navigation.is-grid-aligned) :where(.bf-top-navigation-nav) {
105
- grid-column: 3 / -1;
106
- min-inline-size: 0;
107
- }
108
-
109
- :where(.bf-theme) :where(.bf-top-navigation.is-grid-aligned) :where(.bf-top-navigation-dropdown) {
110
- top: 100%;
111
- }
112
- }
113
-
114
- /* Documentation composition stays single-column until its own container can
115
- * support the intentional 2/6 navigation/content split. The optional
116
- * navigation slot never creates a mobile rail. */
117
- :where(.bf-theme) :where(.bf-docs-layout) {
118
- align-items: start;
119
- column-gap: var(--bf-grid-gap-inline);
120
- container-type: inline-size;
121
- display: grid;
122
- grid-template-columns: repeat(8, minmax(0, 1fr));
123
- min-inline-size: 0;
124
- }
125
-
126
- :where(.bf-theme) :where(.bf-docs-layout-navigation, .bf-docs-layout-content) {
127
- grid-column: 1 / -1;
128
- min-inline-size: 0;
129
- }
130
-
131
- @media (min-width: 64.75rem) {
132
- @container (width >= 38.75rem) {
133
- :where(.bf-theme) :where(.bf-docs-layout:has(> .bf-docs-layout-navigation)) > :where(.bf-docs-layout-navigation) {
134
- grid-column: span 2;
135
- }
136
-
137
- :where(.bf-theme) :where(.bf-docs-layout:has(> .bf-docs-layout-navigation)) > :where(.bf-docs-layout-content) {
138
- grid-column: span 6;
139
- }
140
- }
141
- }
142
-
143
- /* This is deliberately scoped to an explicit page shell. Importing a BF tier
144
- * alone never changes the consuming document body's user-agent margin. */
145
- :where(body.bf-theme.bf-page-shell) {
146
- background: var(--bf-color-background-default);
147
- margin: 0;
148
- min-block-size: 100dvb;
149
- }
6
+ return `/* ------------------------------------------------------------------ */
7
+ /* Navigation layout and page shell */
8
+ /* ------------------------------------------------------------------ */
9
+
10
+ /* The row is only a layout owner. Interactive children own the occupied
11
+ * block; row padding would leave an unpainted strip below their highlights. */
12
+ :where(.bf-theme) :where(.bf-top-navigation-row) {
13
+ padding-block: 0;
14
+ }
15
+
16
+ /* The tagged treatment is opt-in. The Circle of Friends is aligned to the
17
+ * first title line, then the 2.375rem tag extends upward to the navigation edge.
18
+ * Its 1.375rem inline size preserves the established 38:22 (~1.73) tag ratio; the
19
+ * tag must not stretch to the full occupied navigation row. */
20
+ :where(.bf-theme) :where(.bf-top-navigation-logo.is-canonical-tagged) {
21
+ min-inline-size: 0;
22
+ }
23
+
24
+ :where(.bf-theme) :where(.bf-top-navigation-logo.is-canonical-tagged) > :where(.bf-top-navigation-link) {
25
+ align-items: start;
26
+ column-gap: 0;
27
+ display: inline-flex;
28
+ inline-size: 100%;
29
+ justify-content: flex-start;
30
+ padding-block: 0;
31
+ padding-inline: 0;
32
+ padding-inline-start: calc(var(--bf-top-navigation-logo-tag-inline-size) + var(--bf-top-navigation-logo-tag-gap));
33
+ position: relative;
34
+ }
35
+
36
+ :where(.bf-theme) :where(.bf-top-navigation-logo.is-canonical-tagged) :where(.bf-top-navigation-logo-tag) {
37
+ align-items: flex-end;
38
+ background: var(--bf-color-brand);
39
+ block-size: var(--bf-top-navigation-logo-tag-block-size);
40
+ box-sizing: border-box;
41
+ display: flex;
42
+ inline-size: var(--bf-top-navigation-logo-tag-inline-size);
43
+ inset-block-start: 0;
44
+ inset-inline-start: 0;
45
+ justify-content: center;
46
+ padding-block: 0 var(--bf-top-navigation-logo-icon-bottom-offset);
47
+ padding-inline: 0;
48
+ position: absolute;
49
+ }
50
+
51
+ :where(.bf-theme) :where(.bf-top-navigation-logo.is-canonical-tagged) ~ :where(.bf-top-navigation-list.is-banner-actions) :where(.bf-top-navigation-menu-toggle, .bf-top-navigation-search-toggle),
52
+ :where(.bf-theme) :where(.bf-top-navigation.is-grid-aligned) :where(.bf-top-navigation-nav) :where(.bf-top-navigation-link, .bf-top-navigation-search-toggle) {
53
+ block-size: 100%;
54
+ }
55
+
56
+ :where(.bf-theme) :where(.bf-top-navigation-logo.is-canonical-tagged) :where(.bf-top-navigation-logo-icon) {
57
+ block-size: var(--bf-top-navigation-logo-icon-size);
58
+ display: block;
59
+ flex: 0 0 auto;
60
+ inline-size: var(--bf-top-navigation-logo-icon-size);
61
+ transform: translateX(var(--bf-top-navigation-logo-icon-optical-offset-inline));
62
+ }
63
+
64
+ :where(.bf-theme) :where(.bf-top-navigation-logo.is-canonical-tagged) :where(.bf-top-navigation-logo-title) {
65
+ align-self: start;
66
+ color: var(--bf-color-text-default);
67
+ font-size: var(--bf-top-navigation-logo-title-font-size, var(--bf-body-font-size, 1rem));
68
+ font-weight: 300;
69
+ line-height: var(--bf-top-navigation-logo-title-line-height, var(--bf-body-line-height, 1.5));
70
+ overflow: visible;
71
+ overflow-wrap: anywhere;
72
+ /* The first title line and the 1rem mark share the mark's fixed centre:
73
+ * tag block-end minus the 0.375rem inset minus half the mark. Symmetric title
74
+ * padding keeps the occupied row stable across all four type-density tiers. */
75
+ padding-block: calc(
76
+ var(--bf-top-navigation-logo-tag-block-size)
77
+ - var(--bf-top-navigation-logo-icon-bottom-offset)
78
+ - (var(--bf-top-navigation-logo-icon-size) / 2)
79
+ - (var(--bf-top-navigation-logo-title-line-height, var(--bf-body-line-height, 1.5rem)) / 2)
80
+ );
81
+ text-overflow: clip;
82
+ white-space: normal;
83
+ }
84
+
85
+ /* A grid-aligned header uses the same eight tracks and gutter as page content.
86
+ * The brand/banner owns columns one and two; primary navigation starts at
87
+ * column three. No independent brand-width token can drift from that grid. */
88
+ :where(.bf-theme) :where(.bf-top-navigation.is-grid-aligned) {
89
+ container-type: inline-size;
90
+ }
91
+
92
+ @media (min-width: 64.75rem) {
93
+ :where(.bf-theme) :where(.bf-top-navigation.is-grid-aligned) :where(.bf-top-navigation-row) {
94
+ column-gap: var(--bf-grid-gap-inline);
95
+ display: grid;
96
+ grid-template-columns: repeat(8, minmax(0, 1fr));
97
+ }
98
+
99
+ :where(.bf-theme) :where(.bf-top-navigation.is-grid-aligned) :where(.bf-top-navigation-banner) {
100
+ grid-column: 1 / span 2;
101
+ min-inline-size: 0;
102
+ }
103
+
104
+ :where(.bf-theme) :where(.bf-top-navigation.is-grid-aligned) :where(.bf-top-navigation-nav) {
105
+ grid-column: 3 / -1;
106
+ min-inline-size: 0;
107
+ }
108
+
109
+ :where(.bf-theme) :where(.bf-top-navigation.is-grid-aligned) :where(.bf-top-navigation-dropdown) {
110
+ top: 100%;
111
+ }
112
+ }
113
+
114
+ /* Documentation composition stays single-column until its own container can
115
+ * support the intentional 2/6 navigation/content split. The optional
116
+ * navigation slot never creates a mobile rail. */
117
+ :where(.bf-theme) :where(.bf-docs-layout) {
118
+ align-items: start;
119
+ column-gap: var(--bf-grid-gap-inline);
120
+ container-type: inline-size;
121
+ display: grid;
122
+ grid-template-columns: repeat(8, minmax(0, 1fr));
123
+ min-inline-size: 0;
124
+ }
125
+
126
+ :where(.bf-theme) :where(.bf-docs-layout-navigation, .bf-docs-layout-content) {
127
+ grid-column: 1 / -1;
128
+ min-inline-size: 0;
129
+ }
130
+
131
+ @media (min-width: 64.75rem) {
132
+ @container (width >= 38.75rem) {
133
+ :where(.bf-theme) :where(.bf-docs-layout:has(> .bf-docs-layout-navigation)) > :where(.bf-docs-layout-navigation) {
134
+ grid-column: span 2;
135
+ }
136
+
137
+ :where(.bf-theme) :where(.bf-docs-layout:has(> .bf-docs-layout-navigation)) > :where(.bf-docs-layout-content) {
138
+ grid-column: span 6;
139
+ }
140
+ }
141
+ }
142
+
143
+ /* This is deliberately scoped to an explicit page shell. Importing a BF tier
144
+ * alone never changes the consuming document body's user-agent margin. */
145
+ :where(body.bf-theme.bf-page-shell) {
146
+ background: var(--bf-color-background-default);
147
+ margin: 0;
148
+ min-block-size: 100dvb;
149
+ }
150
150
  `;
151
151
  }
@@ -1,148 +1,152 @@
1
1
  export function panelCss(options) {
2
2
  const { bodyTypeStyles, h4TypeStyles } = options;
3
- return `:where(.bf-theme) :where(.bf-panel) {
4
- background: var(--bf-color-background-default);
5
- color: var(--bf-color-text-default);
6
- display: flex;
7
- flex-direction: column;
8
- inline-size: 100%;
9
- max-inline-size: 100%;
10
- min-block-size: 0;
11
- }
12
-
13
- :where(.bf-theme) :where(.bf-panel.is-fill) {
14
- block-size: 100%;
15
- max-inline-size: none;
16
- min-block-size: 0;
17
- resize: none;
18
- }
19
-
20
- :where(.bf-theme) :where(.bf-panel.is-fill) > :where(.bf-panel-content) {
21
- min-block-size: 0;
22
- overflow: auto;
23
- overscroll-behavior: contain;
24
- }
25
-
26
- :where(.bf-theme) :where(.bf-panel-header) {
27
- align-items: start;
28
- display: flex;
29
- flex-wrap: wrap;
30
- gap: var(--bf-field-gap);
31
- justify-content: space-between;
32
- padding-block-end: var(--bf-panel-padding-block);
33
- padding-block-start: var(--bf-panel-padding-block);
34
- padding-inline: var(--bf-panel-padding-inline);
35
- }
36
-
37
- /* A navigation brand keeps the Canonical tag attached to the panel's top edge
38
- * while sharing the panel-content inline inset used by the opposing main
39
- * region. Ordinary content-panel headers retain their complete padding. */
40
- :where(.bf-theme) :where(.bf-panel-header.is-navigation-brand) {
41
- gap: 0;
42
- padding-block: 0;
43
- padding-inline-end: 0;
44
- padding-inline-start: var(--bf-panel-padding-inline);
45
- }
46
-
47
- :where(.bf-theme) :where(.bf-panel-header.is-navigation-brand) > :where(.bf-top-navigation-logo.is-canonical-tagged) {
48
- inline-size: 100%;
49
- }
50
-
51
- :where(.bf-theme) :where(.bf-panel-header.is-navigation-brand) :where(.bf-top-navigation-logo-title) {
52
- transform: translateY(var(--bf-navigation-brand-title-optical-offset-block));
53
- }
54
-
55
- :where(.bf-theme) :where(.bf-panel-header) > :where(.bf-panel-title) {
56
- min-inline-size: 0;
57
- }
58
-
59
- :where(.bf-theme) :where(.bf-panel-header.is-sticky) {
60
- background: var(--bf-color-background-default);
61
- position: sticky;
62
- top: 0;
63
- z-index: 5;
64
- }
65
-
66
- /* Panel chrome that remains outside the panel's scrolling content. */
67
- :where(.bf-theme) :where(.bf-panel-footer) {
68
- align-items: center;
69
- border-block-start: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
70
- display: flex;
71
- flex: 0 0 auto;
72
- flex-wrap: wrap;
73
- gap: var(--bf-field-gap);
74
- justify-content: space-between;
75
- min-block-size: calc(var(--bf-control-box-size-compact) + (var(--bf-panel-padding-block) * 2));
76
- padding-block-end: var(--bf-panel-padding-block);
77
- padding-block-start: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
78
- padding-inline: var(--bf-panel-padding-inline);
79
- }
80
-
81
- :where(.bf-theme) :where(.bf-panel-footer.is-sticky) {
82
- background: var(--bf-color-background-default);
83
- bottom: 0;
84
- position: sticky;
85
- z-index: 5;
86
- }
87
-
88
- :where(.bf-theme) :where(.bf-panel-title) {
89
- ${h4TypeStyles} margin: 0 0 var(--bf-h4-margin-bottom);
90
- min-inline-size: 0;
91
- padding-block-end: 0;
92
- padding-block-start: var(--bf-h4-nudge-start);
93
- }
94
-
95
- :where(.bf-theme) :where(.bf-panel-controls) {
96
- align-items: start;
97
- display: flex;
98
- flex-wrap: wrap;
99
- gap: var(--bf-field-gap);
100
- margin-inline-start: auto;
101
- }
102
-
103
- :where(.bf-theme) :where(.bf-panel-toggle) {
104
- ${bodyTypeStyles} align-items: center;
105
- appearance: none;
106
- background: transparent;
107
- border: 0;
108
- color: var(--bf-color-text-default);
109
- cursor: pointer;
110
- display: inline-flex;
111
- gap: calc(var(--bf-baseline) * 0.5);
112
- justify-content: flex-start;
113
- margin: 0;
114
- min-block-size: var(--bf-control-box-size-compact);
115
- min-inline-size: 0;
116
- padding-block: var(--bf-control-block-padding-compact);
117
- padding-inline: 0;
118
- text-align: left;
119
- }
120
-
121
- :where(.bf-theme) :where(.bf-panel-toggle:hover) {
122
- color: var(--bf-color-link-default);
123
- }
124
-
125
- :where(.bf-theme) :where(.bf-panel-toggle:focus:not(:focus-visible)) {
126
- outline: none;
127
- }
128
-
129
- :where(.bf-theme) :where(.bf-panel-toggle:focus-visible) {
130
- outline: 2px solid var(--bf-color-focus);
131
- outline-offset: 2px;
132
- }
133
-
134
- :where(.bf-theme) :where(.bf-panel-content) {
135
- flex: 1 1 auto;
136
- min-block-size: 0;
137
- padding-block-end: var(--bf-panel-padding-block);
138
- padding-block-start: var(--bf-panel-padding-block);
139
- padding-inline: var(--bf-panel-padding-inline);
140
- }
141
-
142
- :where(.bf-theme) :where(.bf-panel-content.is-flush) {
143
- padding-block: 0;
144
- padding-inline: 0;
145
- }
146
-
3
+ return `:where(.bf-theme) :where(.bf-panel) {
4
+ --bf-panel-content-padding-inline: var(--bf-component-inline-inset-continuation);
5
+ background: var(--bf-color-background-default);
6
+ color: var(--bf-color-text-default);
7
+ display: flex;
8
+ flex-direction: column;
9
+ inline-size: 100%;
10
+ max-inline-size: 100%;
11
+ min-block-size: 0;
12
+ }
13
+
14
+ :where(.bf-theme) :where(.bf-panel.is-fill) {
15
+ block-size: 100%;
16
+ max-inline-size: none;
17
+ min-block-size: 0;
18
+ resize: none;
19
+ }
20
+
21
+ :where(.bf-theme) :where(.bf-panel.is-fill) > :where(.bf-panel-content) {
22
+ min-block-size: 0;
23
+ overflow: auto;
24
+ overscroll-behavior: contain;
25
+ }
26
+
27
+ /* Panel chrome and content consume the live page-grid gutter through a local
28
+ * derived property, so their internal text rails follow the same
29
+ * viewport brackets as surrounding page content. */
30
+ :where(.bf-theme) :where(.bf-panel-header) {
31
+ align-items: start;
32
+ display: flex;
33
+ flex-wrap: wrap;
34
+ gap: var(--bf-field-gap);
35
+ justify-content: space-between;
36
+ padding-block-end: var(--bf-panel-padding-block);
37
+ padding-block-start: var(--bf-panel-padding-block);
38
+ padding-inline: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
39
+ }
40
+
41
+ /* A navigation brand keeps the Canonical tag attached to the panel's top edge
42
+ * while sharing the panel-content inline inset used by the opposing main
43
+ * region. Ordinary content-panel headers retain their complete padding. */
44
+ :where(.bf-theme) :where(.bf-panel-header.is-navigation-brand) {
45
+ gap: 0;
46
+ padding-block: 0;
47
+ padding-inline-end: 0;
48
+ padding-inline-start: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
49
+ }
50
+
51
+ :where(.bf-theme) :where(.bf-panel-header.is-navigation-brand) > :where(.bf-top-navigation-logo.is-canonical-tagged) {
52
+ inline-size: 100%;
53
+ }
54
+
55
+ :where(.bf-theme) :where(.bf-panel-header.is-navigation-brand) :where(.bf-top-navigation-logo-title) {
56
+ transform: translateY(var(--bf-navigation-brand-title-optical-offset-block));
57
+ }
58
+
59
+ :where(.bf-theme) :where(.bf-panel-header) > :where(.bf-panel-title) {
60
+ min-inline-size: 0;
61
+ }
62
+
63
+ :where(.bf-theme) :where(.bf-panel-header.is-sticky) {
64
+ background: var(--bf-color-background-default);
65
+ position: sticky;
66
+ top: 0;
67
+ z-index: 5;
68
+ }
69
+
70
+ /* Panel chrome that remains outside the panel's scrolling content. */
71
+ :where(.bf-theme) :where(.bf-panel-footer) {
72
+ align-items: center;
73
+ border-block-start: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
74
+ display: flex;
75
+ flex: 0 0 auto;
76
+ flex-wrap: wrap;
77
+ gap: var(--bf-field-gap);
78
+ justify-content: space-between;
79
+ min-block-size: calc(var(--bf-control-box-size-compact) + var(--bf-panel-padding-block));
80
+ padding-block-end: var(--bf-panel-padding-block);
81
+ padding-block-start: 0;
82
+ padding-inline: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
83
+ }
84
+
85
+ :where(.bf-theme) :where(.bf-panel-footer.is-sticky) {
86
+ background: var(--bf-color-background-default);
87
+ bottom: 0;
88
+ position: sticky;
89
+ z-index: 5;
90
+ }
91
+
92
+ :where(.bf-theme) :where(.bf-panel-title) {
93
+ ${h4TypeStyles} margin: 0 0 var(--bf-h4-margin-bottom);
94
+ min-inline-size: 0;
95
+ padding-block-end: 0;
96
+ padding-block-start: var(--bf-h4-nudge-start);
97
+ }
98
+
99
+ :where(.bf-theme) :where(.bf-panel-controls) {
100
+ align-items: start;
101
+ display: flex;
102
+ flex-wrap: wrap;
103
+ gap: var(--bf-field-gap);
104
+ margin-inline-start: auto;
105
+ }
106
+
107
+ :where(.bf-theme) :where(.bf-panel-toggle) {
108
+ ${bodyTypeStyles} align-items: center;
109
+ appearance: none;
110
+ background: transparent;
111
+ border: 0;
112
+ color: var(--bf-color-text-default);
113
+ cursor: pointer;
114
+ display: inline-flex;
115
+ gap: calc(var(--bf-baseline) * 0.5);
116
+ justify-content: flex-start;
117
+ margin: 0;
118
+ min-block-size: var(--bf-control-box-size-compact);
119
+ min-inline-size: 0;
120
+ padding-block: var(--bf-control-block-padding-compact);
121
+ padding-inline: 0;
122
+ text-align: left;
123
+ }
124
+
125
+ :where(.bf-theme) :where(.bf-panel-toggle:hover) {
126
+ color: var(--bf-color-link-default);
127
+ }
128
+
129
+ :where(.bf-theme) :where(.bf-panel-toggle:focus:not(:focus-visible)) {
130
+ outline: none;
131
+ }
132
+
133
+ :where(.bf-theme) :where(.bf-panel-toggle:focus-visible) {
134
+ outline: 0.125rem solid var(--bf-color-focus);
135
+ outline-offset: 0.125rem;
136
+ }
137
+
138
+ :where(.bf-theme) :where(.bf-panel-content) {
139
+ flex: 1 1 auto;
140
+ min-block-size: 0;
141
+ padding-block-end: var(--bf-panel-padding-block);
142
+ padding-block-start: var(--bf-panel-padding-block);
143
+ padding-inline: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
144
+ }
145
+
146
+ :where(.bf-theme) :where(.bf-panel-content.is-flush) {
147
+ padding-block: 0;
148
+ padding-inline: 0;
149
+ }
150
+
147
151
  `;
148
152
  }
@@ -2,7 +2,6 @@ type SearchBoxAndFilterCssOptions = {
2
2
  bodySelectedStartNudge: string;
3
3
  bodyTypeStyles: string;
4
4
  buttonBlockPaddingVar: string;
5
- h6TypeStyles: string;
6
5
  inputMarginBottom: string;
7
6
  };
8
7
  export declare function searchBoxAndFilterCss(options: SearchBoxAndFilterCssOptions): string;