@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,752 @@
|
|
|
1
|
+
import { t as __decorate } from "./decorate-DcF3lt7P.js";
|
|
2
|
+
import { css, html } from "lit";
|
|
3
|
+
import { property, query, state } from "lit/decorators.js";
|
|
4
|
+
import hostStyles from "@mcp-b/wc-support/styles/host.styles";
|
|
5
|
+
import { SigveloFormControlElement } from "@mcp-b/wc-support/base/sigvelo-element";
|
|
6
|
+
import { classMap } from "lit/directives/class-map.js";
|
|
7
|
+
import { SigveloBlurEvent, SigveloChangeEvent, SigveloFocusEvent, SigveloInputEvent } from "@mcp-b/wc-support/events/form";
|
|
8
|
+
//#region src/components/toggle-icon/toggle-icon.styles.ts
|
|
9
|
+
var toggle_icon_styles_default = css`
|
|
10
|
+
:host {
|
|
11
|
+
--animation-speed: var(--sigvelo-motion-duration-layout);
|
|
12
|
+
--checked-color: #f59e0b;
|
|
13
|
+
--unchecked-color: var(--sigvelo-color-neutral-bg);
|
|
14
|
+
|
|
15
|
+
display: inline-flex;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
button {
|
|
19
|
+
/* Make button a grid container */
|
|
20
|
+
display: grid;
|
|
21
|
+
appearance: none;
|
|
22
|
+
position: relative;
|
|
23
|
+
grid-template-areas: "icon";
|
|
24
|
+
align-items: center;
|
|
25
|
+
justify-items: center;
|
|
26
|
+
width: 100%;
|
|
27
|
+
padding: 0.25em;
|
|
28
|
+
overflow: hidden;
|
|
29
|
+
border: none;
|
|
30
|
+
border-radius: var(--sigvelo-radius-md);
|
|
31
|
+
background: none;
|
|
32
|
+
font: inherit;
|
|
33
|
+
text-decoration: none;
|
|
34
|
+
vertical-align: middle;
|
|
35
|
+
white-space: nowrap;
|
|
36
|
+
cursor: pointer;
|
|
37
|
+
touch-action: manipulation;
|
|
38
|
+
transition:
|
|
39
|
+
var(--sigvelo-motion-duration-interaction) color ease,
|
|
40
|
+
var(--sigvelo-motion-duration-interaction) border-color ease,
|
|
41
|
+
var(--sigvelo-motion-duration-interaction) background-color ease,
|
|
42
|
+
var(--sigvelo-motion-duration-interaction) translate ease,
|
|
43
|
+
var(--animation-speed) opacity ease,
|
|
44
|
+
var(--animation-speed) transform ease;
|
|
45
|
+
user-select: none;
|
|
46
|
+
-webkit-user-select: none;
|
|
47
|
+
|
|
48
|
+
@media (prefers-reduced-motion) {
|
|
49
|
+
--animation-speed: 0;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
&:focus {
|
|
53
|
+
outline: none;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
&:focus-visible {
|
|
57
|
+
outline: var(--sigvelo-focus-ring);
|
|
58
|
+
outline-offset: var(--sigvelo-focus-offset);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* Sizes */
|
|
62
|
+
&.xs {
|
|
63
|
+
font-size: calc(var(--sigvelo-control-text-xs) * 1.25);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
&.sm {
|
|
67
|
+
font-size: calc(var(--sigvelo-control-text-sm) * 1.25);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
&.md {
|
|
71
|
+
font-size: calc(var(--sigvelo-control-text-md) * 1.25);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
&.lg {
|
|
75
|
+
font-size: calc(var(--sigvelo-control-text-lg) * 1.25);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
&.xl {
|
|
79
|
+
font-size: calc(var(--sigvelo-control-text-xl) * 1.25);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* Both slots are positioned in the same grid area to ensure overlap */
|
|
84
|
+
.checked-icon,
|
|
85
|
+
.unchecked-icon {
|
|
86
|
+
display: grid;
|
|
87
|
+
grid-area: icon;
|
|
88
|
+
place-items: center;
|
|
89
|
+
width: 100%;
|
|
90
|
+
height: 100%;
|
|
91
|
+
transition:
|
|
92
|
+
opacity var(--sigvelo-motion-duration-interaction) ease,
|
|
93
|
+
transform var(--sigvelo-motion-duration-interaction) ease;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* Untoggled state */
|
|
97
|
+
.unchecked-icon {
|
|
98
|
+
transform: scale(1);
|
|
99
|
+
color: var(--unchecked-color);
|
|
100
|
+
opacity: 1;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.checked-icon {
|
|
104
|
+
transform: scale(0.8);
|
|
105
|
+
color: var(--checked-color);
|
|
106
|
+
opacity: 0;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* Toggled state */
|
|
110
|
+
.checked .checked-icon {
|
|
111
|
+
transform: scale(1);
|
|
112
|
+
opacity: 1;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.checked .unchecked-icon {
|
|
116
|
+
transform: scale(0.8);
|
|
117
|
+
opacity: 0;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* Disabled */
|
|
121
|
+
.disabled {
|
|
122
|
+
cursor: not-allowed;
|
|
123
|
+
opacity: 0.5;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* Fade animation */
|
|
127
|
+
button[data-effect="fade"] {
|
|
128
|
+
.checked-icon,
|
|
129
|
+
.unchecked-icon {
|
|
130
|
+
transform: scale(1);
|
|
131
|
+
transition: opacity var(--animation-speed) ease;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* Flip X animation */
|
|
136
|
+
button[data-effect="flip-x"] {
|
|
137
|
+
.checked-icon,
|
|
138
|
+
.unchecked-icon {
|
|
139
|
+
backface-visibility: hidden; /* Hide the back face during animation */
|
|
140
|
+
transition:
|
|
141
|
+
opacity var(--animation-speed) ease,
|
|
142
|
+
transform var(--animation-speed) ease;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.unchecked-icon {
|
|
146
|
+
transform: rotateY(0deg);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
&:dir(ltr) .checked-icon {
|
|
150
|
+
transform: rotateY(180deg);
|
|
151
|
+
opacity: 0;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
&:dir(rtl) .checked-icon {
|
|
155
|
+
transform: rotateY(-180deg);
|
|
156
|
+
opacity: 0;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
&:dir(ltr).checked .unchecked-icon {
|
|
160
|
+
transform: rotateY(-180deg);
|
|
161
|
+
opacity: 0;
|
|
162
|
+
transition:
|
|
163
|
+
opacity calc(var(--animation-speed) * 0.6) ease,
|
|
164
|
+
transform var(--animation-speed) ease;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
&:dir(rtl).checked .unchecked-icon {
|
|
168
|
+
transform: rotateY(180deg);
|
|
169
|
+
opacity: 0;
|
|
170
|
+
transition:
|
|
171
|
+
opacity calc(var(--animation-speed) * 0.6) ease,
|
|
172
|
+
transform var(--animation-speed) ease;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
&.checked .checked-icon {
|
|
176
|
+
transform: rotateY(0deg);
|
|
177
|
+
opacity: 1;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/* Flip Y animation */
|
|
182
|
+
button[data-effect="flip-y"] {
|
|
183
|
+
.checked-icon,
|
|
184
|
+
.unchecked-icon {
|
|
185
|
+
backface-visibility: hidden; /* Hide the back face during animation */
|
|
186
|
+
transition:
|
|
187
|
+
opacity var(--animation-speed) ease,
|
|
188
|
+
transform var(--animation-speed) ease;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.unchecked-icon {
|
|
192
|
+
transform: rotateX(0deg);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.checked-icon {
|
|
196
|
+
transform: rotateX(180deg);
|
|
197
|
+
opacity: 0;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
&.checked .unchecked-icon {
|
|
201
|
+
transform: rotateX(-180deg);
|
|
202
|
+
opacity: 0;
|
|
203
|
+
/* Add a slightly faster opacity transition to hide it more quickly */
|
|
204
|
+
transition:
|
|
205
|
+
opacity calc(var(--animation-speed) * 0.6) ease,
|
|
206
|
+
transform var(--animation-speed) ease;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
&.checked .checked-icon {
|
|
210
|
+
transform: rotateX(0deg);
|
|
211
|
+
opacity: 1;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/* Translate X animation */
|
|
216
|
+
button[data-effect="translate-x"] {
|
|
217
|
+
.checked-icon,
|
|
218
|
+
.unchecked-icon {
|
|
219
|
+
transition:
|
|
220
|
+
opacity var(--animation-speed) ease,
|
|
221
|
+
transform var(--animation-speed) ease;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.unchecked-icon {
|
|
225
|
+
transform: translateX(0);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
&:dir(ltr) .checked-icon {
|
|
229
|
+
transform: translateX(-20px);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
&:dir(rtl) .checked-icon {
|
|
233
|
+
transform: translateX(20px);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
&:dir(ltr).checked .unchecked-icon {
|
|
237
|
+
transform: translateX(20px);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
&:dir(rtl).checked .unchecked-icon {
|
|
241
|
+
transform: translateX(-20px);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
&.checked .checked-icon {
|
|
245
|
+
transform: translateX(0);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/* Translate Y animation */
|
|
250
|
+
button[data-effect="translate-y"] {
|
|
251
|
+
.checked-icon,
|
|
252
|
+
.unchecked-icon {
|
|
253
|
+
transition:
|
|
254
|
+
opacity var(--animation-speed) ease,
|
|
255
|
+
transform var(--animation-speed) ease;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.unchecked-icon {
|
|
259
|
+
transform: translateY(0);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.checked-icon {
|
|
263
|
+
transform: translateY(-20px);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
&.checked .unchecked-icon {
|
|
267
|
+
transform: translateY(20px);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
&.checked .checked-icon {
|
|
271
|
+
transform: translateY(0);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/* Scale animation */
|
|
276
|
+
button[data-effect="scale"] {
|
|
277
|
+
.checked-icon,
|
|
278
|
+
.unchecked-icon {
|
|
279
|
+
transition:
|
|
280
|
+
opacity var(--animation-speed) ease,
|
|
281
|
+
transform var(--animation-speed) var(--sigvelo-ease-snappy);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.unchecked-icon {
|
|
285
|
+
transform: scale(1);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.checked-icon {
|
|
289
|
+
transform: scale(0);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
&.checked .unchecked-icon {
|
|
293
|
+
transform: scale(0);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
&.checked .checked-icon {
|
|
297
|
+
transform: scale(1);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
`;
|
|
301
|
+
//#endregion
|
|
302
|
+
//#region src/components/toggle-icon/toggle-icon.ts
|
|
303
|
+
const nativeFileInput = document.createElement("input");
|
|
304
|
+
nativeFileInput.name = "sigvelo-faux-input";
|
|
305
|
+
nativeFileInput.type = "checkbox";
|
|
306
|
+
nativeFileInput.required = true;
|
|
307
|
+
const VALIDATION_MESSAGE = nativeFileInput.validationMessage;
|
|
308
|
+
/**
|
|
309
|
+
* <sigvelo-toggle-icon>
|
|
310
|
+
*
|
|
311
|
+
* @summary Similar to checkboxes, except with icons to represent the checked and unchecked states.
|
|
312
|
+
* @tag sigvelo-toggle-icon
|
|
313
|
+
* @documentation https://design-system.sigvelo.com/docs/components/toggle-icon
|
|
314
|
+
* @status stable
|
|
315
|
+
* @since 1.0
|
|
316
|
+
*
|
|
317
|
+
* @slot checked - The icon to show when checked. Works best with a `<sigvelo-icon>` element.
|
|
318
|
+
* @slot unchecked - The default icon to show when unchecked. Works best with a `<sigvelo-icon>` element.
|
|
319
|
+
*
|
|
320
|
+
* @event sigvelo-blur - Emitted when the toggle icon loses focus. This event does not bubble.
|
|
321
|
+
* @event sigvelo-change - Emitted when the user commits changes to the toggle's value.
|
|
322
|
+
* @event sigvelo-focus - Emitted when the checkbox receives focus. This event does not bubble.
|
|
323
|
+
* @event sigvelo-input - Emitted when the checkbox receives input.
|
|
324
|
+
*
|
|
325
|
+
* @csspart button - The internal button that contains the toggle icons, a `<button>` element.
|
|
326
|
+
*
|
|
327
|
+
* @cssproperty [--animation-speed=300ms] - The animation speed to use when effects are selected.
|
|
328
|
+
* @cssproperty [--checked-color=#f59e0b] - The color to use for checked toggle icons.
|
|
329
|
+
* @cssproperty [--unchecked-color=var(--sigvelo-color-neutral-bg)] - The color to use for unchecked toggle icons.
|
|
330
|
+
*
|
|
331
|
+
* @cssstate checked - Applied when the toggle icon is active.
|
|
332
|
+
* @cssstate disabled - Applied when the toggle icon is disabled.
|
|
333
|
+
* @cssstate focused - Applied when the toggle icon has focus.
|
|
334
|
+
* @cssstate user-valid - Applied when the toggle icon is valid and the user has sufficiently interacted with it.
|
|
335
|
+
* @cssstate user-invalid - Applied when the toggle icon is invalid and the user has sufficiently interacted with it.
|
|
336
|
+
*
|
|
337
|
+
* @example Default
|
|
338
|
+
* Toggle icons can be used just like checkboxes and switches to turn features on and off. You can listen for state changes with the `sigvelo-input` event and submit them with forms by adding `name` and `value` attributes.
|
|
339
|
+
*
|
|
340
|
+
* Assistive devices will recognize toggle icons as toggle buttons. The default icon is a star, but you can customize it with any icon you want.
|
|
341
|
+
*
|
|
342
|
+
* ```html
|
|
343
|
+
* <sigvelo-toggle-icon
|
|
344
|
+
* label="Star this"
|
|
345
|
+
* effect="fade"
|
|
346
|
+
* ></sigvelo-toggle-icon>
|
|
347
|
+
*
|
|
348
|
+
* <sigvelo-toggle-icon
|
|
349
|
+
* label="Save to favorites"
|
|
350
|
+
* effect="scale"
|
|
351
|
+
* style="--checked-color: crimson;"
|
|
352
|
+
* >
|
|
353
|
+
* <sigvelo-icon slot="unchecked" name="heart" family="outline"></sigvelo-icon>
|
|
354
|
+
* <sigvelo-icon slot="checked" name="heart" family="filled"></sigvelo-icon>
|
|
355
|
+
* </sigvelo-toggle-icon>
|
|
356
|
+
*
|
|
357
|
+
* <sigvelo-toggle-icon
|
|
358
|
+
* label="Like this post"
|
|
359
|
+
* effect="flip-x"
|
|
360
|
+
* style="--checked-color: dodgerblue;"
|
|
361
|
+
* >
|
|
362
|
+
* <sigvelo-icon slot="unchecked" name="thumb-up" family="outline"></sigvelo-icon>
|
|
363
|
+
* <sigvelo-icon slot="checked" name="thumb-up" family="filled"></sigvelo-icon>
|
|
364
|
+
* </sigvelo-toggle-icon>
|
|
365
|
+
*
|
|
366
|
+
* <sigvelo-toggle-icon
|
|
367
|
+
* label="Play / pause"
|
|
368
|
+
* effect="scale"
|
|
369
|
+
* style="
|
|
370
|
+
* --checked-color: var(--sigvelo-color-neutral-bg);
|
|
371
|
+
* --unchecked-color: var(--sigvelo-color-neutral-bg);
|
|
372
|
+
* "
|
|
373
|
+
* >
|
|
374
|
+
* <sigvelo-icon slot="unchecked" name="player-pause" family="filled"></sigvelo-icon>
|
|
375
|
+
* <sigvelo-icon slot="checked" name="player-play" family="filled"></sigvelo-icon>
|
|
376
|
+
* </sigvelo-toggle-icon>
|
|
377
|
+
* ```
|
|
378
|
+
*
|
|
379
|
+
* @example Checked initially
|
|
380
|
+
* Add the `checked` attribute to check the toggle icon initially.
|
|
381
|
+
*
|
|
382
|
+
* ```html
|
|
383
|
+
* <sigvelo-toggle-icon
|
|
384
|
+
* label="Star this"
|
|
385
|
+
* name="favorite"
|
|
386
|
+
* value="1"
|
|
387
|
+
* checked
|
|
388
|
+
* ></sigvelo-toggle-icon>
|
|
389
|
+
* ```
|
|
390
|
+
*
|
|
391
|
+
* @example Custom icons
|
|
392
|
+
* Place a `<sigvelo-icon>` into the default slot to show a custom unchecked state. Place one into the `checked` slot to show a custom checked state.
|
|
393
|
+
*
|
|
394
|
+
* You can use any icon you want for each state, but `outline` for unchecked icons and `filled` for checked icons usually work best. Use the `--unchecked-color` and `--checked-color` custom properties to change colors.
|
|
395
|
+
*
|
|
396
|
+
* ```html
|
|
397
|
+
* <sigvelo-toggle-icon
|
|
398
|
+
* label="Save to favorites"
|
|
399
|
+
* style="--checked-color: crimson;"
|
|
400
|
+
* >
|
|
401
|
+
* <sigvelo-icon slot="unchecked" name="heart" family="outline"></sigvelo-icon>
|
|
402
|
+
* <sigvelo-icon slot="checked" name="heart" family="filled"></sigvelo-icon>
|
|
403
|
+
* </sigvelo-toggle-icon>
|
|
404
|
+
*
|
|
405
|
+
* <sigvelo-toggle-icon
|
|
406
|
+
* label="Like this post"
|
|
407
|
+
* style="--checked-color: dodgerblue;"
|
|
408
|
+
* >
|
|
409
|
+
* <sigvelo-icon slot="unchecked" name="thumb-up" family="outline"></sigvelo-icon>
|
|
410
|
+
* <sigvelo-icon slot="checked" name="thumb-up" family="filled"></sigvelo-icon>
|
|
411
|
+
* </sigvelo-toggle-icon>
|
|
412
|
+
*
|
|
413
|
+
* <sigvelo-toggle-icon
|
|
414
|
+
* label="Enable filter"
|
|
415
|
+
* style="--checked-color: blueviolet;"
|
|
416
|
+
* >
|
|
417
|
+
* <sigvelo-icon slot="unchecked" name="filter" family="outline"></sigvelo-icon>
|
|
418
|
+
* <sigvelo-icon slot="checked" name="filter" family="filled"></sigvelo-icon>
|
|
419
|
+
* </sigvelo-toggle-icon>
|
|
420
|
+
* ```
|
|
421
|
+
*
|
|
422
|
+
* @example Changing the effect
|
|
423
|
+
* Set the `effect` attribute to change the toggle icon's animation. This works great with custom icons.
|
|
424
|
+
*
|
|
425
|
+
* ```html
|
|
426
|
+
* <sigvelo-toggle-icon
|
|
427
|
+
* label="Star this"
|
|
428
|
+
* effect="fade"
|
|
429
|
+
* ></sigvelo-toggle-icon>
|
|
430
|
+
*
|
|
431
|
+
* <sigvelo-toggle-icon
|
|
432
|
+
* label="Love this"
|
|
433
|
+
* effect="scale"
|
|
434
|
+
* style="--checked-color: crimson;"
|
|
435
|
+
* >
|
|
436
|
+
* <sigvelo-icon slot="unchecked" name="heart" family="outline"></sigvelo-icon>
|
|
437
|
+
* <sigvelo-icon slot="checked" name="heart" family="filled"></sigvelo-icon>
|
|
438
|
+
* </sigvelo-toggle-icon>
|
|
439
|
+
*
|
|
440
|
+
* <sigvelo-toggle-icon
|
|
441
|
+
* label="Mark as complete"
|
|
442
|
+
* effect="flip-x"
|
|
443
|
+
* style="--checked-color: cadetblue;"
|
|
444
|
+
* >
|
|
445
|
+
* <sigvelo-icon slot="unchecked" name="clipboard" family="outline"></sigvelo-icon>
|
|
446
|
+
* <sigvelo-icon slot="checked" name="clipboard-check" family="filled"></sigvelo-icon>
|
|
447
|
+
* </sigvelo-toggle-icon>
|
|
448
|
+
*
|
|
449
|
+
* <sigvelo-toggle-icon
|
|
450
|
+
* label="Secure this"
|
|
451
|
+
* effect="flip-y"
|
|
452
|
+
* style="--checked-color: forestgreen;"
|
|
453
|
+
* >
|
|
454
|
+
* <sigvelo-icon slot="unchecked" name="shield" family="outline"></sigvelo-icon>
|
|
455
|
+
* <sigvelo-icon slot="checked" name="shield-check" family="filled"></sigvelo-icon>
|
|
456
|
+
* </sigvelo-toggle-icon>
|
|
457
|
+
*
|
|
458
|
+
* <sigvelo-toggle-icon
|
|
459
|
+
* label="Ship this"
|
|
460
|
+
* effect="translate-x"
|
|
461
|
+
* style="--checked-color: blueviolet;"
|
|
462
|
+
* >
|
|
463
|
+
* <sigvelo-icon slot="unchecked" name="truck" family="outline"></sigvelo-icon>
|
|
464
|
+
* <sigvelo-icon slot="checked" name="truck" family="filled"></sigvelo-icon>
|
|
465
|
+
* </sigvelo-toggle-icon>
|
|
466
|
+
*
|
|
467
|
+
* <sigvelo-toggle-icon
|
|
468
|
+
* label="Enable reader mode"
|
|
469
|
+
* effect="translate-y"
|
|
470
|
+
* style="--checked-color: dodgerblue;"
|
|
471
|
+
* >
|
|
472
|
+
* <sigvelo-icon slot="unchecked" name="eyeglass" family="outline"></sigvelo-icon>
|
|
473
|
+
* <sigvelo-icon slot="checked" name="eyeglass" family="filled"></sigvelo-icon>
|
|
474
|
+
* </sigvelo-toggle-icon>
|
|
475
|
+
* ```
|
|
476
|
+
*
|
|
477
|
+
* @example Sizes
|
|
478
|
+
* Use the `size` attribute to change the size of the toggle icon.
|
|
479
|
+
*
|
|
480
|
+
* ```html
|
|
481
|
+
* <sigvelo-toggle-icon size="xs"></sigvelo-toggle-icon>
|
|
482
|
+
* <sigvelo-toggle-icon size="sm"></sigvelo-toggle-icon>
|
|
483
|
+
* <sigvelo-toggle-icon size="md"></sigvelo-toggle-icon>
|
|
484
|
+
* <sigvelo-toggle-icon size="lg"></sigvelo-toggle-icon>
|
|
485
|
+
* <sigvelo-toggle-icon size="xl"></sigvelo-toggle-icon>
|
|
486
|
+
* ```
|
|
487
|
+
*
|
|
488
|
+
* @example Disabling
|
|
489
|
+
* Use the `disabled` attribute to disable the toggle icon.
|
|
490
|
+
*
|
|
491
|
+
* ```html
|
|
492
|
+
* <sigvelo-toggle-icon disabled></sigvelo-toggle-icon>
|
|
493
|
+
* <sigvelo-toggle-icon checked disabled></sigvelo-toggle-icon>
|
|
494
|
+
* ```
|
|
495
|
+
*
|
|
496
|
+
* @example Validation
|
|
497
|
+
* The `required` attribute can be applied to enable validation using the Constraint Validation API. This will prevent form submission until the toggle icon is checked.
|
|
498
|
+
*
|
|
499
|
+
* ```html
|
|
500
|
+
* <form action="about:blank" method="get" target="_blank">
|
|
501
|
+
* <sigvelo-toggle-icon
|
|
502
|
+
* label="Star this"
|
|
503
|
+
* name="star"
|
|
504
|
+
* value="1"
|
|
505
|
+
* required
|
|
506
|
+
* ></sigvelo-toggle-icon>
|
|
507
|
+
* <br><br>
|
|
508
|
+
* <sigvelo-button type="submit" color="primary">Submit</sigvelo-button>
|
|
509
|
+
* <sigvelo-button type="reset">Reset</sigvelo-button>
|
|
510
|
+
* </form>
|
|
511
|
+
* ```
|
|
512
|
+
*
|
|
513
|
+
* @example Using custom validation
|
|
514
|
+
* Use the `setCustomValidity()` method to make the toggle icon invalid and show a custom error message on submit. This will override all other validation parameters. To clear the error, remove the attribute or set it to an empty string.
|
|
515
|
+
*
|
|
516
|
+
* ```html
|
|
517
|
+
* <form action="about:blank" method="get" target="_blank" id="toggle__custom-validation">
|
|
518
|
+
* <sigvelo-toggle-icon
|
|
519
|
+
* label="Star this"
|
|
520
|
+
* name="star"
|
|
521
|
+
* value="1"
|
|
522
|
+
* required
|
|
523
|
+
* ></sigvelo-toggle-icon>
|
|
524
|
+
* <br><br>
|
|
525
|
+
* <sigvelo-button type="submit" color="primary">Submit</sigvelo-button>
|
|
526
|
+
* <sigvelo-button type="reset">Reset</sigvelo-button>
|
|
527
|
+
* </form>
|
|
528
|
+
*
|
|
529
|
+
* <script type="module">
|
|
530
|
+
* import { allDefined } from '/dist/sigvelo.js';
|
|
531
|
+
*
|
|
532
|
+
* await allDefined();
|
|
533
|
+
*
|
|
534
|
+
* const form = document.getElementById('toggle__custom-validation');
|
|
535
|
+
* const toggleIcon = form.querySelector('sigvelo-toggle-icon');
|
|
536
|
+
*
|
|
537
|
+
* toggleIcon.setCustomValidity('Not so fast, bubba!');
|
|
538
|
+
* <\/script>
|
|
539
|
+
* ```
|
|
540
|
+
*
|
|
541
|
+
* @example Styling validation
|
|
542
|
+
* You can style valid and invalid toggle icons using the `:valid` and `:invalid` pseudo classes.
|
|
543
|
+
*
|
|
544
|
+
* ```html
|
|
545
|
+
* <form action="about:blank" method="get" target="_blank" class="toggle__validation-pseudo">
|
|
546
|
+
* <sigvelo-toggle-icon
|
|
547
|
+
* label="Star this"
|
|
548
|
+
* name="star"
|
|
549
|
+
* value="1"
|
|
550
|
+
* required
|
|
551
|
+
* ></sigvelo-toggle-icon>
|
|
552
|
+
* <br><br>
|
|
553
|
+
* <sigvelo-button type="submit" color="primary">Submit</sigvelo-button>
|
|
554
|
+
* <sigvelo-button type="reset">Reset</sigvelo-button>
|
|
555
|
+
* </form>
|
|
556
|
+
*
|
|
557
|
+
* <style>
|
|
558
|
+
* .toggle__validation-pseudo {
|
|
559
|
+
* sigvelo-toggle-icon:valid {
|
|
560
|
+
* outline: solid 2px var(--sigvelo-color-success-border);
|
|
561
|
+
* outline-offset: .5rem;
|
|
562
|
+
* }
|
|
563
|
+
*
|
|
564
|
+
* sigvelo-toggle-icon:invalid {
|
|
565
|
+
* outline: solid 2px var(--sigvelo-color-danger-border);
|
|
566
|
+
* outline-offset: .5rem;
|
|
567
|
+
* }
|
|
568
|
+
* }
|
|
569
|
+
* </style>
|
|
570
|
+
* ```
|
|
571
|
+
*
|
|
572
|
+
* However, these selectors will match even before the user has had a chance to fill out the form. More often than not, you'll want to use the `user-valid` and `user-invalid` custom states instead. This way, validation styles are only shown _after_ the user interacts with the form control or when the form is submitted.
|
|
573
|
+
*
|
|
574
|
+
* ```html
|
|
575
|
+
* <form action="about:blank" method="get" target="_blank" class="toggle__validation-custom">
|
|
576
|
+
* <sigvelo-toggle-icon
|
|
577
|
+
* label="Star this"
|
|
578
|
+
* name="star"
|
|
579
|
+
* value="1"
|
|
580
|
+
* required
|
|
581
|
+
* ></sigvelo-toggle-icon>
|
|
582
|
+
* <br><br>
|
|
583
|
+
* <sigvelo-button type="submit" color="primary">Submit</sigvelo-button>
|
|
584
|
+
* <sigvelo-button type="reset">Reset</sigvelo-button>
|
|
585
|
+
* </form>
|
|
586
|
+
*
|
|
587
|
+
* <style>
|
|
588
|
+
* .toggle__validation-custom {
|
|
589
|
+
* sigvelo-toggle-icon:state(user-valid) {
|
|
590
|
+
* outline: solid 2px var(--sigvelo-color-success-border);
|
|
591
|
+
* outline-offset: .5rem;
|
|
592
|
+
* }
|
|
593
|
+
*
|
|
594
|
+
* sigvelo-toggle-icon:state(user-invalid) {
|
|
595
|
+
* outline: solid 2px var(--sigvelo-color-danger-border);
|
|
596
|
+
* outline-offset: .5rem;
|
|
597
|
+
* }
|
|
598
|
+
* }
|
|
599
|
+
* </style>
|
|
600
|
+
* ```
|
|
601
|
+
*/
|
|
602
|
+
var SigveloToggleIcon = class extends SigveloFormControlElement {
|
|
603
|
+
constructor(..._args) {
|
|
604
|
+
super(..._args);
|
|
605
|
+
this.isInvalid = false;
|
|
606
|
+
this.hadUserInteraction = false;
|
|
607
|
+
this.wasSubmitted = false;
|
|
608
|
+
this.value = "";
|
|
609
|
+
this.checked = false;
|
|
610
|
+
this.disabled = false;
|
|
611
|
+
this.size = "md";
|
|
612
|
+
this.effect = "none";
|
|
613
|
+
this.required = false;
|
|
614
|
+
}
|
|
615
|
+
static {
|
|
616
|
+
this.shadowRootOptions = {
|
|
617
|
+
...SigveloFormControlElement.shadowRootOptions,
|
|
618
|
+
delegatesFocus: true
|
|
619
|
+
};
|
|
620
|
+
}
|
|
621
|
+
static {
|
|
622
|
+
this.formAssociated = true;
|
|
623
|
+
}
|
|
624
|
+
static {
|
|
625
|
+
this.styles = [hostStyles, toggle_icon_styles_default];
|
|
626
|
+
}
|
|
627
|
+
get focusableAnchor() {
|
|
628
|
+
return this.button;
|
|
629
|
+
}
|
|
630
|
+
connectedCallback() {
|
|
631
|
+
super.connectedCallback();
|
|
632
|
+
this.addEventListener("invalid", this.handleHostInvalid);
|
|
633
|
+
}
|
|
634
|
+
disconnectedCallback() {
|
|
635
|
+
super.disconnectedCallback();
|
|
636
|
+
this.removeEventListener("invalid", this.handleHostInvalid);
|
|
637
|
+
}
|
|
638
|
+
updated(changedProperties) {
|
|
639
|
+
this.updateValidity();
|
|
640
|
+
if (changedProperties.has("checked") || changedProperties.has("value")) this.internals.setFormValue(this.checked ? this.value : null);
|
|
641
|
+
if (changedProperties.has("checked")) this.customStates.set("checked", this.checked);
|
|
642
|
+
if (changedProperties.has("disabled")) this.customStates.set("disabled", this.disabled);
|
|
643
|
+
if (this.hadUserInteraction || this.wasSubmitted) {
|
|
644
|
+
this.customStates.set("user-invalid", this.isInvalid);
|
|
645
|
+
this.customStates.set("user-valid", !this.isInvalid);
|
|
646
|
+
} else {
|
|
647
|
+
this.customStates.set("user-invalid", false);
|
|
648
|
+
this.customStates.set("user-valid", false);
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
/** @internal Called when a containing fieldset is disabled. */
|
|
652
|
+
formDisabledCallback(isDisabled) {
|
|
653
|
+
this.disabled = isDisabled;
|
|
654
|
+
}
|
|
655
|
+
/** @internal Called when the form is reset. */
|
|
656
|
+
formResetCallback() {
|
|
657
|
+
this.isInvalid = false;
|
|
658
|
+
this.hadUserInteraction = false;
|
|
659
|
+
this.wasSubmitted = false;
|
|
660
|
+
this.checked = this.hasAttribute("checked");
|
|
661
|
+
}
|
|
662
|
+
handleBlur() {
|
|
663
|
+
this.customStates.set("focused", false);
|
|
664
|
+
this.dispatchEvent(new SigveloBlurEvent());
|
|
665
|
+
}
|
|
666
|
+
handleClick() {
|
|
667
|
+
if (this.disabled) return;
|
|
668
|
+
this.checked = !this.checked;
|
|
669
|
+
this.dispatchEvent(new SigveloChangeEvent());
|
|
670
|
+
this.dispatchEvent(new Event("change", {
|
|
671
|
+
bubbles: true,
|
|
672
|
+
composed: true
|
|
673
|
+
}));
|
|
674
|
+
this.dispatchEvent(new SigveloInputEvent());
|
|
675
|
+
this.dispatchEvent(new InputEvent("input"));
|
|
676
|
+
}
|
|
677
|
+
handleFocus() {
|
|
678
|
+
this.customStates.set("focused", true);
|
|
679
|
+
this.dispatchEvent(new SigveloFocusEvent());
|
|
680
|
+
}
|
|
681
|
+
handleHostInvalid() {
|
|
682
|
+
this.wasSubmitted = true;
|
|
683
|
+
}
|
|
684
|
+
/** Sets the form control's validity */
|
|
685
|
+
async updateValidity() {
|
|
686
|
+
await this.updateComplete;
|
|
687
|
+
const hasCustomValidity = this.getCustomValidity().length > 0;
|
|
688
|
+
const validationMessage = hasCustomValidity ? this.getCustomValidity() : VALIDATION_MESSAGE;
|
|
689
|
+
const flags = {
|
|
690
|
+
customError: hasCustomValidity,
|
|
691
|
+
valueMissing: this.required && !this.checked
|
|
692
|
+
};
|
|
693
|
+
this.isInvalid = hasCustomValidity ? true : !this.checked;
|
|
694
|
+
this.internals.setValidity(flags, validationMessage, this.focusableAnchor);
|
|
695
|
+
}
|
|
696
|
+
render() {
|
|
697
|
+
return html`
|
|
698
|
+
<button
|
|
699
|
+
part="button"
|
|
700
|
+
class=${classMap({
|
|
701
|
+
xs: this.size === "xs",
|
|
702
|
+
sm: this.size === "sm",
|
|
703
|
+
md: this.size === "md",
|
|
704
|
+
lg: this.size === "lg",
|
|
705
|
+
xl: this.size === "xl",
|
|
706
|
+
checked: this.checked,
|
|
707
|
+
disabled: this.disabled
|
|
708
|
+
})}
|
|
709
|
+
data-effect=${this.effect}
|
|
710
|
+
name=${this.name}
|
|
711
|
+
value=${this.value}
|
|
712
|
+
type="button"
|
|
713
|
+
aria-label=${this.label}
|
|
714
|
+
aria-pressed=${this.checked ? "true" : "false"}
|
|
715
|
+
.disabled=${this.disabled}
|
|
716
|
+
.required=${this.required}
|
|
717
|
+
@click=${this.handleClick}
|
|
718
|
+
@focus=${this.handleFocus}
|
|
719
|
+
@blur=${this.handleBlur}
|
|
720
|
+
>
|
|
721
|
+
<slot name="unchecked" class="unchecked-icon">
|
|
722
|
+
<sigvelo-icon name="star" family="outline" library="system"></sigvelo-icon>
|
|
723
|
+
</slot>
|
|
724
|
+
<slot name="checked" class="checked-icon">
|
|
725
|
+
<sigvelo-icon name="star" family="filled" library="system"></sigvelo-icon>
|
|
726
|
+
</slot>
|
|
727
|
+
</button>
|
|
728
|
+
`;
|
|
729
|
+
}
|
|
730
|
+
};
|
|
731
|
+
__decorate([query("button")], SigveloToggleIcon.prototype, "button", void 0);
|
|
732
|
+
__decorate([state()], SigveloToggleIcon.prototype, "isInvalid", void 0);
|
|
733
|
+
__decorate([state()], SigveloToggleIcon.prototype, "hadUserInteraction", void 0);
|
|
734
|
+
__decorate([state()], SigveloToggleIcon.prototype, "wasSubmitted", void 0);
|
|
735
|
+
__decorate([property()], SigveloToggleIcon.prototype, "label", void 0);
|
|
736
|
+
__decorate([property({ reflect: true })], SigveloToggleIcon.prototype, "name", void 0);
|
|
737
|
+
__decorate([property()], SigveloToggleIcon.prototype, "value", void 0);
|
|
738
|
+
__decorate([property({ type: Boolean })], SigveloToggleIcon.prototype, "checked", void 0);
|
|
739
|
+
__decorate([property({
|
|
740
|
+
type: Boolean,
|
|
741
|
+
reflect: true
|
|
742
|
+
})], SigveloToggleIcon.prototype, "disabled", void 0);
|
|
743
|
+
__decorate([property({ reflect: true })], SigveloToggleIcon.prototype, "size", void 0);
|
|
744
|
+
__decorate([property({ reflect: true })], SigveloToggleIcon.prototype, "effect", void 0);
|
|
745
|
+
__decorate([property()], SigveloToggleIcon.prototype, "form", void 0);
|
|
746
|
+
__decorate([property({
|
|
747
|
+
type: Boolean,
|
|
748
|
+
reflect: true
|
|
749
|
+
})], SigveloToggleIcon.prototype, "required", void 0);
|
|
750
|
+
customElements.define("sigvelo-toggle-icon", SigveloToggleIcon);
|
|
751
|
+
//#endregion
|
|
752
|
+
export { SigveloToggleIcon as t };
|