@kerfjs/ui 5.0.0-beta.104 → 5.0.0-beta.106
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 +155 -116
- package/ai/application-ui-profile.defaults.json +125 -4
- package/ai/compile-time-contracts-v1.json +11 -11
- package/ai/component-catalog.json +2606 -628
- package/ai/component-composition-rules.json +10 -10
- package/ai/component-composition.json +1688 -300
- package/ai/components/README.md +66 -48
- package/ai/components/application-tabs.md +4 -4
- package/ai/components/badge.md +1 -0
- package/ai/components/button.md +91 -0
- package/ai/components/checkbox.md +89 -0
- package/ai/components/choice-chips.md +9 -3
- package/ai/components/color-field.md +92 -0
- package/ai/components/color-picker.md +90 -0
- package/ai/components/color-swatches.md +82 -0
- package/ai/components/combobox.md +6 -4
- package/ai/components/content-item.md +5 -2
- package/ai/components/disclosure.md +83 -0
- package/ai/components/file-picker.md +1 -0
- package/ai/components/foundation.md +1 -1
- package/ai/components/list-action-row.md +3 -3
- package/ai/components/list-detail-dialog.md +90 -0
- package/ai/components/list.md +2 -0
- package/ai/components/lucide-icon.md +2 -0
- package/ai/components/{composer.md → message-composer.md} +17 -16
- package/ai/components/pane.md +3 -1
- package/ai/components/popup-menu.md +12 -9
- package/ai/components/progress-bar.md +82 -0
- package/ai/components/progress-ring.md +80 -0
- package/ai/components/radio-group.md +88 -0
- package/ai/components/recipe-list-detail-dialog.md +5 -5
- package/ai/components/{token-search-field.md → search-field.md} +23 -23
- package/ai/components/select.md +15 -13
- package/ai/components/slider.md +84 -0
- package/ai/components/surface-scaffold.md +16 -13
- package/ai/components/switch.md +81 -0
- package/ai/components/tab-bar.md +6 -6
- package/ai/components/tab-navigator.md +2 -2
- package/ai/components/tabs.md +7 -7
- package/ai/components/tag-field.md +86 -0
- package/ai/components/text-field.md +98 -0
- package/ai/components/text.md +1 -0
- package/ai/components/toast.md +85 -0
- package/ai/components/toolbar-control-group.md +3 -3
- package/ai/components/tooltip.md +81 -0
- package/ai/components/wa-accordion-item.md +11 -5
- package/ai/components/wa-accordion.md +11 -5
- package/ai/components/wa-animated-image.md +2 -1
- package/ai/components/wa-animation.md +1 -0
- package/ai/components/wa-avatar.md +1 -0
- package/ai/components/wa-badge.md +10 -3
- package/ai/components/wa-breadcrumb-item.md +1 -0
- package/ai/components/wa-breadcrumb.md +1 -0
- package/ai/components/wa-button-group.md +6 -4
- package/ai/components/wa-button.md +7 -5
- package/ai/components/wa-callout.md +7 -5
- package/ai/components/wa-card.md +12 -4
- package/ai/components/wa-carousel-item.md +1 -0
- package/ai/components/wa-carousel.md +1 -0
- package/ai/components/wa-checkbox-group.md +11 -4
- package/ai/components/wa-checkbox.md +10 -4
- package/ai/components/wa-color-picker.md +13 -5
- package/ai/components/wa-comparison.md +2 -1
- package/ai/components/wa-copy-button.md +1 -0
- package/ai/components/wa-details.md +11 -5
- package/ai/components/wa-dialog.md +10 -4
- package/ai/components/wa-divider.md +1 -0
- package/ai/components/wa-drawer.md +12 -5
- package/ai/components/wa-dropdown-item.md +8 -6
- package/ai/components/wa-dropdown.md +8 -6
- package/ai/components/wa-format-bytes.md +1 -0
- package/ai/components/wa-format-date.md +1 -0
- package/ai/components/wa-format-number.md +1 -0
- package/ai/components/wa-icon.md +2 -1
- package/ai/components/wa-include.md +6 -4
- package/ai/components/wa-input.md +9 -6
- package/ai/components/wa-intersection-observer.md +1 -0
- package/ai/components/wa-known-date.md +1 -0
- package/ai/components/wa-markdown.md +1 -0
- package/ai/components/wa-mutation-observer.md +1 -0
- package/ai/components/wa-number-input.md +1 -0
- package/ai/components/wa-option.md +7 -5
- package/ai/components/wa-otp-input.md +1 -0
- package/ai/components/wa-page.md +13 -4
- package/ai/components/wa-pagination.md +1 -0
- package/ai/components/wa-popover.md +11 -5
- package/ai/components/wa-popup.md +11 -4
- package/ai/components/wa-progress-bar.md +11 -4
- package/ai/components/wa-progress-ring.md +11 -4
- package/ai/components/wa-qr-code.md +1 -0
- package/ai/components/wa-radio-group.md +12 -4
- package/ai/components/wa-radio.md +10 -4
- package/ai/components/wa-random-content.md +1 -0
- package/ai/components/wa-rating.md +1 -0
- package/ai/components/wa-relative-time.md +1 -0
- package/ai/components/wa-resize-observer.md +1 -0
- package/ai/components/wa-scroller.md +12 -4
- package/ai/components/wa-select.md +7 -5
- package/ai/components/wa-skeleton.md +10 -3
- package/ai/components/wa-slider.md +11 -5
- package/ai/components/wa-spinner.md +7 -5
- package/ai/components/wa-split-panel.md +7 -5
- package/ai/components/wa-step.md +56 -0
- package/ai/components/wa-stepper.md +56 -0
- package/ai/components/wa-switch.md +10 -3
- package/ai/components/wa-tab-group.md +8 -6
- package/ai/components/wa-tab-panel.md +7 -5
- package/ai/components/wa-tab.md +8 -6
- package/ai/components/wa-tag-input.md +62 -0
- package/ai/components/wa-tag.md +9 -6
- package/ai/components/wa-textarea.md +10 -3
- package/ai/components/wa-time-input.md +1 -0
- package/ai/components/wa-toast-item.md +9 -7
- package/ai/components/wa-toast.md +9 -7
- package/ai/components/wa-tooltip.md +11 -5
- package/ai/components/wa-tree-item.md +2 -1
- package/ai/components/wa-tree.md +2 -1
- package/ai/components/wa-zoomable-frame.md +2 -1
- package/ai/components/workbench-dialog.md +90 -0
- package/ai/public-api-signatures-v1.md +1579 -247
- package/ai/skill.md +83 -50
- package/ai/webawesome-jsx-signatures-v1.md +4 -1
- package/dist/badge.d.ts +9 -1
- package/dist/badge.js +1 -1
- package/dist/browser/button.js +5 -0
- package/dist/browser/catalog.js +3 -2
- package/dist/browser/{icon-button.js → checkbox.js} +2 -2
- package/dist/browser/color-field.js +4 -0
- package/dist/browser/color-picker.js +5 -0
- package/dist/browser/color-swatches.js +3 -0
- package/dist/browser/disclosure.js +5 -0
- package/dist/browser/list-action-row.js +1 -0
- package/dist/browser/list-detail-dialog.js +14 -0
- package/dist/browser/message-composer.js +5 -0
- package/dist/browser/popup-menu.js +1 -0
- package/dist/browser/progress-bar.js +3 -0
- package/dist/browser/progress-ring.js +3 -0
- package/dist/browser/radio-group.js +3 -0
- package/dist/browser/search-field.js +4 -0
- package/dist/browser/slider.js +3 -0
- package/dist/browser/surface-scaffold.js +1 -0
- package/dist/browser/switch.js +3 -0
- package/dist/browser/tab-bar-item.js +4 -0
- package/dist/browser/tag-field.js +5 -0
- package/dist/browser/text-field.js +4 -0
- package/dist/browser/workbench-dialog.js +15 -0
- package/dist/button.d.ts +108 -0
- package/dist/button.js +7 -0
- package/dist/button.js.map +1 -0
- package/dist/catalog-resources.d.ts +1 -1
- package/dist/catalog.d.ts +3 -3
- package/dist/catalog.js +57 -27
- package/dist/catalog.js.map +1 -1
- package/dist/checkbox.d.ts +45 -0
- package/dist/checkbox.js +6 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/choice-chips.d.ts +49 -15
- package/dist/choice-chips.js +1 -1
- package/dist/chunk-23PPPNH6.js +93 -0
- package/dist/chunk-23PPPNH6.js.map +1 -0
- package/dist/{chunk-FNZQOUZ5.js → chunk-2FW7D4IG.js} +2 -2
- package/dist/{chunk-FNZQOUZ5.js.map → chunk-2FW7D4IG.js.map} +1 -1
- package/dist/{chunk-ZYU5WRC3.js → chunk-3GLYIIFR.js} +2 -2
- package/dist/{chunk-ZYU5WRC3.js.map → chunk-3GLYIIFR.js.map} +1 -1
- package/dist/{chunk-5NQF35VO.js → chunk-4RECPEHI.js} +2 -2
- package/dist/{chunk-5NQF35VO.js.map → chunk-4RECPEHI.js.map} +1 -1
- package/dist/{chunk-7IUEBNCO.js → chunk-5USKCWGL.js} +8 -3
- package/dist/chunk-5USKCWGL.js.map +1 -0
- package/dist/chunk-6VVIW7VB.js +69 -0
- package/dist/chunk-6VVIW7VB.js.map +1 -0
- package/dist/{chunk-LL45C7BB.js → chunk-7K6U6FCN.js} +1 -1
- package/dist/chunk-7K6U6FCN.js.map +1 -0
- package/dist/{chunk-HQZYKJ56.js → chunk-7W3GKMN4.js} +110 -74
- package/dist/chunk-7W3GKMN4.js.map +1 -0
- package/dist/chunk-ACUKTVS3.js +371 -0
- package/dist/chunk-ACUKTVS3.js.map +1 -0
- package/dist/{chunk-YQ2AC4E2.js → chunk-AMIHGFLP.js} +2 -2
- package/dist/{chunk-YQ2AC4E2.js.map → chunk-AMIHGFLP.js.map} +1 -1
- package/dist/chunk-ATGAJVZ6.js +268 -0
- package/dist/chunk-ATGAJVZ6.js.map +1 -0
- package/dist/chunk-AYPGXR2E.js +20 -0
- package/dist/chunk-AYPGXR2E.js.map +1 -0
- package/dist/{chunk-ETCWQLJV.js → chunk-BKUMG2KB.js} +38 -28
- package/dist/chunk-BKUMG2KB.js.map +1 -0
- package/dist/chunk-C26Q6P4Q.js +76 -0
- package/dist/chunk-C26Q6P4Q.js.map +1 -0
- package/dist/chunk-C3RLKKFQ.js +452 -0
- package/dist/chunk-C3RLKKFQ.js.map +1 -0
- package/dist/{chunk-T5BJBMW7.js → chunk-CIAUILRR.js} +5 -5
- package/dist/chunk-CIAUILRR.js.map +1 -0
- package/dist/chunk-CNM6ZWP2.js +38 -0
- package/dist/chunk-CNM6ZWP2.js.map +1 -0
- package/dist/{chunk-LPHU44S3.js → chunk-CTQUDCY5.js} +3 -1
- package/dist/chunk-CTQUDCY5.js.map +1 -0
- package/dist/{chunk-MXNIVEVL.js → chunk-D4MXSAMI.js} +5 -3
- package/dist/chunk-D4MXSAMI.js.map +1 -0
- package/dist/{chunk-YBWQR2OK.js → chunk-DDSCVEO5.js} +10 -9
- package/dist/chunk-DDSCVEO5.js.map +1 -0
- package/dist/{chunk-SIW64V65.js → chunk-DF2YKGIX.js} +3 -3
- package/dist/{chunk-SIW64V65.js.map → chunk-DF2YKGIX.js.map} +1 -1
- package/dist/{chunk-3SKAEPPZ.js → chunk-ECFCAKWE.js} +4 -4
- package/dist/{chunk-3SKAEPPZ.js.map → chunk-ECFCAKWE.js.map} +1 -1
- package/dist/chunk-EKBMUXFV.js +298 -0
- package/dist/chunk-EKBMUXFV.js.map +1 -0
- package/dist/{chunk-IXLUZHGT.js → chunk-FG6U7KQQ.js} +5 -5
- package/dist/{chunk-IXLUZHGT.js.map → chunk-FG6U7KQQ.js.map} +1 -1
- package/dist/chunk-FKKJHGN5.js +147 -0
- package/dist/chunk-FKKJHGN5.js.map +1 -0
- package/dist/{chunk-FDZNYD4C.js → chunk-GCAK23PU.js} +34 -3
- package/dist/chunk-GCAK23PU.js.map +1 -0
- package/dist/chunk-GXSX6Q6O.js +42 -0
- package/dist/chunk-GXSX6Q6O.js.map +1 -0
- package/dist/{chunk-LOSRXZAH.js → chunk-HJXVVFBT.js} +14 -6
- package/dist/chunk-HJXVVFBT.js.map +1 -0
- package/dist/{chunk-M5KZ26VV.js → chunk-HQZG3OFL.js} +11 -1
- package/dist/chunk-HQZG3OFL.js.map +1 -0
- package/dist/{chunk-ELCMSQNJ.js → chunk-HTERKONR.js} +8 -8
- package/dist/chunk-HTERKONR.js.map +1 -0
- package/dist/chunk-HYORKKYP.js +8 -0
- package/dist/chunk-HYORKKYP.js.map +1 -0
- package/dist/chunk-IO27YTL3.js +73 -0
- package/dist/chunk-IO27YTL3.js.map +1 -0
- package/dist/chunk-ITUQC4FW.js +163 -0
- package/dist/chunk-ITUQC4FW.js.map +1 -0
- package/dist/chunk-K57NINLH.js +137 -0
- package/dist/chunk-K57NINLH.js.map +1 -0
- package/dist/chunk-KC6WUSNS.js +34 -0
- package/dist/chunk-KC6WUSNS.js.map +1 -0
- package/dist/{chunk-W4IK7AWD.js → chunk-KDQZ3E5C.js} +3 -1
- package/dist/chunk-KDQZ3E5C.js.map +1 -0
- package/dist/{chunk-2MSPNRWJ.js → chunk-KK3S5OTW.js} +27 -11
- package/dist/chunk-KK3S5OTW.js.map +1 -0
- package/dist/chunk-LTBVP6VN.js +59 -0
- package/dist/chunk-LTBVP6VN.js.map +1 -0
- package/dist/chunk-OHPYT2BH.js +82 -0
- package/dist/chunk-OHPYT2BH.js.map +1 -0
- package/dist/{chunk-HZPHCSCS.js → chunk-OY2MXIBB.js} +8 -2
- package/dist/chunk-OY2MXIBB.js.map +1 -0
- package/dist/chunk-PE2KPZDW.js +85 -0
- package/dist/chunk-PE2KPZDW.js.map +1 -0
- package/dist/{chunk-QTSMHH5J.js → chunk-QPTJ5DOO.js} +5 -3
- package/dist/chunk-QPTJ5DOO.js.map +1 -0
- package/dist/{chunk-JOR5LGYE.js → chunk-RFLW4FPL.js} +1 -1
- package/dist/chunk-RFLW4FPL.js.map +1 -0
- package/dist/{chunk-U6QYTMDB.js → chunk-RMWNO6BA.js} +6 -2
- package/dist/chunk-RMWNO6BA.js.map +1 -0
- package/dist/{chunk-TDMHA7C3.js → chunk-SQ2Q3OQI.js} +112 -63
- package/dist/chunk-SQ2Q3OQI.js.map +1 -0
- package/dist/{chunk-K4AT3V3J.js → chunk-T74YB76U.js} +13 -11
- package/dist/chunk-T74YB76U.js.map +1 -0
- package/dist/{chunk-BYFTHA4I.js → chunk-TAHR457X.js} +53 -6
- package/dist/chunk-TAHR457X.js.map +1 -0
- package/dist/{chunk-3VXDSIBJ.js → chunk-TKNVL53O.js} +2 -2
- package/dist/{chunk-3VXDSIBJ.js.map → chunk-TKNVL53O.js.map} +1 -1
- package/dist/chunk-TNJLNLVE.js +115 -0
- package/dist/chunk-TNJLNLVE.js.map +1 -0
- package/dist/chunk-TUID42UE.js +15 -0
- package/dist/chunk-TUID42UE.js.map +1 -0
- package/dist/{chunk-CR5U5FV6.js → chunk-UMNHJSIO.js} +93 -80
- package/dist/chunk-UMNHJSIO.js.map +1 -0
- package/dist/chunk-UTCAOOXU.js +116 -0
- package/dist/chunk-UTCAOOXU.js.map +1 -0
- package/dist/{chunk-ZJC5ND3M.js → chunk-VEME3D7K.js} +35 -35
- package/dist/chunk-VEME3D7K.js.map +1 -0
- package/dist/{chunk-HLDRH23D.js → chunk-WJKHLOP5.js} +2 -2
- package/dist/{chunk-HLDRH23D.js.map → chunk-WJKHLOP5.js.map} +1 -1
- package/dist/chunk-WU57BYYM.js +115 -0
- package/dist/chunk-WU57BYYM.js.map +1 -0
- package/dist/{chunk-TGLUDQP2.js → chunk-ZCDRLN3B.js} +11 -11
- package/dist/chunk-ZCDRLN3B.js.map +1 -0
- package/dist/chunk-ZX2QQJXD.js +249 -0
- package/dist/chunk-ZX2QQJXD.js.map +1 -0
- package/dist/{chunk-6E2H2E5A.js → chunk-ZXZAECHZ.js} +6 -6
- package/dist/{chunk-6E2H2E5A.js.map → chunk-ZXZAECHZ.js.map} +1 -1
- package/dist/collapsible-panel.js +3 -3
- package/dist/color-field.d.ts +51 -0
- package/dist/color-field.js +92 -0
- package/dist/color-field.js.map +1 -0
- package/dist/color-picker.d.ts +88 -0
- package/dist/color-picker.js +8 -0
- package/dist/color-picker.js.map +1 -0
- package/dist/color-swatches.d.ts +56 -0
- package/dist/color-swatches.js +4 -0
- package/dist/color-swatches.js.map +1 -0
- package/dist/combobox.js +1 -1
- package/dist/content-item.d.ts +13 -1
- package/dist/content-item.js +1 -1
- package/dist/disclosure-arrow.js +1 -1
- package/dist/disclosure.d.ts +57 -0
- package/dist/disclosure.js +51 -0
- package/dist/disclosure.js.map +1 -0
- package/dist/file-picker.d.ts +7 -0
- package/dist/file-picker.js +1 -1
- package/dist/help-tags-register.d.ts +8 -8
- package/dist/help-tags-register.js +3 -2
- package/dist/help-tags-register.js.map +1 -1
- package/dist/index.d.ts +16 -9
- package/dist/index.js +58 -46
- package/dist/list-action-row.js +4 -1
- package/dist/list-detail-dialog.d.ts +117 -0
- package/dist/list-detail-dialog.js +165 -0
- package/dist/list-detail-dialog.js.map +1 -0
- package/dist/list-header.js +1 -1
- package/dist/list-item.js +1 -1
- package/dist/list.d.ts +17 -2
- package/dist/list.js +1 -1
- package/dist/lucide-icon.d.ts +9 -1
- package/dist/lucide-icon.js +1 -1
- package/dist/{composer.d.ts → message-composer.d.ts} +20 -12
- package/dist/message-composer.js +6 -0
- package/dist/message-composer.js.map +1 -0
- package/dist/nav-stack.js +1 -1
- package/dist/pane.d.ts +36 -3
- package/dist/pane.js +1 -1
- package/dist/popup-menu-register.d.ts +6 -5
- package/dist/popup-menu-register.js +3 -326
- package/dist/popup-menu-register.js.map +1 -1
- package/dist/popup-menu.d.ts +41 -23
- package/dist/popup-menu.js +5 -1
- package/dist/progress-bar.d.ts +52 -0
- package/dist/progress-bar.js +68 -0
- package/dist/progress-bar.js.map +1 -0
- package/dist/progress-ring.d.ts +44 -0
- package/dist/progress-ring.js +73 -0
- package/dist/progress-ring.js.map +1 -0
- package/dist/radio-group.d.ts +62 -0
- package/dist/radio-group.js +4 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/row.js +1 -1
- package/dist/{token-search-model-JA1i8z4D.d.ts → search-field-CrGTN5sa.d.ts} +45 -45
- package/dist/search-field-model.d.ts +3 -0
- package/dist/search-field-model.js +3 -0
- package/dist/search-field-model.js.map +1 -0
- package/dist/search-field.d.ts +3 -0
- package/dist/search-field.js +5 -0
- package/dist/search-field.js.map +1 -0
- package/dist/select-register.d.ts +6 -3
- package/dist/select-register.js +383 -241
- package/dist/select-register.js.map +1 -1
- package/dist/select.d.ts +30 -6
- package/dist/select.js +3 -1
- package/dist/selection.d.ts +54 -0
- package/dist/selection.js +3 -0
- package/dist/selection.js.map +1 -0
- package/dist/slider.d.ts +74 -0
- package/dist/slider.js +103 -0
- package/dist/slider.js.map +1 -0
- package/dist/split-button.js +1 -1
- package/dist/split-view.d.ts +5 -2
- package/dist/split-view.js +18 -159
- package/dist/split-view.js.map +1 -1
- package/dist/state-banner.js +1 -1
- package/dist/styles/badge.css +18 -6
- package/dist/styles/button.css +230 -0
- package/dist/styles/catalog/components/catalog-example.css +13 -4
- package/dist/styles/checkbox.css +121 -0
- package/dist/styles/choice-chips.css +58 -7
- package/dist/styles/color-field.css +125 -0
- package/dist/styles/color-picker.css +331 -0
- package/dist/styles/color-swatches.css +122 -0
- package/dist/styles/combobox.css +7 -5
- package/dist/styles/components/actions/button/button.css +230 -0
- package/dist/styles/components/actions/popup-menu/popup-menu.css +326 -198
- package/dist/styles/components/actions/toolbar/toolbar.css +10 -3
- package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +67 -104
- package/dist/styles/components/actions/toolbar-text/toolbar-text.css +5 -18
- package/dist/styles/components/collections/list/list.css +37 -0
- package/dist/styles/components/feedback/badge/badge.css +18 -6
- package/dist/styles/components/feedback/progress-bar/progress-bar.css +168 -0
- package/dist/styles/components/feedback/progress-ring/progress-ring.css +91 -0
- package/dist/styles/components/feedback/state-banner/state-banner.css +18 -3
- package/dist/styles/components/forms/checkbox/checkbox.css +121 -0
- package/dist/styles/components/forms/choice-chips/choice-chips.css +58 -7
- package/dist/styles/components/forms/color-field/color-field.css +125 -0
- package/dist/styles/components/forms/color-picker/color-picker.css +331 -0
- package/dist/styles/components/forms/color-swatches/color-swatches.css +122 -0
- package/dist/styles/components/forms/combobox/combobox.css +7 -5
- package/dist/styles/components/forms/{composer/composer.css → message-composer/message-composer.css} +17 -33
- package/dist/styles/components/forms/radio-group/radio-group.css +156 -0
- package/dist/styles/{token-search-field.css → components/forms/search-field/search-field.css} +111 -102
- package/dist/styles/components/forms/select/select.css +370 -249
- package/dist/styles/components/forms/slider/slider.css +241 -0
- package/dist/styles/components/forms/switch/switch.css +132 -0
- package/dist/styles/components/forms/tag-field/tag-field.css +8 -0
- package/dist/styles/components/forms/text-field/text-field.css +193 -0
- package/dist/styles/components/layout/pane/pane.css +254 -0
- package/dist/styles/components/layout/resizable-region/resizable-region.css +3 -2
- package/dist/styles/components/layout/row/row.css +11 -0
- package/dist/styles/components/layout/split-view/split-view.css +25 -0
- package/dist/styles/components/layout/workbench/workbench.css +12 -4
- package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +20 -0
- package/dist/styles/components/navigation/tab-bar/tab-bar.css +7 -7
- package/dist/styles/components/navigation/{app-tab/app-tab.css → tab-bar-item/tab-bar-item.css} +95 -90
- package/dist/styles/components/surfaces/disclosure/disclosure.css +98 -0
- package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +263 -116
- package/dist/styles/components/typography/text/text.css +14 -12
- package/dist/styles/disclosure-arrow.css +20 -0
- package/dist/styles/disclosure.css +98 -0
- package/dist/styles/foundation.css +6 -4
- package/dist/styles/list-detail-dialog.css +11 -0
- package/dist/styles/list.css +37 -0
- package/dist/styles/{composer.css → message-composer.css} +17 -33
- package/dist/styles/overlay-toast.css +149 -0
- package/dist/styles/overlay-tooltip.css +55 -0
- package/dist/styles/pane.css +254 -0
- package/dist/styles/popup-menu.css +326 -198
- package/dist/styles/progress-bar.css +168 -0
- package/dist/styles/progress-ring.css +91 -0
- package/dist/styles/radio-group.css +156 -0
- package/dist/styles/resizable-region.css +3 -2
- package/dist/styles/row.css +11 -0
- package/dist/styles/{components/forms/token-search-field/token-search-field.css → search-field.css} +111 -102
- package/dist/styles/select.css +370 -249
- package/dist/styles/slider.css +241 -0
- package/dist/styles/split-view.css +25 -0
- package/dist/styles/state-banner.css +18 -3
- package/dist/styles/styles.css +16 -5
- package/dist/styles/surface-scaffold.css +263 -116
- package/dist/styles/switch.css +132 -0
- package/dist/styles/{app-tab.css → tab-bar-item.css} +95 -90
- package/dist/styles/tab-bar.css +7 -7
- package/dist/styles/tag-field.css +8 -0
- package/dist/styles/text-field.css +193 -0
- package/dist/styles/text.css +14 -12
- package/dist/styles/toolbar-control-group.css +67 -104
- package/dist/styles/toolbar-text.css +5 -18
- package/dist/styles/toolbar.css +10 -3
- package/dist/styles/webawesome.css +9 -0
- package/dist/styles/workbench-dialog.css +10 -0
- package/dist/styles/workbench.css +12 -4
- package/dist/surface-scaffold-register.d.ts +7 -5
- package/dist/surface-scaffold-register.js +2 -246
- package/dist/surface-scaffold-register.js.map +1 -1
- package/dist/surface-scaffold.d.ts +70 -7
- package/dist/surface-scaffold.js +5 -1
- package/dist/switch.d.ts +38 -0
- package/dist/switch.js +4 -0
- package/dist/switch.js.map +1 -0
- package/dist/{app-tab.d.ts → tab-bar-item.d.ts} +11 -11
- package/dist/tab-bar-item.js +6 -0
- package/dist/tab-bar-item.js.map +1 -0
- package/dist/tab-bar.d.ts +3 -3
- package/dist/tab-bar.js +1 -1
- package/dist/tab-navigator.js +1 -1
- package/dist/tag-field.d.ts +52 -0
- package/dist/tag-field.js +6 -0
- package/dist/tag-field.js.map +1 -0
- package/dist/text-field.d.ts +83 -0
- package/dist/text-field.js +6 -0
- package/dist/text-field.js.map +1 -0
- package/dist/text.d.ts +6 -1
- package/dist/text.js +1 -1
- package/dist/{types-CVgIwSdq.d.ts → types-DmHWkSd6.d.ts} +19 -1
- package/dist/webawesome.d.ts +3 -0
- package/dist/wire-catalog.d.ts +8 -2
- package/dist/wire-catalog.js +16 -4
- package/dist/wire-catalog.js.map +1 -1
- package/dist/wire-checkboxes.d.ts +10 -0
- package/dist/wire-checkboxes.js +3 -0
- package/dist/{wire-composers.js.map → wire-checkboxes.js.map} +1 -1
- package/dist/wire-choice-chips.d.ts +17 -0
- package/dist/wire-choice-chips.js +4 -0
- package/dist/{wire-token-search-fields.js.map → wire-choice-chips.js.map} +1 -1
- package/dist/wire-color-fields.d.ts +33 -0
- package/dist/wire-color-fields.js +82 -0
- package/dist/wire-color-fields.js.map +1 -0
- package/dist/wire-color-pickers.d.ts +34 -0
- package/dist/wire-color-pickers.js +9 -0
- package/dist/wire-color-pickers.js.map +1 -0
- package/dist/wire-comboboxes.js +2 -1
- package/dist/wire-content-items.d.ts +5 -1
- package/dist/wire-content-items.js +84 -15
- package/dist/wire-content-items.js.map +1 -1
- package/dist/wire-file-pickers.d.ts +3 -2
- package/dist/wire-file-pickers.js +1 -1
- package/dist/{wire-composers.d.ts → wire-message-composers.d.ts} +5 -4
- package/dist/wire-message-composers.js +3 -0
- package/dist/wire-message-composers.js.map +1 -0
- package/dist/wire-overlay-sheets.js +1 -1
- package/dist/wire-pane-chrome.d.ts +21 -0
- package/dist/wire-pane-chrome.js +67 -0
- package/dist/wire-pane-chrome.js.map +1 -0
- package/dist/{wire-token-search-fields.d.ts → wire-search-fields.d.ts} +25 -25
- package/dist/wire-search-fields.js +6 -0
- package/dist/wire-search-fields.js.map +1 -0
- package/dist/wire-sliders.d.ts +12 -0
- package/dist/wire-sliders.js +31 -0
- package/dist/wire-sliders.js.map +1 -0
- package/dist/wire-tab-bars.js +1 -1
- package/dist/wire-tag-fields.d.ts +41 -0
- package/dist/wire-tag-fields.js +258 -0
- package/dist/wire-tag-fields.js.map +1 -0
- package/dist/wire-text-fields.d.ts +12 -0
- package/dist/wire-text-fields.js +3 -0
- package/dist/wire-text-fields.js.map +1 -0
- package/dist/workbench-dialog.d.ts +97 -0
- package/dist/workbench-dialog.js +124 -0
- package/dist/workbench-dialog.js.map +1 -0
- package/dist/workbench.d.ts +5 -0
- package/dist/workbench.js +1 -1
- package/docs/accessibility.md +181 -97
- package/docs/anchored-surface.md +8 -7
- package/docs/app-layouts.md +28 -0
- package/docs/catalog.md +14 -5
- package/docs/color-field.md +65 -0
- package/docs/color-picker.md +71 -0
- package/docs/color-swatches.md +46 -0
- package/docs/component-contract.md +31 -32
- package/docs/component-selection.md +228 -164
- package/docs/design/templates/button/emphasis-dark.svg +1 -0
- package/docs/design/templates/button/emphasis.svg +1 -0
- package/docs/design/templates/button/icons-dark.svg +1 -0
- package/docs/design/templates/button/icons.svg +1 -0
- package/docs/design/templates/button/pill-dark.svg +1 -0
- package/docs/design/templates/button/pill.svg +1 -0
- package/docs/design/templates/button/states-dark.svg +1 -0
- package/docs/design/templates/button/states.svg +1 -0
- package/docs/design/templates/button/toggles-dark.svg +1 -0
- package/docs/design/templates/button/toggles.svg +1 -0
- package/docs/design/templates/button/tones-dark.svg +1 -0
- package/docs/design/templates/button/tones.svg +1 -0
- package/docs/design/templates/button-dark.svg +1 -0
- package/docs/design/templates/button.svg +1 -0
- package/docs/design/templates/checkbox/compact-dark.svg +1 -0
- package/docs/design/templates/checkbox/compact.svg +1 -0
- package/docs/design/templates/checkbox/error-dark.svg +1 -0
- package/docs/design/templates/checkbox/error.svg +1 -0
- package/docs/design/templates/checkbox/mixed-dark.svg +1 -0
- package/docs/design/templates/checkbox/mixed.svg +1 -0
- package/docs/design/templates/checkbox/states-dark.svg +1 -0
- package/docs/design/templates/checkbox/states.svg +1 -0
- package/docs/design/templates/checkbox-dark.svg +1 -0
- package/docs/design/templates/checkbox.svg +1 -0
- package/docs/design/templates/choice-chips/color-palette-dark.svg +1 -1
- package/docs/design/templates/choice-chips/color-palette.svg +1 -1
- package/docs/design/templates/choice-chips/compact-icons-dark.svg +1 -1
- package/docs/design/templates/choice-chips/compact-icons.svg +1 -1
- package/docs/design/templates/choice-chips/multiple-dark.svg +1 -1
- package/docs/design/templates/choice-chips/multiple.svg +1 -1
- package/docs/design/templates/choice-chips-dark.svg +1 -1
- package/docs/design/templates/choice-chips.svg +1 -1
- package/docs/design/templates/color-field/compact-dark.svg +1 -0
- package/docs/design/templates/color-field/compact.svg +1 -0
- package/docs/design/templates/color-field/error-dark.svg +1 -0
- package/docs/design/templates/color-field/error.svg +1 -0
- package/docs/design/templates/color-field/hint-dark.svg +1 -0
- package/docs/design/templates/color-field/hint.svg +1 -0
- package/docs/design/templates/color-field-dark.svg +1 -0
- package/docs/design/templates/color-field.svg +1 -0
- package/docs/design/templates/color-picker/gray-dark.svg +1 -0
- package/docs/design/templates/color-picker/gray.svg +1 -0
- package/docs/design/templates/color-picker/rgb-dark.svg +1 -0
- package/docs/design/templates/color-picker/rgb.svg +1 -0
- package/docs/design/templates/color-picker-dark.svg +1 -0
- package/docs/design/templates/color-picker.svg +1 -0
- package/docs/design/templates/color-swatches/palette-dark.svg +1 -0
- package/docs/design/templates/color-swatches/palette.svg +1 -0
- package/docs/design/templates/color-swatches-dark.svg +1 -0
- package/docs/design/templates/color-swatches.svg +1 -0
- package/docs/design/templates/disclosure/framed-sunken-dark.svg +1 -0
- package/docs/design/templates/disclosure/framed-sunken.svg +1 -0
- package/docs/design/templates/disclosure/plain-dark.svg +1 -0
- package/docs/design/templates/disclosure/plain.svg +1 -0
- package/docs/design/templates/disclosure-dark.svg +1 -0
- package/docs/design/templates/disclosure.svg +1 -0
- package/docs/design/templates/list-header/size-l-dark.svg +1 -1
- package/docs/design/templates/list-header/size-l.svg +1 -1
- package/docs/design/templates/list-header/size-m-dark.svg +1 -1
- package/docs/design/templates/list-header/size-m.svg +1 -1
- package/docs/design/templates/list-header/size-xl-dark.svg +1 -1
- package/docs/design/templates/list-header/size-xl.svg +1 -1
- package/docs/design/templates/list-header-dark.svg +1 -1
- package/docs/design/templates/list-header.svg +1 -1
- package/docs/design/templates/message-composer/chat-dark.svg +1 -0
- package/docs/design/templates/message-composer/chat.svg +1 -0
- package/docs/design/templates/{composer → message-composer}/prompt-dark.svg +1 -1
- package/docs/design/templates/{composer → message-composer}/prompt.svg +1 -1
- package/docs/design/templates/message-composer-dark.svg +1 -0
- package/docs/design/templates/message-composer.svg +1 -0
- package/docs/design/templates/progress-bar/determinate-dark.svg +1 -0
- package/docs/design/templates/progress-bar/determinate.svg +1 -0
- package/docs/design/templates/progress-bar/tones-dark.svg +1 -0
- package/docs/design/templates/progress-bar/tones.svg +1 -0
- package/docs/design/templates/progress-bar-dark.svg +1 -0
- package/docs/design/templates/progress-bar.svg +1 -0
- package/docs/design/templates/progress-ring/sizes-dark.svg +1 -0
- package/docs/design/templates/progress-ring/sizes.svg +1 -0
- package/docs/design/templates/progress-ring/tones-dark.svg +1 -0
- package/docs/design/templates/progress-ring/tones.svg +1 -0
- package/docs/design/templates/progress-ring-dark.svg +1 -0
- package/docs/design/templates/progress-ring.svg +1 -0
- package/docs/design/templates/radio-group/horizontal-dark.svg +1 -0
- package/docs/design/templates/radio-group/horizontal.svg +1 -0
- package/docs/design/templates/radio-group/vertical-dark.svg +1 -0
- package/docs/design/templates/radio-group/vertical.svg +1 -0
- package/docs/design/templates/radio-group-dark.svg +1 -0
- package/docs/design/templates/radio-group.svg +1 -0
- package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
- package/docs/design/templates/segmented-control/equal.svg +1 -1
- package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -1
- package/docs/design/templates/segmented-control/pill-small.svg +1 -1
- package/docs/design/templates/segmented-control-dark.svg +1 -1
- package/docs/design/templates/segmented-control.svg +1 -1
- package/docs/design/templates/select/compact-dark.svg +1 -0
- package/docs/design/templates/select/compact.svg +1 -0
- package/docs/design/templates/select/form-dark.svg +1 -0
- package/docs/design/templates/select/form.svg +1 -0
- package/docs/design/templates/select/icons-dark.svg +1 -0
- package/docs/design/templates/select/icons.svg +1 -0
- package/docs/design/templates/select-dark.svg +1 -0
- package/docs/design/templates/select.svg +1 -0
- package/docs/design/templates/slider/compact-dark.svg +1 -0
- package/docs/design/templates/slider/compact.svg +1 -0
- package/docs/design/templates/slider/readout-dark.svg +1 -0
- package/docs/design/templates/slider/readout.svg +1 -0
- package/docs/design/templates/slider/ticks-dark.svg +1 -0
- package/docs/design/templates/slider/ticks.svg +1 -0
- package/docs/design/templates/slider-dark.svg +1 -0
- package/docs/design/templates/slider.svg +1 -0
- package/docs/design/templates/switch/compact-dark.svg +1 -0
- package/docs/design/templates/switch/compact.svg +1 -0
- package/docs/design/templates/switch/states-dark.svg +1 -0
- package/docs/design/templates/switch/states.svg +1 -0
- package/docs/design/templates/switch-dark.svg +1 -0
- package/docs/design/templates/switch.svg +1 -0
- package/docs/design/templates/tag-field/error-dark.svg +1 -0
- package/docs/design/templates/tag-field/error.svg +1 -0
- package/docs/design/templates/tag-field/tags-dark.svg +1 -0
- package/docs/design/templates/tag-field/tags.svg +1 -0
- package/docs/design/templates/tag-field-dark.svg +1 -0
- package/docs/design/templates/tag-field.svg +1 -0
- package/docs/design/templates/text-field/compact-dark.svg +1 -0
- package/docs/design/templates/text-field/compact.svg +1 -0
- package/docs/design/templates/text-field/error-dark.svg +1 -0
- package/docs/design/templates/text-field/error.svg +1 -0
- package/docs/design/templates/text-field/labeled-dark.svg +1 -0
- package/docs/design/templates/text-field/labeled.svg +1 -0
- package/docs/design/templates/text-field/multiline-dark.svg +1 -0
- package/docs/design/templates/text-field/multiline.svg +1 -0
- package/docs/design/templates/text-field/search-dark.svg +1 -0
- package/docs/design/templates/text-field/search.svg +1 -0
- package/docs/design/templates/text-field-dark.svg +1 -0
- package/docs/design/templates/text-field.svg +1 -0
- package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
- package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
- package/docs/design/templates/toolbar/width-visibility-320-dark.svg +1 -1
- package/docs/design/templates/toolbar/width-visibility-320.svg +1 -1
- package/docs/design/templates/toolbar/width-visibility-600-dark.svg +1 -1
- package/docs/design/templates/toolbar/width-visibility-600.svg +1 -1
- package/docs/design/templates/toolbar-dark.svg +1 -1
- package/docs/design/templates/toolbar.svg +1 -1
- package/docs/design/templates/value-table/details-dark.svg +1 -1
- package/docs/design/templates/value-table/details.svg +1 -1
- package/docs/design/templates/value-table-dark.svg +1 -1
- package/docs/design/templates/value-table.svg +1 -1
- package/docs/design/templates.md +19 -6
- package/docs/design-philosophy.md +6 -6
- package/docs/disclosure.md +63 -0
- package/docs/examples/component-catalog-extension.json +2 -2
- package/docs/layout.md +16 -7
- package/docs/list-detail-dialog.md +96 -0
- package/docs/manual-test-plan.md +1 -1
- package/docs/{composer.md → message-composer.md} +41 -28
- package/docs/overlay-toast.md +62 -0
- package/docs/overlay-tooltip.md +53 -0
- package/docs/progress.md +62 -0
- package/docs/recipes.md +15 -21
- package/docs/slider.md +64 -0
- package/docs/surface-scaffold.md +155 -88
- package/docs/tag-field.md +66 -0
- package/docs/type-contracts.md +8 -8
- package/docs/ui-analyzer.md +1 -1
- package/docs/ui-doctor.md +11 -6
- package/docs/ux-demo.md +6 -6
- package/docs/webawesome-migration.md +80 -0
- package/docs/webawesome-theme.md +57 -35
- package/docs/workbench-dialog.md +85 -0
- package/docs/workbench.md +10 -6
- package/docs/writing.md +10 -8
- package/doctor/copy-capitalization-checks.mjs +18 -9
- package/llms.txt +127 -57
- package/package.json +156 -39
- package/ux-demo/recipes/composer-form.tsx +18 -19
- package/ux-demo/recipes/list-detail-dialog.tsx +55 -162
- package/ux-demo/recipes/mount-recipe.ts +7 -6
- package/ux-demo/recipes/types.ts +1 -0
- package/ai/components/icon-button.md +0 -82
- package/ai/components/icon-toggle-button.md +0 -80
- package/dist/app-tab.js +0 -6
- package/dist/app-tab.js.map +0 -1
- package/dist/browser/app-tab.js +0 -4
- package/dist/browser/composer.js +0 -4
- package/dist/browser/icon-toggle-button.js +0 -4
- package/dist/browser/token-search-field.js +0 -4
- package/dist/chunk-2MSPNRWJ.js.map +0 -1
- package/dist/chunk-7IUEBNCO.js.map +0 -1
- package/dist/chunk-AV7CPAPT.js +0 -82
- package/dist/chunk-AV7CPAPT.js.map +0 -1
- package/dist/chunk-BYFTHA4I.js.map +0 -1
- package/dist/chunk-CA7LNX3J.js +0 -44
- package/dist/chunk-CA7LNX3J.js.map +0 -1
- package/dist/chunk-CR5U5FV6.js.map +0 -1
- package/dist/chunk-ELCMSQNJ.js.map +0 -1
- package/dist/chunk-ETCWQLJV.js.map +0 -1
- package/dist/chunk-FDZNYD4C.js.map +0 -1
- package/dist/chunk-FR76ZJQC.js +0 -90
- package/dist/chunk-FR76ZJQC.js.map +0 -1
- package/dist/chunk-HQZYKJ56.js.map +0 -1
- package/dist/chunk-HZPHCSCS.js.map +0 -1
- package/dist/chunk-JOR5LGYE.js.map +0 -1
- package/dist/chunk-K4AT3V3J.js.map +0 -1
- package/dist/chunk-LL45C7BB.js.map +0 -1
- package/dist/chunk-LOSRXZAH.js.map +0 -1
- package/dist/chunk-LPHU44S3.js.map +0 -1
- package/dist/chunk-M5KZ26VV.js.map +0 -1
- package/dist/chunk-MXNIVEVL.js.map +0 -1
- package/dist/chunk-NS762OVM.js +0 -222
- package/dist/chunk-NS762OVM.js.map +0 -1
- package/dist/chunk-QTSMHH5J.js.map +0 -1
- package/dist/chunk-T5BJBMW7.js.map +0 -1
- package/dist/chunk-TDMHA7C3.js.map +0 -1
- package/dist/chunk-TGLUDQP2.js.map +0 -1
- package/dist/chunk-U6QYTMDB.js.map +0 -1
- package/dist/chunk-VFYO3UGZ.js +0 -45
- package/dist/chunk-VFYO3UGZ.js.map +0 -1
- package/dist/chunk-W4IK7AWD.js.map +0 -1
- package/dist/chunk-YBWQR2OK.js.map +0 -1
- package/dist/chunk-ZJC5ND3M.js.map +0 -1
- package/dist/composer.js +0 -5
- package/dist/composer.js.map +0 -1
- package/dist/icon-button.d.ts +0 -46
- package/dist/icon-button.js +0 -6
- package/dist/icon-button.js.map +0 -1
- package/dist/icon-toggle-button.d.ts +0 -42
- package/dist/icon-toggle-button.js +0 -6
- package/dist/icon-toggle-button.js.map +0 -1
- package/dist/styles/components/actions/icon-button/icon-button.css +0 -22
- package/dist/styles/components/actions/icon-toggle-button/icon-toggle-button.css +0 -83
- package/dist/styles/icon-button.css +0 -22
- package/dist/styles/icon-toggle-button.css +0 -83
- package/dist/token-search-field.d.ts +0 -3
- package/dist/token-search-field.js +0 -5
- package/dist/token-search-field.js.map +0 -1
- package/dist/token-search-model.d.ts +0 -3
- package/dist/token-search-model.js +0 -3
- package/dist/token-search-model.js.map +0 -1
- package/dist/wire-composers.js +0 -3
- package/dist/wire-token-search-fields.js +0 -6
- package/docs/design/templates/composer/chat-dark.svg +0 -1
- package/docs/design/templates/composer/chat.svg +0 -1
- package/docs/design/templates/composer-dark.svg +0 -1
- package/docs/design/templates/composer.svg +0 -1
- /package/docs/design/templates/{token-search-field → search-field}/empty-dark.svg +0 -0
- /package/docs/design/templates/{token-search-field → search-field}/empty.svg +0 -0
- /package/docs/design/templates/{token-search-field → search-field}/tokens-dark.svg +0 -0
- /package/docs/design/templates/{token-search-field → search-field}/tokens.svg +0 -0
- /package/docs/design/templates/{token-search-field-dark.svg → search-field-dark.svg} +0 -0
- /package/docs/design/templates/{token-search-field.svg → search-field.svg} +0 -0
package/README.md
CHANGED
|
@@ -142,7 +142,7 @@ because neither has one unambiguous returned root; `CollapsiblePanelToggle`
|
|
|
142
142
|
supports it as a normal single-root control.
|
|
143
143
|
|
|
144
144
|
`ListItem.rootAttributes`, `ListHeader.rootAttributes`,
|
|
145
|
-
`ListActionRow.rootAttributes`, `
|
|
145
|
+
`ListActionRow.rootAttributes`, `TabBarItem.rootAttributes`,
|
|
146
146
|
`Catalog.stageRootAttributes`, `CatalogExample.rootAttributes`, and `CatalogExampleStack.rootAttributes` carry typed
|
|
147
147
|
application `data-*` metadata without
|
|
148
148
|
teaching the package domain fields. `ListHeader.triggerAttributes` and
|
|
@@ -207,81 +207,103 @@ interchangeable. `ListItem` and `ListActionRow` deliberately expose no raw
|
|
|
207
207
|
|
|
208
208
|
## Component subpaths
|
|
209
209
|
|
|
210
|
-
| Component
|
|
211
|
-
|
|
|
212
|
-
| `LucideIcon`
|
|
213
|
-
| `Badge`
|
|
214
|
-
| `Chip`
|
|
215
|
-
| `DisclosureArrow`
|
|
216
|
-
| `Toolbar`
|
|
217
|
-
| `ToolbarControlGroup`, `ToolbarActionLink`
|
|
218
|
-
| `DialogSurface`, `PopupSurface`
|
|
219
|
-
| `
|
|
220
|
-
| `
|
|
221
|
-
| `
|
|
222
|
-
| `
|
|
223
|
-
| `
|
|
224
|
-
| `
|
|
225
|
-
| `
|
|
226
|
-
| `
|
|
227
|
-
| `
|
|
228
|
-
|
|
|
229
|
-
| `
|
|
230
|
-
| `
|
|
231
|
-
| `
|
|
232
|
-
| `
|
|
233
|
-
| `
|
|
234
|
-
| `
|
|
235
|
-
| `
|
|
236
|
-
| `
|
|
237
|
-
| `
|
|
238
|
-
| `
|
|
239
|
-
| `
|
|
240
|
-
| `
|
|
241
|
-
| `
|
|
242
|
-
|
|
|
243
|
-
| `
|
|
244
|
-
| `
|
|
245
|
-
| `
|
|
246
|
-
| `
|
|
247
|
-
|
|
|
248
|
-
| `
|
|
249
|
-
| `
|
|
250
|
-
| `
|
|
251
|
-
| `
|
|
252
|
-
| `
|
|
253
|
-
| `
|
|
254
|
-
| `
|
|
255
|
-
| `
|
|
256
|
-
| `
|
|
257
|
-
| `
|
|
258
|
-
| `
|
|
259
|
-
| `
|
|
260
|
-
| `
|
|
261
|
-
| `
|
|
262
|
-
|
|
|
263
|
-
| `
|
|
264
|
-
| `
|
|
265
|
-
| `
|
|
266
|
-
| `
|
|
267
|
-
| `
|
|
268
|
-
| `
|
|
269
|
-
| `
|
|
270
|
-
| `
|
|
271
|
-
| `
|
|
272
|
-
| `
|
|
273
|
-
| `
|
|
274
|
-
| `
|
|
275
|
-
| `
|
|
276
|
-
| `
|
|
277
|
-
| `
|
|
278
|
-
| `
|
|
279
|
-
| `
|
|
280
|
-
| `
|
|
281
|
-
| `
|
|
282
|
-
| `
|
|
283
|
-
| `
|
|
284
|
-
| `
|
|
210
|
+
| Component | Browser import (includes reachable CSS) | Manual CSS export |
|
|
211
|
+
| ------------------------------------------------------------ | --------------------------------------- | ---------------------------------------- |
|
|
212
|
+
| `LucideIcon` | `@kerfjs/ui/lucide-icon` | `@kerfjs/ui/lucide-icon.css` |
|
|
213
|
+
| `Badge` | `@kerfjs/ui/badge` | `@kerfjs/ui/badge.css` |
|
|
214
|
+
| `Chip` | `@kerfjs/ui/chip` | `@kerfjs/ui/chip.css` |
|
|
215
|
+
| `DisclosureArrow` | `@kerfjs/ui/disclosure-arrow` | `@kerfjs/ui/disclosure-arrow.css` |
|
|
216
|
+
| `Toolbar` | `@kerfjs/ui/toolbar` | `@kerfjs/ui/toolbar.css` |
|
|
217
|
+
| `ToolbarControlGroup`, `ToolbarActionLink` | `@kerfjs/ui/toolbar-control-group` | `@kerfjs/ui/toolbar-control-group.css` |
|
|
218
|
+
| `DialogSurface`, `PopupSurface` | `@kerfjs/ui/surface-scaffold` | `@kerfjs/ui/surface-scaffold.css` |
|
|
219
|
+
| `ListDetailDialog` | `@kerfjs/ui/list-detail-dialog` | `@kerfjs/ui/list-detail-dialog.css` |
|
|
220
|
+
| `WorkbenchDialog` | `@kerfjs/ui/workbench-dialog` | `@kerfjs/ui/workbench-dialog.css` |
|
|
221
|
+
| `Disclosure` | `@kerfjs/ui/disclosure` | `@kerfjs/ui/disclosure.css` |
|
|
222
|
+
| `ProgressBar` | `@kerfjs/ui/progress-bar` | `@kerfjs/ui/progress-bar.css` |
|
|
223
|
+
| `ProgressRing` | `@kerfjs/ui/progress-ring` | `@kerfjs/ui/progress-ring.css` |
|
|
224
|
+
| `Slider` | `@kerfjs/ui/slider` | `@kerfjs/ui/slider.css` |
|
|
225
|
+
| `wireSliders`, `syncSlider` | `@kerfjs/ui/wire-sliders` | — |
|
|
226
|
+
| `TagField` | `@kerfjs/ui/tag-field` | `@kerfjs/ui/tag-field.css` |
|
|
227
|
+
| `wireTagFields` | `@kerfjs/ui/wire-tag-fields` | — |
|
|
228
|
+
| `ColorSwatches` | `@kerfjs/ui/color-swatches` | `@kerfjs/ui/color-swatches.css` |
|
|
229
|
+
| `ColorPicker` | `@kerfjs/ui/color-picker` | `@kerfjs/ui/color-picker.css` |
|
|
230
|
+
| `wireColorPickers` | `@kerfjs/ui/wire-color-pickers` | — |
|
|
231
|
+
| `ColorField` | `@kerfjs/ui/color-field` | `@kerfjs/ui/color-field.css` |
|
|
232
|
+
| `wireColorFields` | `@kerfjs/ui/wire-color-fields` | — |
|
|
233
|
+
| `FloatingToolbar` | `@kerfjs/ui/floating-toolbar` | `@kerfjs/ui/floating-toolbar.css` |
|
|
234
|
+
| `PopupMenu` (register with `@kerfjs/ui/popup-menu/register`) | `@kerfjs/ui/popup-menu` | `@kerfjs/ui/popup-menu.css` |
|
|
235
|
+
| `openAnchoredSurface`, `openAnchoredSurfaceAt` | `@kerfjs/ui/anchored-surface` | `@kerfjs/ui/anchored-surface.css` |
|
|
236
|
+
| `ToolbarText` | `@kerfjs/ui/toolbar-text` | `@kerfjs/ui/toolbar-text.css` |
|
|
237
|
+
| `Text`, `FieldLabel` | `@kerfjs/ui/text` | `@kerfjs/ui/text.css` |
|
|
238
|
+
| `List` | `@kerfjs/ui/list` | `@kerfjs/ui/list.css` |
|
|
239
|
+
| `Row` | `@kerfjs/ui/row` | `@kerfjs/ui/row.css` |
|
|
240
|
+
| `Grid` | `@kerfjs/ui/grid` | `@kerfjs/ui/grid.css` |
|
|
241
|
+
| `Spacer` | `@kerfjs/ui/spacer` | `@kerfjs/ui/spacer.css` |
|
|
242
|
+
| Typed CSS dimension builders | `@kerfjs/ui/css-values` | — |
|
|
243
|
+
| `ListActionRow` | `@kerfjs/ui/list-action-row` | `@kerfjs/ui/list-action-row.css` |
|
|
244
|
+
| `ListItem` | `@kerfjs/ui/list-item` | `@kerfjs/ui/list-item.css` |
|
|
245
|
+
| `wireListReorder`, `reorderListItems` | `@kerfjs/ui/wire-list-reorder` | — |
|
|
246
|
+
| `wireListFocusScroll` | `@kerfjs/ui/wire-list-focus-scroll` | — |
|
|
247
|
+
| `ListHeader` | `@kerfjs/ui/list-header` | `@kerfjs/ui/list-header.css` |
|
|
248
|
+
| `ListInsetControl` | `@kerfjs/ui/list-inset-control` | `@kerfjs/ui/list-inset-control.css` |
|
|
249
|
+
| `ListInsetText` | `@kerfjs/ui/list-inset-text` | `@kerfjs/ui/list-inset-text.css` |
|
|
250
|
+
| `ContentItem` | `@kerfjs/ui/content-item` | `@kerfjs/ui/content-item.css` |
|
|
251
|
+
| `Pane` | `@kerfjs/ui/pane` | `@kerfjs/ui/pane.css` |
|
|
252
|
+
| `NavStack` | `@kerfjs/ui/nav-stack` | `@kerfjs/ui/nav-stack.css` |
|
|
253
|
+
| `wireNavStack` | `@kerfjs/ui/wire-nav-stack` | — |
|
|
254
|
+
| `wirePaneChrome` | `@kerfjs/ui/wire-pane-chrome` | — |
|
|
255
|
+
| `SplitView` | `@kerfjs/ui/split-view` | `@kerfjs/ui/split-view.css` |
|
|
256
|
+
| `TabNavigator` | `@kerfjs/ui/tab-navigator` | `@kerfjs/ui/tab-navigator.css` |
|
|
257
|
+
| `wireTabNavigator` | `@kerfjs/ui/wire-tab-navigator` | — |
|
|
258
|
+
| `Workbench` | `@kerfjs/ui/workbench` | `@kerfjs/ui/workbench.css` |
|
|
259
|
+
| `wireWorkbench` | `@kerfjs/ui/wire-workbench` | — |
|
|
260
|
+
| `CollapsiblePanel`, `CollapsiblePanelToggle` | `@kerfjs/ui/collapsible-panel` | `@kerfjs/ui/collapsible-panel.css` |
|
|
261
|
+
| `wireSidebar` | `@kerfjs/ui/wire-sidebar` | — |
|
|
262
|
+
| Content and navigation composition | — | `@kerfjs/ui/layout.css` |
|
|
263
|
+
| `ResizableRegion` | `@kerfjs/ui/resizable-region` | `@kerfjs/ui/resizable-region.css` |
|
|
264
|
+
| `wireResizableRegions` | `@kerfjs/ui/wire-resizable-regions` | — |
|
|
265
|
+
| `TabBarItem` | `@kerfjs/ui/tab-bar-item` | `@kerfjs/ui/tab-bar-item.css` |
|
|
266
|
+
| `TabBar` | `@kerfjs/ui/tab-bar` | `@kerfjs/ui/tab-bar.css` |
|
|
267
|
+
| `wireTabBars`, `reorderTabs` | `@kerfjs/ui/wire-tab-bars` | — |
|
|
268
|
+
| `wireScrollDividers` | `@kerfjs/ui/wire-scroll-dividers` | — |
|
|
269
|
+
| `wireToolbarVisibility` | `@kerfjs/ui/wire-toolbar-visibility` | — |
|
|
270
|
+
| `wireOverlaySheets` | `@kerfjs/ui/wire-overlay-sheets` | `@kerfjs/ui/overlay-sheet.css` |
|
|
271
|
+
| Toasts for `kerfjs/overlay` `toast()` | — | `@kerfjs/ui/overlay-toast.css` |
|
|
272
|
+
| Tooltips for `kerfjs/overlay` `tooltip()` | — | `@kerfjs/ui/overlay-tooltip.css` |
|
|
273
|
+
| `LoadingSpinner` | `@kerfjs/ui/loading-spinner` | `@kerfjs/ui/loading-spinner.css` |
|
|
274
|
+
| `Skeleton` | `@kerfjs/ui/skeleton` | `@kerfjs/ui/skeleton.css` |
|
|
275
|
+
| `SunkenPanel` | `@kerfjs/ui/sunken-panel` | `@kerfjs/ui/sunken-panel.css` |
|
|
276
|
+
| `BackdropImage` | `@kerfjs/ui/backdrop-image` | `@kerfjs/ui/backdrop-image.css` |
|
|
277
|
+
| `Select` | `@kerfjs/ui/select` | `@kerfjs/ui/select.css` |
|
|
278
|
+
| `SegmentedControl` | `@kerfjs/ui/segmented-control` | `@kerfjs/ui/segmented-control.css` |
|
|
279
|
+
| `ChoiceChips` | `@kerfjs/ui/choice-chips` | `@kerfjs/ui/choice-chips.css` |
|
|
280
|
+
| `TextField` | `@kerfjs/ui/text-field` | `@kerfjs/ui/text-field.css` |
|
|
281
|
+
| `wireTextFields` | `@kerfjs/ui/wire-text-fields` | — |
|
|
282
|
+
| `Checkbox` | `@kerfjs/ui/checkbox` | `@kerfjs/ui/checkbox.css` |
|
|
283
|
+
| `wireCheckboxes` | `@kerfjs/ui/wire-checkboxes` | — |
|
|
284
|
+
| `RadioGroup` | `@kerfjs/ui/radio-group` | `@kerfjs/ui/radio-group.css` |
|
|
285
|
+
| `Switch` | `@kerfjs/ui/switch` | `@kerfjs/ui/switch.css` |
|
|
286
|
+
| `MessageComposer` | `@kerfjs/ui/message-composer` | `@kerfjs/ui/message-composer.css` |
|
|
287
|
+
| `wireMessageComposers` | `@kerfjs/ui/wire-message-composers` | — |
|
|
288
|
+
| `SearchField`, `readSearchField`, `placeSearchFieldCaret` | `@kerfjs/ui/search-field` | `@kerfjs/ui/search-field.css` |
|
|
289
|
+
| `wireSearchFields` | `@kerfjs/ui/wire-search-fields` | — |
|
|
290
|
+
| `createSearchFieldModel` | `@kerfjs/ui/search-field-model` | — |
|
|
291
|
+
| `StateBanner` | `@kerfjs/ui/state-banner` | `@kerfjs/ui/state-banner.css` |
|
|
292
|
+
| `Button` | `@kerfjs/ui/button` | `@kerfjs/ui/button.css` |
|
|
293
|
+
| `SplitButton` | `@kerfjs/ui/split-button` | `@kerfjs/ui/split-button.css` |
|
|
294
|
+
| `FramedList`, `FramedListRow` | `@kerfjs/ui/framed-list` | `@kerfjs/ui/framed-list.css` |
|
|
295
|
+
| `SummaryRow` | `@kerfjs/ui/summary-row` | `@kerfjs/ui/summary-row.css` |
|
|
296
|
+
| `ColumnTrack` | `@kerfjs/ui/column-track` | `@kerfjs/ui/column-track.css` |
|
|
297
|
+
| `ContentSwap` | `@kerfjs/ui/content-swap` | `@kerfjs/ui/content-swap.css` |
|
|
298
|
+
| `FilePickerTrigger`, `FileDropZone` | `@kerfjs/ui/file-picker` | `@kerfjs/ui/file-picker.css` |
|
|
299
|
+
| `wireFilePickers`, `fileMatchesAccept` | `@kerfjs/ui/wire-file-pickers` | — |
|
|
300
|
+
| `Combobox` | `@kerfjs/ui/combobox` | `@kerfjs/ui/combobox.css` |
|
|
301
|
+
| `wireComboboxes` | `@kerfjs/ui/wire-comboboxes` | — |
|
|
302
|
+
| `CornerStatus` | `@kerfjs/ui/corner-status` | `@kerfjs/ui/corner-status.css` |
|
|
303
|
+
| `EdgeActivityIndicator` | `@kerfjs/ui/edge-activity-indicator` | `@kerfjs/ui/edge-activity-indicator.css` |
|
|
304
|
+
| `wireCornerStatus` | `@kerfjs/ui/wire-corner-status` | — |
|
|
305
|
+
| `EmptyState` | `@kerfjs/ui/empty-state` | `@kerfjs/ui/empty-state.css` |
|
|
306
|
+
| `ValueTable`, `ValueTableRow` | `@kerfjs/ui/value-table` | `@kerfjs/ui/value-table.css` |
|
|
285
307
|
|
|
286
308
|
Application layouts are separate component subpaths. Browser-condition imports
|
|
287
309
|
include their reachable CSS; use the matching manual CSS export when your
|
|
@@ -325,7 +347,7 @@ app-owned "More" `PopupMenu` (in a `single` group with `nestedDropdown`).
|
|
|
325
347
|
`DisclosureArrow` defaults to an 18px root-scaled decorative visual. Pass a
|
|
326
348
|
typed `size` (for example `size={remify(24)}` from `@kerfjs/ui/css-values`)
|
|
327
349
|
when a consumer needs another size; the owning control still supplies interaction, naming, and
|
|
328
|
-
expanded state. Kerf `Select`
|
|
350
|
+
expanded state. Kerf `Select` keeps its own expand-glyph
|
|
329
351
|
scale of `.5` through `--kui-disclosure-icon-scale`. Author replacement
|
|
330
352
|
`DisclosureArrow` icon content facing right before its configured direction
|
|
331
353
|
transform is applied. Direction changes take the shortest rotation path; a
|
|
@@ -615,8 +637,11 @@ the complete [layout contract](./docs/layout.md).
|
|
|
615
637
|
|
|
616
638
|
## Web Awesome theme
|
|
617
639
|
|
|
618
|
-
|
|
619
|
-
|
|
640
|
+
Kerf components never need Web Awesome: every Kerf component draws native
|
|
641
|
+
controls and reads only `--kui-*` tokens, which resolve to the same values with
|
|
642
|
+
or without the Web Awesome theme. `@awesome.me/webawesome` is an optional peer
|
|
643
|
+
for applications that also render Web Awesome's `wa-*` elements. Those apps opt
|
|
644
|
+
into the same visual universe with one CSS import:
|
|
620
645
|
|
|
621
646
|
```ts
|
|
622
647
|
import type {} from "@kerfjs/ui/webawesome";
|
|
@@ -636,7 +661,7 @@ radii, tooltips, and shadows through Web Awesome's public `--wa-*` contract.
|
|
|
636
661
|
On `wa-dialog`, the optional `hide-actions` class hides the exported
|
|
637
662
|
`header-actions` shadow part for compositions that provide another dismissal
|
|
638
663
|
affordance.
|
|
639
|
-
Those tokens flow into all free component families. Every free Web Awesome 3.
|
|
664
|
+
Those tokens flow into all free component families. Every free Web Awesome 3.14
|
|
640
665
|
component has an individual UX-catalog route under the collapsible ecosystem
|
|
641
666
|
section, but the theme entry does not import or register component JavaScript,
|
|
642
667
|
so each component module remains independently tree-shakeable in consuming apps.
|
|
@@ -681,7 +706,7 @@ and `danger` palettes. Override an individual banner with
|
|
|
681
706
|
`--kui-state-banner-action-hover-background`. To retheme one tone everywhere,
|
|
682
707
|
override `--kui-state-banner-{tone}-{background|border|foreground}`. Other
|
|
683
708
|
stateful components follow the same public-variable pattern, including
|
|
684
|
-
`--kui-toolbar-control-*`, `--kui-segmented-*`, `--kui-
|
|
709
|
+
`--kui-toolbar-control-*`, `--kui-segmented-*`, `--kui-tab-bar-item-*`, and
|
|
685
710
|
`--kui-tab-bar-*`.
|
|
686
711
|
|
|
687
712
|
`SegmentedControl` is a controlled exclusive-choice component. Use
|
|
@@ -741,26 +766,26 @@ change handler. A multiple group takes no `required`. On dark inverse chrome,
|
|
|
741
766
|
place the chips in a dark appearance scope (`.wa-dark`) instead of restyling
|
|
742
767
|
them.
|
|
743
768
|
|
|
744
|
-
`
|
|
769
|
+
`MessageComposer` is the chat or prompt composer: a raised frame (the standard
|
|
745
770
|
border, large radius, and `shadow-l`) whose border turns brand while focus is
|
|
746
771
|
within. Its borderless message field grows with its content between `minRows`
|
|
747
772
|
(default 1) and `maxRows` (default 8) lines, then scrolls, above an action row
|
|
748
773
|
with an optional quiet `hint` and the trailing `actions`:
|
|
749
774
|
|
|
750
775
|
```tsx
|
|
751
|
-
<
|
|
776
|
+
<MessageComposer
|
|
752
777
|
id="assistant-message"
|
|
753
778
|
name="message"
|
|
754
779
|
label="Message"
|
|
755
780
|
placeholder="Ask about this build"
|
|
756
781
|
hint="Answers use the latest nightly build."
|
|
757
|
-
|
|
782
|
+
trailing={<Button tone="brand" action="send-message">Send</Button>}
|
|
758
783
|
/>
|
|
759
784
|
```
|
|
760
785
|
|
|
761
786
|
The app reads and clears the textarea from its send action. For
|
|
762
|
-
Enter-to-send, set `submitOnEnter` and call `
|
|
763
|
-
`@kerfjs/ui/wire-composers` once: Enter or Cmd/Ctrl+Enter clicks the first
|
|
787
|
+
Enter-to-send, set `submitOnEnter` and call `wireMessageComposers(root)` from
|
|
788
|
+
`@kerfjs/ui/wire-message-composers` once: Enter or Cmd/Ctrl+Enter clicks the first
|
|
764
789
|
trailing action, Shift+Enter inserts a newline, and an IME composition commit
|
|
765
790
|
or an empty message never sends. Put it in a `DialogSurface` with
|
|
766
791
|
`footerPresentation="floating"` (`slot="footer"`) to float it over a
|
|
@@ -770,14 +795,14 @@ Add `headerPresentation="floating"` with a `fill` body and
|
|
|
770
795
|
`scrollClearance="both"` to let the transcript scroll beneath a translucent
|
|
771
796
|
title bar as well.
|
|
772
797
|
|
|
773
|
-
`
|
|
798
|
+
`SearchField` is a token-controlled contenteditable searchbox that keeps
|
|
774
799
|
free text and ordered filter chips in one field. Its editable text stays
|
|
775
800
|
DOM-owned between token changes so typing does not replace the caret. Tokens
|
|
776
801
|
expose stable edit/remove actions and remain atomic during editing; the app owns
|
|
777
802
|
parsing, suggestions, query execution, and state in manual mode. For automatic
|
|
778
|
-
handling, create a model with `
|
|
803
|
+
handling, create a model with `createSearchFieldModel({ rules, evaluate })`,
|
|
779
804
|
pass it as the field's `model`, and register it under the field id in
|
|
780
|
-
`
|
|
805
|
+
`wireSearchFields(root, { models })`. Rules parse `name:value` expressions;
|
|
781
806
|
their optional `suggest` function supplies selectable completions. The model
|
|
782
807
|
commits valid expressions on whitespace or Enter, owns chips and clear/edit/
|
|
783
808
|
remove actions, and exposes `state`, `suggestions`, and the latest `result` as
|
|
@@ -786,10 +811,10 @@ token is committed or removed, the text becomes empty or non-empty, or the
|
|
|
786
811
|
editor revision changes, so typing plain text never re-runs the host render.
|
|
787
812
|
Keep it that way in the host: read `model.state.peek()` in render, and bind
|
|
788
813
|
`model.result` (or a `computed`) as a fine-grained signal hole rather than
|
|
789
|
-
reading `model.state.value`. Omit the model to retain full manual control. Use `
|
|
814
|
+
reading `model.state.value`. Omit the model to retain full manual control. Use `readSearchField()`
|
|
790
815
|
after browser input to recover text plus token offsets, and
|
|
791
|
-
`
|
|
792
|
-
Call `
|
|
816
|
+
`placeSearchFieldCaret()` when restoring focus after a controlled update.
|
|
817
|
+
Call `wireSearchFields()` once at a stable root to make Enter submit through
|
|
793
818
|
`onSubmit` without inserting a contenteditable line break and to preserve focus
|
|
794
819
|
plus the text-relative caret when keyboard deletion of a chip causes controlled
|
|
795
820
|
rendering to replace the editor. A select-all deletion is normalized to a truly
|
|
@@ -811,12 +836,12 @@ and respect reduced-motion preferences. The field works standalone or inside a
|
|
|
811
836
|
`ToolbarControlGroup`; the application owns the transient focused/open signal,
|
|
812
837
|
focus transfer, and focusout policy. The catalog's Toolbar route demonstrates
|
|
813
838
|
that composition at wide and narrow sizes.
|
|
814
|
-
Override its surface through `--kui-
|
|
815
|
-
chips through `--kui-
|
|
816
|
-
`--kui-
|
|
839
|
+
Override its surface through `--kui-search-field-{background|border}` and its
|
|
840
|
+
chips through `--kui-search-field-token-{background|foreground}`. Override
|
|
841
|
+
`--kui-search-field-line-size` only when the complete first-line geometry must
|
|
817
842
|
change together.
|
|
818
843
|
|
|
819
|
-
`TabBar` is controlled: pass ordered `
|
|
844
|
+
`TabBar` is controlled: pass ordered `TabBarItem` children, then wire its keyboard
|
|
820
845
|
and same-bar drag behavior with `wireTabBars(root, { onReorder })`. During a
|
|
821
846
|
drag, the scroll strip automatically moves toward either edge with speed based
|
|
822
847
|
on pointer proximity, exposing earlier or later drop targets. Apply the reported
|
|
@@ -827,53 +852,53 @@ at the opposite edge, set `trailingPlacement="adjacent"`, pass the local action
|
|
|
827
852
|
through `trailing`, and pass the workspace action through `end`. TabBar owns the
|
|
828
853
|
flex geometry: the tab strip shrinks and scrolls while both action regions stay
|
|
829
854
|
visible. Do not recreate that split with descendant CSS overrides.
|
|
830
|
-
Use `
|
|
855
|
+
Use `TabBarItem.rootAttributes` for domain `data-*` metadata and `closeIcon` for a
|
|
831
856
|
decorative replacement glyph. The runtime rejects roles and case variants of
|
|
832
857
|
the component- or wiring-owned action, tab identity, selection, drag, drop, and
|
|
833
858
|
component markers. Keep the icon free of interactive descendants; the named
|
|
834
859
|
close button retains all close interaction.
|
|
835
860
|
|
|
836
|
-
`Select`
|
|
861
|
+
`Select` and `PopupMenu` draw their own native controls and need no Web Awesome. Each renders inert markup until its registration entry is imported once in the application:
|
|
837
862
|
|
|
838
863
|
```ts
|
|
839
|
-
import "@kerfjs/ui/webawesome.css";
|
|
840
864
|
import "@kerfjs/ui/select/register";
|
|
865
|
+
import "@kerfjs/ui/popup-menu/register";
|
|
841
866
|
```
|
|
842
867
|
|
|
843
|
-
|
|
868
|
+
`select/register` defines the form-associated `kui-select` root and wires every `Select` in the document; `popup-menu/register` wires every `PopupMenu` (opening, keyboard navigation, submenus, the `kui-menu-select` event, and focus return). That boundary keeps custom-element and document-listener side effects out of bundles that use unrelated components. Automated consumer-bundle tests enforce it, and also prove that no public entry except `@kerfjs/ui/webawesome.css` pulls in Web Awesome. Either registration also installs help tags: an icon-only Select, PopupMenu, or `aria-label`-named `<button>` in a `ToolbarControlGroup` shows its name in an `aria-hidden` tooltip on hover and keyboard focus. A toolbar with icon-only buttons but neither control imports `@kerfjs/ui/help-tags/register`, which registers only the tooltip.
|
|
844
869
|
|
|
845
870
|
`PopupMenu` items may include `submenu` children, `checked` choices, a leading `icon`, trailing `details`, `disabledReason`, and a `danger` tone. The app owns choice state and dispatches each item's `action`. For a right-click menu, set `context: true`, a `label`, and `anchor={pointSignal.value}`; the app's `contextmenu` handler stores `{ x: event.clientX, y: event.clientY }` in that signal and calls `openPopupMenu(menu)`. The menu renders its own zero-footprint anchor host and keeps the point across re-renders, so it needs no wrapper or CSS (`openPopupMenuAt(menu, x, y)` still opens a menu rendered without `anchor`); `closePopupMenu(menu)` closes it programmatically. See [component selection](docs/component-selection.md#popup-menu-migration) for examples.
|
|
846
871
|
Use `label` for a visible label or `ariaLabel` for a visually hidden name. A
|
|
847
872
|
nonempty visible label takes precedence when both are supplied. Kerf names the
|
|
848
|
-
|
|
849
|
-
|
|
873
|
+
native trigger without adding visible label spacing; this also works with
|
|
874
|
+
`renderSelected`. Use `hint`
|
|
850
875
|
for persistent supporting text below the control and `placeholderText` for the
|
|
851
876
|
empty value inside the closed control. Loading placeholders preserve the hint.
|
|
852
877
|
|
|
853
|
-
`Select` also owns
|
|
854
|
-
|
|
855
|
-
|
|
878
|
+
`Select` also owns its reconciliation boundary: option icons keep stable
|
|
879
|
+
elements across rerenders, and `renderSelected` content is replaced when the
|
|
880
|
+
controlled value changes. Consumers do not need to add
|
|
856
881
|
`data-key` or `data-morph-skip` workarounds around choice icons. Icon-bearing
|
|
857
882
|
options retain the standard icon-to-label gap. When a compact Select is wrapped
|
|
858
883
|
in a `ToolbarControlGroup`, use `focusRingOwner="group"`; the group paints the
|
|
859
884
|
focus ring with its configured pill or rounded geometry.
|
|
860
885
|
|
|
861
|
-
For application choices and panes,
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
886
|
+
For application choices and panes, use Kerf's purpose-built primitives;
|
|
887
|
+
Web Awesome is an optional integration, and the
|
|
888
|
+
[migration guide](./docs/webawesome-migration.md) maps each Web Awesome
|
|
889
|
+
element a Kerf component replaces (`Select`, `PopupMenu`, `SegmentedControl`,
|
|
890
|
+
`TabBar`, `LucideIcon`, `ResizableRegion`, and the native form controls). `ResizableRegion` includes Hot Sheet 2's 1px separator and
|
|
866
891
|
hover/focus grip. Its optional `handleIcon` replaces only the decorative glyph;
|
|
867
892
|
the component and `wireResizableRegions()` retain separator semantics and
|
|
868
893
|
pointer/keyboard behavior. Typed policies cover separator visibility,
|
|
869
894
|
instant-track/composited-content collapse, popup-safe overflow,
|
|
870
895
|
inline/overlay/hidden responsive presentation, `responsiveFillAt` single-track
|
|
871
896
|
replacement, and safe-area restore controls;
|
|
872
|
-
the same policies are available on `Workbench` and `CollapsiblePanel`.
|
|
873
|
-
Web Awesome Popup when its anchored-positioning
|
|
874
|
-
engine removes custom placement code
|
|
875
|
-
|
|
876
|
-
|
|
897
|
+
the same policies are available on `Workbench` and `CollapsiblePanel`. In an
|
|
898
|
+
integration application, consider Web Awesome Popup when its anchored-positioning
|
|
899
|
+
engine removes custom placement code, and treat Tree, Animated Image,
|
|
900
|
+
Comparison, and Zoomable Frame as exceptional rather than default patterns.
|
|
901
|
+
The detailed rationale lives in the theme contract.
|
|
877
902
|
|
|
878
903
|
## Design and tool guidance
|
|
879
904
|
|
|
@@ -885,10 +910,11 @@ than default patterns. The detailed rationale lives in the theme contract.
|
|
|
885
910
|
- [Component and integration contract](./docs/component-contract.md)
|
|
886
911
|
- [Spacing and application layout](./docs/layout.md)
|
|
887
912
|
- [Web Awesome theme contract](./docs/webawesome-theme.md)
|
|
913
|
+
- [Moving an application off Web Awesome](./docs/webawesome-migration.md)
|
|
888
914
|
- [UX catalog contract](./docs/ux-demo.md)
|
|
889
915
|
- [AI guide](./ai/skill.md)
|
|
890
916
|
|
|
891
|
-
Run `npm run dev` from this directory for the category-grouped master/detail catalog. Every public visual component has a focused route; all
|
|
917
|
+
Run `npm run dev` from this directory for the category-grouped master/detail catalog. Every public visual component has a focused route; all 73 free Web Awesome 3.14 components have focused routes under the collapsible Web Awesome Integration section. Every detail visibly links its first-party demo source and existing guidance while showing the repository-relative paths; first-party components also link their implementation source, and Web Awesome entries label local guidance as Kerf integration guidance. One grouped `Related components` selector contains derived `Uses` / `Used by` navigation across both sets. Run `npm run check` for static/unit/bundle gates and `npm run test:e2e` for the real-browser suite.
|
|
892
918
|
|
|
893
919
|
Run `npm run format` after editing source or structured content. The narrower
|
|
894
920
|
`npm run format:css` command remains available for style-only work. The normal
|
|
@@ -912,3 +938,16 @@ negative, unresolved, or contradictory values leave the item visible under this
|
|
|
912
938
|
width policy. Keep primary actions visible and offer a complementary overflow
|
|
913
939
|
group. See `docs/component-contract.md` "Toolbar width visibility" for lifecycle
|
|
914
940
|
details.
|
|
941
|
+
|
|
942
|
+
## License and third-party notices
|
|
943
|
+
|
|
944
|
+
`@kerfjs/ui` is MIT licensed (see `LICENSE`).
|
|
945
|
+
|
|
946
|
+
Web Awesome (`@awesome.me/webawesome`, copyright Fonticons, Inc., MIT) is an
|
|
947
|
+
optional peer dependency. This package does not copy or bundle Web Awesome
|
|
948
|
+
code: `@kerfjs/ui/webawesome.css` imports Web Awesome's stylesheet from the
|
|
949
|
+
application's own installation, and `@kerfjs/ui/webawesome` contains only type
|
|
950
|
+
declarations. An application that bundles Web Awesome components
|
|
951
|
+
redistributes them, so it should retain Web Awesome's MIT notice; Font Awesome
|
|
952
|
+
Free, whose icons Web Awesome embeds, asks that the attribution comments in
|
|
953
|
+
those icons stay intact.
|
|
@@ -17,7 +17,9 @@
|
|
|
17
17
|
],
|
|
18
18
|
"preferences": {
|
|
19
19
|
"application-shell": {
|
|
20
|
-
"preferred": "@kerfjs/ui:recipe-app-shell"
|
|
20
|
+
"preferred": "@kerfjs/ui:recipe-app-shell",
|
|
21
|
+
"avoid": ["@kerfjs/ui:wa-page"],
|
|
22
|
+
"rationale": "Compose the application shell from Workbench, SplitView, NavStack, or TabNavigator instead of a Web Awesome page."
|
|
21
23
|
},
|
|
22
24
|
"application-tabs": {
|
|
23
25
|
"preferred": "@kerfjs/ui:tab-bar",
|
|
@@ -31,7 +33,7 @@
|
|
|
31
33
|
"command-menu": {
|
|
32
34
|
"preferred": "@kerfjs/ui:popup-menu",
|
|
33
35
|
"avoid": ["@kerfjs/ui:wa-dropdown", "@kerfjs/ui:wa-dropdown-item"],
|
|
34
|
-
"rationale": "Render PopupMenu,
|
|
36
|
+
"rationale": "Render PopupMenu, Kerf's native command menu; use Select when choosing a value."
|
|
35
37
|
},
|
|
36
38
|
"embedded-media": {
|
|
37
39
|
"preferred": "@kerfjs/ui:content-item",
|
|
@@ -69,12 +71,131 @@
|
|
|
69
71
|
"rationale": "Render ResizableRegion for application panes instead of a Web Awesome split panel."
|
|
70
72
|
},
|
|
71
73
|
"structured-search": {
|
|
72
|
-
"preferred": "@kerfjs/ui:
|
|
74
|
+
"preferred": "@kerfjs/ui:search-field"
|
|
73
75
|
},
|
|
74
76
|
"value-selection": {
|
|
75
77
|
"preferred": "@kerfjs/ui:select",
|
|
76
78
|
"avoid": ["@kerfjs/ui:wa-select", "@kerfjs/ui:wa-option"],
|
|
77
|
-
"rationale": "Render Select, which
|
|
79
|
+
"rationale": "Render Select, which replaces wa-select and wa-option with Kerf's own popup, form, and spacing contract."
|
|
80
|
+
},
|
|
81
|
+
"action-button": {
|
|
82
|
+
"preferred": "@kerfjs/ui:button",
|
|
83
|
+
"avoid": ["@kerfjs/ui:wa-button"],
|
|
84
|
+
"rationale": "Render Button, a native button with Kerf tones and sizes, icon-only with ariaLabel, or a toggle with pressed."
|
|
85
|
+
},
|
|
86
|
+
"text-entry": {
|
|
87
|
+
"preferred": "@kerfjs/ui:text-field",
|
|
88
|
+
"avoid": ["@kerfjs/ui:wa-input", "@kerfjs/ui:wa-textarea"],
|
|
89
|
+
"rationale": "Render TextField, a native input or textarea with Kerf label, hint, error, clear, and count anatomy."
|
|
90
|
+
},
|
|
91
|
+
"boolean-option": {
|
|
92
|
+
"preferred": "@kerfjs/ui:checkbox",
|
|
93
|
+
"avoid": ["@kerfjs/ui:wa-checkbox", "@kerfjs/ui:wa-checkbox-group"],
|
|
94
|
+
"rationale": "Render Checkbox, a native checkbox drawn as a Kerf box."
|
|
95
|
+
},
|
|
96
|
+
"exclusive-option": {
|
|
97
|
+
"preferred": "@kerfjs/ui:radio-group",
|
|
98
|
+
"avoid": ["@kerfjs/ui:wa-radio-group", "@kerfjs/ui:wa-radio"],
|
|
99
|
+
"rationale": "Render RadioGroup, a native radio group with a choices array."
|
|
100
|
+
},
|
|
101
|
+
"immediate-setting": {
|
|
102
|
+
"preferred": "@kerfjs/ui:switch",
|
|
103
|
+
"avoid": ["@kerfjs/ui:wa-switch"],
|
|
104
|
+
"rationale": "Render Switch, a native switch-role checkbox for a setting that applies immediately."
|
|
105
|
+
},
|
|
106
|
+
"modal-dialog": {
|
|
107
|
+
"preferred": "@kerfjs/ui:surface-scaffold",
|
|
108
|
+
"avoid": ["@kerfjs/ui:wa-dialog", "@kerfjs/ui:wa-drawer"],
|
|
109
|
+
"rationale": "Render DialogSurface, a native dialog opened with openDialog and closed with closeDialog; use its side-sheet or bottom-sheet presentation instead of a Web Awesome drawer."
|
|
110
|
+
},
|
|
111
|
+
"status-badge": {
|
|
112
|
+
"preferred": "@kerfjs/ui:badge",
|
|
113
|
+
"avoid": ["@kerfjs/ui:wa-badge"],
|
|
114
|
+
"rationale": "Render Badge for compact status, count, or category metadata."
|
|
115
|
+
},
|
|
116
|
+
"removable-tag": {
|
|
117
|
+
"preferred": "@kerfjs/ui:chip",
|
|
118
|
+
"avoid": ["@kerfjs/ui:wa-tag"],
|
|
119
|
+
"rationale": "Render Chip for a tag, removable or not."
|
|
120
|
+
},
|
|
121
|
+
"activity-indicator": {
|
|
122
|
+
"preferred": "@kerfjs/ui:loading-spinner",
|
|
123
|
+
"avoid": ["@kerfjs/ui:wa-spinner"],
|
|
124
|
+
"rationale": "Render LoadingSpinner for indeterminate activity."
|
|
125
|
+
},
|
|
126
|
+
"loading-placeholder": {
|
|
127
|
+
"preferred": "@kerfjs/ui:skeleton",
|
|
128
|
+
"avoid": ["@kerfjs/ui:wa-skeleton"],
|
|
129
|
+
"rationale": "Render Skeleton for a loading placeholder."
|
|
130
|
+
},
|
|
131
|
+
"anchored-surface": {
|
|
132
|
+
"preferred": "@kerfjs/ui:anchored-surface",
|
|
133
|
+
"avoid": ["@kerfjs/ui:wa-popover", "@kerfjs/ui:wa-popup"],
|
|
134
|
+
"rationale": "Render AnchoredSurface for anchored interactive help or popup content; position other elements with kerfjs/overlay's positionAnchored."
|
|
135
|
+
},
|
|
136
|
+
"content-container": {
|
|
137
|
+
"preferred": "@kerfjs/ui:content-item",
|
|
138
|
+
"avoid": ["@kerfjs/ui:wa-card"],
|
|
139
|
+
"rationale": "Contain related content in a ContentItem (appearance=\"surface\" for a raised card) or a SunkenPanel instead of a Web Awesome card."
|
|
140
|
+
},
|
|
141
|
+
"inline-status": {
|
|
142
|
+
"preferred": "@kerfjs/ui:state-banner",
|
|
143
|
+
"avoid": ["@kerfjs/ui:wa-callout"],
|
|
144
|
+
"rationale": "Render StateBanner for persistent inline status instead of a Web Awesome callout."
|
|
145
|
+
},
|
|
146
|
+
"fetched-content": {
|
|
147
|
+
"preferred": "@kerfjs/ui:content-item",
|
|
148
|
+
"avoid": ["@kerfjs/ui:wa-include"],
|
|
149
|
+
"rationale": "Fetch remote content with resource() from kerfjs/async and render it as Kerf content inside a ContentItem; never inject fetched markup."
|
|
150
|
+
},
|
|
151
|
+
"scroll-region": {
|
|
152
|
+
"preferred": "@kerfjs/ui:pane",
|
|
153
|
+
"avoid": ["@kerfjs/ui:wa-scroller"],
|
|
154
|
+
"rationale": "Let a Pane own vertical scrolling with scroll edges, or use ColumnTrack for a horizontal track, instead of a Web Awesome scroller."
|
|
155
|
+
},
|
|
156
|
+
"transient-notification": {
|
|
157
|
+
"preferred": "@kerfjs/ui:toast",
|
|
158
|
+
"avoid": ["@kerfjs/ui:wa-toast", "@kerfjs/ui:wa-toast-item"],
|
|
159
|
+
"rationale": "Call toast() from kerfjs/overlay with @kerfjs/ui/overlay-toast.css imported instead of a Web Awesome toast stack."
|
|
160
|
+
},
|
|
161
|
+
"hover-explanation": {
|
|
162
|
+
"preferred": "@kerfjs/ui:tooltip",
|
|
163
|
+
"avoid": ["@kerfjs/ui:wa-tooltip"],
|
|
164
|
+
"rationale": "Call tooltip() from kerfjs/overlay with @kerfjs/ui/overlay-tooltip.css imported instead of a Web Awesome tooltip; icon-only Kerf controls already get help tags."
|
|
165
|
+
},
|
|
166
|
+
"show-hide-content": {
|
|
167
|
+
"preferred": "@kerfjs/ui:disclosure",
|
|
168
|
+
"avoid": [
|
|
169
|
+
"@kerfjs/ui:wa-details",
|
|
170
|
+
"@kerfjs/ui:wa-accordion",
|
|
171
|
+
"@kerfjs/ui:wa-accordion-item"
|
|
172
|
+
],
|
|
173
|
+
"rationale": "Use the Kerf Disclosure (a native details element) for show-and-hide content, and Disclosures sharing a name for an accordion."
|
|
174
|
+
},
|
|
175
|
+
"progress-indicator": {
|
|
176
|
+
"preferred": "@kerfjs/ui:progress-bar",
|
|
177
|
+
"avoid": ["@kerfjs/ui:wa-progress-bar"],
|
|
178
|
+
"rationale": "Use the Kerf ProgressBar, a native progress element with a label row, tones, and an indeterminate sweep."
|
|
179
|
+
},
|
|
180
|
+
"compact-progress": {
|
|
181
|
+
"preferred": "@kerfjs/ui:progress-ring",
|
|
182
|
+
"avoid": ["@kerfjs/ui:wa-progress-ring"],
|
|
183
|
+
"rationale": "Use the Kerf ProgressRing where a bar does not fit, inline in text, a row, or a toolbar."
|
|
184
|
+
},
|
|
185
|
+
"range-value": {
|
|
186
|
+
"preferred": "@kerfjs/ui:slider",
|
|
187
|
+
"avoid": ["@kerfjs/ui:wa-slider"],
|
|
188
|
+
"rationale": "Use the Kerf Slider, a native range input drawn as a track, fill, and thumb, with wireSliders for its live readout."
|
|
189
|
+
},
|
|
190
|
+
"tag-list": {
|
|
191
|
+
"preferred": "@kerfjs/ui:tag-field",
|
|
192
|
+
"avoid": ["@kerfjs/ui:wa-tag-input"],
|
|
193
|
+
"rationale": "Use the Kerf TagField, SearchField's token editor as a form field with a hidden input per tag, wired by wireTagFields."
|
|
194
|
+
},
|
|
195
|
+
"color-input": {
|
|
196
|
+
"preferred": "@kerfjs/ui:color-field",
|
|
197
|
+
"avoid": ["@kerfjs/ui:wa-color-picker"],
|
|
198
|
+
"rationale": "Use the Kerf ColorField, which opens a ColorPicker from a swatch and hex trigger, or an inline ColorPicker or ColorSwatches."
|
|
78
199
|
}
|
|
79
200
|
},
|
|
80
201
|
"theme": {
|