File size: 1,271 Bytes
b39afbe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**
 * Copyright (c) 2023 MERCENARIES.AI PTE. LTD.
 * All rights reserved.
 */

import tippy from 'tippy.js';
import 'tippy.js/dist/tippy.css';
import DOMPurify from 'dompurify';

import { galleryComponent } from './GalleryComponent.js';
import { audioPlayerComponent } from './AudioPlayerComponent.js';

export function registerUtils(alpine) {
  alpine.data('inputUtils', () => ({
    textareaAutoResize(el) {
      el.style.height = 'auto';
      el.style.height = Math.min(el.scrollHeight, 400) + 'px';
    },
    scrollBottom(el) {
      el.scrollTop = el.scrollHeight;
    }
  }));

  alpine.data('gallery', () => galleryComponent());
  alpine.data('audioPlayer', () => audioPlayerComponent());
  alpine.magic('tooltip', (el) => (message) => {
    const instance = tippy(el, { content: message, trigger: 'manual' });

    instance.show();

    setTimeout(() => {
      instance.hide();

      setTimeout(() => instance.destroy(), 150);
    }, 2000);
  });

  // Directive: x-tooltip or x-tooltip:reactive
  alpine.directive('tooltip', (el, { value, expression }, { evaluate }) => {
    let text = expression;
    if (value === 'reactive') {
      text = evaluate(expression);
    }
    tippy(el, { content: DOMPurify.sanitize(text, { ALLOWED_TAGS: [] }) });
  });
}