@kerfjs/ui 5.0.0-beta.4 → 5.0.0-beta.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +342 -108
- package/ai/application-ui-diagnostic-ids-v1.json +100 -0
- package/ai/application-ui-profile-sync.cjs +529 -0
- package/ai/application-ui-profile.d.mts +1 -0
- package/ai/application-ui-profile.d.ts +102 -0
- package/ai/application-ui-profile.defaults.json +41 -0
- package/ai/application-ui-profile.mjs +626 -0
- package/ai/application-ui-profile.schema.json +130 -0
- package/ai/catalog-authoring.json +25 -0
- package/ai/catalog-authoring.schema.json +61 -0
- package/ai/compile-time-contracts-v1.json +132 -0
- package/ai/compile-time-contracts-v1.schema.json +51 -0
- package/ai/component-catalog-extension-v2.d.ts +7 -0
- package/ai/component-catalog-extension-v2.schema.json +7 -0
- package/ai/component-catalog-extension.schema.json +79 -0
- package/ai/component-catalog-v2-overrides.json +496 -0
- package/ai/component-catalog-v2.d.ts +90 -0
- package/ai/component-catalog-v2.json +5678 -0
- package/ai/component-catalog-v2.schema.json +298 -0
- package/ai/component-catalog.json +2694 -417
- package/ai/component-catalog.schema.json +39 -0
- package/ai/public-api-signatures-v1.md +1591 -126
- package/ai/skill.md +140 -54
- package/ai/webawesome-jsx-signatures-v1.md +2 -1
- package/analyzer/cli.mjs +49 -0
- package/analyzer/index.d.mts +46 -0
- package/analyzer/index.mjs +1086 -0
- package/analyzer/report.schema.json +66 -0
- package/dist/app-tab.d.ts +15 -4
- package/dist/app-tab.js +3 -1
- package/dist/browser/app-tab.js +1 -0
- package/dist/browser/floating-toolbar.js +3 -0
- package/dist/browser/list-action-row.js +5 -0
- package/dist/browser/list-header.js +7 -0
- package/dist/browser/list-inset-control.js +3 -0
- package/dist/browser/list-inset-text.js +3 -0
- package/dist/browser/list-item.js +5 -0
- package/dist/browser/list.js +3 -0
- package/dist/browser/pane.js +3 -0
- package/dist/browser/row.js +3 -0
- package/dist/browser/segmented-control.js +1 -0
- package/dist/browser/select.js +1 -0
- package/dist/browser/skeleton.js +3 -0
- package/dist/browser/spacer.js +3 -0
- package/dist/browser/state-banner.js +1 -0
- package/dist/browser/sunken-panel.js +3 -0
- package/dist/browser/surface-scaffold.js +3 -0
- package/dist/browser/text.js +3 -0
- package/dist/browser/toolbar-text.js +1 -0
- package/dist/browser/value-table.js +1 -0
- package/dist/catalog-resources.d.ts +35 -0
- package/dist/catalog-resources.js +22 -0
- package/dist/catalog-resources.js.map +1 -0
- package/dist/catalog.d.ts +151 -0
- package/dist/catalog.js +396 -0
- package/dist/catalog.js.map +1 -0
- package/dist/chunk-2TYUFZUC.js +22 -0
- package/dist/chunk-2TYUFZUC.js.map +1 -0
- package/dist/chunk-6NDBE2OK.js +32 -0
- package/dist/chunk-6NDBE2OK.js.map +1 -0
- package/dist/chunk-6WTETUZ6.js +21 -0
- package/dist/chunk-6WTETUZ6.js.map +1 -0
- package/dist/chunk-AQFWBG23.js +83 -0
- package/dist/chunk-AQFWBG23.js.map +1 -0
- package/dist/chunk-B6JYRX3P.js +51 -0
- package/dist/chunk-B6JYRX3P.js.map +1 -0
- package/dist/chunk-C34NZOLJ.js +53 -0
- package/dist/chunk-C34NZOLJ.js.map +1 -0
- package/dist/chunk-CAB6NQ2T.js +102 -0
- package/dist/chunk-CAB6NQ2T.js.map +1 -0
- package/dist/chunk-CK6P5AUK.js +136 -0
- package/dist/chunk-CK6P5AUK.js.map +1 -0
- package/dist/chunk-DAO2VFTT.js +129 -0
- package/dist/chunk-DAO2VFTT.js.map +1 -0
- package/dist/chunk-DEYOGDE7.js +141 -0
- package/dist/chunk-DEYOGDE7.js.map +1 -0
- package/dist/chunk-DYBPI5O2.js +25 -0
- package/dist/chunk-DYBPI5O2.js.map +1 -0
- package/dist/{chunk-TRNBHPNW.js → chunk-E34TE2ZI.js} +12 -8
- package/dist/chunk-E34TE2ZI.js.map +1 -0
- package/dist/chunk-EYALJQQD.js +25 -0
- package/dist/chunk-EYALJQQD.js.map +1 -0
- package/dist/chunk-I45QO2IZ.js +88 -0
- package/dist/chunk-I45QO2IZ.js.map +1 -0
- package/dist/chunk-I4V3UDSA.js +79 -0
- package/dist/chunk-I4V3UDSA.js.map +1 -0
- package/dist/chunk-OGTJNHRG.js +42 -0
- package/dist/chunk-OGTJNHRG.js.map +1 -0
- package/dist/chunk-OL4TC3U2.js +156 -0
- package/dist/chunk-OL4TC3U2.js.map +1 -0
- package/dist/chunk-OMSRSL3B.js +120 -0
- package/dist/chunk-OMSRSL3B.js.map +1 -0
- package/dist/chunk-R3EBGEAW.js +46 -0
- package/dist/chunk-R3EBGEAW.js.map +1 -0
- package/dist/chunk-SOK5EUF7.js +25 -0
- package/dist/chunk-SOK5EUF7.js.map +1 -0
- package/dist/{chunk-7BR3DO2A.js → chunk-SRSJO5QE.js} +13 -4
- package/dist/chunk-SRSJO5QE.js.map +1 -0
- package/dist/chunk-T7DOWS6T.js +61 -0
- package/dist/chunk-T7DOWS6T.js.map +1 -0
- package/dist/chunk-TIGSG6BX.js +218 -0
- package/dist/chunk-TIGSG6BX.js.map +1 -0
- package/dist/chunk-UDHHKZWO.js +41 -0
- package/dist/chunk-UDHHKZWO.js.map +1 -0
- package/dist/{chunk-MQIZAD4A.js → chunk-UKKSMZYT.js} +76 -22
- package/dist/chunk-UKKSMZYT.js.map +1 -0
- package/dist/chunk-V6GQKOX2.js +39 -0
- package/dist/chunk-V6GQKOX2.js.map +1 -0
- package/dist/chunk-V6HCTCVD.js +46 -0
- package/dist/chunk-V6HCTCVD.js.map +1 -0
- package/dist/chunk-VDUJZF5G.js +515 -0
- package/dist/chunk-VDUJZF5G.js.map +1 -0
- package/dist/chunk-VXFGMDA7.js +31 -0
- package/dist/chunk-VXFGMDA7.js.map +1 -0
- package/dist/chunk-WN52USHV.js +115 -0
- package/dist/chunk-WN52USHV.js.map +1 -0
- package/dist/chunk-WSXUPSID.js +43 -0
- package/dist/chunk-WSXUPSID.js.map +1 -0
- package/dist/chunk-X5GRDQ7V.js +50 -0
- package/dist/chunk-X5GRDQ7V.js.map +1 -0
- package/dist/{chunk-56RJXPHG.js → chunk-Y6LYKFXY.js} +1 -1
- package/dist/{chunk-56RJXPHG.js.map → chunk-Y6LYKFXY.js.map} +1 -1
- package/dist/chunk-ZASJJMGV.js +17 -0
- package/dist/chunk-ZASJJMGV.js.map +1 -0
- package/dist/chunk-ZPWZIVI6.js +47 -0
- package/dist/chunk-ZPWZIVI6.js.map +1 -0
- package/dist/collapsible-panel.d.ts +77 -0
- package/dist/collapsible-panel.js +84 -0
- package/dist/collapsible-panel.js.map +1 -0
- package/dist/css-values.d.ts +75 -0
- package/dist/css-values.js +3 -0
- package/dist/css-values.js.map +1 -0
- package/dist/device-class.d.ts +62 -0
- package/dist/device-class.js +103 -0
- package/dist/device-class.js.map +1 -0
- package/dist/disclosure-arrow.js +1 -1
- package/dist/divider-sides-BzB6rphT.d.ts +6 -0
- package/dist/empty-state.d.ts +3 -2
- package/dist/empty-state.js +1 -1
- package/dist/flex-alignment-CF8NLj7i.d.ts +4 -0
- package/dist/floating-toolbar.d.ts +29 -0
- package/dist/floating-toolbar.js +3 -0
- package/dist/floating-toolbar.js.map +1 -0
- package/dist/index.d.ts +28 -14
- package/dist/index.js +34 -23
- package/dist/{menu-action-row.d.ts → list-action-row.d.ts} +19 -8
- package/dist/list-action-row.js +7 -0
- package/dist/list-action-row.js.map +1 -0
- package/dist/list-header.d.ts +80 -0
- package/dist/list-header.js +9 -0
- package/dist/list-header.js.map +1 -0
- package/dist/list-inset-control.d.ts +20 -0
- package/dist/list-inset-control.js +3 -0
- package/dist/list-inset-control.js.map +1 -0
- package/dist/list-inset-text.d.ts +29 -0
- package/dist/list-inset-text.js +3 -0
- package/dist/list-inset-text.js.map +1 -0
- package/dist/list-item.d.ts +45 -0
- package/dist/list-item.js +7 -0
- package/dist/list-item.js.map +1 -0
- package/dist/list.d.ts +30 -0
- package/dist/list.js +5 -0
- package/dist/list.js.map +1 -0
- package/dist/loading-spinner.js +1 -1
- package/dist/nav-stack.d.ts +41 -0
- package/dist/nav-stack.js +6 -0
- package/dist/nav-stack.js.map +1 -0
- package/dist/pane.d.ts +50 -0
- package/dist/pane.js +4 -0
- package/dist/pane.js.map +1 -0
- package/dist/resizable-region.d.ts +21 -3
- package/dist/resizable-region.js +1 -1
- package/dist/row.d.ts +28 -0
- package/dist/row.js +5 -0
- package/dist/row.js.map +1 -0
- package/dist/segmented-control.d.ts +11 -8
- package/dist/segmented-control.js +3 -1
- package/dist/select-register.d.ts +5 -1
- package/dist/select-register.js +129 -1
- package/dist/select-register.js.map +1 -1
- package/dist/select.d.ts +34 -8
- package/dist/select.js +3 -1
- package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
- package/dist/skeleton.d.ts +25 -0
- package/dist/skeleton.js +4 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/spacer.d.ts +16 -0
- package/dist/spacer.js +4 -0
- package/dist/spacer.js.map +1 -0
- package/dist/split-view.d.ts +43 -0
- package/dist/split-view.js +82 -0
- package/dist/split-view.js.map +1 -0
- package/dist/state-banner.d.ts +11 -5
- package/dist/state-banner.js +3 -1
- package/dist/styles/app-tab.css +26 -0
- package/dist/styles/catalog.css +582 -0
- package/dist/styles/collapsible-panel.css +212 -0
- package/dist/styles/floating-toolbar.css +38 -0
- package/dist/styles/foundation.css +80 -0
- package/dist/styles/layout.css +2 -20
- package/dist/styles/list-action-row.css +224 -0
- package/dist/styles/list-header.css +224 -0
- package/dist/styles/list-inset-control.css +23 -0
- package/dist/styles/list-inset-text.css +30 -0
- package/dist/styles/list-item.css +171 -0
- package/dist/styles/list.css +118 -0
- package/dist/styles/nav-stack.css +141 -0
- package/dist/styles/pane.css +62 -0
- package/dist/styles/resizable-region.css +158 -0
- package/dist/styles/row.css +92 -0
- package/dist/styles/segmented-control.css +10 -7
- package/dist/styles/select.css +115 -2
- package/dist/styles/skeleton.css +31 -0
- package/dist/styles/spacer.css +11 -0
- package/dist/styles/split-view.css +35 -0
- package/dist/styles/state-banner.css +49 -10
- package/dist/styles/styles.css +10 -5
- package/dist/styles/sunken-panel.css +22 -0
- package/dist/styles/surface-scaffold.css +51 -0
- package/dist/styles/tab-bar.css +24 -0
- package/dist/styles/tab-scaffold.css +85 -0
- package/dist/styles/text.css +6 -0
- package/dist/styles/token-search-field.css +14 -2
- package/dist/styles/toolbar-control-group.css +235 -8
- package/dist/styles/toolbar-text.css +65 -2
- package/dist/styles/toolbar.css +47 -2
- package/dist/styles/webawesome.css +171 -0
- package/dist/styles/workbench.css +187 -0
- package/dist/sunken-panel.d.ts +20 -0
- package/dist/sunken-panel.js +3 -0
- package/dist/sunken-panel.js.map +1 -0
- package/dist/surface-scaffold.d.ts +26 -0
- package/dist/surface-scaffold.js +3 -0
- package/dist/surface-scaffold.js.map +1 -0
- package/dist/tab-bar.d.ts +24 -6
- package/dist/tab-bar.js +1 -1
- package/dist/tab-scaffold.d.ts +31 -0
- package/dist/tab-scaffold.js +51 -0
- package/dist/tab-scaffold.js.map +1 -0
- package/dist/text.d.ts +20 -0
- package/dist/text.js +3 -0
- package/dist/text.js.map +1 -0
- package/dist/token-search-field.d.ts +30 -13
- package/dist/token-search-field.js +1 -1
- package/dist/toolbar-control-group.d.ts +33 -7
- package/dist/toolbar-control-group.js +1 -1
- package/dist/toolbar-text.d.ts +31 -4
- package/dist/toolbar-text.js +3 -1
- package/dist/toolbar.d.ts +10 -7
- package/dist/toolbar.js +1 -1
- package/dist/value-table.d.ts +7 -3
- package/dist/value-table.js +3 -1
- package/dist/webawesome.d.ts +1 -0
- package/dist/wire-catalog.d.ts +57 -0
- package/dist/wire-catalog.js +302 -0
- package/dist/wire-catalog.js.map +1 -0
- package/dist/wire-nav-stack.d.ts +18 -0
- package/dist/wire-nav-stack.js +228 -0
- package/dist/wire-nav-stack.js.map +1 -0
- package/dist/wire-resizable-regions.d.ts +1 -1
- package/dist/wire-resizable-regions.js +1 -1
- package/dist/wire-sidebar.d.ts +48 -0
- package/dist/wire-sidebar.js +147 -0
- package/dist/wire-sidebar.js.map +1 -0
- package/dist/wire-tab-bars.d.ts +19 -2
- package/dist/wire-tab-bars.js +1 -1
- package/dist/wire-tab-scaffold.d.ts +11 -0
- package/dist/wire-tab-scaffold.js +21 -0
- package/dist/wire-tab-scaffold.js.map +1 -0
- package/dist/wire-token-search-fields.d.ts +104 -4
- package/dist/wire-token-search-fields.js +1 -1
- package/dist/workbench.d.ts +44 -0
- package/dist/workbench.js +106 -0
- package/dist/workbench.js.map +1 -0
- package/docs/accessibility.md +155 -20
- package/docs/app-layouts.md +61 -0
- package/docs/catalog.md +364 -0
- package/docs/collapsible-panel.md +142 -0
- package/docs/component-contract.md +258 -28
- package/docs/component-integration.md +63 -0
- package/docs/component-selection.md +219 -57
- package/docs/design/templates/empty-state/filtered-dark.svg +1 -0
- package/docs/design/templates/empty-state/filtered.svg +1 -0
- package/docs/design/templates/empty-state/with-action-dark.svg +1 -0
- package/docs/design/templates/empty-state/with-action.svg +1 -0
- package/docs/design/templates/empty-state-dark.svg +1 -0
- package/docs/design/templates/empty-state.svg +1 -0
- package/docs/design/templates/list/compact-dark.svg +1 -0
- package/docs/design/templates/list/compact.svg +1 -0
- package/docs/design/templates/list/stack-dark.svg +1 -0
- package/docs/design/templates/list/stack.svg +1 -0
- package/docs/design/templates/list-action-row/default-dark.svg +1 -0
- package/docs/design/templates/list-action-row/default.svg +1 -0
- package/docs/design/templates/list-action-row/selected-dark.svg +1 -0
- package/docs/design/templates/list-action-row/selected.svg +1 -0
- package/docs/design/templates/list-action-row-dark.svg +1 -0
- package/docs/design/templates/list-action-row.svg +1 -0
- package/docs/design/templates/list-dark.svg +1 -0
- package/docs/design/templates/list-header/action-dark.svg +1 -0
- package/docs/design/templates/list-header/action.svg +1 -0
- package/docs/design/templates/list-header/count-dark.svg +1 -0
- package/docs/design/templates/list-header/count.svg +1 -0
- package/docs/design/templates/list-header/inline-action-dark.svg +1 -0
- package/docs/design/templates/list-header/inline-action.svg +1 -0
- package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -0
- package/docs/design/templates/list-header/toggle-collapsed.svg +1 -0
- package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -0
- package/docs/design/templates/list-header/toggle-expanded.svg +1 -0
- package/docs/design/templates/list-header-dark.svg +1 -0
- package/docs/design/templates/list-header.svg +1 -0
- package/docs/design/templates/list-item/default-dark.svg +1 -0
- package/docs/design/templates/list-item/default.svg +1 -0
- package/docs/design/templates/list-item/multiline-dark.svg +1 -0
- package/docs/design/templates/list-item/multiline.svg +1 -0
- package/docs/design/templates/list-item/selected-dark.svg +1 -0
- package/docs/design/templates/list-item/selected.svg +1 -0
- package/docs/design/templates/list-item/trailing-dark.svg +1 -0
- package/docs/design/templates/list-item/trailing.svg +1 -0
- package/docs/design/templates/list-item-dark.svg +1 -0
- package/docs/design/templates/list-item.svg +1 -0
- package/docs/design/templates/list.svg +1 -0
- package/docs/design/templates/segmented-control/equal-dark.svg +1 -0
- package/docs/design/templates/segmented-control/equal.svg +1 -0
- package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -0
- package/docs/design/templates/segmented-control/pill-small.svg +1 -0
- package/docs/design/templates/segmented-control-dark.svg +1 -0
- package/docs/design/templates/segmented-control.svg +1 -0
- package/docs/design/templates/skeleton/avatar-dark.svg +1 -0
- package/docs/design/templates/skeleton/avatar.svg +1 -0
- package/docs/design/templates/skeleton/block-dark.svg +1 -0
- package/docs/design/templates/skeleton/block.svg +1 -0
- package/docs/design/templates/skeleton/lines-dark.svg +1 -0
- package/docs/design/templates/skeleton/lines.svg +1 -0
- package/docs/design/templates/skeleton-dark.svg +1 -0
- package/docs/design/templates/skeleton.svg +1 -0
- package/docs/design/templates/state-banner/danger-dark.svg +1 -0
- package/docs/design/templates/state-banner/danger.svg +1 -0
- package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
- package/docs/design/templates/state-banner/info-badge.svg +1 -0
- package/docs/design/templates/state-banner/info-dark.svg +1 -0
- package/docs/design/templates/state-banner/info.svg +1 -0
- package/docs/design/templates/state-banner/success-dark.svg +1 -0
- package/docs/design/templates/state-banner/success.svg +1 -0
- package/docs/design/templates/state-banner/warning-dark.svg +1 -0
- package/docs/design/templates/state-banner/warning.svg +1 -0
- package/docs/design/templates/state-banner-dark.svg +1 -0
- package/docs/design/templates/state-banner.svg +1 -0
- package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -0
- package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -0
- package/docs/design/templates/tab-bar-dark.svg +1 -0
- package/docs/design/templates/tab-bar.svg +1 -0
- package/docs/design/templates/token-search-field/empty-dark.svg +1 -0
- package/docs/design/templates/token-search-field/empty.svg +1 -0
- package/docs/design/templates/token-search-field/tokens-dark.svg +1 -0
- package/docs/design/templates/token-search-field/tokens.svg +1 -0
- package/docs/design/templates/token-search-field-dark.svg +1 -0
- package/docs/design/templates/token-search-field.svg +1 -0
- package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -0
- package/docs/design/templates/toolbar/title-and-actions.svg +1 -0
- package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -0
- package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -0
- package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -0
- package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/with-text.svg +1 -0
- package/docs/design/templates/toolbar-control-group-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group.svg +1 -0
- package/docs/design/templates/toolbar-dark.svg +1 -0
- package/docs/design/templates/toolbar-text/default-dark.svg +1 -0
- package/docs/design/templates/toolbar-text/default.svg +1 -0
- package/docs/design/templates/toolbar-text/large-dark.svg +1 -0
- package/docs/design/templates/toolbar-text/large.svg +1 -0
- package/docs/design/templates/toolbar-text/small-dark.svg +1 -0
- package/docs/design/templates/toolbar-text/small.svg +1 -0
- package/docs/design/templates/toolbar-text-dark.svg +1 -0
- package/docs/design/templates/toolbar-text.svg +1 -0
- package/docs/design/templates/toolbar.svg +1 -0
- package/docs/design/templates/value-table/details-dark.svg +1 -0
- package/docs/design/templates/value-table/details.svg +1 -0
- package/docs/design/templates/value-table-dark.svg +1 -0
- package/docs/design/templates/value-table.svg +1 -0
- package/docs/design/templates.md +128 -0
- package/docs/design-philosophy.md +33 -11
- package/docs/device-class.md +54 -0
- package/docs/examples/application-ui-profile.json +60 -0
- package/docs/examples/command-palette-adapter.tsx +68 -17
- package/docs/examples/component-catalog-extension-v2.json +80 -0
- package/docs/examples/component-catalog-extension.json +45 -0
- package/docs/layout.md +169 -38
- package/docs/nav-stack.md +77 -0
- package/docs/recipes.md +64 -16
- package/docs/split-view.md +55 -0
- package/docs/sunken-panel.md +53 -0
- package/docs/surface-scaffold.md +25 -0
- package/docs/tab-scaffold.md +52 -0
- package/docs/type-contracts.md +127 -0
- package/docs/ui-analyzer.md +118 -0
- package/docs/ui-doctor.md +91 -0
- package/docs/ui-evaluator.md +122 -0
- package/docs/ux-demo.md +29 -10
- package/docs/webawesome-theme.md +82 -8
- package/docs/workbench.md +123 -0
- package/doctor/cli.mjs +115 -0
- package/doctor/config.schema.json +68 -0
- package/doctor/eslint-diagnostics.d.mts +24 -0
- package/doctor/eslint-diagnostics.mjs +24 -0
- package/doctor/index.d.mts +116 -0
- package/doctor/index.mjs +1272 -0
- package/doctor/report.schema.json +118 -0
- package/evaluator/cli.mjs +89 -0
- package/evaluator/index.d.mts +90 -0
- package/evaluator/index.mjs +1138 -0
- package/evaluator/report.schema.json +152 -0
- package/llms.txt +260 -32
- package/package.json +205 -38
- package/traversal-exclusions.mjs +27 -0
- package/ux-demo/recipes/app-shell.tsx +223 -13
- package/ux-demo/recipes/collapsible-sidebar.tsx +230 -0
- package/ux-demo/recipes/compact-toolbar.tsx +116 -12
- package/ux-demo/recipes/composer-form.tsx +120 -19
- package/ux-demo/recipes/list-detail-dialog.tsx +205 -0
- package/ux-demo/recipes/list-workspace-states.tsx +176 -9
- package/ux-demo/recipes/loaders.ts +13 -4
- package/ux-demo/recipes/loading-inspector.tsx +191 -0
- package/ux-demo/recipes/mount-recipe.ts +31 -5
- package/ux-demo/recipes/navigation-sidebar.tsx +123 -11
- package/ux-demo/recipes/navigation-stack.tsx +121 -0
- package/ux-demo/recipes/recipes.css +125 -16
- package/ux-demo/recipes/types.ts +9 -1
- package/ux-demo/recipes/workspace-header.tsx +72 -3
- package/dist/browser/dialog-header.js +0 -5
- package/dist/browser/menu-action-row.js +0 -3
- package/dist/browser/menu-header.js +0 -5
- package/dist/browser/menu-item.js +0 -3
- package/dist/browser/page-header.js +0 -3
- package/dist/chunk-2PES33HS.js +0 -13
- package/dist/chunk-2PES33HS.js.map +0 -1
- package/dist/chunk-55DATV3A.js +0 -10
- package/dist/chunk-55DATV3A.js.map +0 -1
- package/dist/chunk-7BR3DO2A.js.map +0 -1
- package/dist/chunk-7LDCTU7D.js +0 -134
- package/dist/chunk-7LDCTU7D.js.map +0 -1
- package/dist/chunk-AQNKJRFH.js +0 -79
- package/dist/chunk-AQNKJRFH.js.map +0 -1
- package/dist/chunk-CTQKI2XL.js +0 -28
- package/dist/chunk-CTQKI2XL.js.map +0 -1
- package/dist/chunk-DAFFDO33.js +0 -14
- package/dist/chunk-DAFFDO33.js.map +0 -1
- package/dist/chunk-EGHL5S4P.js +0 -33
- package/dist/chunk-EGHL5S4P.js.map +0 -1
- package/dist/chunk-GY5WH7TO.js +0 -10
- package/dist/chunk-GY5WH7TO.js.map +0 -1
- package/dist/chunk-H5AGGVU5.js +0 -75
- package/dist/chunk-H5AGGVU5.js.map +0 -1
- package/dist/chunk-K3G72I6D.js +0 -24
- package/dist/chunk-K3G72I6D.js.map +0 -1
- package/dist/chunk-M5JRI6MN.js +0 -27
- package/dist/chunk-M5JRI6MN.js.map +0 -1
- package/dist/chunk-MBR3TYNL.js +0 -14
- package/dist/chunk-MBR3TYNL.js.map +0 -1
- package/dist/chunk-MFKMHK5W.js +0 -10
- package/dist/chunk-MFKMHK5W.js.map +0 -1
- package/dist/chunk-MQIZAD4A.js.map +0 -1
- package/dist/chunk-NPPD2A6O.js +0 -40
- package/dist/chunk-NPPD2A6O.js.map +0 -1
- package/dist/chunk-R6JHHBKQ.js +0 -19
- package/dist/chunk-R6JHHBKQ.js.map +0 -1
- package/dist/chunk-S3TPM2LP.js +0 -23
- package/dist/chunk-S3TPM2LP.js.map +0 -1
- package/dist/chunk-TRNBHPNW.js.map +0 -1
- package/dist/chunk-VHW5YNIB.js +0 -17
- package/dist/chunk-VHW5YNIB.js.map +0 -1
- package/dist/chunk-WVPYVDXY.js +0 -15
- package/dist/chunk-WVPYVDXY.js.map +0 -1
- package/dist/chunk-XZXRLY5Q.js +0 -33
- package/dist/chunk-XZXRLY5Q.js.map +0 -1
- package/dist/dialog-header.d.ts +0 -15
- package/dist/dialog-header.js +0 -5
- package/dist/dialog-header.js.map +0 -1
- package/dist/menu-action-row.js +0 -4
- package/dist/menu-action-row.js.map +0 -1
- package/dist/menu-header.d.ts +0 -41
- package/dist/menu-header.js +0 -6
- package/dist/menu-header.js.map +0 -1
- package/dist/menu-item.d.ts +0 -31
- package/dist/menu-item.js +0 -4
- package/dist/menu-item.js.map +0 -1
- package/dist/page-header.d.ts +0 -9
- package/dist/page-header.js +0 -3
- package/dist/page-header.js.map +0 -1
- package/dist/styles/dialog-header.css +0 -87
- package/dist/styles/menu-action-row.css +0 -160
- package/dist/styles/menu-header.css +0 -143
- package/dist/styles/menu-item.css +0 -123
- package/dist/styles/page-header.css +0 -33
- package/ux-demo/recipes/master-detail-dialog.tsx +0 -45
package/dist/text.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"text.js"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
2
3
|
|
|
3
4
|
interface TokenSearchToken {
|
|
4
5
|
value: string;
|
|
@@ -6,7 +7,15 @@ interface TokenSearchToken {
|
|
|
6
7
|
offset?: number;
|
|
7
8
|
accessibleLabel?: string;
|
|
8
9
|
}
|
|
9
|
-
|
|
10
|
+
type TokenSearchEditorAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
11
|
+
'data-component'?: never;
|
|
12
|
+
'data-key'?: never;
|
|
13
|
+
'data-morph-skip'?: never;
|
|
14
|
+
'data-token-search-editor'?: never;
|
|
15
|
+
'data-token-count'?: never;
|
|
16
|
+
'data-placeholder'?: never;
|
|
17
|
+
}>;
|
|
18
|
+
interface TokenSearchFieldBaseProps {
|
|
10
19
|
id: string;
|
|
11
20
|
label: string;
|
|
12
21
|
query?: string;
|
|
@@ -15,29 +24,37 @@ interface TokenSearchFieldProps {
|
|
|
15
24
|
tokenPlaceholder?: string;
|
|
16
25
|
disabled?: boolean;
|
|
17
26
|
autofocus?: boolean;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
/** Keep an empty collapsible field open while the application owns focus. */
|
|
21
|
-
expanded?: boolean;
|
|
22
|
-
expandAction?: string;
|
|
23
|
-
expandLabel?: string;
|
|
24
|
-
leading?: SafeHtml;
|
|
25
|
-
trailing?: SafeHtml;
|
|
27
|
+
leading?: KerfUiContent;
|
|
28
|
+
trailing?: KerfUiContent;
|
|
26
29
|
editAction?: string;
|
|
27
30
|
removeAction?: string;
|
|
28
31
|
clearAction?: string;
|
|
29
32
|
clearLabel?: string;
|
|
30
33
|
className?: string;
|
|
31
|
-
editorAttributes?:
|
|
34
|
+
editorAttributes?: TokenSearchEditorAttributes;
|
|
32
35
|
}
|
|
36
|
+
type TokenSearchCollapsibleProps = {
|
|
37
|
+
/** Allow an empty field to render as one iconic action. */
|
|
38
|
+
collapsible: true;
|
|
39
|
+
/** Keep an empty collapsible field open while the application owns focus. */
|
|
40
|
+
expanded?: boolean;
|
|
41
|
+
expandAction?: string;
|
|
42
|
+
expandLabel?: string;
|
|
43
|
+
} | {
|
|
44
|
+
collapsible?: false;
|
|
45
|
+
expanded?: never;
|
|
46
|
+
expandAction?: never;
|
|
47
|
+
expandLabel?: never;
|
|
48
|
+
};
|
|
49
|
+
type TokenSearchFieldProps = TokenSearchFieldBaseProps & TokenSearchCollapsibleProps;
|
|
33
50
|
interface TokenSearchFieldValue {
|
|
34
51
|
query: string;
|
|
35
52
|
tokens: TokenSearchToken[];
|
|
36
53
|
}
|
|
37
|
-
declare function TokenSearchField({ id, label, query, tokens, placeholder, tokenPlaceholder, disabled, autofocus, collapsible, expanded, expandAction, expandLabel, leading, trailing, editAction, removeAction, clearAction, clearLabel, className, editorAttributes, }: TokenSearchFieldProps): SafeHtml;
|
|
54
|
+
declare function TokenSearchField({ id, label, query, tokens, placeholder, tokenPlaceholder, disabled, autofocus, collapsible, expanded, expandAction, expandLabel, leading, trailing, editAction, removeAction, clearAction, clearLabel, className, editorAttributes, }: TokenSearchFieldProps): kerfjs.SafeHtml;
|
|
38
55
|
/** Read editable text and ordered token offsets from a rendered TokenSearchField editor. */
|
|
39
56
|
declare function readTokenSearchField(editor: HTMLElement, knownTokens?: readonly TokenSearchToken[]): TokenSearchFieldValue;
|
|
40
57
|
/** Focus an editor and place its caret at a text offset, skipping atomic token chips. */
|
|
41
58
|
declare function placeTokenSearchCaret(editor: HTMLElement, offset?: number): void;
|
|
42
59
|
|
|
43
|
-
export { TokenSearchField, type TokenSearchFieldProps, type TokenSearchFieldValue, type TokenSearchToken, placeTokenSearchCaret, readTokenSearchField };
|
|
60
|
+
export { type TokenSearchEditorAttributes, TokenSearchField, type TokenSearchFieldProps, type TokenSearchFieldValue, type TokenSearchToken, placeTokenSearchCaret, readTokenSearchField };
|
|
@@ -1,15 +1,41 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
2
3
|
|
|
4
|
+
type ToolbarControlGroupAppearance = 'contained' | 'borderless';
|
|
5
|
+
type ToolbarControlGroupTone = 'default' | 'dark';
|
|
6
|
+
type ToolbarControlGroupButtonAppearance = 'plain' | 'push';
|
|
7
|
+
type ToolbarControlGroupShape = 'pill' | 'rounded';
|
|
8
|
+
type ToolbarControlGroupSize = 'default' | 'compact';
|
|
9
|
+
type ToolbarControlGroupDensity = 'comfortable' | 'tight';
|
|
10
|
+
type ToolbarControlGroupContent = 'icon' | 'text' | 'mixed' | 'avatar';
|
|
11
|
+
type ToolbarControlGroupSelectedChrome = 'raised' | 'filled' | 'outline';
|
|
12
|
+
type ToolbarControlGroupSelectedTone = 'brand' | 'neutral' | 'pop';
|
|
3
13
|
interface ToolbarControlGroupProps {
|
|
4
|
-
children:
|
|
14
|
+
children: KerfUiContent;
|
|
5
15
|
label?: string;
|
|
6
16
|
className?: string;
|
|
7
17
|
expanded?: boolean;
|
|
8
18
|
single?: boolean;
|
|
9
|
-
appearance?:
|
|
10
|
-
tone?:
|
|
11
|
-
buttonAppearance?:
|
|
19
|
+
appearance?: ToolbarControlGroupAppearance;
|
|
20
|
+
tone?: ToolbarControlGroupTone;
|
|
21
|
+
buttonAppearance?: ToolbarControlGroupButtonAppearance;
|
|
22
|
+
/** Corner shape: fully round `pill` (default) or a softer `rounded` rectangle. */
|
|
23
|
+
shape?: ToolbarControlGroupShape;
|
|
24
|
+
size?: ToolbarControlGroupSize;
|
|
25
|
+
density?: ToolbarControlGroupDensity;
|
|
26
|
+
content?: ToolbarControlGroupContent;
|
|
27
|
+
selectedChrome?: ToolbarControlGroupSelectedChrome;
|
|
28
|
+
selectedTone?: ToolbarControlGroupSelectedTone;
|
|
29
|
+
/** Size a nested Web Awesome dropdown trigger as part of this group. */
|
|
30
|
+
nestedDropdown?: boolean;
|
|
31
|
+
/** Add contrast behind photo-backed avatar content. */
|
|
32
|
+
scrim?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Avatar image URL. A single-control group paints it on the group; a
|
|
35
|
+
* multi-control group paints it only on the pressed selection highlight.
|
|
36
|
+
*/
|
|
37
|
+
avatarImage?: string;
|
|
12
38
|
}
|
|
13
|
-
declare function ToolbarControlGroup({ children, label, className, expanded, single, appearance, tone, buttonAppearance }: ToolbarControlGroupProps): SafeHtml;
|
|
39
|
+
declare function ToolbarControlGroup({ children, label, className, expanded, single, appearance, tone, buttonAppearance, shape, size, density, content, selectedChrome, selectedTone, nestedDropdown, scrim, avatarImage, }: ToolbarControlGroupProps): kerfjs.SafeHtml;
|
|
14
40
|
|
|
15
|
-
export { ToolbarControlGroup, type ToolbarControlGroupProps };
|
|
41
|
+
export { ToolbarControlGroup, type ToolbarControlGroupAppearance, type ToolbarControlGroupButtonAppearance, type ToolbarControlGroupContent, type ToolbarControlGroupDensity, type ToolbarControlGroupProps, type ToolbarControlGroupSelectedChrome, type ToolbarControlGroupSelectedTone, type ToolbarControlGroupShape, type ToolbarControlGroupSize, type ToolbarControlGroupTone };
|
package/dist/toolbar-text.d.ts
CHANGED
|
@@ -1,11 +1,38 @@
|
|
|
1
1
|
import * as kerfjs from 'kerfjs';
|
|
2
2
|
|
|
3
|
-
type ToolbarTextSize = 'large' | 'default' | 'small';
|
|
4
|
-
|
|
3
|
+
type ToolbarTextSize = 'xlarge' | 'large' | 'default' | 'small';
|
|
4
|
+
/** ARIA heading level for a title exposed as a heading landmark. */
|
|
5
|
+
type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
|
|
6
|
+
interface ToolbarTextBaseProps {
|
|
5
7
|
text: string;
|
|
6
8
|
size?: ToolbarTextSize;
|
|
7
9
|
className?: string;
|
|
10
|
+
/** Optional id, e.g. so a dialog can reference the title via aria-labelledby. */
|
|
11
|
+
id?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Expose heading semantics (`role="heading"` + `aria-level`) so the text acts as
|
|
14
|
+
* a heading landmark — e.g. a page's primary title. Omit to keep the plain span
|
|
15
|
+
* (the default), which suits a dialog title referenced via `aria-labelledby`.
|
|
16
|
+
*/
|
|
17
|
+
headingLevel?: HeadingLevel;
|
|
18
|
+
/** Render the text as an unanimated loading skeleton instead of its value. */
|
|
19
|
+
placeholder?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Show a trailing ellipsis (…) where the text is truncated — on the single line
|
|
22
|
+
* (default), or at the `maxLines` boundary when wrapping. Set false to hard-clip
|
|
23
|
+
* instead. Default true.
|
|
24
|
+
*/
|
|
25
|
+
ellipsis?: boolean;
|
|
8
26
|
}
|
|
9
|
-
|
|
27
|
+
type ToolbarTextWrappingProps = {
|
|
28
|
+
/** Wrap onto multiple lines; combine with `maxLines` to cap them. */
|
|
29
|
+
wrap: true;
|
|
30
|
+
maxLines?: number | null;
|
|
31
|
+
} | {
|
|
32
|
+
wrap?: false;
|
|
33
|
+
maxLines?: never;
|
|
34
|
+
};
|
|
35
|
+
type ToolbarTextProps = ToolbarTextBaseProps & ToolbarTextWrappingProps;
|
|
36
|
+
declare function ToolbarText({ text, size, className, id, headingLevel, placeholder, wrap, ellipsis, maxLines, }: ToolbarTextProps): kerfjs.SafeHtml;
|
|
10
37
|
|
|
11
|
-
export { ToolbarText, type ToolbarTextProps, type ToolbarTextSize };
|
|
38
|
+
export { type HeadingLevel, ToolbarText, type ToolbarTextProps, type ToolbarTextSize };
|
package/dist/toolbar-text.js
CHANGED
package/dist/toolbar.d.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { D as DividerSides } from './divider-sides-BzB6rphT.js';
|
|
3
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
2
4
|
|
|
3
5
|
interface ToolbarProps {
|
|
4
|
-
leading?:
|
|
5
|
-
center?:
|
|
6
|
-
trailing?:
|
|
6
|
+
leading?: KerfUiContent;
|
|
7
|
+
center?: KerfUiContent;
|
|
8
|
+
trailing?: KerfUiContent;
|
|
7
9
|
label?: string;
|
|
8
|
-
divider
|
|
10
|
+
/** Physical divider edges in canonical top/right/bottom/left order. Defaults to bottom. */
|
|
11
|
+
dividerSides?: DividerSides;
|
|
9
12
|
className?: string;
|
|
10
13
|
}
|
|
11
|
-
declare function Toolbar({ leading, center, trailing, label,
|
|
14
|
+
declare function Toolbar({ leading, center, trailing, label, dividerSides, className, }: ToolbarProps): kerfjs.SafeHtml;
|
|
12
15
|
|
|
13
|
-
export { Toolbar, type ToolbarProps };
|
|
16
|
+
export { DividerSides, Toolbar, type ToolbarProps };
|
package/dist/toolbar.js
CHANGED
package/dist/value-table.d.ts
CHANGED
|
@@ -1,18 +1,22 @@
|
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
1
2
|
import { SafeHtml } from 'kerfjs';
|
|
3
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
2
4
|
|
|
3
5
|
interface ValueTableRowProps {
|
|
4
6
|
label: string | SafeHtml;
|
|
5
7
|
value: string | SafeHtml;
|
|
6
8
|
icon?: SafeHtml;
|
|
7
9
|
className?: string;
|
|
10
|
+
/** Render the value as an unanimated loading skeleton, keeping the field label. */
|
|
11
|
+
placeholder?: boolean;
|
|
8
12
|
}
|
|
9
|
-
declare function ValueTableRow({ label, value, icon, className }: ValueTableRowProps): SafeHtml;
|
|
13
|
+
declare function ValueTableRow({ label, value, icon, className, placeholder, }: ValueTableRowProps): SafeHtml;
|
|
10
14
|
|
|
11
15
|
interface ValueTableProps {
|
|
12
16
|
label: string;
|
|
13
17
|
className?: string;
|
|
14
|
-
children:
|
|
18
|
+
children: KerfUiContent;
|
|
15
19
|
}
|
|
16
|
-
declare function ValueTable({ label, className, children }: ValueTableProps): SafeHtml;
|
|
20
|
+
declare function ValueTable({ label, className, children, }: ValueTableProps): kerfjs.SafeHtml;
|
|
17
21
|
|
|
18
22
|
export { ValueTable, type ValueTableProps, ValueTableRow, type ValueTableRowProps };
|
package/dist/value-table.js
CHANGED
package/dist/webawesome.d.ts
CHANGED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
interface WireCatalogOptions {
|
|
2
|
+
/** Invoked with the entry id when a sidebar item or a related-entry option is chosen. */
|
|
3
|
+
onSelect: (id: string) => void;
|
|
4
|
+
/** Invoked when the sidebar collapse/expand control is activated. */
|
|
5
|
+
onToggleSidebar?: () => void;
|
|
6
|
+
/** Invoked when the theme toggle is activated. */
|
|
7
|
+
onToggleTheme?: () => void;
|
|
8
|
+
/** Invoked when the secondary (ecosystem) group's disclosure toggle is activated. */
|
|
9
|
+
onToggleSecondary?: () => void;
|
|
10
|
+
/** When set, `?<urlParam>=<id>` is written on select via `history.replaceState`. */
|
|
11
|
+
urlParam?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Reveal the chosen sidebar row after selection. `true` uses desktop-safe
|
|
14
|
+
* defaults; pass options to customize scroll alignment or the media guard.
|
|
15
|
+
*/
|
|
16
|
+
revealSelection?: boolean | CatalogRevealOptions;
|
|
17
|
+
selectAction?: string;
|
|
18
|
+
toggleSidebarAction?: string;
|
|
19
|
+
toggleThemeAction?: string;
|
|
20
|
+
toggleSecondaryAction?: string;
|
|
21
|
+
}
|
|
22
|
+
interface CatalogRevealOptions {
|
|
23
|
+
/** Scroll alignment within the sidebar. Default `'nearest'`. */
|
|
24
|
+
block?: ScrollLogicalPosition;
|
|
25
|
+
/** Cross-axis alignment. Default `'nearest'`. */
|
|
26
|
+
inline?: ScrollLogicalPosition;
|
|
27
|
+
/** Scroll behavior. Default `'auto'`. */
|
|
28
|
+
behavior?: ScrollBehavior;
|
|
29
|
+
/**
|
|
30
|
+
* Only reveal when this media query matches. Defaults to the Catalog's
|
|
31
|
+
* desktop layout; pass `false` to reveal at every viewport size.
|
|
32
|
+
*/
|
|
33
|
+
media?: string | false;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Reveal one Catalog sidebar entry after the controlled render settles without
|
|
37
|
+
* moving focus. Returns a cancellation function for rapid selection changes.
|
|
38
|
+
*/
|
|
39
|
+
declare function revealCatalogEntry(root: HTMLElement, id: string, { block, inline, behavior, media, }?: CatalogRevealOptions): () => void;
|
|
40
|
+
/**
|
|
41
|
+
* Keep a Catalog's opt-in geometry overlay synchronized with its preview.
|
|
42
|
+
* Specimens receive computed border highlights (or a dashed bound when they
|
|
43
|
+
* have no border and are transparent), while positive computed margins use
|
|
44
|
+
* devtools-style orange bands. CSS/stylesheet-only changes are observed too.
|
|
45
|
+
* Returns a disposer.
|
|
46
|
+
*/
|
|
47
|
+
declare function wireCatalogGeometryOverlay(root: HTMLElement): () => void;
|
|
48
|
+
/**
|
|
49
|
+
* Wire a {@link Catalog}'s interactions with one delegated listener set: sidebar
|
|
50
|
+
* item selection (and the related-entry popup menu), the sidebar collapse toggle, and
|
|
51
|
+
* the theme toggle. The app owns the `active`/`collapsed`/`theme` signals and updates
|
|
52
|
+
* them in the callbacks; optionally mirror the active id into the URL via `urlParam`.
|
|
53
|
+
* Returns a disposer.
|
|
54
|
+
*/
|
|
55
|
+
declare function wireCatalog(root: HTMLElement, { onSelect, onToggleSidebar, onToggleTheme, onToggleSecondary, urlParam, revealSelection, selectAction, toggleSidebarAction, toggleThemeAction, toggleSecondaryAction, }: WireCatalogOptions): () => void;
|
|
56
|
+
|
|
57
|
+
export { type CatalogRevealOptions, type WireCatalogOptions, revealCatalogEntry, wireCatalog, wireCatalogGeometryOverlay };
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { delegate } from 'kerfjs';
|
|
2
|
+
|
|
3
|
+
// src/wire-catalog.ts
|
|
4
|
+
var catalogDesktopMedia = "(min-width: 52.01rem)";
|
|
5
|
+
function revealCatalogEntry(root, id, {
|
|
6
|
+
block = "nearest",
|
|
7
|
+
inline = "nearest",
|
|
8
|
+
behavior = "auto",
|
|
9
|
+
media = catalogDesktopMedia
|
|
10
|
+
} = {}) {
|
|
11
|
+
const view = root.ownerDocument.defaultView;
|
|
12
|
+
if (!view || media && !view.matchMedia(media).matches) return () => {
|
|
13
|
+
};
|
|
14
|
+
const frame = view.requestAnimationFrame(() => {
|
|
15
|
+
for (const item of root.querySelectorAll("[data-item-id]")) {
|
|
16
|
+
if (item.dataset.itemId !== id) continue;
|
|
17
|
+
item.scrollIntoView({ block, inline, behavior });
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
return () => view.cancelAnimationFrame(frame);
|
|
22
|
+
}
|
|
23
|
+
function pixels(value) {
|
|
24
|
+
const number = Number.parseFloat(value);
|
|
25
|
+
if (!Number.isFinite(number)) return 0;
|
|
26
|
+
return value.trim().endsWith("rem") ? number * 16 : number;
|
|
27
|
+
}
|
|
28
|
+
function isTransparent(color) {
|
|
29
|
+
const normalized = color.replace(/\s+/g, "");
|
|
30
|
+
return normalized === "transparent" || /(?:,|\/)0(?:\.0+)?\)$/.test(normalized);
|
|
31
|
+
}
|
|
32
|
+
function geometrySpecimens(canvas) {
|
|
33
|
+
const result = [];
|
|
34
|
+
for (const example of canvas.querySelectorAll(
|
|
35
|
+
"[data-catalog-example]"
|
|
36
|
+
)) {
|
|
37
|
+
if (example.closest("[data-catalog-geometry-overlay-skip]")) continue;
|
|
38
|
+
for (const child of example.children) {
|
|
39
|
+
if (child.matches("[data-catalog-geometry-overlay]") || child.matches("[data-catalog-example-label]") || child.matches("[data-catalog-example-note]"))
|
|
40
|
+
continue;
|
|
41
|
+
result.push(child);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
for (const element of canvas.querySelectorAll(
|
|
45
|
+
"[data-component]"
|
|
46
|
+
)) {
|
|
47
|
+
if (element.closest("[data-catalog-geometry-overlay]") || element.closest("[data-catalog-geometry-overlay-skip]") || element.closest(".kui-catalog-example"))
|
|
48
|
+
continue;
|
|
49
|
+
const parent = element.parentElement?.closest("[data-component]");
|
|
50
|
+
if (parent && canvas.contains(parent)) continue;
|
|
51
|
+
result.push(element);
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
function geometryBox(document, className, left, top, width, height) {
|
|
56
|
+
const element = document.createElement("div");
|
|
57
|
+
element.className = className;
|
|
58
|
+
element.style.transform = `translate(${left}px, ${top}px)`;
|
|
59
|
+
element.style.width = `${Math.max(0, width)}px`;
|
|
60
|
+
element.style.height = `${Math.max(0, height)}px`;
|
|
61
|
+
return element;
|
|
62
|
+
}
|
|
63
|
+
function effectiveBorderWidth(width, style) {
|
|
64
|
+
return style === "none" || style === "hidden" ? 0 : pixels(width);
|
|
65
|
+
}
|
|
66
|
+
function wireCatalogGeometryOverlay(root) {
|
|
67
|
+
const catalog = root.matches('[data-component="catalog"]') ? root : root.querySelector('[data-component="catalog"]');
|
|
68
|
+
const canvas = catalog?.querySelector(".kui-catalog__canvas");
|
|
69
|
+
const layer = catalog?.querySelector(
|
|
70
|
+
"[data-catalog-geometry-overlay]"
|
|
71
|
+
);
|
|
72
|
+
const view = root.ownerDocument.defaultView;
|
|
73
|
+
if (!catalog || !canvas || !layer || !view) return () => {
|
|
74
|
+
};
|
|
75
|
+
let frame = 0;
|
|
76
|
+
const render = () => {
|
|
77
|
+
frame = 0;
|
|
78
|
+
layer.replaceChildren();
|
|
79
|
+
if (catalog.dataset.geometryOverlay !== "true") {
|
|
80
|
+
syncObservedSpecimens([]);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const base = canvas.getBoundingClientRect();
|
|
84
|
+
const specimens = geometrySpecimens(canvas);
|
|
85
|
+
syncObservedSpecimens(specimens);
|
|
86
|
+
for (const [specimenIndex, element] of specimens.entries()) {
|
|
87
|
+
const rect = element.getBoundingClientRect();
|
|
88
|
+
const style = view.getComputedStyle(element);
|
|
89
|
+
const align = pixels(
|
|
90
|
+
style.getPropertyValue("--kui-catalog-example-align")
|
|
91
|
+
);
|
|
92
|
+
const top = pixels(style.marginTop);
|
|
93
|
+
const right = Math.max(
|
|
94
|
+
0,
|
|
95
|
+
pixels(style.marginRight) - (style.direction === "rtl" ? align : 0)
|
|
96
|
+
);
|
|
97
|
+
const bottom = pixels(style.marginBottom);
|
|
98
|
+
const left = Math.max(
|
|
99
|
+
0,
|
|
100
|
+
pixels(style.marginLeft) - (style.direction === "rtl" ? 0 : align)
|
|
101
|
+
);
|
|
102
|
+
const x = rect.left - base.left + canvas.scrollLeft;
|
|
103
|
+
const y = rect.top - base.top + canvas.scrollTop;
|
|
104
|
+
const borderWidths = [
|
|
105
|
+
effectiveBorderWidth(style.borderTopWidth, style.borderTopStyle),
|
|
106
|
+
effectiveBorderWidth(style.borderRightWidth, style.borderRightStyle),
|
|
107
|
+
effectiveBorderWidth(style.borderBottomWidth, style.borderBottomStyle),
|
|
108
|
+
effectiveBorderWidth(style.borderLeftWidth, style.borderLeftStyle)
|
|
109
|
+
];
|
|
110
|
+
if (borderWidths.some((width) => width > 0)) {
|
|
111
|
+
const border = geometryBox(
|
|
112
|
+
root.ownerDocument,
|
|
113
|
+
"kui-catalog__geometry-border",
|
|
114
|
+
x,
|
|
115
|
+
y,
|
|
116
|
+
rect.width,
|
|
117
|
+
rect.height
|
|
118
|
+
);
|
|
119
|
+
border.dataset.catalogGeometrySpecimen = String(specimenIndex);
|
|
120
|
+
border.style.borderTopWidth = `${borderWidths[0]}px`;
|
|
121
|
+
border.style.borderRightWidth = `${borderWidths[1]}px`;
|
|
122
|
+
border.style.borderBottomWidth = `${borderWidths[2]}px`;
|
|
123
|
+
border.style.borderLeftWidth = `${borderWidths[3]}px`;
|
|
124
|
+
border.style.borderRadius = style.borderRadius;
|
|
125
|
+
layer.append(border);
|
|
126
|
+
} else if (isTransparent(style.backgroundColor)) {
|
|
127
|
+
const bound = geometryBox(
|
|
128
|
+
root.ownerDocument,
|
|
129
|
+
"kui-catalog__geometry-bound",
|
|
130
|
+
x,
|
|
131
|
+
y,
|
|
132
|
+
rect.width,
|
|
133
|
+
rect.height
|
|
134
|
+
);
|
|
135
|
+
bound.dataset.catalogGeometrySpecimen = String(specimenIndex);
|
|
136
|
+
layer.append(bound);
|
|
137
|
+
}
|
|
138
|
+
const margins = [
|
|
139
|
+
["top", top, x - left, y - top, rect.width + left + right, top],
|
|
140
|
+
[
|
|
141
|
+
"bottom",
|
|
142
|
+
bottom,
|
|
143
|
+
x - left,
|
|
144
|
+
y + rect.height,
|
|
145
|
+
rect.width + left + right,
|
|
146
|
+
bottom
|
|
147
|
+
],
|
|
148
|
+
["left", left, x - left, y, left, rect.height],
|
|
149
|
+
["right", right, x + rect.width, y, right, rect.height]
|
|
150
|
+
];
|
|
151
|
+
for (const [side, size, marginX, marginY, width, height] of margins) {
|
|
152
|
+
if (size <= 0) continue;
|
|
153
|
+
const margin = geometryBox(
|
|
154
|
+
root.ownerDocument,
|
|
155
|
+
"kui-catalog__geometry-margin",
|
|
156
|
+
marginX,
|
|
157
|
+
marginY,
|
|
158
|
+
width,
|
|
159
|
+
height
|
|
160
|
+
);
|
|
161
|
+
margin.dataset.catalogGeometrySpecimen = String(specimenIndex);
|
|
162
|
+
margin.dataset.catalogGeometrySide = side;
|
|
163
|
+
layer.append(margin);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
const schedule = () => {
|
|
168
|
+
if (!frame) frame = view.requestAnimationFrame(render);
|
|
169
|
+
};
|
|
170
|
+
const resizeObserver = new view.ResizeObserver(schedule);
|
|
171
|
+
resizeObserver.observe(canvas);
|
|
172
|
+
const observedSpecimens = /* @__PURE__ */ new Set();
|
|
173
|
+
const syncObservedSpecimens = (specimens) => {
|
|
174
|
+
const next = new Set(specimens);
|
|
175
|
+
for (const specimen of observedSpecimens) {
|
|
176
|
+
if (next.has(specimen)) continue;
|
|
177
|
+
resizeObserver.unobserve(specimen);
|
|
178
|
+
observedSpecimens.delete(specimen);
|
|
179
|
+
}
|
|
180
|
+
for (const specimen of next) {
|
|
181
|
+
if (observedSpecimens.has(specimen)) continue;
|
|
182
|
+
resizeObserver.observe(specimen);
|
|
183
|
+
observedSpecimens.add(specimen);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
const mutationObserver = new view.MutationObserver((records) => {
|
|
187
|
+
if (records.some(
|
|
188
|
+
({ target }) => target !== layer && !layer.contains(target)
|
|
189
|
+
))
|
|
190
|
+
schedule();
|
|
191
|
+
});
|
|
192
|
+
mutationObserver.observe(catalog, {
|
|
193
|
+
attributes: true,
|
|
194
|
+
childList: true,
|
|
195
|
+
subtree: true
|
|
196
|
+
});
|
|
197
|
+
mutationObserver.observe(root.ownerDocument.documentElement, {
|
|
198
|
+
attributes: true
|
|
199
|
+
});
|
|
200
|
+
const documentHead = root.ownerDocument.head;
|
|
201
|
+
if (documentHead)
|
|
202
|
+
mutationObserver.observe(documentHead, {
|
|
203
|
+
attributes: true,
|
|
204
|
+
characterData: true,
|
|
205
|
+
childList: true,
|
|
206
|
+
subtree: true
|
|
207
|
+
});
|
|
208
|
+
const stylesheetLoaded = () => schedule();
|
|
209
|
+
documentHead?.addEventListener("load", stylesheetLoaded, true);
|
|
210
|
+
view.addEventListener("resize", schedule);
|
|
211
|
+
render();
|
|
212
|
+
return () => {
|
|
213
|
+
if (frame) view.cancelAnimationFrame(frame);
|
|
214
|
+
resizeObserver.disconnect();
|
|
215
|
+
mutationObserver.disconnect();
|
|
216
|
+
documentHead?.removeEventListener("load", stylesheetLoaded, true);
|
|
217
|
+
view.removeEventListener("resize", schedule);
|
|
218
|
+
layer.replaceChildren();
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
function wireCatalog(root, {
|
|
222
|
+
onSelect,
|
|
223
|
+
onToggleSidebar,
|
|
224
|
+
onToggleTheme,
|
|
225
|
+
onToggleSecondary,
|
|
226
|
+
urlParam,
|
|
227
|
+
revealSelection,
|
|
228
|
+
selectAction = "catalog-select",
|
|
229
|
+
toggleSidebarAction = "catalog-toggle-sidebar",
|
|
230
|
+
toggleThemeAction = "catalog-toggle-theme",
|
|
231
|
+
toggleSecondaryAction = "catalog-toggle-secondary"
|
|
232
|
+
}) {
|
|
233
|
+
let cancelReveal;
|
|
234
|
+
const select = (id) => {
|
|
235
|
+
onSelect(id);
|
|
236
|
+
const view = root.ownerDocument.defaultView;
|
|
237
|
+
if (urlParam && view) {
|
|
238
|
+
const url = new URL(view.location.href);
|
|
239
|
+
url.searchParams.set(urlParam, id);
|
|
240
|
+
view.history.replaceState(null, "", url);
|
|
241
|
+
}
|
|
242
|
+
if (revealSelection) {
|
|
243
|
+
cancelReveal?.();
|
|
244
|
+
cancelReveal = revealCatalogEntry(
|
|
245
|
+
root,
|
|
246
|
+
id,
|
|
247
|
+
revealSelection === true ? void 0 : revealSelection
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
const disposers = [
|
|
252
|
+
// Sidebar items AND the footer's related-entry popup-menu items both carry
|
|
253
|
+
// `data-action={selectAction}` + `data-item-id`, so one delegated click covers both.
|
|
254
|
+
delegate(
|
|
255
|
+
root,
|
|
256
|
+
"click",
|
|
257
|
+
`[data-action="${selectAction}"]`,
|
|
258
|
+
(_event, element) => {
|
|
259
|
+
const id = element.dataset.itemId;
|
|
260
|
+
if (id) select(id);
|
|
261
|
+
}
|
|
262
|
+
)
|
|
263
|
+
];
|
|
264
|
+
if (onToggleSidebar) {
|
|
265
|
+
disposers.push(
|
|
266
|
+
delegate(
|
|
267
|
+
root,
|
|
268
|
+
"click",
|
|
269
|
+
`[data-action="${toggleSidebarAction}"]`,
|
|
270
|
+
() => onToggleSidebar()
|
|
271
|
+
)
|
|
272
|
+
);
|
|
273
|
+
}
|
|
274
|
+
if (onToggleTheme) {
|
|
275
|
+
disposers.push(
|
|
276
|
+
delegate(
|
|
277
|
+
root,
|
|
278
|
+
"click",
|
|
279
|
+
`[data-action="${toggleThemeAction}"]`,
|
|
280
|
+
() => onToggleTheme()
|
|
281
|
+
)
|
|
282
|
+
);
|
|
283
|
+
}
|
|
284
|
+
if (onToggleSecondary) {
|
|
285
|
+
disposers.push(
|
|
286
|
+
delegate(
|
|
287
|
+
root,
|
|
288
|
+
"click",
|
|
289
|
+
`[data-action="${toggleSecondaryAction}"]`,
|
|
290
|
+
() => onToggleSecondary()
|
|
291
|
+
)
|
|
292
|
+
);
|
|
293
|
+
}
|
|
294
|
+
return () => {
|
|
295
|
+
cancelReveal?.();
|
|
296
|
+
for (const dispose of disposers.splice(0)) dispose();
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export { revealCatalogEntry, wireCatalog, wireCatalogGeometryOverlay };
|
|
301
|
+
|
|
302
|
+
//# sourceMappingURL=wire-catalog.js.map
|