@mcp-b/web-components 0.2.0
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/LICENSE +21 -0
- package/README.md +49 -0
- package/dist/accordion-B1Q3kuP_.d.ts +373 -0
- package/dist/accordion-item-DvPfhpm8.js +307 -0
- package/dist/accordion-item-bPRIahNn.d.ts +63 -0
- package/dist/accordion-zDr-Br4V.js +483 -0
- package/dist/action-bar-CYsjmhwP.d.ts +29 -0
- package/dist/action-bar-CjN_UcnP.js +56 -0
- package/dist/alert-dialog-4CnO3Nb5.d.ts +60 -0
- package/dist/alert-dialog-D25Oi_TS.js +126 -0
- package/dist/avatar-Bje_KpZo.d.ts +141 -0
- package/dist/avatar-CRP0kW3x.js +224 -0
- package/dist/badge-Ct95U4UO.js +301 -0
- package/dist/badge-D1DNQrWn.d.ts +106 -0
- package/dist/breadcrumb-BxZ-nQE5.d.ts +365 -0
- package/dist/breadcrumb-item-BC454oQe.d.ts +59 -0
- package/dist/breadcrumb-item-P5pdq_gE.js +151 -0
- package/dist/breadcrumb-uURhiqWJ.js +384 -0
- package/dist/button-5k_aL_gD.js +802 -0
- package/dist/button-BQofnUt4.d.ts +354 -0
- package/dist/button-group-BydvJTQy.js +197 -0
- package/dist/button-group-COodHeuB.d.ts +155 -0
- package/dist/callout-B8zTf8Go.js +188 -0
- package/dist/callout-DFwPao36.d.ts +103 -0
- package/dist/card-BYDzdMAU.d.ts +177 -0
- package/dist/card-DIg1-X2G.js +332 -0
- package/dist/carousel-Bktu7wrD.js +843 -0
- package/dist/carousel-DQITCtEY.d.ts +423 -0
- package/dist/carousel-item-B5-X31Ha.js +79 -0
- package/dist/carousel-item-BB3jL2tk.d.ts +34 -0
- package/dist/cdn/loader.js +530 -0
- package/dist/checkbox-D6r7PVPj.js +641 -0
- package/dist/checkbox-DoFcDEKB.d.ts +354 -0
- package/dist/checkbox-group-CLvNAO_F.js +201 -0
- package/dist/checkbox-group-Cnh8rAn4.d.ts +152 -0
- package/dist/color-input-Bky89xg_.d.ts +470 -0
- package/dist/color-input-DPIxi9wR.js +894 -0
- package/dist/color-picker-adwOmtRl.js +1240 -0
- package/dist/color-picker-wQw8bPsq.d.ts +360 -0
- package/dist/combobox-B6al50UG.js +1693 -0
- package/dist/combobox-item-D2H1CMxC.d.ts +714 -0
- package/dist/combobox-item-yM6tDrGG.js +225 -0
- package/dist/comparison-B1-nMwmp.d.ts +134 -0
- package/dist/comparison-CyqKrCN-.js +435 -0
- package/dist/components/accordion/accordion.d.ts +2 -0
- package/dist/components/accordion/accordion.js +2 -0
- package/dist/components/accordion-item/accordion-item.d.ts +2 -0
- package/dist/components/accordion-item/accordion-item.js +2 -0
- package/dist/components/action-bar/action-bar.d.ts +2 -0
- package/dist/components/action-bar/action-bar.js +2 -0
- package/dist/components/alert-dialog/alert-dialog.d.ts +2 -0
- package/dist/components/alert-dialog/alert-dialog.js +2 -0
- package/dist/components/avatar/avatar.d.ts +2 -0
- package/dist/components/avatar/avatar.js +2 -0
- package/dist/components/badge/badge.d.ts +2 -0
- package/dist/components/badge/badge.js +2 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts +2 -0
- package/dist/components/breadcrumb/breadcrumb.js +2 -0
- package/dist/components/breadcrumb-item/breadcrumb-item.d.ts +2 -0
- package/dist/components/breadcrumb-item/breadcrumb-item.js +2 -0
- package/dist/components/button/button.d.ts +2 -0
- package/dist/components/button/button.js +2 -0
- package/dist/components/button-group/button-group.d.ts +2 -0
- package/dist/components/button-group/button-group.js +2 -0
- package/dist/components/callout/callout.d.ts +2 -0
- package/dist/components/callout/callout.js +2 -0
- package/dist/components/card/card.d.ts +2 -0
- package/dist/components/card/card.js +2 -0
- package/dist/components/carousel/carousel.d.ts +2 -0
- package/dist/components/carousel/carousel.js +2 -0
- package/dist/components/carousel-item/carousel-item.d.ts +2 -0
- package/dist/components/carousel-item/carousel-item.js +2 -0
- package/dist/components/checkbox/checkbox.d.ts +2 -0
- package/dist/components/checkbox/checkbox.js +2 -0
- package/dist/components/checkbox-group/checkbox-group.d.ts +2 -0
- package/dist/components/checkbox-group/checkbox-group.js +2 -0
- package/dist/components/color-input/color-input.d.ts +2 -0
- package/dist/components/color-input/color-input.js +2 -0
- package/dist/components/color-picker/color-picker.d.ts +2 -0
- package/dist/components/color-picker/color-picker.js +2 -0
- package/dist/components/combobox/combobox.d.ts +2 -0
- package/dist/components/combobox/combobox.js +2 -0
- package/dist/components/combobox-item/combobox-item.d.ts +2 -0
- package/dist/components/combobox-item/combobox-item.js +2 -0
- package/dist/components/comparison/comparison.d.ts +2 -0
- package/dist/components/comparison/comparison.js +2 -0
- package/dist/components/copy/copy.d.ts +2 -0
- package/dist/components/copy/copy.js +291 -0
- package/dist/components/data-table/data-table.d.ts +2 -0
- package/dist/components/data-table/data-table.js +2 -0
- package/dist/components/date/date.d.ts +2 -0
- package/dist/components/date/date.js +2 -0
- package/dist/components/dialog/dialog.d.ts +2 -0
- package/dist/components/dialog/dialog.js +2 -0
- package/dist/components/divider/divider.d.ts +2 -0
- package/dist/components/divider/divider.js +2 -0
- package/dist/components/dropdown/dropdown.d.ts +2 -0
- package/dist/components/dropdown/dropdown.js +2 -0
- package/dist/components/dropdown-item/dropdown-item.d.ts +2 -0
- package/dist/components/dropdown-item/dropdown-item.js +2 -0
- package/dist/components/empty-result/empty-result.d.ts +2 -0
- package/dist/components/empty-result/empty-result.js +2 -0
- package/dist/components/empty-state/empty-state.d.ts +2 -0
- package/dist/components/empty-state/empty-state.js +2 -0
- package/dist/components/expander/expander.d.ts +2 -0
- package/dist/components/expander/expander.js +2 -0
- package/dist/components/field/field.d.ts +2 -0
- package/dist/components/field/field.js +2 -0
- package/dist/components/file-input/file-input.d.ts +2 -0
- package/dist/components/file-input/file-input.js +2 -0
- package/dist/components/filter-bar/filter-bar.d.ts +2 -0
- package/dist/components/filter-bar/filter-bar.js +2 -0
- package/dist/components/form-section/form-section.d.ts +2 -0
- package/dist/components/form-section/form-section.js +2 -0
- package/dist/components/icon/icon.d.ts +2 -0
- package/dist/components/icon/icon.js +2 -0
- package/dist/components/include/include.d.ts +2 -0
- package/dist/components/include/include.js +2 -0
- package/dist/components/index.d.ts +85 -0
- package/dist/components/index.js +86 -0
- package/dist/components/infinite-scroller/infinite-scroller.d.ts +2 -0
- package/dist/components/infinite-scroller/infinite-scroller.js +2 -0
- package/dist/components/intersection-observer/intersection-observer.d.ts +2 -0
- package/dist/components/intersection-observer/intersection-observer.js +2 -0
- package/dist/components/listbox/listbox.d.ts +2 -0
- package/dist/components/listbox/listbox.js +2 -0
- package/dist/components/listbox-item/listbox-item.d.ts +2 -0
- package/dist/components/listbox-item/listbox-item.js +2 -0
- package/dist/components/lorem-ipsum/lorem-ipsum.d.ts +2 -0
- package/dist/components/lorem-ipsum/lorem-ipsum.js +2 -0
- package/dist/components/meter/meter.d.ts +2 -0
- package/dist/components/meter/meter.js +2 -0
- package/dist/components/metric/metric.d.ts +2 -0
- package/dist/components/metric/metric.js +2 -0
- package/dist/components/metric-grid/metric-grid.d.ts +2 -0
- package/dist/components/metric-grid/metric-grid.js +2 -0
- package/dist/components/mutation-observer/mutation-observer.d.ts +2 -0
- package/dist/components/mutation-observer/mutation-observer.js +2 -0
- package/dist/components/navicon/navicon.d.ts +2 -0
- package/dist/components/navicon/navicon.js +2 -0
- package/dist/components/number/number.d.ts +2 -0
- package/dist/components/number/number.js +2 -0
- package/dist/components/number-field/number-field.d.ts +2 -0
- package/dist/components/number-field/number-field.js +2 -0
- package/dist/components/pagination/pagination.d.ts +2 -0
- package/dist/components/pagination/pagination.js +2 -0
- package/dist/components/popover/popover.d.ts +2 -0
- package/dist/components/popover/popover.js +2 -0
- package/dist/components/preview-card/preview-card.d.ts +2 -0
- package/dist/components/preview-card/preview-card.js +2 -0
- package/dist/components/progress/progress.d.ts +2 -0
- package/dist/components/progress/progress.js +2 -0
- package/dist/components/radio/radio.d.ts +2 -0
- package/dist/components/radio/radio.js +2 -0
- package/dist/components/radio-item/radio-item.d.ts +2 -0
- package/dist/components/radio-item/radio-item.js +2 -0
- package/dist/components/random-content/random-content.d.ts +2 -0
- package/dist/components/random-content/random-content.js +2 -0
- package/dist/components/rating/rating.d.ts +2 -0
- package/dist/components/rating/rating.js +2 -0
- package/dist/components/resize-observer/resize-observer.d.ts +2 -0
- package/dist/components/resize-observer/resize-observer.js +2 -0
- package/dist/components/scroll-area/scroll-area.d.ts +2 -0
- package/dist/components/scroll-area/scroll-area.js +2 -0
- package/dist/components/scroller/scroller.d.ts +2 -0
- package/dist/components/scroller/scroller.js +2 -0
- package/dist/components/search-list/search-list.d.ts +2 -0
- package/dist/components/search-list/search-list.js +2 -0
- package/dist/components/select/select.d.ts +2 -0
- package/dist/components/select/select.js +2 -0
- package/dist/components/selection-summary/selection-summary.d.ts +2 -0
- package/dist/components/selection-summary/selection-summary.js +2 -0
- package/dist/components/share/share.d.ts +2 -0
- package/dist/components/share/share.js +2 -0
- package/dist/components/slide-activator/slide-activator.d.ts +2 -0
- package/dist/components/slide-activator/slide-activator.js +2 -0
- package/dist/components/slider/slider.d.ts +2 -0
- package/dist/components/slider/slider.js +2 -0
- package/dist/components/sparkline/sparkline.d.ts +2 -0
- package/dist/components/sparkline/sparkline.js +2 -0
- package/dist/components/spinner/spinner.d.ts +2 -0
- package/dist/components/spinner/spinner.js +2 -0
- package/dist/components/splitter/splitter.d.ts +2 -0
- package/dist/components/splitter/splitter.js +2 -0
- package/dist/components/switch/switch.d.ts +2 -0
- package/dist/components/switch/switch.js +2 -0
- package/dist/components/tab/tab.d.ts +2 -0
- package/dist/components/tab/tab.js +2 -0
- package/dist/components/tab-list/tab-list.d.ts +2 -0
- package/dist/components/tab-list/tab-list.js +2 -0
- package/dist/components/tab-panel/tab-panel.d.ts +2 -0
- package/dist/components/tab-panel/tab-panel.js +2 -0
- package/dist/components/text-area/text-area.d.ts +2 -0
- package/dist/components/text-area/text-area.js +2 -0
- package/dist/components/text-field/text-field.d.ts +2 -0
- package/dist/components/text-field/text-field.js +2 -0
- package/dist/components/text-mask/text-mask.d.ts +2 -0
- package/dist/components/text-mask/text-mask.js +2 -0
- package/dist/components/timed-content/timed-content.d.ts +2 -0
- package/dist/components/timed-content/timed-content.js +2 -0
- package/dist/components/toast/toast.d.ts +2 -0
- package/dist/components/toast/toast.js +2 -0
- package/dist/components/toast-item/toast-item.d.ts +2 -0
- package/dist/components/toast-item/toast-item.js +2 -0
- package/dist/components/toggle-icon/toggle-icon.d.ts +2 -0
- package/dist/components/toggle-icon/toggle-icon.js +2 -0
- package/dist/components/toggle-tag/toggle-tag.d.ts +2 -0
- package/dist/components/toggle-tag/toggle-tag.js +2 -0
- package/dist/components/toolbar/toolbar.d.ts +2 -0
- package/dist/components/toolbar/toolbar.js +2 -0
- package/dist/components/tooltip/tooltip.d.ts +2 -0
- package/dist/components/tooltip/tooltip.js +2 -0
- package/dist/components/transition-group/transition-group.d.ts +2 -0
- package/dist/components/transition-group/transition-group.js +2 -0
- package/dist/components/zoomable-frame/zoomable-frame.d.ts +2 -0
- package/dist/components/zoomable-frame/zoomable-frame.js +2 -0
- package/dist/copy-CvC9vaGw.d.ts +206 -0
- package/dist/copy.styles-DWGvGNTP.js +100 -0
- package/dist/data-table-CITa8DSn.js +247 -0
- package/dist/data-table-DL5RhE0d.d.ts +89 -0
- package/dist/date-CJPmOdi9.js +146 -0
- package/dist/date-DtaTBM71.d.ts +142 -0
- package/dist/decorate-DcF3lt7P.js +9 -0
- package/dist/dialog-Cx46HMaZ.js +983 -0
- package/dist/dialog-N-v0woIy.d.ts +414 -0
- package/dist/divider-9vNsfHW8.js +169 -0
- package/dist/divider-DWuAxcXv.d.ts +79 -0
- package/dist/docs/custom-elements.json +29301 -0
- package/dist/dropdown-BXSKpVX9.js +1123 -0
- package/dist/dropdown-Bo00Vlr5.d.ts +537 -0
- package/dist/dropdown-item-_lIs-Tfd.d.ts +111 -0
- package/dist/dropdown-item-i77cRuN6.js +504 -0
- package/dist/empty-result-B2ln1yFL.js +65 -0
- package/dist/empty-result-B54x_Ab2.d.ts +31 -0
- package/dist/empty-state-BLWjtKUo.js +186 -0
- package/dist/empty-state-SGKjpwp3.d.ts +117 -0
- package/dist/expander-BUev0BmM.d.ts +174 -0
- package/dist/expander-Bwvxj6Oa.js +342 -0
- package/dist/field-BEyS909F.js +163 -0
- package/dist/field-ITx0jVw-.d.ts +69 -0
- package/dist/file-input-BEumLJjg.js +841 -0
- package/dist/file-input-D2D6YC0B.d.ts +378 -0
- package/dist/filter-bar-Bj2QzEn9.d.ts +35 -0
- package/dist/filter-bar-Dcs67aXo.js +66 -0
- package/dist/form-section-BchPetkj.js +83 -0
- package/dist/form-section-xFBTBULQ.d.ts +34 -0
- package/dist/icon-BPVkNsY4.js +165 -0
- package/dist/icon-Ci9CPZJV.d.ts +72 -0
- package/dist/icon-library-D_if7p2h.d.ts +2 -0
- package/dist/include-CQHVVtNs.d.ts +103 -0
- package/dist/include-qNUh_6kT.js +155 -0
- package/dist/index.d.ts +89 -0
- package/dist/index.js +92 -0
- package/dist/infinite-scroller-BmmtnWNt.js +285 -0
- package/dist/infinite-scroller-CuUEAlB9.d.ts +174 -0
- package/dist/intersection-observer-B6TciOAQ.js +503 -0
- package/dist/intersection-observer-B7nmP7Zz.d.ts +418 -0
- package/dist/listbox-C3XXRWGX.js +1257 -0
- package/dist/listbox-DD4ujIJe.d.ts +682 -0
- package/dist/listbox-item-CwD9s3VY.js +135 -0
- package/dist/listbox-item-DQEJWp4Z.d.ts +53 -0
- package/dist/localize-322EtXNX.d.ts +66 -0
- package/dist/lorem-ipsum-B2x3V-v8.js +198 -0
- package/dist/lorem-ipsum-CR82CSuJ.d.ts +130 -0
- package/dist/meter-BC7uaJWf.d.ts +73 -0
- package/dist/meter-BIDyjwFp.js +155 -0
- package/dist/metric-CjlLq_VA.d.ts +36 -0
- package/dist/metric-DbuOcDp_.js +86 -0
- package/dist/metric-grid-C2Pb0Zl3.js +37 -0
- package/dist/metric-grid-C5Xbb1_0.d.ts +27 -0
- package/dist/mutation-observer-BmrZ-GER.d.ts +326 -0
- package/dist/mutation-observer-DS8EBuOp.js +388 -0
- package/dist/navicon-Dic5Qjzb.d.ts +159 -0
- package/dist/navicon-_yMHY27-.js +486 -0
- package/dist/number-BNtNXNF3.js +162 -0
- package/dist/number-BwbnErlB.d.ts +143 -0
- package/dist/number-field-BQHB7UYo.js +726 -0
- package/dist/number-field-odk4lKXM.d.ts +422 -0
- package/dist/pagination-6z2qcf3U.d.ts +322 -0
- package/dist/pagination-DuKPuzdb.js +679 -0
- package/dist/popover-D0sxTU6o.d.ts +259 -0
- package/dist/popover-DJBrJ0za.js +556 -0
- package/dist/preview-card-C7H1FPfd.js +287 -0
- package/dist/preview-card-DitOCZTD.d.ts +86 -0
- package/dist/progress-Db0_axHQ.d.ts +181 -0
- package/dist/progress-DzVk260j.js +494 -0
- package/dist/radio-BtDG9xJM.js +658 -0
- package/dist/radio-CieMa4zU.d.ts +460 -0
- package/dist/radio-item-DIrUStAX.js +264 -0
- package/dist/radio-item-Xq2U3cMu.d.ts +69 -0
- package/dist/random-content-BhSeJFKz.d.ts +380 -0
- package/dist/random-content-BwiirXdG.js +450 -0
- package/dist/rating-4xNsWumY.d.ts +369 -0
- package/dist/rating-C1BcJDIO.js +722 -0
- package/dist/resize-observer-BseSbVWP.d.ts +187 -0
- package/dist/resize-observer-DcrLhddo.js +236 -0
- package/dist/scroll-area-COc1857S.js +127 -0
- package/dist/scroll-area-CVYDf5qY.d.ts +61 -0
- package/dist/scroller-LYgBVyfY.js +590 -0
- package/dist/scroller-bB2rGs7b.d.ts +374 -0
- package/dist/search-list-Clmrg8EV.js +884 -0
- package/dist/search-list-n0GYO7rh.d.ts +777 -0
- package/dist/select-CkZK2jJn.d.ts +506 -0
- package/dist/select-DLIaRnA4.js +690 -0
- package/dist/selection-summary-BVnNJ8Lw.js +48 -0
- package/dist/selection-summary-DmFkGyZI.d.ts +34 -0
- package/dist/share-DPlqP2dc.d.ts +162 -0
- package/dist/share-bsgXZCl7.js +250 -0
- package/dist/sigvelo.d.ts +5 -0
- package/dist/sigvelo.js +5 -0
- package/dist/sigvelo.loader.d.ts +3 -0
- package/dist/sigvelo.loader.js +102 -0
- package/dist/slide-activator-D7bBz69E.d.ts +429 -0
- package/dist/slide-activator-DlxQt9R9.js +798 -0
- package/dist/slider-B0FVsV1o.d.ts +921 -0
- package/dist/slider-B90Il7x3.js +1744 -0
- package/dist/sparkline-CcpTaJ_Z.js +358 -0
- package/dist/sparkline-DlCIt81-.d.ts +235 -0
- package/dist/spinner-C04Dmc0H.js +188 -0
- package/dist/spinner-CZ19x_dC.d.ts +99 -0
- package/dist/splitter-DBDJAzsp.d.ts +325 -0
- package/dist/splitter-MnD4In9H.js +638 -0
- package/dist/switch-CPaEKbog.js +581 -0
- package/dist/switch-Cief9M59.d.ts +248 -0
- package/dist/tab-BcqYGsuW.d.ts +44 -0
- package/dist/tab-C-FtuNmh.js +102 -0
- package/dist/tab-list-B_Ye_Oj9.js +691 -0
- package/dist/tab-list-DDvS8qHr.d.ts +450 -0
- package/dist/tab-panel-BaBl6eep.js +60 -0
- package/dist/tab-panel-BzSJlSfd.d.ts +38 -0
- package/dist/text-area-B_mjCE9W.d.ts +327 -0
- package/dist/text-area-Czixaz-_.js +556 -0
- package/dist/text-field-BClWMp6q.d.ts +424 -0
- package/dist/text-field-inpJfp0A.js +687 -0
- package/dist/text-mask-CNKVKSFp.d.ts +336 -0
- package/dist/text-mask-DDEurj90.js +370 -0
- package/dist/themes/sigvelo.css +10 -0
- package/dist/themes/utilities.css +9 -0
- package/dist/timed-content-D2mGFamc.d.ts +181 -0
- package/dist/timed-content-pvEP4l5V.js +226 -0
- package/dist/toast-BnZaIg6Z.js +636 -0
- package/dist/toast-cEBVK9NQ.d.ts +487 -0
- package/dist/toast-item-BPpJT6vD.d.ts +159 -0
- package/dist/toast-item-IS8IFUEg.js +372 -0
- package/dist/toggle-icon-4oLDeEt4.js +752 -0
- package/dist/toggle-icon-DlwMMWZL.d.ts +359 -0
- package/dist/toggle-tag-1sfTFJtg.js +434 -0
- package/dist/toggle-tag-IVvMGT4R.d.ts +245 -0
- package/dist/toolbar-CABq0ZL1.d.ts +122 -0
- package/dist/toolbar-CEZ0-F-X.js +196 -0
- package/dist/tooltip-DbyoPFNe.js +521 -0
- package/dist/tooltip-ahFthek8.d.ts +192 -0
- package/dist/transition-group-3hnAnwSd.js +801 -0
- package/dist/transition-group-DD_CjSNC.d.ts +608 -0
- package/dist/translations/en.d.ts +6 -0
- package/dist/translations/en.js +75 -0
- package/dist/translations/es.d.ts +6 -0
- package/dist/translations/es.js +75 -0
- package/dist/types/custom-element-jsx.d.ts +13723 -0
- package/dist/utilities/icon-library.d.ts +3 -0
- package/dist/utilities/icon-library.js +93 -0
- package/dist/utilities/localize.d.ts +2 -0
- package/dist/utilities/localize.js +6 -0
- package/dist/zoomable-frame-Cldvj5sE.js +398 -0
- package/dist/zoomable-frame-r6S6587z.d.ts +162 -0
- package/package.json +83 -0
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
import { Localize } from "./utilities/localize.js";
|
|
2
|
+
import { t as __decorate } from "./decorate-DcF3lt7P.js";
|
|
3
|
+
import { css, html } from "lit";
|
|
4
|
+
import { eventOptions, property, query } from "lit/decorators.js";
|
|
5
|
+
import hostStyles from "@mcp-b/wc-support/styles/host.styles";
|
|
6
|
+
import { SigveloElement } from "@mcp-b/wc-support/base/sigvelo-element";
|
|
7
|
+
import { parseCssDuration } from "@mcp-b/wc-support/utilities/animate";
|
|
8
|
+
import { SigveloBeforeCloseEvent, SigveloBeforeOpenEvent, SigveloCloseEvent, SigveloOpenEvent } from "@mcp-b/wc-support/events/open-close";
|
|
9
|
+
//#region src/components/expander/expander.styles.ts
|
|
10
|
+
var expander_styles_default = css`
|
|
11
|
+
:host {
|
|
12
|
+
--preview-height: 3lh;
|
|
13
|
+
--duration: var(--sigvelo-motion-duration-presence);
|
|
14
|
+
--easing: ease;
|
|
15
|
+
--shadow-color: var(--sigvelo-color-canvas);
|
|
16
|
+
--shadow-size: 1lh;
|
|
17
|
+
|
|
18
|
+
display: block;
|
|
19
|
+
position: relative;
|
|
20
|
+
isolation: isolate;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* Content */
|
|
24
|
+
#content {
|
|
25
|
+
z-index: 1;
|
|
26
|
+
position: relative;
|
|
27
|
+
min-height: var(--preview-height);
|
|
28
|
+
max-height: var(--preview-height);
|
|
29
|
+
overflow: hidden;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
:host([expanded]) #content {
|
|
33
|
+
max-height: none;
|
|
34
|
+
overflow: visible;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Shadow */
|
|
38
|
+
#shadow {
|
|
39
|
+
position: absolute;
|
|
40
|
+
right: 0;
|
|
41
|
+
bottom: 0;
|
|
42
|
+
left: 0;
|
|
43
|
+
height: var(--shadow-size);
|
|
44
|
+
background: linear-gradient(to top, var(--shadow-color), transparent 100%);
|
|
45
|
+
pointer-events: none;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
:host([expanded]) #shadow {
|
|
49
|
+
display: none;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* Trigger */
|
|
53
|
+
#trigger {
|
|
54
|
+
display: block;
|
|
55
|
+
z-index: 2;
|
|
56
|
+
position: relative;
|
|
57
|
+
width: max-content;
|
|
58
|
+
padding: 0.5em 0;
|
|
59
|
+
border: none;
|
|
60
|
+
border-radius: var(--sigvelo-radius-md);
|
|
61
|
+
background: none;
|
|
62
|
+
color: var(--sigvelo-color-primary-text);
|
|
63
|
+
font-weight: var(--sigvelo-font-weight-semibold);
|
|
64
|
+
font-size: 0.9375em;
|
|
65
|
+
line-height: inherit;
|
|
66
|
+
font-family: inherit;
|
|
67
|
+
cursor: pointer;
|
|
68
|
+
|
|
69
|
+
&:focus {
|
|
70
|
+
outline: none;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
&:focus-visible {
|
|
74
|
+
outline: var(--sigvelo-focus-ring);
|
|
75
|
+
outline-offset: var(--sigvelo-focus-offset);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
&:disabled {
|
|
79
|
+
cursor: not-allowed;
|
|
80
|
+
opacity: 0.5;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
`;
|
|
84
|
+
//#endregion
|
|
85
|
+
//#region src/components/expander/expander.ts
|
|
86
|
+
/**
|
|
87
|
+
* <sigvelo-expander>
|
|
88
|
+
*
|
|
89
|
+
* @summary An expandable content container with smooth animation on show/hide.
|
|
90
|
+
* @tag sigvelo-expander
|
|
91
|
+
* @documentation https://design-system.sigvelo.com/docs/components/expander
|
|
92
|
+
* @status stable
|
|
93
|
+
* @since 1.0
|
|
94
|
+
*
|
|
95
|
+
* @slot - The default slot for content to be expanded/collapsed.
|
|
96
|
+
* @slot expand-label - The label for the button that expands the content.
|
|
97
|
+
* @slot collapse-label - The label for the button that collapses the content.
|
|
98
|
+
*
|
|
99
|
+
* @event sigvelo-before-open - Emitted before the expander opens. Cancelable event that prevents opening when canceled.
|
|
100
|
+
* @event sigvelo-open - Emitted after the expander has opened.
|
|
101
|
+
* @event sigvelo-before-close - Emitted before the expander closes. Cancelable event that prevents closing when canceled.
|
|
102
|
+
* @event sigvelo-close - Emitted after the expander has closed.
|
|
103
|
+
*
|
|
104
|
+
* @csspart content - The container holding the expandable content.
|
|
105
|
+
* @csspart shadow - The shadow that shows above collapsed content.
|
|
106
|
+
* @csspart trigger - The button that toggles between expanded and collapsed states.
|
|
107
|
+
*
|
|
108
|
+
* @cssproperty [--preview-height=3lh] - The visible height of the expander's content when collapsed.
|
|
109
|
+
* @cssproperty [--duration=200ms] - The duration of the expand/collapse animation.
|
|
110
|
+
* @cssproperty [--easing=ease] - The easing to use for the expand/collapse animation.
|
|
111
|
+
*
|
|
112
|
+
* @cssstate disabled - Applied when the expander is disabled.
|
|
113
|
+
* @cssstate expanded - Applied when the content is expanded.
|
|
114
|
+
*
|
|
115
|
+
* @example Default
|
|
116
|
+
* ```html
|
|
117
|
+
* <sigvelo-expander>
|
|
118
|
+
* <img
|
|
119
|
+
* src="https://images.unsplash.com/photo-1746104718755-9c6499747f8d?q=80&w=400&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"
|
|
120
|
+
* alt="Portrait of a gray cat looking towards the bottom left."
|
|
121
|
+
* style="max-width: 200px; float: right; margin-inline-start: 2rem; margin-block-end: 2rem;"
|
|
122
|
+
* >
|
|
123
|
+
* <p>Cats can jump up to five times their own height in a single leap, making them the acrobats of the animal kingdom. Picture a cat vaulting over a coffee table like a furry superhero, landing with a smug glance that says, "Nailed it!"</p>
|
|
124
|
+
* <p>A cat’s whiskers are not just for show—they’re precision tools, roughly as wide as the cat’s body, helping them gauge if they can squeeze through tight spaces. This explains why your cat insists on "fitting" into that tiny box, even if it’s mostly wishful thinking.</p>
|
|
125
|
+
* <p>Cats have a special vocal talent: the purr, which they use to express contentment, hunger, or even self-soothing. Each cat’s purr is as unique as a signature, a melodic hum that can charm treats out of even the toughest humans.</p>
|
|
126
|
+
* </sigvelo-expander>
|
|
127
|
+
* ```
|
|
128
|
+
*
|
|
129
|
+
* @example Expanded initially
|
|
130
|
+
* Add the `expanded` attribute to expand the content by default.
|
|
131
|
+
*
|
|
132
|
+
* ```html
|
|
133
|
+
* <sigvelo-expander expanded>
|
|
134
|
+
* <p>Cats possess an astonishing 230 bones in their bodies, compared to a human’s mere 206, granting them their signature slinky grace. Imagine them weaving through furniture like liquid fur, smirking at our clumsy two-legged attempts to keep up!</p>
|
|
135
|
+
* <p>When cats gather, it’s dubbed a "glaring," a term that perfectly captures their judgmental stares. Good luck convincing these furry monarchs to align for anything but a sunbeam or the faint crinkle of a treat bag.</p>
|
|
136
|
+
* <p>Each cat’s eyes are a cosmic masterpiece, with pupils that shift from slits to full moons, adapting to light with eerie precision. No two cats share the exact same iris patterns, making their gaze a one-of-a-kind spell that demands your undivided attention.</p>
|
|
137
|
+
* </sigvelo-expander>
|
|
138
|
+
* ```
|
|
139
|
+
*
|
|
140
|
+
* @example Changing the height
|
|
141
|
+
* You can change the height of the preview that shows when the expander is collapsed by setting the `--preview-height` custom property.
|
|
142
|
+
*
|
|
143
|
+
* ```html
|
|
144
|
+
* <sigvelo-expander style="--preview-height: 6lh;">
|
|
145
|
+
* <p>Cats can hear ultrasonic sounds, picking up frequencies far beyond human ears, like secret whispers from another realm. Envision them tilting their heads, catching the faintest squeak of a toy or the distant rustle of a snack bag!</p>
|
|
146
|
+
* <p>A cluster of cats is playfully called a “cabal,” hinting at their mysterious, scheming nature. Try gathering these whiskered conspirators, and you’ll find they only unite for a fleeting moment—usually when a cardboard box begs to be claimed.</p>
|
|
147
|
+
* <p>Every cat’s coat is a unique tapestry, with patterns of tabby swirls, tortoiseshell patches, or sleek solids. This furry artwork is their personal signature, ensuring no two cats ever wear quite the same masterpiece!</p>
|
|
148
|
+
* </sigvelo-expander>
|
|
149
|
+
* ```
|
|
150
|
+
*
|
|
151
|
+
* @example Customizing labels
|
|
152
|
+
* To provide custom labels for the trigger, use the `expand-label` and `collapse-label` slots.
|
|
153
|
+
*
|
|
154
|
+
* ```html
|
|
155
|
+
* <sigvelo-expander>
|
|
156
|
+
* <span slot="expand-label">Show me more</span>
|
|
157
|
+
* <span slot="collapse-label">Never mind</span>
|
|
158
|
+
* <p>Cats spend approximately 70% of their lives sleeping, which amounts to about 13-16 hours a day. Just imagine having that kind of schedule – sleeping two-thirds of your life away and still being considered a perfectly functional adult!</p>
|
|
159
|
+
* <p>A group of cats is called a "clowder," though most cat owners know that trying to organize multiple cats into any kind of group is nearly impossible. Cats are notorious individualists who come together only when the treats bag rustles.</p>
|
|
160
|
+
* <p>A cat's nose print is unique, just like a human's fingerprint. Each cat has its own distinct pattern of bumps and ridges on its nose, which could theoretically be used for identification – if cats would ever cooperate with being fingerprinted.</p>
|
|
161
|
+
* </sigvelo-expander>
|
|
162
|
+
* ```
|
|
163
|
+
*
|
|
164
|
+
* @example Hiding the shadow
|
|
165
|
+
* Add the `without-shadow` attribute to remove the shadow that appears above collapsed content.
|
|
166
|
+
*
|
|
167
|
+
* ```html
|
|
168
|
+
* <sigvelo-expander without-shadow>
|
|
169
|
+
* <p>Cats can rotate their ears 180 degrees, tuning into the faintest sounds like furry satellite dishes. Imagine them eavesdropping on your whispers from across the room, plotting their next treat heist with a flick of their ears!</p>
|
|
170
|
+
* <p>A gathering of cats is whimsically called a "pounce," though herding these solo artists is like convincing stars to align. They’ll only unite for the irresistible jingle of a toy mouse or a freshly opened can of tuna.</p>
|
|
171
|
+
* <p>Every cat’s tongue is a tiny marvel, covered in spiky papillae that act like a built-in comb. This unique texture not only keeps their fur pristine but also makes each lick a one-of-a-kind grooming session, if only they’d share the spa secrets!</p>
|
|
172
|
+
* </sigvelo-expander>
|
|
173
|
+
* ```
|
|
174
|
+
*
|
|
175
|
+
* @example Disabling
|
|
176
|
+
* Add the `disabled` attribute to disable the expand/collapse functionality. When disabled, the expander can still be toggled programmatically.
|
|
177
|
+
*
|
|
178
|
+
* ```html
|
|
179
|
+
* <sigvelo-expander disabled>
|
|
180
|
+
* <p>Cats boast a secret weapon: their retractable claws, which they keep sharp by sheathing them like tiny daggers. Picture them strutting past your couch, deciding whether to unleash their ninja skills or graciously spare your furniture today!</p>
|
|
181
|
+
* <p>A band of cats is charmingly termed a “clutter,” though corralling these furry rebels is a fool’s errand. They’ll only deign to assemble when the scent of catnip wafts through the air or a laser pointer dances into view.</p>
|
|
182
|
+
* <p>Each cat’s tail is a unique communicator, with patterns of stripes, swirls, or spots that rival a painter’s palette. This expressive appendage waves like a personalized flag, broadcasting moods—if only we could decode the full saga of every twitch!</p>
|
|
183
|
+
* </sigvelo-expander>
|
|
184
|
+
* ```
|
|
185
|
+
*
|
|
186
|
+
* @example Styling expanders
|
|
187
|
+
* You can customize the expander's variant with CSS custom properties and parts.
|
|
188
|
+
*
|
|
189
|
+
* ```html
|
|
190
|
+
* <sigvelo-expander id="expander__styling">
|
|
191
|
+
* <p>Cats have a remarkable sense of balance, thanks to their flexible spines and inner ear mechanisms. Imagine them tightrope-walking along a fence, flicking their tails like seasoned acrobats, completely unfazed by gravity’s pull!</p>
|
|
192
|
+
* <p>A group of cats is called a “colony,” though these independent souls rarely agree to collective plans. They might briefly unite for a sunny nap spot, but good luck getting them to share the prime real estate!</p>
|
|
193
|
+
* <p>Each cat’s paw pads are uniquely textured, acting like tiny shock absorbers for stealthy landings. These cushioned marvels are as individual as a signature, making every step a masterpiece of feline engineering.</p>
|
|
194
|
+
* </sigvelo-expander>
|
|
195
|
+
*
|
|
196
|
+
* <style>
|
|
197
|
+
* #expander__styling {
|
|
198
|
+
* --duration: 350ms;
|
|
199
|
+
* --easing: cubic-bezier(0.4, 0.0, 0.2, 1);
|
|
200
|
+
*
|
|
201
|
+
* &::part(trigger) {
|
|
202
|
+
* display: block;
|
|
203
|
+
* width: fit-content;
|
|
204
|
+
* margin: 1rem auto 0;
|
|
205
|
+
* padding: 0.5rem 1.25rem;
|
|
206
|
+
* background-color: #4a6cf7;
|
|
207
|
+
* color: white;
|
|
208
|
+
* border: none;
|
|
209
|
+
* border-radius: var(--sigvelo-radius-full);
|
|
210
|
+
* font-weight: 500;
|
|
211
|
+
* cursor: pointer;
|
|
212
|
+
* transition: background-color 0.2s ease, transform 0.2s ease;
|
|
213
|
+
* }
|
|
214
|
+
*
|
|
215
|
+
* &::part(trigger):hover {
|
|
216
|
+
* background-color: #3a5ce5;
|
|
217
|
+
* }
|
|
218
|
+
*
|
|
219
|
+
* &::part(trigger):active {
|
|
220
|
+
* transform: translateY(1px);
|
|
221
|
+
* }
|
|
222
|
+
*
|
|
223
|
+
* &::part(trigger):focus-visible {
|
|
224
|
+
* outline-color: #4a6cf7;
|
|
225
|
+
* }
|
|
226
|
+
* }
|
|
227
|
+
* </style>
|
|
228
|
+
* ```
|
|
229
|
+
*/
|
|
230
|
+
var SigveloExpander = class extends SigveloElement {
|
|
231
|
+
constructor(..._args) {
|
|
232
|
+
super(..._args);
|
|
233
|
+
this.localize = new Localize(this);
|
|
234
|
+
this.expanded = false;
|
|
235
|
+
this.disabled = false;
|
|
236
|
+
this.withoutShadow = false;
|
|
237
|
+
}
|
|
238
|
+
static {
|
|
239
|
+
this.styles = [hostStyles, expander_styles_default];
|
|
240
|
+
}
|
|
241
|
+
/** Update max-height when the expanded property changes */
|
|
242
|
+
updated(changedProperties) {
|
|
243
|
+
if (changedProperties.has("disabled")) this.customStates.set("disabled", this.disabled);
|
|
244
|
+
if (changedProperties.has("expanded")) this.customStates.set("expanded", this.expanded);
|
|
245
|
+
}
|
|
246
|
+
handleClick() {
|
|
247
|
+
this.toggleExpanded(true);
|
|
248
|
+
}
|
|
249
|
+
handleContentScroll() {
|
|
250
|
+
if (!this.expanded) this.content.scrollTop = 0;
|
|
251
|
+
}
|
|
252
|
+
/** Toggle the expanded state */
|
|
253
|
+
async toggleExpanded(wasUserInteraction = false) {
|
|
254
|
+
const willExpand = !this.expanded;
|
|
255
|
+
if (wasUserInteraction) {
|
|
256
|
+
const beforeEvent = willExpand ? new SigveloBeforeOpenEvent() : new SigveloBeforeCloseEvent({ source: this });
|
|
257
|
+
this.dispatchEvent(beforeEvent);
|
|
258
|
+
if (beforeEvent.defaultPrevented) return;
|
|
259
|
+
}
|
|
260
|
+
const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
261
|
+
const computedStyle = getComputedStyle(this);
|
|
262
|
+
const duration = prefersReducedMotion ? 0 : parseCssDuration(computedStyle.getPropertyValue("--duration"));
|
|
263
|
+
const easing = computedStyle.getPropertyValue("--easing");
|
|
264
|
+
const currentHeight = this.content.clientHeight;
|
|
265
|
+
this.expanded = willExpand;
|
|
266
|
+
if (willExpand) {
|
|
267
|
+
const targetHeight = this.content.scrollHeight;
|
|
268
|
+
await this.content.animate([{
|
|
269
|
+
height: `${currentHeight}px`,
|
|
270
|
+
overflow: "hidden"
|
|
271
|
+
}, {
|
|
272
|
+
height: `${targetHeight}px`,
|
|
273
|
+
overflow: "hidden"
|
|
274
|
+
}], {
|
|
275
|
+
duration,
|
|
276
|
+
easing
|
|
277
|
+
}).finished;
|
|
278
|
+
} else {
|
|
279
|
+
this.content.style.maxHeight = "var(--preview-height)";
|
|
280
|
+
this.content.style.overflow = "hidden";
|
|
281
|
+
const targetHeight = this.content.clientHeight;
|
|
282
|
+
this.content.style.removeProperty("max-height");
|
|
283
|
+
this.content.style.removeProperty("overflow");
|
|
284
|
+
await this.content.animate([{
|
|
285
|
+
height: `${currentHeight}px`,
|
|
286
|
+
maxHeight: "none",
|
|
287
|
+
overflow: "hidden"
|
|
288
|
+
}, {
|
|
289
|
+
height: `${targetHeight}px`,
|
|
290
|
+
maxHeight: "none",
|
|
291
|
+
overflow: "hidden"
|
|
292
|
+
}], {
|
|
293
|
+
duration,
|
|
294
|
+
easing
|
|
295
|
+
}).finished;
|
|
296
|
+
}
|
|
297
|
+
if (wasUserInteraction) this.dispatchEvent(willExpand ? new SigveloOpenEvent() : new SigveloCloseEvent());
|
|
298
|
+
}
|
|
299
|
+
render() {
|
|
300
|
+
return html`
|
|
301
|
+
<div
|
|
302
|
+
id="content"
|
|
303
|
+
part="content"
|
|
304
|
+
role="region"
|
|
305
|
+
aria-labelledby="trigger"
|
|
306
|
+
@scroll=${this.handleContentScroll}
|
|
307
|
+
>
|
|
308
|
+
<slot></slot>
|
|
309
|
+
${this.withoutShadow ? "" : html` <div id="shadow" part="shadow" aria-hidden="true"></div> `}
|
|
310
|
+
</div>
|
|
311
|
+
|
|
312
|
+
<button
|
|
313
|
+
id="trigger"
|
|
314
|
+
part="trigger"
|
|
315
|
+
aria-expanded="${this.expanded}"
|
|
316
|
+
aria-controls="content"
|
|
317
|
+
?disabled=${this.disabled}
|
|
318
|
+
@click="${this.handleClick}"
|
|
319
|
+
>
|
|
320
|
+
${this.expanded ? html`<slot name="collapse-label">${this.localize.term("collapse")}</slot>` : html`<slot name="expand-label">${this.localize.term("expand")}</slot>`}
|
|
321
|
+
</button>
|
|
322
|
+
`;
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
__decorate([query("#content")], SigveloExpander.prototype, "content", void 0);
|
|
326
|
+
__decorate([query("#trigger")], SigveloExpander.prototype, "trigger", void 0);
|
|
327
|
+
__decorate([property({
|
|
328
|
+
type: Boolean,
|
|
329
|
+
reflect: true
|
|
330
|
+
})], SigveloExpander.prototype, "expanded", void 0);
|
|
331
|
+
__decorate([property({
|
|
332
|
+
type: Boolean,
|
|
333
|
+
reflect: true
|
|
334
|
+
})], SigveloExpander.prototype, "disabled", void 0);
|
|
335
|
+
__decorate([property({
|
|
336
|
+
attribute: "without-shadow",
|
|
337
|
+
type: Boolean
|
|
338
|
+
})], SigveloExpander.prototype, "withoutShadow", void 0);
|
|
339
|
+
__decorate([eventOptions({ passive: true })], SigveloExpander.prototype, "handleContentScroll", null);
|
|
340
|
+
customElements.define("sigvelo-expander", SigveloExpander);
|
|
341
|
+
//#endregion
|
|
342
|
+
export { SigveloExpander as t };
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { t as __decorate } from "./decorate-DcF3lt7P.js";
|
|
2
|
+
import { css, html, nothing } from "lit";
|
|
3
|
+
import { property, query } from "lit/decorators.js";
|
|
4
|
+
import hostStyles from "@mcp-b/wc-support/styles/host.styles";
|
|
5
|
+
import { SigveloElement } from "@mcp-b/wc-support/base/sigvelo-element";
|
|
6
|
+
import { isDesignSystemTag } from "@mcp-b/wc-support/prefix";
|
|
7
|
+
//#region src/components/field/field.styles.ts
|
|
8
|
+
var field_styles_default = css`
|
|
9
|
+
:host {
|
|
10
|
+
display: flex;
|
|
11
|
+
flex-direction: column;
|
|
12
|
+
gap: 0.375em;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
[part="label"] {
|
|
16
|
+
display: flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
gap: 0.25em;
|
|
19
|
+
font-size: 0.875em;
|
|
20
|
+
font-weight: var(--sigvelo-font-weight-semibold);
|
|
21
|
+
color: var(--sigvelo-color-text);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.required {
|
|
25
|
+
color: var(--sigvelo-color-danger-bg);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.description {
|
|
29
|
+
font-size: max(12px, 0.8125em);
|
|
30
|
+
color: var(--sigvelo-color-text-muted);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.error {
|
|
34
|
+
font-size: max(12px, 0.8125em);
|
|
35
|
+
font-weight: var(--sigvelo-font-weight-semibold);
|
|
36
|
+
color: var(--sigvelo-color-danger-text);
|
|
37
|
+
}
|
|
38
|
+
`;
|
|
39
|
+
//#endregion
|
|
40
|
+
//#region src/components/field/field.ts
|
|
41
|
+
let fieldId = 0;
|
|
42
|
+
/**
|
|
43
|
+
* <sigvelo-field>
|
|
44
|
+
*
|
|
45
|
+
* @summary Wraps a form control with a label, description, and error message.
|
|
46
|
+
* @tag sigvelo-field
|
|
47
|
+
* @status experimental
|
|
48
|
+
* @since 1.0
|
|
49
|
+
*
|
|
50
|
+
* @slot - The form control (e.g. sigvelo-text-field, sigvelo-select).
|
|
51
|
+
* @slot label - Custom label content. Overrides the `label` attribute.
|
|
52
|
+
* @slot description - Custom description content. Overrides the `description` attribute.
|
|
53
|
+
* @slot error - Custom error content. Overrides the `error` attribute.
|
|
54
|
+
*
|
|
55
|
+
* @cssstate error - Applied when the field has an error.
|
|
56
|
+
*
|
|
57
|
+
* @example Default
|
|
58
|
+
* ```html
|
|
59
|
+
* <sigvelo-field label="Email" description="We'll never share your email.">
|
|
60
|
+
* <sigvelo-text-field placeholder="you@example.com"></sigvelo-text-field>
|
|
61
|
+
* </sigvelo-field>
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* @example With error
|
|
65
|
+
* ```html
|
|
66
|
+
* <sigvelo-field label="Username" error="Username is already taken.">
|
|
67
|
+
* <sigvelo-text-field value="admin"></sigvelo-text-field>
|
|
68
|
+
* </sigvelo-field>
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* @example Required
|
|
72
|
+
* ```html
|
|
73
|
+
* <sigvelo-field label="Full name" required>
|
|
74
|
+
* <sigvelo-text-field placeholder="Jane Doe"></sigvelo-text-field>
|
|
75
|
+
* </sigvelo-field>
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
var SigveloField = class extends SigveloElement {
|
|
79
|
+
constructor(..._args) {
|
|
80
|
+
super(..._args);
|
|
81
|
+
this.fieldId = `sigvelo-field-${++fieldId}`;
|
|
82
|
+
this.required = false;
|
|
83
|
+
}
|
|
84
|
+
static {
|
|
85
|
+
this.observeSlots = true;
|
|
86
|
+
}
|
|
87
|
+
static {
|
|
88
|
+
this.styles = [hostStyles, field_styles_default];
|
|
89
|
+
}
|
|
90
|
+
updated() {
|
|
91
|
+
this.customStates.set("error", !!this.error || this.slotsWithContent.has("error"));
|
|
92
|
+
this.syncControlSemantics();
|
|
93
|
+
}
|
|
94
|
+
slotText(slot, fallback = "") {
|
|
95
|
+
return slot?.assignedNodes({ flatten: true }).map((node) => node.textContent).join(" ").trim() || fallback;
|
|
96
|
+
}
|
|
97
|
+
syncControlSemantics() {
|
|
98
|
+
const label = this.slotText(this.labelSlot, this.label);
|
|
99
|
+
const hasError = !!this.error || this.slotsWithContent.has("error");
|
|
100
|
+
const description = hasError ? this.slotText(this.errorSlot, this.error) : this.slotText(this.descriptionSlot, this.description);
|
|
101
|
+
for (const control of this.controlSlot?.assignedElements({ flatten: true }) ?? []) {
|
|
102
|
+
if (!(control instanceof HTMLElement)) continue;
|
|
103
|
+
const fieldControl = control;
|
|
104
|
+
const isSigveloControl = isDesignSystemTag(control.localName);
|
|
105
|
+
if (isSigveloControl && "label" in fieldControl) fieldControl.label = label;
|
|
106
|
+
else if (label) control.setAttribute("aria-label", label);
|
|
107
|
+
else control.removeAttribute("aria-label");
|
|
108
|
+
if (isSigveloControl && "description" in fieldControl) fieldControl.description = description;
|
|
109
|
+
else if (description) control.setAttribute("aria-description", description);
|
|
110
|
+
else control.removeAttribute("aria-description");
|
|
111
|
+
if ("required" in fieldControl) {
|
|
112
|
+
fieldControl.required = this.required;
|
|
113
|
+
control.removeAttribute("aria-required");
|
|
114
|
+
} else if (this.required) control.setAttribute("aria-required", "true");
|
|
115
|
+
else control.removeAttribute("aria-required");
|
|
116
|
+
if (typeof fieldControl.setCustomValidity === "function") fieldControl.setCustomValidity(hasError ? description : "");
|
|
117
|
+
if (hasError) control.setAttribute("aria-invalid", "true");
|
|
118
|
+
else control.removeAttribute("aria-invalid");
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
handleLabelClick() {
|
|
122
|
+
const control = this.controlSlot?.assignedElements({ flatten: true })[0];
|
|
123
|
+
if (control instanceof HTMLElement) control.focus();
|
|
124
|
+
}
|
|
125
|
+
render() {
|
|
126
|
+
const labelId = `${this.fieldId}-label`;
|
|
127
|
+
const descId = `${this.fieldId}-desc`;
|
|
128
|
+
const errorId = `${this.fieldId}-error`;
|
|
129
|
+
return html`
|
|
130
|
+
<label id=${labelId} part="label" @click=${this.handleLabelClick}>
|
|
131
|
+
<slot name="label" @slotchange=${this.syncControlSemantics}>${this.label}</slot>
|
|
132
|
+
${this.required ? html`<span aria-hidden="true" class="required">${"*"}</span>` : nothing}
|
|
133
|
+
</label>
|
|
134
|
+
|
|
135
|
+
<div part="control">
|
|
136
|
+
<slot @slotchange=${this.syncControlSemantics}></slot>
|
|
137
|
+
</div>
|
|
138
|
+
|
|
139
|
+
${(this.description || this.slotsWithContent.has("description")) && !this.error ? html`<div id=${descId} part="description" class="description">
|
|
140
|
+
<slot name="description" @slotchange=${this.syncControlSemantics}
|
|
141
|
+
>${this.description}</slot
|
|
142
|
+
>
|
|
143
|
+
</div>` : nothing}
|
|
144
|
+
${this.error || this.slotsWithContent.has("error") ? html`<div id=${errorId} part="error" class="error" role="alert">
|
|
145
|
+
<slot name="error" @slotchange=${this.syncControlSemantics}>${this.error}</slot>
|
|
146
|
+
</div>` : nothing}
|
|
147
|
+
`;
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
__decorate([query("slot:not([name])")], SigveloField.prototype, "controlSlot", void 0);
|
|
151
|
+
__decorate([query("slot[name=\"label\"]")], SigveloField.prototype, "labelSlot", void 0);
|
|
152
|
+
__decorate([query("slot[name=\"description\"]")], SigveloField.prototype, "descriptionSlot", void 0);
|
|
153
|
+
__decorate([query("slot[name=\"error\"]")], SigveloField.prototype, "errorSlot", void 0);
|
|
154
|
+
__decorate([property()], SigveloField.prototype, "label", void 0);
|
|
155
|
+
__decorate([property()], SigveloField.prototype, "description", void 0);
|
|
156
|
+
__decorate([property()], SigveloField.prototype, "error", void 0);
|
|
157
|
+
__decorate([property({
|
|
158
|
+
type: Boolean,
|
|
159
|
+
reflect: true
|
|
160
|
+
})], SigveloField.prototype, "required", void 0);
|
|
161
|
+
customElements.define("sigvelo-field", SigveloField);
|
|
162
|
+
//#endregion
|
|
163
|
+
export { SigveloField as t };
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { CSSResultGroup } from "lit";
|
|
2
|
+
import { SigveloElement } from "@mcp-b/wc-support/base/sigvelo-element";
|
|
3
|
+
|
|
4
|
+
//#region src/components/field/field.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* <sigvelo-field>
|
|
7
|
+
*
|
|
8
|
+
* @summary Wraps a form control with a label, description, and error message.
|
|
9
|
+
* @tag sigvelo-field
|
|
10
|
+
* @status experimental
|
|
11
|
+
* @since 1.0
|
|
12
|
+
*
|
|
13
|
+
* @slot - The form control (e.g. sigvelo-text-field, sigvelo-select).
|
|
14
|
+
* @slot label - Custom label content. Overrides the `label` attribute.
|
|
15
|
+
* @slot description - Custom description content. Overrides the `description` attribute.
|
|
16
|
+
* @slot error - Custom error content. Overrides the `error` attribute.
|
|
17
|
+
*
|
|
18
|
+
* @cssstate error - Applied when the field has an error.
|
|
19
|
+
*
|
|
20
|
+
* @example Default
|
|
21
|
+
* ```html
|
|
22
|
+
* <sigvelo-field label="Email" description="We'll never share your email.">
|
|
23
|
+
* <sigvelo-text-field placeholder="you@example.com"></sigvelo-text-field>
|
|
24
|
+
* </sigvelo-field>
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @example With error
|
|
28
|
+
* ```html
|
|
29
|
+
* <sigvelo-field label="Username" error="Username is already taken.">
|
|
30
|
+
* <sigvelo-text-field value="admin"></sigvelo-text-field>
|
|
31
|
+
* </sigvelo-field>
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @example Required
|
|
35
|
+
* ```html
|
|
36
|
+
* <sigvelo-field label="Full name" required>
|
|
37
|
+
* <sigvelo-text-field placeholder="Jane Doe"></sigvelo-text-field>
|
|
38
|
+
* </sigvelo-field>
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
declare class SigveloField extends SigveloElement {
|
|
42
|
+
static observeSlots: boolean;
|
|
43
|
+
static styles: CSSResultGroup;
|
|
44
|
+
private fieldId;
|
|
45
|
+
private controlSlot;
|
|
46
|
+
private labelSlot;
|
|
47
|
+
private descriptionSlot;
|
|
48
|
+
private errorSlot;
|
|
49
|
+
/** The field label text. */
|
|
50
|
+
label: string;
|
|
51
|
+
/** Help text displayed below the control. */
|
|
52
|
+
description: string;
|
|
53
|
+
/** Error message displayed below the control. Puts the field in an error state. */
|
|
54
|
+
error: string;
|
|
55
|
+
/** Marks the field as required. Shows the required indicator on the label. */
|
|
56
|
+
required: boolean;
|
|
57
|
+
updated(): void;
|
|
58
|
+
private slotText;
|
|
59
|
+
private syncControlSemantics;
|
|
60
|
+
private handleLabelClick;
|
|
61
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
62
|
+
}
|
|
63
|
+
declare global {
|
|
64
|
+
interface HTMLElementTagNameMap {
|
|
65
|
+
"sigvelo-field": SigveloField;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//#endregion
|
|
69
|
+
export { SigveloField as t };
|