@kerfjs/ui 4.5.0-beta.1 → 5.0.0-beta.100
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 +461 -116
- package/ai/application-ui-diagnostic-ids-v1.json +23 -1
- package/ai/application-ui-profile-sync.cjs +21 -2
- package/ai/application-ui-profile.d.ts +4 -0
- package/ai/application-ui-profile.defaults.json +63 -8
- package/ai/application-ui-profile.mjs +28 -1
- package/ai/application-ui-profile.schema.json +10 -0
- package/ai/catalog-authoring.json +13 -4
- package/ai/catalog-authoring.schema.json +52 -8
- package/ai/compile-time-contracts-v1.json +63 -16
- package/ai/compile-time-contracts-v1.schema.json +4 -1
- package/ai/component-catalog-extension.schema.json +25 -0
- package/ai/component-catalog.json +5585 -1175
- package/ai/component-catalog.schema.json +78 -1
- package/ai/component-class-owners.cjs +83 -0
- package/ai/component-composition-extension.d.ts +7 -0
- package/ai/component-composition-extension.schema.json +7 -0
- package/ai/{component-catalog-v2-overrides.json → component-composition-rules.json} +281 -49
- package/ai/component-composition.d.ts +132 -0
- package/ai/component-composition.json +8729 -0
- package/ai/component-composition.schema.json +412 -0
- package/ai/components/README.md +185 -0
- package/ai/components/anchored-surface.md +99 -0
- package/ai/components/application-tabs.md +65 -0
- package/ai/components/badge.md +76 -0
- package/ai/components/chip.md +76 -0
- package/ai/components/choice-chips.md +87 -0
- package/ai/components/collapsible-panel.md +103 -0
- package/ai/components/column-track.md +78 -0
- package/ai/components/combobox.md +88 -0
- package/ai/components/composer.md +83 -0
- package/ai/components/content-item.md +98 -0
- package/ai/components/content-swap.md +78 -0
- package/ai/components/corner-status.md +88 -0
- package/ai/components/disclosure-arrow.md +77 -0
- package/ai/components/document-baseline.md +77 -0
- package/ai/components/edge-activity-indicator.md +81 -0
- package/ai/components/empty-state.md +80 -0
- package/ai/components/feedback.md +71 -0
- package/ai/components/file-picker.md +88 -0
- package/ai/components/floating-toolbar.md +82 -0
- package/ai/components/foundation.md +65 -0
- package/ai/components/framed-list.md +80 -0
- package/ai/components/grid.md +101 -0
- package/ai/components/headers.md +63 -0
- package/ai/components/icon-button.md +82 -0
- package/ai/components/icon-toggle-button.md +80 -0
- package/ai/components/layout.md +75 -0
- package/ai/components/list-action-row.md +108 -0
- package/ai/components/list-header.md +91 -0
- package/ai/components/list-inset-control.md +74 -0
- package/ai/components/list-inset-text.md +72 -0
- package/ai/components/list-item.md +108 -0
- package/ai/components/list.md +125 -0
- package/ai/components/loading-spinner.md +73 -0
- package/ai/components/lucide-icon.md +97 -0
- package/ai/components/nav-stack.md +115 -0
- package/ai/components/pane.md +115 -0
- package/ai/components/popup-menu.md +171 -0
- package/ai/components/recipe-app-shell.md +57 -0
- package/ai/components/recipe-collapsible-sidebar.md +57 -0
- package/ai/components/recipe-compact-toolbar.md +57 -0
- package/ai/components/recipe-composer-form.md +57 -0
- package/ai/components/recipe-list-detail-dialog.md +57 -0
- package/ai/components/recipe-list-workspace-states.md +57 -0
- package/ai/components/recipe-loading-inspector.md +57 -0
- package/ai/components/recipe-navigation-sidebar.md +57 -0
- package/ai/components/recipe-navigation-stack.md +57 -0
- package/ai/components/recipe-workspace-header.md +57 -0
- package/ai/components/resize.md +106 -0
- package/ai/components/row.md +96 -0
- package/ai/components/segmented-control.md +82 -0
- package/ai/components/select.md +116 -0
- package/ai/components/skeleton.md +84 -0
- package/ai/components/spacer.md +86 -0
- package/ai/components/split-button.md +80 -0
- package/ai/components/split-view.md +105 -0
- package/ai/components/state-banner.md +96 -0
- package/ai/components/summary-row.md +85 -0
- package/ai/components/sunken-panel.md +79 -0
- package/ai/components/surface-scaffold.md +105 -0
- package/ai/components/tab-bar.md +114 -0
- package/ai/components/tab-navigator.md +100 -0
- package/ai/components/tabs.md +95 -0
- package/ai/components/text.md +90 -0
- package/ai/components/token-search-field.md +107 -0
- package/ai/components/toolbar-control-group.md +125 -0
- package/ai/components/toolbar-text.md +100 -0
- package/ai/components/toolbar.md +103 -0
- package/ai/components/value-table.md +80 -0
- package/ai/components/wa-accordion-item.md +55 -0
- package/ai/components/wa-accordion.md +65 -0
- package/ai/components/wa-animated-image.md +55 -0
- package/ai/components/wa-animation.md +55 -0
- package/ai/components/wa-avatar.md +55 -0
- package/ai/components/wa-badge.md +55 -0
- package/ai/components/wa-breadcrumb-item.md +53 -0
- package/ai/components/wa-breadcrumb.md +55 -0
- package/ai/components/wa-button-group.md +60 -0
- package/ai/components/wa-button.md +59 -0
- package/ai/components/wa-callout.md +58 -0
- package/ai/components/wa-card.md +59 -0
- package/ai/components/wa-carousel-item.md +53 -0
- package/ai/components/wa-carousel.md +55 -0
- package/ai/components/wa-checkbox-group.md +55 -0
- package/ai/components/wa-checkbox.md +55 -0
- package/ai/components/wa-color-picker.md +55 -0
- package/ai/components/wa-comparison.md +55 -0
- package/ai/components/wa-copy-button.md +55 -0
- package/ai/components/wa-details.md +61 -0
- package/ai/components/wa-dialog.md +59 -0
- package/ai/components/wa-divider.md +53 -0
- package/ai/components/wa-drawer.md +55 -0
- package/ai/components/wa-dropdown-item.md +60 -0
- package/ai/components/wa-dropdown.md +60 -0
- package/ai/components/wa-format-bytes.md +53 -0
- package/ai/components/wa-format-date.md +53 -0
- package/ai/components/wa-format-number.md +53 -0
- package/ai/components/wa-icon.md +58 -0
- package/ai/components/wa-include.md +53 -0
- package/ai/components/wa-input.md +59 -0
- package/ai/components/wa-intersection-observer.md +53 -0
- package/ai/components/wa-known-date.md +53 -0
- package/ai/components/wa-markdown.md +53 -0
- package/ai/components/wa-mutation-observer.md +53 -0
- package/ai/components/wa-number-input.md +55 -0
- package/ai/components/wa-option.md +59 -0
- package/ai/components/wa-otp-input.md +53 -0
- package/ai/components/wa-page.md +53 -0
- package/ai/components/wa-pagination.md +55 -0
- package/ai/components/wa-popover.md +55 -0
- package/ai/components/wa-popup.md +53 -0
- package/ai/components/wa-progress-bar.md +53 -0
- package/ai/components/wa-progress-ring.md +53 -0
- package/ai/components/wa-qr-code.md +53 -0
- package/ai/components/wa-radio-group.md +59 -0
- package/ai/components/wa-radio.md +55 -0
- package/ai/components/wa-random-content.md +53 -0
- package/ai/components/wa-rating.md +55 -0
- package/ai/components/wa-relative-time.md +53 -0
- package/ai/components/wa-resize-observer.md +53 -0
- package/ai/components/wa-scroller.md +53 -0
- package/ai/components/wa-select.md +63 -0
- package/ai/components/wa-skeleton.md +53 -0
- package/ai/components/wa-slider.md +55 -0
- package/ai/components/wa-spinner.md +58 -0
- package/ai/components/wa-split-panel.md +58 -0
- package/ai/components/wa-switch.md +53 -0
- package/ai/components/wa-tab-group.md +69 -0
- package/ai/components/wa-tab-panel.md +60 -0
- package/ai/components/wa-tab.md +59 -0
- package/ai/components/wa-tag.md +59 -0
- package/ai/components/wa-textarea.md +53 -0
- package/ai/components/wa-time-input.md +55 -0
- package/ai/components/wa-toast-item.md +60 -0
- package/ai/components/wa-toast.md +60 -0
- package/ai/components/wa-tooltip.md +55 -0
- package/ai/components/wa-tree-item.md +55 -0
- package/ai/components/wa-tree.md +55 -0
- package/ai/components/wa-zoomable-frame.md +55 -0
- package/ai/components/workbench.md +120 -0
- package/ai/public-api-signatures-v1.md +3851 -441
- package/ai/skill.md +402 -70
- package/ai/webawesome-jsx-signatures-v1.md +9 -2
- package/analyzer/cli.mjs +5 -2
- package/analyzer/component-ownership.d.mts +72 -0
- package/analyzer/component-ownership.mjs +429 -0
- package/analyzer/index.d.mts +8 -0
- package/analyzer/index.mjs +1687 -49
- package/analyzer/loud-pairs.d.mts +49 -0
- package/analyzer/loud-pairs.mjs +357 -0
- package/analyzer/selectors.d.mts +21 -0
- package/analyzer/selectors.mjs +212 -0
- package/catalog-projection-cli.mjs +96 -0
- package/catalog-projection.d.mts +55 -0
- package/catalog-projection.mjs +62 -0
- package/dist/anchored-surface.d.ts +69 -0
- package/dist/anchored-surface.js +3 -0
- package/dist/anchored-surface.js.map +1 -0
- package/dist/app-tab.d.ts +39 -4
- package/dist/app-tab.js +2 -1
- package/dist/badge.d.ts +83 -0
- package/dist/badge.js +4 -0
- package/dist/badge.js.map +1 -0
- package/dist/browser/anchored-surface.js +3 -0
- package/dist/browser/badge.js +3 -0
- package/dist/browser/catalog.js +28 -0
- package/dist/browser/chip.js +3 -0
- package/dist/browser/choice-chips.js +3 -0
- package/dist/browser/collapsible-panel.js +9 -0
- package/dist/browser/column-track.js +3 -0
- package/dist/browser/combobox.js +3 -0
- package/dist/browser/composer.js +4 -0
- package/dist/browser/content-item.js +3 -0
- package/dist/browser/content-swap.js +3 -0
- package/dist/browser/corner-status.js +3 -0
- package/dist/browser/edge-activity-indicator.js +3 -0
- package/dist/browser/file-picker.js +3 -0
- package/dist/browser/framed-list.js +3 -0
- package/dist/browser/grid.js +3 -0
- package/dist/browser/icon-button.js +4 -0
- package/dist/browser/icon-toggle-button.js +4 -0
- package/dist/browser/list-action-row.js +2 -0
- package/dist/browser/list-header.js +3 -1
- package/dist/browser/list-item.js +1 -0
- package/dist/browser/nav-stack.js +11 -0
- package/dist/browser/popup-menu.js +3 -0
- package/dist/browser/row.js +3 -0
- package/dist/browser/segmented-control.js +0 -1
- package/dist/browser/select.js +2 -1
- package/dist/browser/spacer.js +3 -0
- package/dist/browser/split-button.js +5 -0
- package/dist/browser/split-view.js +13 -0
- package/dist/browser/state-banner.js +1 -0
- package/dist/browser/summary-row.js +3 -0
- package/dist/browser/surface-scaffold.js +3 -0
- package/dist/browser/tab-navigator.js +4 -0
- package/dist/browser/text.js +3 -0
- package/dist/browser/toolbar-control-group.js +1 -0
- package/dist/browser/workbench.js +14 -0
- package/dist/catalog-resources.d.ts +17 -1
- package/dist/catalog-resources.js +5 -5
- package/dist/catalog-resources.js.map +1 -1
- package/dist/catalog.d.ts +123 -121
- package/dist/catalog.js +598 -269
- package/dist/catalog.js.map +1 -1
- package/dist/chip.d.ts +69 -0
- package/dist/chip.js +3 -0
- package/dist/chip.js.map +1 -0
- package/dist/choice-chips.d.ts +82 -0
- package/dist/choice-chips.js +3 -0
- package/dist/choice-chips.js.map +1 -0
- package/dist/chunk-2GOCOLQL.js +270 -0
- package/dist/chunk-2GOCOLQL.js.map +1 -0
- package/dist/chunk-2MSPNRWJ.js +82 -0
- package/dist/chunk-2MSPNRWJ.js.map +1 -0
- package/dist/chunk-34U4ANDJ.js +119 -0
- package/dist/chunk-34U4ANDJ.js.map +1 -0
- package/dist/chunk-3GLYIIFR.js +230 -0
- package/dist/chunk-3GLYIIFR.js.map +1 -0
- package/dist/{chunk-Y6LYKFXY.js → chunk-3VXDSIBJ.js} +7 -4
- package/dist/chunk-3VXDSIBJ.js.map +1 -0
- package/dist/chunk-3WYREXW4.js +120 -0
- package/dist/chunk-3WYREXW4.js.map +1 -0
- package/dist/chunk-4UB5Z3ZZ.js +68 -0
- package/dist/chunk-4UB5Z3ZZ.js.map +1 -0
- package/dist/chunk-6C6DLP3W.js +31 -0
- package/dist/chunk-6C6DLP3W.js.map +1 -0
- package/dist/chunk-7IUEBNCO.js +108 -0
- package/dist/chunk-7IUEBNCO.js.map +1 -0
- package/dist/{chunk-QO55FN2Y.js → chunk-AN5IWMTM.js} +7 -3
- package/dist/chunk-AN5IWMTM.js.map +1 -0
- package/dist/chunk-AV7CPAPT.js +82 -0
- package/dist/chunk-AV7CPAPT.js.map +1 -0
- package/dist/{chunk-PX3YSS5C.js → chunk-B53PS2LE.js} +5 -3
- package/dist/chunk-B53PS2LE.js.map +1 -0
- package/dist/chunk-CA7LNX3J.js +44 -0
- package/dist/chunk-CA7LNX3J.js.map +1 -0
- package/dist/chunk-CEJ5FK6G.js +288 -0
- package/dist/chunk-CEJ5FK6G.js.map +1 -0
- package/dist/chunk-CMETHPKR.js +175 -0
- package/dist/chunk-CMETHPKR.js.map +1 -0
- package/dist/chunk-CMLPFIC5.js +46 -0
- package/dist/chunk-CMLPFIC5.js.map +1 -0
- package/dist/{chunk-RKVQEH4J.js → chunk-CVD5IZGB.js} +10 -5
- package/dist/chunk-CVD5IZGB.js.map +1 -0
- package/dist/chunk-CXZXHZTR.js +514 -0
- package/dist/chunk-CXZXHZTR.js.map +1 -0
- package/dist/chunk-D5RGM3XA.js +38 -0
- package/dist/chunk-D5RGM3XA.js.map +1 -0
- package/dist/{chunk-KWWR5VMS.js → chunk-DZJ4GBSP.js} +19 -5
- package/dist/chunk-DZJ4GBSP.js.map +1 -0
- package/dist/chunk-EIET4QLK.js +51 -0
- package/dist/chunk-EIET4QLK.js.map +1 -0
- package/dist/chunk-ELCMSQNJ.js +49 -0
- package/dist/chunk-ELCMSQNJ.js.map +1 -0
- package/dist/chunk-EOO6PYGF.js +162 -0
- package/dist/chunk-EOO6PYGF.js.map +1 -0
- package/dist/chunk-ETCWQLJV.js +85 -0
- package/dist/chunk-ETCWQLJV.js.map +1 -0
- package/dist/chunk-FDZNYD4C.js +138 -0
- package/dist/chunk-FDZNYD4C.js.map +1 -0
- package/dist/chunk-FR76ZJQC.js +90 -0
- package/dist/chunk-FR76ZJQC.js.map +1 -0
- package/dist/chunk-G3J7JDP6.js +29 -0
- package/dist/chunk-G3J7JDP6.js.map +1 -0
- package/dist/chunk-GS2QD3N7.js +14 -0
- package/dist/chunk-GS2QD3N7.js.map +1 -0
- package/dist/chunk-HGV7J4T6.js +86 -0
- package/dist/chunk-HGV7J4T6.js.map +1 -0
- package/dist/chunk-HLDRH23D.js +84 -0
- package/dist/chunk-HLDRH23D.js.map +1 -0
- package/dist/chunk-HQZYKJ56.js +302 -0
- package/dist/chunk-HQZYKJ56.js.map +1 -0
- package/dist/chunk-HZPHCSCS.js +95 -0
- package/dist/chunk-HZPHCSCS.js.map +1 -0
- package/dist/chunk-IKS72C6P.js +53 -0
- package/dist/chunk-IKS72C6P.js.map +1 -0
- package/dist/chunk-IM3GKYOG.js +202 -0
- package/dist/chunk-IM3GKYOG.js.map +1 -0
- package/dist/{chunk-JRKSK2HX.js → chunk-INI4WDWC.js} +53 -7
- package/dist/chunk-INI4WDWC.js.map +1 -0
- package/dist/chunk-IQSRHXZR.js +164 -0
- package/dist/chunk-IQSRHXZR.js.map +1 -0
- package/dist/{chunk-M7JBER5U.js → chunk-JOR5LGYE.js} +18 -4
- package/dist/chunk-JOR5LGYE.js.map +1 -0
- package/dist/chunk-K4AT3V3J.js +545 -0
- package/dist/chunk-K4AT3V3J.js.map +1 -0
- package/dist/chunk-KCS6NJ3O.js +82 -0
- package/dist/chunk-KCS6NJ3O.js.map +1 -0
- package/dist/{chunk-SRSJO5QE.js → chunk-KH4KEMSP.js} +34 -3
- package/dist/chunk-KH4KEMSP.js.map +1 -0
- package/dist/chunk-LL45C7BB.js +122 -0
- package/dist/chunk-LL45C7BB.js.map +1 -0
- package/dist/chunk-LOSRXZAH.js +100 -0
- package/dist/chunk-LOSRXZAH.js.map +1 -0
- package/dist/{chunk-7KEUJIIC.js → chunk-MF6ZUUJZ.js} +93 -11
- package/dist/chunk-MF6ZUUJZ.js.map +1 -0
- package/dist/chunk-MHMWQ7RB.js +19 -0
- package/dist/chunk-MHMWQ7RB.js.map +1 -0
- package/dist/chunk-MJ5RU6XT.js +173 -0
- package/dist/chunk-MJ5RU6XT.js.map +1 -0
- package/dist/chunk-MXNIVEVL.js +48 -0
- package/dist/chunk-MXNIVEVL.js.map +1 -0
- package/dist/{chunk-IJBSZ4NX.js → chunk-NS2TBYM4.js} +8 -5
- package/dist/chunk-NS2TBYM4.js.map +1 -0
- package/dist/chunk-PIVY32AE.js +140 -0
- package/dist/chunk-PIVY32AE.js.map +1 -0
- package/dist/chunk-PYBBYSZ3.js +526 -0
- 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-QH5KOFNS.js +39 -0
- package/dist/chunk-QH5KOFNS.js.map +1 -0
- package/dist/chunk-QIG4IGUP.js +139 -0
- package/dist/chunk-QIG4IGUP.js.map +1 -0
- package/dist/chunk-QLA25V2K.js +493 -0
- package/dist/chunk-QLA25V2K.js.map +1 -0
- package/dist/chunk-QROYYGWU.js +52 -0
- package/dist/chunk-QROYYGWU.js.map +1 -0
- package/dist/chunk-QYMJHS4K.js +36 -0
- package/dist/chunk-QYMJHS4K.js.map +1 -0
- package/dist/chunk-RHD7RKGI.js +176 -0
- package/dist/chunk-RHD7RKGI.js.map +1 -0
- package/dist/chunk-S2XULQEK.js +52 -0
- package/dist/chunk-S2XULQEK.js.map +1 -0
- package/dist/{chunk-LPOMRC4C.js → chunk-S3ECMF23.js} +11 -3
- package/dist/chunk-S3ECMF23.js.map +1 -0
- package/dist/chunk-S4Y3YTAI.js +35 -0
- package/dist/chunk-S4Y3YTAI.js.map +1 -0
- package/dist/chunk-S4ZGTDSG.js +18 -0
- package/dist/chunk-S4ZGTDSG.js.map +1 -0
- package/dist/{chunk-PSKN344N.js → chunk-T4WJ5VGP.js} +63 -12
- package/dist/chunk-T4WJ5VGP.js.map +1 -0
- package/dist/chunk-TDMHA7C3.js +251 -0
- package/dist/chunk-TDMHA7C3.js.map +1 -0
- package/dist/{chunk-Y45PPBDV.js → chunk-TGLUDQP2.js} +47 -14
- package/dist/chunk-TGLUDQP2.js.map +1 -0
- package/dist/chunk-TLMMFQWM.js +222 -0
- package/dist/chunk-TLMMFQWM.js.map +1 -0
- package/dist/chunk-U6QYTMDB.js +85 -0
- package/dist/chunk-U6QYTMDB.js.map +1 -0
- package/dist/chunk-UMKV7YVQ.js +20 -0
- package/dist/chunk-UMKV7YVQ.js.map +1 -0
- package/dist/chunk-VFYO3UGZ.js +45 -0
- package/dist/chunk-VFYO3UGZ.js.map +1 -0
- package/dist/chunk-W4IK7AWD.js +73 -0
- package/dist/chunk-W4IK7AWD.js.map +1 -0
- package/dist/chunk-WVS6CUCT.js +48 -0
- package/dist/chunk-WVS6CUCT.js.map +1 -0
- package/dist/chunk-Y6KT7ZTR.js +109 -0
- package/dist/chunk-Y6KT7ZTR.js.map +1 -0
- package/dist/chunk-YMUIQRWK.js +44 -0
- package/dist/chunk-YMUIQRWK.js.map +1 -0
- package/dist/chunk-YOA5W5ZH.js +807 -0
- package/dist/chunk-YOA5W5ZH.js.map +1 -0
- package/dist/chunk-YQ2AC4E2.js +59 -0
- package/dist/chunk-YQ2AC4E2.js.map +1 -0
- package/dist/chunk-ZKKO4MHC.js +25 -0
- package/dist/chunk-ZKKO4MHC.js.map +1 -0
- package/dist/chunk-ZNROKDSZ.js +54 -0
- package/dist/chunk-ZNROKDSZ.js.map +1 -0
- package/dist/collapsible-panel.d.ts +96 -17
- package/dist/collapsible-panel.js +104 -27
- package/dist/collapsible-panel.js.map +1 -1
- package/dist/column-track.d.ts +41 -0
- package/dist/column-track.js +4 -0
- package/dist/column-track.js.map +1 -0
- package/dist/combobox.d.ts +40 -0
- package/dist/combobox.js +3 -0
- package/dist/combobox.js.map +1 -0
- package/dist/composer.d.ts +62 -0
- package/dist/composer.js +5 -0
- package/dist/composer.js.map +1 -0
- package/dist/content-item.d.ts +116 -0
- package/dist/content-item.js +4 -0
- package/dist/content-item.js.map +1 -0
- package/dist/content-swap.d.ts +34 -0
- package/dist/content-swap.js +3 -0
- package/dist/content-swap.js.map +1 -0
- package/dist/corner-status.d.ts +36 -0
- package/dist/corner-status.js +3 -0
- package/dist/corner-status.js.map +1 -0
- package/dist/css-values.d.ts +127 -0
- package/dist/css-values.js +3 -0
- package/dist/css-values.js.map +1 -0
- package/dist/device-class.js +1 -1
- package/dist/device-class.js.map +1 -1
- package/dist/disclosure-arrow.d.ts +6 -1
- package/dist/disclosure-arrow.js +2 -1
- package/dist/edge-activity-indicator.d.ts +28 -0
- package/dist/edge-activity-indicator.js +3 -0
- package/dist/edge-activity-indicator.js.map +1 -0
- package/dist/empty-state.d.ts +5 -2
- package/dist/empty-state.js +2 -1
- package/dist/extension-attributes-mu8MFUl0.d.ts +13 -0
- package/dist/file-picker.d.ts +47 -0
- package/dist/file-picker.js +3 -0
- package/dist/file-picker.js.map +1 -0
- package/dist/flex-alignment-4ms8ZbV8.d.ts +5 -0
- package/dist/floating-toolbar.d.ts +29 -6
- package/dist/floating-toolbar.js +1 -1
- package/dist/framed-list.d.ts +47 -0
- package/dist/framed-list.js +4 -0
- package/dist/framed-list.js.map +1 -0
- package/dist/grid.d.ts +58 -0
- package/dist/grid.js +6 -0
- package/dist/grid.js.map +1 -0
- package/dist/help-tags-register.d.ts +13 -0
- package/dist/help-tags-register.js +9 -0
- package/dist/help-tags-register.js.map +1 -0
- package/dist/icon-button.d.ts +46 -0
- package/dist/icon-button.js +6 -0
- package/dist/icon-button.js.map +1 -0
- package/dist/icon-toggle-button.d.ts +42 -0
- package/dist/icon-toggle-button.js +6 -0
- package/dist/icon-toggle-button.js.map +1 -0
- package/dist/index.d.ts +59 -20
- package/dist/index.js +66 -29
- package/dist/list-action-row.d.ts +69 -12
- package/dist/list-action-row.js +5 -1
- package/dist/list-header.d.ts +36 -2
- package/dist/list-header.js +4 -1
- package/dist/list-icon-tile-B8dr97OW.d.ts +18 -0
- package/dist/list-inset-control.d.ts +10 -4
- package/dist/list-inset-control.js +1 -1
- package/dist/list-inset-text.d.ts +17 -12
- package/dist/list-inset-text.js +2 -1
- package/dist/list-item.d.ts +49 -5
- package/dist/list-item.js +4 -1
- package/dist/list.d.ts +121 -12
- package/dist/list.js +5 -1
- package/dist/loading-spinner.d.ts +12 -2
- package/dist/loading-spinner.js +2 -1
- package/dist/lucide-icon.d.ts +15 -3
- package/dist/lucide-icon.js +2 -1
- package/dist/nav-stack-VXTumzKa.d.ts +158 -0
- package/dist/nav-stack.d.ts +15 -38
- package/dist/nav-stack.js +13 -1
- package/dist/pane.d.ts +111 -7
- package/dist/pane.js +2 -1
- package/dist/panel-toolbar-vg6Ir5Dy.d.ts +77 -0
- package/dist/popup-menu-register.d.ts +10 -0
- package/dist/popup-menu-register.js +336 -0
- package/dist/popup-menu-register.js.map +1 -0
- package/dist/popup-menu.d.ts +125 -0
- package/dist/popup-menu.js +3 -0
- package/dist/popup-menu.js.map +1 -0
- package/dist/resizable-region.d.ts +32 -3
- package/dist/resizable-region.js +1 -1
- package/dist/row.d.ts +53 -0
- package/dist/row.js +7 -0
- package/dist/row.js.map +1 -0
- package/dist/scroll-clearance-BikHljTc.d.ts +14 -0
- package/dist/segmented-control.d.ts +7 -4
- package/dist/segmented-control.js +1 -2
- package/dist/select-register.js +255 -3
- package/dist/select-register.js.map +1 -1
- package/dist/select.d.ts +95 -6
- package/dist/select.js +4 -1
- package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
- package/dist/semantic-tone-CdW013KF.d.ts +4 -0
- package/dist/sides-BPSWde0A.d.ts +4 -0
- package/dist/skeleton.d.ts +14 -7
- package/dist/skeleton.js +2 -1
- package/dist/spacer.d.ts +18 -0
- package/dist/spacer.js +4 -0
- package/dist/spacer.js.map +1 -0
- package/dist/split-button.d.ts +57 -0
- package/dist/split-button.js +7 -0
- package/dist/split-button.js.map +1 -0
- package/dist/split-view.d.ts +63 -6
- package/dist/split-view.js +88 -9
- package/dist/split-view.js.map +1 -1
- package/dist/state-banner.d.ts +37 -6
- package/dist/state-banner.js +4 -1
- package/dist/styles/anchored-surface.css +41 -0
- package/dist/styles/app-tab.css +232 -0
- package/dist/styles/badge.css +145 -0
- package/dist/styles/catalog/components/catalog-example-stack.css +14 -0
- package/dist/styles/catalog/components/catalog-example.css +204 -0
- package/dist/styles/catalog/components/catalog-stage.css +61 -0
- package/dist/styles/catalog/components/catalog.css +26 -0
- package/dist/styles/catalog.css +5 -575
- package/dist/styles/chip.css +208 -0
- package/dist/styles/choice-chips.css +154 -0
- package/dist/styles/collapsible-panel.css +450 -16
- package/dist/styles/column-track.css +57 -0
- package/dist/styles/combobox.css +113 -0
- package/dist/styles/components/actions/floating-toolbar/floating-toolbar.css +119 -0
- package/dist/styles/components/actions/icon-button/icon-button.css +22 -0
- package/dist/styles/components/actions/icon-toggle-button/icon-toggle-button.css +83 -0
- package/dist/styles/components/actions/popup-menu/popup-menu.css +370 -0
- package/dist/styles/components/actions/split-button/split-button.css +95 -0
- package/dist/styles/components/actions/toolbar/toolbar.css +443 -0
- package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +1069 -0
- package/dist/styles/components/actions/toolbar-text/toolbar-text.css +269 -0
- package/dist/styles/components/collections/framed-list/framed-list.css +47 -0
- package/dist/styles/components/collections/list/list.css +250 -0
- package/dist/styles/components/collections/list-action-row/list-action-row.css +466 -0
- package/dist/styles/components/collections/list-header/list-header.css +229 -0
- package/dist/styles/components/collections/list-inset-control/list-inset-control.css +30 -0
- package/dist/styles/components/collections/list-inset-text/list-inset-text.css +29 -0
- package/dist/styles/components/collections/list-item/list-item.css +461 -0
- package/dist/styles/components/collections/summary-row/summary-row.css +161 -0
- package/dist/styles/components/data-display/value-table/value-table.css +183 -0
- package/dist/styles/components/feedback/anchored-surface/anchored-surface.css +41 -0
- package/dist/styles/components/feedback/badge/badge.css +145 -0
- package/dist/styles/components/feedback/chip/chip.css +208 -0
- package/dist/styles/components/feedback/corner-status/corner-status.css +60 -0
- package/dist/styles/components/feedback/edge-activity-indicator/edge-activity-indicator.css +127 -0
- package/dist/styles/components/feedback/empty-state/empty-state.css +47 -0
- package/dist/styles/components/feedback/loading-spinner/loading-spinner.css +25 -0
- package/dist/styles/components/feedback/skeleton/skeleton.css +92 -0
- package/dist/styles/components/feedback/state-banner/state-banner.css +297 -0
- package/dist/styles/components/forms/choice-chips/choice-chips.css +154 -0
- package/dist/styles/components/forms/combobox/combobox.css +113 -0
- package/dist/styles/components/forms/composer/composer.css +100 -0
- package/dist/styles/components/forms/file-picker/file-picker.css +81 -0
- package/dist/styles/components/forms/segmented-control/segmented-control.css +196 -0
- package/dist/styles/components/forms/select/select.css +455 -0
- package/dist/styles/components/forms/token-search-field/token-search-field.css +432 -0
- package/dist/styles/components/layout/collapsible-panel/collapsible-panel.css +580 -0
- package/dist/styles/components/layout/column-track/column-track.css +57 -0
- package/dist/styles/components/layout/content-swap/content-swap.css +154 -0
- package/dist/styles/components/layout/grid/grid.css +88 -0
- package/dist/styles/components/layout/pane/pane.css +382 -0
- package/dist/styles/components/layout/resizable-region/resizable-region.css +545 -0
- package/dist/styles/components/layout/row/row.css +114 -0
- package/dist/styles/components/layout/spacer/spacer.css +11 -0
- package/dist/styles/components/layout/split-view/split-view.css +146 -0
- package/dist/styles/components/layout/workbench/workbench.css +1086 -0
- package/dist/styles/components/media/lucide-icon/lucide-icon.css +15 -0
- package/dist/styles/components/navigation/app-tab/app-tab.css +384 -0
- package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +23 -0
- package/dist/styles/components/navigation/nav-stack/nav-stack.css +342 -0
- package/dist/styles/components/navigation/tab-bar/tab-bar.css +197 -0
- package/dist/styles/components/navigation/tab-navigator/tab-navigator.css +325 -0
- package/dist/styles/components/surfaces/content-item/content-item.css +138 -0
- package/dist/styles/components/surfaces/sunken-panel/sunken-panel.css +31 -0
- package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +425 -0
- package/dist/styles/components/typography/text/text.css +220 -0
- package/dist/styles/composer.css +100 -0
- package/dist/styles/content-item.css +138 -0
- package/dist/styles/content-swap.css +154 -0
- package/dist/styles/corner-status.css +60 -0
- package/dist/styles/document.css +98 -0
- package/dist/styles/edge-activity-indicator.css +127 -0
- package/dist/styles/file-picker.css +81 -0
- package/dist/styles/floating-toolbar.css +87 -6
- package/dist/styles/foundation.css +254 -53
- package/dist/styles/framed-list.css +47 -0
- package/dist/styles/grid.css +88 -0
- package/dist/styles/icon-button.css +22 -0
- package/dist/styles/icon-toggle-button.css +83 -0
- package/dist/styles/layout.css +1 -21
- package/dist/styles/list-action-row.css +323 -17
- package/dist/styles/list-header.css +128 -59
- package/dist/styles/list-inset-control.css +25 -2
- package/dist/styles/list-inset-text.css +27 -12
- package/dist/styles/list-item.css +371 -33
- package/dist/styles/list.css +214 -7
- package/dist/styles/loading-spinner.css +4 -0
- package/dist/styles/lucide-icon.css +9 -0
- package/dist/styles/nav-stack.css +280 -49
- package/dist/styles/pane.css +322 -2
- package/dist/styles/popup-menu.css +370 -0
- package/dist/styles/resizable-region.css +438 -4
- package/dist/styles/row.css +114 -0
- package/dist/styles/segmented-control.css +34 -3
- package/dist/styles/select.css +338 -23
- package/dist/styles/skeleton.css +64 -3
- package/dist/styles/spacer.css +11 -0
- package/dist/styles/split-button.css +95 -0
- package/dist/styles/split-view.css +114 -3
- package/dist/styles/state-banner.css +141 -42
- package/dist/styles/styles.css +22 -1
- package/dist/styles/summary-row.css +161 -0
- package/dist/styles/sunken-panel.css +13 -4
- package/dist/styles/surface-scaffold.css +425 -0
- package/dist/styles/tab-bar.css +161 -9
- package/dist/styles/tab-navigator.css +325 -0
- package/dist/styles/text.css +220 -0
- package/dist/styles/token-search-field.css +202 -59
- package/dist/styles/toolbar-control-group.css +886 -42
- package/dist/styles/toolbar-text.css +184 -7
- package/dist/styles/toolbar.css +363 -17
- package/dist/styles/value-table.css +115 -7
- package/dist/styles/webawesome.css +282 -20
- package/dist/styles/workbench.css +999 -7
- package/dist/summary-row.d.ts +56 -0
- package/dist/summary-row.js +4 -0
- package/dist/summary-row.js.map +1 -0
- package/dist/sunken-panel.d.ts +23 -4
- package/dist/sunken-panel.js +2 -1
- package/dist/surface-scaffold-register.d.ts +9 -0
- package/dist/surface-scaffold-register.js +151 -0
- package/dist/surface-scaffold-register.js.map +1 -0
- package/dist/surface-scaffold.d.ts +170 -0
- package/dist/surface-scaffold.js +4 -0
- package/dist/surface-scaffold.js.map +1 -0
- package/dist/tab-bar.d.ts +31 -6
- package/dist/tab-bar.js +1 -1
- package/dist/tab-navigator.d.ts +114 -0
- package/dist/tab-navigator.js +102 -0
- package/dist/tab-navigator.js.map +1 -0
- package/dist/text.d.ts +98 -0
- package/dist/text.js +3 -0
- package/dist/text.js.map +1 -0
- package/dist/token-search-field.d.ts +3 -59
- package/dist/token-search-field.js +2 -1
- package/dist/token-search-model-aYR0YAei.d.ts +184 -0
- package/dist/token-search-model.d.ts +3 -0
- package/dist/token-search-model.js +3 -0
- package/dist/token-search-model.js.map +1 -0
- package/dist/toolbar-control-group.d.ts +87 -4
- package/dist/toolbar-control-group.js +3 -1
- package/dist/toolbar-text.d.ts +46 -12
- package/dist/toolbar-text.js +2 -1
- package/dist/toolbar.d.ts +71 -9
- package/dist/toolbar.js +1 -1
- package/dist/types-CVgIwSdq.d.ts +189 -0
- package/dist/value-table.d.ts +30 -4
- package/dist/value-table.js +2 -1
- package/dist/webawesome.d.ts +8 -1
- package/dist/wire-catalog.d.ts +88 -13
- package/dist/wire-catalog.js +240 -206
- package/dist/wire-catalog.js.map +1 -1
- package/dist/wire-comboboxes.d.ts +26 -0
- package/dist/wire-comboboxes.js +3 -0
- package/dist/wire-comboboxes.js.map +1 -0
- 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-content-items.d.ts +11 -0
- package/dist/wire-content-items.js +139 -0
- package/dist/wire-content-items.js.map +1 -0
- package/dist/wire-corner-status.d.ts +11 -0
- package/dist/wire-corner-status.js +3 -0
- package/dist/wire-corner-status.js.map +1 -0
- package/dist/wire-file-pickers.d.ts +26 -0
- package/dist/wire-file-pickers.js +3 -0
- package/dist/wire-file-pickers.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-list-reorder.d.ts +41 -0
- package/dist/wire-list-reorder.js +3 -0
- package/dist/wire-list-reorder.js.map +1 -0
- package/dist/wire-nav-stack.d.ts +4 -1
- package/dist/wire-nav-stack.js +312 -16
- package/dist/wire-nav-stack.js.map +1 -1
- package/dist/wire-resizable-regions.d.ts +2 -1
- package/dist/wire-resizable-regions.js +2 -1
- package/dist/wire-scroll-dividers.d.ts +87 -0
- package/dist/wire-scroll-dividers.js +3 -0
- package/dist/wire-scroll-dividers.js.map +1 -0
- package/dist/wire-sidebar.d.ts +24 -4
- package/dist/wire-sidebar.js +122 -19
- package/dist/wire-sidebar.js.map +1 -1
- package/dist/wire-tab-bars.d.ts +1 -0
- package/dist/wire-tab-bars.js +1 -1
- package/dist/wire-tab-navigator.d.ts +13 -0
- package/dist/wire-tab-navigator.js +153 -0
- package/dist/wire-tab-navigator.js.map +1 -0
- package/dist/wire-token-search-fields.d.ts +5 -1
- package/dist/wire-token-search-fields.js +2 -1
- package/dist/wire-toolbar-visibility.d.ts +13 -0
- package/dist/wire-toolbar-visibility.js +3 -0
- package/dist/wire-toolbar-visibility.js.map +1 -0
- package/dist/wire-workbench.d.ts +116 -0
- package/dist/wire-workbench.js +6 -0
- package/dist/wire-workbench.js.map +1 -0
- package/dist/workbench.d.ts +253 -10
- package/dist/workbench.js +20 -62
- package/dist/workbench.js.map +1 -1
- package/docs/accessibility.md +617 -32
- package/docs/anchored-surface.md +101 -0
- package/docs/app-layouts.md +159 -10
- package/docs/apple-hig.md +2 -0
- package/docs/catalog.md +403 -110
- package/docs/collapsible-panel.md +272 -16
- package/docs/component-contract.md +700 -79
- package/docs/component-integration.md +75 -0
- package/docs/component-selection.md +908 -79
- package/docs/composer.md +143 -0
- package/docs/design/templates/choice-chips/color-palette-dark.svg +1 -0
- package/docs/design/templates/choice-chips/color-palette.svg +1 -0
- package/docs/design/templates/choice-chips/compact-icons-dark.svg +1 -0
- package/docs/design/templates/choice-chips/compact-icons.svg +1 -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 -0
- package/docs/design/templates/choice-chips.svg +1 -0
- 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/stack-dark.svg +1 -1
- package/docs/design/templates/list/stack.svg +1 -1
- package/docs/design/templates/list-action-row/default-dark.svg +1 -1
- package/docs/design/templates/list-action-row/default.svg +1 -1
- package/docs/design/templates/list-action-row/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 -0
- package/docs/design/templates/list-action-row/trailing-menu.svg +1 -0
- 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/action-dark.svg +1 -1
- package/docs/design/templates/list-header/action.svg +1 -1
- package/docs/design/templates/list-header/count-dark.svg +1 -1
- package/docs/design/templates/list-header/count.svg +1 -1
- package/docs/design/templates/list-header/inline-action-dark.svg +1 -0
- package/docs/design/templates/list-header/inline-action.svg +1 -0
- package/docs/design/templates/list-header/size-l-dark.svg +1 -0
- package/docs/design/templates/list-header/size-l.svg +1 -0
- package/docs/design/templates/list-header/size-m-dark.svg +1 -0
- package/docs/design/templates/list-header/size-m.svg +1 -0
- package/docs/design/templates/list-header/size-xl-dark.svg +1 -0
- package/docs/design/templates/list-header/size-xl.svg +1 -0
- package/docs/design/templates/list-header/size-xs-dark.svg +1 -0
- package/docs/design/templates/list-header/size-xs.svg +1 -0
- package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -1
- package/docs/design/templates/list-header/toggle-collapsed.svg +1 -1
- package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
- package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
- package/docs/design/templates/list-header-dark.svg +1 -1
- package/docs/design/templates/list-header.svg +1 -1
- package/docs/design/templates/list-item/default-dark.svg +1 -1
- package/docs/design/templates/list-item/default.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/multiline-dark.svg +1 -1
- package/docs/design/templates/list-item/multiline.svg +1 -1
- package/docs/design/templates/list-item/selected-dark.svg +1 -1
- package/docs/design/templates/list-item/selected.svg +1 -1
- package/docs/design/templates/list-item/trailing-dark.svg +1 -1
- package/docs/design/templates/list-item/trailing.svg +1 -1
- package/docs/design/templates/list-item-dark.svg +1 -1
- package/docs/design/templates/list-item.svg +1 -1
- package/docs/design/templates/list.svg +1 -1
- package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
- package/docs/design/templates/segmented-control/equal.svg +1 -1
- package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -1
- package/docs/design/templates/segmented-control/pill-small.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 -0
- package/docs/design/templates/state-banner/strip.svg +1 -0
- 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/workspace-tabs-dark.svg +1 -1
- package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
- package/docs/design/templates/tab-bar-dark.svg +1 -1
- package/docs/design/templates/tab-bar.svg +1 -1
- package/docs/design/templates/token-search-field/empty-dark.svg +1 -1
- package/docs/design/templates/token-search-field/empty.svg +1 -1
- package/docs/design/templates/token-search-field/tokens-dark.svg +1 -1
- package/docs/design/templates/token-search-field/tokens.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/title-and-actions-dark.svg +1 -1
- package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
- package/docs/design/templates/toolbar/width-visibility-320-dark.svg +1 -0
- package/docs/design/templates/toolbar/width-visibility-320.svg +1 -0
- package/docs/design/templates/toolbar/width-visibility-600-dark.svg +1 -0
- package/docs/design/templates/toolbar/width-visibility-600.svg +1 -0
- package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
- package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
- package/docs/design/templates/toolbar-control-group/icon-tile-brand-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/icon-tile-brand.svg +1 -0
- package/docs/design/templates/toolbar-control-group/icon-tile-danger-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/icon-tile-danger.svg +1 -0
- package/docs/design/templates/toolbar-control-group/icon-tile-neutral-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/icon-tile-neutral.svg +1 -0
- package/docs/design/templates/toolbar-control-group/icon-tile-success-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/icon-tile-success.svg +1 -0
- package/docs/design/templates/toolbar-control-group/icon-tile-warning-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/icon-tile-warning.svg +1 -0
- package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
- package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
- package/docs/design/templates/toolbar-control-group-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group.svg +1 -1
- package/docs/design/templates/toolbar-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/dark-tone-dark.svg +1 -0
- package/docs/design/templates/toolbar-text/dark-tone.svg +1 -0
- package/docs/design/templates/toolbar-text/default-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/default.svg +1 -1
- package/docs/design/templates/toolbar-text/large-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/large.svg +1 -1
- package/docs/design/templates/toolbar-text/small-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/small.svg +1 -1
- package/docs/design/templates/toolbar-text-dark.svg +1 -1
- package/docs/design/templates/toolbar-text.svg +1 -1
- package/docs/design/templates/toolbar.svg +1 -1
- package/docs/design/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/templates.md +19 -9
- package/docs/design-philosophy.md +58 -11
- package/docs/device-class.md +2 -1
- package/docs/document-baseline.md +93 -0
- package/docs/examples/application-ui-profile.json +8 -8
- package/docs/examples/command-palette-adapter.tsx +9 -7
- package/docs/examples/component-catalog-extension.json +8 -1
- package/docs/examples/{component-catalog-extension-v2.json → component-composition-extension.json} +8 -9
- package/docs/layout.md +764 -40
- package/docs/nav-stack.md +275 -11
- package/docs/recipes.md +125 -69
- package/docs/split-view.md +94 -5
- package/docs/sunken-panel.md +54 -1
- package/docs/surface-scaffold.md +270 -0
- package/docs/tab-navigator.md +255 -0
- package/docs/type-contracts.md +57 -22
- package/docs/ui-analyzer.md +334 -14
- package/docs/ui-doctor.md +207 -10
- package/docs/ui-evaluator.md +17 -0
- package/docs/ux-demo.md +47 -16
- package/docs/webawesome-theme.md +148 -14
- package/docs/workbench.md +600 -11
- package/docs/writing.md +152 -0
- package/doctor/cli.mjs +5 -0
- package/doctor/component-style-checks.mjs +457 -0
- package/doctor/config.schema.json +26 -0
- package/doctor/copy-capitalization-checks.mjs +591 -0
- package/doctor/eslint-diagnostics.d.mts +16 -0
- package/doctor/eslint-diagnostics.mjs +17 -0
- package/doctor/index.d.mts +6 -0
- package/doctor/index.mjs +214 -47
- package/evaluator/index.mjs +73 -8
- package/llms.txt +702 -56
- package/package.json +256 -25
- package/scripts/component-catalog-extension-validation.mjs +28 -0
- package/traversal-exclusions.mjs +60 -1
- package/ux-demo/recipes/app-shell.tsx +181 -189
- package/ux-demo/recipes/collapsible-sidebar.tsx +177 -139
- package/ux-demo/recipes/compact-toolbar.tsx +120 -101
- package/ux-demo/recipes/composer-form.tsx +86 -62
- package/ux-demo/recipes/list-detail-dialog.tsx +219 -114
- package/ux-demo/recipes/list-workspace-states.tsx +95 -80
- package/ux-demo/recipes/loaders.ts +5 -2
- package/ux-demo/recipes/loading-inspector.tsx +157 -117
- package/ux-demo/recipes/mount-recipe.ts +0 -5
- package/ux-demo/recipes/navigation-sidebar.tsx +98 -83
- package/ux-demo/recipes/navigation-stack.tsx +42 -29
- package/ux-demo/recipes/types.ts +14 -1
- package/ux-demo/recipes/workspace-header.tsx +77 -51
- package/vite-ux-review.d.mts +83 -0
- package/vite-ux-review.mjs +120 -0
- package/ai/component-catalog-extension-v2.d.ts +0 -7
- package/ai/component-catalog-extension-v2.schema.json +0 -7
- package/ai/component-catalog-v2.d.ts +0 -67
- package/ai/component-catalog-v2.json +0 -4675
- package/ai/component-catalog-v2.schema.json +0 -246
- package/dist/browser/panel-header.js +0 -7
- package/dist/chunk-5VTB2BKP.js +0 -35
- package/dist/chunk-5VTB2BKP.js.map +0 -1
- package/dist/chunk-6WTETUZ6.js +0 -21
- package/dist/chunk-6WTETUZ6.js.map +0 -1
- package/dist/chunk-7KEUJIIC.js.map +0 -1
- package/dist/chunk-7XRDUG4Y.js +0 -58
- package/dist/chunk-7XRDUG4Y.js.map +0 -1
- package/dist/chunk-B3A3IVO5.js +0 -83
- package/dist/chunk-B3A3IVO5.js.map +0 -1
- package/dist/chunk-DPDBVKNA.js +0 -113
- package/dist/chunk-DPDBVKNA.js.map +0 -1
- package/dist/chunk-FEAMR7S4.js +0 -68
- package/dist/chunk-FEAMR7S4.js.map +0 -1
- package/dist/chunk-FEY65TBV.js +0 -15
- package/dist/chunk-FEY65TBV.js.map +0 -1
- package/dist/chunk-IJBSZ4NX.js.map +0 -1
- package/dist/chunk-J5BFYY7Q.js +0 -35
- package/dist/chunk-J5BFYY7Q.js.map +0 -1
- package/dist/chunk-JRKSK2HX.js.map +0 -1
- package/dist/chunk-KWWR5VMS.js.map +0 -1
- package/dist/chunk-LPOMRC4C.js.map +0 -1
- package/dist/chunk-M7JBER5U.js.map +0 -1
- package/dist/chunk-NENBUYX5.js +0 -79
- package/dist/chunk-NENBUYX5.js.map +0 -1
- package/dist/chunk-NWSEP5RT.js +0 -117
- package/dist/chunk-NWSEP5RT.js.map +0 -1
- package/dist/chunk-OJWWHFH3.js +0 -426
- package/dist/chunk-OJWWHFH3.js.map +0 -1
- package/dist/chunk-PSKN344N.js.map +0 -1
- package/dist/chunk-PX3YSS5C.js.map +0 -1
- package/dist/chunk-QO55FN2Y.js.map +0 -1
- package/dist/chunk-R7ZWUN64.js +0 -38
- package/dist/chunk-R7ZWUN64.js.map +0 -1
- package/dist/chunk-RKVQEH4J.js.map +0 -1
- package/dist/chunk-SRSJO5QE.js.map +0 -1
- package/dist/chunk-SYDMYBPG.js +0 -31
- package/dist/chunk-SYDMYBPG.js.map +0 -1
- package/dist/chunk-TB6DY7H5.js +0 -25
- package/dist/chunk-TB6DY7H5.js.map +0 -1
- package/dist/chunk-UFZKLBCF.js +0 -108
- package/dist/chunk-UFZKLBCF.js.map +0 -1
- package/dist/chunk-UKKSMZYT.js +0 -281
- package/dist/chunk-UKKSMZYT.js.map +0 -1
- package/dist/chunk-W2FK7ZNY.js +0 -26
- package/dist/chunk-W2FK7ZNY.js.map +0 -1
- package/dist/chunk-W5L2JSBY.js +0 -40
- package/dist/chunk-W5L2JSBY.js.map +0 -1
- package/dist/chunk-Y45PPBDV.js.map +0 -1
- package/dist/chunk-Y6LYKFXY.js.map +0 -1
- package/dist/divider-sides-267FA7sY.d.ts +0 -4
- package/dist/panel-header.d.ts +0 -42
- package/dist/panel-header.js +0 -7
- package/dist/panel-header.js.map +0 -1
- package/dist/styles/panel-header.css +0 -64
- package/dist/styles/tab-scaffold.css +0 -84
- package/dist/tab-scaffold.d.ts +0 -30
- package/dist/tab-scaffold.js +0 -51
- package/dist/tab-scaffold.js.map +0 -1
- package/dist/wire-tab-scaffold.d.ts +0 -11
- package/dist/wire-tab-scaffold.js +0 -21
- package/dist/wire-tab-scaffold.js.map +0 -1
- package/docs/design/templates/panel-header/icon-actions-dark.svg +0 -1
- package/docs/design/templates/panel-header/icon-actions.svg +0 -1
- package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +0 -1
- package/docs/design/templates/panel-header/icon-summary-actions.svg +0 -1
- package/docs/design/templates/panel-header/no-icon-dark.svg +0 -1
- package/docs/design/templates/panel-header/no-icon.svg +0 -1
- package/docs/design/templates/panel-header/page-heading-dark.svg +0 -1
- package/docs/design/templates/panel-header/page-heading.svg +0 -1
- package/docs/design/templates/panel-header/title-only-dark.svg +0 -1
- package/docs/design/templates/panel-header/title-only.svg +0 -1
- package/docs/design/templates/panel-header-dark.svg +0 -1
- package/docs/design/templates/panel-header.svg +0 -1
- package/docs/tab-scaffold.md +0 -50
- package/ux-demo/recipes/recipes.css +0 -448
|
@@ -1,21 +1,41 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { DisclosureArrow } from './chunk-3VXDSIBJ.js';
|
|
2
|
+
import { Text } from './chunk-LL45C7BB.js';
|
|
3
|
+
import { Skeleton } from './chunk-CVD5IZGB.js';
|
|
4
|
+
import { Badge } from './chunk-U6QYTMDB.js';
|
|
5
|
+
import { em } from './chunk-IQSRHXZR.js';
|
|
6
|
+
import { filterDataAttributes, filterControlAttributes } from './chunk-KH4KEMSP.js';
|
|
7
|
+
import { jsx, jsxs, Fragment } from 'kerfjs/jsx-runtime';
|
|
5
8
|
|
|
6
9
|
var PROTECTED_ROOT_DATA_ATTRIBUTES = /* @__PURE__ */ new Set([
|
|
7
10
|
"data-component",
|
|
8
11
|
"data-action",
|
|
9
12
|
"data-has-badge",
|
|
10
13
|
"data-has-count",
|
|
14
|
+
"data-density",
|
|
15
|
+
"data-size",
|
|
16
|
+
"data-divider",
|
|
17
|
+
"data-inline",
|
|
18
|
+
"data-width",
|
|
19
|
+
"data-indicator-tone",
|
|
11
20
|
"data-toggle"
|
|
12
21
|
]);
|
|
13
|
-
var PROTECTED_TRIGGER_DATA_ATTRIBUTES = /* @__PURE__ */ new Set([
|
|
22
|
+
var PROTECTED_TRIGGER_DATA_ATTRIBUTES = /* @__PURE__ */ new Set([
|
|
23
|
+
"data-action",
|
|
24
|
+
"data-kui-disabled"
|
|
25
|
+
]);
|
|
14
26
|
function ListHeader({
|
|
15
27
|
label,
|
|
28
|
+
size = "sm",
|
|
29
|
+
headingLevel = 2,
|
|
16
30
|
count,
|
|
17
31
|
countLabel,
|
|
18
32
|
badge,
|
|
33
|
+
status,
|
|
34
|
+
density = "standard",
|
|
35
|
+
divider = "none",
|
|
36
|
+
inline = false,
|
|
37
|
+
width = "fill",
|
|
38
|
+
indicatorTone = "neutral",
|
|
19
39
|
action,
|
|
20
40
|
actionLabel,
|
|
21
41
|
actionIcon,
|
|
@@ -25,7 +45,8 @@ function ListHeader({
|
|
|
25
45
|
toggle = false,
|
|
26
46
|
placeholder = false,
|
|
27
47
|
rootAttributes = {},
|
|
28
|
-
triggerAttributes = {}
|
|
48
|
+
triggerAttributes = {},
|
|
49
|
+
slot
|
|
29
50
|
}) {
|
|
30
51
|
const extensionRootAttributes = filterDataAttributes(
|
|
31
52
|
rootAttributes,
|
|
@@ -38,9 +59,15 @@ function ListHeader({
|
|
|
38
59
|
const normalizedCount = typeof count === "number" && Number.isSafeInteger(count) && count >= 0 ? count : void 0;
|
|
39
60
|
const normalizedCountLabel = normalizedCount === void 0 ? void 0 : typeof countLabel === "string" && countLabel.trim() ? countLabel : String(normalizedCount);
|
|
40
61
|
const renderedBadge = normalizedCount === void 0 ? badge : void 0;
|
|
62
|
+
const renderedStatus = normalizedCount === void 0 ? status : void 0;
|
|
63
|
+
const hasBadge = Boolean(renderedBadge || renderedStatus);
|
|
41
64
|
const renderedActionIcon = actionIcon ?? (toggle ? /* @__PURE__ */ jsx(DisclosureArrow, { open: Boolean(expanded) }) : void 0);
|
|
42
65
|
const accessibleLabel = normalizedCount === void 0 ? void 0 : `${label}, ${normalizedCountLabel}`;
|
|
43
|
-
const
|
|
66
|
+
const badgeTone = indicatorTone === "accent" ? "info" : indicatorTone;
|
|
67
|
+
const indicator = normalizedCount !== void 0 ? /* @__PURE__ */ jsx(Badge, { size: "compact", tone: badgeTone, ariaHidden: !placeholder, children: placeholder ? /* @__PURE__ */ jsx(Skeleton, { width: em(1.75) }) : normalizedCount }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
68
|
+
renderedBadge && /* @__PURE__ */ jsx(Badge, { size: "compact", tone: badgeTone, children: placeholder ? /* @__PURE__ */ jsx(Skeleton, { width: em(1.75) }) : renderedBadge }),
|
|
69
|
+
renderedStatus && /* @__PURE__ */ jsx(Badge, { size: "compact", tone: badgeTone, children: placeholder ? /* @__PURE__ */ jsx(Skeleton, { width: em(1.75) }) : renderedStatus })
|
|
70
|
+
] });
|
|
44
71
|
const busy = placeholder ? "true" : void 0;
|
|
45
72
|
if (toggle) {
|
|
46
73
|
return /* @__PURE__ */ jsx(
|
|
@@ -49,11 +76,18 @@ function ListHeader({
|
|
|
49
76
|
...extensionRootAttributes,
|
|
50
77
|
class: "kui-list-header",
|
|
51
78
|
"data-component": "list-header",
|
|
52
|
-
"data-has-badge": String(
|
|
79
|
+
"data-has-badge": String(hasBadge),
|
|
53
80
|
"data-has-count": String(normalizedCount !== void 0),
|
|
81
|
+
"data-density": density,
|
|
82
|
+
"data-size": size,
|
|
83
|
+
"data-divider": divider,
|
|
84
|
+
"data-inline": String(inline),
|
|
85
|
+
"data-width": width,
|
|
86
|
+
"data-indicator-tone": indicatorTone,
|
|
54
87
|
"data-toggle": "true",
|
|
55
88
|
"data-placeholder": placeholder ? "true" : void 0,
|
|
56
89
|
"aria-busy": busy,
|
|
90
|
+
slot,
|
|
57
91
|
children: /* @__PURE__ */ jsxs(
|
|
58
92
|
"button",
|
|
59
93
|
{
|
|
@@ -63,10 +97,11 @@ function ListHeader({
|
|
|
63
97
|
"data-action": placeholder ? void 0 : action,
|
|
64
98
|
title: actionDisabled ? disabledReason : void 0,
|
|
65
99
|
disabled: actionDisabled || placeholder || void 0,
|
|
100
|
+
"data-kui-disabled": actionDisabled ? "true" : void 0,
|
|
66
101
|
"aria-label": accessibleLabel,
|
|
67
102
|
"aria-expanded": String(Boolean(expanded)),
|
|
68
103
|
children: [
|
|
69
|
-
/* @__PURE__ */ jsx(
|
|
104
|
+
/* @__PURE__ */ jsx(Text, { variant: "span", children: label }),
|
|
70
105
|
indicator,
|
|
71
106
|
renderedActionIcon && /* @__PURE__ */ jsx("span", { class: "kui-list-header__action-layer", children: renderedActionIcon })
|
|
72
107
|
]
|
|
@@ -81,14 +116,29 @@ function ListHeader({
|
|
|
81
116
|
...extensionRootAttributes,
|
|
82
117
|
class: "kui-list-header",
|
|
83
118
|
"data-component": "list-header",
|
|
84
|
-
"data-has-badge": String(
|
|
119
|
+
"data-has-badge": String(hasBadge),
|
|
85
120
|
"data-has-count": String(normalizedCount !== void 0),
|
|
121
|
+
"data-density": density,
|
|
122
|
+
"data-size": size,
|
|
123
|
+
"data-divider": divider,
|
|
124
|
+
"data-inline": String(inline),
|
|
125
|
+
"data-width": width,
|
|
126
|
+
"data-indicator-tone": indicatorTone,
|
|
86
127
|
"data-toggle": "false",
|
|
87
128
|
"data-placeholder": placeholder ? "true" : void 0,
|
|
88
129
|
"aria-busy": busy,
|
|
130
|
+
slot,
|
|
89
131
|
children: [
|
|
90
132
|
/* @__PURE__ */ jsxs("div", { class: "kui-list-header__title", children: [
|
|
91
|
-
/* @__PURE__ */ jsx(
|
|
133
|
+
/* @__PURE__ */ jsx(
|
|
134
|
+
Text,
|
|
135
|
+
{
|
|
136
|
+
variant: `h${headingLevel}`,
|
|
137
|
+
border: "none",
|
|
138
|
+
"aria-label": accessibleLabel,
|
|
139
|
+
children: label
|
|
140
|
+
}
|
|
141
|
+
),
|
|
92
142
|
indicator
|
|
93
143
|
] }),
|
|
94
144
|
action && /* @__PURE__ */ jsx(
|
|
@@ -101,6 +151,7 @@ function ListHeader({
|
|
|
101
151
|
"aria-label": actionLabel,
|
|
102
152
|
title: actionDisabled ? disabledReason : actionLabel,
|
|
103
153
|
disabled: actionDisabled || placeholder || void 0,
|
|
154
|
+
"data-kui-disabled": actionDisabled ? "true" : void 0,
|
|
104
155
|
children: renderedActionIcon
|
|
105
156
|
}
|
|
106
157
|
)
|
|
@@ -111,4 +162,4 @@ function ListHeader({
|
|
|
111
162
|
|
|
112
163
|
export { ListHeader };
|
|
113
164
|
|
|
114
|
-
//# sourceMappingURL=chunk-
|
|
165
|
+
//# sourceMappingURL=chunk-T4WJ5VGP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/collections/list-header/list-header.tsx"],"names":[],"mappings":"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","file":"chunk-T4WJ5VGP.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport {\n filterControlAttributes,\n filterDataAttributes,\n} from '../../../shared/dom/extension-attributes.js';\nimport { em } from '../../../shared/styles/css-values.js';\nimport type { SemanticTone } from '../../../shared/styles/semantic-tone.js';\nimport type { HeadingLevel } from '../../actions/toolbar-text/toolbar-text.js';\nimport { Badge } from '../../feedback/badge/badge.js';\nimport { Skeleton } from '../../feedback/skeleton/skeleton.js';\nimport { DisclosureArrow } from '../../navigation/disclosure-arrow/disclosure-arrow.js';\nimport { Text } from '../../typography/text/text.js';\n\nconst PROTECTED_ROOT_DATA_ATTRIBUTES = new Set([\n 'data-component',\n 'data-action',\n 'data-has-badge',\n 'data-has-count',\n 'data-density',\n 'data-size',\n 'data-divider',\n 'data-inline',\n 'data-width',\n 'data-indicator-tone',\n 'data-toggle',\n]);\nconst PROTECTED_TRIGGER_DATA_ATTRIBUTES = new Set([\n 'data-action',\n 'data-kui-disabled',\n]);\n\ntype ListHeaderRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-component'?: never;\n 'data-action'?: never;\n 'data-has-badge'?: never;\n 'data-has-count'?: never;\n 'data-density'?: never;\n 'data-size'?: never;\n 'data-divider'?: never;\n 'data-inline'?: never;\n 'data-width'?: never;\n 'data-indicator-tone'?: never;\n 'data-toggle'?: never;\n }\n>;\n\ntype ListHeaderTriggerAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-action'?: never;\n 'data-kui-disabled'?: never;\n popoverTarget?: string;\n popoverTargetAction?: 'toggle' | 'show' | 'hide';\n 'aria-controls'?: string;\n 'aria-haspopup'?: 'dialog' | 'menu' | 'listbox' | 'tree' | 'grid' | 'true';\n }\n>;\n\ninterface ListHeaderBaseProps {\n label: string;\n /** Visual label size, independent of the native heading level. Default `sm`. */\n size?: 'xs' | 'sm' | 'm' | 'l' | 'xl';\n density?: 'standard' | 'compact';\n divider?: 'none' | 'before' | 'after' | 'both';\n /** Shrink-wrap the header without its default outer margin, border, or padding. */\n inline?: boolean;\n /** Fill the available row or shrink-wrap while retaining normal header geometry. */\n width?: 'fill' | 'content';\n indicatorTone?: 'neutral' | 'accent' | 'pop' | 'danger';\n /** Render as an unanimated loading skeleton: keep the label and action affordance, disable interaction. */\n placeholder?: boolean;\n rootAttributes?: ListHeaderRootAttributes;\n triggerAttributes?: ListHeaderTriggerAttributes;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\ntype ListHeaderModeProps =\n | {\n /** Render the title as a controlled disclosure trigger. */\n toggle: true;\n /** A toggle's label is its button text, not a heading. */\n headingLevel?: never;\n action: string;\n expanded: boolean;\n actionIcon?: SafeHtml;\n actionLabel?: never;\n actionDisabled?: boolean;\n disabledReason?: string;\n }\n | {\n /** Render a separately named trailing action. */\n toggle?: false;\n /**\n * Native heading level (`h1`–`h6`) of the label. Default `2`. Match the\n * document outline; the visual treatment does not change.\n */\n headingLevel?: HeadingLevel;\n action: string;\n actionLabel: string;\n actionIcon: SafeHtml;\n expanded?: never;\n actionDisabled?: boolean;\n disabledReason?: string;\n }\n | {\n /** Render a passive section heading. */\n toggle?: false;\n /**\n * Native heading level (`h1`–`h6`) of the label. Default `2`. Match the\n * document outline; the visual treatment does not change.\n */\n headingLevel?: HeadingLevel;\n action?: never;\n actionLabel?: never;\n actionIcon?: never;\n expanded?: never;\n actionDisabled?: never;\n disabledReason?: never;\n };\n\ntype ListHeaderIndicatorProps =\n | { count: number; countLabel: string; badge?: never; status?: never }\n | {\n count?: never;\n countLabel?: never;\n badge?: SafeHtml | undefined;\n status?: SafeHtml | undefined;\n };\n\nexport type ListHeaderProps = ListHeaderBaseProps &\n ListHeaderIndicatorProps &\n ListHeaderModeProps;\n\nexport function ListHeader({\n label,\n size = 'sm',\n headingLevel = 2,\n count,\n countLabel,\n badge,\n status,\n density = 'standard',\n divider = 'none',\n inline = false,\n width = 'fill',\n indicatorTone = 'neutral',\n action,\n actionLabel,\n actionIcon,\n actionDisabled = false,\n disabledReason,\n expanded,\n toggle = false,\n placeholder = false,\n rootAttributes = {},\n triggerAttributes = {},\n slot,\n}: ListHeaderProps) {\n const extensionRootAttributes = filterDataAttributes(\n rootAttributes,\n PROTECTED_ROOT_DATA_ATTRIBUTES,\n );\n const extensionTriggerAttributes = filterControlAttributes(\n triggerAttributes,\n PROTECTED_TRIGGER_DATA_ATTRIBUTES,\n );\n const normalizedCount =\n typeof count === 'number' && Number.isSafeInteger(count) && count >= 0\n ? count\n : undefined;\n const normalizedCountLabel =\n normalizedCount === undefined\n ? undefined\n : typeof countLabel === 'string' && countLabel.trim()\n ? countLabel\n : String(normalizedCount);\n const renderedBadge = normalizedCount === undefined ? badge : undefined;\n const renderedStatus = normalizedCount === undefined ? status : undefined;\n const hasBadge = Boolean(renderedBadge || renderedStatus);\n const renderedActionIcon =\n actionIcon ??\n (toggle ? <DisclosureArrow open={Boolean(expanded)} /> : undefined);\n const accessibleLabel =\n normalizedCount === undefined\n ? undefined\n : `${label}, ${normalizedCountLabel}`;\n const badgeTone: SemanticTone =\n indicatorTone === 'accent' ? 'info' : indicatorTone;\n const indicator =\n normalizedCount !== undefined ? (\n <Badge size=\"compact\" tone={badgeTone} ariaHidden={!placeholder}>\n {placeholder ? <Skeleton width={em(1.75)} /> : normalizedCount}\n </Badge>\n ) : (\n <>\n {renderedBadge && (\n <Badge size=\"compact\" tone={badgeTone}>\n {placeholder ? <Skeleton width={em(1.75)} /> : renderedBadge}\n </Badge>\n )}\n {renderedStatus && (\n <Badge size=\"compact\" tone={badgeTone}>\n {placeholder ? <Skeleton width={em(1.75)} /> : renderedStatus}\n </Badge>\n )}\n </>\n );\n const busy = placeholder ? ('true' as const) : undefined;\n if (toggle) {\n return (\n <header\n {...extensionRootAttributes}\n class=\"kui-list-header\"\n data-component=\"list-header\"\n data-has-badge={String(hasBadge)}\n data-has-count={String(normalizedCount !== undefined)}\n data-density={density}\n data-size={size}\n data-divider={divider}\n data-inline={String(inline)}\n data-width={width}\n data-indicator-tone={indicatorTone}\n data-toggle=\"true\"\n data-placeholder={placeholder ? 'true' : undefined}\n aria-busy={busy}\n slot={slot}\n >\n <button\n {...extensionTriggerAttributes}\n type=\"button\"\n class=\"kui-list-header__title kui-list-header__toggle\"\n data-action={placeholder ? undefined : action}\n title={actionDisabled ? disabledReason : undefined}\n disabled={actionDisabled || placeholder || undefined}\n data-kui-disabled={actionDisabled ? 'true' : undefined}\n aria-label={accessibleLabel}\n aria-expanded={String(Boolean(expanded))}\n >\n <Text variant=\"span\">{label}</Text>\n {indicator}\n {renderedActionIcon && (\n <span class=\"kui-list-header__action-layer\">\n {renderedActionIcon}\n </span>\n )}\n </button>\n </header>\n );\n }\n return (\n <header\n {...extensionRootAttributes}\n class=\"kui-list-header\"\n data-component=\"list-header\"\n data-has-badge={String(hasBadge)}\n data-has-count={String(normalizedCount !== undefined)}\n data-density={density}\n data-size={size}\n data-divider={divider}\n data-inline={String(inline)}\n data-width={width}\n data-indicator-tone={indicatorTone}\n data-toggle=\"false\"\n data-placeholder={placeholder ? 'true' : undefined}\n aria-busy={busy}\n slot={slot}\n >\n <div class=\"kui-list-header__title\">\n <Text\n variant={`h${headingLevel}`}\n border=\"none\"\n aria-label={accessibleLabel}\n >\n {label}\n </Text>\n {indicator}\n </div>\n {action && (\n <button\n {...extensionTriggerAttributes}\n type=\"button\"\n class=\"kui-list-header__action\"\n data-action={placeholder ? undefined : action}\n aria-label={actionLabel}\n title={actionDisabled ? disabledReason : actionLabel}\n disabled={actionDisabled || placeholder || undefined}\n data-kui-disabled={actionDisabled ? 'true' : undefined}\n >\n {renderedActionIcon}\n </button>\n )}\n </header>\n );\n}\n"]}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
// src/integrations/webawesome/help-tags/install-help-tag.ts
|
|
2
|
+
var HELP_TAG_SHOW_DELAY = 500;
|
|
3
|
+
var HELP_TAG_WARM_WINDOW = 400;
|
|
4
|
+
var HELP_TAG_VIEWPORT_MARGIN = 8;
|
|
5
|
+
var LIFECYCLE_EVENTS = [
|
|
6
|
+
"wa-show",
|
|
7
|
+
"wa-after-show",
|
|
8
|
+
"wa-hide",
|
|
9
|
+
"wa-after-hide"
|
|
10
|
+
];
|
|
11
|
+
var installed = /* @__PURE__ */ new WeakSet();
|
|
12
|
+
function isFocusVisible(element) {
|
|
13
|
+
try {
|
|
14
|
+
return element.matches(":focus-visible");
|
|
15
|
+
} catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
var MENU_LABEL = ':scope > [slot="trigger"] .kui-popup-menu__label';
|
|
20
|
+
var isPlainControl = (host) => host.localName === "button" || host.localName === "a";
|
|
21
|
+
var words = (node) => node.textContent.replace(/\s+/g, " ").trim();
|
|
22
|
+
var ariaLabel = (control) => (control.getAttribute("aria-label") ?? "").replace(/\s+/g, " ").trim();
|
|
23
|
+
function isToolbarIconControl(target) {
|
|
24
|
+
if (!target.matches("button, a[href]")) return false;
|
|
25
|
+
if (!ariaLabel(target) || target.hasAttribute("title") || words(target))
|
|
26
|
+
return false;
|
|
27
|
+
if (!target.closest(".kui-toolbar-control-group, .kui-icon-toggle-button"))
|
|
28
|
+
return false;
|
|
29
|
+
return !(target.id && target.ownerDocument.querySelector(
|
|
30
|
+
`wa-tooltip[for="${CSS.escape(target.id)}"]`
|
|
31
|
+
));
|
|
32
|
+
}
|
|
33
|
+
function helpTagHost(path) {
|
|
34
|
+
for (const target of path) {
|
|
35
|
+
if (!(target instanceof HTMLElement)) continue;
|
|
36
|
+
if (isToolbarIconControl(target)) return target;
|
|
37
|
+
const { component, selectedPresentation } = target.dataset;
|
|
38
|
+
if (component === "select" && target.localName === "wa-select" && selectedPresentation === "icon-only")
|
|
39
|
+
return target;
|
|
40
|
+
if (component === "popup-menu" && target.querySelector(MENU_LABEL))
|
|
41
|
+
return target;
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
function anchorOf(host) {
|
|
46
|
+
if (isPlainControl(host)) return host;
|
|
47
|
+
if (host.dataset.component === "select")
|
|
48
|
+
return host.shadowRoot?.querySelector('[part~="combobox"]') ?? null;
|
|
49
|
+
return host.querySelector(':scope > [slot="trigger"]');
|
|
50
|
+
}
|
|
51
|
+
function helpText(host) {
|
|
52
|
+
if (isPlainControl(host)) return ariaLabel(host);
|
|
53
|
+
const label = host.querySelector(MENU_LABEL) ?? host.querySelector(':scope > [slot="label"]');
|
|
54
|
+
if (label) return words(label);
|
|
55
|
+
const name = host.getAttribute("label") ?? "";
|
|
56
|
+
const chosen = host.selectedOptions?.[0];
|
|
57
|
+
const choice = chosen ? chosen.label || words(chosen) : "";
|
|
58
|
+
return choice && choice !== name ? `${name}: ${choice}` : name;
|
|
59
|
+
}
|
|
60
|
+
function installHelpTags(doc = document, { focusVisible = isFocusVisible } = {}) {
|
|
61
|
+
if (installed.has(doc)) return;
|
|
62
|
+
installed.add(doc);
|
|
63
|
+
const tags = /* @__PURE__ */ new WeakMap();
|
|
64
|
+
let hovered = null;
|
|
65
|
+
let focused = null;
|
|
66
|
+
let shown = null;
|
|
67
|
+
let dismissed = null;
|
|
68
|
+
let timer;
|
|
69
|
+
let warmUntil = 0;
|
|
70
|
+
let layer = null;
|
|
71
|
+
const layerRoot = () => {
|
|
72
|
+
if (!layer) {
|
|
73
|
+
layer = doc.createElement("div");
|
|
74
|
+
layer.className = "kui-help-tag-layer";
|
|
75
|
+
layer.setAttribute("aria-hidden", "true");
|
|
76
|
+
layer.setAttribute("data-morph-skip", "");
|
|
77
|
+
Object.assign(layer.style, {
|
|
78
|
+
position: "fixed",
|
|
79
|
+
top: "0",
|
|
80
|
+
left: "0",
|
|
81
|
+
width: "0",
|
|
82
|
+
height: "0"
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
if (!layer.isConnected) doc.body.append(layer);
|
|
86
|
+
return layer;
|
|
87
|
+
};
|
|
88
|
+
const tagFor = (host) => {
|
|
89
|
+
const plain = isPlainControl(host);
|
|
90
|
+
const root = plain ? layerRoot() : host.shadowRoot;
|
|
91
|
+
if (!root) return null;
|
|
92
|
+
let tag = tags.get(host);
|
|
93
|
+
if (!tag) {
|
|
94
|
+
tag = doc.createElement("wa-tooltip");
|
|
95
|
+
tag.className = "kui-help-tag";
|
|
96
|
+
tag.setAttribute("aria-hidden", "true");
|
|
97
|
+
tag.setAttribute("trigger", "manual");
|
|
98
|
+
tag.setAttribute("placement", "bottom");
|
|
99
|
+
tag.style.pointerEvents = "none";
|
|
100
|
+
for (const type of LIFECYCLE_EVENTS)
|
|
101
|
+
tag.addEventListener(type, (event) => event.stopPropagation());
|
|
102
|
+
if (plain) {
|
|
103
|
+
const created = tag;
|
|
104
|
+
created.addEventListener("wa-after-hide", () => {
|
|
105
|
+
if (created.open) return;
|
|
106
|
+
created.remove();
|
|
107
|
+
tags.delete(host);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
root.append(tag);
|
|
111
|
+
tags.set(host, tag);
|
|
112
|
+
}
|
|
113
|
+
return tag;
|
|
114
|
+
};
|
|
115
|
+
const hide = (host) => {
|
|
116
|
+
if (shown?.host !== host) return;
|
|
117
|
+
shown.tag.open = false;
|
|
118
|
+
shown = null;
|
|
119
|
+
warmUntil = Date.now() + HELP_TAG_WARM_WINDOW;
|
|
120
|
+
};
|
|
121
|
+
const show = (host) => {
|
|
122
|
+
window.clearTimeout(timer);
|
|
123
|
+
timer = void 0;
|
|
124
|
+
if (host.open || dismissed === host || !host.isConnected) return;
|
|
125
|
+
const anchor = anchorOf(host);
|
|
126
|
+
const text = helpText(host);
|
|
127
|
+
if (!anchor || !text) return;
|
|
128
|
+
const tag = tagFor(host);
|
|
129
|
+
if (!tag) return;
|
|
130
|
+
if (shown) hide(shown.host);
|
|
131
|
+
if (anchor === host)
|
|
132
|
+
tag.style.colorScheme = window.getComputedStyle(host).colorScheme;
|
|
133
|
+
tag.anchor = anchor;
|
|
134
|
+
tag.textContent = text;
|
|
135
|
+
tag.open = true;
|
|
136
|
+
shown = { host, tag };
|
|
137
|
+
void tag.updateComplete.then(() => {
|
|
138
|
+
if (tag.anchor !== anchor) tag.anchor = anchor;
|
|
139
|
+
const popup = tag.shadowRoot?.querySelector("wa-popup");
|
|
140
|
+
if (popup) popup.shiftPadding = HELP_TAG_VIEWPORT_MARGIN;
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
const triggerHost = (event) => {
|
|
144
|
+
const path = event.composedPath();
|
|
145
|
+
const host = helpTagHost(path);
|
|
146
|
+
if (!host) return null;
|
|
147
|
+
const anchor = anchorOf(host);
|
|
148
|
+
return anchor && path.includes(anchor) ? host : null;
|
|
149
|
+
};
|
|
150
|
+
const leave = (host) => {
|
|
151
|
+
if (hovered !== host) {
|
|
152
|
+
window.clearTimeout(timer);
|
|
153
|
+
timer = void 0;
|
|
154
|
+
}
|
|
155
|
+
if (hovered !== host && focused !== host) hide(host);
|
|
156
|
+
};
|
|
157
|
+
const release = (host) => {
|
|
158
|
+
if (dismissed && dismissed !== host && !dismissed.open) dismissed = null;
|
|
159
|
+
};
|
|
160
|
+
doc.addEventListener(
|
|
161
|
+
"pointerover",
|
|
162
|
+
(event) => {
|
|
163
|
+
if (event.pointerType === "touch") return;
|
|
164
|
+
const host = triggerHost(event);
|
|
165
|
+
release(host);
|
|
166
|
+
if (host === hovered) return;
|
|
167
|
+
const previous = hovered;
|
|
168
|
+
hovered = host;
|
|
169
|
+
if (previous) leave(previous);
|
|
170
|
+
if (!host || host.open || dismissed === host || shown?.host === host)
|
|
171
|
+
return;
|
|
172
|
+
window.clearTimeout(timer);
|
|
173
|
+
if (Date.now() < warmUntil) show(host);
|
|
174
|
+
else timer = window.setTimeout(() => show(host), HELP_TAG_SHOW_DELAY);
|
|
175
|
+
},
|
|
176
|
+
true
|
|
177
|
+
);
|
|
178
|
+
doc.addEventListener(
|
|
179
|
+
"pointerout",
|
|
180
|
+
(event) => {
|
|
181
|
+
if (event.relatedTarget !== null || !hovered) return;
|
|
182
|
+
const previous = hovered;
|
|
183
|
+
hovered = null;
|
|
184
|
+
leave(previous);
|
|
185
|
+
},
|
|
186
|
+
true
|
|
187
|
+
);
|
|
188
|
+
const dismiss = (host) => {
|
|
189
|
+
dismissed = host;
|
|
190
|
+
hide(host);
|
|
191
|
+
};
|
|
192
|
+
doc.addEventListener(
|
|
193
|
+
"pointerdown",
|
|
194
|
+
(event) => {
|
|
195
|
+
const host = helpTagHost(event.composedPath());
|
|
196
|
+
if (host) dismiss(host);
|
|
197
|
+
},
|
|
198
|
+
true
|
|
199
|
+
);
|
|
200
|
+
doc.addEventListener(
|
|
201
|
+
"focusin",
|
|
202
|
+
(event) => {
|
|
203
|
+
const target = event.composedPath()[0];
|
|
204
|
+
const host = target instanceof Element && focusVisible(target) ? triggerHost(event) : null;
|
|
205
|
+
if (host === focused) return;
|
|
206
|
+
const previous = focused;
|
|
207
|
+
focused = host;
|
|
208
|
+
if (previous) leave(previous);
|
|
209
|
+
if (host && dismissed !== host) show(host);
|
|
210
|
+
},
|
|
211
|
+
true
|
|
212
|
+
);
|
|
213
|
+
doc.addEventListener(
|
|
214
|
+
"focusout",
|
|
215
|
+
(event) => {
|
|
216
|
+
const host = helpTagHost(event.composedPath());
|
|
217
|
+
const next = event.relatedTarget;
|
|
218
|
+
if (!host || next instanceof Node && host.contains(next)) return;
|
|
219
|
+
if (dismissed === host) dismissed = null;
|
|
220
|
+
if (host !== focused) return;
|
|
221
|
+
focused = null;
|
|
222
|
+
leave(host);
|
|
223
|
+
},
|
|
224
|
+
true
|
|
225
|
+
);
|
|
226
|
+
doc.addEventListener(
|
|
227
|
+
"keydown",
|
|
228
|
+
(event) => {
|
|
229
|
+
if (event.key === "Escape" && shown) dismiss(shown.host);
|
|
230
|
+
},
|
|
231
|
+
true
|
|
232
|
+
);
|
|
233
|
+
doc.addEventListener(
|
|
234
|
+
"wa-show",
|
|
235
|
+
(event) => {
|
|
236
|
+
const host = helpTagHost(event.composedPath());
|
|
237
|
+
if (host && event.composedPath()[0] === host) dismiss(host);
|
|
238
|
+
},
|
|
239
|
+
true
|
|
240
|
+
);
|
|
241
|
+
const refresh = (event) => {
|
|
242
|
+
const host = helpTagHost(event.composedPath());
|
|
243
|
+
if (shown && host === shown.host) shown.tag.textContent = helpText(host);
|
|
244
|
+
};
|
|
245
|
+
doc.addEventListener("change", refresh, true);
|
|
246
|
+
doc.addEventListener("input", refresh, true);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
export { installHelpTags };
|
|
250
|
+
|
|
251
|
+
//# sourceMappingURL=chunk-TDMHA7C3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/integrations/webawesome/help-tags/install-help-tag.ts"],"names":[],"mappings":"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","file":"chunk-TDMHA7C3.js","sourcesContent":["// Hover and keyboard-focus help tags for icon-only controls.\n//\n// An icon-only `Select` (single `selectedPresentation=\"icon-only\"` or the\n// multiple `triggerIcon` filter), an icon-only `PopupMenu` (a `label` instead\n// of visible `text`), and an icon-only `<button>` or link inside a\n// `ToolbarControlGroup` (named only by `aria-label`) carry their purpose — and\n// a Select its current choice — only in the accessible name. Sighted pointer\n// and keyboard users see just the icon, so the registration boundary shows a\n// Web Awesome `wa-tooltip` naming the control (Apple HIG \"help tag\"):\n//\n// - after a short hover delay, or immediately when a previous tag just closed\n// (moving along a toolbar), and at once on keyboard (`:focus-visible`) focus;\n// - never while the control's popup is open, and not again after a press or\n// Escape until the pointer or focus leaves and returns;\n// - with the same text the accessible name already announces, so the tag is\n// `aria-hidden` and never joins the control's `aria-labelledby` (a manual\n// trigger with a programmatic anchor, not `for`, so Web Awesome does not\n// add it) — assistive technology hears the name once.\n//\n// A Select's or PopupMenu's tag lives in the control's open shadow root, so\n// the morph never sees it, `:has([open])` selectors on the light DOM ignore\n// it, and it inherits the control's theme. A plain button cannot host a shadow\n// root, so its tag lives in one body-level layer (re-attached if a body morph\n// drops it, and removed again once hidden) and copies the button's\n// `color-scheme`; the tag's Popover-API popup renders in the top layer, so its\n// place in the document does not affect where or above what it shows. A\n// button that already has a native `title`, or a Web Awesome tooltip `for` it,\n// keeps that and gets no second tag. Each tag's own lifecycle events stop at\n// the tag so an application listening for the control's `wa-show` / `wa-hide`\n// never hears the tag's.\n\n/** Hover delay before a help tag appears. */\nexport const HELP_TAG_SHOW_DELAY = 500;\n/** After a tag closes, a neighboring trigger shows its tag at once for this long. */\nexport const HELP_TAG_WARM_WINDOW = 400;\n/** A tag shifted inward stays this far from the viewport edge. */\nexport const HELP_TAG_VIEWPORT_MARGIN = 8;\n\ninterface HelpTagHost extends HTMLElement {\n open?: boolean;\n selectedOptions?: readonly (HTMLElement & { label?: string })[];\n}\n\ninterface HelpTag extends HTMLElement {\n open: boolean;\n readonly updateComplete: Promise<unknown>;\n anchor: Element | null;\n trigger: string;\n placement: string;\n}\n\nexport interface HelpTagOptions {\n /** Whether a newly focused element shows keyboard focus. */\n focusVisible?: (element: Element) => boolean;\n}\n\nconst LIFECYCLE_EVENTS = [\n 'wa-show',\n 'wa-after-show',\n 'wa-hide',\n 'wa-after-hide',\n] as const;\n\nconst installed = new WeakSet<Document>();\n\nfunction isFocusVisible(element: Element): boolean {\n try {\n return element.matches(':focus-visible');\n } catch {\n return false;\n }\n}\n\nconst MENU_LABEL = ':scope > [slot=\"trigger\"] .kui-popup-menu__label';\n\n/** A plain control (not a Web Awesome popup host) gets a body-layer tag. */\nconst isPlainControl = (host: HelpTagHost): boolean =>\n host.localName === 'button' || host.localName === 'a';\n\n/** An element's text with whitespace collapsed (an element's is never null). */\nconst words = (node: Element): string =>\n (node.textContent as string).replace(/\\s+/g, ' ').trim();\n\n/** The trimmed `aria-label` of a plain control. */\nconst ariaLabel = (control: Element): string =>\n (control.getAttribute('aria-label') ?? '').replace(/\\s+/g, ' ').trim();\n\n/**\n * An icon-only toolbar button or link (inside a `ToolbarControlGroup`) or an\n * `IconToggleButton`: named by `aria-label`, with no visible text, and without\n * a native `title` or a Web Awesome tooltip of its own that a second tag would\n * duplicate.\n */\nfunction isToolbarIconControl(target: HTMLElement): boolean {\n if (!target.matches('button, a[href]')) return false;\n if (!ariaLabel(target) || target.hasAttribute('title') || words(target))\n return false;\n if (!target.closest('.kui-toolbar-control-group, .kui-icon-toggle-button'))\n return false;\n return !(\n target.id &&\n target.ownerDocument.querySelector(\n `wa-tooltip[for=\"${CSS.escape(target.id)}\"]`,\n )\n );\n}\n\n/** The icon-only Kerf control on an event path, if any. */\nfunction helpTagHost(path: readonly EventTarget[]): HelpTagHost | null {\n for (const target of path) {\n if (!(target instanceof HTMLElement)) continue;\n if (isToolbarIconControl(target)) return target;\n const { component, selectedPresentation } = target.dataset;\n if (\n component === 'select' &&\n target.localName === 'wa-select' &&\n selectedPresentation === 'icon-only'\n )\n return target;\n if (component === 'popup-menu' && target.querySelector(MENU_LABEL))\n return target;\n }\n return null;\n}\n\n/** The visible trigger the tag describes and anchors to. */\nfunction anchorOf(host: HelpTagHost): Element | null {\n if (isPlainControl(host)) return host;\n if (host.dataset.component === 'select')\n return host.shadowRoot?.querySelector('[part~=\"combobox\"]') ?? null;\n return host.querySelector(':scope > [slot=\"trigger\"]');\n}\n\n/** The tag text: the same words as the trigger's accessible name. */\nfunction helpText(host: HelpTagHost): string {\n if (isPlainControl(host)) return ariaLabel(host);\n // An icon-only PopupMenu's visually hidden label, or a multiple icon\n // trigger's label slot (it already ends with the chosen labels).\n const label =\n host.querySelector(MENU_LABEL) ??\n host.querySelector(':scope > [slot=\"label\"]');\n if (label) return words(label);\n const name = host.getAttribute('label') ?? '';\n const chosen = host.selectedOptions?.[0];\n const choice = chosen ? chosen.label || words(chosen) : '';\n return choice && choice !== name ? `${name}: ${choice}` : name;\n}\n\n/**\n * Install once at an explicit registration boundary. Idempotent per document.\n */\nexport function installHelpTags(\n doc: Document = document,\n { focusVisible = isFocusVisible }: HelpTagOptions = {},\n): void {\n if (installed.has(doc)) return;\n installed.add(doc);\n const tags = new WeakMap<HelpTagHost, HelpTag>();\n let hovered: HelpTagHost | null = null;\n let focused: HelpTagHost | null = null;\n // The trigger whose tag is open, with that tag.\n let shown: { host: HelpTagHost; tag: HelpTag } | null = null;\n // A press, Escape, or an opened popup suppresses that trigger's tag.\n let dismissed: HelpTagHost | null = null;\n let timer: number | undefined;\n let warmUntil = 0;\n let layer: HTMLElement | null = null;\n\n // The body-level home of plain controls' tags. Its fixed, zero-size box\n // keeps it out of a grid or flex body's flow; a body morph that drops it is\n // repaired on the next show.\n const layerRoot = (): HTMLElement => {\n if (!layer) {\n layer = doc.createElement('div');\n layer.className = 'kui-help-tag-layer';\n layer.setAttribute('aria-hidden', 'true');\n layer.setAttribute('data-morph-skip', '');\n Object.assign(layer.style, {\n position: 'fixed',\n top: '0',\n left: '0',\n width: '0',\n height: '0',\n });\n }\n if (!layer.isConnected) doc.body.append(layer);\n return layer;\n };\n\n const tagFor = (host: HelpTagHost): HelpTag | null => {\n const plain = isPlainControl(host);\n const root = plain ? layerRoot() : host.shadowRoot;\n if (!root) return null;\n let tag = tags.get(host);\n if (!tag) {\n tag = doc.createElement('wa-tooltip') as HelpTag;\n tag.className = 'kui-help-tag';\n tag.setAttribute('aria-hidden', 'true');\n tag.setAttribute('trigger', 'manual');\n tag.setAttribute('placement', 'bottom');\n tag.style.pointerEvents = 'none';\n for (const type of LIFECYCLE_EVENTS)\n tag.addEventListener(type, (event) => event.stopPropagation());\n if (plain) {\n // A hidden button tag leaves the layer, so tags for buttons that a\n // re-render replaced never accumulate there.\n const created = tag;\n created.addEventListener('wa-after-hide', () => {\n if (created.open) return;\n created.remove();\n tags.delete(host);\n });\n }\n root.append(tag);\n tags.set(host, tag);\n }\n return tag;\n };\n\n const hide = (host: HelpTagHost) => {\n if (shown?.host !== host) return;\n shown.tag.open = false;\n shown = null;\n warmUntil = Date.now() + HELP_TAG_WARM_WINDOW;\n };\n\n const show = (host: HelpTagHost) => {\n window.clearTimeout(timer);\n timer = undefined;\n if (host.open || dismissed === host || !host.isConnected) return;\n const anchor = anchorOf(host);\n const text = helpText(host);\n if (!anchor || !text) return;\n const tag = tagFor(host);\n if (!tag) return;\n if (shown) hide(shown.host);\n // A body-layer tag takes its button's light or dark scheme, which a\n // subtree theme (`.wa-dark`) may set below the document root.\n if (anchor === host)\n tag.style.colorScheme = window.getComputedStyle(host).colorScheme;\n tag.anchor = anchor;\n tag.textContent = text;\n tag.open = true;\n shown = { host, tag };\n // A new tag's first update resets `anchor` from its (null) `for`. Its\n // popup also keeps the standard 8px clear of the viewport edge when it\n // shifts a long tag inward (Web Awesome's tooltip leaves this at 0).\n void tag.updateComplete.then(() => {\n if (tag.anchor !== anchor) tag.anchor = anchor;\n const popup = tag.shadowRoot?.querySelector<\n HTMLElement & { shiftPadding: number }\n >('wa-popup');\n if (popup) popup.shiftPadding = HELP_TAG_VIEWPORT_MARGIN;\n });\n };\n\n /** The tagged host whose trigger (not its popup) is on the path. */\n const triggerHost = (event: Event): HelpTagHost | null => {\n const path = event.composedPath();\n const host = helpTagHost(path);\n if (!host) return null;\n const anchor = anchorOf(host);\n return anchor && path.includes(anchor) ? host : null;\n };\n\n // A pending hover belongs to the hovered trigger; a tag stays while either\n // the pointer or keyboard focus is still on its trigger.\n const leave = (host: HelpTagHost) => {\n if (hovered !== host) {\n window.clearTimeout(timer);\n timer = undefined;\n }\n if (hovered !== host && focused !== host) hide(host);\n };\n\n // A press, Escape, or an opened popup dismisses a trigger's tag until the\n // pointer moves onto something else while the popup is closed, or focus\n // leaves the control.\n const release = (host: HelpTagHost | null) => {\n if (dismissed && dismissed !== host && !dismissed.open) dismissed = null;\n };\n\n doc.addEventListener(\n 'pointerover',\n (event) => {\n if ((event as PointerEvent).pointerType === 'touch') return;\n const host = triggerHost(event);\n release(host);\n if (host === hovered) return;\n const previous = hovered;\n hovered = host;\n if (previous) leave(previous);\n if (!host || host.open || dismissed === host || shown?.host === host)\n return;\n window.clearTimeout(timer);\n if (Date.now() < warmUntil) show(host);\n else timer = window.setTimeout(() => show(host), HELP_TAG_SHOW_DELAY);\n },\n true,\n );\n\n doc.addEventListener(\n 'pointerout',\n (event) => {\n // Leaving the window: nothing new is hovered.\n if ((event as PointerEvent).relatedTarget !== null || !hovered) return;\n const previous = hovered;\n hovered = null;\n leave(previous);\n },\n true,\n );\n\n // A pending hover show for this host re-checks the dismissal and no-ops.\n const dismiss = (host: HelpTagHost) => {\n dismissed = host;\n hide(host);\n };\n\n doc.addEventListener(\n 'pointerdown',\n (event) => {\n const host = helpTagHost(event.composedPath());\n if (host) dismiss(host);\n },\n true,\n );\n\n doc.addEventListener(\n 'focusin',\n (event) => {\n // Only keyboard focus (`:focus-visible`) shows a tag; a click focuses\n // the trigger without one.\n const target = event.composedPath()[0];\n const host =\n target instanceof Element && focusVisible(target)\n ? triggerHost(event)\n : null;\n if (host === focused) return;\n const previous = focused;\n focused = host;\n if (previous) leave(previous);\n if (host && dismissed !== host) show(host);\n },\n true,\n );\n\n doc.addEventListener(\n 'focusout',\n (event) => {\n const host = helpTagHost(event.composedPath());\n // Focus moving within the control (into its popup and back) is handled\n // by focusin; only focus leaving the control ends a dismissal.\n const next = (event as FocusEvent).relatedTarget;\n if (!host || (next instanceof Node && host.contains(next))) return;\n if (dismissed === host) dismissed = null;\n if (host !== focused) return;\n focused = null;\n leave(host);\n },\n true,\n );\n\n doc.addEventListener(\n 'keydown',\n (event) => {\n if (event.key === 'Escape' && shown) dismiss(shown.host);\n },\n true,\n );\n\n // Opening the popup hides the tag: the menu itself now shows the choices.\n doc.addEventListener(\n 'wa-show',\n (event) => {\n const host = helpTagHost(event.composedPath());\n if (host && event.composedPath()[0] === host) dismiss(host);\n },\n true,\n );\n\n // Keep a visible tag's text in step with the selection.\n const refresh = (event: Event) => {\n const host = helpTagHost(event.composedPath());\n if (shown && host === shown.host) shown.tag.textContent = helpText(host);\n };\n doc.addEventListener('change', refresh, true);\n doc.addEventListener('input', refresh, true);\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Skeleton } from './chunk-CVD5IZGB.js';
|
|
2
|
+
import { em } from './chunk-IQSRHXZR.js';
|
|
3
|
+
import { filterDataAttributes } from './chunk-KH4KEMSP.js';
|
|
3
4
|
import { jsxs, jsx } from 'kerfjs/jsx-runtime';
|
|
4
5
|
|
|
5
6
|
var PROTECTED_ROOT_DATA_ATTRIBUTES = /* @__PURE__ */ new Set([
|
|
@@ -8,7 +9,11 @@ var PROTECTED_ROOT_DATA_ATTRIBUTES = /* @__PURE__ */ new Set([
|
|
|
8
9
|
"data-tab-id",
|
|
9
10
|
"data-selected",
|
|
10
11
|
"data-tab-dragging",
|
|
11
|
-
"data-tab-drop-position"
|
|
12
|
+
"data-tab-drop-position",
|
|
13
|
+
"data-attention",
|
|
14
|
+
"data-drop-target",
|
|
15
|
+
"data-name-overflow",
|
|
16
|
+
"data-pinned"
|
|
12
17
|
]);
|
|
13
18
|
function CloseIcon() {
|
|
14
19
|
return /* @__PURE__ */ jsxs(
|
|
@@ -31,20 +36,31 @@ function AppTab({
|
|
|
31
36
|
id,
|
|
32
37
|
name,
|
|
33
38
|
selected = false,
|
|
39
|
+
attention = false,
|
|
40
|
+
dropTarget = false,
|
|
41
|
+
pinned = false,
|
|
34
42
|
closable = true,
|
|
35
43
|
draggable = false,
|
|
36
44
|
leading,
|
|
37
45
|
trailing,
|
|
46
|
+
presentation = "pill",
|
|
47
|
+
size = "default",
|
|
48
|
+
labelMaxWidth,
|
|
49
|
+
nameOverflow = "ellipsis",
|
|
38
50
|
closeIcon,
|
|
39
51
|
selectAction = "select-tab",
|
|
40
52
|
closeAction = "close-tab",
|
|
41
53
|
className = "",
|
|
42
54
|
placeholder = false,
|
|
43
|
-
|
|
55
|
+
pending = false,
|
|
56
|
+
rootAttributes = {},
|
|
57
|
+
slot
|
|
44
58
|
}) {
|
|
59
|
+
const dormant = placeholder || pending;
|
|
60
|
+
const named = pending && !placeholder;
|
|
45
61
|
const keyshortcuts = [
|
|
46
|
-
closable ? "Delete Backspace" : "",
|
|
47
|
-
draggable ? "Alt+Shift+ArrowLeft Alt+Shift+ArrowRight" : ""
|
|
62
|
+
closable && !dormant ? "Delete Backspace" : "",
|
|
63
|
+
draggable && !dormant ? "Alt+Shift+ArrowLeft Alt+Shift+ArrowRight" : ""
|
|
48
64
|
].filter(Boolean).join(" ");
|
|
49
65
|
const extensionAttributes = filterDataAttributes(
|
|
50
66
|
rootAttributes,
|
|
@@ -58,9 +74,18 @@ function AppTab({
|
|
|
58
74
|
"data-component": "app-tab",
|
|
59
75
|
"data-tab-id": id,
|
|
60
76
|
"data-selected": String(selected),
|
|
77
|
+
"data-attention": attention ? "true" : void 0,
|
|
78
|
+
"data-drop-target": dropTarget ? "true" : void 0,
|
|
79
|
+
"data-pinned": pinned ? "true" : void 0,
|
|
80
|
+
"data-name-overflow": nameOverflow,
|
|
81
|
+
"data-presentation": presentation,
|
|
82
|
+
"data-size": size,
|
|
61
83
|
"data-placeholder": placeholder ? "true" : void 0,
|
|
62
|
-
|
|
63
|
-
"
|
|
84
|
+
"data-pending": named ? "true" : void 0,
|
|
85
|
+
draggable: dormant ? "false" : draggable ? "true" : "false",
|
|
86
|
+
"aria-busy": dormant ? "true" : void 0,
|
|
87
|
+
style: labelMaxWidth === void 0 ? void 0 : `--kui-app-tab-label-max-width:${labelMaxWidth}px`,
|
|
88
|
+
slot,
|
|
64
89
|
children: [
|
|
65
90
|
closable && /* @__PURE__ */ jsx(
|
|
66
91
|
"button",
|
|
@@ -68,9 +93,9 @@ function AppTab({
|
|
|
68
93
|
type: "button",
|
|
69
94
|
tabindex: "-1",
|
|
70
95
|
class: "kui-app-tab__close",
|
|
71
|
-
"data-action":
|
|
96
|
+
"data-action": dormant ? void 0 : closeAction,
|
|
72
97
|
"data-tab-id": id,
|
|
73
|
-
disabled:
|
|
98
|
+
disabled: dormant || void 0,
|
|
74
99
|
"aria-label": `Close ${name}`,
|
|
75
100
|
title: `Close ${name}`,
|
|
76
101
|
children: /* @__PURE__ */ jsx("span", { class: "kui-app-tab__close-icon", "aria-hidden": "true", children: closeIcon ?? /* @__PURE__ */ jsx(CloseIcon, {}) })
|
|
@@ -83,14 +108,22 @@ function AppTab({
|
|
|
83
108
|
class: "kui-app-tab__select",
|
|
84
109
|
role: "tab",
|
|
85
110
|
"aria-selected": String(selected),
|
|
86
|
-
"aria-
|
|
111
|
+
"aria-label": presentation === "icon-only" || named ? name : void 0,
|
|
112
|
+
"aria-keyshortcuts": keyshortcuts || void 0,
|
|
87
113
|
"data-action": placeholder ? void 0 : selectAction,
|
|
88
114
|
"data-tab-id": id,
|
|
89
115
|
disabled: placeholder || void 0,
|
|
90
|
-
tabindex: placeholder
|
|
116
|
+
tabindex: !placeholder && selected ? "0" : "-1",
|
|
91
117
|
children: [
|
|
92
118
|
leading,
|
|
93
|
-
/* @__PURE__ */ jsx(
|
|
119
|
+
/* @__PURE__ */ jsx(
|
|
120
|
+
"span",
|
|
121
|
+
{
|
|
122
|
+
class: "kui-app-tab__name",
|
|
123
|
+
"aria-hidden": presentation === "icon-only" ? "true" : void 0,
|
|
124
|
+
children: placeholder ? /* @__PURE__ */ jsx(Skeleton, { width: em(7) }) : name
|
|
125
|
+
}
|
|
126
|
+
),
|
|
94
127
|
closable || trailing ? /* @__PURE__ */ jsx("span", { class: "kui-app-tab__trailing", children: trailing }) : void 0
|
|
95
128
|
]
|
|
96
129
|
}
|
|
@@ -102,4 +135,4 @@ function AppTab({
|
|
|
102
135
|
|
|
103
136
|
export { AppTab };
|
|
104
137
|
|
|
105
|
-
//# sourceMappingURL=chunk-
|
|
138
|
+
//# sourceMappingURL=chunk-TGLUDQP2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/navigation/app-tab/app-tab.tsx"],"names":[],"mappings":"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","file":"chunk-TGLUDQP2.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport type { KerfUiContent } from '../../../shared/content/semantic-content.js';\nimport { filterDataAttributes } from '../../../shared/dom/extension-attributes.js';\nimport { em } from '../../../shared/styles/css-values.js';\nimport { Skeleton } from '../../feedback/skeleton/skeleton.js';\n\nconst PROTECTED_ROOT_DATA_ATTRIBUTES = new Set([\n 'data-component',\n 'data-action',\n 'data-tab-id',\n 'data-selected',\n 'data-tab-dragging',\n 'data-tab-drop-position',\n 'data-attention',\n 'data-drop-target',\n 'data-name-overflow',\n 'data-pinned',\n]);\n\ntype AppTabRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-component'?: never;\n 'data-action'?: never;\n 'data-tab-id'?: never;\n 'data-selected'?: never;\n 'data-tab-dragging'?: never;\n 'data-tab-drop-position'?: never;\n 'data-attention'?: never;\n 'data-drop-target'?: never;\n 'data-name-overflow'?: never;\n 'data-pinned'?: never;\n }\n>;\n\nexport type AppTabPresentation = 'pill' | 'segmented' | 'icon-only';\nexport type AppTabSize = 'default' | 'compact';\nexport type AppTabNameOverflow = 'ellipsis' | 'visible';\n\nexport interface AppTabProps {\n id: string;\n name: string;\n selected?: boolean;\n /** Emphasize the visible tab name with the attention color token. */\n attention?: boolean;\n /** Highlight this tab as the target of a drag over its content. */\n dropTarget?: boolean;\n /** Keep the leading tab visible within its TabBar tablist while peers scroll. */\n pinned?: boolean;\n closable?: boolean;\n draggable?: boolean;\n leading?: KerfUiContent;\n trailing?: KerfUiContent;\n /** Visual treatment within a TabBar. Icon-only tabs retain `name` as their accessible name. */\n presentation?: AppTabPresentation;\n /** Compact tabs use the 32px application-rail height. */\n size?: AppTabSize;\n /** Maximum visible label width in CSS pixels before ellipsis. */\n labelMaxWidth?: number;\n /** Keep the full name visible for an inline loading treatment. */\n nameOverflow?: AppTabNameOverflow;\n /** Decorative dormant content for the close button. Must not contain interactive descendants. */\n closeIcon?: SafeHtml;\n selectAction?: string;\n closeAction?: string;\n className?: string;\n /** Render as an unanimated loading skeleton, disabling select/close and dragging. */\n placeholder?: boolean;\n /**\n * Named and still opening: the tab is known but its content is loading.\n * Keeps `name` visible in the quiet text color and as the tab's accessible\n * name, shows `trailing` (for example a `LoadingSpinner`), and marks the\n * tab `aria-busy`. Unlike `placeholder` it stays selectable — the\n * application shows placeholder content in its panel until loading\n * completes — while close and dragging stay disabled. Same pill geometry\n * as the live tab, so swapping it in place does not shift the bar.\n * `placeholder` wins when both are set.\n */\n pending?: boolean;\n rootAttributes?: AppTabRootAttributes;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\nfunction CloseIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.25\"\n stroke-linecap=\"round\"\n >\n <path d=\"m7 7 10 10\" />\n <path d=\"M17 7 7 17\" />\n </svg>\n );\n}\n\nexport function AppTab({\n id,\n name,\n selected = false,\n attention = false,\n dropTarget = false,\n pinned = false,\n closable = true,\n draggable = false,\n leading,\n trailing,\n presentation = 'pill',\n size = 'default',\n labelMaxWidth,\n nameOverflow = 'ellipsis',\n closeIcon,\n selectAction = 'select-tab',\n closeAction = 'close-tab',\n className = '',\n placeholder = false,\n pending = false,\n rootAttributes = {},\n slot,\n}: AppTabProps) {\n // Both loading states disable close and dragging; a `placeholder` (unknown\n // tab) is also unselectable and hides its name, while a `pending` (known,\n // still opening) tab stays selectable so its panel can show placeholders.\n const dormant = placeholder || pending;\n const named = pending && !placeholder;\n const keyshortcuts = [\n closable && !dormant ? 'Delete Backspace' : '',\n draggable && !dormant ? 'Alt+Shift+ArrowLeft Alt+Shift+ArrowRight' : '',\n ]\n .filter(Boolean)\n .join(' ');\n const extensionAttributes = filterDataAttributes(\n rootAttributes,\n PROTECTED_ROOT_DATA_ATTRIBUTES,\n );\n return (\n <div\n {...extensionAttributes}\n class={`kui-app-tab ${className}`.trim()}\n data-component=\"app-tab\"\n data-tab-id={id}\n data-selected={String(selected)}\n data-attention={attention ? 'true' : undefined}\n data-drop-target={dropTarget ? 'true' : undefined}\n data-pinned={pinned ? 'true' : undefined}\n data-name-overflow={nameOverflow}\n data-presentation={presentation}\n data-size={size}\n data-placeholder={placeholder ? 'true' : undefined}\n data-pending={named ? 'true' : undefined}\n draggable={dormant ? 'false' : draggable ? 'true' : 'false'}\n aria-busy={dormant ? 'true' : undefined}\n style={\n labelMaxWidth === undefined\n ? undefined\n : `--kui-app-tab-label-max-width:${labelMaxWidth}px`\n }\n slot={slot}\n >\n {closable && (\n <button\n type=\"button\"\n tabindex=\"-1\"\n class=\"kui-app-tab__close\"\n data-action={dormant ? undefined : closeAction}\n data-tab-id={id}\n disabled={dormant || undefined}\n aria-label={`Close ${name}`}\n title={`Close ${name}`}\n >\n <span class=\"kui-app-tab__close-icon\" aria-hidden=\"true\">\n {closeIcon ?? <CloseIcon />}\n </span>\n </button>\n )}\n <button\n type=\"button\"\n class=\"kui-app-tab__select\"\n role=\"tab\"\n aria-selected={String(selected)}\n aria-label={presentation === 'icon-only' || named ? name : undefined}\n aria-keyshortcuts={keyshortcuts || undefined}\n data-action={placeholder ? undefined : selectAction}\n data-tab-id={id}\n disabled={placeholder || undefined}\n tabindex={!placeholder && selected ? '0' : '-1'}\n >\n {leading}\n <span\n class=\"kui-app-tab__name\"\n aria-hidden={presentation === 'icon-only' ? 'true' : undefined}\n >\n {placeholder ? <Skeleton width={em(7)} /> : name}\n </span>\n {closable || trailing ? (\n <span class=\"kui-app-tab__trailing\">{trailing}</span>\n ) : undefined}\n </button>\n </div>\n );\n}\n"]}
|