@kerfjs/ui 5.0.0-beta.103 → 5.0.0-beta.105
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 +163 -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 -627
- package/ai/component-composition-rules.json +11 -10
- package/ai/component-composition.json +1689 -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/search-field.md +108 -0
- 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 +1577 -245
- 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-IM3GKYOG.js → chunk-CIAUILRR.js} +52 -32
- 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-PKL6QJKK.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-MF6ZUUJZ.js → chunk-VEME3D7K.js} +38 -40
- 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-aYR0YAei.d.ts → search-field-CrGTN5sa.d.ts} +67 -43
- 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 +25 -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 +25 -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 +232 -165
- 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 +131 -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/ai/components/token-search-field.md +0 -107
- 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-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-IM3GKYOG.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-MF6ZUUJZ.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-PKL6QJKK.js.map +0 -1
- package/dist/chunk-QTSMHH5J.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/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
|
|
@@ -311,6 +333,9 @@ when it adds useful context. Set `responsive="wrap"` on a heading whose title
|
|
|
311
333
|
must stay whole: it keeps one row while everything fits and otherwise moves the
|
|
312
334
|
trailing actions below the title instead of truncating it.
|
|
313
335
|
|
|
336
|
+
A toolbar with a single zone gives it the whole content box, so content set to
|
|
337
|
+
fill the row reaches both insets; an absent zone leaves no empty track or gap.
|
|
338
|
+
|
|
314
339
|
A toolbar never clips an action. Its trailing zone wraps whole control groups
|
|
315
340
|
onto another trailing-aligned row under every `responsive` policy, and a
|
|
316
341
|
`responsive="stack"` toolbar wraps its stacked center and trailing groups the
|
|
@@ -322,7 +347,7 @@ app-owned "More" `PopupMenu` (in a `single` group with `nestedDropdown`).
|
|
|
322
347
|
`DisclosureArrow` defaults to an 18px root-scaled decorative visual. Pass a
|
|
323
348
|
typed `size` (for example `size={remify(24)}` from `@kerfjs/ui/css-values`)
|
|
324
349
|
when a consumer needs another size; the owning control still supplies interaction, naming, and
|
|
325
|
-
expanded state. Kerf `Select`
|
|
350
|
+
expanded state. Kerf `Select` keeps its own expand-glyph
|
|
326
351
|
scale of `.5` through `--kui-disclosure-icon-scale`. Author replacement
|
|
327
352
|
`DisclosureArrow` icon content facing right before its configured direction
|
|
328
353
|
transform is applied. Direction changes take the shortest rotation path; a
|
|
@@ -612,8 +637,11 @@ the complete [layout contract](./docs/layout.md).
|
|
|
612
637
|
|
|
613
638
|
## Web Awesome theme
|
|
614
639
|
|
|
615
|
-
|
|
616
|
-
|
|
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:
|
|
617
645
|
|
|
618
646
|
```ts
|
|
619
647
|
import type {} from "@kerfjs/ui/webawesome";
|
|
@@ -633,7 +661,7 @@ radii, tooltips, and shadows through Web Awesome's public `--wa-*` contract.
|
|
|
633
661
|
On `wa-dialog`, the optional `hide-actions` class hides the exported
|
|
634
662
|
`header-actions` shadow part for compositions that provide another dismissal
|
|
635
663
|
affordance.
|
|
636
|
-
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
|
|
637
665
|
component has an individual UX-catalog route under the collapsible ecosystem
|
|
638
666
|
section, but the theme entry does not import or register component JavaScript,
|
|
639
667
|
so each component module remains independently tree-shakeable in consuming apps.
|
|
@@ -678,7 +706,7 @@ and `danger` palettes. Override an individual banner with
|
|
|
678
706
|
`--kui-state-banner-action-hover-background`. To retheme one tone everywhere,
|
|
679
707
|
override `--kui-state-banner-{tone}-{background|border|foreground}`. Other
|
|
680
708
|
stateful components follow the same public-variable pattern, including
|
|
681
|
-
`--kui-toolbar-control-*`, `--kui-segmented-*`, `--kui-
|
|
709
|
+
`--kui-toolbar-control-*`, `--kui-segmented-*`, `--kui-tab-bar-item-*`, and
|
|
682
710
|
`--kui-tab-bar-*`.
|
|
683
711
|
|
|
684
712
|
`SegmentedControl` is a controlled exclusive-choice component. Use
|
|
@@ -738,26 +766,26 @@ change handler. A multiple group takes no `required`. On dark inverse chrome,
|
|
|
738
766
|
place the chips in a dark appearance scope (`.wa-dark`) instead of restyling
|
|
739
767
|
them.
|
|
740
768
|
|
|
741
|
-
`
|
|
769
|
+
`MessageComposer` is the chat or prompt composer: a raised frame (the standard
|
|
742
770
|
border, large radius, and `shadow-l`) whose border turns brand while focus is
|
|
743
771
|
within. Its borderless message field grows with its content between `minRows`
|
|
744
772
|
(default 1) and `maxRows` (default 8) lines, then scrolls, above an action row
|
|
745
773
|
with an optional quiet `hint` and the trailing `actions`:
|
|
746
774
|
|
|
747
775
|
```tsx
|
|
748
|
-
<
|
|
776
|
+
<MessageComposer
|
|
749
777
|
id="assistant-message"
|
|
750
778
|
name="message"
|
|
751
779
|
label="Message"
|
|
752
780
|
placeholder="Ask about this build"
|
|
753
781
|
hint="Answers use the latest nightly build."
|
|
754
|
-
|
|
782
|
+
trailing={<Button tone="brand" action="send-message">Send</Button>}
|
|
755
783
|
/>
|
|
756
784
|
```
|
|
757
785
|
|
|
758
786
|
The app reads and clears the textarea from its send action. For
|
|
759
|
-
Enter-to-send, set `submitOnEnter` and call `
|
|
760
|
-
`@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
|
|
761
789
|
trailing action, Shift+Enter inserts a newline, and an IME composition commit
|
|
762
790
|
or an empty message never sends. Put it in a `DialogSurface` with
|
|
763
791
|
`footerPresentation="floating"` (`slot="footer"`) to float it over a
|
|
@@ -767,21 +795,26 @@ Add `headerPresentation="floating"` with a `fill` body and
|
|
|
767
795
|
`scrollClearance="both"` to let the transcript scroll beneath a translucent
|
|
768
796
|
title bar as well.
|
|
769
797
|
|
|
770
|
-
`
|
|
798
|
+
`SearchField` is a token-controlled contenteditable searchbox that keeps
|
|
771
799
|
free text and ordered filter chips in one field. Its editable text stays
|
|
772
800
|
DOM-owned between token changes so typing does not replace the caret. Tokens
|
|
773
801
|
expose stable edit/remove actions and remain atomic during editing; the app owns
|
|
774
802
|
parsing, suggestions, query execution, and state in manual mode. For automatic
|
|
775
|
-
handling, create a model with `
|
|
803
|
+
handling, create a model with `createSearchFieldModel({ rules, evaluate })`,
|
|
776
804
|
pass it as the field's `model`, and register it under the field id in
|
|
777
|
-
`
|
|
805
|
+
`wireSearchFields(root, { models })`. Rules parse `name:value` expressions;
|
|
778
806
|
their optional `suggest` function supplies selectable completions. The model
|
|
779
807
|
commits valid expressions on whitespace or Enter, owns chips and clear/edit/
|
|
780
808
|
remove actions, and exposes `state`, `suggestions`, and the latest `result` as
|
|
781
|
-
signals.
|
|
809
|
+
signals. The field subscribes only to `model.structure`, which changes when a
|
|
810
|
+
token is committed or removed, the text becomes empty or non-empty, or the
|
|
811
|
+
editor revision changes, so typing plain text never re-runs the host render.
|
|
812
|
+
Keep it that way in the host: read `model.state.peek()` in render, and bind
|
|
813
|
+
`model.result` (or a `computed`) as a fine-grained signal hole rather than
|
|
814
|
+
reading `model.state.value`. Omit the model to retain full manual control. Use `readSearchField()`
|
|
782
815
|
after browser input to recover text plus token offsets, and
|
|
783
|
-
`
|
|
784
|
-
Call `
|
|
816
|
+
`placeSearchFieldCaret()` when restoring focus after a controlled update.
|
|
817
|
+
Call `wireSearchFields()` once at a stable root to make Enter submit through
|
|
785
818
|
`onSubmit` without inserting a contenteditable line break and to preserve focus
|
|
786
819
|
plus the text-relative caret when keyboard deletion of a chip causes controlled
|
|
787
820
|
rendering to replace the editor. A select-all deletion is normalized to a truly
|
|
@@ -803,12 +836,12 @@ and respect reduced-motion preferences. The field works standalone or inside a
|
|
|
803
836
|
`ToolbarControlGroup`; the application owns the transient focused/open signal,
|
|
804
837
|
focus transfer, and focusout policy. The catalog's Toolbar route demonstrates
|
|
805
838
|
that composition at wide and narrow sizes.
|
|
806
|
-
Override its surface through `--kui-
|
|
807
|
-
chips through `--kui-
|
|
808
|
-
`--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
|
|
809
842
|
change together.
|
|
810
843
|
|
|
811
|
-
`TabBar` is controlled: pass ordered `
|
|
844
|
+
`TabBar` is controlled: pass ordered `TabBarItem` children, then wire its keyboard
|
|
812
845
|
and same-bar drag behavior with `wireTabBars(root, { onReorder })`. During a
|
|
813
846
|
drag, the scroll strip automatically moves toward either edge with speed based
|
|
814
847
|
on pointer proximity, exposing earlier or later drop targets. Apply the reported
|
|
@@ -819,53 +852,53 @@ at the opposite edge, set `trailingPlacement="adjacent"`, pass the local action
|
|
|
819
852
|
through `trailing`, and pass the workspace action through `end`. TabBar owns the
|
|
820
853
|
flex geometry: the tab strip shrinks and scrolls while both action regions stay
|
|
821
854
|
visible. Do not recreate that split with descendant CSS overrides.
|
|
822
|
-
Use `
|
|
855
|
+
Use `TabBarItem.rootAttributes` for domain `data-*` metadata and `closeIcon` for a
|
|
823
856
|
decorative replacement glyph. The runtime rejects roles and case variants of
|
|
824
857
|
the component- or wiring-owned action, tab identity, selection, drag, drop, and
|
|
825
858
|
component markers. Keep the icon free of interactive descendants; the named
|
|
826
859
|
close button retains all close interaction.
|
|
827
860
|
|
|
828
|
-
`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:
|
|
829
862
|
|
|
830
863
|
```ts
|
|
831
|
-
import "@kerfjs/ui/webawesome.css";
|
|
832
864
|
import "@kerfjs/ui/select/register";
|
|
865
|
+
import "@kerfjs/ui/popup-menu/register";
|
|
833
866
|
```
|
|
834
867
|
|
|
835
|
-
|
|
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.
|
|
836
869
|
|
|
837
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.
|
|
838
871
|
Use `label` for a visible label or `ariaLabel` for a visually hidden name. A
|
|
839
872
|
nonempty visible label takes precedence when both are supplied. Kerf names the
|
|
840
|
-
|
|
841
|
-
|
|
873
|
+
native trigger without adding visible label spacing; this also works with
|
|
874
|
+
`renderSelected`. Use `hint`
|
|
842
875
|
for persistent supporting text below the control and `placeholderText` for the
|
|
843
876
|
empty value inside the closed control. Loading placeholders preserve the hint.
|
|
844
877
|
|
|
845
|
-
`Select` also owns
|
|
846
|
-
|
|
847
|
-
|
|
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
|
|
848
881
|
`data-key` or `data-morph-skip` workarounds around choice icons. Icon-bearing
|
|
849
882
|
options retain the standard icon-to-label gap. When a compact Select is wrapped
|
|
850
883
|
in a `ToolbarControlGroup`, use `focusRingOwner="group"`; the group paints the
|
|
851
884
|
focus ring with its configured pill or rounded geometry.
|
|
852
885
|
|
|
853
|
-
For application choices and panes,
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
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
|
|
858
891
|
hover/focus grip. Its optional `handleIcon` replaces only the decorative glyph;
|
|
859
892
|
the component and `wireResizableRegions()` retain separator semantics and
|
|
860
893
|
pointer/keyboard behavior. Typed policies cover separator visibility,
|
|
861
894
|
instant-track/composited-content collapse, popup-safe overflow,
|
|
862
895
|
inline/overlay/hidden responsive presentation, `responsiveFillAt` single-track
|
|
863
896
|
replacement, and safe-area restore controls;
|
|
864
|
-
the same policies are available on `Workbench` and `CollapsiblePanel`.
|
|
865
|
-
Web Awesome Popup when its anchored-positioning
|
|
866
|
-
engine removes custom placement code
|
|
867
|
-
|
|
868
|
-
|
|
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.
|
|
869
902
|
|
|
870
903
|
## Design and tool guidance
|
|
871
904
|
|
|
@@ -877,10 +910,11 @@ than default patterns. The detailed rationale lives in the theme contract.
|
|
|
877
910
|
- [Component and integration contract](./docs/component-contract.md)
|
|
878
911
|
- [Spacing and application layout](./docs/layout.md)
|
|
879
912
|
- [Web Awesome theme contract](./docs/webawesome-theme.md)
|
|
913
|
+
- [Moving an application off Web Awesome](./docs/webawesome-migration.md)
|
|
880
914
|
- [UX catalog contract](./docs/ux-demo.md)
|
|
881
915
|
- [AI guide](./ai/skill.md)
|
|
882
916
|
|
|
883
|
-
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.
|
|
884
918
|
|
|
885
919
|
Run `npm run format` after editing source or structured content. The narrower
|
|
886
920
|
`npm run format:css` command remains available for style-only work. The normal
|
|
@@ -904,3 +938,16 @@ negative, unresolved, or contradictory values leave the item visible under this
|
|
|
904
938
|
width policy. Keep primary actions visible and offer a complementary overflow
|
|
905
939
|
group. See `docs/component-contract.md` "Toolbar width visibility" for lifecycle
|
|
906
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.
|