@kerfjs/ui 5.0.0-beta.97 → 5.0.0-beta.99
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 +42 -1
- package/ai/application-ui-diagnostic-ids-v1.json +1 -0
- package/ai/component-catalog.json +487 -66
- package/ai/component-catalog.schema.json +1 -1
- package/ai/component-composition-rules.json +22 -2
- package/ai/component-composition.json +360 -33
- package/ai/component-composition.schema.json +1 -1
- package/ai/components/README.md +18 -17
- package/ai/components/anchored-surface.md +13 -0
- package/ai/components/application-tabs.md +1 -1
- package/ai/components/chip.md +9 -5
- package/ai/components/choice-chips.md +15 -8
- package/ai/components/collapsible-panel.md +3 -2
- package/ai/components/composer.md +83 -0
- package/ai/components/content-item.md +2 -2
- package/ai/components/corner-status.md +1 -1
- package/ai/components/document-baseline.md +3 -3
- package/ai/components/foundation.md +2 -2
- package/ai/components/layout.md +1 -1
- package/ai/components/list-action-row.md +5 -1
- package/ai/components/list-item.md +5 -1
- package/ai/components/list.md +19 -3
- package/ai/components/nav-stack.md +11 -2
- package/ai/components/pane.md +13 -4
- package/ai/components/popup-menu.md +4 -4
- package/ai/components/recipe-app-shell.md +3 -3
- package/ai/components/recipe-collapsible-sidebar.md +3 -3
- package/ai/components/recipe-compact-toolbar.md +1 -1
- package/ai/components/recipe-composer-form.md +3 -3
- package/ai/components/recipe-list-detail-dialog.md +2 -2
- package/ai/components/recipe-list-workspace-states.md +3 -3
- package/ai/components/recipe-loading-inspector.md +1 -1
- package/ai/components/recipe-navigation-sidebar.md +3 -3
- package/ai/components/recipe-navigation-stack.md +3 -3
- package/ai/components/recipe-workspace-header.md +3 -3
- package/ai/components/resize.md +2 -2
- package/ai/components/split-view.md +4 -2
- package/ai/components/sunken-panel.md +2 -2
- package/ai/components/surface-scaffold.md +15 -3
- package/ai/components/tab-bar.md +1 -0
- package/ai/components/tab-navigator.md +4 -0
- package/ai/components/toolbar-control-group.md +2 -0
- package/ai/components/toolbar-text.md +1 -0
- package/ai/components/toolbar.md +1 -0
- package/ai/components/workbench.md +1 -0
- package/ai/public-api-signatures-v1.md +504 -80
- package/ai/skill.md +41 -14
- package/ai/webawesome-jsx-signatures-v1.md +1 -1
- package/analyzer/component-ownership.mjs +1 -1
- package/analyzer/index.mjs +41 -14
- package/dist/anchored-surface.d.ts +30 -2
- package/dist/anchored-surface.js +1 -1
- package/dist/app-tab.js +1 -1
- package/dist/browser/composer.js +4 -0
- package/dist/catalog-resources.d.ts +3 -2
- package/dist/catalog-resources.js +4 -4
- package/dist/catalog-resources.js.map +1 -1
- package/dist/catalog.d.ts +39 -8
- package/dist/catalog.js +55 -32
- package/dist/catalog.js.map +1 -1
- package/dist/chip.d.ts +41 -9
- package/dist/chip.js +1 -1
- package/dist/choice-chips.d.ts +40 -16
- package/dist/choice-chips.js +1 -1
- package/dist/chunk-34U4ANDJ.js +119 -0
- package/dist/chunk-34U4ANDJ.js.map +1 -0
- package/dist/{chunk-36TL6BCR.js → chunk-3GLYIIFR.js} +34 -6
- package/dist/chunk-3GLYIIFR.js.map +1 -0
- package/dist/{chunk-HWY4BSLS.js → chunk-3VXDSIBJ.js} +2 -2
- package/dist/{chunk-HWY4BSLS.js.map → chunk-3VXDSIBJ.js.map} +1 -1
- package/dist/chunk-3WYREXW4.js +120 -0
- package/dist/chunk-3WYREXW4.js.map +1 -0
- package/dist/chunk-AV7CPAPT.js +82 -0
- package/dist/chunk-AV7CPAPT.js.map +1 -0
- package/dist/{chunk-XK4E225T.js → chunk-B53PS2LE.js} +2 -2
- package/dist/{chunk-XK4E225T.js.map → chunk-B53PS2LE.js.map} +1 -1
- package/dist/{chunk-R42D2BAO.js → chunk-CA7LNX3J.js} +2 -2
- package/dist/{chunk-R42D2BAO.js.map → chunk-CA7LNX3J.js.map} +1 -1
- package/dist/{chunk-AYHC62OZ.js → chunk-CMETHPKR.js} +26 -29
- package/dist/chunk-CMETHPKR.js.map +1 -0
- package/dist/{chunk-Y43B6DS3.js → chunk-CVD5IZGB.js} +2 -2
- package/dist/{chunk-Y43B6DS3.js.map → chunk-CVD5IZGB.js.map} +1 -1
- package/dist/{chunk-6STQXRT4.js → chunk-CXZXHZTR.js} +121 -12
- package/dist/chunk-CXZXHZTR.js.map +1 -0
- package/dist/{chunk-GZE2XVKC.js → chunk-DZJ4GBSP.js} +3 -3
- package/dist/{chunk-GZE2XVKC.js.map → chunk-DZJ4GBSP.js.map} +1 -1
- package/dist/chunk-ELCMSQNJ.js +49 -0
- package/dist/chunk-ELCMSQNJ.js.map +1 -0
- package/dist/{chunk-P74VXMB6.js → chunk-EOO6PYGF.js} +7 -14
- package/dist/chunk-EOO6PYGF.js.map +1 -0
- package/dist/{chunk-PRG4CL3Q.js → chunk-FR76ZJQC.js} +21 -19
- package/dist/chunk-FR76ZJQC.js.map +1 -0
- package/dist/{chunk-QQ3TTWFH.js → chunk-G3J7JDP6.js} +1 -1
- package/dist/{chunk-QQ3TTWFH.js.map → chunk-G3J7JDP6.js.map} +1 -1
- package/dist/{chunk-IGTWXPTN.js → chunk-HGV7J4T6.js} +3 -3
- package/dist/{chunk-IGTWXPTN.js.map → chunk-HGV7J4T6.js.map} +1 -1
- package/dist/{chunk-YWQGSUF2.js → chunk-HLDRH23D.js} +3 -3
- package/dist/{chunk-YWQGSUF2.js.map → chunk-HLDRH23D.js.map} +1 -1
- package/dist/{chunk-PBT3CPPY.js → chunk-HQZYKJ56.js} +24 -4
- package/dist/chunk-HQZYKJ56.js.map +1 -0
- package/dist/{chunk-V6W56V3N.js → chunk-HZPHCSCS.js} +16 -3
- package/dist/chunk-HZPHCSCS.js.map +1 -0
- package/dist/{chunk-GJYQ27C2.js → chunk-INI4WDWC.js} +8 -1
- package/dist/chunk-INI4WDWC.js.map +1 -0
- package/dist/{chunk-U657IHFB.js → chunk-IQSRHXZR.js} +10 -4
- package/dist/chunk-IQSRHXZR.js.map +1 -0
- package/dist/{chunk-KQDU7Z7P.js → chunk-K4AT3V3J.js} +2 -1
- package/dist/chunk-K4AT3V3J.js.map +1 -0
- package/dist/{chunk-QIAPOWHH.js → chunk-KCS6NJ3O.js} +2 -2
- package/dist/{chunk-QIAPOWHH.js.map → chunk-KCS6NJ3O.js.map} +1 -1
- package/dist/{chunk-UKKRPP56.js → chunk-LOSRXZAH.js} +2 -2
- package/dist/{chunk-UKKRPP56.js.map → chunk-LOSRXZAH.js.map} +1 -1
- package/dist/{chunk-ROZLJULF.js → chunk-MF6ZUUJZ.js} +8 -3
- package/dist/chunk-MF6ZUUJZ.js.map +1 -0
- package/dist/{chunk-6IVNMC6R.js → chunk-MHMWQ7RB.js} +2 -2
- package/dist/{chunk-6IVNMC6R.js.map → chunk-MHMWQ7RB.js.map} +1 -1
- package/dist/{chunk-JYD7G4RG.js → chunk-PIVY32AE.js} +15 -5
- package/dist/chunk-PIVY32AE.js.map +1 -0
- package/dist/{chunk-BU23Z5HZ.js → chunk-PYBBYSZ3.js} +13 -18
- package/dist/chunk-PYBBYSZ3.js.map +1 -0
- package/dist/chunk-QDSZTQXL.js +28 -0
- package/dist/chunk-QDSZTQXL.js.map +1 -0
- package/dist/{chunk-YXOMI7ES.js → chunk-QIG4IGUP.js} +2 -2
- package/dist/{chunk-YXOMI7ES.js.map → chunk-QIG4IGUP.js.map} +1 -1
- package/dist/{chunk-6BRRUPJY.js → chunk-QROYYGWU.js} +3 -3
- package/dist/chunk-QROYYGWU.js.map +1 -0
- package/dist/{chunk-FOQK4F3L.js → chunk-RHD7RKGI.js} +28 -7
- package/dist/chunk-RHD7RKGI.js.map +1 -0
- package/dist/{chunk-BBU2SPRE.js → chunk-T4WJ5VGP.js} +4 -4
- package/dist/{chunk-BBU2SPRE.js.map → chunk-T4WJ5VGP.js.map} +1 -1
- package/dist/{chunk-6NOLL5KG.js → chunk-TGLUDQP2.js} +3 -3
- package/dist/{chunk-6NOLL5KG.js.map → chunk-TGLUDQP2.js.map} +1 -1
- package/dist/{chunk-HO6FU3G7.js → chunk-TLMMFQWM.js} +4 -4
- package/dist/{chunk-HO6FU3G7.js.map → chunk-TLMMFQWM.js.map} +1 -1
- package/dist/chunk-UMKV7YVQ.js +20 -0
- package/dist/chunk-UMKV7YVQ.js.map +1 -0
- package/dist/{chunk-M2NRCFRO.js → chunk-VFYO3UGZ.js} +2 -2
- package/dist/{chunk-M2NRCFRO.js.map → chunk-VFYO3UGZ.js.map} +1 -1
- package/dist/{chunk-YOKEL75M.js → chunk-WVS6CUCT.js} +2 -2
- package/dist/{chunk-YOKEL75M.js.map → chunk-WVS6CUCT.js.map} +1 -1
- package/dist/{chunk-MN3POJFN.js → chunk-YMUIQRWK.js} +2 -2
- package/dist/{chunk-MN3POJFN.js.map → chunk-YMUIQRWK.js.map} +1 -1
- package/dist/{chunk-Y3LC7JQO.js → chunk-YOA5W5ZH.js} +2 -2
- package/dist/{chunk-Y3LC7JQO.js.map → chunk-YOA5W5ZH.js.map} +1 -1
- package/dist/{chunk-44A6LP54.js → chunk-YQ2AC4E2.js} +2 -2
- package/dist/{chunk-44A6LP54.js.map → chunk-YQ2AC4E2.js.map} +1 -1
- package/dist/chunk-ZNROKDSZ.js +54 -0
- package/dist/chunk-ZNROKDSZ.js.map +1 -0
- package/dist/collapsible-panel.d.ts +3 -2
- package/dist/collapsible-panel.js +4 -3
- package/dist/collapsible-panel.js.map +1 -1
- package/dist/composer.d.ts +62 -0
- package/dist/composer.js +5 -0
- package/dist/composer.js.map +1 -0
- package/dist/corner-status.d.ts +1 -1
- package/dist/corner-status.js +1 -1
- package/dist/css-values.d.ts +9 -1
- package/dist/css-values.js +1 -1
- package/dist/disclosure-arrow.js +1 -1
- package/dist/empty-state.js +1 -1
- package/dist/grid.js +1 -1
- package/dist/icon-button.js +1 -1
- package/dist/icon-toggle-button.js +1 -1
- package/dist/index.d.ts +10 -5
- package/dist/index.js +40 -37
- package/dist/list-action-row.d.ts +10 -2
- package/dist/list-action-row.js +1 -1
- package/dist/list-header.js +1 -1
- package/dist/list-icon-tile-B8dr97OW.d.ts +18 -0
- package/dist/list-item.d.ts +10 -3
- package/dist/list-item.js +1 -1
- package/dist/list.d.ts +36 -4
- package/dist/list.js +1 -1
- package/dist/loading-spinner.js +1 -1
- package/dist/lucide-icon.js +1 -1
- package/dist/{nav-stack-BvSKY448.d.ts → nav-stack-VXTumzKa.d.ts} +53 -4
- package/dist/nav-stack.d.ts +3 -2
- package/dist/nav-stack.js +2 -1
- package/dist/pane.d.ts +40 -3
- package/dist/pane.js +1 -1
- package/dist/{panel-toolbar-CL9tYOkh.d.ts → panel-toolbar-vg6Ir5Dy.d.ts} +6 -1
- package/dist/popup-menu-register.d.ts +2 -1
- package/dist/popup-menu-register.js +97 -22
- package/dist/popup-menu-register.js.map +1 -1
- package/dist/popup-menu.js +1 -1
- package/dist/row.js +1 -1
- package/dist/scroll-clearance-BikHljTc.d.ts +14 -0
- package/dist/select-register.js +11 -0
- package/dist/select-register.js.map +1 -1
- package/dist/select.js +1 -1
- package/dist/skeleton.js +1 -1
- package/dist/spacer.js +1 -1
- package/dist/split-button.js +1 -1
- package/dist/split-view.d.ts +7 -5
- package/dist/split-view.js +6 -3
- package/dist/split-view.js.map +1 -1
- package/dist/state-banner.d.ts +6 -1
- package/dist/state-banner.js +1 -1
- package/dist/styles/anchored-surface.css +27 -1
- package/dist/styles/catalog/components/catalog-example-stack.css +5 -0
- package/dist/styles/catalog/components/catalog-example.css +33 -0
- package/dist/styles/catalog/components/catalog-stage.css +7 -0
- package/dist/styles/chip.css +70 -0
- package/dist/styles/components/actions/popup-menu/popup-menu.css +21 -4
- package/dist/styles/components/actions/toolbar/toolbar.css +19 -0
- package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +75 -1
- package/dist/styles/components/actions/toolbar-text/toolbar-text.css +75 -0
- package/dist/styles/components/collections/list/list.css +77 -7
- package/dist/styles/components/collections/list-action-row/list-action-row.css +177 -22
- package/dist/styles/components/collections/list-item/list-item.css +158 -11
- package/dist/styles/components/feedback/anchored-surface/anchored-surface.css +27 -1
- package/dist/styles/components/feedback/chip/chip.css +70 -0
- package/dist/styles/components/feedback/state-banner/state-banner.css +24 -13
- package/dist/styles/components/forms/composer/composer.css +100 -0
- package/dist/styles/components/forms/select/select.css +1 -0
- package/dist/styles/components/forms/token-search-field/token-search-field.css +13 -2
- package/dist/styles/components/layout/pane/pane.css +81 -2
- package/dist/styles/components/navigation/nav-stack/nav-stack.css +84 -0
- package/dist/styles/components/navigation/tab-bar/tab-bar.css +15 -4
- package/dist/styles/components/navigation/tab-navigator/tab-navigator.css +79 -4
- package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +195 -0
- package/dist/styles/composer.css +100 -0
- package/dist/styles/foundation.css +66 -0
- package/dist/styles/list-action-row.css +177 -22
- package/dist/styles/list-item.css +158 -11
- package/dist/styles/list.css +77 -7
- package/dist/styles/nav-stack.css +84 -0
- package/dist/styles/pane.css +81 -2
- package/dist/styles/popup-menu.css +21 -4
- package/dist/styles/select.css +1 -0
- package/dist/styles/state-banner.css +24 -13
- package/dist/styles/styles.css +1 -0
- package/dist/styles/surface-scaffold.css +195 -0
- package/dist/styles/tab-bar.css +15 -4
- package/dist/styles/tab-navigator.css +79 -4
- package/dist/styles/token-search-field.css +13 -2
- package/dist/styles/toolbar-control-group.css +75 -1
- package/dist/styles/toolbar-text.css +75 -0
- package/dist/styles/toolbar.css +19 -0
- package/dist/styles/webawesome.css +18 -0
- package/dist/surface-scaffold-register.d.ts +6 -1
- package/dist/surface-scaffold-register.js +89 -3
- package/dist/surface-scaffold-register.js.map +1 -1
- package/dist/surface-scaffold.d.ts +66 -7
- package/dist/surface-scaffold.js +1 -1
- package/dist/tab-navigator.d.ts +23 -2
- package/dist/tab-navigator.js +2 -0
- package/dist/tab-navigator.js.map +1 -1
- package/dist/token-search-field.d.ts +1 -1
- package/dist/token-search-field.js +1 -1
- package/dist/{token-search-model-DTcTXWMS.d.ts → token-search-model-aYR0YAei.d.ts} +32 -2
- package/dist/token-search-model.d.ts +1 -1
- package/dist/toolbar-control-group.js +1 -1
- package/dist/toolbar-text.js +1 -1
- package/dist/toolbar.d.ts +1 -0
- package/dist/value-table.js +1 -1
- package/dist/wire-catalog.d.ts +3 -2
- package/dist/wire-catalog.js +2 -2
- package/dist/wire-composers.d.ts +16 -0
- package/dist/wire-composers.js +3 -0
- package/dist/wire-composers.js.map +1 -0
- package/dist/wire-list-focus-scroll.d.ts +16 -0
- package/dist/wire-list-focus-scroll.js +3 -0
- package/dist/wire-list-focus-scroll.js.map +1 -0
- package/dist/wire-nav-stack.js +135 -0
- package/dist/wire-nav-stack.js.map +1 -1
- package/dist/wire-scroll-dividers.d.ts +9 -0
- package/dist/wire-scroll-dividers.js +1 -1
- package/dist/wire-tab-bars.js +1 -1
- package/dist/wire-tab-navigator.d.ts +3 -1
- package/dist/wire-tab-navigator.js +133 -1
- package/dist/wire-tab-navigator.js.map +1 -1
- package/dist/wire-token-search-fields.d.ts +1 -1
- package/dist/wire-token-search-fields.js +1 -1
- package/dist/workbench.d.ts +8 -3
- package/dist/workbench.js +2 -1
- package/docs/accessibility.md +132 -3
- package/docs/anchored-surface.md +46 -4
- package/docs/app-layouts.md +23 -2
- package/docs/apple-hig.md +1 -0
- package/docs/catalog.md +61 -9
- package/docs/collapsible-panel.md +9 -6
- package/docs/component-contract.md +46 -13
- package/docs/component-selection.md +147 -20
- package/docs/composer.md +143 -0
- package/docs/design/templates/choice-chips/multiple-dark.svg +1 -0
- package/docs/design/templates/choice-chips/multiple.svg +1 -0
- package/docs/design/templates/choice-chips-dark.svg +1 -1
- package/docs/design/templates/choice-chips.svg +1 -1
- package/docs/design/templates/composer/chat-dark.svg +1 -0
- package/docs/design/templates/composer/chat.svg +1 -0
- package/docs/design/templates/composer/prompt-dark.svg +1 -0
- package/docs/design/templates/composer/prompt.svg +1 -0
- package/docs/design/templates/composer-dark.svg +1 -0
- package/docs/design/templates/composer.svg +1 -0
- package/docs/design/templates/empty-state/filtered-dark.svg +1 -1
- package/docs/design/templates/empty-state/filtered.svg +1 -1
- 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-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/icon-tile-dark.svg +1 -0
- package/docs/design/templates/list-action-row/icon-tile.svg +1 -0
- 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/trailing-menu-dark.svg +1 -1
- package/docs/design/templates/list-action-row/trailing-menu.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-header/size-l-dark.svg +1 -1
- package/docs/design/templates/list-header/size-l.svg +1 -1
- package/docs/design/templates/list-header/size-m-dark.svg +1 -1
- package/docs/design/templates/list-header/size-m.svg +1 -1
- package/docs/design/templates/list-header/size-xl-dark.svg +1 -1
- package/docs/design/templates/list-header/size-xl.svg +1 -1
- package/docs/design/templates/list-header-dark.svg +1 -1
- package/docs/design/templates/list-header.svg +1 -1
- package/docs/design/templates/list-item/icon-tile-dark.svg +1 -0
- package/docs/design/templates/list-item/icon-tile.svg +1 -0
- 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-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/segmented-control-dark.svg +1 -1
- package/docs/design/templates/segmented-control.svg +1 -1
- package/docs/design/templates/skeleton-dark.svg +1 -1
- package/docs/design/templates/skeleton.svg +1 -1
- package/docs/design/templates/state-banner/danger-dark.svg +1 -1
- package/docs/design/templates/state-banner/danger.svg +1 -1
- package/docs/design/templates/state-banner/info-badge-dark.svg +1 -1
- package/docs/design/templates/state-banner/info-badge.svg +1 -1
- package/docs/design/templates/state-banner/info-dark.svg +1 -1
- package/docs/design/templates/state-banner/info.svg +1 -1
- package/docs/design/templates/state-banner/strip-dark.svg +1 -1
- package/docs/design/templates/state-banner/strip.svg +1 -1
- package/docs/design/templates/state-banner/success-dark.svg +1 -1
- package/docs/design/templates/state-banner/success.svg +1 -1
- package/docs/design/templates/state-banner/warning-dark.svg +1 -1
- package/docs/design/templates/state-banner/warning.svg +1 -1
- package/docs/design/templates/state-banner-dark.svg +1 -1
- package/docs/design/templates/state-banner.svg +1 -1
- package/docs/design/templates/tab-bar-dark.svg +1 -1
- package/docs/design/templates/tab-bar.svg +1 -1
- package/docs/design/templates/token-search-field-dark.svg +1 -1
- package/docs/design/templates/token-search-field.svg +1 -1
- package/docs/design/templates/toolbar-control-group-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group.svg +1 -1
- package/docs/design/templates/toolbar-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/default-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/default.svg +1 -1
- package/docs/design/templates/toolbar-text/large-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/large.svg +1 -1
- package/docs/design/templates/toolbar-text-dark.svg +1 -1
- package/docs/design/templates/toolbar-text.svg +1 -1
- package/docs/design/templates/toolbar.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 +9 -1
- package/docs/examples/command-palette-adapter.tsx +3 -3
- package/docs/layout.md +147 -14
- package/docs/nav-stack.md +132 -8
- package/docs/recipes.md +9 -9
- package/docs/split-view.md +3 -3
- package/docs/sunken-panel.md +2 -2
- package/docs/surface-scaffold.md +138 -7
- package/docs/tab-navigator.md +38 -1
- package/docs/type-contracts.md +16 -16
- package/docs/ui-analyzer.md +3 -1
- package/docs/ui-doctor.md +71 -0
- package/docs/ux-demo.md +6 -6
- package/docs/webawesome-theme.md +7 -0
- package/docs/workbench.md +10 -6
- package/docs/writing.md +152 -0
- package/doctor/copy-capitalization-checks.mjs +591 -0
- package/doctor/index.mjs +17 -8
- package/llms.txt +105 -11
- package/package.json +15 -1
- package/ux-demo/recipes/app-shell.tsx +11 -11
- package/ux-demo/recipes/collapsible-sidebar.tsx +12 -11
- package/ux-demo/recipes/compact-toolbar.tsx +10 -10
- package/ux-demo/recipes/composer-form.tsx +8 -8
- package/ux-demo/recipes/list-detail-dialog.tsx +13 -13
- package/ux-demo/recipes/list-workspace-states.tsx +13 -13
- package/ux-demo/recipes/loading-inspector.tsx +10 -10
- package/ux-demo/recipes/navigation-sidebar.tsx +7 -7
- package/ux-demo/recipes/navigation-stack.tsx +5 -5
- package/ux-demo/recipes/workspace-header.tsx +5 -5
- package/dist/chunk-36TL6BCR.js.map +0 -1
- package/dist/chunk-4LOK4634.js +0 -21
- package/dist/chunk-4LOK4634.js.map +0 -1
- package/dist/chunk-6BRRUPJY.js.map +0 -1
- package/dist/chunk-6STQXRT4.js.map +0 -1
- package/dist/chunk-76PWEN5Y.js +0 -64
- package/dist/chunk-76PWEN5Y.js.map +0 -1
- package/dist/chunk-AYHC62OZ.js.map +0 -1
- package/dist/chunk-BU23Z5HZ.js.map +0 -1
- package/dist/chunk-DQDTZE4W.js +0 -70
- package/dist/chunk-DQDTZE4W.js.map +0 -1
- package/dist/chunk-FOQK4F3L.js.map +0 -1
- package/dist/chunk-GJYQ27C2.js.map +0 -1
- package/dist/chunk-JYD7G4RG.js.map +0 -1
- package/dist/chunk-KQDU7Z7P.js.map +0 -1
- package/dist/chunk-P74VXMB6.js.map +0 -1
- package/dist/chunk-PBT3CPPY.js.map +0 -1
- package/dist/chunk-PRG4CL3Q.js.map +0 -1
- package/dist/chunk-ROZLJULF.js.map +0 -1
- package/dist/chunk-U657IHFB.js.map +0 -1
- package/dist/chunk-V6W56V3N.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Public API signatures for the UI authoring corpus
|
|
2
2
|
|
|
3
|
-
Generated from emitted declarations for `@kerfjs/ui@5.0.0-beta.
|
|
3
|
+
Generated from emitted declarations for `@kerfjs/ui@5.0.0-beta.99` and `kerfjs@5.0.0-beta.99`. This bounded reference covers only APIs used by the seven-task corpus. It is interface evidence, not an implementation or runtime guarantee.
|
|
4
4
|
|
|
5
5
|
## `@kerfjs/ui/css-values`
|
|
6
6
|
|
|
@@ -122,8 +122,16 @@ declare function foregroundColorVar(name: `--${string}`, fallback?: CssForegroun
|
|
|
122
122
|
* resolves the color syntax; this checks only that it is one declaration value.
|
|
123
123
|
*/
|
|
124
124
|
declare function foregroundColor(value: string): CssForegroundColor;
|
|
125
|
+
/**
|
|
126
|
+
* Use an application-chosen CSS color as a fill: a `ChoiceChips` swatch, a list
|
|
127
|
+
* row's `iconTile` color, or any other prop that takes a plain
|
|
128
|
+
* {@link CssColor}. It returns a `CssColor`, not a {@link CssForegroundColor},
|
|
129
|
+
* so a fill literal cannot reach a prop that paints text or an icon. The browser
|
|
130
|
+
* resolves the color syntax; this checks only that it is one declaration value.
|
|
131
|
+
*/
|
|
132
|
+
declare function fillColor(value: string): CssColor;
|
|
125
133
|
|
|
126
|
-
export { type CssColor, type CssFlex, type CssFlexBasis, type CssFlexKeyword, type CssForegroundColor, type CssLength, type CssLengthExpression, type CssSize, type CssSizeKeyword, type CssValue, type UiColor, type UiColorName, type UiForegroundColorName, type UiGap, type UiGapValue, type UiSpaceName, calc, colorVar, em, flex, foregroundColor, foregroundColorVar, lengthVar, pct, plus, px, rem, remify, space, uiColor };
|
|
134
|
+
export { type CssColor, type CssFlex, type CssFlexBasis, type CssFlexKeyword, type CssForegroundColor, type CssLength, type CssLengthExpression, type CssSize, type CssSizeKeyword, type CssValue, type UiColor, type UiColorName, type UiForegroundColorName, type UiGap, type UiGapValue, type UiSpaceName, calc, colorVar, em, fillColor, flex, foregroundColor, foregroundColorVar, lengthVar, pct, plus, px, rem, remify, space, uiColor };
|
|
127
135
|
```
|
|
128
136
|
|
|
129
137
|
## `@kerfjs/ui/disclosure-arrow`
|
|
@@ -157,6 +165,7 @@ import * as kerfjs from 'kerfjs';
|
|
|
157
165
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
158
166
|
import { S as Sides } from './sides-BPSWde0A.js';
|
|
159
167
|
import { PaneSeparatorSide } from './pane.js';
|
|
168
|
+
import './scroll-clearance-BikHljTc.js';
|
|
160
169
|
|
|
161
170
|
type ToolbarPosition = 'header' | 'footer';
|
|
162
171
|
/** Control-band density: `default` (60px with 44px groups) or `compact`. */
|
|
@@ -714,9 +723,10 @@ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
|
714
723
|
import { S as StructuralRootAttributes } from './extension-attributes-mu8MFUl0.js';
|
|
715
724
|
import { H as HorizontalAlignment, L as ListVerticalAlignment } from './flex-alignment-4ms8ZbV8.js';
|
|
716
725
|
export { V as VerticalAlignment } from './flex-alignment-4ms8ZbV8.js';
|
|
726
|
+
import { S as ScrollClearance } from './scroll-clearance-BikHljTc.js';
|
|
717
727
|
import { S as Sides } from './sides-BPSWde0A.js';
|
|
718
|
-
import { UiGap, CssFlexKeyword, CssFlex } from './css-values.js';
|
|
719
|
-
export {
|
|
728
|
+
import { UiGap, CssFlexKeyword, CssFlex, CssLength } from './css-values.js';
|
|
729
|
+
export { UiGapValue, UiSpaceName } from './css-values.js';
|
|
720
730
|
|
|
721
731
|
type ListRootAttributes = StructuralRootAttributes & Readonly<{
|
|
722
732
|
'data-component'?: never;
|
|
@@ -726,6 +736,8 @@ type ListRootAttributes = StructuralRootAttributes & Readonly<{
|
|
|
726
736
|
'data-h-align'?: never;
|
|
727
737
|
'data-v-align'?: never;
|
|
728
738
|
'data-scrollable'?: never;
|
|
739
|
+
'data-scroll-clearance'?: never;
|
|
740
|
+
'data-frame'?: never;
|
|
729
741
|
'data-surface'?: never;
|
|
730
742
|
'data-inset'?: never;
|
|
731
743
|
'data-text-insets'?: never;
|
|
@@ -770,6 +782,35 @@ interface ListProps {
|
|
|
770
782
|
* column and use `flex`; `fill` needs a definite-height parent.
|
|
771
783
|
*/
|
|
772
784
|
scrollable?: boolean;
|
|
785
|
+
/**
|
|
786
|
+
* Clear chrome that lies over this scrollable List's block-start and/or
|
|
787
|
+
* block-end edge, such as a `DialogSurface` floating footer. The List adds
|
|
788
|
+
* the inherited `--kui-scroll-clearance-block-*` context that chrome
|
|
789
|
+
* publishes to its own block padding and `scroll-padding`, so its rows
|
|
790
|
+
* scroll visibly beneath the chrome while the first and last rows (and any
|
|
791
|
+
* row focused or scrolled into view) can still rest clear of it. Opt in only
|
|
792
|
+
* the one scroller that reaches the covered edge. Defaults to none.
|
|
793
|
+
*/
|
|
794
|
+
scrollClearance?: ScrollClearance;
|
|
795
|
+
/**
|
|
796
|
+
* Draw a bordered, rounded frame around the stack: a 1px neutral border,
|
|
797
|
+
* the standard control radius, and a 4px inset on every side that keeps the
|
|
798
|
+
* first and last rows' focus rings inside a scrolling frame's clip. It
|
|
799
|
+
* replaces any `inset`/`textInsets`/`controlInsets`. With `scrollable` and
|
|
800
|
+
* `maxHeight` it is a bounded result picker of `ListItem` rows.
|
|
801
|
+
*/
|
|
802
|
+
frame?: boolean;
|
|
803
|
+
/**
|
|
804
|
+
* The List's maximum block size, a typed `CssLength` from
|
|
805
|
+
* `@kerfjs/ui/css-values` (such as `rem(14)`). Pair it with `scrollable` so
|
|
806
|
+
* rows beyond it scroll; it bounds the List without a flex-column ancestor.
|
|
807
|
+
*/
|
|
808
|
+
maxHeight?: CssLength;
|
|
809
|
+
/**
|
|
810
|
+
* The List's minimum block size, a typed `CssLength` (such as `rem(4.25)`),
|
|
811
|
+
* so a short or empty result set keeps a stable box. Defaults to no minimum.
|
|
812
|
+
*/
|
|
813
|
+
minHeight?: CssLength;
|
|
773
814
|
/**
|
|
774
815
|
* Paint a solid surface behind the stack, including its insets: for a strip
|
|
775
816
|
* of chrome (a banner above a sunken work area) that must not show the
|
|
@@ -802,16 +843,19 @@ interface ListProps {
|
|
|
802
843
|
*/
|
|
803
844
|
type ListConfig = Pick<ListProps, 'gap' | 'hAlign' | 'vAlign' | 'dividerSides' | 'textInsets' | 'controlInsets'>;
|
|
804
845
|
/** A stretch-aligned vertical stack with optional gap, flex, fill, scroll, and dividers. */
|
|
805
|
-
declare function List({ children, selectionMode, ariaLabel, gap, flex, fill, hAlign, vAlign, scrollable, surface, inset, dividerSides, textInsets, controlInsets, className, rootAttributes, slot, }: ListProps): kerfjs.SafeHtml;
|
|
846
|
+
declare function List({ children, selectionMode, ariaLabel, gap, flex, fill, hAlign, vAlign, scrollable, scrollClearance, frame, maxHeight, minHeight, surface, inset, dividerSides, textInsets, controlInsets, className, rootAttributes, slot, }: ListProps): kerfjs.SafeHtml;
|
|
806
847
|
|
|
807
|
-
export { CssFlex, CssFlexKeyword, HorizontalAlignment, List, type ListConfig, type ListInset, type ListProps, type ListSurface, ListVerticalAlignment, Sides, UiGap };
|
|
848
|
+
export { CssFlex, CssFlexKeyword, CssLength, HorizontalAlignment, List, type ListConfig, type ListInset, type ListProps, type ListSurface, ListVerticalAlignment, ScrollClearance, Sides, UiGap };
|
|
808
849
|
```
|
|
809
850
|
|
|
810
851
|
## `@kerfjs/ui/list-action-row`
|
|
811
852
|
|
|
812
853
|
```ts
|
|
813
854
|
import { SafeHtml } from 'kerfjs';
|
|
855
|
+
import { L as ListIconTile } from './list-icon-tile-B8dr97OW.js';
|
|
856
|
+
export { a as ListIconTileColor, b as ListIconTileTone } from './list-icon-tile-B8dr97OW.js';
|
|
814
857
|
import { PopupMenuEntry, PopupMenuPlacement } from './popup-menu.js';
|
|
858
|
+
import './css-values.js';
|
|
815
859
|
import './semantic-content-BbzjvSu9.js';
|
|
816
860
|
|
|
817
861
|
type ListActionRowRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
@@ -819,6 +863,8 @@ type ListActionRowRootAttributes = Readonly<Record<`data-${string}`, string | un
|
|
|
819
863
|
'data-action'?: never;
|
|
820
864
|
'data-item-id'?: never;
|
|
821
865
|
'data-has-icon'?: never;
|
|
866
|
+
'data-icon-tile'?: never;
|
|
867
|
+
'data-icon-tile-tone'?: never;
|
|
822
868
|
'data-multiline'?: never;
|
|
823
869
|
'data-density'?: never;
|
|
824
870
|
'data-divider'?: never;
|
|
@@ -878,10 +924,13 @@ interface ListActionRowCommonProps {
|
|
|
878
924
|
description?: string | SafeHtml;
|
|
879
925
|
status?: string | SafeHtml;
|
|
880
926
|
busy?: boolean;
|
|
927
|
+
/** Row height: `standard` is 44px; `compact` is 36px (42px with `iconTile`), the height of a compact `ListItem`. */
|
|
881
928
|
density?: 'standard' | 'compact';
|
|
882
929
|
divider?: 'none' | 'before' | 'after' | 'both';
|
|
883
930
|
/** Decorative dormant content for the primary button. Must not contain interactive descendants. */
|
|
884
931
|
icon?: SafeHtml;
|
|
932
|
+
/** Present `icon` in a filled 32px rounded tile with an 18px glyph: a quiet tone preset, or `{ color, foreground? }` for an application color. */
|
|
933
|
+
iconTile?: ListIconTile;
|
|
885
934
|
action: string;
|
|
886
935
|
itemId?: string;
|
|
887
936
|
selected?: boolean;
|
|
@@ -908,16 +957,19 @@ interface ListActionRowCommonProps {
|
|
|
908
957
|
}
|
|
909
958
|
/** Exactly one trailing control: a native button (`trailingAction*`) or an overflow menu (`trailingMenu`). */
|
|
910
959
|
type ListActionRowProps = ListActionRowCommonProps & (ListActionRowTrailingButtonProps | ListActionRowTrailingMenuProps);
|
|
911
|
-
declare function ListActionRow({ label, description, status, busy, density, divider, icon, action, itemId, selected, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, placeholder, draggable, dragging, dropPosition, trailingAction, trailingActionLabel, trailingActionIcon, trailingActionDisabled, trailingActionTitle, trailingActionVisibility, trailingMenu, className, rootAttributes, trailingActionAttributes, slot, }: ListActionRowProps): SafeHtml;
|
|
960
|
+
declare function ListActionRow({ label, description, status, busy, density, divider, icon, iconTile, action, itemId, selected, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, placeholder, draggable, dragging, dropPosition, trailingAction, trailingActionLabel, trailingActionIcon, trailingActionDisabled, trailingActionTitle, trailingActionVisibility, trailingMenu, className, rootAttributes, trailingActionAttributes, slot, }: ListActionRowProps): SafeHtml;
|
|
912
961
|
|
|
913
|
-
export { ListActionRow, type ListActionRowProps, type ListActionRowTrailingMenu };
|
|
962
|
+
export { ListActionRow, type ListActionRowProps, type ListActionRowTrailingMenu, ListIconTile };
|
|
914
963
|
```
|
|
915
964
|
|
|
916
965
|
## `@kerfjs/ui/list-item`
|
|
917
966
|
|
|
918
967
|
```ts
|
|
919
968
|
import { SafeHtml } from 'kerfjs';
|
|
969
|
+
import { L as ListIconTile } from './list-icon-tile-B8dr97OW.js';
|
|
970
|
+
export { a as ListIconTileColor, b as ListIconTileTone } from './list-icon-tile-B8dr97OW.js';
|
|
920
971
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
972
|
+
import './css-values.js';
|
|
921
973
|
|
|
922
974
|
type ListItemRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
923
975
|
'data-component'?: never;
|
|
@@ -932,6 +984,8 @@ type ListItemRootAttributes = Readonly<Record<`data-${string}`, string | undefin
|
|
|
932
984
|
'data-state'?: never;
|
|
933
985
|
'data-kui-disabled'?: never;
|
|
934
986
|
'data-icon-align'?: never;
|
|
987
|
+
'data-icon-tile'?: never;
|
|
988
|
+
'data-icon-tile-tone'?: never;
|
|
935
989
|
'data-dragging'?: never;
|
|
936
990
|
'data-drop-position'?: never;
|
|
937
991
|
}>;
|
|
@@ -940,6 +994,8 @@ interface ListItemProps {
|
|
|
940
994
|
/** App-owned supporting text rendered in the component's stable label stack. */
|
|
941
995
|
description?: string | SafeHtml;
|
|
942
996
|
icon?: SafeHtml;
|
|
997
|
+
/** Present `icon` in a filled 32px rounded tile with an 18px glyph: a quiet tone preset, or `{ color, foreground? }` for an application color. */
|
|
998
|
+
iconTile?: ListIconTile;
|
|
943
999
|
/** Dormant author content at the row's end; a placeholder renders it as a skeleton. */
|
|
944
1000
|
trailing?: KerfUiContent;
|
|
945
1001
|
/** Dormant status metadata rendered before trailing content; a placeholder renders it as a skeleton. */
|
|
@@ -981,11 +1037,11 @@ interface ListItemLinkProps extends Omit<ListItemProps, 'action' | 'pressed'> {
|
|
|
981
1037
|
action?: never;
|
|
982
1038
|
pressed?: never;
|
|
983
1039
|
}
|
|
984
|
-
declare function ListItem({ label, description, icon, trailing, status, busy, density, divider, selected, action, itemId, className, pressed, accessibleLabel, title, multiline, multilineIconAlign, state, disabled, tabIndex, placeholder, draggable, dragging, dropPosition, rootAttributes, slot, }: ListItemProps): SafeHtml;
|
|
1040
|
+
declare function ListItem({ label, description, icon, iconTile, trailing, status, busy, density, divider, selected, action, itemId, className, pressed, accessibleLabel, title, multiline, multilineIconAlign, state, disabled, tabIndex, placeholder, draggable, dragging, dropPosition, rootAttributes, slot, }: ListItemProps): SafeHtml;
|
|
985
1041
|
/** A navigation row with native link activation and ListItem geometry. */
|
|
986
|
-
declare function ListItemLink({ href, external, label, description, icon, trailing, status, busy, density, divider, selected, itemId, className, accessibleLabel, title, multiline, multilineIconAlign, state, disabled, tabIndex, placeholder, draggable, dragging, dropPosition, rootAttributes, slot, }: ListItemLinkProps): SafeHtml;
|
|
1042
|
+
declare function ListItemLink({ href, external, label, description, icon, iconTile, trailing, status, busy, density, divider, selected, itemId, className, accessibleLabel, title, multiline, multilineIconAlign, state, disabled, tabIndex, placeholder, draggable, dragging, dropPosition, rootAttributes, slot, }: ListItemLinkProps): SafeHtml;
|
|
987
1043
|
|
|
988
|
-
export { ListItem, ListItemLink, type ListItemLinkProps, type ListItemProps };
|
|
1044
|
+
export { ListIconTile, ListItem, ListItemLink, type ListItemLinkProps, type ListItemProps };
|
|
989
1045
|
```
|
|
990
1046
|
|
|
991
1047
|
## `@kerfjs/ui/list-inset-control`
|
|
@@ -1447,6 +1503,15 @@ type Root = HTMLElement | Document;
|
|
|
1447
1503
|
* - each app-owned `targets` pairing: a `Toolbar` or `List` named as chrome
|
|
1448
1504
|
* draws the divider on its facing side.
|
|
1449
1505
|
*
|
|
1506
|
+
* It also measures every `Pane` header laid over its content
|
|
1507
|
+
* (`headerPresentation="overlay"`, with fixed chrome placement): it publishes
|
|
1508
|
+
* the header's border-box block size on the Pane root as the inherited
|
|
1509
|
+
* `--kui-scroll-clearance-block-start` context, and marks the root
|
|
1510
|
+
* `data-header-overlay="measured"`, which moves the header over the content
|
|
1511
|
+
* and has the content clear it. The measurement follows the header as it
|
|
1512
|
+
* wraps, zooms, or changes content, and both are restored before paint if a
|
|
1513
|
+
* re-render drops them.
|
|
1514
|
+
*
|
|
1450
1515
|
* Structure is re-read after every DOM change below root that can change a
|
|
1451
1516
|
* pairing — a structural element or target id added, removed, or re-classed;
|
|
1452
1517
|
* mutations inside scrolled content (a row's class, a list's rows) do not
|
|
@@ -1512,19 +1577,41 @@ declare function wireListReorder(root: HTMLElement | Document, { onReorder }: Wi
|
|
|
1512
1577
|
export { type ListDropPosition, type ListReorder, type ListReorderSource, type ListReorderTarget, type WireListReorderOptions, reorderListItems, wireListReorder };
|
|
1513
1578
|
```
|
|
1514
1579
|
|
|
1580
|
+
## `@kerfjs/ui/wire-list-focus-scroll`
|
|
1581
|
+
|
|
1582
|
+
```ts
|
|
1583
|
+
type Root = HTMLElement | Document;
|
|
1584
|
+
/**
|
|
1585
|
+
* Bring a keyboard-focused row of a `scrollable` List below `root` fully into
|
|
1586
|
+
* view, focus ring included. Engines differ on how `focus()` scrolls a partly
|
|
1587
|
+
* hidden row: Chromium scrolls it to the nearest edge plus scroll padding,
|
|
1588
|
+
* Firefox waits until about half of it is hidden and then centers it, and
|
|
1589
|
+
* WebKit leaves it where it is. On `focusin`, when the newly focused element
|
|
1590
|
+
* matches `:focus-visible` and its ring crosses the nearest scrollable List's
|
|
1591
|
+
* clip, this calls `scrollIntoView({ block: 'nearest', inline: 'nearest' })`,
|
|
1592
|
+
* which honors the List's ring-room scroll padding in every engine. Pointer
|
|
1593
|
+
* focus is left alone, so a click never scrolls the row out from under the
|
|
1594
|
+
* pointer. Returns a disposer.
|
|
1595
|
+
*/
|
|
1596
|
+
declare function wireListFocusScroll(root: Root): () => void;
|
|
1597
|
+
|
|
1598
|
+
export { wireListFocusScroll };
|
|
1599
|
+
```
|
|
1600
|
+
|
|
1515
1601
|
## `@kerfjs/ui/nav-stack`
|
|
1516
1602
|
|
|
1517
1603
|
```ts
|
|
1518
|
-
export { c as NavStack, N as NavStackProps,
|
|
1604
|
+
export { c as NavStack, d as NavStackBottomToolbarPresentation, e as NavStackChromePresentation, N as NavStackProps, f as NavStackToolbarConfig, a as NavStackView, g as NavStackViewBottomToolbar, h as NavStackViewToolbar } from './nav-stack-VXTumzKa.js';
|
|
1519
1605
|
import 'kerfjs';
|
|
1520
1606
|
import './semantic-content-BbzjvSu9.js';
|
|
1521
1607
|
import './list.js';
|
|
1522
1608
|
import './extension-attributes-mu8MFUl0.js';
|
|
1523
1609
|
import './flex-alignment-4ms8ZbV8.js';
|
|
1610
|
+
import './scroll-clearance-BikHljTc.js';
|
|
1524
1611
|
import './sides-BPSWde0A.js';
|
|
1525
1612
|
import './css-values.js';
|
|
1526
1613
|
import './pane.js';
|
|
1527
|
-
import './panel-toolbar-
|
|
1614
|
+
import './panel-toolbar-vg6Ir5Dy.js';
|
|
1528
1615
|
import './toolbar.js';
|
|
1529
1616
|
import './lucide-icon.js';
|
|
1530
1617
|
import 'lucide';
|
|
@@ -1559,15 +1646,16 @@ export { type WireNavStackOptions, wireNavStack };
|
|
|
1559
1646
|
```ts
|
|
1560
1647
|
import * as kerfjs from 'kerfjs';
|
|
1561
1648
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
1562
|
-
import { N as NavStackProps, a as NavStackView } from './nav-stack-
|
|
1649
|
+
import { N as NavStackProps, a as NavStackView } from './nav-stack-VXTumzKa.js';
|
|
1563
1650
|
import { ResizableRegionProps } from './resizable-region.js';
|
|
1564
1651
|
import './list.js';
|
|
1565
1652
|
import './extension-attributes-mu8MFUl0.js';
|
|
1566
1653
|
import './flex-alignment-4ms8ZbV8.js';
|
|
1654
|
+
import './scroll-clearance-BikHljTc.js';
|
|
1567
1655
|
import './sides-BPSWde0A.js';
|
|
1568
1656
|
import './css-values.js';
|
|
1569
1657
|
import './pane.js';
|
|
1570
|
-
import './panel-toolbar-
|
|
1658
|
+
import './panel-toolbar-vg6Ir5Dy.js';
|
|
1571
1659
|
import './toolbar.js';
|
|
1572
1660
|
import './lucide-icon.js';
|
|
1573
1661
|
import 'lucide';
|
|
@@ -1589,10 +1677,11 @@ interface SplitViewResizable extends Pick<ResizableRegionProps, 'separator' | 'h
|
|
|
1589
1677
|
type SplitViewCompactViewToolbars = Pick<NavStackView, 'toolbar' | 'bottomToolbar'>;
|
|
1590
1678
|
/**
|
|
1591
1679
|
* The compact `NavStack`'s configuration: its toolbar configuration, back
|
|
1592
|
-
* control, persistent bottom toolbar,
|
|
1593
|
-
* stack, and `list` / `detail`
|
|
1680
|
+
* control, persistent bottom toolbar, chrome dividers, and chrome and
|
|
1681
|
+
* bottom-toolbar presentations forward to the stack, and `list` / `detail`
|
|
1682
|
+
* give each view its own toolbar groups.
|
|
1594
1683
|
*/
|
|
1595
|
-
interface SplitViewCompactStack extends Pick<NavStackProps, 'toolbarConfig' | 'backIcon' | 'backText' | 'hideToolbar' | 'bottomToolbar' | 'chromeDividers'> {
|
|
1684
|
+
interface SplitViewCompactStack extends Pick<NavStackProps, 'toolbarConfig' | 'backIcon' | 'backText' | 'hideToolbar' | 'bottomToolbar' | 'chromeDividers' | 'chromePresentation' | 'bottomToolbarPresentation'> {
|
|
1596
1685
|
/** Toolbar content for the list (root) view. */
|
|
1597
1686
|
list?: SplitViewCompactViewToolbars;
|
|
1598
1687
|
/** Toolbar content for the pushed detail view. */
|
|
@@ -1661,6 +1750,7 @@ export { SplitView, type SplitViewCompactStack, type SplitViewCompactViewToolbar
|
|
|
1661
1750
|
```ts
|
|
1662
1751
|
import * as kerfjs from 'kerfjs';
|
|
1663
1752
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
1753
|
+
import { S as ScrollClearance } from './scroll-clearance-BikHljTc.js';
|
|
1664
1754
|
|
|
1665
1755
|
/**
|
|
1666
1756
|
* Logical pane sides: where a {@link Pane} can show a separator and where it can
|
|
@@ -1686,6 +1776,9 @@ type PaneRootAttributes = Readonly<Record<`data-${string}`, string | undefined>
|
|
|
1686
1776
|
'data-appearance'?: never;
|
|
1687
1777
|
'data-deep-inset'?: never;
|
|
1688
1778
|
'data-outlined'?: never;
|
|
1779
|
+
'data-scroll-clearance'?: never;
|
|
1780
|
+
'data-header-presentation'?: never;
|
|
1781
|
+
'data-header-overlay'?: never;
|
|
1689
1782
|
}>;
|
|
1690
1783
|
/** How a Pane's header and footer relate to its scrolling content. */
|
|
1691
1784
|
type PaneChromePlacement = 'fixed' | 'auto';
|
|
@@ -1695,6 +1788,12 @@ type PaneChromePlacement = 'fixed' | 'auto';
|
|
|
1695
1788
|
* chrome, as `wireScrollDividers` reports; `always`; or `none`.
|
|
1696
1789
|
*/
|
|
1697
1790
|
type PaneChromeDividers = 'scroll' | 'always' | 'none';
|
|
1791
|
+
/**
|
|
1792
|
+
* How a Pane's header relates to its scrolling content: `docked` in its own
|
|
1793
|
+
* row above the content, or `overlay` laid over the content's top edge on the
|
|
1794
|
+
* translucent chrome material, so content scrolls visibly beneath it.
|
|
1795
|
+
*/
|
|
1796
|
+
type PaneHeaderPresentation = 'docked' | 'overlay';
|
|
1698
1797
|
/** Background treatment of the Pane's scrolling work surface. */
|
|
1699
1798
|
type PaneAppearance = 'default' | 'sunken';
|
|
1700
1799
|
interface PaneProps {
|
|
@@ -1723,8 +1822,35 @@ interface PaneProps {
|
|
|
1723
1822
|
* The line is drawn inside the chrome, so no state moves the content.
|
|
1724
1823
|
*/
|
|
1725
1824
|
chromeDividers?: PaneChromeDividers;
|
|
1825
|
+
/**
|
|
1826
|
+
* `docked` (default) gives the header its own row above the scrolling
|
|
1827
|
+
* content. `overlay` lays the header over the content's top edge on the
|
|
1828
|
+
* translucent chrome material (`--kui-chrome-material`, opaque under
|
|
1829
|
+
* `prefers-reduced-transparency`, forced colors, or without
|
|
1830
|
+
* `backdrop-filter`), so content scrolls visibly beneath it. Once
|
|
1831
|
+
* `wireScrollDividers` (`@kerfjs/ui/wire-scroll-dividers`) is wired above
|
|
1832
|
+
* the pane it measures the header and publishes its height as the
|
|
1833
|
+
* `--kui-scroll-clearance-block-start` context, which the content adds to
|
|
1834
|
+
* its block-start padding and `scroll-padding` without any
|
|
1835
|
+
* `scrollClearance` prop, so the first item, and anything focused or
|
|
1836
|
+
* scrolled into view, rests clear of the header. Until then, and with
|
|
1837
|
+
* `chromePlacement="auto"`, the header stays docked. Keep overlay header
|
|
1838
|
+
* text in the normal text color: quiet text can fall below AA over the
|
|
1839
|
+
* content passing beneath it.
|
|
1840
|
+
*/
|
|
1841
|
+
headerPresentation?: PaneHeaderPresentation;
|
|
1726
1842
|
/** Paint the scrolling work surface with the shared lowered-surface color. */
|
|
1727
1843
|
appearance?: PaneAppearance;
|
|
1844
|
+
/**
|
|
1845
|
+
* Clear chrome that lies over the scrolling content's block-start and/or
|
|
1846
|
+
* block-end edge, such as a `DialogSurface` floating footer over a filling
|
|
1847
|
+
* Pane. The content scroller adds the inherited
|
|
1848
|
+
* `--kui-scroll-clearance-block-*` context that chrome publishes to its block
|
|
1849
|
+
* padding and `scroll-padding`, so content scrolls visibly beneath the chrome
|
|
1850
|
+
* while its first and last items (and anything focused or scrolled into
|
|
1851
|
+
* view) can still rest clear of it. Defaults to none.
|
|
1852
|
+
*/
|
|
1853
|
+
scrollClearance?: ScrollClearance;
|
|
1728
1854
|
/** Add 8px to every side of scrolling content (default: false). */
|
|
1729
1855
|
deepInset?: boolean;
|
|
1730
1856
|
/** Opt into keyboard (`0`) or programmatic (`-1`) focus on the Pane root. */
|
|
@@ -1765,16 +1891,16 @@ interface PaneProps {
|
|
|
1765
1891
|
* or a CollapsiblePanel) forwards, so the app configures that pane instead of
|
|
1766
1892
|
* styling it. An omitted or `undefined` field keeps the composite's default.
|
|
1767
1893
|
*/
|
|
1768
|
-
type PaneConfig = Pick<PaneProps, 'contentElement' | 'contentLabel' | 'separators' | 'safeAreaEdges' | 'chromeDividers' | 'appearance' | 'deepInset' | 'tabIndex' | 'outlined'>;
|
|
1894
|
+
type PaneConfig = Pick<PaneProps, 'contentElement' | 'contentLabel' | 'separators' | 'safeAreaEdges' | 'chromeDividers' | 'headerPresentation' | 'appearance' | 'deepInset' | 'scrollClearance' | 'tabIndex' | 'outlined'>;
|
|
1769
1895
|
/**
|
|
1770
1896
|
* An unpadded application column with optional fixed header/footer slots and one
|
|
1771
1897
|
* scrolling vertical content owner. Separator lines are independently opt-in on
|
|
1772
1898
|
* each logical edge, so the same component works as a sidebar, main area,
|
|
1773
1899
|
* inspector, or dialog column.
|
|
1774
1900
|
*/
|
|
1775
|
-
declare function Pane({ header, children, footer, chromePlacement, chromeDividers, appearance, deepInset, tabIndex, outlined, element, contentElement, separators, safeAreaEdges, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, slot, }: PaneProps): kerfjs.SafeHtml;
|
|
1901
|
+
declare function Pane({ header, children, footer, chromePlacement, chromeDividers, headerPresentation, appearance, deepInset, scrollClearance, tabIndex, outlined, element, contentElement, separators, safeAreaEdges, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, slot, }: PaneProps): kerfjs.SafeHtml;
|
|
1776
1902
|
|
|
1777
|
-
export { Pane, type PaneAppearance, type PaneChromeDividers, type PaneChromePlacement, type PaneConfig, type PaneContentElement, type PaneElement, type PaneProps, type PaneSeparatorSide };
|
|
1903
|
+
export { Pane, type PaneAppearance, type PaneChromeDividers, type PaneChromePlacement, type PaneConfig, type PaneContentElement, type PaneElement, type PaneHeaderPresentation, type PaneProps, type PaneSeparatorSide, ScrollClearance };
|
|
1778
1904
|
```
|
|
1779
1905
|
|
|
1780
1906
|
## `@kerfjs/ui/workbench`
|
|
@@ -1782,16 +1908,17 @@ export { Pane, type PaneAppearance, type PaneChromeDividers, type PaneChromePlac
|
|
|
1782
1908
|
```ts
|
|
1783
1909
|
import { SafeHtml } from 'kerfjs';
|
|
1784
1910
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
1785
|
-
import { b as NavPane, N as NavStackProps } from './nav-stack-
|
|
1911
|
+
import { b as NavPane, N as NavStackProps } from './nav-stack-VXTumzKa.js';
|
|
1786
1912
|
import { ListConfig } from './list.js';
|
|
1787
1913
|
import { PaneConfig } from './pane.js';
|
|
1788
1914
|
import { ResizableRegionSeparator, ResizableRegionCollapseMotion, ResizableRegionContentOverflow, ResizableRegionPresentation, ResizableRegionRestorePosition } from './resizable-region.js';
|
|
1789
|
-
import { a as PanelToolbar, c as PanelBottomToolbar, b as PanelChromePlacement, d as PanelToggle } from './panel-toolbar-
|
|
1915
|
+
import { a as PanelToolbar, c as PanelBottomToolbar, b as PanelChromePlacement, d as PanelToggle } from './panel-toolbar-vg6Ir5Dy.js';
|
|
1790
1916
|
import { ToolbarConfig } from './toolbar.js';
|
|
1791
1917
|
import './toolbar-text.js';
|
|
1792
1918
|
import './css-values.js';
|
|
1793
1919
|
import './extension-attributes-mu8MFUl0.js';
|
|
1794
1920
|
import './flex-alignment-4ms8ZbV8.js';
|
|
1921
|
+
import './scroll-clearance-BikHljTc.js';
|
|
1795
1922
|
import './sides-BPSWde0A.js';
|
|
1796
1923
|
import './lucide-icon.js';
|
|
1797
1924
|
import 'lucide';
|
|
@@ -1882,7 +2009,11 @@ interface WorkbenchPanelBase {
|
|
|
1882
2009
|
* with `wireWorkbench` from `@kerfjs/ui/wire-workbench`.
|
|
1883
2010
|
*/
|
|
1884
2011
|
resizable?: boolean | WorkbenchPanelResizable;
|
|
1885
|
-
/**
|
|
2012
|
+
/**
|
|
2013
|
+
* Accessible name for the panel region, in title style. A resizable
|
|
2014
|
+
* panel's handle is named "Resize {label}", or "Resize Left Rail" /
|
|
2015
|
+
* "Resize Right Rail" / "Resize Bottom Drawer" without one.
|
|
2016
|
+
*/
|
|
1886
2017
|
label?: string;
|
|
1887
2018
|
/** Opt into keyboard (`0`) or programmatic (`-1`) focus on the panel region. */
|
|
1888
2019
|
tabIndex?: 0 | -1;
|
|
@@ -2179,8 +2310,8 @@ export { type WireWorkbenchOptions, type WireWorkbenchPanel, type WorkbenchPanel
|
|
|
2179
2310
|
```ts
|
|
2180
2311
|
import { SafeHtml } from 'kerfjs';
|
|
2181
2312
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
2182
|
-
import { P as PanelSide, a as PanelToolbar, b as PanelChromePlacement, c as PanelBottomToolbar, d as PanelToggle } from './panel-toolbar-
|
|
2183
|
-
export { e as collapsiblePanelToggleIcon } from './panel-toolbar-
|
|
2313
|
+
import { P as PanelSide, a as PanelToolbar, b as PanelChromePlacement, c as PanelBottomToolbar, d as PanelToggle } from './panel-toolbar-vg6Ir5Dy.js';
|
|
2314
|
+
export { e as collapsiblePanelToggleIcon } from './panel-toolbar-vg6Ir5Dy.js';
|
|
2184
2315
|
import { ToolbarConfig } from './toolbar.js';
|
|
2185
2316
|
import { ListConfig } from './list.js';
|
|
2186
2317
|
import { PaneConfig } from './pane.js';
|
|
@@ -2191,6 +2322,7 @@ import './css-values.js';
|
|
|
2191
2322
|
import './sides-BPSWde0A.js';
|
|
2192
2323
|
import './extension-attributes-mu8MFUl0.js';
|
|
2193
2324
|
import './flex-alignment-4ms8ZbV8.js';
|
|
2325
|
+
import './scroll-clearance-BikHljTc.js';
|
|
2194
2326
|
|
|
2195
2327
|
/** Which edge a {@link CollapsiblePanel} docks to. */
|
|
2196
2328
|
type CollapsiblePanelSide = PanelSide;
|
|
@@ -2397,6 +2529,7 @@ export { type SidebarStorage, type WireSidebarOptions, type WireSidebarPanel, wi
|
|
|
2397
2529
|
import { SafeHtml } from 'kerfjs';
|
|
2398
2530
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
2399
2531
|
import { PaneAppearance } from './pane.js';
|
|
2532
|
+
import './scroll-clearance-BikHljTc.js';
|
|
2400
2533
|
|
|
2401
2534
|
interface TabNavigatorTabBase<Id extends string> {
|
|
2402
2535
|
id: Id;
|
|
@@ -2448,6 +2581,12 @@ interface TabNavigatorTabDotBadge {
|
|
|
2448
2581
|
}
|
|
2449
2582
|
/** One bottom-bar destination: its label, optional icon and badge, and content. */
|
|
2450
2583
|
type TabNavigatorTab<Id extends string = string> = TabNavigatorTabBase<Id> & (TabNavigatorTabCountBadge | TabNavigatorTabDotBadge);
|
|
2584
|
+
/**
|
|
2585
|
+
* How a {@link TabNavigator}'s tab bar relates to the active scene: `docked`
|
|
2586
|
+
* below it, or `overlay` laid over its bottom edge on the translucent chrome
|
|
2587
|
+
* material, so the scene's content scrolls visibly beneath the bar.
|
|
2588
|
+
*/
|
|
2589
|
+
type TabNavigatorBarPresentation = 'docked' | 'overlay';
|
|
2451
2590
|
interface TabNavigatorProps<Id extends string = string> {
|
|
2452
2591
|
id: string;
|
|
2453
2592
|
/** Accessible name for the tab bar. */
|
|
@@ -2472,6 +2611,20 @@ interface TabNavigatorProps<Id extends string = string> {
|
|
|
2472
2611
|
* is the bar's own 1px top border, so no state moves the bar or a tab.
|
|
2473
2612
|
*/
|
|
2474
2613
|
chromeDividers?: 'scroll' | 'always' | 'none';
|
|
2614
|
+
/**
|
|
2615
|
+
* `docked` (default) gives the tab bar its own band below the scenes.
|
|
2616
|
+
* `overlay` lays it over the active scene's bottom edge on the translucent
|
|
2617
|
+
* chrome material (opaque under reduced transparency, increased contrast,
|
|
2618
|
+
* or without `backdrop-filter`; `Canvas` in forced colors), so content
|
|
2619
|
+
* scrolls visibly beneath it, as under an iOS tab bar. `wireTabNavigator`
|
|
2620
|
+
* measures the live bar (bottom safe area included) and the scenes hand
|
|
2621
|
+
* its height to their content as the block-end `--kui-edge-inset-*`
|
|
2622
|
+
* context, so a plain scene, a sole `Pane`, or a `NavStack` (and its own
|
|
2623
|
+
* bottom toolbar, which then sits above the bar) rests its last item clear
|
|
2624
|
+
* of it. Until then it stays docked. Unselected tab labels lift halfway
|
|
2625
|
+
* toward the normal text color to keep AA over the content beneath.
|
|
2626
|
+
*/
|
|
2627
|
+
barPresentation?: TabNavigatorBarPresentation;
|
|
2475
2628
|
className?: string;
|
|
2476
2629
|
/** Native named-slot assignment when composed inside a web component. */
|
|
2477
2630
|
slot?: string;
|
|
@@ -2484,9 +2637,9 @@ interface TabNavigatorProps<Id extends string = string> {
|
|
|
2484
2637
|
* On larger classes, promote the tabs to a `Workbench` rail or sidebar instead of
|
|
2485
2638
|
* a bottom bar. See `docs/23-app-layouts.md` §3.4.
|
|
2486
2639
|
*/
|
|
2487
|
-
declare function TabNavigator<Id extends string>({ id, label, tabs, active, separator, chromeDividers, className, slot, }: TabNavigatorProps<Id>): SafeHtml;
|
|
2640
|
+
declare function TabNavigator<Id extends string>({ id, label, tabs, active, separator, chromeDividers, barPresentation, className, slot, }: TabNavigatorProps<Id>): SafeHtml;
|
|
2488
2641
|
|
|
2489
|
-
export { TabNavigator, type TabNavigatorProps, type TabNavigatorTab };
|
|
2642
|
+
export { TabNavigator, type TabNavigatorBarPresentation, type TabNavigatorProps, type TabNavigatorTab };
|
|
2490
2643
|
```
|
|
2491
2644
|
|
|
2492
2645
|
## `@kerfjs/ui/wire-tab-navigator`
|
|
@@ -2498,7 +2651,9 @@ interface WireTabNavigatorOptions {
|
|
|
2498
2651
|
}
|
|
2499
2652
|
/**
|
|
2500
2653
|
* Wire a `TabNavigator`'s bottom tab bar: clicking a tab calls `onSelect` with its
|
|
2501
|
-
* id (the app then updates its controlled `active`).
|
|
2654
|
+
* id (the app then updates its controlled `active`). With
|
|
2655
|
+
* `barPresentation="overlay"` it also measures the live bar and lays it over
|
|
2656
|
+
* the scenes (see `TabNavigatorProps.barPresentation`). Returns a disposer.
|
|
2502
2657
|
*/
|
|
2503
2658
|
declare function wireTabNavigator(root: Element, options: WireTabNavigatorOptions): () => void;
|
|
2504
2659
|
|
|
@@ -2661,13 +2816,14 @@ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
|
2661
2816
|
import './toolbar.js';
|
|
2662
2817
|
import './sides-BPSWde0A.js';
|
|
2663
2818
|
import './pane.js';
|
|
2819
|
+
import './scroll-clearance-BikHljTc.js';
|
|
2664
2820
|
import './workbench.js';
|
|
2665
|
-
import './nav-stack-
|
|
2821
|
+
import './nav-stack-VXTumzKa.js';
|
|
2666
2822
|
import './list.js';
|
|
2667
2823
|
import './extension-attributes-mu8MFUl0.js';
|
|
2668
2824
|
import './flex-alignment-4ms8ZbV8.js';
|
|
2669
2825
|
import './css-values.js';
|
|
2670
|
-
import './panel-toolbar-
|
|
2826
|
+
import './panel-toolbar-vg6Ir5Dy.js';
|
|
2671
2827
|
import './lucide-icon.js';
|
|
2672
2828
|
import 'lucide';
|
|
2673
2829
|
import './toolbar-text.js';
|
|
@@ -2688,15 +2844,31 @@ declare function Catalog({ id, brand, sections, active, content, collapsed, them
|
|
|
2688
2844
|
type CatalogExampleAlign = 'glyph' | 'inline-control' | 'text-trigger' | 'none';
|
|
2689
2845
|
interface CatalogExampleViewport {
|
|
2690
2846
|
layout?: 'grid' | 'flex' | 'flex-column';
|
|
2691
|
-
|
|
2847
|
+
/** Specimen width. `sidebar` (272px, capped at the stage) shows a sidebar
|
|
2848
|
+
* pane's content at a production rail's width. */
|
|
2849
|
+
width?: 'full' | 'sidebar' | 'compact' | 'medium' | 'wide' | 'text' | 'control';
|
|
2692
2850
|
/** Fixed specimen height; `app` frames an application-sized recipe or layout.
|
|
2693
2851
|
* A fixed height is definite, so a child that fills with `height: 100%`
|
|
2694
2852
|
* (a horizontal `ResizableRegion`, say) spans the whole frame. */
|
|
2695
2853
|
height?: 'short' | 'reduced' | 'medium' | 'tall' | 'app';
|
|
2696
2854
|
/** A minimum the frame may grow past. It is not a definite height: a child
|
|
2697
2855
|
* sized with `height: 100%` falls back to its content height, so use
|
|
2698
|
-
* `height` when the specimen must fill the frame.
|
|
2699
|
-
|
|
2856
|
+
* `height` when the specimen must fill the frame. `app` (592px) is the
|
|
2857
|
+
* application frame's height as a floor, for a stage that hosts a
|
|
2858
|
+
* frame-anchored top-layer specimen above in-flow content. */
|
|
2859
|
+
minHeight?: 'short' | 'medium' | 'app';
|
|
2860
|
+
/** Names the frame as a CSS anchor (`anchor-name`), so a top-layer
|
|
2861
|
+
* specimen whose own CSS sets `position-anchor` to this dashed-ident
|
|
2862
|
+
* positions against the frame as it would against its production anchor.
|
|
2863
|
+
* Anchor names are document-wide: give each frame on a page its own. */
|
|
2864
|
+
anchorName?: `--${string}`;
|
|
2865
|
+
/** Caps each in-flow child at a centered-or-start content column:
|
|
2866
|
+
* `compact` (440px), `medium` (640px), or `wide` (864px), each capped at
|
|
2867
|
+
* the frame. `[popover]` children keep their own geometry. Applies to
|
|
2868
|
+
* block, `grid`, and `flex-column` flows. */
|
|
2869
|
+
contentWidth?: 'compact' | 'medium' | 'wide';
|
|
2870
|
+
/** Where a `contentWidth` column sits in the frame; default `start`. */
|
|
2871
|
+
contentAlign?: 'start' | 'center';
|
|
2700
2872
|
frame?: 'solid' | 'dashed';
|
|
2701
2873
|
surface?: 'default' | 'lowered';
|
|
2702
2874
|
overflow?: 'hidden' | 'auto-x';
|
|
@@ -2726,7 +2898,11 @@ interface CatalogExampleProps {
|
|
|
2726
2898
|
/** Native named-slot assignment when composed inside a web component. */
|
|
2727
2899
|
slot?: string;
|
|
2728
2900
|
}
|
|
2729
|
-
/**
|
|
2901
|
+
/**
|
|
2902
|
+
* A labeled catalog specimen with optional explanatory text and alignment. A
|
|
2903
|
+
* supplied `label` also names the rendered `section`, so each specimen is an
|
|
2904
|
+
* addressable region; an unlabeled example stays an ordinary grouping.
|
|
2905
|
+
*/
|
|
2730
2906
|
declare function CatalogExample({ label, note, align, viewport, compactFallback, rootAttributes, className, children, slot, }: CatalogExampleProps): SafeHtml;
|
|
2731
2907
|
|
|
2732
2908
|
type CatalogExampleStackRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
@@ -2735,9 +2911,19 @@ type CatalogExampleStackRootAttributes = Readonly<Record<`data-${string}`, strin
|
|
|
2735
2911
|
'data-catalog-example-label'?: never;
|
|
2736
2912
|
'data-catalog-example-note'?: never;
|
|
2737
2913
|
'data-align'?: never;
|
|
2914
|
+
'data-width'?: never;
|
|
2738
2915
|
}>;
|
|
2916
|
+
/**
|
|
2917
|
+
* How wide a stack may grow: `reading` (default) caps it at a 736px reading
|
|
2918
|
+
* measure for component specimens; `full` lets it span the stage for
|
|
2919
|
+
* application-width compositions such as boards, app shells, drawers, and
|
|
2920
|
+
* split views.
|
|
2921
|
+
*/
|
|
2922
|
+
type CatalogExampleStackWidth = 'reading' | 'full';
|
|
2739
2923
|
interface CatalogExampleStackProps {
|
|
2740
2924
|
label?: string;
|
|
2925
|
+
/** Maximum width of the stack (default `reading`). */
|
|
2926
|
+
width?: CatalogExampleStackWidth;
|
|
2741
2927
|
rootAttributes?: CatalogExampleStackRootAttributes;
|
|
2742
2928
|
className?: string;
|
|
2743
2929
|
children?: KerfUiContent;
|
|
@@ -2745,7 +2931,7 @@ interface CatalogExampleStackProps {
|
|
|
2745
2931
|
slot?: string;
|
|
2746
2932
|
}
|
|
2747
2933
|
/** A vertically stacked group of catalog examples. */
|
|
2748
|
-
declare function CatalogExampleStack({ label, rootAttributes, className, children, slot, }: CatalogExampleStackProps): kerfjs.SafeHtml;
|
|
2934
|
+
declare function CatalogExampleStack({ label, width, rootAttributes, className, children, slot, }: CatalogExampleStackProps): kerfjs.SafeHtml;
|
|
2749
2935
|
|
|
2750
2936
|
/**
|
|
2751
2937
|
* Browser helpers for UX Review region captures from a catalog. The local
|
|
@@ -2773,7 +2959,7 @@ declare function uxReviewCaptureUrl({ projectDirectory, title, context, }: UxRev
|
|
|
2773
2959
|
*/
|
|
2774
2960
|
declare function loadUxReviewProject(pageUrl: string | URL, fetchImpl?: typeof globalThis.fetch): Promise<string | null>;
|
|
2775
2961
|
|
|
2776
|
-
export { Catalog, CatalogExample, type CatalogExampleAlign, type CatalogExampleProps, CatalogExampleStack, type CatalogExampleStackProps, type CatalogExampleViewport, CatalogProps, UX_REVIEW_PROJECT_PATH, type UxReviewCapture, loadUxReviewProject, uxReviewCaptureUrl };
|
|
2962
|
+
export { Catalog, CatalogExample, type CatalogExampleAlign, type CatalogExampleProps, CatalogExampleStack, type CatalogExampleStackProps, type CatalogExampleStackWidth, type CatalogExampleViewport, CatalogProps, UX_REVIEW_PROJECT_PATH, type UxReviewCapture, loadUxReviewProject, uxReviewCaptureUrl };
|
|
2777
2963
|
```
|
|
2778
2964
|
|
|
2779
2965
|
## `@kerfjs/ui/catalog-resources`
|
|
@@ -2785,13 +2971,14 @@ import 'kerfjs';
|
|
|
2785
2971
|
import './semantic-content-BbzjvSu9.js';
|
|
2786
2972
|
import './sides-BPSWde0A.js';
|
|
2787
2973
|
import './pane.js';
|
|
2974
|
+
import './scroll-clearance-BikHljTc.js';
|
|
2788
2975
|
import './workbench.js';
|
|
2789
|
-
import './nav-stack-
|
|
2976
|
+
import './nav-stack-VXTumzKa.js';
|
|
2790
2977
|
import './list.js';
|
|
2791
2978
|
import './extension-attributes-mu8MFUl0.js';
|
|
2792
2979
|
import './flex-alignment-4ms8ZbV8.js';
|
|
2793
2980
|
import './css-values.js';
|
|
2794
|
-
import './panel-toolbar-
|
|
2981
|
+
import './panel-toolbar-vg6Ir5Dy.js';
|
|
2795
2982
|
import './lucide-icon.js';
|
|
2796
2983
|
import 'lucide';
|
|
2797
2984
|
import './toolbar-text.js';
|
|
@@ -2839,13 +3026,14 @@ import './toolbar.js';
|
|
|
2839
3026
|
import './semantic-content-BbzjvSu9.js';
|
|
2840
3027
|
import './sides-BPSWde0A.js';
|
|
2841
3028
|
import './pane.js';
|
|
3029
|
+
import './scroll-clearance-BikHljTc.js';
|
|
2842
3030
|
import './workbench.js';
|
|
2843
|
-
import './nav-stack-
|
|
3031
|
+
import './nav-stack-VXTumzKa.js';
|
|
2844
3032
|
import './list.js';
|
|
2845
3033
|
import './extension-attributes-mu8MFUl0.js';
|
|
2846
3034
|
import './flex-alignment-4ms8ZbV8.js';
|
|
2847
3035
|
import './css-values.js';
|
|
2848
|
-
import './panel-toolbar-
|
|
3036
|
+
import './panel-toolbar-vg6Ir5Dy.js';
|
|
2849
3037
|
import './lucide-icon.js';
|
|
2850
3038
|
import 'lucide';
|
|
2851
3039
|
import './toolbar-text.js';
|
|
@@ -3013,7 +3201,7 @@ import { CssColor } from './css-values.js';
|
|
|
3013
3201
|
type ChoiceChipsSize = 'default' | 'compact';
|
|
3014
3202
|
/**
|
|
3015
3203
|
* A leading color dot: a {@link CssColor} from `uiColor()`, `colorVar()`, or
|
|
3016
|
-
* `
|
|
3204
|
+
* `fillColor()`, or `'transparent'` for the no-color swatch (an outlined
|
|
3017
3205
|
* dot struck through by a diagonal line).
|
|
3018
3206
|
*/
|
|
3019
3207
|
type ChoiceChipsSwatch = CssColor | 'transparent';
|
|
@@ -3030,41 +3218,153 @@ interface ChoiceChipsChoice<Value extends string = string> {
|
|
|
3030
3218
|
disabled?: boolean;
|
|
3031
3219
|
}
|
|
3032
3220
|
interface ChoiceChipsCommonProps<Value extends string> {
|
|
3033
|
-
/**
|
|
3221
|
+
/**
|
|
3222
|
+
* Native input `name`: the form field the selected value (or, with
|
|
3223
|
+
* `multiple`, every checked value) submits under.
|
|
3224
|
+
*/
|
|
3034
3225
|
name: string;
|
|
3035
|
-
/** The selected value. Omit (or pass `undefined`) for no selection. */
|
|
3036
|
-
value?: NoInfer<Value>;
|
|
3037
3226
|
choices: readonly ChoiceChipsChoice<Value>[];
|
|
3038
|
-
/** Delegated `data-action` on every
|
|
3227
|
+
/** Delegated `data-action` on every input; listen for `change`. */
|
|
3039
3228
|
action?: string;
|
|
3040
3229
|
size?: ChoiceChipsSize;
|
|
3041
3230
|
/** Disable the whole group. */
|
|
3042
3231
|
disabled?: boolean;
|
|
3043
|
-
/**
|
|
3044
|
-
required?: boolean;
|
|
3045
|
-
/** Associate the radios with a form outside their ancestor chain. */
|
|
3232
|
+
/** Associate the inputs with a form outside their ancestor chain. */
|
|
3046
3233
|
form?: string;
|
|
3047
3234
|
id?: string;
|
|
3048
3235
|
className?: string;
|
|
3049
3236
|
/** Native named-slot assignment when composed inside a web component. */
|
|
3050
3237
|
slot?: string;
|
|
3051
3238
|
}
|
|
3052
|
-
/**
|
|
3053
|
-
|
|
3239
|
+
/** One exclusive value (the default), backed by native radios. */
|
|
3240
|
+
interface ChoiceChipsSingleProps<Value extends string = string> {
|
|
3241
|
+
multiple?: false;
|
|
3242
|
+
/** The selected value. Omit (or pass `undefined`) for no selection. */
|
|
3243
|
+
value?: NoInfer<Value>;
|
|
3244
|
+
/** Require a selection for native form validation. */
|
|
3245
|
+
required?: boolean;
|
|
3246
|
+
}
|
|
3247
|
+
/**
|
|
3248
|
+
* Any number of values, backed by native checkboxes: each pill is its own Tab
|
|
3249
|
+
* stop, Space toggles it, and every checked value submits under `name`.
|
|
3250
|
+
*/
|
|
3251
|
+
interface ChoiceChipsMultipleProps<Value extends string = string> {
|
|
3252
|
+
multiple: true;
|
|
3253
|
+
/** The checked values. Omit (or pass `[]`) for none. */
|
|
3254
|
+
value?: readonly NoInfer<Value>[];
|
|
3255
|
+
/**
|
|
3256
|
+
* Native `required` on a checkbox demands that one box, so a multiple group
|
|
3257
|
+
* has no "at least one" requirement; validate the checked set in the app.
|
|
3258
|
+
*/
|
|
3259
|
+
required?: never;
|
|
3260
|
+
}
|
|
3261
|
+
/** A group is named either by a string or by a visible heading's id. */
|
|
3262
|
+
type ChoiceChipsNaming = {
|
|
3054
3263
|
label: string;
|
|
3055
3264
|
labelledBy?: never;
|
|
3056
3265
|
} | {
|
|
3057
3266
|
labelledBy: string;
|
|
3058
3267
|
label?: never;
|
|
3059
|
-
}
|
|
3268
|
+
};
|
|
3269
|
+
type ChoiceChipsProps<Value extends string = string> = ChoiceChipsCommonProps<Value> & (ChoiceChipsSingleProps<Value> | ChoiceChipsMultipleProps<Value>) & ChoiceChipsNaming;
|
|
3060
3270
|
/**
|
|
3061
|
-
*
|
|
3062
|
-
* stop, arrow-key selection, and a real form
|
|
3063
|
-
*
|
|
3271
|
+
* A wrapping set of pill chips backed by native inputs. By default it is an
|
|
3272
|
+
* exclusive radio group: one Tab stop, arrow-key selection, and a real form
|
|
3273
|
+
* value. With `multiple` it is a checkbox group: each pill toggles on its own
|
|
3274
|
+
* and every checked value submits. Each choice may lead with a color swatch
|
|
3275
|
+
* (including a struck-through transparent swatch) or an icon.
|
|
3064
3276
|
*/
|
|
3065
|
-
declare function ChoiceChips<Value extends string>(
|
|
3277
|
+
declare function ChoiceChips<Value extends string>(props: ChoiceChipsProps<Value>): SafeHtml;
|
|
3066
3278
|
|
|
3067
|
-
export { ChoiceChips, type ChoiceChipsChoice, type ChoiceChipsProps, type ChoiceChipsSize, type ChoiceChipsSwatch };
|
|
3279
|
+
export { ChoiceChips, type ChoiceChipsChoice, type ChoiceChipsMultipleProps, type ChoiceChipsNaming, type ChoiceChipsProps, type ChoiceChipsSingleProps, type ChoiceChipsSize, type ChoiceChipsSwatch };
|
|
3280
|
+
```
|
|
3281
|
+
|
|
3282
|
+
## `@kerfjs/ui/composer`
|
|
3283
|
+
|
|
3284
|
+
```ts
|
|
3285
|
+
import * as kerfjs from 'kerfjs';
|
|
3286
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
3287
|
+
|
|
3288
|
+
/**
|
|
3289
|
+
* Application `data-*` identity on the Composer root, such as `data-key`;
|
|
3290
|
+
* the composer's own configuration attributes stay protected.
|
|
3291
|
+
*/
|
|
3292
|
+
type ComposerRootAttributes = Readonly<Record<`data-${string}`, string | undefined>>;
|
|
3293
|
+
interface ComposerProps {
|
|
3294
|
+
/** The message field's accessible name, in title style ("Message"). */
|
|
3295
|
+
label: string;
|
|
3296
|
+
/** Native textarea `name`: the form field the message submits under. */
|
|
3297
|
+
name: string;
|
|
3298
|
+
/**
|
|
3299
|
+
* The textarea id. With a `hint`, the hint takes `<id>-hint` and becomes
|
|
3300
|
+
* the field's accessible description.
|
|
3301
|
+
*/
|
|
3302
|
+
id?: string;
|
|
3303
|
+
/** The field's text: a draft to restore, or `''` after sending. */
|
|
3304
|
+
value?: string;
|
|
3305
|
+
/** Sentence-style example of what to write ("Ask about this build"). */
|
|
3306
|
+
placeholder?: string;
|
|
3307
|
+
/**
|
|
3308
|
+
* Visible lines while the field is empty or short (default 1). The field
|
|
3309
|
+
* grows with its content from here.
|
|
3310
|
+
*/
|
|
3311
|
+
minRows?: number;
|
|
3312
|
+
/**
|
|
3313
|
+
* Lines the field grows to before it scrolls (default 8). At least
|
|
3314
|
+
* `minRows`.
|
|
3315
|
+
*/
|
|
3316
|
+
maxRows?: number;
|
|
3317
|
+
/** Quiet, sentence-style supporting copy at the start of the action row. */
|
|
3318
|
+
hint?: string;
|
|
3319
|
+
/** Trailing controls in the action row, normally one brand Send button. */
|
|
3320
|
+
actions: KerfUiContent;
|
|
3321
|
+
/** Disable the field; the app disables its own actions. */
|
|
3322
|
+
disabled?: boolean;
|
|
3323
|
+
/**
|
|
3324
|
+
* Opt in to Enter-to-send: with `wireComposers` running over an ancestor,
|
|
3325
|
+
* Enter (or Cmd/Ctrl+Enter) in the field activates the first trailing
|
|
3326
|
+
* action, Shift+Enter inserts a newline, and an Enter that commits an IME
|
|
3327
|
+
* composition or meets an empty message does not send. The field announces
|
|
3328
|
+
* the shortcut with `aria-keyshortcuts`.
|
|
3329
|
+
*/
|
|
3330
|
+
submitOnEnter?: boolean;
|
|
3331
|
+
/** Safe `data-*` identity on the root. */
|
|
3332
|
+
rootAttributes?: ComposerRootAttributes;
|
|
3333
|
+
className?: string;
|
|
3334
|
+
/** Native named-slot assignment, such as a `wa-dialog`'s `footer`. */
|
|
3335
|
+
slot?: string;
|
|
3336
|
+
}
|
|
3337
|
+
/**
|
|
3338
|
+
* A chat or prompt composer: a raised frame whose border turns brand while
|
|
3339
|
+
* focus is within, holding a borderless message field that grows with its
|
|
3340
|
+
* content between `minRows` and `maxRows` lines, above an action row with an
|
|
3341
|
+
* optional hint and trailing actions. The app owns the value and sending;
|
|
3342
|
+
* `submitOnEnter` with `wireComposers` adds Enter-to-send.
|
|
3343
|
+
*/
|
|
3344
|
+
declare function Composer({ label, name, id, value, placeholder, minRows, maxRows, hint, actions, disabled, submitOnEnter, rootAttributes, className, slot, }: ComposerProps): kerfjs.SafeHtml;
|
|
3345
|
+
|
|
3346
|
+
export { Composer, type ComposerProps, type ComposerRootAttributes };
|
|
3347
|
+
```
|
|
3348
|
+
|
|
3349
|
+
## `@kerfjs/ui/wire-composers`
|
|
3350
|
+
|
|
3351
|
+
```ts
|
|
3352
|
+
type Root = HTMLElement | Document;
|
|
3353
|
+
/**
|
|
3354
|
+
* Enter-to-send for every `Composer` rendered with `submitOnEnter` below
|
|
3355
|
+
* root. In its field, Enter (alone or with Cmd or Ctrl) activates the
|
|
3356
|
+
* composer's first trailing action, so a keyboard send runs the same
|
|
3357
|
+
* delegated handler as a click. Shift+Enter and Alt+Enter insert a newline.
|
|
3358
|
+
* Nothing is sent, and no newline is inserted, when the message is empty or
|
|
3359
|
+
* whitespace-only, the key is auto-repeating, or the first action is
|
|
3360
|
+
* disabled, loading, or `aria-disabled`. An Enter that commits an IME
|
|
3361
|
+
* composition (`isComposing`, keyCode 229, or between `compositionstart` and
|
|
3362
|
+
* `compositionend`) is left to the input method. Dispose with the owning
|
|
3363
|
+
* application.
|
|
3364
|
+
*/
|
|
3365
|
+
declare function wireComposers(root: Root): () => void;
|
|
3366
|
+
|
|
3367
|
+
export { wireComposers };
|
|
3068
3368
|
```
|
|
3069
3369
|
|
|
3070
3370
|
## `@kerfjs/ui/select`
|
|
@@ -3223,7 +3523,12 @@ interface StateBannerProps {
|
|
|
3223
3523
|
urgency?: StateBannerUrgency;
|
|
3224
3524
|
/** Keep the detail beside the title, or give it its own line. */
|
|
3225
3525
|
copyLayout?: StateBannerCopyLayout;
|
|
3226
|
-
/**
|
|
3526
|
+
/**
|
|
3527
|
+
* `trailing` (the default) puts the action beside the copy while the copy
|
|
3528
|
+
* keeps its minimum readable width, and otherwise wraps it onto its own
|
|
3529
|
+
* end-aligned trailing row, at any viewport or container width. `below`
|
|
3530
|
+
* always gives the action that separate trailing row.
|
|
3531
|
+
*/
|
|
3227
3532
|
actionPlacement?: StateBannerActionPlacement;
|
|
3228
3533
|
/**
|
|
3229
3534
|
* `card` (the default) is an inset, rounded, fully bordered banner beside
|
|
@@ -3377,7 +3682,7 @@ export { SunkenPanel, type SunkenPanelProps, type SunkenPanelShape, ensureSunken
|
|
|
3377
3682
|
## `@kerfjs/ui/token-search-field`
|
|
3378
3683
|
|
|
3379
3684
|
```ts
|
|
3380
|
-
export { T as TokenSearchEditorAttributes, a as TokenSearchField, b as TokenSearchFieldProps, c as TokenSearchFieldValue, j as TokenSearchToken, k as TokenSearchTrailingAction, p as placeTokenSearchCaret, r as readTokenSearchField } from './token-search-model-
|
|
3685
|
+
export { T as TokenSearchEditorAttributes, a as TokenSearchField, b as TokenSearchFieldProps, c as TokenSearchFieldValue, j as TokenSearchToken, k as TokenSearchTrailingAction, l as TokenSearchTrailingActionAttributes, p as placeTokenSearchCaret, r as readTokenSearchField } from './token-search-model-aYR0YAei.js';
|
|
3381
3686
|
import 'kerfjs';
|
|
3382
3687
|
import './semantic-content-BbzjvSu9.js';
|
|
3383
3688
|
```
|
|
@@ -3386,7 +3691,7 @@ import './semantic-content-BbzjvSu9.js';
|
|
|
3386
3691
|
|
|
3387
3692
|
```ts
|
|
3388
3693
|
import { Signal } from 'kerfjs';
|
|
3389
|
-
import { d as TokenSearchModel } from './token-search-model-
|
|
3694
|
+
import { d as TokenSearchModel } from './token-search-model-aYR0YAei.js';
|
|
3390
3695
|
import './semantic-content-BbzjvSu9.js';
|
|
3391
3696
|
|
|
3392
3697
|
interface TokenSearchSubmit {
|
|
@@ -3675,10 +3980,16 @@ import { S as SemanticTone } from './semantic-tone-CdW013KF.js';
|
|
|
3675
3980
|
import { BadgeAppearance, BadgeShape, BadgeSize } from './badge.js';
|
|
3676
3981
|
import './css-values.js';
|
|
3677
3982
|
|
|
3983
|
+
/**
|
|
3984
|
+
* A chip color role: a shared semantic tone, or `inherit`, which follows the
|
|
3985
|
+
* surrounding foreground (a chip inside a `brand-loud` ContentItem bubble)
|
|
3986
|
+
* and derives its fill, border, and focus ring from `currentColor`.
|
|
3987
|
+
*/
|
|
3988
|
+
type ChipTone = SemanticTone | 'inherit';
|
|
3678
3989
|
interface ChipCommonProps {
|
|
3679
3990
|
/** Decorative leading icon, normally an unsized LucideIcon. */
|
|
3680
3991
|
icon?: SafeHtml;
|
|
3681
|
-
tone?:
|
|
3992
|
+
tone?: ChipTone;
|
|
3682
3993
|
appearance?: BadgeAppearance;
|
|
3683
3994
|
shape?: BadgeShape;
|
|
3684
3995
|
size?: BadgeSize;
|
|
@@ -3689,24 +4000,50 @@ interface ChipCommonProps {
|
|
|
3689
4000
|
/** Native named-slot assignment when composed inside a web component. */
|
|
3690
4001
|
slot?: string;
|
|
3691
4002
|
}
|
|
3692
|
-
|
|
3693
|
-
type ChipProps = ChipCommonProps & ({
|
|
4003
|
+
type ChipLabelProps = {
|
|
3694
4004
|
children: SafeHtml | string | number;
|
|
3695
4005
|
truncate?: false;
|
|
3696
4006
|
} | {
|
|
3697
4007
|
children: string;
|
|
3698
4008
|
truncate: true;
|
|
3699
|
-
}
|
|
4009
|
+
};
|
|
4010
|
+
interface ChipNoLinkProps {
|
|
4011
|
+
href?: never;
|
|
4012
|
+
download?: never;
|
|
4013
|
+
external?: never;
|
|
4014
|
+
}
|
|
4015
|
+
/**
|
|
4016
|
+
* A link chip renders a native `<a>` with Chip geometry. It cannot also carry
|
|
4017
|
+
* a remove button, because a button inside a link is invalid.
|
|
4018
|
+
*/
|
|
4019
|
+
interface ChipLinkProps {
|
|
4020
|
+
/** Native destination; the chip renders as an `<a>`. */
|
|
4021
|
+
href: string;
|
|
4022
|
+
/** Download the destination: `true`, or the suggested file name. */
|
|
4023
|
+
download?: string | boolean;
|
|
4024
|
+
/** Open in a new tab with a safe rel and announce that behavior. */
|
|
4025
|
+
external?: boolean;
|
|
4026
|
+
removeAction?: never;
|
|
4027
|
+
removeLabel?: never;
|
|
4028
|
+
}
|
|
4029
|
+
/**
|
|
4030
|
+
* A plain chip, a removable chip (a delegated action plus a specific
|
|
4031
|
+
* accessible name), or a link chip (`href`, optional `download`/`external`).
|
|
4032
|
+
*/
|
|
4033
|
+
type ChipProps = ChipCommonProps & ChipLabelProps & (({
|
|
3700
4034
|
removeAction: string;
|
|
3701
4035
|
removeLabel: string;
|
|
3702
|
-
} | {
|
|
4036
|
+
} & ChipNoLinkProps) | ({
|
|
3703
4037
|
removeAction?: never;
|
|
3704
4038
|
removeLabel?: never;
|
|
3705
|
-
});
|
|
3706
|
-
/**
|
|
3707
|
-
|
|
4039
|
+
} & ChipNoLinkProps) | ChipLinkProps);
|
|
4040
|
+
/**
|
|
4041
|
+
* A short label with an optional native remove button, or a native link when
|
|
4042
|
+
* `href` is set. The application owns removal and the link destination.
|
|
4043
|
+
*/
|
|
4044
|
+
declare function Chip({ children, icon, truncate, tone, appearance, shape, size, disabled, itemId, className, slot, href, download, external, removeAction, removeLabel, }: ChipProps): SafeHtml;
|
|
3708
4045
|
|
|
3709
|
-
export { Chip, type ChipProps };
|
|
4046
|
+
export { Chip, type ChipProps, type ChipTone };
|
|
3710
4047
|
```
|
|
3711
4048
|
|
|
3712
4049
|
## `@kerfjs/ui/lucide-icon`
|
|
@@ -3774,9 +4111,24 @@ type DialogSurfaceHeight = CssLength | 'viewport';
|
|
|
3774
4111
|
/**
|
|
3775
4112
|
* How the dialog body lays out its children: `flow` (default) scrolls ordinary
|
|
3776
4113
|
* content in the body; `fill` gives one child the body's whole height and
|
|
3777
|
-
* lets it own scrolling (a SplitView, a Pane, an editor)
|
|
4114
|
+
* lets it own scrolling (a SplitView, a Pane, an editor); `fill-last` stacks
|
|
4115
|
+
* the leading children at their natural height and gives the last child the
|
|
4116
|
+
* remaining height to own its scrolling (a heading and notices above a
|
|
4117
|
+
* scrolling transcript).
|
|
4118
|
+
*/
|
|
4119
|
+
type DialogSurfaceBodyLayout = 'flow' | 'fill' | 'fill-last';
|
|
4120
|
+
/**
|
|
4121
|
+
* Where the dialog footer sits: `docked` (default) below the body, or
|
|
4122
|
+
* `floating` over the body's block end, inset from the panel's inline and
|
|
4123
|
+
* block-end edges on a transparent background (a chat composer).
|
|
3778
4124
|
*/
|
|
3779
|
-
type
|
|
4125
|
+
type DialogSurfaceFooterPresentation = 'docked' | 'floating';
|
|
4126
|
+
/**
|
|
4127
|
+
* Where the dialog header sits: `docked` (default) above the body, or
|
|
4128
|
+
* `floating` over the body's block-start edge on the translucent chrome
|
|
4129
|
+
* material, so content scrolls visibly beneath the title bar.
|
|
4130
|
+
*/
|
|
4131
|
+
type DialogSurfaceHeaderPresentation = 'docked' | 'floating';
|
|
3780
4132
|
/**
|
|
3781
4133
|
* Application `data-*` identity on the DialogSurface root, such as
|
|
3782
4134
|
* `data-key`; the surface's own configuration attributes stay protected.
|
|
@@ -3799,8 +4151,43 @@ interface DialogSurfaceProps {
|
|
|
3799
4151
|
* height to fill. Takes precedence over `maxHeight`.
|
|
3800
4152
|
*/
|
|
3801
4153
|
height?: DialogSurfaceHeight;
|
|
3802
|
-
/**
|
|
4154
|
+
/**
|
|
4155
|
+
* Body layout (default `flow`); `fill` lets one child own the body and
|
|
4156
|
+
* `fill-last` stacks fixed rows above one filling last child.
|
|
4157
|
+
*/
|
|
3803
4158
|
bodyLayout?: DialogSurfaceBodyLayout;
|
|
4159
|
+
/**
|
|
4160
|
+
* Header placement (default `docked`); `floating` lays the dialog's header
|
|
4161
|
+
* (its title and close control) over the body's block-start edge on the
|
|
4162
|
+
* translucent chrome material (`--kui-chrome-material-raised`, opaque under
|
|
4163
|
+
* `prefers-reduced-transparency`, increased contrast, forced colors, or
|
|
4164
|
+
* without `backdrop-filter`). The `/register` entry measures the header;
|
|
4165
|
+
* the body reserves that height before its own inset, so its first content
|
|
4166
|
+
* rests below the title bar. A `fill`/`fill-last` child that is the body's
|
|
4167
|
+
* only child and opts into block-start `scrollClearance` (a `List` or
|
|
4168
|
+
* `Pane`) takes the clearance inside its own scroll area instead, published
|
|
4169
|
+
* as `--kui-scroll-clearance-block-start`, so its content scrolls visibly
|
|
4170
|
+
* beneath the header. Unmeasured (without the register), the header stays
|
|
4171
|
+
* docked. Keep header text in the normal text color: quiet text can fall
|
|
4172
|
+
* below AA over the content passing beneath it.
|
|
4173
|
+
*/
|
|
4174
|
+
headerPresentation?: DialogSurfaceHeaderPresentation;
|
|
4175
|
+
/**
|
|
4176
|
+
* Footer placement (default `docked`); `floating` lays the footer over the
|
|
4177
|
+
* body's block end. The body reserves the footer's measured height so its
|
|
4178
|
+
* last content is never hidden beneath it. A `fill`/`fill-last` child that
|
|
4179
|
+
* opts into block-end `scrollClearance` (a `List` or `Pane`) takes that
|
|
4180
|
+
* clearance inside its own scroll area instead, published as
|
|
4181
|
+
* `--kui-scroll-clearance-block-end`, so its content scrolls visibly beneath
|
|
4182
|
+
* the transparent footer.
|
|
4183
|
+
*/
|
|
4184
|
+
footerPresentation?: DialogSurfaceFooterPresentation;
|
|
4185
|
+
/**
|
|
4186
|
+
* A floating footer's clearance from the panel's inline and block-end edges
|
|
4187
|
+
* (default the 16px container inset). Choose a phone value such as
|
|
4188
|
+
* `remify(8)` from `deviceClass()`; the scaffold adds no breakpoint.
|
|
4189
|
+
*/
|
|
4190
|
+
footerOffset?: CssLength;
|
|
3804
4191
|
/**
|
|
3805
4192
|
* Safe `data-*` identity on the root. Give sibling dialogs distinct
|
|
3806
4193
|
* `data-key`s so a re-render morphs each surface into itself instead of
|
|
@@ -3813,7 +4200,7 @@ interface DialogSurfaceProps {
|
|
|
3813
4200
|
slot?: string;
|
|
3814
4201
|
}
|
|
3815
4202
|
/** Configure recurring Web Awesome dialog geometry without consumer ::part() CSS. */
|
|
3816
|
-
declare function DialogSurface({ children, size, presentation, preferredWidth, bodyInset, footerInset, viewportGutter, maxHeight, height, bodyLayout, rootAttributes, className, slot, }: DialogSurfaceProps): kerfjs.SafeHtml;
|
|
4203
|
+
declare function DialogSurface({ children, size, presentation, preferredWidth, bodyInset, footerInset, viewportGutter, maxHeight, height, bodyLayout, headerPresentation, footerPresentation, footerOffset, rootAttributes, className, slot, }: DialogSurfaceProps): kerfjs.SafeHtml;
|
|
3817
4204
|
/** Where a PopoverDialogSurface appears: the top layer, or in flow. */
|
|
3818
4205
|
type PopoverDialogSurfacePresentation = 'overlay' | 'embedded';
|
|
3819
4206
|
/** Application `data-*` metadata on the surface root. */
|
|
@@ -3828,6 +4215,12 @@ type PopoverDialogSurfaceName = {
|
|
|
3828
4215
|
type PopoverDialogSurfaceProps = PopoverDialogSurfaceName & {
|
|
3829
4216
|
/** The root id: what an opening control's `popovertarget` names. */
|
|
3830
4217
|
id?: string;
|
|
4218
|
+
/**
|
|
4219
|
+
* Id of the element whose text is the dialog's accessible description,
|
|
4220
|
+
* such as a title `ToolbarText`'s `descriptionId`; rendered as
|
|
4221
|
+
* `aria-describedby` on the `role="dialog"` root.
|
|
4222
|
+
*/
|
|
4223
|
+
describedBy?: string;
|
|
3831
4224
|
children: KerfUiContent;
|
|
3832
4225
|
/**
|
|
3833
4226
|
* `overlay` (default) is a native `popover="auto"` in the top layer:
|
|
@@ -3845,7 +4238,10 @@ type PopoverDialogSurfaceProps = PopoverDialogSurfaceName & {
|
|
|
3845
4238
|
maxHeight?: DialogSurfaceMaxHeight;
|
|
3846
4239
|
/** Edge clearance on each side of the viewport (default 16px). */
|
|
3847
4240
|
viewportGutter?: CssLength;
|
|
3848
|
-
/**
|
|
4241
|
+
/**
|
|
4242
|
+
* Body layout (default `flow`); `fill` lets one child own the surface and
|
|
4243
|
+
* `fill-last` stacks fixed rows above one filling last child.
|
|
4244
|
+
*/
|
|
3849
4245
|
bodyLayout?: DialogSurfaceBodyLayout;
|
|
3850
4246
|
rootAttributes?: PopoverDialogSurfaceDataAttributes;
|
|
3851
4247
|
className?: string;
|
|
@@ -3859,7 +4255,7 @@ type PopoverDialogSurfaceProps = PopoverDialogSurfaceName & {
|
|
|
3859
4255
|
* dismisses and leaves the page interactive. Use `DialogSurface` with
|
|
3860
4256
|
* `wa-dialog` when the task must block the page.
|
|
3861
4257
|
*/
|
|
3862
|
-
declare function PopoverDialogSurface({ id, children, label, labelledBy, presentation, size, preferredWidth, height, maxHeight, viewportGutter, bodyLayout, rootAttributes, className, slot, }: PopoverDialogSurfaceProps): kerfjs.SafeHtml;
|
|
4258
|
+
declare function PopoverDialogSurface({ id, children, label, labelledBy, describedBy, presentation, size, preferredWidth, height, maxHeight, viewportGutter, bodyLayout, rootAttributes, className, slot, }: PopoverDialogSurfaceProps): kerfjs.SafeHtml;
|
|
3863
4259
|
type PopupSurfaceInset = 'standard' | 'compact' | 'list-zero';
|
|
3864
4260
|
interface PopupSurfaceProps {
|
|
3865
4261
|
children: KerfUiContent;
|
|
@@ -3871,7 +4267,7 @@ interface PopupSurfaceProps {
|
|
|
3871
4267
|
/** Configure recurring Web Awesome dropdown-menu geometry without consumer ::part() CSS. */
|
|
3872
4268
|
declare function PopupSurface({ children, inset, className, slot, }: PopupSurfaceProps): kerfjs.SafeHtml;
|
|
3873
4269
|
|
|
3874
|
-
export { DialogSurface, type DialogSurfaceBodyLayout, type DialogSurfaceHeight, type DialogSurfaceMaxHeight, type DialogSurfacePresentation, type DialogSurfaceProps, type DialogSurfaceRootAttributes, type DialogSurfaceSize, PopoverDialogSurface, type PopoverDialogSurfaceDataAttributes, type PopoverDialogSurfacePresentation, type PopoverDialogSurfaceProps, PopupSurface, type PopupSurfaceInset, type PopupSurfaceProps, type SurfaceInset };
|
|
4270
|
+
export { DialogSurface, type DialogSurfaceBodyLayout, type DialogSurfaceFooterPresentation, type DialogSurfaceHeaderPresentation, type DialogSurfaceHeight, type DialogSurfaceMaxHeight, type DialogSurfacePresentation, type DialogSurfaceProps, type DialogSurfaceRootAttributes, type DialogSurfaceSize, PopoverDialogSurface, type PopoverDialogSurfaceDataAttributes, type PopoverDialogSurfacePresentation, type PopoverDialogSurfaceProps, PopupSurface, type PopupSurfaceInset, type PopupSurfaceProps, type SurfaceInset };
|
|
3875
4271
|
```
|
|
3876
4272
|
|
|
3877
4273
|
## `@kerfjs/ui/text`
|
|
@@ -4322,7 +4718,7 @@ export { CssLength, Spacer, type SpacerProps, UiSpaceName };
|
|
|
4322
4718
|
## `@kerfjs/ui/token-search-model`
|
|
4323
4719
|
|
|
4324
4720
|
```ts
|
|
4325
|
-
export { d as TokenSearchModel, e as TokenSearchModelOptions, f as TokenSearchResolvedToken, g as TokenSearchRule, h as TokenSearchState, i as TokenSearchSuggestion,
|
|
4721
|
+
export { d as TokenSearchModel, e as TokenSearchModelOptions, f as TokenSearchResolvedToken, g as TokenSearchRule, h as TokenSearchState, i as TokenSearchSuggestion, m as createTokenSearchModel } from './token-search-model-aYR0YAei.js';
|
|
4326
4722
|
import 'kerfjs';
|
|
4327
4723
|
import './semantic-content-BbzjvSu9.js';
|
|
4328
4724
|
```
|
|
@@ -4381,6 +4777,12 @@ import { PopoverOptions, OverlayContent, OverlayHandle } from 'kerfjs/overlay';
|
|
|
4381
4777
|
interface AnchoredSurfaceOptions extends Pick<PopoverOptions, 'placement' | 'align' | 'gap' | 'dismiss' | 'initialFocus' | 'onDismiss' | 'outsideIgnore' | 'container'> {
|
|
4382
4778
|
/** Accessible name for the non-modal dialog. */
|
|
4383
4779
|
label: string;
|
|
4780
|
+
/**
|
|
4781
|
+
* Gutter in px kept between the surface and the viewport edges when it is
|
|
4782
|
+
* clamped horizontally and fitted vertically. Default `8`, the same gutter as
|
|
4783
|
+
* the surface's maximum size.
|
|
4784
|
+
*/
|
|
4785
|
+
viewportMargin?: number;
|
|
4384
4786
|
/**
|
|
4385
4787
|
* Where to append the surface. Default: inside the anchor's open modal
|
|
4386
4788
|
* dialog — a native `<dialog>`'s host slot, or a slot kerf creates in a
|
|
@@ -4389,20 +4791,42 @@ interface AnchoredSurfaceOptions extends Pick<PopoverOptions, 'placement' | 'ali
|
|
|
4389
4791
|
* cannot resolve; an element inside an open modal closes the surface with it.
|
|
4390
4792
|
*/
|
|
4391
4793
|
container?: Element;
|
|
4794
|
+
/**
|
|
4795
|
+
* Surface tone. `'default'` follows the anchor's color scheme. `'dark'` is
|
|
4796
|
+
* the loud, inverse tone of a `ToolbarControlGroup` / `ToolbarText`
|
|
4797
|
+
* `tone="dark"`, for a popup anchored to dark media chrome (a volume popup
|
|
4798
|
+
* over a video preview): dark beside a light page and light beside a dark
|
|
4799
|
+
* one, so the popup matches the control group that opened it. The surface
|
|
4800
|
+
* takes the opposite of the anchor's color scheme, so it and every Kerf UI
|
|
4801
|
+
* or Web Awesome component inside it resolve the same semantic
|
|
4802
|
+
* `light-dark()` tokens to the other side: no new colors, no child
|
|
4803
|
+
* overrides. While open it follows a live switch of that scheme (the OS
|
|
4804
|
+
* preference, or an app theme class or attribute on an ancestor). Default
|
|
4805
|
+
* `'default'`.
|
|
4806
|
+
*/
|
|
4807
|
+
tone?: AnchoredSurfaceTone;
|
|
4392
4808
|
}
|
|
4809
|
+
/** {@link AnchoredSurfaceOptions.tone}: follow the anchor's scheme, or invert it. */
|
|
4810
|
+
type AnchoredSurfaceTone = 'default' | 'dark';
|
|
4393
4811
|
/** A viewport pointer location; `context` is the element under the pointer. */
|
|
4394
4812
|
interface AnchoredSurfacePoint {
|
|
4395
4813
|
x: number;
|
|
4396
4814
|
y: number;
|
|
4397
4815
|
/**
|
|
4398
4816
|
* Pass the event target when opening from inside a modal dialog, native or
|
|
4399
|
-
* Web Awesome (`wa-dialog`, `wa-drawer`).
|
|
4817
|
+
* Web Awesome (`wa-dialog`, `wa-drawer`). The dark tone also reads its
|
|
4818
|
+
* color scheme from `context`, so a region with its own `color-scheme` is
|
|
4819
|
+
* honored; without it the scheme is the modal scope's (or the page's).
|
|
4400
4820
|
*/
|
|
4401
4821
|
context?: Element;
|
|
4402
4822
|
}
|
|
4403
4823
|
/**
|
|
4404
4824
|
* Open app-owned content beside an element. The surface owns its Kerf UI chrome;
|
|
4405
4825
|
* kerfjs/overlay owns positioning, top-layer/modal hosting, focus, and dismissal.
|
|
4826
|
+
* The surface stays `viewportMargin` inside the viewport edges and fits its
|
|
4827
|
+
* height to the room beside the anchor (the roomier side when neither holds it),
|
|
4828
|
+
* scrolling its content; `--kui-anchored-surface-available-height` exposes that
|
|
4829
|
+
* room to the content, updated as the page scrolls or resizes.
|
|
4406
4830
|
* The caller owns content, action policy, and calling `close()` when an action
|
|
4407
4831
|
* completes. `initialFocus` defaults to the first focusable descendant; set it
|
|
4408
4832
|
* to `false` for read-only help that should leave focus on its trigger.
|
|
@@ -4415,7 +4839,7 @@ declare function openAnchoredSurface(anchor: Element, content: OverlayContent, o
|
|
|
4415
4839
|
*/
|
|
4416
4840
|
declare function openAnchoredSurfaceAt(point: AnchoredSurfacePoint, content: OverlayContent, options: AnchoredSurfaceOptions): OverlayHandle;
|
|
4417
4841
|
|
|
4418
|
-
export { type AnchoredSurfaceOptions, type AnchoredSurfacePoint, openAnchoredSurface, openAnchoredSurfaceAt };
|
|
4842
|
+
export { type AnchoredSurfaceOptions, type AnchoredSurfacePoint, type AnchoredSurfaceTone, openAnchoredSurface, openAnchoredSurfaceAt };
|
|
4419
4843
|
```
|
|
4420
4844
|
|
|
4421
4845
|
## `@kerfjs/ui/icon-button`
|
|
@@ -4660,7 +5084,7 @@ interface CornerStatusProps {
|
|
|
4660
5084
|
}
|
|
4661
5085
|
/**
|
|
4662
5086
|
* A non-dismissible status surface pinned to a viewport corner — "Loading…",
|
|
4663
|
-
* "Updating
|
|
5087
|
+
* "Updating Tickets… 3 of 12" — for app-level progress that has no better
|
|
4664
5088
|
* home beside the affected work. The application owns its lifetime: render it
|
|
4665
5089
|
* while the work runs and remove it when the work ends. It carries no role of
|
|
4666
5090
|
* its own; the composed `StateBanner` is the polite live region. Use a toast
|