@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,521 @@
|
|
|
1
|
+
import { t as __decorate } from "./decorate-DcF3lt7P.js";
|
|
2
|
+
import { css, html } from "lit";
|
|
3
|
+
import { property, query } from "lit/decorators.js";
|
|
4
|
+
import hostStyles from "@mcp-b/wc-support/styles/host.styles";
|
|
5
|
+
import { SigveloElement } from "@mcp-b/wc-support/base/sigvelo-element";
|
|
6
|
+
import { animateWithClass } from "@mcp-b/wc-support/utilities/animate";
|
|
7
|
+
import { SigveloBeforeCloseEvent, SigveloBeforeOpenEvent, SigveloCloseEvent, SigveloOpenEvent } from "@mcp-b/wc-support/events/open-close";
|
|
8
|
+
import { arrow, autoUpdate, computePosition, flip, offset, shift } from "@floating-ui/dom";
|
|
9
|
+
import { createId } from "@mcp-b/wc-support/utilities/math";
|
|
10
|
+
//#region src/components/tooltip/tooltip.styles.ts
|
|
11
|
+
var tooltip_styles_default = css`
|
|
12
|
+
:host {
|
|
13
|
+
--arrow-size: 0.275rem;
|
|
14
|
+
--max-width: 20rem;
|
|
15
|
+
--show-duration: var(--sigvelo-motion-duration-interaction);
|
|
16
|
+
|
|
17
|
+
/* Internal calculated properties */
|
|
18
|
+
--arrow-diagonal-size: calc(var(--arrow-size) * sin(45deg));
|
|
19
|
+
|
|
20
|
+
display: contents;
|
|
21
|
+
line-height: calc(var(--sigvelo-leading-relaxed) * 0.75);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
#tooltip {
|
|
25
|
+
display: none;
|
|
26
|
+
position: absolute;
|
|
27
|
+
top: 0;
|
|
28
|
+
left: 0;
|
|
29
|
+
width: max-content;
|
|
30
|
+
max-width: var(--max-width);
|
|
31
|
+
margin: 0;
|
|
32
|
+
padding: 0;
|
|
33
|
+
overflow: visible;
|
|
34
|
+
border: none;
|
|
35
|
+
background: none;
|
|
36
|
+
|
|
37
|
+
&.visible {
|
|
38
|
+
display: flex;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
&.show {
|
|
42
|
+
animation: show var(--show-duration) ease;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
&.hide {
|
|
46
|
+
animation: show var(--show-duration) ease reverse;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
#content {
|
|
51
|
+
z-index: 2;
|
|
52
|
+
padding: 0.33em 0.66em;
|
|
53
|
+
border: var(--sigvelo-border-style) var(--sigvelo-border-width)
|
|
54
|
+
var(--sigvelo-color-neutral-border-muted);
|
|
55
|
+
border-radius: var(--sigvelo-radius-sm);
|
|
56
|
+
background-color: var(--sigvelo-color-surface);
|
|
57
|
+
box-shadow: var(--sigvelo-elevation-raised);
|
|
58
|
+
color: var(--sigvelo-color-text);
|
|
59
|
+
font-size: 0.875em;
|
|
60
|
+
user-select: none;
|
|
61
|
+
-webkit-user-select: none;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
#arrow {
|
|
65
|
+
z-index: 3;
|
|
66
|
+
position: absolute;
|
|
67
|
+
width: calc(var(--arrow-diagonal-size) * 2);
|
|
68
|
+
height: calc(var(--arrow-diagonal-size) * 2);
|
|
69
|
+
border-right: var(--sigvelo-border-style) var(--sigvelo-border-width)
|
|
70
|
+
var(--sigvelo-color-neutral-border-muted);
|
|
71
|
+
border-bottom: var(--sigvelo-border-style) var(--sigvelo-border-width)
|
|
72
|
+
var(--sigvelo-color-neutral-border-muted);
|
|
73
|
+
background-color: var(--sigvelo-color-surface);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* Rotate border position based on placement */
|
|
77
|
+
:host([data-placement^="top"]) {
|
|
78
|
+
--show-x: 0;
|
|
79
|
+
--show-y: 0.25em;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
:host([data-placement^="top"]) #arrow {
|
|
83
|
+
rotate: 45deg;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
:host([data-placement^="right"]) {
|
|
87
|
+
--show-x: -0.25em;
|
|
88
|
+
--show-y: 0;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
:host([data-placement^="right"]) #arrow {
|
|
92
|
+
rotate: 135deg;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
:host([data-placement^="bottom"]) {
|
|
96
|
+
--show-x: 0;
|
|
97
|
+
--show-y: -0.25em;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
:host([data-placement^="bottom"]) #arrow {
|
|
101
|
+
rotate: 225deg;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
:host([data-placement^="left"]) {
|
|
105
|
+
--show-x: 0.25em;
|
|
106
|
+
--show-y: 0;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
:host([data-placement^="left"]) #arrow {
|
|
110
|
+
rotate: 315deg;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
#polygon {
|
|
114
|
+
position: fixed;
|
|
115
|
+
top: 0;
|
|
116
|
+
right: 0;
|
|
117
|
+
bottom: 0;
|
|
118
|
+
left: 0;
|
|
119
|
+
clip-path: polygon(
|
|
120
|
+
var(--polygon-x1, 0) var(--polygon-y1, 0),
|
|
121
|
+
var(--polygon-x2, 0) var(--polygon-y2, 0),
|
|
122
|
+
var(--polygon-x3, 0) var(--polygon-y3, 0),
|
|
123
|
+
var(--polygon-x4, 0) var(--polygon-y4, 0)
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@keyframes show {
|
|
128
|
+
from {
|
|
129
|
+
translate: var(--show-x) var(--show-y);
|
|
130
|
+
scale: 0.9;
|
|
131
|
+
opacity: 0;
|
|
132
|
+
}
|
|
133
|
+
to {
|
|
134
|
+
translate: 0 0;
|
|
135
|
+
scale: 1;
|
|
136
|
+
opacity: 1;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
`;
|
|
140
|
+
//#endregion
|
|
141
|
+
//#region src/components/tooltip/tooltip.ts
|
|
142
|
+
const openTooltips = /* @__PURE__ */ new Set();
|
|
143
|
+
/**
|
|
144
|
+
* <sigvelo-tooltip>
|
|
145
|
+
*
|
|
146
|
+
* @summary Provides additional information when the user hovers or focuses on an element.
|
|
147
|
+
* @tag sigvelo-tooltip
|
|
148
|
+
* @documentation https://design-system.sigvelo.com/docs/components/tooltip
|
|
149
|
+
* @status stable
|
|
150
|
+
* @since 1.0
|
|
151
|
+
*
|
|
152
|
+
* @slot - The tooltip's content. Do not include interactive elements such as button, links, etc. as they won't be
|
|
153
|
+
* accessible to users inside the tooltip.
|
|
154
|
+
*
|
|
155
|
+
* @event sigvelo-before-open - Emitted when the tooltip is instructed to open but before it is shown.
|
|
156
|
+
* @event sigvelo-open - Emitted when the tooltip has opened and the animation has completed.
|
|
157
|
+
* @event sigvelo-before-close - Emitted when the tooltip is dismissed but before it is hidden.
|
|
158
|
+
* @event sigvelo-close - Emitted when the tooltip has closed. and the animation has completed.
|
|
159
|
+
*
|
|
160
|
+
* @cssproperty [--arrow-size=0.3125rem] - The size of the arrow. To hide the arrow, use the `without-arrow` attribute.
|
|
161
|
+
* @cssproperty [--max-width=20rem] - The maximum width the tooltip can be before wrapping.
|
|
162
|
+
* @cssproperty [--show-duration=100ms] - The duration of the show/hide animation.
|
|
163
|
+
*
|
|
164
|
+
* @csspart tooltip - The element that powers the tooltip.
|
|
165
|
+
* @csspart content - The element that wraps the tooltip's content.
|
|
166
|
+
* @csspart arrow - The tooltip's arrow. To change the arrow's size, use `--arrow-size` instead.
|
|
167
|
+
*
|
|
168
|
+
* @cssstate open - Applied when the tooltip is open.
|
|
169
|
+
*
|
|
170
|
+
* @example Default
|
|
171
|
+
* Tooltips follow the ARIA APG tooltip pattern for accessibility. They show on hover and on focus. A transparent "safe polygon" is drawn between the tooltip and its anchor element to allow mouse users to hover over the tooltip without closing it. Only one tooltip will be visible on the page at a time. Tooltips are not be shown when the pointer type is `touch`.
|
|
172
|
+
*
|
|
173
|
+
* ```html
|
|
174
|
+
* <sigvelo-button id="tooltip__overview">Hover over me</sigvelo-button>
|
|
175
|
+
* <sigvelo-tooltip for="tooltip__overview">I'm a tooltip</sigvelo-tooltip>
|
|
176
|
+
* ```
|
|
177
|
+
*
|
|
178
|
+
* **Note:** Due to platform limitations, some Sigvelo components are treated differently when used as tooltip anchors, but they will still be announced as expected by screen readers.
|
|
179
|
+
*
|
|
180
|
+
* @example Assigning an anchor
|
|
181
|
+
* Tooltip anchors must be interactive/focusable elements such as buttons, links, etc. Use the `for` attribute on the tooltip to link it to the anchor's `id`. Do not include interactive elements _inside_ your tooltips, as they won't be accessible to users.
|
|
182
|
+
*
|
|
183
|
+
* ```html
|
|
184
|
+
* <sigvelo-button id="tooltip__anchor-button">Sigvelo button with tooltip</sigvelo-button>
|
|
185
|
+
* <sigvelo-tooltip for="tooltip__anchor-button">This is a Sigvelo button</sigvelo-tooltip>
|
|
186
|
+
*
|
|
187
|
+
* <br><br>
|
|
188
|
+
*
|
|
189
|
+
* <button id="tooltip__anchor-native-button">Native button with tooltip</button>
|
|
190
|
+
* <sigvelo-tooltip for="tooltip__anchor-native-button">This is a native button</sigvelo-tooltip>
|
|
191
|
+
*
|
|
192
|
+
* <br><br>
|
|
193
|
+
*
|
|
194
|
+
* <a href="#" id="tooltip__anchor-link">Link with tooltip</a>
|
|
195
|
+
* <sigvelo-tooltip for="tooltip__anchor-link">This is a link</sigvelo-tooltip>
|
|
196
|
+
* ```
|
|
197
|
+
*
|
|
198
|
+
* **Warning:** The anchor element must be in the DOM when the tooltip is connected, otherwise the tooltip won't be attached and a warning will be shown in the console.
|
|
199
|
+
*
|
|
200
|
+
* @example Placement
|
|
201
|
+
* Use the `placement` attribute to change the preferred location of the tooltip in reference to its anchor. The tooltip will shift to a more optimal location if the preferred placement doesn't have enough room. The default placement is `top`.
|
|
202
|
+
*
|
|
203
|
+
* ```html
|
|
204
|
+
* <sigvelo-button id="tooltip__top">Top</sigvelo-button>
|
|
205
|
+
* <sigvelo-tooltip for="tooltip__top" placement="top">I'm on the top</sigvelo-tooltip>
|
|
206
|
+
*
|
|
207
|
+
* <sigvelo-button id="tooltip__bottom">Bottom</sigvelo-button>
|
|
208
|
+
* <sigvelo-tooltip for="tooltip__bottom" placement="bottom">I'm on the bottom</sigvelo-tooltip>
|
|
209
|
+
*
|
|
210
|
+
* <sigvelo-button id="tooltip__left">Left</sigvelo-button>
|
|
211
|
+
* <sigvelo-tooltip for="tooltip__left" placement="left">I'm on the left </sigvelo-tooltip>
|
|
212
|
+
*
|
|
213
|
+
* <sigvelo-button id="tooltip__right">Right</sigvelo-button>
|
|
214
|
+
* <sigvelo-tooltip for="tooltip__right" placement="right">I'm on the right</sigvelo-tooltip>
|
|
215
|
+
* ```
|
|
216
|
+
*
|
|
217
|
+
* @example Distance
|
|
218
|
+
* You can change the distance of the tooltip from the anchor by setting the `distance` attribute to the desired number of pixels.
|
|
219
|
+
*
|
|
220
|
+
* ```html
|
|
221
|
+
* <sigvelo-button id="tooltip__distance-near">Near</sigvelo-button>
|
|
222
|
+
* <sigvelo-tooltip for="tooltip__distance-near" distance="0">I'm so near</sigvelo-tooltip>
|
|
223
|
+
*
|
|
224
|
+
* <sigvelo-button id="tooltip__distance-far">Far</sigvelo-button>
|
|
225
|
+
* <sigvelo-tooltip for="tooltip__distance-far" distance="30">I'm so far</sigvelo-tooltip>
|
|
226
|
+
* ```
|
|
227
|
+
*
|
|
228
|
+
* @example Open and close delays
|
|
229
|
+
* Tooltips allow a brief duration before opening and closing when hovering in and out with the mouse. You can control these value by setting the `open-delay` and `close-delay` attributes to the desired number of milliseconds.
|
|
230
|
+
*
|
|
231
|
+
* ```html
|
|
232
|
+
* <sigvelo-button id="tooltip__no-delay">No delay</sigvelo-button>
|
|
233
|
+
* <sigvelo-tooltip for="tooltip__no-delay" open-delay="0" close-delay="0">I have no delay whatsoever</sigvelo-tooltip>
|
|
234
|
+
*
|
|
235
|
+
* <sigvelo-button id="tooltip__long-delay">Long delay</sigvelo-button>
|
|
236
|
+
* <sigvelo-tooltip for="tooltip__long-delay" open-delay="500" close-delay="500">I have a long delay to open and close</sigvelo-tooltip>
|
|
237
|
+
* ```
|
|
238
|
+
*
|
|
239
|
+
* @example Changing the arrow size
|
|
240
|
+
* You can change the size of the tooltip's arrow with the `--arrow-size` custom property. Set it to `0` to remove the arrow.
|
|
241
|
+
*
|
|
242
|
+
* ```html
|
|
243
|
+
* <sigvelo-button id="tooltip__big-arrow">Big arrow</sigvelo-button>
|
|
244
|
+
* <sigvelo-tooltip for="tooltip__big-arrow" style="--arrow-size: 8px;">I have a big arrow</sigvelo-tooltip>
|
|
245
|
+
*
|
|
246
|
+
* <sigvelo-button id="tooltip__no-arrow">No arrow</sigvelo-button>
|
|
247
|
+
* <sigvelo-tooltip for="tooltip__no-arrow" without-arrow>I don't have an arrow</sigvelo-tooltip>
|
|
248
|
+
* ```
|
|
249
|
+
*
|
|
250
|
+
* @example Setting a max width
|
|
251
|
+
* Use the `--max-width` custom property to change the maximum width of the tooltip.
|
|
252
|
+
*
|
|
253
|
+
* ```html
|
|
254
|
+
* <sigvelo-button id="tooltip__max-width">Hover over me</sigvelo-button>
|
|
255
|
+
* <sigvelo-tooltip for="tooltip__max-width" style="--max-width: 160px;">
|
|
256
|
+
* I'm a tooltip with a lot of content. So much, in fact, that it will wrap to the next line.
|
|
257
|
+
* </sigvelo-tooltip>
|
|
258
|
+
* ```
|
|
259
|
+
*/
|
|
260
|
+
var SigveloTooltip = class extends SigveloElement {
|
|
261
|
+
constructor(..._args) {
|
|
262
|
+
super(..._args);
|
|
263
|
+
this.isAnchorFocused = false;
|
|
264
|
+
this.open = false;
|
|
265
|
+
this.placement = "top";
|
|
266
|
+
this.distance = 8;
|
|
267
|
+
this.offset = 0;
|
|
268
|
+
this.openDelay = 50;
|
|
269
|
+
this.closeDelay = 100;
|
|
270
|
+
this.activation = "auto";
|
|
271
|
+
this.withoutArrow = false;
|
|
272
|
+
this.handleAnchorBlur = () => {
|
|
273
|
+
this.isAnchorFocused = false;
|
|
274
|
+
this.open = false;
|
|
275
|
+
};
|
|
276
|
+
this.handleAnchorFocus = () => {
|
|
277
|
+
this.isAnchorFocused = true;
|
|
278
|
+
this.open = true;
|
|
279
|
+
};
|
|
280
|
+
this.handleAnchorPointerUp = () => {
|
|
281
|
+
this.userDismiss();
|
|
282
|
+
};
|
|
283
|
+
this.handleAnchorPointerEnter = (event) => {
|
|
284
|
+
if (event.pointerType === "touch") return;
|
|
285
|
+
if (!this.hoverInTimeout) this.hoverInTimeout = setTimeout(() => {
|
|
286
|
+
this.hoverInTimeout = void 0;
|
|
287
|
+
this.open = true;
|
|
288
|
+
}, this.openDelay);
|
|
289
|
+
};
|
|
290
|
+
this.handleAnchorPointerLeave = () => {
|
|
291
|
+
clearTimeout(this.hoverInTimeout);
|
|
292
|
+
this.hoverInTimeout = void 0;
|
|
293
|
+
};
|
|
294
|
+
this.handleDocumentPointerMove = (event) => {
|
|
295
|
+
if (!this.anchor || this.isAnchorFocused) return;
|
|
296
|
+
const isHoveringAnchor = event.composedPath().includes(this.anchor);
|
|
297
|
+
const isHoveringTooltip = event.composedPath().includes(this.tooltip);
|
|
298
|
+
if (isHoveringAnchor || isHoveringTooltip) {
|
|
299
|
+
clearTimeout(this.hoverOutTimeout);
|
|
300
|
+
this.hoverOutTimeout = void 0;
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
if (!this.hoverOutTimeout) this.hoverOutTimeout = setTimeout(() => {
|
|
304
|
+
this.hoverOutTimeout = void 0;
|
|
305
|
+
this.open = false;
|
|
306
|
+
}, this.closeDelay);
|
|
307
|
+
};
|
|
308
|
+
this.handleDocumentKeyDown = (event) => {
|
|
309
|
+
if (event.key === "Escape") this.userDismiss();
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
static {
|
|
313
|
+
this.styles = [hostStyles, tooltip_styles_default];
|
|
314
|
+
}
|
|
315
|
+
disconnectedCallback() {
|
|
316
|
+
super.disconnectedCallback();
|
|
317
|
+
clearInterval(this.hoverInTimeout);
|
|
318
|
+
clearInterval(this.hoverOutTimeout);
|
|
319
|
+
}
|
|
320
|
+
firstUpdated() {
|
|
321
|
+
if (!this.id) this.id = createId("sigvelo-tooltip-");
|
|
322
|
+
}
|
|
323
|
+
updated(changedProperties) {
|
|
324
|
+
if (changedProperties.has("open")) if (this.open && !this.tooltip.classList.contains("visible")) this.show();
|
|
325
|
+
else this.hide();
|
|
326
|
+
if (changedProperties.has("for") || changedProperties.has("activation")) {
|
|
327
|
+
const root = this.getRootNode();
|
|
328
|
+
if (this.anchor) {
|
|
329
|
+
this.anchor.removeAttribute("aria-describedby");
|
|
330
|
+
this.anchor.removeEventListener("pointerenter", this.handleAnchorPointerEnter);
|
|
331
|
+
this.anchor.removeEventListener("pointerleave", this.handleAnchorPointerLeave);
|
|
332
|
+
this.anchor.removeEventListener("pointerup", this.handleAnchorPointerUp);
|
|
333
|
+
this.anchor.removeEventListener("focus", this.handleAnchorFocus);
|
|
334
|
+
this.anchor.removeEventListener("blur", this.handleAnchorBlur);
|
|
335
|
+
}
|
|
336
|
+
this.anchor = this.for ? root.getElementById(this.for) : null;
|
|
337
|
+
if (this.anchor) {
|
|
338
|
+
if (this.activation === "auto") {
|
|
339
|
+
this.anchor.addEventListener("pointerenter", this.handleAnchorPointerEnter);
|
|
340
|
+
this.anchor.addEventListener("pointerleave", this.handleAnchorPointerLeave);
|
|
341
|
+
this.anchor.addEventListener("pointerup", this.handleAnchorPointerUp);
|
|
342
|
+
this.anchor.addEventListener("focus", this.handleAnchorFocus);
|
|
343
|
+
this.anchor.addEventListener("blur", this.handleAnchorBlur);
|
|
344
|
+
}
|
|
345
|
+
if (this.anchor.localName === "sigvelo-button") {
|
|
346
|
+
this.removeAttribute("role");
|
|
347
|
+
this.setAttribute("aria-hidden", "true");
|
|
348
|
+
this.anchor.removeAttribute("aria-describedby");
|
|
349
|
+
} else {
|
|
350
|
+
this.setAttribute("role", "tooltip");
|
|
351
|
+
this.removeAttribute("aria-hidden");
|
|
352
|
+
this.anchor?.setAttribute("aria-describedby", this.id);
|
|
353
|
+
}
|
|
354
|
+
} else if (this.for) console.warn(`A tooltip was assigned to an element with an ID of "${this.for}" but the element could not be found.`, this);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
/** Shows the tooltip. This should only be called from within updated(). */
|
|
358
|
+
async show() {
|
|
359
|
+
if (!this.anchor) return;
|
|
360
|
+
const openEvent = new SigveloBeforeOpenEvent();
|
|
361
|
+
this.dispatchEvent(openEvent);
|
|
362
|
+
if (openEvent.defaultPrevented) {
|
|
363
|
+
this.open = false;
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
if (this.anchor?.localName === "sigvelo-button") this.anchor.shadowRoot.querySelector("[part~=\"button\"]")?.setAttribute("aria-description", String(this.textContent));
|
|
367
|
+
openTooltips.forEach((tooltip) => {
|
|
368
|
+
if (tooltip.activation !== "manual") tooltip.open = false;
|
|
369
|
+
});
|
|
370
|
+
if (!this.tooltip.isConnected) return;
|
|
371
|
+
this.tooltip.showPopover();
|
|
372
|
+
this.customStates.set("open", true);
|
|
373
|
+
this.open = true;
|
|
374
|
+
openTooltips.add(this);
|
|
375
|
+
if (this.activation === "auto") {
|
|
376
|
+
document.addEventListener("keydown", this.handleDocumentKeyDown);
|
|
377
|
+
document.addEventListener("pointermove", this.handleDocumentPointerMove);
|
|
378
|
+
}
|
|
379
|
+
this.tooltip.classList.add("visible");
|
|
380
|
+
this.cleanup = autoUpdate(this.anchor, this.tooltip, () => this.reposition());
|
|
381
|
+
await animateWithClass(this.tooltip, "show");
|
|
382
|
+
this.dispatchEvent(new SigveloOpenEvent());
|
|
383
|
+
}
|
|
384
|
+
/** Hides the tooltip. This should only be called from within updated(). */
|
|
385
|
+
async hide() {
|
|
386
|
+
const closeEvent = new SigveloBeforeCloseEvent({ source: this });
|
|
387
|
+
this.dispatchEvent(closeEvent);
|
|
388
|
+
if (closeEvent.defaultPrevented) {
|
|
389
|
+
this.open = true;
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
if (this.anchor?.localName === "sigvelo-button") this.anchor.shadowRoot.querySelector("[part~=\"button\"]")?.removeAttribute("aria-description");
|
|
393
|
+
this.customStates.set("open", false);
|
|
394
|
+
this.open = false;
|
|
395
|
+
openTooltips.delete(this);
|
|
396
|
+
document.removeEventListener("keydown", this.handleDocumentKeyDown);
|
|
397
|
+
document.removeEventListener("pointermove", this.handleDocumentPointerMove);
|
|
398
|
+
if (this.tooltip.classList.contains("visible")) {
|
|
399
|
+
await animateWithClass(this.tooltip, "hide");
|
|
400
|
+
this.tooltip.classList.remove("visible");
|
|
401
|
+
this.tooltip.hidePopover();
|
|
402
|
+
this.dispatchEvent(new SigveloCloseEvent());
|
|
403
|
+
}
|
|
404
|
+
if (this.cleanup) {
|
|
405
|
+
this.cleanup();
|
|
406
|
+
this.cleanup = void 0;
|
|
407
|
+
this.removeAttribute("data-placement");
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
/** Called when the user manually dismisses the tooltip by clicking or pressing escape. */
|
|
411
|
+
userDismiss() {
|
|
412
|
+
if (this.open) {
|
|
413
|
+
this.isAnchorFocused = false;
|
|
414
|
+
this.open = false;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
/** @internal Repositions the tooltip */
|
|
418
|
+
reposition() {
|
|
419
|
+
if (!this.anchor) return;
|
|
420
|
+
computePosition(this.anchor, this.tooltip, {
|
|
421
|
+
placement: this.placement,
|
|
422
|
+
middleware: [
|
|
423
|
+
offset({
|
|
424
|
+
mainAxis: this.distance,
|
|
425
|
+
crossAxis: this.offset
|
|
426
|
+
}),
|
|
427
|
+
flip(),
|
|
428
|
+
shift(),
|
|
429
|
+
arrow({ element: this.arrow })
|
|
430
|
+
]
|
|
431
|
+
}).then(({ x, y, middlewareData, placement }) => {
|
|
432
|
+
this.setAttribute("data-placement", placement);
|
|
433
|
+
Object.assign(this.tooltip.style, {
|
|
434
|
+
left: `${x}px`,
|
|
435
|
+
top: `${y}px`
|
|
436
|
+
});
|
|
437
|
+
if (middlewareData.arrow) {
|
|
438
|
+
const arrowX = middlewareData.arrow.x;
|
|
439
|
+
const arrowY = middlewareData.arrow.y;
|
|
440
|
+
const staticSide = {
|
|
441
|
+
top: "bottom",
|
|
442
|
+
right: "left",
|
|
443
|
+
bottom: "top",
|
|
444
|
+
left: "right"
|
|
445
|
+
}[placement.split("-")[0]];
|
|
446
|
+
Object.assign(this.arrow.style, {
|
|
447
|
+
left: typeof arrowX === "number" ? `${arrowX}px` : "",
|
|
448
|
+
top: typeof arrowY === "number" ? `${arrowY}px` : "",
|
|
449
|
+
[staticSide]: "calc(var(--arrow-diagonal-size) * -1)"
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
requestAnimationFrame(() => {
|
|
454
|
+
if (!this.anchor) return;
|
|
455
|
+
const anchorCoords = this.anchor.getBoundingClientRect();
|
|
456
|
+
const tooltipCoords = this.tooltip.getBoundingClientRect();
|
|
457
|
+
if (this.placement.includes("top") || this.placement.includes("bottom")) {
|
|
458
|
+
const topEl = anchorCoords.top < tooltipCoords.top ? anchorCoords : tooltipCoords;
|
|
459
|
+
const bottomEl = anchorCoords.top < tooltipCoords.top ? tooltipCoords : anchorCoords;
|
|
460
|
+
this.polygon.style.setProperty("--polygon-x1", `${topEl.left}px`);
|
|
461
|
+
this.polygon.style.setProperty("--polygon-y1", `${topEl.bottom}px`);
|
|
462
|
+
this.polygon.style.setProperty("--polygon-x2", `${topEl.right}px`);
|
|
463
|
+
this.polygon.style.setProperty("--polygon-y2", `${topEl.bottom}px`);
|
|
464
|
+
this.polygon.style.setProperty("--polygon-x3", `${bottomEl.right}px`);
|
|
465
|
+
this.polygon.style.setProperty("--polygon-y3", `${bottomEl.top}px`);
|
|
466
|
+
this.polygon.style.setProperty("--polygon-x4", `${bottomEl.left}px`);
|
|
467
|
+
this.polygon.style.setProperty("--polygon-y4", `${bottomEl.top}px`);
|
|
468
|
+
} else {
|
|
469
|
+
const leftEl = anchorCoords.left < tooltipCoords.left ? anchorCoords : tooltipCoords;
|
|
470
|
+
const rightEl = anchorCoords.left < tooltipCoords.left ? tooltipCoords : anchorCoords;
|
|
471
|
+
this.polygon.style.setProperty("--polygon-x1", `${leftEl.right}px`);
|
|
472
|
+
this.polygon.style.setProperty("--polygon-y1", `${leftEl.top}px`);
|
|
473
|
+
this.polygon.style.setProperty("--polygon-x2", `${rightEl.left}px`);
|
|
474
|
+
this.polygon.style.setProperty("--polygon-y2", `${rightEl.top}px`);
|
|
475
|
+
this.polygon.style.setProperty("--polygon-x3", `${rightEl.left}px`);
|
|
476
|
+
this.polygon.style.setProperty("--polygon-y3", `${rightEl.bottom}px`);
|
|
477
|
+
this.polygon.style.setProperty("--polygon-x4", `${leftEl.right}px`);
|
|
478
|
+
this.polygon.style.setProperty("--polygon-y4", `${leftEl.bottom}px`);
|
|
479
|
+
}
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
render() {
|
|
483
|
+
return html`
|
|
484
|
+
<div id="tooltip" part="tooltip" popover="manual">
|
|
485
|
+
<div id="content" part="content">
|
|
486
|
+
<slot></slot>
|
|
487
|
+
</div>
|
|
488
|
+
<div id="arrow" part="arrow" role="presentation" ?hidden=${this.withoutArrow}></div>
|
|
489
|
+
<div id="polygon" role="presentation"></div>
|
|
490
|
+
</div>
|
|
491
|
+
`;
|
|
492
|
+
}
|
|
493
|
+
};
|
|
494
|
+
__decorate([query("#arrow")], SigveloTooltip.prototype, "arrow", void 0);
|
|
495
|
+
__decorate([query("#polygon")], SigveloTooltip.prototype, "polygon", void 0);
|
|
496
|
+
__decorate([query("#tooltip")], SigveloTooltip.prototype, "tooltip", void 0);
|
|
497
|
+
__decorate([property({ reflect: true })], SigveloTooltip.prototype, "for", void 0);
|
|
498
|
+
__decorate([property({
|
|
499
|
+
type: Boolean,
|
|
500
|
+
reflect: true
|
|
501
|
+
})], SigveloTooltip.prototype, "open", void 0);
|
|
502
|
+
__decorate([property({ reflect: true })], SigveloTooltip.prototype, "placement", void 0);
|
|
503
|
+
__decorate([property({ type: Number })], SigveloTooltip.prototype, "distance", void 0);
|
|
504
|
+
__decorate([property({ type: Number })], SigveloTooltip.prototype, "offset", void 0);
|
|
505
|
+
__decorate([property({
|
|
506
|
+
attribute: "open-delay",
|
|
507
|
+
type: Number
|
|
508
|
+
})], SigveloTooltip.prototype, "openDelay", void 0);
|
|
509
|
+
__decorate([property({
|
|
510
|
+
attribute: "close-delay",
|
|
511
|
+
type: Number
|
|
512
|
+
})], SigveloTooltip.prototype, "closeDelay", void 0);
|
|
513
|
+
__decorate([property()], SigveloTooltip.prototype, "activation", void 0);
|
|
514
|
+
__decorate([property({
|
|
515
|
+
attribute: "without-arrow",
|
|
516
|
+
type: Boolean,
|
|
517
|
+
reflect: true
|
|
518
|
+
})], SigveloTooltip.prototype, "withoutArrow", void 0);
|
|
519
|
+
customElements.define("sigvelo-tooltip", SigveloTooltip);
|
|
520
|
+
//#endregion
|
|
521
|
+
export { SigveloTooltip as t };
|