@vestigemetrics/vue 1.0.4 → 1.0.6

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/README.md CHANGED
@@ -1,15 +1,13 @@
1
1
  # @vestigemetrics/vue
2
2
 
3
- Adapter Vue para a tag compilada do Vestige Metrics.
3
+ Integre o Vestige Metrics ao seu projeto Vue como um plugin, com uma API alinhada ao ciclo de vida da aplicação. O adapter inicializa o rastreamento no navegador e disponibiliza métodos para registrar pageviews, eventos e leads identificados.
4
+
5
+ Em aplicações Vue com navegação client-side, você também pode conectar o Vue Router para acompanhar a rota inicial e as mudanças de rota como pageviews. A configuração pode usar o modo automático ou deixar o registro sob controle da aplicação, conforme a necessidade do projeto.
4
6
 
5
7
  - [Documentação da plataforma](https://docs.vestigemetrics.com.br/)
6
8
  - [Site do Vestige Metrics](https://vestigemetrics.com.br/)
7
9
 
8
- O pacote carrega automaticamente a tag da conta informada:
9
-
10
- ```text
11
- //tag.ltrck.com.br/lt{ACCOUNT_ID}.js
12
- ```
10
+ Para começar, instale o pacote, copie o init code da sua conta no painel do Vestige Metrics e registre o plugin na criação da aplicação Vue.
13
11
 
14
12
  ## Instalação
15
13
 
@@ -19,7 +17,7 @@ yarn add @vestigemetrics/vue
19
17
 
20
18
  ## Instalação no Vue
21
19
 
22
- O valor de `init` deve ser copiado diretamente do painel do Vestige Metrics, no código de instalação da conta. Não informe apenas o número da conta: o adapter precisa do código completo, como `a-0`.
20
+ O valor de `init` deve ser copiado do painel do Vestige Metrics (`app.vestigemetrics.com.br`), em **Configurações → Rastreamento**. Use o init code exibido no painel; não substitua por um valor de exemplo.
23
21
 
24
22
  ```ts
25
23
  import { createApp } from 'vue';
@@ -29,19 +27,38 @@ import App from './App.vue';
29
27
  const app = createApp(App);
30
28
 
31
29
  app.use(createVestige({
32
- init: '5-0'
30
+ init: '<SEU_INIT_CODE>'
33
31
  }));
34
32
 
35
33
  app.mount('#app');
36
34
  ```
37
35
 
36
+ ## SSR e Nuxt
37
+
38
+ O adapter é client-only: a tag utiliza APIs do navegador e não deve ser inicializada durante o SSR. Em aplicações Nuxt, crie o plugin com o sufixo `.client.ts` para garantir que ele seja executado apenas no navegador:
39
+
40
+ ```ts
41
+ // plugins/vestige.client.ts
42
+ import { createVestige } from '@vestigemetrics/vue';
43
+
44
+ export default defineNuxtPlugin((nuxtApp) => {
45
+ nuxtApp.vueApp.use(createVestige({
46
+ init: '<SEU_INIT_CODE>',
47
+ router: nuxtApp.$router,
48
+ preset: 'auto'
49
+ }));
50
+ });
51
+ ```
52
+
53
+ Se o adapter for inicializado no server-side, ele lança um erro para indicar que a configuração deve ser movida para o client-side.
54
+
38
55
  ## Vue Router
39
56
 
40
57
  Quando um router é informado, o adapter cria um novo pageview na rota inicial e em cada navegação.
41
58
 
42
59
  ```ts
43
60
  app.use(createVestige({
44
- init: '5-0',
61
+ init: '<SEU_INIT_CODE>',
45
62
  router,
46
63
  preset: 'auto'
47
64
  }));
@@ -55,7 +72,7 @@ Com router, o adapter constrói o pageview, mas deixa o registro sob controle da
55
72
 
56
73
  ```ts
57
74
  app.use(createVestige({
58
- init: '5-0',
75
+ init: '<SEU_INIT_CODE>',
59
76
  router,
60
77
  preset: 'manual'
61
78
  }));
@@ -85,8 +102,17 @@ Quando um router é configurado, chamar `buildPageview()` manualmente gera erro.
85
102
  ## Eventos e leads
86
103
 
87
104
  ```ts
105
+ await vestige.event('checkout_started');
106
+
107
+ await vestige.event('click_contact_button');
108
+
88
109
  await vestige.event({
89
- name: 'checkout_started'
110
+ event: 'checkout_started',
111
+ payment_method: 'CREDIT_CARD',
112
+ product_name: 'Plano Pro',
113
+ product_id: 'pro-monthly',
114
+ value: 99.90,
115
+ currency: 'BRL'
90
116
  });
91
117
 
92
118
  await vestige.identifyLead('EMAIL', 'user@example.com');
package/dist/index.js CHANGED
@@ -44,6 +44,9 @@ function loadScript(documentRef, url) {
44
44
  }
45
45
  function loadVestigeTag(options) {
46
46
  var _a;
47
+ if (typeof window === "undefined" || typeof document === "undefined") {
48
+ throw new Error("Vestige Metrics s\xF3 pode ser inicializado no client-side. Em aplica\xE7\xF5es SSR, registre o adapter apenas no navegador.");
49
+ }
47
50
  const browserWindow = window;
48
51
  const encodedAccount = options.init.split("-")[0];
49
52
  const accountId = Number(base62.decode(encodedAccount));
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/vue/useVestige.ts", "../../../src/tag/internal/infrastructure.ts", "../../../src/vue/createVestige.ts"],
4
- "sourcesContent": ["import { inject } from 'vue';\nimport type { VestigeVueClient } from './createVestige';\n\nexport const VESTIGE_INJECTION_KEY = Symbol('vestige');\n\nexport function useVestige(): VestigeVueClient {\n const tag = inject<VestigeVueClient>(VESTIGE_INJECTION_KEY);\n if (!tag) throw new Error('VestigeTag has not been installed');\n return tag;\n}\n", "export interface VestigeDocument extends Document {\n cookie: string;\n}\n\nexport function getCookie(documentRef: VestigeDocument, name: string): string {\n const prefix = `${name}=`;\n const entry = documentRef.cookie.split(';').map((item) => item.trim()).find((item) => item.startsWith(prefix));\n return entry ? unescape(entry.slice(prefix.length)) : '';\n}\n\nexport function setCookie(documentRef: VestigeDocument, domain: string, name: string, value: string | number, ttlMinutes = 365 * 24 * 60): void {\n const expires = new Date(Date.now() + ttlMinutes * 60 * 1000).toUTCString();\n documentRef.cookie = `${name}=${value};expires=${expires};path=/;domain=${domain}`;\n}\n\nexport function includeScript(documentRef: Document, src: string, callback?: () => void): void {\n const script = documentRef.createElement('script');\n script.type = 'text/javascript';\n script.src = src;\n if (callback) script.onload = callback;\n const firstScript = documentRef.getElementsByTagName('script')[0];\n firstScript?.parentNode?.insertBefore(script, firstScript);\n}\n\nexport function getUrlParams(locationRef: Location): Record<string, string> {\n const params: Record<string, string> = {};\n new URLSearchParams(locationRef.search).forEach((value, key) => { params[key] = value; });\n return params;\n}\n\nexport function getTld(documentRef: VestigeDocument, locationRef: Location, storage: Storage): string {\n const key = 'ltTLD';\n const saved = storage.getItem(key);\n if (saved) return saved;\n const parts = locationRef.hostname.split('.');\n let partial = '';\n for (let index = parts.length - 1; index > 0; index--) {\n partial = `.${parts[index]}${partial}`;\n setCookie(documentRef, partial, key, Date.now(), 5 / 60);\n if (getCookie(documentRef, key)) {\n storage.setItem(key, partial);\n return partial;\n }\n }\n return `.${locationRef.hostname}`;\n}\n\nexport const base62 = {\n charset: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''),\n encode(value: number): string | number {\n if (value === 0) return 0;\n const result: string[] = [];\n while (value > 0) {\n result.unshift(this.charset[value % 62]);\n value = Math.floor(value / 62);\n }\n return result.join('');\n },\n decode(value: string): number {\n return value.split('').reverse().reduce((result, char, index) => result + this.charset.indexOf(char) * (62 ** index), 0);\n }\n};\n", "import type { App, Plugin } from 'vue';\nimport { VESTIGE_INJECTION_KEY } from './useVestige';\nimport { base62 } from '../tag/internal/infrastructure';\n\nexport interface VestigeBrowserTag {\n init(accountId: string): void;\n buildPageview(data?: { url?: string; referrer?: string }): unknown;\n registerPageview(context?: unknown): void;\n pageview(data?: { url?: string; referrer?: string }): void;\n event(data: string | Record<string, unknown>): void;\n identifyLead(type: 'EMAIL' | 'PHONE', value: string): void;\n getVdaCode(): string | null;\n updateElementWithVda(element?: Element, parameter?: string, urlPattern?: string): void;\n}\n\ninterface BrowserWindow extends Window {\n lt?: { tag?: VestigeBrowserTag; _c?: Array<[string, unknown]> };\n}\n\nexport interface VestigeRouter {\n currentRoute: { value: { fullPath: string } };\n afterEach(callback: (to: { fullPath: string }) => void): void;\n}\n\nexport interface VestigeVueOptions {\n init: string;\n scriptUrl?: string;\n preset?: 'auto' | 'manual';\n router?: VestigeRouter;\n}\n\nexport interface VestigeVueClient {\n readonly ready: Promise<VestigeBrowserTag>;\n buildPageview(data?: { url?: string; referrer?: string }): Promise<unknown>;\n registerPageview(): Promise<void>;\n pageview(data?: { url?: string; referrer?: string }): Promise<void>;\n event(data: string | Record<string, unknown>): Promise<void>;\n identifyLead(type: 'EMAIL' | 'PHONE', value: string): Promise<void>;\n getVdaCode(): Promise<string | null>;\n updateElementWithVda(element?: Element, parameter?: string, urlPattern?: string): Promise<void>;\n}\n\nfunction loadScript(documentRef: Document, url: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const existing = documentRef.querySelector(`script[src=\"${url}\"]`);\n if (existing) {\n existing.addEventListener('load', () => resolve(), { once: true });\n if ((window as BrowserWindow).lt?.tag) resolve();\n return;\n }\n const script = documentRef.createElement('script');\n script.async = true;\n script.src = url;\n script.onload = () => resolve();\n script.onerror = () => reject(new Error(`Unable to load Vestige tag: ${url}`));\n documentRef.head.appendChild(script);\n });\n}\n\nexport function loadVestigeTag(options: VestigeVueOptions): VestigeVueClient {\n const browserWindow = window as BrowserWindow;\n const encodedAccount = options.init.split('-')[0];\n const accountId = Number(base62.decode(encodedAccount));\n const scriptUrl = options.scriptUrl ?? `//tag.ltrck.com.br/lt${accountId}.js`;\n if (!browserWindow.lt) browserWindow.lt = { _c: [] };\n if (!browserWindow.lt._c) browserWindow.lt._c = [];\n if (options.preset) browserWindow.lt._c.push(['tag_config', { preset: options.preset }]);\n const ready = (async () => {\n if (!browserWindow.lt?.tag) await loadScript(document, scriptUrl);\n const tag = browserWindow.lt?.tag;\n if (!tag) throw new Error('Vestige tag loaded without exposing window.lt.tag');\n tag.init(options.init);\n return tag;\n })();\n\n const call = async <K extends keyof VestigeBrowserTag>(method: K, ...args: Parameters<NonNullable<VestigeBrowserTag[K]>>): Promise<ReturnType<NonNullable<VestigeBrowserTag[K]>>> => {\n const tag = await ready;\n const fn = tag[method] as (...values: Parameters<NonNullable<VestigeBrowserTag[K]>>) => ReturnType<NonNullable<VestigeBrowserTag[K]>>;\n return fn.apply(tag, args);\n };\n\n let currentPageview: unknown;\n const toAbsoluteUrl = (path: string): string => new URL(path, window.location.origin).href;\n\n const client: VestigeVueClient = {\n ready,\n buildPageview: (data) => {\n if (options.router) return Promise.reject(new Error('buildPageview() \u00E9 controlado pelo router configurado.'));\n return call('buildPageview', data).then((context) => {\n currentPageview = context;\n return context;\n });\n },\n registerPageview: () => {\n if (options.preset !== 'manual') return Promise.reject(new Error('registerPageview() s\u00F3 pode ser chamado no preset manual.'));\n return call('registerPageview', currentPageview);\n },\n pageview: (data) => call('pageview', data),\n event: (data) => call('event', data),\n identifyLead: (type, value) => call('identifyLead', type, value),\n getVdaCode: () => call('getVdaCode'),\n updateElementWithVda: (element, parameter, urlPattern) => call('updateElementWithVda', element, parameter, urlPattern)\n };\n\n if (options.router) {\n ready.then((tag) => {\n const buildAndMaybeRegister = (url: string): void => {\n const context = tag.buildPageview({ url: toAbsoluteUrl(url) });\n currentPageview = context;\n if (options.preset !== 'manual') tag.registerPageview(context);\n };\n buildAndMaybeRegister(options.router!.currentRoute.value.fullPath);\n options.router!.afterEach((to) => buildAndMaybeRegister(to.fullPath));\n });\n }\n\n return client;\n}\n\nexport function createVestige(options: VestigeVueOptions): Plugin {\n const client = loadVestigeTag(options);\n return {\n install(app: App) {\n app.provide(VESTIGE_INJECTION_KEY, client);\n }\n };\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { inject } from 'vue';\nimport type { VestigeVueClient } from './createVestige';\n\nexport const VESTIGE_INJECTION_KEY = Symbol('vestige');\n\nexport function useVestige(): VestigeVueClient {\n const tag = inject<VestigeVueClient>(VESTIGE_INJECTION_KEY);\n if (!tag) throw new Error('VestigeTag has not been installed');\n return tag;\n}\n", "export interface VestigeDocument extends Document {\n cookie: string;\n}\n\nexport function getCookie(documentRef: VestigeDocument, name: string): string {\n const prefix = `${name}=`;\n const entry = documentRef.cookie.split(';').map((item) => item.trim()).find((item) => item.startsWith(prefix));\n return entry ? unescape(entry.slice(prefix.length)) : '';\n}\n\nexport function setCookie(documentRef: VestigeDocument, domain: string, name: string, value: string | number, ttlMinutes = 365 * 24 * 60): void {\n const expires = new Date(Date.now() + ttlMinutes * 60 * 1000).toUTCString();\n documentRef.cookie = `${name}=${value};expires=${expires};path=/;domain=${domain}`;\n}\n\nexport function includeScript(documentRef: Document, src: string, callback?: () => void): void {\n const script = documentRef.createElement('script');\n script.type = 'text/javascript';\n script.src = src;\n if (callback) script.onload = callback;\n const firstScript = documentRef.getElementsByTagName('script')[0];\n firstScript?.parentNode?.insertBefore(script, firstScript);\n}\n\nexport function getUrlParams(locationRef: Location): Record<string, string> {\n const params: Record<string, string> = {};\n new URLSearchParams(locationRef.search).forEach((value, key) => { params[key] = value; });\n return params;\n}\n\nexport function getTld(documentRef: VestigeDocument, locationRef: Location, storage: Storage): string {\n const key = 'ltTLD';\n const saved = storage.getItem(key);\n if (saved) return saved;\n const parts = locationRef.hostname.split('.');\n let partial = '';\n for (let index = parts.length - 1; index > 0; index--) {\n partial = `.${parts[index]}${partial}`;\n setCookie(documentRef, partial, key, Date.now(), 5 / 60);\n if (getCookie(documentRef, key)) {\n storage.setItem(key, partial);\n return partial;\n }\n }\n return `.${locationRef.hostname}`;\n}\n\nexport const base62 = {\n charset: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''),\n encode(value: number): string | number {\n if (value === 0) return 0;\n const result: string[] = [];\n while (value > 0) {\n result.unshift(this.charset[value % 62]);\n value = Math.floor(value / 62);\n }\n return result.join('');\n },\n decode(value: string): number {\n return value.split('').reverse().reduce((result, char, index) => result + this.charset.indexOf(char) * (62 ** index), 0);\n }\n};\n", "import type { App, Plugin } from 'vue';\nimport { VESTIGE_INJECTION_KEY } from './useVestige';\nimport { base62 } from '../tag/internal/infrastructure';\n\nexport interface VestigeBrowserTag {\n init(accountId: string): void;\n buildPageview(data?: { url?: string; referrer?: string }): unknown;\n registerPageview(context?: unknown): void;\n pageview(data?: { url?: string; referrer?: string }): void;\n event(data: string | Record<string, unknown>): void;\n identifyLead(type: 'EMAIL' | 'PHONE', value: string): void;\n getVdaCode(): string | null;\n updateElementWithVda(element?: Element, parameter?: string, urlPattern?: string): void;\n}\n\ninterface BrowserWindow extends Window {\n lt?: { tag?: VestigeBrowserTag; _c?: Array<[string, unknown]> };\n}\n\nexport interface VestigeRouter {\n currentRoute: { value: { fullPath: string } };\n afterEach(callback: (to: { fullPath: string }) => void): void;\n}\n\nexport interface VestigeVueOptions {\n init: string;\n scriptUrl?: string;\n preset?: 'auto' | 'manual';\n router?: VestigeRouter;\n}\n\nexport interface VestigeVueClient {\n readonly ready: Promise<VestigeBrowserTag>;\n buildPageview(data?: { url?: string; referrer?: string }): Promise<unknown>;\n registerPageview(): Promise<void>;\n pageview(data?: { url?: string; referrer?: string }): Promise<void>;\n event(data: string | Record<string, unknown>): Promise<void>;\n identifyLead(type: 'EMAIL' | 'PHONE', value: string): Promise<void>;\n getVdaCode(): Promise<string | null>;\n updateElementWithVda(element?: Element, parameter?: string, urlPattern?: string): Promise<void>;\n}\n\nfunction loadScript(documentRef: Document, url: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const existing = documentRef.querySelector(`script[src=\"${url}\"]`);\n if (existing) {\n existing.addEventListener('load', () => resolve(), { once: true });\n if ((window as BrowserWindow).lt?.tag) resolve();\n return;\n }\n const script = documentRef.createElement('script');\n script.async = true;\n script.src = url;\n script.onload = () => resolve();\n script.onerror = () => reject(new Error(`Unable to load Vestige tag: ${url}`));\n documentRef.head.appendChild(script);\n });\n}\n\nexport function loadVestigeTag(options: VestigeVueOptions): VestigeVueClient {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n throw new Error('Vestige Metrics s\u00F3 pode ser inicializado no client-side. Em aplica\u00E7\u00F5es SSR, registre o adapter apenas no navegador.');\n }\n const browserWindow = window as BrowserWindow;\n const encodedAccount = options.init.split('-')[0];\n const accountId = Number(base62.decode(encodedAccount));\n const scriptUrl = options.scriptUrl ?? `//tag.ltrck.com.br/lt${accountId}.js`;\n if (!browserWindow.lt) browserWindow.lt = { _c: [] };\n if (!browserWindow.lt._c) browserWindow.lt._c = [];\n if (options.preset) browserWindow.lt._c.push(['tag_config', { preset: options.preset }]);\n const ready = (async () => {\n if (!browserWindow.lt?.tag) await loadScript(document, scriptUrl);\n const tag = browserWindow.lt?.tag;\n if (!tag) throw new Error('Vestige tag loaded without exposing window.lt.tag');\n tag.init(options.init);\n return tag;\n })();\n\n const call = async <K extends keyof VestigeBrowserTag>(method: K, ...args: Parameters<NonNullable<VestigeBrowserTag[K]>>): Promise<ReturnType<NonNullable<VestigeBrowserTag[K]>>> => {\n const tag = await ready;\n const fn = tag[method] as (...values: Parameters<NonNullable<VestigeBrowserTag[K]>>) => ReturnType<NonNullable<VestigeBrowserTag[K]>>;\n return fn.apply(tag, args);\n };\n\n let currentPageview: unknown;\n const toAbsoluteUrl = (path: string): string => new URL(path, window.location.origin).href;\n\n const client: VestigeVueClient = {\n ready,\n buildPageview: (data) => {\n if (options.router) return Promise.reject(new Error('buildPageview() \u00E9 controlado pelo router configurado.'));\n return call('buildPageview', data).then((context) => {\n currentPageview = context;\n return context;\n });\n },\n registerPageview: () => {\n if (options.preset !== 'manual') return Promise.reject(new Error('registerPageview() s\u00F3 pode ser chamado no preset manual.'));\n return call('registerPageview', currentPageview);\n },\n pageview: (data) => call('pageview', data),\n event: (data) => call('event', data),\n identifyLead: (type, value) => call('identifyLead', type, value),\n getVdaCode: () => call('getVdaCode'),\n updateElementWithVda: (element, parameter, urlPattern) => call('updateElementWithVda', element, parameter, urlPattern)\n };\n\n if (options.router) {\n ready.then((tag) => {\n const buildAndMaybeRegister = (url: string): void => {\n const context = tag.buildPageview({ url: toAbsoluteUrl(url) });\n currentPageview = context;\n if (options.preset !== 'manual') tag.registerPageview(context);\n };\n buildAndMaybeRegister(options.router!.currentRoute.value.fullPath);\n options.router!.afterEach((to) => buildAndMaybeRegister(to.fullPath));\n });\n }\n\n return client;\n}\n\nexport function createVestige(options: VestigeVueOptions): Plugin {\n const client = loadVestigeTag(options);\n return {\n install(app: App) {\n app.provide(VESTIGE_INJECTION_KEY, client);\n }\n };\n}\n"],
5
+ "mappings": ";AAAA,SAAS,cAAc;AAGhB,IAAM,wBAAwB,OAAO,SAAS;AAE9C,SAAS,aAA+B;AAC7C,QAAM,MAAM,OAAyB,qBAAqB;AAC1D,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,mCAAmC;AAC7D,SAAO;AACT;;;ACsCO,IAAM,SAAS;AAAA,EACpB,SAAS,iEAAiE,MAAM,EAAE;AAAA,EAClF,OAAO,OAAgC;AACrC,QAAI,UAAU,EAAG,QAAO;AACxB,UAAM,SAAmB,CAAC;AAC1B,WAAO,QAAQ,GAAG;AAChB,aAAO,QAAQ,KAAK,QAAQ,QAAQ,EAAE,CAAC;AACvC,cAAQ,KAAK,MAAM,QAAQ,EAAE;AAAA,IAC/B;AACA,WAAO,OAAO,KAAK,EAAE;AAAA,EACvB;AAAA,EACA,OAAO,OAAuB;AAC5B,WAAO,MAAM,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,MAAM,UAAU,SAAS,KAAK,QAAQ,QAAQ,IAAI,IAAK,MAAM,OAAQ,CAAC;AAAA,EACzH;AACF;;;ACnBA,SAAS,WAAW,aAAuB,KAA4B;AACrE,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AA3C1C;AA4CI,UAAM,WAAW,YAAY,cAAc,eAAe,GAAG,IAAI;AACjE,QAAI,UAAU;AACZ,eAAS,iBAAiB,QAAQ,MAAM,QAAQ,GAAG,EAAE,MAAM,KAAK,CAAC;AACjE,WAAK,YAAyB,OAAzB,mBAA6B,IAAK,SAAQ;AAC/C;AAAA,IACF;AACA,UAAM,SAAS,YAAY,cAAc,QAAQ;AACjD,WAAO,QAAQ;AACf,WAAO,MAAM;AACb,WAAO,SAAS,MAAM,QAAQ;AAC9B,WAAO,UAAU,MAAM,OAAO,IAAI,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAC7E,gBAAY,KAAK,YAAY,MAAM;AAAA,EACrC,CAAC;AACH;AAEO,SAAS,eAAe,SAA8C;AA3D7E;AA4DE,MAAI,OAAO,WAAW,eAAe,OAAO,aAAa,aAAa;AACpE,UAAM,IAAI,MAAM,8HAAqH;AAAA,EACvI;AACA,QAAM,gBAAgB;AACtB,QAAM,iBAAiB,QAAQ,KAAK,MAAM,GAAG,EAAE,CAAC;AAChD,QAAM,YAAY,OAAO,OAAO,OAAO,cAAc,CAAC;AACtD,QAAM,aAAY,aAAQ,cAAR,YAAqB,wBAAwB,SAAS;AACxE,MAAI,CAAC,cAAc,GAAI,eAAc,KAAK,EAAE,IAAI,CAAC,EAAE;AACnD,MAAI,CAAC,cAAc,GAAG,GAAI,eAAc,GAAG,KAAK,CAAC;AACjD,MAAI,QAAQ,OAAQ,eAAc,GAAG,GAAG,KAAK,CAAC,cAAc,EAAE,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACvF,QAAM,SAAS,YAAY;AAtE7B,QAAAA,KAAA;AAuEI,QAAI,GAACA,MAAA,cAAc,OAAd,gBAAAA,IAAkB,KAAK,OAAM,WAAW,UAAU,SAAS;AAChE,UAAM,OAAM,mBAAc,OAAd,mBAAkB;AAC9B,QAAI,CAAC,IAAK,OAAM,IAAI,MAAM,mDAAmD;AAC7E,QAAI,KAAK,QAAQ,IAAI;AACrB,WAAO;AAAA,EACT,GAAG;AAEH,QAAM,OAAO,OAA0C,WAAc,SAAgH;AACnL,UAAM,MAAM,MAAM;AAClB,UAAM,KAAK,IAAI,MAAM;AACrB,WAAO,GAAG,MAAM,KAAK,IAAI;AAAA,EAC3B;AAEA,MAAI;AACJ,QAAM,gBAAgB,CAAC,SAAyB,IAAI,IAAI,MAAM,OAAO,SAAS,MAAM,EAAE;AAEtF,QAAM,SAA2B;AAAA,IAC/B;AAAA,IACA,eAAe,CAAC,SAAS;AACvB,UAAI,QAAQ,OAAQ,QAAO,QAAQ,OAAO,IAAI,MAAM,0DAAuD,CAAC;AAC5G,aAAO,KAAK,iBAAiB,IAAI,EAAE,KAAK,CAAC,YAAY;AACnD,0BAAkB;AAClB,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,kBAAkB,MAAM;AACtB,UAAI,QAAQ,WAAW,SAAU,QAAO,QAAQ,OAAO,IAAI,MAAM,6DAA0D,CAAC;AAC5H,aAAO,KAAK,oBAAoB,eAAe;AAAA,IACjD;AAAA,IACA,UAAU,CAAC,SAAS,KAAK,YAAY,IAAI;AAAA,IACzC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI;AAAA,IACnC,cAAc,CAAC,MAAM,UAAU,KAAK,gBAAgB,MAAM,KAAK;AAAA,IAC/D,YAAY,MAAM,KAAK,YAAY;AAAA,IACnC,sBAAsB,CAAC,SAAS,WAAW,eAAe,KAAK,wBAAwB,SAAS,WAAW,UAAU;AAAA,EACvH;AAEA,MAAI,QAAQ,QAAQ;AAClB,UAAM,KAAK,CAAC,QAAQ;AAClB,YAAM,wBAAwB,CAAC,QAAsB;AACnD,cAAM,UAAU,IAAI,cAAc,EAAE,KAAK,cAAc,GAAG,EAAE,CAAC;AAC7D,0BAAkB;AAClB,YAAI,QAAQ,WAAW,SAAU,KAAI,iBAAiB,OAAO;AAAA,MAC/D;AACA,4BAAsB,QAAQ,OAAQ,aAAa,MAAM,QAAQ;AACjE,cAAQ,OAAQ,UAAU,CAAC,OAAO,sBAAsB,GAAG,QAAQ,CAAC;AAAA,IACtE,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,SAAS,cAAc,SAAoC;AAChE,QAAM,SAAS,eAAe,OAAO;AACrC,SAAO;AAAA,IACL,QAAQ,KAAU;AAChB,UAAI,QAAQ,uBAAuB,MAAM;AAAA,IAC3C;AAAA,EACF;AACF;",
6
6
  "names": ["_a"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vestigemetrics/vue",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "Vue adapter for Vestige Metrics compiled tags",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",