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
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { VEO_BLOCK_MIME, attachBlockDropTarget, attachDesignManipulator, createBuilderSession, initBuilderMode, startElementPicker, stopElementPicker } from './chunk-L5X4AGR7.mjs';
|
|
2
|
+
import './chunk-CWIUNHWA.mjs';
|
|
3
|
+
import './chunk-PTG3BTJE.mjs';
|
|
4
|
+
//# sourceMappingURL=builder-RSWK3RIB.mjs.map
|
|
5
|
+
//# sourceMappingURL=builder-RSWK3RIB.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"builder-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"builder-RSWK3RIB.mjs"}
|
package/dist/builder.cjs
CHANGED
|
@@ -1947,7 +1947,25 @@ function escapeClosing(code, tag) {
|
|
|
1947
1947
|
}
|
|
1948
1948
|
|
|
1949
1949
|
// src/plugins/guides/code-block.ts
|
|
1950
|
-
function
|
|
1950
|
+
function insertRawNodes(anchor, nodes, pos) {
|
|
1951
|
+
const parent = anchor.parentNode;
|
|
1952
|
+
if (pos === "prepend") {
|
|
1953
|
+
const first = anchor.firstChild;
|
|
1954
|
+
for (const n of nodes) anchor.insertBefore(n, first);
|
|
1955
|
+
} else if (pos === "append") {
|
|
1956
|
+
for (const n of nodes) anchor.appendChild(n);
|
|
1957
|
+
} else if (pos === "before") {
|
|
1958
|
+
for (const n of nodes) parent?.insertBefore(n, anchor);
|
|
1959
|
+
} else {
|
|
1960
|
+
let ref = anchor;
|
|
1961
|
+
for (const n of nodes) {
|
|
1962
|
+
parent?.insertBefore(n, ref.nextSibling);
|
|
1963
|
+
ref = n;
|
|
1964
|
+
}
|
|
1965
|
+
}
|
|
1966
|
+
}
|
|
1967
|
+
var codeSlotSeq = 0;
|
|
1968
|
+
function mountCodeBlock(block, doc, context, host, rawInline) {
|
|
1951
1969
|
if (block.sandboxed) {
|
|
1952
1970
|
const step = { html: block.html ?? "", css: block.css, js: block.js };
|
|
1953
1971
|
const { iframe, cleanup } = mountCustomFrame(doc, step, context, { width: "100%" });
|
|
@@ -1966,19 +1984,28 @@ function mountCodeBlock(block, doc, context) {
|
|
|
1966
1984
|
}
|
|
1967
1985
|
let node = null;
|
|
1968
1986
|
if (typeof block.html === "string" && block.html.trim()) {
|
|
1969
|
-
node = doc.createElement("div");
|
|
1970
|
-
node.className = "veo-code-html";
|
|
1971
|
-
const inner = node.attachShadow({ mode: "open" });
|
|
1972
|
-
for (const sheet of Array.from(hostDoc.querySelectorAll('link[rel="stylesheet"], style'))) {
|
|
1973
|
-
inner.appendChild(sheet.cloneNode(true));
|
|
1974
|
-
}
|
|
1975
1987
|
const holder = doc.createElement("div");
|
|
1988
|
+
holder.className = "veo-code-html";
|
|
1976
1989
|
holder.innerHTML = block.html;
|
|
1977
1990
|
for (const old of Array.from(holder.querySelectorAll("script"))) {
|
|
1978
1991
|
injected.push(runScript(old, hostDoc));
|
|
1979
1992
|
old.remove();
|
|
1980
1993
|
}
|
|
1981
|
-
|
|
1994
|
+
if (rawInline) {
|
|
1995
|
+
const rawNodes = Array.from(holder.childNodes);
|
|
1996
|
+
insertRawNodes(rawInline.anchor, rawNodes, rawInline.pos);
|
|
1997
|
+
injected.push(...rawNodes);
|
|
1998
|
+
} else if (host) {
|
|
1999
|
+
const slotName = `veo-code-${++codeSlotSeq}`;
|
|
2000
|
+
holder.slot = slotName;
|
|
2001
|
+
host.appendChild(holder);
|
|
2002
|
+
injected.push(holder);
|
|
2003
|
+
const slot = doc.createElement("slot");
|
|
2004
|
+
slot.setAttribute("name", slotName);
|
|
2005
|
+
node = slot;
|
|
2006
|
+
} else {
|
|
2007
|
+
node = holder;
|
|
2008
|
+
}
|
|
1982
2009
|
}
|
|
1983
2010
|
if (typeof block.js === "string" && block.js.trim()) {
|
|
1984
2011
|
const s = hostDoc.createElement("script");
|
|
@@ -2277,12 +2304,25 @@ var CompositeRenderer = class extends BaseRenderer {
|
|
|
2277
2304
|
const idx = context.nav?.stepIndex ?? 0;
|
|
2278
2305
|
const step = context.guide.guideSteps[idx];
|
|
2279
2306
|
if (!step) return;
|
|
2280
|
-
const
|
|
2307
|
+
const badgeMode = step.badge?.enabled === true;
|
|
2308
|
+
const anchorSelector = step.position === "relative-to-element" || step.presentation === "inline" || badgeMode ? step.anchorSelector?.trim() || void 0 : void 0;
|
|
2281
2309
|
let anchor = null;
|
|
2282
2310
|
if (anchorSelector) {
|
|
2283
2311
|
anchor = await waitForElement(anchorSelector);
|
|
2284
2312
|
if (!anchor) return;
|
|
2285
2313
|
}
|
|
2314
|
+
const blocks = step.blocks ?? [];
|
|
2315
|
+
const soleCode = blocks.length === 1 && blocks[0]?.type === "code" ? blocks[0] : void 0;
|
|
2316
|
+
if (step.presentation === "inline" && anchor && soleCode && !soleCode.sandboxed) {
|
|
2317
|
+
const rawDoc = anchor.ownerDocument ?? document;
|
|
2318
|
+
const { cleanup } = mountCodeBlock(soleCode, rawDoc, context, void 0, {
|
|
2319
|
+
anchor,
|
|
2320
|
+
pos: inlinePosOf(step.inlinePosition)
|
|
2321
|
+
});
|
|
2322
|
+
this.registerCleanup(cleanup);
|
|
2323
|
+
context.onInteraction({ guideId: context.guide.guideId, stepIndex: idx, action: "shown" });
|
|
2324
|
+
return;
|
|
2325
|
+
}
|
|
2286
2326
|
const { host, root } = this.createHost();
|
|
2287
2327
|
const doc = root.ownerDocument ?? document;
|
|
2288
2328
|
const design = step.design ?? {};
|
|
@@ -2299,11 +2339,16 @@ var CompositeRenderer = class extends BaseRenderer {
|
|
|
2299
2339
|
});
|
|
2300
2340
|
};
|
|
2301
2341
|
const readers = [];
|
|
2302
|
-
this.buildContent(card, step.blocks ?? [], doc, context, idx, readers);
|
|
2342
|
+
this.buildContent(card, step.blocks ?? [], doc, context, idx, readers, host);
|
|
2303
2343
|
const lastBlock = card.lastElementChild;
|
|
2304
2344
|
if (lastBlock && !lastBlock.style.marginBottom) lastBlock.style.marginBottom = "0";
|
|
2345
|
+
let closeTooltip = null;
|
|
2305
2346
|
if (design.closeButton !== false) {
|
|
2306
2347
|
const closeBtn = createCloseButton(doc, () => {
|
|
2348
|
+
if (closeTooltip) {
|
|
2349
|
+
closeTooltip();
|
|
2350
|
+
return;
|
|
2351
|
+
}
|
|
2307
2352
|
dismiss("dismissed");
|
|
2308
2353
|
this.closeOrSkip(context);
|
|
2309
2354
|
});
|
|
@@ -2322,6 +2367,21 @@ var CompositeRenderer = class extends BaseRenderer {
|
|
|
2322
2367
|
}
|
|
2323
2368
|
card.appendChild(closeBtn);
|
|
2324
2369
|
}
|
|
2370
|
+
if (badgeMode && anchor) {
|
|
2371
|
+
closeTooltip = this.renderBadgeMode(
|
|
2372
|
+
step,
|
|
2373
|
+
card,
|
|
2374
|
+
anchor,
|
|
2375
|
+
anchorSelector,
|
|
2376
|
+
host,
|
|
2377
|
+
root,
|
|
2378
|
+
doc,
|
|
2379
|
+
context,
|
|
2380
|
+
idx,
|
|
2381
|
+
design
|
|
2382
|
+
);
|
|
2383
|
+
return;
|
|
2384
|
+
}
|
|
2325
2385
|
if (step.presentation === "inline" && anchor) {
|
|
2326
2386
|
host.style.display = "block";
|
|
2327
2387
|
const pos = inlinePosOf(step.inlinePosition);
|
|
@@ -2370,7 +2430,7 @@ var CompositeRenderer = class extends BaseRenderer {
|
|
|
2370
2430
|
context.onInteraction({ guideId: context.guide.guideId, stepIndex: idx, action: "shown" });
|
|
2371
2431
|
}
|
|
2372
2432
|
/** Recorre los bloques en orden y los pinta en la card. */
|
|
2373
|
-
buildContent(card, blocks, doc, context, idx, readers) {
|
|
2433
|
+
buildContent(card, blocks, doc, context, idx, readers, host) {
|
|
2374
2434
|
const emit = (block) => {
|
|
2375
2435
|
context.onInteraction({
|
|
2376
2436
|
guideId: context.guide.guideId,
|
|
@@ -2404,7 +2464,7 @@ var CompositeRenderer = class extends BaseRenderer {
|
|
|
2404
2464
|
continue;
|
|
2405
2465
|
}
|
|
2406
2466
|
if (b.type === "code") {
|
|
2407
|
-
const { node: node2, cleanup } = mountCodeBlock(b, doc, context);
|
|
2467
|
+
const { node: node2, cleanup } = mountCodeBlock(b, doc, context, host);
|
|
2408
2468
|
if (node2) card.appendChild(node2);
|
|
2409
2469
|
this.registerCleanup(cleanup);
|
|
2410
2470
|
i++;
|
|
@@ -2511,6 +2571,88 @@ var CompositeRenderer = class extends BaseRenderer {
|
|
|
2511
2571
|
if (context.nav?.callbacks) context.nav.callbacks.onSkip();
|
|
2512
2572
|
else context.onClose();
|
|
2513
2573
|
}
|
|
2574
|
+
/**
|
|
2575
|
+
* Modo BADGE: inserta un MARCADOR permanente (compuesto con `step.badge.blocks`)
|
|
2576
|
+
* junto al ancla, en el flujo del DOM. Al hover/click abre la `card` (los
|
|
2577
|
+
* bloques del paso) como TOOLTIP anclado al marcador. Devuelve una función que
|
|
2578
|
+
* cierra el tooltip (para el ✕). El marcador nunca se descarta.
|
|
2579
|
+
*/
|
|
2580
|
+
renderBadgeMode(step, card, anchor, anchorSelector, host, root, doc, context, idx, design) {
|
|
2581
|
+
const trigger = step.badge?.trigger === "click" ? "click" : "hover";
|
|
2582
|
+
const badge = doc.createElement("div");
|
|
2583
|
+
badge.className = "veo-composite-badge";
|
|
2584
|
+
badge.setAttribute("role", "button");
|
|
2585
|
+
badge.tabIndex = 0;
|
|
2586
|
+
badge.style.cursor = "pointer";
|
|
2587
|
+
badge.style.display = "inline-flex";
|
|
2588
|
+
badge.style.alignItems = "center";
|
|
2589
|
+
this.buildContent(badge, step.badge?.blocks ?? [], doc, context, idx, [], host);
|
|
2590
|
+
root.appendChild(badge);
|
|
2591
|
+
const wrapper = doc.createElement("div");
|
|
2592
|
+
wrapper.className = "veo-composite-anchored";
|
|
2593
|
+
wrapper.style.display = "none";
|
|
2594
|
+
const caretEl = design.caret === false ? null : makeCaret(doc, design);
|
|
2595
|
+
if (caretEl) wrapper.appendChild(caretEl);
|
|
2596
|
+
wrapper.appendChild(card);
|
|
2597
|
+
root.appendChild(wrapper);
|
|
2598
|
+
host.style.display = "inline-block";
|
|
2599
|
+
const pos = inlinePosOf(step.inlinePosition);
|
|
2600
|
+
insertHost(anchor, host, pos);
|
|
2601
|
+
this.registerCleanup(keepHostAttached(host, anchorSelector, pos));
|
|
2602
|
+
let open = false;
|
|
2603
|
+
let stopFloat = null;
|
|
2604
|
+
let closeTimer = null;
|
|
2605
|
+
let shownEmitted = false;
|
|
2606
|
+
const openTip = () => {
|
|
2607
|
+
if (open) return;
|
|
2608
|
+
open = true;
|
|
2609
|
+
wrapper.style.display = "block";
|
|
2610
|
+
void anchorPosition(badge, wrapper, caretEl).then((stop) => {
|
|
2611
|
+
if (open) stopFloat = stop;
|
|
2612
|
+
else stop();
|
|
2613
|
+
});
|
|
2614
|
+
if (!shownEmitted) {
|
|
2615
|
+
shownEmitted = true;
|
|
2616
|
+
context.onInteraction({ guideId: context.guide.guideId, stepIndex: idx, action: "shown" });
|
|
2617
|
+
}
|
|
2618
|
+
};
|
|
2619
|
+
const closeTip = () => {
|
|
2620
|
+
open = false;
|
|
2621
|
+
wrapper.style.display = "none";
|
|
2622
|
+
stopFloat?.();
|
|
2623
|
+
stopFloat = null;
|
|
2624
|
+
};
|
|
2625
|
+
if (trigger === "hover") {
|
|
2626
|
+
const cancelClose = () => {
|
|
2627
|
+
if (closeTimer !== null) {
|
|
2628
|
+
clearTimeout(closeTimer);
|
|
2629
|
+
closeTimer = null;
|
|
2630
|
+
}
|
|
2631
|
+
};
|
|
2632
|
+
const scheduleClose = () => {
|
|
2633
|
+
cancelClose();
|
|
2634
|
+
closeTimer = window.setTimeout(closeTip, 150);
|
|
2635
|
+
};
|
|
2636
|
+
badge.addEventListener("mouseenter", () => {
|
|
2637
|
+
cancelClose();
|
|
2638
|
+
openTip();
|
|
2639
|
+
});
|
|
2640
|
+
badge.addEventListener("mouseleave", scheduleClose);
|
|
2641
|
+
badge.addEventListener("focus", openTip);
|
|
2642
|
+
wrapper.addEventListener("mouseenter", cancelClose);
|
|
2643
|
+
wrapper.addEventListener("mouseleave", scheduleClose);
|
|
2644
|
+
} else {
|
|
2645
|
+
badge.addEventListener("click", () => {
|
|
2646
|
+
if (open) closeTip();
|
|
2647
|
+
else openTip();
|
|
2648
|
+
});
|
|
2649
|
+
}
|
|
2650
|
+
this.registerCleanup(() => {
|
|
2651
|
+
stopFloat?.();
|
|
2652
|
+
if (closeTimer !== null) clearTimeout(closeTimer);
|
|
2653
|
+
});
|
|
2654
|
+
return closeTip;
|
|
2655
|
+
}
|
|
2514
2656
|
};
|
|
2515
2657
|
function inlinePosOf(p) {
|
|
2516
2658
|
return p === "before" || p === "prepend" || p === "append" ? p : "after";
|