@versoly/plugins 0.0.3 → 0.0.4

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/dist/index.mjs CHANGED
@@ -3,119 +3,54 @@ var defineConfig = (config) => {
3
3
  return config;
4
4
  };
5
5
 
6
- // src/plugins/headroom.ts
7
- var headroom = defineConfig({
8
- name: "Headroom",
6
+ // src/plugins/calendly.ts
7
+ var calendly_default = defineConfig({
8
+ name: "calendly",
9
9
  cdnUrls: [
10
10
  {
11
- url: "https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min.js",
12
- inline: false,
13
- defer: true
11
+ url: "https://assets.calendly.com/assets/external/widget.js",
12
+ delay: true
13
+ },
14
+ {
15
+ url: "https://assets.calendly.com/assets/external/widget.css",
16
+ delay: true
14
17
  }
15
18
  ],
16
- js: `window.vGetElementsByToggle('headroom').forEach((elem, index) => {
17
- let options = window.vGetElementOptions(elem);
19
+ js: `
20
+ document.querySelectorAll('[data-calendly-url]').forEach(elem => {
21
+ const url = elem.dataset.calendlyUrl;
18
22
 
19
- var headroom = new Headroom(elem, {
20
- classes: {
21
- pinned: "d-block block",
22
- unpinned: 'd-none hidden'
23
- },
24
- ...options
25
- });
23
+ if (!url) {
24
+ return;
25
+ }
26
26
 
27
- headroom.init();
27
+ elem.addEventListener('click', e => {
28
+ e.preventDefault();
29
+ window.Calendly.initPopupWidget({ url, parentElement: elem });
30
+ })
28
31
  });`,
29
- checks: [{ plugin: "headroom" }],
30
- components: []
31
- });
32
-
33
- // src/plugins/marquee.ts
34
- var src = "https://d1pnnwteuly8z3.cloudfront.net/libs/versoly-marquee/0.0.2/versoly-marquee.iife.js";
35
- var marquee = defineConfig({
36
- name: "Marquee",
32
+ checks: [{ plugin: "calendly" }, { html: "calendly" }],
37
33
  options: {
38
- name: "Marquee",
39
- previewInEditor: true,
34
+ name: "Calendly Options",
40
35
  isShown: {
41
36
  props: {
42
- "data-toggle": "marquee"
37
+ "data-calendly-url": true
43
38
  }
44
39
  },
45
40
  fields: [
46
41
  {
47
- name: "Loop",
48
- type: "BooleanPropOption",
49
- propsName: "data-options.loop",
50
- defaultValue: true,
51
- enabledValue: true,
52
- inHeaderAction: true,
53
- headerGroup: "Core"
54
- },
55
- {
56
- name: "Duration",
57
- type: "SliderPropOption",
58
- propsName: "data-options.duration",
59
- min: 1,
60
- max: 20,
61
- stepSize: 1,
62
- defaultValue: 5
63
- },
64
- {
65
- name: "Direction",
66
- type: "IconButtonOption",
67
- propsName: "data-options.direction",
68
- options: ["ltr", "rtl", "ttb", "btt"],
69
- defaultValue: "ltr"
70
- },
71
- {
72
- name: "Pauseable",
73
- type: "BooleanPropOption",
74
- propsName: "data-options.pauseable",
75
- defaultValue: true
76
- },
77
- {
78
- name: "Iterations",
79
- type: "SliderPropOption",
80
- propsName: "data-options.iterations",
81
- min: 1,
82
- max: 5,
83
- stepSize: 1,
84
- defaultValue: 1,
85
- enabledValue: 1,
86
- inHeaderAction: true,
87
- headerGroup: "Core"
42
+ name: "Calendly Url",
43
+ propsName: "data-calendly-url",
44
+ type: "TextOption"
88
45
  }
89
46
  ]
90
- },
91
- checks: [{ plugin: "marquee" }],
92
- src,
93
- cdnUrls: [
94
- {
95
- url: src,
96
- defer: true
97
- }
98
- ],
99
- js: `window.vMarquees = [];
100
- window.vGetElementsByToggle('marquee').forEach((elem, index) => {
101
- const options = window.vGetElementOptions(elem);
102
- const marquee = new Marquee(elem, options);
103
- elem.setAttribute('data-marquee-index', index);
104
- window.vMarquees.push(elem);
105
- });`,
106
- displayNames: [
107
- {
108
- displayName: "Marquee",
109
- property: "data-toggle",
110
- value: "marquee"
111
- }
112
- ]
47
+ }
113
48
  });
114
49
 
115
50
  // src/plugins/swiper.ts
116
51
  var js = `
117
52
  window.vSwipers = [];
118
- window.vGetElementsByToggle('swiper').forEach((elem, index) => {
53
+ window.vGetElementsByToggle('swiper').forEach((elem) => {
119
54
  let props = window.vGetElementOptions(elem);
120
55
 
121
56
  if (props.pagination && props.pagination.renderBullet === 'number') {
@@ -127,11 +62,10 @@ window.vGetElementsByToggle('swiper').forEach((elem, index) => {
127
62
  }
128
63
  }
129
64
 
130
- elem.setAttribute('data-swiper-index', index);
131
65
  window.vSwipers.push(new Swiper(elem, props));
132
66
  });`;
133
- var swiper = defineConfig({
134
- name: "Swiper",
67
+ var swiper_default = defineConfig({
68
+ name: "swiper",
135
69
  cdnUrls: [
136
70
  {
137
71
  url: `https://cdnjs.cloudflare.com/ajax/libs/Swiper/9.3.2/swiper-bundle.min.js`,
@@ -147,8 +81,8 @@ var swiper = defineConfig({
147
81
  });
148
82
 
149
83
  // src/plugins/prism.ts
150
- var prism = defineConfig({
151
- name: "Prism",
84
+ var prism_default = defineConfig({
85
+ name: "prism",
152
86
  cdnUrls: [
153
87
  {
154
88
  url: "https://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/plugins/line-numbers/prism-line-numbers.min.css"
@@ -189,86 +123,14 @@ window.addEventListener('load', () => {
189
123
  checks: [{ html: "prism" }]
190
124
  });
191
125
 
192
- // src/plugins/tailtip.ts
193
- var js2 = `window.vTailtips = [];
194
-
195
- document.querySelectorAll('[data-toggle="tooltip"]').forEach((elem) => {
196
- const tailtip = Tailtip(elem, window.vGetElementOptions(elem));
197
- window.vTailtips.push(tailtip);
198
- });`;
199
- var tailtip = defineConfig({
200
- name: "Tailtip",
201
- src: "https://d1pnnwteuly8z3.cloudfront.net/libs/tailtip/1.0.3/tailtip.js",
202
- cdnUrls: [
203
- {
204
- url: "https://d1pnnwteuly8z3.cloudfront.net/libs/tailtip/1.0.3/tailtip.js",
205
- defer: true
206
- }
207
- ],
208
- js: js2,
209
- checks: [{ plugin: "tailtip" }],
210
- components: [
211
- {
212
- name: "Info Tooltip",
213
- category: "Plugins",
214
- html: `<span class="flex w-4 h-4 bg-dark text-white items-center justify-center rounded-full text-xs font-medium" data-toggle="tooltip">i</span>
215
- <div class="tooltip" role="tooltip">
216
- <div class="tooltip-inner">
217
- <span>This is a tooltip that is shown when hovered or clicked.</span>
218
- </div>
219
- <div class="tooltip-arrow"></div>
220
- </div>`
221
- }
222
- ],
223
- options: {
224
- name: "Tailtip Options",
225
- // isShown: (element) => element['data-toggle'] === 'tooltip',
226
- isShown: {
227
- props: {
228
- "data-toggle": "tooltip"
229
- }
230
- },
231
- previewInEditor: true,
232
- fields: [
233
- {
234
- name: "tailtip",
235
- type: "TailtipOption"
236
- },
237
- {
238
- name: "Placement",
239
- propsName: "data-options.placement",
240
- type: "DropdownPropOption",
241
- inline: true,
242
- noneDisplayValue: "Default",
243
- options: [false, "top", "bottom", "left", "right"]
244
- }
245
- ]
246
- }
247
- });
248
-
249
- // src/plugins/taos.ts
250
- var js3 = `!function(){const e=(e,t)=>{let s=!1;return()=>{s||(e(),s=!0,setTimeout((()=>s=!1),t))}},t=e=>{e.className!==e.dataset.taosClass&&(e.className=e.dataset.taosClass)},s=e=>e.className=e.className.replaceAll("taos:",""),a=e=>(e.className.includes("taos-init")||(e.dataset.taosClass=e.className+" taos-init",t(e)),e.className+=" !duration-[0ms] !delay-[0ms]",s(e),{element:e,once:"1"===getComputedStyle(e)["animation-iteration-count"],offset:parseInt(e.dataset.taosOffset||0)});let n=[],i=window.innerWidth,o=window.scrollY;const l=e((()=>{n.forEach((e=>e.trigger=e.element.getBoundingClientRect().top-window.innerHeight+e.offset+o))}),250),r=()=>{n=[],document.querySelectorAll('[class*="taos"]').forEach((e=>n.push(a(e)))),l(),requestAnimationFrame(c)},c=()=>{o=window.scrollY,n.forEach((({element:e,trigger:a,once:n})=>{a<o?t(e):!n&&e.className.includes("taos:")&&s(e)})),l()};r(),addEventListener("scroll",e(c,32)),addEventListener("orientationchange",r),addEventListener("resize",((e,t)=>{let s=null;return()=>{clearTimeout(s),s=setTimeout(e,t)}})((()=>{i!==window.innerWidth&&(i=window.innerWidth,r())}),250)),new MutationObserver((e=>{e.forEach((({target:e})=>{e.className&&!e.className.includes("taos-init")&&e.className.includes("taos:")&&n.push(a(e))}))})).observe(document,{attributes:!0,childList:!0,subtree:!0})}();`;
251
- var taos = defineConfig({
252
- name: "TAOS",
253
- css: `
254
- html.js :where([class*="taos:"]:not(.taos-init)) {
255
- visibility: hidden;
256
- }`,
257
- js: js3,
258
- checks: [{ plugin: "taos" }, { html: "taos:" }],
259
- safelist: ["!duration-[0ms]", "!delay-[0ms]"]
260
- });
261
-
262
126
  // src/plugins/tilt.ts
263
- var js4 = `window.vTilts = [];
264
- window.vGetElementsByToggle('tilt').forEach((tiltEle, index) => {
265
- const options = window.vGetElementOptions(elem);
266
- VanillaTilt.init(tiltEle, options)
267
- tiltEle.setAttribute('data-tilt-index', index);
268
- window.vTilts.push(tiltEle);
127
+ var js2 = `window.vTilts = [];
128
+ window.vGetElementsByToggle('tilt').forEach((elem) => {
129
+ VanillaTilt.init(elem, window.vGetElementOptions(elem));
130
+ window.vTilts.push(elem);
269
131
  });`;
270
- var tilt = defineConfig({
271
- name: "Tilt",
132
+ var tilt_default = defineConfig({
133
+ name: "tilt",
272
134
  options: {
273
135
  name: "Tilt",
274
136
  previewInEditor: true,
@@ -438,7 +300,7 @@ var tilt = defineConfig({
438
300
  defer: true
439
301
  }
440
302
  ],
441
- js: js4,
303
+ js: js2,
442
304
  checks: [{ plugin: "tilt" }],
443
305
  components: [
444
306
  {
@@ -455,8 +317,8 @@ var tilt = defineConfig({
455
317
  });
456
318
 
457
319
  // src/plugins/typed.ts
458
- var typed = defineConfig({
459
- name: "Typed",
320
+ var typed_default = defineConfig({
321
+ name: "typed",
460
322
  options: {
461
323
  name: "Typed Effect Options",
462
324
  previewInEditor: true,
@@ -540,7 +402,7 @@ var typed = defineConfig({
540
402
  }
541
403
  ],
542
404
  js: `
543
- window.vGetElementsByToggle('typed').forEach((elem, index) => {
405
+ window.vGetElementsByToggle('typed').forEach((elem) => {
544
406
  let options = window.vGetElementOptions(elem);
545
407
 
546
408
  options.strings = [elem.innerHTML, ...options.strings];
@@ -572,71 +434,388 @@ window.vGetElementsByToggle('typed').forEach((elem, index) => {
572
434
  ]
573
435
  });
574
436
 
575
- // src/plugins/eventAnalytics.ts
576
- var eventAnalytics = defineConfig({
577
- name: "Event Analytics",
578
- js: `const eventElements = document.querySelectorAll('[data-eventid]');
579
- for (const eventElement of eventElements) {
580
- if (eventElement.tagName !== 'FORM') {
581
- eventElement.addEventListener('click', function(e) {
582
- const eventName = eventElement.getAttribute('data-eventid');
437
+ // src/plugins/countup.ts
438
+ var countup_default = defineConfig({
439
+ name: "countup",
440
+ cdnUrls: [
441
+ {
442
+ url: "https://cdnjs.cloudflare.com/ajax/libs/scrollReveal.js/3.4.0/scrollreveal.min.js"
443
+ },
444
+ {
445
+ url: "https://cdnjs.cloudflare.com/ajax/libs/countup.js/2.0.8/countUp.umd.min.js"
446
+ }
447
+ ],
448
+ js: `window.scrollReveal = ScrollReveal();
583
449
 
584
- if (window.versoly) {
585
- window.versoly.event({name: eventName})
586
- }
587
- if (window.gtag) {
588
- window.gtag('event', eventName)
450
+ window.countUpStart = (elem) => {
451
+ var startVal = elem.dataset.from ? +elem.dataset.from : 0
452
+ ,endVal = elem.dataset.to ? +elem.dataset.to : 0
453
+ ,duration = elem.dataset.duration ? +elem.dataset.duration : 2
454
+ ,options = window.vGetElementOptions(elem);
455
+ const up = new countUp.CountUp(elem, endVal, {...options, startVal, duration});
456
+ up.start();
457
+ }
458
+
459
+ window.vGetElementsByToggle('countup').forEach(elem => {
460
+ scrollReveal.reveal(elem, {beforeReveal: window.countUpStart, duration: 0});
461
+ });`,
462
+ checks: [{ plugin: "countup" }],
463
+ options: {
464
+ name: "Countup Options",
465
+ isShown: {
466
+ props: {
467
+ "data-toggle": "countup"
589
468
  }
590
- if (window.amplitude) {
591
- window.amplitude.getInstance().logEvent(event);
469
+ },
470
+ fields: [
471
+ {
472
+ name: "Count From",
473
+ propsName: "data-from",
474
+ type: "NumberOption"
475
+ },
476
+ {
477
+ name: "Count To",
478
+ propsName: "data-to",
479
+ type: "NumberOption"
480
+ },
481
+ {
482
+ name: "Duration",
483
+ propsName: "data-duration",
484
+ type: "NumberOption",
485
+ placeholder: "2",
486
+ stepSize: 0.1
487
+ },
488
+ {
489
+ name: "Countup when Visible",
490
+ propsName: "data-aos",
491
+ options: [false, true],
492
+ type: "BooleanPropOption",
493
+ defaultValue: false
592
494
  }
593
- })
594
- }
595
- }`,
596
- checks: [{ html: "data-eventid" }]
495
+ ]
496
+ },
497
+ components: [
498
+ {
499
+ name: "Countup",
500
+ category: "Plugins",
501
+ html: `<h2 data-toggle="countup" data-aos data-aos-id="countup:in" data-from="100" data-to="800">100</h2>`
502
+ }
503
+ ]
597
504
  });
598
505
 
599
- // src/plugins/versolyAnalytics.ts
600
- var js5 = `!function(e){e.versoly.event=function(t){if(!("visibilityState"in document&&"prerender"===document.visibilityState||/bot|google|baidu|bing|msn|duckduckbot|teoma|slurp|yandex/i.test(navigator.userAgent)||e._phantom||e.__nightmare||e.navigator.webdriver||e.Cypress||""===e.location.host)){var n=new XMLHttpRequest;n.open("POST",e.versoly.url,!0),n.setRequestHeader("Content-Type","application/json; charset=UTF-8"),n.send(JSON.stringify({siteId:e.versoly.id,referrer:document.referrer,paramReferrer:"",hostname:e.location.hostname,pathname:e.location.pathname+e.location.search,width:e.innerWidth,height:e.innerHeight,tz:Intl.DateTimeFormat().resolvedOptions().timeZone,...t}))}}}(window),window.versoly.event({name: 'pageview'});`;
601
- var versolyAnalytics = defineConfig({
602
- name: "Versoly Analytics",
603
- js: js5,
604
- checks: [{ html: "/api/event" }]
605
- });
506
+ // src/plugins/countdown.ts
507
+ var js3 = `window.vGetElementsByToggle('countdown').forEach(elem => {
508
+ const deadline = new Date(elem.dataset.countdown).getTime();
606
509
 
607
- // src/plugins/modal.ts
608
- var modal = defineConfig({
609
- name: "Versoly UI Modal",
610
- js: `window.vGetElementsByToggle('modal').forEach(elem => {
611
- let options = window.vGetElementOptions(elem);
510
+ let elementsByType = {};
511
+ elem.querySelectorAll('[data-countdown-type]').forEach(el => {
512
+ elementsByType[el.dataset.countdownType] = el;
513
+ });
612
514
 
613
- if (options.globalBlockId && window.vComponents[options.globalBlockId]) {
614
- elem.dataset.html = window.vComponents[options.globalBlockId];
515
+ const countdownFunc = () => {
516
+ let t = (deadline - new Date().getTime()) / 1000;
615
517
 
616
- if (window.vComponents[options.globalBlockId].includes('data-formid')) {
617
- options.beforeShown = 'addFormListener'
518
+ if (t < 0) {
519
+ clearInterval(x);
520
+ t = 0;
618
521
  }
619
- }
620
522
 
621
- elem.dataset.options = JSON.stringify(options);
622
- });`,
623
- checks: [{ plugin: "modal" }]
624
- });
523
+ let valuesByType = {
524
+ seconds: t % 60,
525
+ minutes: (t / 60) % 60,
526
+ hours: (t / (60 * 60)) % 24,
527
+ days: t / (60 * 60 * 24),
528
+ };
625
529
 
626
- // src/plugins/form.ts
627
- var form = defineConfig({
628
- name: "versoly-form",
629
- checks: [{ plugin: "formid" }],
630
- js: `window.vPageLoadedAt = Date.now();
631
- window.vForms = window.vForms || {};
530
+ Object.keys(valuesByType).forEach(type => {
531
+ if (elementsByType[type]) {
532
+ let value = Math.floor(valuesByType[type]);
533
+ if (value < 10) {
534
+ value = '0' + value;
535
+ }
632
536
 
633
- setTimeout(() => {
634
- let inputs = [...document.getElementsByTagName("input")]
635
- inputs.forEach(i => {
636
- if (i.name === 'email_second' || i.name === 'name_second') {
637
- i.setAttribute('aria-hidden', 'true')
638
- i.setAttribute('tabindex', '-1')
639
- i.setAttribute('autocomplete', 'false')
537
+ elementsByType[type].innerHTML = value;
538
+ }
539
+ });
540
+ }
541
+
542
+ var x = setInterval(countdownFunc, 1000);
543
+ countdownFunc();
544
+ });
545
+ `;
546
+ var currentDate = /* @__PURE__ */ new Date();
547
+ var ISODateIn5Days = new Date(currentDate.getTime() + 5 * 24 * 60 * 60 * 1234).toISOString();
548
+ var countdown_default = defineConfig({
549
+ name: "countdown",
550
+ js: js3,
551
+ checks: [{ plugin: "countdown" }],
552
+ options: {
553
+ name: "Countdown",
554
+ isShown: {
555
+ props: {
556
+ "data-toggle": "countdown",
557
+ "data-countdown": true
558
+ }
559
+ },
560
+ fields: [
561
+ {
562
+ name: "Countdown Timer",
563
+ propsName: "data-countdown",
564
+ type: "DateTimePickerOption"
565
+ }
566
+ ]
567
+ },
568
+ components: [
569
+ {
570
+ name: "Countdown",
571
+ category: "Plugins",
572
+ html: `<h2 class="font-semibold" data-toggle="countdown" data-countdown="${ISODateIn5Days}">
573
+ <span data-countdown-type="days">4</span>
574
+ <span class="opacity-20">:</span>
575
+ <span data-countdown-type="hours">1</span>
576
+ <span class="opacity-20">:</span>
577
+ <span data-countdown-type="minutes">0</span>
578
+ <span class="opacity-20">:</span>
579
+ <span data-countdown-type="seconds">0</span>
580
+ </h2>`
581
+ }
582
+ ]
583
+ });
584
+
585
+ // src/plugins/finisher-header.ts
586
+ var finisher_header_default = defineConfig({
587
+ name: "finisher-header",
588
+ cdnUrls: [
589
+ {
590
+ url: "https://d1pnnwteuly8z3.cloudfront.net/js/finisher-header.es5.min.js",
591
+ defer: true
592
+ }
593
+ ],
594
+ js: `document.querySelectorAll('.finisher-header').forEach(elem => {
595
+ let options = window.vGetElementOptions(elem);
596
+ new FinisherHeader(options);
597
+ });`,
598
+ checks: [{ html: "finisher-header" }],
599
+ components: [
600
+ {
601
+ name: "Finisher Header",
602
+ category: "Plugins",
603
+ html: `<div class="finisher-header" data-toggle="finisher-header" data-options="{'count':15,'size':{'min':2,'max':40,'pulse':0},'speed':{'x':{'min':0,'max':0.8},'y':{'min':0,'max':0.2}},'colors':{'background':'#fff','particles':['#ff926b','#87ddfe','#acaaff','#1bffc2','#f9a5fe']},'blending':'screen','opacity':{'center':1,'edge':1},'skew':-1,'shapes':['c','s','t']}"></div>`
604
+ }
605
+ ]
606
+ });
607
+
608
+ // src/plugins/taos.ts
609
+ var js4 = `!function(){const e=(e,t)=>{let s=!1;return()=>{s||(e(),s=!0,setTimeout((()=>s=!1),t))}},t=e=>{e.className!==e.dataset.taosClass&&(e.className=e.dataset.taosClass)},s=e=>e.className=e.className.replaceAll("taos:",""),a=e=>(e.className.includes("taos-init")||(e.dataset.taosClass=e.className+" taos-init",t(e)),e.className+=" !duration-[0ms] !delay-[0ms]",s(e),{element:e,once:"1"===getComputedStyle(e)["animation-iteration-count"],offset:parseInt(e.dataset.taosOffset||0)});let n=[],i=window.innerWidth,o=window.scrollY;const l=e((()=>{n.forEach((e=>e.trigger=e.element.getBoundingClientRect().top-window.innerHeight+e.offset+o))}),250),r=()=>{n=[],document.querySelectorAll('[class*="taos"]').forEach((e=>n.push(a(e)))),l(),requestAnimationFrame(c)},c=()=>{o=window.scrollY,n.forEach((({element:e,trigger:a,once:n})=>{a<o?t(e):!n&&e.className.includes("taos:")&&s(e)})),l()};r(),addEventListener("scroll",e(c,32)),addEventListener("orientationchange",r),addEventListener("resize",((e,t)=>{let s=null;return()=>{clearTimeout(s),s=setTimeout(e,t)}})((()=>{i!==window.innerWidth&&(i=window.innerWidth,r())}),250)),new MutationObserver((e=>{e.forEach((({target:e})=>{e.className&&!e.className.includes("taos-init")&&e.className.includes("taos:")&&n.push(a(e))}))})).observe(document,{attributes:!0,childList:!0,subtree:!0})}();`;
610
+ var taos_default = defineConfig({
611
+ name: "taos",
612
+ css: `
613
+ html.js :where([class*="taos:"]:not(.taos-init)) {
614
+ visibility: hidden;
615
+ }`,
616
+ js: js4,
617
+ checks: [{ plugin: "taos" }, { html: "taos:" }],
618
+ safelist: ["!duration-[0ms]", "!delay-[0ms]"]
619
+ });
620
+
621
+ // src/plugins/tailtip.ts
622
+ var js5 = `window.vTailtips = [];
623
+
624
+ window.vGetElementsByToggle('tooltip').forEach((elem) => {
625
+ const tailtip = Tailtip(elem, window.vGetElementOptions(elem));
626
+ window.vTailtips.push(tailtip);
627
+ });`;
628
+ var tailtip_default = defineConfig({
629
+ name: "tailtip",
630
+ src: "https://d1pnnwteuly8z3.cloudfront.net/libs/tailtip/1.0.3/tailtip.js",
631
+ cdnUrls: [
632
+ {
633
+ url: "https://d1pnnwteuly8z3.cloudfront.net/libs/tailtip/1.0.3/tailtip.js",
634
+ defer: true
635
+ }
636
+ ],
637
+ js: js5,
638
+ checks: [{ plugin: "tailtip" }],
639
+ components: [
640
+ {
641
+ name: "Info Tooltip",
642
+ category: "Plugins",
643
+ html: `<span class="flex w-4 h-4 bg-dark text-white items-center justify-center rounded-full text-xs font-medium" data-toggle="tooltip">i</span>
644
+ <div class="tooltip" role="tooltip">
645
+ <div class="tooltip-inner">
646
+ <span>This is a tooltip that is shown when hovered or clicked.</span>
647
+ </div>
648
+ <div class="tooltip-arrow"></div>
649
+ </div>`
650
+ }
651
+ ],
652
+ options: {
653
+ name: "Tailtip Options",
654
+ // isShown: (element) => element['data-toggle'] === 'tooltip',
655
+ isShown: {
656
+ props: {
657
+ "data-toggle": "tooltip"
658
+ }
659
+ },
660
+ previewInEditor: true,
661
+ fields: [
662
+ {
663
+ name: "tailtip",
664
+ type: "TailtipOption"
665
+ },
666
+ {
667
+ name: "Placement",
668
+ propsName: "data-options.placement",
669
+ type: "DropdownPropOption",
670
+ inline: true,
671
+ noneDisplayValue: "Default",
672
+ options: [false, "top", "bottom", "left", "right"]
673
+ }
674
+ ]
675
+ }
676
+ });
677
+
678
+ // src/plugins/versoly-marquee.ts
679
+ var src = "https://d1pnnwteuly8z3.cloudfront.net/libs/versoly-marquee/0.0.2/versoly-marquee.iife.js";
680
+ var versoly_marquee_default = defineConfig({
681
+ name: "versoly-marquee",
682
+ options: {
683
+ name: "Marquee",
684
+ js: `window.vMarquees = [];
685
+ window.vGetElementsByToggle('marquee').forEach((elem) => {
686
+ const marquee = new Marquee(elem, window.vGetElementOptions(elem));
687
+ window.vMarquees.push(marquee);
688
+ });`,
689
+ previewInEditor: true,
690
+ isShown: {
691
+ props: {
692
+ "data-toggle": "marquee"
693
+ }
694
+ },
695
+ fields: [
696
+ {
697
+ name: "Loop",
698
+ type: "BooleanPropOption",
699
+ propsName: "data-options.loop",
700
+ defaultValue: true,
701
+ enabledValue: true,
702
+ inHeaderAction: true,
703
+ headerGroup: "Core"
704
+ },
705
+ {
706
+ name: "Duration",
707
+ type: "SliderPropOption",
708
+ propsName: "data-options.duration",
709
+ min: 1,
710
+ max: 20,
711
+ stepSize: 1,
712
+ defaultValue: 5
713
+ },
714
+ {
715
+ name: "Direction",
716
+ type: "IconButtonOption",
717
+ propsName: "data-options.direction",
718
+ options: ["ltr", "rtl", "ttb", "btt"],
719
+ defaultValue: "ltr"
720
+ },
721
+ {
722
+ name: "Pauseable",
723
+ type: "BooleanPropOption",
724
+ propsName: "data-options.pauseable",
725
+ defaultValue: true
726
+ },
727
+ {
728
+ name: "Iterations",
729
+ type: "SliderPropOption",
730
+ propsName: "data-options.iterations",
731
+ min: 1,
732
+ max: 5,
733
+ stepSize: 1,
734
+ defaultValue: 1,
735
+ enabledValue: 1,
736
+ inHeaderAction: true,
737
+ headerGroup: "Core"
738
+ }
739
+ ]
740
+ },
741
+ checks: [{ plugin: "marquee" }],
742
+ src,
743
+ cdnUrls: [
744
+ {
745
+ url: src,
746
+ defer: true
747
+ }
748
+ ],
749
+ displayNames: [
750
+ {
751
+ displayName: "Marquee",
752
+ property: "data-toggle",
753
+ value: "marquee"
754
+ }
755
+ ]
756
+ });
757
+
758
+ // src/plugins/versoly-ui.ts
759
+ var versoly_ui_default = defineConfig({
760
+ name: "versoly-ui",
761
+ cdnUrls: [
762
+ {
763
+ url: "https://d1pnnwteuly8z3.cloudfront.net/libs/floating-ui/1.0.1/floating-ui.min.js",
764
+ defer: true
765
+ },
766
+ {
767
+ url: "https://d1pnnwteuly8z3.cloudfront.net/libs/versoly-ui/2.1.1/versoly-ui.js",
768
+ delay: true
769
+ }
770
+ ]
771
+ });
772
+
773
+ // src/plugins/versoly-analytics.ts
774
+ var js6 = `!function(e){e.versoly.event=function(t){if(!("visibilityState"in document&&"prerender"===document.visibilityState||/bot|google|baidu|bing|msn|duckduckbot|teoma|slurp|yandex/i.test(navigator.userAgent)||e._phantom||e.__nightmare||e.navigator.webdriver||e.Cypress||""===e.location.host)){var n=new XMLHttpRequest;n.open("POST",e.versoly.url,!0),n.setRequestHeader("Content-Type","application/json; charset=UTF-8"),n.send(JSON.stringify({siteId:e.versoly.id,referrer:document.referrer,paramReferrer:"",hostname:e.location.hostname,pathname:e.location.pathname+e.location.search,width:e.innerWidth,height:e.innerHeight,tz:Intl.DateTimeFormat().resolvedOptions().timeZone,...t}))}}}(window),window.versoly.event({name: 'pageview'});`;
775
+ var versoly_analytics_default = defineConfig({
776
+ name: "Versoly Analytics",
777
+ js: js6,
778
+ checks: [{ html: "/api/event" }]
779
+ });
780
+
781
+ // src/plugins/versoly-events.ts
782
+ var versoly_events_default = defineConfig({
783
+ name: "versoly-events",
784
+ js: `const eventElements = document.querySelectorAll('[data-eventid]');
785
+ for (const eventElement of eventElements) {
786
+ if (eventElement.tagName !== 'FORM') {
787
+ eventElement.addEventListener('click', function(e) {
788
+ const eventName = eventElement.getAttribute('data-eventid');
789
+
790
+ if (window.versoly) {
791
+ window.versoly.event({name: eventName})
792
+ }
793
+ if (window.gtag) {
794
+ window.gtag('event', eventName)
795
+ }
796
+ if (window.amplitude) {
797
+ window.amplitude.getInstance().logEvent(event);
798
+ }
799
+ })
800
+ }
801
+ }`,
802
+ checks: [{ html: "data-eventid" }]
803
+ });
804
+
805
+ // src/plugins/versoly-form.ts
806
+ var versoly_form_default = defineConfig({
807
+ name: "versoly-form",
808
+ checks: [{ plugin: "formid" }],
809
+ js: `window.vPageLoadedAt = Date.now();
810
+ window.vForms = window.vForms || {};
811
+
812
+ setTimeout(() => {
813
+ let inputs = [...document.getElementsByTagName("input")]
814
+ inputs.forEach(i => {
815
+ if (i.name === 'email_second' || i.name === 'name_second') {
816
+ i.setAttribute('aria-hidden', 'true')
817
+ i.setAttribute('tabindex', '-1')
818
+ i.setAttribute('autocomplete', 'false')
640
819
  }
641
820
  })
642
821
  }, 3000)
@@ -780,253 +959,46 @@ window.addFormListener && window.addFormListener()
780
959
  `
781
960
  });
782
961
 
783
- // src/plugins/countup.ts
784
- var countup = defineConfig({
785
- name: "Countup",
786
- cdnUrls: [
787
- {
788
- url: "https://cdnjs.cloudflare.com/ajax/libs/scrollReveal.js/3.4.0/scrollreveal.min.js"
789
- },
790
- {
791
- url: "https://cdnjs.cloudflare.com/ajax/libs/countup.js/2.0.8/countUp.umd.min.js"
792
- }
793
- ],
794
- js: `window.scrollReveal = ScrollReveal();
795
-
796
- window.countStart = e => {
797
- var startVal = e.dataset.from ? +e.dataset.from : 0
798
- ,endVal = e.dataset.to ? +e.dataset.to : 0
799
- ,duration = e.dataset.duration ? +e.dataset.duration : 2
800
- ,options = e.dataset.options ? JSON.parse(e.dataset.options) : {}
801
- const up = new countUp.CountUp(e, endVal, {...options, startVal, duration});
802
- up.start()
803
- }
804
-
805
- window.vGetElementsByToggle('countup').forEach(e => {
806
- scrollReveal.reveal(e, {beforeReveal: window.countStart, duration: 0});
807
- });`,
808
- checks: [{ plugin: "countup" }],
809
- options: {
810
- name: "Countup Options",
811
- isShown: {
812
- props: {
813
- "data-toggle": "countup"
814
- }
815
- },
816
- fields: [
817
- {
818
- name: "Count From",
819
- propsName: "data-from",
820
- type: "NumberOption"
821
- },
822
- {
823
- name: "Count To",
824
- propsName: "data-to",
825
- type: "NumberOption"
826
- },
827
- {
828
- name: "Duration",
829
- propsName: "data-duration",
830
- type: "NumberOption",
831
- placeholder: "2",
832
- stepSize: 0.1
833
- },
834
- {
835
- name: "Countup when Visible",
836
- propsName: "data-aos",
837
- options: [false, true],
838
- type: "BooleanPropOption",
839
- defaultValue: false
840
- }
841
- ]
842
- },
843
- components: [
844
- {
845
- name: "Countup",
846
- category: "Plugins",
847
- html: `<h2 data-toggle="countup" data-aos data-aos-id="countup:in" data-from="100" data-to="800">100</h2>`
848
- }
849
- ]
850
- });
851
-
852
- // src/plugins/countdown.ts
853
- var js6 = `window.vGetElementsByToggle('countdown').forEach(e => {
854
- const deadline = new Date(e.dataset.countdown).getTime();
855
-
856
- const daysEl = e.querySelector('[data-countdown-type="days"]'),
857
- hoursEl = e.querySelector('[data-countdown-type="hours"]'),
858
- minutesEl = e.querySelector('[data-countdown-type="minutes"]'),
859
- secondsEl = e.querySelector('[data-countdown-type="seconds"]');
860
-
861
- const countdownFunc = () => {
862
- const now = new Date().getTime();
863
- let t = deadline - now;
864
-
865
- if (t < 0) {
866
- clearInterval(x);
867
- t = 0;
868
- }
869
-
870
- let seconds = ''+Math.floor((t / 1000) % 60),
871
- minutes = ''+Math.floor((t / 1000 / 60) % 60),
872
- hours = ''+Math.floor((t / (1000 * 60 * 60)) % 24),
873
- days = ''+Math.floor(t / (1000 * 60 * 60 * 24));
874
-
875
- if (seconds.length === 1) seconds = '0' + seconds;
876
- if (minutes.length === 1) minutes = '0' + minutes;
877
- if (hours.length === 1) hours = '0' + hours;
878
- if (days.length === 1) days = '0' + days;
879
-
880
- if (secondsEl) secondsEl.innerHTML = seconds;
881
- if (minutesEl) minutesEl.innerHTML = minutes;
882
- if (hoursEl) hoursEl.innerHTML = hours;
883
- if (daysEl) daysEl.innerHTML = days;
884
- }
962
+ // src/plugins/versoly-modal.ts
963
+ var versoly_modal_default = defineConfig({
964
+ name: "versoly-modal",
965
+ js: `window.vGetElementsByToggle('modal').forEach(elem => {
966
+ let options = window.vGetElementOptions(elem);
885
967
 
886
- var x = setInterval(countdownFunc, 1000);
887
- countdownFunc();
888
- })
889
- `;
890
- var currentDate = /* @__PURE__ */ new Date();
891
- var ISODateIn5Days = new Date(currentDate.getTime() + 5 * 24 * 60 * 60 * 1234).toISOString();
892
- var countdown = defineConfig({
893
- name: "Countdown Options",
894
- js: js6,
895
- checks: [{ plugin: "countdown" }],
896
- options: {
897
- name: "Countdown",
898
- isShown: {
899
- props: {
900
- "data-toggle": "countdown",
901
- "data-countdown": true
902
- }
903
- },
904
- fields: [
905
- {
906
- name: "Countdown Timer",
907
- propsName: "data-countdown",
908
- type: "DateTimePickerOption"
909
- }
910
- ]
911
- },
912
- components: [
913
- {
914
- name: "Countdown",
915
- category: "Plugins",
916
- html: `<h2 class="font-semibold" data-toggle="countdown" data-countdown="${ISODateIn5Days}">
917
- <span data-countdown-type="days">4</span>
918
- <span class="opacity-20">:</span>
919
- <span data-countdown-type="hours">1</span>
920
- <span class="opacity-20">:</span>
921
- <span data-countdown-type="minutes">0</span>
922
- <span class="opacity-20">:</span>
923
- <span data-countdown-type="seconds">0</span>
924
- </h2>`
925
- }
926
- ]
927
- });
968
+ if (options.globalBlockId && window.vComponents[options.globalBlockId]) {
969
+ elem.dataset.html = window.vComponents[options.globalBlockId];
928
970
 
929
- // src/plugins/calendly.ts
930
- var calendly = defineConfig({
931
- name: "Calendly",
932
- cdnUrls: [
933
- {
934
- url: "https://assets.calendly.com/assets/external/widget.js",
935
- delay: true
936
- },
937
- {
938
- url: "https://assets.calendly.com/assets/external/widget.css",
939
- delay: true
971
+ if (window.vComponents[options.globalBlockId].includes('data-formid')) {
972
+ options.beforeShown = 'addFormListener'
940
973
  }
941
- ],
942
- js: `
943
- document.querySelectorAll('[data-calendly-url]').forEach(a => {
944
- const url = a.getAttribute('data-calendly-url')
945
-
946
- if (!url) {
947
- return;
948
974
  }
949
975
 
950
- a.addEventListener('click', e => {
951
- e.preventDefault();
952
- window.Calendly.initPopupWidget({ url, parentElement: a})
953
- })
954
- });`,
955
- checks: [{ plugin: "calendly" }, { html: "calendly" }],
956
- options: {
957
- name: "Calendly Options",
958
- isShown: {
959
- props: {
960
- "data-calendly-url": true
961
- }
962
- },
963
- fields: [
964
- {
965
- name: "Calendly Url",
966
- propsName: "data-calendly-url",
967
- type: "TextOption"
968
- }
969
- ]
970
- }
971
- });
972
-
973
- // src/plugins/versolyUI.ts
974
- var versolyUI = defineConfig({
975
- name: "Versoly UI",
976
- cdnUrls: [
977
- {
978
- url: "https://d1pnnwteuly8z3.cloudfront.net/libs/floating-ui/1.0.1/floating-ui.min.js",
979
- defer: true
980
- },
981
- {
982
- url: "https://d1pnnwteuly8z3.cloudfront.net/libs/versoly-ui/2.1.1/versoly-ui.js",
983
- delay: true
984
- }
985
- ]
986
- });
987
-
988
- // src/plugins/finisherHeader.ts
989
- var finisherHeader = defineConfig({
990
- name: "Finisher Header",
991
- cdnUrls: [
992
- {
993
- url: "https://d1pnnwteuly8z3.cloudfront.net/js/finisher-header.es5.min.js",
994
- defer: true
995
- }
996
- ],
997
- js: `document.querySelectorAll('.finisher-header').forEach(elem => {
998
- let options = window.vGetElementOptions(elem);
999
- new FinisherHeader(options);
976
+ elem.dataset.options = JSON.stringify(options);
1000
977
  });`,
1001
- checks: [{ html: "finisher-header" }],
1002
- components: [
1003
- {
1004
- name: "Finisher Header",
1005
- category: "Plugins",
1006
- html: `<div class="finisher-header" data-toggle="finisher-header" data-options="{'count':15,'size':{'min':2,'max':40,'pulse':0},'speed':{'x':{'min':0,'max':0.8},'y':{'min':0,'max':0.2}},'colors':{'background':'#fff','particles':['#ff926b','#87ddfe','#acaaff','#1bffc2','#f9a5fe']},'blending':'screen','opacity':{'center':1,'edge':1},'skew':-1,'shapes':['c','s','t']}"></div>`
1007
- }
1008
- ]
978
+ checks: [{ plugin: "modal" }]
1009
979
  });
1010
980
 
1011
981
  // src/plugins/index.ts
1012
982
  var plugins = {
1013
- headroom,
1014
- marquee,
1015
- swiper,
1016
- prism,
1017
- tailtip,
1018
- taos,
1019
- tilt,
1020
- typed,
1021
- modal,
1022
- form,
1023
- finisherHeader,
1024
- countup,
1025
- countdown,
1026
- eventAnalytics,
1027
- versolyAnalytics,
1028
- versolyUI,
1029
- calendly
983
+ // external
984
+ calendly: calendly_default,
985
+ swiper: swiper_default,
986
+ prism: prism_default,
987
+ tilt: tilt_default,
988
+ typed: typed_default,
989
+ countup: countup_default,
990
+ countdown: countdown_default,
991
+ "finisher-header": finisher_header_default,
992
+ taos: taos_default,
993
+ tailtip: tailtip_default,
994
+ // versoly packages
995
+ "versoly-marquee": versoly_marquee_default,
996
+ "versoly-ui": versoly_ui_default,
997
+ // internal
998
+ "versoly-analytics": versoly_analytics_default,
999
+ "versoly-events": versoly_events_default,
1000
+ "versoly-form": versoly_form_default,
1001
+ "versoly-modal": versoly_modal_default
1030
1002
  };
1031
1003
  export {
1032
1004
  defineConfig,