@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,798 @@
|
|
|
1
|
+
import { Localize } from "./utilities/localize.js";
|
|
2
|
+
import "./icon-BPVkNsY4.js";
|
|
3
|
+
import { t as __decorate } from "./decorate-DcF3lt7P.js";
|
|
4
|
+
import { css, html } from "lit";
|
|
5
|
+
import { property, query, state } from "lit/decorators.js";
|
|
6
|
+
import hostStyles from "@mcp-b/wc-support/styles/host.styles";
|
|
7
|
+
import { SigveloElement } from "@mcp-b/wc-support/base/sigvelo-element";
|
|
8
|
+
import { classMap } from "lit/directives/class-map.js";
|
|
9
|
+
import { ifDefined } from "lit/directives/if-defined.js";
|
|
10
|
+
import { DraggableElement } from "@mcp-b/wc-support/utilities/drag";
|
|
11
|
+
import { clamp } from "@mcp-b/wc-support/utilities/math";
|
|
12
|
+
import { SigveloActivateEvent, SigveloBeforeActivateEvent, SigveloBeforeDeactivateEvent, SigveloDeactivateEvent } from "@mcp-b/wc-support/events/activate";
|
|
13
|
+
import { SigveloProgressEvent } from "@mcp-b/wc-support/events/progress";
|
|
14
|
+
//#region src/components/slide-activator/slide-activator.styles.ts
|
|
15
|
+
var slide_activator_styles_default = css`
|
|
16
|
+
:host {
|
|
17
|
+
--border-radius: var(--sigvelo-radius-lg);
|
|
18
|
+
--thumb-width: 4em;
|
|
19
|
+
--thumb-inset: 0.125em;
|
|
20
|
+
--shimmer-color: color-mix(in oklab, light-dark(black, white) 12.5%, transparent) 50%;
|
|
21
|
+
|
|
22
|
+
display: flex;
|
|
23
|
+
position: relative;
|
|
24
|
+
width: 100%;
|
|
25
|
+
min-width: calc(
|
|
26
|
+
var(--thumb-width) * 3
|
|
27
|
+
); /* three thumb widths to ensure space for a small label */
|
|
28
|
+
height: 3em;
|
|
29
|
+
border-radius: var(--border-radius);
|
|
30
|
+
background: var(--sigvelo-color-neutral-bg-muted);
|
|
31
|
+
color: var(--sigvelo-color-neutral-text-on-subtle);
|
|
32
|
+
transition:
|
|
33
|
+
var(--sigvelo-motion-duration-presence) background-color,
|
|
34
|
+
var(--sigvelo-motion-duration-presence) color;
|
|
35
|
+
user-select: none;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* Disabled */
|
|
39
|
+
:host(:state(disabled)) {
|
|
40
|
+
cursor: not-allowed;
|
|
41
|
+
opacity: 0.5;
|
|
42
|
+
|
|
43
|
+
#thumb {
|
|
44
|
+
cursor: inherit;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* Activated */
|
|
49
|
+
:host(:state(activated)) {
|
|
50
|
+
background-color: var(--sigvelo-color-primary-bg);
|
|
51
|
+
color: var(--sigvelo-color-primary-text-on-bg);
|
|
52
|
+
animation: activated 0.3s ease-out;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* Label */
|
|
56
|
+
#label {
|
|
57
|
+
display: flex;
|
|
58
|
+
position: relative;
|
|
59
|
+
position: relative;
|
|
60
|
+
flex: 1 1 auto;
|
|
61
|
+
align-items: center;
|
|
62
|
+
justify-content: center;
|
|
63
|
+
padding: 0;
|
|
64
|
+
overflow: hidden;
|
|
65
|
+
border-radius: inherit;
|
|
66
|
+
|
|
67
|
+
sigvelo-icon,
|
|
68
|
+
::slotted(sigvelo-icon) {
|
|
69
|
+
font-size: 1.25em;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* Shimmer */
|
|
74
|
+
:host(:not(:state(disabled), :state(activated))) #label.shimmer::before {
|
|
75
|
+
position: absolute;
|
|
76
|
+
top: 0;
|
|
77
|
+
left: 0;
|
|
78
|
+
flex: 1 1 auto;
|
|
79
|
+
width: 100%;
|
|
80
|
+
height: 100%;
|
|
81
|
+
transform: translateX(-100%);
|
|
82
|
+
background: linear-gradient(90deg, transparent 0%, var(--shimmer-color), transparent 100%);
|
|
83
|
+
content: "";
|
|
84
|
+
animation: shimmer 3s var(--sigvelo-ease-standard) infinite;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
:host(:not(:state(disabled))) #label.shimmer.rtl::before {
|
|
88
|
+
animation-direction: reverse;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* Thumb */
|
|
92
|
+
#thumb {
|
|
93
|
+
display: flex;
|
|
94
|
+
position: absolute;
|
|
95
|
+
align-items: center;
|
|
96
|
+
justify-content: center;
|
|
97
|
+
width: var(--thumb-width);
|
|
98
|
+
height: calc(100% - var(--thumb-inset) * 2);
|
|
99
|
+
inset: var(--thumb-inset);
|
|
100
|
+
left: calc(
|
|
101
|
+
clamp(
|
|
102
|
+
var(--thumb-inset),
|
|
103
|
+
calc((100% - var(--thumb-width)) * var(--thumb-position) + var(--thumb-inset)),
|
|
104
|
+
calc(100% - var(--thumb-width) - var(--thumb-inset))
|
|
105
|
+
)
|
|
106
|
+
);
|
|
107
|
+
border-radius: calc(var(--border-radius) - var(--thumb-inset));
|
|
108
|
+
background-color: var(
|
|
109
|
+
--sigvelo-color-primary-text-on-bg
|
|
110
|
+
); /* always white, same as checkbox icons */
|
|
111
|
+
color: black;
|
|
112
|
+
cursor: grab;
|
|
113
|
+
touch-action: none;
|
|
114
|
+
transition: left 0.3s ease-out;
|
|
115
|
+
|
|
116
|
+
&.rtl {
|
|
117
|
+
right: calc(
|
|
118
|
+
clamp(
|
|
119
|
+
var(--thumb-inset),
|
|
120
|
+
calc((100% - var(--thumb-width)) * var(--thumb-position) + var(--thumb-inset)),
|
|
121
|
+
calc(100% - var(--thumb-width) - var(--thumb-inset))
|
|
122
|
+
)
|
|
123
|
+
);
|
|
124
|
+
left: auto;
|
|
125
|
+
transition: right 0.3s ease-out;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
&:active {
|
|
129
|
+
cursor: grabbing;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
&:focus {
|
|
133
|
+
outline: none;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
&:focus-visible {
|
|
137
|
+
outline: var(--sigvelo-border-style) calc(var(--sigvelo-border-width) + 1px)
|
|
138
|
+
var(--sigvelo-color-focus);
|
|
139
|
+
outline-offset: var(--sigvelo-border-width);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
&.activated {
|
|
143
|
+
cursor: not-allowed;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
&.dragging {
|
|
147
|
+
transition: none;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
&.pressing:not(.is-press-stale) {
|
|
151
|
+
left: calc(
|
|
152
|
+
clamp(
|
|
153
|
+
var(--thumb-inset),
|
|
154
|
+
calc((100% - var(--thumb-width)) * 1 + var(--thumb-inset)),
|
|
155
|
+
calc(100% - var(--thumb-width) - var(--thumb-inset))
|
|
156
|
+
)
|
|
157
|
+
);
|
|
158
|
+
transition-duration: 1s;
|
|
159
|
+
transition-timing-function: linear;
|
|
160
|
+
|
|
161
|
+
&.rtl {
|
|
162
|
+
right: calc(
|
|
163
|
+
clamp(
|
|
164
|
+
var(--thumb-inset),
|
|
165
|
+
calc((100% - var(--thumb-width)) * 1 + var(--thumb-inset)),
|
|
166
|
+
calc(100% - var(--thumb-width) - var(--thumb-inset))
|
|
167
|
+
)
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
sigvelo-icon,
|
|
173
|
+
::slotted(sigvelo-icon) {
|
|
174
|
+
font-size: 1.25em;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
&.activated sigvelo-icon[name="chevrons-right"] {
|
|
178
|
+
display: none;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
&:not(.activated) sigvelo-icon[name="check"] {
|
|
182
|
+
display: none;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
&.rtl sigvelo-icon[name="chevrons-right"] {
|
|
186
|
+
scale: -1;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
@keyframes shimmer {
|
|
191
|
+
100% {
|
|
192
|
+
transform: translateX(100%);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
@keyframes activated {
|
|
197
|
+
0% {
|
|
198
|
+
scale: 1;
|
|
199
|
+
opacity: 1;
|
|
200
|
+
}
|
|
201
|
+
25% {
|
|
202
|
+
scale: 1.015;
|
|
203
|
+
opacity: 0.9;
|
|
204
|
+
}
|
|
205
|
+
50% {
|
|
206
|
+
scale: 1.02;
|
|
207
|
+
opacity: 0.8;
|
|
208
|
+
}
|
|
209
|
+
75% {
|
|
210
|
+
scale: 1.015;
|
|
211
|
+
opacity: 0.9;
|
|
212
|
+
}
|
|
213
|
+
100% {
|
|
214
|
+
scale: 1;
|
|
215
|
+
opacity: 1;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
`;
|
|
219
|
+
//#endregion
|
|
220
|
+
//#region src/components/slide-activator/slide-activator.ts
|
|
221
|
+
/**
|
|
222
|
+
* <sigvelo-slide-activator>
|
|
223
|
+
*
|
|
224
|
+
* @summary Gives users a draggable thumb that must be moved to the end of its track to trigger an action.
|
|
225
|
+
* @tag sigvelo-slide-activator
|
|
226
|
+
* @documentation https://design-system.sigvelo.com/docs/components/slide-activator
|
|
227
|
+
* @status stable
|
|
228
|
+
* @since 1.0
|
|
229
|
+
*
|
|
230
|
+
* @dependency sigvelo-icon
|
|
231
|
+
*
|
|
232
|
+
* @slot label - The slide activator's label. For plain-text labels, you can use the `label` attribute instead.
|
|
233
|
+
* @slot activated-label - The label to show when activated. For plain-text labels, you can use the `activated-label`
|
|
234
|
+
* attribute instead.
|
|
235
|
+
* @slot thumb - The thumb element that users drag. Defaults to a double chevron icon if not provided.
|
|
236
|
+
*
|
|
237
|
+
* @event sigvelo-before-activate - Emitted when the control will activate. Calling `event.preventDefault()` will prevent
|
|
238
|
+
* the activation from occurring.
|
|
239
|
+
* @event sigvelo-activate - Emitted immediately after the control is activated.
|
|
240
|
+
* @event sigvelo-before-deactivate - Emitted when the control will deactivate. Calling `event.preventDefault()` will
|
|
241
|
+
* prevent the deactivation from occurring.
|
|
242
|
+
* @event sigvelo-deactivate - Emitted immediately after the control is deactivated.
|
|
243
|
+
* @event sigvelo-progress - Emitted as the slider progresses. Use `event.details.percent` to see how far along it is.
|
|
244
|
+
*
|
|
245
|
+
* @csspart thumb - The slide activator's thumb.
|
|
246
|
+
* @csspart label - The slide activator's label.
|
|
247
|
+
*
|
|
248
|
+
* @cssproperty [--border-radius=var(--sigvelo-radius-lg)] - The control's border radius. We use a CSS custom
|
|
249
|
+
* property so we can properly calculate the inset border radius for the thumb.
|
|
250
|
+
* @cssproperty [--thumb-width=4em] - The thumb's width.
|
|
251
|
+
* @cssproperty [--thumb-inset=0.125em] - The thumb's inset from the host element.
|
|
252
|
+
* @cssproperty [--shimmer-color] - The color to use as a base for the shimmer animation.
|
|
253
|
+
* @cssproperty [--thumb-position=(read-only)] - A read-only property that moves from 0 to 1 as the user slides the
|
|
254
|
+
* thumb to activate the control. Useful as a hook to transition background styles based on the thumb's position.
|
|
255
|
+
*
|
|
256
|
+
* @cssstate activated - Applied briefly when the slide activator has been activated.
|
|
257
|
+
* @cssstate dragging - Applied when the slide activator is dragging.
|
|
258
|
+
* @cssstate pressing - Applied when the user is pressing a key to activate the slide activator.
|
|
259
|
+
* @cssstate disabled - Applied when the slide activator is disabled.
|
|
260
|
+
*
|
|
261
|
+
* @example Default
|
|
262
|
+
* Slide activators are unidirectional. Once activated by the user, they can only be reset programmatically. The deliberate friction in activation, followed by a locked state, helps prevent accidental triggering and ensures intentional actions are committed.
|
|
263
|
+
*
|
|
264
|
+
* ```html
|
|
265
|
+
* <sigvelo-slide-activator
|
|
266
|
+
* label="Slide to activate"
|
|
267
|
+
* activated-label="Activated"
|
|
268
|
+
* attention="shimmer"
|
|
269
|
+
* id="slide-activator__overview"
|
|
270
|
+
* style="max-width: 340px;"
|
|
271
|
+
* >
|
|
272
|
+
* </sigvelo-slide-activator>
|
|
273
|
+
*
|
|
274
|
+
* <script>
|
|
275
|
+
* const slideActivator = document.getElementById('slide-activator__overview');
|
|
276
|
+
*
|
|
277
|
+
* // When the component is activated
|
|
278
|
+
* slideActivator.addEventListener('sigvelo-activate', () => {
|
|
279
|
+
* // Deactivate it for the demo after two seconds
|
|
280
|
+
* setTimeout(() => slideActivator.activated = false, 2000);
|
|
281
|
+
* });
|
|
282
|
+
* <\/script>
|
|
283
|
+
* ```
|
|
284
|
+
*
|
|
285
|
+
* **Note:** For demonstration purposes, most of the examples on this page reset themselves shortly after activation.
|
|
286
|
+
*
|
|
287
|
+
* @example Handling activation
|
|
288
|
+
* You should always provide a label using the `label` attribute to describe the control to users. In most cases, you'll also want to show a separate label when the control is activated. Use the `activated-label` attribute to do this. For labels that require HTML, use the respective slots instead.
|
|
289
|
+
*
|
|
290
|
+
* When the control is activated, a `sigvelo-before-activate` event will be emitted. You can call `event.preventDefault()` to prevent the activation if needed. Once the control is finally activated, a subsequent `sigvelo-activate` event will be emitted. If you deactivate the control programmatically, the corresponding `sigvelo-before-deactivate` and `sigvelo-deactivate` events will be emitted.
|
|
291
|
+
*
|
|
292
|
+
* You can use these events to execute code to run on activation and deactivation.
|
|
293
|
+
*
|
|
294
|
+
* ```html
|
|
295
|
+
* <div id="slide-activator__activation">
|
|
296
|
+
* <sigvelo-slide-activator
|
|
297
|
+
* label="Slide to activate"
|
|
298
|
+
* activated-label="Activated"
|
|
299
|
+
* ></sigvelo-slide-activator>
|
|
300
|
+
*
|
|
301
|
+
* <sigvelo-button disabled>Deactivate</sigvelo-button>
|
|
302
|
+
* </div>
|
|
303
|
+
*
|
|
304
|
+
* <script>
|
|
305
|
+
* const container = document.getElementById('slide-activator__activation');
|
|
306
|
+
* const slideActivator = container.querySelector('sigvelo-slide-activator');
|
|
307
|
+
* const button = container.querySelector('sigvelo-button');
|
|
308
|
+
*
|
|
309
|
+
* // Deactivate it
|
|
310
|
+
* button.addEventListener('click', () => {
|
|
311
|
+
* slideActivator.activated = false;
|
|
312
|
+
* });
|
|
313
|
+
*
|
|
314
|
+
* // Update the button state when activated
|
|
315
|
+
* slideActivator.addEventListener('sigvelo-activate', () => {
|
|
316
|
+
* button.disabled = false;
|
|
317
|
+
* });
|
|
318
|
+
*
|
|
319
|
+
* // Update the button state when deactivated
|
|
320
|
+
* slideActivator.addEventListener('sigvelo-deactivate', () => {
|
|
321
|
+
* button.disabled = true;
|
|
322
|
+
* });
|
|
323
|
+
* <\/script>
|
|
324
|
+
*
|
|
325
|
+
* <style>
|
|
326
|
+
* #slide-activator__activation {
|
|
327
|
+
* sigvelo-slide-activator {
|
|
328
|
+
* max-width: 340px;
|
|
329
|
+
* margin-bottom: 1rem;
|
|
330
|
+
* }
|
|
331
|
+
* }
|
|
332
|
+
* </style>
|
|
333
|
+
* ```
|
|
334
|
+
*
|
|
335
|
+
* @example Tracking slide progress
|
|
336
|
+
* The readonly `--thumb-position` custom property will be set to a value between 0 and 1 on the host element, representing how far the user has slid the thumb toward activation. You can use this to transition styles at different thresholds.
|
|
337
|
+
*
|
|
338
|
+
* Additionally, a `sigvelo-progress` event will be emitted while the user slides the thumb. This event contains an `event.detail.percent` payload with a corresponding number between 0 and 1.
|
|
339
|
+
*
|
|
340
|
+
* ```html
|
|
341
|
+
* <div id="slide-activator__progress">
|
|
342
|
+
* <sigvelo-slide-activator
|
|
343
|
+
* label="Slide to place order"
|
|
344
|
+
* activated-label="Order received"
|
|
345
|
+
* ></sigvelo-slide-activator>
|
|
346
|
+
* Progress: <sigvelo-number number="0" type="percent"></sigvelo-number>
|
|
347
|
+
* </div>
|
|
348
|
+
*
|
|
349
|
+
* <script>
|
|
350
|
+
* const container = document.getElementById('slide-activator__progress');
|
|
351
|
+
* const slideActivator = container.querySelector('sigvelo-slide-activator');
|
|
352
|
+
* const progress = container.querySelector('sigvelo-number');
|
|
353
|
+
*
|
|
354
|
+
* // Update progress as the user drags
|
|
355
|
+
* slideActivator.addEventListener('sigvelo-progress', event => {
|
|
356
|
+
* progress.number = event.detail.percent * 100;
|
|
357
|
+
* });
|
|
358
|
+
*
|
|
359
|
+
* // Update the label and reset the demo when component is activated
|
|
360
|
+
* slideActivator.addEventListener('sigvelo-activate', () => {
|
|
361
|
+
* // Deactivate it for the demo after two seconds
|
|
362
|
+
* setTimeout(() => slideActivator.activated = false, 2000);
|
|
363
|
+
* });
|
|
364
|
+
* <\/script>
|
|
365
|
+
*
|
|
366
|
+
* <style>
|
|
367
|
+
* #slide-activator__progress {
|
|
368
|
+
* sigvelo-slide-activator {
|
|
369
|
+
* max-width: 340px;
|
|
370
|
+
* margin-bottom: 1rem;
|
|
371
|
+
* transition: none;
|
|
372
|
+
*
|
|
373
|
+
* <!-- Change the background color as the user slides the thumb -->
|
|
374
|
+
* background-color:
|
|
375
|
+
* color-mix(
|
|
376
|
+
* in oklab,
|
|
377
|
+
* var(--sigvelo-color-neutral-bg-muted) calc((1 - var(--thumb-position)) * 100%),
|
|
378
|
+
* var(--sigvelo-color-success-bg) calc(var(--thumb-position) * 100%)
|
|
379
|
+
* );
|
|
380
|
+
*
|
|
381
|
+
* <!-- Change the text color when activated -->
|
|
382
|
+
* &:state(activated) {
|
|
383
|
+
* color: var(--sigvelo-color-success-text-on-bg);
|
|
384
|
+
* }
|
|
385
|
+
* }
|
|
386
|
+
* }
|
|
387
|
+
* </style>
|
|
388
|
+
* ```
|
|
389
|
+
*
|
|
390
|
+
* @example Customizing icons
|
|
391
|
+
* Use the `thumb` slot to provide your own icon(s) for the thumb. If you want to change the icon depending on the activation state, use the `:state(activated)` selector to show/hide the respective icons with CSS.
|
|
392
|
+
*
|
|
393
|
+
* ```html
|
|
394
|
+
* <sigvelo-slide-activator
|
|
395
|
+
* label="Slide to unlock"
|
|
396
|
+
* activated-label="Unlocked"
|
|
397
|
+
* id="slide-activator__icons"
|
|
398
|
+
* >
|
|
399
|
+
* <sigvelo-icon slot="thumb" name="lock"></sigvelo-icon>
|
|
400
|
+
* <sigvelo-icon slot="thumb" name="lock-open-2"></sigvelo-icon>
|
|
401
|
+
* </sigvelo-slide-activator>
|
|
402
|
+
*
|
|
403
|
+
* <script>
|
|
404
|
+
* const slideActivator = document.getElementById('slide-activator__icons');
|
|
405
|
+
*
|
|
406
|
+
* // When the component is activated
|
|
407
|
+
* slideActivator.addEventListener('sigvelo-activate', () => {
|
|
408
|
+
* // Deactivate it for the demo after two seconds
|
|
409
|
+
* setTimeout(() => slideActivator.activated = false, 2000);
|
|
410
|
+
* });
|
|
411
|
+
* <\/script>
|
|
412
|
+
*
|
|
413
|
+
* <style>
|
|
414
|
+
* sigvelo-slide-activator#slide-activator__icons {
|
|
415
|
+
* max-width: 340px;
|
|
416
|
+
*
|
|
417
|
+
* <!-- Show locked until activated, then show unlocked -->
|
|
418
|
+
* &:state(activated) sigvelo-icon[name="lock"],
|
|
419
|
+
* &:not(:state(activated)) sigvelo-icon[name="lock-open-2"] {
|
|
420
|
+
* display: none;
|
|
421
|
+
* }
|
|
422
|
+
* }
|
|
423
|
+
* </style>
|
|
424
|
+
* ```
|
|
425
|
+
*
|
|
426
|
+
* @example Drawing attention
|
|
427
|
+
* Set the `attention` attribute to `shimmer` to provide a subtle visual hint via animation. The animation pauses when the slide activator is activated.
|
|
428
|
+
*
|
|
429
|
+
* ```html
|
|
430
|
+
* <sigvelo-slide-activator
|
|
431
|
+
* label="Slide to release cats"
|
|
432
|
+
* activated-label="Releasing cats…"
|
|
433
|
+
* attention="shimmer"
|
|
434
|
+
* id="slide-activator__attention"
|
|
435
|
+
* >
|
|
436
|
+
* <sigvelo-icon slot="thumb" name="cat"></sigvelo-icon>
|
|
437
|
+
* </sigvelo-slide-activator>
|
|
438
|
+
*
|
|
439
|
+
* <script>
|
|
440
|
+
* const slideActivator = document.getElementById('slide-activator__attention');
|
|
441
|
+
*
|
|
442
|
+
* // When the component is activated
|
|
443
|
+
* slideActivator.addEventListener('sigvelo-activate', () => {
|
|
444
|
+
* // Deactivate it for the demo after two seconds
|
|
445
|
+
* setTimeout(() => slideActivator.activated = false, 2000);
|
|
446
|
+
* });
|
|
447
|
+
* <\/script>
|
|
448
|
+
*
|
|
449
|
+
* <style>
|
|
450
|
+
* sigvelo-slide-activator#slide-activator__attention {
|
|
451
|
+
* max-width: 340px;
|
|
452
|
+
*
|
|
453
|
+
* <!-- Head tilt-->
|
|
454
|
+
* sigvelo-icon {
|
|
455
|
+
* transition: 300ms rotate ease-out;
|
|
456
|
+
* }
|
|
457
|
+
*
|
|
458
|
+
* &:state(activated) sigvelo-icon {
|
|
459
|
+
* rotate: 20deg;
|
|
460
|
+
* }
|
|
461
|
+
* }
|
|
462
|
+
* </style>
|
|
463
|
+
* ```
|
|
464
|
+
*
|
|
465
|
+
* @example Disabling
|
|
466
|
+
* Use the `disabled` attribute to disable the slide activator. The control cannot be activated or focused while disabled.
|
|
467
|
+
*
|
|
468
|
+
* ```html
|
|
469
|
+
* <sigvelo-slide-activator
|
|
470
|
+
* label="Slide to activate"
|
|
471
|
+
* disabled
|
|
472
|
+
* style="max-width: 340px;"
|
|
473
|
+
* ></sigvelo-slide-activator>
|
|
474
|
+
* ```
|
|
475
|
+
*
|
|
476
|
+
* @example Styling slide activators
|
|
477
|
+
* Slide activators come with a simple, minimal appearance. Feel free to customize them with your own styles, icons, and animations.
|
|
478
|
+
*
|
|
479
|
+
* ```html
|
|
480
|
+
* <sigvelo-slide-activator
|
|
481
|
+
* label="Empty the box"
|
|
482
|
+
* activated-label="Emptying…"
|
|
483
|
+
* attention="shimmer"
|
|
484
|
+
* id="slide-activator__styling"
|
|
485
|
+
* >
|
|
486
|
+
* <sigvelo-icon slot="thumb" name="arrow-right"></sigvelo-icon>
|
|
487
|
+
* <sigvelo-spinner slot="thumb"></sigvelo-spinner>
|
|
488
|
+
* </sigvelo-slide-activator>
|
|
489
|
+
*
|
|
490
|
+
* <script>
|
|
491
|
+
* const slideActivator = document.getElementById('slide-activator__styling');
|
|
492
|
+
*
|
|
493
|
+
* // When the component is activated
|
|
494
|
+
* slideActivator.addEventListener('sigvelo-activate', () => {
|
|
495
|
+
* // Deactivate it for the demo after two seconds
|
|
496
|
+
* setTimeout(() => slideActivator.activated = false, 2000);
|
|
497
|
+
* });
|
|
498
|
+
* <\/script>
|
|
499
|
+
*
|
|
500
|
+
* <style>
|
|
501
|
+
* sigvelo-slide-activator#slide-activator__styling {
|
|
502
|
+
* --border-radius: var(--sigvelo-radius-full);
|
|
503
|
+
* --thumb-width: 5rem;
|
|
504
|
+
* --thumb-inset: 0.25rem;
|
|
505
|
+
* --shimmer-color: #fff2;
|
|
506
|
+
* --current-color:
|
|
507
|
+
* color-mix(
|
|
508
|
+
* in oklab,
|
|
509
|
+
* firebrick calc(var(--thumb-position) * 100%),
|
|
510
|
+
* #0284c7 calc((1 - var(--thumb-position)) * 100%)
|
|
511
|
+
* );
|
|
512
|
+
* height: 4rem;
|
|
513
|
+
* max-width: 340px;
|
|
514
|
+
* background-color: var(--current-color);
|
|
515
|
+
* font-weight: var(--sigvelo-font-weight-semibold);
|
|
516
|
+
* color: white;
|
|
517
|
+
*
|
|
518
|
+
* &:focus-within {
|
|
519
|
+
* outline-color: var(--current-color) !important;
|
|
520
|
+
* }
|
|
521
|
+
*
|
|
522
|
+
* <!-- Animate when activated -->
|
|
523
|
+
* &:state(activated) {
|
|
524
|
+
* animation: pulse 0.6s ease-out forwards;
|
|
525
|
+
* }
|
|
526
|
+
*
|
|
527
|
+
* <!-- Slightly bigger icons -->
|
|
528
|
+
* sigvelo-icon {
|
|
529
|
+
* font-size: 1.5rem;
|
|
530
|
+
* }
|
|
531
|
+
*
|
|
532
|
+
* sigvelo-spinner {
|
|
533
|
+
* --indicator-color: firebrick;
|
|
534
|
+
* --track-color: color-mix(in oklab, firebrick, transparent 80%);
|
|
535
|
+
* }
|
|
536
|
+
*
|
|
537
|
+
* <!-- Show arrow icon until activated, then show trash -->
|
|
538
|
+
* &:state(activated) sigvelo-icon[name="arrow-right"],
|
|
539
|
+
* &:not(:state(activated)) sigvelo-spinner {
|
|
540
|
+
* display: none;
|
|
541
|
+
* }
|
|
542
|
+
*
|
|
543
|
+
* <!-- Bounce animation for fun -->
|
|
544
|
+
* sigvelo-icon[name="arrow-right"] {
|
|
545
|
+
* animation: bounce-right 1s infinite;
|
|
546
|
+
*
|
|
547
|
+
* <!-- Flip for RTL -->
|
|
548
|
+
* &:dir(rtl) {
|
|
549
|
+
* scale: -1;
|
|
550
|
+
* }
|
|
551
|
+
* }
|
|
552
|
+
* }
|
|
553
|
+
*
|
|
554
|
+
* @keyframes bounce-right {
|
|
555
|
+
* 0%, 100% {
|
|
556
|
+
* transform: translateX(0);
|
|
557
|
+
* }
|
|
558
|
+
* 50% {
|
|
559
|
+
* transform: translateX(6px);
|
|
560
|
+
* }
|
|
561
|
+
* }
|
|
562
|
+
*
|
|
563
|
+
* @keyframes pulse {
|
|
564
|
+
* 0% {
|
|
565
|
+
* transform: scale(1);
|
|
566
|
+
* filter: brightness(1);
|
|
567
|
+
* }
|
|
568
|
+
* 20% {
|
|
569
|
+
* transform: scale(1.05);
|
|
570
|
+
* filter: brightness(1.2);
|
|
571
|
+
* }
|
|
572
|
+
* 40% {
|
|
573
|
+
* transform: scale(0.95);
|
|
574
|
+
* filter: brightness(0.9);
|
|
575
|
+
* }
|
|
576
|
+
* 60% {
|
|
577
|
+
* transform: scale(1.02);
|
|
578
|
+
* filter: brightness(1.1);
|
|
579
|
+
* }
|
|
580
|
+
* 80% {
|
|
581
|
+
* transform: scale(0.98);
|
|
582
|
+
* filter: brightness(0.95);
|
|
583
|
+
* }
|
|
584
|
+
* 100% {
|
|
585
|
+
* transform: scale(1);
|
|
586
|
+
* filter: brightness(1);
|
|
587
|
+
* }
|
|
588
|
+
* }
|
|
589
|
+
* </style>
|
|
590
|
+
* ```
|
|
591
|
+
*/
|
|
592
|
+
var SigveloSlideActivator = class extends SigveloElement {
|
|
593
|
+
constructor(..._args) {
|
|
594
|
+
super(..._args);
|
|
595
|
+
this.localize = new Localize(this);
|
|
596
|
+
this.isKeyPressStale = false;
|
|
597
|
+
this.isDragging = false;
|
|
598
|
+
this.isPressing = false;
|
|
599
|
+
this.thumbPosition = 0;
|
|
600
|
+
this.label = "";
|
|
601
|
+
this.activatedLabel = "";
|
|
602
|
+
this.activated = false;
|
|
603
|
+
this.disabled = false;
|
|
604
|
+
}
|
|
605
|
+
static {
|
|
606
|
+
this.observeSlots = true;
|
|
607
|
+
}
|
|
608
|
+
static {
|
|
609
|
+
this.styles = [hostStyles, slide_activator_styles_default];
|
|
610
|
+
}
|
|
611
|
+
disconnectedCallback() {
|
|
612
|
+
super.disconnectedCallback();
|
|
613
|
+
this.cleanupTimers();
|
|
614
|
+
}
|
|
615
|
+
firstUpdated() {
|
|
616
|
+
this.draggableThumb = new DraggableElement(this.thumb, {
|
|
617
|
+
start: (x) => {
|
|
618
|
+
this.isDragging = true;
|
|
619
|
+
this.dragStartX = x;
|
|
620
|
+
this.hostBoundingClientRect = this.getBoundingClientRect();
|
|
621
|
+
this.handleDrag(x);
|
|
622
|
+
},
|
|
623
|
+
move: (x) => {
|
|
624
|
+
this.handleDrag(x);
|
|
625
|
+
},
|
|
626
|
+
stop: (x) => {
|
|
627
|
+
this.handleDrag(x);
|
|
628
|
+
this.isDragging = false;
|
|
629
|
+
if (!this.activated) this.setThumbPosition(0);
|
|
630
|
+
}
|
|
631
|
+
});
|
|
632
|
+
}
|
|
633
|
+
updated(changedProperties) {
|
|
634
|
+
if (changedProperties.has("activated")) {
|
|
635
|
+
if (this.activated) this.activate();
|
|
636
|
+
else if (changedProperties.get("activated") === true) this.deactivate();
|
|
637
|
+
}
|
|
638
|
+
if (changedProperties.has("disabled")) {
|
|
639
|
+
this.customStates.set("disabled", this.disabled);
|
|
640
|
+
if (this.disabled) {
|
|
641
|
+
this.cleanupTimers();
|
|
642
|
+
this.draggableThumb.stop();
|
|
643
|
+
} else this.draggableThumb.start();
|
|
644
|
+
}
|
|
645
|
+
if (changedProperties.has("isDragging")) this.customStates.set("dragging", this.isDragging);
|
|
646
|
+
if (changedProperties.has("isPressing")) this.customStates.set("pressing", this.isPressing);
|
|
647
|
+
if (changedProperties.has("thumbPosition")) {
|
|
648
|
+
this.style.setProperty("--thumb-position", `${this.thumbPosition}`);
|
|
649
|
+
if (this.thumbPosition >= 1) this.activated = true;
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
/** Attempts to activate the component. */
|
|
653
|
+
activate() {
|
|
654
|
+
const beforeActivateEvent = new SigveloBeforeActivateEvent();
|
|
655
|
+
this.dispatchEvent(beforeActivateEvent);
|
|
656
|
+
if (beforeActivateEvent.defaultPrevented) {
|
|
657
|
+
this.activated = false;
|
|
658
|
+
return;
|
|
659
|
+
}
|
|
660
|
+
clearInterval(this.keyPressInterval);
|
|
661
|
+
if (this.isPressing) this.isKeyPressStale = true;
|
|
662
|
+
this.setThumbPosition(1);
|
|
663
|
+
this.activated = true;
|
|
664
|
+
this.customStates.set("activated", true);
|
|
665
|
+
requestAnimationFrame(() => {
|
|
666
|
+
this.dispatchEvent(new SigveloActivateEvent());
|
|
667
|
+
});
|
|
668
|
+
}
|
|
669
|
+
/** Restores the control to its original deactivated state. */
|
|
670
|
+
deactivate() {
|
|
671
|
+
const beforeDeactivateEvent = new SigveloBeforeDeactivateEvent();
|
|
672
|
+
this.dispatchEvent(beforeDeactivateEvent);
|
|
673
|
+
if (beforeDeactivateEvent.defaultPrevented) {
|
|
674
|
+
this.activated = true;
|
|
675
|
+
return;
|
|
676
|
+
}
|
|
677
|
+
this.setThumbPosition(0);
|
|
678
|
+
this.activated = false;
|
|
679
|
+
this.customStates.set("activated", false);
|
|
680
|
+
this.isKeyPressStale = false;
|
|
681
|
+
this.isPressing = false;
|
|
682
|
+
requestAnimationFrame(() => {
|
|
683
|
+
this.dispatchEvent(new SigveloDeactivateEvent());
|
|
684
|
+
});
|
|
685
|
+
}
|
|
686
|
+
cleanupTimers() {
|
|
687
|
+
if (this.keyPressInterval) {
|
|
688
|
+
clearInterval(this.keyPressInterval);
|
|
689
|
+
this.keyPressInterval = void 0;
|
|
690
|
+
}
|
|
691
|
+
if (this.keyPressTimeout) {
|
|
692
|
+
clearTimeout(this.keyPressTimeout);
|
|
693
|
+
this.keyPressTimeout = void 0;
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
/** Updates the thumb position from a pointer's x coordinate */
|
|
697
|
+
handleDrag(x) {
|
|
698
|
+
if (this.disabled || this.activated) return;
|
|
699
|
+
const isRtl = this.localize.dir() === "rtl";
|
|
700
|
+
const hostWidth = this.hostBoundingClientRect.width - this.thumb.clientWidth;
|
|
701
|
+
const percentage = clamp((isRtl ? this.dragStartX - x : x - this.dragStartX) / hostWidth, 0, 1);
|
|
702
|
+
this.setThumbPosition(percentage);
|
|
703
|
+
}
|
|
704
|
+
handleKeyDown(event) {
|
|
705
|
+
const arrowKey = this.localize.dir() === "rtl" ? "ArrowLeft" : "ArrowRight";
|
|
706
|
+
if (event.key === " " || event.key === arrowKey) {
|
|
707
|
+
event.preventDefault();
|
|
708
|
+
if (this.activated || this.disabled) return;
|
|
709
|
+
if (this.isKeyPressStale) return;
|
|
710
|
+
if (!this.isPressing) {
|
|
711
|
+
this.isPressing = true;
|
|
712
|
+
this.cleanupTimers();
|
|
713
|
+
this.setThumbPosition(0);
|
|
714
|
+
this.keyPressInterval = setInterval(() => {
|
|
715
|
+
this.setThumbPosition(this.thumbPosition + .1);
|
|
716
|
+
}, 100);
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
handleKeyUp(event) {
|
|
721
|
+
const arrowKey = this.localize.dir() === "rtl" ? "ArrowLeft" : "ArrowRight";
|
|
722
|
+
if (this.activated || this.disabled) return;
|
|
723
|
+
if (event.key === " " || event.key === arrowKey) {
|
|
724
|
+
event.preventDefault();
|
|
725
|
+
this.isKeyPressStale = false;
|
|
726
|
+
this.isPressing = false;
|
|
727
|
+
this.setThumbPosition(0);
|
|
728
|
+
this.cleanupTimers();
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
/** Updates the thumb position and dispatches the `sigvelo-progress` event. */
|
|
732
|
+
setThumbPosition(value) {
|
|
733
|
+
if (this.disabled) return;
|
|
734
|
+
if (value !== this.thumbPosition) {
|
|
735
|
+
this.thumbPosition = value;
|
|
736
|
+
const percentage = value / 100;
|
|
737
|
+
if (percentage !== this.lastDispatchedPercentage) this.dispatchEvent(new SigveloProgressEvent({ percent: percentage }));
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
render() {
|
|
741
|
+
const isRtl = this.localize.dir() === "rtl";
|
|
742
|
+
return html`
|
|
743
|
+
<div
|
|
744
|
+
id="label"
|
|
745
|
+
part="label"
|
|
746
|
+
class=${classMap({
|
|
747
|
+
rtl: isRtl,
|
|
748
|
+
shimmer: this.attention === "shimmer"
|
|
749
|
+
})}
|
|
750
|
+
>
|
|
751
|
+
${this.activated && (this.activatedLabel || this.slotsWithContent.has("activated-label")) ? html`<slot name="activated-label">${this.activatedLabel}</slot>` : html`<slot name="label">${this.label}</slot>`}
|
|
752
|
+
</div>
|
|
753
|
+
|
|
754
|
+
<div
|
|
755
|
+
id="thumb"
|
|
756
|
+
part="thumb"
|
|
757
|
+
tabindex=${this.disabled ? "-1" : "0"}
|
|
758
|
+
role="button"
|
|
759
|
+
aria-pressed=${this.activated}
|
|
760
|
+
aria-labelledby="label"
|
|
761
|
+
aria-description=${ifDefined(this.activated ? void 0 : this.localize.term("pressSpaceForOneSecondToActivate"))}
|
|
762
|
+
aria-disabled=${this.disabled ? "true" : "false"}
|
|
763
|
+
class=${classMap({
|
|
764
|
+
activated: this.activated,
|
|
765
|
+
dragging: this.isDragging,
|
|
766
|
+
"is-press-stale": this.isKeyPressStale,
|
|
767
|
+
pressing: this.isPressing,
|
|
768
|
+
rtl: isRtl
|
|
769
|
+
})}
|
|
770
|
+
@keydown=${this.handleKeyDown}
|
|
771
|
+
@keyup=${this.handleKeyUp}
|
|
772
|
+
>
|
|
773
|
+
<slot name="thumb">
|
|
774
|
+
<sigvelo-icon library="default" name="chevrons-right"></sigvelo-icon>
|
|
775
|
+
<sigvelo-icon library="default" name="check"></sigvelo-icon>
|
|
776
|
+
</slot>
|
|
777
|
+
</div>
|
|
778
|
+
`;
|
|
779
|
+
}
|
|
780
|
+
};
|
|
781
|
+
__decorate([query("#thumb")], SigveloSlideActivator.prototype, "thumb", void 0);
|
|
782
|
+
__decorate([state()], SigveloSlideActivator.prototype, "isDragging", void 0);
|
|
783
|
+
__decorate([state()], SigveloSlideActivator.prototype, "isPressing", void 0);
|
|
784
|
+
__decorate([state()], SigveloSlideActivator.prototype, "thumbPosition", void 0);
|
|
785
|
+
__decorate([property()], SigveloSlideActivator.prototype, "label", void 0);
|
|
786
|
+
__decorate([property({ attribute: "activated-label" })], SigveloSlideActivator.prototype, "activatedLabel", void 0);
|
|
787
|
+
__decorate([property({
|
|
788
|
+
type: Boolean,
|
|
789
|
+
reflect: true
|
|
790
|
+
})], SigveloSlideActivator.prototype, "activated", void 0);
|
|
791
|
+
__decorate([property({
|
|
792
|
+
type: Boolean,
|
|
793
|
+
reflect: true
|
|
794
|
+
})], SigveloSlideActivator.prototype, "disabled", void 0);
|
|
795
|
+
__decorate([property({ reflect: true })], SigveloSlideActivator.prototype, "attention", void 0);
|
|
796
|
+
customElements.define("sigvelo-slide-activator", SigveloSlideActivator);
|
|
797
|
+
//#endregion
|
|
798
|
+
export { SigveloSlideActivator as t };
|