@kerfjs/ui 5.0.0-beta.49 → 5.0.0-beta.51
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 +69 -15
- package/ai/catalog-authoring.json +12 -1
- package/ai/catalog-authoring.schema.json +49 -1
- package/ai/compile-time-contracts-v1.json +19 -2
- package/ai/compile-time-contracts-v1.schema.json +1 -0
- package/ai/component-catalog-v2-overrides.json +7 -0
- package/ai/component-catalog-v2.d.ts +19 -1
- package/ai/component-catalog-v2.json +920 -149
- package/ai/component-catalog-v2.schema.json +33 -1
- package/ai/component-catalog.json +689 -153
- package/ai/component-catalog.schema.json +21 -1
- package/ai/public-api-signatures-v1.md +404 -184
- package/ai/skill.md +31 -14
- package/ai/webawesome-jsx-signatures-v1.md +1 -1
- package/analyzer/index.mjs +105 -35
- package/dist/app-tab.d.ts +3 -1
- package/dist/app-tab.js +1 -1
- package/dist/badge.d.ts +24 -0
- package/dist/badge.js +3 -0
- package/dist/badge.js.map +1 -0
- package/dist/browser/badge.js +3 -0
- package/dist/browser/list-header.js +1 -0
- package/dist/browser/state-banner.js +1 -0
- package/dist/catalog-resources.d.ts +2 -2
- package/dist/catalog.d.ts +47 -125
- package/dist/catalog.js +429 -262
- package/dist/catalog.js.map +1 -1
- package/dist/{chunk-W2FK7ZNY.js → chunk-4R777DUZ.js} +10 -2
- package/dist/chunk-4R777DUZ.js.map +1 -0
- package/dist/{chunk-OMSRSL3B.js → chunk-5FZZMIMD.js} +6 -4
- package/dist/chunk-5FZZMIMD.js.map +1 -0
- package/dist/{chunk-AQFWBG23.js → chunk-5PMGQDG7.js} +5 -3
- package/dist/chunk-5PMGQDG7.js.map +1 -0
- package/dist/{chunk-SOK5EUF7.js → chunk-6ZXOQEAN.js} +4 -2
- package/dist/chunk-6ZXOQEAN.js.map +1 -0
- package/dist/{chunk-I4V3UDSA.js → chunk-7GUQYHKA.js} +25 -6
- package/dist/chunk-7GUQYHKA.js.map +1 -0
- package/dist/{chunk-XKFRMGMW.js → chunk-7IUSV4XG.js} +3 -1
- package/dist/chunk-7IUSV4XG.js.map +1 -0
- package/dist/{chunk-IU4QUY5I.js → chunk-AEPXGCNF.js} +20 -3
- package/dist/chunk-AEPXGCNF.js.map +1 -0
- package/dist/{chunk-VDUJZF5G.js → chunk-CMUIXJZM.js} +2 -2
- package/dist/{chunk-VDUJZF5G.js.map → chunk-CMUIXJZM.js.map} +1 -1
- package/dist/{chunk-DAO2VFTT.js → chunk-D547PH4L.js} +7 -5
- package/dist/chunk-D547PH4L.js.map +1 -0
- package/dist/{chunk-2TYUFZUC.js → chunk-D7GWXIAS.js} +4 -2
- package/dist/chunk-D7GWXIAS.js.map +1 -0
- package/dist/{chunk-E34TE2ZI.js → chunk-DVZCMMB3.js} +6 -4
- package/dist/chunk-DVZCMMB3.js.map +1 -0
- package/dist/{chunk-6NDBE2OK.js → chunk-E36EVCKG.js} +5 -3
- package/dist/chunk-E36EVCKG.js.map +1 -0
- package/dist/chunk-EKYZCRCX.js +256 -0
- package/dist/chunk-EKYZCRCX.js.map +1 -0
- package/dist/{chunk-TIGSG6BX.js → chunk-HJKRCKDR.js} +7 -3
- package/dist/chunk-HJKRCKDR.js.map +1 -0
- package/dist/{chunk-Y6LYKFXY.js → chunk-HMQ2ZDGG.js} +5 -3
- package/dist/chunk-HMQ2ZDGG.js.map +1 -0
- package/dist/{chunk-UDHHKZWO.js → chunk-JM53SMVF.js} +9 -5
- package/dist/chunk-JM53SMVF.js.map +1 -0
- package/dist/{chunk-OGTJNHRG.js → chunk-JMGKM7RK.js} +6 -4
- package/dist/chunk-JMGKM7RK.js.map +1 -0
- package/dist/{chunk-GYGM363P.js → chunk-KX7DP2GO.js} +17 -7
- package/dist/chunk-KX7DP2GO.js.map +1 -0
- package/dist/{chunk-OL4TC3U2.js → chunk-MO56ZZLG.js} +6 -2
- package/dist/chunk-MO56ZZLG.js.map +1 -0
- package/dist/{chunk-VXFGMDA7.js → chunk-MTM43SJO.js} +16 -2
- package/dist/chunk-MTM43SJO.js.map +1 -0
- package/dist/{chunk-ZPWZIVI6.js → chunk-N3GKMPDW.js} +7 -3
- package/dist/chunk-N3GKMPDW.js.map +1 -0
- package/dist/{chunk-DYBPI5O2.js → chunk-NDUGJ4TU.js} +4 -2
- package/dist/chunk-NDUGJ4TU.js.map +1 -0
- package/dist/{chunk-I45QO2IZ.js → chunk-NMGTHYW3.js} +7 -5
- package/dist/chunk-NMGTHYW3.js.map +1 -0
- package/dist/{chunk-WSXUPSID.js → chunk-NN6GYOA2.js} +7 -3
- package/dist/chunk-NN6GYOA2.js.map +1 -0
- package/dist/{chunk-OGNE3OFT.js → chunk-NZXWU4R5.js} +24 -3
- package/dist/chunk-NZXWU4R5.js.map +1 -0
- package/dist/{chunk-V6GQKOX2.js → chunk-O3RCCSQJ.js} +6 -4
- package/dist/chunk-O3RCCSQJ.js.map +1 -0
- package/dist/{chunk-WVLMZ5SG.js → chunk-S4QRSBFI.js} +25 -3
- package/dist/chunk-S4QRSBFI.js.map +1 -0
- package/dist/{chunk-CK6P5AUK.js → chunk-UBH743HV.js} +10 -7
- package/dist/chunk-UBH743HV.js.map +1 -0
- package/dist/{chunk-T7DOWS6T.js → chunk-ULCDZTWL.js} +7 -4
- package/dist/chunk-ULCDZTWL.js.map +1 -0
- package/dist/{chunk-V6HCTCVD.js → chunk-UPZ6EEJN.js} +9 -5
- package/dist/chunk-UPZ6EEJN.js.map +1 -0
- package/dist/{chunk-CAB6NQ2T.js → chunk-VOCPXGQN.js} +3 -1
- package/dist/chunk-VOCPXGQN.js.map +1 -0
- package/dist/chunk-XD7DWYXG.js +34 -0
- package/dist/chunk-XD7DWYXG.js.map +1 -0
- package/dist/{chunk-B6JYRX3P.js → chunk-ZIYOJFZD.js} +43 -4
- package/dist/chunk-ZIYOJFZD.js.map +1 -0
- package/dist/{chunk-EYALJQQD.js → chunk-ZK5EGVFP.js} +4 -2
- package/dist/chunk-ZK5EGVFP.js.map +1 -0
- package/dist/{chunk-6WTETUZ6.js → chunk-ZLWQZUGF.js} +8 -2
- package/dist/chunk-ZLWQZUGF.js.map +1 -0
- package/dist/collapsible-panel.d.ts +4 -2
- package/dist/collapsible-panel.js +4 -2
- package/dist/collapsible-panel.js.map +1 -1
- package/dist/css-values.d.ts +39 -3
- package/dist/css-values.js +1 -1
- package/dist/disclosure-arrow.d.ts +3 -1
- package/dist/disclosure-arrow.js +1 -1
- package/dist/empty-state.d.ts +3 -1
- package/dist/empty-state.js +1 -1
- package/dist/floating-toolbar.d.ts +3 -1
- package/dist/floating-toolbar.js +1 -1
- package/dist/grid.d.ts +17 -1
- package/dist/grid.js +2 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.js +34 -33
- package/dist/list-action-row.d.ts +3 -1
- package/dist/list-action-row.js +1 -1
- package/dist/list-header.d.ts +6 -1
- package/dist/list-header.js +2 -1
- package/dist/list-inset-control.d.ts +3 -1
- package/dist/list-inset-control.js +1 -1
- package/dist/list-inset-text.d.ts +3 -1
- package/dist/list-inset-text.js +1 -1
- package/dist/list-item.d.ts +3 -1
- package/dist/list-item.js +1 -1
- package/dist/list.d.ts +23 -2
- package/dist/list.js +2 -1
- package/dist/loading-spinner.d.ts +3 -1
- package/dist/loading-spinner.js +1 -1
- package/dist/lucide-icon.d.ts +3 -1
- package/dist/lucide-icon.js +1 -1
- package/dist/nav-stack.d.ts +3 -1
- package/dist/nav-stack.js +1 -1
- package/dist/pane.d.ts +19 -2
- package/dist/pane.js +1 -1
- package/dist/resizable-region.d.ts +5 -2
- package/dist/resizable-region.js +1 -1
- package/dist/row.d.ts +21 -1
- package/dist/row.js +2 -1
- package/dist/segmented-control.d.ts +3 -1
- package/dist/segmented-control.js +1 -1
- package/dist/select.d.ts +16 -4
- package/dist/select.js +1 -1
- package/dist/skeleton.d.ts +3 -1
- package/dist/skeleton.js +1 -1
- package/dist/spacer.d.ts +3 -1
- package/dist/spacer.js +1 -1
- package/dist/split-view.d.ts +3 -1
- package/dist/split-view.js +24 -5
- package/dist/split-view.js.map +1 -1
- package/dist/state-banner.d.ts +3 -1
- package/dist/state-banner.js +2 -1
- package/dist/styles/badge.css +86 -0
- package/dist/styles/catalog/components/catalog-detail.css +35 -0
- package/dist/styles/catalog/components/catalog-example-stack.css +9 -0
- package/dist/styles/catalog/components/catalog-example.css +180 -0
- package/dist/styles/catalog/components/catalog-resource-footer.css +37 -0
- package/dist/styles/catalog/components/catalog-secondary-sections.css +38 -0
- package/dist/styles/catalog/components/catalog-section-list.css +22 -0
- package/dist/styles/catalog/components/catalog-sidebar.css +82 -0
- package/dist/styles/catalog/components/catalog-stage.css +60 -0
- package/dist/styles/catalog/components/catalog.css +22 -0
- package/dist/styles/catalog.css +10 -587
- package/dist/styles/collapsible-panel.css +132 -4
- package/dist/styles/document.css +23 -0
- package/dist/styles/foundation.css +21 -7
- package/dist/styles/grid.css +10 -0
- package/dist/styles/list-header.css +49 -60
- package/dist/styles/list-inset-control.css +8 -1
- package/dist/styles/list-item.css +6 -0
- package/dist/styles/list.css +11 -0
- package/dist/styles/nav-stack.css +89 -2
- package/dist/styles/pane.css +86 -1
- package/dist/styles/resizable-region.css +117 -5
- package/dist/styles/row.css +10 -0
- package/dist/styles/select.css +39 -7
- package/dist/styles/split-view.css +108 -2
- package/dist/styles/state-banner.css +0 -27
- package/dist/styles/styles.css +1 -0
- package/dist/styles/tab-bar.css +6 -1
- package/dist/styles/tab-scaffold.css +64 -1
- package/dist/styles/text.css +10 -0
- package/dist/styles/token-search-field.css +5 -40
- package/dist/styles/toolbar-control-group.css +198 -25
- package/dist/styles/toolbar-text.css +8 -1
- package/dist/styles/toolbar.css +169 -5
- package/dist/styles/webawesome.css +70 -9
- package/dist/styles/workbench.css +136 -4
- package/dist/sunken-panel.d.ts +3 -1
- package/dist/sunken-panel.js +1 -1
- package/dist/surface-scaffold.d.ts +6 -2
- package/dist/surface-scaffold.js +1 -1
- package/dist/tab-bar.d.ts +8 -1
- package/dist/tab-bar.js +1 -1
- package/dist/tab-scaffold.d.ts +3 -1
- package/dist/tab-scaffold.js +3 -1
- package/dist/tab-scaffold.js.map +1 -1
- package/dist/text.d.ts +9 -5
- package/dist/text.js +1 -1
- package/dist/token-search-field.d.ts +5 -1
- package/dist/token-search-field.js +1 -1
- package/dist/toolbar-control-group.d.ts +33 -3
- package/dist/toolbar-control-group.js +1 -1
- package/dist/toolbar-text.d.ts +3 -1
- package/dist/toolbar-text.js +1 -1
- package/dist/toolbar.d.ts +30 -1
- package/dist/toolbar.js +1 -1
- package/dist/types-CEsieBZi.d.ts +69 -0
- package/dist/value-table.d.ts +6 -2
- package/dist/value-table.js +1 -1
- package/dist/wire-resizable-regions.js +1 -1
- package/dist/wire-sidebar.d.ts +18 -3
- package/dist/wire-sidebar.js +95 -14
- package/dist/wire-sidebar.js.map +1 -1
- package/dist/wire-token-search-fields.js +1 -1
- package/dist/workbench.d.ts +3 -1
- package/dist/workbench.js +3 -1
- package/dist/workbench.js.map +1 -1
- package/docs/accessibility.md +56 -9
- package/docs/app-layouts.md +73 -0
- package/docs/catalog.md +48 -9
- package/docs/collapsible-panel.md +81 -8
- package/docs/component-contract.md +96 -28
- package/docs/component-integration.md +9 -4
- package/docs/component-selection.md +36 -15
- package/docs/design/templates/list/stack-dark.svg +1 -1
- package/docs/design/templates/list/stack.svg +1 -1
- package/docs/design/templates/list-dark.svg +1 -1
- package/docs/design/templates/list-header/action-dark.svg +1 -1
- package/docs/design/templates/list-header/action.svg +1 -1
- package/docs/design/templates/list-header/count-dark.svg +1 -1
- package/docs/design/templates/list-header/count.svg +1 -1
- package/docs/design/templates/list-header/inline-action-dark.svg +1 -1
- package/docs/design/templates/list-header/inline-action.svg +1 -1
- package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
- package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
- package/docs/design/templates/list-header-dark.svg +1 -1
- package/docs/design/templates/list-header.svg +1 -1
- package/docs/design/templates/list.svg +1 -1
- package/docs/design/templates/state-banner/info-badge-dark.svg +1 -1
- package/docs/design/templates/state-banner/info-badge.svg +1 -1
- package/docs/design/templates/state-banner-dark.svg +1 -1
- package/docs/design/templates/state-banner.svg +1 -1
- package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
- package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
- package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
- package/docs/design/templates/toolbar-control-group-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group.svg +1 -1
- package/docs/design/templates/toolbar-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/default-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/default.svg +1 -1
- package/docs/design/templates/toolbar-text/large-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/large.svg +1 -1
- package/docs/design/templates/toolbar-text/small-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/small.svg +1 -1
- package/docs/design/templates/toolbar-text-dark.svg +1 -1
- package/docs/design/templates/toolbar-text.svg +1 -1
- package/docs/design/templates/toolbar.svg +1 -1
- package/docs/design-philosophy.md +6 -5
- package/docs/document-baseline.md +31 -0
- package/docs/layout.md +86 -21
- package/docs/nav-stack.md +8 -0
- package/docs/recipes.md +78 -43
- package/docs/split-view.md +8 -0
- package/docs/tab-scaffold.md +4 -2
- package/docs/type-contracts.md +21 -16
- package/docs/ui-analyzer.md +19 -0
- package/docs/ui-evaluator.md +17 -0
- package/docs/ux-demo.md +8 -8
- package/docs/webawesome-theme.md +25 -6
- package/docs/workbench.md +20 -1
- package/evaluator/index.mjs +73 -8
- package/llms.txt +61 -23
- package/package.json +12 -3
- package/ux-demo/recipes/app-shell.tsx +244 -184
- package/ux-demo/recipes/collapsible-sidebar.tsx +175 -116
- package/ux-demo/recipes/compact-toolbar.tsx +119 -102
- package/ux-demo/recipes/composer-form.tsx +79 -69
- package/ux-demo/recipes/list-detail-dialog.tsx +120 -136
- package/ux-demo/recipes/list-workspace-states.tsx +85 -79
- package/ux-demo/recipes/loaders.ts +5 -2
- package/ux-demo/recipes/loading-inspector.tsx +151 -134
- package/ux-demo/recipes/navigation-sidebar.tsx +93 -80
- package/ux-demo/recipes/navigation-stack.tsx +33 -22
- package/ux-demo/recipes/types.ts +14 -0
- package/ux-demo/recipes/workspace-header.tsx +73 -57
- package/dist/chunk-2TYUFZUC.js.map +0 -1
- package/dist/chunk-6NDBE2OK.js.map +0 -1
- package/dist/chunk-6WTETUZ6.js.map +0 -1
- package/dist/chunk-AQFWBG23.js.map +0 -1
- package/dist/chunk-B6JYRX3P.js.map +0 -1
- package/dist/chunk-CAB6NQ2T.js.map +0 -1
- package/dist/chunk-CK6P5AUK.js.map +0 -1
- package/dist/chunk-DAO2VFTT.js.map +0 -1
- package/dist/chunk-DYBPI5O2.js.map +0 -1
- package/dist/chunk-E34TE2ZI.js.map +0 -1
- package/dist/chunk-EYALJQQD.js.map +0 -1
- package/dist/chunk-GYGM363P.js.map +0 -1
- package/dist/chunk-I45QO2IZ.js.map +0 -1
- package/dist/chunk-I4V3UDSA.js.map +0 -1
- package/dist/chunk-IU4QUY5I.js.map +0 -1
- package/dist/chunk-OGNE3OFT.js.map +0 -1
- package/dist/chunk-OGTJNHRG.js.map +0 -1
- package/dist/chunk-OL4TC3U2.js.map +0 -1
- package/dist/chunk-OMSRSL3B.js.map +0 -1
- package/dist/chunk-SOK5EUF7.js.map +0 -1
- package/dist/chunk-T7DOWS6T.js.map +0 -1
- package/dist/chunk-TIGSG6BX.js.map +0 -1
- package/dist/chunk-UDHHKZWO.js.map +0 -1
- package/dist/chunk-V6GQKOX2.js.map +0 -1
- package/dist/chunk-V6HCTCVD.js.map +0 -1
- package/dist/chunk-VXFGMDA7.js.map +0 -1
- package/dist/chunk-W2FK7ZNY.js.map +0 -1
- package/dist/chunk-WN52USHV.js +0 -115
- package/dist/chunk-WN52USHV.js.map +0 -1
- package/dist/chunk-WSXUPSID.js.map +0 -1
- package/dist/chunk-WVLMZ5SG.js.map +0 -1
- package/dist/chunk-XKFRMGMW.js.map +0 -1
- package/dist/chunk-Y6LYKFXY.js.map +0 -1
- package/dist/chunk-ZPWZIVI6.js.map +0 -1
- package/ux-demo/recipes/recipes.css +0 -453
package/dist/styles/pane.css
CHANGED
|
@@ -21,6 +21,47 @@
|
|
|
21
21
|
grid-template-rows: auto minmax(0, 1fr) auto;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
/* Safe areas. The pane root never pads, so its background and separators paint
|
|
25
|
+
through an unsafe area; its slots compensate on the edges the pane still
|
|
26
|
+
touches. The inherited `--kui-edge-inset-*` context says how far each edge
|
|
27
|
+
still reaches into an unsafe area: layouts clear an edge a region does not
|
|
28
|
+
reach, and an unset edge means the full device inset. Every slot clears the
|
|
29
|
+
context once it has applied it, so nested content never double-insets. */
|
|
30
|
+
.kui-pane {
|
|
31
|
+
--_kui-pane-safe-block-start: var(
|
|
32
|
+
--kui-edge-inset-block-start,
|
|
33
|
+
var(--kui-safe-area-block-start, env(safe-area-inset-top, 0px))
|
|
34
|
+
);
|
|
35
|
+
--_kui-pane-safe-block-end: var(
|
|
36
|
+
--kui-edge-inset-block-end,
|
|
37
|
+
var(--kui-safe-area-block-end, env(safe-area-inset-bottom, 0px))
|
|
38
|
+
);
|
|
39
|
+
--_kui-pane-safe-inline-start: var(
|
|
40
|
+
--kui-edge-inset-inline-start,
|
|
41
|
+
var(--kui-safe-area-inline-start, env(safe-area-inset-left, 0px))
|
|
42
|
+
);
|
|
43
|
+
--_kui-pane-safe-inline-end: var(
|
|
44
|
+
--kui-edge-inset-inline-end,
|
|
45
|
+
var(--kui-safe-area-inline-end, env(safe-area-inset-right, 0px))
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.kui-pane[data-safe-area-block-start="false"] {
|
|
50
|
+
--_kui-pane-safe-block-start: 0px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.kui-pane[data-safe-area-block-end="false"] {
|
|
54
|
+
--_kui-pane-safe-block-end: 0px;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.kui-pane[data-safe-area-inline-start="false"] {
|
|
58
|
+
--_kui-pane-safe-inline-start: 0px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.kui-pane[data-safe-area-inline-end="false"] {
|
|
62
|
+
--_kui-pane-safe-inline-end: 0px;
|
|
63
|
+
}
|
|
64
|
+
|
|
24
65
|
.kui-pane[data-separator-block-start="true"] {
|
|
25
66
|
--kui-pane-separator-block-start-width: var(--kui-pane-separator-width, 1px);
|
|
26
67
|
}
|
|
@@ -37,26 +78,70 @@
|
|
|
37
78
|
--kui-pane-separator-inline-end-width: var(--kui-pane-separator-width, 1px);
|
|
38
79
|
}
|
|
39
80
|
|
|
81
|
+
/* Child selectors outrank the `.kui-content` reset the content slot also carries. */
|
|
82
|
+
.kui-pane > :is(.kui-pane__header, .kui-pane__content, .kui-pane__footer) {
|
|
83
|
+
--kui-edge-inset-block-start: 0px;
|
|
84
|
+
--kui-edge-inset-block-end: 0px;
|
|
85
|
+
--kui-edge-inset-inline-start: 0px;
|
|
86
|
+
--kui-edge-inset-inline-end: 0px;
|
|
87
|
+
padding-inline: var(--_kui-pane-safe-inline-start)
|
|
88
|
+
var(--_kui-pane-safe-inline-end);
|
|
89
|
+
}
|
|
90
|
+
|
|
40
91
|
.kui-pane__header,
|
|
41
92
|
.kui-pane__toolbar {
|
|
42
93
|
display: flex;
|
|
43
94
|
min-width: 0;
|
|
95
|
+
padding-block-start: var(--_kui-pane-safe-block-start);
|
|
44
96
|
flex-direction: column;
|
|
45
97
|
grid-area: header;
|
|
46
98
|
}
|
|
47
99
|
|
|
100
|
+
/* A header or footer holding only a Toolbar hands the toolbar its inline edges
|
|
101
|
+
instead of padding around it, so the toolbar's dividers still reach the
|
|
102
|
+
pane edge while its controls clear the unsafe area. */
|
|
103
|
+
.kui-pane
|
|
104
|
+
> :is(.kui-pane__header, .kui-pane__footer):has(
|
|
105
|
+
> [data-component="toolbar"]:only-child
|
|
106
|
+
) {
|
|
107
|
+
--kui-edge-inset-inline-start: var(--_kui-pane-safe-inline-start);
|
|
108
|
+
--kui-edge-inset-inline-end: var(--_kui-pane-safe-inline-end);
|
|
109
|
+
padding-inline: 0;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* The scrolling content takes the block insets as padding inside the scroller
|
|
113
|
+
(and matching scroll padding), so content scrolls under an unsafe edge yet
|
|
114
|
+
its first and last items can always be scrolled clear of it. A header or
|
|
115
|
+
footer already owns that edge. */
|
|
48
116
|
.kui-pane__content {
|
|
117
|
+
--_kui-pane-content-block-start: var(--_kui-pane-safe-block-start);
|
|
118
|
+
--_kui-pane-content-block-end: var(--_kui-pane-safe-block-end);
|
|
49
119
|
min-width: 0;
|
|
50
120
|
min-height: 0;
|
|
51
|
-
padding: 0;
|
|
52
121
|
overflow: auto;
|
|
53
122
|
grid-area: content;
|
|
54
123
|
overscroll-behavior: contain;
|
|
124
|
+
scroll-padding-block: var(--_kui-pane-content-block-start)
|
|
125
|
+
var(--_kui-pane-content-block-end);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.kui-pane > .kui-pane__content {
|
|
129
|
+
padding-block: var(--_kui-pane-content-block-start)
|
|
130
|
+
var(--_kui-pane-content-block-end);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.kui-pane__header ~ .kui-pane__content {
|
|
134
|
+
--_kui-pane-content-block-start: 0px;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.kui-pane__content:has(~ .kui-pane__footer) {
|
|
138
|
+
--_kui-pane-content-block-end: 0px;
|
|
55
139
|
}
|
|
56
140
|
|
|
57
141
|
.kui-pane__footer {
|
|
58
142
|
display: flex;
|
|
59
143
|
min-width: 0;
|
|
144
|
+
padding-block-end: var(--_kui-pane-safe-block-end);
|
|
60
145
|
flex-direction: column;
|
|
61
146
|
grid-area: footer;
|
|
62
147
|
}
|
|
@@ -2,15 +2,25 @@
|
|
|
2
2
|
--kui-resizable-region-separator-color: var(--kui-color-border);
|
|
3
3
|
--kui-resizable-region-handle-color: var(--kui-color-neutral-on-quiet);
|
|
4
4
|
--kui-resizable-region-handle-active-color: var(--kui-color-text-link);
|
|
5
|
+
/* Extra track a horizontal region adds when it reaches an unsafe screen edge,
|
|
6
|
+
so its surface paints through the unsafe area while its committed size
|
|
7
|
+
stays the content width. A composing layout sets it on the region (a
|
|
8
|
+
SplitView list does); it never inherits into a nested region. */
|
|
9
|
+
--kui-resizable-region-edge-extent: 0px;
|
|
5
10
|
position: relative;
|
|
6
11
|
display: flex;
|
|
7
12
|
min-width: 0;
|
|
8
13
|
min-height: 0;
|
|
9
14
|
}
|
|
10
15
|
.kui-resizable-region[data-axis="horizontal"] {
|
|
11
|
-
width:
|
|
16
|
+
width: calc(
|
|
17
|
+
var(--kui-resizable-region-size) + var(--kui-resizable-region-edge-extent)
|
|
18
|
+
);
|
|
12
19
|
height: 100%;
|
|
13
|
-
flex: 0 0
|
|
20
|
+
flex: 0 0
|
|
21
|
+
calc(
|
|
22
|
+
var(--kui-resizable-region-size) + var(--kui-resizable-region-edge-extent)
|
|
23
|
+
);
|
|
14
24
|
}
|
|
15
25
|
.kui-resizable-region[data-axis="vertical"] {
|
|
16
26
|
width: 100%;
|
|
@@ -21,12 +31,25 @@
|
|
|
21
31
|
.kui-resizable-region[data-collapsed="true"] {
|
|
22
32
|
overflow: visible;
|
|
23
33
|
}
|
|
34
|
+
/* The content spans the whole region, like the separator does. A vertical
|
|
35
|
+
stack keeps several children at their natural height, while a lone child —
|
|
36
|
+
typically a Pane or a layout — fills the region, so it owns its scrolling
|
|
37
|
+
and reaches the region's far edge. */
|
|
24
38
|
.kui-resizable-region__content {
|
|
39
|
+
display: flex;
|
|
40
|
+
flex-direction: column;
|
|
25
41
|
width: 100%;
|
|
26
42
|
min-width: 0;
|
|
27
43
|
min-height: 0;
|
|
28
44
|
overflow: hidden;
|
|
29
45
|
}
|
|
46
|
+
.kui-resizable-region[data-axis="vertical"] > .kui-resizable-region__content {
|
|
47
|
+
flex-grow: 1;
|
|
48
|
+
}
|
|
49
|
+
.kui-resizable-region__content > :only-child {
|
|
50
|
+
flex: 1 1 auto;
|
|
51
|
+
min-height: 0;
|
|
52
|
+
}
|
|
30
53
|
.kui-resizable-region[data-content-overflow="auto"]
|
|
31
54
|
> .kui-resizable-region__content {
|
|
32
55
|
overflow: auto;
|
|
@@ -62,8 +85,14 @@
|
|
|
62
85
|
[data-collapse-motion="none"]
|
|
63
86
|
)
|
|
64
87
|
> .kui-resizable-region__content {
|
|
65
|
-
width:
|
|
66
|
-
|
|
88
|
+
width: calc(
|
|
89
|
+
var(--kui-resizable-region-expanded-size) +
|
|
90
|
+
var(--kui-resizable-region-edge-extent)
|
|
91
|
+
);
|
|
92
|
+
min-width: calc(
|
|
93
|
+
var(--kui-resizable-region-expanded-size) +
|
|
94
|
+
var(--kui-resizable-region-edge-extent)
|
|
95
|
+
);
|
|
67
96
|
}
|
|
68
97
|
.kui-resizable-region[data-axis="vertical"][data-collapse-motion]:not(
|
|
69
98
|
[data-collapse-motion="none"]
|
|
@@ -72,6 +101,25 @@
|
|
|
72
101
|
height: var(--kui-resizable-region-expanded-size);
|
|
73
102
|
min-height: var(--kui-resizable-region-expanded-size);
|
|
74
103
|
}
|
|
104
|
+
/* While expanded, the sliding content follows the region's actual track, so a
|
|
105
|
+
region its parent clamps (a max-width, a narrow container) never shows
|
|
106
|
+
content past its separator. The fixed expanded size above only matters once
|
|
107
|
+
the track collapses to zero and the content slides out. */
|
|
108
|
+
.kui-resizable-region[data-axis="horizontal"][data-collapse-motion]:not(
|
|
109
|
+
[data-collapsed="true"]
|
|
110
|
+
)
|
|
111
|
+
> .kui-resizable-region__content {
|
|
112
|
+
width: 100%;
|
|
113
|
+
min-width: 0;
|
|
114
|
+
}
|
|
115
|
+
.kui-resizable-region[data-axis="vertical"][data-collapse-motion]:not(
|
|
116
|
+
[data-collapsed="true"]
|
|
117
|
+
)
|
|
118
|
+
> .kui-resizable-region__content {
|
|
119
|
+
height: auto;
|
|
120
|
+
min-height: 0;
|
|
121
|
+
flex: 1 1 0;
|
|
122
|
+
}
|
|
75
123
|
.kui-resizable-region[data-axis="horizontal"][data-edge="end"][data-collapsed="true"]
|
|
76
124
|
> .kui-resizable-region__content {
|
|
77
125
|
transform: translateX(-100%);
|
|
@@ -157,6 +205,30 @@
|
|
|
157
205
|
display: none;
|
|
158
206
|
}
|
|
159
207
|
|
|
208
|
+
@container (max-width: 44rem) {
|
|
209
|
+
.kui-resizable-region[data-responsive-fill-at="narrow"] {
|
|
210
|
+
width: 100%;
|
|
211
|
+
flex: 1 1 auto;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.kui-resizable-region[data-responsive-fill-at="narrow"]
|
|
215
|
+
> .kui-resizable-region__handle {
|
|
216
|
+
display: none;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
@container (max-width: 28rem) {
|
|
221
|
+
.kui-resizable-region[data-responsive-fill-at="compact"] {
|
|
222
|
+
width: 100%;
|
|
223
|
+
flex: 1 1 auto;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.kui-resizable-region[data-responsive-fill-at="compact"]
|
|
227
|
+
> .kui-resizable-region__handle {
|
|
228
|
+
display: none;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
160
232
|
/* A collapsed panel can supply its own affordance while Kerf owns consistent,
|
|
161
233
|
safe-area-aware viewport placement. */
|
|
162
234
|
.kui-resizable-region__restore {
|
|
@@ -235,14 +307,54 @@
|
|
|
235
307
|
.kui-resizable-region__handle {
|
|
236
308
|
top: -10px;
|
|
237
309
|
}
|
|
310
|
+
/* wireResizableRegions sets data-handle-inset when a parent clamps the track
|
|
311
|
+
and the separator has less room past it than the handle's overhang, which
|
|
312
|
+
puts it at the parent's edge. The handle then sits wholly inside the region
|
|
313
|
+
and keeps its separator line on the region's edge, so a clipping ancestor
|
|
314
|
+
never cuts off half of the hit target or its focus ring. */
|
|
315
|
+
.kui-resizable-region[data-handle-inset][data-axis="horizontal"][data-edge="end"]
|
|
316
|
+
> .kui-resizable-region__handle {
|
|
317
|
+
right: 0;
|
|
318
|
+
}
|
|
319
|
+
.kui-resizable-region[data-handle-inset][data-axis="horizontal"][data-edge="end"]
|
|
320
|
+
> .kui-resizable-region__handle::before {
|
|
321
|
+
right: 0;
|
|
322
|
+
}
|
|
323
|
+
.kui-resizable-region[data-handle-inset][data-axis="horizontal"][data-edge="start"]
|
|
324
|
+
> .kui-resizable-region__handle {
|
|
325
|
+
left: 0;
|
|
326
|
+
}
|
|
327
|
+
.kui-resizable-region[data-handle-inset][data-axis="horizontal"][data-edge="start"]
|
|
328
|
+
> .kui-resizable-region__handle::before {
|
|
329
|
+
left: 0;
|
|
330
|
+
}
|
|
331
|
+
.kui-resizable-region[data-handle-inset][data-axis="vertical"][data-edge="end"]
|
|
332
|
+
> .kui-resizable-region__handle {
|
|
333
|
+
bottom: 0;
|
|
334
|
+
}
|
|
335
|
+
.kui-resizable-region[data-handle-inset][data-axis="vertical"][data-edge="end"]
|
|
336
|
+
> .kui-resizable-region__handle::before {
|
|
337
|
+
bottom: 0;
|
|
338
|
+
}
|
|
339
|
+
.kui-resizable-region[data-handle-inset][data-axis="vertical"][data-edge="start"]
|
|
340
|
+
> .kui-resizable-region__handle {
|
|
341
|
+
top: 0;
|
|
342
|
+
}
|
|
343
|
+
.kui-resizable-region[data-handle-inset][data-axis="vertical"][data-edge="start"]
|
|
344
|
+
> .kui-resizable-region__handle::before {
|
|
345
|
+
top: 0;
|
|
346
|
+
}
|
|
238
347
|
.kui-resizable-region__handle:hover,
|
|
239
348
|
.kui-resizable-region__handle:focus-visible {
|
|
240
349
|
color: var(--kui-resizable-region-handle-active-color);
|
|
241
350
|
}
|
|
351
|
+
/* The ring stays wholly inside the handle's box (the focus ring is 3px).
|
|
352
|
+
The handle runs the region's full length, and those ends usually meet a
|
|
353
|
+
clipping ancestor's edge, which would otherwise shave the ring there. */
|
|
242
354
|
.kui-resizable-region__handle:focus-visible {
|
|
243
355
|
border-radius: var(--kui-radius-s);
|
|
244
356
|
outline: var(--kui-focus-ring);
|
|
245
|
-
outline-offset: -
|
|
357
|
+
outline-offset: -3px;
|
|
246
358
|
}
|
|
247
359
|
.kui-resizable-region__handle-icon {
|
|
248
360
|
position: relative;
|
package/dist/styles/row.css
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
.kui-row {
|
|
2
2
|
--kui-row-gap: var(--kui-layout-item-gap, 0.5rem);
|
|
3
|
+
/* Private per-instance values are reset on every Row so a nested Row never
|
|
4
|
+
inherits its ancestor's; the inline style overrides them per prop. */
|
|
5
|
+
--_kui-row-gap: var(--kui-row-gap);
|
|
6
|
+
--_kui-row-flex: 0 1 auto;
|
|
3
7
|
--_kui-row-inset-top: 0;
|
|
4
8
|
--_kui-row-inset-right: 0;
|
|
5
9
|
--_kui-row-inset-bottom: 0;
|
|
@@ -99,3 +103,9 @@
|
|
|
99
103
|
align-items: baseline;
|
|
100
104
|
align-content: baseline;
|
|
101
105
|
}
|
|
106
|
+
|
|
107
|
+
/* `fill`: the layout root of a definite-height parent (an app root or a
|
|
108
|
+
fixed-height frame) takes its full height. Inside a flex layout use `flex`. */
|
|
109
|
+
.kui-row[data-fill="true"] {
|
|
110
|
+
height: 100%;
|
|
111
|
+
}
|
package/dist/styles/select.css
CHANGED
|
@@ -39,13 +39,48 @@
|
|
|
39
39
|
outline: none;
|
|
40
40
|
box-shadow: none;
|
|
41
41
|
}
|
|
42
|
+
/* An icon-only trigger shows the selected icon and the disclosure caret as one
|
|
43
|
+
pill, the same control family as a toolbar popup-menu dropdown (an icon +
|
|
44
|
+
caret wa-button): symmetric 8px inline padding, 12px from the icon to the
|
|
45
|
+
caret's 20px box, the caret glyph size, and the control height, so the icon
|
|
46
|
+
sits left of center to balance the caret. Inside a ToolbarControlGroup the
|
|
47
|
+
trigger takes the group's control-slot height, overlap, and radius
|
|
48
|
+
(`--_kui-toolbar-slot-*`) so it is inset evenly on every side, the group
|
|
49
|
+
sizes to the trigger (wider than tall), and the group-owned focus ring
|
|
50
|
+
stays concentric with it. */
|
|
42
51
|
.kui-select[data-selected-presentation="icon-only"] {
|
|
43
|
-
|
|
52
|
+
--_kui-select-height: 2.75rem;
|
|
53
|
+
width: max-content;
|
|
54
|
+
}
|
|
55
|
+
.kui-select[data-selected-presentation="icon-only"][data-size="compact"] {
|
|
56
|
+
--_kui-select-height: 2rem;
|
|
44
57
|
}
|
|
45
58
|
.kui-select[data-selected-presentation="icon-only"]::part(combobox) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
59
|
+
min-height: var(--_kui-toolbar-slot-height, var(--_kui-select-height));
|
|
60
|
+
padding-inline: 0.5rem;
|
|
61
|
+
border-radius: var(
|
|
62
|
+
--kui-toolbar-item-radius,
|
|
63
|
+
var(--kui-layout-rounded-radius, calc(1px + 0.6875rem))
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
/* Only a lone trigger takes the group's slot overlap and radius; beside
|
|
67
|
+
sibling controls it keeps the group's gap, end insets, and item radius, as
|
|
68
|
+
they do. */
|
|
69
|
+
.kui-select[data-selected-presentation="icon-only"]:only-child {
|
|
70
|
+
margin-inline: calc(var(--_kui-toolbar-slot-overlap, 0px) * -1);
|
|
71
|
+
}
|
|
72
|
+
.kui-select[data-selected-presentation="icon-only"]:only-child::part(combobox) {
|
|
73
|
+
border-radius: var(
|
|
74
|
+
--_kui-toolbar-slot-radius,
|
|
75
|
+
var(--kui-layout-rounded-radius, calc(1px + 0.6875rem))
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
/* The popup-menu wa-button draws the same chevron glyph at 0.875em inside a
|
|
79
|
+
20px box; match its box, spacing, and glyph size rather than the smaller
|
|
80
|
+
form-field disclosure scale. */
|
|
81
|
+
.kui-select[data-selected-presentation="icon-only"]::part(expand-icon) {
|
|
82
|
+
margin-inline-start: 0.75rem;
|
|
83
|
+
transform: scale(0.875);
|
|
49
84
|
}
|
|
50
85
|
.kui-select[data-selected-presentation="icon-only"]::part(display-input) {
|
|
51
86
|
position: absolute;
|
|
@@ -183,9 +218,6 @@
|
|
|
183
218
|
width: max-content;
|
|
184
219
|
max-width: 100%;
|
|
185
220
|
}
|
|
186
|
-
.kui-select__placeholder-box .kui-skeleton {
|
|
187
|
-
max-width: 10rem;
|
|
188
|
-
}
|
|
189
221
|
.kui-select__placeholder-hint {
|
|
190
222
|
display: block;
|
|
191
223
|
margin-block-start: 0.25rem;
|
|
@@ -5,6 +5,26 @@
|
|
|
5
5
|
height: 100%;
|
|
6
6
|
overflow: hidden;
|
|
7
7
|
background: var(--kui-color-surface);
|
|
8
|
+
/* Safe areas: the list column grows by the inline-start unsafe inset and each
|
|
9
|
+
pane compensates only for the edges it touches — never the shared interior
|
|
10
|
+
edge. The compact form hands the context to its NavStack. See pane.css for
|
|
11
|
+
the `--kui-edge-inset-*` edge context. */
|
|
12
|
+
--_kui-split-view-safe-block-start: var(
|
|
13
|
+
--kui-edge-inset-block-start,
|
|
14
|
+
var(--kui-safe-area-block-start, env(safe-area-inset-top, 0px))
|
|
15
|
+
);
|
|
16
|
+
--_kui-split-view-safe-block-end: var(
|
|
17
|
+
--kui-edge-inset-block-end,
|
|
18
|
+
var(--kui-safe-area-block-end, env(safe-area-inset-bottom, 0px))
|
|
19
|
+
);
|
|
20
|
+
--_kui-split-view-safe-inline-start: var(
|
|
21
|
+
--kui-edge-inset-inline-start,
|
|
22
|
+
var(--kui-safe-area-inline-start, env(safe-area-inset-left, 0px))
|
|
23
|
+
);
|
|
24
|
+
--_kui-split-view-safe-inline-end: var(
|
|
25
|
+
--kui-edge-inset-inline-end,
|
|
26
|
+
var(--kui-safe-area-inline-end, env(safe-area-inset-right, 0px))
|
|
27
|
+
);
|
|
8
28
|
}
|
|
9
29
|
|
|
10
30
|
/* The list pane; when not resizable it takes an intrinsic column and the detail
|
|
@@ -13,11 +33,14 @@
|
|
|
13
33
|
min-width: 0;
|
|
14
34
|
min-height: 0;
|
|
15
35
|
flex: 0 0 auto;
|
|
16
|
-
width:
|
|
36
|
+
width: calc(
|
|
37
|
+
var(--kui-split-view-list-width, 20rem) +
|
|
38
|
+
var(--_kui-split-view-safe-inline-start)
|
|
39
|
+
);
|
|
17
40
|
border-inline-end: 1px solid var(--kui-color-border);
|
|
18
41
|
}
|
|
19
42
|
|
|
20
|
-
.kui-split-
|
|
43
|
+
.kui-split-view__list[data-resizable="true"] {
|
|
21
44
|
width: 100%;
|
|
22
45
|
border-inline-end: 0;
|
|
23
46
|
}
|
|
@@ -28,6 +51,89 @@
|
|
|
28
51
|
min-height: 0;
|
|
29
52
|
}
|
|
30
53
|
|
|
54
|
+
/* A resizable list keeps its committed size as content width; its region's
|
|
55
|
+
track grows by the unsafe inset it reaches. A collapsed region stays shut. */
|
|
56
|
+
.kui-split-view[data-split-mode="split"]
|
|
57
|
+
> [data-component="resizable-region"]:not([data-collapsed="true"]) {
|
|
58
|
+
--kui-resizable-region-edge-extent: var(--_kui-split-view-safe-inline-start);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.kui-split-view__list,
|
|
62
|
+
.kui-split-view__detail {
|
|
63
|
+
--kui-edge-inset-block-start: var(--_kui-split-view-safe-block-start);
|
|
64
|
+
--kui-edge-inset-block-end: var(--_kui-split-view-safe-block-end);
|
|
65
|
+
--kui-edge-inset-inline-start: var(--_kui-split-view-safe-inline-start);
|
|
66
|
+
--kui-edge-inset-inline-end: var(--_kui-split-view-safe-inline-end);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.kui-split-view__list {
|
|
70
|
+
--kui-edge-inset-inline-end: 0px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.kui-split-view__detail {
|
|
74
|
+
--kui-edge-inset-inline-start: 0px;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* Each pane pads for the edges it touches unless its only child is a Pane or
|
|
78
|
+
layout, which then owns the insets. */
|
|
79
|
+
.kui-split-view__list:not(
|
|
80
|
+
:has(
|
|
81
|
+
> :is(
|
|
82
|
+
[data-component="pane"],
|
|
83
|
+
[data-component="nav-stack"],
|
|
84
|
+
[data-component="split-view"],
|
|
85
|
+
[data-component="workbench"],
|
|
86
|
+
[data-component="tab-scaffold"]
|
|
87
|
+
):only-child
|
|
88
|
+
)
|
|
89
|
+
),
|
|
90
|
+
.kui-split-view__detail:not(
|
|
91
|
+
:has(
|
|
92
|
+
> :is(
|
|
93
|
+
[data-component="pane"],
|
|
94
|
+
[data-component="nav-stack"],
|
|
95
|
+
[data-component="split-view"],
|
|
96
|
+
[data-component="workbench"],
|
|
97
|
+
[data-component="tab-scaffold"]
|
|
98
|
+
):only-child
|
|
99
|
+
)
|
|
100
|
+
) {
|
|
101
|
+
padding-block: var(--kui-edge-inset-block-start)
|
|
102
|
+
var(--kui-edge-inset-block-end);
|
|
103
|
+
padding-inline: var(--kui-edge-inset-inline-start)
|
|
104
|
+
var(--kui-edge-inset-inline-end);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.kui-split-view__list:not(
|
|
108
|
+
:has(
|
|
109
|
+
> :is(
|
|
110
|
+
[data-component="pane"],
|
|
111
|
+
[data-component="nav-stack"],
|
|
112
|
+
[data-component="split-view"],
|
|
113
|
+
[data-component="workbench"],
|
|
114
|
+
[data-component="tab-scaffold"]
|
|
115
|
+
):only-child
|
|
116
|
+
)
|
|
117
|
+
)
|
|
118
|
+
> *,
|
|
119
|
+
.kui-split-view__detail:not(
|
|
120
|
+
:has(
|
|
121
|
+
> :is(
|
|
122
|
+
[data-component="pane"],
|
|
123
|
+
[data-component="nav-stack"],
|
|
124
|
+
[data-component="split-view"],
|
|
125
|
+
[data-component="workbench"],
|
|
126
|
+
[data-component="tab-scaffold"]
|
|
127
|
+
):only-child
|
|
128
|
+
)
|
|
129
|
+
)
|
|
130
|
+
> * {
|
|
131
|
+
--kui-edge-inset-block-start: 0px;
|
|
132
|
+
--kui-edge-inset-block-end: 0px;
|
|
133
|
+
--kui-edge-inset-inline-start: 0px;
|
|
134
|
+
--kui-edge-inset-inline-end: 0px;
|
|
135
|
+
}
|
|
136
|
+
|
|
31
137
|
/* Compact mode is a full-bleed NavStack. */
|
|
32
138
|
.kui-split-view--compact {
|
|
33
139
|
display: block;
|
|
@@ -21,14 +21,6 @@
|
|
|
21
21
|
)
|
|
22
22
|
);
|
|
23
23
|
--_kui-state-banner-detail: var(--kui-state-banner-detail, currentColor);
|
|
24
|
-
--_kui-state-banner-badge-background: var(
|
|
25
|
-
--kui-state-banner-badge-background,
|
|
26
|
-
var(--_kui-state-banner-foreground)
|
|
27
|
-
);
|
|
28
|
-
--_kui-state-banner-badge-foreground: var(
|
|
29
|
-
--kui-state-banner-badge-foreground,
|
|
30
|
-
var(--kui-color-surface)
|
|
31
|
-
);
|
|
32
24
|
--_kui-state-banner-action-background: var(
|
|
33
25
|
--kui-state-banner-action-background,
|
|
34
26
|
color-mix(in srgb, var(--kui-color-surface) 52%, transparent)
|
|
@@ -151,22 +143,6 @@
|
|
|
151
143
|
.kui-state-banner__copy strong {
|
|
152
144
|
font-size: var(--kui-font-xs);
|
|
153
145
|
}
|
|
154
|
-
.kui-state-banner__badge {
|
|
155
|
-
display: inline-grid;
|
|
156
|
-
min-width: 1.25rem;
|
|
157
|
-
min-height: 1.25rem;
|
|
158
|
-
padding-inline: 0.35rem;
|
|
159
|
-
box-sizing: border-box;
|
|
160
|
-
border-radius: var(--kui-radius-pill);
|
|
161
|
-
color: var(--_kui-state-banner-badge-foreground);
|
|
162
|
-
background: var(--_kui-state-banner-badge-background);
|
|
163
|
-
place-items: center;
|
|
164
|
-
flex: none;
|
|
165
|
-
font-size: var(--kui-font-2xs);
|
|
166
|
-
font-weight: 700;
|
|
167
|
-
letter-spacing: 0;
|
|
168
|
-
line-height: 1;
|
|
169
|
-
}
|
|
170
146
|
.kui-state-banner__detail {
|
|
171
147
|
overflow: hidden;
|
|
172
148
|
color: var(--_kui-state-banner-detail);
|
|
@@ -203,9 +179,6 @@
|
|
|
203
179
|
grid-template-columns: auto 1fr;
|
|
204
180
|
gap: 0.05rem;
|
|
205
181
|
}
|
|
206
|
-
.kui-state-banner__badge {
|
|
207
|
-
justify-self: start;
|
|
208
|
-
}
|
|
209
182
|
.kui-state-banner__detail {
|
|
210
183
|
grid-column: 1 / -1;
|
|
211
184
|
}
|
package/dist/styles/styles.css
CHANGED
package/dist/styles/tab-bar.css
CHANGED
|
@@ -61,9 +61,14 @@
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
.kui-tab-bar__leading,
|
|
64
|
-
.kui-tab-bar__trailing
|
|
64
|
+
.kui-tab-bar__trailing,
|
|
65
|
+
.kui-tab-bar__end {
|
|
65
66
|
display: flex;
|
|
66
67
|
min-height: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
|
|
67
68
|
align-items: center;
|
|
68
69
|
flex: none;
|
|
69
70
|
}
|
|
71
|
+
|
|
72
|
+
.kui-tab-bar__end {
|
|
73
|
+
margin-inline-start: auto;
|
|
74
|
+
}
|
|
@@ -6,9 +6,32 @@
|
|
|
6
6
|
overflow: hidden;
|
|
7
7
|
flex-direction: column;
|
|
8
8
|
background: var(--kui-color-surface);
|
|
9
|
+
/* Safe areas: the scenes and the bar paint through unsafe areas; the bar
|
|
10
|
+
compensates for the bottom and inline edges, and the scenes for the top
|
|
11
|
+
and inline edges (see pane.css for the `--kui-edge-inset-*` context). */
|
|
12
|
+
--_kui-tab-scaffold-safe-block-start: var(
|
|
13
|
+
--kui-edge-inset-block-start,
|
|
14
|
+
var(--kui-safe-area-block-start, env(safe-area-inset-top, 0px))
|
|
15
|
+
);
|
|
16
|
+
--_kui-tab-scaffold-safe-block-end: var(
|
|
17
|
+
--kui-edge-inset-block-end,
|
|
18
|
+
var(--kui-safe-area-block-end, env(safe-area-inset-bottom, 0px))
|
|
19
|
+
);
|
|
20
|
+
--_kui-tab-scaffold-safe-inline-start: var(
|
|
21
|
+
--kui-edge-inset-inline-start,
|
|
22
|
+
var(--kui-safe-area-inline-start, env(safe-area-inset-left, 0px))
|
|
23
|
+
);
|
|
24
|
+
--_kui-tab-scaffold-safe-inline-end: var(
|
|
25
|
+
--kui-edge-inset-inline-end,
|
|
26
|
+
var(--kui-safe-area-inline-end, env(safe-area-inset-right, 0px))
|
|
27
|
+
);
|
|
9
28
|
}
|
|
10
29
|
|
|
11
30
|
.kui-tab-scaffold__scenes {
|
|
31
|
+
--kui-edge-inset-block-start: var(--_kui-tab-scaffold-safe-block-start);
|
|
32
|
+
--kui-edge-inset-block-end: 0px;
|
|
33
|
+
--kui-edge-inset-inline-start: var(--_kui-tab-scaffold-safe-inline-start);
|
|
34
|
+
--kui-edge-inset-inline-end: var(--_kui-tab-scaffold-safe-inline-end);
|
|
12
35
|
position: relative;
|
|
13
36
|
flex: 1;
|
|
14
37
|
min-height: 0;
|
|
@@ -23,6 +46,44 @@
|
|
|
23
46
|
inset: 0;
|
|
24
47
|
}
|
|
25
48
|
|
|
49
|
+
/* A scene is its region's scroll owner, so its top inset is padding inside
|
|
50
|
+
the scroller. A scene whose only child is a Pane or layout (usually a
|
|
51
|
+
NavStack) lets that child own the insets instead. */
|
|
52
|
+
.kui-tab-scaffold__scene:not(
|
|
53
|
+
:has(
|
|
54
|
+
> :is(
|
|
55
|
+
[data-component="pane"],
|
|
56
|
+
[data-component="nav-stack"],
|
|
57
|
+
[data-component="split-view"],
|
|
58
|
+
[data-component="workbench"],
|
|
59
|
+
[data-component="tab-scaffold"]
|
|
60
|
+
):only-child
|
|
61
|
+
)
|
|
62
|
+
) {
|
|
63
|
+
padding-block-start: var(--kui-edge-inset-block-start);
|
|
64
|
+
padding-inline: var(--kui-edge-inset-inline-start)
|
|
65
|
+
var(--kui-edge-inset-inline-end);
|
|
66
|
+
scroll-padding-block-start: var(--kui-edge-inset-block-start);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.kui-tab-scaffold__scene:not(
|
|
70
|
+
:has(
|
|
71
|
+
> :is(
|
|
72
|
+
[data-component="pane"],
|
|
73
|
+
[data-component="nav-stack"],
|
|
74
|
+
[data-component="split-view"],
|
|
75
|
+
[data-component="workbench"],
|
|
76
|
+
[data-component="tab-scaffold"]
|
|
77
|
+
):only-child
|
|
78
|
+
)
|
|
79
|
+
)
|
|
80
|
+
> * {
|
|
81
|
+
--kui-edge-inset-block-start: 0px;
|
|
82
|
+
--kui-edge-inset-block-end: 0px;
|
|
83
|
+
--kui-edge-inset-inline-start: 0px;
|
|
84
|
+
--kui-edge-inset-inline-end: 0px;
|
|
85
|
+
}
|
|
86
|
+
|
|
26
87
|
.kui-tab-scaffold__scene[data-active="false"] {
|
|
27
88
|
visibility: hidden;
|
|
28
89
|
}
|
|
@@ -33,8 +94,10 @@
|
|
|
33
94
|
padding-block-start: var(--kui-space-2xs);
|
|
34
95
|
/* Respect the home-indicator safe area on iOS-class devices. */
|
|
35
96
|
padding-block-end: calc(
|
|
36
|
-
var(--kui-space-2xs) +
|
|
97
|
+
var(--kui-space-2xs) + var(--_kui-tab-scaffold-safe-block-end)
|
|
37
98
|
);
|
|
99
|
+
padding-inline: var(--_kui-tab-scaffold-safe-inline-start)
|
|
100
|
+
var(--_kui-tab-scaffold-safe-inline-end);
|
|
38
101
|
border-block-start: 1px solid var(--kui-color-border);
|
|
39
102
|
background: var(--kui-color-surface);
|
|
40
103
|
}
|