@kerfjs/ui 5.0.0-beta.104 → 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 +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 +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-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
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# ColorField
|
|
2
|
+
|
|
3
|
+
`@kerfjs/ui/color-field` puts a color in a form or inspector without keeping a
|
|
4
|
+
full picker open. It is a label above a trigger that shows the color as a
|
|
5
|
+
swatch (over a checkerboard, so opacity reads) and its hex value. Pressing the
|
|
6
|
+
trigger opens a [`ColorPicker`](./color-picker.md) in an `AnchoredSurface`
|
|
7
|
+
below it.
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { ColorField } from "@kerfjs/ui/color-field";
|
|
11
|
+
import { wireColorFields } from "@kerfjs/ui/wire-color-fields";
|
|
12
|
+
|
|
13
|
+
<ColorField id="fill" label="Fill" value={fill.value} mode={mode.value} name="fill" />;
|
|
14
|
+
|
|
15
|
+
const stop = wireColorFields(root, {
|
|
16
|
+
onChange: ({ value, mode: next }) => {
|
|
17
|
+
fill.value = value;
|
|
18
|
+
mode.value = next;
|
|
19
|
+
},
|
|
20
|
+
pickers: { fill: { presets } },
|
|
21
|
+
});
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Props
|
|
25
|
+
|
|
26
|
+
- `id` (required): the trigger's id; it prefixes the label, value, hint, and
|
|
27
|
+
error ids.
|
|
28
|
+
- `label`, or `ariaLabel` for a field without a visible label.
|
|
29
|
+
- `value` (required): CSS color text; invalid text shows black.
|
|
30
|
+
- `mode`: the picker's model when it opens — `rgb` (default), `hsl`, `hsb`,
|
|
31
|
+
or `gray`.
|
|
32
|
+
- `alpha` (default true): offer opacity. Without it the value is opaque.
|
|
33
|
+
- `name`, `form`: a hidden input submits the hex value.
|
|
34
|
+
- `hint`, `error` (an error marks the field invalid), `required`, `disabled`.
|
|
35
|
+
- `size`: `default` or `compact`, matching TextField's sizes.
|
|
36
|
+
- `className`, `rootAttributes`, `slot`.
|
|
37
|
+
|
|
38
|
+
## Wiring and values
|
|
39
|
+
|
|
40
|
+
`wireColorFields(root, { onInput?, onChange?, pickers? })` wires every
|
|
41
|
+
ColorField under `root`:
|
|
42
|
+
|
|
43
|
+
- Pressing a trigger opens a ColorPicker with the field's value, model, and
|
|
44
|
+
opacity, plus any `pickers[id]` options (`presets`, `samples`,
|
|
45
|
+
`addSampleAction`, `eyedropper`).
|
|
46
|
+
- Edits preview at once on the trigger's swatch, hex, and hidden input.
|
|
47
|
+
Live edits go to `onInput`; committed edits go to `onChange` with
|
|
48
|
+
`{ id, value, mode }`. Re-render the field with the reported value and mode.
|
|
49
|
+
- Escape or a press outside closes the picker, and focus returns to the
|
|
50
|
+
trigger. The surface stays on screen, flipping above the field or
|
|
51
|
+
scrolling the picker when space is short.
|
|
52
|
+
- The disposer removes the wiring and closes an open picker.
|
|
53
|
+
|
|
54
|
+
The value is `#rrggbb`, or `#rrggbbaa` below full opacity.
|
|
55
|
+
|
|
56
|
+
## Accessibility and geometry
|
|
57
|
+
|
|
58
|
+
The trigger is a button named by the label and the current hex value, with
|
|
59
|
+
`aria-haspopup="dialog"` and `aria-expanded`; the hint and error describe it.
|
|
60
|
+
The picker opens in a non-modal surface named by the label. The trigger
|
|
61
|
+
matches TextField's box, label, hint, and error geometry.
|
|
62
|
+
|
|
63
|
+
Use an inline `ColorPicker` when choosing the color is the view's main task,
|
|
64
|
+
and `ColorSwatches` for a small fixed palette. `ColorField` replaces
|
|
65
|
+
`wa-color-picker`, which is Discouraged.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# ColorPicker
|
|
2
|
+
|
|
3
|
+
`@kerfjs/ui/color-picker` is a full inline color picker panel:
|
|
4
|
+
|
|
5
|
+
- a saturation and brightness area;
|
|
6
|
+
- a hue slider and, optionally, an opacity slider on a checkerboard;
|
|
7
|
+
- a color-model menu (RGB, HSL, HSB, Grayscale) with its channel fields;
|
|
8
|
+
- a hex field (8 digits below full opacity) and an opacity field;
|
|
9
|
+
- a screen sampler where the browser offers the EyeDropper API;
|
|
10
|
+
- optional preset and sample swatches.
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
import { ColorPicker } from "@kerfjs/ui/color-picker";
|
|
14
|
+
import { wireColorPickers } from "@kerfjs/ui/wire-color-pickers";
|
|
15
|
+
|
|
16
|
+
<ColorPicker id="fill" label="Fill Color" value={fill.value} mode={mode.value} />;
|
|
17
|
+
|
|
18
|
+
const stop = wireColorPickers(root, {
|
|
19
|
+
onChange: ({ id, value, mode: next }) => {
|
|
20
|
+
fill.value = value;
|
|
21
|
+
mode.value = next;
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Props
|
|
27
|
+
|
|
28
|
+
- `id` and `label` (required): identity and the picker's accessible name.
|
|
29
|
+
- `value` (required): CSS color text (`#rrggbb[aa]`, `rgb()`, `hsl()`);
|
|
30
|
+
invalid text shows black.
|
|
31
|
+
- `mode`: `rgb` (default), `hsl`, `hsb`, or `gray` — which channel fields show.
|
|
32
|
+
- `alpha` (default true): the opacity slider and field. Without it the value
|
|
33
|
+
is always opaque.
|
|
34
|
+
- `name`, `form`: a hidden input submits the hex value.
|
|
35
|
+
- `eyedropper` (default true): the screen sampler, shown only where the
|
|
36
|
+
browser has the EyeDropper API.
|
|
37
|
+
- `presets`: a row of `ColorSwatches` under the controls. `samples`: titled
|
|
38
|
+
groups (`{ title, swatches }`), such as "Document Colors".
|
|
39
|
+
`addSampleAction`: a `data-action` for an "Add to Samples" button; read
|
|
40
|
+
the picker's value and add it to your samples.
|
|
41
|
+
- `disabled`, `className`, `rootAttributes`, `slot`.
|
|
42
|
+
|
|
43
|
+
## Wiring and values
|
|
44
|
+
|
|
45
|
+
`wireColorPickers(root, { onInput?, onChange? })` makes every picker under
|
|
46
|
+
`root` interactive. The interactive surface belongs to the wiring after the
|
|
47
|
+
first render, so a drag never fights a re-render. When the app re-renders a
|
|
48
|
+
picker with a new `value` (or `mode`), the picker adopts it.
|
|
49
|
+
|
|
50
|
+
- **The area** takes pointer drags and the arrow keys (Shift for 10% steps);
|
|
51
|
+
Page Up and Down change brightness, Home and End saturation.
|
|
52
|
+
- **Hue and opacity** are native range inputs.
|
|
53
|
+
- **Fields** commit on Enter or blur; Escape restores the shown value; invalid
|
|
54
|
+
text restores it too.
|
|
55
|
+
- **Swatches** (presets and samples) apply their color.
|
|
56
|
+
|
|
57
|
+
Each change dispatches a bubbling `kui-color-input` (live) or
|
|
58
|
+
`kui-color-change` (committed) event with `{ value, mode }` and calls
|
|
59
|
+
`onInput` or `onChange`. The value is `#rrggbb`, or `#rrggbbaa` below full
|
|
60
|
+
opacity. The picker keeps hue, saturation, and brightness as its own state,
|
|
61
|
+
so a hue survives while the color is gray, and conversions round-trip without
|
|
62
|
+
drift.
|
|
63
|
+
|
|
64
|
+
## Accessibility and geometry
|
|
65
|
+
|
|
66
|
+
The picker is a named group. The area is a slider named "Saturation and
|
|
67
|
+
Brightness" whose spoken value gives both; every field is named (Red, Hue,
|
|
68
|
+
Hex Color, Opacity). The panel takes the shared block-content inset, fills
|
|
69
|
+
its container up to 320px, and spaces its rows 12px apart.
|
|
70
|
+
|
|
71
|
+
Use `ColorSwatches` for a small fixed palette.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# ColorSwatches
|
|
2
|
+
|
|
3
|
+
`@kerfjs/ui/color-swatches` chooses one color from a small fixed palette: a
|
|
4
|
+
row of round swatches with no visible text. It is a native radio group, so
|
|
5
|
+
the chosen value submits under `name` and the platform owns the keyboard.
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { ColorSwatches } from "@kerfjs/ui/color-swatches";
|
|
9
|
+
import { fillColor } from "@kerfjs/ui/css-values";
|
|
10
|
+
|
|
11
|
+
<ColorSwatches
|
|
12
|
+
name="command-color"
|
|
13
|
+
label="Command Color"
|
|
14
|
+
value={color.value}
|
|
15
|
+
action="pick-color"
|
|
16
|
+
swatches={[
|
|
17
|
+
{ value: "none", label: "No Color", color: "transparent" },
|
|
18
|
+
{ value: "#ff3b30", label: "Red", color: fillColor("#ff3b30") },
|
|
19
|
+
{ value: "#0a84ff", label: "Blue", color: fillColor("#0a84ff") },
|
|
20
|
+
]}
|
|
21
|
+
/>;
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Props
|
|
25
|
+
|
|
26
|
+
- `name` (required): the radio group the chosen value submits under.
|
|
27
|
+
- `swatches` (required): `{ value, label, color }`. `label` names the swatch
|
|
28
|
+
for assistive technology and shows as its hover hint. `color` is a
|
|
29
|
+
`CssColor` (`uiColor()`, `colorVar()`, or `fillColor()`) or `'transparent'`
|
|
30
|
+
for the no-color swatch, drawn outlined and struck through.
|
|
31
|
+
- `value`: the chosen swatch.
|
|
32
|
+
- `label` (a visible legend) or `ariaLabel` names the group.
|
|
33
|
+
- `size` `default` (24px swatches) or `compact` (20px), `disabled`, `form`,
|
|
34
|
+
and `action` (a `data-action` on each radio; listen for `change`).
|
|
35
|
+
|
|
36
|
+
## Behavior and geometry
|
|
37
|
+
|
|
38
|
+
Tab reaches the group once; the arrow keys move the choice; Space chooses the
|
|
39
|
+
focused swatch. The chosen swatch wears a 2px ring in the text color, set off
|
|
40
|
+
from the dot by a 2px gap, so the choice never depends on the swatch's hue;
|
|
41
|
+
forced colors draw it in `Highlight`. The group takes the shared
|
|
42
|
+
block-content inset (a transparent 1px border and 8px padding), and the
|
|
43
|
+
swatches wrap with the 8px control gap.
|
|
44
|
+
|
|
45
|
+
Use `ChoiceChips` with swatches when each color also needs a visible name,
|
|
46
|
+
and the ColorPicker when any color is allowed.
|
|
@@ -234,13 +234,14 @@ See the
|
|
|
234
234
|
[`application-ui-profile.json`](./examples/application-ui-profile.json) example.
|
|
235
235
|
|
|
236
236
|
The package defaults avoid every `Discouraged` Web Awesome entry — each
|
|
237
|
-
`webawesome` catalog entry whose `recommendation` is not `supported
|
|
238
|
-
encouraged `wa-popup` primitive — under a concept whose `preferred` value is the
|
|
237
|
+
`webawesome` catalog entry whose `recommendation` is not `supported` — under a concept whose `preferred` value is the
|
|
239
238
|
Kerf component that wraps or replaces it (`command-menu` → `PopupMenu`,
|
|
240
239
|
`value-selection` → `Select`, `application-tabs` → `TabBar`, `icon` →
|
|
241
240
|
`LucideIcon`, `resizable-pane` → `ResizableRegion`, `exclusive-choice` →
|
|
242
241
|
`SegmentedControl`, `hierarchy-navigation` → `List`, `embedded-media` →
|
|
243
|
-
`ContentItem
|
|
242
|
+
`ContentItem`, `anchored-surface` → `AnchoredSurface`, `content-container` →
|
|
243
|
+
`ContentItem`, `inline-status` → `StateBanner`, `application-shell` → the
|
|
244
|
+
app-shell recipe, `modal-dialog` → `DialogSurface`). `eslint-plugin-kerfjs` `ui-preferences` (`KUI-L301`, also run by
|
|
244
245
|
`kerf-ui-doctor`) therefore reports a Discouraged element written directly as a
|
|
245
246
|
JSX tag (`<wa-dropdown>`) as well as through an imported component. A declared
|
|
246
247
|
component's own source file is exempt, because that wrapper is the sanctioned
|
|
@@ -303,7 +304,7 @@ paths each entry owns, relative to the consumer package root.
|
|
|
303
304
|
- Consumers configure presentation through component props and documented `--kui-*` semantic tokens. Foundation tokens provide opinionated neutral, brand/info, non-status pop, success, warning, and danger fill/border/foreground roles. Application stylesheets must not select package component classes or descendants. If genuinely new structure needs CSS, encapsulate that structure and its stylesheet in an application-owned component; configure any nested Kerf components through their public APIs. A thin composition that only connects other components should normally have no stylesheet. It may style only raw elements or layout it owns, never its component children.
|
|
304
305
|
|
|
305
306
|
`ListItem.rootAttributes`, `ListActionRow.rootAttributes`,
|
|
306
|
-
`ListHeader.rootAttributes`, `
|
|
307
|
+
`ListHeader.rootAttributes`, `TabBarItem.rootAttributes`,
|
|
307
308
|
`CatalogExample.rootAttributes`, and `CatalogExampleStack.rootAttributes` accept
|
|
308
309
|
application-owned `data-*` metadata without
|
|
309
310
|
adding product fields to the shared API. A `ListActionRow` trailing action uses
|
|
@@ -317,7 +318,7 @@ component or helper writes its protected attributes after the accepted metadata.
|
|
|
317
318
|
structurally widened, and JavaScript callers therefore cannot replace its
|
|
318
319
|
contract.
|
|
319
320
|
|
|
320
|
-
`
|
|
321
|
+
`TabBarItem.closeIcon` and `ResizableRegion.handleIcon` replace dormant decorative
|
|
321
322
|
glyph content only. They must not contain controls or interactive roles. The
|
|
322
323
|
component continues to own the named close button or focusable separator, and
|
|
323
324
|
`wireTabBars()` / `wireResizableRegions()` continue to own transient behavior
|
|
@@ -359,10 +360,10 @@ the child's own class (or one of the child's own unclassed internals below
|
|
|
359
360
|
it), and the child reads context values the parent provides under the
|
|
360
361
|
parent's name. `ResizableRegion` widens its edge extent by the unsafe inset a
|
|
361
362
|
split `SplitView` provides, and a `Skeleton` derives its fill from a solid
|
|
362
|
-
`Badge`'s on-solid color, both in their own stylesheets; an `
|
|
363
|
+
`Badge`'s on-solid color, both in their own stylesheets; an `TabBarItem` rounds its
|
|
363
364
|
outer corners in a segmented `TabBar` and shares a fill-allocated strip from
|
|
364
|
-
`
|
|
365
|
-
radius on its strip; its segmented `
|
|
365
|
+
`tab-bar-item.css`. An inspector `TabBar` uses the shared 12px rounded rectangle
|
|
366
|
+
radius on its strip; its segmented `TabBarItem` corners follow that strip's inner
|
|
366
367
|
curve, while an ordinary segmented strip keeps its pill ends and smaller
|
|
367
368
|
interior corners. A `PopupMenu` sizes
|
|
368
369
|
its trigger and applies a group's `menuInset` in its own stylesheet, and an
|
|
@@ -382,8 +383,7 @@ colocated component source:
|
|
|
382
383
|
appear only in an ancestor compound or inside `:has()` / `:not()`; the
|
|
383
384
|
styled compound is the stylesheet's own class.
|
|
384
385
|
- **Owned Web Awesome tags.** Kerf components are named by class, never by a
|
|
385
|
-
`wa-*` tag they render. A tag another component renders
|
|
386
|
-
`wa-select`, `wa-option`, a `PopupMenu`'s trigger `wa-button`) — as the
|
|
386
|
+
`wa-*` tag they render. A tag another component renders — as the
|
|
387
387
|
subject, or as an ancestor whose internals the rule reaches — must be scoped
|
|
388
388
|
to that component by its class or excluded with `:not()`. A direct child
|
|
389
389
|
that cannot be the owner's internal
|
|
@@ -493,7 +493,7 @@ mode; the detail reads as secondary through its smaller, regular-weight type, an
|
|
|
493
493
|
only the neutral tone quiets it, to `--kui-color-neutral-on-quiet`. Its five built-in
|
|
494
494
|
tones can be rethemed globally with
|
|
495
495
|
`--kui-state-banner-{tone}-{background|border|foreground}`. Toolbar control,
|
|
496
|
-
segmented-control,
|
|
496
|
+
segmented-control, tab-bar-item, and tab-bar colors likewise use their public
|
|
497
497
|
`--kui-*-*` variables. `SegmentedControl` exposes surface, border, foreground,
|
|
498
498
|
hover, and selected-state variables, so rounded, pill, and toolbar presentations
|
|
499
499
|
remain opinionated but locally overridable. Its label color switches with the
|
|
@@ -565,7 +565,10 @@ multiple actions, put sibling buttons in a static ContentItem (or use
|
|
|
565
565
|
For an interactive ContentItem, `wireContentItems` activates the card on Enter
|
|
566
566
|
or Space only when the key event originated from the card itself. A nested
|
|
567
567
|
native control, including one inside a custom element's shadow root, keeps its
|
|
568
|
-
own keyboard activation.
|
|
568
|
+
own keyboard activation. The activation click carries the key's Shift, Ctrl,
|
|
569
|
+
and Cmd state (Space uses the state at press), so one delegated click handler
|
|
570
|
+
implements range and toggle selection for pointer and keyboard alike.
|
|
571
|
+
Alt-modified keys are left to the platform.
|
|
569
572
|
|
|
570
573
|
`ToolbarControlGroup` is the unit of toolbar organization, even for dormant
|
|
571
574
|
text. Each group reserves `calc(2px + remify(42px))`, or 44px, with 8px between
|
|
@@ -587,12 +590,12 @@ Use `sizing="grow"` on an expanded search group in a wrapping zone: it grows fro
|
|
|
587
590
|
row at 480px container width or less. The basis remains its intrinsic minimum
|
|
588
591
|
in a wider, non-stacked Toolbar, so sibling trailing groups can share the
|
|
589
592
|
row. The collapsed search stays icon-sized. The group owns the open and
|
|
590
|
-
close motion: its flex size animates while a collapsible `
|
|
593
|
+
close motion: its flex size animates while a collapsible `SearchField`
|
|
591
594
|
inside fills it on every frame, laid out at least basis-wide and clipped by the
|
|
592
595
|
group, so a query never wraps or leaves an empty band mid-transition. At 480px
|
|
593
596
|
container width or less, and under reduced motion, it opens in one frame.
|
|
594
597
|
A plain collapsible search group (no `sizing`) animates its own width the same
|
|
595
|
-
way: the `
|
|
598
|
+
way: the `SearchField` follows the group on every frame and keeps its
|
|
596
599
|
query on one line until the opening ends, so it never shows an empty band or a
|
|
597
600
|
query wrapped in a narrow, still-opening field.
|
|
598
601
|
Use `sizing="fill"` for a group, including a non-search segmented control,
|
|
@@ -607,7 +610,7 @@ Use `visibility="yield-to-expanded-sibling"` on trailing groups that should
|
|
|
607
610
|
leave a 480px-or-narrower toolbar while a sibling trailing group is expanded.
|
|
608
611
|
They return when it collapses or the toolbar widens; leading and center zones
|
|
609
612
|
remain visible.
|
|
610
|
-
|
|
613
|
+
A group's controls are plain `<button>`s (a standalone `Button` belongs outside a group); a popup menu is a `PopupMenu`, which renders its own
|
|
611
614
|
trigger. By default a group stays on one row: each icon sits beside its label,
|
|
612
615
|
and the enclosing `Toolbar`'s responsive policy relocates whole groups. Set
|
|
613
616
|
`overflow="wrap"` only for independent links that should move as whole actions
|
|
@@ -630,7 +633,7 @@ outside painting; the Select keeps its focus outline 3px inside the trigger
|
|
|
630
633
|
and drops it while the listbox is open. Both settings belong to Select, not an
|
|
631
634
|
application `::part()` override.
|
|
632
635
|
|
|
633
|
-
Set `menuInset` to configure the
|
|
636
|
+
Set `menuInset` to configure the menu surface
|
|
634
637
|
without application `::part(menu)` CSS; the default `standard` keeps each menu's
|
|
635
638
|
own inset (8px for a raw `wa-dropdown`, the Select listbox's 4px for a
|
|
636
639
|
`PopupMenu`), while `compact` and `list-zero` apply to every nested menu. A
|
|
@@ -650,26 +653,22 @@ group title rather than the farther-in Select option label. Checked submenu
|
|
|
650
653
|
items keep their checkmark inside the submenu surface with the same check-column
|
|
651
654
|
advance as the top level. Compact mixed controls retain the standard
|
|
652
655
|
item padding, omit an internal separator, and let the raised selected item paint
|
|
653
|
-
over the outer border instead of shrinking to an inset highlight. The
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
With `popup-menu/register` loaded, PopupMenu and a raw dropdown inside
|
|
657
|
-
`PopupSurface` preserve item navigation made during the Web Awesome show
|
|
658
|
-
animation across its final initial-focus handoff.
|
|
656
|
+
over the outer border instead of shrinking to an inset highlight. The
|
|
657
|
+
PopupMenu trigger sizes to max-content, so icons, localized text, and the caret
|
|
658
|
+
determine the width without a fixed measurement.
|
|
659
659
|
At viewport widths of 480px or less, `PopupMenu` places an open submenu above
|
|
660
660
|
or below its parent menu, choosing the side with room and constraining the
|
|
661
|
-
submenu to the viewport. It never paints over the parent list. The
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
`data-action` and `wa-select` events. Wider viewports retain the side cascade.
|
|
661
|
+
submenu to the viewport. It never paints over the parent list. The reverse
|
|
662
|
+
horizontal arrow (ArrowLeft in LTR, ArrowRight in RTL) returns focus to its
|
|
663
|
+
parent item, Escape closes it, and choosing a child dispatches the normal
|
|
664
|
+
`data-action` and `kui-menu-select` events. Wider viewports retain the side cascade.
|
|
666
665
|
The enclosing `Toolbar` owns zone alignment and responsive topology: use
|
|
667
666
|
`centerAlign="stretch"` when the center group should consume its track, and
|
|
668
667
|
choose `responsive="stack"` with `responsiveAt="compact" | "narrow"`,
|
|
669
668
|
`responsive="wrap"` for a heading whose title must stay whole, or
|
|
670
669
|
`responsive="center-priority"` instead of selecting its zone classes from a
|
|
671
670
|
parent stylesheet. No policy clips an action: the trailing zone wraps whole
|
|
672
|
-
groups and its standalone primary `
|
|
671
|
+
groups and its standalone primary `Button` onto another row; a stacked
|
|
673
672
|
center zone wraps its groups. The center zone never
|
|
674
673
|
compresses below its content width, so when the leading identity, center, and
|
|
675
674
|
trailing zones share a row that is too narrow, the leading title is what gives
|
|
@@ -743,7 +742,7 @@ overrides load later in the cascade or set scoped `--kui-*` variables. JavaScrip
|
|
|
743
742
|
modules are pure except the browser style wrappers and `@kerfjs/ui/select/register`,
|
|
744
743
|
which registers exactly the Web Awesome elements used by `Select`. Eventful
|
|
745
744
|
helpers such as `wireResizableRegions` and `wireTabBars` attach listeners only
|
|
746
|
-
when called and return disposers. `
|
|
745
|
+
when called and return disposers. `wireSearchFields` goes one step further:
|
|
747
746
|
by default it also owns the collapsible field's transient expand/collapse/focus
|
|
748
747
|
(activate to reveal and focus, Escape or empty blur to collapse), holding that
|
|
749
748
|
state in a signal it exposes on the returned handle. An app reads that signal in
|
|
@@ -758,7 +757,7 @@ renders in a microtask in that same click task, so the click's render and the
|
|
|
758
757
|
collapse share one style recalculation and layout. A click that stops
|
|
759
758
|
propagating before the window, or a press without a click, collapses in the
|
|
760
759
|
next task instead.
|
|
761
|
-
`
|
|
760
|
+
`SearchField.trailingAction` supplies an icon, accessible `label`, delegated
|
|
762
761
|
`action`, and optional `id`; the field renders a 24px wide button that fills its
|
|
763
762
|
34px line slot (32px in `toolbar-group`), including the hit target, disabled
|
|
764
763
|
state, hover, focus ring, and the clear button's radius in each presentation.
|
|
@@ -781,7 +780,7 @@ entrypoint only re-exports the folder modules, and the CSS entrypoint only
|
|
|
781
780
|
imports their owner stylesheets. A shared public name is not permission to put
|
|
782
781
|
several component implementations or visual contracts back into one file.
|
|
783
782
|
|
|
784
|
-
`
|
|
783
|
+
`wireSearchFields` is a deliberate exception, not the rule for `wire…`
|
|
785
784
|
helpers. Its collapse behavior was _rich and error-prone_ — reveal, focus
|
|
786
785
|
transfer, Escape, empty-blur collapse, focus return — the kind of transient chrome
|
|
787
786
|
apps kept reimplementing inconsistently, so the helper owns it. Everywhere else the
|
|
@@ -804,7 +803,7 @@ the only shrinking, horizontally scrolling region; `leading`, `trailing`, and
|
|
|
804
803
|
trailing action belongs immediately after the final tab and use `end` for a
|
|
805
804
|
separate action pinned to the far edge. Applications own the action content,
|
|
806
805
|
but must not restyle TabBar descendants to recreate that allocation.
|
|
807
|
-
When a leading
|
|
806
|
+
When a leading TabBarItem is pinned, the leading scroll divider appears at that
|
|
808
807
|
tab's trailing edge while peer tabs scroll beneath it, including in RTL.
|
|
809
808
|
With `snapTabs`, `wireTabBars` measures the pinned tab and settles peers at
|
|
810
809
|
whole-tab starts after scroll and selection changes, reserving end room so the
|