@kerfjs/ui 5.0.0-beta.55 → 5.0.0-beta.57
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 +74 -41
- 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/compile-time-contracts-v1.json +2 -2
- package/ai/component-catalog.json +407 -80
- 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} +302 -61
- 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 +100 -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 +572 -101
- package/ai/skill.md +107 -52
- package/ai/webawesome-jsx-signatures-v1.md +8 -2
- 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/app-tab.js +1 -1
- package/dist/badge.d.ts +35 -7
- package/dist/badge.js +1 -1
- package/dist/browser/catalog.js +25 -0
- package/dist/browser/collapsible-panel.js +7 -0
- package/dist/browser/content-item.js +3 -0
- package/dist/browser/nav-stack.js +8 -0
- package/dist/browser/select.js +1 -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 +12 -1
- package/dist/catalog.d.ts +14 -3
- package/dist/catalog.js +53 -43
- package/dist/catalog.js.map +1 -1
- package/dist/{chunk-WZ2GLEY4.js → chunk-2G2ZJQYK.js} +2 -14
- package/dist/chunk-2G2ZJQYK.js.map +1 -0
- package/dist/{chunk-R754MHXX.js → chunk-553ASUK6.js} +8 -8
- package/dist/chunk-553ASUK6.js.map +1 -0
- package/dist/{chunk-D7GWXIAS.js → chunk-5I7QGQVT.js} +1 -1
- package/dist/chunk-5I7QGQVT.js.map +1 -0
- package/dist/{chunk-RNRUVPJ3.js → chunk-63ZWBGE3.js} +3 -2
- package/dist/chunk-63ZWBGE3.js.map +1 -0
- package/dist/{chunk-44IG7PFV.js → chunk-6CINWX2E.js} +3 -3
- package/dist/{chunk-44IG7PFV.js.map → chunk-6CINWX2E.js.map} +1 -1
- package/dist/{chunk-MTM43SJO.js → chunk-6YFHCLHG.js} +2 -2
- package/dist/chunk-6YFHCLHG.js.map +1 -0
- package/dist/{chunk-C2FAYFDE.js → chunk-AGXQQFKZ.js} +2 -2
- package/dist/{chunk-C2FAYFDE.js.map → chunk-AGXQQFKZ.js.map} +1 -1
- package/dist/{chunk-ATHXW6RP.js → chunk-AHEG27M7.js} +2 -2
- package/dist/{chunk-ATHXW6RP.js.map → chunk-AHEG27M7.js.map} +1 -1
- package/dist/chunk-BFPBS5Y4.js +250 -0
- package/dist/chunk-BFPBS5Y4.js.map +1 -0
- package/dist/{chunk-5OLVUEND.js → chunk-DG6G5EPF.js} +4 -6
- package/dist/chunk-DG6G5EPF.js.map +1 -0
- package/dist/{chunk-LZXQVUGN.js → chunk-EVYKTVBQ.js} +5 -14
- package/dist/chunk-EVYKTVBQ.js.map +1 -0
- package/dist/{chunk-7GUQYHKA.js → chunk-EZVNC4J6.js} +7 -1
- package/dist/chunk-EZVNC4J6.js.map +1 -0
- package/dist/{chunk-RNZAKSME.js → chunk-F4QMLOXJ.js} +5 -4
- package/dist/chunk-F4QMLOXJ.js.map +1 -0
- package/dist/{chunk-EAX2GSS4.js → chunk-G2RKFVRB.js} +54 -20
- package/dist/chunk-G2RKFVRB.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-HMQ2ZDGG.js → chunk-KROD7KZK.js} +3 -2
- package/dist/chunk-KROD7KZK.js.map +1 -0
- package/dist/{chunk-5NDQABWK.js → chunk-M7QV3IHH.js} +3 -1
- package/dist/chunk-M7QV3IHH.js.map +1 -0
- package/dist/chunk-MA73TA6D.js +42 -0
- package/dist/chunk-MA73TA6D.js.map +1 -0
- package/dist/{chunk-ZMBU522F.js → chunk-MEY33VWB.js} +2 -2
- package/dist/{chunk-ZMBU522F.js.map → chunk-MEY33VWB.js.map} +1 -1
- package/dist/chunk-MP2GDBQZ.js +50 -0
- package/dist/chunk-MP2GDBQZ.js.map +1 -0
- package/dist/{chunk-3NBL3OUQ.js → chunk-NAPE7WUS.js} +2 -2
- package/dist/chunk-NAPE7WUS.js.map +1 -0
- package/dist/{chunk-BSKEH3UC.js → chunk-NBYTIVHS.js} +2 -2
- package/dist/{chunk-BSKEH3UC.js.map → chunk-NBYTIVHS.js.map} +1 -1
- package/dist/{chunk-T22EM4ET.js → chunk-OUK6QRDR.js} +71 -31
- package/dist/chunk-OUK6QRDR.js.map +1 -0
- package/dist/chunk-PWXNJS2B.js +115 -0
- package/dist/chunk-PWXNJS2B.js.map +1 -0
- package/dist/{chunk-GUIHMIT2.js → chunk-QOWG4ZCL.js} +5 -4
- package/dist/chunk-QOWG4ZCL.js.map +1 -0
- package/dist/{chunk-5I22LMCV.js → chunk-VZOFZPSO.js} +2 -2
- package/dist/chunk-VZOFZPSO.js.map +1 -0
- package/dist/{chunk-4BIMLITI.js → chunk-WLG6SSNT.js} +5 -3
- package/dist/chunk-WLG6SSNT.js.map +1 -0
- package/dist/{chunk-NE5JAOQS.js → chunk-WOUF7YXM.js} +3 -3
- package/dist/{chunk-NE5JAOQS.js.map → chunk-WOUF7YXM.js.map} +1 -1
- package/dist/{chunk-N7FHFNT6.js → chunk-XCO6YCYM.js} +34 -5
- package/dist/chunk-XCO6YCYM.js.map +1 -0
- package/dist/{chunk-TZ5IHWB2.js → chunk-XDKAYSVD.js} +5 -3
- package/dist/chunk-XDKAYSVD.js.map +1 -0
- package/dist/collapsible-panel.d.ts +14 -3
- package/dist/collapsible-panel.js +13 -16
- package/dist/collapsible-panel.js.map +1 -1
- package/dist/content-item.d.ts +46 -0
- package/dist/content-item.js +4 -0
- package/dist/content-item.js.map +1 -0
- package/dist/css-values.d.ts +5 -11
- package/dist/css-values.js +1 -1
- package/dist/disclosure-arrow.d.ts +4 -1
- package/dist/disclosure-arrow.js +1 -1
- package/dist/floating-toolbar.d.ts +17 -6
- package/dist/floating-toolbar.js +1 -1
- package/dist/grid.js +1 -1
- package/dist/help-tags-register.d.ts +13 -0
- package/dist/help-tags-register.js +9 -0
- package/dist/help-tags-register.js.map +1 -0
- package/dist/index.d.ts +7 -5
- package/dist/index.js +29 -26
- package/dist/list-action-row.js +2 -1
- package/dist/list-header.d.ts +14 -1
- package/dist/list-header.js +1 -1
- package/dist/list-inset-control.d.ts +1 -1
- package/dist/list-inset-control.js +1 -1
- package/dist/list-inset-text.d.ts +3 -10
- package/dist/list-inset-text.js +1 -1
- package/dist/list-item.js +2 -1
- package/dist/list.d.ts +10 -3
- package/dist/list.js +1 -1
- package/dist/nav-stack.d.ts +50 -5
- package/dist/nav-stack.js +4 -1
- package/dist/pane.d.ts +37 -2
- package/dist/pane.js +1 -1
- package/dist/{panel-toolbar-BFQxFITu.d.ts → panel-toolbar-BN4x0rth.d.ts} +13 -1
- package/dist/popup-menu-register.js +3 -2
- package/dist/popup-menu-register.js.map +1 -1
- package/dist/popup-menu.js +1 -1
- package/dist/row.d.ts +1 -1
- package/dist/row.js +1 -1
- package/dist/select-register.js +70 -3
- package/dist/select-register.js.map +1 -1
- package/dist/select.d.ts +46 -8
- package/dist/select.js +2 -1
- package/dist/{divider-sides-BzB6rphT.d.ts → sides-BPSWde0A.d.ts} +1 -3
- package/dist/skeleton.js +1 -1
- package/dist/spacer.js +1 -1
- package/dist/split-view.d.ts +31 -3
- package/dist/split-view.js +34 -5
- 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 +32 -11
- package/dist/styles/catalog/components/catalog-example.css +1 -1
- package/dist/styles/catalog/components/catalog-stage.css +1 -1
- package/dist/styles/collapsible-panel.css +199 -42
- package/dist/styles/content-item.css +30 -0
- package/dist/styles/floating-toolbar.css +26 -2
- package/dist/styles/foundation.css +28 -19
- package/dist/styles/layout.css +1 -21
- package/dist/styles/list-action-row.css +13 -1
- package/dist/styles/list-header.css +0 -12
- package/dist/styles/list-inset-text.css +1 -2
- package/dist/styles/list-item.css +14 -1
- package/dist/styles/list.css +5 -5
- package/dist/styles/nav-stack.css +63 -71
- package/dist/styles/pane.css +83 -1
- package/dist/styles/popup-menu.css +229 -0
- package/dist/styles/resizable-region.css +70 -15
- package/dist/styles/select.css +60 -19
- package/dist/styles/skeleton.css +30 -3
- package/dist/styles/split-view.css +31 -32
- 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 +60 -14
- package/dist/styles/text.css +17 -1
- package/dist/styles/token-search-field.css +4 -4
- package/dist/styles/toolbar-control-group.css +143 -69
- package/dist/styles/toolbar-text.css +21 -0
- package/dist/styles/toolbar.css +22 -37
- package/dist/styles/value-table.css +19 -2
- package/dist/styles/webawesome.css +3 -1
- package/dist/styles/workbench.css +145 -42
- package/dist/tab-scaffold.d.ts +46 -2
- package/dist/tab-scaffold.js +52 -16
- package/dist/tab-scaffold.js.map +1 -1
- package/dist/token-search-field.d.ts +4 -2
- package/dist/token-search-field.js +1 -1
- package/dist/toolbar-text.d.ts +7 -1
- package/dist/toolbar-text.js +1 -1
- package/dist/toolbar.d.ts +20 -5
- package/dist/toolbar.js +1 -1
- package/dist/{types-D6vzj-VT.d.ts → types-BuHELdXR.d.ts} +39 -6
- package/dist/value-table.js +1 -1
- package/dist/webawesome.d.ts +7 -1
- package/dist/wire-catalog.d.ts +15 -2
- package/dist/wire-catalog.js +12 -2
- 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/wire-token-search-fields.js +1 -1
- package/dist/workbench.d.ts +60 -22
- package/dist/workbench.js +1 -1
- package/docs/accessibility.md +116 -7
- package/docs/app-layouts.md +18 -8
- package/docs/catalog.md +26 -7
- package/docs/collapsible-panel.md +32 -9
- package/docs/component-contract.md +182 -30
- package/docs/component-selection.md +59 -46
- package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
- package/docs/design/templates/empty-state/with-action.svg +1 -1
- package/docs/design/templates/empty-state-dark.svg +1 -1
- package/docs/design/templates/empty-state.svg +1 -1
- package/docs/design/templates/list/compact-dark.svg +1 -1
- package/docs/design/templates/list/compact.svg +1 -1
- package/docs/design/templates/list/stack-dark.svg +1 -1
- package/docs/design/templates/list/stack.svg +1 -1
- package/docs/design/templates/list-action-row/default-dark.svg +1 -1
- package/docs/design/templates/list-action-row/default.svg +1 -1
- package/docs/design/templates/list-action-row/selected-dark.svg +1 -1
- package/docs/design/templates/list-action-row/selected.svg +1 -1
- package/docs/design/templates/list-action-row-dark.svg +1 -1
- package/docs/design/templates/list-action-row.svg +1 -1
- package/docs/design/templates/list-dark.svg +1 -1
- package/docs/design/templates/list-item/default-dark.svg +1 -1
- package/docs/design/templates/list-item/default.svg +1 -1
- package/docs/design/templates/list-item/selected-dark.svg +1 -1
- package/docs/design/templates/list-item/selected.svg +1 -1
- package/docs/design/templates/list-item/trailing-dark.svg +1 -1
- package/docs/design/templates/list-item/trailing.svg +1 -1
- package/docs/design/templates/list-item-dark.svg +1 -1
- package/docs/design/templates/list-item.svg +1 -1
- package/docs/design/templates/list.svg +1 -1
- 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/templates/value-table/details-dark.svg +1 -1
- package/docs/design/templates/value-table/details.svg +1 -1
- package/docs/design/templates/value-table-dark.svg +1 -1
- package/docs/design/templates/value-table.svg +1 -1
- package/docs/design-philosophy.md +31 -4
- package/docs/examples/application-ui-profile.json +4 -4
- package/docs/examples/command-palette-adapter.tsx +3 -2
- package/docs/examples/{component-catalog-extension-v2.json → component-composition-extension.json} +3 -3
- package/docs/layout.md +148 -29
- package/docs/nav-stack.md +77 -3
- package/docs/recipes.md +4 -3
- package/docs/split-view.md +54 -5
- package/docs/tab-scaffold.md +73 -2
- package/docs/type-contracts.md +21 -20
- package/docs/ui-analyzer.md +99 -5
- package/docs/ui-doctor.md +10 -0
- package/docs/ux-demo.md +2 -2
- package/docs/webawesome-theme.md +1 -2
- package/docs/workbench.md +57 -11
- package/doctor/index.mjs +6 -1
- package/llms.txt +117 -24
- package/package.json +29 -6
- package/ux-demo/recipes/collapsible-sidebar.tsx +3 -3
- 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/navigation-sidebar.tsx +3 -2
- package/ux-demo/recipes/navigation-stack.tsx +3 -2
- 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-3NBL3OUQ.js.map +0 -1
- package/dist/chunk-4BIMLITI.js.map +0 -1
- package/dist/chunk-5I22LMCV.js.map +0 -1
- package/dist/chunk-5NDQABWK.js.map +0 -1
- package/dist/chunk-5OLVUEND.js.map +0 -1
- package/dist/chunk-7GUQYHKA.js.map +0 -1
- package/dist/chunk-D7GWXIAS.js.map +0 -1
- package/dist/chunk-DQA5FMOX.js +0 -85
- package/dist/chunk-DQA5FMOX.js.map +0 -1
- package/dist/chunk-EAX2GSS4.js.map +0 -1
- package/dist/chunk-GUIHMIT2.js.map +0 -1
- package/dist/chunk-HMQ2ZDGG.js.map +0 -1
- package/dist/chunk-LZXQVUGN.js.map +0 -1
- package/dist/chunk-MTM43SJO.js.map +0 -1
- package/dist/chunk-N7FHFNT6.js.map +0 -1
- package/dist/chunk-R754MHXX.js.map +0 -1
- package/dist/chunk-RNRUVPJ3.js.map +0 -1
- package/dist/chunk-RNZAKSME.js.map +0 -1
- package/dist/chunk-T22EM4ET.js.map +0 -1
- package/dist/chunk-TZ5IHWB2.js.map +0 -1
- package/dist/chunk-WZ2GLEY4.js.map +0 -1
- package/dist/chunk-XD7DWYXG.js +0 -34
- package/dist/chunk-XD7DWYXG.js.map +0 -1
|
@@ -58,68 +58,17 @@
|
|
|
58
58
|
opacity: 0;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
/* The chrome hosts the stack's real top Toolbar. It hands that toolbar the
|
|
62
|
+
edges the stack still touches through the edge context (never the bottom,
|
|
63
|
+
which the viewport owns); the toolbar pads for the sides it claims with
|
|
64
|
+
`safeAreaEdges` while its box paints through them. */
|
|
61
65
|
.kui-nav-stack__chrome {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
padding-block-start: var(--_kui-nav-stack-safe-block-start);
|
|
66
|
-
padding-inline: calc(
|
|
67
|
-
var(--kui-space-xs) + var(--_kui-nav-stack-safe-inline-start)
|
|
68
|
-
)
|
|
69
|
-
calc(var(--kui-space-xs) + var(--_kui-nav-stack-safe-inline-end));
|
|
70
|
-
align-items: center;
|
|
71
|
-
gap: var(--kui-space-xs);
|
|
66
|
+
--kui-edge-inset-block-start: var(--_kui-nav-stack-safe-block-start);
|
|
67
|
+
--kui-edge-inset-inline-start: var(--_kui-nav-stack-safe-inline-start);
|
|
68
|
+
--kui-edge-inset-inline-end: var(--_kui-nav-stack-safe-inline-end);
|
|
72
69
|
background: var(--kui-color-surface);
|
|
73
70
|
}
|
|
74
71
|
|
|
75
|
-
.kui-nav-stack__lead {
|
|
76
|
-
display: flex;
|
|
77
|
-
flex: 1;
|
|
78
|
-
min-width: 0;
|
|
79
|
-
align-items: center;
|
|
80
|
-
gap: var(--kui-space-2xs);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.kui-nav-stack__back {
|
|
84
|
-
display: grid;
|
|
85
|
-
width: 2.5rem;
|
|
86
|
-
height: 2.5rem;
|
|
87
|
-
padding: 0;
|
|
88
|
-
border: 1px solid transparent;
|
|
89
|
-
border-radius: var(--kui-layout-rounded-radius, calc(1px + 0.6875rem));
|
|
90
|
-
color: inherit;
|
|
91
|
-
background: transparent;
|
|
92
|
-
cursor: pointer;
|
|
93
|
-
place-items: center;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
.kui-nav-stack__back:hover {
|
|
97
|
-
border-color: var(--kui-color-border);
|
|
98
|
-
background: var(--kui-color-neutral-fill-normal);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.kui-nav-stack__back:focus-visible {
|
|
102
|
-
outline: var(--kui-focus-ring);
|
|
103
|
-
outline-offset: 1px;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
.kui-nav-stack__back-icon {
|
|
107
|
-
display: block;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/* The title is ToolbarText (which owns its font, height, and ellipsis); it just
|
|
111
|
-
needs to flex to fill the lead zone beside the back control. */
|
|
112
|
-
.kui-nav-stack__title {
|
|
113
|
-
flex: 1 1 auto;
|
|
114
|
-
min-width: 0;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
.kui-nav-stack__actions {
|
|
118
|
-
display: flex;
|
|
119
|
-
align-items: center;
|
|
120
|
-
gap: var(--kui-space-2xs);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
72
|
.kui-nav-stack__viewport {
|
|
124
73
|
--kui-edge-inset-block-start: var(--_kui-nav-stack-safe-block-start);
|
|
125
74
|
--kui-edge-inset-block-end: var(--_kui-nav-stack-safe-block-end);
|
|
@@ -174,18 +123,16 @@
|
|
|
174
123
|
var(--kui-edge-inset-block-end);
|
|
175
124
|
}
|
|
176
125
|
|
|
177
|
-
.kui-nav-stack__view
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
)
|
|
188
|
-
> * {
|
|
126
|
+
.kui-nav-stack__view
|
|
127
|
+
> :not(
|
|
128
|
+
:is(
|
|
129
|
+
[data-component="pane"],
|
|
130
|
+
[data-component="nav-stack"],
|
|
131
|
+
[data-component="split-view"],
|
|
132
|
+
[data-component="workbench"],
|
|
133
|
+
[data-component="tab-scaffold"]
|
|
134
|
+
):only-child
|
|
135
|
+
) {
|
|
189
136
|
--kui-edge-inset-block-start: 0px;
|
|
190
137
|
--kui-edge-inset-block-end: 0px;
|
|
191
138
|
--kui-edge-inset-inline-start: 0px;
|
|
@@ -214,10 +161,45 @@
|
|
|
214
161
|
padding-block-end: var(--_kui-nav-stack-safe-block-end);
|
|
215
162
|
padding-inline: var(--_kui-nav-stack-safe-inline-start)
|
|
216
163
|
var(--_kui-nav-stack-safe-inline-end);
|
|
217
|
-
border-block-start: 1px solid
|
|
164
|
+
border-block-start: 1px solid
|
|
165
|
+
var(--_kui-nav-stack-bottom-divider, transparent);
|
|
218
166
|
background: var(--kui-color-surface);
|
|
219
167
|
}
|
|
220
168
|
|
|
169
|
+
/* The live chrome is the containing block of its scroll divider; a
|
|
170
|
+
cross-fading copy stays absolutely positioned. */
|
|
171
|
+
.kui-nav-stack__chrome:not(.kui-nav-stack__chrome-copy) {
|
|
172
|
+
position: relative;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/* Chrome dividers: with `chromeDividers="scroll"` (the default, no
|
|
176
|
+
attribute) the top chrome draws a line along its bottom edge while the
|
|
177
|
+
active view's content is scrolled beneath it, and the bottom toolbar
|
|
178
|
+
colors its 1px top border while more content lies below it — never when
|
|
179
|
+
the content fits. `wireScrollDividers` reports that state through
|
|
180
|
+
`data-scroll-divider`; `always` draws both lines without it, and `none`
|
|
181
|
+
neither, whatever it reports. The chrome's line is an overlaid 1px pseudo-element
|
|
182
|
+
(whatever the chrome holds never covers it) and the bottom's border is
|
|
183
|
+
always there, so showing either never moves the chrome, the toolbar, or
|
|
184
|
+
the content. A cross-fading chrome copy keeps the line its snapshot had. */
|
|
185
|
+
.kui-nav-stack:not([data-chrome-dividers])
|
|
186
|
+
> .kui-nav-stack__chrome[data-scroll-divider*="b"]::after,
|
|
187
|
+
.kui-nav-stack[data-chrome-dividers="always"] > .kui-nav-stack__chrome::after {
|
|
188
|
+
position: absolute;
|
|
189
|
+
block-size: 1px;
|
|
190
|
+
background: var(--kui-color-neutral-border-normal);
|
|
191
|
+
content: "";
|
|
192
|
+
inset-block-end: 0;
|
|
193
|
+
inset-inline: 0;
|
|
194
|
+
pointer-events: none;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.kui-nav-stack:not([data-chrome-dividers])
|
|
198
|
+
> .kui-nav-stack__bottom[data-scroll-divider*="t"],
|
|
199
|
+
.kui-nav-stack[data-chrome-dividers="always"] > .kui-nav-stack__bottom {
|
|
200
|
+
--_kui-nav-stack-bottom-divider: var(--kui-color-neutral-border-normal);
|
|
201
|
+
}
|
|
202
|
+
|
|
221
203
|
@media (prefers-reduced-motion: reduce) {
|
|
222
204
|
.kui-nav-stack__view,
|
|
223
205
|
.kui-nav-stack__chrome,
|
|
@@ -226,3 +208,13 @@
|
|
|
226
208
|
transition: none;
|
|
227
209
|
}
|
|
228
210
|
}
|
|
211
|
+
|
|
212
|
+
/* As the only child of a Workbench region (its main area or a panel's
|
|
213
|
+
content, which the Workbench marks with `data-workbench-main` /
|
|
214
|
+
`data-workbench-panel-content`), a NavStack fills the region, so a
|
|
215
|
+
composed toolbar's footer (or the app's own) sits at the region's bottom
|
|
216
|
+
edge rather than under short content. */
|
|
217
|
+
:is([data-workbench-main], [data-workbench-panel-content])
|
|
218
|
+
> [data-component="nav-stack"]:only-child {
|
|
219
|
+
height: 100%;
|
|
220
|
+
}
|
package/dist/styles/pane.css
CHANGED
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
min-height: 0;
|
|
10
10
|
padding: 0;
|
|
11
11
|
box-sizing: border-box;
|
|
12
|
-
border: 0 solid
|
|
12
|
+
border: 0 solid
|
|
13
|
+
var(--kui-pane-separator-color, var(--kui-color-neutral-border-normal));
|
|
13
14
|
border-block-start-width: var(--kui-pane-separator-block-start-width);
|
|
14
15
|
border-block-end-width: var(--kui-pane-separator-block-end-width);
|
|
15
16
|
border-inline-start-width: var(--kui-pane-separator-inline-start-width);
|
|
@@ -145,3 +146,84 @@
|
|
|
145
146
|
flex-direction: column;
|
|
146
147
|
grid-area: footer;
|
|
147
148
|
}
|
|
149
|
+
|
|
150
|
+
/* Chrome dividers: one line under the header and one over the footer, where
|
|
151
|
+
the pinned chrome meets the scrolling content, whatever the chrome holds.
|
|
152
|
+
`chromeDividers="scroll"` (the default, no attribute) draws each only while
|
|
153
|
+
`wireScrollDividers` reports content scrolled away beneath it through
|
|
154
|
+
`data-scroll-divider` on the slot; `always` draws both; `none` neither. The
|
|
155
|
+
line is an inset shadow inside the slot, so showing or hiding it never
|
|
156
|
+
moves the chrome or the content. */
|
|
157
|
+
.kui-pane > :is(.kui-pane__header, .kui-pane__toolbar, .kui-pane__footer) {
|
|
158
|
+
--_kui-pane-chrome-divider: transparent;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.kui-pane > :is(.kui-pane__header, .kui-pane__toolbar) {
|
|
162
|
+
box-shadow: inset 0 -1px var(--_kui-pane-chrome-divider);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.kui-pane > .kui-pane__footer {
|
|
166
|
+
box-shadow: inset 0 1px var(--_kui-pane-chrome-divider);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.kui-pane:not([data-chrome-dividers])
|
|
170
|
+
> :is(.kui-pane__header, .kui-pane__toolbar)[data-scroll-divider*="b"],
|
|
171
|
+
.kui-pane:not([data-chrome-dividers])
|
|
172
|
+
> .kui-pane__footer[data-scroll-divider*="t"],
|
|
173
|
+
.kui-pane[data-chrome-dividers="always"]
|
|
174
|
+
> :is(.kui-pane__header, .kui-pane__toolbar, .kui-pane__footer) {
|
|
175
|
+
--_kui-pane-chrome-divider: var(
|
|
176
|
+
--kui-pane-separator-color,
|
|
177
|
+
var(--kui-color-neutral-border-normal)
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/* `chromePlacement="auto"`: the header and footer stay pinned while the pane
|
|
182
|
+
is tall enough; below 480px of height (30rem, so it scales with the text
|
|
183
|
+
size) the whole pane scrolls as one column instead, so tall chrome can never
|
|
184
|
+
squeeze the content to nothing. The pane is its own size container and lays
|
|
185
|
+
its slots out as a column: while tall, the content fills the space between
|
|
186
|
+
the chrome and scrolls itself, and the pane never scrolls; while short, the
|
|
187
|
+
content takes its natural height and the pane scrolls. */
|
|
188
|
+
.kui-pane[data-chrome-placement="auto"] {
|
|
189
|
+
container: kui-pane / size;
|
|
190
|
+
display: flex;
|
|
191
|
+
overflow-y: auto;
|
|
192
|
+
flex-direction: column;
|
|
193
|
+
overscroll-behavior: contain;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.kui-pane[data-chrome-placement="auto"]
|
|
197
|
+
> :is(.kui-pane__header, .kui-pane__footer) {
|
|
198
|
+
flex: none;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.kui-pane[data-chrome-placement="auto"] > .kui-pane__content {
|
|
202
|
+
flex: 1 1 0;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
@container kui-pane (max-height: 30rem) {
|
|
206
|
+
.kui-pane[data-chrome-placement="auto"] > .kui-pane__content {
|
|
207
|
+
flex: none;
|
|
208
|
+
overflow: visible;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/* As the only child of a Workbench region (its main area or a panel's
|
|
213
|
+
content, which the Workbench marks with `data-workbench-main` /
|
|
214
|
+
`data-workbench-panel-content`), a Pane fills the region, so a
|
|
215
|
+
composed toolbar's footer (or the app's own) sits at the region's bottom
|
|
216
|
+
edge rather than under short content. */
|
|
217
|
+
:is([data-workbench-main], [data-workbench-panel-content])
|
|
218
|
+
> [data-component="pane"]:only-child {
|
|
219
|
+
height: 100%;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/* As the only child of a NavStack view or a TabScaffold scene, a Pane fills
|
|
223
|
+
it too, so its content owns the scroll and its header and footer stay
|
|
224
|
+
pinned; the view or scene then never scrolls (it hands the Pane its
|
|
225
|
+
safe-area edge context, which the Pane's slots apply). */
|
|
226
|
+
:is(.kui-nav-stack__view, .kui-tab-scaffold__scene)
|
|
227
|
+
> [data-component="pane"]:only-child {
|
|
228
|
+
height: 100%;
|
|
229
|
+
}
|
|
@@ -10,3 +10,232 @@
|
|
|
10
10
|
white-space: nowrap;
|
|
11
11
|
clip-path: inset(50%);
|
|
12
12
|
}
|
|
13
|
+
|
|
14
|
+
/* A PopupMenu draws exactly the Select's popup: the same caret motion, surface
|
|
15
|
+
inset, row geometry, reserved check column, current-row fill, and group
|
|
16
|
+
titles, all read from the private popup-choice contract in foundation.css
|
|
17
|
+
(select.css reads the same values). */
|
|
18
|
+
|
|
19
|
+
/* The trigger caret turns to face the open menu, like the Select's. */
|
|
20
|
+
.kui-popup-menu > wa-button::part(caret) {
|
|
21
|
+
rotate: 0deg;
|
|
22
|
+
transition: var(--_kui-popup-caret-transition);
|
|
23
|
+
}
|
|
24
|
+
.kui-popup-menu[open] > wa-button::part(caret) {
|
|
25
|
+
rotate: var(--_kui-popup-caret-open-rotation);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* The Select's popup fades in place; Web Awesome's dropdown also scales from
|
|
29
|
+
90%. Holding the scale leaves the shared fade. */
|
|
30
|
+
.kui-popup-menu::part(menu) {
|
|
31
|
+
padding: var(--_kui-popup-inset);
|
|
32
|
+
gap: var(--_kui-popup-row-gap);
|
|
33
|
+
scale: none !important;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.kui-popup-menu > wa-dropdown-item {
|
|
37
|
+
/* Leading inset plus the Select's check column, so item icons and labels
|
|
38
|
+
start where a Select option's do. */
|
|
39
|
+
padding: var(--_kui-popup-row-padding-block)
|
|
40
|
+
var(--_kui-popup-row-padding-inline-end) var(--_kui-popup-row-padding-block)
|
|
41
|
+
calc(
|
|
42
|
+
var(--_kui-popup-row-padding-inline-start) +
|
|
43
|
+
var(--_kui-popup-row-check-width)
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
.kui-popup-menu > wa-dropdown-item::part(label) {
|
|
47
|
+
padding-block: var(--_kui-popup-row-label-padding-block);
|
|
48
|
+
line-height: var(--_kui-popup-row-label-line-height);
|
|
49
|
+
}
|
|
50
|
+
/* A keyboard-focused item is the menu's current row: the Select's brand fill,
|
|
51
|
+
with no second focus ring inside the open popup. */
|
|
52
|
+
.kui-popup-menu > wa-dropdown-item:focus-visible {
|
|
53
|
+
outline: none;
|
|
54
|
+
color: var(--_kui-popup-row-current-color);
|
|
55
|
+
background-color: var(--_kui-popup-row-current-background);
|
|
56
|
+
}
|
|
57
|
+
.kui-popup-menu > wa-divider {
|
|
58
|
+
--spacing: 0.5em;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* Center the icon on the label's line, like the Select's start slot. */
|
|
62
|
+
.kui-popup-menu > wa-dropdown-item::part(icon) {
|
|
63
|
+
display: flex;
|
|
64
|
+
align-self: center;
|
|
65
|
+
}
|
|
66
|
+
.kui-popup-menu__icon {
|
|
67
|
+
display: inline-flex;
|
|
68
|
+
width: var(--_kui-popup-row-icon-size);
|
|
69
|
+
height: var(--_kui-popup-row-icon-size);
|
|
70
|
+
flex: none;
|
|
71
|
+
/* Web Awesome spaces a slotted item icon 0.75em from its label (an
|
|
72
|
+
!important shadow rule). Sizing that em makes the gap the Select's. */
|
|
73
|
+
font-size: calc(var(--_kui-popup-row-icon-gap) / 0.75);
|
|
74
|
+
}
|
|
75
|
+
.kui-popup-menu__icon svg {
|
|
76
|
+
display: block;
|
|
77
|
+
width: 100%;
|
|
78
|
+
height: 100%;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* A group title matches the Select's group title. It is a styled element
|
|
82
|
+
rather than a slotted heading, whose Web Awesome metrics are !important. */
|
|
83
|
+
.kui-popup-menu__heading {
|
|
84
|
+
padding: var(--_kui-popup-group-title-padding);
|
|
85
|
+
color: var(--kui-color-neutral-on-quiet);
|
|
86
|
+
font-size: var(--kui-font-2xs);
|
|
87
|
+
font-weight: var(--_kui-popup-group-title-font-weight);
|
|
88
|
+
letter-spacing: 0.04em;
|
|
89
|
+
text-transform: uppercase;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* In a ToolbarControlGroup a PopupMenu sizes itself in the group's context:
|
|
93
|
+
the group lays out its own native and raw Web Awesome children and names a
|
|
94
|
+
PopupMenu only to key its own state on it. The trigger takes the group's
|
|
95
|
+
control height (40px, or 32px in a compact group). A mixed-content trigger
|
|
96
|
+
in a nested-dropdown group grows for its label plus the caret; a fixed 32px
|
|
97
|
+
base would center both outside its host, painting the label across the
|
|
98
|
+
separator and the caret beyond the group border. */
|
|
99
|
+
/* The trigger button takes the group's control metrics, as the group's own
|
|
100
|
+
raw wa-button children do (toolbar-control-group.css excludes this
|
|
101
|
+
trigger). The PopupMenu ancestor sits in `:where()` so each rule keeps the
|
|
102
|
+
specificity of the group's matching raw-child rule and resolves against the
|
|
103
|
+
group's attribute-keyed variants exactly as they do. */
|
|
104
|
+
.kui-toolbar-control-group :where(wa-dropdown.kui-popup-menu) > wa-button {
|
|
105
|
+
--wa-form-control-height: 2.5rem;
|
|
106
|
+
display: inline-flex;
|
|
107
|
+
line-height: 0;
|
|
108
|
+
align-items: center;
|
|
109
|
+
justify-content: center;
|
|
110
|
+
--wa-color-fill-quiet: transparent;
|
|
111
|
+
}
|
|
112
|
+
.kui-toolbar-control-group[data-size="compact"]
|
|
113
|
+
:where(wa-dropdown.kui-popup-menu)
|
|
114
|
+
> wa-button {
|
|
115
|
+
--wa-form-control-height: 2rem;
|
|
116
|
+
}
|
|
117
|
+
.kui-toolbar-control-group[data-content="mixed"]
|
|
118
|
+
:where(wa-dropdown.kui-popup-menu)
|
|
119
|
+
> wa-button {
|
|
120
|
+
line-height: normal;
|
|
121
|
+
}
|
|
122
|
+
.kui-toolbar-control-group
|
|
123
|
+
:where(wa-dropdown.kui-popup-menu)
|
|
124
|
+
> wa-button
|
|
125
|
+
> svg {
|
|
126
|
+
display: block;
|
|
127
|
+
width: 1rem;
|
|
128
|
+
height: 1rem;
|
|
129
|
+
}
|
|
130
|
+
/* Toolbar controls never wrap: a slotted icon and its label share one row. */
|
|
131
|
+
.kui-toolbar-control-group
|
|
132
|
+
:where(wa-dropdown.kui-popup-menu)
|
|
133
|
+
> wa-button::part(label) {
|
|
134
|
+
display: inline-flex;
|
|
135
|
+
align-items: center;
|
|
136
|
+
gap: var(--kui-space-xs);
|
|
137
|
+
white-space: nowrap;
|
|
138
|
+
}
|
|
139
|
+
/* At least a circle around an icon-only trigger, with the group's item radius;
|
|
140
|
+
hover lifts the trigger like a group button, except in a `single` group,
|
|
141
|
+
whose whole surface shows the hover (toolbar-control-group.css). */
|
|
142
|
+
.kui-toolbar-control-group
|
|
143
|
+
:where(wa-dropdown.kui-popup-menu)
|
|
144
|
+
> wa-button::part(base) {
|
|
145
|
+
min-width: 2.5rem;
|
|
146
|
+
min-height: 2.5rem;
|
|
147
|
+
box-sizing: border-box;
|
|
148
|
+
border: 1px solid transparent;
|
|
149
|
+
border-radius: var(
|
|
150
|
+
--kui-toolbar-item-radius,
|
|
151
|
+
var(--kui-layout-pill-radius, calc(1px + 1.3125rem))
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
.kui-toolbar-control-group
|
|
155
|
+
:where(wa-dropdown.kui-popup-menu)
|
|
156
|
+
> wa-button:hover::part(base) {
|
|
157
|
+
border-color: var(--kui-toolbar-control-border);
|
|
158
|
+
background-color: var(--kui-toolbar-control-hover-background);
|
|
159
|
+
}
|
|
160
|
+
.kui-toolbar-control-group[data-single="true"]
|
|
161
|
+
:where(wa-dropdown.kui-popup-menu)
|
|
162
|
+
> wa-button:hover::part(base) {
|
|
163
|
+
border-color: transparent;
|
|
164
|
+
background: transparent;
|
|
165
|
+
}
|
|
166
|
+
.kui-toolbar-control-group > wa-dropdown.kui-popup-menu {
|
|
167
|
+
display: inline-flex;
|
|
168
|
+
flex: 0 0 auto;
|
|
169
|
+
}
|
|
170
|
+
.kui-toolbar-control-group > wa-dropdown.kui-popup-menu,
|
|
171
|
+
.kui-toolbar-control-group > wa-dropdown.kui-popup-menu > wa-button,
|
|
172
|
+
.kui-toolbar-control-group
|
|
173
|
+
> wa-dropdown.kui-popup-menu
|
|
174
|
+
> wa-button::part(base) {
|
|
175
|
+
min-width: 2.5rem;
|
|
176
|
+
height: 2.5rem;
|
|
177
|
+
}
|
|
178
|
+
.kui-toolbar-control-group[data-size="compact"] > wa-dropdown.kui-popup-menu,
|
|
179
|
+
.kui-toolbar-control-group[data-size="compact"]
|
|
180
|
+
> wa-dropdown.kui-popup-menu
|
|
181
|
+
> wa-button,
|
|
182
|
+
.kui-toolbar-control-group[data-size="compact"]
|
|
183
|
+
> wa-dropdown.kui-popup-menu
|
|
184
|
+
> wa-button::part(base),
|
|
185
|
+
.kui-toolbar-control-group[data-size="compact"][data-nested-dropdown="true"]
|
|
186
|
+
wa-dropdown.kui-popup-menu
|
|
187
|
+
wa-button,
|
|
188
|
+
.kui-toolbar-control-group[data-size="compact"][data-nested-dropdown="true"]
|
|
189
|
+
wa-dropdown.kui-popup-menu
|
|
190
|
+
wa-button::part(base) {
|
|
191
|
+
min-width: 2rem;
|
|
192
|
+
height: 2rem;
|
|
193
|
+
min-height: 2rem;
|
|
194
|
+
}
|
|
195
|
+
.kui-toolbar-control-group[data-size="compact"][data-content="mixed"]
|
|
196
|
+
> wa-dropdown.kui-popup-menu {
|
|
197
|
+
margin: -2px;
|
|
198
|
+
}
|
|
199
|
+
.kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
|
|
200
|
+
> wa-dropdown.kui-popup-menu
|
|
201
|
+
> wa-button,
|
|
202
|
+
.kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
|
|
203
|
+
> wa-dropdown.kui-popup-menu
|
|
204
|
+
> wa-button::part(base) {
|
|
205
|
+
min-width: max-content;
|
|
206
|
+
}
|
|
207
|
+
.kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
|
|
208
|
+
> wa-dropdown.kui-popup-menu
|
|
209
|
+
> wa-button::part(base) {
|
|
210
|
+
width: max-content;
|
|
211
|
+
}
|
|
212
|
+
.kui-toolbar-control-group[data-single="true"]
|
|
213
|
+
> wa-dropdown.kui-popup-menu
|
|
214
|
+
> wa-button::part(base) {
|
|
215
|
+
width: max-content;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/* The menu insets a composing parent asks for. A PopupMenu applies them to
|
|
219
|
+
itself; its default is the Select listbox inset above, which a
|
|
220
|
+
ToolbarControlGroup's `standard` inset keeps. A PopupSurface's inset follows
|
|
221
|
+
the group's, so a surface wins when both apply. */
|
|
222
|
+
.kui-toolbar-control-group[data-menu-inset="compact"]
|
|
223
|
+
wa-dropdown.kui-popup-menu::part(menu) {
|
|
224
|
+
padding: 0.25rem;
|
|
225
|
+
}
|
|
226
|
+
.kui-toolbar-control-group[data-menu-inset="list-zero"]
|
|
227
|
+
wa-dropdown.kui-popup-menu::part(menu) {
|
|
228
|
+
padding: 0;
|
|
229
|
+
}
|
|
230
|
+
.kui-popup-surface[data-inset="standard"]
|
|
231
|
+
> wa-dropdown.kui-popup-menu::part(menu) {
|
|
232
|
+
padding: var(--kui-wa-surface-inset, 0.5rem);
|
|
233
|
+
}
|
|
234
|
+
.kui-popup-surface[data-inset="compact"]
|
|
235
|
+
> wa-dropdown.kui-popup-menu::part(menu) {
|
|
236
|
+
padding: 0.25rem;
|
|
237
|
+
}
|
|
238
|
+
.kui-popup-surface[data-inset="list-zero"]
|
|
239
|
+
> wa-dropdown.kui-popup-menu::part(menu) {
|
|
240
|
+
padding: 0;
|
|
241
|
+
}
|
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
.kui-resizable-region {
|
|
2
|
-
--kui-resizable-region-separator-color: var(
|
|
2
|
+
--kui-resizable-region-separator-color: var(
|
|
3
|
+
--kui-color-neutral-border-normal
|
|
4
|
+
);
|
|
3
5
|
--kui-resizable-region-handle-color: var(--kui-color-neutral-on-quiet);
|
|
4
6
|
--kui-resizable-region-handle-active-color: var(--kui-color-text-link);
|
|
5
7
|
/* Extra track a horizontal region adds when it reaches an unsafe screen edge,
|
|
6
8
|
so its surface paints through the unsafe area while its committed size
|
|
7
|
-
stays the content width.
|
|
8
|
-
|
|
9
|
+
stays the content width. The region sets it itself from the context of a
|
|
10
|
+
layout that places it at an edge (a SplitView list); it never inherits
|
|
11
|
+
into a nested region. */
|
|
9
12
|
--kui-resizable-region-edge-extent: 0px;
|
|
10
13
|
position: relative;
|
|
11
14
|
display: flex;
|
|
12
15
|
min-width: 0;
|
|
13
16
|
min-height: 0;
|
|
14
17
|
}
|
|
18
|
+
/* As a split SplitView's list, the region's track grows by the unsafe
|
|
19
|
+
inline-start inset the SplitView provides, while its committed size stays
|
|
20
|
+
the content width. A collapsed region stays shut. */
|
|
21
|
+
.kui-split-view[data-split-mode="split"]
|
|
22
|
+
> .kui-resizable-region:not([data-collapsed="true"]) {
|
|
23
|
+
--kui-resizable-region-edge-extent: var(--_kui-split-view-safe-inline-start);
|
|
24
|
+
}
|
|
15
25
|
.kui-resizable-region[data-axis="horizontal"] {
|
|
16
26
|
width: calc(
|
|
17
27
|
var(--kui-resizable-region-size) + var(--kui-resizable-region-edge-extent)
|
|
@@ -211,6 +221,37 @@
|
|
|
211
221
|
.kui-resizable-region[data-presentation="hidden"] {
|
|
212
222
|
display: none;
|
|
213
223
|
}
|
|
224
|
+
/* An open side overlay (a horizontal region) covers the work area beside it,
|
|
225
|
+
so that area's floating controls (a FloatingToolbar, a restore corner) are
|
|
226
|
+
hidden, not merely stacked beneath it: they never paint over the overlay
|
|
227
|
+
whatever stacking context an app puts them in, and hidden they leave the
|
|
228
|
+
tab order and the accessibility tree. They come back as the overlay
|
|
229
|
+
closes. The ResizableRegion's own covered context,
|
|
230
|
+
`--_kui-resizable-region-covered`, is read by FloatingToolbar and the
|
|
231
|
+
layouts' restore corners. It is set on the overlay's container and cleared again on the
|
|
232
|
+
overlay regions in it, so it reaches the overlay's siblings only. It is
|
|
233
|
+
never set by a universal selector below the :has() container (`:has(…) >
|
|
234
|
+
:not(…)`): Chromium then restyles every child of every ancestor of a DOM
|
|
235
|
+
change, which made each change in a long list about 30× slower. */
|
|
236
|
+
:where(
|
|
237
|
+
:has(
|
|
238
|
+
> .kui-resizable-region[data-presentation="overlay"][data-axis="horizontal"]:not(
|
|
239
|
+
[data-collapsed="true"]
|
|
240
|
+
)
|
|
241
|
+
)
|
|
242
|
+
) {
|
|
243
|
+
--_kui-resizable-region-covered: hidden;
|
|
244
|
+
}
|
|
245
|
+
:where(
|
|
246
|
+
:has(
|
|
247
|
+
> .kui-resizable-region[data-presentation="overlay"][data-axis="horizontal"]:not(
|
|
248
|
+
[data-collapsed="true"]
|
|
249
|
+
)
|
|
250
|
+
)
|
|
251
|
+
)
|
|
252
|
+
> .kui-resizable-region[data-presentation="overlay"] {
|
|
253
|
+
--_kui-resizable-region-covered: initial;
|
|
254
|
+
}
|
|
214
255
|
|
|
215
256
|
@container (max-width: 44rem) {
|
|
216
257
|
.kui-resizable-region[data-responsive-fill-at="narrow"] {
|
|
@@ -256,27 +297,38 @@
|
|
|
256
297
|
beside the collapsed one — a direct child of that container or of one of
|
|
257
298
|
its direct children (the app's work-area column) — owns the container's
|
|
258
299
|
bottom, so the corner floats above the drawer's top edge instead of over
|
|
259
|
-
it.
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
.
|
|
300
|
+
it. The region publishes that edge as an anchor only there, beside a
|
|
301
|
+
CollapsiblePanel or ResizableRegion restore control (matched by their
|
|
302
|
+
restore attributes); CollapsiblePanel drawers publish the same anchor. A
|
|
303
|
+
drawer nested deeper, inside the work area's own content, belongs to
|
|
304
|
+
another layout and publishes nothing. The selector ends on the region, not
|
|
305
|
+
on a universal `> * > * > *` scope below the container: a universal
|
|
306
|
+
selector after a :has() container restyles every child of every ancestor
|
|
307
|
+
of a DOM change in Chromium. Without anchor positioning the corner keeps
|
|
308
|
+
the container's bottom edge. */
|
|
309
|
+
:where(
|
|
310
|
+
:has(> [data-panel-restore], > [data-region-restore]),
|
|
311
|
+
:has(> [data-panel-restore], > [data-region-restore]) > *
|
|
312
|
+
)
|
|
313
|
+
> .kui-resizable-region[data-axis="vertical"][data-edge="start"][data-presentation="inline"]:not(
|
|
264
314
|
[data-collapsed="true"]
|
|
265
315
|
) {
|
|
266
316
|
anchor-name: --kui-restore-drawer;
|
|
267
317
|
}
|
|
268
|
-
:where(:has(> .kui-resizable-region__restore)) > * > * > * {
|
|
269
|
-
anchor-scope: --kui-restore-drawer;
|
|
270
|
-
}
|
|
271
318
|
.kui-resizable-region__restore {
|
|
272
319
|
--_kui-resizable-region-restore-inset: var(
|
|
273
320
|
--kui-resizable-region-restore-inset,
|
|
274
321
|
1rem
|
|
275
322
|
);
|
|
276
|
-
/* The corner owns the inset, so a FloatingToolbar composed here floats
|
|
277
|
-
from this point instead of adding its own inset on top. */
|
|
278
|
-
--kui-floating-toolbar-inset: 0px;
|
|
279
323
|
position: absolute;
|
|
324
|
+
/* Hidden while an open side overlay covers the content (see above). */
|
|
325
|
+
visibility: var(
|
|
326
|
+
--_kui-workbench-covered,
|
|
327
|
+
var(
|
|
328
|
+
--_kui-collapsible-panel-covered,
|
|
329
|
+
var(--_kui-resizable-region-covered, inherit)
|
|
330
|
+
)
|
|
331
|
+
);
|
|
280
332
|
z-index: var(
|
|
281
333
|
--kui-resizable-region-restore-z,
|
|
282
334
|
calc(var(--kui-resizable-region-overlay-z, 41) - 2)
|
|
@@ -379,7 +431,10 @@
|
|
|
379
431
|
and the separator has less room past it than the handle's overhang, which
|
|
380
432
|
puts it at the parent's edge. The handle then sits wholly inside the region
|
|
381
433
|
and keeps its separator line on the region's edge, so a clipping ancestor
|
|
382
|
-
never cuts off half of the hit target or its focus ring.
|
|
434
|
+
never cuts off half of the hit target or its focus ring. The grip stays
|
|
435
|
+
centered in the handle there: the separator is the clipping edge, so a grip
|
|
436
|
+
centered on it would be cut in half. Everywhere else the grip is drawn on
|
|
437
|
+
the separator line. */
|
|
383
438
|
.kui-resizable-region[data-handle-inset][data-axis="horizontal"][data-edge="end"]
|
|
384
439
|
> .kui-resizable-region__handle {
|
|
385
440
|
right: 0;
|