veo-sdk 0.5.25 → 0.5.28
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-RSWK3RIB.mjs +5 -0
- package/dist/{builder-HDTWSDJR.mjs.map → builder-RSWK3RIB.mjs.map} +1 -1
- package/dist/builder.cjs +154 -12
- package/dist/builder.cjs.map +1 -1
- package/dist/builder.mjs +4 -4
- package/dist/{chunk-ZK4HWKL3.mjs → chunk-CWIUNHWA.mjs} +156 -14
- package/dist/chunk-CWIUNHWA.mjs.map +1 -0
- package/dist/{chunk-5F3DX5VP.mjs → chunk-L5X4AGR7.mjs} +3 -3
- package/dist/{chunk-5F3DX5VP.mjs.map → chunk-L5X4AGR7.mjs.map} +1 -1
- package/dist/{chunk-RDV5GIU7.mjs → chunk-WLW5Y5LU.mjs} +3 -3
- package/dist/{chunk-RDV5GIU7.mjs.map → chunk-WLW5Y5LU.mjs.map} +1 -1
- package/dist/index.cjs +155 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +5 -5
- package/dist/veo-builder.js +10 -10
- package/dist/veo-builder.js.map +1 -1
- package/dist/veo-guides.js +5 -5
- package/dist/veo-guides.js.map +1 -1
- package/package.json +1 -1
- package/dist/builder-HDTWSDJR.mjs +0 -5
- package/dist/chunk-ZK4HWKL3.mjs.map +0 -1
package/dist/builder.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import './chunk-
|
|
2
|
-
import { initBuilderMode } from './chunk-
|
|
3
|
-
export { createBuilderSession, initBuilderMode, startElementPicker, stopElementPicker } from './chunk-
|
|
4
|
-
export { closeGuidePreview, previewGuide } from './chunk-
|
|
1
|
+
import './chunk-WLW5Y5LU.mjs';
|
|
2
|
+
import { initBuilderMode } from './chunk-L5X4AGR7.mjs';
|
|
3
|
+
export { createBuilderSession, initBuilderMode, startElementPicker, stopElementPicker } from './chunk-L5X4AGR7.mjs';
|
|
4
|
+
export { closeGuidePreview, previewGuide } from './chunk-CWIUNHWA.mjs';
|
|
5
5
|
import './chunk-PTG3BTJE.mjs';
|
|
6
6
|
|
|
7
7
|
// src/builder.ts
|
|
@@ -1861,7 +1861,25 @@ function escapeClosing(code, tag) {
|
|
|
1861
1861
|
}
|
|
1862
1862
|
|
|
1863
1863
|
// src/plugins/guides/code-block.ts
|
|
1864
|
-
function
|
|
1864
|
+
function insertRawNodes(anchor, nodes, pos) {
|
|
1865
|
+
const parent = anchor.parentNode;
|
|
1866
|
+
if (pos === "prepend") {
|
|
1867
|
+
const first = anchor.firstChild;
|
|
1868
|
+
for (const n of nodes) anchor.insertBefore(n, first);
|
|
1869
|
+
} else if (pos === "append") {
|
|
1870
|
+
for (const n of nodes) anchor.appendChild(n);
|
|
1871
|
+
} else if (pos === "before") {
|
|
1872
|
+
for (const n of nodes) parent?.insertBefore(n, anchor);
|
|
1873
|
+
} else {
|
|
1874
|
+
let ref = anchor;
|
|
1875
|
+
for (const n of nodes) {
|
|
1876
|
+
parent?.insertBefore(n, ref.nextSibling);
|
|
1877
|
+
ref = n;
|
|
1878
|
+
}
|
|
1879
|
+
}
|
|
1880
|
+
}
|
|
1881
|
+
var codeSlotSeq = 0;
|
|
1882
|
+
function mountCodeBlock(block, doc, context, host, rawInline) {
|
|
1865
1883
|
if (block.sandboxed) {
|
|
1866
1884
|
const step = { html: block.html ?? "", css: block.css, js: block.js };
|
|
1867
1885
|
const { iframe, cleanup } = mountCustomFrame(doc, step, context, { width: "100%" });
|
|
@@ -1880,19 +1898,28 @@ function mountCodeBlock(block, doc, context) {
|
|
|
1880
1898
|
}
|
|
1881
1899
|
let node = null;
|
|
1882
1900
|
if (typeof block.html === "string" && block.html.trim()) {
|
|
1883
|
-
node = doc.createElement("div");
|
|
1884
|
-
node.className = "veo-code-html";
|
|
1885
|
-
const inner = node.attachShadow({ mode: "open" });
|
|
1886
|
-
for (const sheet of Array.from(hostDoc.querySelectorAll('link[rel="stylesheet"], style'))) {
|
|
1887
|
-
inner.appendChild(sheet.cloneNode(true));
|
|
1888
|
-
}
|
|
1889
1901
|
const holder = doc.createElement("div");
|
|
1902
|
+
holder.className = "veo-code-html";
|
|
1890
1903
|
holder.innerHTML = block.html;
|
|
1891
1904
|
for (const old of Array.from(holder.querySelectorAll("script"))) {
|
|
1892
1905
|
injected.push(runScript(old, hostDoc));
|
|
1893
1906
|
old.remove();
|
|
1894
1907
|
}
|
|
1895
|
-
|
|
1908
|
+
if (rawInline) {
|
|
1909
|
+
const rawNodes = Array.from(holder.childNodes);
|
|
1910
|
+
insertRawNodes(rawInline.anchor, rawNodes, rawInline.pos);
|
|
1911
|
+
injected.push(...rawNodes);
|
|
1912
|
+
} else if (host) {
|
|
1913
|
+
const slotName = `veo-code-${++codeSlotSeq}`;
|
|
1914
|
+
holder.slot = slotName;
|
|
1915
|
+
host.appendChild(holder);
|
|
1916
|
+
injected.push(holder);
|
|
1917
|
+
const slot = doc.createElement("slot");
|
|
1918
|
+
slot.setAttribute("name", slotName);
|
|
1919
|
+
node = slot;
|
|
1920
|
+
} else {
|
|
1921
|
+
node = holder;
|
|
1922
|
+
}
|
|
1896
1923
|
}
|
|
1897
1924
|
if (typeof block.js === "string" && block.js.trim()) {
|
|
1898
1925
|
const s = hostDoc.createElement("script");
|
|
@@ -2191,12 +2218,25 @@ var CompositeRenderer = class extends BaseRenderer {
|
|
|
2191
2218
|
const idx = context.nav?.stepIndex ?? 0;
|
|
2192
2219
|
const step = context.guide.guideSteps[idx];
|
|
2193
2220
|
if (!step) return;
|
|
2194
|
-
const
|
|
2221
|
+
const badgeMode = step.badge?.enabled === true;
|
|
2222
|
+
const anchorSelector = step.position === "relative-to-element" || step.presentation === "inline" || badgeMode ? step.anchorSelector?.trim() || void 0 : void 0;
|
|
2195
2223
|
let anchor = null;
|
|
2196
2224
|
if (anchorSelector) {
|
|
2197
2225
|
anchor = await waitForElement(anchorSelector);
|
|
2198
2226
|
if (!anchor) return;
|
|
2199
2227
|
}
|
|
2228
|
+
const blocks = step.blocks ?? [];
|
|
2229
|
+
const soleCode = blocks.length === 1 && blocks[0]?.type === "code" ? blocks[0] : void 0;
|
|
2230
|
+
if (step.presentation === "inline" && anchor && soleCode && !soleCode.sandboxed) {
|
|
2231
|
+
const rawDoc = anchor.ownerDocument ?? document;
|
|
2232
|
+
const { cleanup } = mountCodeBlock(soleCode, rawDoc, context, void 0, {
|
|
2233
|
+
anchor,
|
|
2234
|
+
pos: inlinePosOf(step.inlinePosition)
|
|
2235
|
+
});
|
|
2236
|
+
this.registerCleanup(cleanup);
|
|
2237
|
+
context.onInteraction({ guideId: context.guide.guideId, stepIndex: idx, action: "shown" });
|
|
2238
|
+
return;
|
|
2239
|
+
}
|
|
2200
2240
|
const { host, root } = this.createHost();
|
|
2201
2241
|
const doc = root.ownerDocument ?? document;
|
|
2202
2242
|
const design = step.design ?? {};
|
|
@@ -2213,11 +2253,16 @@ var CompositeRenderer = class extends BaseRenderer {
|
|
|
2213
2253
|
});
|
|
2214
2254
|
};
|
|
2215
2255
|
const readers = [];
|
|
2216
|
-
this.buildContent(card, step.blocks ?? [], doc, context, idx, readers);
|
|
2256
|
+
this.buildContent(card, step.blocks ?? [], doc, context, idx, readers, host);
|
|
2217
2257
|
const lastBlock = card.lastElementChild;
|
|
2218
2258
|
if (lastBlock && !lastBlock.style.marginBottom) lastBlock.style.marginBottom = "0";
|
|
2259
|
+
let closeTooltip = null;
|
|
2219
2260
|
if (design.closeButton !== false) {
|
|
2220
2261
|
const closeBtn = createCloseButton(doc, () => {
|
|
2262
|
+
if (closeTooltip) {
|
|
2263
|
+
closeTooltip();
|
|
2264
|
+
return;
|
|
2265
|
+
}
|
|
2221
2266
|
dismiss("dismissed");
|
|
2222
2267
|
this.closeOrSkip(context);
|
|
2223
2268
|
});
|
|
@@ -2236,6 +2281,21 @@ var CompositeRenderer = class extends BaseRenderer {
|
|
|
2236
2281
|
}
|
|
2237
2282
|
card.appendChild(closeBtn);
|
|
2238
2283
|
}
|
|
2284
|
+
if (badgeMode && anchor) {
|
|
2285
|
+
closeTooltip = this.renderBadgeMode(
|
|
2286
|
+
step,
|
|
2287
|
+
card,
|
|
2288
|
+
anchor,
|
|
2289
|
+
anchorSelector,
|
|
2290
|
+
host,
|
|
2291
|
+
root,
|
|
2292
|
+
doc,
|
|
2293
|
+
context,
|
|
2294
|
+
idx,
|
|
2295
|
+
design
|
|
2296
|
+
);
|
|
2297
|
+
return;
|
|
2298
|
+
}
|
|
2239
2299
|
if (step.presentation === "inline" && anchor) {
|
|
2240
2300
|
host.style.display = "block";
|
|
2241
2301
|
const pos = inlinePosOf(step.inlinePosition);
|
|
@@ -2284,7 +2344,7 @@ var CompositeRenderer = class extends BaseRenderer {
|
|
|
2284
2344
|
context.onInteraction({ guideId: context.guide.guideId, stepIndex: idx, action: "shown" });
|
|
2285
2345
|
}
|
|
2286
2346
|
/** Recorre los bloques en orden y los pinta en la card. */
|
|
2287
|
-
buildContent(card, blocks, doc, context, idx, readers) {
|
|
2347
|
+
buildContent(card, blocks, doc, context, idx, readers, host) {
|
|
2288
2348
|
const emit = (block) => {
|
|
2289
2349
|
context.onInteraction({
|
|
2290
2350
|
guideId: context.guide.guideId,
|
|
@@ -2318,7 +2378,7 @@ var CompositeRenderer = class extends BaseRenderer {
|
|
|
2318
2378
|
continue;
|
|
2319
2379
|
}
|
|
2320
2380
|
if (b.type === "code") {
|
|
2321
|
-
const { node: node2, cleanup } = mountCodeBlock(b, doc, context);
|
|
2381
|
+
const { node: node2, cleanup } = mountCodeBlock(b, doc, context, host);
|
|
2322
2382
|
if (node2) card.appendChild(node2);
|
|
2323
2383
|
this.registerCleanup(cleanup);
|
|
2324
2384
|
i++;
|
|
@@ -2425,6 +2485,88 @@ var CompositeRenderer = class extends BaseRenderer {
|
|
|
2425
2485
|
if (context.nav?.callbacks) context.nav.callbacks.onSkip();
|
|
2426
2486
|
else context.onClose();
|
|
2427
2487
|
}
|
|
2488
|
+
/**
|
|
2489
|
+
* Modo BADGE: inserta un MARCADOR permanente (compuesto con `step.badge.blocks`)
|
|
2490
|
+
* junto al ancla, en el flujo del DOM. Al hover/click abre la `card` (los
|
|
2491
|
+
* bloques del paso) como TOOLTIP anclado al marcador. Devuelve una función que
|
|
2492
|
+
* cierra el tooltip (para el ✕). El marcador nunca se descarta.
|
|
2493
|
+
*/
|
|
2494
|
+
renderBadgeMode(step, card, anchor, anchorSelector, host, root, doc, context, idx, design) {
|
|
2495
|
+
const trigger = step.badge?.trigger === "click" ? "click" : "hover";
|
|
2496
|
+
const badge = doc.createElement("div");
|
|
2497
|
+
badge.className = "veo-composite-badge";
|
|
2498
|
+
badge.setAttribute("role", "button");
|
|
2499
|
+
badge.tabIndex = 0;
|
|
2500
|
+
badge.style.cursor = "pointer";
|
|
2501
|
+
badge.style.display = "inline-flex";
|
|
2502
|
+
badge.style.alignItems = "center";
|
|
2503
|
+
this.buildContent(badge, step.badge?.blocks ?? [], doc, context, idx, [], host);
|
|
2504
|
+
root.appendChild(badge);
|
|
2505
|
+
const wrapper = doc.createElement("div");
|
|
2506
|
+
wrapper.className = "veo-composite-anchored";
|
|
2507
|
+
wrapper.style.display = "none";
|
|
2508
|
+
const caretEl = design.caret === false ? null : makeCaret(doc, design);
|
|
2509
|
+
if (caretEl) wrapper.appendChild(caretEl);
|
|
2510
|
+
wrapper.appendChild(card);
|
|
2511
|
+
root.appendChild(wrapper);
|
|
2512
|
+
host.style.display = "inline-block";
|
|
2513
|
+
const pos = inlinePosOf(step.inlinePosition);
|
|
2514
|
+
insertHost(anchor, host, pos);
|
|
2515
|
+
this.registerCleanup(keepHostAttached(host, anchorSelector, pos));
|
|
2516
|
+
let open = false;
|
|
2517
|
+
let stopFloat = null;
|
|
2518
|
+
let closeTimer = null;
|
|
2519
|
+
let shownEmitted = false;
|
|
2520
|
+
const openTip = () => {
|
|
2521
|
+
if (open) return;
|
|
2522
|
+
open = true;
|
|
2523
|
+
wrapper.style.display = "block";
|
|
2524
|
+
void anchorPosition(badge, wrapper, caretEl).then((stop) => {
|
|
2525
|
+
if (open) stopFloat = stop;
|
|
2526
|
+
else stop();
|
|
2527
|
+
});
|
|
2528
|
+
if (!shownEmitted) {
|
|
2529
|
+
shownEmitted = true;
|
|
2530
|
+
context.onInteraction({ guideId: context.guide.guideId, stepIndex: idx, action: "shown" });
|
|
2531
|
+
}
|
|
2532
|
+
};
|
|
2533
|
+
const closeTip = () => {
|
|
2534
|
+
open = false;
|
|
2535
|
+
wrapper.style.display = "none";
|
|
2536
|
+
stopFloat?.();
|
|
2537
|
+
stopFloat = null;
|
|
2538
|
+
};
|
|
2539
|
+
if (trigger === "hover") {
|
|
2540
|
+
const cancelClose = () => {
|
|
2541
|
+
if (closeTimer !== null) {
|
|
2542
|
+
clearTimeout(closeTimer);
|
|
2543
|
+
closeTimer = null;
|
|
2544
|
+
}
|
|
2545
|
+
};
|
|
2546
|
+
const scheduleClose = () => {
|
|
2547
|
+
cancelClose();
|
|
2548
|
+
closeTimer = window.setTimeout(closeTip, 150);
|
|
2549
|
+
};
|
|
2550
|
+
badge.addEventListener("mouseenter", () => {
|
|
2551
|
+
cancelClose();
|
|
2552
|
+
openTip();
|
|
2553
|
+
});
|
|
2554
|
+
badge.addEventListener("mouseleave", scheduleClose);
|
|
2555
|
+
badge.addEventListener("focus", openTip);
|
|
2556
|
+
wrapper.addEventListener("mouseenter", cancelClose);
|
|
2557
|
+
wrapper.addEventListener("mouseleave", scheduleClose);
|
|
2558
|
+
} else {
|
|
2559
|
+
badge.addEventListener("click", () => {
|
|
2560
|
+
if (open) closeTip();
|
|
2561
|
+
else openTip();
|
|
2562
|
+
});
|
|
2563
|
+
}
|
|
2564
|
+
this.registerCleanup(() => {
|
|
2565
|
+
stopFloat?.();
|
|
2566
|
+
if (closeTimer !== null) clearTimeout(closeTimer);
|
|
2567
|
+
});
|
|
2568
|
+
return closeTip;
|
|
2569
|
+
}
|
|
2428
2570
|
};
|
|
2429
2571
|
function inlinePosOf(p) {
|
|
2430
2572
|
return p === "before" || p === "prepend" || p === "append" ? p : "after";
|
|
@@ -3366,5 +3508,5 @@ function buildSelectorPath(element, maxAncestors = 5) {
|
|
|
3366
3508
|
}
|
|
3367
3509
|
|
|
3368
3510
|
export { ALWAYS_BLOCK_SELECTORS, BadgeRenderer, BannerRenderer, CompositeRenderer, 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, stepMatchesPage, uuidv7 };
|
|
3369
|
-
//# sourceMappingURL=chunk-
|
|
3370
|
-
//# sourceMappingURL=chunk-
|
|
3511
|
+
//# sourceMappingURL=chunk-CWIUNHWA.mjs.map
|
|
3512
|
+
//# sourceMappingURL=chunk-CWIUNHWA.mjs.map
|