@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,114 @@
|
|
|
1
|
+
import { SafeHtml } from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
3
|
+
import { PaneAppearance } from './pane.js';
|
|
4
|
+
import './scroll-clearance-BikHljTc.js';
|
|
5
|
+
|
|
6
|
+
interface TabNavigatorTabBase<Id extends string> {
|
|
7
|
+
id: Id;
|
|
8
|
+
label: string;
|
|
9
|
+
/** Decorative icon shown above the label in the bottom bar. */
|
|
10
|
+
icon?: SafeHtml;
|
|
11
|
+
/** The tab's content — typically a `NavStack` so each tab keeps its own stack. */
|
|
12
|
+
content: KerfUiContent;
|
|
13
|
+
/** Background of this scene's scrolling work surface. */
|
|
14
|
+
appearance?: PaneAppearance;
|
|
15
|
+
/** Add 8px to every side of a plain scene's scrolling content. */
|
|
16
|
+
deepInset?: boolean;
|
|
17
|
+
/** Opt into keyboard (`0`) or programmatic (`-1`) focus on this scene. */
|
|
18
|
+
tabIndex?: 0 | -1;
|
|
19
|
+
/** Keep the standard focus outline visible while this scene is active. */
|
|
20
|
+
outlined?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/** A tab with an optional count or short-status badge. */
|
|
23
|
+
interface TabNavigatorTabCountBadge {
|
|
24
|
+
/**
|
|
25
|
+
* Optional count or short status shown as a solid danger `Badge` at the
|
|
26
|
+
* top-trailing corner of the tab icon (the iOS tab-bar badge). Omitted, `''`,
|
|
27
|
+
* or non-finite numbers render no badge. The visual badge is `aria-hidden`;
|
|
28
|
+
* its meaning reaches assistive technology through `badgeLabel`.
|
|
29
|
+
*
|
|
30
|
+
* Pass `true` instead for the text-free dot (new content without a count).
|
|
31
|
+
*/
|
|
32
|
+
badge?: string | number;
|
|
33
|
+
/**
|
|
34
|
+
* Localized phrase folded into the tab's accessible name as
|
|
35
|
+
* `"<label>, <badgeLabel>"` (for example `"3 unread"` → `"Inbox, 3 unread"`).
|
|
36
|
+
* Defaults to the badge text itself. Ignored when no badge renders.
|
|
37
|
+
*/
|
|
38
|
+
badgeLabel?: string;
|
|
39
|
+
}
|
|
40
|
+
/** A tab with the text-free dot badge (new content without a count). */
|
|
41
|
+
interface TabNavigatorTabDotBadge {
|
|
42
|
+
/**
|
|
43
|
+
* `true` shows a solid danger dot `Badge` at the top-trailing corner of the
|
|
44
|
+
* tab icon — the iOS tab-bar dot for new content without a count.
|
|
45
|
+
*/
|
|
46
|
+
badge: true;
|
|
47
|
+
/**
|
|
48
|
+
* Required localized phrase folded into the tab's accessible name as
|
|
49
|
+
* `"<label>, <badgeLabel>"` (for example `"New activity"` →
|
|
50
|
+
* `"Feed, New activity"`). A dot has no text, so this is its only meaning.
|
|
51
|
+
*/
|
|
52
|
+
badgeLabel: string;
|
|
53
|
+
}
|
|
54
|
+
/** One bottom-bar destination: its label, optional icon and badge, and content. */
|
|
55
|
+
type TabNavigatorTab<Id extends string = string> = TabNavigatorTabBase<Id> & (TabNavigatorTabCountBadge | TabNavigatorTabDotBadge);
|
|
56
|
+
/**
|
|
57
|
+
* How a {@link TabNavigator}'s tab bar relates to the active scene: `docked`
|
|
58
|
+
* below it, or `overlay` laid over its bottom edge on the translucent chrome
|
|
59
|
+
* material, so the scene's content scrolls visibly beneath the bar.
|
|
60
|
+
*/
|
|
61
|
+
type TabNavigatorBarPresentation = 'docked' | 'overlay';
|
|
62
|
+
interface TabNavigatorProps<Id extends string = string> {
|
|
63
|
+
id: string;
|
|
64
|
+
/** Accessible name for the tab bar. */
|
|
65
|
+
label: string;
|
|
66
|
+
tabs: readonly TabNavigatorTab<Id>[];
|
|
67
|
+
/** The controlled active tab id (the app owns selection). */
|
|
68
|
+
active: NoInfer<Id>;
|
|
69
|
+
/**
|
|
70
|
+
* The bar's top separator. `auto` (default) draws it against a sunken active
|
|
71
|
+
* work surface and otherwise follows `chromeDividers`; `hidden` suppresses
|
|
72
|
+
* the line, including a scroll divider.
|
|
73
|
+
*/
|
|
74
|
+
separator?: 'auto' | 'hidden';
|
|
75
|
+
/**
|
|
76
|
+
* The line over the tab bar, where it meets the active scene. `scroll`
|
|
77
|
+
* (default) shows it only while more of the scene's content lies below —
|
|
78
|
+
* never at the scroll end or when the content fits — once
|
|
79
|
+
* `wireScrollDividers` (`@kerfjs/ui/wire-scroll-dividers`) is wired above
|
|
80
|
+
* the scaffold; unwired, it does not show. `always` shows it without the
|
|
81
|
+
* wiring; `none` suppresses that scroll divider. A sunken active work
|
|
82
|
+
* surface still draws the separator unless `separator="hidden"`. The line
|
|
83
|
+
* is the bar's own 1px top border, so no state moves the bar or a tab.
|
|
84
|
+
*/
|
|
85
|
+
chromeDividers?: 'scroll' | 'always' | 'none';
|
|
86
|
+
/**
|
|
87
|
+
* `docked` (default) gives the tab bar its own band below the scenes.
|
|
88
|
+
* `overlay` lays it over the active scene's bottom edge on the translucent
|
|
89
|
+
* chrome material (opaque under reduced transparency, increased contrast,
|
|
90
|
+
* or without `backdrop-filter`; `Canvas` in forced colors), so content
|
|
91
|
+
* scrolls visibly beneath it, as under an iOS tab bar. `wireTabNavigator`
|
|
92
|
+
* measures the live bar (bottom safe area included) and the scenes hand
|
|
93
|
+
* its height to their content as the block-end `--kui-edge-inset-*`
|
|
94
|
+
* context, so a plain scene, a sole `Pane`, or a `NavStack` (and its own
|
|
95
|
+
* bottom toolbar, which then sits above the bar) rests its last item clear
|
|
96
|
+
* of it. Until then it stays docked. Unselected tab labels lift halfway
|
|
97
|
+
* toward the normal text color to keep AA over the content beneath.
|
|
98
|
+
*/
|
|
99
|
+
barPresentation?: TabNavigatorBarPresentation;
|
|
100
|
+
className?: string;
|
|
101
|
+
/** Native named-slot assignment when composed inside a web component. */
|
|
102
|
+
slot?: string;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* A mobile-first, iOS-like bottom tab navigator: a bottom tab bar that switches
|
|
106
|
+
* between major sections, each tab keeping its own content (usually a `NavStack`)
|
|
107
|
+
* mounted so its stack and scroll survive a switch. Controlled — the app owns
|
|
108
|
+
* `active`; wire selection with `@kerfjs/ui/wire-tab-navigator`'s `wireTabNavigator`.
|
|
109
|
+
* On larger classes, promote the tabs to a `Workbench` rail or sidebar instead of
|
|
110
|
+
* a bottom bar. See `docs/23-app-layouts.md` §3.4.
|
|
111
|
+
*/
|
|
112
|
+
declare function TabNavigator<Id extends string>({ id, label, tabs, active, separator, chromeDividers, barPresentation, className, slot, }: TabNavigatorProps<Id>): SafeHtml;
|
|
113
|
+
|
|
114
|
+
export { TabNavigator, type TabNavigatorBarPresentation, type TabNavigatorProps, type TabNavigatorTab };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Badge } from './chunk-U6QYTMDB.js';
|
|
2
|
+
import { ensureSunkenTexture } from './chunk-IKS72C6P.js';
|
|
3
|
+
|
|
4
|
+
import { jsxs, jsx } from 'kerfjs/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function TabNavigator({
|
|
7
|
+
id,
|
|
8
|
+
label,
|
|
9
|
+
tabs,
|
|
10
|
+
active,
|
|
11
|
+
separator = "auto",
|
|
12
|
+
chromeDividers = "scroll",
|
|
13
|
+
barPresentation = "docked",
|
|
14
|
+
className = "",
|
|
15
|
+
slot
|
|
16
|
+
}) {
|
|
17
|
+
if (tabs.some((tab) => tab.appearance === "sunken")) ensureSunkenTexture();
|
|
18
|
+
return /* @__PURE__ */ jsxs(
|
|
19
|
+
"section",
|
|
20
|
+
{
|
|
21
|
+
class: `kui-tab-scaffold ${className}`.trim(),
|
|
22
|
+
id,
|
|
23
|
+
"data-component": "tab-scaffold",
|
|
24
|
+
"data-tab-scaffold-id": id,
|
|
25
|
+
"data-separator": separator,
|
|
26
|
+
"data-chrome-dividers": chromeDividers === "always" || chromeDividers === "none" ? chromeDividers : void 0,
|
|
27
|
+
"data-bar-presentation": barPresentation === "overlay" ? "overlay" : void 0,
|
|
28
|
+
slot,
|
|
29
|
+
children: [
|
|
30
|
+
/* @__PURE__ */ jsx("div", { class: "kui-tab-scaffold__scenes", children: tabs.map((tab) => /* @__PURE__ */ jsx(
|
|
31
|
+
"div",
|
|
32
|
+
{
|
|
33
|
+
class: "kui-tab-scaffold__scene",
|
|
34
|
+
"data-tab-scaffold-scene": tab.id,
|
|
35
|
+
"data-active": String(tab.id === active),
|
|
36
|
+
"data-appearance": tab.appearance === "sunken" ? "sunken" : void 0,
|
|
37
|
+
"data-deep-inset": tab.deepInset ? "true" : void 0,
|
|
38
|
+
"data-outlined": tab.id === active && tab.outlined ? "true" : void 0,
|
|
39
|
+
role: tab.tabIndex === void 0 ? void 0 : "tabpanel",
|
|
40
|
+
"aria-label": tab.tabIndex === void 0 ? void 0 : tab.label,
|
|
41
|
+
"aria-hidden": String(tab.id !== active),
|
|
42
|
+
tabindex: tab.id === active ? tab.tabIndex : tab.tabIndex === void 0 ? void 0 : -1,
|
|
43
|
+
children: tab.content
|
|
44
|
+
}
|
|
45
|
+
)) }),
|
|
46
|
+
/* @__PURE__ */ jsx("nav", { class: "kui-tab-scaffold__bar", role: "tablist", "aria-label": label, children: tabs.map((tab) => {
|
|
47
|
+
const dot = tab.badge === true;
|
|
48
|
+
const badgeText = dot ? void 0 : normalizeBadge(tab.badge);
|
|
49
|
+
const hasBadge = dot || badgeText !== void 0;
|
|
50
|
+
const badge = hasBadge && /* @__PURE__ */ jsx(
|
|
51
|
+
"span",
|
|
52
|
+
{
|
|
53
|
+
class: "kui-tab-scaffold__tab-badge",
|
|
54
|
+
"data-badge-kind": dot ? "dot" : "text",
|
|
55
|
+
children: badgeText === void 0 ? /* @__PURE__ */ jsx(Badge, { tone: "danger", size: "dot", ariaHidden: true }) : /* @__PURE__ */ jsx(
|
|
56
|
+
Badge,
|
|
57
|
+
{
|
|
58
|
+
tone: "danger",
|
|
59
|
+
appearance: "solid",
|
|
60
|
+
size: "compact",
|
|
61
|
+
ariaHidden: true,
|
|
62
|
+
children: badgeText
|
|
63
|
+
}
|
|
64
|
+
)
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
const badgeLabel = hasBadge ? tab.badgeLabel?.trim() || badgeText : void 0;
|
|
68
|
+
return /* @__PURE__ */ jsxs(
|
|
69
|
+
"button",
|
|
70
|
+
{
|
|
71
|
+
type: "button",
|
|
72
|
+
class: "kui-tab-scaffold__tab",
|
|
73
|
+
role: "tab",
|
|
74
|
+
"data-tab-scaffold-tab": tab.id,
|
|
75
|
+
"aria-selected": String(tab.id === active),
|
|
76
|
+
tabindex: tab.id === active ? "0" : "-1",
|
|
77
|
+
"aria-label": badgeLabel === void 0 ? void 0 : `${tab.label}, ${badgeLabel}`,
|
|
78
|
+
"data-has-badge": hasBadge ? "true" : void 0,
|
|
79
|
+
children: [
|
|
80
|
+
tab.icon ? /* @__PURE__ */ jsxs("span", { class: "kui-tab-scaffold__tab-icon", "aria-hidden": "true", children: [
|
|
81
|
+
tab.icon,
|
|
82
|
+
badge
|
|
83
|
+
] }) : badge,
|
|
84
|
+
/* @__PURE__ */ jsx("span", { class: "kui-tab-scaffold__tab-label", children: tab.label })
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
}) })
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
function normalizeBadge(badge) {
|
|
94
|
+
if (typeof badge === "number")
|
|
95
|
+
return Number.isFinite(badge) ? String(badge) : void 0;
|
|
96
|
+
if (typeof badge === "string" && badge.trim()) return badge.trim();
|
|
97
|
+
return void 0;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export { TabNavigator };
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=tab-navigator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/navigation/tab-navigator/tab-navigator.tsx"],"names":[],"mappings":";;;;;AAyHO,SAAS,YAAA,CAAgC;AAAA,EAC9C,EAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA,GAAY,MAAA;AAAA,EACZ,cAAA,GAAiB,QAAA;AAAA,EACjB,eAAA,GAAkB,QAAA;AAAA,EAClB,SAAA,GAAY,EAAA;AAAA,EACZ;AACF,CAAA,EAA0B;AACxB,EAAA,IAAI,IAAA,CAAK,KAAK,CAAC,GAAA,KAAQ,IAAI,UAAA,KAAe,QAAQ,GAAG,mBAAA,EAAoB;AACzE,EAAA,uBACE,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC5C,EAAA;AAAA,MACA,gBAAA,EAAe,cAAA;AAAA,MACf,sBAAA,EAAsB,EAAA;AAAA,MACtB,gBAAA,EAAgB,SAAA;AAAA,MAChB,sBAAA,EACE,cAAA,KAAmB,QAAA,IAAY,cAAA,KAAmB,SAC9C,cAAA,GACA,MAAA;AAAA,MAEN,uBAAA,EACE,eAAA,KAAoB,SAAA,GAAY,SAAA,GAAY,MAAA;AAAA,MAE9C,IAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAI,KAAA,EAAM,0BAAA,EACR,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBACT,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,yBAAA;AAAA,YACN,2BAAyB,GAAA,CAAI,EAAA;AAAA,YAC7B,aAAA,EAAa,MAAA,CAAO,GAAA,CAAI,EAAA,KAAO,MAAM,CAAA;AAAA,YACrC,iBAAA,EAAiB,GAAA,CAAI,UAAA,KAAe,QAAA,GAAW,QAAA,GAAW,MAAA;AAAA,YAC1D,iBAAA,EAAiB,GAAA,CAAI,SAAA,GAAY,MAAA,GAAS,MAAA;AAAA,YAC1C,iBACE,GAAA,CAAI,EAAA,KAAO,MAAA,IAAU,GAAA,CAAI,WAAW,MAAA,GAAS,MAAA;AAAA,YAE/C,IAAA,EAAM,GAAA,CAAI,QAAA,KAAa,MAAA,GAAY,MAAA,GAAY,UAAA;AAAA,YAC/C,YAAA,EAAY,GAAA,CAAI,QAAA,KAAa,MAAA,GAAY,SAAY,GAAA,CAAI,KAAA;AAAA,YACzD,aAAA,EAAa,MAAA,CAAO,GAAA,CAAI,EAAA,KAAO,MAAM,CAAA;AAAA,YACrC,QAAA,EACE,IAAI,EAAA,KAAO,MAAA,GACP,IAAI,QAAA,GACJ,GAAA,CAAI,QAAA,KAAa,MAAA,GACf,MAAA,GACA,EAAA;AAAA,YAGP,QAAA,EAAA,GAAA,CAAI;AAAA;AAAA,SAER,CAAA,EACH,CAAA;AAAA,wBACA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,uBAAA,EAAwB,IAAA,EAAK,SAAA,EAAU,YAAA,EAAY,KAAA,EAC3D,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACjB,UAAA,MAAM,GAAA,GAAM,IAAI,KAAA,KAAU,IAAA;AAC1B,UAAA,MAAM,SAAA,GAAY,GAAA,GAAM,MAAA,GAAY,cAAA,CAAe,IAAI,KAAK,CAAA;AAC5D,UAAA,MAAM,QAAA,GAAW,OAAO,SAAA,KAAc,MAAA;AACtC,UAAA,MAAM,QAAQ,QAAA,oBACZ,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,6BAAA;AAAA,cACN,iBAAA,EAAiB,MAAM,KAAA,GAAQ,MAAA;AAAA,cAE9B,QAAA,EAAA,SAAA,KAAc,MAAA,mBACb,GAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAK,UAAS,IAAA,EAAK,KAAA,EAAM,UAAA,EAAU,IAAA,EAAC,CAAA,mBAE3C,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,UAAA,EAAW,OAAA;AAAA,kBACX,IAAA,EAAK,SAAA;AAAA,kBACL,UAAA,EAAU,IAAA;AAAA,kBAET,QAAA,EAAA;AAAA;AAAA;AACH;AAAA,WAEJ;AAIF,UAAA,MAAM,aAAa,QAAA,GACf,GAAA,CAAI,UAAA,EAAY,IAAA,MAAU,SAAA,GAC1B,MAAA;AACJ,UAAA,uBACE,IAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,KAAA,EAAM,uBAAA;AAAA,cACN,IAAA,EAAK,KAAA;AAAA,cACL,yBAAuB,GAAA,CAAI,EAAA;AAAA,cAC3B,eAAA,EAAe,MAAA,CAAO,GAAA,CAAI,EAAA,KAAO,MAAM,CAAA;AAAA,cACvC,QAAA,EAAU,GAAA,CAAI,EAAA,KAAO,MAAA,GAAS,GAAA,GAAM,IAAA;AAAA,cACpC,YAAA,EACE,eAAe,MAAA,GACX,MAAA,GACA,GAAG,GAAA,CAAI,KAAK,KAAK,UAAU,CAAA,CAAA;AAAA,cAEjC,gBAAA,EAAgB,WAAW,MAAA,GAAS,MAAA;AAAA,cAEnC,QAAA,EAAA;AAAA,gBAAA,GAAA,CAAI,uBACH,IAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,4BAAA,EAA6B,eAAY,MAAA,EAClD,QAAA,EAAA;AAAA,kBAAA,GAAA,CAAI,IAAA;AAAA,kBACJ;AAAA,iBAAA,EACH,CAAA,GAEA,KAAA;AAAA,gCAEF,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,6BAAA,EAA+B,cAAI,KAAA,EAAM;AAAA;AAAA;AAAA,WACvD;AAAA,QAEJ,CAAC,CAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,eACP,KAAA,EACoB;AACpB,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA;AACnB,IAAA,OAAO,OAAO,QAAA,CAAS,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA;AAClD,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAK,EAAG,OAAO,MAAM,IAAA,EAAK;AACjE,EAAA,OAAO,MAAA;AACT","file":"tab-navigator.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport type { KerfUiContent } from '../../../shared/content/semantic-content.js';\nimport { ensureSunkenTexture } from '../../../shared/styles/sunken-texture.js';\nimport { Badge } from '../../feedback/badge/badge.js';\nimport type { PaneAppearance } from '../../layout/pane/pane.js';\n\ninterface TabNavigatorTabBase<Id extends string> {\n id: Id;\n label: string;\n /** Decorative icon shown above the label in the bottom bar. */\n icon?: SafeHtml;\n /** The tab's content — typically a `NavStack` so each tab keeps its own stack. */\n content: KerfUiContent;\n /** Background of this scene's scrolling work surface. */\n appearance?: PaneAppearance;\n /** Add 8px to every side of a plain scene's scrolling content. */\n deepInset?: boolean;\n /** Opt into keyboard (`0`) or programmatic (`-1`) focus on this scene. */\n tabIndex?: 0 | -1;\n /** Keep the standard focus outline visible while this scene is active. */\n outlined?: boolean;\n}\n\n/** A tab with an optional count or short-status badge. */\ninterface TabNavigatorTabCountBadge {\n /**\n * Optional count or short status shown as a solid danger `Badge` at the\n * top-trailing corner of the tab icon (the iOS tab-bar badge). Omitted, `''`,\n * or non-finite numbers render no badge. The visual badge is `aria-hidden`;\n * its meaning reaches assistive technology through `badgeLabel`.\n *\n * Pass `true` instead for the text-free dot (new content without a count).\n */\n badge?: string | number;\n /**\n * Localized phrase folded into the tab's accessible name as\n * `\"<label>, <badgeLabel>\"` (for example `\"3 unread\"` → `\"Inbox, 3 unread\"`).\n * Defaults to the badge text itself. Ignored when no badge renders.\n */\n badgeLabel?: string;\n}\n\n/** A tab with the text-free dot badge (new content without a count). */\ninterface TabNavigatorTabDotBadge {\n /**\n * `true` shows a solid danger dot `Badge` at the top-trailing corner of the\n * tab icon — the iOS tab-bar dot for new content without a count.\n */\n badge: true;\n /**\n * Required localized phrase folded into the tab's accessible name as\n * `\"<label>, <badgeLabel>\"` (for example `\"New activity\"` →\n * `\"Feed, New activity\"`). A dot has no text, so this is its only meaning.\n */\n badgeLabel: string;\n}\n\n/** One bottom-bar destination: its label, optional icon and badge, and content. */\nexport type TabNavigatorTab<Id extends string = string> =\n TabNavigatorTabBase<Id> &\n (TabNavigatorTabCountBadge | TabNavigatorTabDotBadge);\n\n/**\n * How a {@link TabNavigator}'s tab bar relates to the active scene: `docked`\n * below it, or `overlay` laid over its bottom edge on the translucent chrome\n * material, so the scene's content scrolls visibly beneath the bar.\n */\nexport type TabNavigatorBarPresentation = 'docked' | 'overlay';\n\nexport interface TabNavigatorProps<Id extends string = string> {\n id: string;\n /** Accessible name for the tab bar. */\n label: string;\n tabs: readonly TabNavigatorTab<Id>[];\n /** The controlled active tab id (the app owns selection). */\n active: NoInfer<Id>;\n /**\n * The bar's top separator. `auto` (default) draws it against a sunken active\n * work surface and otherwise follows `chromeDividers`; `hidden` suppresses\n * the line, including a scroll divider.\n */\n separator?: 'auto' | 'hidden';\n /**\n * The line over the tab bar, where it meets the active scene. `scroll`\n * (default) shows it only while more of the scene's content lies below —\n * never at the scroll end or when the content fits — once\n * `wireScrollDividers` (`@kerfjs/ui/wire-scroll-dividers`) is wired above\n * the scaffold; unwired, it does not show. `always` shows it without the\n * wiring; `none` suppresses that scroll divider. A sunken active work\n * surface still draws the separator unless `separator=\"hidden\"`. The line\n * is the bar's own 1px top border, so no state moves the bar or a tab.\n */\n chromeDividers?: 'scroll' | 'always' | 'none';\n /**\n * `docked` (default) gives the tab bar its own band below the scenes.\n * `overlay` lays it over the active scene's bottom edge on the translucent\n * chrome material (opaque under reduced transparency, increased contrast,\n * or without `backdrop-filter`; `Canvas` in forced colors), so content\n * scrolls visibly beneath it, as under an iOS tab bar. `wireTabNavigator`\n * measures the live bar (bottom safe area included) and the scenes hand\n * its height to their content as the block-end `--kui-edge-inset-*`\n * context, so a plain scene, a sole `Pane`, or a `NavStack` (and its own\n * bottom toolbar, which then sits above the bar) rests its last item clear\n * of it. Until then it stays docked. Unselected tab labels lift halfway\n * toward the normal text color to keep AA over the content beneath.\n */\n barPresentation?: TabNavigatorBarPresentation;\n className?: string;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\n/**\n * A mobile-first, iOS-like bottom tab navigator: a bottom tab bar that switches\n * between major sections, each tab keeping its own content (usually a `NavStack`)\n * mounted so its stack and scroll survive a switch. Controlled — the app owns\n * `active`; wire selection with `@kerfjs/ui/wire-tab-navigator`'s `wireTabNavigator`.\n * On larger classes, promote the tabs to a `Workbench` rail or sidebar instead of\n * a bottom bar. See `docs/23-app-layouts.md` §3.4.\n */\nexport function TabNavigator<Id extends string>({\n id,\n label,\n tabs,\n active,\n separator = 'auto',\n chromeDividers = 'scroll',\n barPresentation = 'docked',\n className = '',\n slot,\n}: TabNavigatorProps<Id>) {\n if (tabs.some((tab) => tab.appearance === 'sunken')) ensureSunkenTexture();\n return (\n <section\n class={`kui-tab-scaffold ${className}`.trim()}\n id={id}\n data-component=\"tab-scaffold\"\n data-tab-scaffold-id={id}\n data-separator={separator}\n data-chrome-dividers={\n chromeDividers === 'always' || chromeDividers === 'none'\n ? chromeDividers\n : undefined\n }\n data-bar-presentation={\n barPresentation === 'overlay' ? 'overlay' : undefined\n }\n slot={slot}\n >\n <div class=\"kui-tab-scaffold__scenes\">\n {tabs.map((tab) => (\n <div\n class=\"kui-tab-scaffold__scene\"\n data-tab-scaffold-scene={tab.id}\n data-active={String(tab.id === active)}\n data-appearance={tab.appearance === 'sunken' ? 'sunken' : undefined}\n data-deep-inset={tab.deepInset ? 'true' : undefined}\n data-outlined={\n tab.id === active && tab.outlined ? 'true' : undefined\n }\n role={tab.tabIndex === undefined ? undefined : 'tabpanel'}\n aria-label={tab.tabIndex === undefined ? undefined : tab.label}\n aria-hidden={String(tab.id !== active)}\n tabindex={\n tab.id === active\n ? tab.tabIndex\n : tab.tabIndex === undefined\n ? undefined\n : -1\n }\n >\n {tab.content}\n </div>\n ))}\n </div>\n <nav class=\"kui-tab-scaffold__bar\" role=\"tablist\" aria-label={label}>\n {tabs.map((tab) => {\n const dot = tab.badge === true;\n const badgeText = dot ? undefined : normalizeBadge(tab.badge);\n const hasBadge = dot || badgeText !== undefined;\n const badge = hasBadge && (\n <span\n class=\"kui-tab-scaffold__tab-badge\"\n data-badge-kind={dot ? 'dot' : 'text'}\n >\n {badgeText === undefined ? (\n <Badge tone=\"danger\" size=\"dot\" ariaHidden />\n ) : (\n <Badge\n tone=\"danger\"\n appearance=\"solid\"\n size=\"compact\"\n ariaHidden\n >\n {badgeText}\n </Badge>\n )}\n </span>\n );\n // A dot has no text fallback: without a usable badgeLabel (reachable\n // only from untyped callers) the tab keeps its plain accessible name.\n const badgeLabel = hasBadge\n ? tab.badgeLabel?.trim() || badgeText\n : undefined;\n return (\n <button\n type=\"button\"\n class=\"kui-tab-scaffold__tab\"\n role=\"tab\"\n data-tab-scaffold-tab={tab.id}\n aria-selected={String(tab.id === active)}\n tabindex={tab.id === active ? '0' : '-1'}\n aria-label={\n badgeLabel === undefined\n ? undefined\n : `${tab.label}, ${badgeLabel}`\n }\n data-has-badge={hasBadge ? 'true' : undefined}\n >\n {tab.icon ? (\n <span class=\"kui-tab-scaffold__tab-icon\" aria-hidden=\"true\">\n {tab.icon}\n {badge}\n </span>\n ) : (\n badge\n )}\n <span class=\"kui-tab-scaffold__tab-label\">{tab.label}</span>\n </button>\n );\n })}\n </nav>\n </section>\n );\n}\n\nfunction normalizeBadge(\n badge: string | number | undefined,\n): string | undefined {\n if (typeof badge === 'number')\n return Number.isFinite(badge) ? String(badge) : undefined;\n if (typeof badge === 'string' && badge.trim()) return badge.trim();\n return undefined;\n}\n"]}
|
package/dist/text.d.ts
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { KerfBaseAttrs } from 'kerfjs/jsx-runtime';
|
|
3
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
4
|
+
import { S as Sides } from './sides-BPSWde0A.js';
|
|
5
|
+
import { CssForegroundColor } from './css-values.js';
|
|
6
|
+
|
|
7
|
+
type FieldLabelProps = Omit<KerfBaseAttrs, 'children' | 'class' | 'className'> & {
|
|
8
|
+
children: string;
|
|
9
|
+
class?: string;
|
|
10
|
+
className?: string;
|
|
11
|
+
};
|
|
12
|
+
/** Visible field heading for a read-only preview; use its id with aria-labelledby on the preview group. */
|
|
13
|
+
declare function FieldLabel({ children, class: classValue, className, ...attributes }: FieldLabelProps): kerfjs.SafeHtml;
|
|
14
|
+
|
|
15
|
+
type TextVariant = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span';
|
|
16
|
+
type TextTone = 'default' | 'quiet' | 'danger';
|
|
17
|
+
type TextSize = 'compact' | 'default' | 'large' | 'xlarge';
|
|
18
|
+
type TextFont = 'default' | 'monospace';
|
|
19
|
+
type TextBorder = 'transparent' | 'none';
|
|
20
|
+
type TextLineHeight = 'default' | 'tight';
|
|
21
|
+
type TextWrap = 'normal' | 'anywhere' | 'nowrap' | 'truncate';
|
|
22
|
+
/** Inline alignment of the text's lines, in logical (writing-direction) terms. */
|
|
23
|
+
type TextAlign = 'start' | 'center' | 'end';
|
|
24
|
+
/**
|
|
25
|
+
* Where `wrap="truncate"` places its ellipsis: `end` (default) keeps the
|
|
26
|
+
* start, `start` keeps the tail (branch names, the end of an identifier), and
|
|
27
|
+
* `middle` keeps both the start and a suffix (file paths).
|
|
28
|
+
*/
|
|
29
|
+
type TextTruncate = 'end' | 'middle' | 'start';
|
|
30
|
+
/**
|
|
31
|
+
* The suffix `truncate="middle"` always keeps: a number of trailing
|
|
32
|
+
* characters, or `segment` for the last path segment with its separator.
|
|
33
|
+
*/
|
|
34
|
+
type TextTruncateKeep = number | 'segment';
|
|
35
|
+
type TextContent = KerfUiContent | string | number | readonly TextContent[];
|
|
36
|
+
type TextCommonProps = Omit<KerfBaseAttrs, 'children' | 'class' | 'className'> & {
|
|
37
|
+
/** Native heading, paragraph, or inline span element to render. Defaults to `p`. */
|
|
38
|
+
variant?: TextVariant;
|
|
39
|
+
/** Semantic foreground treatment. Defaults to the inherited foreground. */
|
|
40
|
+
tone?: TextTone;
|
|
41
|
+
/** Foreground color; overrides tone when supplied, or inherits when omitted. */
|
|
42
|
+
color?: CssForegroundColor;
|
|
43
|
+
/** Text sizing independent of the native semantic element. */
|
|
44
|
+
size?: TextSize;
|
|
45
|
+
/** Font family independent of the native semantic element. */
|
|
46
|
+
font?: TextFont;
|
|
47
|
+
/** Transparent alignment border or no border when embedded in owner chrome. */
|
|
48
|
+
border?: TextBorder;
|
|
49
|
+
/** Add the shared control gutter outside selected physical edges. */
|
|
50
|
+
controlMargins?: Sides;
|
|
51
|
+
/** Remove the block variant's item padding and border in compact content. */
|
|
52
|
+
flush?: boolean;
|
|
53
|
+
/** Use compact leading for short dialog or metadata copy. */
|
|
54
|
+
lineHeight?: TextLineHeight;
|
|
55
|
+
/** Inline alignment of the lines (default `start`), for centered status copy. */
|
|
56
|
+
align?: TextAlign;
|
|
57
|
+
children: TextContent;
|
|
58
|
+
class?: string;
|
|
59
|
+
className?: string;
|
|
60
|
+
};
|
|
61
|
+
type TextProps = TextCommonProps & ({
|
|
62
|
+
/** Wrap normally or break long unbroken strings. Defaults to normal. */
|
|
63
|
+
wrap?: 'normal' | 'anywhere';
|
|
64
|
+
/** Cap wrapped text to this positive number of lines. */
|
|
65
|
+
maxLines?: number;
|
|
66
|
+
truncate?: never;
|
|
67
|
+
truncateKeep?: never;
|
|
68
|
+
} | {
|
|
69
|
+
/** Keep one line without an ellipsis. */
|
|
70
|
+
wrap: 'nowrap';
|
|
71
|
+
maxLines?: never;
|
|
72
|
+
truncate?: never;
|
|
73
|
+
truncateKeep?: never;
|
|
74
|
+
} | {
|
|
75
|
+
/** Keep one line with an ellipsis. */
|
|
76
|
+
wrap: 'truncate';
|
|
77
|
+
maxLines?: never;
|
|
78
|
+
/**
|
|
79
|
+
* Where the ellipsis goes (default `end`). `start` and `middle` are
|
|
80
|
+
* for left-to-right identifiers and paths, and `middle` requires
|
|
81
|
+
* string or number children so it can split them.
|
|
82
|
+
*/
|
|
83
|
+
truncate?: TextTruncate;
|
|
84
|
+
/**
|
|
85
|
+
* The suffix `truncate="middle"` keeps (default `segment`: the last
|
|
86
|
+
* path segment, or the last 10 characters when there is no `/` or
|
|
87
|
+
* `\\` separator).
|
|
88
|
+
*/
|
|
89
|
+
truncateKeep?: TextTruncateKeep;
|
|
90
|
+
});
|
|
91
|
+
/**
|
|
92
|
+
* Semantic heading, paragraph, or inline text. Block variants use the standard
|
|
93
|
+
* content-item padding; `span` adds no box geometry.
|
|
94
|
+
* All ordinary native heading/paragraph attributes pass through to the element.
|
|
95
|
+
*/
|
|
96
|
+
declare function Text({ variant: Variant, tone, color, size, font, border, flush, controlMargins, lineHeight, align, wrap, maxLines, truncate, truncateKeep, children, class: classValue, className, style, ...attributes }: TextProps): kerfjs.SafeHtml;
|
|
97
|
+
|
|
98
|
+
export { FieldLabel, type FieldLabelProps, Sides, Text, type TextAlign, type TextBorder, type TextContent, type TextFont, type TextLineHeight, type TextProps, type TextSize, type TextTone, type TextTruncate, type TextTruncateKeep, type TextVariant, type TextWrap };
|
package/dist/text.js
ADDED
package/dist/text.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"text.js"}
|
|
@@ -1,43 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
value: string;
|
|
5
|
-
label: string;
|
|
6
|
-
offset?: number;
|
|
7
|
-
accessibleLabel?: string;
|
|
8
|
-
}
|
|
9
|
-
interface TokenSearchFieldProps {
|
|
10
|
-
id: string;
|
|
11
|
-
label: string;
|
|
12
|
-
query?: string;
|
|
13
|
-
tokens?: readonly TokenSearchToken[];
|
|
14
|
-
placeholder?: string;
|
|
15
|
-
tokenPlaceholder?: string;
|
|
16
|
-
disabled?: boolean;
|
|
17
|
-
autofocus?: boolean;
|
|
18
|
-
/** Allow an empty field to render as one iconic action. */
|
|
19
|
-
collapsible?: boolean;
|
|
20
|
-
/** Keep an empty collapsible field open while the application owns focus. */
|
|
21
|
-
expanded?: boolean;
|
|
22
|
-
expandAction?: string;
|
|
23
|
-
expandLabel?: string;
|
|
24
|
-
leading?: SafeHtml;
|
|
25
|
-
trailing?: SafeHtml;
|
|
26
|
-
editAction?: string;
|
|
27
|
-
removeAction?: string;
|
|
28
|
-
clearAction?: string;
|
|
29
|
-
clearLabel?: string;
|
|
30
|
-
className?: string;
|
|
31
|
-
editorAttributes?: Readonly<Record<`data-${string}`, string>>;
|
|
32
|
-
}
|
|
33
|
-
interface TokenSearchFieldValue {
|
|
34
|
-
query: string;
|
|
35
|
-
tokens: TokenSearchToken[];
|
|
36
|
-
}
|
|
37
|
-
declare function TokenSearchField({ id, label, query, tokens, placeholder, tokenPlaceholder, disabled, autofocus, collapsible, expanded, expandAction, expandLabel, leading, trailing, editAction, removeAction, clearAction, clearLabel, className, editorAttributes, }: TokenSearchFieldProps): SafeHtml;
|
|
38
|
-
/** Read editable text and ordered token offsets from a rendered TokenSearchField editor. */
|
|
39
|
-
declare function readTokenSearchField(editor: HTMLElement, knownTokens?: readonly TokenSearchToken[]): TokenSearchFieldValue;
|
|
40
|
-
/** Focus an editor and place its caret at a text offset, skipping atomic token chips. */
|
|
41
|
-
declare function placeTokenSearchCaret(editor: HTMLElement, offset?: number): void;
|
|
42
|
-
|
|
43
|
-
export { TokenSearchField, type TokenSearchFieldProps, type TokenSearchFieldValue, type TokenSearchToken, placeTokenSearchCaret, readTokenSearchField };
|
|
1
|
+
export { T as TokenSearchEditorAttributes, a as TokenSearchField, b as TokenSearchFieldProps, c as TokenSearchFieldValue, j as TokenSearchToken, k as TokenSearchTrailingAction, l as TokenSearchTrailingActionAttributes, p as placeTokenSearchCaret, r as readTokenSearchField } from './token-search-model-aYR0YAei.js';
|
|
2
|
+
import 'kerfjs';
|
|
3
|
+
import './semantic-content-BbzjvSu9.js';
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { SafeHtml, Signal } from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
3
|
+
|
|
4
|
+
interface TokenSearchToken {
|
|
5
|
+
value: string;
|
|
6
|
+
label: string;
|
|
7
|
+
offset?: number;
|
|
8
|
+
accessibleLabel?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Domain `data-*` metadata for a trailing action button. The component owns
|
|
12
|
+
* `data-action` (pass `action`) and its state attributes.
|
|
13
|
+
*/
|
|
14
|
+
type TokenSearchTrailingActionAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
15
|
+
'data-action'?: never;
|
|
16
|
+
'data-component'?: never;
|
|
17
|
+
'data-key'?: never;
|
|
18
|
+
}>;
|
|
19
|
+
interface TokenSearchTrailingActionBase {
|
|
20
|
+
/** Decorative glyph, such as a `LucideIcon`. */
|
|
21
|
+
icon: SafeHtml;
|
|
22
|
+
/** Accessible name and tooltip, in title style ("Search Help"). */
|
|
23
|
+
label: string;
|
|
24
|
+
/** Delegated `data-action` value. */
|
|
25
|
+
action: string;
|
|
26
|
+
id?: string;
|
|
27
|
+
/** `aria-controls`: the id of the surface this button opens or toggles. */
|
|
28
|
+
controls?: string;
|
|
29
|
+
/** `aria-haspopup` for a button that opens a dialog, menu, or listbox. */
|
|
30
|
+
haspopup?: 'dialog' | 'menu' | 'listbox' | 'true';
|
|
31
|
+
/** Domain `data-*` metadata for the app's delegated handler. */
|
|
32
|
+
attributes?: TokenSearchTrailingActionAttributes;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A compact icon button in the field's trailing slot, sized and styled like
|
|
36
|
+
* the clear button. Pass `expanded` for a disclosure (a help surface it opens)
|
|
37
|
+
* or `pressed` for a toggle; the button shows the state with its hover fill.
|
|
38
|
+
*/
|
|
39
|
+
type TokenSearchTrailingAction = TokenSearchTrailingActionBase & ({
|
|
40
|
+
expanded?: boolean;
|
|
41
|
+
pressed?: never;
|
|
42
|
+
} | {
|
|
43
|
+
expanded?: never;
|
|
44
|
+
pressed?: boolean;
|
|
45
|
+
});
|
|
46
|
+
type TokenSearchEditorAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
47
|
+
'data-component'?: never;
|
|
48
|
+
'data-key'?: never;
|
|
49
|
+
'data-morph-skip'?: never;
|
|
50
|
+
'data-token-search-editor'?: never;
|
|
51
|
+
'data-token-count'?: never;
|
|
52
|
+
'data-placeholder'?: never;
|
|
53
|
+
}>;
|
|
54
|
+
interface TokenSearchFieldBaseProps {
|
|
55
|
+
id: string;
|
|
56
|
+
label: string;
|
|
57
|
+
query?: string;
|
|
58
|
+
tokens?: readonly TokenSearchToken[];
|
|
59
|
+
/** Opt-in grammar, suggestion, and evaluation state. Overrides `query` and `tokens`. */
|
|
60
|
+
model?: TokenSearchModel;
|
|
61
|
+
/**
|
|
62
|
+
* Editor identity for a programmatic text replacement. The editor's text is
|
|
63
|
+
* DOM-owned between token changes, so a new `query` with the same tokens
|
|
64
|
+
* does not re-render it (that would reset the caret on every keystroke).
|
|
65
|
+
* Change `revision` when the app replaces the text itself — reseeding a
|
|
66
|
+
* persistent dialog's field on reopen, applying a saved search — and the
|
|
67
|
+
* editor is rebuilt from `query` and `tokens`.
|
|
68
|
+
*/
|
|
69
|
+
revision?: string | number;
|
|
70
|
+
placeholder?: string;
|
|
71
|
+
tokenPlaceholder?: string;
|
|
72
|
+
disabled?: boolean;
|
|
73
|
+
autofocus?: boolean;
|
|
74
|
+
/** Let an expanded collapsible field consume the available inline width. */
|
|
75
|
+
fill?: boolean;
|
|
76
|
+
leading?: KerfUiContent;
|
|
77
|
+
editAction?: string;
|
|
78
|
+
removeAction?: string;
|
|
79
|
+
clearAction?: string;
|
|
80
|
+
clearLabel?: string;
|
|
81
|
+
/** Icon for the clear button. Default: the Lucide `x` glyph token chips also use. */
|
|
82
|
+
clearIcon?: SafeHtml;
|
|
83
|
+
className?: string;
|
|
84
|
+
editorAttributes?: TokenSearchEditorAttributes;
|
|
85
|
+
/** Native named-slot assignment when composed inside a web component. */
|
|
86
|
+
slot?: string;
|
|
87
|
+
}
|
|
88
|
+
type TokenSearchTrailingProps = {
|
|
89
|
+
trailing?: KerfUiContent;
|
|
90
|
+
trailingAction?: never;
|
|
91
|
+
} | {
|
|
92
|
+
trailing?: never;
|
|
93
|
+
trailingAction: TokenSearchTrailingAction;
|
|
94
|
+
};
|
|
95
|
+
type TokenSearchPresentationProps = {
|
|
96
|
+
/** Standalone field chrome or the inset visual layer of a configured toolbar group. */
|
|
97
|
+
presentation?: 'standalone' | 'toolbar-group';
|
|
98
|
+
hint?: never;
|
|
99
|
+
required?: never;
|
|
100
|
+
} | {
|
|
101
|
+
/** Visible form label and optional hint around the full-width standalone control. */
|
|
102
|
+
presentation: 'form-field';
|
|
103
|
+
hint?: string;
|
|
104
|
+
/** Marks the editor required; the app validates its value. */
|
|
105
|
+
required?: boolean;
|
|
106
|
+
};
|
|
107
|
+
type TokenSearchCollapsibleProps = {
|
|
108
|
+
/** Allow an empty field to render as one iconic action. */
|
|
109
|
+
collapsible: true;
|
|
110
|
+
/** Keep an empty collapsible field open while the application owns focus. */
|
|
111
|
+
expanded?: boolean;
|
|
112
|
+
expandAction?: string;
|
|
113
|
+
expandLabel?: string;
|
|
114
|
+
} | {
|
|
115
|
+
collapsible?: false;
|
|
116
|
+
expanded?: never;
|
|
117
|
+
expandAction?: never;
|
|
118
|
+
expandLabel?: never;
|
|
119
|
+
};
|
|
120
|
+
type TokenSearchFieldProps = TokenSearchFieldBaseProps & TokenSearchCollapsibleProps & TokenSearchTrailingProps & TokenSearchPresentationProps;
|
|
121
|
+
interface TokenSearchFieldValue {
|
|
122
|
+
query: string;
|
|
123
|
+
tokens: TokenSearchToken[];
|
|
124
|
+
}
|
|
125
|
+
declare function TokenSearchField({ id, label, query, tokens, model, revision, placeholder, tokenPlaceholder, disabled, autofocus, fill, collapsible, expanded, expandAction, expandLabel, leading, trailing, trailingAction, presentation, hint, required, editAction, removeAction, clearAction, clearLabel, clearIcon, className, editorAttributes, slot, }: TokenSearchFieldProps): SafeHtml;
|
|
126
|
+
/** Read editable text and ordered token offsets from a rendered TokenSearchField editor. */
|
|
127
|
+
declare function readTokenSearchField(editor: HTMLElement, knownTokens?: readonly TokenSearchToken[]): TokenSearchFieldValue;
|
|
128
|
+
/** Focus an editor and place its caret at a text offset, skipping atomic token chips. */
|
|
129
|
+
declare function placeTokenSearchCaret(editor: HTMLElement, offset?: number): void;
|
|
130
|
+
|
|
131
|
+
interface TokenSearchRule {
|
|
132
|
+
/** The word before `:` (for example `tag` or `status`). */
|
|
133
|
+
name: string;
|
|
134
|
+
/** Return a canonical value, or undefined to leave invalid input as text. */
|
|
135
|
+
parse?: (input: string) => string | undefined;
|
|
136
|
+
/** Label for a committed chip. Defaults to `name:input`. */
|
|
137
|
+
label?: (value: string, input: string) => string;
|
|
138
|
+
/** Suggestions for the unfinished value after `name:`, with current committed tokens. */
|
|
139
|
+
suggest?: (input: string, state: TokenSearchState) => readonly (string | {
|
|
140
|
+
value: string;
|
|
141
|
+
label: string;
|
|
142
|
+
})[];
|
|
143
|
+
}
|
|
144
|
+
interface TokenSearchResolvedToken extends TokenSearchToken {
|
|
145
|
+
kind: string;
|
|
146
|
+
parsedValue: string;
|
|
147
|
+
}
|
|
148
|
+
interface TokenSearchState {
|
|
149
|
+
query: string;
|
|
150
|
+
tokens: TokenSearchResolvedToken[];
|
|
151
|
+
}
|
|
152
|
+
interface TokenSearchSuggestion {
|
|
153
|
+
value: string;
|
|
154
|
+
label: string;
|
|
155
|
+
}
|
|
156
|
+
interface TokenSearchModel<Result = unknown> {
|
|
157
|
+
state: Signal<TokenSearchState>;
|
|
158
|
+
/** Changes when a model action must replace DOM-owned editor text. */
|
|
159
|
+
editorRevision: Signal<number>;
|
|
160
|
+
suggestions: Signal<readonly TokenSearchSuggestion[]>;
|
|
161
|
+
result: Signal<Result | undefined>;
|
|
162
|
+
edit(value: TokenSearchFieldValue, commit?: boolean): void;
|
|
163
|
+
/** Replace app-owned search state and rebuild the DOM-owned editor text. */
|
|
164
|
+
replace(value: TokenSearchFieldValue): void;
|
|
165
|
+
submit(value: TokenSearchFieldValue): void;
|
|
166
|
+
choose(value: string): void;
|
|
167
|
+
/** Commit a value for the active `name:` prefix, even when it is not suggested. */
|
|
168
|
+
commit(value: string): void;
|
|
169
|
+
expandToken(value: string): void;
|
|
170
|
+
remove(value: string): void;
|
|
171
|
+
clear(): void;
|
|
172
|
+
dismiss(): void;
|
|
173
|
+
}
|
|
174
|
+
interface TokenSearchModelOptions<Result> {
|
|
175
|
+
rules?: readonly TokenSearchRule[];
|
|
176
|
+
initial?: TokenSearchFieldValue;
|
|
177
|
+
/** Runs after every state change, including initial state. */
|
|
178
|
+
evaluate?: (state: TokenSearchState) => Result;
|
|
179
|
+
onSubmit?: (state: TokenSearchState, result: Result | undefined) => void;
|
|
180
|
+
}
|
|
181
|
+
/** Opt-in state, token parsing, suggestions, and evaluation for TokenSearchField. */
|
|
182
|
+
declare function createTokenSearchModel<Result = unknown>({ rules, initial, evaluate, onSubmit, }?: TokenSearchModelOptions<Result>): TokenSearchModel<Result>;
|
|
183
|
+
|
|
184
|
+
export { type TokenSearchEditorAttributes as T, TokenSearchField as a, type TokenSearchFieldProps as b, type TokenSearchFieldValue as c, type TokenSearchModel as d, type TokenSearchModelOptions as e, type TokenSearchResolvedToken as f, type TokenSearchRule as g, type TokenSearchState as h, type TokenSearchSuggestion as i, type TokenSearchToken as j, type TokenSearchTrailingAction as k, type TokenSearchTrailingActionAttributes as l, createTokenSearchModel as m, placeTokenSearchCaret as p, readTokenSearchField as r };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { d as TokenSearchModel, e as TokenSearchModelOptions, f as TokenSearchResolvedToken, g as TokenSearchRule, h as TokenSearchState, i as TokenSearchSuggestion, m as createTokenSearchModel } from './token-search-model-aYR0YAei.js';
|
|
2
|
+
import 'kerfjs';
|
|
3
|
+
import './semantic-content-BbzjvSu9.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"token-search-model.js"}
|