@base44/vite-plugin 0.2.24 → 0.2.25

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.
@@ -1,3 +1,4 @@
1
+ export declare const ALLOWED_ATTRIBUTES: string[];
1
2
  /** Find elements by ID - first try data-source-location, fallback to data-visual-selector-id */
2
3
  export declare function findElementsById(id: string | null): Element[];
3
4
  /**
@@ -5,4 +6,8 @@ export declare function findElementsById(id: string | null): Element[];
5
6
  * Uses setAttribute instead of className to support both HTML and SVG elements.
6
7
  */
7
8
  export declare function updateElementClasses(elements: Element[], classes: string): void;
9
+ /** Set a single attribute on all provided elements. */
10
+ export declare function updateElementAttribute(elements: Element[], attribute: string, value: string): void;
11
+ /** Collect attribute values from an element for a given allowlist. */
12
+ export declare function collectAllowedAttributes(element: Element, allowedAttributes: string[]): Record<string, string>;
8
13
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/injections/utils.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,EAAE,CAW7D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAI/E"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/injections/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAAY,CAAC;AAEpD,gGAAgG;AAChG,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,EAAE,CAW7D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAI/E;AAED,uDAAuD;AACvD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAQlG;AAED,sEAAsE;AACtE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAS9G"}
@@ -1,3 +1,4 @@
1
+ export const ALLOWED_ATTRIBUTES = ["src"];
1
2
  /** Find elements by ID - first try data-source-location, fallback to data-visual-selector-id */
2
3
  export function findElementsById(id) {
3
4
  if (!id)
@@ -17,4 +18,24 @@ export function updateElementClasses(elements, classes) {
17
18
  element.setAttribute("class", classes);
18
19
  });
19
20
  }
21
+ /** Set a single attribute on all provided elements. */
22
+ export function updateElementAttribute(elements, attribute, value) {
23
+ if (!ALLOWED_ATTRIBUTES.includes(attribute)) {
24
+ return;
25
+ }
26
+ elements.forEach((element) => {
27
+ element.setAttribute(attribute, value);
28
+ });
29
+ }
30
+ /** Collect attribute values from an element for a given allowlist. */
31
+ export function collectAllowedAttributes(element, allowedAttributes) {
32
+ const attributes = {};
33
+ for (const attr of allowedAttributes) {
34
+ const val = element.getAttribute(attr);
35
+ if (val !== null) {
36
+ attributes[attr] = val;
37
+ }
38
+ }
39
+ return attributes;
40
+ }
20
41
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/injections/utils.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,MAAM,UAAU,gBAAgB,CAAC,EAAiB;IAChD,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAC/B,QAAQ,CAAC,gBAAgB,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAC5D,CAAC;IACF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CACf,QAAQ,CAAC,gBAAgB,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAC/D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAmB,EAAE,OAAe;IACvE,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/injections/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAa,CAAC,KAAK,CAAC,CAAC;AAEpD,gGAAgG;AAChG,MAAM,UAAU,gBAAgB,CAAC,EAAiB;IAChD,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAC/B,QAAQ,CAAC,gBAAgB,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAC5D,CAAC;IACF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CACf,QAAQ,CAAC,gBAAgB,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAC/D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAmB,EAAE,OAAe;IACvE,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,sBAAsB,CAAC,QAAmB,EAAE,SAAiB,EAAE,KAAa;IAC1F,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,wBAAwB,CAAC,OAAgB,EAAE,iBAA2B;IACpF,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"visual-edit-agent.d.ts","sourceRoot":"","sources":["../../src/injections/visual-edit-agent.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,SAijBnC"}
1
+ {"version":3,"file":"visual-edit-agent.d.ts","sourceRoot":"","sources":["../../src/injections/visual-edit-agent.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,SA+lBnC"}
@@ -1,4 +1,4 @@
1
- import { findElementsById, updateElementClasses } from "./utils.js";
1
+ import { findElementsById, updateElementClasses, updateElementAttribute, collectAllowedAttributes, ALLOWED_ATTRIBUTES } from "./utils.js";
2
2
  export function setupVisualEditAgent() {
3
3
  // State variables (replacing React useState/useRef)
4
4
  let isVisualEditMode = false;
@@ -174,6 +174,8 @@ export function setupVisualEditAgent() {
174
174
  centerX: rect.left + rect.width / 2,
175
175
  centerY: rect.top + rect.height / 2,
176
176
  };
177
+ // Collect allowed element attributes
178
+ const attributes = collectAllowedAttributes(element, ALLOWED_ATTRIBUTES);
177
179
  const isTextElement = ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'a', 'label'].includes(element.tagName?.toLowerCase());
178
180
  // Send message to parent window with element info including position
179
181
  const svgElement = element;
@@ -190,6 +192,7 @@ export function setupVisualEditAgent() {
190
192
  linenumber: htmlElement.dataset.linenumber,
191
193
  filename: htmlElement.dataset.filename,
192
194
  position: elementPosition,
195
+ attributes,
193
196
  isTextElement: isTextElement,
194
197
  };
195
198
  window.parent.postMessage(elementData, "*");
@@ -233,6 +236,23 @@ export function setupVisualEditAgent() {
233
236
  }
234
237
  }, 50);
235
238
  };
239
+ // Update element attribute by visual selector ID
240
+ const updateElementAttributeAndReposition = (visualSelectorId, attribute, value) => {
241
+ const elements = findElementsById(visualSelectorId);
242
+ if (elements.length === 0)
243
+ return;
244
+ updateElementAttribute(elements, attribute, value);
245
+ // Reposition overlays after attribute change (e.g. image src swap can affect layout)
246
+ setTimeout(() => {
247
+ if (selectedElementId === visualSelectorId) {
248
+ selectedOverlays.forEach((overlay, index) => {
249
+ if (index < elements.length) {
250
+ positionOverlay(overlay, elements[index]);
251
+ }
252
+ });
253
+ }
254
+ }, 50);
255
+ };
236
256
  // Update element content by visual selector ID
237
257
  const updateElementContent = (visualSelectorId, content) => {
238
258
  const elements = findElementsById(visualSelectorId);
@@ -324,6 +344,17 @@ export function setupVisualEditAgent() {
324
344
  console.warn("[VisualEditAgent] Invalid update-classes message:", message);
325
345
  }
326
346
  break;
347
+ case "update-attribute":
348
+ if (message.data &&
349
+ message.data.visualSelectorId &&
350
+ message.data.attribute !== undefined &&
351
+ message.data.value !== undefined) {
352
+ updateElementAttributeAndReposition(message.data.visualSelectorId, message.data.attribute, message.data.value);
353
+ }
354
+ else {
355
+ console.warn("[VisualEditAgent] Invalid update-attribute message:", message);
356
+ }
357
+ break;
327
358
  case "unselect-element":
328
359
  unselectElement();
329
360
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"visual-edit-agent.js","sourceRoot":"","sources":["../../src/injections/visual-edit-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,UAAU,oBAAoB;IAClC,oDAAoD;IACpD,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,aAAa,GAAqB,EAAE,CAAC;IACzC,IAAI,gBAAgB,GAAqB,EAAE,CAAC;IAC5C,IAAI,0BAA0B,GAAc,EAAE,CAAC;IAC/C,IAAI,iBAAiB,GAAkB,IAAI,CAAC;IAE5C,yBAAyB;IACzB,MAAM,aAAa,GAAG,CAAC,UAAU,GAAG,KAAK,EAAkB,EAAE;QAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,sBAAsB,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAE9B,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,0BAA0B,CAAC;QAC7D,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,uCAAuC;IACvC,MAAM,eAAe,GAAG,CACtB,OAAuB,EACvB,OAAgB,EAChB,UAAU,GAAG,KAAK,EAClB,EAAE;QACF,IAAI,CAAC,OAAO,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAE1C,MAAM,WAAW,GAAG,OAAsB,CAAC;QAC3C,6BAA6B;QAC7B,KAAK,WAAW,CAAC,WAAW,CAAC;QAE7B,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC;QAE1C,2CAA2C;QAC3C,IAAI,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAA0B,CAAC;QAElE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACtC,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAClD,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;YAClC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC;YAC1B,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;YAC1B,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;YAChC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC9B,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YACpD,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACvD,KAAK,CAAC,KAAK,CAAC,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACjE,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;YACjC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC9B,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;YACjC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC;IAEF,uBAAuB;IACvB,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC9B,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAChC,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBAClC,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,aAAa,GAAG,EAAE,CAAC;QACnB,0BAA0B,GAAG,EAAE,CAAC;IAClC,CAAC,CAAC;IAEF,0BAA0B;IAC1B,MAAM,eAAe,GAAG,CAAC,CAAa,EAAE,EAAE;QACxC,IAAI,CAAC,gBAAgB,IAAI,iBAAiB;YAAE,OAAO;QAEnD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAiB,CAAC;QAEnC,gDAAgD;QAChD,IAAI,cAAc,EAAE,CAAC;YACnB,kBAAkB,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,6CAA6C;QAC7C,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;YAC5C,kBAAkB,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,gEAAgE;QAChE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAC5B,mDAAmD,CACpD,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,kBAAkB,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,mEAAmE;QACnE,MAAM,WAAW,GAAG,OAAsB,CAAC;QAC3C,MAAM,UAAU,GACd,WAAW,CAAC,OAAO,CAAC,cAAc;YAClC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAEvC,2CAA2C;QAC3C,IAAI,iBAAiB,KAAK,UAAU,EAAE,CAAC;YACrC,kBAAkB,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,qCAAqC;QACrC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;QAEtD,gCAAgC;QAChC,kBAAkB,EAAE,CAAC;QAErB,4CAA4C;QAC5C,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACtB,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACnC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,0BAA0B,GAAG,QAAQ,CAAC;IACxC,CAAC,CAAC;IAEF,yBAAyB;IACzB,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,iBAAiB;YAAE,OAAO;QAC9B,kBAAkB,EAAE,CAAC;IACvB,CAAC,CAAC;IAEF,uBAAuB;IACvB,MAAM,kBAAkB,GAAG,CAAC,CAAa,EAAE,EAAE;QAC3C,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAE9B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAiB,CAAC;QAEnC,yEAAyE;QACzE,IAAI,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,CAAC,CAAC,wBAAwB,EAAE,CAAC;YAE7B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,wCAAwC;QACxC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,gEAAgE;QAChE,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,CAAC,CAAC,wBAAwB,EAAE,CAAC;QAE7B,gEAAgE;QAChE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAC5B,mDAAmD,CACpD,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,OAAsB,CAAC;QAC3C,MAAM,gBAAgB,GACpB,WAAW,CAAC,OAAO,CAAC,cAAc;YAClC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAEvC,uCAAuC;QACvC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBAClC,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,gBAAgB,GAAG,EAAE,CAAC;QAEtB,qCAAqC;QACrC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC;QAE5D,qDAAqD;QACrD,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACtB,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACnC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,eAAe,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,iBAAiB,GAAG,gBAAgB,IAAI,IAAI,CAAC;QAE7C,uBAAuB;QACvB,kBAAkB,EAAE,CAAC;QAErB,qDAAqD;QACrD,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAC7C,MAAM,eAAe,GAAG;YACtB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;YACnC,OAAO,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;SACpC,CAAC;QAEF,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAA;QAE9H,qEAAqE;QACrE,MAAM,UAAU,GAAG,OAAqB,CAAC;QACzC,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EACJ,UAAU,CAAC,SAA0C,EAAE,OAAO;gBAC/D,OAAO,CAAC,SAAS;gBACjB,EAAE;YACJ,gBAAgB,EAAE,gBAAgB;YAClC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAE,OAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACvE,kBAAkB,EAAE,WAAW,CAAC,OAAO,CAAC,cAAc;YACtD,gBAAgB,EAAE,WAAW,CAAC,OAAO,CAAC,cAAc,KAAK,MAAM;YAC/D,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU;YAC1C,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ;YACtC,QAAQ,EAAE,eAAe;YACzB,aAAa,EAAE,aAAa;SAC7B,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,+BAA+B;IAC/B,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBAClC,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,gBAAgB,GAAG,EAAE,CAAC;QACtB,iBAAiB,GAAG,IAAI,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,iCAAiC,GAAG,CAAC,gBAAwB,EAAE,OAAe,EAAE,EAAE;QACtF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QACpD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAElC,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAExC,oFAAoF;QACpF,UAAU,CAAC,GAAG,EAAE;YACd,+BAA+B;YAC/B,IAAI,iBAAiB,KAAK,gBAAgB,EAAE,CAAC;gBAC3C,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;oBAC1C,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;wBAC5B,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAE,CAAC,CAAC;oBAC7C,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YAED,sCAAsC;YACtC,IAAI,0BAA0B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1C,MAAM,cAAc,GAAG,0BAA0B,CAAC,CAAC,CAAgB,CAAC;gBACpE,MAAM,SAAS,GAAG,cAAc,EAAE,OAAO,EAAE,gBAAgB,CAAC;gBAC5D,IAAI,SAAS,KAAK,gBAAgB,EAAE,CAAC;oBACnC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;wBACvC,IAAI,KAAK,GAAG,0BAA0B,CAAC,MAAM,EAAE,CAAC;4BAC9C,eAAe,CAAC,OAAO,EAAE,0BAA0B,CAAC,KAAK,CAAE,CAAC,CAAC;wBAC/D,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC,CAAC;IAEF,+CAA+C;IAC/C,MAAM,oBAAoB,GAAG,CAAC,gBAAwB,EAAE,OAAe,EAAE,EAAE;QACzE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QAEpD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC1B,OAAuB,CAAC,SAAS,GAAG,OAAO,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,iBAAiB,KAAK,gBAAgB,EAAE,CAAC;gBAC3C,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;oBAC1C,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;wBAC5B,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAE,CAAC,CAAC;oBAC7C,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC,CAAC;IAEF,0BAA0B;IAC1B,MAAM,oBAAoB,GAAG,CAAC,SAAkB,EAAE,EAAE;QAClD,gBAAgB,GAAG,SAAS,CAAC;QAE7B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,kBAAkB,EAAE,CAAC;YAErB,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBACnC,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;oBAClC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC,CAAC,CAAC;YACH,gBAAgB,GAAG,EAAE,CAAC;YAEtB,0BAA0B,GAAG,EAAE,CAAC;YAChC,iBAAiB,GAAG,IAAI,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;YAEvC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YAC3D,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YACzD,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;YACzC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YACxD,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YACtD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC;IAEF,kDAAkD;IAClD,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;YACrD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,IAAI,GAAG,OAAQ,CAAC,qBAAqB,EAAE,CAAC;gBAE9C,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC;gBAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC;gBACxC,MAAM,YAAY,GAChB,IAAI,CAAC,GAAG,GAAG,cAAc;oBACzB,IAAI,CAAC,MAAM,GAAG,CAAC;oBACf,IAAI,CAAC,IAAI,GAAG,aAAa;oBACzB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;gBAEjB,MAAM,eAAe,GAAG;oBACtB,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,OAAO,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;oBACnC,OAAO,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;iBACpC,CAAC;gBAEF,MAAM,CAAC,MAAM,CAAC,WAAW,CACvB;oBACE,IAAI,EAAE,yBAAyB;oBAC/B,QAAQ,EAAE,eAAe;oBACzB,YAAY,EAAE,YAAY;oBAC1B,gBAAgB,EAAE,iBAAiB;iBACpC,EACD,GAAG,CACJ,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,qCAAqC;IACrC,MAAM,aAAa,GAAG,CAAC,KAAmB,EAAE,EAAE;QAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;QAE3B,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,yBAAyB;gBAC5B,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3C,MAAM;YAER,KAAK,gBAAgB;gBACnB,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBACvD,iCAAiC,CAC/B,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAC7B,OAAO,CAAC,IAAI,CAAC,OAAO,CACrB,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CACV,mDAAmD,EACnD,OAAO,CACR,CAAC;gBACJ,CAAC;gBACD,MAAM;YAER,KAAK,kBAAkB;gBACrB,eAAe,EAAE,CAAC;gBAClB,MAAM;YAER,KAAK,cAAc;gBACjB,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACzB,MAAM;YAER,KAAK,gBAAgB;gBACnB,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBACvD,oBAAoB,CAClB,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAC7B,OAAO,CAAC,IAAI,CAAC,OAAO,CACrB,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CACV,mDAAmD,EACnD,OAAO,CACR,CAAC;gBACJ,CAAC;gBACD,MAAM;YAER,KAAK,0BAA0B;gBAC7B,IAAI,iBAAiB,EAAE,CAAC;oBACtB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;oBACrD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACxB,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;wBAC5B,MAAM,IAAI,GAAG,OAAQ,CAAC,qBAAqB,EAAE,CAAC;wBAE9C,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC;wBAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC;wBACxC,MAAM,YAAY,GAChB,IAAI,CAAC,GAAG,GAAG,cAAc;4BACzB,IAAI,CAAC,MAAM,GAAG,CAAC;4BACf,IAAI,CAAC,IAAI,GAAG,aAAa;4BACzB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;wBAEjB,MAAM,eAAe,GAAG;4BACtB,GAAG,EAAE,IAAI,CAAC,GAAG;4BACb,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,MAAM,EAAE,IAAI,CAAC,MAAM;4BACnB,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,MAAM,EAAE,IAAI,CAAC,MAAM;4BACnB,OAAO,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;4BACnC,OAAO,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;yBACpC,CAAC;wBAEF,MAAM,CAAC,MAAM,CAAC,WAAW,CACvB;4BACE,IAAI,EAAE,yBAAyB;4BAC/B,QAAQ,EAAE,eAAe;4BACzB,YAAY,EAAE,YAAY;4BAC1B,gBAAgB,EAAE,iBAAiB;yBACpC,EACD,GAAG,CACJ,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,MAAM;YAER,KAAK,oBAAoB;gBACvB,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBAC1D,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;oBAC5C,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;wBAC5B,kBAAkB,EAAE,CAAC;oBACvB,CAAC;gBACH,CAAC;gBACD,MAAM;YAER,KAAK,gBAAgB;gBACnB,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBACtD,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;oBACrC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACxB,kBAAkB,EAAE,CAAC;oBACvB,CAAC;gBACH,CAAC;gBACD,MAAM;YAER;gBACE,MAAM;QACV,CAAC;IACH,CAAC,CAAC;IAEF,8CAA8C;IAC9C,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;YACrD,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBAC1C,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAC5B,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAE,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,0BAA0B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBACvC,IAAI,KAAK,GAAG,0BAA0B,CAAC,MAAM,EAAE,CAAC;oBAC9C,eAAe,CAAC,OAAO,EAAE,0BAA0B,CAAC,KAAK,CAAE,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IAEF,4EAA4E;IAC5E,MAAM,sBAAsB,GAAG,QAAQ,CAAC,gBAAgB,CACtD,kDAAkD,CACnD,CAAC;IACF,sBAAsB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,EAAiB,CAAC;QACjC,MAAM,EAAE,GAAG,aAAa,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,EAAE,CAAC;QACxF,MAAM,CAAC,OAAO,CAAC,gBAAgB,GAAG,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,oDAAoD;IACpD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,EAAE,EAAE;QAC1D,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC9C,MAAM,WAAW,GAAG,CAAC,IAAU,EAAW,EAAE;gBAC1C,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;oBACxC,MAAM,EAAE,GAAG,IAAmB,CAAC;oBAC/B,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;wBAC9C,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC5C,IAAI,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;4BACjC,OAAO,IAAI,CAAC;wBACd,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC;YAEF,MAAM,cAAc,GAClB,QAAQ,CAAC,IAAI,KAAK,YAAY;gBAC9B,CAAC,QAAQ,CAAC,aAAa,KAAK,OAAO;oBACjC,QAAQ,CAAC,aAAa,KAAK,OAAO;oBAClC,QAAQ,CAAC,aAAa,KAAK,OAAO;oBAClC,QAAQ,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC;YAEzC,OAAO,cAAc,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,IAAI,WAAW,EAAE,CAAC;YAChB,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,yBAAyB;IACzB,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAClD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IACtD,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAChD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEhD,gCAAgC;IAChC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;QACtC,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;KACvD,CAAC,CAAC;IAEH,+BAA+B;IAC/B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,GAAG,CAAC,CAAC;AACtE,CAAC"}
1
+ {"version":3,"file":"visual-edit-agent.js","sourceRoot":"","sources":["../../src/injections/visual-edit-agent.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- function p(d){if(!d)return[];let h=Array.from(document.querySelectorAll(`[data-source-location="${d}"]`));return h.length>0?h:Array.from(document.querySelectorAll(`[data-visual-selector-id="${d}"]`))}function T(d,h){d.forEach(g=>{g.setAttribute("class",h)})}function W(){let d=!1,h=!1,g=!1,E=[],c=[],u=[],l=null,L=(n=!1)=>{let e=document.createElement("div");return e.style.position="absolute",e.style.pointerEvents="none",e.style.transition="all 0.1s ease-in-out",e.style.zIndex="9999",n?e.style.border="2px solid #2563EB":(e.style.border="2px solid #95a5fc",e.style.backgroundColor="rgba(99, 102, 241, 0.05)"),e},f=(n,e,t=!1)=>{if(!e||!d)return;e.offsetWidth;let s=e.getBoundingClientRect();n.style.top=`${s.top+window.scrollY}px`,n.style.left=`${s.left+window.scrollX}px`,n.style.width=`${s.width}px`,n.style.height=`${s.height}px`;let o=n.querySelector("div");o||(o=document.createElement("div"),o.textContent=e.tagName.toLowerCase(),o.style.position="absolute",o.style.top="-27px",o.style.left="-2px",o.style.padding="2px 8px",o.style.fontSize="11px",o.style.fontWeight=t?"500":"400",o.style.color=t?"#ffffff":"#526cff",o.style.backgroundColor=t?"#526cff":"#DBEAFE",o.style.borderRadius="3px",o.style.minWidth="24px",o.style.textAlign="center",n.appendChild(o))},m=()=>{E.forEach(n=>{n&&n.parentNode&&n.remove()}),E=[],u=[]},M=n=>{if(!d||h)return;let e=n.target;if(g){m();return}if(e.tagName.toLowerCase()==="path"){m();return}let t=e.closest("[data-source-location], [data-visual-selector-id]");if(!t){m();return}let a=t,s=a.dataset.sourceLocation||a.dataset.visualSelectorId;if(l===s){m();return}let o=p(s||null);m(),o.forEach(i=>{let r=L(!1);document.body.appendChild(r),E.push(r),f(r,i)}),u=o},I=()=>{h||m()},C=n=>{if(!d)return;let e=n.target;if(g){n.preventDefault(),n.stopPropagation(),n.stopImmediatePropagation(),window.parent.postMessage({type:"close-dropdowns"},"*");return}if(e.tagName.toLowerCase()==="path")return;n.preventDefault(),n.stopPropagation(),n.stopImmediatePropagation();let t=e.closest("[data-source-location], [data-visual-selector-id]");if(!t)return;let a=t,s=a.dataset.sourceLocation||a.dataset.visualSelectorId;c.forEach(v=>{v&&v.parentNode&&v.remove()}),c=[],p(s||null).forEach(v=>{let y=L(!0);document.body.appendChild(y),c.push(y),f(y,v,!0)}),l=s||null,m();let i=t.getBoundingClientRect(),r={top:i.top,left:i.left,right:i.right,bottom:i.bottom,width:i.width,height:i.height,centerX:i.left+i.width/2,centerY:i.top+i.height/2},w=["p","h1","h2","h3","h4","h5","h6","span","a","label"].includes(t.tagName?.toLowerCase()),O=t,V={type:"element-selected",tagName:t.tagName,classes:O.className?.baseVal||t.className||"",visualSelectorId:s,content:w?t.innerText:void 0,dataSourceLocation:a.dataset.sourceLocation,isDynamicContent:a.dataset.dynamicContent==="true",linenumber:a.dataset.linenumber,filename:a.dataset.filename,position:r,isTextElement:w};window.parent.postMessage(V,"*")},x=()=>{c.forEach(n=>{n&&n.parentNode&&n.remove()}),c=[],l=null},H=(n,e)=>{let t=p(n);t.length!==0&&(T(t,e),setTimeout(()=>{l===n&&c.forEach((a,s)=>{s<t.length&&f(a,t[s])}),u.length>0&&u[0]?.dataset?.visualSelectorId===n&&E.forEach((o,i)=>{i<u.length&&f(o,u[i])})},50))},D=(n,e)=>{let t=p(n);t.length!==0&&(t.forEach(a=>{a.innerText=e}),setTimeout(()=>{l===n&&c.forEach((a,s)=>{s<t.length&&f(a,t[s])})},50))},S=n=>{d=n,n?(document.body.style.cursor="crosshair",document.addEventListener("mouseover",M),document.addEventListener("mouseout",I),document.addEventListener("click",C,!0)):(m(),c.forEach(e=>{e&&e.parentNode&&e.remove()}),c=[],u=[],l=null,document.body.style.cursor="default",document.removeEventListener("mouseover",M),document.removeEventListener("mouseout",I),document.removeEventListener("click",C,!0))},N=()=>{if(l){let n=p(l);if(n.length>0){let t=n[0].getBoundingClientRect(),a=window.innerHeight,s=window.innerWidth,o=t.top<a&&t.bottom>0&&t.left<s&&t.right>0,i={top:t.top,left:t.left,right:t.right,bottom:t.bottom,width:t.width,height:t.height,centerX:t.left+t.width/2,centerY:t.top+t.height/2};window.parent.postMessage({type:"element-position-update",position:i,isInViewport:o,visualSelectorId:l},"*")}}},k=n=>{let e=n.data;switch(e.type){case"toggle-visual-edit-mode":S(e.data.enabled);break;case"update-classes":e.data&&e.data.classes!==void 0?H(e.data.visualSelectorId,e.data.classes):console.warn("[VisualEditAgent] Invalid update-classes message:",e);break;case"unselect-element":x();break;case"refresh-page":window.location.reload();break;case"update-content":e.data&&e.data.content!==void 0?D(e.data.visualSelectorId,e.data.content):console.warn("[VisualEditAgent] Invalid update-content message:",e);break;case"request-element-position":if(l){let t=p(l);if(t.length>0){let s=t[0].getBoundingClientRect(),o=window.innerHeight,i=window.innerWidth,r=s.top<o&&s.bottom>0&&s.left<i&&s.right>0,w={top:s.top,left:s.left,right:s.right,bottom:s.bottom,width:s.width,height:s.height,centerX:s.left+s.width/2,centerY:s.top+s.height/2};window.parent.postMessage({type:"element-position-update",position:w,isInViewport:r,visualSelectorId:l},"*")}}break;case"popover-drag-state":e.data&&e.data.isDragging!==void 0&&(h=e.data.isDragging,e.data.isDragging&&m());break;case"dropdown-state":e.data&&e.data.isOpen!==void 0&&(g=e.data.isOpen,e.data.isOpen&&m());break;default:break}},b=()=>{if(l){let n=p(l);c.forEach((e,t)=>{t<n.length&&f(e,n[t])})}u.length>0&&E.forEach((n,e)=>{e<u.length&&f(n,u[e])})};document.querySelectorAll("[data-linenumber]:not([data-visual-selector-id])").forEach((n,e)=>{let t=n,a=`visual-id-${t.dataset.filename}-${t.dataset.linenumber}-${e}`;t.dataset.visualSelectorId=a});let A=new MutationObserver(n=>{n.some(t=>{let a=o=>{if(o.nodeType===Node.ELEMENT_NODE){let i=o;if(i.dataset&&i.dataset.visualSelectorId)return!0;for(let r=0;r<i.children.length;r++)if(a(i.children[r]))return!0}return!1};return t.type==="attributes"&&(t.attributeName==="style"||t.attributeName==="class"||t.attributeName==="width"||t.attributeName==="height")&&a(t.target)})&&setTimeout(b,50)});window.addEventListener("message",k),window.addEventListener("scroll",N,!0),document.addEventListener("scroll",N,!0),window.addEventListener("resize",b),window.addEventListener("scroll",b),A.observe(document.body,{attributes:!0,childList:!0,subtree:!0,attributeFilter:["style","class","width","height"]}),window.parent.postMessage({type:"visual-edit-agent-ready"},"*")}export{W as setupVisualEditAgent};
1
+ var L=["src"];function p(r){if(!r)return[];let c=Array.from(document.querySelectorAll(`[data-source-location="${r}"]`));return c.length>0?c:Array.from(document.querySelectorAll(`[data-visual-selector-id="${r}"]`))}function x(r,c){r.forEach(m=>{m.setAttribute("class",c)})}function H(r,c,m){L.includes(c)&&r.forEach(f=>{f.setAttribute(c,m)})}function S(r,c){let m={};for(let f of c){let d=r.getAttribute(f);d!==null&&(m[f]=d)}return m}function q(){let r=!1,c=!1,m=!1,f=[],d=[],h=[],l=null,A=(n=!1)=>{let e=document.createElement("div");return e.style.position="absolute",e.style.pointerEvents="none",e.style.transition="all 0.1s ease-in-out",e.style.zIndex="9999",n?e.style.border="2px solid #2563EB":(e.style.border="2px solid #95a5fc",e.style.backgroundColor="rgba(99, 102, 241, 0.05)"),e},E=(n,e,t=!1)=>{if(!e||!r)return;e.offsetWidth;let s=e.getBoundingClientRect();n.style.top=`${s.top+window.scrollY}px`,n.style.left=`${s.left+window.scrollX}px`,n.style.width=`${s.width}px`,n.style.height=`${s.height}px`;let o=n.querySelector("div");o||(o=document.createElement("div"),o.textContent=e.tagName.toLowerCase(),o.style.position="absolute",o.style.top="-27px",o.style.left="-2px",o.style.padding="2px 8px",o.style.fontSize="11px",o.style.fontWeight=t?"500":"400",o.style.color=t?"#ffffff":"#526cff",o.style.backgroundColor=t?"#526cff":"#DBEAFE",o.style.borderRadius="3px",o.style.minWidth="24px",o.style.textAlign="center",n.appendChild(o))},g=()=>{f.forEach(n=>{n&&n.parentNode&&n.remove()}),f=[],h=[]},T=n=>{if(!r||c)return;let e=n.target;if(m){g();return}if(e.tagName.toLowerCase()==="path"){g();return}let t=e.closest("[data-source-location], [data-visual-selector-id]");if(!t){g();return}let a=t,s=a.dataset.sourceLocation||a.dataset.visualSelectorId;if(l===s){g();return}let o=p(s||null);g(),o.forEach(i=>{let u=A(!1);document.body.appendChild(u),f.push(u),E(u,i)}),h=o},I=()=>{c||g()},M=n=>{if(!r)return;let e=n.target;if(m){n.preventDefault(),n.stopPropagation(),n.stopImmediatePropagation(),window.parent.postMessage({type:"close-dropdowns"},"*");return}if(e.tagName.toLowerCase()==="path")return;n.preventDefault(),n.stopPropagation(),n.stopImmediatePropagation();let t=e.closest("[data-source-location], [data-visual-selector-id]");if(!t)return;let a=t,s=a.dataset.sourceLocation||a.dataset.visualSelectorId;d.forEach(v=>{v&&v.parentNode&&v.remove()}),d=[],p(s||null).forEach(v=>{let y=A(!0);document.body.appendChild(y),d.push(y),E(y,v,!0)}),l=s||null,g();let i=t.getBoundingClientRect(),u={top:i.top,left:i.left,right:i.right,bottom:i.bottom,width:i.width,height:i.height,centerX:i.left+i.width/2,centerY:i.top+i.height/2},b=S(t,L),N=["p","h1","h2","h3","h4","h5","h6","span","a","label"].includes(t.tagName?.toLowerCase()),$=t,P={type:"element-selected",tagName:t.tagName,classes:$.className?.baseVal||t.className||"",visualSelectorId:s,content:N?t.innerText:void 0,dataSourceLocation:a.dataset.sourceLocation,isDynamicContent:a.dataset.dynamicContent==="true",linenumber:a.dataset.linenumber,filename:a.dataset.filename,position:u,attributes:b,isTextElement:N};window.parent.postMessage(P,"*")},D=()=>{d.forEach(n=>{n&&n.parentNode&&n.remove()}),d=[],l=null},k=(n,e)=>{let t=p(n);t.length!==0&&(x(t,e),setTimeout(()=>{l===n&&d.forEach((a,s)=>{s<t.length&&E(a,t[s])}),h.length>0&&h[0]?.dataset?.visualSelectorId===n&&f.forEach((o,i)=>{i<h.length&&E(o,h[i])})},50))},O=(n,e,t)=>{let a=p(n);a.length!==0&&(H(a,e,t),setTimeout(()=>{l===n&&d.forEach((s,o)=>{o<a.length&&E(s,a[o])})},50))},V=(n,e)=>{let t=p(n);t.length!==0&&(t.forEach(a=>{a.innerText=e}),setTimeout(()=>{l===n&&d.forEach((a,s)=>{s<t.length&&E(a,t[s])})},50))},R=n=>{r=n,n?(document.body.style.cursor="crosshair",document.addEventListener("mouseover",T),document.addEventListener("mouseout",I),document.addEventListener("click",M,!0)):(g(),d.forEach(e=>{e&&e.parentNode&&e.remove()}),d=[],h=[],l=null,document.body.style.cursor="default",document.removeEventListener("mouseover",T),document.removeEventListener("mouseout",I),document.removeEventListener("click",M,!0))},C=()=>{if(l){let n=p(l);if(n.length>0){let t=n[0].getBoundingClientRect(),a=window.innerHeight,s=window.innerWidth,o=t.top<a&&t.bottom>0&&t.left<s&&t.right>0,i={top:t.top,left:t.left,right:t.right,bottom:t.bottom,width:t.width,height:t.height,centerX:t.left+t.width/2,centerY:t.top+t.height/2};window.parent.postMessage({type:"element-position-update",position:i,isInViewport:o,visualSelectorId:l},"*")}}},W=n=>{let e=n.data;switch(e.type){case"toggle-visual-edit-mode":R(e.data.enabled);break;case"update-classes":e.data&&e.data.classes!==void 0?k(e.data.visualSelectorId,e.data.classes):console.warn("[VisualEditAgent] Invalid update-classes message:",e);break;case"update-attribute":e.data&&e.data.visualSelectorId&&e.data.attribute!==void 0&&e.data.value!==void 0?O(e.data.visualSelectorId,e.data.attribute,e.data.value):console.warn("[VisualEditAgent] Invalid update-attribute message:",e);break;case"unselect-element":D();break;case"refresh-page":window.location.reload();break;case"update-content":e.data&&e.data.content!==void 0?V(e.data.visualSelectorId,e.data.content):console.warn("[VisualEditAgent] Invalid update-content message:",e);break;case"request-element-position":if(l){let t=p(l);if(t.length>0){let s=t[0].getBoundingClientRect(),o=window.innerHeight,i=window.innerWidth,u=s.top<o&&s.bottom>0&&s.left<i&&s.right>0,b={top:s.top,left:s.left,right:s.right,bottom:s.bottom,width:s.width,height:s.height,centerX:s.left+s.width/2,centerY:s.top+s.height/2};window.parent.postMessage({type:"element-position-update",position:b,isInViewport:u,visualSelectorId:l},"*")}}break;case"popover-drag-state":e.data&&e.data.isDragging!==void 0&&(c=e.data.isDragging,e.data.isDragging&&g());break;case"dropdown-state":e.data&&e.data.isOpen!==void 0&&(m=e.data.isOpen,e.data.isOpen&&g());break;default:break}},w=()=>{if(l){let n=p(l);d.forEach((e,t)=>{t<n.length&&E(e,n[t])})}h.length>0&&f.forEach((n,e)=>{e<h.length&&E(n,h[e])})};document.querySelectorAll("[data-linenumber]:not([data-visual-selector-id])").forEach((n,e)=>{let t=n,a=`visual-id-${t.dataset.filename}-${t.dataset.linenumber}-${e}`;t.dataset.visualSelectorId=a});let B=new MutationObserver(n=>{n.some(t=>{let a=o=>{if(o.nodeType===Node.ELEMENT_NODE){let i=o;if(i.dataset&&i.dataset.visualSelectorId)return!0;for(let u=0;u<i.children.length;u++)if(a(i.children[u]))return!0}return!1};return t.type==="attributes"&&(t.attributeName==="style"||t.attributeName==="class"||t.attributeName==="width"||t.attributeName==="height")&&a(t.target)})&&setTimeout(w,50)});window.addEventListener("message",W),window.addEventListener("scroll",C,!0),document.addEventListener("scroll",C,!0),window.addEventListener("resize",w),window.addEventListener("scroll",w),B.observe(document.body,{attributes:!0,childList:!0,subtree:!0,attributeFilter:["style","class","width","height"]}),window.parent.postMessage({type:"visual-edit-agent-ready"},"*")}export{q as setupVisualEditAgent};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/injections/utils.ts","../../src/injections/visual-edit-agent.ts"],"sourcesContent":["/** Find elements by ID - first try data-source-location, fallback to data-visual-selector-id */\nexport function findElementsById(id: string | null): Element[] {\n if (!id) return [];\n const sourceElements = Array.from(\n document.querySelectorAll(`[data-source-location=\"${id}\"]`)\n );\n if (sourceElements.length > 0) {\n return sourceElements;\n }\n return Array.from(\n document.querySelectorAll(`[data-visual-selector-id=\"${id}\"]`)\n );\n}\n\n/**\n * Update element classes by visual selector ID.\n * Uses setAttribute instead of className to support both HTML and SVG elements.\n */\nexport function updateElementClasses(elements: Element[], classes: string): void {\n elements.forEach((element) => {\n element.setAttribute(\"class\", classes);\n }); \n}\n","import { findElementsById, updateElementClasses } from \"./utils.js\";\n\nexport function setupVisualEditAgent() {\n // State variables (replacing React useState/useRef)\n let isVisualEditMode = false;\n let isPopoverDragging = false;\n let isDropdownOpen = false;\n let hoverOverlays: HTMLDivElement[] = [];\n let selectedOverlays: HTMLDivElement[] = [];\n let currentHighlightedElements: Element[] = [];\n let selectedElementId: string | null = null;\n\n // Create overlay element\n const createOverlay = (isSelected = false): HTMLDivElement => {\n const overlay = document.createElement(\"div\");\n overlay.style.position = \"absolute\";\n overlay.style.pointerEvents = \"none\";\n overlay.style.transition = \"all 0.1s ease-in-out\";\n overlay.style.zIndex = \"9999\";\n\n if (isSelected) {\n overlay.style.border = \"2px solid #2563EB\";\n } else {\n overlay.style.border = \"2px solid #95a5fc\";\n overlay.style.backgroundColor = \"rgba(99, 102, 241, 0.05)\";\n }\n\n return overlay;\n };\n\n // Position overlay relative to element\n const positionOverlay = (\n overlay: HTMLDivElement,\n element: Element,\n isSelected = false\n ) => {\n if (!element || !isVisualEditMode) return;\n\n const htmlElement = element as HTMLElement;\n // Force layout recalculation\n void htmlElement.offsetWidth;\n\n const rect = element.getBoundingClientRect();\n overlay.style.top = `${rect.top + window.scrollY}px`;\n overlay.style.left = `${rect.left + window.scrollX}px`;\n overlay.style.width = `${rect.width}px`;\n overlay.style.height = `${rect.height}px`;\n\n // Check if label already exists in overlay\n let label = overlay.querySelector(\"div\") as HTMLDivElement | null;\n\n if (!label) {\n label = document.createElement(\"div\");\n label.textContent = element.tagName.toLowerCase();\n label.style.position = \"absolute\";\n label.style.top = \"-27px\";\n label.style.left = \"-2px\";\n label.style.padding = \"2px 8px\";\n label.style.fontSize = \"11px\";\n label.style.fontWeight = isSelected ? \"500\" : \"400\";\n label.style.color = isSelected ? \"#ffffff\" : \"#526cff\";\n label.style.backgroundColor = isSelected ? \"#526cff\" : \"#DBEAFE\";\n label.style.borderRadius = \"3px\";\n label.style.minWidth = \"24px\";\n label.style.textAlign = \"center\";\n overlay.appendChild(label);\n }\n };\n\n // Clear hover overlays\n const clearHoverOverlays = () => {\n hoverOverlays.forEach((overlay) => {\n if (overlay && overlay.parentNode) {\n overlay.remove();\n }\n });\n hoverOverlays = [];\n currentHighlightedElements = [];\n };\n\n // Handle mouse over event\n const handleMouseOver = (e: MouseEvent) => {\n if (!isVisualEditMode || isPopoverDragging) return;\n\n const target = e.target as Element;\n\n // Prevent hover effects when a dropdown is open\n if (isDropdownOpen) {\n clearHoverOverlays();\n return;\n }\n\n // Prevent hover effects on SVG path elements\n if (target.tagName.toLowerCase() === \"path\") {\n clearHoverOverlays();\n return;\n }\n\n // Support both data-source-location and data-visual-selector-id\n const element = target.closest(\n \"[data-source-location], [data-visual-selector-id]\"\n );\n if (!element) {\n clearHoverOverlays();\n return;\n }\n\n // Prefer data-source-location, fallback to data-visual-selector-id\n const htmlElement = element as HTMLElement;\n const selectorId =\n htmlElement.dataset.sourceLocation ||\n htmlElement.dataset.visualSelectorId;\n\n // Skip if this element is already selected\n if (selectedElementId === selectorId) {\n clearHoverOverlays();\n return;\n }\n\n // Find all elements with the same ID\n const elements = findElementsById(selectorId || null);\n\n // Clear previous hover overlays\n clearHoverOverlays();\n\n // Create overlays for all matching elements\n elements.forEach((el) => {\n const overlay = createOverlay(false);\n document.body.appendChild(overlay);\n hoverOverlays.push(overlay);\n positionOverlay(overlay, el);\n });\n\n currentHighlightedElements = elements;\n };\n\n // Handle mouse out event\n const handleMouseOut = () => {\n if (isPopoverDragging) return;\n clearHoverOverlays();\n };\n\n // Handle element click\n const handleElementClick = (e: MouseEvent) => {\n if (!isVisualEditMode) return;\n\n const target = e.target as Element;\n\n // Close dropdowns when clicking anywhere in iframe if a dropdown is open\n if (isDropdownOpen) {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n\n window.parent.postMessage({ type: \"close-dropdowns\" }, \"*\");\n return;\n }\n\n // Prevent clicking on SVG path elements\n if (target.tagName.toLowerCase() === \"path\") {\n return;\n }\n\n // Prevent default behavior immediately when in visual edit mode\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n\n // Support both data-source-location and data-visual-selector-id\n const element = target.closest(\n \"[data-source-location], [data-visual-selector-id]\"\n );\n if (!element) {\n return;\n }\n\n const htmlElement = element as HTMLElement;\n const visualSelectorId =\n htmlElement.dataset.sourceLocation ||\n htmlElement.dataset.visualSelectorId;\n\n // Clear any existing selected overlays\n selectedOverlays.forEach((overlay) => {\n if (overlay && overlay.parentNode) {\n overlay.remove();\n }\n });\n selectedOverlays = [];\n\n // Find all elements with the same ID\n const elements = findElementsById(visualSelectorId || null);\n\n // Create selected overlays for all matching elements\n elements.forEach((el) => {\n const overlay = createOverlay(true);\n document.body.appendChild(overlay);\n selectedOverlays.push(overlay);\n positionOverlay(overlay, el, true);\n });\n\n selectedElementId = visualSelectorId || null;\n\n // Clear hover overlays\n clearHoverOverlays();\n\n // Calculate element position for popover positioning\n const rect = element.getBoundingClientRect();\n const elementPosition = {\n top: rect.top,\n left: rect.left,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height,\n centerX: rect.left + rect.width / 2,\n centerY: rect.top + rect.height / 2,\n };\n\n const isTextElement = ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'a', 'label'].includes(element.tagName?.toLowerCase())\n\n // Send message to parent window with element info including position\n const svgElement = element as SVGElement;\n const elementData = {\n type: \"element-selected\",\n tagName: element.tagName,\n classes:\n (svgElement.className as unknown as SVGAnimatedString)?.baseVal ||\n element.className ||\n \"\",\n visualSelectorId: visualSelectorId,\n content: isTextElement ? (element as HTMLElement).innerText : undefined,\n dataSourceLocation: htmlElement.dataset.sourceLocation,\n isDynamicContent: htmlElement.dataset.dynamicContent === \"true\",\n linenumber: htmlElement.dataset.linenumber,\n filename: htmlElement.dataset.filename,\n position: elementPosition,\n isTextElement: isTextElement,\n };\n window.parent.postMessage(elementData, \"*\");\n };\n\n // Unselect the current element\n const unselectElement = () => {\n selectedOverlays.forEach((overlay) => {\n if (overlay && overlay.parentNode) {\n overlay.remove();\n }\n });\n selectedOverlays = [];\n selectedElementId = null;\n };\n\n const updateElementClassesAndReposition = (visualSelectorId: string, classes: string) => {\n const elements = findElementsById(visualSelectorId);\n if (elements.length === 0) return;\n\n updateElementClasses(elements, classes);\n\n // Use a small delay to allow the browser to recalculate layout before repositioning\n setTimeout(() => {\n // Reposition selected overlays\n if (selectedElementId === visualSelectorId) {\n selectedOverlays.forEach((overlay, index) => {\n if (index < elements.length) {\n positionOverlay(overlay, elements[index]!);\n }\n });\n }\n\n // Reposition hover overlays if needed\n if (currentHighlightedElements.length > 0) {\n const hoveredElement = currentHighlightedElements[0] as HTMLElement;\n const hoveredId = hoveredElement?.dataset?.visualSelectorId;\n if (hoveredId === visualSelectorId) {\n hoverOverlays.forEach((overlay, index) => {\n if (index < currentHighlightedElements.length) {\n positionOverlay(overlay, currentHighlightedElements[index]!);\n }\n });\n }\n }\n }, 50);\n };\n\n // Update element content by visual selector ID\n const updateElementContent = (visualSelectorId: string, content: string) => {\n const elements = findElementsById(visualSelectorId);\n\n if (elements.length === 0) {\n return;\n }\n\n elements.forEach((element) => {\n (element as HTMLElement).innerText = content;\n });\n\n setTimeout(() => {\n if (selectedElementId === visualSelectorId) {\n selectedOverlays.forEach((overlay, index) => {\n if (index < elements.length) {\n positionOverlay(overlay, elements[index]!);\n }\n });\n }\n }, 50);\n };\n\n // Toggle visual edit mode\n const toggleVisualEditMode = (isEnabled: boolean) => {\n isVisualEditMode = isEnabled;\n\n if (!isEnabled) {\n clearHoverOverlays();\n\n selectedOverlays.forEach((overlay) => {\n if (overlay && overlay.parentNode) {\n overlay.remove();\n }\n });\n selectedOverlays = [];\n\n currentHighlightedElements = [];\n selectedElementId = null;\n document.body.style.cursor = \"default\";\n\n document.removeEventListener(\"mouseover\", handleMouseOver);\n document.removeEventListener(\"mouseout\", handleMouseOut);\n document.removeEventListener(\"click\", handleElementClick, true);\n } else {\n document.body.style.cursor = \"crosshair\";\n document.addEventListener(\"mouseover\", handleMouseOver);\n document.addEventListener(\"mouseout\", handleMouseOut);\n document.addEventListener(\"click\", handleElementClick, true);\n }\n };\n\n // Handle scroll events to update popover position\n const handleScroll = () => {\n if (selectedElementId) {\n const elements = findElementsById(selectedElementId);\n if (elements.length > 0) {\n const element = elements[0];\n const rect = element!.getBoundingClientRect();\n\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n const isInViewport =\n rect.top < viewportHeight &&\n rect.bottom > 0 &&\n rect.left < viewportWidth &&\n rect.right > 0;\n\n const elementPosition = {\n top: rect.top,\n left: rect.left,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height,\n centerX: rect.left + rect.width / 2,\n centerY: rect.top + rect.height / 2,\n };\n\n window.parent.postMessage(\n {\n type: \"element-position-update\",\n position: elementPosition,\n isInViewport: isInViewport,\n visualSelectorId: selectedElementId,\n },\n \"*\"\n );\n }\n }\n };\n\n // Handle messages from parent window\n const handleMessage = (event: MessageEvent) => {\n const message = event.data;\n\n switch (message.type) {\n case \"toggle-visual-edit-mode\":\n toggleVisualEditMode(message.data.enabled);\n break;\n\n case \"update-classes\":\n if (message.data && message.data.classes !== undefined) {\n updateElementClassesAndReposition(\n message.data.visualSelectorId,\n message.data.classes\n );\n } else {\n console.warn(\n \"[VisualEditAgent] Invalid update-classes message:\",\n message\n );\n }\n break;\n\n case \"unselect-element\":\n unselectElement();\n break;\n\n case \"refresh-page\":\n window.location.reload();\n break;\n\n case \"update-content\":\n if (message.data && message.data.content !== undefined) {\n updateElementContent(\n message.data.visualSelectorId,\n message.data.content\n );\n } else {\n console.warn(\n \"[VisualEditAgent] Invalid update-content message:\",\n message\n );\n }\n break;\n\n case \"request-element-position\":\n if (selectedElementId) {\n const elements = findElementsById(selectedElementId);\n if (elements.length > 0) {\n const element = elements[0];\n const rect = element!.getBoundingClientRect();\n\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n const isInViewport =\n rect.top < viewportHeight &&\n rect.bottom > 0 &&\n rect.left < viewportWidth &&\n rect.right > 0;\n\n const elementPosition = {\n top: rect.top,\n left: rect.left,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height,\n centerX: rect.left + rect.width / 2,\n centerY: rect.top + rect.height / 2,\n };\n\n window.parent.postMessage(\n {\n type: \"element-position-update\",\n position: elementPosition,\n isInViewport: isInViewport,\n visualSelectorId: selectedElementId,\n },\n \"*\"\n );\n }\n }\n break;\n\n case \"popover-drag-state\":\n if (message.data && message.data.isDragging !== undefined) {\n isPopoverDragging = message.data.isDragging;\n if (message.data.isDragging) {\n clearHoverOverlays();\n }\n }\n break;\n\n case \"dropdown-state\":\n if (message.data && message.data.isOpen !== undefined) {\n isDropdownOpen = message.data.isOpen;\n if (message.data.isOpen) {\n clearHoverOverlays();\n }\n }\n break;\n\n default:\n break;\n }\n };\n\n // Handle window resize to reposition overlays\n const handleResize = () => {\n if (selectedElementId) {\n const elements = findElementsById(selectedElementId);\n selectedOverlays.forEach((overlay, index) => {\n if (index < elements.length) {\n positionOverlay(overlay, elements[index]!);\n }\n });\n }\n\n if (currentHighlightedElements.length > 0) {\n hoverOverlays.forEach((overlay, index) => {\n if (index < currentHighlightedElements.length) {\n positionOverlay(overlay, currentHighlightedElements[index]!);\n }\n });\n }\n };\n\n // Initialize: Add IDs to elements that don't have them but have linenumbers\n const elementsWithLineNumber = document.querySelectorAll(\n \"[data-linenumber]:not([data-visual-selector-id])\"\n );\n elementsWithLineNumber.forEach((el, index) => {\n const htmlEl = el as HTMLElement;\n const id = `visual-id-${htmlEl.dataset.filename}-${htmlEl.dataset.linenumber}-${index}`;\n htmlEl.dataset.visualSelectorId = id;\n });\n\n // Create mutation observer to detect layout changes\n const mutationObserver = new MutationObserver((mutations) => {\n const needsUpdate = mutations.some((mutation) => {\n const hasVisualId = (node: Node): boolean => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (el.dataset && el.dataset.visualSelectorId) {\n return true;\n }\n for (let i = 0; i < el.children.length; i++) {\n if (hasVisualId(el.children[i]!)) {\n return true;\n }\n }\n }\n return false;\n };\n\n const isLayoutChange =\n mutation.type === \"attributes\" &&\n (mutation.attributeName === \"style\" ||\n mutation.attributeName === \"class\" ||\n mutation.attributeName === \"width\" ||\n mutation.attributeName === \"height\");\n\n return isLayoutChange && hasVisualId(mutation.target);\n });\n\n if (needsUpdate) {\n setTimeout(handleResize, 50);\n }\n });\n\n // Set up event listeners\n window.addEventListener(\"message\", handleMessage);\n window.addEventListener(\"scroll\", handleScroll, true);\n document.addEventListener(\"scroll\", handleScroll, true);\n window.addEventListener(\"resize\", handleResize);\n window.addEventListener(\"scroll\", handleResize);\n\n // Start observing DOM mutations\n mutationObserver.observe(document.body, {\n attributes: true,\n childList: true,\n subtree: true,\n attributeFilter: [\"style\", \"class\", \"width\", \"height\"],\n });\n\n // Send ready message to parent\n window.parent.postMessage({ type: \"visual-edit-agent-ready\" }, \"*\");\n}"],"mappings":"AACO,SAASA,EAAiBC,EAA8B,CAC7D,GAAI,CAACA,EAAI,MAAO,CAAC,EACjB,IAAMC,EAAiB,MAAM,KAC3B,SAAS,iBAAiB,0BAA0BD,CAAE,IAAI,CAC5D,EACA,OAAIC,EAAe,OAAS,EACnBA,EAEF,MAAM,KACX,SAAS,iBAAiB,6BAA6BD,CAAE,IAAI,CAC/D,CACF,CAMO,SAASE,EAAqBC,EAAqBC,EAAuB,CAC/ED,EAAS,QAASE,GAAY,CAC5BA,EAAQ,aAAa,QAASD,CAAO,CACvC,CAAC,CACH,CCpBO,SAASE,GAAuB,CAErC,IAAIC,EAAmB,GACnBC,EAAoB,GACpBC,EAAiB,GACjBC,EAAkC,CAAC,EACnCC,EAAqC,CAAC,EACtCC,EAAwC,CAAC,EACzCC,EAAmC,KAGjCC,EAAgB,CAACC,EAAa,KAA0B,CAC5D,IAAMC,EAAU,SAAS,cAAc,KAAK,EAC5C,OAAAA,EAAQ,MAAM,SAAW,WACzBA,EAAQ,MAAM,cAAgB,OAC9BA,EAAQ,MAAM,WAAa,uBAC3BA,EAAQ,MAAM,OAAS,OAEnBD,EACFC,EAAQ,MAAM,OAAS,qBAEvBA,EAAQ,MAAM,OAAS,oBACvBA,EAAQ,MAAM,gBAAkB,4BAG3BA,CACT,EAGMC,EAAkB,CACtBD,EACAE,EACAH,EAAa,KACV,CACH,GAAI,CAACG,GAAW,CAACX,EAAkB,OAEfW,EAEH,YAEjB,IAAMC,EAAOD,EAAQ,sBAAsB,EAC3CF,EAAQ,MAAM,IAAM,GAAGG,EAAK,IAAM,OAAO,OAAO,KAChDH,EAAQ,MAAM,KAAO,GAAGG,EAAK,KAAO,OAAO,OAAO,KAClDH,EAAQ,MAAM,MAAQ,GAAGG,EAAK,KAAK,KACnCH,EAAQ,MAAM,OAAS,GAAGG,EAAK,MAAM,KAGrC,IAAIC,EAAQJ,EAAQ,cAAc,KAAK,EAElCI,IACHA,EAAQ,SAAS,cAAc,KAAK,EACpCA,EAAM,YAAcF,EAAQ,QAAQ,YAAY,EAChDE,EAAM,MAAM,SAAW,WACvBA,EAAM,MAAM,IAAM,QAClBA,EAAM,MAAM,KAAO,OACnBA,EAAM,MAAM,QAAU,UACtBA,EAAM,MAAM,SAAW,OACvBA,EAAM,MAAM,WAAaL,EAAa,MAAQ,MAC9CK,EAAM,MAAM,MAAQL,EAAa,UAAY,UAC7CK,EAAM,MAAM,gBAAkBL,EAAa,UAAY,UACvDK,EAAM,MAAM,aAAe,MAC3BA,EAAM,MAAM,SAAW,OACvBA,EAAM,MAAM,UAAY,SACxBJ,EAAQ,YAAYI,CAAK,EAE7B,EAGMC,EAAqB,IAAM,CAC/BX,EAAc,QAASM,GAAY,CAC7BA,GAAWA,EAAQ,YACrBA,EAAQ,OAAO,CAEnB,CAAC,EACDN,EAAgB,CAAC,EACjBE,EAA6B,CAAC,CAChC,EAGMU,EAAmBC,GAAkB,CACzC,GAAI,CAAChB,GAAoBC,EAAmB,OAE5C,IAAMgB,EAASD,EAAE,OAGjB,GAAId,EAAgB,CAClBY,EAAmB,EACnB,MACF,CAGA,GAAIG,EAAO,QAAQ,YAAY,IAAM,OAAQ,CAC3CH,EAAmB,EACnB,MACF,CAGA,IAAMH,EAAUM,EAAO,QACrB,mDACF,EACA,GAAI,CAACN,EAAS,CACZG,EAAmB,EACnB,MACF,CAGA,IAAMI,EAAcP,EACdQ,EACJD,EAAY,QAAQ,gBACpBA,EAAY,QAAQ,iBAGtB,GAAIZ,IAAsBa,EAAY,CACpCL,EAAmB,EACnB,MACF,CAGA,IAAMM,EAAWC,EAAiBF,GAAc,IAAI,EAGpDL,EAAmB,EAGnBM,EAAS,QAASE,GAAO,CACvB,IAAMb,EAAUF,EAAc,EAAK,EACnC,SAAS,KAAK,YAAYE,CAAO,EACjCN,EAAc,KAAKM,CAAO,EAC1BC,EAAgBD,EAASa,CAAE,CAC7B,CAAC,EAEDjB,EAA6Be,CAC/B,EAGMG,EAAiB,IAAM,CACvBtB,GACJa,EAAmB,CACrB,EAGMU,EAAsBR,GAAkB,CAC5C,GAAI,CAAChB,EAAkB,OAEvB,IAAMiB,EAASD,EAAE,OAGjB,GAAId,EAAgB,CAClBc,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EAClBA,EAAE,yBAAyB,EAE3B,OAAO,OAAO,YAAY,CAAE,KAAM,iBAAkB,EAAG,GAAG,EAC1D,MACF,CAGA,GAAIC,EAAO,QAAQ,YAAY,IAAM,OACnC,OAIFD,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EAClBA,EAAE,yBAAyB,EAG3B,IAAML,EAAUM,EAAO,QACrB,mDACF,EACA,GAAI,CAACN,EACH,OAGF,IAAMO,EAAcP,EACdc,EACJP,EAAY,QAAQ,gBACpBA,EAAY,QAAQ,iBAGtBd,EAAiB,QAASK,GAAY,CAChCA,GAAWA,EAAQ,YACrBA,EAAQ,OAAO,CAEnB,CAAC,EACDL,EAAmB,CAAC,EAGHiB,EAAiBI,GAAoB,IAAI,EAGjD,QAASH,GAAO,CACvB,IAAMb,EAAUF,EAAc,EAAI,EAClC,SAAS,KAAK,YAAYE,CAAO,EACjCL,EAAiB,KAAKK,CAAO,EAC7BC,EAAgBD,EAASa,EAAI,EAAI,CACnC,CAAC,EAEDhB,EAAoBmB,GAAoB,KAGxCX,EAAmB,EAGnB,IAAMF,EAAOD,EAAQ,sBAAsB,EACrCe,EAAkB,CACtB,IAAKd,EAAK,IACV,KAAMA,EAAK,KACX,MAAOA,EAAK,MACZ,OAAQA,EAAK,OACb,MAAOA,EAAK,MACZ,OAAQA,EAAK,OACb,QAASA,EAAK,KAAOA,EAAK,MAAQ,EAClC,QAASA,EAAK,IAAMA,EAAK,OAAS,CACpC,EAEMe,EAAgB,CAAC,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAAQ,IAAK,OAAO,EAAE,SAAShB,EAAQ,SAAS,YAAY,CAAC,EAGvHiB,EAAajB,EACbkB,EAAc,CAClB,KAAM,mBACN,QAASlB,EAAQ,QACjB,QACGiB,EAAW,WAA4C,SACxDjB,EAAQ,WACR,GACF,iBAAkBc,EAClB,QAASE,EAAiBhB,EAAwB,UAAY,OAC9D,mBAAoBO,EAAY,QAAQ,eACxC,iBAAkBA,EAAY,QAAQ,iBAAmB,OACzD,WAAYA,EAAY,QAAQ,WAChC,SAAUA,EAAY,QAAQ,SAC9B,SAAUQ,EACV,cAAeC,CACjB,EACA,OAAO,OAAO,YAAYE,EAAa,GAAG,CAC5C,EAGMC,EAAkB,IAAM,CAC5B1B,EAAiB,QAASK,GAAY,CAChCA,GAAWA,EAAQ,YACrBA,EAAQ,OAAO,CAEnB,CAAC,EACDL,EAAmB,CAAC,EACpBE,EAAoB,IACtB,EAEMyB,EAAoC,CAACN,EAA0BO,IAAoB,CACvF,IAAMZ,EAAWC,EAAiBI,CAAgB,EAC9CL,EAAS,SAAW,IAExBa,EAAqBb,EAAUY,CAAO,EAGtC,WAAW,IAAM,CAEX1B,IAAsBmB,GACxBrB,EAAiB,QAAQ,CAACK,EAASyB,IAAU,CACvCA,EAAQd,EAAS,QACnBV,EAAgBD,EAASW,EAASc,CAAK,CAAE,CAE7C,CAAC,EAIC7B,EAA2B,OAAS,GACfA,EAA2B,CAAC,GACjB,SAAS,mBACzBoB,GAChBtB,EAAc,QAAQ,CAACM,EAASyB,IAAU,CACpCA,EAAQ7B,EAA2B,QACrCK,EAAgBD,EAASJ,EAA2B6B,CAAK,CAAE,CAE/D,CAAC,CAGP,EAAG,EAAE,EACP,EAGMC,EAAuB,CAACV,EAA0BW,IAAoB,CAC1E,IAAMhB,EAAWC,EAAiBI,CAAgB,EAE9CL,EAAS,SAAW,IAIxBA,EAAS,QAAST,GAAY,CAC3BA,EAAwB,UAAYyB,CACvC,CAAC,EAED,WAAW,IAAM,CACX9B,IAAsBmB,GACxBrB,EAAiB,QAAQ,CAACK,EAASyB,IAAU,CACvCA,EAAQd,EAAS,QACnBV,EAAgBD,EAASW,EAASc,CAAK,CAAE,CAE7C,CAAC,CAEL,EAAG,EAAE,EACP,EAGMG,EAAwBC,GAAuB,CACnDtC,EAAmBsC,EAEdA,GAkBH,SAAS,KAAK,MAAM,OAAS,YAC7B,SAAS,iBAAiB,YAAavB,CAAe,EACtD,SAAS,iBAAiB,WAAYQ,CAAc,EACpD,SAAS,iBAAiB,QAASC,EAAoB,EAAI,IApB3DV,EAAmB,EAEnBV,EAAiB,QAASK,GAAY,CAChCA,GAAWA,EAAQ,YACrBA,EAAQ,OAAO,CAEnB,CAAC,EACDL,EAAmB,CAAC,EAEpBC,EAA6B,CAAC,EAC9BC,EAAoB,KACpB,SAAS,KAAK,MAAM,OAAS,UAE7B,SAAS,oBAAoB,YAAaS,CAAe,EACzD,SAAS,oBAAoB,WAAYQ,CAAc,EACvD,SAAS,oBAAoB,QAASC,EAAoB,EAAI,EAOlE,EAGMe,EAAe,IAAM,CACzB,GAAIjC,EAAmB,CACrB,IAAMc,EAAWC,EAAiBf,CAAiB,EACnD,GAAIc,EAAS,OAAS,EAAG,CAEvB,IAAMR,EADUQ,EAAS,CAAC,EACJ,sBAAsB,EAEtCoB,EAAiB,OAAO,YACxBC,EAAgB,OAAO,WACvBC,EACJ9B,EAAK,IAAM4B,GACX5B,EAAK,OAAS,GACdA,EAAK,KAAO6B,GACZ7B,EAAK,MAAQ,EAETc,EAAkB,CACtB,IAAKd,EAAK,IACV,KAAMA,EAAK,KACX,MAAOA,EAAK,MACZ,OAAQA,EAAK,OACb,MAAOA,EAAK,MACZ,OAAQA,EAAK,OACb,QAASA,EAAK,KAAOA,EAAK,MAAQ,EAClC,QAASA,EAAK,IAAMA,EAAK,OAAS,CACpC,EAEA,OAAO,OAAO,YACZ,CACE,KAAM,0BACN,SAAUc,EACV,aAAcgB,EACd,iBAAkBpC,CACpB,EACA,GACF,CACF,CACF,CACF,EAGMqC,EAAiBC,GAAwB,CAC7C,IAAMC,EAAUD,EAAM,KAEtB,OAAQC,EAAQ,KAAM,CACpB,IAAK,0BACHR,EAAqBQ,EAAQ,KAAK,OAAO,EACzC,MAEF,IAAK,iBACCA,EAAQ,MAAQA,EAAQ,KAAK,UAAY,OAC3Cd,EACEc,EAAQ,KAAK,iBACbA,EAAQ,KAAK,OACf,EAEA,QAAQ,KACN,oDACAA,CACF,EAEF,MAEF,IAAK,mBACHf,EAAgB,EAChB,MAEF,IAAK,eACH,OAAO,SAAS,OAAO,EACvB,MAEF,IAAK,iBACCe,EAAQ,MAAQA,EAAQ,KAAK,UAAY,OAC3CV,EACEU,EAAQ,KAAK,iBACbA,EAAQ,KAAK,OACf,EAEA,QAAQ,KACN,oDACAA,CACF,EAEF,MAEF,IAAK,2BACH,GAAIvC,EAAmB,CACrB,IAAMc,EAAWC,EAAiBf,CAAiB,EACnD,GAAIc,EAAS,OAAS,EAAG,CAEvB,IAAMR,EADUQ,EAAS,CAAC,EACJ,sBAAsB,EAEtCoB,EAAiB,OAAO,YACxBC,EAAgB,OAAO,WACvBC,EACJ9B,EAAK,IAAM4B,GACX5B,EAAK,OAAS,GACdA,EAAK,KAAO6B,GACZ7B,EAAK,MAAQ,EAETc,EAAkB,CACtB,IAAKd,EAAK,IACV,KAAMA,EAAK,KACX,MAAOA,EAAK,MACZ,OAAQA,EAAK,OACb,MAAOA,EAAK,MACZ,OAAQA,EAAK,OACb,QAASA,EAAK,KAAOA,EAAK,MAAQ,EAClC,QAASA,EAAK,IAAMA,EAAK,OAAS,CACpC,EAEA,OAAO,OAAO,YACZ,CACE,KAAM,0BACN,SAAUc,EACV,aAAcgB,EACd,iBAAkBpC,CACpB,EACA,GACF,CACF,CACF,CACA,MAEF,IAAK,qBACCuC,EAAQ,MAAQA,EAAQ,KAAK,aAAe,SAC9C5C,EAAoB4C,EAAQ,KAAK,WAC7BA,EAAQ,KAAK,YACf/B,EAAmB,GAGvB,MAEF,IAAK,iBACC+B,EAAQ,MAAQA,EAAQ,KAAK,SAAW,SAC1C3C,EAAiB2C,EAAQ,KAAK,OAC1BA,EAAQ,KAAK,QACf/B,EAAmB,GAGvB,MAEF,QACE,KACJ,CACF,EAGMgC,EAAe,IAAM,CACzB,GAAIxC,EAAmB,CACrB,IAAMc,EAAWC,EAAiBf,CAAiB,EACnDF,EAAiB,QAAQ,CAACK,EAASyB,IAAU,CACvCA,EAAQd,EAAS,QACnBV,EAAgBD,EAASW,EAASc,CAAK,CAAE,CAE7C,CAAC,CACH,CAEI7B,EAA2B,OAAS,GACtCF,EAAc,QAAQ,CAACM,EAASyB,IAAU,CACpCA,EAAQ7B,EAA2B,QACrCK,EAAgBD,EAASJ,EAA2B6B,CAAK,CAAE,CAE/D,CAAC,CAEL,EAG+B,SAAS,iBACtC,kDACF,EACuB,QAAQ,CAACZ,EAAIY,IAAU,CAC5C,IAAMa,EAASzB,EACT0B,EAAK,aAAaD,EAAO,QAAQ,QAAQ,IAAIA,EAAO,QAAQ,UAAU,IAAIb,CAAK,GACrFa,EAAO,QAAQ,iBAAmBC,CACpC,CAAC,EAGD,IAAMC,EAAmB,IAAI,iBAAkBC,GAAc,CACvCA,EAAU,KAAMC,GAAa,CAC/C,IAAMC,EAAeC,GAAwB,CAC3C,GAAIA,EAAK,WAAa,KAAK,aAAc,CACvC,IAAM/B,EAAK+B,EACX,GAAI/B,EAAG,SAAWA,EAAG,QAAQ,iBAC3B,MAAO,GAET,QAASgC,EAAI,EAAGA,EAAIhC,EAAG,SAAS,OAAQgC,IACtC,GAAIF,EAAY9B,EAAG,SAASgC,CAAC,CAAE,EAC7B,MAAO,EAGb,CACA,MAAO,EACT,EASA,OANEH,EAAS,OAAS,eACjBA,EAAS,gBAAkB,SAC1BA,EAAS,gBAAkB,SAC3BA,EAAS,gBAAkB,SAC3BA,EAAS,gBAAkB,WAENC,EAAYD,EAAS,MAAM,CACtD,CAAC,GAGC,WAAWL,EAAc,EAAE,CAE/B,CAAC,EAGD,OAAO,iBAAiB,UAAWH,CAAa,EAChD,OAAO,iBAAiB,SAAUJ,EAAc,EAAI,EACpD,SAAS,iBAAiB,SAAUA,EAAc,EAAI,EACtD,OAAO,iBAAiB,SAAUO,CAAY,EAC9C,OAAO,iBAAiB,SAAUA,CAAY,EAG9CG,EAAiB,QAAQ,SAAS,KAAM,CACtC,WAAY,GACZ,UAAW,GACX,QAAS,GACT,gBAAiB,CAAC,QAAS,QAAS,QAAS,QAAQ,CACvD,CAAC,EAGD,OAAO,OAAO,YAAY,CAAE,KAAM,yBAA0B,EAAG,GAAG,CACpE","names":["findElementsById","id","sourceElements","updateElementClasses","elements","classes","element","setupVisualEditAgent","isVisualEditMode","isPopoverDragging","isDropdownOpen","hoverOverlays","selectedOverlays","currentHighlightedElements","selectedElementId","createOverlay","isSelected","overlay","positionOverlay","element","rect","label","clearHoverOverlays","handleMouseOver","e","target","htmlElement","selectorId","elements","findElementsById","el","handleMouseOut","handleElementClick","visualSelectorId","elementPosition","isTextElement","svgElement","elementData","unselectElement","updateElementClassesAndReposition","classes","updateElementClasses","index","updateElementContent","content","toggleVisualEditMode","isEnabled","handleScroll","viewportHeight","viewportWidth","isInViewport","handleMessage","event","message","handleResize","htmlEl","id","mutationObserver","mutations","mutation","hasVisualId","node","i"]}
1
+ {"version":3,"sources":["../../src/injections/utils.ts","../../src/injections/visual-edit-agent.ts"],"sourcesContent":["export const ALLOWED_ATTRIBUTES: string[] = [\"src\"];\n\n/** Find elements by ID - first try data-source-location, fallback to data-visual-selector-id */\nexport function findElementsById(id: string | null): Element[] {\n if (!id) return [];\n const sourceElements = Array.from(\n document.querySelectorAll(`[data-source-location=\"${id}\"]`)\n );\n if (sourceElements.length > 0) {\n return sourceElements;\n }\n return Array.from(\n document.querySelectorAll(`[data-visual-selector-id=\"${id}\"]`)\n );\n}\n\n/**\n * Update element classes by visual selector ID.\n * Uses setAttribute instead of className to support both HTML and SVG elements.\n */\nexport function updateElementClasses(elements: Element[], classes: string): void {\n elements.forEach((element) => {\n element.setAttribute(\"class\", classes);\n });\n}\n\n/** Set a single attribute on all provided elements. */\nexport function updateElementAttribute(elements: Element[], attribute: string, value: string): void {\n if (!ALLOWED_ATTRIBUTES.includes(attribute)) {\n return;\n }\n\n elements.forEach((element) => {\n element.setAttribute(attribute, value);\n });\n}\n\n/** Collect attribute values from an element for a given allowlist. */\nexport function collectAllowedAttributes(element: Element, allowedAttributes: string[]): Record<string, string> {\n const attributes: Record<string, string> = {};\n for (const attr of allowedAttributes) {\n const val = element.getAttribute(attr);\n if (val !== null) {\n attributes[attr] = val;\n }\n }\n return attributes;\n}\n","import { findElementsById, updateElementClasses, updateElementAttribute, collectAllowedAttributes, ALLOWED_ATTRIBUTES } from \"./utils.js\";\n\nexport function setupVisualEditAgent() {\n // State variables (replacing React useState/useRef)\n let isVisualEditMode = false;\n let isPopoverDragging = false;\n let isDropdownOpen = false;\n let hoverOverlays: HTMLDivElement[] = [];\n let selectedOverlays: HTMLDivElement[] = [];\n let currentHighlightedElements: Element[] = [];\n let selectedElementId: string | null = null;\n\n // Create overlay element\n const createOverlay = (isSelected = false): HTMLDivElement => {\n const overlay = document.createElement(\"div\");\n overlay.style.position = \"absolute\";\n overlay.style.pointerEvents = \"none\";\n overlay.style.transition = \"all 0.1s ease-in-out\";\n overlay.style.zIndex = \"9999\";\n\n if (isSelected) {\n overlay.style.border = \"2px solid #2563EB\";\n } else {\n overlay.style.border = \"2px solid #95a5fc\";\n overlay.style.backgroundColor = \"rgba(99, 102, 241, 0.05)\";\n }\n\n return overlay;\n };\n\n // Position overlay relative to element\n const positionOverlay = (\n overlay: HTMLDivElement,\n element: Element,\n isSelected = false\n ) => {\n if (!element || !isVisualEditMode) return;\n\n const htmlElement = element as HTMLElement;\n // Force layout recalculation\n void htmlElement.offsetWidth;\n\n const rect = element.getBoundingClientRect();\n overlay.style.top = `${rect.top + window.scrollY}px`;\n overlay.style.left = `${rect.left + window.scrollX}px`;\n overlay.style.width = `${rect.width}px`;\n overlay.style.height = `${rect.height}px`;\n\n // Check if label already exists in overlay\n let label = overlay.querySelector(\"div\") as HTMLDivElement | null;\n\n if (!label) {\n label = document.createElement(\"div\");\n label.textContent = element.tagName.toLowerCase();\n label.style.position = \"absolute\";\n label.style.top = \"-27px\";\n label.style.left = \"-2px\";\n label.style.padding = \"2px 8px\";\n label.style.fontSize = \"11px\";\n label.style.fontWeight = isSelected ? \"500\" : \"400\";\n label.style.color = isSelected ? \"#ffffff\" : \"#526cff\";\n label.style.backgroundColor = isSelected ? \"#526cff\" : \"#DBEAFE\";\n label.style.borderRadius = \"3px\";\n label.style.minWidth = \"24px\";\n label.style.textAlign = \"center\";\n overlay.appendChild(label);\n }\n };\n\n // Clear hover overlays\n const clearHoverOverlays = () => {\n hoverOverlays.forEach((overlay) => {\n if (overlay && overlay.parentNode) {\n overlay.remove();\n }\n });\n hoverOverlays = [];\n currentHighlightedElements = [];\n };\n\n // Handle mouse over event\n const handleMouseOver = (e: MouseEvent) => {\n if (!isVisualEditMode || isPopoverDragging) return;\n\n const target = e.target as Element;\n\n // Prevent hover effects when a dropdown is open\n if (isDropdownOpen) {\n clearHoverOverlays();\n return;\n }\n\n // Prevent hover effects on SVG path elements\n if (target.tagName.toLowerCase() === \"path\") {\n clearHoverOverlays();\n return;\n }\n\n // Support both data-source-location and data-visual-selector-id\n const element = target.closest(\n \"[data-source-location], [data-visual-selector-id]\"\n );\n if (!element) {\n clearHoverOverlays();\n return;\n }\n\n // Prefer data-source-location, fallback to data-visual-selector-id\n const htmlElement = element as HTMLElement;\n const selectorId =\n htmlElement.dataset.sourceLocation ||\n htmlElement.dataset.visualSelectorId;\n\n // Skip if this element is already selected\n if (selectedElementId === selectorId) {\n clearHoverOverlays();\n return;\n }\n\n // Find all elements with the same ID\n const elements = findElementsById(selectorId || null);\n\n // Clear previous hover overlays\n clearHoverOverlays();\n\n // Create overlays for all matching elements\n elements.forEach((el) => {\n const overlay = createOverlay(false);\n document.body.appendChild(overlay);\n hoverOverlays.push(overlay);\n positionOverlay(overlay, el);\n });\n\n currentHighlightedElements = elements;\n };\n\n // Handle mouse out event\n const handleMouseOut = () => {\n if (isPopoverDragging) return;\n clearHoverOverlays();\n };\n\n // Handle element click\n const handleElementClick = (e: MouseEvent) => {\n if (!isVisualEditMode) return;\n\n const target = e.target as Element;\n\n // Close dropdowns when clicking anywhere in iframe if a dropdown is open\n if (isDropdownOpen) {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n\n window.parent.postMessage({ type: \"close-dropdowns\" }, \"*\");\n return;\n }\n\n // Prevent clicking on SVG path elements\n if (target.tagName.toLowerCase() === \"path\") {\n return;\n }\n\n // Prevent default behavior immediately when in visual edit mode\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n\n // Support both data-source-location and data-visual-selector-id\n const element = target.closest(\n \"[data-source-location], [data-visual-selector-id]\"\n );\n if (!element) {\n return;\n }\n\n const htmlElement = element as HTMLElement;\n const visualSelectorId =\n htmlElement.dataset.sourceLocation ||\n htmlElement.dataset.visualSelectorId;\n\n // Clear any existing selected overlays\n selectedOverlays.forEach((overlay) => {\n if (overlay && overlay.parentNode) {\n overlay.remove();\n }\n });\n selectedOverlays = [];\n\n // Find all elements with the same ID\n const elements = findElementsById(visualSelectorId || null);\n\n // Create selected overlays for all matching elements\n elements.forEach((el) => {\n const overlay = createOverlay(true);\n document.body.appendChild(overlay);\n selectedOverlays.push(overlay);\n positionOverlay(overlay, el, true);\n });\n\n selectedElementId = visualSelectorId || null;\n\n // Clear hover overlays\n clearHoverOverlays();\n\n // Calculate element position for popover positioning\n const rect = element.getBoundingClientRect();\n const elementPosition = {\n top: rect.top,\n left: rect.left,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height,\n centerX: rect.left + rect.width / 2,\n centerY: rect.top + rect.height / 2,\n };\n\n // Collect allowed element attributes\n const attributes = collectAllowedAttributes(element, ALLOWED_ATTRIBUTES);\n const isTextElement = ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'a', 'label'].includes(element.tagName?.toLowerCase());\n\n // Send message to parent window with element info including position\n const svgElement = element as SVGElement;\n const elementData = {\n type: \"element-selected\",\n tagName: element.tagName,\n classes:\n (svgElement.className as unknown as SVGAnimatedString)?.baseVal ||\n element.className ||\n \"\",\n visualSelectorId: visualSelectorId,\n content: isTextElement ? (element as HTMLElement).innerText : undefined,\n dataSourceLocation: htmlElement.dataset.sourceLocation,\n isDynamicContent: htmlElement.dataset.dynamicContent === \"true\",\n linenumber: htmlElement.dataset.linenumber,\n filename: htmlElement.dataset.filename,\n position: elementPosition,\n attributes,\n isTextElement: isTextElement,\n };\n window.parent.postMessage(elementData, \"*\");\n };\n\n // Unselect the current element\n const unselectElement = () => {\n selectedOverlays.forEach((overlay) => {\n if (overlay && overlay.parentNode) {\n overlay.remove();\n }\n });\n selectedOverlays = [];\n selectedElementId = null;\n };\n\n const updateElementClassesAndReposition = (visualSelectorId: string, classes: string) => {\n const elements = findElementsById(visualSelectorId);\n if (elements.length === 0) return;\n\n updateElementClasses(elements, classes);\n\n // Use a small delay to allow the browser to recalculate layout before repositioning\n setTimeout(() => {\n // Reposition selected overlays\n if (selectedElementId === visualSelectorId) {\n selectedOverlays.forEach((overlay, index) => {\n if (index < elements.length) {\n positionOverlay(overlay, elements[index]!);\n }\n });\n }\n\n // Reposition hover overlays if needed\n if (currentHighlightedElements.length > 0) {\n const hoveredElement = currentHighlightedElements[0] as HTMLElement;\n const hoveredId = hoveredElement?.dataset?.visualSelectorId;\n if (hoveredId === visualSelectorId) {\n hoverOverlays.forEach((overlay, index) => {\n if (index < currentHighlightedElements.length) {\n positionOverlay(overlay, currentHighlightedElements[index]!);\n }\n });\n }\n }\n }, 50);\n };\n\n // Update element attribute by visual selector ID\n const updateElementAttributeAndReposition = (\n visualSelectorId: string,\n attribute: string,\n value: string\n ) => {\n const elements = findElementsById(visualSelectorId);\n if (elements.length === 0) return;\n\n updateElementAttribute(elements, attribute, value);\n\n // Reposition overlays after attribute change (e.g. image src swap can affect layout)\n setTimeout(() => {\n if (selectedElementId === visualSelectorId) {\n selectedOverlays.forEach((overlay, index) => {\n if (index < elements.length) {\n positionOverlay(overlay, elements[index]!);\n }\n });\n }\n }, 50);\n };\n\n // Update element content by visual selector ID\n const updateElementContent = (visualSelectorId: string, content: string) => {\n const elements = findElementsById(visualSelectorId);\n\n if (elements.length === 0) {\n return;\n }\n\n elements.forEach((element) => {\n (element as HTMLElement).innerText = content;\n });\n\n setTimeout(() => {\n if (selectedElementId === visualSelectorId) {\n selectedOverlays.forEach((overlay, index) => {\n if (index < elements.length) {\n positionOverlay(overlay, elements[index]!);\n }\n });\n }\n }, 50);\n };\n\n // Toggle visual edit mode\n const toggleVisualEditMode = (isEnabled: boolean) => {\n isVisualEditMode = isEnabled;\n\n if (!isEnabled) {\n clearHoverOverlays();\n\n selectedOverlays.forEach((overlay) => {\n if (overlay && overlay.parentNode) {\n overlay.remove();\n }\n });\n selectedOverlays = [];\n\n currentHighlightedElements = [];\n selectedElementId = null;\n document.body.style.cursor = \"default\";\n\n document.removeEventListener(\"mouseover\", handleMouseOver);\n document.removeEventListener(\"mouseout\", handleMouseOut);\n document.removeEventListener(\"click\", handleElementClick, true);\n } else {\n document.body.style.cursor = \"crosshair\";\n document.addEventListener(\"mouseover\", handleMouseOver);\n document.addEventListener(\"mouseout\", handleMouseOut);\n document.addEventListener(\"click\", handleElementClick, true);\n }\n };\n\n // Handle scroll events to update popover position\n const handleScroll = () => {\n if (selectedElementId) {\n const elements = findElementsById(selectedElementId);\n if (elements.length > 0) {\n const element = elements[0];\n const rect = element!.getBoundingClientRect();\n\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n const isInViewport =\n rect.top < viewportHeight &&\n rect.bottom > 0 &&\n rect.left < viewportWidth &&\n rect.right > 0;\n\n const elementPosition = {\n top: rect.top,\n left: rect.left,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height,\n centerX: rect.left + rect.width / 2,\n centerY: rect.top + rect.height / 2,\n };\n\n window.parent.postMessage(\n {\n type: \"element-position-update\",\n position: elementPosition,\n isInViewport: isInViewport,\n visualSelectorId: selectedElementId,\n },\n \"*\"\n );\n }\n }\n };\n\n // Handle messages from parent window\n const handleMessage = (event: MessageEvent) => {\n const message = event.data;\n\n switch (message.type) {\n case \"toggle-visual-edit-mode\":\n toggleVisualEditMode(message.data.enabled);\n break;\n\n case \"update-classes\":\n if (message.data && message.data.classes !== undefined) {\n updateElementClassesAndReposition(\n message.data.visualSelectorId,\n message.data.classes\n );\n } else {\n console.warn(\n \"[VisualEditAgent] Invalid update-classes message:\",\n message\n );\n }\n break;\n\n case \"update-attribute\":\n if (\n message.data &&\n message.data.visualSelectorId &&\n message.data.attribute !== undefined &&\n message.data.value !== undefined\n ) {\n updateElementAttributeAndReposition(\n message.data.visualSelectorId,\n message.data.attribute,\n message.data.value\n );\n } else {\n console.warn(\n \"[VisualEditAgent] Invalid update-attribute message:\",\n message\n );\n }\n break;\n\n case \"unselect-element\":\n unselectElement();\n break;\n\n case \"refresh-page\":\n window.location.reload();\n break;\n\n case \"update-content\":\n if (message.data && message.data.content !== undefined) {\n updateElementContent(\n message.data.visualSelectorId,\n message.data.content\n );\n } else {\n console.warn(\n \"[VisualEditAgent] Invalid update-content message:\",\n message\n );\n }\n break;\n\n case \"request-element-position\":\n if (selectedElementId) {\n const elements = findElementsById(selectedElementId);\n if (elements.length > 0) {\n const element = elements[0];\n const rect = element!.getBoundingClientRect();\n\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n const isInViewport =\n rect.top < viewportHeight &&\n rect.bottom > 0 &&\n rect.left < viewportWidth &&\n rect.right > 0;\n\n const elementPosition = {\n top: rect.top,\n left: rect.left,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height,\n centerX: rect.left + rect.width / 2,\n centerY: rect.top + rect.height / 2,\n };\n\n window.parent.postMessage(\n {\n type: \"element-position-update\",\n position: elementPosition,\n isInViewport: isInViewport,\n visualSelectorId: selectedElementId,\n },\n \"*\"\n );\n }\n }\n break;\n\n case \"popover-drag-state\":\n if (message.data && message.data.isDragging !== undefined) {\n isPopoverDragging = message.data.isDragging;\n if (message.data.isDragging) {\n clearHoverOverlays();\n }\n }\n break;\n\n case \"dropdown-state\":\n if (message.data && message.data.isOpen !== undefined) {\n isDropdownOpen = message.data.isOpen;\n if (message.data.isOpen) {\n clearHoverOverlays();\n }\n }\n break;\n\n default:\n break;\n }\n };\n\n // Handle window resize to reposition overlays\n const handleResize = () => {\n if (selectedElementId) {\n const elements = findElementsById(selectedElementId);\n selectedOverlays.forEach((overlay, index) => {\n if (index < elements.length) {\n positionOverlay(overlay, elements[index]!);\n }\n });\n }\n\n if (currentHighlightedElements.length > 0) {\n hoverOverlays.forEach((overlay, index) => {\n if (index < currentHighlightedElements.length) {\n positionOverlay(overlay, currentHighlightedElements[index]!);\n }\n });\n }\n };\n\n // Initialize: Add IDs to elements that don't have them but have linenumbers\n const elementsWithLineNumber = document.querySelectorAll(\n \"[data-linenumber]:not([data-visual-selector-id])\"\n );\n elementsWithLineNumber.forEach((el, index) => {\n const htmlEl = el as HTMLElement;\n const id = `visual-id-${htmlEl.dataset.filename}-${htmlEl.dataset.linenumber}-${index}`;\n htmlEl.dataset.visualSelectorId = id;\n });\n\n // Create mutation observer to detect layout changes\n const mutationObserver = new MutationObserver((mutations) => {\n const needsUpdate = mutations.some((mutation) => {\n const hasVisualId = (node: Node): boolean => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (el.dataset && el.dataset.visualSelectorId) {\n return true;\n }\n for (let i = 0; i < el.children.length; i++) {\n if (hasVisualId(el.children[i]!)) {\n return true;\n }\n }\n }\n return false;\n };\n\n const isLayoutChange =\n mutation.type === \"attributes\" &&\n (mutation.attributeName === \"style\" ||\n mutation.attributeName === \"class\" ||\n mutation.attributeName === \"width\" ||\n mutation.attributeName === \"height\");\n\n return isLayoutChange && hasVisualId(mutation.target);\n });\n\n if (needsUpdate) {\n setTimeout(handleResize, 50);\n }\n });\n\n // Set up event listeners\n window.addEventListener(\"message\", handleMessage);\n window.addEventListener(\"scroll\", handleScroll, true);\n document.addEventListener(\"scroll\", handleScroll, true);\n window.addEventListener(\"resize\", handleResize);\n window.addEventListener(\"scroll\", handleResize);\n\n // Start observing DOM mutations\n mutationObserver.observe(document.body, {\n attributes: true,\n childList: true,\n subtree: true,\n attributeFilter: [\"style\", \"class\", \"width\", \"height\"],\n });\n\n // Send ready message to parent\n window.parent.postMessage({ type: \"visual-edit-agent-ready\" }, \"*\");\n}"],"mappings":"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","names":["ALLOWED_ATTRIBUTES","findElementsById","id","sourceElements","updateElementClasses","elements","classes","element","updateElementAttribute","attribute","value","collectAllowedAttributes","allowedAttributes","attributes","attr","val","setupVisualEditAgent","isVisualEditMode","isPopoverDragging","isDropdownOpen","hoverOverlays","selectedOverlays","currentHighlightedElements","selectedElementId","createOverlay","isSelected","overlay","positionOverlay","element","rect","label","clearHoverOverlays","handleMouseOver","e","target","htmlElement","selectorId","elements","findElementsById","el","handleMouseOut","handleElementClick","visualSelectorId","elementPosition","attributes","collectAllowedAttributes","ALLOWED_ATTRIBUTES","isTextElement","svgElement","elementData","unselectElement","updateElementClassesAndReposition","classes","updateElementClasses","index","updateElementAttributeAndReposition","attribute","value","updateElementAttribute","updateElementContent","content","toggleVisualEditMode","isEnabled","handleScroll","viewportHeight","viewportWidth","isInViewport","handleMessage","event","message","handleResize","htmlEl","id","mutationObserver","mutations","mutation","hasVisualId","node","i"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@base44/vite-plugin",
3
- "version": "0.2.24",
3
+ "version": "0.2.25",
4
4
  "description": "The Vite plugin for base44 based applications",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,3 +1,5 @@
1
+ export const ALLOWED_ATTRIBUTES: string[] = ["src"];
2
+
1
3
  /** Find elements by ID - first try data-source-location, fallback to data-visual-selector-id */
2
4
  export function findElementsById(id: string | null): Element[] {
3
5
  if (!id) return [];
@@ -19,5 +21,28 @@ export function findElementsById(id: string | null): Element[] {
19
21
  export function updateElementClasses(elements: Element[], classes: string): void {
20
22
  elements.forEach((element) => {
21
23
  element.setAttribute("class", classes);
22
- });
24
+ });
25
+ }
26
+
27
+ /** Set a single attribute on all provided elements. */
28
+ export function updateElementAttribute(elements: Element[], attribute: string, value: string): void {
29
+ if (!ALLOWED_ATTRIBUTES.includes(attribute)) {
30
+ return;
31
+ }
32
+
33
+ elements.forEach((element) => {
34
+ element.setAttribute(attribute, value);
35
+ });
36
+ }
37
+
38
+ /** Collect attribute values from an element for a given allowlist. */
39
+ export function collectAllowedAttributes(element: Element, allowedAttributes: string[]): Record<string, string> {
40
+ const attributes: Record<string, string> = {};
41
+ for (const attr of allowedAttributes) {
42
+ const val = element.getAttribute(attr);
43
+ if (val !== null) {
44
+ attributes[attr] = val;
45
+ }
46
+ }
47
+ return attributes;
23
48
  }
@@ -1,4 +1,4 @@
1
- import { findElementsById, updateElementClasses } from "./utils.js";
1
+ import { findElementsById, updateElementClasses, updateElementAttribute, collectAllowedAttributes, ALLOWED_ATTRIBUTES } from "./utils.js";
2
2
 
3
3
  export function setupVisualEditAgent() {
4
4
  // State variables (replacing React useState/useRef)
@@ -216,7 +216,9 @@ export function setupVisualEditAgent() {
216
216
  centerY: rect.top + rect.height / 2,
217
217
  };
218
218
 
219
- const isTextElement = ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'a', 'label'].includes(element.tagName?.toLowerCase())
219
+ // Collect allowed element attributes
220
+ const attributes = collectAllowedAttributes(element, ALLOWED_ATTRIBUTES);
221
+ const isTextElement = ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'a', 'label'].includes(element.tagName?.toLowerCase());
220
222
 
221
223
  // Send message to parent window with element info including position
222
224
  const svgElement = element as SVGElement;
@@ -234,6 +236,7 @@ export function setupVisualEditAgent() {
234
236
  linenumber: htmlElement.dataset.linenumber,
235
237
  filename: htmlElement.dataset.filename,
236
238
  position: elementPosition,
239
+ attributes,
237
240
  isTextElement: isTextElement,
238
241
  };
239
242
  window.parent.postMessage(elementData, "*");
@@ -282,6 +285,29 @@ export function setupVisualEditAgent() {
282
285
  }, 50);
283
286
  };
284
287
 
288
+ // Update element attribute by visual selector ID
289
+ const updateElementAttributeAndReposition = (
290
+ visualSelectorId: string,
291
+ attribute: string,
292
+ value: string
293
+ ) => {
294
+ const elements = findElementsById(visualSelectorId);
295
+ if (elements.length === 0) return;
296
+
297
+ updateElementAttribute(elements, attribute, value);
298
+
299
+ // Reposition overlays after attribute change (e.g. image src swap can affect layout)
300
+ setTimeout(() => {
301
+ if (selectedElementId === visualSelectorId) {
302
+ selectedOverlays.forEach((overlay, index) => {
303
+ if (index < elements.length) {
304
+ positionOverlay(overlay, elements[index]!);
305
+ }
306
+ });
307
+ }
308
+ }, 50);
309
+ };
310
+
285
311
  // Update element content by visual selector ID
286
312
  const updateElementContent = (visualSelectorId: string, content: string) => {
287
313
  const elements = findElementsById(visualSelectorId);
@@ -397,6 +423,26 @@ export function setupVisualEditAgent() {
397
423
  }
398
424
  break;
399
425
 
426
+ case "update-attribute":
427
+ if (
428
+ message.data &&
429
+ message.data.visualSelectorId &&
430
+ message.data.attribute !== undefined &&
431
+ message.data.value !== undefined
432
+ ) {
433
+ updateElementAttributeAndReposition(
434
+ message.data.visualSelectorId,
435
+ message.data.attribute,
436
+ message.data.value
437
+ );
438
+ } else {
439
+ console.warn(
440
+ "[VisualEditAgent] Invalid update-attribute message:",
441
+ message
442
+ );
443
+ }
444
+ break;
445
+
400
446
  case "unselect-element":
401
447
  unselectElement();
402
448
  break;