@kerfjs/ui 5.0.0-beta.4 → 5.0.0-beta.41
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 +342 -108
- package/ai/application-ui-diagnostic-ids-v1.json +100 -0
- package/ai/application-ui-profile-sync.cjs +529 -0
- package/ai/application-ui-profile.d.mts +1 -0
- package/ai/application-ui-profile.d.ts +102 -0
- package/ai/application-ui-profile.defaults.json +41 -0
- package/ai/application-ui-profile.mjs +626 -0
- package/ai/application-ui-profile.schema.json +130 -0
- package/ai/catalog-authoring.json +25 -0
- package/ai/catalog-authoring.schema.json +61 -0
- package/ai/compile-time-contracts-v1.json +132 -0
- package/ai/compile-time-contracts-v1.schema.json +51 -0
- package/ai/component-catalog-extension-v2.d.ts +7 -0
- package/ai/component-catalog-extension-v2.schema.json +7 -0
- package/ai/component-catalog-extension.schema.json +79 -0
- package/ai/component-catalog-v2-overrides.json +496 -0
- package/ai/component-catalog-v2.d.ts +90 -0
- package/ai/component-catalog-v2.json +5678 -0
- package/ai/component-catalog-v2.schema.json +298 -0
- package/ai/component-catalog.json +2694 -417
- package/ai/component-catalog.schema.json +39 -0
- package/ai/public-api-signatures-v1.md +1591 -126
- package/ai/skill.md +140 -54
- package/ai/webawesome-jsx-signatures-v1.md +2 -1
- package/analyzer/cli.mjs +49 -0
- package/analyzer/index.d.mts +46 -0
- package/analyzer/index.mjs +1086 -0
- package/analyzer/report.schema.json +66 -0
- package/dist/app-tab.d.ts +15 -4
- package/dist/app-tab.js +3 -1
- package/dist/browser/app-tab.js +1 -0
- package/dist/browser/floating-toolbar.js +3 -0
- package/dist/browser/list-action-row.js +5 -0
- package/dist/browser/list-header.js +7 -0
- package/dist/browser/list-inset-control.js +3 -0
- package/dist/browser/list-inset-text.js +3 -0
- package/dist/browser/list-item.js +5 -0
- package/dist/browser/list.js +3 -0
- package/dist/browser/pane.js +3 -0
- package/dist/browser/row.js +3 -0
- package/dist/browser/segmented-control.js +1 -0
- package/dist/browser/select.js +1 -0
- package/dist/browser/skeleton.js +3 -0
- package/dist/browser/spacer.js +3 -0
- package/dist/browser/state-banner.js +1 -0
- package/dist/browser/sunken-panel.js +3 -0
- package/dist/browser/surface-scaffold.js +3 -0
- package/dist/browser/text.js +3 -0
- package/dist/browser/toolbar-text.js +1 -0
- package/dist/browser/value-table.js +1 -0
- package/dist/catalog-resources.d.ts +35 -0
- package/dist/catalog-resources.js +22 -0
- package/dist/catalog-resources.js.map +1 -0
- package/dist/catalog.d.ts +151 -0
- package/dist/catalog.js +396 -0
- package/dist/catalog.js.map +1 -0
- package/dist/chunk-2TYUFZUC.js +22 -0
- package/dist/chunk-2TYUFZUC.js.map +1 -0
- package/dist/chunk-6NDBE2OK.js +32 -0
- package/dist/chunk-6NDBE2OK.js.map +1 -0
- package/dist/chunk-6WTETUZ6.js +21 -0
- package/dist/chunk-6WTETUZ6.js.map +1 -0
- package/dist/chunk-AQFWBG23.js +83 -0
- package/dist/chunk-AQFWBG23.js.map +1 -0
- package/dist/chunk-B6JYRX3P.js +51 -0
- package/dist/chunk-B6JYRX3P.js.map +1 -0
- package/dist/chunk-C34NZOLJ.js +53 -0
- package/dist/chunk-C34NZOLJ.js.map +1 -0
- package/dist/chunk-CAB6NQ2T.js +102 -0
- package/dist/chunk-CAB6NQ2T.js.map +1 -0
- package/dist/chunk-CK6P5AUK.js +136 -0
- package/dist/chunk-CK6P5AUK.js.map +1 -0
- package/dist/chunk-DAO2VFTT.js +129 -0
- package/dist/chunk-DAO2VFTT.js.map +1 -0
- package/dist/chunk-DEYOGDE7.js +141 -0
- package/dist/chunk-DEYOGDE7.js.map +1 -0
- package/dist/chunk-DYBPI5O2.js +25 -0
- package/dist/chunk-DYBPI5O2.js.map +1 -0
- package/dist/{chunk-TRNBHPNW.js → chunk-E34TE2ZI.js} +12 -8
- package/dist/chunk-E34TE2ZI.js.map +1 -0
- package/dist/chunk-EYALJQQD.js +25 -0
- package/dist/chunk-EYALJQQD.js.map +1 -0
- package/dist/chunk-I45QO2IZ.js +88 -0
- package/dist/chunk-I45QO2IZ.js.map +1 -0
- package/dist/chunk-I4V3UDSA.js +79 -0
- package/dist/chunk-I4V3UDSA.js.map +1 -0
- package/dist/chunk-OGTJNHRG.js +42 -0
- package/dist/chunk-OGTJNHRG.js.map +1 -0
- package/dist/chunk-OL4TC3U2.js +156 -0
- package/dist/chunk-OL4TC3U2.js.map +1 -0
- package/dist/chunk-OMSRSL3B.js +120 -0
- package/dist/chunk-OMSRSL3B.js.map +1 -0
- package/dist/chunk-R3EBGEAW.js +46 -0
- package/dist/chunk-R3EBGEAW.js.map +1 -0
- package/dist/chunk-SOK5EUF7.js +25 -0
- package/dist/chunk-SOK5EUF7.js.map +1 -0
- package/dist/{chunk-7BR3DO2A.js → chunk-SRSJO5QE.js} +13 -4
- package/dist/chunk-SRSJO5QE.js.map +1 -0
- package/dist/chunk-T7DOWS6T.js +61 -0
- package/dist/chunk-T7DOWS6T.js.map +1 -0
- package/dist/chunk-TIGSG6BX.js +218 -0
- package/dist/chunk-TIGSG6BX.js.map +1 -0
- package/dist/chunk-UDHHKZWO.js +41 -0
- package/dist/chunk-UDHHKZWO.js.map +1 -0
- package/dist/{chunk-MQIZAD4A.js → chunk-UKKSMZYT.js} +76 -22
- package/dist/chunk-UKKSMZYT.js.map +1 -0
- package/dist/chunk-V6GQKOX2.js +39 -0
- package/dist/chunk-V6GQKOX2.js.map +1 -0
- package/dist/chunk-V6HCTCVD.js +46 -0
- package/dist/chunk-V6HCTCVD.js.map +1 -0
- package/dist/chunk-VDUJZF5G.js +515 -0
- package/dist/chunk-VDUJZF5G.js.map +1 -0
- package/dist/chunk-VXFGMDA7.js +31 -0
- package/dist/chunk-VXFGMDA7.js.map +1 -0
- package/dist/chunk-WN52USHV.js +115 -0
- package/dist/chunk-WN52USHV.js.map +1 -0
- package/dist/chunk-WSXUPSID.js +43 -0
- package/dist/chunk-WSXUPSID.js.map +1 -0
- package/dist/chunk-X5GRDQ7V.js +50 -0
- package/dist/chunk-X5GRDQ7V.js.map +1 -0
- package/dist/{chunk-56RJXPHG.js → chunk-Y6LYKFXY.js} +1 -1
- package/dist/{chunk-56RJXPHG.js.map → chunk-Y6LYKFXY.js.map} +1 -1
- package/dist/chunk-ZASJJMGV.js +17 -0
- package/dist/chunk-ZASJJMGV.js.map +1 -0
- package/dist/chunk-ZPWZIVI6.js +47 -0
- package/dist/chunk-ZPWZIVI6.js.map +1 -0
- package/dist/collapsible-panel.d.ts +77 -0
- package/dist/collapsible-panel.js +84 -0
- package/dist/collapsible-panel.js.map +1 -0
- package/dist/css-values.d.ts +75 -0
- package/dist/css-values.js +3 -0
- package/dist/css-values.js.map +1 -0
- package/dist/device-class.d.ts +62 -0
- package/dist/device-class.js +103 -0
- package/dist/device-class.js.map +1 -0
- package/dist/disclosure-arrow.js +1 -1
- package/dist/divider-sides-BzB6rphT.d.ts +6 -0
- package/dist/empty-state.d.ts +3 -2
- package/dist/empty-state.js +1 -1
- package/dist/flex-alignment-CF8NLj7i.d.ts +4 -0
- package/dist/floating-toolbar.d.ts +29 -0
- package/dist/floating-toolbar.js +3 -0
- package/dist/floating-toolbar.js.map +1 -0
- package/dist/index.d.ts +28 -14
- package/dist/index.js +34 -23
- package/dist/{menu-action-row.d.ts → list-action-row.d.ts} +19 -8
- package/dist/list-action-row.js +7 -0
- package/dist/list-action-row.js.map +1 -0
- package/dist/list-header.d.ts +80 -0
- package/dist/list-header.js +9 -0
- package/dist/list-header.js.map +1 -0
- package/dist/list-inset-control.d.ts +20 -0
- package/dist/list-inset-control.js +3 -0
- package/dist/list-inset-control.js.map +1 -0
- package/dist/list-inset-text.d.ts +29 -0
- package/dist/list-inset-text.js +3 -0
- package/dist/list-inset-text.js.map +1 -0
- package/dist/list-item.d.ts +45 -0
- package/dist/list-item.js +7 -0
- package/dist/list-item.js.map +1 -0
- package/dist/list.d.ts +30 -0
- package/dist/list.js +5 -0
- package/dist/list.js.map +1 -0
- package/dist/loading-spinner.js +1 -1
- package/dist/nav-stack.d.ts +41 -0
- package/dist/nav-stack.js +6 -0
- package/dist/nav-stack.js.map +1 -0
- package/dist/pane.d.ts +50 -0
- package/dist/pane.js +4 -0
- package/dist/pane.js.map +1 -0
- package/dist/resizable-region.d.ts +21 -3
- package/dist/resizable-region.js +1 -1
- package/dist/row.d.ts +28 -0
- package/dist/row.js +5 -0
- package/dist/row.js.map +1 -0
- package/dist/segmented-control.d.ts +11 -8
- package/dist/segmented-control.js +3 -1
- package/dist/select-register.d.ts +5 -1
- package/dist/select-register.js +129 -1
- package/dist/select-register.js.map +1 -1
- package/dist/select.d.ts +34 -8
- package/dist/select.js +3 -1
- package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
- package/dist/skeleton.d.ts +25 -0
- package/dist/skeleton.js +4 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/spacer.d.ts +16 -0
- package/dist/spacer.js +4 -0
- package/dist/spacer.js.map +1 -0
- package/dist/split-view.d.ts +43 -0
- package/dist/split-view.js +82 -0
- package/dist/split-view.js.map +1 -0
- package/dist/state-banner.d.ts +11 -5
- package/dist/state-banner.js +3 -1
- package/dist/styles/app-tab.css +26 -0
- package/dist/styles/catalog.css +582 -0
- package/dist/styles/collapsible-panel.css +212 -0
- package/dist/styles/floating-toolbar.css +38 -0
- package/dist/styles/foundation.css +80 -0
- package/dist/styles/layout.css +2 -20
- package/dist/styles/list-action-row.css +224 -0
- package/dist/styles/list-header.css +224 -0
- package/dist/styles/list-inset-control.css +23 -0
- package/dist/styles/list-inset-text.css +30 -0
- package/dist/styles/list-item.css +171 -0
- package/dist/styles/list.css +118 -0
- package/dist/styles/nav-stack.css +141 -0
- package/dist/styles/pane.css +62 -0
- package/dist/styles/resizable-region.css +158 -0
- package/dist/styles/row.css +92 -0
- package/dist/styles/segmented-control.css +10 -7
- package/dist/styles/select.css +115 -2
- package/dist/styles/skeleton.css +31 -0
- package/dist/styles/spacer.css +11 -0
- package/dist/styles/split-view.css +35 -0
- package/dist/styles/state-banner.css +49 -10
- package/dist/styles/styles.css +10 -5
- package/dist/styles/sunken-panel.css +22 -0
- package/dist/styles/surface-scaffold.css +51 -0
- package/dist/styles/tab-bar.css +24 -0
- package/dist/styles/tab-scaffold.css +85 -0
- package/dist/styles/text.css +6 -0
- package/dist/styles/token-search-field.css +14 -2
- package/dist/styles/toolbar-control-group.css +235 -8
- package/dist/styles/toolbar-text.css +65 -2
- package/dist/styles/toolbar.css +47 -2
- package/dist/styles/webawesome.css +171 -0
- package/dist/styles/workbench.css +187 -0
- package/dist/sunken-panel.d.ts +20 -0
- package/dist/sunken-panel.js +3 -0
- package/dist/sunken-panel.js.map +1 -0
- package/dist/surface-scaffold.d.ts +26 -0
- package/dist/surface-scaffold.js +3 -0
- package/dist/surface-scaffold.js.map +1 -0
- package/dist/tab-bar.d.ts +24 -6
- package/dist/tab-bar.js +1 -1
- package/dist/tab-scaffold.d.ts +31 -0
- package/dist/tab-scaffold.js +51 -0
- package/dist/tab-scaffold.js.map +1 -0
- package/dist/text.d.ts +20 -0
- package/dist/text.js +3 -0
- package/dist/text.js.map +1 -0
- package/dist/token-search-field.d.ts +30 -13
- package/dist/token-search-field.js +1 -1
- package/dist/toolbar-control-group.d.ts +33 -7
- package/dist/toolbar-control-group.js +1 -1
- package/dist/toolbar-text.d.ts +31 -4
- package/dist/toolbar-text.js +3 -1
- package/dist/toolbar.d.ts +10 -7
- package/dist/toolbar.js +1 -1
- package/dist/value-table.d.ts +7 -3
- package/dist/value-table.js +3 -1
- package/dist/webawesome.d.ts +1 -0
- package/dist/wire-catalog.d.ts +57 -0
- package/dist/wire-catalog.js +302 -0
- package/dist/wire-catalog.js.map +1 -0
- package/dist/wire-nav-stack.d.ts +18 -0
- package/dist/wire-nav-stack.js +228 -0
- package/dist/wire-nav-stack.js.map +1 -0
- package/dist/wire-resizable-regions.d.ts +1 -1
- package/dist/wire-resizable-regions.js +1 -1
- package/dist/wire-sidebar.d.ts +48 -0
- package/dist/wire-sidebar.js +147 -0
- package/dist/wire-sidebar.js.map +1 -0
- package/dist/wire-tab-bars.d.ts +19 -2
- package/dist/wire-tab-bars.js +1 -1
- package/dist/wire-tab-scaffold.d.ts +11 -0
- package/dist/wire-tab-scaffold.js +21 -0
- package/dist/wire-tab-scaffold.js.map +1 -0
- package/dist/wire-token-search-fields.d.ts +104 -4
- package/dist/wire-token-search-fields.js +1 -1
- package/dist/workbench.d.ts +44 -0
- package/dist/workbench.js +106 -0
- package/dist/workbench.js.map +1 -0
- package/docs/accessibility.md +155 -20
- package/docs/app-layouts.md +61 -0
- package/docs/catalog.md +364 -0
- package/docs/collapsible-panel.md +142 -0
- package/docs/component-contract.md +258 -28
- package/docs/component-integration.md +63 -0
- package/docs/component-selection.md +219 -57
- package/docs/design/templates/empty-state/filtered-dark.svg +1 -0
- package/docs/design/templates/empty-state/filtered.svg +1 -0
- package/docs/design/templates/empty-state/with-action-dark.svg +1 -0
- package/docs/design/templates/empty-state/with-action.svg +1 -0
- package/docs/design/templates/empty-state-dark.svg +1 -0
- package/docs/design/templates/empty-state.svg +1 -0
- package/docs/design/templates/list/compact-dark.svg +1 -0
- package/docs/design/templates/list/compact.svg +1 -0
- package/docs/design/templates/list/stack-dark.svg +1 -0
- package/docs/design/templates/list/stack.svg +1 -0
- package/docs/design/templates/list-action-row/default-dark.svg +1 -0
- package/docs/design/templates/list-action-row/default.svg +1 -0
- package/docs/design/templates/list-action-row/selected-dark.svg +1 -0
- package/docs/design/templates/list-action-row/selected.svg +1 -0
- package/docs/design/templates/list-action-row-dark.svg +1 -0
- package/docs/design/templates/list-action-row.svg +1 -0
- package/docs/design/templates/list-dark.svg +1 -0
- package/docs/design/templates/list-header/action-dark.svg +1 -0
- package/docs/design/templates/list-header/action.svg +1 -0
- package/docs/design/templates/list-header/count-dark.svg +1 -0
- package/docs/design/templates/list-header/count.svg +1 -0
- package/docs/design/templates/list-header/inline-action-dark.svg +1 -0
- package/docs/design/templates/list-header/inline-action.svg +1 -0
- package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -0
- package/docs/design/templates/list-header/toggle-collapsed.svg +1 -0
- package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -0
- package/docs/design/templates/list-header/toggle-expanded.svg +1 -0
- package/docs/design/templates/list-header-dark.svg +1 -0
- package/docs/design/templates/list-header.svg +1 -0
- package/docs/design/templates/list-item/default-dark.svg +1 -0
- package/docs/design/templates/list-item/default.svg +1 -0
- package/docs/design/templates/list-item/multiline-dark.svg +1 -0
- package/docs/design/templates/list-item/multiline.svg +1 -0
- package/docs/design/templates/list-item/selected-dark.svg +1 -0
- package/docs/design/templates/list-item/selected.svg +1 -0
- package/docs/design/templates/list-item/trailing-dark.svg +1 -0
- package/docs/design/templates/list-item/trailing.svg +1 -0
- package/docs/design/templates/list-item-dark.svg +1 -0
- package/docs/design/templates/list-item.svg +1 -0
- package/docs/design/templates/list.svg +1 -0
- package/docs/design/templates/segmented-control/equal-dark.svg +1 -0
- package/docs/design/templates/segmented-control/equal.svg +1 -0
- package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -0
- package/docs/design/templates/segmented-control/pill-small.svg +1 -0
- package/docs/design/templates/segmented-control-dark.svg +1 -0
- package/docs/design/templates/segmented-control.svg +1 -0
- package/docs/design/templates/skeleton/avatar-dark.svg +1 -0
- package/docs/design/templates/skeleton/avatar.svg +1 -0
- package/docs/design/templates/skeleton/block-dark.svg +1 -0
- package/docs/design/templates/skeleton/block.svg +1 -0
- package/docs/design/templates/skeleton/lines-dark.svg +1 -0
- package/docs/design/templates/skeleton/lines.svg +1 -0
- package/docs/design/templates/skeleton-dark.svg +1 -0
- package/docs/design/templates/skeleton.svg +1 -0
- package/docs/design/templates/state-banner/danger-dark.svg +1 -0
- package/docs/design/templates/state-banner/danger.svg +1 -0
- package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
- package/docs/design/templates/state-banner/info-badge.svg +1 -0
- package/docs/design/templates/state-banner/info-dark.svg +1 -0
- package/docs/design/templates/state-banner/info.svg +1 -0
- package/docs/design/templates/state-banner/success-dark.svg +1 -0
- package/docs/design/templates/state-banner/success.svg +1 -0
- package/docs/design/templates/state-banner/warning-dark.svg +1 -0
- package/docs/design/templates/state-banner/warning.svg +1 -0
- package/docs/design/templates/state-banner-dark.svg +1 -0
- package/docs/design/templates/state-banner.svg +1 -0
- package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -0
- package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -0
- package/docs/design/templates/tab-bar-dark.svg +1 -0
- package/docs/design/templates/tab-bar.svg +1 -0
- package/docs/design/templates/token-search-field/empty-dark.svg +1 -0
- package/docs/design/templates/token-search-field/empty.svg +1 -0
- package/docs/design/templates/token-search-field/tokens-dark.svg +1 -0
- package/docs/design/templates/token-search-field/tokens.svg +1 -0
- package/docs/design/templates/token-search-field-dark.svg +1 -0
- package/docs/design/templates/token-search-field.svg +1 -0
- package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -0
- package/docs/design/templates/toolbar/title-and-actions.svg +1 -0
- package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -0
- package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -0
- package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -0
- package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/with-text.svg +1 -0
- package/docs/design/templates/toolbar-control-group-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group.svg +1 -0
- package/docs/design/templates/toolbar-dark.svg +1 -0
- package/docs/design/templates/toolbar-text/default-dark.svg +1 -0
- package/docs/design/templates/toolbar-text/default.svg +1 -0
- package/docs/design/templates/toolbar-text/large-dark.svg +1 -0
- package/docs/design/templates/toolbar-text/large.svg +1 -0
- package/docs/design/templates/toolbar-text/small-dark.svg +1 -0
- package/docs/design/templates/toolbar-text/small.svg +1 -0
- package/docs/design/templates/toolbar-text-dark.svg +1 -0
- package/docs/design/templates/toolbar-text.svg +1 -0
- package/docs/design/templates/toolbar.svg +1 -0
- package/docs/design/templates/value-table/details-dark.svg +1 -0
- package/docs/design/templates/value-table/details.svg +1 -0
- package/docs/design/templates/value-table-dark.svg +1 -0
- package/docs/design/templates/value-table.svg +1 -0
- package/docs/design/templates.md +128 -0
- package/docs/design-philosophy.md +33 -11
- package/docs/device-class.md +54 -0
- package/docs/examples/application-ui-profile.json +60 -0
- package/docs/examples/command-palette-adapter.tsx +68 -17
- package/docs/examples/component-catalog-extension-v2.json +80 -0
- package/docs/examples/component-catalog-extension.json +45 -0
- package/docs/layout.md +169 -38
- package/docs/nav-stack.md +77 -0
- package/docs/recipes.md +64 -16
- package/docs/split-view.md +55 -0
- package/docs/sunken-panel.md +53 -0
- package/docs/surface-scaffold.md +25 -0
- package/docs/tab-scaffold.md +52 -0
- package/docs/type-contracts.md +127 -0
- package/docs/ui-analyzer.md +118 -0
- package/docs/ui-doctor.md +91 -0
- package/docs/ui-evaluator.md +122 -0
- package/docs/ux-demo.md +29 -10
- package/docs/webawesome-theme.md +82 -8
- package/docs/workbench.md +123 -0
- package/doctor/cli.mjs +115 -0
- package/doctor/config.schema.json +68 -0
- package/doctor/eslint-diagnostics.d.mts +24 -0
- package/doctor/eslint-diagnostics.mjs +24 -0
- package/doctor/index.d.mts +116 -0
- package/doctor/index.mjs +1272 -0
- package/doctor/report.schema.json +118 -0
- package/evaluator/cli.mjs +89 -0
- package/evaluator/index.d.mts +90 -0
- package/evaluator/index.mjs +1138 -0
- package/evaluator/report.schema.json +152 -0
- package/llms.txt +260 -32
- package/package.json +205 -38
- package/traversal-exclusions.mjs +27 -0
- package/ux-demo/recipes/app-shell.tsx +223 -13
- package/ux-demo/recipes/collapsible-sidebar.tsx +230 -0
- package/ux-demo/recipes/compact-toolbar.tsx +116 -12
- package/ux-demo/recipes/composer-form.tsx +120 -19
- package/ux-demo/recipes/list-detail-dialog.tsx +205 -0
- package/ux-demo/recipes/list-workspace-states.tsx +176 -9
- package/ux-demo/recipes/loaders.ts +13 -4
- package/ux-demo/recipes/loading-inspector.tsx +191 -0
- package/ux-demo/recipes/mount-recipe.ts +31 -5
- package/ux-demo/recipes/navigation-sidebar.tsx +123 -11
- package/ux-demo/recipes/navigation-stack.tsx +121 -0
- package/ux-demo/recipes/recipes.css +125 -16
- package/ux-demo/recipes/types.ts +9 -1
- package/ux-demo/recipes/workspace-header.tsx +72 -3
- package/dist/browser/dialog-header.js +0 -5
- package/dist/browser/menu-action-row.js +0 -3
- package/dist/browser/menu-header.js +0 -5
- package/dist/browser/menu-item.js +0 -3
- package/dist/browser/page-header.js +0 -3
- package/dist/chunk-2PES33HS.js +0 -13
- package/dist/chunk-2PES33HS.js.map +0 -1
- package/dist/chunk-55DATV3A.js +0 -10
- package/dist/chunk-55DATV3A.js.map +0 -1
- package/dist/chunk-7BR3DO2A.js.map +0 -1
- package/dist/chunk-7LDCTU7D.js +0 -134
- package/dist/chunk-7LDCTU7D.js.map +0 -1
- package/dist/chunk-AQNKJRFH.js +0 -79
- package/dist/chunk-AQNKJRFH.js.map +0 -1
- package/dist/chunk-CTQKI2XL.js +0 -28
- package/dist/chunk-CTQKI2XL.js.map +0 -1
- package/dist/chunk-DAFFDO33.js +0 -14
- package/dist/chunk-DAFFDO33.js.map +0 -1
- package/dist/chunk-EGHL5S4P.js +0 -33
- package/dist/chunk-EGHL5S4P.js.map +0 -1
- package/dist/chunk-GY5WH7TO.js +0 -10
- package/dist/chunk-GY5WH7TO.js.map +0 -1
- package/dist/chunk-H5AGGVU5.js +0 -75
- package/dist/chunk-H5AGGVU5.js.map +0 -1
- package/dist/chunk-K3G72I6D.js +0 -24
- package/dist/chunk-K3G72I6D.js.map +0 -1
- package/dist/chunk-M5JRI6MN.js +0 -27
- package/dist/chunk-M5JRI6MN.js.map +0 -1
- package/dist/chunk-MBR3TYNL.js +0 -14
- package/dist/chunk-MBR3TYNL.js.map +0 -1
- package/dist/chunk-MFKMHK5W.js +0 -10
- package/dist/chunk-MFKMHK5W.js.map +0 -1
- package/dist/chunk-MQIZAD4A.js.map +0 -1
- package/dist/chunk-NPPD2A6O.js +0 -40
- package/dist/chunk-NPPD2A6O.js.map +0 -1
- package/dist/chunk-R6JHHBKQ.js +0 -19
- package/dist/chunk-R6JHHBKQ.js.map +0 -1
- package/dist/chunk-S3TPM2LP.js +0 -23
- package/dist/chunk-S3TPM2LP.js.map +0 -1
- package/dist/chunk-TRNBHPNW.js.map +0 -1
- package/dist/chunk-VHW5YNIB.js +0 -17
- package/dist/chunk-VHW5YNIB.js.map +0 -1
- package/dist/chunk-WVPYVDXY.js +0 -15
- package/dist/chunk-WVPYVDXY.js.map +0 -1
- package/dist/chunk-XZXRLY5Q.js +0 -33
- package/dist/chunk-XZXRLY5Q.js.map +0 -1
- package/dist/dialog-header.d.ts +0 -15
- package/dist/dialog-header.js +0 -5
- package/dist/dialog-header.js.map +0 -1
- package/dist/menu-action-row.js +0 -4
- package/dist/menu-action-row.js.map +0 -1
- package/dist/menu-header.d.ts +0 -41
- package/dist/menu-header.js +0 -6
- package/dist/menu-header.js.map +0 -1
- package/dist/menu-item.d.ts +0 -31
- package/dist/menu-item.js +0 -4
- package/dist/menu-item.js.map +0 -1
- package/dist/page-header.d.ts +0 -9
- package/dist/page-header.js +0 -3
- package/dist/page-header.js.map +0 -1
- package/dist/styles/dialog-header.css +0 -87
- package/dist/styles/menu-action-row.css +0 -160
- package/dist/styles/menu-header.css +0 -143
- package/dist/styles/menu-item.css +0 -123
- package/dist/styles/page-header.css +0 -33
- package/ux-demo/recipes/master-detail-dialog.tsx +0 -45
package/dist/styles/toolbar.css
CHANGED
|
@@ -20,8 +20,44 @@
|
|
|
20
20
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
.kui-toolbar
|
|
24
|
-
|
|
23
|
+
.kui-toolbar {
|
|
24
|
+
--_kui-toolbar-divider-top: transparent;
|
|
25
|
+
--_kui-toolbar-divider-right: transparent;
|
|
26
|
+
--_kui-toolbar-divider-bottom: transparent;
|
|
27
|
+
--_kui-toolbar-divider-left: transparent;
|
|
28
|
+
box-shadow:
|
|
29
|
+
inset 0 1px var(--_kui-toolbar-divider-top),
|
|
30
|
+
inset -1px 0 var(--_kui-toolbar-divider-right),
|
|
31
|
+
inset 0 -1px var(--_kui-toolbar-divider-bottom),
|
|
32
|
+
inset 1px 0 var(--_kui-toolbar-divider-left);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.kui-toolbar[divider-sides*="t"] {
|
|
36
|
+
--_kui-toolbar-divider-top: var(
|
|
37
|
+
--kui-toolbar-divider-color,
|
|
38
|
+
var(--kui-color-border)
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.kui-toolbar[divider-sides*="r"] {
|
|
43
|
+
--_kui-toolbar-divider-right: var(
|
|
44
|
+
--kui-toolbar-divider-color,
|
|
45
|
+
var(--kui-color-border)
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.kui-toolbar[divider-sides*="b"] {
|
|
50
|
+
--_kui-toolbar-divider-bottom: var(
|
|
51
|
+
--kui-toolbar-divider-color,
|
|
52
|
+
var(--kui-color-border)
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.kui-toolbar[divider-sides*="l"] {
|
|
57
|
+
--_kui-toolbar-divider-left: var(
|
|
58
|
+
--kui-toolbar-divider-color,
|
|
59
|
+
var(--kui-color-border)
|
|
60
|
+
);
|
|
25
61
|
}
|
|
26
62
|
|
|
27
63
|
.kui-toolbar__leading,
|
|
@@ -33,16 +69,25 @@
|
|
|
33
69
|
gap: var(--kui-toolbar-gap, 0.5rem);
|
|
34
70
|
}
|
|
35
71
|
|
|
72
|
+
/* Pin each zone to its column so a display:none (empty) leading or center zone
|
|
73
|
+
doesn't let the trailing zone auto-place into the first column — which left an
|
|
74
|
+
extra gap + empty track to the trailing zone's right (KF-5BEF2M). The trailing
|
|
75
|
+
zone anchors to the last column via -2/-1, so it stays flush right for both
|
|
76
|
+
the 3- and 2-column layouts, and still stacks under the leading zone when a
|
|
77
|
+
consumer collapses the toolbar to a single column. */
|
|
36
78
|
.kui-toolbar__leading {
|
|
79
|
+
grid-column: 1;
|
|
37
80
|
overflow: hidden;
|
|
38
81
|
}
|
|
39
82
|
|
|
40
83
|
.kui-toolbar__center {
|
|
41
84
|
justify-content: center;
|
|
85
|
+
grid-column: 2;
|
|
42
86
|
}
|
|
43
87
|
|
|
44
88
|
.kui-toolbar__trailing {
|
|
45
89
|
justify-content: flex-end;
|
|
90
|
+
grid-column: -2 / -1;
|
|
46
91
|
}
|
|
47
92
|
|
|
48
93
|
.kui-toolbar[data-has-center="false"] .kui-toolbar__center,
|
|
@@ -175,6 +175,19 @@
|
|
|
175
175
|
--wa-form-control-border-color: var(--wa-color-neutral-border-normal);
|
|
176
176
|
--wa-form-control-border-radius: var(--wa-border-radius-m);
|
|
177
177
|
--wa-form-control-activated-color: var(--wa-color-brand-fill-loud);
|
|
178
|
+
/* Field inset: a 1px border with 8px inside it, the same content-item
|
|
179
|
+
geometry the Kerf primitives use (docs/layout.md). WA's defaults are a
|
|
180
|
+
larger 0.75em/1em pad; this brings every form field onto our 8px rhythm
|
|
181
|
+
(and a ~40px single-line control height). */
|
|
182
|
+
--wa-form-control-border-width: var(--kui-layout-item-border-width, 1px);
|
|
183
|
+
--wa-form-control-padding-block: var(
|
|
184
|
+
--kui-layout-item-padding,
|
|
185
|
+
0.5rem
|
|
186
|
+
);
|
|
187
|
+
--wa-form-control-padding-inline: var(
|
|
188
|
+
--kui-layout-item-padding,
|
|
189
|
+
0.5rem
|
|
190
|
+
);
|
|
178
191
|
--wa-panel-border-radius: var(--wa-border-radius-l);
|
|
179
192
|
--wa-tooltip-background-color: var(--wa-color-neutral-fill-loud);
|
|
180
193
|
--wa-tooltip-content-color: var(--wa-color-neutral-on-loud);
|
|
@@ -184,6 +197,13 @@
|
|
|
184
197
|
--kui-wa-carousel-dot-hit-size: 20px;
|
|
185
198
|
--kui-wa-carousel-control-size: 28px;
|
|
186
199
|
--kui-wa-carousel-icon-size: 16px;
|
|
200
|
+
/* Non-field chrome uses Kerf's control, surface, and container spacing:
|
|
201
|
+
8px inside controls/surfaces, 8px around bordered surfaces, and 16px
|
|
202
|
+
inside the remaining content containers. */
|
|
203
|
+
--kui-wa-control-inset: var(--kui-layout-item-padding, 0.5rem);
|
|
204
|
+
--kui-wa-surface-inset: var(--kui-layout-item-padding, 0.5rem);
|
|
205
|
+
--kui-wa-surface-margin: var(--kui-layout-inline-margin, 0.5rem);
|
|
206
|
+
--kui-wa-container-inset: var(--kui-space-m, 1rem);
|
|
187
207
|
--kui-disclosure-icon-scale: 0.5;
|
|
188
208
|
--wa-shadow-s: 0 1px 3px rgb(0 0 0 / 0.14);
|
|
189
209
|
--wa-shadow-m: 0 0.35rem 1rem rgb(0 0 0 / 0.11);
|
|
@@ -248,9 +268,160 @@
|
|
|
248
268
|
transform: scale(var(--kui-disclosure-icon-scale));
|
|
249
269
|
}
|
|
250
270
|
|
|
271
|
+
/* Bordered/fill surfaces follow the same 8px outer margin + 8px inner
|
|
272
|
+
padding contract as a Kerf content item. Accordion owns one outer margin
|
|
273
|
+
for the group; its items retain connected borders. */
|
|
274
|
+
:is(wa-accordion, wa-card, wa-details, wa-callout, wa-include) {
|
|
275
|
+
margin-inline: var(--kui-wa-surface-margin);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
wa-card,
|
|
279
|
+
wa-details,
|
|
280
|
+
wa-accordion-item {
|
|
281
|
+
/* WA declares this custom property on :host inside each shadow root. The
|
|
282
|
+
important flag is required for a public host override to cross that
|
|
283
|
+
encapsulation boundary. */
|
|
284
|
+
--spacing: var(--kui-wa-surface-inset) !important;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/* Card halves --spacing for its header block padding upstream, so pin the
|
|
288
|
+
public part to the same full surface inset as its body and footer. */
|
|
289
|
+
wa-card::part(header) {
|
|
290
|
+
border-bottom: none;
|
|
291
|
+
padding: var(--kui-wa-surface-inset);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
wa-card::part(body) {
|
|
295
|
+
padding: var(--kui-wa-surface-inset);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
wa-card::part(footer) {
|
|
299
|
+
border-top: none;
|
|
300
|
+
padding: var(--kui-wa-container-inset);
|
|
301
|
+
display: flex;
|
|
302
|
+
justify-content: flex-end;
|
|
303
|
+
gap: var(--kui-layout-item-gap, 0.5rem);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/* Dialog content follows the compact surface inset, while its action region
|
|
307
|
+
retains the roomier homogeneous-group step. Keep these independent of
|
|
308
|
+
Web Awesome's shared --spacing property so applications can tune the
|
|
309
|
+
header without accidentally moving body or footer content. */
|
|
310
|
+
wa-dialog::part(header) {
|
|
311
|
+
padding: var(--kui-wa-surface-inset);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
wa-dialog::part(body) {
|
|
315
|
+
padding: var(--kui-wa-surface-inset);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
wa-dialog::part(footer) {
|
|
319
|
+
padding: var(--kui-wa-container-inset);
|
|
320
|
+
display: flex;
|
|
321
|
+
justify-content: flex-end;
|
|
322
|
+
gap: var(--kui-layout-item-gap, 0.5rem);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/* Dialogs that provide their own dismissal affordance can opt out of Web
|
|
326
|
+
Awesome's header action region without reaching through the shadow root.
|
|
327
|
+
`header-actions` is a directly exported part, so it must be targeted from
|
|
328
|
+
the host rather than chained through the `dialog` and `header` parts. */
|
|
329
|
+
wa-dialog.hide-actions::part(header-actions) {
|
|
330
|
+
display: none;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
wa-callout {
|
|
334
|
+
padding: var(--kui-wa-surface-inset) !important;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
wa-include {
|
|
338
|
+
padding: var(--kui-wa-surface-inset);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/* Interactive and item chrome follows the content-item 8px inset. */
|
|
342
|
+
wa-tab::part(tab) {
|
|
343
|
+
padding: var(--kui-wa-control-inset);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
wa-tab-panel {
|
|
347
|
+
--padding: var(--kui-wa-container-inset) 0 !important;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
wa-tree-item::part(item) {
|
|
351
|
+
margin-inline: var(--kui-layout-inline-margin, 0.5rem);
|
|
352
|
+
padding-inline-end: var(--kui-wa-control-inset);
|
|
353
|
+
border-radius: var(--kui-layout-rounded-radius, calc(1px + 0.6875rem));
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
wa-tag {
|
|
357
|
+
padding-inline: var(--kui-wa-control-inset) !important;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
wa-dropdown-item {
|
|
361
|
+
padding-inline: var(--kui-wa-control-inset) !important;
|
|
362
|
+
}
|
|
363
|
+
|
|
251
364
|
wa-popover {
|
|
252
365
|
--arrow-size: var(--kui-wa-popover-arrow-size);
|
|
253
366
|
}
|
|
367
|
+
|
|
368
|
+
/* A form field's top label is inset by the field's own border + inline padding
|
|
369
|
+
(1px + 8px = 9px) so the label text lines up with the value inside the field,
|
|
370
|
+
and it is styled exactly like a ListHeader label: uppercase, xs, quiet. */
|
|
371
|
+
:is(
|
|
372
|
+
wa-checkbox-group,
|
|
373
|
+
wa-color-picker,
|
|
374
|
+
wa-input,
|
|
375
|
+
wa-known-date,
|
|
376
|
+
wa-number-input,
|
|
377
|
+
wa-radio-group,
|
|
378
|
+
wa-select,
|
|
379
|
+
wa-textarea,
|
|
380
|
+
wa-time-input
|
|
381
|
+
)::part(form-control-label),
|
|
382
|
+
wa-otp-input::part(label),
|
|
383
|
+
wa-slider::part(label) {
|
|
384
|
+
padding-inline: calc(
|
|
385
|
+
var(--wa-form-control-border-width) +
|
|
386
|
+
var(--wa-form-control-padding-inline)
|
|
387
|
+
);
|
|
388
|
+
color: var(--kui-color-neutral-on-quiet, var(--wa-color-text-quiet));
|
|
389
|
+
font-size: var(--kui-font-xs, var(--wa-font-size-xs));
|
|
390
|
+
font-weight: 650;
|
|
391
|
+
letter-spacing: 0.04em;
|
|
392
|
+
line-height: var(--wa-line-height-condensed);
|
|
393
|
+
text-transform: uppercase;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/* Checkbox/radio groups and the color picker have no bordered field shell,
|
|
397
|
+
so their control regions need the content-item's 8px inline outer inset. */
|
|
398
|
+
:is(wa-checkbox-group, wa-color-picker, wa-radio-group)::part(
|
|
399
|
+
form-control-input
|
|
400
|
+
) {
|
|
401
|
+
margin-inline: var(--kui-layout-inline-margin, 0.5rem);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
wa-slider::part(slider) {
|
|
405
|
+
margin-inline: var(--kui-layout-inline-margin, 0.5rem);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/* Secondary captions and hints align with the value inside bordered fields:
|
|
409
|
+
1px border + 8px field padding = a 9px logical inset. */
|
|
410
|
+
wa-known-date::part(field-label),
|
|
411
|
+
:is(
|
|
412
|
+
wa-input,
|
|
413
|
+
wa-known-date,
|
|
414
|
+
wa-number-input,
|
|
415
|
+
wa-otp-input,
|
|
416
|
+
wa-select,
|
|
417
|
+
wa-textarea,
|
|
418
|
+
wa-time-input
|
|
419
|
+
)::part(hint) {
|
|
420
|
+
padding-inline: calc(
|
|
421
|
+
var(--wa-form-control-border-width) +
|
|
422
|
+
var(--wa-form-control-padding-inline)
|
|
423
|
+
);
|
|
424
|
+
}
|
|
254
425
|
}
|
|
255
426
|
|
|
256
427
|
@media (prefers-contrast: more) {
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
.kui-workbench {
|
|
2
|
+
position: relative;
|
|
3
|
+
display: flex;
|
|
4
|
+
min-width: 0;
|
|
5
|
+
min-height: 0;
|
|
6
|
+
height: 100%;
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
background: var(--kui-color-surface);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/* Side rails. Collapsing snaps the flex track to zero (one reflow) while the
|
|
12
|
+
fixed-width content slides out via transform (composited, clipped) — never a
|
|
13
|
+
per-frame width animation. See docs/18 / the KF-7QKJRK catalog sidebar. */
|
|
14
|
+
.kui-workbench__rail {
|
|
15
|
+
flex: 0 0 var(--kui-workbench-rail-width, 17.5rem);
|
|
16
|
+
min-width: 0;
|
|
17
|
+
overflow: hidden;
|
|
18
|
+
background: var(--kui-color-surface);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.kui-workbench__rail--left {
|
|
22
|
+
border-inline-end: 1px solid var(--kui-color-border);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.kui-workbench__rail--right {
|
|
26
|
+
border-inline-start: 1px solid var(--kui-color-border);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.kui-workbench__rail[data-collapsed="true"] {
|
|
30
|
+
flex-basis: 0;
|
|
31
|
+
border-inline: 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.kui-workbench__rail[data-separator="hidden"],
|
|
35
|
+
.kui-workbench__drawer[data-separator="hidden"] {
|
|
36
|
+
border-color: transparent;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.kui-workbench__center {
|
|
40
|
+
display: flex;
|
|
41
|
+
flex: 1;
|
|
42
|
+
min-width: 0;
|
|
43
|
+
min-height: 0;
|
|
44
|
+
overflow: hidden;
|
|
45
|
+
flex-direction: column;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.kui-workbench__main {
|
|
49
|
+
flex: 1;
|
|
50
|
+
min-height: 0;
|
|
51
|
+
overflow: auto;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* Bottom drawer — the vertical analogue of a rail. */
|
|
55
|
+
.kui-workbench__drawer {
|
|
56
|
+
position: relative;
|
|
57
|
+
flex: 0 0 var(--kui-workbench-drawer-height, 13.75rem);
|
|
58
|
+
min-height: 0;
|
|
59
|
+
overflow: hidden;
|
|
60
|
+
border-block-start: 1px solid var(--kui-color-border);
|
|
61
|
+
background: var(--kui-color-surface);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.kui-workbench__drawer[data-collapsed="true"] {
|
|
65
|
+
flex-basis: 0;
|
|
66
|
+
border-block-start: 0;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.kui-workbench__rail[data-content-overflow="auto"],
|
|
70
|
+
.kui-workbench__drawer[data-content-overflow="auto"] {
|
|
71
|
+
overflow: auto;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.kui-workbench__rail[data-content-overflow="visible"],
|
|
75
|
+
.kui-workbench__drawer[data-content-overflow="visible"] {
|
|
76
|
+
z-index: var(--kui-workbench-popup-z, 5);
|
|
77
|
+
overflow: visible;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* The fixed-size sliding content. The rail/drawer keeps a definite size on its
|
|
81
|
+
content so the transform reads as a slide, not a squeeze. */
|
|
82
|
+
.kui-workbench__rail .kui-workbench__panel-content {
|
|
83
|
+
width: var(--kui-workbench-rail-width, 17.5rem);
|
|
84
|
+
height: 100%;
|
|
85
|
+
transition: transform 200ms ease;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.kui-workbench__drawer .kui-workbench__panel-content {
|
|
89
|
+
position: absolute;
|
|
90
|
+
inset-inline: 0;
|
|
91
|
+
inset-block-end: 0;
|
|
92
|
+
width: 100%;
|
|
93
|
+
height: var(--kui-workbench-drawer-height, 13.75rem);
|
|
94
|
+
transition: transform 200ms ease;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.kui-workbench__rail[data-collapse-motion="none"] .kui-workbench__panel-content,
|
|
98
|
+
.kui-workbench__drawer[data-collapse-motion="none"]
|
|
99
|
+
.kui-workbench__panel-content {
|
|
100
|
+
transition: none;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.kui-workbench__rail[data-collapse-motion="fade-slide"][data-collapsed="true"]
|
|
104
|
+
.kui-workbench__panel-content,
|
|
105
|
+
.kui-workbench__drawer[data-collapse-motion="fade-slide"][data-collapsed="true"]
|
|
106
|
+
.kui-workbench__panel-content {
|
|
107
|
+
opacity: 0;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.kui-workbench__rail--left[data-collapsed="true"]
|
|
111
|
+
.kui-workbench__panel-content {
|
|
112
|
+
transform: translateX(-100%);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.kui-workbench__rail--right[data-collapsed="true"]
|
|
116
|
+
.kui-workbench__panel-content {
|
|
117
|
+
transform: translateX(100%);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.kui-workbench__drawer[data-collapsed="true"] .kui-workbench__panel-content {
|
|
121
|
+
transform: translateY(100%);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.kui-workbench__rail[data-presentation="overlay"],
|
|
125
|
+
.kui-workbench__drawer[data-presentation="overlay"] {
|
|
126
|
+
position: absolute;
|
|
127
|
+
z-index: var(--kui-workbench-overlay-z, 41);
|
|
128
|
+
max-width: var(--kui-workbench-overlay-max-width, 85vw);
|
|
129
|
+
max-height: var(--kui-workbench-overlay-max-height, 85vh);
|
|
130
|
+
box-shadow: var(--kui-shadow-l, 0 8px 32px rgb(0 0 0 / 24%));
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.kui-workbench__rail[data-presentation="overlay"] {
|
|
134
|
+
inset-block: 0;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.kui-workbench__rail--left[data-presentation="overlay"] {
|
|
138
|
+
inset-inline-start: 0;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.kui-workbench__rail--right[data-presentation="overlay"] {
|
|
142
|
+
inset-inline-end: 0;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.kui-workbench__drawer[data-presentation="overlay"] {
|
|
146
|
+
inset-inline: 0;
|
|
147
|
+
inset-block-end: 0;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.kui-workbench__rail[data-presentation="overlay"][data-collapsed="true"],
|
|
151
|
+
.kui-workbench__drawer[data-presentation="overlay"][data-collapsed="true"] {
|
|
152
|
+
pointer-events: none;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.kui-workbench__rail[data-presentation="hidden"],
|
|
156
|
+
.kui-workbench__drawer[data-presentation="hidden"] {
|
|
157
|
+
display: none;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.kui-workbench__restore {
|
|
161
|
+
position: fixed;
|
|
162
|
+
z-index: var(--kui-workbench-restore-z, 42);
|
|
163
|
+
inset-block-end: calc(
|
|
164
|
+
var(--kui-workbench-restore-inset, 1rem) +
|
|
165
|
+
var(--kui-safe-area-block-end, env(safe-area-inset-bottom, 0px))
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.kui-workbench__restore[data-position="bottom-start"] {
|
|
170
|
+
inset-inline-start: calc(
|
|
171
|
+
var(--kui-workbench-restore-inset, 1rem) +
|
|
172
|
+
var(--kui-safe-area-inline-start, env(safe-area-inset-left, 0px))
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.kui-workbench__restore[data-position="bottom-end"] {
|
|
177
|
+
inset-inline-end: calc(
|
|
178
|
+
var(--kui-workbench-restore-inset, 1rem) +
|
|
179
|
+
var(--kui-safe-area-inline-end, env(safe-area-inset-right, 0px))
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
@media (prefers-reduced-motion: reduce) {
|
|
184
|
+
.kui-workbench__panel-content {
|
|
185
|
+
transition: none;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
3
|
+
|
|
4
|
+
type SunkenPanelShape = 'rounded' | 'square';
|
|
5
|
+
interface SunkenPanelProps {
|
|
6
|
+
children?: KerfUiContent;
|
|
7
|
+
/** Optional accessible landmark name for a distinct application region. */
|
|
8
|
+
ariaLabel?: string;
|
|
9
|
+
/** Corner shape: a rounded rectangle (default) or square corners. */
|
|
10
|
+
shape?: SunkenPanelShape;
|
|
11
|
+
className?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* A lowered application surface with one compact inset and a vertical content
|
|
15
|
+
* stack. The panel owns its background and padding; children own their own
|
|
16
|
+
* borders and internal geometry.
|
|
17
|
+
*/
|
|
18
|
+
declare function SunkenPanel({ children, ariaLabel, shape, className, }: SunkenPanelProps): kerfjs.SafeHtml;
|
|
19
|
+
|
|
20
|
+
export { SunkenPanel, type SunkenPanelProps, type SunkenPanelShape };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"sunken-panel.js"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
3
|
+
|
|
4
|
+
type DialogSurfaceSize = 'small' | 'medium' | 'large';
|
|
5
|
+
type DialogSurfacePresentation = 'modal' | 'side-sheet' | 'fullscreen';
|
|
6
|
+
type SurfaceInset = 'none' | 'compact' | 'comfortable';
|
|
7
|
+
interface DialogSurfaceProps {
|
|
8
|
+
children: KerfUiContent;
|
|
9
|
+
size?: DialogSurfaceSize;
|
|
10
|
+
presentation?: DialogSurfacePresentation;
|
|
11
|
+
bodyInset?: SurfaceInset;
|
|
12
|
+
footerInset?: SurfaceInset;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
/** Configure recurring Web Awesome dialog geometry without consumer ::part() CSS. */
|
|
16
|
+
declare function DialogSurface({ children, size, presentation, bodyInset, footerInset, className, }: DialogSurfaceProps): kerfjs.SafeHtml;
|
|
17
|
+
type PopupSurfaceInset = 'standard' | 'compact' | 'list-zero';
|
|
18
|
+
interface PopupSurfaceProps {
|
|
19
|
+
children: KerfUiContent;
|
|
20
|
+
inset?: PopupSurfaceInset;
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
/** Configure recurring Web Awesome dropdown-menu geometry without consumer ::part() CSS. */
|
|
24
|
+
declare function PopupSurface({ children, inset, className, }: PopupSurfaceProps): kerfjs.SafeHtml;
|
|
25
|
+
|
|
26
|
+
export { DialogSurface, type DialogSurfacePresentation, type DialogSurfaceProps, type DialogSurfaceSize, PopupSurface, type PopupSurfaceInset, type PopupSurfaceProps, type SurfaceInset };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"surface-scaffold.js"}
|
package/dist/tab-bar.d.ts
CHANGED
|
@@ -1,14 +1,32 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
2
3
|
|
|
4
|
+
type TabActivation = 'automatic' | 'manual';
|
|
5
|
+
type TabBarAllocation = 'intrinsic' | 'fill';
|
|
6
|
+
type TabBarPresentation = 'rail' | 'segmented' | 'inspector';
|
|
7
|
+
type TabBarTrailingPlacement = 'separate' | 'adjacent';
|
|
3
8
|
interface TabBarProps {
|
|
4
9
|
id: string;
|
|
5
10
|
label: string;
|
|
6
|
-
children:
|
|
7
|
-
leading?:
|
|
8
|
-
trailing?:
|
|
11
|
+
children: KerfUiContent;
|
|
12
|
+
leading?: KerfUiContent;
|
|
13
|
+
trailing?: KerfUiContent;
|
|
9
14
|
className?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Keyboard activation mode for this strip, emitted as `data-tab-activation` for
|
|
17
|
+
* `wireTabBars` to read (overrides its `activation` option). `'automatic'` (default)
|
|
18
|
+
* selects on arrow / Home / End; `'manual'` moves roving focus only and the user
|
|
19
|
+
* selects with Enter / Space / click — use it when selecting a tab is a heavy action.
|
|
20
|
+
*/
|
|
21
|
+
activation?: TabActivation;
|
|
22
|
+
/** How available strip width is allocated across child AppTabs. */
|
|
23
|
+
allocation?: TabBarAllocation;
|
|
24
|
+
/** Named strip chrome for application rails, segmented tabs, or inspectors. */
|
|
25
|
+
presentation?: TabBarPresentation;
|
|
26
|
+
/** Keep a trailing action beside the final tab or at the far edge of the bar. */
|
|
27
|
+
trailingPlacement?: TabBarTrailingPlacement;
|
|
10
28
|
}
|
|
11
29
|
/** Render a controlled tab strip. The application owns selection, order, and persistence. */
|
|
12
|
-
declare function TabBar({ id, label, children, leading, trailing, className }: TabBarProps): SafeHtml;
|
|
30
|
+
declare function TabBar({ id, label, children, leading, trailing, className, activation, allocation, presentation, trailingPlacement, }: TabBarProps): kerfjs.SafeHtml;
|
|
13
31
|
|
|
14
|
-
export { TabBar, type TabBarProps };
|
|
32
|
+
export { type TabActivation, TabBar, type TabBarAllocation, type TabBarPresentation, type TabBarProps, type TabBarTrailingPlacement };
|
package/dist/tab-bar.js
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { SafeHtml } from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
3
|
+
|
|
4
|
+
interface TabScaffoldTab<Id extends string = string> {
|
|
5
|
+
id: Id;
|
|
6
|
+
label: string;
|
|
7
|
+
/** Decorative icon shown above the label in the bottom bar. */
|
|
8
|
+
icon?: SafeHtml;
|
|
9
|
+
/** The tab's content — typically a `NavStack` so each tab keeps its own stack. */
|
|
10
|
+
content: KerfUiContent;
|
|
11
|
+
}
|
|
12
|
+
interface TabScaffoldProps<Id extends string = string> {
|
|
13
|
+
id: string;
|
|
14
|
+
/** Accessible name for the tab bar. */
|
|
15
|
+
label: string;
|
|
16
|
+
tabs: readonly TabScaffoldTab<Id>[];
|
|
17
|
+
/** The controlled active tab id (the app owns selection). */
|
|
18
|
+
active: NoInfer<Id>;
|
|
19
|
+
className?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A mobile-first, iOS-like bottom tab scaffold: a bottom tab bar that switches
|
|
23
|
+
* between major sections, each tab keeping its own content (usually a `NavStack`)
|
|
24
|
+
* mounted so its stack and scroll survive a switch. Controlled — the app owns
|
|
25
|
+
* `active`; wire selection with `@kerfjs/ui/wire-tab-scaffold`'s `wireTabScaffold`.
|
|
26
|
+
* On larger classes, promote the tabs to a `Workbench` rail or sidebar instead of
|
|
27
|
+
* a bottom bar. See `docs/23-app-layouts.md` §3.4.
|
|
28
|
+
*/
|
|
29
|
+
declare function TabScaffold<Id extends string>({ id, label, tabs, active, className, }: TabScaffoldProps<Id>): SafeHtml;
|
|
30
|
+
|
|
31
|
+
export { TabScaffold, type TabScaffoldProps, type TabScaffoldTab };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'kerfjs/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
// src/tab-scaffold.tsx
|
|
4
|
+
function TabScaffold({
|
|
5
|
+
id,
|
|
6
|
+
label,
|
|
7
|
+
tabs,
|
|
8
|
+
active,
|
|
9
|
+
className = ""
|
|
10
|
+
}) {
|
|
11
|
+
return /* @__PURE__ */ jsxs(
|
|
12
|
+
"section",
|
|
13
|
+
{
|
|
14
|
+
class: `kui-tab-scaffold ${className}`.trim(),
|
|
15
|
+
id,
|
|
16
|
+
"data-component": "tab-scaffold",
|
|
17
|
+
"data-tab-scaffold-id": id,
|
|
18
|
+
children: [
|
|
19
|
+
/* @__PURE__ */ jsx("div", { class: "kui-tab-scaffold__scenes", children: tabs.map((tab) => /* @__PURE__ */ jsx(
|
|
20
|
+
"div",
|
|
21
|
+
{
|
|
22
|
+
class: "kui-tab-scaffold__scene",
|
|
23
|
+
"data-tab-scaffold-scene": tab.id,
|
|
24
|
+
"data-active": String(tab.id === active),
|
|
25
|
+
"aria-hidden": String(tab.id !== active),
|
|
26
|
+
children: tab.content
|
|
27
|
+
}
|
|
28
|
+
)) }),
|
|
29
|
+
/* @__PURE__ */ jsx("nav", { class: "kui-tab-scaffold__bar", role: "tablist", "aria-label": label, children: tabs.map((tab) => /* @__PURE__ */ jsxs(
|
|
30
|
+
"button",
|
|
31
|
+
{
|
|
32
|
+
type: "button",
|
|
33
|
+
class: "kui-tab-scaffold__tab",
|
|
34
|
+
role: "tab",
|
|
35
|
+
"data-tab-scaffold-tab": tab.id,
|
|
36
|
+
"aria-selected": String(tab.id === active),
|
|
37
|
+
tabindex: tab.id === active ? "0" : "-1",
|
|
38
|
+
children: [
|
|
39
|
+
tab.icon && /* @__PURE__ */ jsx("span", { class: "kui-tab-scaffold__tab-icon", "aria-hidden": "true", children: tab.icon }),
|
|
40
|
+
/* @__PURE__ */ jsx("span", { class: "kui-tab-scaffold__tab-label", children: tab.label })
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
)) })
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { TabScaffold };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=tab-scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tab-scaffold.tsx"],"names":[],"mappings":";;;AA+BO,SAAS,WAAA,CAA+B;AAAA,EAC7C,EAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAyB;AACvB,EAAA,uBACE,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC5C,EAAA;AAAA,MACA,gBAAA,EAAe,cAAA;AAAA,MACf,sBAAA,EAAsB,EAAA;AAAA,MAEtB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAI,KAAA,EAAM,0BAAA,EACR,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBACT,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,yBAAA;AAAA,YACN,2BAAyB,GAAA,CAAI,EAAA;AAAA,YAC7B,aAAA,EAAa,MAAA,CAAO,GAAA,CAAI,EAAA,KAAO,MAAM,CAAA;AAAA,YACrC,aAAA,EAAa,MAAA,CAAO,GAAA,CAAI,EAAA,KAAO,MAAM,CAAA;AAAA,YAEpC,QAAA,EAAA,GAAA,CAAI;AAAA;AAAA,SAER,CAAA,EACH,CAAA;AAAA,wBACA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,uBAAA,EAAwB,IAAA,EAAK,SAAA,EAAU,YAAA,EAAY,KAAA,EAC3D,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBACT,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,KAAA,EAAM,uBAAA;AAAA,YACN,IAAA,EAAK,KAAA;AAAA,YACL,yBAAuB,GAAA,CAAI,EAAA;AAAA,YAC3B,eAAA,EAAe,MAAA,CAAO,GAAA,CAAI,EAAA,KAAO,MAAM,CAAA;AAAA,YACvC,QAAA,EAAU,GAAA,CAAI,EAAA,KAAO,MAAA,GAAS,GAAA,GAAM,IAAA;AAAA,YAEnC,QAAA,EAAA;AAAA,cAAA,GAAA,CAAI,IAAA,wBACF,MAAA,EAAA,EAAK,KAAA,EAAM,8BAA6B,aAAA,EAAY,MAAA,EAClD,cAAI,IAAA,EACP,CAAA;AAAA,8BAEF,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,6BAAA,EAA+B,cAAI,KAAA,EAAM;AAAA;AAAA;AAAA,SAExD,CAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ","file":"tab-scaffold.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport type { KerfUiContent } from './semantic-content.js';\n\nexport interface TabScaffoldTab<Id extends string = string> {\n id: Id;\n label: string;\n /** Decorative icon shown above the label in the bottom bar. */\n icon?: SafeHtml;\n /** The tab's content — typically a `NavStack` so each tab keeps its own stack. */\n content: KerfUiContent;\n}\n\nexport interface TabScaffoldProps<Id extends string = string> {\n id: string;\n /** Accessible name for the tab bar. */\n label: string;\n tabs: readonly TabScaffoldTab<Id>[];\n /** The controlled active tab id (the app owns selection). */\n active: NoInfer<Id>;\n className?: string;\n}\n\n/**\n * A mobile-first, iOS-like bottom tab scaffold: a bottom tab bar that switches\n * between major sections, each tab keeping its own content (usually a `NavStack`)\n * mounted so its stack and scroll survive a switch. Controlled — the app owns\n * `active`; wire selection with `@kerfjs/ui/wire-tab-scaffold`'s `wireTabScaffold`.\n * On larger classes, promote the tabs to a `Workbench` rail or sidebar instead of\n * a bottom bar. See `docs/23-app-layouts.md` §3.4.\n */\nexport function TabScaffold<Id extends string>({\n id,\n label,\n tabs,\n active,\n className = '',\n}: TabScaffoldProps<Id>) {\n return (\n <section\n class={`kui-tab-scaffold ${className}`.trim()}\n id={id}\n data-component=\"tab-scaffold\"\n data-tab-scaffold-id={id}\n >\n <div class=\"kui-tab-scaffold__scenes\">\n {tabs.map((tab) => (\n <div\n class=\"kui-tab-scaffold__scene\"\n data-tab-scaffold-scene={tab.id}\n data-active={String(tab.id === active)}\n aria-hidden={String(tab.id !== active)}\n >\n {tab.content}\n </div>\n ))}\n </div>\n <nav class=\"kui-tab-scaffold__bar\" role=\"tablist\" aria-label={label}>\n {tabs.map((tab) => (\n <button\n type=\"button\"\n class=\"kui-tab-scaffold__tab\"\n role=\"tab\"\n data-tab-scaffold-tab={tab.id}\n aria-selected={String(tab.id === active)}\n tabindex={tab.id === active ? '0' : '-1'}\n >\n {tab.icon && (\n <span class=\"kui-tab-scaffold__tab-icon\" aria-hidden=\"true\">\n {tab.icon}\n </span>\n )}\n <span class=\"kui-tab-scaffold__tab-label\">{tab.label}</span>\n </button>\n ))}\n </nav>\n </section>\n );\n}\n"]}
|
package/dist/text.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { KerfBaseAttrs } from 'kerfjs/jsx-runtime';
|
|
3
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
4
|
+
|
|
5
|
+
type TextVariant = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p';
|
|
6
|
+
type TextContent = KerfUiContent | string | number | readonly TextContent[];
|
|
7
|
+
type TextProps = Omit<KerfBaseAttrs, 'children' | 'class' | 'className'> & {
|
|
8
|
+
/** Native heading or paragraph element to render. */
|
|
9
|
+
variant: TextVariant;
|
|
10
|
+
children: TextContent;
|
|
11
|
+
class?: string;
|
|
12
|
+
className?: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Semantic heading or paragraph text with the standard content-item padding.
|
|
16
|
+
* All ordinary native heading/paragraph attributes pass through to the element.
|
|
17
|
+
*/
|
|
18
|
+
declare function Text({ variant: Variant, children, class: classValue, className, ...attributes }: TextProps): kerfjs.SafeHtml;
|
|
19
|
+
|
|
20
|
+
export { Text, type TextContent, type TextProps, type TextVariant };
|
package/dist/text.js
ADDED