12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- <script lang="ts">
- import DOMPurify from 'dompurify';
- import { onDestroy } from 'svelte';
- import { marked } from 'marked';
- import tippy from 'tippy.js';
- import { roundArrow } from 'tippy.js';
- export let placement = 'top';
- export let content = `I'm a tooltip!`;
- export let touch = true;
- export let className = 'flex';
- export let theme = '';
- export let allowHTML = true;
- let tooltipElement;
- let tooltipInstance;
- $: if (tooltipElement && content) {
- if (tooltipInstance) {
- tooltipInstance.setContent(DOMPurify.sanitize(content));
- } else {
- tooltipInstance = tippy(tooltipElement, {
- content: DOMPurify.sanitize(content),
- placement: placement,
- allowHTML: allowHTML,
- touch: touch,
- ...(theme !== '' ? { theme } : { theme: 'dark' }),
- arrow: false,
- offset: [0, 4]
- });
- }
- } else if (tooltipInstance && content === '') {
- if (tooltipInstance) {
- tooltipInstance.destroy();
- }
- }
- onDestroy(() => {
- if (tooltipInstance) {
- tooltipInstance.destroy();
- }
- });
- </script>
- <div bind:this={tooltipElement} aria-label={DOMPurify.sanitize(content)} class={className}>
- <slot />
- </div>
|