@kerfjs/ui 5.0.0-beta.104 → 5.0.0-beta.106
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +155 -116
- package/ai/application-ui-profile.defaults.json +125 -4
- package/ai/compile-time-contracts-v1.json +11 -11
- package/ai/component-catalog.json +2606 -628
- package/ai/component-composition-rules.json +10 -10
- package/ai/component-composition.json +1688 -300
- package/ai/components/README.md +66 -48
- package/ai/components/application-tabs.md +4 -4
- package/ai/components/badge.md +1 -0
- package/ai/components/button.md +91 -0
- package/ai/components/checkbox.md +89 -0
- package/ai/components/choice-chips.md +9 -3
- package/ai/components/color-field.md +92 -0
- package/ai/components/color-picker.md +90 -0
- package/ai/components/color-swatches.md +82 -0
- package/ai/components/combobox.md +6 -4
- package/ai/components/content-item.md +5 -2
- package/ai/components/disclosure.md +83 -0
- package/ai/components/file-picker.md +1 -0
- package/ai/components/foundation.md +1 -1
- package/ai/components/list-action-row.md +3 -3
- package/ai/components/list-detail-dialog.md +90 -0
- package/ai/components/list.md +2 -0
- package/ai/components/lucide-icon.md +2 -0
- package/ai/components/{composer.md → message-composer.md} +17 -16
- package/ai/components/pane.md +3 -1
- package/ai/components/popup-menu.md +12 -9
- package/ai/components/progress-bar.md +82 -0
- package/ai/components/progress-ring.md +80 -0
- package/ai/components/radio-group.md +88 -0
- package/ai/components/recipe-list-detail-dialog.md +5 -5
- package/ai/components/{token-search-field.md → search-field.md} +23 -23
- package/ai/components/select.md +15 -13
- package/ai/components/slider.md +84 -0
- package/ai/components/surface-scaffold.md +16 -13
- package/ai/components/switch.md +81 -0
- package/ai/components/tab-bar.md +6 -6
- package/ai/components/tab-navigator.md +2 -2
- package/ai/components/tabs.md +7 -7
- package/ai/components/tag-field.md +86 -0
- package/ai/components/text-field.md +98 -0
- package/ai/components/text.md +1 -0
- package/ai/components/toast.md +85 -0
- package/ai/components/toolbar-control-group.md +3 -3
- package/ai/components/tooltip.md +81 -0
- package/ai/components/wa-accordion-item.md +11 -5
- package/ai/components/wa-accordion.md +11 -5
- package/ai/components/wa-animated-image.md +2 -1
- package/ai/components/wa-animation.md +1 -0
- package/ai/components/wa-avatar.md +1 -0
- package/ai/components/wa-badge.md +10 -3
- package/ai/components/wa-breadcrumb-item.md +1 -0
- package/ai/components/wa-breadcrumb.md +1 -0
- package/ai/components/wa-button-group.md +6 -4
- package/ai/components/wa-button.md +7 -5
- package/ai/components/wa-callout.md +7 -5
- package/ai/components/wa-card.md +12 -4
- package/ai/components/wa-carousel-item.md +1 -0
- package/ai/components/wa-carousel.md +1 -0
- package/ai/components/wa-checkbox-group.md +11 -4
- package/ai/components/wa-checkbox.md +10 -4
- package/ai/components/wa-color-picker.md +13 -5
- package/ai/components/wa-comparison.md +2 -1
- package/ai/components/wa-copy-button.md +1 -0
- package/ai/components/wa-details.md +11 -5
- package/ai/components/wa-dialog.md +10 -4
- package/ai/components/wa-divider.md +1 -0
- package/ai/components/wa-drawer.md +12 -5
- package/ai/components/wa-dropdown-item.md +8 -6
- package/ai/components/wa-dropdown.md +8 -6
- package/ai/components/wa-format-bytes.md +1 -0
- package/ai/components/wa-format-date.md +1 -0
- package/ai/components/wa-format-number.md +1 -0
- package/ai/components/wa-icon.md +2 -1
- package/ai/components/wa-include.md +6 -4
- package/ai/components/wa-input.md +9 -6
- package/ai/components/wa-intersection-observer.md +1 -0
- package/ai/components/wa-known-date.md +1 -0
- package/ai/components/wa-markdown.md +1 -0
- package/ai/components/wa-mutation-observer.md +1 -0
- package/ai/components/wa-number-input.md +1 -0
- package/ai/components/wa-option.md +7 -5
- package/ai/components/wa-otp-input.md +1 -0
- package/ai/components/wa-page.md +13 -4
- package/ai/components/wa-pagination.md +1 -0
- package/ai/components/wa-popover.md +11 -5
- package/ai/components/wa-popup.md +11 -4
- package/ai/components/wa-progress-bar.md +11 -4
- package/ai/components/wa-progress-ring.md +11 -4
- package/ai/components/wa-qr-code.md +1 -0
- package/ai/components/wa-radio-group.md +12 -4
- package/ai/components/wa-radio.md +10 -4
- package/ai/components/wa-random-content.md +1 -0
- package/ai/components/wa-rating.md +1 -0
- package/ai/components/wa-relative-time.md +1 -0
- package/ai/components/wa-resize-observer.md +1 -0
- package/ai/components/wa-scroller.md +12 -4
- package/ai/components/wa-select.md +7 -5
- package/ai/components/wa-skeleton.md +10 -3
- package/ai/components/wa-slider.md +11 -5
- package/ai/components/wa-spinner.md +7 -5
- package/ai/components/wa-split-panel.md +7 -5
- package/ai/components/wa-step.md +56 -0
- package/ai/components/wa-stepper.md +56 -0
- package/ai/components/wa-switch.md +10 -3
- package/ai/components/wa-tab-group.md +8 -6
- package/ai/components/wa-tab-panel.md +7 -5
- package/ai/components/wa-tab.md +8 -6
- package/ai/components/wa-tag-input.md +62 -0
- package/ai/components/wa-tag.md +9 -6
- package/ai/components/wa-textarea.md +10 -3
- package/ai/components/wa-time-input.md +1 -0
- package/ai/components/wa-toast-item.md +9 -7
- package/ai/components/wa-toast.md +9 -7
- package/ai/components/wa-tooltip.md +11 -5
- package/ai/components/wa-tree-item.md +2 -1
- package/ai/components/wa-tree.md +2 -1
- package/ai/components/wa-zoomable-frame.md +2 -1
- package/ai/components/workbench-dialog.md +90 -0
- package/ai/public-api-signatures-v1.md +1579 -247
- package/ai/skill.md +83 -50
- package/ai/webawesome-jsx-signatures-v1.md +4 -1
- package/dist/badge.d.ts +9 -1
- package/dist/badge.js +1 -1
- package/dist/browser/button.js +5 -0
- package/dist/browser/catalog.js +3 -2
- package/dist/browser/{icon-button.js → checkbox.js} +2 -2
- package/dist/browser/color-field.js +4 -0
- package/dist/browser/color-picker.js +5 -0
- package/dist/browser/color-swatches.js +3 -0
- package/dist/browser/disclosure.js +5 -0
- package/dist/browser/list-action-row.js +1 -0
- package/dist/browser/list-detail-dialog.js +14 -0
- package/dist/browser/message-composer.js +5 -0
- package/dist/browser/popup-menu.js +1 -0
- package/dist/browser/progress-bar.js +3 -0
- package/dist/browser/progress-ring.js +3 -0
- package/dist/browser/radio-group.js +3 -0
- package/dist/browser/search-field.js +4 -0
- package/dist/browser/slider.js +3 -0
- package/dist/browser/surface-scaffold.js +1 -0
- package/dist/browser/switch.js +3 -0
- package/dist/browser/tab-bar-item.js +4 -0
- package/dist/browser/tag-field.js +5 -0
- package/dist/browser/text-field.js +4 -0
- package/dist/browser/workbench-dialog.js +15 -0
- package/dist/button.d.ts +108 -0
- package/dist/button.js +7 -0
- package/dist/button.js.map +1 -0
- package/dist/catalog-resources.d.ts +1 -1
- package/dist/catalog.d.ts +3 -3
- package/dist/catalog.js +57 -27
- package/dist/catalog.js.map +1 -1
- package/dist/checkbox.d.ts +45 -0
- package/dist/checkbox.js +6 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/choice-chips.d.ts +49 -15
- package/dist/choice-chips.js +1 -1
- package/dist/chunk-23PPPNH6.js +93 -0
- package/dist/chunk-23PPPNH6.js.map +1 -0
- package/dist/{chunk-FNZQOUZ5.js → chunk-2FW7D4IG.js} +2 -2
- package/dist/{chunk-FNZQOUZ5.js.map → chunk-2FW7D4IG.js.map} +1 -1
- package/dist/{chunk-ZYU5WRC3.js → chunk-3GLYIIFR.js} +2 -2
- package/dist/{chunk-ZYU5WRC3.js.map → chunk-3GLYIIFR.js.map} +1 -1
- package/dist/{chunk-5NQF35VO.js → chunk-4RECPEHI.js} +2 -2
- package/dist/{chunk-5NQF35VO.js.map → chunk-4RECPEHI.js.map} +1 -1
- package/dist/{chunk-7IUEBNCO.js → chunk-5USKCWGL.js} +8 -3
- package/dist/chunk-5USKCWGL.js.map +1 -0
- package/dist/chunk-6VVIW7VB.js +69 -0
- package/dist/chunk-6VVIW7VB.js.map +1 -0
- package/dist/{chunk-LL45C7BB.js → chunk-7K6U6FCN.js} +1 -1
- package/dist/chunk-7K6U6FCN.js.map +1 -0
- package/dist/{chunk-HQZYKJ56.js → chunk-7W3GKMN4.js} +110 -74
- package/dist/chunk-7W3GKMN4.js.map +1 -0
- package/dist/chunk-ACUKTVS3.js +371 -0
- package/dist/chunk-ACUKTVS3.js.map +1 -0
- package/dist/{chunk-YQ2AC4E2.js → chunk-AMIHGFLP.js} +2 -2
- package/dist/{chunk-YQ2AC4E2.js.map → chunk-AMIHGFLP.js.map} +1 -1
- package/dist/chunk-ATGAJVZ6.js +268 -0
- package/dist/chunk-ATGAJVZ6.js.map +1 -0
- package/dist/chunk-AYPGXR2E.js +20 -0
- package/dist/chunk-AYPGXR2E.js.map +1 -0
- package/dist/{chunk-ETCWQLJV.js → chunk-BKUMG2KB.js} +38 -28
- package/dist/chunk-BKUMG2KB.js.map +1 -0
- package/dist/chunk-C26Q6P4Q.js +76 -0
- package/dist/chunk-C26Q6P4Q.js.map +1 -0
- package/dist/chunk-C3RLKKFQ.js +452 -0
- package/dist/chunk-C3RLKKFQ.js.map +1 -0
- package/dist/{chunk-T5BJBMW7.js → chunk-CIAUILRR.js} +5 -5
- package/dist/chunk-CIAUILRR.js.map +1 -0
- package/dist/chunk-CNM6ZWP2.js +38 -0
- package/dist/chunk-CNM6ZWP2.js.map +1 -0
- package/dist/{chunk-LPHU44S3.js → chunk-CTQUDCY5.js} +3 -1
- package/dist/chunk-CTQUDCY5.js.map +1 -0
- package/dist/{chunk-MXNIVEVL.js → chunk-D4MXSAMI.js} +5 -3
- package/dist/chunk-D4MXSAMI.js.map +1 -0
- package/dist/{chunk-YBWQR2OK.js → chunk-DDSCVEO5.js} +10 -9
- package/dist/chunk-DDSCVEO5.js.map +1 -0
- package/dist/{chunk-SIW64V65.js → chunk-DF2YKGIX.js} +3 -3
- package/dist/{chunk-SIW64V65.js.map → chunk-DF2YKGIX.js.map} +1 -1
- package/dist/{chunk-3SKAEPPZ.js → chunk-ECFCAKWE.js} +4 -4
- package/dist/{chunk-3SKAEPPZ.js.map → chunk-ECFCAKWE.js.map} +1 -1
- package/dist/chunk-EKBMUXFV.js +298 -0
- package/dist/chunk-EKBMUXFV.js.map +1 -0
- package/dist/{chunk-IXLUZHGT.js → chunk-FG6U7KQQ.js} +5 -5
- package/dist/{chunk-IXLUZHGT.js.map → chunk-FG6U7KQQ.js.map} +1 -1
- package/dist/chunk-FKKJHGN5.js +147 -0
- package/dist/chunk-FKKJHGN5.js.map +1 -0
- package/dist/{chunk-FDZNYD4C.js → chunk-GCAK23PU.js} +34 -3
- package/dist/chunk-GCAK23PU.js.map +1 -0
- package/dist/chunk-GXSX6Q6O.js +42 -0
- package/dist/chunk-GXSX6Q6O.js.map +1 -0
- package/dist/{chunk-LOSRXZAH.js → chunk-HJXVVFBT.js} +14 -6
- package/dist/chunk-HJXVVFBT.js.map +1 -0
- package/dist/{chunk-M5KZ26VV.js → chunk-HQZG3OFL.js} +11 -1
- package/dist/chunk-HQZG3OFL.js.map +1 -0
- package/dist/{chunk-ELCMSQNJ.js → chunk-HTERKONR.js} +8 -8
- package/dist/chunk-HTERKONR.js.map +1 -0
- package/dist/chunk-HYORKKYP.js +8 -0
- package/dist/chunk-HYORKKYP.js.map +1 -0
- package/dist/chunk-IO27YTL3.js +73 -0
- package/dist/chunk-IO27YTL3.js.map +1 -0
- package/dist/chunk-ITUQC4FW.js +163 -0
- package/dist/chunk-ITUQC4FW.js.map +1 -0
- package/dist/chunk-K57NINLH.js +137 -0
- package/dist/chunk-K57NINLH.js.map +1 -0
- package/dist/chunk-KC6WUSNS.js +34 -0
- package/dist/chunk-KC6WUSNS.js.map +1 -0
- package/dist/{chunk-W4IK7AWD.js → chunk-KDQZ3E5C.js} +3 -1
- package/dist/chunk-KDQZ3E5C.js.map +1 -0
- package/dist/{chunk-2MSPNRWJ.js → chunk-KK3S5OTW.js} +27 -11
- package/dist/chunk-KK3S5OTW.js.map +1 -0
- package/dist/chunk-LTBVP6VN.js +59 -0
- package/dist/chunk-LTBVP6VN.js.map +1 -0
- package/dist/chunk-OHPYT2BH.js +82 -0
- package/dist/chunk-OHPYT2BH.js.map +1 -0
- package/dist/{chunk-HZPHCSCS.js → chunk-OY2MXIBB.js} +8 -2
- package/dist/chunk-OY2MXIBB.js.map +1 -0
- package/dist/chunk-PE2KPZDW.js +85 -0
- package/dist/chunk-PE2KPZDW.js.map +1 -0
- package/dist/{chunk-QTSMHH5J.js → chunk-QPTJ5DOO.js} +5 -3
- package/dist/chunk-QPTJ5DOO.js.map +1 -0
- package/dist/{chunk-JOR5LGYE.js → chunk-RFLW4FPL.js} +1 -1
- package/dist/chunk-RFLW4FPL.js.map +1 -0
- package/dist/{chunk-U6QYTMDB.js → chunk-RMWNO6BA.js} +6 -2
- package/dist/chunk-RMWNO6BA.js.map +1 -0
- package/dist/{chunk-TDMHA7C3.js → chunk-SQ2Q3OQI.js} +112 -63
- package/dist/chunk-SQ2Q3OQI.js.map +1 -0
- package/dist/{chunk-K4AT3V3J.js → chunk-T74YB76U.js} +13 -11
- package/dist/chunk-T74YB76U.js.map +1 -0
- package/dist/{chunk-BYFTHA4I.js → chunk-TAHR457X.js} +53 -6
- package/dist/chunk-TAHR457X.js.map +1 -0
- package/dist/{chunk-3VXDSIBJ.js → chunk-TKNVL53O.js} +2 -2
- package/dist/{chunk-3VXDSIBJ.js.map → chunk-TKNVL53O.js.map} +1 -1
- package/dist/chunk-TNJLNLVE.js +115 -0
- package/dist/chunk-TNJLNLVE.js.map +1 -0
- package/dist/chunk-TUID42UE.js +15 -0
- package/dist/chunk-TUID42UE.js.map +1 -0
- package/dist/{chunk-CR5U5FV6.js → chunk-UMNHJSIO.js} +93 -80
- package/dist/chunk-UMNHJSIO.js.map +1 -0
- package/dist/chunk-UTCAOOXU.js +116 -0
- package/dist/chunk-UTCAOOXU.js.map +1 -0
- package/dist/{chunk-ZJC5ND3M.js → chunk-VEME3D7K.js} +35 -35
- package/dist/chunk-VEME3D7K.js.map +1 -0
- package/dist/{chunk-HLDRH23D.js → chunk-WJKHLOP5.js} +2 -2
- package/dist/{chunk-HLDRH23D.js.map → chunk-WJKHLOP5.js.map} +1 -1
- package/dist/chunk-WU57BYYM.js +115 -0
- package/dist/chunk-WU57BYYM.js.map +1 -0
- package/dist/{chunk-TGLUDQP2.js → chunk-ZCDRLN3B.js} +11 -11
- package/dist/chunk-ZCDRLN3B.js.map +1 -0
- package/dist/chunk-ZX2QQJXD.js +249 -0
- package/dist/chunk-ZX2QQJXD.js.map +1 -0
- package/dist/{chunk-6E2H2E5A.js → chunk-ZXZAECHZ.js} +6 -6
- package/dist/{chunk-6E2H2E5A.js.map → chunk-ZXZAECHZ.js.map} +1 -1
- package/dist/collapsible-panel.js +3 -3
- package/dist/color-field.d.ts +51 -0
- package/dist/color-field.js +92 -0
- package/dist/color-field.js.map +1 -0
- package/dist/color-picker.d.ts +88 -0
- package/dist/color-picker.js +8 -0
- package/dist/color-picker.js.map +1 -0
- package/dist/color-swatches.d.ts +56 -0
- package/dist/color-swatches.js +4 -0
- package/dist/color-swatches.js.map +1 -0
- package/dist/combobox.js +1 -1
- package/dist/content-item.d.ts +13 -1
- package/dist/content-item.js +1 -1
- package/dist/disclosure-arrow.js +1 -1
- package/dist/disclosure.d.ts +57 -0
- package/dist/disclosure.js +51 -0
- package/dist/disclosure.js.map +1 -0
- package/dist/file-picker.d.ts +7 -0
- package/dist/file-picker.js +1 -1
- package/dist/help-tags-register.d.ts +8 -8
- package/dist/help-tags-register.js +3 -2
- package/dist/help-tags-register.js.map +1 -1
- package/dist/index.d.ts +16 -9
- package/dist/index.js +58 -46
- package/dist/list-action-row.js +4 -1
- package/dist/list-detail-dialog.d.ts +117 -0
- package/dist/list-detail-dialog.js +165 -0
- package/dist/list-detail-dialog.js.map +1 -0
- package/dist/list-header.js +1 -1
- package/dist/list-item.js +1 -1
- package/dist/list.d.ts +17 -2
- package/dist/list.js +1 -1
- package/dist/lucide-icon.d.ts +9 -1
- package/dist/lucide-icon.js +1 -1
- package/dist/{composer.d.ts → message-composer.d.ts} +20 -12
- package/dist/message-composer.js +6 -0
- package/dist/message-composer.js.map +1 -0
- package/dist/nav-stack.js +1 -1
- package/dist/pane.d.ts +36 -3
- package/dist/pane.js +1 -1
- package/dist/popup-menu-register.d.ts +6 -5
- package/dist/popup-menu-register.js +3 -326
- package/dist/popup-menu-register.js.map +1 -1
- package/dist/popup-menu.d.ts +41 -23
- package/dist/popup-menu.js +5 -1
- package/dist/progress-bar.d.ts +52 -0
- package/dist/progress-bar.js +68 -0
- package/dist/progress-bar.js.map +1 -0
- package/dist/progress-ring.d.ts +44 -0
- package/dist/progress-ring.js +73 -0
- package/dist/progress-ring.js.map +1 -0
- package/dist/radio-group.d.ts +62 -0
- package/dist/radio-group.js +4 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/row.js +1 -1
- package/dist/{token-search-model-JA1i8z4D.d.ts → search-field-CrGTN5sa.d.ts} +45 -45
- package/dist/search-field-model.d.ts +3 -0
- package/dist/search-field-model.js +3 -0
- package/dist/search-field-model.js.map +1 -0
- package/dist/search-field.d.ts +3 -0
- package/dist/search-field.js +5 -0
- package/dist/search-field.js.map +1 -0
- package/dist/select-register.d.ts +6 -3
- package/dist/select-register.js +383 -241
- package/dist/select-register.js.map +1 -1
- package/dist/select.d.ts +30 -6
- package/dist/select.js +3 -1
- package/dist/selection.d.ts +54 -0
- package/dist/selection.js +3 -0
- package/dist/selection.js.map +1 -0
- package/dist/slider.d.ts +74 -0
- package/dist/slider.js +103 -0
- package/dist/slider.js.map +1 -0
- package/dist/split-button.js +1 -1
- package/dist/split-view.d.ts +5 -2
- package/dist/split-view.js +18 -159
- package/dist/split-view.js.map +1 -1
- package/dist/state-banner.js +1 -1
- package/dist/styles/badge.css +18 -6
- package/dist/styles/button.css +230 -0
- package/dist/styles/catalog/components/catalog-example.css +13 -4
- package/dist/styles/checkbox.css +121 -0
- package/dist/styles/choice-chips.css +58 -7
- package/dist/styles/color-field.css +125 -0
- package/dist/styles/color-picker.css +331 -0
- package/dist/styles/color-swatches.css +122 -0
- package/dist/styles/combobox.css +7 -5
- package/dist/styles/components/actions/button/button.css +230 -0
- package/dist/styles/components/actions/popup-menu/popup-menu.css +326 -198
- package/dist/styles/components/actions/toolbar/toolbar.css +10 -3
- package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +67 -104
- package/dist/styles/components/actions/toolbar-text/toolbar-text.css +5 -18
- package/dist/styles/components/collections/list/list.css +37 -0
- package/dist/styles/components/feedback/badge/badge.css +18 -6
- package/dist/styles/components/feedback/progress-bar/progress-bar.css +168 -0
- package/dist/styles/components/feedback/progress-ring/progress-ring.css +91 -0
- package/dist/styles/components/feedback/state-banner/state-banner.css +18 -3
- package/dist/styles/components/forms/checkbox/checkbox.css +121 -0
- package/dist/styles/components/forms/choice-chips/choice-chips.css +58 -7
- package/dist/styles/components/forms/color-field/color-field.css +125 -0
- package/dist/styles/components/forms/color-picker/color-picker.css +331 -0
- package/dist/styles/components/forms/color-swatches/color-swatches.css +122 -0
- package/dist/styles/components/forms/combobox/combobox.css +7 -5
- package/dist/styles/components/forms/{composer/composer.css → message-composer/message-composer.css} +17 -33
- package/dist/styles/components/forms/radio-group/radio-group.css +156 -0
- package/dist/styles/{token-search-field.css → components/forms/search-field/search-field.css} +111 -102
- package/dist/styles/components/forms/select/select.css +370 -249
- package/dist/styles/components/forms/slider/slider.css +241 -0
- package/dist/styles/components/forms/switch/switch.css +132 -0
- package/dist/styles/components/forms/tag-field/tag-field.css +8 -0
- package/dist/styles/components/forms/text-field/text-field.css +193 -0
- package/dist/styles/components/layout/pane/pane.css +254 -0
- package/dist/styles/components/layout/resizable-region/resizable-region.css +3 -2
- package/dist/styles/components/layout/row/row.css +11 -0
- package/dist/styles/components/layout/split-view/split-view.css +25 -0
- package/dist/styles/components/layout/workbench/workbench.css +12 -4
- package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +20 -0
- package/dist/styles/components/navigation/tab-bar/tab-bar.css +7 -7
- package/dist/styles/components/navigation/{app-tab/app-tab.css → tab-bar-item/tab-bar-item.css} +95 -90
- package/dist/styles/components/surfaces/disclosure/disclosure.css +98 -0
- package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +263 -116
- package/dist/styles/components/typography/text/text.css +14 -12
- package/dist/styles/disclosure-arrow.css +20 -0
- package/dist/styles/disclosure.css +98 -0
- package/dist/styles/foundation.css +6 -4
- package/dist/styles/list-detail-dialog.css +11 -0
- package/dist/styles/list.css +37 -0
- package/dist/styles/{composer.css → message-composer.css} +17 -33
- package/dist/styles/overlay-toast.css +149 -0
- package/dist/styles/overlay-tooltip.css +55 -0
- package/dist/styles/pane.css +254 -0
- package/dist/styles/popup-menu.css +326 -198
- package/dist/styles/progress-bar.css +168 -0
- package/dist/styles/progress-ring.css +91 -0
- package/dist/styles/radio-group.css +156 -0
- package/dist/styles/resizable-region.css +3 -2
- package/dist/styles/row.css +11 -0
- package/dist/styles/{components/forms/token-search-field/token-search-field.css → search-field.css} +111 -102
- package/dist/styles/select.css +370 -249
- package/dist/styles/slider.css +241 -0
- package/dist/styles/split-view.css +25 -0
- package/dist/styles/state-banner.css +18 -3
- package/dist/styles/styles.css +16 -5
- package/dist/styles/surface-scaffold.css +263 -116
- package/dist/styles/switch.css +132 -0
- package/dist/styles/{app-tab.css → tab-bar-item.css} +95 -90
- package/dist/styles/tab-bar.css +7 -7
- package/dist/styles/tag-field.css +8 -0
- package/dist/styles/text-field.css +193 -0
- package/dist/styles/text.css +14 -12
- package/dist/styles/toolbar-control-group.css +67 -104
- package/dist/styles/toolbar-text.css +5 -18
- package/dist/styles/toolbar.css +10 -3
- package/dist/styles/webawesome.css +9 -0
- package/dist/styles/workbench-dialog.css +10 -0
- package/dist/styles/workbench.css +12 -4
- package/dist/surface-scaffold-register.d.ts +7 -5
- package/dist/surface-scaffold-register.js +2 -246
- package/dist/surface-scaffold-register.js.map +1 -1
- package/dist/surface-scaffold.d.ts +70 -7
- package/dist/surface-scaffold.js +5 -1
- package/dist/switch.d.ts +38 -0
- package/dist/switch.js +4 -0
- package/dist/switch.js.map +1 -0
- package/dist/{app-tab.d.ts → tab-bar-item.d.ts} +11 -11
- package/dist/tab-bar-item.js +6 -0
- package/dist/tab-bar-item.js.map +1 -0
- package/dist/tab-bar.d.ts +3 -3
- package/dist/tab-bar.js +1 -1
- package/dist/tab-navigator.js +1 -1
- package/dist/tag-field.d.ts +52 -0
- package/dist/tag-field.js +6 -0
- package/dist/tag-field.js.map +1 -0
- package/dist/text-field.d.ts +83 -0
- package/dist/text-field.js +6 -0
- package/dist/text-field.js.map +1 -0
- package/dist/text.d.ts +6 -1
- package/dist/text.js +1 -1
- package/dist/{types-CVgIwSdq.d.ts → types-DmHWkSd6.d.ts} +19 -1
- package/dist/webawesome.d.ts +3 -0
- package/dist/wire-catalog.d.ts +8 -2
- package/dist/wire-catalog.js +16 -4
- package/dist/wire-catalog.js.map +1 -1
- package/dist/wire-checkboxes.d.ts +10 -0
- package/dist/wire-checkboxes.js +3 -0
- package/dist/{wire-composers.js.map → wire-checkboxes.js.map} +1 -1
- package/dist/wire-choice-chips.d.ts +17 -0
- package/dist/wire-choice-chips.js +4 -0
- package/dist/{wire-token-search-fields.js.map → wire-choice-chips.js.map} +1 -1
- package/dist/wire-color-fields.d.ts +33 -0
- package/dist/wire-color-fields.js +82 -0
- package/dist/wire-color-fields.js.map +1 -0
- package/dist/wire-color-pickers.d.ts +34 -0
- package/dist/wire-color-pickers.js +9 -0
- package/dist/wire-color-pickers.js.map +1 -0
- package/dist/wire-comboboxes.js +2 -1
- package/dist/wire-content-items.d.ts +5 -1
- package/dist/wire-content-items.js +84 -15
- package/dist/wire-content-items.js.map +1 -1
- package/dist/wire-file-pickers.d.ts +3 -2
- package/dist/wire-file-pickers.js +1 -1
- package/dist/{wire-composers.d.ts → wire-message-composers.d.ts} +5 -4
- package/dist/wire-message-composers.js +3 -0
- package/dist/wire-message-composers.js.map +1 -0
- package/dist/wire-overlay-sheets.js +1 -1
- package/dist/wire-pane-chrome.d.ts +21 -0
- package/dist/wire-pane-chrome.js +67 -0
- package/dist/wire-pane-chrome.js.map +1 -0
- package/dist/{wire-token-search-fields.d.ts → wire-search-fields.d.ts} +25 -25
- package/dist/wire-search-fields.js +6 -0
- package/dist/wire-search-fields.js.map +1 -0
- package/dist/wire-sliders.d.ts +12 -0
- package/dist/wire-sliders.js +31 -0
- package/dist/wire-sliders.js.map +1 -0
- package/dist/wire-tab-bars.js +1 -1
- package/dist/wire-tag-fields.d.ts +41 -0
- package/dist/wire-tag-fields.js +258 -0
- package/dist/wire-tag-fields.js.map +1 -0
- package/dist/wire-text-fields.d.ts +12 -0
- package/dist/wire-text-fields.js +3 -0
- package/dist/wire-text-fields.js.map +1 -0
- package/dist/workbench-dialog.d.ts +97 -0
- package/dist/workbench-dialog.js +124 -0
- package/dist/workbench-dialog.js.map +1 -0
- package/dist/workbench.d.ts +5 -0
- package/dist/workbench.js +1 -1
- package/docs/accessibility.md +181 -97
- package/docs/anchored-surface.md +8 -7
- package/docs/app-layouts.md +28 -0
- package/docs/catalog.md +14 -5
- package/docs/color-field.md +65 -0
- package/docs/color-picker.md +71 -0
- package/docs/color-swatches.md +46 -0
- package/docs/component-contract.md +31 -32
- package/docs/component-selection.md +228 -164
- package/docs/design/templates/button/emphasis-dark.svg +1 -0
- package/docs/design/templates/button/emphasis.svg +1 -0
- package/docs/design/templates/button/icons-dark.svg +1 -0
- package/docs/design/templates/button/icons.svg +1 -0
- package/docs/design/templates/button/pill-dark.svg +1 -0
- package/docs/design/templates/button/pill.svg +1 -0
- package/docs/design/templates/button/states-dark.svg +1 -0
- package/docs/design/templates/button/states.svg +1 -0
- package/docs/design/templates/button/toggles-dark.svg +1 -0
- package/docs/design/templates/button/toggles.svg +1 -0
- package/docs/design/templates/button/tones-dark.svg +1 -0
- package/docs/design/templates/button/tones.svg +1 -0
- package/docs/design/templates/button-dark.svg +1 -0
- package/docs/design/templates/button.svg +1 -0
- package/docs/design/templates/checkbox/compact-dark.svg +1 -0
- package/docs/design/templates/checkbox/compact.svg +1 -0
- package/docs/design/templates/checkbox/error-dark.svg +1 -0
- package/docs/design/templates/checkbox/error.svg +1 -0
- package/docs/design/templates/checkbox/mixed-dark.svg +1 -0
- package/docs/design/templates/checkbox/mixed.svg +1 -0
- package/docs/design/templates/checkbox/states-dark.svg +1 -0
- package/docs/design/templates/checkbox/states.svg +1 -0
- package/docs/design/templates/checkbox-dark.svg +1 -0
- package/docs/design/templates/checkbox.svg +1 -0
- package/docs/design/templates/choice-chips/color-palette-dark.svg +1 -1
- package/docs/design/templates/choice-chips/color-palette.svg +1 -1
- package/docs/design/templates/choice-chips/compact-icons-dark.svg +1 -1
- package/docs/design/templates/choice-chips/compact-icons.svg +1 -1
- package/docs/design/templates/choice-chips/multiple-dark.svg +1 -1
- package/docs/design/templates/choice-chips/multiple.svg +1 -1
- package/docs/design/templates/choice-chips-dark.svg +1 -1
- package/docs/design/templates/choice-chips.svg +1 -1
- package/docs/design/templates/color-field/compact-dark.svg +1 -0
- package/docs/design/templates/color-field/compact.svg +1 -0
- package/docs/design/templates/color-field/error-dark.svg +1 -0
- package/docs/design/templates/color-field/error.svg +1 -0
- package/docs/design/templates/color-field/hint-dark.svg +1 -0
- package/docs/design/templates/color-field/hint.svg +1 -0
- package/docs/design/templates/color-field-dark.svg +1 -0
- package/docs/design/templates/color-field.svg +1 -0
- package/docs/design/templates/color-picker/gray-dark.svg +1 -0
- package/docs/design/templates/color-picker/gray.svg +1 -0
- package/docs/design/templates/color-picker/rgb-dark.svg +1 -0
- package/docs/design/templates/color-picker/rgb.svg +1 -0
- package/docs/design/templates/color-picker-dark.svg +1 -0
- package/docs/design/templates/color-picker.svg +1 -0
- package/docs/design/templates/color-swatches/palette-dark.svg +1 -0
- package/docs/design/templates/color-swatches/palette.svg +1 -0
- package/docs/design/templates/color-swatches-dark.svg +1 -0
- package/docs/design/templates/color-swatches.svg +1 -0
- package/docs/design/templates/disclosure/framed-sunken-dark.svg +1 -0
- package/docs/design/templates/disclosure/framed-sunken.svg +1 -0
- package/docs/design/templates/disclosure/plain-dark.svg +1 -0
- package/docs/design/templates/disclosure/plain.svg +1 -0
- package/docs/design/templates/disclosure-dark.svg +1 -0
- package/docs/design/templates/disclosure.svg +1 -0
- package/docs/design/templates/list-header/size-l-dark.svg +1 -1
- package/docs/design/templates/list-header/size-l.svg +1 -1
- package/docs/design/templates/list-header/size-m-dark.svg +1 -1
- package/docs/design/templates/list-header/size-m.svg +1 -1
- package/docs/design/templates/list-header/size-xl-dark.svg +1 -1
- package/docs/design/templates/list-header/size-xl.svg +1 -1
- package/docs/design/templates/list-header-dark.svg +1 -1
- package/docs/design/templates/list-header.svg +1 -1
- package/docs/design/templates/message-composer/chat-dark.svg +1 -0
- package/docs/design/templates/message-composer/chat.svg +1 -0
- package/docs/design/templates/{composer → message-composer}/prompt-dark.svg +1 -1
- package/docs/design/templates/{composer → message-composer}/prompt.svg +1 -1
- package/docs/design/templates/message-composer-dark.svg +1 -0
- package/docs/design/templates/message-composer.svg +1 -0
- package/docs/design/templates/progress-bar/determinate-dark.svg +1 -0
- package/docs/design/templates/progress-bar/determinate.svg +1 -0
- package/docs/design/templates/progress-bar/tones-dark.svg +1 -0
- package/docs/design/templates/progress-bar/tones.svg +1 -0
- package/docs/design/templates/progress-bar-dark.svg +1 -0
- package/docs/design/templates/progress-bar.svg +1 -0
- package/docs/design/templates/progress-ring/sizes-dark.svg +1 -0
- package/docs/design/templates/progress-ring/sizes.svg +1 -0
- package/docs/design/templates/progress-ring/tones-dark.svg +1 -0
- package/docs/design/templates/progress-ring/tones.svg +1 -0
- package/docs/design/templates/progress-ring-dark.svg +1 -0
- package/docs/design/templates/progress-ring.svg +1 -0
- package/docs/design/templates/radio-group/horizontal-dark.svg +1 -0
- package/docs/design/templates/radio-group/horizontal.svg +1 -0
- package/docs/design/templates/radio-group/vertical-dark.svg +1 -0
- package/docs/design/templates/radio-group/vertical.svg +1 -0
- package/docs/design/templates/radio-group-dark.svg +1 -0
- package/docs/design/templates/radio-group.svg +1 -0
- package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
- package/docs/design/templates/segmented-control/equal.svg +1 -1
- package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -1
- package/docs/design/templates/segmented-control/pill-small.svg +1 -1
- package/docs/design/templates/segmented-control-dark.svg +1 -1
- package/docs/design/templates/segmented-control.svg +1 -1
- package/docs/design/templates/select/compact-dark.svg +1 -0
- package/docs/design/templates/select/compact.svg +1 -0
- package/docs/design/templates/select/form-dark.svg +1 -0
- package/docs/design/templates/select/form.svg +1 -0
- package/docs/design/templates/select/icons-dark.svg +1 -0
- package/docs/design/templates/select/icons.svg +1 -0
- package/docs/design/templates/select-dark.svg +1 -0
- package/docs/design/templates/select.svg +1 -0
- package/docs/design/templates/slider/compact-dark.svg +1 -0
- package/docs/design/templates/slider/compact.svg +1 -0
- package/docs/design/templates/slider/readout-dark.svg +1 -0
- package/docs/design/templates/slider/readout.svg +1 -0
- package/docs/design/templates/slider/ticks-dark.svg +1 -0
- package/docs/design/templates/slider/ticks.svg +1 -0
- package/docs/design/templates/slider-dark.svg +1 -0
- package/docs/design/templates/slider.svg +1 -0
- package/docs/design/templates/switch/compact-dark.svg +1 -0
- package/docs/design/templates/switch/compact.svg +1 -0
- package/docs/design/templates/switch/states-dark.svg +1 -0
- package/docs/design/templates/switch/states.svg +1 -0
- package/docs/design/templates/switch-dark.svg +1 -0
- package/docs/design/templates/switch.svg +1 -0
- package/docs/design/templates/tag-field/error-dark.svg +1 -0
- package/docs/design/templates/tag-field/error.svg +1 -0
- package/docs/design/templates/tag-field/tags-dark.svg +1 -0
- package/docs/design/templates/tag-field/tags.svg +1 -0
- package/docs/design/templates/tag-field-dark.svg +1 -0
- package/docs/design/templates/tag-field.svg +1 -0
- package/docs/design/templates/text-field/compact-dark.svg +1 -0
- package/docs/design/templates/text-field/compact.svg +1 -0
- package/docs/design/templates/text-field/error-dark.svg +1 -0
- package/docs/design/templates/text-field/error.svg +1 -0
- package/docs/design/templates/text-field/labeled-dark.svg +1 -0
- package/docs/design/templates/text-field/labeled.svg +1 -0
- package/docs/design/templates/text-field/multiline-dark.svg +1 -0
- package/docs/design/templates/text-field/multiline.svg +1 -0
- package/docs/design/templates/text-field/search-dark.svg +1 -0
- package/docs/design/templates/text-field/search.svg +1 -0
- package/docs/design/templates/text-field-dark.svg +1 -0
- package/docs/design/templates/text-field.svg +1 -0
- package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
- package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
- package/docs/design/templates/toolbar/width-visibility-320-dark.svg +1 -1
- package/docs/design/templates/toolbar/width-visibility-320.svg +1 -1
- package/docs/design/templates/toolbar/width-visibility-600-dark.svg +1 -1
- package/docs/design/templates/toolbar/width-visibility-600.svg +1 -1
- package/docs/design/templates/toolbar-dark.svg +1 -1
- package/docs/design/templates/toolbar.svg +1 -1
- package/docs/design/templates/value-table/details-dark.svg +1 -1
- package/docs/design/templates/value-table/details.svg +1 -1
- package/docs/design/templates/value-table-dark.svg +1 -1
- package/docs/design/templates/value-table.svg +1 -1
- package/docs/design/templates.md +19 -6
- package/docs/design-philosophy.md +6 -6
- package/docs/disclosure.md +63 -0
- package/docs/examples/component-catalog-extension.json +2 -2
- package/docs/layout.md +16 -7
- package/docs/list-detail-dialog.md +96 -0
- package/docs/manual-test-plan.md +1 -1
- package/docs/{composer.md → message-composer.md} +41 -28
- package/docs/overlay-toast.md +62 -0
- package/docs/overlay-tooltip.md +53 -0
- package/docs/progress.md +62 -0
- package/docs/recipes.md +15 -21
- package/docs/slider.md +64 -0
- package/docs/surface-scaffold.md +155 -88
- package/docs/tag-field.md +66 -0
- package/docs/type-contracts.md +8 -8
- package/docs/ui-analyzer.md +1 -1
- package/docs/ui-doctor.md +11 -6
- package/docs/ux-demo.md +6 -6
- package/docs/webawesome-migration.md +80 -0
- package/docs/webawesome-theme.md +57 -35
- package/docs/workbench-dialog.md +85 -0
- package/docs/workbench.md +10 -6
- package/docs/writing.md +10 -8
- package/doctor/copy-capitalization-checks.mjs +18 -9
- package/llms.txt +127 -57
- package/package.json +156 -39
- package/ux-demo/recipes/composer-form.tsx +18 -19
- package/ux-demo/recipes/list-detail-dialog.tsx +55 -162
- package/ux-demo/recipes/mount-recipe.ts +7 -6
- package/ux-demo/recipes/types.ts +1 -0
- package/ai/components/icon-button.md +0 -82
- package/ai/components/icon-toggle-button.md +0 -80
- package/dist/app-tab.js +0 -6
- package/dist/app-tab.js.map +0 -1
- package/dist/browser/app-tab.js +0 -4
- package/dist/browser/composer.js +0 -4
- package/dist/browser/icon-toggle-button.js +0 -4
- package/dist/browser/token-search-field.js +0 -4
- package/dist/chunk-2MSPNRWJ.js.map +0 -1
- package/dist/chunk-7IUEBNCO.js.map +0 -1
- package/dist/chunk-AV7CPAPT.js +0 -82
- package/dist/chunk-AV7CPAPT.js.map +0 -1
- package/dist/chunk-BYFTHA4I.js.map +0 -1
- package/dist/chunk-CA7LNX3J.js +0 -44
- package/dist/chunk-CA7LNX3J.js.map +0 -1
- package/dist/chunk-CR5U5FV6.js.map +0 -1
- package/dist/chunk-ELCMSQNJ.js.map +0 -1
- package/dist/chunk-ETCWQLJV.js.map +0 -1
- package/dist/chunk-FDZNYD4C.js.map +0 -1
- package/dist/chunk-FR76ZJQC.js +0 -90
- package/dist/chunk-FR76ZJQC.js.map +0 -1
- package/dist/chunk-HQZYKJ56.js.map +0 -1
- package/dist/chunk-HZPHCSCS.js.map +0 -1
- package/dist/chunk-JOR5LGYE.js.map +0 -1
- package/dist/chunk-K4AT3V3J.js.map +0 -1
- package/dist/chunk-LL45C7BB.js.map +0 -1
- package/dist/chunk-LOSRXZAH.js.map +0 -1
- package/dist/chunk-LPHU44S3.js.map +0 -1
- package/dist/chunk-M5KZ26VV.js.map +0 -1
- package/dist/chunk-MXNIVEVL.js.map +0 -1
- package/dist/chunk-NS762OVM.js +0 -222
- package/dist/chunk-NS762OVM.js.map +0 -1
- package/dist/chunk-QTSMHH5J.js.map +0 -1
- package/dist/chunk-T5BJBMW7.js.map +0 -1
- package/dist/chunk-TDMHA7C3.js.map +0 -1
- package/dist/chunk-TGLUDQP2.js.map +0 -1
- package/dist/chunk-U6QYTMDB.js.map +0 -1
- package/dist/chunk-VFYO3UGZ.js +0 -45
- package/dist/chunk-VFYO3UGZ.js.map +0 -1
- package/dist/chunk-W4IK7AWD.js.map +0 -1
- package/dist/chunk-YBWQR2OK.js.map +0 -1
- package/dist/chunk-ZJC5ND3M.js.map +0 -1
- package/dist/composer.js +0 -5
- package/dist/composer.js.map +0 -1
- package/dist/icon-button.d.ts +0 -46
- package/dist/icon-button.js +0 -6
- package/dist/icon-button.js.map +0 -1
- package/dist/icon-toggle-button.d.ts +0 -42
- package/dist/icon-toggle-button.js +0 -6
- package/dist/icon-toggle-button.js.map +0 -1
- package/dist/styles/components/actions/icon-button/icon-button.css +0 -22
- package/dist/styles/components/actions/icon-toggle-button/icon-toggle-button.css +0 -83
- package/dist/styles/icon-button.css +0 -22
- package/dist/styles/icon-toggle-button.css +0 -83
- package/dist/token-search-field.d.ts +0 -3
- package/dist/token-search-field.js +0 -5
- package/dist/token-search-field.js.map +0 -1
- package/dist/token-search-model.d.ts +0 -3
- package/dist/token-search-model.js +0 -3
- package/dist/token-search-model.js.map +0 -1
- package/dist/wire-composers.js +0 -3
- package/dist/wire-token-search-fields.js +0 -6
- package/docs/design/templates/composer/chat-dark.svg +0 -1
- package/docs/design/templates/composer/chat.svg +0 -1
- package/docs/design/templates/composer-dark.svg +0 -1
- package/docs/design/templates/composer.svg +0 -1
- /package/docs/design/templates/{token-search-field → search-field}/empty-dark.svg +0 -0
- /package/docs/design/templates/{token-search-field → search-field}/empty.svg +0 -0
- /package/docs/design/templates/{token-search-field → search-field}/tokens-dark.svg +0 -0
- /package/docs/design/templates/{token-search-field → search-field}/tokens.svg +0 -0
- /package/docs/design/templates/{token-search-field-dark.svg → search-field-dark.svg} +0 -0
- /package/docs/design/templates/{token-search-field.svg → search-field.svg} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/actions/popup-menu/internal/reveal-in-scroller.ts","../src/components/actions/popup-menu/internal/install-dropdown-show-focus.ts","../src/components/actions/popup-menu/internal/install-popup-menu-accessible-name.ts","../src/components/actions/popup-menu/internal/install-popup-menu-keyboard.ts","../src/components/actions/popup-menu/internal/install-popup-menu-lifecycle.ts","../src/components/actions/popup-menu/internal/install-popup-menu-submenu-focus.ts","../src/components/actions/popup-menu/internal/install-popup-menu-submenu-placement.ts","../src/components/actions/popup-menu/register/popup-menu-register.ts"],"names":["installed"],"mappings":"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","file":"popup-menu-register.js","sourcesContent":["/** The flat-tree parent: the assigned slot, the parent, or a shadow host. */\nfunction composedParent(node: Element): Element | null {\n return (\n node.assignedSlot ??\n node.parentElement ??\n (node.parentNode instanceof ShadowRoot ? node.parentNode.host : null)\n );\n}\n\n/**\n * The nearest scrolling ancestor of `node` across shadow boundaries,\n * following slot assignment, so a slotted menu item reaches the shadow\n * `[part~=\"submenu\"]` or menu panel that scrolls it.\n */\nfunction scrollerOf(node: Element): HTMLElement | undefined {\n for (\n let current = composedParent(node);\n current;\n current = composedParent(current)\n ) {\n if (\n current instanceof HTMLElement &&\n current.scrollHeight > current.clientHeight &&\n /auto|scroll/.test(globalThis.getComputedStyle(current).overflowY)\n )\n return current;\n }\n return undefined;\n}\n\n/**\n * Scroll `item`'s own scroll container by the least amount that brings the\n * item fully into its clip, leaving the page and every other ancestor alone.\n * Pairs with `focus({ preventScroll: true })` when a restore refocuses an\n * item whose container a later focus scrolled away from it.\n */\nexport function revealInScroller(item: HTMLElement): void {\n const scroller = scrollerOf(item);\n if (!scroller) return;\n const box = item.getBoundingClientRect();\n const top = scroller.getBoundingClientRect().top + scroller.clientTop;\n const bottom = top + scroller.clientHeight;\n if (box.top < top) scroller.scrollTop -= top - box.top;\n else if (box.bottom > bottom) scroller.scrollTop += box.bottom - bottom;\n}\n","import { revealInScroller } from './reveal-in-scroller.js';\n\ninterface FocusableDropdownItem extends HTMLElement {\n active: boolean;\n}\n\ninterface FocusableDropdown extends HTMLElement {\n open: boolean;\n popup?: { active: boolean };\n menu?: HTMLElement;\n getItems(): FocusableDropdownItem[];\n showMenu(): Promise<void>;\n}\n\nconst installed = new WeakSet<object>();\nconst showEpoch = new WeakMap<FocusableDropdown, number>();\n\n/** Preserve item navigation that Web Awesome receives during its show animation. */\nexport function installDropdownShowFocus(prototype: object): void {\n if (installed.has(prototype)) return;\n installed.add(prototype);\n const target = prototype as FocusableDropdown;\n const showMenu = target.showMenu;\n target.showMenu = async function (this: FocusableDropdown): Promise<void> {\n const scoped =\n this.classList.contains('kui-popup-menu') ||\n this.closest('.kui-popup-surface') !== null;\n if (!scoped) return showMenu.call(this);\n\n const epoch = (showEpoch.get(this) ?? 0) + 1;\n showEpoch.set(this, epoch);\n let navigatedItem: FocusableDropdownItem | undefined;\n const rememberFocus = (event: FocusEvent) => {\n const item = event.target;\n if (\n this.menu?.classList.contains('show') &&\n item instanceof HTMLElement &&\n item.localName === 'wa-dropdown-item' &&\n this.contains(item)\n ) {\n navigatedItem = item as FocusableDropdownItem;\n }\n };\n this.addEventListener('focusin', rememberFocus);\n try {\n await showMenu.call(this);\n } finally {\n this.removeEventListener('focusin', rememberFocus);\n }\n if (\n showEpoch.get(this) !== epoch ||\n !this.open ||\n !this.popup?.active ||\n !navigatedItem?.isConnected ||\n !this.contains(navigatedItem)\n )\n return;\n\n const siblings =\n navigatedItem.slot === 'submenu'\n ? Array.from(navigatedItem.parentElement?.children ?? []).filter(\n (item): item is FocusableDropdownItem =>\n item.localName === 'wa-dropdown-item',\n )\n : this.getItems();\n siblings.forEach((item) => {\n item.active = item === navigatedItem;\n });\n // Web Awesome's show focus may have scrolled a long menu back to its\n // first item; reveal the restored item within the menu only.\n navigatedItem.focus({ preventScroll: true });\n revealInScroller(navigatedItem);\n };\n}\n","interface NamedDropdown extends HTMLElement {\n menu?: HTMLElement | null;\n firstUpdated(changed: unknown): void;\n showMenu(): Promise<void>;\n}\n\ninterface NamedDropdownItem extends HTMLElement {\n submenuElement?: HTMLElement | null;\n openSubmenu(): Promise<void>;\n}\n\n/** The host attribute `PopupMenu` renders its menu's accessible name into. */\nexport const POPUP_MENU_LABEL_ATTRIBUTE = 'data-menu-label';\n\nconst installed = new WeakSet<object>();\n\n/** Copy the host's rendered name onto Web Awesome's shadow `role=\"menu\"` panel. */\nfunction syncMenuName(dropdown: NamedDropdown): void {\n const menu = dropdown.menu;\n if (!menu || !dropdown.classList.contains('kui-popup-menu')) return;\n const name = dropdown.getAttribute(POPUP_MENU_LABEL_ATTRIBUTE)?.trim();\n if (name) menu.setAttribute('aria-label', name);\n else menu.removeAttribute('aria-label');\n}\n\n/**\n * Name a `PopupMenu`'s open menu from its trigger. Web Awesome renders the\n * `role=\"menu\"` panel in the dropdown's shadow root, and the trigger's name\n * lives either on an `aria-hidden` context anchor or inside `wa-button`'s own\n * shadow root, so no ID reference can reach across. `PopupMenu` renders the\n * name it already knows as `data-menu-label`; this copies it to the panel as\n * `aria-label` on first render and on every open, so a re-rendered label is\n * current whenever the menu is shown. Lit only owns the attributes it binds,\n * so the imperative name persists.\n */\nexport function installPopupMenuAccessibleName(prototype: object): void {\n if (installed.has(prototype)) return;\n installed.add(prototype);\n const target = prototype as NamedDropdown;\n const firstUpdated = target.firstUpdated;\n const showMenu = target.showMenu;\n target.firstUpdated = function (this: NamedDropdown, changed): void {\n firstUpdated.call(this, changed);\n syncMenuName(this);\n };\n target.showMenu = function (this: NamedDropdown): Promise<void> {\n syncMenuName(this);\n return showMenu.call(this);\n };\n}\n\nconst installedItems = new WeakSet<object>();\n\n/**\n * Name each `PopupMenu` submenu from its parent item. The item's `#submenu`\n * (`role=\"menu\"`) and `#label` share one shadow root, so a real\n * `aria-labelledby` reference follows the item's text.\n */\nexport function installPopupMenuSubmenuName(prototype: object): void {\n if (installedItems.has(prototype)) return;\n installedItems.add(prototype);\n const target = prototype as NamedDropdownItem;\n const openSubmenu = target.openSubmenu;\n target.openSubmenu = function (this: NamedDropdownItem): Promise<void> {\n const submenu = this.submenuElement;\n if (submenu && this.closest('.kui-popup-menu'))\n submenu.setAttribute('aria-labelledby', 'label');\n return openSubmenu.call(this);\n };\n}\n","interface PopupMenuDropdown extends HTMLElement {\n makeSelection(\n item: HTMLElement & { disabled?: boolean },\n event?: Event,\n ): void;\n}\n\nconst installed = new WeakSet<object>();\n\n/**\n * Route a keyboard choice in a `PopupMenu` through the item's click. Web Awesome\n * selects a pointer choice from the item's click event but a keyboard choice\n * (Enter or Space) directly, so delegated `data-action` click handlers would\n * never run for keyboard users. Clicking the item makes Web Awesome select it\n * exactly as it does for a pointer — one `wa-select`, then close and focus\n * return — while the click reaches the application's delegation. Raw\n * `wa-dropdown`s outside `PopupMenu` are unaffected.\n */\nexport function installPopupMenuKeyboard(prototype: object): void {\n if (installed.has(prototype)) return;\n installed.add(prototype);\n const target = prototype as PopupMenuDropdown;\n const makeSelection = target.makeSelection;\n target.makeSelection = function (this: PopupMenuDropdown, item, event): void {\n if (\n event instanceof KeyboardEvent &&\n this.classList.contains('kui-popup-menu') &&\n !item.disabled\n ) {\n item.click();\n return;\n }\n makeSelection.call(this, item, event);\n };\n}\n","interface PopupMenuDropdown extends HTMLElement {\n open: boolean;\n popup?: { active: boolean };\n showMenu(): Promise<void>;\n hideMenu(): Promise<void>;\n}\n\nconst installed = new WeakSet<object>();\n\n/** Restore Web Awesome dismissal listeners after a rapid close/reopen. */\nexport function installPopupMenuLifecycle(prototype: object): void {\n if (installed.has(prototype)) return;\n installed.add(prototype);\n const target = prototype as PopupMenuDropdown;\n const showMenu = target.showMenu;\n const hideMenu = target.hideMenu;\n const hiding = new WeakMap<PopupMenuDropdown, { reopened: boolean }>();\n target.showMenu = function (this: PopupMenuDropdown): Promise<void> {\n const transition = hiding.get(this);\n if (\n transition &&\n this.open &&\n this.popup?.active &&\n this.classList.contains('kui-popup-menu')\n ) {\n // Native showMenu would return early while the old popup is active,\n // leaving its document pointer listener absent during the hide.\n this.popup.active = false;\n transition.reopened = true;\n }\n return showMenu.call(this);\n };\n target.hideMenu = async function (this: PopupMenuDropdown): Promise<void> {\n const scoped = this.classList.contains('kui-popup-menu');\n const transition = { reopened: false };\n if (scoped) hiding.set(this, transition);\n await hideMenu.call(this);\n // WA removes its document listeners before awaiting the hide animation.\n // If Lit coalesces the intervening open request, restore the listeners\n // after hide; an explicit showMenu above has already done so immediately.\n if (\n scoped &&\n hiding.get(this) === transition &&\n this.open &&\n this.isConnected &&\n this.popup?.active &&\n !transition.reopened\n ) {\n this.popup.active = false;\n void this.showMenu();\n }\n if (hiding.get(this) === transition) hiding.delete(this);\n };\n}\n","import { revealInScroller } from './reveal-in-scroller.js';\n\ninterface SubmenuItem extends HTMLElement {\n active: boolean;\n}\n\ninterface PopupMenuParentItem extends HTMLElement {\n submenuElement?: HTMLElement;\n submenuOpen: boolean;\n getSubmenuItems(): SubmenuItem[];\n openSubmenu(): Promise<void>;\n closeSubmenu(): Promise<void>;\n}\n\nconst installed = new WeakSet<object>();\nconst inputEvents = ['keydown', 'pointerdown'] as const;\n\n/** Preserve a rapid keyboard move past Web Awesome's late first-item focus. */\nexport function installPopupMenuSubmenuFocus(prototype: object): void {\n if (installed.has(prototype)) return;\n installed.add(prototype);\n const target = prototype as PopupMenuParentItem;\n const openSubmenu = target.openSubmenu;\n const closeSubmenu = target.closeSubmenu;\n const submenuOpen = Object.getOwnPropertyDescriptor(prototype, 'submenuOpen');\n if (submenuOpen?.set) {\n Object.defineProperty(prototype, 'submenuOpen', {\n ...submenuOpen,\n set(this: PopupMenuParentItem, value: boolean) {\n const wasOpen = this.submenuOpen;\n submenuOpen.set!.call(this, value);\n // Web Awesome's pointer, click, and ArrowRight paths assign true. A\n // repeated assignment does not schedule updated(), so repair a stale\n // open flag over a hidden submenu at the point of that user action.\n if (\n value &&\n wasOpen &&\n this.submenuElement?.hidden &&\n this.closest('wa-dropdown.kui-popup-menu')\n )\n void this.openSubmenu();\n },\n });\n }\n target.closeSubmenu = async function (\n this: PopupMenuParentItem,\n ): Promise<void> {\n const submenu = this.submenuElement;\n await closeSubmenu.call(this);\n // A new open can start while Web Awesome awaits its hide animation. Its\n // late completion must not leave submenuOpen=true over a hidden submenu.\n if (\n this.submenuOpen &&\n submenu?.hidden &&\n this.isConnected &&\n this.closest('wa-dropdown.kui-popup-menu')\n )\n void this.openSubmenu();\n };\n target.openSubmenu = async function (\n this: PopupMenuParentItem,\n ): Promise<void> {\n const submenu = this.submenuElement;\n if (!this.closest('wa-dropdown.kui-popup-menu') || !submenu)\n return openSubmenu.call(this);\n\n // WA's animation helper never resolves if asked to add an animation class\n // already on the element. A second open while showing needs no new show;\n // a stale hidden popup needs the old show canceled before reopening.\n if (submenu.classList.contains('show')) {\n if (!submenu.hidden) return;\n submenu.classList.remove('show');\n }\n\n // Web Awesome hands focus to the first submenu item from a timer it queues\n // once the show animation settles. Browsers may dispatch a keypress\n // between that timer being queued and running, so the handoff can land\n // after the user's own choice. Track the choice until a timer queued\n // behind Web Awesome's runs; a first-item focus outside any key or pointer\n // dispatch is that handoff, not a choice.\n let desired: SubmenuItem | undefined;\n let input: Event | undefined;\n const trackInput = (event: Event) => {\n input = event;\n };\n const trackFocus = (event: FocusEvent) => {\n const item = event\n .composedPath()\n .find(\n (node): node is SubmenuItem =>\n node instanceof HTMLElement &&\n node.localName === 'wa-dropdown-item' &&\n node.getAttribute('slot') === 'submenu',\n );\n const items = this.getSubmenuItems();\n if (!item || !items.includes(item)) return;\n const fromInput = input !== undefined && input.eventPhase !== Event.NONE;\n if (item !== items[0] || fromInput) desired = item;\n };\n for (const type of inputEvents)\n document.addEventListener(type, trackInput, true);\n submenu.addEventListener('focusin', trackFocus);\n try {\n await openSubmenu.call(this);\n } finally {\n // This timer follows Web Awesome's queued first-item focus, restoring a\n // user's later choice only if that queued focus actually reset it.\n // Pointer/blur/close paths are left alone.\n window.setTimeout(() => {\n for (const type of inputEvents)\n document.removeEventListener(type, trackInput, true);\n submenu.removeEventListener('focusin', trackFocus);\n const items = this.getSubmenuItems();\n const selected = desired;\n if (\n !selected ||\n selected === items[0] ||\n !this.isConnected ||\n !this.submenuOpen ||\n submenu.hidden ||\n document.activeElement !== items[0]\n )\n return;\n items.forEach((item) => (item.active = item === selected));\n // The handoff's focus scrolled the submenu to its first item; bring\n // the restored choice back into view within the submenu only.\n selected.focus({ preventScroll: true });\n revealInScroller(selected);\n }, 0);\n }\n };\n}\n","interface SubmenuItem extends HTMLElement {\n submenuElement?: HTMLElement;\n submenuOpen: boolean;\n}\n\ninterface PopupMenuDropdown extends HTMLElement {\n menu?: HTMLElement;\n positionSubmenu(item: SubmenuItem): void;\n updateSafeTriangleCoordinates?(item: SubmenuItem): void;\n}\n\nconst installed = new WeakSet<object>();\nconst phoneWidth = '(max-width: 480px)';\nconst viewportInset = 8;\nconst menuGap = 4;\n\n/** Place a phone-width submenu beside its parent menu in the vertical axis. */\nexport function phoneSubmenuPosition(\n parent: DOMRect,\n submenu: DOMRect,\n viewport: { width: number; height: number },\n rtl: boolean,\n) {\n const width = Math.min(submenu.width, viewport.width - 2 * viewportInset);\n const height = submenu.height;\n const below = Math.max(\n 0,\n viewport.height - parent.bottom - menuGap - viewportInset,\n );\n const above = Math.max(0, parent.top - menuGap - viewportInset);\n const useBelow = height <= below || (height > above && below >= above);\n const availableHeight = useBelow ? below : above;\n const left = rtl ? parent.right - width : parent.left;\n return {\n left: Math.max(\n viewportInset,\n Math.min(left, viewport.width - viewportInset - width),\n ),\n top: useBelow\n ? parent.bottom + menuGap\n : parent.top - menuGap - Math.min(height, availableHeight),\n maxHeight: availableHeight,\n maxWidth: viewport.width - 2 * viewportInset,\n };\n}\n\nfunction clearPhoneStyles(submenu: HTMLElement) {\n for (const property of [\n 'position',\n 'left',\n 'top',\n 'max-width',\n 'max-height',\n 'box-sizing',\n 'overflow-y',\n ])\n submenu.style.removeProperty(property);\n}\n\n/**\n * Web Awesome measures the submenu for its pointer \"safe triangle\" right after\n * starting placement, but its placement resolves asynchronously, so the\n * triangle kept the submenu's pre-placement edge (often 0,0). The fixed,\n * viewport-sized hit region then fanned away from the submenu, over the\n * parent menu's rows, intercepting their hover and clicks while the diagonal\n * path to the submenu stayed uncovered. Re-measure once the placement lands\n * and again once the submenu's show animation settles.\n */\nfunction remeasureSafeTriangle(dropdown: PopupMenuDropdown, item: SubmenuItem) {\n if (typeof dropdown.updateSafeTriangleCoordinates !== 'function') return;\n const update = () => {\n if (dropdown.isConnected && item.submenuOpen)\n dropdown.updateSafeTriangleCoordinates!(item);\n };\n window.requestAnimationFrame(() => {\n update();\n // The show animation scales the submenu, so measure its settled box too.\n const animations = item.submenuElement?.getAnimations?.() ?? [];\n if (animations.length > 0)\n void Promise.all(animations.map((animation) => animation.finished)).then(\n update,\n () => undefined,\n );\n });\n}\n\n/**\n * Web Awesome's horizontal flip can place a submenu over the parent menu on a\n * phone. Its own auto-update loop calls this method on scroll and resize, so\n * override only PopupMenu's narrow placement and leave native menu navigation\n * and selection intact.\n */\nexport function installPopupMenuSubmenuPlacement(prototype: object): void {\n if (installed.has(prototype)) return;\n installed.add(prototype);\n const target = prototype as PopupMenuDropdown;\n const positionSubmenu = target.positionSubmenu;\n target.positionSubmenu = function (this: PopupMenuDropdown, item): void {\n if (!this.classList.contains('kui-popup-menu')) {\n positionSubmenu.call(this, item);\n return;\n }\n const submenu = item.submenuElement;\n if (submenu) remeasureSafeTriangle(this, item);\n if (!window.matchMedia(phoneWidth).matches || !submenu || !this.menu) {\n if (submenu) clearPhoneStyles(submenu);\n positionSubmenu.call(this, item);\n return;\n }\n\n // The opening event starts positioning before Web Awesome unhides the\n // submenu. Measure in the next microtask, after showPopover has run.\n window.queueMicrotask(() => {\n if (\n !this.isConnected ||\n !item.submenuOpen ||\n !window.matchMedia(phoneWidth).matches ||\n !this.menu ||\n !submenu.isConnected\n )\n return;\n const parentItem =\n item.parentElement?.localName === 'wa-dropdown-item'\n ? (item.parentElement as SubmenuItem)\n : undefined;\n const parentMenu = parentItem?.submenuElement ?? this.menu;\n submenu.style.position = 'fixed';\n submenu.style.maxWidth = `calc(100vw - ${2 * viewportInset}px)`;\n submenu.style.maxHeight = 'none';\n submenu.style.boxSizing = 'border-box';\n submenu.style.overflowY = 'auto';\n const placement = phoneSubmenuPosition(\n parentMenu.getBoundingClientRect(),\n submenu.getBoundingClientRect(),\n { width: window.innerWidth, height: window.innerHeight },\n window.getComputedStyle(this).direction === 'rtl',\n );\n submenu.style.left = `${placement.left}px`;\n submenu.style.top = `${placement.top}px`;\n submenu.style.maxHeight = `${placement.maxHeight}px`;\n submenu.style.maxWidth = `${placement.maxWidth}px`;\n submenu.setAttribute(\n 'data-placement',\n placement.top >= parentMenu.getBoundingClientRect().bottom\n ? 'bottom-start'\n : 'top-start',\n );\n });\n };\n}\n","import '@awesome.me/webawesome/dist/components/button/button.js';\nimport '@awesome.me/webawesome/dist/components/divider/divider.js';\nimport '@awesome.me/webawesome/dist/components/dropdown-item/dropdown-item.js';\nimport '@awesome.me/webawesome/dist/components/tooltip/tooltip.js';\n\nimport WaDropdown from '@awesome.me/webawesome/dist/components/dropdown/dropdown.js';\nimport WaDropdownItem from '@awesome.me/webawesome/dist/components/dropdown-item/dropdown-item.js';\n\nimport { installHelpTags } from '../../../../integrations/webawesome/help-tags/install-help-tag.js';\nimport { installDropdownShowFocus } from '../internal/install-dropdown-show-focus.js';\nimport {\n installPopupMenuAccessibleName,\n installPopupMenuSubmenuName,\n} from '../internal/install-popup-menu-accessible-name.js';\nimport { installPopupMenuKeyboard } from '../internal/install-popup-menu-keyboard.js';\nimport { installPopupMenuLifecycle } from '../internal/install-popup-menu-lifecycle.js';\nimport { installPopupMenuSubmenuFocus } from '../internal/install-popup-menu-submenu-focus.js';\nimport { installPopupMenuSubmenuPlacement } from '../internal/install-popup-menu-submenu-placement.js';\n\ninstallPopupMenuKeyboard(WaDropdown.prototype);\ninstallPopupMenuLifecycle(WaDropdown.prototype);\ninstallDropdownShowFocus(WaDropdown.prototype);\ninstallPopupMenuSubmenuFocus(WaDropdownItem.prototype);\ninstallPopupMenuSubmenuPlacement(WaDropdown.prototype);\ninstallPopupMenuAccessibleName(WaDropdown.prototype);\ninstallPopupMenuSubmenuName(WaDropdownItem.prototype);\ninstallHelpTags();\n\n/**\n * Marker export for tests and tooling; importing this module registers the\n * Web Awesome elements a `PopupMenu` renders (`wa-dropdown`,\n * `wa-dropdown-item`, `wa-button`, and `wa-divider`) and routes a keyboard\n * choice through the item's click so delegated `data-action`s run. It also\n * names each open menu panel from its trigger and each submenu from its item.\n */\nexport const popupMenuElementsRegistered = true;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/actions/popup-menu/register/popup-menu-register.ts"],"names":[],"mappings":";;;;;;AAGA,iBAAA,EAAkB;AAClB,eAAA,EAAgB;AAUT,IAAM,2BAAA,GAA8B","file":"popup-menu-register.js","sourcesContent":["import { installHelpTags } from '../../../../wiring/help-tags.js';\nimport { installPopupMenus } from '../internal/popup-menu-controller.js';\n\ninstallPopupMenus();\ninstallHelpTags();\n\n/**\n * Marker export for tests and tooling; importing this module wires every\n * `PopupMenu` in the document: opening from its trigger and from\n * `openPopupMenu` / `openPopupMenuAt` / `closePopupMenu`, top-layer placement,\n * keyboard navigation and typeahead, hover-opened submenus, the `kui-menu-select`\n * choice event, and focus return. It also registers the help tag an\n * icon-only trigger shows on hover or keyboard focus.\n */\nexport const popupMenuElementsRegistered = true;\n"]}
|
package/dist/popup-menu.d.ts
CHANGED
|
@@ -14,9 +14,9 @@ interface PopupMenuItem {
|
|
|
14
14
|
label: string;
|
|
15
15
|
/** Delegated `data-action` the app handles when the item is chosen. */
|
|
16
16
|
action?: string;
|
|
17
|
-
/**
|
|
17
|
+
/** The item's value, reported in the menu's `kui-menu-select` event. */
|
|
18
18
|
value?: string;
|
|
19
|
-
/** Leading icon, typically a `LucideIcon
|
|
19
|
+
/** Leading icon, typically a `LucideIcon`, before the label. */
|
|
20
20
|
icon?: SafeHtml;
|
|
21
21
|
/** A checkbox choice, including nested choices; omit for a plain command. */
|
|
22
22
|
checked?: boolean;
|
|
@@ -46,13 +46,30 @@ type PopupMenuTriggerName = {
|
|
|
46
46
|
/** Visible trigger text, which is also its accessible name. */
|
|
47
47
|
text: string;
|
|
48
48
|
label?: never;
|
|
49
|
+
triggerContent?: never;
|
|
49
50
|
} | {
|
|
50
51
|
text?: never;
|
|
51
52
|
/**
|
|
52
53
|
* Accessible name of an icon-only trigger, rendered as visually hidden
|
|
53
|
-
*
|
|
54
|
+
* text inside the trigger button.
|
|
54
55
|
*/
|
|
55
56
|
label: string;
|
|
57
|
+
triggerContent?: never;
|
|
58
|
+
} | {
|
|
59
|
+
text?: never;
|
|
60
|
+
/**
|
|
61
|
+
* The trigger's accessible name ("Status: Started"); the visible
|
|
62
|
+
* content is hidden from assistive technology.
|
|
63
|
+
*/
|
|
64
|
+
label: string;
|
|
65
|
+
/**
|
|
66
|
+
* Visible content that is the whole trigger, such as a `Badge` showing
|
|
67
|
+
* the current status. Kerf owns the bare button around it (no chrome,
|
|
68
|
+
* a pill focus ring, the pointer cursor, `aria-haspopup`), and the
|
|
69
|
+
* caret is off unless `caret` is set.
|
|
70
|
+
*/
|
|
71
|
+
triggerContent: KerfUiContent;
|
|
72
|
+
icon?: never;
|
|
56
73
|
};
|
|
57
74
|
/** A context PopupMenu's viewport anchor point. */
|
|
58
75
|
interface PopupMenuAnchor {
|
|
@@ -65,6 +82,7 @@ type PopupMenuTrigger = (PopupMenuTriggerName & {
|
|
|
65
82
|
}) | {
|
|
66
83
|
context: true;
|
|
67
84
|
label: string;
|
|
85
|
+
triggerContent?: never;
|
|
68
86
|
/**
|
|
69
87
|
* The viewport point (CSS pixels, as in `MouseEvent.clientX/Y`) the
|
|
70
88
|
* menu opens from. Rendered into the menu itself, so it survives
|
|
@@ -90,36 +108,36 @@ type PopupMenuProps = PopupMenuTrigger & {
|
|
|
90
108
|
/** Native named-slot assignment when composed inside a web component. */
|
|
91
109
|
slot?: string;
|
|
92
110
|
};
|
|
93
|
-
/** A rendered
|
|
94
|
-
type PopupMenuElement = HTMLElement
|
|
95
|
-
open: boolean;
|
|
96
|
-
};
|
|
111
|
+
/** A rendered PopupMenu root, the element the open and close helpers take. */
|
|
112
|
+
type PopupMenuElement = HTMLElement;
|
|
97
113
|
/**
|
|
98
114
|
* Open a PopupMenu at viewport pointer coordinates. A `context` menu rendered
|
|
99
115
|
* without `anchor` moves its invisible anchor there (a menu rendered with
|
|
100
|
-
* `anchor` opens with `openPopupMenu` instead). A button-triggered menu (such
|
|
101
|
-
* trailing menu)
|
|
102
|
-
* context menu, for this opening only;
|
|
103
|
-
*
|
|
104
|
-
* its trigger.
|
|
116
|
+
* `anchor` opens with `openPopupMenu` instead). A button-triggered menu (such
|
|
117
|
+
* as a `ListActionRow` trailing menu) opens `bottom-start` from the point,
|
|
118
|
+
* like a context menu, for this opening only; its next opening returns to its
|
|
119
|
+
* trigger and placement. Needs the `/register` entry.
|
|
105
120
|
*/
|
|
106
121
|
declare function openPopupMenuAt(menu: PopupMenuElement, x: number, y: number): void;
|
|
107
122
|
/**
|
|
108
|
-
* Open a context PopupMenu at the `anchor`
|
|
109
|
-
* point a previous `openPopupMenuAt` set).
|
|
123
|
+
* Open a PopupMenu from its trigger, or a context PopupMenu at the `anchor`
|
|
124
|
+
* it was rendered with (or the point a previous `openPopupMenuAt` set).
|
|
125
|
+
* Needs the `/register` entry.
|
|
110
126
|
*/
|
|
111
127
|
declare function openPopupMenu(menu: PopupMenuElement): void;
|
|
112
|
-
/** Close
|
|
128
|
+
/** Close an open PopupMenu, and any submenu it shows. */
|
|
113
129
|
declare function closePopupMenu(menu: PopupMenuElement): void;
|
|
114
130
|
/**
|
|
115
|
-
* An action menu: a trigger button that opens a list of commands
|
|
116
|
-
*
|
|
117
|
-
* `
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
131
|
+
* An action menu: a trigger button that opens a list of commands in the top
|
|
132
|
+
* layer. A `single` `ToolbarControlGroup` (with `nestedDropdown`) or a
|
|
133
|
+
* `PopupSurface` sizes and insets it as usual. Items dispatch through
|
|
134
|
+
* delegated `data-action`s, and the root reports each choice as a bubbling
|
|
135
|
+
* `kui-menu-select` event; the app owns the commands and any open-state reaction.
|
|
136
|
+
* Import `@kerfjs/ui/popup-menu/register` once to wire opening, keyboard
|
|
137
|
+
* navigation, submenus, and dismissal. At viewport widths up to 480px,
|
|
138
|
+
* submenus appear above or below their parent menu so their rows do not cover
|
|
139
|
+
* the parent list.
|
|
122
140
|
*/
|
|
123
|
-
declare function PopupMenu({ text, label, icon, items, placement, caret, disabled, rootAttributes, slot, context, anchor, }: PopupMenuProps): SafeHtml;
|
|
141
|
+
declare function PopupMenu({ text, label, icon, triggerContent, items, placement, caret, disabled, rootAttributes, slot, context, anchor, }: PopupMenuProps): SafeHtml;
|
|
124
142
|
|
|
125
143
|
export { PopupMenu, type PopupMenuAnchor, type PopupMenuDivider, type PopupMenuElement, type PopupMenuEntry, type PopupMenuHeading, type PopupMenuItem, type PopupMenuPlacement, type PopupMenuProps, closePopupMenu, openPopupMenu, openPopupMenuAt };
|
package/dist/popup-menu.js
CHANGED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
|
|
3
|
+
/** The fill color: `brand` (default), or a status tone. */
|
|
4
|
+
type ProgressTone = 'brand' | 'success' | 'warning' | 'danger';
|
|
5
|
+
/** `default` is a 6px track; `compact` is 4px, for a row or table cell. */
|
|
6
|
+
type ProgressBarSize = 'default' | 'compact';
|
|
7
|
+
/**
|
|
8
|
+
* Application `data-*` identity on the ProgressBar root, such as `data-key`;
|
|
9
|
+
* its own configuration attributes stay protected.
|
|
10
|
+
*/
|
|
11
|
+
type ProgressBarRootAttributes = Readonly<Record<`data-${string}`, string | undefined>>;
|
|
12
|
+
type ProgressBarProps = {
|
|
13
|
+
/**
|
|
14
|
+
* Work done so far, from 0 to `max`. Omit it for indeterminate progress
|
|
15
|
+
* (work whose size is unknown), which animates instead.
|
|
16
|
+
*/
|
|
17
|
+
value?: number;
|
|
18
|
+
/** The amount that means done (default 1). */
|
|
19
|
+
max?: number;
|
|
20
|
+
/**
|
|
21
|
+
* Spoken progress in place of the percentage, such as "3 of 12 files". With
|
|
22
|
+
* `showValue` it is also the visible text.
|
|
23
|
+
*/
|
|
24
|
+
valueText?: string;
|
|
25
|
+
/** Show the value (or `valueText`) at the end of the label row. */
|
|
26
|
+
showValue?: boolean;
|
|
27
|
+
tone?: ProgressTone;
|
|
28
|
+
size?: ProgressBarSize;
|
|
29
|
+
id?: string;
|
|
30
|
+
rootAttributes?: ProgressBarRootAttributes;
|
|
31
|
+
className?: string;
|
|
32
|
+
/** Native named-slot assignment when composed inside a web component. */
|
|
33
|
+
slot?: string;
|
|
34
|
+
} & ({
|
|
35
|
+
/** A visible label above the bar that also names it. */
|
|
36
|
+
label: string;
|
|
37
|
+
ariaLabel?: never;
|
|
38
|
+
} | {
|
|
39
|
+
label?: never;
|
|
40
|
+
/** The bar's accessible name when it shows no visible label. */
|
|
41
|
+
ariaLabel: string;
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* A linear progress indicator on the native `<progress>` element: determinate
|
|
45
|
+
* (`value` of `max`) or indeterminate (no `value`, an animated sweep), named
|
|
46
|
+
* by a visible `label` or an `ariaLabel`, toned, and in two track sizes. The
|
|
47
|
+
* native element carries the progressbar role and its value to assistive
|
|
48
|
+
* technology; `valueText` replaces the spoken percentage.
|
|
49
|
+
*/
|
|
50
|
+
declare function ProgressBar({ value, max, valueText, showValue, label, ariaLabel, tone, size, id, rootAttributes, className, slot, }: ProgressBarProps): kerfjs.SafeHtml;
|
|
51
|
+
|
|
52
|
+
export { ProgressBar, type ProgressBarProps, type ProgressBarRootAttributes, type ProgressBarSize, type ProgressTone };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { filterDataAttributes } from './chunk-KH4KEMSP.js';
|
|
2
|
+
import { jsxs, jsx } from 'kerfjs/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
var PROGRESS_BAR_PROTECTED = /* @__PURE__ */ new Set([
|
|
5
|
+
"data-component",
|
|
6
|
+
"data-tone",
|
|
7
|
+
"data-size",
|
|
8
|
+
"data-indeterminate"
|
|
9
|
+
]);
|
|
10
|
+
function percent(value, max) {
|
|
11
|
+
return `${Math.round(value / max * 100)}%`;
|
|
12
|
+
}
|
|
13
|
+
function ProgressBar({
|
|
14
|
+
value,
|
|
15
|
+
max = 1,
|
|
16
|
+
valueText,
|
|
17
|
+
showValue = false,
|
|
18
|
+
label,
|
|
19
|
+
ariaLabel,
|
|
20
|
+
tone = "brand",
|
|
21
|
+
size = "default",
|
|
22
|
+
id,
|
|
23
|
+
rootAttributes = {},
|
|
24
|
+
className = "",
|
|
25
|
+
slot
|
|
26
|
+
}) {
|
|
27
|
+
if (!Number.isFinite(max) || max <= 0)
|
|
28
|
+
throw new RangeError("ProgressBar max must be a positive number.");
|
|
29
|
+
if (value !== void 0 && (!Number.isFinite(value) || value < 0))
|
|
30
|
+
throw new RangeError("ProgressBar value must be zero or more.");
|
|
31
|
+
const clamped = value === void 0 ? void 0 : Math.min(value, max);
|
|
32
|
+
const labelId = id === void 0 ? void 0 : `${id}-label`;
|
|
33
|
+
const shownValue = showValue && (valueText ?? (clamped === void 0 ? void 0 : percent(clamped, max)));
|
|
34
|
+
return /* @__PURE__ */ jsxs(
|
|
35
|
+
"div",
|
|
36
|
+
{
|
|
37
|
+
...filterDataAttributes(rootAttributes, PROGRESS_BAR_PROTECTED),
|
|
38
|
+
id,
|
|
39
|
+
class: `kui-progress-bar ${className}`.trim(),
|
|
40
|
+
"data-component": "progress-bar",
|
|
41
|
+
"data-tone": tone,
|
|
42
|
+
"data-size": size,
|
|
43
|
+
"data-indeterminate": clamped === void 0 ? "" : void 0,
|
|
44
|
+
slot,
|
|
45
|
+
children: [
|
|
46
|
+
label === void 0 && !shownValue ? null : /* @__PURE__ */ jsxs("div", { class: "kui-progress-bar__header", children: [
|
|
47
|
+
label === void 0 ? null : /* @__PURE__ */ jsx("span", { class: "kui-progress-bar__label", id: labelId, children: label }),
|
|
48
|
+
shownValue ? /* @__PURE__ */ jsx("span", { class: "kui-progress-bar__value", "aria-hidden": "true", children: shownValue }) : null
|
|
49
|
+
] }),
|
|
50
|
+
/* @__PURE__ */ jsx(
|
|
51
|
+
"progress",
|
|
52
|
+
{
|
|
53
|
+
class: "kui-progress-bar__track",
|
|
54
|
+
value: clamped,
|
|
55
|
+
max,
|
|
56
|
+
"aria-label": labelId === void 0 ? label ?? ariaLabel : void 0,
|
|
57
|
+
"aria-labelledby": labelId,
|
|
58
|
+
"aria-valuetext": valueText
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export { ProgressBar };
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=progress-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/feedback/progress-bar/progress-bar.tsx"],"names":[],"mappings":";;;AAeA,IAAM,sBAAA,uBAA6B,GAAA,CAAI;AAAA,EACrC,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAC,CAAA;AAqCD,SAAS,OAAA,CAAQ,OAAe,GAAA,EAAqB;AACnD,EAAA,OAAO,GAAG,IAAA,CAAK,KAAA,CAAO,KAAA,GAAQ,GAAA,GAAO,GAAG,CAAC,CAAA,CAAA,CAAA;AAC3C;AASO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,GAAA,GAAM,CAAA;AAAA,EACN,SAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,KAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA,GAAO,OAAA;AAAA,EACP,IAAA,GAAO,SAAA;AAAA,EACP,EAAA;AAAA,EACA,iBAAiB,EAAC;AAAA,EAClB,SAAA,GAAY,EAAA;AAAA,EACZ;AACF,CAAA,EAAqB;AACnB,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,GAAG,KAAK,GAAA,IAAO,CAAA;AAClC,IAAA,MAAM,IAAI,WAAW,4CAA4C,CAAA;AACnE,EAAA,IAAI,UAAU,MAAA,KAAc,CAAC,OAAO,QAAA,CAAS,KAAK,KAAK,KAAA,GAAQ,CAAA,CAAA;AAC7D,IAAA,MAAM,IAAI,WAAW,yCAAyC,CAAA;AAChE,EAAA,MAAM,UAAU,KAAA,KAAU,MAAA,GAAY,SAAY,IAAA,CAAK,GAAA,CAAI,OAAO,GAAG,CAAA;AACrE,EAAA,MAAM,OAAA,GAAU,EAAA,KAAO,MAAA,GAAY,MAAA,GAAY,GAAG,EAAE,CAAA,MAAA,CAAA;AACpD,EAAA,MAAM,UAAA,GACJ,cACC,SAAA,KAAc,OAAA,KAAY,SAAY,MAAA,GAAY,OAAA,CAAQ,SAAS,GAAG,CAAA,CAAA,CAAA;AACzE,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,oBAAA,CAAqB,cAAA,EAAgB,sBAAsB,CAAA;AAAA,MAC/D,EAAA;AAAA,MACA,KAAA,EAAO,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC5C,gBAAA,EAAe,cAAA;AAAA,MACf,WAAA,EAAW,IAAA;AAAA,MACX,WAAA,EAAW,IAAA;AAAA,MACX,oBAAA,EAAoB,OAAA,KAAY,MAAA,GAAY,EAAA,GAAK,MAAA;AAAA,MACjD,IAAA;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,KAAA,KAAU,UAAa,CAAC,UAAA,GAAa,uBACpC,IAAA,CAAC,KAAA,EAAA,EAAI,OAAM,0BAAA,EACR,QAAA,EAAA;AAAA,UAAA,KAAA,KAAU,MAAA,GAAY,uBACrB,GAAA,CAAC,MAAA,EAAA,EAAK,OAAM,yBAAA,EAA0B,EAAA,EAAI,SACvC,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,UAED,UAAA,uBACE,MAAA,EAAA,EAAK,KAAA,EAAM,2BAA0B,aAAA,EAAY,MAAA,EAC/C,sBACH,CAAA,GACE;AAAA,SAAA,EACN,CAAA;AAAA,wBAEF,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,yBAAA;AAAA,YACN,KAAA,EAAO,OAAA;AAAA,YACP,GAAA;AAAA,YACA,YAAA,EAAY,OAAA,KAAY,MAAA,GAAa,KAAA,IAAS,SAAA,GAAa,MAAA;AAAA,YAC3D,iBAAA,EAAiB,OAAA;AAAA,YACjB,gBAAA,EAAgB;AAAA;AAAA;AAClB;AAAA;AAAA,GACF;AAEJ","file":"progress-bar.js","sourcesContent":["import { filterDataAttributes } from '../../../shared/dom/extension-attributes.js';\n\n/** The fill color: `brand` (default), or a status tone. */\nexport type ProgressTone = 'brand' | 'success' | 'warning' | 'danger';\n/** `default` is a 6px track; `compact` is 4px, for a row or table cell. */\nexport type ProgressBarSize = 'default' | 'compact';\n\n/**\n * Application `data-*` identity on the ProgressBar root, such as `data-key`;\n * its own configuration attributes stay protected.\n */\nexport type ProgressBarRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined>\n>;\n\nconst PROGRESS_BAR_PROTECTED = new Set([\n 'data-component',\n 'data-tone',\n 'data-size',\n 'data-indeterminate',\n]);\n\nexport type ProgressBarProps = {\n /**\n * Work done so far, from 0 to `max`. Omit it for indeterminate progress\n * (work whose size is unknown), which animates instead.\n */\n value?: number;\n /** The amount that means done (default 1). */\n max?: number;\n /**\n * Spoken progress in place of the percentage, such as \"3 of 12 files\". With\n * `showValue` it is also the visible text.\n */\n valueText?: string;\n /** Show the value (or `valueText`) at the end of the label row. */\n showValue?: boolean;\n tone?: ProgressTone;\n size?: ProgressBarSize;\n id?: string;\n rootAttributes?: ProgressBarRootAttributes;\n className?: string;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n} & (\n | {\n /** A visible label above the bar that also names it. */\n label: string;\n ariaLabel?: never;\n }\n | {\n label?: never;\n /** The bar's accessible name when it shows no visible label. */\n ariaLabel: string;\n }\n);\n\nfunction percent(value: number, max: number): string {\n return `${Math.round((value / max) * 100)}%`;\n}\n\n/**\n * A linear progress indicator on the native `<progress>` element: determinate\n * (`value` of `max`) or indeterminate (no `value`, an animated sweep), named\n * by a visible `label` or an `ariaLabel`, toned, and in two track sizes. The\n * native element carries the progressbar role and its value to assistive\n * technology; `valueText` replaces the spoken percentage.\n */\nexport function ProgressBar({\n value,\n max = 1,\n valueText,\n showValue = false,\n label,\n ariaLabel,\n tone = 'brand',\n size = 'default',\n id,\n rootAttributes = {},\n className = '',\n slot,\n}: ProgressBarProps) {\n if (!Number.isFinite(max) || max <= 0)\n throw new RangeError('ProgressBar max must be a positive number.');\n if (value !== undefined && (!Number.isFinite(value) || value < 0))\n throw new RangeError('ProgressBar value must be zero or more.');\n const clamped = value === undefined ? undefined : Math.min(value, max);\n const labelId = id === undefined ? undefined : `${id}-label`;\n const shownValue =\n showValue &&\n (valueText ?? (clamped === undefined ? undefined : percent(clamped, max)));\n return (\n <div\n {...filterDataAttributes(rootAttributes, PROGRESS_BAR_PROTECTED)}\n id={id}\n class={`kui-progress-bar ${className}`.trim()}\n data-component=\"progress-bar\"\n data-tone={tone}\n data-size={size}\n data-indeterminate={clamped === undefined ? '' : undefined}\n slot={slot}\n >\n {label === undefined && !shownValue ? null : (\n <div class=\"kui-progress-bar__header\">\n {label === undefined ? null : (\n <span class=\"kui-progress-bar__label\" id={labelId}>\n {label}\n </span>\n )}\n {shownValue ? (\n <span class=\"kui-progress-bar__value\" aria-hidden=\"true\">\n {shownValue}\n </span>\n ) : null}\n </div>\n )}\n <progress\n class=\"kui-progress-bar__track\"\n value={clamped}\n max={max}\n aria-label={labelId === undefined ? (label ?? ariaLabel) : undefined}\n aria-labelledby={labelId}\n aria-valuetext={valueText}\n />\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { ProgressTone } from './progress-bar.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The ring's diameter: `small` (16px) sits in a line of text, `medium` (24px,
|
|
6
|
+
* the default) beside an icon in a row or toolbar, and `large` (40px) on its
|
|
7
|
+
* own.
|
|
8
|
+
*/
|
|
9
|
+
type ProgressRingSize = 'small' | 'medium' | 'large';
|
|
10
|
+
/**
|
|
11
|
+
* Application `data-*` identity on the ProgressRing root, such as `data-key`;
|
|
12
|
+
* its own configuration attributes stay protected.
|
|
13
|
+
*/
|
|
14
|
+
type ProgressRingRootAttributes = Readonly<Record<`data-${string}`, string | undefined>>;
|
|
15
|
+
interface ProgressRingProps {
|
|
16
|
+
/**
|
|
17
|
+
* Work done so far, from 0 to `max`. Omit it for indeterminate progress,
|
|
18
|
+
* which spins a short arc instead.
|
|
19
|
+
*/
|
|
20
|
+
value?: number;
|
|
21
|
+
/** The amount that means done (default 1). */
|
|
22
|
+
max?: number;
|
|
23
|
+
/** The ring's accessible name, such as "Claim time remaining". */
|
|
24
|
+
label: string;
|
|
25
|
+
/** Spoken progress in place of the percentage, such as "12 minutes left". */
|
|
26
|
+
valueText?: string;
|
|
27
|
+
tone?: ProgressTone;
|
|
28
|
+
size?: ProgressRingSize;
|
|
29
|
+
id?: string;
|
|
30
|
+
rootAttributes?: ProgressRingRootAttributes;
|
|
31
|
+
className?: string;
|
|
32
|
+
/** Native named-slot assignment when composed inside a web component. */
|
|
33
|
+
slot?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A circular progress indicator: an SVG track and arc, determinate (`value`
|
|
37
|
+
* of `max`, filling clockwise from the top) or indeterminate (no `value`, a
|
|
38
|
+
* spinning arc), sized to sit inline in text, a row, or a toolbar. It is a
|
|
39
|
+
* `role="progressbar"` named by `label`, with `aria-valuenow` (as a
|
|
40
|
+
* percentage) or `valueText`.
|
|
41
|
+
*/
|
|
42
|
+
declare function ProgressRing({ value, max, label, valueText, tone, size, id, rootAttributes, className, slot, }: ProgressRingProps): kerfjs.SafeHtml;
|
|
43
|
+
|
|
44
|
+
export { ProgressRing, type ProgressRingProps, type ProgressRingRootAttributes, type ProgressRingSize, ProgressTone };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { remify } from './chunk-IQSRHXZR.js';
|
|
2
|
+
import { filterDataAttributes } from './chunk-KH4KEMSP.js';
|
|
3
|
+
import { jsx, jsxs } from 'kerfjs/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var RING_PIXELS = {
|
|
6
|
+
small: 16,
|
|
7
|
+
medium: 24,
|
|
8
|
+
large: 40
|
|
9
|
+
};
|
|
10
|
+
var PROGRESS_RING_PROTECTED = /* @__PURE__ */ new Set([
|
|
11
|
+
"data-component",
|
|
12
|
+
"data-tone",
|
|
13
|
+
"data-size",
|
|
14
|
+
"data-indeterminate"
|
|
15
|
+
]);
|
|
16
|
+
var RADIUS = 10.5;
|
|
17
|
+
var CIRCUMFERENCE = 2 * Math.PI * RADIUS;
|
|
18
|
+
function ProgressRing({
|
|
19
|
+
value,
|
|
20
|
+
max = 1,
|
|
21
|
+
label,
|
|
22
|
+
valueText,
|
|
23
|
+
tone = "brand",
|
|
24
|
+
size = "medium",
|
|
25
|
+
id,
|
|
26
|
+
rootAttributes = {},
|
|
27
|
+
className = "",
|
|
28
|
+
slot
|
|
29
|
+
}) {
|
|
30
|
+
if (!Number.isFinite(max) || max <= 0)
|
|
31
|
+
throw new RangeError("ProgressRing max must be a positive number.");
|
|
32
|
+
if (value !== void 0 && (!Number.isFinite(value) || value < 0))
|
|
33
|
+
throw new RangeError("ProgressRing value must be zero or more.");
|
|
34
|
+
const fraction = value === void 0 ? void 0 : Math.min(value, max) / max;
|
|
35
|
+
const dash = fraction === void 0 ? CIRCUMFERENCE * 0.25 : CIRCUMFERENCE * fraction;
|
|
36
|
+
return /* @__PURE__ */ jsx(
|
|
37
|
+
"span",
|
|
38
|
+
{
|
|
39
|
+
...filterDataAttributes(rootAttributes, PROGRESS_RING_PROTECTED),
|
|
40
|
+
id,
|
|
41
|
+
class: `kui-progress-ring ${className}`.trim(),
|
|
42
|
+
"data-component": "progress-ring",
|
|
43
|
+
"data-tone": tone,
|
|
44
|
+
"data-size": size,
|
|
45
|
+
"data-indeterminate": fraction === void 0 ? "" : void 0,
|
|
46
|
+
role: "progressbar",
|
|
47
|
+
"aria-label": label,
|
|
48
|
+
"aria-valuemin": fraction === void 0 ? void 0 : "0",
|
|
49
|
+
"aria-valuemax": fraction === void 0 ? void 0 : "100",
|
|
50
|
+
"aria-valuenow": fraction === void 0 ? void 0 : String(Math.round(fraction * 100)),
|
|
51
|
+
"aria-valuetext": valueText,
|
|
52
|
+
style: `--_kui-progress-ring-size:${remify(RING_PIXELS[size])}`,
|
|
53
|
+
slot,
|
|
54
|
+
children: /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", children: [
|
|
55
|
+
/* @__PURE__ */ jsx("circle", { class: "kui-progress-ring__track", cx: "12", cy: "12", r: RADIUS }),
|
|
56
|
+
/* @__PURE__ */ jsx(
|
|
57
|
+
"circle",
|
|
58
|
+
{
|
|
59
|
+
class: "kui-progress-ring__arc",
|
|
60
|
+
cx: "12",
|
|
61
|
+
cy: "12",
|
|
62
|
+
r: RADIUS,
|
|
63
|
+
"stroke-dasharray": `${dash.toFixed(3)} ${CIRCUMFERENCE.toFixed(3)}`
|
|
64
|
+
}
|
|
65
|
+
)
|
|
66
|
+
] })
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export { ProgressRing };
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=progress-ring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/feedback/progress-ring/progress-ring.tsx"],"names":[],"mappings":"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","file":"progress-ring.js","sourcesContent":["import { filterDataAttributes } from '../../../shared/dom/extension-attributes.js';\nimport { remify } from '../../../shared/styles/css-values.js';\nimport type { ProgressTone } from '../progress-bar/progress-bar.js';\n\nexport type { ProgressTone } from '../progress-bar/progress-bar.js';\n\n/**\n * The ring's diameter: `small` (16px) sits in a line of text, `medium` (24px,\n * the default) beside an icon in a row or toolbar, and `large` (40px) on its\n * own.\n */\nexport type ProgressRingSize = 'small' | 'medium' | 'large';\n\nconst RING_PIXELS: Record<ProgressRingSize, number> = {\n small: 16,\n medium: 24,\n large: 40,\n};\n\n/**\n * Application `data-*` identity on the ProgressRing root, such as `data-key`;\n * its own configuration attributes stay protected.\n */\nexport type ProgressRingRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined>\n>;\n\nconst PROGRESS_RING_PROTECTED = new Set([\n 'data-component',\n 'data-tone',\n 'data-size',\n 'data-indeterminate',\n]);\n\nexport interface ProgressRingProps {\n /**\n * Work done so far, from 0 to `max`. Omit it for indeterminate progress,\n * which spins a short arc instead.\n */\n value?: number;\n /** The amount that means done (default 1). */\n max?: number;\n /** The ring's accessible name, such as \"Claim time remaining\". */\n label: string;\n /** Spoken progress in place of the percentage, such as \"12 minutes left\". */\n valueText?: string;\n tone?: ProgressTone;\n size?: ProgressRingSize;\n id?: string;\n rootAttributes?: ProgressRingRootAttributes;\n className?: string;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\n/** The circle's radius in the 24-unit viewBox, inside a 3-unit stroke. */\nconst RADIUS = 10.5;\nconst CIRCUMFERENCE = 2 * Math.PI * RADIUS;\n\n/**\n * A circular progress indicator: an SVG track and arc, determinate (`value`\n * of `max`, filling clockwise from the top) or indeterminate (no `value`, a\n * spinning arc), sized to sit inline in text, a row, or a toolbar. It is a\n * `role=\"progressbar\"` named by `label`, with `aria-valuenow` (as a\n * percentage) or `valueText`.\n */\nexport function ProgressRing({\n value,\n max = 1,\n label,\n valueText,\n tone = 'brand',\n size = 'medium',\n id,\n rootAttributes = {},\n className = '',\n slot,\n}: ProgressRingProps) {\n if (!Number.isFinite(max) || max <= 0)\n throw new RangeError('ProgressRing max must be a positive number.');\n if (value !== undefined && (!Number.isFinite(value) || value < 0))\n throw new RangeError('ProgressRing value must be zero or more.');\n const fraction = value === undefined ? undefined : Math.min(value, max) / max;\n const dash =\n fraction === undefined ? CIRCUMFERENCE * 0.25 : CIRCUMFERENCE * fraction;\n return (\n <span\n {...filterDataAttributes(rootAttributes, PROGRESS_RING_PROTECTED)}\n id={id}\n class={`kui-progress-ring ${className}`.trim()}\n data-component=\"progress-ring\"\n data-tone={tone}\n data-size={size}\n data-indeterminate={fraction === undefined ? '' : undefined}\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={fraction === undefined ? undefined : '0'}\n aria-valuemax={fraction === undefined ? undefined : '100'}\n aria-valuenow={\n fraction === undefined ? undefined : String(Math.round(fraction * 100))\n }\n aria-valuetext={valueText}\n style={`--_kui-progress-ring-size:${remify(RING_PIXELS[size])}`}\n slot={slot}\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle class=\"kui-progress-ring__track\" cx=\"12\" cy=\"12\" r={RADIUS} />\n <circle\n class=\"kui-progress-ring__arc\"\n cx=\"12\"\n cy=\"12\"\n r={RADIUS}\n stroke-dasharray={`${dash.toFixed(3)} ${CIRCUMFERENCE.toFixed(3)}`}\n />\n </svg>\n </span>\n );\n}\n"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
|
|
3
|
+
/** `default` is a 20px circle beside 16px text; `compact` 18px and 14px. */
|
|
4
|
+
type RadioGroupSize = 'default' | 'compact';
|
|
5
|
+
/** `vertical` stacks the choices; `horizontal` lines them up and wraps. */
|
|
6
|
+
type RadioGroupOrientation = 'vertical' | 'horizontal';
|
|
7
|
+
/** Application `data-*` metadata; the RadioGroup's own markers stay protected. */
|
|
8
|
+
type RadioGroupRootAttributes = Readonly<Record<`data-${string}`, string | undefined>>;
|
|
9
|
+
interface RadioGroupChoice<Value extends string = string> {
|
|
10
|
+
value: Value;
|
|
11
|
+
/** Visible label; it is also the radio's accessible name. */
|
|
12
|
+
label: string;
|
|
13
|
+
/** Supporting text under this choice's label, also its description. */
|
|
14
|
+
hint?: string;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** A group is named by a visible `label` (its legend) or by `ariaLabel`. */
|
|
18
|
+
type RadioGroupName = {
|
|
19
|
+
label: string;
|
|
20
|
+
ariaLabel?: never;
|
|
21
|
+
} | {
|
|
22
|
+
label?: never;
|
|
23
|
+
ariaLabel: string;
|
|
24
|
+
};
|
|
25
|
+
interface RadioGroupOptions<Value extends string = string> {
|
|
26
|
+
/** Native input `name`: the form field the selected value submits under. */
|
|
27
|
+
name: string;
|
|
28
|
+
choices: readonly RadioGroupChoice<Value>[];
|
|
29
|
+
/** The selected value. Omit for no selection. */
|
|
30
|
+
value?: NoInfer<Value>;
|
|
31
|
+
/** Supporting text below the choices, also the group's description. */
|
|
32
|
+
hint?: string;
|
|
33
|
+
/** A validation message: shown in the danger color and marking it invalid. */
|
|
34
|
+
error?: string;
|
|
35
|
+
size?: RadioGroupSize;
|
|
36
|
+
orientation?: RadioGroupOrientation;
|
|
37
|
+
/** Require a selection for native form validation. */
|
|
38
|
+
required?: boolean;
|
|
39
|
+
/** Disable the whole group. */
|
|
40
|
+
disabled?: boolean;
|
|
41
|
+
/** Delegated `data-action` on every radio; listen for `change`. */
|
|
42
|
+
action?: string;
|
|
43
|
+
/** Associate the radios with a form outside their ancestor chain. */
|
|
44
|
+
form?: string;
|
|
45
|
+
/** The fieldset's id. */
|
|
46
|
+
id?: string;
|
|
47
|
+
className?: string;
|
|
48
|
+
/** Safe `data-*` metadata (a `data-key`). */
|
|
49
|
+
rootAttributes?: RadioGroupRootAttributes;
|
|
50
|
+
/** Native named-slot assignment when composed inside a web component. */
|
|
51
|
+
slot?: string;
|
|
52
|
+
}
|
|
53
|
+
type RadioGroupProps<Value extends string = string> = RadioGroupName & RadioGroupOptions<Value>;
|
|
54
|
+
/**
|
|
55
|
+
* One exclusive choice among a few visible options: a native fieldset of
|
|
56
|
+
* radios, each drawn as a Kerf circle beside its label, with the group label
|
|
57
|
+
* above and hint and error text below. The browser owns the interaction: one
|
|
58
|
+
* Tab stop, arrow keys move and select, and the checked value submits.
|
|
59
|
+
*/
|
|
60
|
+
declare function RadioGroup<Value extends string>({ label, ariaLabel, name, choices, value, hint, error, size, orientation, required, disabled, action, form, id, className, rootAttributes, slot, }: RadioGroupProps<Value>): kerfjs.SafeHtml;
|
|
61
|
+
|
|
62
|
+
export { RadioGroup, type RadioGroupChoice, type RadioGroupName, type RadioGroupOptions, type RadioGroupOrientation, type RadioGroupProps, type RadioGroupRootAttributes, type RadioGroupSize };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"radio-group.js"}
|
package/dist/row.js
CHANGED