veo-sdk 0.4.2 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builder-R2BHDQZH.mjs +5 -0
- package/dist/{builder-S6ZODU2M.mjs.map → builder-R2BHDQZH.mjs.map} +1 -1
- package/dist/builder.cjs +70 -25
- package/dist/builder.cjs.map +1 -1
- package/dist/builder.d.cts +2 -2
- package/dist/builder.d.ts +2 -2
- package/dist/builder.mjs +4 -4
- package/dist/{chunk-KLN46YQI.mjs → chunk-GRPUHGYZ.mjs} +105 -19
- package/dist/chunk-GRPUHGYZ.mjs.map +1 -0
- package/dist/{chunk-F2ZWZUTR.mjs → chunk-L3JSRBVO.mjs} +72 -27
- package/dist/chunk-L3JSRBVO.mjs.map +1 -0
- package/dist/{chunk-ULH64GMX.mjs → chunk-PGGUVH4V.mjs} +3 -3
- package/dist/{chunk-ULH64GMX.mjs.map → chunk-PGGUVH4V.mjs.map} +1 -1
- package/dist/{guide-preview-D_xhRVLe.d.cts → guide-preview-B912Y6UY.d.cts} +4 -2
- package/dist/{guide-preview-D_xhRVLe.d.ts → guide-preview-B912Y6UY.d.ts} +4 -2
- package/dist/index.cjs +172 -41
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +5 -5
- package/dist/veo-builder.js +19 -7
- package/dist/veo-builder.js.map +1 -1
- package/dist/veo-guides.js +19 -7
- package/dist/veo-guides.js.map +1 -1
- package/package.json +1 -1
- package/dist/builder-S6ZODU2M.mjs +0 -5
- package/dist/chunk-F2ZWZUTR.mjs.map +0 -1
- package/dist/chunk-KLN46YQI.mjs.map +0 -1
|
@@ -397,12 +397,12 @@ function buildButtonBlock(block, doc, callbacks) {
|
|
|
397
397
|
applyBlockStyle(btn, block.style, "button");
|
|
398
398
|
btn.addEventListener("click", () => {
|
|
399
399
|
const action = block.action ?? "dismiss";
|
|
400
|
-
const
|
|
400
|
+
const target = action === "url" && typeof block.url === "string" && isSafeUrl(block.url) ? block.url : action === "guide" && typeof block.targetGuideId === "string" && block.targetGuideId ? block.targetGuideId : void 0;
|
|
401
401
|
const meta = {
|
|
402
402
|
...typeof block.id === "string" && block.id ? { buttonId: block.id } : {},
|
|
403
403
|
...typeof block.text === "string" && block.text ? { buttonText: block.text } : {}
|
|
404
404
|
};
|
|
405
|
-
callbacks.onCtaClick(action,
|
|
405
|
+
callbacks.onCtaClick(action, target, Object.keys(meta).length ? meta : void 0);
|
|
406
406
|
});
|
|
407
407
|
return btn;
|
|
408
408
|
}
|
|
@@ -1016,10 +1016,22 @@ var GUIDE_STYLES = `
|
|
|
1016
1016
|
padding: 3px 9px;
|
|
1017
1017
|
white-space: nowrap;
|
|
1018
1018
|
}
|
|
1019
|
+
.veo-badge--text {
|
|
1020
|
+
color: var(--veo-primary);
|
|
1021
|
+
font-weight: 600;
|
|
1022
|
+
white-space: nowrap;
|
|
1023
|
+
text-decoration: underline dotted;
|
|
1024
|
+
text-underline-offset: 3px;
|
|
1025
|
+
}
|
|
1019
1026
|
.veo-badge--image img { display: block; border-radius: 4px; object-fit: cover; }
|
|
1020
1027
|
/* El tooltip del badge usa strategy fixed (el host vive dentro del flujo del
|
|
1021
|
-
cliente; un absoluto se recortar\xEDa con overflow de ancestros).
|
|
1022
|
-
|
|
1028
|
+
cliente; un absoluto se recortar\xEDa con overflow de ancestros). Su ancho es
|
|
1029
|
+
personalizable v\xEDa var dedicada (--veo-width no sirve: el :host la define
|
|
1030
|
+
en 420px siempre y pisar\xEDa el default de 300px de los tooltips). */
|
|
1031
|
+
.veo-badge-tooltip {
|
|
1032
|
+
position: fixed;
|
|
1033
|
+
max-width: var(--veo-badge-tip-width, 300px);
|
|
1034
|
+
}
|
|
1023
1035
|
@keyframes veo-badge-pulse {
|
|
1024
1036
|
0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--veo-primary) 45%, transparent); }
|
|
1025
1037
|
70% { box-shadow: 0 0 0 7px transparent; }
|
|
@@ -1203,6 +1215,13 @@ var BadgeRenderer = class extends BaseRenderer {
|
|
|
1203
1215
|
const { host, root } = this.createHost();
|
|
1204
1216
|
const ownerDocument = root.ownerDocument ?? document;
|
|
1205
1217
|
this.applyDesign(step.style);
|
|
1218
|
+
const tipWidth = step.style?.width;
|
|
1219
|
+
if (typeof tipWidth === "number" && Number.isFinite(tipWidth)) {
|
|
1220
|
+
host.style.setProperty(
|
|
1221
|
+
"--veo-badge-tip-width",
|
|
1222
|
+
`${Math.min(720, Math.max(220, tipWidth))}px`
|
|
1223
|
+
);
|
|
1224
|
+
}
|
|
1206
1225
|
this.trigger = step.style?.badgeTrigger === "click" ? "click" : "hover";
|
|
1207
1226
|
const rawSide = step.style?.tooltipPlacement;
|
|
1208
1227
|
this.side = rawSide === "bottom" || rawSide === "left" || rawSide === "right" ? rawSide : "top";
|
|
@@ -1226,20 +1245,14 @@ var BadgeRenderer = class extends BaseRenderer {
|
|
|
1226
1245
|
});
|
|
1227
1246
|
};
|
|
1228
1247
|
const buildTooltipContent = (s) => buildStepContent(s, ownerDocument, {
|
|
1229
|
-
onCtaClick: (action,
|
|
1248
|
+
onCtaClick: (action, target, meta) => {
|
|
1230
1249
|
emit("cta_clicked", meta);
|
|
1231
|
-
if (action === "url" &&
|
|
1232
|
-
if (action === "dismiss") {
|
|
1233
|
-
emit("dismissed");
|
|
1234
|
-
context.onClose();
|
|
1235
|
-
return;
|
|
1236
|
-
}
|
|
1250
|
+
if (action === "url" && target) window.open(target, "_blank", "noopener,noreferrer");
|
|
1237
1251
|
this.closeTooltip();
|
|
1252
|
+
if (action === "guide" && target) context.onOpenGuide?.(target);
|
|
1238
1253
|
},
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
context.onClose();
|
|
1242
|
-
}
|
|
1254
|
+
// La ✕ también cierra solo el tooltip (nunca el badge, nunca dismissed).
|
|
1255
|
+
onDismiss: () => this.closeTooltip()
|
|
1243
1256
|
});
|
|
1244
1257
|
const content = buildTooltipContent(step);
|
|
1245
1258
|
tooltip.appendChild(content);
|
|
@@ -1370,7 +1383,7 @@ function readBadgeConfig(step) {
|
|
|
1370
1383
|
const raw = step.style?.badge;
|
|
1371
1384
|
if (!raw || typeof raw !== "object") return { kind: "icon" };
|
|
1372
1385
|
const b = raw;
|
|
1373
|
-
const kind = b.kind === "dot" || b.kind === "pill" || b.kind === "image" || b.kind === "icon" ? b.kind : "icon";
|
|
1386
|
+
const kind = b.kind === "dot" || b.kind === "pill" || b.kind === "text" || b.kind === "image" || b.kind === "icon" ? b.kind : "icon";
|
|
1374
1387
|
return {
|
|
1375
1388
|
kind,
|
|
1376
1389
|
icon: typeof b.icon === "string" ? b.icon : null,
|
|
@@ -1401,6 +1414,12 @@ function buildBadgeElement(config, doc) {
|
|
|
1401
1414
|
if (config.color) btn.style.background = config.color;
|
|
1402
1415
|
break;
|
|
1403
1416
|
}
|
|
1417
|
+
case "text": {
|
|
1418
|
+
btn.textContent = config.text?.slice(0, 32) || "Nuevo";
|
|
1419
|
+
btn.style.fontSize = `${clamp2(Math.round(size * 0.7), 9, 28)}px`;
|
|
1420
|
+
if (config.color) btn.style.color = config.color;
|
|
1421
|
+
break;
|
|
1422
|
+
}
|
|
1404
1423
|
case "image": {
|
|
1405
1424
|
if (config.imageUrl && isSafeUrl(config.imageUrl)) {
|
|
1406
1425
|
const img = doc.createElement("img");
|
|
@@ -1537,7 +1556,10 @@ var BannerRenderer = class extends BaseRenderer {
|
|
|
1537
1556
|
ownerDocument,
|
|
1538
1557
|
context.nav.callbacks
|
|
1539
1558
|
) : buildStepContent(step, ownerDocument, {
|
|
1540
|
-
onCtaClick: (action,
|
|
1559
|
+
onCtaClick: (action, target, meta) => {
|
|
1560
|
+
dismiss("cta_clicked", action === "url" ? target : void 0, meta);
|
|
1561
|
+
if (action === "guide" && target) context.onOpenGuide?.(target);
|
|
1562
|
+
},
|
|
1541
1563
|
onDismiss: () => dismiss("dismissed")
|
|
1542
1564
|
});
|
|
1543
1565
|
banner.appendChild(content);
|
|
@@ -1552,7 +1574,10 @@ var BannerRenderer = class extends BaseRenderer {
|
|
|
1552
1574
|
this.liveContainer = banner;
|
|
1553
1575
|
this.liveContent = content;
|
|
1554
1576
|
this.liveBuild = (s) => buildStepContent(s, ownerDocument, {
|
|
1555
|
-
onCtaClick: (action,
|
|
1577
|
+
onCtaClick: (action, target, meta) => {
|
|
1578
|
+
dismiss("cta_clicked", action === "url" ? target : void 0, meta);
|
|
1579
|
+
if (action === "guide" && target) context.onOpenGuide?.(target);
|
|
1580
|
+
},
|
|
1556
1581
|
onDismiss: () => dismiss("dismissed")
|
|
1557
1582
|
});
|
|
1558
1583
|
this.liveKey = this.liveKeyOf(step);
|
|
@@ -2188,7 +2213,10 @@ var InlineRenderer = class extends BaseRenderer {
|
|
|
2188
2213
|
context.onClose();
|
|
2189
2214
|
};
|
|
2190
2215
|
const content = buildStepContent(step, ownerDocument, {
|
|
2191
|
-
onCtaClick: (action,
|
|
2216
|
+
onCtaClick: (action, target, meta) => {
|
|
2217
|
+
dismiss("cta_clicked", action === "url" ? target : void 0, meta);
|
|
2218
|
+
if (action === "guide" && target) context.onOpenGuide?.(target);
|
|
2219
|
+
},
|
|
2192
2220
|
onDismiss: () => dismiss("dismissed")
|
|
2193
2221
|
});
|
|
2194
2222
|
card.appendChild(content);
|
|
@@ -2197,7 +2225,10 @@ var InlineRenderer = class extends BaseRenderer {
|
|
|
2197
2225
|
this.liveContent = content;
|
|
2198
2226
|
this.liveKey = `${selector}|${position}`;
|
|
2199
2227
|
this.liveBuild = (s) => buildStepContent(s, ownerDocument, {
|
|
2200
|
-
onCtaClick: (action,
|
|
2228
|
+
onCtaClick: (action, target, meta) => {
|
|
2229
|
+
dismiss("cta_clicked", action === "url" ? target : void 0, meta);
|
|
2230
|
+
if (action === "guide" && target) context.onOpenGuide?.(target);
|
|
2231
|
+
},
|
|
2201
2232
|
onDismiss: () => dismiss("dismissed")
|
|
2202
2233
|
});
|
|
2203
2234
|
context.onInteraction({ guideId: context.guide.guideId, stepIndex: 0, action: "shown" });
|
|
@@ -2249,7 +2280,10 @@ var ModalRenderer = class extends BaseRenderer {
|
|
|
2249
2280
|
ownerDocument,
|
|
2250
2281
|
context.nav.callbacks
|
|
2251
2282
|
) : buildStepContent(step, ownerDocument, {
|
|
2252
|
-
onCtaClick: (action,
|
|
2283
|
+
onCtaClick: (action, target, meta) => {
|
|
2284
|
+
dismiss("cta_clicked", action === "url" ? target : void 0, meta);
|
|
2285
|
+
if (action === "guide" && target) context.onOpenGuide?.(target);
|
|
2286
|
+
},
|
|
2253
2287
|
onDismiss: () => dismiss("dismissed")
|
|
2254
2288
|
});
|
|
2255
2289
|
card.appendChild(content);
|
|
@@ -2259,7 +2293,10 @@ var ModalRenderer = class extends BaseRenderer {
|
|
|
2259
2293
|
this.liveContainer = card;
|
|
2260
2294
|
this.liveContent = content;
|
|
2261
2295
|
this.liveBuild = (s) => buildStepContent(s, ownerDocument, {
|
|
2262
|
-
onCtaClick: (action,
|
|
2296
|
+
onCtaClick: (action, target, meta) => {
|
|
2297
|
+
dismiss("cta_clicked", action === "url" ? target : void 0, meta);
|
|
2298
|
+
if (action === "guide" && target) context.onOpenGuide?.(target);
|
|
2299
|
+
},
|
|
2263
2300
|
onDismiss: () => dismiss("dismissed")
|
|
2264
2301
|
});
|
|
2265
2302
|
}
|
|
@@ -2315,8 +2352,9 @@ var TooltipRenderer = class extends BaseRenderer {
|
|
|
2315
2352
|
context.onClose();
|
|
2316
2353
|
};
|
|
2317
2354
|
const content = buildStepContent(step, ownerDocument, {
|
|
2318
|
-
onCtaClick: (action,
|
|
2319
|
-
dismiss("cta_clicked", action === "url" ?
|
|
2355
|
+
onCtaClick: (action, target, meta) => {
|
|
2356
|
+
dismiss("cta_clicked", action === "url" ? target : void 0, meta);
|
|
2357
|
+
if (action === "guide" && target) context.onOpenGuide?.(target);
|
|
2320
2358
|
},
|
|
2321
2359
|
onDismiss: () => dismiss("dismissed")
|
|
2322
2360
|
});
|
|
@@ -2349,7 +2387,10 @@ var TooltipRenderer = class extends BaseRenderer {
|
|
|
2349
2387
|
this.liveContent = content;
|
|
2350
2388
|
this.liveKey = selector;
|
|
2351
2389
|
this.liveBuild = (s) => buildStepContent(s, ownerDocument, {
|
|
2352
|
-
onCtaClick: (action,
|
|
2390
|
+
onCtaClick: (action, target, meta) => {
|
|
2391
|
+
dismiss("cta_clicked", action === "url" ? target : void 0, meta);
|
|
2392
|
+
if (action === "guide" && target) context.onOpenGuide?.(target);
|
|
2393
|
+
},
|
|
2353
2394
|
onDismiss: () => dismiss("dismissed")
|
|
2354
2395
|
});
|
|
2355
2396
|
context.onInteraction({
|
|
@@ -2481,6 +2522,10 @@ var GuidePreviewController = class {
|
|
|
2481
2522
|
onClose: () => this.close(),
|
|
2482
2523
|
onTrack: () => {
|
|
2483
2524
|
},
|
|
2525
|
+
// Encadenado en preview: no-op — el editor no puede montar otra guía
|
|
2526
|
+
// guardada; el click igual cierra la preview actual (vía onCtaClick).
|
|
2527
|
+
onOpenGuide: () => {
|
|
2528
|
+
},
|
|
2484
2529
|
// Preview de forms: por defecto simula el envío SIN escribir props;
|
|
2485
2530
|
// el caller puede pasar `formSubmit` real (link de preview).
|
|
2486
2531
|
onFormSubmit: this.input?.formSubmit ?? (() => Promise.resolve(true)),
|
|
@@ -2763,5 +2808,5 @@ function buildSelectorPath(element, maxAncestors = 5) {
|
|
|
2763
2808
|
}
|
|
2764
2809
|
|
|
2765
2810
|
export { ALWAYS_BLOCK_SELECTORS, BadgeRenderer, BannerRenderer, CustomRenderer, DEFAULT_AUTOCAPTURE_CONFIG, DEFAULT_TRACKER_BATCH_SIZE, DEFAULT_TRACKER_FLUSH_INTERVAL_MS, DEFAULT_TRACKER_MAX_RETRIES, FREQUENCY_CACHE_KEY_PREFIX, FREQUENCY_CACHE_MAX_ENTRIES, FREQUENCY_CACHE_TTL_MS, FormRenderer, InlineCustomRenderer, InlineFormRenderer, InlineRenderer, MAX_ANCESTORS, ModalRenderer, PRIORITY_ATTRIBUTES, SENSITIVE_ATTRIBUTES, TooltipRenderer, WALKTHROUGH_ABANDONMENT_TIMEOUT_MS, WALKTHROUGH_STATE_KEY_PREFIX, WalkthroughRenderer, buildSelectorPath, clearBuilderToken, closeGuidePreview, filterHumanClasses, hasDocument, hasLocalStorage, hasNavigatorSendBeacon, hasWindow, isBuilderMode, previewGuide, resolveBuilderContext, resolveBuilderToken, uuidv7 };
|
|
2766
|
-
//# sourceMappingURL=chunk-
|
|
2767
|
-
//# sourceMappingURL=chunk-
|
|
2811
|
+
//# sourceMappingURL=chunk-L3JSRBVO.mjs.map
|
|
2812
|
+
//# sourceMappingURL=chunk-L3JSRBVO.mjs.map
|