veo-sdk 0.6.1 → 0.6.2

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.
Files changed (34) hide show
  1. package/dist/builder-ENKEIVF2.mjs +5 -0
  2. package/dist/{builder-BKPMANUB.mjs.map → builder-ENKEIVF2.mjs.map} +1 -1
  3. package/dist/builder.cjs +287 -13
  4. package/dist/builder.cjs.map +1 -1
  5. package/dist/builder.d.cts +2 -2
  6. package/dist/builder.d.ts +2 -2
  7. package/dist/builder.mjs +4 -4
  8. package/dist/{chunk-VWF4UHUU.mjs → chunk-4QZDNJJE.mjs} +3 -3
  9. package/dist/{chunk-VWF4UHUU.mjs.map → chunk-4QZDNJJE.mjs.map} +1 -1
  10. package/dist/{chunk-GVPAJFNW.mjs → chunk-L3QQJLDJ.mjs} +3 -3
  11. package/dist/{chunk-GVPAJFNW.mjs.map → chunk-L3QQJLDJ.mjs.map} +1 -1
  12. package/dist/{chunk-NGP7IJVE.mjs → chunk-ZILDR4YE.mjs} +289 -15
  13. package/dist/chunk-ZILDR4YE.mjs.map +1 -0
  14. package/dist/detect-theme-X4K3TLUL.mjs +446 -0
  15. package/dist/detect-theme-X4K3TLUL.mjs.map +1 -0
  16. package/dist/{guide-preview-DylsEhrg.d.cts → guide-preview-DEFhfA4o.d.cts} +115 -0
  17. package/dist/{guide-preview-DylsEhrg.d.ts → guide-preview-DEFhfA4o.d.ts} +115 -0
  18. package/dist/index.cjs +914 -43
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.cts +13 -1
  21. package/dist/index.d.ts +13 -1
  22. package/dist/index.mjs +141 -16
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/veo-builder.js +92 -20
  25. package/dist/veo-builder.js.map +1 -1
  26. package/dist/veo-guides.js +84 -12
  27. package/dist/veo-guides.js.map +1 -1
  28. package/dist/veo-theme.js +2 -0
  29. package/dist/veo-theme.js.map +1 -0
  30. package/dist/veo.js +2 -2
  31. package/dist/veo.js.map +1 -1
  32. package/package.json +2 -2
  33. package/dist/builder-BKPMANUB.mjs +0 -5
  34. package/dist/chunk-NGP7IJVE.mjs.map +0 -1
@@ -0,0 +1,2 @@
1
+ var veoTheme=(function(exports){'use strict';var ie=/^rgba?\(\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)(?:\s*[,/]\s*([\d.]+%?))?\s*\)$/;function ce(e){let t=ie.exec(e.trim());if(!t)return null;let r=t[4]===void 0?1:t[4].endsWith("%")?Number.parseFloat(t[4])/100:+t[4];return [+t[1],+t[2],+t[3],r]}function oe(e){let t=e.trim(),r=t.split(/[\s,/]+/).filter(Boolean);return r.length>=3&&r.every(a=>/^-?[\d.]+(%|deg)?$/.test(a))?t.includes("%")?`hsl(${t})`:`rgb(${t})`:t}function ne(e){let t=e.trim();return !t||t.length>64?false:/^(#|rgb|hsl|hwb|lab|lch|oklab|oklch|color\(|color-mix|light-dark)/i.test(t)||oe(t)!==t}function k(e,t){if(e[3]>=1)return e;let r=l=>Math.round(e[l]*e[3]+t[l]*(1-e[3]));return [r(0),r(1),r(2),1]}function y(e){let t=r=>Math.round(r).toString(16).padStart(2,"0");return `#${t(e[0])}${t(e[1])}${t(e[2])}`.toUpperCase()}function M(e){return (.2126*e[0]+.7152*e[1]+.0722*e[2])/255}function F(e){let t=Math.max(e[0],e[1],e[2])/255,r=Math.min(e[0],e[1],e[2])/255,l=(t+r)/2;return t===r?0:(t-r)/(1-Math.abs(2*l-1))}function re(e){let t=e.createElement("span");t.style.display="none",e.body.appendChild(t);let r=e.defaultView,l,a=new Map,f=m=>{if(l===void 0)try{let g=e.createElement("canvas");g.width=1,g.height=1,l=g.getContext("2d",{willReadFrequently:!0});}catch{l=null;}if(!l)return null;l.clearRect(0,0,1,1),l.fillStyle="#000",l.fillStyle=m,l.fillRect(0,0,1,1);let u=l.getImageData(0,0,1,1).data;return [u[0]??0,u[1]??0,u[2]??0,(u[3]??255)/255]};return {resolve(m){let u=m.trim();if(!u||!r)return null;let g=a.get(u);if(g!==void 0)return g;let d=null;if(t.style.color="",t.style.color=oe(u),t.style.color){let h=r.getComputedStyle(t).color;d=ce(h)??f(h);}return a.set(u,d),d},dispose(){t.remove();}}}var ue=/^(serif|sans-serif|monospace|cursive|fantasy|system-ui|ui-sans-serif|ui-serif|ui-monospace|ui-rounded|emoji|math|fangsong|inherit|initial|-apple-system|BlinkMacSystemFont|Segoe UI|Roboto|Helvetica|Helvetica Neue|Arial|Noto Sans|Apple Color Emoji|Segoe UI Emoji|Segoe UI Symbol|Noto Color Emoji)$/i;function L(e){return e.trim().replace(/^["']|["']$/g,"")}function fe(e){let t=e.split(",").map(L).filter(Boolean);return t.find(r=>!ue.test(r)&&!/fallback/i.test(r))??t[0]??""}function de(e){return e.replace(/^__/,"").replace(/_Fallback_[0-9a-f]+$/i," Fallback").replace(/_[0-9a-f]{6,}$/i,"").replace(/_/g," ").trim()}function H(e,t,r){let l=e.defaultView;if(!t||!l)return;let a=fe(l.getComputedStyle(t).fontFamily);if(!a)return;let f={name:de(a).slice(0,80),family:a.slice(0,120)},m=new Set;try{for(let c of Array.from(e.fonts??[]))L(c.family)===a&&c.status==="loaded"&&m.add(c.weight);}catch{}m.size>0&&(f.weights=[...m].sort().join(" ").slice(0,80));let u=r.filter(c=>c.family===a),g=u.find(c=>c.url)?.url??null,d=null;try{d=g?new URL(g,e.baseURI).origin:null;}catch{d=null;}let h=Array.from(e.querySelectorAll("link[href]")).map(c=>c.href);return d?f.hosting=d.includes("fonts.gstatic.com")?"google":d===l.location.origin?"self":"external":u.length>0?f.hosting="self":h.some(c=>c.includes("fonts.googleapis.com"))?f.hosting="google":h.some(c=>c.includes("use.typekit.net"))?f.hosting="adobe":f.hosting="system",f}var E=["accent","text","textMuted","background","border"],me={accent:["--primary","--color-primary","--brand","--color-brand","--brand-primary","--mui-palette-primary-main","--bs-primary","--ant-color-primary","--chakra-colors-brand-500","--accent-color","--accent"],text:["--foreground","--color-foreground","--text","--color-text","--text-primary","--bs-body-color","--mui-palette-text-primary"],textMuted:["--muted-foreground","--color-muted-foreground","--text-muted","--text-secondary","--bs-secondary-color","--mui-palette-text-secondary"],background:["--background","--color-background","--bg","--color-bg","--bs-body-bg","--mui-palette-background-default"],border:["--border","--color-border","--border-color","--bs-border-color","--mui-palette-divider"]},ge={accent:/brand|primary|accent|main/i,text:/text|foreground|\bfg\b|-fg|ink|content|body/i,textMuted:/muted|secondary|subtle|soft|hint|placeholder|text|-fg/i,background:/background|\bbg\b|-bg|surface|canvas|page|base/i,border:/border|line|divider|stroke|outline|separator/i},pe=/-(50|[1-9]00|950)$|white|black/i,he=/\.dark\b|\[data-(theme|mode|color-scheme)=["']?dark|\.theme-dark|\.dark-theme/i,be=/^(:root|html|:host|body)$|\.light\b|\[data-(theme|mode)=["']?light/i,ye=1500,xe=600;function Se(e){let t={names:new Set,byMode:{light:new Map,dark:new Map},faces:[]},r=(l,a)=>{for(let f of Array.from(l)){let m=f.style,u=f.selectorText;if(f.constructor.name==="CSSFontFaceRule"&&m){let d=m.getPropertyValue("src"),h=/url\(["']?([^"')]+)["']?\)/.exec(d)?.[1]??null;t.faces.push({family:L(m.getPropertyValue("font-family")),url:h});}else if(m&&typeof u=="string"){let d=u.split(",").map(c=>c.trim()),h=d.some(c=>he.test(c))?"dark":d.some(c=>be.test(c))?a?"dark":"light":null;for(let c of Array.from(m))c.startsWith("--")&&(t.names.add(c),h&&t.byMode[h].set(c,m.getPropertyValue(c).trim()));}let g=f.cssRules;if(g){let d=f.conditionText??"";r(g,a||/prefers-color-scheme:\s*dark/.test(d));}}};for(let l of Array.from(e.styleSheets))try{r(l.cssRules,!1);}catch{}return t}function V(e){let t=null,r=0;for(let[l,a]of e)a>r&&(r=a,t=l);return t}function Re(e=document){let t=e.defaultView,r=e.body;if(!t||!r)return null;let l=e.documentElement,a=re(e),f=e.createElement("div");try{let m=t.getComputedStyle(r),u=[255,255,255,1];for(let n of [r,l]){let o=a.resolve(t.getComputedStyle(n).backgroundColor);if(o&&o[3]>0){u=k(o,[255,255,255,1]);break}}let g=k(a.resolve(m.color)??[0,0,0,1],u),d=y(g),h=new Map,c=new Map,j=new Map,O=new Map,A=(n,o)=>{n.set(o,(n.get(o)??0)+1);},se=Math.abs(M(g)-M(u)),le=Array.from(r.querySelectorAll("*")).slice(0,ye);for(let n of le){if(n.getClientRects().length===0)continue;let o=t.getComputedStyle(n);if(Array.from(n.childNodes).some(i=>i.nodeType===3&&(i.textContent??"").trim()!=="")){let i=a.resolve(o.color);if(i&&i[3]>0){let p=k(i,u),b=y(p),I=Math.abs(M(p)-M(u))<se;b!==d&&F(p)<.3&&I&&A(h,b),n.closest("a")&&F(p)>=.3&&A(O,b);}}if(Number.parseFloat(o.borderTopWidth)>0&&o.borderTopStyle!=="none"){let i=a.resolve(o.borderTopColor);if(i&&i[3]>0){let p=k(i,u);F(p)<.3&&y(p)!==d&&A(c,y(p));}}if(n.matches('button,[role="button"],input[type="submit"],a[class*="btn"],a[class*="button"]')){let i=a.resolve(o.backgroundColor);i&&i[3]>.5&&F(i)>=.3&&A(j,y(i));}}let B=e.querySelector('meta[name="theme-color"]'),U=B?a.resolve(B.content):null,x={background:y(u),text:d},q=V(j)??V(O)??(U?y(U):null);q&&(x.accent=q);let G=V(h);G&&(x.textMuted=G);let W=V(c);W&&(x.border=W);let X=[l.className,l.dataset.theme,l.dataset.mode,r.className,r.dataset.theme].join(" ").toLowerCase(),$=/\bdark\b/.test(X)?"dark":/\blight\b/.test(X)?"light":t.getComputedStyle(l).colorScheme==="dark"||M(u)<.4?"dark":"light",S=$==="dark"?"light":"dark";f.className=S,f.dataset.theme=S,f.dataset.mode=S,f.style.cssText=`display:none;color-scheme:${S}`,r.appendChild(f);let K=t.getComputedStyle(f),T=(n,o)=>{if(!ne(n))return null;let s=a.resolve(n);return !s||s[3]===0?null:s[3]>.98?y(s):o?y(k(s,o)):null},v=Se(e),R={},C={};for(let n of E)for(let o of me[n]){let s=T(m.getPropertyValue(o),u);if(s){R[n]={name:o,confidence:3},C[n]={hex:s,confidence:3};break}}let z=E.filter(n=>!R[n]&&x[n]);if(z.length>0){let n=[];for(let o of Array.from(v.names).slice(0,xe)){let s=T(m.getPropertyValue(o));s&&n.push({name:o,cur:s,oth:T(K.getPropertyValue(o))});}for(let o of z){let s=null;for(let i of n){if(i.cur!==x[o])continue;let p=(ge[o].test(i.name)?2:0)+(i.oth&&i.oth!==i.cur?2:0)-(pe.test(i.name)?1:0);(!s||p>s.score)&&(s={name:i.name,score:p});}s&&s.score>=2&&(R[o]={name:s.name,confidence:2});}}for(let n of E){let o=x[n];!C[n]&&o&&(C[n]={hex:o,confidence:R[n]?2:1});}let N={},P=!1,J=["background","accent","text","textMuted","border"],D=null,Q=(n,o)=>{n==="background"&&(D=a.resolve(o));};for(let n of J){let o=R[n];if(!o)continue;let s=T(K.getPropertyValue(o.name),D);s&&(Q(n,s),N[n]={hex:s,confidence:o.confidence},s!==C[n]?.hex&&(P=!0));}if(!P){for(let s of E)delete N[s];D=null;let n=v.byMode[S],o=(s,i=0)=>i>6?s:s.replace(/var\(\s*(--[\w-]+)\s*(?:,\s*([^()]*))?\)/g,(p,b,I)=>o(n.get(b)??v.byMode.light.get(b)??(m.getPropertyValue(b).trim()||I||""),i+1));for(let s of J){let i=R[s],p=i?n.get(i.name):void 0,b=p?T(o(p),D):null;b&&(Q(s,b),N[s]={hex:b,confidence:2},b!==C[s]?.hex&&(P=!0));}}let Y={[$]:C};P&&(Y[S]=N);let ae=n=>Array.from(e.querySelectorAll(n)).find(o=>o.getClientRects().length>0&&(o.textContent??"").trim()!=="")??null,Z=H(e,r,v.faces),ee=H(e,ae("h1,h2,h3"),v.faces),w={};Z&&(w.body=Z),ee&&(w.heading=ee);let _={host:t.location.host,mode:$,palettes:Y},te=e.title.trim().slice(0,120);return te&&(_.appName=te),(w.body||w.heading)&&(_.fonts=w),_}finally{a.dispose(),f.remove();}}function Ce(e){let t=r=>E.map(l=>{let a=r?.[l];return a?`${a.hex}${a.confidence}`:"-"}).join("");return [e.host,t(e.palettes.light),t(e.palettes.dark),e.fonts?.body?.family??"",e.fonts?.heading?.family??""].join("|")}exports.detectTheme=Re;exports.snapshotHash=Ce;return exports;})({});//# sourceMappingURL=veo-theme.js.map
2
+ //# sourceMappingURL=veo-theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugins/theme-detect/color.ts","../src/plugins/theme-detect/fonts.ts","../src/plugins/theme-detect/detect-theme.ts"],"names":["RGB_RX","parseRgb","value","m","a","toCssColor","raw","v","parts","p","looksLikeColor","flatten","c","bg","mix","i","toHex","h","n","luminance","saturation","mx","mn","createColorResolver","doc","probe","view","ctx","cache","viaCanvas","computed","canvas","d","key","hit","out","GENERIC","cleanFamily","name","primaryFamily","stack","families","f","prettyFamily","family","describeFont","el","faces","font","weights","face","own","url","origin","links","l","ROLES","KNOWN_VARS","ROLE_NAME","PALETTE_NAME","DARK_SELECTOR","LIGHT_SELECTOR","MAX_ELEMENTS","MAX_VARS","scanSheets","scan","walk","rules","inDarkMedia","rule","style","selector","src","selectors","s","mode","prop","nested","media","sheet","top","counts","best","max","hex","detectTheme","body","html","colors","modeProbe","bodyCs","text","textHex","muted","border","accent","link","bump","k","contrast","elements","cs","flat","softer","meta","metaColor","sampled","sampledAccent","sampledMuted","sampledBorder","hints","other","probeCs","hexOf","over","roleVar","current","role","missing","r","candidates","cur","score","otherPalette","differs","otherOrder","otherBg","noteBg","ref","resolveVar","depth","_m","fb","palettes","firstVisible","bodyFont","headingFont","fonts","snapshot","appName","snapshotHash","colorsOf"],"mappings":"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","file":"veo-theme.js","sourcesContent":["/** Color como `[r, g, b, a]` (a en 0..1). */\nexport type Rgba = [number, number, number, number];\n\nconst RGB_RX = /^rgba?\\(\\s*([\\d.]+)[,\\s]+([\\d.]+)[,\\s]+([\\d.]+)(?:\\s*[,/]\\s*([\\d.]+%?))?\\s*\\)$/;\n\n/** Parsea el `rgb()/rgba()` que devuelve `getComputedStyle`. */\nexport function parseRgb(value: string): Rgba | null {\n const m = RGB_RX.exec(value.trim());\n if (!m) return null;\n const a = m[4] === undefined ? 1 : m[4].endsWith('%') ? Number.parseFloat(m[4]) / 100 : +m[4];\n return [+(m[1] as string), +(m[2] as string), +(m[3] as string), a];\n}\n\n/**\n * Valor crudo de una variable CSS → color CSS válido. Varias librerías guardan\n * los canales SUELTOS para componerlos después: shadcn «262 83% 58%» (hsl),\n * Tailwind viejo «124 58 237» (rgb).\n */\nexport function toCssColor(raw: string): string {\n const v = raw.trim();\n const parts = v.split(/[\\s,/]+/).filter(Boolean);\n const bare = parts.length >= 3 && parts.every((p) => /^-?[\\d.]+(%|deg)?$/.test(p));\n if (!bare) return v;\n return v.includes('%') ? `hsl(${v})` : `rgb(${v})`;\n}\n\n/** Descarta rápido valores de variables que no pueden ser un color (tamaños, sombras, fuentes…). */\nexport function looksLikeColor(raw: string): boolean {\n const v = raw.trim();\n if (!v || v.length > 64) return false;\n return (\n /^(#|rgb|hsl|hwb|lab|lch|oklab|oklch|color\\(|color-mix|light-dark)/i.test(v) ||\n toCssColor(v) !== v\n );\n}\n\n/** Aplana un color con alfa sobre un fondo opaco. */\nexport function flatten(c: Rgba, bg: Rgba): Rgba {\n if (c[3] >= 1) return c;\n const mix = (i: 0 | 1 | 2): number => Math.round(c[i] * c[3] + bg[i] * (1 - c[3]));\n return [mix(0), mix(1), mix(2), 1];\n}\n\nexport function toHex(c: Rgba): string {\n const h = (n: number): string => Math.round(n).toString(16).padStart(2, '0');\n return `#${h(c[0])}${h(c[1])}${h(c[2])}`.toUpperCase();\n}\n\n/** Luminancia relativa aproximada (0 = negro, 1 = blanco). */\nexport function luminance(c: Rgba): number {\n return (0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2]) / 255;\n}\n\n/** Saturación HSL (0..1): separa colores de marca de grises. */\nexport function saturation(c: Rgba): number {\n const mx = Math.max(c[0], c[1], c[2]) / 255;\n const mn = Math.min(c[0], c[1], c[2]) / 255;\n const l = (mx + mn) / 2;\n return mx === mn ? 0 : (mx - mn) / (1 - Math.abs(2 * l - 1));\n}\n\n/**\n * Resuelve CUALQUIER color CSS (hex, hsl, oklch, color-mix, tripletas sueltas…)\n * a RGBA dejando que el navegador haga la conversión: se asigna a un elemento\n * oculto y se lee el computado; si no viene como `rgb()` (oklch, color(srgb…))\n * se pinta en un canvas de 1×1 y se lee el pixel.\n */\nexport function createColorResolver(doc: Document): {\n resolve: (raw: string) => Rgba | null;\n dispose: () => void;\n} {\n const probe = doc.createElement('span');\n probe.style.display = 'none';\n doc.body.appendChild(probe);\n const view = doc.defaultView;\n let ctx: CanvasRenderingContext2D | null | undefined;\n const cache = new Map<string, Rgba | null>();\n\n const viaCanvas = (computed: string): Rgba | null => {\n if (ctx === undefined) {\n try {\n const canvas = doc.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n ctx = canvas.getContext('2d', { willReadFrequently: true });\n } catch {\n ctx = null;\n }\n }\n if (!ctx) return null;\n ctx.clearRect(0, 0, 1, 1);\n ctx.fillStyle = '#000';\n ctx.fillStyle = computed;\n ctx.fillRect(0, 0, 1, 1);\n const d = ctx.getImageData(0, 0, 1, 1).data;\n return [d[0] ?? 0, d[1] ?? 0, d[2] ?? 0, (d[3] ?? 255) / 255];\n };\n\n return {\n resolve(raw) {\n const key = raw.trim();\n if (!key || !view) return null;\n const hit = cache.get(key);\n if (hit !== undefined) return hit;\n let out: Rgba | null = null;\n probe.style.color = '';\n probe.style.color = toCssColor(key);\n if (probe.style.color) {\n const computed = view.getComputedStyle(probe).color;\n out = parseRgb(computed) ?? viaCanvas(computed);\n }\n cache.set(key, out);\n return out;\n },\n dispose() {\n probe.remove();\n },\n };\n}\n","import type { DetectedFont } from './types';\n\nconst GENERIC =\n /^(serif|sans-serif|monospace|cursive|fantasy|system-ui|ui-sans-serif|ui-serif|ui-monospace|ui-rounded|emoji|math|fangsong|inherit|initial|-apple-system|BlinkMacSystemFont|Segoe UI|Roboto|Helvetica|Helvetica Neue|Arial|Noto Sans|Apple Color Emoji|Segoe UI Emoji|Segoe UI Symbol|Noto Color Emoji)$/i;\n\nexport function cleanFamily(name: string): string {\n return name.trim().replace(/^[\"']|[\"']$/g, '');\n}\n\n/** Primera familia REAL del stack (salta genéricas, del sistema y los «Fallback» de next/font). */\nexport function primaryFamily(stack: string): string {\n const families = stack.split(',').map(cleanFamily).filter(Boolean);\n return families.find((f) => !GENERIC.test(f) && !/fallback/i.test(f)) ?? families[0] ?? '';\n}\n\n/** Nombre legible: next/font mutila la familia («__Inter_5972bc» → «Inter»). */\nexport function prettyFamily(family: string): string {\n return family\n .replace(/^__/, '')\n .replace(/_Fallback_[0-9a-f]+$/i, ' Fallback')\n .replace(/_[0-9a-f]{6,}$/i, '')\n .replace(/_/g, ' ')\n .trim();\n}\n\nexport interface FontFaceInfo {\n family: string;\n url: string | null;\n}\n\n/** Describe la fuente de un elemento: nombre, pesos cargados y de dónde se sirve. */\nexport function describeFont(\n doc: Document,\n el: Element | null,\n faces: FontFaceInfo[],\n): DetectedFont | undefined {\n const view = doc.defaultView;\n if (!el || !view) return undefined;\n const family = primaryFamily(view.getComputedStyle(el).fontFamily);\n if (!family) return undefined;\n const font: DetectedFont = {\n name: prettyFamily(family).slice(0, 80),\n family: family.slice(0, 120),\n };\n\n const weights = new Set<string>();\n try {\n for (const face of Array.from(doc.fonts ?? [])) {\n if (cleanFamily(face.family) === family && face.status === 'loaded') weights.add(face.weight);\n }\n } catch {\n // FontFaceSet no disponible: se omiten los pesos.\n }\n if (weights.size > 0) font.weights = [...weights].sort().join(' ').slice(0, 80);\n\n const own = faces.filter((f) => f.family === family);\n const url = own.find((f) => f.url)?.url ?? null;\n let origin: string | null = null;\n try {\n origin = url ? new URL(url, doc.baseURI).origin : null;\n } catch {\n origin = null;\n }\n const links = Array.from(doc.querySelectorAll<HTMLLinkElement>('link[href]')).map((l) => l.href);\n if (origin) {\n font.hosting = origin.includes('fonts.gstatic.com')\n ? 'google'\n : origin === view.location.origin\n ? 'self'\n : 'external';\n } else if (own.length > 0) {\n font.hosting = 'self';\n } else if (links.some((h) => h.includes('fonts.googleapis.com'))) {\n // La hoja de Google Fonts es cross-origin: sus @font-face no se pueden leer.\n font.hosting = 'google';\n } else if (links.some((h) => h.includes('use.typekit.net'))) {\n font.hosting = 'adobe';\n } else {\n font.hosting = 'system';\n }\n return font;\n}\n","import {\n createColorResolver,\n flatten,\n looksLikeColor,\n luminance,\n type Rgba,\n saturation,\n toHex,\n} from './color';\nimport { cleanFamily, describeFont, type FontFaceInfo } from './fonts';\nimport type {\n DetectedColor,\n DetectedPalette,\n ThemeColorRole,\n ThemeMode,\n ThemeSnapshot,\n} from './types';\n\nconst ROLES: ThemeColorRole[] = ['accent', 'text', 'textMuted', 'background', 'border'];\n\n/**\n * Variables CSS conocidas por rol, de más a menos específica (shadcn, Tailwind\n * v4, Bootstrap, MUI, Ant, Chakra). Ojo: en shadcn `--accent` es el gris de\n * hover, por eso va al final.\n */\nconst KNOWN_VARS: Record<ThemeColorRole, string[]> = {\n accent: [\n '--primary',\n '--color-primary',\n '--brand',\n '--color-brand',\n '--brand-primary',\n '--mui-palette-primary-main',\n '--bs-primary',\n '--ant-color-primary',\n '--chakra-colors-brand-500',\n '--accent-color',\n '--accent',\n ],\n text: [\n '--foreground',\n '--color-foreground',\n '--text',\n '--color-text',\n '--text-primary',\n '--bs-body-color',\n '--mui-palette-text-primary',\n ],\n textMuted: [\n '--muted-foreground',\n '--color-muted-foreground',\n '--text-muted',\n '--text-secondary',\n '--bs-secondary-color',\n '--mui-palette-text-secondary',\n ],\n background: [\n '--background',\n '--color-background',\n '--bg',\n '--color-bg',\n '--bs-body-bg',\n '--mui-palette-background-default',\n ],\n border: [\n '--border',\n '--color-border',\n '--border-color',\n '--bs-border-color',\n '--mui-palette-divider',\n ],\n};\n\n/** Nombre «acorde al rol», para elegir entre variables con el mismo valor. */\nconst ROLE_NAME: Record<ThemeColorRole, RegExp> = {\n accent: /brand|primary|accent|main/i,\n text: /text|foreground|\\bfg\\b|-fg|ink|content|body/i,\n textMuted: /muted|secondary|subtle|soft|hint|placeholder|text|-fg/i,\n background: /background|\\bbg\\b|-bg|surface|canvas|page|base/i,\n border: /border|line|divider|stroke|outline|separator/i,\n};\n/** Variables de PALETA (`gray-500`, `white`): no cambian con el modo, no son semánticas. */\nconst PALETTE_NAME = /-(50|[1-9]00|950)$|white|black/i;\n\nconst DARK_SELECTOR =\n /\\.dark\\b|\\[data-(theme|mode|color-scheme)=[\"']?dark|\\.theme-dark|\\.dark-theme/i;\nconst LIGHT_SELECTOR = /^(:root|html|:host|body)$|\\.light\\b|\\[data-(theme|mode)=[\"']?light/i;\n\nconst MAX_ELEMENTS = 1500;\nconst MAX_VARS = 600;\n\ninterface SheetScan {\n names: Set<string>;\n byMode: Record<ThemeMode, Map<string, string>>;\n faces: FontFaceInfo[];\n}\n\n/** Una pasada por las hojas legibles: nombres de variables, valores por modo y @font-face. */\nfunction scanSheets(doc: Document): SheetScan {\n const scan: SheetScan = {\n names: new Set(),\n byMode: { light: new Map(), dark: new Map() },\n faces: [],\n };\n const walk = (rules: CSSRuleList, inDarkMedia: boolean): void => {\n for (const rule of Array.from(rules)) {\n const style = (rule as CSSStyleRule).style as CSSStyleDeclaration | undefined;\n const selector = (rule as CSSStyleRule).selectorText as string | undefined;\n if (rule.constructor.name === 'CSSFontFaceRule' && style) {\n const src = style.getPropertyValue('src');\n const url = /url\\([\"']?([^\"')]+)[\"']?\\)/.exec(src)?.[1] ?? null;\n scan.faces.push({ family: cleanFamily(style.getPropertyValue('font-family')), url });\n } else if (style && typeof selector === 'string') {\n const selectors = selector.split(',').map((s) => s.trim());\n const mode: ThemeMode | null = selectors.some((s) => DARK_SELECTOR.test(s))\n ? 'dark'\n : selectors.some((s) => LIGHT_SELECTOR.test(s))\n ? inDarkMedia\n ? 'dark'\n : 'light'\n : null;\n for (const prop of Array.from(style)) {\n if (!prop.startsWith('--')) continue;\n scan.names.add(prop);\n if (mode) scan.byMode[mode].set(prop, style.getPropertyValue(prop).trim());\n }\n }\n const nested = (rule as CSSGroupingRule).cssRules as CSSRuleList | undefined;\n if (nested) {\n const media = (rule as CSSMediaRule).conditionText ?? '';\n walk(nested, inDarkMedia || /prefers-color-scheme:\\s*dark/.test(media));\n }\n }\n };\n for (const sheet of Array.from(doc.styleSheets)) {\n try {\n walk(sheet.cssRules, false);\n } catch {\n // Hoja cross-origin sin CORS: ilegible.\n }\n }\n return scan;\n}\n\nfunction top(counts: Map<string, number>): string | null {\n let best: string | null = null;\n let max = 0;\n for (const [hex, n] of counts) {\n if (n > max) {\n max = n;\n best = hex;\n }\n }\n return best;\n}\n\n/**\n * Detecta el tema visual de la app donde corre el SDK: los 5 colores base\n * (acento, texto, texto tenue, fondo, borde) en el modo actual Y en el otro, y\n * las fuentes de cuerpo/encabezados. Solo lee estilos: nunca contenido.\n *\n * Colores, de más a menos fiable:\n * 1. variables CSS conocidas (`--primary`, `--foreground`…) → confianza 3;\n * 2. muestreo del DOM (fondo de botones, color del body, borde más frecuente)\n * y, con ese valor, la variable de la app que VALE eso → confianza 2 (así se\n * cubren apps con tokens propios, p. ej. `--color-brand`);\n * 3. el muestreo a secas → confianza 1.\n * El otro modo sale SIN activarlo: un elemento oculto con `class=\"dark\"`\n * hereda las variables de `.dark { … }`; si eso no cambia nada, se leen de la\n * hoja de estilos (`.dark`, `[data-theme=dark]`, `prefers-color-scheme`).\n */\nexport function detectTheme(doc: Document = document): ThemeSnapshot | null {\n const view = doc.defaultView;\n const body = doc.body;\n if (!view || !body) return null;\n const html = doc.documentElement;\n const colors = createColorResolver(doc);\n const modeProbe = doc.createElement('div');\n try {\n const bodyCs = view.getComputedStyle(body);\n\n // ── Fondo y texto base\n let bg: Rgba = [255, 255, 255, 1];\n for (const el of [body, html]) {\n const c = colors.resolve(view.getComputedStyle(el).backgroundColor);\n if (c && c[3] > 0) {\n bg = flatten(c, [255, 255, 255, 1]);\n break;\n }\n }\n const text = flatten(colors.resolve(bodyCs.color) ?? [0, 0, 0, 1], bg);\n const textHex = toHex(text);\n\n // ── Muestreo del DOM visible\n const muted = new Map<string, number>();\n const border = new Map<string, number>();\n const accent = new Map<string, number>();\n const link = new Map<string, number>();\n const bump = (m: Map<string, number>, k: string): void => {\n m.set(k, (m.get(k) ?? 0) + 1);\n };\n const contrast = Math.abs(luminance(text) - luminance(bg));\n const elements = Array.from(body.querySelectorAll('*')).slice(0, MAX_ELEMENTS);\n for (const el of elements) {\n if (el.getClientRects().length === 0) continue;\n const cs = view.getComputedStyle(el);\n const hasText = Array.from(el.childNodes).some(\n (n) => n.nodeType === 3 && (n.textContent ?? '').trim() !== '',\n );\n if (hasText) {\n const c = colors.resolve(cs.color);\n if (c && c[3] > 0) {\n const flat = flatten(c, bg);\n const hex = toHex(flat);\n const softer = Math.abs(luminance(flat) - luminance(bg)) < contrast;\n if (hex !== textHex && saturation(flat) < 0.3 && softer) bump(muted, hex);\n if (el.closest('a') && saturation(flat) >= 0.3) bump(link, hex);\n }\n }\n if (Number.parseFloat(cs.borderTopWidth) > 0 && cs.borderTopStyle !== 'none') {\n const c = colors.resolve(cs.borderTopColor);\n if (c && c[3] > 0) {\n const flat = flatten(c, bg);\n if (saturation(flat) < 0.3 && toHex(flat) !== textHex) bump(border, toHex(flat));\n }\n }\n if (\n el.matches('button,[role=\"button\"],input[type=\"submit\"],a[class*=\"btn\"],a[class*=\"button\"]')\n ) {\n const c = colors.resolve(cs.backgroundColor);\n if (c && c[3] > 0.5 && saturation(c) >= 0.3) bump(accent, toHex(c));\n }\n }\n const meta = doc.querySelector<HTMLMetaElement>('meta[name=\"theme-color\"]');\n const metaColor = meta ? colors.resolve(meta.content) : null;\n const sampled: Partial<Record<ThemeColorRole, string>> = {\n background: toHex(bg),\n text: textHex,\n };\n const sampledAccent = top(accent) ?? top(link) ?? (metaColor ? toHex(metaColor) : null);\n if (sampledAccent) sampled.accent = sampledAccent;\n const sampledMuted = top(muted);\n if (sampledMuted) sampled.textMuted = sampledMuted;\n const sampledBorder = top(border);\n if (sampledBorder) sampled.border = sampledBorder;\n\n // ── Modo actual: clase/atributo → color-scheme → luminancia del fondo\n const hints = [\n html.className,\n html.dataset.theme,\n html.dataset.mode,\n body.className,\n body.dataset.theme,\n ]\n .join(' ')\n .toLowerCase();\n const mode: ThemeMode = /\\bdark\\b/.test(hints)\n ? 'dark'\n : /\\blight\\b/.test(hints)\n ? 'light'\n : view.getComputedStyle(html).colorScheme === 'dark' || luminance(bg) < 0.4\n ? 'dark'\n : 'light';\n const other: ThemeMode = mode === 'dark' ? 'light' : 'dark';\n\n // ── Elemento oculto con la clase del OTRO modo: hereda sus variables\n modeProbe.className = other;\n modeProbe.dataset.theme = other;\n modeProbe.dataset.mode = other;\n modeProbe.style.cssText = `display:none;color-scheme:${other}`;\n body.appendChild(modeProbe);\n const probeCs = view.getComputedStyle(modeProbe);\n // Un color con alfa (p. ej. `--border: rgb(0 0 0 / .1)`) solo vale aplanado\n // sobre el fondo de SU modo; sin fondo conocido se descarta.\n const hexOf = (raw: string, over?: Rgba | null): string | null => {\n if (!looksLikeColor(raw)) return null;\n const c = colors.resolve(raw);\n if (!c || c[3] === 0) return null;\n if (c[3] > 0.98) return toHex(c);\n return over ? toHex(flatten(c, over)) : null;\n };\n\n // ── Rol → variable: por nombre conocido (3) o por valor muestreado (2)\n const scan = scanSheets(doc);\n const roleVar: Partial<Record<ThemeColorRole, { name: string; confidence: 2 | 3 }>> = {};\n const current: DetectedPalette = {};\n for (const role of ROLES) {\n for (const name of KNOWN_VARS[role]) {\n const hex = hexOf(bodyCs.getPropertyValue(name), bg);\n if (hex) {\n roleVar[role] = { name, confidence: 3 };\n current[role] = { hex, confidence: 3 };\n break;\n }\n }\n }\n const missing = ROLES.filter((r) => !roleVar[r] && sampled[r]);\n if (missing.length > 0) {\n const candidates: { name: string; cur: string; oth: string | null }[] = [];\n for (const name of Array.from(scan.names).slice(0, MAX_VARS)) {\n const cur = hexOf(bodyCs.getPropertyValue(name));\n if (cur) candidates.push({ name, cur, oth: hexOf(probeCs.getPropertyValue(name)) });\n }\n for (const role of missing) {\n let best: { name: string; score: number } | null = null;\n for (const c of candidates) {\n if (c.cur !== sampled[role]) continue;\n const score =\n (ROLE_NAME[role].test(c.name) ? 2 : 0) +\n (c.oth && c.oth !== c.cur ? 2 : 0) -\n (PALETTE_NAME.test(c.name) ? 1 : 0);\n if (!best || score > best.score) best = { name: c.name, score };\n }\n // Exige nombre acorde o que cambie con el modo: si no, es coincidencia.\n if (best && best.score >= 2) roleVar[role] = { name: best.name, confidence: 2 };\n }\n }\n for (const role of ROLES) {\n const hex = sampled[role];\n if (!current[role] && hex) current[role] = { hex, confidence: roleVar[role] ? 2 : 1 };\n }\n\n // ── El otro modo: probe; si no cambia nada, la hoja de estilos\n const otherPalette: DetectedPalette = {};\n let differs = false;\n // El fondo va primero: sobre él se aplanan los colores con alfa del otro modo.\n const otherOrder: ThemeColorRole[] = ['background', 'accent', 'text', 'textMuted', 'border'];\n let otherBg: Rgba | null = null;\n const noteBg = (role: ThemeColorRole, hex: string): void => {\n if (role === 'background') otherBg = colors.resolve(hex);\n };\n for (const role of otherOrder) {\n const ref = roleVar[role];\n if (!ref) continue;\n const hex = hexOf(probeCs.getPropertyValue(ref.name), otherBg);\n if (!hex) continue;\n noteBg(role, hex);\n otherPalette[role] = { hex, confidence: ref.confidence };\n if (hex !== current[role]?.hex) differs = true;\n }\n if (!differs) {\n for (const role of ROLES) delete otherPalette[role];\n otherBg = null;\n const sheet = scan.byMode[other];\n const resolveVar = (value: string, depth = 0): string =>\n depth > 6\n ? value\n : value.replace(\n /var\\(\\s*(--[\\w-]+)\\s*(?:,\\s*([^()]*))?\\)/g,\n (_m, name: string, fb?: string) =>\n resolveVar(\n sheet.get(name) ??\n scan.byMode.light.get(name) ??\n (bodyCs.getPropertyValue(name).trim() || fb || ''),\n depth + 1,\n ),\n );\n for (const role of otherOrder) {\n const ref = roleVar[role];\n const raw = ref ? sheet.get(ref.name) : undefined;\n const hex = raw ? hexOf(resolveVar(raw), otherBg) : null;\n if (!hex) continue;\n noteBg(role, hex);\n otherPalette[role] = { hex, confidence: 2 };\n if (hex !== current[role]?.hex) differs = true;\n }\n }\n\n const palettes: ThemeSnapshot['palettes'] = { [mode]: current };\n // Sin ninguna diferencia, la app no tiene (o no expone) otro modo: no se inventa.\n if (differs) palettes[other] = otherPalette;\n\n // ── Fuentes\n const firstVisible = (selector: string): Element | null =>\n Array.from(doc.querySelectorAll(selector)).find(\n (el) => el.getClientRects().length > 0 && (el.textContent ?? '').trim() !== '',\n ) ?? null;\n const bodyFont = describeFont(doc, body, scan.faces);\n const headingFont = describeFont(doc, firstVisible('h1,h2,h3'), scan.faces);\n const fonts: NonNullable<ThemeSnapshot['fonts']> = {};\n if (bodyFont) fonts.body = bodyFont;\n if (headingFont) fonts.heading = headingFont;\n\n const snapshot: ThemeSnapshot = { host: view.location.host, mode, palettes };\n const appName = doc.title.trim().slice(0, 120);\n if (appName) snapshot.appName = appName;\n if (fonts.body || fonts.heading) snapshot.fonts = fonts;\n return snapshot;\n } finally {\n colors.dispose();\n modeProbe.remove();\n }\n}\n\n/** Huella estable del snapshot: si no cambió desde el último envío, no se reenvía. */\nexport function snapshotHash(snapshot: ThemeSnapshot): string {\n const colorsOf = (p?: DetectedPalette): string =>\n ROLES.map((r) => {\n const c: DetectedColor | undefined = p?.[r];\n return c ? `${c.hex}${c.confidence}` : '-';\n }).join('');\n return [\n snapshot.host,\n colorsOf(snapshot.palettes.light),\n colorsOf(snapshot.palettes.dark),\n snapshot.fonts?.body?.family ?? '',\n snapshot.fonts?.heading?.family ?? '',\n ].join('|');\n}\n"]}
package/dist/veo.js CHANGED
@@ -1,3 +1,3 @@
1
- var veo=(function(exports){'use strict';var P="0.0.1";var K="https://veo-backend-production-8c78.up.railway.app";function g(r){let e=r?.apiUrl;if(typeof e=="string"&&e.trim())return e;let t=globalThis.__VEO_API_URL__;return typeof t=="string"&&t.trim()?t:K}function u(){return typeof window<"u"}function l(){return typeof document<"u"}function C(){try{if(typeof localStorage>"u")return !1;let r="__veo_test__";return localStorage.setItem(r,"1"),localStorage.removeItem(r),!0}catch{return false}}function H(){return typeof navigator<"u"&&typeof navigator.sendBeacon=="function"}var v="veoBuilder",q="veoBuilderOrigin",F="veoBuilderPanel",j="veoBuilderPanelPath",Y="veoGuide";var Se="veoPreview",W="veo:preview_token";function Ie(){try{return window.sessionStorage}catch{return null}}function R(){if(!u())return null;let r=null;try{let t=new URLSearchParams(window.location.search).get(Se);r=t||null;}catch{r=null;}let e=Ie();if(r){try{e?.setItem(W,r);}catch{}return r}try{return e?.getItem(W)||null}catch{return null}}function X(){return R()!==null}var U="veo:builder_ctx",J="veo:builder_ctx:",be=1800*1e3;function k(){try{return window.sessionStorage}catch{return null}}function Z(){try{return window.localStorage}catch{return null}}function _e(r){return J+(r||"default")}function Te(r){try{k()?.setItem(U,JSON.stringify(r));}catch{}try{let e={...r,savedAt:Date.now()};Z()?.setItem(_e(r.guide),JSON.stringify(e));}catch{}}function xe(){let r=Z();if(!r)return null;let e=null;try{for(let i=0;i<r.length;i++){let o=r.key(i);if(!o?.startsWith(J))continue;let s=r.getItem(o);if(!s)continue;let a=null;try{a=JSON.parse(s);}catch{continue}if(typeof a?.savedAt!="number"||Date.now()-a.savedAt>be){try{r.removeItem(o);}catch{}continue}(!e||a.savedAt>e.savedAt)&&(e=a);}}catch{return null}if(!e)return null;let{savedAt:t,...n}=e;return n}function Pe(){try{let r=new URLSearchParams(window.location.search);if(r.get(v))return r;let e=window.location.hash.replace(/^#/,"");return e.includes(`${v}=`)?new URLSearchParams(e):r}catch{return null}}function Q(){if(!u())return null;let r=Pe(),e=r?.get(v);if(e){let n={token:e,origin:r?.get(q)??null,panel:r?.get(F)==="1",guide:r?.get(Y)??null,panelPath:r?.get(j)??null};return Te(n),n}if(X())return null;try{let n=k()?.getItem(U);if(n)return JSON.parse(n)}catch{}let t=xe();if(t)try{k()?.setItem(U,JSON.stringify(t));}catch{}return t}function ee(){return Q()?.token??null}function L(){return Q()!==null}function te(r){if(!u()||!l()||ee()===null||(r.apiKey&&r.apiUrl&&(window.__veoBuilder={apiKey:r.apiKey,apiUrl:r.apiUrl}),window.veoBuilder))return;let e=r.builderUrl??Ce();if(e){if(document.querySelector(`script[src="${e}"]`))return;let t=document.createElement("script");t.src=e,t.async=true,r.debug&&t.addEventListener("error",()=>console.error("[veo] no pude cargar",e)),document.head.appendChild(t);return}if(r.loadBuilder){r.loadBuilder().catch(t=>{r.debug&&console.error("[veo] no pude cargar el builder (import din\xE1mico)",t);});return}r.debug&&console.warn("[veo] builder mode pedido pero no pude resolver la URL de veo-builder.js");}function Ce(){let r=document.querySelectorAll("script[src]");for(let e of Array.from(r))if(/\bveo(\.min)?\.js(\?.*)?$/.test(e.src))return e.src.replace(/\bveo(\.min)?\.js/,"veo-builder$1.js");return null}var re=null;function ne(r){return re??(re=Re(r)),re}function Re(r){return new Promise(e=>{if(!u()||!l()){e(null);return}let t=window;if(t.veoGuides){e(t.veoGuides);return}let n=r.guidesUrl??Ue();if(!n){r.debug&&console.warn("[veo] no pude resolver la URL de veo-guides.js"),e(null);return}let i=()=>e(t.veoGuides??null),o=document.querySelector(`script[src="${n}"]`);if(o){o.addEventListener("load",i),o.addEventListener("error",()=>e(null));return}let s=document.createElement("script");s.src=n,s.async=true,s.addEventListener("load",i),s.addEventListener("error",()=>{r.debug&&console.error("[veo] no pude cargar",n),e(null);}),document.head.appendChild(s);})}function Ue(){let r=document.querySelectorAll("script[src]");for(let e of Array.from(r))if(/\bveo(\.min)?\.js(\?.*)?$/.test(e.src))return e.src.replace(/\bveo(\.min)?\.js/,"veo-guides$1.js");return null}function ke(r){return r}var ie={enabled:true,captureClicks:true,captureSubmits:true,captureChanges:true,maskAllInputs:true,maskAllText:false,throttleMs:100,maxTextLength:200,captureElementMetadata:true,captureAncestors:5},oe=10,se=["[data-veo-ignore]",".veo-ignore",'input[type="password"]','input[type="email"]','input[type="tel"]','input[type="hidden"]','[autocomplete="cc-number"]','[autocomplete="cc-csc"]','[autocomplete="cc-exp"]','[autocomplete="cc-name"]','[name*="password" i]','[name*="ssn" i]','[name*="credit" i]','[name*="card" i]','[id*="password" i]','[id*="ssn" i]'],ae=["value","data-credit-card","data-ssn","data-password"],ue=["id","name","type","role","href","data-action","data-veo-tag","data-testid","aria-label","aria-labelledby"],le=[/^css-[a-z0-9]{4,}$/i,/^_[a-z0-9]+_[a-z0-9]{4,}_\d+$/,/^[a-z]{2,4}-[a-z0-9]{6,}$/i,/^[a-f0-9]{6,}$/i,/^sc-[a-z0-9]+$/i];function y(r,e=[]){let t=[...se,...e],n=r;for(;n&&n!==document.documentElement;){for(let i of t)try{if(n.matches(i))return !0}catch{}n=n.parentElement;}return false}function ce(r){let e=r.toLowerCase();return ae.includes(e)||/password|secret|token|ssn|credit/i.test(r)}function de(r,e,t){if(t)return "";let n=r.tagName.toLowerCase();if(n==="input"||n==="textarea")return "";let o=((r instanceof HTMLElement?r.innerText:"")||r.textContent||"").trim().replace(/\s+/g," ");return o.length>e?`${o.slice(0,e)}\u2026`:o}function Le(r){return le.some(e=>e.test(r))}function f(r){return Array.from(r.classList).filter(e=>!Le(e)&&e.length<64)}var Ve=["data-testid","data-test","data-cy","name","aria-label","placeholder","alt","title","href","role","type"],Me=100;function V(r){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(r):r.replace(/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g,"\\$&")}function pe(r){return r.replace(/[\\"]/g,"\\$&")}function Ne(r,e){for(let t of Ve){let n=r.getAttribute(t);if(n&&n.length>0&&n.length<=Me)return `${e}[${t}="${pe(n)}"]`}return null}function Oe(r){let e=r.tagName.toLowerCase(),t=r.getAttribute("data-veo-tag");if(t)return `${e}[data-veo-tag="${pe(t)}"]`;if(r.id){let s=f(r),a=s.length>0?`.${s.map(V).join(".")}`:"";return `${e}#${V(r.id)}${a}`}let n=Ne(r,e);if(n)return n;let i=f(r),o=i.length>0?`.${i.map(V).join(".")}`:"";return `${e}${o}`}function ge(r,e=5){let t=[],n=r,i=0;for(;n&&n!==document.documentElement&&i<=e;)t.unshift(Oe(n)),n=n.parentElement,i++;return t.join(" > ")}function Be(r){let e={};for(let t of ue){let n=r.getAttribute(t);n!==null&&!ce(t)&&n.length<256&&(e[t]=n);}return e}function $e(r,e){let t=r.getBoundingClientRect();return {tag:r.tagName.toLowerCase(),id:r.id||null,classes:f(r),text:de(r,e.maxTextLength,e.maskAllText),attributes:e.captureElementMetadata?Be(r):{},position:{x:Math.round(t.left+window.scrollX),y:Math.round(t.top+window.scrollY),w:Math.round(t.width),h:Math.round(t.height)}}}function De(r,e){let t=[],n=r.parentElement,i=0;for(;n&&n!==document.documentElement&&i<e;)t.push({tag:n.tagName.toLowerCase(),id:n.id||null,classes:f(n),veoTag:n.getAttribute("data-veo-tag")||null}),n=n.parentElement,i++;return t}function fe(r,e,t){return {$event_type:r,$element:$e(e,t),$ancestors:De(e,t.captureAncestors),$selector_path:ge(e,t.captureAncestors),$page_url:window.location.href,$page_path:window.location.pathname}}var w=class{constructor(e){this.windowMs=e;this.lastFired=new WeakMap;}shouldFire(e){let t=Date.now(),n=this.lastFired.get(e)??0;return t-n<this.windowMs?false:(this.lastFired.set(e,t),true)}};var E=class{constructor(e,t){this.client=e;this.cleanups=[];let n=ie;this.config={enabled:t.enabled??n.enabled,captureClicks:t.captureClicks??n.captureClicks,captureSubmits:t.captureSubmits??n.captureSubmits,captureChanges:t.captureChanges??n.captureChanges,maskAllInputs:t.maskAllInputs??n.maskAllInputs,maskAllText:t.maskAllText??n.maskAllText,blockSelectors:t.blockSelectors??[],throttleMs:t.throttleMs??n.throttleMs,maxTextLength:t.maxTextLength??n.maxTextLength,captureElementMetadata:t.captureElementMetadata??n.captureElementMetadata,captureAncestors:Math.min(t.captureAncestors??n.captureAncestors,oe)},this.throttle=new w(this.config.throttleMs);}install(){!l()||!this.config.enabled||(this.config.captureClicks&&this.attach("click",e=>this.handleClick(e)),this.config.captureSubmits&&this.attach("submit",e=>this.handleSubmit(e),true),this.config.captureChanges&&this.attach("change",e=>this.handleChange(e),true));}destroy(){for(let e of this.cleanups)e();this.cleanups=[];}attach(e,t,n=false){let i=o=>{if(o.isTrusted)try{t(o);}catch{}};document.addEventListener(e,i,n),this.cleanups.push(()=>document.removeEventListener(e,i,n));}handleClick(e){let t=e.target;if(!(t instanceof Element))return;let n=this.findMeaningfulAncestor(t);n&&(y(n,this.config.blockSelectors)||this.throttle.shouldFire(n)&&this.emit("click",n));}handleSubmit(e){let t=e.target;!(t instanceof Element)||t.tagName.toLowerCase()!=="form"||y(t,this.config.blockSelectors)||this.throttle.shouldFire(t)&&this.emit("submit",t);}handleChange(e){let t=e.target;if(!(t instanceof Element))return;let n=t.tagName.toLowerCase();n!=="select"&&n!=="input"&&n!=="textarea"||t instanceof HTMLInputElement&&t.type!=="checkbox"&&t.type!=="radio"||y(t,this.config.blockSelectors)||this.throttle.shouldFire(t)&&this.emit("change",t);}findMeaningfulAncestor(e){let t=e,n=0;for(;t&&t!==document.documentElement&&n<5;){let i=t.tagName.toLowerCase();if(i==="button"||i==="a"||i==="input"||i==="select"||i==="textarea"||t.hasAttribute("data-veo-tag")||t.hasAttribute("role")||t.hasAttribute("onclick")||t instanceof HTMLElement&&t.style.cursor==="pointer")return t;t=t.parentElement,n++;}return null}emit(e,t){let n=fe(e,t,this.config);this.client.track("$autocapture",n);}};function M(r={}){let e=null;return {name:"autocapture",install(t){e=new E(t,r),e.install();},destroy(){e?.destroy(),e=null;}}}function N(){return {name:"spa-router",install(r){if(!u())return;r.pageview();let e=()=>{queueMicrotask(()=>r.pageview());},t=window.history.pushState,n=window.history.replaceState;window.history.pushState=function(...i){t.apply(this,i),e();},window.history.replaceState=function(...i){n.apply(this,i),e();},window.addEventListener("popstate",e),window.addEventListener("hashchange",e);}}}function d(){let e=Date.now().toString(16).padStart(12,"0"),t=new Uint8Array(10);if(typeof crypto<"u"&&typeof crypto.getRandomValues=="function")crypto.getRandomValues(t);else for(let i=0;i<t.length;i++)t[i]=Math.floor(Math.random()*256);t[0]=(t[0]??0)&15|112,t[2]=(t[2]??0)&63|128;let n=Array.from(t,i=>i.toString(16).padStart(2,"0")).join("");return [e.slice(0,8),e.slice(8,12),n.slice(0,4),n.slice(4,8),n.slice(8,20)].join("-")}var A=class{constructor(e){this.config=e;this.buffer=[];this.timer=null;this.flushing=false;this.retryCount=0;this.retryTimer=null;this.startTimer();}add(e){this.buffer.push(e),this.buffer.length>=this.config.batchSize&&this.flush();}async flush(){if(this.flushing||this.buffer.length===0)return;this.flushing=true;let e=this.buffer.splice(0,this.buffer.length);try{await this.config.transport.send("/v1/events",{events:e}),this.retryCount=0;}catch(t){this.buffer.unshift(...e),this.scheduleRetry(),this.config.onError?.(t);}finally{this.flushing=false;}}flushBeacon(){if(this.buffer.length===0)return;let e=this.buffer.splice(0,this.buffer.length);this.config.transport.sendBeacon("/v1/events",{events:e})||this.buffer.unshift(...e);}destroy(){this.timer&&clearInterval(this.timer),this.retryTimer&&clearTimeout(this.retryTimer),this.timer=null,this.retryTimer=null;}startTimer(){this.timer=setInterval(()=>{this.flush();},this.config.flushIntervalMs);}scheduleRetry(){let e=this.config.maxRetries??3;if(this.retryCount>=e){this.retryCount=0;return}this.retryCount++;let t=Math.min(1e3*2**(this.retryCount-1),3e4),n=t/2+Math.random()*(t/2);this.retryTimer&&clearTimeout(this.retryTimer),this.retryTimer=setTimeout(()=>{this.flush();},n);}};var me="anonymous_user_id",O="end_user_id",S="session_id",m="session_last_active",he=1800*1e3,I=class{constructor(e){this.storage=e;this._endUserId=null;this._anonymousId=this.loadOrCreateAnonymousId(),this._sessionId=this.loadOrCreateSession(),this._endUserId=this.storage.get(O);}get anonymousId(){return this._anonymousId}get sessionId(){return this._sessionId}get endUserId(){return this._endUserId}get effectiveUserId(){return this._endUserId??this._anonymousId}setEndUserId(e){this._endUserId=e,this.storage.set(O,e);}touch(){let e=this.storage.get(m),t=Date.now();e&&t-Number.parseInt(e,10)>he&&(this._sessionId=d(),this.storage.set(S,this._sessionId)),this.storage.set(m,String(t));}reset(){this._endUserId=null,this.storage.remove(O),this._sessionId=d(),this.storage.set(S,this._sessionId),this.storage.set(m,String(Date.now()));}loadOrCreateAnonymousId(){let e=this.storage.get(me);return e||(e=d(),this.storage.set(me,e)),e}loadOrCreateSession(){let e=this.storage.get(S),t=this.storage.get(m);if(e&&t&&Date.now()-Number.parseInt(t,10)<he)return e;let n=d();return this.storage.set(S,n),this.storage.set(m,String(Date.now())),n}};var c="veo:",Ge=365*24*60*60*1e3,b=class{get(e){return localStorage.getItem(c+e)}set(e,t){try{localStorage.setItem(c+e,t);}catch{}}remove(e){localStorage.removeItem(c+e);}clear(){let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n?.startsWith(c)&&e.push(n);}for(let t of e)localStorage.removeItem(t);}};function ve(){let r=document.cookie;return r===""?[]:r.split("; ")}var _=class{get(e){let t=`${c}${e}=`;for(let n of ve())if(n.startsWith(t))return decodeURIComponent(n.slice(t.length));return null}set(e,t,n){let i=Math.floor((n?.ttlMs??Ge)/1e3),o=typeof location<"u"&&location.protocol==="https:"?"; Secure":"";document.cookie=`${c}${e}=${encodeURIComponent(t)}; Path=/; Max-Age=${i}; SameSite=Lax${o}`;}remove(e){document.cookie=`${c}${e}=; Path=/; Max-Age=0; SameSite=Lax`;}clear(){for(let e of ve()){let t=e.indexOf("="),n=t===-1?e:e.slice(0,t);n.startsWith(c)&&this.remove(n.slice(c.length));}}},T=class{constructor(){this.store=new Map;}get(e){return this.store.get(e)??null}set(e,t){this.store.set(e,t);}remove(e){this.store.delete(e);}clear(){this.store.clear();}};function ye(r="localStorage"){return r==="localStorage"&&C()?new b:r==="cookie"&&l()?new _:r==="memory"?new T:C()?new b:l()?new _:new T}var B=class extends Error{constructor(t,n){super(t);this.statusCode=n;this.name="TransportError";}},x=class{constructor(e){this.config=e;}async send(e,t){let n=`${this.config.apiUrl}${e}`,i=new AbortController,o=this.config.timeoutMs??1e4,s=setTimeout(()=>i.abort(new DOMException(`Veo request timeout (${o}ms)`,"TimeoutError")),o);try{let a=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json","X-Api-Key":this.config.apiKey,"X-Sdk-Version":this.config.sdkVersion},body:JSON.stringify(t),signal:i.signal});if(!a.ok)throw new B(`HTTP ${a.status}`,a.status);return await a.json()}finally{clearTimeout(s);}}sendBeacon(e,t){if(!H())return false;let n=new URL(`${this.config.apiUrl}${e}`);n.searchParams.set("key",this.config.apiKey),n.searchParams.set("v",this.config.sdkVersion);let i=new Blob([JSON.stringify(t)],{type:"application/json"});return navigator.sendBeacon(n.toString(),i)}};var $="organization_id",we="end_user_id",D="identify_signature";function G(r){return r===null||typeof r!="object"?JSON.stringify(r)??"null":Array.isArray(r)?`[${r.map(G).join(",")}]`:`{${Object.keys(r).sort().map(t=>`${JSON.stringify(t)}:${G(r[t])}`).join(",")}}`}var h=class{constructor(e){this.config=e;this.plugins=[];this.currentOrganizationId=null;this.listeners={pageview:new Set,identify:new Set};if(!e.apiKey)throw new Error("apiKey is required");this.storage=ye(e.storage??"localStorage"),this.session=new I(this.storage),this.transport=new x({apiKey:e.apiKey,apiUrl:g(e).replace(/\/$/,""),sdkVersion:P}),this.queue=new A({transport:this.transport,flushIntervalMs:e.flushInterval??5e3,batchSize:e.flushBatchSize??20,onError:i=>{e.debug&&console.error("[veo] flush error:",i);}});let t=this.storage.get(we);t&&this.session.setEndUserId(t);let n=this.storage.get($);n&&(this.currentOrganizationId=n),this.setupUnloadHandlers(),e.debug&&console.log("[veo] initialized",{anonymousId:this.session.anonymousId,sessionId:this.session.sessionId,endUserId:this.session.endUserId});}identify(e){let{visitor:t,organization:n}=e,i=G({id:t.id,traits:t.traits??{},org:n?{id:n.id,attributes:n.attributes??{}}:null});if(this.session.endUserId===t.id&&this.storage.get(D)===i){this.config.debug&&console.debug("[veo] identify: sin cambios, omitido");return}let o=this.session.endUserId===null?this.session.anonymousId:void 0;this.session.setEndUserId(t.id),n&&(this.currentOrganizationId=n.id,this.storage.set($,n.id));let a={endUser:{id:t.id,traits:t.traits??{},...o!==void 0?{anonymousId:o}:{}},...n?{organization:{id:n.id,attributes:n.attributes??{}}}:{}};this.transport.send("/v1/identify",a).catch(p=>{this.config.debug&&console.error("[veo] identify failed:",p);}),this.enqueue({actionType:"identify",actionProperties:{traits:t.traits,organizationAttributes:n?.attributes}}),this.storage.set(D,i),this.emit("identify",{endUserId:t.id,sessionId:this.session.sessionId});}track(e,t){if(!e||typeof e!="string"){this.config.debug&&console.error("[veo] track: name is required");return}this.enqueue({actionType:"track",actionName:e,...t!==void 0?{actionProperties:t}:{}});}pageview(e){if(!l())return;let t=window.location.href,n=e??window.location.pathname;this.enqueue({actionType:"pageview",pageUrl:t,pagePath:n,pageTitle:document.title,pageReferrer:document.referrer}),this.emit("pageview",{url:t,path:n,sessionId:this.session.sessionId,endUserId:this.session.endUserId});}reset(){this.session.reset(),this.currentOrganizationId=null,this.storage.remove($),this.storage.remove(we),this.storage.remove(D);}flush(){return this.queue.flush()}use(e){return this.plugins.push(e),e.install(this),this}getEndUserId(){return this.session.endUserId}getAnonymousId(){return this.session.anonymousId}getSessionId(){return this.session.sessionId}on(e,t){return this.listeners[e].add(t),()=>{this.listeners[e].delete(t);}}emit(e,t){for(let n of this.listeners[e])try{n(t);}catch(i){this.config.debug&&console.error(`[veo] listener for '${e}' failed:`,i);}}enqueue(e){this.session.touch();let t=this.currentOrganizationId??void 0,n=e.pageUrl??(u()?window.location.href:void 0),i=e.pagePath??(u()?window.location.pathname:void 0),o=e.pageTitle??(l()?document.title:void 0),s=e.pageReferrer??(l()?document.referrer:void 0),a={actionId:d(),endUserId:this.session.effectiveUserId,sessionId:this.session.sessionId,actionType:e.actionType,occurredAt:new Date().toISOString(),...t!==void 0?{organizationId:t}:{},...e.actionName!==void 0?{actionName:e.actionName}:{},...n!==void 0?{pageUrl:n}:{},...i!==void 0?{pagePath:i}:{},...o!==void 0?{pageTitle:o}:{},...s!==void 0?{pageReferrer:s}:{},...e.actionProperties!==void 0?{actionProperties:e.actionProperties}:{}};this.queue.add(a);}setupUnloadHandlers(){u()&&(window.addEventListener("pagehide",()=>this.queue.flushBeacon()),window.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&this.queue.flushBeacon();}));}};function Ee(r,e,t){let n=new h(r);if(n.use(N()),r.autocapture!==false){let i=typeof r.autocapture=="object"?r.autocapture:{};n.use(M(i));}if(e(n),typeof window<"u"){let o=window.veo?._q??[];window.veo=n;for(let s of o){let[a,p]=s;if(a==="init")continue;let z=n[a];if(typeof z=="function")try{z.apply(n,Array.from(p));}catch(Ae){r.debug&&console.error("[veo] drain error:",Ae);}}te({...r.builderUrl!==void 0?{builderUrl:r.builderUrl}:{},...r.debug!==void 0?{debug:r.debug}:{},...r.apiKey!==void 0?{apiKey:r.apiKey}:{},apiUrl:g(r),...{}});}return n}function rr(r){let e=g(r);return Ee(r,t=>{let n=()=>ne({...r.guidesUrl!==void 0?{guidesUrl:r.guidesUrl}:{},...r.debug!==void 0?{debug:r.debug}:{}}),i=R();r.guides===true&&!L()&&i===null&&n().then(o=>{o&&t.use(o.guidesPlugin({apiUrl:e,apiKey:r.apiKey,...r.debug!==void 0?{debug:r.debug}:{}}));}),i!==null&&n().then(o=>o?.runPreviewMode({apiKey:r.apiKey,apiUrl:e,token:i,...r.debug!==void 0?{debug:r.debug}:{}})),t.preview=o=>{let s=null,a=n().then(p=>p?(s=p.previewGuide(o),s.ready):{rendered:false});return {close:()=>s?.close(),ready:a,host:()=>s?.host()??null}},t.closePreview=()=>{n().then(o=>o?.closeGuidePreview());};})}
2
- exports.Client=h;exports.SDK_VERSION=P;exports.autocapturePlugin=M;exports.definePlugin=ke;exports.init=rr;exports.spaRouterPlugin=N;return exports;})({});//# sourceMappingURL=veo.js.map
1
+ var veo=(function(exports){'use strict';var L="0.0.1";var Y="https://veo-backend-production-8c78.up.railway.app";function g(r){let e=r?.apiUrl;if(typeof e=="string"&&e.trim())return e;let t=globalThis.__VEO_API_URL__;return typeof t=="string"&&t.trim()?t:Y}function u(){return typeof window<"u"}function l(){return typeof document<"u"}function M(){try{if(typeof localStorage>"u")return !1;let r="__veo_test__";return localStorage.setItem(r,"1"),localStorage.removeItem(r),!0}catch{return false}}function X(){return typeof navigator<"u"&&typeof navigator.sendBeacon=="function"}var b="veoBuilder",J="veoBuilderOrigin",Z="veoBuilderPanel",Q="veoBuilderPanelPath",ee="veoGuide";var Le="veoPreview",te="veo:preview_token";function Me(){try{return window.sessionStorage}catch{return null}}function V(){if(!u())return null;let r=null;try{let t=new URLSearchParams(window.location.search).get(Le);r=t||null;}catch{r=null;}let e=Me();if(r){try{e?.setItem(te,r);}catch{}return r}try{return e?.getItem(te)||null}catch{return null}}function re(){return V()!==null}var D="veo:builder_ctx",ne="veo:builder_ctx:",Ve=1800*1e3;function O(){try{return window.sessionStorage}catch{return null}}function oe(){try{return window.localStorage}catch{return null}}function De(r){return ne+(r||"default")}function Oe(r){try{O()?.setItem(D,JSON.stringify(r));}catch{}try{let e={...r,savedAt:Date.now()};oe()?.setItem(De(r.guide),JSON.stringify(e));}catch{}}function Ne(){let r=oe();if(!r)return null;let e=null;try{for(let o=0;o<r.length;o++){let i=r.key(o);if(!i?.startsWith(ne))continue;let s=r.getItem(i);if(!s)continue;let a=null;try{a=JSON.parse(s);}catch{continue}if(typeof a?.savedAt!="number"||Date.now()-a.savedAt>Ve){try{r.removeItem(i);}catch{}continue}(!e||a.savedAt>e.savedAt)&&(e=a);}}catch{return null}if(!e)return null;let{savedAt:t,...n}=e;return n}function Be(){try{let r=new URLSearchParams(window.location.search);if(r.get(b))return r;let e=window.location.hash.replace(/^#/,"");return e.includes(`${b}=`)?new URLSearchParams(e):r}catch{return null}}function ie(){if(!u())return null;let r=Be(),e=r?.get(b);if(e){let n={token:e,origin:r?.get(J)??null,panel:r?.get(Z)==="1",guide:r?.get(ee)??null,panelPath:r?.get(Q)??null};return Oe(n),n}if(re())return null;try{let n=O()?.getItem(D);if(n)return JSON.parse(n)}catch{}let t=Ne();if(t)try{O()?.setItem(D,JSON.stringify(t));}catch{}return t}function se(){return ie()?.token??null}function y(){return ie()!==null}function ae(r){if(!u()||!l()||se()===null||(r.apiKey&&r.apiUrl&&(window.__veoBuilder={apiKey:r.apiKey,apiUrl:r.apiUrl}),window.veoBuilder))return;let e=r.builderUrl??$e();if(e){if(document.querySelector(`script[src="${e}"]`))return;let t=document.createElement("script");t.src=e,t.async=true,r.debug&&t.addEventListener("error",()=>console.error("[veo] no pude cargar",e)),document.head.appendChild(t);return}if(r.loadBuilder){r.loadBuilder().catch(t=>{r.debug&&console.error("[veo] no pude cargar el builder (import din\xE1mico)",t);});return}r.debug&&console.warn("[veo] builder mode pedido pero no pude resolver la URL de veo-builder.js");}function $e(){let r=document.querySelectorAll("script[src]");for(let e of Array.from(r))if(/\bveo(\.min)?\.js(\?.*)?$/.test(e.src))return e.src.replace(/\bveo(\.min)?\.js/,"veo-builder$1.js");return null}var ue=null;function le(r){return ue??(ue=Ke(r)),ue}function Ke(r){return new Promise(e=>{if(!u()||!l()){e(null);return}let t=window;if(t.veoGuides){e(t.veoGuides);return}let n=r.guidesUrl??Ge();if(!n){r.debug&&console.warn("[veo] no pude resolver la URL de veo-guides.js"),e(null);return}let o=()=>e(t.veoGuides??null),i=document.querySelector(`script[src="${n}"]`);if(i){i.addEventListener("load",o),i.addEventListener("error",()=>e(null));return}let s=document.createElement("script");s.src=n,s.async=true,s.addEventListener("load",o),s.addEventListener("error",()=>{r.debug&&console.error("[veo] no pude cargar",n),e(null);}),document.head.appendChild(s);})}function Ge(){let r=document.querySelectorAll("script[src]");for(let e of Array.from(r))if(/\bveo(\.min)?\.js(\?.*)?$/.test(e.src))return e.src.replace(/\bveo(\.min)?\.js/,"veo-guides$1.js");return null}function ze(r){return r}var ce={enabled:true,captureClicks:true,captureSubmits:true,captureChanges:true,maskAllInputs:true,maskAllText:false,throttleMs:100,maxTextLength:200,captureElementMetadata:true,captureAncestors:5},de=10,pe=["[data-veo-ignore]",".veo-ignore",'input[type="password"]','input[type="email"]','input[type="tel"]','input[type="hidden"]','[autocomplete="cc-number"]','[autocomplete="cc-csc"]','[autocomplete="cc-exp"]','[autocomplete="cc-name"]','[name*="password" i]','[name*="ssn" i]','[name*="credit" i]','[name*="card" i]','[id*="password" i]','[id*="ssn" i]'],me=["value","data-credit-card","data-ssn","data-password"],fe=["id","name","type","role","href","data-action","data-veo-tag","data-testid","aria-label","aria-labelledby"],ge=[/^css-[a-z0-9]{4,}$/i,/^_[a-z0-9]+_[a-z0-9]{4,}_\d+$/,/^[a-z]{2,4}-[a-z0-9]{6,}$/i,/^[a-f0-9]{6,}$/i,/^sc-[a-z0-9]+$/i];function A(r,e=[]){let t=[...pe,...e],n=r;for(;n&&n!==document.documentElement;){for(let o of t)try{if(n.matches(o))return !0}catch{}n=n.parentElement;}return false}function he(r){let e=r.toLowerCase();return me.includes(e)||/password|secret|token|ssn|credit/i.test(r)}function ve(r,e,t){if(t)return "";let n=r.tagName.toLowerCase();if(n==="input"||n==="textarea")return "";let i=((r instanceof HTMLElement?r.innerText:"")||r.textContent||"").trim().replace(/\s+/g," ");return i.length>e?`${i.slice(0,e)}\u2026`:i}function He(r){return ge.some(e=>e.test(r))}function w(r){return Array.from(r.classList).filter(e=>!He(e)&&e.length<64)}var qe=["data-testid","data-test","data-cy","name","aria-label","placeholder","alt","title","href","role","type"],Fe=100;function N(r){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(r):r.replace(/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g,"\\$&")}function ye(r){return r.replace(/[\\"]/g,"\\$&")}function je(r,e){for(let t of qe){let n=r.getAttribute(t);if(n&&n.length>0&&n.length<=Fe)return `${e}[${t}="${ye(n)}"]`}return null}function We(r){let e=r.tagName.toLowerCase(),t=r.getAttribute("data-veo-tag");if(t)return `${e}[data-veo-tag="${ye(t)}"]`;if(r.id){let s=w(r),a=s.length>0?`.${s.map(N).join(".")}`:"";return `${e}#${N(r.id)}${a}`}let n=je(r,e);if(n)return n;let o=w(r),i=o.length>0?`.${o.map(N).join(".")}`:"";return `${e}${i}`}function we(r,e=5){let t=[],n=r,o=0;for(;n&&n!==document.documentElement&&o<=e;)t.unshift(We(n)),n=n.parentElement,o++;return t.join(" > ")}function Ye(r){let e={};for(let t of fe){let n=r.getAttribute(t);n!==null&&!he(t)&&n.length<256&&(e[t]=n);}return e}function Xe(r,e){let t=r.getBoundingClientRect();return {tag:r.tagName.toLowerCase(),id:r.id||null,classes:w(r),text:ve(r,e.maxTextLength,e.maskAllText),attributes:e.captureElementMetadata?Ye(r):{},position:{x:Math.round(t.left+window.scrollX),y:Math.round(t.top+window.scrollY),w:Math.round(t.width),h:Math.round(t.height)}}}function Je(r,e){let t=[],n=r.parentElement,o=0;for(;n&&n!==document.documentElement&&o<e;)t.push({tag:n.tagName.toLowerCase(),id:n.id||null,classes:w(n),veoTag:n.getAttribute("data-veo-tag")||null}),n=n.parentElement,o++;return t}function Se(r,e,t){return {$event_type:r,$element:Xe(e,t),$ancestors:Je(e,t.captureAncestors),$selector_path:we(e,t.captureAncestors),$page_url:window.location.href,$page_path:window.location.pathname}}var I=class{constructor(e){this.windowMs=e;this.lastFired=new WeakMap;}shouldFire(e){let t=Date.now(),n=this.lastFired.get(e)??0;return t-n<this.windowMs?false:(this.lastFired.set(e,t),true)}};var T=class{constructor(e,t){this.client=e;this.cleanups=[];let n=ce;this.config={enabled:t.enabled??n.enabled,captureClicks:t.captureClicks??n.captureClicks,captureSubmits:t.captureSubmits??n.captureSubmits,captureChanges:t.captureChanges??n.captureChanges,maskAllInputs:t.maskAllInputs??n.maskAllInputs,maskAllText:t.maskAllText??n.maskAllText,blockSelectors:t.blockSelectors??[],throttleMs:t.throttleMs??n.throttleMs,maxTextLength:t.maxTextLength??n.maxTextLength,captureElementMetadata:t.captureElementMetadata??n.captureElementMetadata,captureAncestors:Math.min(t.captureAncestors??n.captureAncestors,de)},this.throttle=new I(this.config.throttleMs);}install(){!l()||!this.config.enabled||(this.config.captureClicks&&this.attach("click",e=>this.handleClick(e)),this.config.captureSubmits&&this.attach("submit",e=>this.handleSubmit(e),true),this.config.captureChanges&&this.attach("change",e=>this.handleChange(e),true));}destroy(){for(let e of this.cleanups)e();this.cleanups=[];}attach(e,t,n=false){let o=i=>{if(i.isTrusted)try{t(i);}catch{}};document.addEventListener(e,o,n),this.cleanups.push(()=>document.removeEventListener(e,o,n));}handleClick(e){let t=e.target;if(!(t instanceof Element))return;let n=this.findMeaningfulAncestor(t);n&&(A(n,this.config.blockSelectors)||this.throttle.shouldFire(n)&&this.emit("click",n));}handleSubmit(e){let t=e.target;!(t instanceof Element)||t.tagName.toLowerCase()!=="form"||A(t,this.config.blockSelectors)||this.throttle.shouldFire(t)&&this.emit("submit",t);}handleChange(e){let t=e.target;if(!(t instanceof Element))return;let n=t.tagName.toLowerCase();n!=="select"&&n!=="input"&&n!=="textarea"||t instanceof HTMLInputElement&&t.type!=="checkbox"&&t.type!=="radio"||A(t,this.config.blockSelectors)||this.throttle.shouldFire(t)&&this.emit("change",t);}findMeaningfulAncestor(e){let t=e,n=0;for(;t&&t!==document.documentElement&&n<5;){let o=t.tagName.toLowerCase();if(o==="button"||o==="a"||o==="input"||o==="select"||o==="textarea"||t.hasAttribute("data-veo-tag")||t.hasAttribute("role")||t.hasAttribute("onclick")||t instanceof HTMLElement&&t.style.cursor==="pointer")return t;t=t.parentElement,n++;}return null}emit(e,t){let n=Se(e,t,this.config);this.client.track("$autocapture",n);}};function B(r={}){let e=null;return {name:"autocapture",install(t){e=new T(t,r),e.install();},destroy(){e?.destroy(),e=null;}}}function $(){return {name:"spa-router",install(r){if(!u())return;r.pageview();let e=()=>{queueMicrotask(()=>r.pageview());},t=window.history.pushState,n=window.history.replaceState;window.history.pushState=function(...o){t.apply(this,o),e();},window.history.replaceState=function(...o){n.apply(this,o),e();},window.addEventListener("popstate",e),window.addEventListener("hashchange",e);}}}var Ze="veo_theme_",Ae=1440*60*1e3,Ee=4e3,Qe=4;function be(r){try{let e=localStorage.getItem(r),t=e?JSON.parse(e):null;return t&&typeof t=="object"?t:{}}catch{return {}}}function et(r,e){try{localStorage.setItem(r,JSON.stringify(e));}catch{}}function tt(r,e){let t=[r.documentElement.className,r.documentElement.dataset.theme,r.documentElement.dataset.mode,r.body?.className].join(" ").toLowerCase();return /\bdark\b/.test(t)?"dark":/\blight\b/.test(t)?"light":e?"dark":"light"}function rt(r,e,t){let n=r[e];return n!==void 0&&t-n.at<Ae}function nt(r,e,t,n){let o=r[e];return !o||o.hash!==t||n-o.at>=Ae}function Ie(r){let e=`${Ze}${r.apiKey.slice(-16)||"default"}`,t=null,n=null,o=false,i=0,s=async()=>{if(o||i>=Qe)return;let c=typeof window.matchMedia=="function"&&window.matchMedia("(prefers-color-scheme: dark)").matches,d=tt(document,c);if(!rt(be(e),d,Date.now())){i++;try{let f=await r.loadDetector();if(!f||o)return;let p=f.detectTheme();if(!p)return;let F=f.snapshotHash(p),v=be(e),ke=Date.now(),j=()=>{let W={hash:F,at:Date.now()};v[p.mode]=W,v[d]=v[d]&&d!==p.mode?v[d]:W,et(e,v);};if(!nt(v,p.mode,F,ke)){j();return}r.debug&&console.log("[veo] theme snapshot",p),(await fetch(`${r.apiUrl}/v1/workspaces/theme-snapshot`,{method:"POST",headers:{"X-Api-Key":r.apiKey,"Content-Type":"application/json"},body:JSON.stringify(p),credentials:"omit"})).ok&&j();}catch(f){r.debug&&console.warn("[veo] theme detect failed",f);}}},a=c=>{n&&clearTimeout(n),n=setTimeout(()=>{n=null;let d=window.requestIdleCallback;typeof d=="function"?d(()=>{s();}):s();},c);};return {name:"theme-detect",install(){!u()||!l()||(document.readyState==="complete"?a(Ee):window.addEventListener("load",()=>a(Ee),{once:true}),typeof MutationObserver=="function"&&(t=new MutationObserver(()=>a(1500)),t.observe(document.documentElement,{attributes:true,attributeFilter:["class","data-theme","data-mode"]})));},destroy(){o=true,t?.disconnect(),n&&clearTimeout(n);}}}function h(){let e=Date.now().toString(16).padStart(12,"0"),t=new Uint8Array(10);if(typeof crypto<"u"&&typeof crypto.getRandomValues=="function")crypto.getRandomValues(t);else for(let o=0;o<t.length;o++)t[o]=Math.floor(Math.random()*256);t[0]=(t[0]??0)&15|112,t[2]=(t[2]??0)&63|128;let n=Array.from(t,o=>o.toString(16).padStart(2,"0")).join("");return [e.slice(0,8),e.slice(8,12),n.slice(0,4),n.slice(4,8),n.slice(8,20)].join("-")}var _=class{constructor(e){this.config=e;this.buffer=[];this.timer=null;this.flushing=false;this.retryCount=0;this.retryTimer=null;this.startTimer();}add(e){this.buffer.push(e),this.buffer.length>=this.config.batchSize&&this.flush();}async flush(){if(this.flushing||this.buffer.length===0)return;this.flushing=true;let e=this.buffer.splice(0,this.buffer.length);try{await this.config.transport.send("/v1/events",{events:e}),this.retryCount=0;}catch(t){this.buffer.unshift(...e),this.scheduleRetry(),this.config.onError?.(t);}finally{this.flushing=false;}}flushBeacon(){if(this.buffer.length===0)return;let e=this.buffer.splice(0,this.buffer.length);this.config.transport.sendBeacon("/v1/events",{events:e})||this.buffer.unshift(...e);}destroy(){this.timer&&clearInterval(this.timer),this.retryTimer&&clearTimeout(this.retryTimer),this.timer=null,this.retryTimer=null;}startTimer(){this.timer=setInterval(()=>{this.flush();},this.config.flushIntervalMs);}scheduleRetry(){let e=this.config.maxRetries??3;if(this.retryCount>=e){this.retryCount=0;return}this.retryCount++;let t=Math.min(1e3*2**(this.retryCount-1),3e4),n=t/2+Math.random()*(t/2);this.retryTimer&&clearTimeout(this.retryTimer),this.retryTimer=setTimeout(()=>{this.flush();},n);}};var Te="anonymous_user_id",K="end_user_id",P="session_id",S="session_last_active",_e=1800*1e3,x=class{constructor(e){this.storage=e;this._endUserId=null;this._anonymousId=this.loadOrCreateAnonymousId(),this._sessionId=this.loadOrCreateSession(),this._endUserId=this.storage.get(K);}get anonymousId(){return this._anonymousId}get sessionId(){return this._sessionId}get endUserId(){return this._endUserId}get effectiveUserId(){return this._endUserId??this._anonymousId}setEndUserId(e){this._endUserId=e,this.storage.set(K,e);}touch(){let e=this.storage.get(S),t=Date.now();e&&t-Number.parseInt(e,10)>_e&&(this._sessionId=h(),this.storage.set(P,this._sessionId)),this.storage.set(S,String(t));}reset(){this._endUserId=null,this.storage.remove(K),this._sessionId=h(),this.storage.set(P,this._sessionId),this.storage.set(S,String(Date.now()));}loadOrCreateAnonymousId(){let e=this.storage.get(Te);return e||(e=h(),this.storage.set(Te,e)),e}loadOrCreateSession(){let e=this.storage.get(P),t=this.storage.get(S);if(e&&t&&Date.now()-Number.parseInt(t,10)<_e)return e;let n=h();return this.storage.set(P,n),this.storage.set(S,String(Date.now())),n}};var m="veo:",ot=365*24*60*60*1e3,C=class{get(e){return localStorage.getItem(m+e)}set(e,t){try{localStorage.setItem(m+e,t);}catch{}}remove(e){localStorage.removeItem(m+e);}clear(){let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n?.startsWith(m)&&e.push(n);}for(let t of e)localStorage.removeItem(t);}};function Pe(){let r=document.cookie;return r===""?[]:r.split("; ")}var R=class{get(e){let t=`${m}${e}=`;for(let n of Pe())if(n.startsWith(t))return decodeURIComponent(n.slice(t.length));return null}set(e,t,n){let o=Math.floor((n?.ttlMs??ot)/1e3),i=typeof location<"u"&&location.protocol==="https:"?"; Secure":"";document.cookie=`${m}${e}=${encodeURIComponent(t)}; Path=/; Max-Age=${o}; SameSite=Lax${i}`;}remove(e){document.cookie=`${m}${e}=; Path=/; Max-Age=0; SameSite=Lax`;}clear(){for(let e of Pe()){let t=e.indexOf("="),n=t===-1?e:e.slice(0,t);n.startsWith(m)&&this.remove(n.slice(m.length));}}},U=class{constructor(){this.store=new Map;}get(e){return this.store.get(e)??null}set(e,t){this.store.set(e,t);}remove(e){this.store.delete(e);}clear(){this.store.clear();}};function xe(r="localStorage"){return r==="localStorage"&&M()?new C:r==="cookie"&&l()?new R:r==="memory"?new U:M()?new C:l()?new R:new U}var G=class extends Error{constructor(t,n){super(t);this.statusCode=n;this.name="TransportError";}},k=class{constructor(e){this.config=e;}async send(e,t){let n=`${this.config.apiUrl}${e}`,o=new AbortController,i=this.config.timeoutMs??1e4,s=setTimeout(()=>o.abort(new DOMException(`Veo request timeout (${i}ms)`,"TimeoutError")),i);try{let a=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json","X-Api-Key":this.config.apiKey,"X-Sdk-Version":this.config.sdkVersion},body:JSON.stringify(t),signal:o.signal});if(!a.ok)throw new G(`HTTP ${a.status}`,a.status);return await a.json()}finally{clearTimeout(s);}}sendBeacon(e,t){if(!X())return false;let n=new URL(`${this.config.apiUrl}${e}`);n.searchParams.set("key",this.config.apiKey),n.searchParams.set("v",this.config.sdkVersion);let o=new Blob([JSON.stringify(t)],{type:"application/json"});return navigator.sendBeacon(n.toString(),o)}};var z="organization_id",Ce="end_user_id",H="identify_signature";function q(r){return r===null||typeof r!="object"?JSON.stringify(r)??"null":Array.isArray(r)?`[${r.map(q).join(",")}]`:`{${Object.keys(r).sort().map(t=>`${JSON.stringify(t)}:${q(r[t])}`).join(",")}}`}var E=class{constructor(e){this.config=e;this.plugins=[];this.currentOrganizationId=null;this.listeners={pageview:new Set,identify:new Set};if(!e.apiKey)throw new Error("apiKey is required");this.storage=xe(e.storage??"localStorage"),this.session=new x(this.storage),this.transport=new k({apiKey:e.apiKey,apiUrl:g(e).replace(/\/$/,""),sdkVersion:L}),this.queue=new _({transport:this.transport,flushIntervalMs:e.flushInterval??5e3,batchSize:e.flushBatchSize??20,onError:o=>{e.debug&&console.error("[veo] flush error:",o);}});let t=this.storage.get(Ce);t&&this.session.setEndUserId(t);let n=this.storage.get(z);n&&(this.currentOrganizationId=n),this.setupUnloadHandlers(),e.debug&&console.log("[veo] initialized",{anonymousId:this.session.anonymousId,sessionId:this.session.sessionId,endUserId:this.session.endUserId});}identify(e){let{visitor:t,organization:n}=e,o=q({id:t.id,traits:t.traits??{},org:n?{id:n.id,attributes:n.attributes??{}}:null});if(this.session.endUserId===t.id&&this.storage.get(H)===o){this.config.debug&&console.debug("[veo] identify: sin cambios, omitido");return}let i=this.session.endUserId===null?this.session.anonymousId:void 0;this.session.setEndUserId(t.id),n&&(this.currentOrganizationId=n.id,this.storage.set(z,n.id));let a={endUser:{id:t.id,traits:t.traits??{},...i!==void 0?{anonymousId:i}:{}},...n?{organization:{id:n.id,attributes:n.attributes??{}}}:{}};this.transport.send("/v1/identify",a).catch(c=>{this.config.debug&&console.error("[veo] identify failed:",c);}),this.enqueue({actionType:"identify",actionProperties:{traits:t.traits,organizationAttributes:n?.attributes}}),this.storage.set(H,o),this.emit("identify",{endUserId:t.id,sessionId:this.session.sessionId});}track(e,t){if(!e||typeof e!="string"){this.config.debug&&console.error("[veo] track: name is required");return}this.enqueue({actionType:"track",actionName:e,...t!==void 0?{actionProperties:t}:{}});}pageview(e){if(!l())return;let t=window.location.href,n=e??window.location.pathname;this.enqueue({actionType:"pageview",pageUrl:t,pagePath:n,pageTitle:document.title,pageReferrer:document.referrer}),this.emit("pageview",{url:t,path:n,sessionId:this.session.sessionId,endUserId:this.session.endUserId});}reset(){this.session.reset(),this.currentOrganizationId=null,this.storage.remove(z),this.storage.remove(Ce),this.storage.remove(H);}flush(){return this.queue.flush()}use(e){return this.plugins.push(e),e.install(this),this}getEndUserId(){return this.session.endUserId}getAnonymousId(){return this.session.anonymousId}getSessionId(){return this.session.sessionId}on(e,t){return this.listeners[e].add(t),()=>{this.listeners[e].delete(t);}}emit(e,t){for(let n of this.listeners[e])try{n(t);}catch(o){this.config.debug&&console.error(`[veo] listener for '${e}' failed:`,o);}}enqueue(e){this.session.touch();let t=this.currentOrganizationId??void 0,n=e.pageUrl??(u()?window.location.href:void 0),o=e.pagePath??(u()?window.location.pathname:void 0),i=e.pageTitle??(l()?document.title:void 0),s=e.pageReferrer??(l()?document.referrer:void 0),a={actionId:h(),endUserId:this.session.effectiveUserId,sessionId:this.session.sessionId,actionType:e.actionType,occurredAt:new Date().toISOString(),...t!==void 0?{organizationId:t}:{},...e.actionName!==void 0?{actionName:e.actionName}:{},...n!==void 0?{pageUrl:n}:{},...o!==void 0?{pagePath:o}:{},...i!==void 0?{pageTitle:i}:{},...s!==void 0?{pageReferrer:s}:{},...e.actionProperties!==void 0?{actionProperties:e.actionProperties}:{}};this.queue.add(a);}setupUnloadHandlers(){u()&&(window.addEventListener("pagehide",()=>this.queue.flushBeacon()),window.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&this.queue.flushBeacon();}));}};function Re(r,e,t,n){let o=new E(r);if(o.use($()),r.autocapture!==false){let i=typeof r.autocapture=="object"?r.autocapture:{};o.use(B(i));}if(r.detectTheme!==false&&n&&!y()&&o.use(Ie({apiUrl:g(r),apiKey:r.apiKey,loadDetector:n,...r.debug!==void 0?{debug:r.debug}:{}})),e(o),typeof window<"u"){let s=window.veo?._q??[];window.veo=o;for(let a of s){let[c,d]=a;if(c==="init")continue;let f=o[c];if(typeof f=="function")try{f.apply(o,Array.from(d));}catch(p){r.debug&&console.error("[veo] drain error:",p);}}ae({...r.builderUrl!==void 0?{builderUrl:r.builderUrl}:{},...r.debug!==void 0?{debug:r.debug}:{},...r.apiKey!==void 0?{apiKey:r.apiKey}:{},apiUrl:g(r),...{}});}return o}function Ue(r){if(!u()||!l())return Promise.resolve(null);let e=window;if(e.veoTheme)return Promise.resolve(e.veoTheme);let t=r.themeUrl??at();return t?new Promise(n=>{let o=document.createElement("script");o.src=t,o.async=true,o.addEventListener("load",()=>n(e.veoTheme??null)),o.addEventListener("error",()=>{r.debug&&console.error("[veo] no pude cargar",t),n(null);}),document.head.appendChild(o);}):(r.debug&&console.warn("[veo] no pude resolver la URL de veo-theme.js"),Promise.resolve(null))}function at(){let r=document.querySelectorAll("script[src]");for(let e of Array.from(r))if(/\bveo(\.min)?\.js(\?.*)?$/.test(e.src))return e.src.replace(/\bveo(\.min)?\.js/,"veo-theme$1.js");return null}function Pr(r){let e=g(r);return Re(r,t=>{let n=()=>le({...r.guidesUrl!==void 0?{guidesUrl:r.guidesUrl}:{},...r.debug!==void 0?{debug:r.debug}:{}}),o=V();r.guides===true&&!y()&&o===null&&n().then(i=>{i&&t.use(i.guidesPlugin({apiUrl:e,apiKey:r.apiKey,...r.debug!==void 0?{debug:r.debug}:{}}));}),o!==null&&n().then(i=>i?.runPreviewMode({apiKey:r.apiKey,apiUrl:e,token:o,...r.debug!==void 0?{debug:r.debug}:{}})),t.preview=i=>{let s=null,a=n().then(c=>c?(s=c.previewGuide(i),s.ready):{rendered:false});return {close:()=>s?.close(),ready:a,host:()=>s?.host()??null}},t.closePreview=()=>{n().then(i=>i?.closeGuidePreview());};},void 0,()=>Ue({...r.themeUrl!==void 0?{themeUrl:r.themeUrl}:{},...r.debug!==void 0?{debug:r.debug}:{}}))}
2
+ exports.Client=E;exports.SDK_VERSION=L;exports.autocapturePlugin=B;exports.definePlugin=ze;exports.init=Pr;exports.spaRouterPlugin=$;return exports;})({});//# sourceMappingURL=veo.js.map
3
3
  //# sourceMappingURL=veo.js.map