veo-sdk 0.3.0 → 0.3.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.
@@ -0,0 +1,5 @@
1
+ export { createBuilderSession, initBuilderMode, startElementPicker, stopElementPicker } from './chunk-7FVIFPGF.mjs';
2
+ import './chunk-GHP7ZJCW.mjs';
3
+ import './chunk-PTG3BTJE.mjs';
4
+ //# sourceMappingURL=builder-AGIBF67L.mjs.map
5
+ //# sourceMappingURL=builder-AGIBF67L.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"builder-UEGKG2UR.mjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"builder-AGIBF67L.mjs"}
package/dist/builder.cjs CHANGED
@@ -13,10 +13,12 @@ function hasDocument() {
13
13
  // src/core/builder-constants.ts
14
14
  var BUILDER_TOKEN_PARAM = "veoBuilder";
15
15
  var BUILDER_ORIGIN_PARAM = "veoBuilderOrigin";
16
+ var BUILDER_PANEL_PARAM = "veoBuilderPanel";
17
+ var BUILDER_PANEL_PATH_PARAM = "veoBuilderPanelPath";
18
+ var BUILDER_GUIDE_PARAM = "veoGuide";
16
19
 
17
20
  // src/core/builder-token.ts
18
- var TOKEN_KEY = "veo:builder_token";
19
- var ORIGIN_KEY = "veo:builder_origin";
21
+ var CTX_KEY = "veo:builder_ctx";
20
22
  function session() {
21
23
  try {
22
24
  return window.sessionStorage;
@@ -31,32 +33,27 @@ function urlParams() {
31
33
  return null;
32
34
  }
33
35
  }
34
- function resolveBuilderToken() {
36
+ function resolveBuilderContext() {
35
37
  if (!hasWindow()) return null;
36
38
  const params = urlParams();
37
39
  const fromUrl = params?.get(BUILDER_TOKEN_PARAM);
38
40
  if (fromUrl) {
39
- const store = session();
41
+ const ctx = {
42
+ token: fromUrl,
43
+ origin: params?.get(BUILDER_ORIGIN_PARAM) ?? null,
44
+ panel: params?.get(BUILDER_PANEL_PARAM) === "1",
45
+ guide: params?.get(BUILDER_GUIDE_PARAM) ?? null,
46
+ panelPath: params?.get(BUILDER_PANEL_PATH_PARAM) ?? null
47
+ };
40
48
  try {
41
- store?.setItem(TOKEN_KEY, fromUrl);
42
- const origin = params?.get(BUILDER_ORIGIN_PARAM);
43
- if (origin) store?.setItem(ORIGIN_KEY, origin);
49
+ session()?.setItem(CTX_KEY, JSON.stringify(ctx));
44
50
  } catch {
45
51
  }
46
- return fromUrl;
47
- }
48
- try {
49
- return session()?.getItem(TOKEN_KEY) ?? null;
50
- } catch {
51
- return null;
52
+ return ctx;
52
53
  }
53
- }
54
- function resolveBuilderOrigin() {
55
- if (!hasWindow()) return null;
56
- const fromUrl = urlParams()?.get(BUILDER_ORIGIN_PARAM);
57
- if (fromUrl) return fromUrl;
58
54
  try {
59
- return session()?.getItem(ORIGIN_KEY) ?? null;
55
+ const raw = session()?.getItem(CTX_KEY);
56
+ return raw ? JSON.parse(raw) : null;
60
57
  } catch {
61
58
  return null;
62
59
  }
@@ -64,9 +61,7 @@ function resolveBuilderOrigin() {
64
61
  function clearBuilderToken() {
65
62
  if (!hasWindow()) return;
66
63
  try {
67
- const store = session();
68
- store?.removeItem(TOKEN_KEY);
69
- store?.removeItem(ORIGIN_KEY);
64
+ session()?.removeItem(CTX_KEY);
70
65
  } catch {
71
66
  }
72
67
  }
@@ -1597,6 +1592,79 @@ function safeDestroy(renderer) {
1597
1592
  // src/plugins/builder/bridge-protocol.ts
1598
1593
  var VEO_BUILDER_SOURCE = "veo-builder";
1599
1594
 
1595
+ // src/plugins/builder/builder-panel.ts
1596
+ var DEFAULT_PANEL_PATH = "/guides/design";
1597
+ function injectBuilderPanel(opts) {
1598
+ if (!hasWindow() || !hasDocument()) {
1599
+ return { target: () => null, teardown: () => {
1600
+ } };
1601
+ }
1602
+ const host = document.createElement("div");
1603
+ host.setAttribute("data-veo-builder-panel", "");
1604
+ const shadow = host.attachShadow({ mode: "open" });
1605
+ const style = document.createElement("style");
1606
+ style.textContent = PANEL_CSS;
1607
+ const container = document.createElement("div");
1608
+ container.className = "veo-panel";
1609
+ const header = document.createElement("div");
1610
+ header.className = "veo-panel-header";
1611
+ const title = document.createElement("span");
1612
+ title.className = "veo-panel-title";
1613
+ title.textContent = "Veo \xB7 Editor";
1614
+ const close = document.createElement("button");
1615
+ close.className = "veo-panel-close";
1616
+ close.type = "button";
1617
+ close.setAttribute("aria-label", "Cerrar");
1618
+ close.textContent = "\u2715";
1619
+ close.addEventListener("click", () => opts.onClose());
1620
+ header.append(title, close);
1621
+ const iframe = document.createElement("iframe");
1622
+ iframe.className = "veo-panel-frame";
1623
+ iframe.title = "Editor de Veo";
1624
+ iframe.src = buildPanelUrl(opts);
1625
+ container.append(header, iframe);
1626
+ shadow.append(style, container);
1627
+ document.body.appendChild(host);
1628
+ return {
1629
+ target: () => iframe.contentWindow,
1630
+ teardown: () => host.remove()
1631
+ };
1632
+ }
1633
+ function buildPanelUrl(opts) {
1634
+ const path = opts.panelPath ?? DEFAULT_PANEL_PATH;
1635
+ const url = new URL(path, opts.dashboardOrigin);
1636
+ url.searchParams.set("veoToken", opts.token);
1637
+ url.searchParams.set("veoApp", opts.appOrigin);
1638
+ if (opts.guide) url.searchParams.set("veoGuide", opts.guide);
1639
+ return url.toString();
1640
+ }
1641
+ var PANEL_CSS = `
1642
+ :host { all: initial; }
1643
+ .veo-panel {
1644
+ position: fixed; top: 0; right: 0; bottom: 0;
1645
+ width: 420px; max-width: 100vw;
1646
+ display: flex; flex-direction: column;
1647
+ background: #fff;
1648
+ box-shadow: -8px 0 30px rgba(0,0,0,0.18);
1649
+ z-index: 2147483647;
1650
+ font-family: system-ui, -apple-system, sans-serif;
1651
+ }
1652
+ .veo-panel-header {
1653
+ flex: 0 0 auto;
1654
+ display: flex; align-items: center; justify-content: space-between;
1655
+ padding: 8px 12px;
1656
+ background: #0f172a; color: #fff;
1657
+ font-size: 13px; font-weight: 600;
1658
+ }
1659
+ .veo-panel-close {
1660
+ border: 0; background: transparent; color: #fff;
1661
+ font-size: 15px; cursor: pointer; line-height: 1;
1662
+ padding: 4px 6px; border-radius: 6px;
1663
+ }
1664
+ .veo-panel-close:hover { background: rgba(255,255,255,0.15); }
1665
+ .veo-panel-frame { flex: 1 1 auto; width: 100%; border: 0; background: #fff; }
1666
+ `;
1667
+
1600
1668
  // src/plugins/autocapture/constants.ts
1601
1669
  var HASHED_CLASS_PATTERNS = [
1602
1670
  /^css-[a-z0-9]{4,}$/i,
@@ -1881,18 +1949,23 @@ function stopElementPicker() {
1881
1949
  // src/plugins/builder/builder-mode.ts
1882
1950
  function initBuilderMode() {
1883
1951
  if (!hasWindow() || !hasDocument()) return null;
1884
- const token = resolveBuilderToken();
1885
- if (!token) return null;
1886
- const dashboardOrigin = resolveDashboardOrigin();
1952
+ const ctx = resolveBuilderContext();
1953
+ if (!ctx) return null;
1954
+ const token = ctx.token;
1955
+ const dashboardOrigin = resolveDashboardOrigin(ctx.origin);
1887
1956
  if (!dashboardOrigin) return null;
1888
- const target = resolveTarget();
1889
- if (!target) return null;
1890
1957
  let picker = null;
1958
+ let panel = null;
1959
+ let staticTarget = null;
1960
+ const getTarget = () => panel ? panel.target() : staticTarget;
1891
1961
  const post = (event) => {
1892
- target.postMessage({ source: VEO_BUILDER_SOURCE, token, ...event }, dashboardOrigin);
1962
+ getTarget()?.postMessage({ source: VEO_BUILDER_SOURCE, token, ...event }, dashboardOrigin);
1893
1963
  };
1894
1964
  const handleCommand = (cmd) => {
1895
1965
  switch (cmd.type) {
1966
+ case "panel-ready":
1967
+ post({ type: "ready" });
1968
+ break;
1896
1969
  case "start-picker":
1897
1970
  picker?.stop();
1898
1971
  picker = startElementPicker({
@@ -1936,13 +2009,28 @@ function initBuilderMode() {
1936
2009
  picker?.stop();
1937
2010
  picker = null;
1938
2011
  closeGuidePreview();
1939
- clearBuilderToken();
1940
2012
  post({ type: "closed" });
2013
+ panel?.teardown();
2014
+ panel = null;
2015
+ clearBuilderToken();
1941
2016
  };
2017
+ if (ctx.panel) {
2018
+ panel = injectBuilderPanel({
2019
+ dashboardOrigin,
2020
+ token,
2021
+ appOrigin: window.location.origin,
2022
+ guide: ctx.guide,
2023
+ panelPath: ctx.panelPath,
2024
+ onClose: () => teardown()
2025
+ });
2026
+ } else {
2027
+ staticTarget = resolveTarget();
2028
+ if (!staticTarget) return null;
2029
+ }
1942
2030
  const activate = () => {
1943
2031
  window.addEventListener("message", onMessage);
1944
2032
  window.addEventListener("pagehide", onPageHide);
1945
- post({ type: "ready" });
2033
+ if (!ctx.panel) post({ type: "ready" });
1946
2034
  };
1947
2035
  const cfg = window.__veoBuilder;
1948
2036
  if (cfg?.apiKey && cfg?.apiUrl) {
@@ -1975,11 +2063,10 @@ function resolveTarget() {
1975
2063
  if (window.parent && window.parent !== window) return window.parent;
1976
2064
  return null;
1977
2065
  }
1978
- function resolveDashboardOrigin() {
1979
- const stored = resolveBuilderOrigin();
1980
- if (stored) {
2066
+ function resolveDashboardOrigin(originHint) {
2067
+ if (originHint) {
1981
2068
  try {
1982
- return new URL(stored).origin;
2069
+ return new URL(originHint).origin;
1983
2070
  } catch {
1984
2071
  return null;
1985
2072
  }