@kerfjs/ui 5.0.0-beta.56 → 5.0.0-beta.58
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 +81 -37
- package/ai/application-ui-diagnostic-ids-v1.json +9 -1
- package/ai/application-ui-profile-sync.cjs +1 -1
- package/ai/application-ui-profile.defaults.json +63 -8
- package/ai/application-ui-profile.mjs +1 -1
- package/ai/component-catalog.json +211 -33
- package/ai/component-catalog.schema.json +2 -0
- package/ai/component-class-owners.cjs +83 -0
- package/ai/component-composition-extension.d.ts +7 -0
- package/ai/component-composition-extension.schema.json +7 -0
- package/ai/{component-catalog-v2-overrides.json → component-composition-rules.json} +2 -1
- package/ai/{component-catalog-v2.d.ts → component-composition.d.ts} +9 -5
- package/ai/{component-catalog-v2.json → component-composition.json} +155 -24
- package/ai/{component-catalog-v2.schema.json → component-composition.schema.json} +21 -5
- package/ai/components/README.md +170 -0
- package/ai/components/application-tabs.md +65 -0
- package/ai/components/badge.md +72 -0
- package/ai/components/collapsible-panel.md +102 -0
- package/ai/components/content-item.md +90 -0
- package/ai/components/disclosure-arrow.md +77 -0
- package/ai/components/document-baseline.md +75 -0
- package/ai/components/empty-state.md +80 -0
- package/ai/components/feedback.md +71 -0
- package/ai/components/floating-toolbar.md +80 -0
- package/ai/components/foundation.md +65 -0
- package/ai/components/grid.md +93 -0
- package/ai/components/headers.md +63 -0
- package/ai/components/layout.md +75 -0
- package/ai/components/list-action-row.md +91 -0
- package/ai/components/list-header.md +89 -0
- package/ai/components/list-inset-control.md +74 -0
- package/ai/components/list-inset-text.md +72 -0
- package/ai/components/list-item.md +88 -0
- package/ai/components/list.md +103 -0
- package/ai/components/loading-spinner.md +72 -0
- package/ai/components/lucide-icon.md +66 -0
- package/ai/components/nav-stack.md +103 -0
- package/ai/components/pane.md +100 -0
- package/ai/components/popup-menu.md +82 -0
- package/ai/components/recipe-app-shell.md +57 -0
- package/ai/components/recipe-collapsible-sidebar.md +57 -0
- package/ai/components/recipe-compact-toolbar.md +57 -0
- package/ai/components/recipe-composer-form.md +57 -0
- package/ai/components/recipe-list-detail-dialog.md +57 -0
- package/ai/components/recipe-list-workspace-states.md +57 -0
- package/ai/components/recipe-loading-inspector.md +57 -0
- package/ai/components/recipe-navigation-sidebar.md +57 -0
- package/ai/components/recipe-navigation-stack.md +57 -0
- package/ai/components/recipe-workspace-header.md +57 -0
- package/ai/components/resize.md +101 -0
- package/ai/components/row.md +96 -0
- package/ai/components/segmented-control.md +82 -0
- package/ai/components/select.md +107 -0
- package/ai/components/skeleton.md +84 -0
- package/ai/components/spacer.md +86 -0
- package/ai/components/split-view.md +102 -0
- package/ai/components/state-banner.md +92 -0
- package/ai/components/sunken-panel.md +79 -0
- package/ai/components/surface-scaffold.md +78 -0
- package/ai/components/tab-bar.md +112 -0
- package/ai/components/tab-scaffold.md +94 -0
- package/ai/components/tabs.md +90 -0
- package/ai/components/text.md +82 -0
- package/ai/components/token-search-field.md +101 -0
- package/ai/components/toolbar-control-group.md +102 -0
- package/ai/components/toolbar-text.md +76 -0
- package/ai/components/toolbar.md +95 -0
- package/ai/components/value-table.md +72 -0
- package/ai/components/wa-accordion-item.md +55 -0
- package/ai/components/wa-accordion.md +65 -0
- package/ai/components/wa-animated-image.md +55 -0
- package/ai/components/wa-animation.md +55 -0
- package/ai/components/wa-avatar.md +55 -0
- package/ai/components/wa-badge.md +55 -0
- package/ai/components/wa-breadcrumb-item.md +53 -0
- package/ai/components/wa-breadcrumb.md +55 -0
- package/ai/components/wa-button-group.md +59 -0
- package/ai/components/wa-button.md +55 -0
- package/ai/components/wa-callout.md +58 -0
- package/ai/components/wa-card.md +59 -0
- package/ai/components/wa-carousel-item.md +53 -0
- package/ai/components/wa-carousel.md +55 -0
- package/ai/components/wa-checkbox-group.md +55 -0
- package/ai/components/wa-checkbox.md +55 -0
- package/ai/components/wa-color-picker.md +55 -0
- package/ai/components/wa-comparison.md +55 -0
- package/ai/components/wa-copy-button.md +55 -0
- package/ai/components/wa-details.md +61 -0
- package/ai/components/wa-dialog.md +59 -0
- package/ai/components/wa-divider.md +53 -0
- package/ai/components/wa-drawer.md +55 -0
- package/ai/components/wa-dropdown-item.md +60 -0
- package/ai/components/wa-dropdown.md +60 -0
- package/ai/components/wa-format-bytes.md +53 -0
- package/ai/components/wa-format-date.md +53 -0
- package/ai/components/wa-format-number.md +53 -0
- package/ai/components/wa-icon.md +58 -0
- package/ai/components/wa-include.md +53 -0
- package/ai/components/wa-input.md +59 -0
- package/ai/components/wa-intersection-observer.md +53 -0
- package/ai/components/wa-known-date.md +53 -0
- package/ai/components/wa-markdown.md +53 -0
- package/ai/components/wa-mutation-observer.md +53 -0
- package/ai/components/wa-number-input.md +55 -0
- package/ai/components/wa-option.md +59 -0
- package/ai/components/wa-otp-input.md +53 -0
- package/ai/components/wa-page.md +53 -0
- package/ai/components/wa-pagination.md +55 -0
- package/ai/components/wa-popover.md +55 -0
- package/ai/components/wa-popup.md +53 -0
- package/ai/components/wa-progress-bar.md +53 -0
- package/ai/components/wa-progress-ring.md +53 -0
- package/ai/components/wa-qr-code.md +53 -0
- package/ai/components/wa-radio-group.md +59 -0
- package/ai/components/wa-radio.md +55 -0
- package/ai/components/wa-random-content.md +53 -0
- package/ai/components/wa-rating.md +55 -0
- package/ai/components/wa-relative-time.md +53 -0
- package/ai/components/wa-resize-observer.md +53 -0
- package/ai/components/wa-scroller.md +53 -0
- package/ai/components/wa-select.md +63 -0
- package/ai/components/wa-skeleton.md +53 -0
- package/ai/components/wa-slider.md +55 -0
- package/ai/components/wa-spinner.md +58 -0
- package/ai/components/wa-split-panel.md +58 -0
- package/ai/components/wa-switch.md +53 -0
- package/ai/components/wa-tab-group.md +69 -0
- package/ai/components/wa-tab-panel.md +60 -0
- package/ai/components/wa-tab.md +59 -0
- package/ai/components/wa-tag.md +59 -0
- package/ai/components/wa-textarea.md +53 -0
- package/ai/components/wa-time-input.md +55 -0
- package/ai/components/wa-toast-item.md +60 -0
- package/ai/components/wa-toast.md +60 -0
- package/ai/components/wa-tooltip.md +55 -0
- package/ai/components/wa-tree-item.md +55 -0
- package/ai/components/wa-tree.md +55 -0
- package/ai/components/wa-zoomable-frame.md +55 -0
- package/ai/components/workbench.md +114 -0
- package/ai/public-api-signatures-v1.md +174 -43
- package/ai/skill.md +100 -48
- package/ai/webawesome-jsx-signatures-v1.md +1 -1
- package/analyzer/component-ownership.d.mts +56 -0
- package/analyzer/component-ownership.mjs +184 -0
- package/analyzer/index.d.mts +3 -0
- package/analyzer/index.mjs +274 -20
- package/analyzer/selectors.d.mts +21 -0
- package/analyzer/selectors.mjs +212 -0
- package/dist/browser/catalog.js +25 -0
- package/dist/browser/collapsible-panel.js +7 -0
- package/dist/browser/nav-stack.js +8 -0
- package/dist/browser/split-view.js +10 -0
- package/dist/browser/tab-scaffold.js +4 -0
- package/dist/browser/workbench.js +10 -0
- package/dist/catalog-resources.d.ts +2 -2
- package/dist/catalog.d.ts +3 -3
- package/dist/catalog.js +8 -7
- package/dist/catalog.js.map +1 -1
- package/dist/{chunk-QQOTQTDD.js → chunk-2CCMJTVY.js} +13 -10
- package/dist/chunk-2CCMJTVY.js.map +1 -0
- package/dist/{chunk-PK4N5QTO.js → chunk-553ASUK6.js} +2 -3
- package/dist/chunk-553ASUK6.js.map +1 -0
- package/dist/{chunk-G33XC2NB.js → chunk-6YFHCLHG.js} +2 -2
- package/dist/chunk-6YFHCLHG.js.map +1 -0
- package/dist/{chunk-ZIYOJFZD.js → chunk-7JUBXOIV.js} +17 -4
- package/dist/chunk-7JUBXOIV.js.map +1 -0
- package/dist/{chunk-T4UZTNZ4.js → chunk-EVYKTVBQ.js} +2 -11
- package/dist/chunk-EVYKTVBQ.js.map +1 -0
- package/dist/{chunk-AK67F6QN.js → chunk-EZVNC4J6.js} +4 -1
- package/dist/chunk-EZVNC4J6.js.map +1 -0
- package/dist/{chunk-MA6Z6EIM.js → chunk-F4QMLOXJ.js} +3 -2
- package/dist/chunk-F4QMLOXJ.js.map +1 -0
- package/dist/chunk-JCV4GXWB.js +249 -0
- package/dist/chunk-JCV4GXWB.js.map +1 -0
- package/dist/chunk-K47P7QZC.js +17 -0
- package/dist/chunk-K47P7QZC.js.map +1 -0
- package/dist/{chunk-MOBRFZH3.js → chunk-OUK6QRDR.js} +2 -12
- package/dist/chunk-OUK6QRDR.js.map +1 -0
- package/dist/{chunk-VNPQDCQZ.js → chunk-QOWG4ZCL.js} +3 -2
- package/dist/chunk-QOWG4ZCL.js.map +1 -0
- package/dist/{chunk-V65EOWNF.js → chunk-QPUPLNNB.js} +20 -8
- package/dist/chunk-QPUPLNNB.js.map +1 -0
- package/dist/{chunk-O3EXIBEZ.js → chunk-W4XKTST6.js} +8 -7
- package/dist/chunk-W4XKTST6.js.map +1 -0
- package/dist/{chunk-K6UNVKDK.js → chunk-XDKAYSVD.js} +3 -1
- package/dist/chunk-XDKAYSVD.js.map +1 -0
- package/dist/collapsible-panel.d.ts +9 -9
- package/dist/collapsible-panel.js +2 -2
- package/dist/collapsible-panel.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +11 -9
- package/dist/list-action-row.js +2 -1
- package/dist/list-header.js +1 -1
- package/dist/list-item.js +2 -1
- package/dist/nav-stack.d.ts +13 -1
- package/dist/nav-stack.js +1 -1
- package/dist/pane.d.ts +20 -3
- package/dist/pane.js +1 -1
- package/dist/{panel-toolbar-C8sF-YZC.d.ts → panel-toolbar-DqwtBxQL.d.ts} +13 -13
- package/dist/select.js +1 -1
- package/dist/split-view.d.ts +3 -3
- package/dist/split-view.js +3 -2
- package/dist/split-view.js.map +1 -1
- package/dist/state-banner.js +1 -1
- package/dist/styles/app-tab.css +31 -0
- package/dist/styles/badge.css +19 -11
- package/dist/styles/collapsible-panel.css +13 -9
- package/dist/styles/floating-toolbar.css +25 -6
- package/dist/styles/list-header.css +0 -12
- package/dist/styles/list.css +4 -4
- package/dist/styles/nav-stack.css +46 -19
- package/dist/styles/pane.css +50 -0
- package/dist/styles/popup-menu.css +151 -0
- package/dist/styles/resizable-region.css +22 -10
- package/dist/styles/select.css +28 -14
- package/dist/styles/skeleton.css +30 -3
- package/dist/styles/split-view.css +10 -7
- package/dist/styles/state-banner.css +0 -19
- package/dist/styles/surface-scaffold.css +8 -3
- package/dist/styles/tab-bar.css +79 -28
- package/dist/styles/tab-scaffold.css +25 -1
- package/dist/styles/text.css +16 -0
- package/dist/styles/toolbar-control-group.css +121 -66
- package/dist/styles/toolbar-text.css +21 -0
- package/dist/styles/toolbar.css +8 -32
- package/dist/styles/workbench.css +18 -18
- package/dist/tab-scaffold.d.ts +11 -1
- package/dist/tab-scaffold.js +2 -0
- package/dist/tab-scaffold.js.map +1 -1
- package/dist/toolbar-control-group.d.ts +3 -1
- package/dist/toolbar-control-group.js +1 -1
- package/dist/toolbar-text.d.ts +7 -1
- package/dist/toolbar-text.js +1 -1
- package/dist/toolbar.d.ts +8 -1
- package/dist/toolbar.js +1 -1
- package/dist/{types-DXAGogOS.d.ts → types-BuHELdXR.d.ts} +1 -1
- package/dist/wire-catalog.d.ts +3 -1
- package/dist/wire-catalog.js +2 -0
- package/dist/wire-catalog.js.map +1 -1
- package/dist/wire-scroll-dividers.d.ts +69 -0
- package/dist/wire-scroll-dividers.js +3 -0
- package/dist/wire-scroll-dividers.js.map +1 -0
- package/dist/workbench.d.ts +17 -16
- package/dist/workbench.js +1 -1
- package/docs/app-layouts.md +9 -1
- package/docs/catalog.md +10 -5
- package/docs/collapsible-panel.md +22 -13
- package/docs/component-contract.md +147 -21
- package/docs/component-selection.md +21 -8
- package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
- package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
- package/docs/design/templates/tab-bar-dark.svg +1 -1
- package/docs/design/templates/tab-bar.svg +1 -1
- package/docs/design-philosophy.md +30 -3
- package/docs/examples/application-ui-profile.json +4 -4
- package/docs/examples/{component-catalog-extension-v2.json → component-composition-extension.json} +3 -3
- package/docs/layout.md +82 -3
- package/docs/nav-stack.md +33 -3
- package/docs/split-view.md +10 -5
- package/docs/tab-scaffold.md +23 -1
- package/docs/type-contracts.md +4 -3
- package/docs/ui-analyzer.md +99 -5
- package/docs/ui-doctor.md +10 -0
- package/docs/workbench.md +31 -20
- package/doctor/index.mjs +6 -1
- package/llms.txt +85 -20
- package/package.json +17 -5
- package/ux-demo/recipes/collapsible-sidebar.tsx +0 -1
- package/ux-demo/recipes/composer-form.tsx +0 -1
- package/ux-demo/recipes/list-detail-dialog.tsx +0 -2
- package/ux-demo/recipes/list-workspace-states.tsx +0 -1
- package/ux-demo/recipes/loading-inspector.tsx +0 -1
- package/ux-demo/recipes/workspace-header.tsx +0 -1
- package/ai/component-catalog-extension-v2.d.ts +0 -7
- package/ai/component-catalog-extension-v2.schema.json +0 -7
- package/dist/chunk-AK67F6QN.js.map +0 -1
- package/dist/chunk-G33XC2NB.js.map +0 -1
- package/dist/chunk-K6UNVKDK.js.map +0 -1
- package/dist/chunk-MA6Z6EIM.js.map +0 -1
- package/dist/chunk-MOBRFZH3.js.map +0 -1
- package/dist/chunk-O3EXIBEZ.js.map +0 -1
- package/dist/chunk-PK4N5QTO.js.map +0 -1
- package/dist/chunk-QQOTQTDD.js.map +0 -1
- package/dist/chunk-T4UZTNZ4.js.map +0 -1
- package/dist/chunk-V65EOWNF.js.map +0 -1
- package/dist/chunk-VNPQDCQZ.js.map +0 -1
- package/dist/chunk-ZIYOJFZD.js.map +0 -1
package/dist/styles/tab-bar.css
CHANGED
|
@@ -38,32 +38,17 @@
|
|
|
38
38
|
--kui-tab-bar-background: var(--kui-color-neutral-fill-quiet);
|
|
39
39
|
--kui-tab-bar-border: var(--kui-color-neutral-border-quiet);
|
|
40
40
|
}
|
|
41
|
-
/* A segmented strip's outer ends follow the pill track
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
track. Only fill allocation carries the last tab to the track's trailing
|
|
46
|
-
end; an intrinsic strip's last tab stops short of it and keeps the segment
|
|
47
|
-
radius, as do the corners between tabs. */
|
|
41
|
+
/* A segmented strip's outer ends follow the pill track: a compact tab is inset
|
|
42
|
+
from the track's ends by the same distance as from its top and bottom, so
|
|
43
|
+
each end is concentric with the track. AppTab rounds its own outer corners
|
|
44
|
+
to match in this context (see app-tab.css); TabBar never styles AppTab. */
|
|
48
45
|
.kui-tab-bar[data-presentation="segmented"]
|
|
49
|
-
.kui-tab-bar__tabs:has(>
|
|
46
|
+
.kui-tab-bar__tabs:has(> .kui-app-tab[data-size="compact"]) {
|
|
50
47
|
padding-inline: calc(
|
|
51
48
|
(var(--kui-toolbar-group-size, calc(2px + 2.625rem)) - 2rem) /
|
|
52
49
|
2 - 1px
|
|
53
50
|
);
|
|
54
51
|
}
|
|
55
|
-
.kui-tab-bar[data-presentation="segmented"]
|
|
56
|
-
.kui-tab-bar__tabs
|
|
57
|
-
> [data-component="app-tab"]:first-child {
|
|
58
|
-
border-start-start-radius: var(--kui-radius-pill);
|
|
59
|
-
border-end-start-radius: var(--kui-radius-pill);
|
|
60
|
-
}
|
|
61
|
-
.kui-tab-bar[data-presentation="segmented"][data-allocation="fill"]
|
|
62
|
-
.kui-tab-bar__tabs
|
|
63
|
-
> [data-component="app-tab"]:last-child {
|
|
64
|
-
border-start-end-radius: var(--kui-radius-pill);
|
|
65
|
-
border-end-end-radius: var(--kui-radius-pill);
|
|
66
|
-
}
|
|
67
52
|
.kui-tab-bar[data-presentation="inspector"] {
|
|
68
53
|
min-height: 2.125rem;
|
|
69
54
|
padding: 0;
|
|
@@ -72,14 +57,6 @@
|
|
|
72
57
|
min-height: 2.125rem;
|
|
73
58
|
border-radius: var(--kui-radius-s);
|
|
74
59
|
}
|
|
75
|
-
.kui-tab-bar[data-allocation="fill"] [data-component="app-tab"] {
|
|
76
|
-
min-width: 0;
|
|
77
|
-
flex: 1 1 0;
|
|
78
|
-
}
|
|
79
|
-
.kui-tab-bar[data-allocation="fill"] [data-component="app-tab"] > [role="tab"] {
|
|
80
|
-
width: 100%;
|
|
81
|
-
justify-content: center;
|
|
82
|
-
}
|
|
83
60
|
.kui-tab-bar[data-trailing-placement="adjacent"] .kui-tab-bar__tabs {
|
|
84
61
|
flex: 0 1 auto;
|
|
85
62
|
}
|
|
@@ -100,3 +77,77 @@
|
|
|
100
77
|
.kui-tab-bar__end {
|
|
101
78
|
margin-inline-start: auto;
|
|
102
79
|
}
|
|
80
|
+
|
|
81
|
+
/* Overflow dividers: a line on each side of the tab strip beyond which tabs
|
|
82
|
+
are scrolled out of view, as `wireScrollDividers` reports through the
|
|
83
|
+
strip's `data-scroll-overflow` (physical sides). A rail strip has no
|
|
84
|
+
visible track, so the bar draws the line with its own pseudo-elements,
|
|
85
|
+
ordered onto the strip's edges: `::before` between the leading zone and the
|
|
86
|
+
strip, `::after` between the strip and the trailing zone. Each is 1px wide
|
|
87
|
+
and gives back its width and one gap through a negative margin, so it
|
|
88
|
+
overlaps the strip's edge and never moves a tab or an action; hidden, it is
|
|
89
|
+
transparent. A segmented or inspector strip already draws a bordered track,
|
|
90
|
+
so its overflowing side takes the divider color on that border instead of
|
|
91
|
+
a straight line across its rounded end. */
|
|
92
|
+
.kui-tab-bar > .kui-tab-bar__leading {
|
|
93
|
+
order: -2;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.kui-tab-bar > :is(.kui-tab-bar__trailing, .kui-tab-bar__end) {
|
|
97
|
+
order: 1;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.kui-tab-bar::before,
|
|
101
|
+
.kui-tab-bar::after {
|
|
102
|
+
content: "";
|
|
103
|
+
position: relative;
|
|
104
|
+
z-index: 1;
|
|
105
|
+
width: 1px;
|
|
106
|
+
background: transparent;
|
|
107
|
+
pointer-events: none;
|
|
108
|
+
align-self: stretch;
|
|
109
|
+
flex: none;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.kui-tab-bar::before {
|
|
113
|
+
order: -1;
|
|
114
|
+
margin-inline-end: calc(-1px - var(--kui-toolbar-gap, 0.5rem));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.kui-tab-bar::after {
|
|
118
|
+
margin-inline-start: calc(-1px - var(--kui-toolbar-gap, 0.5rem));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.kui-tab-bar[data-presentation="rail"]:dir(ltr):has(
|
|
122
|
+
> .kui-tab-bar__tabs[data-scroll-overflow*="l"]
|
|
123
|
+
)::before,
|
|
124
|
+
.kui-tab-bar[data-presentation="rail"]:dir(rtl):has(
|
|
125
|
+
> .kui-tab-bar__tabs[data-scroll-overflow*="r"]
|
|
126
|
+
)::before,
|
|
127
|
+
.kui-tab-bar[data-presentation="rail"]:dir(ltr):has(
|
|
128
|
+
> .kui-tab-bar__tabs[data-scroll-overflow*="r"]
|
|
129
|
+
)::after,
|
|
130
|
+
.kui-tab-bar[data-presentation="rail"]:dir(rtl):has(
|
|
131
|
+
> .kui-tab-bar__tabs[data-scroll-overflow*="l"]
|
|
132
|
+
)::after {
|
|
133
|
+
background: var(
|
|
134
|
+
--kui-tab-bar-divider-color,
|
|
135
|
+
var(--kui-color-neutral-border-normal)
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.kui-tab-bar:not([data-presentation="rail"])
|
|
140
|
+
> .kui-tab-bar__tabs[data-scroll-overflow*="l"] {
|
|
141
|
+
border-left-color: var(
|
|
142
|
+
--kui-tab-bar-divider-color,
|
|
143
|
+
var(--kui-color-neutral-border-normal)
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.kui-tab-bar:not([data-presentation="rail"])
|
|
148
|
+
> .kui-tab-bar__tabs[data-scroll-overflow*="r"] {
|
|
149
|
+
border-right-color: var(
|
|
150
|
+
--kui-tab-bar-divider-color,
|
|
151
|
+
var(--kui-color-neutral-border-normal)
|
|
152
|
+
);
|
|
153
|
+
}
|
|
@@ -96,10 +96,24 @@
|
|
|
96
96
|
);
|
|
97
97
|
padding-inline: var(--_kui-tab-scaffold-safe-inline-start)
|
|
98
98
|
var(--_kui-tab-scaffold-safe-inline-end);
|
|
99
|
-
|
|
99
|
+
/* Chrome divider: with `chromeDividers="scroll"` (the default, no
|
|
100
|
+
attribute) the bar's 1px top border shows only while the active scene's
|
|
101
|
+
content continues below it — never at the scroll end or when the content
|
|
102
|
+
fits. `wireScrollDividers` reports that state through
|
|
103
|
+
`data-scroll-divider`; `always` shows it without the wiring, and `none`
|
|
104
|
+
never. The border is always there and only its color changes, so
|
|
105
|
+
showing it never moves the bar or a tab. */
|
|
106
|
+
border-block-start: 1px solid
|
|
107
|
+
var(--_kui-tab-scaffold-bar-divider, transparent);
|
|
100
108
|
background: var(--kui-color-surface);
|
|
101
109
|
}
|
|
102
110
|
|
|
111
|
+
.kui-tab-scaffold:not([data-chrome-dividers])
|
|
112
|
+
> .kui-tab-scaffold__bar[data-scroll-divider*="t"],
|
|
113
|
+
.kui-tab-scaffold[data-chrome-dividers="always"] > .kui-tab-scaffold__bar {
|
|
114
|
+
--_kui-tab-scaffold-bar-divider: var(--kui-color-neutral-border-normal);
|
|
115
|
+
}
|
|
116
|
+
|
|
103
117
|
.kui-tab-scaffold__tab {
|
|
104
118
|
display: flex;
|
|
105
119
|
flex: 1 1 0;
|
|
@@ -168,3 +182,13 @@
|
|
|
168
182
|
text-overflow: ellipsis;
|
|
169
183
|
white-space: nowrap;
|
|
170
184
|
}
|
|
185
|
+
|
|
186
|
+
/* As the only child of a Workbench region (its main area or a panel's
|
|
187
|
+
content, which the Workbench marks with `data-workbench-main` /
|
|
188
|
+
`data-workbench-panel-content`), a TabScaffold fills the region, so a
|
|
189
|
+
composed toolbar's footer (or the app's own) sits at the region's bottom
|
|
190
|
+
edge rather than under short content. */
|
|
191
|
+
:is([data-workbench-main], [data-workbench-panel-content])
|
|
192
|
+
> [data-component="tab-scaffold"]:only-child {
|
|
193
|
+
height: 100%;
|
|
194
|
+
}
|
package/dist/styles/text.css
CHANGED
|
@@ -30,3 +30,19 @@ span.kui-text {
|
|
|
30
30
|
border: 0;
|
|
31
31
|
padding: 0;
|
|
32
32
|
}
|
|
33
|
+
|
|
34
|
+
/* A ListHeader's label: the title's single text child, set as a compact,
|
|
35
|
+
uppercase, single-line label that truncates with an ellipsis. The title is
|
|
36
|
+
a div around a heading or, for a toggle header, the toggle button around
|
|
37
|
+
an inline span. */
|
|
38
|
+
.kui-list-header__title > .kui-text {
|
|
39
|
+
min-width: 0;
|
|
40
|
+
margin: 0;
|
|
41
|
+
overflow: hidden;
|
|
42
|
+
font-size: var(--kui-font-xs);
|
|
43
|
+
font-weight: 650;
|
|
44
|
+
letter-spacing: 0.04em;
|
|
45
|
+
text-overflow: ellipsis;
|
|
46
|
+
text-transform: uppercase;
|
|
47
|
+
white-space: nowrap;
|
|
48
|
+
}
|
|
@@ -21,15 +21,17 @@
|
|
|
21
21
|
)
|
|
22
22
|
);
|
|
23
23
|
--kui-toolbar-item-radius: var(--kui-control-highlight-radius);
|
|
24
|
-
/*
|
|
25
|
-
|
|
26
|
-
group-owned focus ring stays concentric with the
|
|
27
|
-
group sizes to the child's width. A default slot is
|
|
28
|
-
2px inset; a compact slot is the full 32px padding
|
|
29
|
-
compact child also overlaps the 1px inline padding.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
--_kui-toolbar-slot-
|
|
24
|
+
/* Context the group provides to a composed child (an icon-only Select, in
|
|
25
|
+
select.css): the control slot the child fills so it is inset evenly on
|
|
26
|
+
every side and the group-owned focus ring stays concentric with the
|
|
27
|
+
visible control. The group sizes to the child's width. A default slot is
|
|
28
|
+
40px tall inside the 2px inset; a compact slot is the full 32px padding
|
|
29
|
+
box, and a lone compact child also overlaps the 1px inline padding. The
|
|
30
|
+
values are named after the group that provides them; the child reads
|
|
31
|
+
them from its own stylesheet. */
|
|
32
|
+
--_kui-toolbar-control-group-slot-height: 2.5rem;
|
|
33
|
+
--_kui-toolbar-control-group-slot-overlap: 0px;
|
|
34
|
+
--_kui-toolbar-control-group-slot-radius: var(--kui-toolbar-item-radius);
|
|
33
35
|
display: inline-flex;
|
|
34
36
|
height: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
|
|
35
37
|
min-width: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
|
|
@@ -44,6 +46,23 @@
|
|
|
44
46
|
gap: 0;
|
|
45
47
|
}
|
|
46
48
|
|
|
49
|
+
/* In a Toolbar zone, a group shorter than the toolbar's control band (the
|
|
50
|
+
`--_kui-toolbar-band` the Toolbar provides) takes half the difference as a
|
|
51
|
+
top margin, so it centers in the band by its own size. */
|
|
52
|
+
:is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing)
|
|
53
|
+
> .kui-toolbar-control-group {
|
|
54
|
+
margin-block-start: max(
|
|
55
|
+
0px,
|
|
56
|
+
calc(
|
|
57
|
+
(
|
|
58
|
+
var(--_kui-toolbar-band) -
|
|
59
|
+
var(--kui-toolbar-group-size, calc(2px + 2.625rem))
|
|
60
|
+
) /
|
|
61
|
+
2
|
|
62
|
+
)
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
47
66
|
.kui-toolbar-control-group[data-visibility="compact-only"] {
|
|
48
67
|
display: none;
|
|
49
68
|
}
|
|
@@ -80,9 +99,9 @@
|
|
|
80
99
|
}
|
|
81
100
|
.kui-toolbar-control-group[data-size="compact"] {
|
|
82
101
|
--kui-toolbar-group-size: 2.125rem;
|
|
83
|
-
--_kui-toolbar-slot-height: 2rem;
|
|
84
|
-
--_kui-toolbar-slot-overlap: 1px;
|
|
85
|
-
--_kui-toolbar-slot-radius: max(
|
|
102
|
+
--_kui-toolbar-control-group-slot-height: 2rem;
|
|
103
|
+
--_kui-toolbar-control-group-slot-overlap: 1px;
|
|
104
|
+
--_kui-toolbar-control-group-slot-radius: max(
|
|
86
105
|
0px,
|
|
87
106
|
calc(var(--kui-toolbar-group-radius) - 1px)
|
|
88
107
|
);
|
|
@@ -121,13 +140,15 @@
|
|
|
121
140
|
display: flex;
|
|
122
141
|
gap: var(--kui-space-xs);
|
|
123
142
|
}
|
|
124
|
-
.kui-toolbar-control-group[data-content="mixed"]
|
|
143
|
+
.kui-toolbar-control-group[data-content="mixed"]
|
|
144
|
+
wa-button:not(:where(.kui-popup-menu > *)) {
|
|
125
145
|
line-height: normal;
|
|
126
146
|
}
|
|
127
147
|
/* Toolbar controls never wrap. Web Awesome's label part is a plain block, so a
|
|
128
148
|
slotted icon (a block SVG) and its text would otherwise stack vertically —
|
|
129
149
|
lay them out on one row the way native mixed buttons already are. */
|
|
130
|
-
.kui-toolbar-control-group
|
|
150
|
+
.kui-toolbar-control-group
|
|
151
|
+
wa-button:not(:where(.kui-popup-menu > *))::part(label) {
|
|
131
152
|
display: inline-flex;
|
|
132
153
|
align-items: center;
|
|
133
154
|
gap: var(--kui-space-xs);
|
|
@@ -183,11 +204,15 @@
|
|
|
183
204
|
background: transparent;
|
|
184
205
|
}
|
|
185
206
|
|
|
186
|
-
.
|
|
187
|
-
|
|
207
|
+
/* The group lays out its own native and raw Web Awesome children. A composed
|
|
208
|
+
PopupMenu (`wa-dropdown.kui-popup-menu`) or Select sizes itself in the
|
|
209
|
+
group's context from its own stylesheet (popup-menu.css, select.css); the
|
|
210
|
+
group names those children by class only to key its own state on them. */
|
|
211
|
+
.kui-toolbar-control-group > :is(button, wa-button, .kui-toolbar-action-link),
|
|
212
|
+
.kui-toolbar-control-group > wa-dropdown:not(.kui-popup-menu) {
|
|
188
213
|
flex: 0 0 auto;
|
|
189
214
|
}
|
|
190
|
-
.kui-toolbar-control-group > wa-dropdown {
|
|
215
|
+
.kui-toolbar-control-group > wa-dropdown:not(.kui-popup-menu) {
|
|
191
216
|
display: inline-flex;
|
|
192
217
|
}
|
|
193
218
|
|
|
@@ -268,7 +293,7 @@
|
|
|
268
293
|
}
|
|
269
294
|
|
|
270
295
|
.kui-toolbar-control-group > button svg,
|
|
271
|
-
.kui-toolbar-control-group wa-button > svg,
|
|
296
|
+
.kui-toolbar-control-group wa-button:not(:where(.kui-popup-menu > *)) > svg,
|
|
272
297
|
.kui-toolbar-control-group > .kui-toolbar-action-link svg {
|
|
273
298
|
display: block;
|
|
274
299
|
width: 1rem;
|
|
@@ -276,34 +301,43 @@
|
|
|
276
301
|
}
|
|
277
302
|
|
|
278
303
|
/* Nested Web Awesome buttons take the group's control height, not the theme's
|
|
279
|
-
44px standalone control height.
|
|
280
|
-
|
|
304
|
+
44px standalone control height. The group's `wa-button` rules style only raw
|
|
305
|
+
buttons: a composed PopupMenu's trigger (`.kui-popup-menu > wa-button`) is
|
|
306
|
+
excluded inside a zero-specificity `:where()` and takes the same metrics
|
|
307
|
+
from popup-menu.css. */
|
|
308
|
+
.kui-toolbar-control-group wa-button:not(:where(.kui-popup-menu > *)) {
|
|
281
309
|
--wa-form-control-height: 2.5rem;
|
|
282
310
|
}
|
|
283
|
-
.kui-toolbar-control-group[data-size="compact"]
|
|
311
|
+
.kui-toolbar-control-group[data-size="compact"]
|
|
312
|
+
wa-button:not(:where(.kui-popup-menu > *)) {
|
|
284
313
|
--wa-form-control-height: 2rem;
|
|
285
314
|
}
|
|
286
315
|
|
|
287
316
|
.kui-toolbar-control-group > wa-button,
|
|
288
|
-
.kui-toolbar-control-group > wa-dropdown,
|
|
289
|
-
.kui-toolbar-control-group > wa-dropdown > wa-button,
|
|
290
|
-
.kui-toolbar-control-group
|
|
317
|
+
.kui-toolbar-control-group > wa-dropdown:not(.kui-popup-menu),
|
|
318
|
+
.kui-toolbar-control-group > wa-dropdown:not(.kui-popup-menu) > wa-button,
|
|
319
|
+
.kui-toolbar-control-group
|
|
320
|
+
> wa-dropdown:not(.kui-popup-menu)
|
|
321
|
+
> wa-button::part(base) {
|
|
291
322
|
min-width: 2.5rem;
|
|
292
323
|
height: 2.5rem;
|
|
293
324
|
}
|
|
294
325
|
.kui-toolbar-control-group[data-size="compact"] > button,
|
|
295
326
|
.kui-toolbar-control-group[data-size="compact"] > .kui-toolbar-action-link,
|
|
296
327
|
.kui-toolbar-control-group[data-size="compact"] > wa-button,
|
|
297
|
-
.kui-toolbar-control-group[data-size="compact"] > wa-dropdown,
|
|
298
|
-
.kui-toolbar-control-group[data-size="compact"] > wa-dropdown > wa-button,
|
|
299
328
|
.kui-toolbar-control-group[data-size="compact"]
|
|
300
|
-
> wa-dropdown
|
|
329
|
+
> wa-dropdown:not(.kui-popup-menu),
|
|
330
|
+
.kui-toolbar-control-group[data-size="compact"]
|
|
331
|
+
> wa-dropdown:not(.kui-popup-menu)
|
|
332
|
+
> wa-button,
|
|
333
|
+
.kui-toolbar-control-group[data-size="compact"]
|
|
334
|
+
> wa-dropdown:not(.kui-popup-menu)
|
|
301
335
|
> wa-button::part(base),
|
|
302
336
|
.kui-toolbar-control-group[data-size="compact"][data-nested-dropdown="true"]
|
|
303
|
-
wa-dropdown
|
|
337
|
+
wa-dropdown:not(.kui-popup-menu)
|
|
304
338
|
wa-button,
|
|
305
339
|
.kui-toolbar-control-group[data-size="compact"][data-nested-dropdown="true"]
|
|
306
|
-
wa-dropdown
|
|
340
|
+
wa-dropdown:not(.kui-popup-menu)
|
|
307
341
|
wa-button::part(base) {
|
|
308
342
|
min-width: 2rem;
|
|
309
343
|
height: 2rem;
|
|
@@ -320,16 +354,17 @@
|
|
|
320
354
|
/* `standard` keeps each menu's own standard inset: a raw wa-dropdown takes the
|
|
321
355
|
8px surface inset, while a PopupMenu keeps the Select listbox inset it
|
|
322
356
|
shares (popup-menu.css). The explicit compact and list-zero choices apply to
|
|
323
|
-
every nested menu. */
|
|
357
|
+
every nested menu; a PopupMenu applies them to itself (popup-menu.css). */
|
|
324
358
|
.kui-toolbar-control-group[data-menu-inset="standard"]
|
|
325
|
-
wa-dropdown:not(
|
|
359
|
+
wa-dropdown:not(.kui-popup-menu)::part(menu) {
|
|
326
360
|
padding: var(--kui-wa-surface-inset, 0.5rem);
|
|
327
361
|
}
|
|
328
|
-
.kui-toolbar-control-group[data-menu-inset="compact"]
|
|
362
|
+
.kui-toolbar-control-group[data-menu-inset="compact"]
|
|
363
|
+
wa-dropdown:not(.kui-popup-menu)::part(menu) {
|
|
329
364
|
padding: 0.25rem;
|
|
330
365
|
}
|
|
331
366
|
.kui-toolbar-control-group[data-menu-inset="list-zero"]
|
|
332
|
-
wa-dropdown::part(menu) {
|
|
367
|
+
wa-dropdown:not(.kui-popup-menu)::part(menu) {
|
|
333
368
|
padding: 0;
|
|
334
369
|
}
|
|
335
370
|
|
|
@@ -350,7 +385,7 @@
|
|
|
350
385
|
}
|
|
351
386
|
|
|
352
387
|
.kui-toolbar-control-group[data-size="compact"][data-content="mixed"]
|
|
353
|
-
> wa-dropdown,
|
|
388
|
+
> wa-dropdown:not(.kui-popup-menu),
|
|
354
389
|
.kui-toolbar-control-group[data-size="compact"][data-content="mixed"]
|
|
355
390
|
> wa-button {
|
|
356
391
|
margin: -2px;
|
|
@@ -361,26 +396,26 @@
|
|
|
361
396
|
the fixed 32px base centers both outside its host, painting the label across
|
|
362
397
|
the separator and the caret beyond the group border. */
|
|
363
398
|
.kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
|
|
364
|
-
> wa-dropdown
|
|
399
|
+
> wa-dropdown:not(.kui-popup-menu)
|
|
365
400
|
> wa-button,
|
|
366
401
|
.kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
|
|
367
|
-
> wa-dropdown
|
|
402
|
+
> wa-dropdown:not(.kui-popup-menu)
|
|
368
403
|
> wa-button::part(base) {
|
|
369
404
|
min-width: max-content;
|
|
370
405
|
}
|
|
371
406
|
.kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
|
|
372
|
-
> wa-dropdown
|
|
407
|
+
> wa-dropdown:not(.kui-popup-menu)
|
|
373
408
|
> wa-button::part(base) {
|
|
374
409
|
width: max-content;
|
|
375
410
|
}
|
|
376
411
|
|
|
377
412
|
.kui-toolbar-control-group[data-single="true"]
|
|
378
|
-
> wa-dropdown
|
|
413
|
+
> wa-dropdown:not(.kui-popup-menu)
|
|
379
414
|
> wa-button::part(base) {
|
|
380
415
|
width: max-content;
|
|
381
416
|
}
|
|
382
417
|
|
|
383
|
-
.kui-toolbar-control-group wa-button {
|
|
418
|
+
.kui-toolbar-control-group wa-button:not(:where(.kui-popup-menu > *)) {
|
|
384
419
|
display: inline-flex;
|
|
385
420
|
line-height: 0;
|
|
386
421
|
align-items: center;
|
|
@@ -388,7 +423,8 @@
|
|
|
388
423
|
--wa-color-fill-quiet: transparent;
|
|
389
424
|
}
|
|
390
425
|
|
|
391
|
-
.kui-toolbar-control-group
|
|
426
|
+
.kui-toolbar-control-group
|
|
427
|
+
wa-button:not(:where(.kui-popup-menu > *))::part(base) {
|
|
392
428
|
/* Match min-width to the 40px height so an icon-only button's highlight is at
|
|
393
429
|
least a circle, not a vertical oval — the host is 40px wide but the base
|
|
394
430
|
part was sizing to its ~32px content. Text/caret buttons grow past it. */
|
|
@@ -402,20 +438,29 @@
|
|
|
402
438
|
);
|
|
403
439
|
}
|
|
404
440
|
|
|
405
|
-
.kui-toolbar-control-group
|
|
441
|
+
.kui-toolbar-control-group
|
|
442
|
+
wa-button:not(:where(.kui-popup-menu > *)):hover::part(base) {
|
|
406
443
|
border-color: var(--kui-toolbar-control-border);
|
|
407
444
|
background-color: var(--kui-toolbar-control-hover-background);
|
|
408
445
|
}
|
|
409
446
|
|
|
410
447
|
.kui-toolbar-control-group[data-single="true"]:has(
|
|
411
|
-
> :is(
|
|
448
|
+
> :is(
|
|
449
|
+
button,
|
|
450
|
+
wa-button,
|
|
451
|
+
.kui-popup-menu,
|
|
452
|
+
wa-dropdown:not(.kui-popup-menu),
|
|
453
|
+
.kui-select,
|
|
454
|
+
.kui-toolbar-action-link
|
|
455
|
+
)
|
|
412
456
|
):hover {
|
|
413
457
|
background-color: var(--kui-toolbar-control-hover-background);
|
|
414
458
|
}
|
|
415
459
|
|
|
416
460
|
.kui-toolbar-control-group[data-single="true"]
|
|
417
461
|
> :is(button, wa-button, .kui-toolbar-action-link):hover,
|
|
418
|
-
.kui-toolbar-control-group[data-single="true"]
|
|
462
|
+
.kui-toolbar-control-group[data-single="true"]
|
|
463
|
+
wa-button:not(:where(.kui-popup-menu > *)):hover::part(base) {
|
|
419
464
|
border-color: transparent;
|
|
420
465
|
background: transparent;
|
|
421
466
|
}
|
|
@@ -425,7 +470,7 @@
|
|
|
425
470
|
inner layer inset from the border (KF-J9P1ZD — a heading toolbar's lone Close/
|
|
426
471
|
Done action). */
|
|
427
472
|
.kui-toolbar-control-group:not([data-single="true"]):has(
|
|
428
|
-
> :is(button, wa-button,
|
|
473
|
+
> :is(button, wa-button, .kui-select, .kui-toolbar-action-link):only-child
|
|
429
474
|
):hover {
|
|
430
475
|
background-color: var(--kui-toolbar-control-hover-background);
|
|
431
476
|
}
|
|
@@ -437,19 +482,13 @@
|
|
|
437
482
|
.kui-toolbar-control-group:not([data-single="true"]):has(
|
|
438
483
|
> :is(button, wa-button):only-child
|
|
439
484
|
)
|
|
440
|
-
wa-button:hover::part(base) {
|
|
485
|
+
> wa-button:hover::part(base) {
|
|
441
486
|
border-color: transparent;
|
|
442
487
|
background: transparent;
|
|
443
488
|
}
|
|
444
489
|
|
|
445
|
-
/* A toolbar Select beside other controls highlights its own pill on hover
|
|
446
|
-
|
|
447
|
-
group (above). */
|
|
448
|
-
.kui-toolbar-control-group:not([data-single="true"])
|
|
449
|
-
> wa-select:not(:only-child):hover::part(combobox) {
|
|
450
|
-
border-color: var(--kui-toolbar-control-border);
|
|
451
|
-
background: var(--kui-toolbar-control-hover-background);
|
|
452
|
-
}
|
|
490
|
+
/* A toolbar Select beside other controls highlights its own pill on hover
|
|
491
|
+
(select.css); a lone Select instead lifts the whole group (above). */
|
|
453
492
|
|
|
454
493
|
/* A plain <button> child paints its own box for the selected state. */
|
|
455
494
|
.kui-toolbar-control-group[data-single="false"] > button[aria-pressed="true"] {
|
|
@@ -481,25 +520,29 @@
|
|
|
481
520
|
outline-offset: 1px;
|
|
482
521
|
}
|
|
483
522
|
|
|
484
|
-
/* With per-control rings, a composed Select paints its own ring
|
|
485
|
-
was told the group owns it: nothing else would show focus. It matches the
|
|
486
|
-
sibling controls' ring and offset. While its listbox is open the popup shows
|
|
487
|
-
focus instead, so the trigger ring stays off, as a PopupMenu trigger's does. */
|
|
488
|
-
.kui-toolbar-control-group[data-focus-ring="control"]
|
|
489
|
-
> wa-select:not([open]):focus-within::part(combobox) {
|
|
490
|
-
outline: var(--kui-focus-ring);
|
|
491
|
-
outline-offset: 1px;
|
|
492
|
-
}
|
|
523
|
+
/* With per-control rings, a composed Select paints its own ring (select.css). */
|
|
493
524
|
|
|
494
525
|
.kui-toolbar-control-group[data-focus-ring="outline"]:focus-within:not(
|
|
495
|
-
:where(
|
|
526
|
+
:where(
|
|
527
|
+
:has(
|
|
528
|
+
.kui-select[open],
|
|
529
|
+
.kui-popup-menu[open],
|
|
530
|
+
wa-dropdown:not(.kui-popup-menu)[open]
|
|
531
|
+
)
|
|
532
|
+
)
|
|
496
533
|
) {
|
|
497
534
|
outline: var(--kui-focus-ring);
|
|
498
535
|
outline-offset: 1px;
|
|
499
536
|
}
|
|
500
537
|
|
|
501
538
|
.kui-toolbar-control-group[data-focus-ring="halo"]:focus-within:not(
|
|
502
|
-
:where(
|
|
539
|
+
:where(
|
|
540
|
+
:has(
|
|
541
|
+
.kui-select[open],
|
|
542
|
+
.kui-popup-menu[open],
|
|
543
|
+
wa-dropdown:not(.kui-popup-menu)[open]
|
|
544
|
+
)
|
|
545
|
+
)
|
|
503
546
|
) {
|
|
504
547
|
border-color: var(--kui-color-text-link);
|
|
505
548
|
box-shadow: 0 0 0 3px
|
|
@@ -517,14 +560,26 @@
|
|
|
517
560
|
descendant also owns the group ring. Kept as separate rules so an engine
|
|
518
561
|
without :has() keeps the :focus-within ring. */
|
|
519
562
|
.kui-toolbar-control-group[data-focus-ring="outline"]:has(:focus):not(
|
|
520
|
-
:where(
|
|
563
|
+
:where(
|
|
564
|
+
:has(
|
|
565
|
+
.kui-select[open],
|
|
566
|
+
.kui-popup-menu[open],
|
|
567
|
+
wa-dropdown:not(.kui-popup-menu)[open]
|
|
568
|
+
)
|
|
569
|
+
)
|
|
521
570
|
) {
|
|
522
571
|
outline: var(--kui-focus-ring);
|
|
523
572
|
outline-offset: 1px;
|
|
524
573
|
}
|
|
525
574
|
|
|
526
575
|
.kui-toolbar-control-group[data-focus-ring="halo"]:has(:focus):not(
|
|
527
|
-
:where(
|
|
576
|
+
:where(
|
|
577
|
+
:has(
|
|
578
|
+
.kui-select[open],
|
|
579
|
+
.kui-popup-menu[open],
|
|
580
|
+
wa-dropdown:not(.kui-popup-menu)[open]
|
|
581
|
+
)
|
|
582
|
+
)
|
|
528
583
|
) {
|
|
529
584
|
border-color: var(--kui-color-text-link);
|
|
530
585
|
box-shadow: 0 0 0 3px
|
|
@@ -12,6 +12,27 @@
|
|
|
12
12
|
align-items: center;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
/* In a Toolbar zone, a title fills the toolbar's control band (the
|
|
16
|
+
`--_kui-toolbar-band` the Toolbar provides) and centers its first line in
|
|
17
|
+
it; further lines of a wrapped title continue below the band. These rules
|
|
18
|
+
precede the size and wrap rules below, which keep their own minimum
|
|
19
|
+
heights. */
|
|
20
|
+
:is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing)
|
|
21
|
+
> .kui-toolbar-text {
|
|
22
|
+
height: auto;
|
|
23
|
+
min-height: var(--_kui-toolbar-band);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
:is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing)
|
|
27
|
+
> .kui-toolbar-text[data-wrap="true"] {
|
|
28
|
+
padding-block: max(0px, calc((var(--_kui-toolbar-band) - 1.25em) / 2));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* A filling title grows into its row's free space and truncates there. */
|
|
32
|
+
.kui-toolbar-text[data-fill="true"] {
|
|
33
|
+
flex: 1 1 auto;
|
|
34
|
+
}
|
|
35
|
+
|
|
15
36
|
/* The text lives in a block child, not directly in the flex box, so
|
|
16
37
|
`text-overflow: ellipsis` actually applies (it is a no-op on a flex item). */
|
|
17
38
|
.kui-toolbar-text__text {
|
package/dist/styles/toolbar.css
CHANGED
|
@@ -104,28 +104,28 @@
|
|
|
104
104
|
inset 1px 0 var(--_kui-toolbar-divider-left);
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
.kui-toolbar[divider-sides*="t"] {
|
|
107
|
+
.kui-toolbar:is([divider-sides*="t"], [data-scroll-divider*="t"]) {
|
|
108
108
|
--_kui-toolbar-divider-top: var(
|
|
109
109
|
--kui-toolbar-divider-color,
|
|
110
110
|
var(--kui-color-neutral-border-normal)
|
|
111
111
|
);
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
.kui-toolbar[divider-sides*="r"] {
|
|
114
|
+
.kui-toolbar:is([divider-sides*="r"], [data-scroll-divider*="r"]) {
|
|
115
115
|
--_kui-toolbar-divider-right: var(
|
|
116
116
|
--kui-toolbar-divider-color,
|
|
117
117
|
var(--kui-color-neutral-border-normal)
|
|
118
118
|
);
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
.kui-toolbar[divider-sides*="b"] {
|
|
121
|
+
.kui-toolbar:is([divider-sides*="b"], [data-scroll-divider*="b"]) {
|
|
122
122
|
--_kui-toolbar-divider-bottom: var(
|
|
123
123
|
--kui-toolbar-divider-color,
|
|
124
124
|
var(--kui-color-neutral-border-normal)
|
|
125
125
|
);
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
.kui-toolbar[divider-sides*="l"] {
|
|
128
|
+
.kui-toolbar:is([divider-sides*="l"], [data-scroll-divider*="l"]) {
|
|
129
129
|
--_kui-toolbar-divider-left: var(
|
|
130
130
|
--kui-toolbar-divider-color,
|
|
131
131
|
var(--kui-color-neutral-border-normal)
|
|
@@ -140,7 +140,10 @@
|
|
|
140
140
|
down. A growing item therefore never moves the other items or its own top.
|
|
141
141
|
Centering the zones in the toolbar row instead dropped every control to the
|
|
142
142
|
middle of a two-line title. The band is resolved here, on the toolbar, so a
|
|
143
|
-
compact group's own smaller group size never redefines it.
|
|
143
|
+
compact group's own smaller group size never redefines it.
|
|
144
|
+
`--_kui-toolbar-band` is context the toolbar provides: a ToolbarControlGroup
|
|
145
|
+
and a ToolbarText each center themselves in it from their own stylesheets
|
|
146
|
+
(toolbar-control-group.css, toolbar-text.css). */
|
|
144
147
|
.kui-toolbar {
|
|
145
148
|
--_kui-toolbar-band: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
|
|
146
149
|
}
|
|
@@ -155,33 +158,6 @@
|
|
|
155
158
|
gap: var(--kui-toolbar-gap, 0.5rem);
|
|
156
159
|
}
|
|
157
160
|
|
|
158
|
-
:is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing)
|
|
159
|
-
> [data-component="toolbar-control-group"] {
|
|
160
|
-
margin-block-start: max(
|
|
161
|
-
0px,
|
|
162
|
-
calc(
|
|
163
|
-
(
|
|
164
|
-
var(--_kui-toolbar-band) -
|
|
165
|
-
var(--kui-toolbar-group-size, calc(2px + 2.625rem))
|
|
166
|
-
) /
|
|
167
|
-
2
|
|
168
|
-
)
|
|
169
|
-
);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/* A title fills the band and centers its first line in it; further lines of a
|
|
173
|
-
wrapped title continue below the band. */
|
|
174
|
-
:is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing)
|
|
175
|
-
> [data-component="toolbar-text"] {
|
|
176
|
-
height: auto;
|
|
177
|
-
min-height: var(--_kui-toolbar-band);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
:is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing)
|
|
181
|
-
> [data-component="toolbar-text"][data-wrap="true"] {
|
|
182
|
-
padding-block: max(0px, calc((var(--_kui-toolbar-band) - 1.25em) / 2));
|
|
183
|
-
}
|
|
184
|
-
|
|
185
161
|
/* Pin each zone to its column so a display:none (empty) leading or center zone
|
|
186
162
|
doesn't let the trailing zone auto-place into the first column — which left an
|
|
187
163
|
extra gap + empty track to the trailing zone's right (KF-5BEF2M). The trailing
|