@kerfjs/ui 5.0.0-beta.10 → 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 +630 -132
- package/ai/application-ui-diagnostic-ids-v1.json +114 -0
- package/ai/application-ui-profile-sync.cjs +548 -0
- package/ai/application-ui-profile.d.mts +1 -0
- package/ai/application-ui-profile.d.ts +106 -0
- package/ai/application-ui-profile.defaults.json +96 -0
- package/ai/application-ui-profile.mjs +653 -0
- package/ai/application-ui-profile.schema.json +140 -0
- package/ai/catalog-authoring.json +34 -0
- package/ai/catalog-authoring.schema.json +105 -0
- package/ai/compile-time-contracts-v1.json +149 -0
- package/ai/compile-time-contracts-v1.schema.json +52 -0
- package/ai/component-catalog-extension.schema.json +104 -0
- package/ai/component-catalog.json +6401 -931
- package/ai/component-catalog.schema.json +94 -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-composition-rules.json +551 -0
- 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 +4261 -459
- package/ai/skill.md +441 -63
- package/ai/webawesome-jsx-signatures-v1.md +9 -2
- package/analyzer/cli.mjs +49 -0
- package/analyzer/component-ownership.d.mts +72 -0
- package/analyzer/component-ownership.mjs +429 -0
- package/analyzer/index.d.mts +53 -0
- package/analyzer/index.mjs +2375 -0
- package/analyzer/loud-pairs.d.mts +49 -0
- package/analyzer/loud-pairs.mjs +357 -0
- package/analyzer/report.schema.json +66 -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/floating-toolbar.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-inset-control.js +3 -0
- package/dist/browser/list-inset-text.js +3 -0
- package/dist/browser/list-item.js +1 -0
- package/dist/browser/list.js +3 -0
- package/dist/browser/nav-stack.js +11 -0
- package/dist/browser/pane.js +3 -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/sunken-panel.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 +50 -0
- package/dist/catalog-resources.js +22 -0
- package/dist/catalog-resources.js.map +1 -0
- package/dist/catalog.d.ts +134 -101
- package/dist/catalog.js +668 -105
- 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-56RJXPHG.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-AN5IWMTM.js +24 -0
- 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-B53PS2LE.js +34 -0
- 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-CVD5IZGB.js +66 -0
- 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-DZJ4GBSP.js +59 -0
- 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-INI4WDWC.js +125 -0
- 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-JOR5LGYE.js +55 -0
- 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-KH4KEMSP.js +71 -0
- 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-MF6ZUUJZ.js +300 -0
- 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-YGN7OMLT.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-S3ECMF23.js +33 -0
- 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-T4WJ5VGP.js +165 -0
- 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-TGLUDQP2.js +138 -0
- 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 +132 -14
- 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 +34 -6
- 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 +51 -0
- package/dist/floating-toolbar.js +3 -0
- package/dist/floating-toolbar.js.map +1 -0
- 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 +63 -17
- package/dist/index.js +66 -23
- package/dist/list-action-row.d.ts +69 -12
- package/dist/list-action-row.js +5 -1
- package/dist/list-header.d.ts +65 -10
- package/dist/list-header.js +4 -1
- package/dist/list-icon-tile-B8dr97OW.d.ts +18 -0
- package/dist/list-inset-control.d.ts +22 -0
- package/dist/list-inset-control.js +3 -0
- package/dist/list-inset-control.js.map +1 -0
- package/dist/list-inset-text.d.ts +30 -0
- package/dist/list-inset-text.js +4 -0
- package/dist/list-inset-text.js.map +1 -0
- package/dist/list-item.d.ts +49 -5
- package/dist/list-item.js +4 -1
- package/dist/list.d.ts +128 -0
- package/dist/list.js +7 -0
- package/dist/list.js.map +1 -0
- 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 +153 -0
- package/dist/pane.js +5 -0
- package/dist/pane.js.map +1 -0
- 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 +12 -9
- 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 +103 -8
- 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 +149 -10
- package/dist/split-view.js.map +1 -1
- package/dist/state-banner.d.ts +41 -7
- 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 -498
- 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 +119 -0
- package/dist/styles/foundation.css +261 -45
- 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 +3 -41
- package/dist/styles/list-action-row.css +324 -18
- package/dist/styles/list-header.css +128 -59
- package/dist/styles/list-inset-control.css +30 -0
- package/dist/styles/list-inset-text.css +29 -0
- package/dist/styles/list-item.css +371 -33
- package/dist/styles/list.css +250 -0
- 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 +382 -0
- 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 +36 -9
- package/dist/styles/select.css +338 -21
- 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 +146 -22
- package/dist/styles/styles.css +23 -1
- package/dist/styles/summary-row.css +161 -0
- package/dist/styles/sunken-panel.css +31 -0
- 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 +894 -36
- package/dist/styles/toolbar-text.css +236 -7
- package/dist/styles/toolbar.css +393 -11
- package/dist/styles/value-table.css +115 -7
- package/dist/styles/webawesome.css +410 -17
- 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 +38 -0
- package/dist/sunken-panel.js +4 -0
- package/dist/sunken-panel.js.map +1 -0
- 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 +33 -7
- 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 -43
- 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 +96 -7
- package/dist/toolbar-control-group.js +3 -1
- package/dist/toolbar-text.d.ts +58 -9
- package/dist/toolbar-text.js +2 -1
- package/dist/toolbar.d.ts +71 -7
- 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 +111 -5
- package/dist/wire-catalog.js +302 -14
- 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 +326 -15
- 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 +159 -45
- package/dist/wire-sidebar.js.map +1 -1
- package/dist/wire-tab-bars.d.ts +6 -2
- 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 +28 -10
- 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 -15
- package/dist/workbench.js.map +1 -1
- package/docs/accessibility.md +640 -33
- 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 +565 -63
- package/docs/collapsible-panel.md +308 -25
- package/docs/component-contract.md +816 -53
- package/docs/component-integration.md +75 -0
- package/docs/component-selection.md +962 -99
- 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 -0
- package/docs/design/templates/empty-state/filtered.svg +1 -0
- package/docs/design/templates/empty-state/with-action-dark.svg +1 -0
- package/docs/design/templates/empty-state/with-action.svg +1 -0
- package/docs/design/templates/empty-state-dark.svg +1 -0
- package/docs/design/templates/empty-state.svg +1 -0
- package/docs/design/templates/list/compact-dark.svg +1 -0
- package/docs/design/templates/list/compact.svg +1 -0
- package/docs/design/templates/list/stack-dark.svg +1 -0
- package/docs/design/templates/list/stack.svg +1 -0
- package/docs/design/templates/list-action-row/default-dark.svg +1 -0
- package/docs/design/templates/list-action-row/default.svg +1 -0
- package/docs/design/templates/list-action-row/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 -0
- package/docs/design/templates/list-action-row/selected.svg +1 -0
- 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 -0
- package/docs/design/templates/list-action-row.svg +1 -0
- package/docs/design/templates/list-dark.svg +1 -0
- package/docs/design/templates/list-header/action-dark.svg +1 -0
- package/docs/design/templates/list-header/action.svg +1 -0
- package/docs/design/templates/list-header/count-dark.svg +1 -0
- package/docs/design/templates/list-header/count.svg +1 -0
- package/docs/design/templates/list-header/inline-action-dark.svg +1 -0
- package/docs/design/templates/list-header/inline-action.svg +1 -0
- package/docs/design/templates/list-header/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 -0
- package/docs/design/templates/list-header/toggle-collapsed.svg +1 -0
- package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -0
- package/docs/design/templates/list-header/toggle-expanded.svg +1 -0
- package/docs/design/templates/list-header-dark.svg +1 -0
- package/docs/design/templates/list-header.svg +1 -0
- package/docs/design/templates/list-item/default-dark.svg +1 -0
- package/docs/design/templates/list-item/default.svg +1 -0
- package/docs/design/templates/list-item/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 -0
- package/docs/design/templates/list-item/multiline.svg +1 -0
- package/docs/design/templates/list-item/selected-dark.svg +1 -0
- package/docs/design/templates/list-item/selected.svg +1 -0
- package/docs/design/templates/list-item/trailing-dark.svg +1 -0
- package/docs/design/templates/list-item/trailing.svg +1 -0
- package/docs/design/templates/list-item-dark.svg +1 -0
- package/docs/design/templates/list-item.svg +1 -0
- package/docs/design/templates/list.svg +1 -0
- package/docs/design/templates/segmented-control/equal-dark.svg +1 -0
- package/docs/design/templates/segmented-control/equal.svg +1 -0
- package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -0
- package/docs/design/templates/segmented-control/pill-small.svg +1 -0
- package/docs/design/templates/segmented-control-dark.svg +1 -0
- package/docs/design/templates/segmented-control.svg +1 -0
- package/docs/design/templates/skeleton/avatar-dark.svg +1 -0
- package/docs/design/templates/skeleton/avatar.svg +1 -0
- package/docs/design/templates/skeleton/block-dark.svg +1 -0
- package/docs/design/templates/skeleton/block.svg +1 -0
- package/docs/design/templates/skeleton/lines-dark.svg +1 -0
- package/docs/design/templates/skeleton/lines.svg +1 -0
- package/docs/design/templates/skeleton-dark.svg +1 -0
- package/docs/design/templates/skeleton.svg +1 -0
- package/docs/design/templates/state-banner/danger-dark.svg +1 -0
- package/docs/design/templates/state-banner/danger.svg +1 -0
- package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
- package/docs/design/templates/state-banner/info-badge.svg +1 -0
- package/docs/design/templates/state-banner/info-dark.svg +1 -0
- package/docs/design/templates/state-banner/info.svg +1 -0
- package/docs/design/templates/state-banner/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 -0
- package/docs/design/templates/state-banner/success.svg +1 -0
- package/docs/design/templates/state-banner/warning-dark.svg +1 -0
- package/docs/design/templates/state-banner/warning.svg +1 -0
- package/docs/design/templates/state-banner-dark.svg +1 -0
- package/docs/design/templates/state-banner.svg +1 -0
- package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -0
- package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -0
- package/docs/design/templates/tab-bar-dark.svg +1 -0
- package/docs/design/templates/tab-bar.svg +1 -0
- package/docs/design/templates/token-search-field/empty-dark.svg +1 -0
- package/docs/design/templates/token-search-field/empty.svg +1 -0
- package/docs/design/templates/token-search-field/tokens-dark.svg +1 -0
- package/docs/design/templates/token-search-field/tokens.svg +1 -0
- package/docs/design/templates/token-search-field-dark.svg +1 -0
- package/docs/design/templates/token-search-field.svg +1 -0
- package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -0
- package/docs/design/templates/toolbar/title-and-actions.svg +1 -0
- package/docs/design/templates/toolbar/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 -11
- package/docs/design/templates/toolbar-control-group.svg +1 -11
- package/docs/design/templates/toolbar-dark.svg +1 -0
- 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 -0
- package/docs/design/templates/toolbar-text/default.svg +1 -0
- package/docs/design/templates/toolbar-text/large-dark.svg +1 -0
- package/docs/design/templates/toolbar-text/large.svg +1 -0
- package/docs/design/templates/toolbar-text/small-dark.svg +1 -0
- package/docs/design/templates/toolbar-text/small.svg +1 -0
- package/docs/design/templates/toolbar-text-dark.svg +1 -0
- package/docs/design/templates/toolbar-text.svg +1 -0
- package/docs/design/templates/toolbar.svg +1 -0
- package/docs/design/templates/value-table/details-dark.svg +1 -0
- package/docs/design/templates/value-table/details.svg +1 -0
- package/docs/design/templates/value-table-dark.svg +1 -0
- package/docs/design/templates/value-table.svg +1 -0
- package/docs/design/templates.md +75 -18
- package/docs/design-philosophy.md +65 -20
- package/docs/device-class.md +10 -9
- package/docs/document-baseline.md +93 -0
- package/docs/examples/application-ui-profile.json +60 -0
- package/docs/examples/command-palette-adapter.tsx +69 -17
- package/docs/examples/component-catalog-extension.json +52 -0
- package/docs/examples/component-composition-extension.json +80 -0
- package/docs/layout.md +796 -53
- package/docs/nav-stack.md +287 -14
- package/docs/recipes.md +129 -73
- package/docs/split-view.md +96 -7
- package/docs/sunken-panel.md +106 -0
- package/docs/surface-scaffold.md +270 -0
- package/docs/tab-navigator.md +255 -0
- package/docs/type-contracts.md +137 -0
- package/docs/ui-analyzer.md +406 -0
- package/docs/ui-doctor.md +281 -0
- package/docs/ui-evaluator.md +139 -0
- package/docs/ux-demo.md +48 -17
- package/docs/webawesome-theme.md +215 -16
- package/docs/workbench.md +627 -12
- package/docs/writing.md +152 -0
- package/doctor/cli.mjs +120 -0
- package/doctor/component-style-checks.mjs +457 -0
- package/doctor/config.schema.json +94 -0
- package/doctor/copy-capitalization-checks.mjs +591 -0
- package/doctor/eslint-diagnostics.d.mts +24 -0
- package/doctor/eslint-diagnostics.mjs +24 -0
- package/doctor/index.d.mts +122 -0
- package/doctor/index.mjs +1424 -0
- package/doctor/report.schema.json +118 -0
- package/evaluator/cli.mjs +89 -0
- package/evaluator/index.d.mts +90 -0
- package/evaluator/index.mjs +1203 -0
- package/evaluator/report.schema.json +152 -0
- package/llms.txt +770 -50
- package/package.json +345 -27
- package/scripts/component-catalog-extension-validation.mjs +28 -0
- package/traversal-exclusions.mjs +86 -0
- package/ux-demo/recipes/app-shell.tsx +204 -16
- package/ux-demo/recipes/collapsible-sidebar.tsx +206 -45
- package/ux-demo/recipes/compact-toolbar.tsx +135 -14
- package/ux-demo/recipes/composer-form.tsx +133 -21
- package/ux-demo/recipes/list-detail-dialog.tsx +255 -14
- package/ux-demo/recipes/list-workspace-states.tsx +183 -11
- package/ux-demo/recipes/loaders.ts +9 -3
- package/ux-demo/recipes/loading-inspector.tsx +162 -39
- package/ux-demo/recipes/mount-recipe.ts +26 -10
- package/ux-demo/recipes/navigation-sidebar.tsx +137 -11
- package/ux-demo/recipes/navigation-stack.tsx +79 -24
- package/ux-demo/recipes/types.ts +17 -2
- package/ux-demo/recipes/workspace-header.tsx +86 -5
- package/vite-ux-review.d.mts +83 -0
- package/vite-ux-review.mjs +120 -0
- package/dist/browser/panel-header.js +0 -7
- package/dist/chunk-2Z5TWHKQ.js +0 -34
- package/dist/chunk-2Z5TWHKQ.js.map +0 -1
- package/dist/chunk-37T3VNIZ.js +0 -19
- package/dist/chunk-37T3VNIZ.js.map +0 -1
- package/dist/chunk-55DATV3A.js +0 -10
- package/dist/chunk-55DATV3A.js.map +0 -1
- package/dist/chunk-56RJXPHG.js.map +0 -1
- package/dist/chunk-7BR3DO2A.js +0 -31
- package/dist/chunk-7BR3DO2A.js.map +0 -1
- package/dist/chunk-7JB7VPRI.js +0 -34
- package/dist/chunk-7JB7VPRI.js.map +0 -1
- package/dist/chunk-7LDCTU7D.js +0 -134
- package/dist/chunk-7LDCTU7D.js.map +0 -1
- package/dist/chunk-AQNKJRFH.js +0 -79
- package/dist/chunk-AQNKJRFH.js.map +0 -1
- package/dist/chunk-AVZHJN6C.js +0 -14
- package/dist/chunk-AVZHJN6C.js.map +0 -1
- package/dist/chunk-B24C4A6T.js +0 -22
- package/dist/chunk-B24C4A6T.js.map +0 -1
- package/dist/chunk-BLK3UEEI.js +0 -23
- package/dist/chunk-BLK3UEEI.js.map +0 -1
- package/dist/chunk-CVZYNJJ5.js +0 -265
- package/dist/chunk-CVZYNJJ5.js.map +0 -1
- package/dist/chunk-DAFFDO33.js +0 -14
- package/dist/chunk-DAFFDO33.js.map +0 -1
- package/dist/chunk-I7INRJO4.js +0 -17
- package/dist/chunk-I7INRJO4.js.map +0 -1
- package/dist/chunk-L4OKFDJY.js +0 -24
- package/dist/chunk-L4OKFDJY.js.map +0 -1
- package/dist/chunk-LC3YSAZC.js +0 -39
- package/dist/chunk-LC3YSAZC.js.map +0 -1
- package/dist/chunk-M5JRI6MN.js +0 -27
- package/dist/chunk-M5JRI6MN.js.map +0 -1
- package/dist/chunk-MFKMHK5W.js +0 -10
- package/dist/chunk-MFKMHK5W.js.map +0 -1
- package/dist/chunk-RUNWEPR4.js +0 -10
- package/dist/chunk-RUNWEPR4.js.map +0 -1
- package/dist/chunk-W2FK7ZNY.js +0 -26
- package/dist/chunk-W2FK7ZNY.js.map +0 -1
- package/dist/chunk-W5EQ3HYQ.js +0 -42
- package/dist/chunk-W5EQ3HYQ.js.map +0 -1
- package/dist/chunk-WVPYVDXY.js +0 -15
- package/dist/chunk-WVPYVDXY.js.map +0 -1
- package/dist/chunk-XXMOARTH.js +0 -229
- package/dist/chunk-XXMOARTH.js.map +0 -1
- package/dist/chunk-Y5MRDTLC.js +0 -20
- package/dist/chunk-Y5MRDTLC.js.map +0 -1
- package/dist/chunk-YGN7OMLT.js.map +0 -1
- package/dist/panel-header.d.ts +0 -36
- 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 -16
- package/dist/tab-scaffold.js.map +0 -1
- package/dist/wire-tab-scaffold.d.ts +0 -11
- package/dist/wire-tab-scaffold.js +0 -16
- 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 -13
- package/docs/design/templates/panel-header.svg +0 -13
- package/docs/tab-scaffold.md +0 -41
- package/ux-demo/recipes/recipes.css +0 -448
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Selector parsing shared by the package stylesheet ownership check
|
|
3
|
+
* (`scripts/lib/css-ownership.mjs`, `npm run check:css-ownership`) and the
|
|
4
|
+
* downstream component-ownership diagnostics in `kerf-ui-analyze`
|
|
5
|
+
* (`component-ownership.mjs`). Pure string work over one selector list: no
|
|
6
|
+
* PostCSS, no filesystem. One copy means the package rule and the consumer
|
|
7
|
+
* rule agree on which compound a selector styles.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export function ownsClass(rootClass, candidate) {
|
|
11
|
+
return (
|
|
12
|
+
candidate === rootClass ||
|
|
13
|
+
candidate.startsWith(`${rootClass}__`) ||
|
|
14
|
+
candidate.startsWith(`${rootClass}--`)
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Split a selector list into its complex selectors, and each complex selector
|
|
20
|
+
* into compounds, ignoring commas and combinators nested inside parentheses,
|
|
21
|
+
* attribute brackets, or quotes. Each compound records the combinator that
|
|
22
|
+
* joins it to the previous one (`''` for the first).
|
|
23
|
+
*/
|
|
24
|
+
export function complexSelectorParts(selectorList) {
|
|
25
|
+
const selectors = [];
|
|
26
|
+
let compounds = [];
|
|
27
|
+
let current = '';
|
|
28
|
+
let combinator = '';
|
|
29
|
+
let pending = '';
|
|
30
|
+
let depth = 0;
|
|
31
|
+
let quote = null;
|
|
32
|
+
const endCompound = () => {
|
|
33
|
+
if (current.trim()) {
|
|
34
|
+
compounds.push({ combinator, compound: current.trim() });
|
|
35
|
+
combinator = '';
|
|
36
|
+
}
|
|
37
|
+
current = '';
|
|
38
|
+
};
|
|
39
|
+
for (const char of selectorList) {
|
|
40
|
+
if (quote) {
|
|
41
|
+
current += char;
|
|
42
|
+
if (char === quote) quote = null;
|
|
43
|
+
} else if (char === '"' || char === "'") {
|
|
44
|
+
quote = char;
|
|
45
|
+
current += char;
|
|
46
|
+
} else if (char === '(' || char === '[') {
|
|
47
|
+
depth += 1;
|
|
48
|
+
current += char;
|
|
49
|
+
} else if (char === ')' || char === ']') {
|
|
50
|
+
depth -= 1;
|
|
51
|
+
current += char;
|
|
52
|
+
} else if (depth === 0 && char === ',') {
|
|
53
|
+
endCompound();
|
|
54
|
+
selectors.push(compounds);
|
|
55
|
+
compounds = [];
|
|
56
|
+
pending = '';
|
|
57
|
+
} else if (depth === 0 && /[\s>+~]/.test(char)) {
|
|
58
|
+
const hadCompound = current.trim() !== '';
|
|
59
|
+
endCompound();
|
|
60
|
+
if (/[>+~]/.test(char)) pending = char;
|
|
61
|
+
else if (!pending && (hadCompound || compounds.length > 0)) pending = ' ';
|
|
62
|
+
} else {
|
|
63
|
+
if (!current && compounds.length > 0) {
|
|
64
|
+
combinator = pending || ' ';
|
|
65
|
+
pending = '';
|
|
66
|
+
}
|
|
67
|
+
current += char;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
endCompound();
|
|
71
|
+
selectors.push(compounds);
|
|
72
|
+
return selectors;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Complex selectors as arrays of compound strings. */
|
|
76
|
+
export function complexSelectors(selectorList) {
|
|
77
|
+
return complexSelectorParts(selectorList).map((parts) =>
|
|
78
|
+
parts.map(({ compound }) => compound),
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export function kuiClasses(selector) {
|
|
83
|
+
return [...selector.matchAll(/\.((?:kui)-[a-z0-9_-]+)/gi)].map(
|
|
84
|
+
([, name]) => name,
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Every class name a selector names, in any namespace. */
|
|
89
|
+
export function classNames(selector) {
|
|
90
|
+
return [...selector.matchAll(/\.(-?[_a-zA-Z][_a-zA-Z0-9-]*)/g)].map(
|
|
91
|
+
([, name]) => name,
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function dataComponents(selector) {
|
|
96
|
+
return [
|
|
97
|
+
...selector.matchAll(
|
|
98
|
+
/\[data-component\s*=\s*["']?([a-z0-9-]+)["']?\s*\]/gi,
|
|
99
|
+
),
|
|
100
|
+
].map(([, name]) => name);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Remove the arguments of every pseudo-class named in `names` from a
|
|
105
|
+
* compound, keeping the empty call.
|
|
106
|
+
*/
|
|
107
|
+
export function withoutPseudoArguments(compound, names) {
|
|
108
|
+
const opener = new RegExp(`^:(?:${names.join('|')})\\(`, 'i');
|
|
109
|
+
let result = '';
|
|
110
|
+
let skipDepth = 0;
|
|
111
|
+
for (let index = 0; index < compound.length; index += 1) {
|
|
112
|
+
if (skipDepth === 0) {
|
|
113
|
+
const match = opener.exec(compound.slice(index));
|
|
114
|
+
if (match) {
|
|
115
|
+
result += match[0];
|
|
116
|
+
skipDepth = 1;
|
|
117
|
+
index += match[0].length - 1;
|
|
118
|
+
} else result += compound[index];
|
|
119
|
+
} else if (compound[index] === '(') skipDepth += 1;
|
|
120
|
+
else if (compound[index] === ')') {
|
|
121
|
+
skipDepth -= 1;
|
|
122
|
+
if (skipDepth === 0) result += ')';
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Remove the arguments of every `:has()` and `:not()` in a compound. A parent
|
|
130
|
+
* may key its own styles on a composed child's state
|
|
131
|
+
* (`:has(> .kui-select[open])`) or exclude a kerf child it does not own
|
|
132
|
+
* (`wa-dropdown:not(.kui-popup-menu)`): neither styles that child.
|
|
133
|
+
*/
|
|
134
|
+
export function withoutRelationalArguments(compound) {
|
|
135
|
+
return withoutPseudoArguments(compound, ['has', 'not']);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** The top-level arguments of each `:name(...)` call in a compound. */
|
|
139
|
+
export function pseudoArguments(compound, name) {
|
|
140
|
+
const args = [];
|
|
141
|
+
const opener = new RegExp(`:${name}\\(`, 'gi');
|
|
142
|
+
for (const match of compound.matchAll(opener)) {
|
|
143
|
+
let depth = 1;
|
|
144
|
+
let index = match.index + match[0].length;
|
|
145
|
+
const start = index;
|
|
146
|
+
for (; index < compound.length && depth > 0; index += 1) {
|
|
147
|
+
if (compound[index] === '(') depth += 1;
|
|
148
|
+
else if (compound[index] === ')') depth -= 1;
|
|
149
|
+
}
|
|
150
|
+
args.push(compound.slice(start, index - 1));
|
|
151
|
+
}
|
|
152
|
+
return args;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export function splitTopLevel(list) {
|
|
156
|
+
const parts = [];
|
|
157
|
+
let depth = 0;
|
|
158
|
+
let current = '';
|
|
159
|
+
for (const char of list) {
|
|
160
|
+
if (char === '(' || char === '[') depth += 1;
|
|
161
|
+
else if (char === ')' || char === ']') depth -= 1;
|
|
162
|
+
if (char === ',' && depth === 0) {
|
|
163
|
+
parts.push(current.trim());
|
|
164
|
+
current = '';
|
|
165
|
+
} else current += char;
|
|
166
|
+
}
|
|
167
|
+
if (current.trim()) parts.push(current.trim());
|
|
168
|
+
return parts;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* The element types a subject compound can match: its own type selector and
|
|
173
|
+
* the subject types inside its `:is()` / `:where()` arguments. `null` means the
|
|
174
|
+
* compound places no type constraint (universal).
|
|
175
|
+
*/
|
|
176
|
+
export function subjectTypes(compound) {
|
|
177
|
+
const bare = withoutPseudoArguments(compound, [
|
|
178
|
+
'has',
|
|
179
|
+
'not',
|
|
180
|
+
'is',
|
|
181
|
+
'where',
|
|
182
|
+
'part',
|
|
183
|
+
'nth-child',
|
|
184
|
+
'nth-last-child',
|
|
185
|
+
'nth-of-type',
|
|
186
|
+
'nth-last-of-type',
|
|
187
|
+
]);
|
|
188
|
+
const own = /^([a-z][a-z0-9-]*)/i.exec(bare);
|
|
189
|
+
if (own) return [own[1].toLowerCase()];
|
|
190
|
+
const types = [];
|
|
191
|
+
for (const name of ['is', 'where']) {
|
|
192
|
+
for (const args of pseudoArguments(
|
|
193
|
+
withoutRelationalArguments(compound),
|
|
194
|
+
name,
|
|
195
|
+
)) {
|
|
196
|
+
for (const arg of splitTopLevel(args)) {
|
|
197
|
+
const parts = complexSelectors(arg)[0] ?? [];
|
|
198
|
+
const last = parts.at(-1);
|
|
199
|
+
if (!last) return null;
|
|
200
|
+
const inner = subjectTypes(last);
|
|
201
|
+
if (inner === null) {
|
|
202
|
+
// A class-only argument constrains nothing by type, but it names an
|
|
203
|
+
// element that must carry that class.
|
|
204
|
+
if (kuiClasses(withoutRelationalArguments(last)).length > 0) continue;
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
types.push(...inner);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return types.length > 0 ? types : null;
|
|
212
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { resolve } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
|
|
7
|
+
import { projectConsumerCatalog } from './catalog-projection.mjs';
|
|
8
|
+
|
|
9
|
+
const usage =
|
|
10
|
+
'Usage: kerf-catalog-demo --extension <catalog.json> --out <catalog.generated.ts> --repo-base <blob-url> [--kerf-catalog <catalog.json>] [--category <name>] [--source-template <path>] [--demo-template <path>] [--documentation-template <path>] [--design-template <path>] (--write|--check)';
|
|
11
|
+
|
|
12
|
+
function parseArgs(argv) {
|
|
13
|
+
const options = {};
|
|
14
|
+
const values = new Map([
|
|
15
|
+
['--extension', 'extension'],
|
|
16
|
+
['--out', 'out'],
|
|
17
|
+
['--repo-base', 'repoBase'],
|
|
18
|
+
['--kerf-catalog', 'kerfCatalog'],
|
|
19
|
+
['--category', 'category'],
|
|
20
|
+
['--source-template', 'sourceTemplate'],
|
|
21
|
+
['--demo-template', 'demoTemplate'],
|
|
22
|
+
['--documentation-template', 'documentationTemplate'],
|
|
23
|
+
['--design-template', 'designTemplate'],
|
|
24
|
+
]);
|
|
25
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
26
|
+
const arg = argv[index];
|
|
27
|
+
if (arg === '--check' || arg === '--write') {
|
|
28
|
+
if (options.mode)
|
|
29
|
+
throw new Error('Choose exactly one of --write or --check');
|
|
30
|
+
options.mode = arg;
|
|
31
|
+
} else if (values.has(arg)) {
|
|
32
|
+
const value = argv[++index];
|
|
33
|
+
if (!value || value.startsWith('--'))
|
|
34
|
+
throw new Error(`${arg} needs a value`);
|
|
35
|
+
options[values.get(arg)] = value;
|
|
36
|
+
} else {
|
|
37
|
+
throw new Error(`Unknown option ${arg}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (!options.mode || !options.extension || !options.out || !options.repoBase)
|
|
41
|
+
throw new Error(usage);
|
|
42
|
+
if (!/^https?:\/\//.test(options.repoBase))
|
|
43
|
+
throw new Error('--repo-base must be an HTTP(S) URL');
|
|
44
|
+
return options;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function renderConsumerCatalog(rows, repoBase) {
|
|
48
|
+
const base = repoBase.endsWith('/') ? repoBase : `${repoBase}/`;
|
|
49
|
+
return (
|
|
50
|
+
'// Generated by kerf-catalog-demo. Do not edit.\n' +
|
|
51
|
+
`export const catalogRepositoryBlobUrl = ${JSON.stringify(base)} as const;\n` +
|
|
52
|
+
`export const generatedConsumerCatalog = ${JSON.stringify(rows, null, 2)} as const;\n`
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export async function runCatalogProjection(argv) {
|
|
57
|
+
const options = parseArgs(argv);
|
|
58
|
+
const extension = JSON.parse(
|
|
59
|
+
await readFile(resolve(options.extension), 'utf8'),
|
|
60
|
+
);
|
|
61
|
+
const kerfCatalog = JSON.parse(
|
|
62
|
+
await readFile(
|
|
63
|
+
options.kerfCatalog
|
|
64
|
+
? resolve(options.kerfCatalog)
|
|
65
|
+
: new URL('./ai/component-catalog.json', import.meta.url),
|
|
66
|
+
'utf8',
|
|
67
|
+
),
|
|
68
|
+
);
|
|
69
|
+
const rows = projectConsumerCatalog(extension, kerfCatalog, options);
|
|
70
|
+
const output = renderConsumerCatalog(rows, options.repoBase);
|
|
71
|
+
const outputPath = resolve(options.out);
|
|
72
|
+
if (options.mode === '--write') {
|
|
73
|
+
await writeFile(outputPath, output);
|
|
74
|
+
process.stdout.write(`Wrote ${outputPath}\n`);
|
|
75
|
+
} else {
|
|
76
|
+
let current;
|
|
77
|
+
try {
|
|
78
|
+
current = await readFile(outputPath, 'utf8');
|
|
79
|
+
} catch {
|
|
80
|
+
// A missing generated file is the same drift as stale content.
|
|
81
|
+
}
|
|
82
|
+
if (current !== output)
|
|
83
|
+
throw new Error(`${outputPath} is stale; run kerf-catalog-demo --write`);
|
|
84
|
+
process.stdout.write(`${outputPath} is in sync.\n`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (
|
|
89
|
+
process.argv[1] &&
|
|
90
|
+
resolve(process.argv[1]) === fileURLToPath(import.meta.url)
|
|
91
|
+
) {
|
|
92
|
+
runCatalogProjection(process.argv.slice(2)).catch((error) => {
|
|
93
|
+
process.stderr.write(`kerf-catalog-demo: ${error.message}\n`);
|
|
94
|
+
process.exitCode = 1;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export interface CatalogProjectionRow {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
category: string;
|
|
5
|
+
kind: string;
|
|
6
|
+
source: string;
|
|
7
|
+
description: string;
|
|
8
|
+
recommendation?: string;
|
|
9
|
+
uses: readonly string[];
|
|
10
|
+
demoSource: string;
|
|
11
|
+
componentSource?: string;
|
|
12
|
+
designTemplate?: string;
|
|
13
|
+
documentation?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface CatalogProjectionEntry {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
kind: string;
|
|
20
|
+
purpose: string;
|
|
21
|
+
category?: string;
|
|
22
|
+
source?: string;
|
|
23
|
+
demoSource?: string;
|
|
24
|
+
documentation?: string;
|
|
25
|
+
recommendation?: string;
|
|
26
|
+
uses?: string[];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface CatalogProjectionOptions {
|
|
30
|
+
identity?: (entry: CatalogProjectionEntry) => string;
|
|
31
|
+
category?: (entry: CatalogProjectionEntry) => string;
|
|
32
|
+
componentSource?: (entry: CatalogProjectionEntry) => string | undefined;
|
|
33
|
+
demoSource?: (entry: CatalogProjectionEntry) => string | undefined;
|
|
34
|
+
documentation?: (entry: CatalogProjectionEntry) => string | undefined;
|
|
35
|
+
designTemplate?: (entry: CatalogProjectionEntry) => string | undefined;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface ConsumerProjectionOptions {
|
|
39
|
+
category?: string;
|
|
40
|
+
sourceTemplate?: string;
|
|
41
|
+
demoTemplate?: string;
|
|
42
|
+
documentationTemplate?: string;
|
|
43
|
+
designTemplate?: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function projectCatalogEntries(
|
|
47
|
+
entries: readonly CatalogProjectionEntry[],
|
|
48
|
+
options?: CatalogProjectionOptions,
|
|
49
|
+
): CatalogProjectionRow[];
|
|
50
|
+
|
|
51
|
+
export function projectConsumerCatalog(
|
|
52
|
+
extension: { package: string; entries: CatalogProjectionEntry[] },
|
|
53
|
+
kerfCatalog: { entries: { id: string }[] },
|
|
54
|
+
options?: ConsumerProjectionOptions,
|
|
55
|
+
): CatalogProjectionRow[];
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isRepositoryPath,
|
|
3
|
+
validateCatalogExtensionReferences,
|
|
4
|
+
} from './scripts/component-catalog-extension-validation.mjs';
|
|
5
|
+
|
|
6
|
+
const substitute = (template, entry, packageName) =>
|
|
7
|
+
template.replace(/\{(id|name|kind|package)\}/g, (_, field) =>
|
|
8
|
+
field === 'package' ? packageName : entry[field],
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
/** Project catalog entries into the row shape used by a UX demo. */
|
|
12
|
+
export function projectCatalogEntries(entries, options = {}) {
|
|
13
|
+
return entries.map((entry) => {
|
|
14
|
+
const componentSource = options.componentSource?.(entry);
|
|
15
|
+
const designTemplate = options.designTemplate?.(entry);
|
|
16
|
+
return {
|
|
17
|
+
id: entry.id,
|
|
18
|
+
name: entry.name,
|
|
19
|
+
category: options.category?.(entry) ?? entry.category ?? 'Application',
|
|
20
|
+
kind: entry.kind,
|
|
21
|
+
source: options.identity?.(entry) ?? entry.source ?? 'consumer',
|
|
22
|
+
description: entry.purpose,
|
|
23
|
+
...(entry.recommendation ? { recommendation: entry.recommendation } : {}),
|
|
24
|
+
uses: entry.uses ?? [],
|
|
25
|
+
demoSource: options.demoSource?.(entry) ?? entry.demoSource,
|
|
26
|
+
...(componentSource ? { componentSource } : {}),
|
|
27
|
+
...(designTemplate ? { designTemplate } : {}),
|
|
28
|
+
documentation: options.documentation?.(entry) ?? entry.documentation,
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Project a validated consumer extension alongside Kerf's reference catalog. */
|
|
34
|
+
export function projectConsumerCatalog(extension, kerfCatalog, options = {}) {
|
|
35
|
+
const failures = validateCatalogExtensionReferences(extension, kerfCatalog);
|
|
36
|
+
if (failures.length) throw new Error(failures.join('\n'));
|
|
37
|
+
const fill = (template, entry) =>
|
|
38
|
+
template ? substitute(template, entry, extension.package) : undefined;
|
|
39
|
+
const rows = projectCatalogEntries(extension.entries, {
|
|
40
|
+
identity: () => 'consumer',
|
|
41
|
+
category: () => options.category ?? 'Application',
|
|
42
|
+
componentSource: (entry) =>
|
|
43
|
+
entry.source ?? fill(options.sourceTemplate, entry),
|
|
44
|
+
demoSource: (entry) =>
|
|
45
|
+
entry.demoSource ??
|
|
46
|
+
fill(options.demoTemplate ?? 'ux-demo/demos/{id}.tsx', entry),
|
|
47
|
+
documentation: (entry) =>
|
|
48
|
+
entry.documentation ?? fill(options.documentationTemplate, entry),
|
|
49
|
+
designTemplate: (entry) => fill(options.designTemplate, entry),
|
|
50
|
+
});
|
|
51
|
+
for (const row of rows) {
|
|
52
|
+
if (!isRepositoryPath(row.demoSource))
|
|
53
|
+
throw new Error(`${row.id} requires a repository-relative demoSource`);
|
|
54
|
+
if (row.componentSource && !isRepositoryPath(row.componentSource))
|
|
55
|
+
throw new Error(`${row.id} has an invalid repository-relative source`);
|
|
56
|
+
if (!row.documentation)
|
|
57
|
+
throw new Error(
|
|
58
|
+
`${row.id} requires documentation or documentationTemplate`,
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
return rows;
|
|
62
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { PopoverOptions, OverlayContent, OverlayHandle } from 'kerfjs/overlay';
|
|
2
|
+
|
|
3
|
+
/** App-facing options for a non-modal, arbitrary-content help surface. */
|
|
4
|
+
interface AnchoredSurfaceOptions extends Pick<PopoverOptions, 'placement' | 'align' | 'gap' | 'dismiss' | 'initialFocus' | 'onDismiss' | 'outsideIgnore' | 'container'> {
|
|
5
|
+
/** Accessible name for the non-modal dialog. */
|
|
6
|
+
label: string;
|
|
7
|
+
/**
|
|
8
|
+
* Gutter in px kept between the surface and the viewport edges when it is
|
|
9
|
+
* clamped horizontally and fitted vertically. Default `8`, the same gutter as
|
|
10
|
+
* the surface's maximum size.
|
|
11
|
+
*/
|
|
12
|
+
viewportMargin?: number;
|
|
13
|
+
/**
|
|
14
|
+
* Where to append the surface. Default: inside the anchor's open modal
|
|
15
|
+
* dialog — a native `<dialog>`'s host slot, or a slot kerf creates in a
|
|
16
|
+
* `wa-dialog` / `wa-drawer` — so the surface stays interactive there;
|
|
17
|
+
* otherwise `document.body`. Pass an element only for a modal context kerf
|
|
18
|
+
* cannot resolve; an element inside an open modal closes the surface with it.
|
|
19
|
+
*/
|
|
20
|
+
container?: Element;
|
|
21
|
+
/**
|
|
22
|
+
* Surface tone. `'default'` follows the anchor's color scheme. `'dark'` is
|
|
23
|
+
* the loud, inverse tone of a `ToolbarControlGroup` / `ToolbarText`
|
|
24
|
+
* `tone="dark"`, for a popup anchored to dark media chrome (a volume popup
|
|
25
|
+
* over a video preview): dark beside a light page and light beside a dark
|
|
26
|
+
* one, so the popup matches the control group that opened it. The surface
|
|
27
|
+
* takes the opposite of the anchor's color scheme, so it and every Kerf UI
|
|
28
|
+
* or Web Awesome component inside it resolve the same semantic
|
|
29
|
+
* `light-dark()` tokens to the other side: no new colors, no child
|
|
30
|
+
* overrides. While open it follows a live switch of that scheme (the OS
|
|
31
|
+
* preference, or an app theme class or attribute on an ancestor). Default
|
|
32
|
+
* `'default'`.
|
|
33
|
+
*/
|
|
34
|
+
tone?: AnchoredSurfaceTone;
|
|
35
|
+
}
|
|
36
|
+
/** {@link AnchoredSurfaceOptions.tone}: follow the anchor's scheme, or invert it. */
|
|
37
|
+
type AnchoredSurfaceTone = 'default' | 'dark';
|
|
38
|
+
/** A viewport pointer location; `context` is the element under the pointer. */
|
|
39
|
+
interface AnchoredSurfacePoint {
|
|
40
|
+
x: number;
|
|
41
|
+
y: number;
|
|
42
|
+
/**
|
|
43
|
+
* Pass the event target when opening from inside a modal dialog, native or
|
|
44
|
+
* Web Awesome (`wa-dialog`, `wa-drawer`). The dark tone also reads its
|
|
45
|
+
* color scheme from `context`, so a region with its own `color-scheme` is
|
|
46
|
+
* honored; without it the scheme is the modal scope's (or the page's).
|
|
47
|
+
*/
|
|
48
|
+
context?: Element;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Open app-owned content beside an element. The surface owns its Kerf UI chrome;
|
|
52
|
+
* kerfjs/overlay owns positioning, top-layer/modal hosting, focus, and dismissal.
|
|
53
|
+
* The surface stays `viewportMargin` inside the viewport edges and fits its
|
|
54
|
+
* height to the room beside the anchor (the roomier side when neither holds it),
|
|
55
|
+
* scrolling its content; `--kui-anchored-surface-available-height` exposes that
|
|
56
|
+
* room to the content, updated as the page scrolls or resizes.
|
|
57
|
+
* The caller owns content, action policy, and calling `close()` when an action
|
|
58
|
+
* completes. `initialFocus` defaults to the first focusable descendant; set it
|
|
59
|
+
* to `false` for read-only help that should leave focus on its trigger.
|
|
60
|
+
*/
|
|
61
|
+
declare function openAnchoredSurface(anchor: Element, content: OverlayContent, options: AnchoredSurfaceOptions): OverlayHandle;
|
|
62
|
+
/**
|
|
63
|
+
* Open the same surface at pointer coordinates. The temporary anchor has no
|
|
64
|
+
* layout or hit target. `context` keeps a surface opened inside a modal dialog
|
|
65
|
+
* in that dialog's interactive host slot; it is removed on close or failure.
|
|
66
|
+
*/
|
|
67
|
+
declare function openAnchoredSurfaceAt(point: AnchoredSurfacePoint, content: OverlayContent, options: AnchoredSurfaceOptions): OverlayHandle;
|
|
68
|
+
|
|
69
|
+
export { type AnchoredSurfaceOptions, type AnchoredSurfacePoint, type AnchoredSurfaceTone, openAnchoredSurface, openAnchoredSurfaceAt };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"anchored-surface.js"}
|
package/dist/app-tab.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SafeHtml } from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
2
3
|
|
|
3
4
|
type AppTabRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
4
5
|
'data-component'?: never;
|
|
@@ -7,15 +8,36 @@ type AppTabRootAttributes = Readonly<Record<`data-${string}`, string | undefined
|
|
|
7
8
|
'data-selected'?: never;
|
|
8
9
|
'data-tab-dragging'?: never;
|
|
9
10
|
'data-tab-drop-position'?: never;
|
|
11
|
+
'data-attention'?: never;
|
|
12
|
+
'data-drop-target'?: never;
|
|
13
|
+
'data-name-overflow'?: never;
|
|
14
|
+
'data-pinned'?: never;
|
|
10
15
|
}>;
|
|
16
|
+
type AppTabPresentation = 'pill' | 'segmented' | 'icon-only';
|
|
17
|
+
type AppTabSize = 'default' | 'compact';
|
|
18
|
+
type AppTabNameOverflow = 'ellipsis' | 'visible';
|
|
11
19
|
interface AppTabProps {
|
|
12
20
|
id: string;
|
|
13
21
|
name: string;
|
|
14
22
|
selected?: boolean;
|
|
23
|
+
/** Emphasize the visible tab name with the attention color token. */
|
|
24
|
+
attention?: boolean;
|
|
25
|
+
/** Highlight this tab as the target of a drag over its content. */
|
|
26
|
+
dropTarget?: boolean;
|
|
27
|
+
/** Keep the leading tab visible within its TabBar tablist while peers scroll. */
|
|
28
|
+
pinned?: boolean;
|
|
15
29
|
closable?: boolean;
|
|
16
30
|
draggable?: boolean;
|
|
17
|
-
leading?:
|
|
18
|
-
trailing?:
|
|
31
|
+
leading?: KerfUiContent;
|
|
32
|
+
trailing?: KerfUiContent;
|
|
33
|
+
/** Visual treatment within a TabBar. Icon-only tabs retain `name` as their accessible name. */
|
|
34
|
+
presentation?: AppTabPresentation;
|
|
35
|
+
/** Compact tabs use the 32px application-rail height. */
|
|
36
|
+
size?: AppTabSize;
|
|
37
|
+
/** Maximum visible label width in CSS pixels before ellipsis. */
|
|
38
|
+
labelMaxWidth?: number;
|
|
39
|
+
/** Keep the full name visible for an inline loading treatment. */
|
|
40
|
+
nameOverflow?: AppTabNameOverflow;
|
|
19
41
|
/** Decorative dormant content for the close button. Must not contain interactive descendants. */
|
|
20
42
|
closeIcon?: SafeHtml;
|
|
21
43
|
selectAction?: string;
|
|
@@ -23,8 +45,21 @@ interface AppTabProps {
|
|
|
23
45
|
className?: string;
|
|
24
46
|
/** Render as an unanimated loading skeleton, disabling select/close and dragging. */
|
|
25
47
|
placeholder?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Named and still opening: the tab is known but its content is loading.
|
|
50
|
+
* Keeps `name` visible in the quiet text color and as the tab's accessible
|
|
51
|
+
* name, shows `trailing` (for example a `LoadingSpinner`), and marks the
|
|
52
|
+
* tab `aria-busy`. Unlike `placeholder` it stays selectable — the
|
|
53
|
+
* application shows placeholder content in its panel until loading
|
|
54
|
+
* completes — while close and dragging stay disabled. Same pill geometry
|
|
55
|
+
* as the live tab, so swapping it in place does not shift the bar.
|
|
56
|
+
* `placeholder` wins when both are set.
|
|
57
|
+
*/
|
|
58
|
+
pending?: boolean;
|
|
26
59
|
rootAttributes?: AppTabRootAttributes;
|
|
60
|
+
/** Native named-slot assignment when composed inside a web component. */
|
|
61
|
+
slot?: string;
|
|
27
62
|
}
|
|
28
|
-
declare function AppTab({ id, name, selected, closable, draggable, leading, trailing, closeIcon, selectAction, closeAction, className, placeholder, rootAttributes }: AppTabProps): SafeHtml;
|
|
63
|
+
declare function AppTab({ id, name, selected, attention, dropTarget, pinned, closable, draggable, leading, trailing, presentation, size, labelMaxWidth, nameOverflow, closeIcon, selectAction, closeAction, className, placeholder, pending, rootAttributes, slot, }: AppTabProps): SafeHtml;
|
|
29
64
|
|
|
30
|
-
export { AppTab, type AppTabProps };
|
|
65
|
+
export { AppTab, type AppTabNameOverflow, type AppTabPresentation, type AppTabProps, type AppTabSize };
|
package/dist/app-tab.js
CHANGED
package/dist/badge.d.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { SafeHtml } from 'kerfjs';
|
|
2
|
+
import { CssLength } from './css-values.js';
|
|
3
|
+
import { S as SemanticTone } from './semantic-tone-CdW013KF.js';
|
|
4
|
+
|
|
5
|
+
/** @deprecated Use SemanticTone. */
|
|
6
|
+
type BadgeTone = SemanticTone;
|
|
7
|
+
type BadgeAppearance = 'quiet' | 'solid' | 'outline';
|
|
8
|
+
type BadgeShape = 'pill' | 'rounded';
|
|
9
|
+
/** Size of a text badge. A text-free dot is the separate `size: 'dot'` form. */
|
|
10
|
+
type BadgeSize = 'compact' | 'default';
|
|
11
|
+
/** Application `data-*` identity on the badge root; Badge-owned markers stay protected. */
|
|
12
|
+
type BadgeRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
13
|
+
'data-component'?: never;
|
|
14
|
+
'data-tone'?: never;
|
|
15
|
+
'data-appearance'?: never;
|
|
16
|
+
'data-shape'?: never;
|
|
17
|
+
'data-size'?: never;
|
|
18
|
+
'data-has-icon'?: never;
|
|
19
|
+
'data-truncate'?: never;
|
|
20
|
+
}>;
|
|
21
|
+
interface BadgeCommonProps {
|
|
22
|
+
tone?: SemanticTone;
|
|
23
|
+
/** Native tooltip text that explains the badge on hover. */
|
|
24
|
+
title?: string;
|
|
25
|
+
/** Safe `data-*` identity, such as a status band, on the badge root. */
|
|
26
|
+
rootAttributes?: BadgeRootAttributes;
|
|
27
|
+
className?: string;
|
|
28
|
+
/** Native named-slot assignment when composed inside a web component. */
|
|
29
|
+
slot?: string;
|
|
30
|
+
}
|
|
31
|
+
/** A badge that shows a short status, count, or category as visible text. */
|
|
32
|
+
interface BadgeTextProps extends BadgeCommonProps {
|
|
33
|
+
children: SafeHtml | string | number;
|
|
34
|
+
/** Decorative leading icon, normally an unsized LucideIcon, 4px before the text. */
|
|
35
|
+
icon?: SafeHtml;
|
|
36
|
+
appearance?: BadgeAppearance;
|
|
37
|
+
shape?: BadgeShape;
|
|
38
|
+
size?: BadgeSize;
|
|
39
|
+
/**
|
|
40
|
+
* Cap the badge's width and truncate longer text with an ellipsis, for
|
|
41
|
+
* app-supplied text such as a tag or category name. String and number
|
|
42
|
+
* content becomes the native `title` tooltip unless `title` is supplied, so
|
|
43
|
+
* the full text stays available on hover; SafeHtml content needs `title`.
|
|
44
|
+
*/
|
|
45
|
+
maxWidth?: CssLength;
|
|
46
|
+
/**
|
|
47
|
+
* Accessible name that replaces the visible content when it is abbreviated
|
|
48
|
+
* or symbolic (`"82% confidence"` for `82`); the badge is then exposed as a
|
|
49
|
+
* labeled image.
|
|
50
|
+
*/
|
|
51
|
+
label?: string;
|
|
52
|
+
/** Hide a repeated visual badge from assistive technology. */
|
|
53
|
+
ariaHidden?: boolean;
|
|
54
|
+
}
|
|
55
|
+
/** A labeled dot, announced as an image with its own accessible name. */
|
|
56
|
+
interface BadgeDotLabeled {
|
|
57
|
+
/** Accessible name for the dot, for example `"New activity"`. */
|
|
58
|
+
label: string;
|
|
59
|
+
ariaHidden?: false;
|
|
60
|
+
}
|
|
61
|
+
/** A decorative dot whose meaning the owning component already announces. */
|
|
62
|
+
interface BadgeDotDecorative {
|
|
63
|
+
label?: never;
|
|
64
|
+
ariaHidden: true;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* A text-free status dot (the iOS "new content" dot): a small solid circle in
|
|
68
|
+
* the badge's tone. It has no visible text, so it must either carry its own
|
|
69
|
+
* accessible `label` (exposed as an image) or be `ariaHidden` because the
|
|
70
|
+
* surrounding component already folds its meaning into an accessible name.
|
|
71
|
+
*/
|
|
72
|
+
type BadgeDotProps = BadgeCommonProps & {
|
|
73
|
+
size: 'dot';
|
|
74
|
+
children?: never;
|
|
75
|
+
appearance?: never;
|
|
76
|
+
shape?: never;
|
|
77
|
+
maxWidth?: never;
|
|
78
|
+
} & (BadgeDotLabeled | BadgeDotDecorative);
|
|
79
|
+
type BadgeProps = BadgeTextProps | BadgeDotProps;
|
|
80
|
+
/** Compact, non-interactive metadata whose tone, emphasis, and shape are configured by props. */
|
|
81
|
+
declare function Badge(props: BadgeProps): SafeHtml;
|
|
82
|
+
|
|
83
|
+
export { Badge, type BadgeAppearance, type BadgeDotProps, type BadgeProps, type BadgeRootAttributes, type BadgeShape, type BadgeSize, type BadgeTextProps, type BadgeTone, SemanticTone };
|
package/dist/badge.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"badge.js"}
|