@superblocksteam/library 2.0.59-next.0 → 2.0.59-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/lib/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import { A as useSuperblocksUser, C as generateId, D as useSuperblocksContext, E as SuperblocksContextProvider, F as iframeMessageHandler, I as isEmbeddedBySuperblocksFirstParty, L as isEditMode, M as colors$1, N as editorBridge, O as useSuperblocksGroups, P as getEditStore, S as startEditorSync, T as resolveById, _ as createManagedPropsList, a as ActionsContainer, b as Section, c as ErrorDetails, d as ErrorStack, f as ErrorSummary, g as root_store_default, h as StyledClarkIcon, i as ai_stars_default, j as sendNotification, k as useSuperblocksProfiles, l as ErrorIconContainer, m as SecondaryButton, n as getWidgetRectAnchorName, o as ErrorContainer, p as ErrorTitle, r as FixWithClarkButton, s as ErrorContent, t as getWidgetAnchorName, u as ErrorMessage, v as Prop, w as rejectById, x as createPropertiesPanelDefinition, y as PropsCategory } from "../widget-wrapper-naming-DxFT8zmk.js";
2
- import "../utils-AzBGeVXo.js";
3
- import { t as early_console_buffer_default } from "../early-console-buffer-SSPd-jq2.js";
1
+ import { A as SuperblocksContextProvider, B as iframeMessageHandler, C as startEditorSync, E as getContextFromTraceHeaders, F as useSuperblocksUser, H as isEditMode, I as sendNotification, L as colors$1, M as useSuperblocksContext, N as useSuperblocksGroups, O as rejectById, P as useSuperblocksProfiles, R as editorBridge, S as createPropertiesPanelDefinition, T as createIframeSpan, V as isEmbeddedBySuperblocksFirstParty, _ as root_store_default, a as FixWithClarkButton, b as PropsCategory, c as ErrorContent, d as ErrorMessage, f as ErrorStack, g as StyledClarkIcon, h as SecondaryButton, i as getWidgetRectAnchorName, j as getAppMode, k as resolveById, l as ErrorDetails, m as ErrorTitle, n as useJSXContext, o as ActionsContainer, p as ErrorSummary, r as getWidgetAnchorName, s as ErrorContainer, u as ErrorIconContainer, v as createManagedPropsList, w as generateId, x as Section, y as Prop, z as getEditStore } from "../jsx-wrapper-BaEUS0A1.js";
2
+ import { n as initTracerProviderWithOrigin } from "../utils-AzBGeVXo.js";
3
+ import { n as consoleLogAttributes, t as early_console_buffer_default } from "../early-console-buffer-oUqxIuRK.js";
4
4
  import { Dim, NATIVE_COMPONENT_TYPES, NO_SELECT_ATTRIBUTE, Property, Property as Property$1, SELECTOR_ID_ATTRIBUTE, SOURCE_ID_ATTRIBUTE, generateSourceId, getBindingIdentifier } from "@superblocksteam/library-shared";
5
5
  import * as React$1 from "react";
6
6
  import React, { Suspense, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
@@ -363,6 +363,7 @@ let cachedBorderPresets = null;
363
363
  const borderWidth = defaultTheme.borderWidth;
364
364
  const borderRadius = defaultTheme.borderRadius;
365
365
  const boxShadow = defaultTheme.boxShadow;
366
+ const DEFAULT_KEY = "DEFAULT";
366
367
  function isBoxShadowValue(value) {
367
368
  const trimmedValue = value.trim().toLowerCase();
368
369
  const isBoxShadow = /^(0|none|inset|outset|shadow-sm|shadow|shadow-md|shadow-lg|shadow-xl|shadow-2xl|shadow-inner|shadow-none)$/.test(trimmedValue);
@@ -402,24 +403,23 @@ function getBorderPresets() {
402
403
  for (const [prop, value] of Object.entries(cssVariables.dark)) addCssSize(prop, value);
403
404
  const borderWidthPresets = [...sizePresets];
404
405
  const borderRadiusPresets = [...sizePresets];
405
- for (const [key, value] of Object.entries(borderWidth)) if (typeof value === "string") borderWidthPresets.push({
406
- label: formatLabel(key),
407
- value: key,
408
- rawValue: convertRemToPixels(value),
409
- type: "tailwind"
410
- });
411
- for (const [key, value] of Object.entries(borderRadius)) if (typeof value === "string") borderRadiusPresets.push({
412
- label: formatLabel(key),
413
- value: key,
414
- rawValue: convertRemToPixels(value),
415
- type: "tailwind"
416
- });
417
- for (const [key, value] of Object.entries(boxShadow)) if (typeof value === "string") boxShadowPresets.push({
418
- label: formatLabel(key),
419
- value: key,
420
- rawValue: value,
421
- type: "tailwind"
422
- });
406
+ function addTailwindProperty(presets, key, value, valueConverter) {
407
+ if (key === DEFAULT_KEY && typeof value === "string") presets.push({
408
+ label: "default",
409
+ value: "",
410
+ rawValue: valueConverter ? valueConverter(value) : convertRemToPixels(value),
411
+ type: "tailwind"
412
+ });
413
+ else if (typeof value === "string") presets.push({
414
+ label: formatLabel(key),
415
+ value: key,
416
+ rawValue: valueConverter ? valueConverter(value) : convertRemToPixels(value),
417
+ type: "tailwind"
418
+ });
419
+ }
420
+ for (const [key, value] of Object.entries(borderWidth)) addTailwindProperty(borderWidthPresets, key, value, convertRemToPixels);
421
+ for (const [key, value] of Object.entries(borderRadius)) addTailwindProperty(borderRadiusPresets, key, value, convertRemToPixels);
422
+ for (const [key, value] of Object.entries(boxShadow)) addTailwindProperty(boxShadowPresets, key, value);
423
423
  const seen = /* @__PURE__ */ new Set();
424
424
  const uniqueBorderWidthPresets = borderWidthPresets.filter((preset) => {
425
425
  if (seen.has(preset.value)) return false;
@@ -825,14 +825,17 @@ const getApiPath = (name) => {
825
825
  return apiPath;
826
826
  };
827
827
  function useApiStateful(name) {
828
+ const { sourceId } = useJSXContext();
828
829
  return {
829
830
  run: useCallback(async (inputs) => {
830
831
  const apiPath = getApiPath(name);
832
+ const editMode = isEditMode();
831
833
  return (await root_store_default.apis.runApiByPath({
832
834
  path: apiPath,
833
- inputs: inputs ?? {}
835
+ inputs: inputs ?? {},
836
+ ...editMode ? { injectedCallerId: sourceId } : {}
834
837
  })).data;
835
- }, [name]),
838
+ }, [name, sourceId]),
836
839
  cancel: useCallback(async () => {
837
840
  await root_store_default.apis.cancelApi(name);
838
841
  }, [name])
@@ -1345,13 +1348,16 @@ var OperationAPI = class {
1345
1348
  /**
1346
1349
  * @throws {Error} if the websocket connection can't be initiated after 3 attempts
1347
1350
  */
1348
- async connect({ peerId, userId, authorization, applicationId }) {
1351
+ async connect({ peerId, userId, authorization, applicationId, traceContext, connectionType, connectionTarget }) {
1349
1352
  try {
1350
1353
  const socket = await connectSocket(this.serverUrl, {
1351
1354
  peerId,
1352
1355
  userId,
1353
1356
  authorization,
1354
1357
  applicationId,
1358
+ traceContext,
1359
+ connectionType,
1360
+ connectionTarget,
1355
1361
  onClose: this.handleSocketClose({
1356
1362
  peerId,
1357
1363
  userId,
@@ -1440,13 +1446,29 @@ function startSocketHeartbeat(socket) {
1440
1446
  clearTimeout(timeoutId);
1441
1447
  };
1442
1448
  }
1443
- async function connectSocket(serverUrl, { peerId, userId, applicationId, authorization, onClose }) {
1449
+ async function connectSocket(serverUrl, { peerId, userId, applicationId, authorization, onClose, traceContext, connectionType, connectionTarget }) {
1444
1450
  if (!serverUrl) return;
1445
1451
  const wsUrl = new URL("/sb-updates", serverUrl);
1446
1452
  wsUrl.searchParams.set("peerId", peerId);
1447
1453
  if (userId) wsUrl.searchParams.set("userId", userId);
1448
1454
  wsUrl.searchParams.set("applicationId", applicationId);
1449
1455
  root_store_default.editStore?.connectionManager.initializeSocket();
1456
+ let parentContext;
1457
+ if (traceContext) parentContext = getContextFromTraceHeaders(traceContext);
1458
+ const appWebsocketSpan = createIframeSpan("devServerAppWebSocketConnection", {
1459
+ url: wsUrl.toString(),
1460
+ connection_source: "app",
1461
+ connection_type: connectionType || "initial",
1462
+ connection_target: connectionTarget || "default",
1463
+ application_id: applicationId
1464
+ }, parentContext);
1465
+ const wsStartTime = Date.now();
1466
+ console.log("Dev server connection app websocket starting", consoleLogAttributes({
1467
+ url: wsUrl.toString(),
1468
+ connectionSource: "app",
1469
+ connectionType: connectionType || "initial",
1470
+ connectionTarget: connectionTarget || "default"
1471
+ }));
1450
1472
  try {
1451
1473
  let stopSocketHeartbeat;
1452
1474
  const socket = createISocketClient(new ISocketWithClientAuth(await connectWebSocket(wsUrl.toString()), authorization, {
@@ -1485,7 +1507,11 @@ async function connectSocket(serverUrl, { peerId, userId, applicationId, authori
1485
1507
  stopSocketHeartbeat?.();
1486
1508
  stopSocketHeartbeat = void 0;
1487
1509
  onClose(event);
1488
- console.log("App<>Dev box Socket closed");
1510
+ console.log("Dev server connection app websocket closed", consoleLogAttributes({
1511
+ connectionSource: "app",
1512
+ connectionType: connectionType || "initial",
1513
+ connectionTarget: connectionTarget || "default"
1514
+ }));
1489
1515
  root_store_default.editStore?.connectionManager.disconnect();
1490
1516
  },
1491
1517
  timeouts: {
@@ -1493,12 +1519,47 @@ async function connectSocket(serverUrl, { peerId, userId, applicationId, authori
1493
1519
  noResponseTimeoutInSeconds: 60
1494
1520
  }
1495
1521
  }));
1496
- console.log("connected to socket");
1522
+ const wsDuration = Date.now() - wsStartTime;
1523
+ console.log("Dev server connection app websocket succeeded", consoleLogAttributes({
1524
+ connectionSource: "app",
1525
+ connectionType: connectionType || "initial",
1526
+ connectionTarget: connectionTarget || "default",
1527
+ durationMs: wsDuration
1528
+ }));
1529
+ window.parent.postMessage({
1530
+ type: "app-websocket-connected",
1531
+ payload: {
1532
+ success: true,
1533
+ durationMs: wsDuration
1534
+ }
1535
+ }, "*");
1536
+ appWebsocketSpan.end();
1497
1537
  stopSocketHeartbeat = startSocketHeartbeat(socket);
1498
1538
  root_store_default.editStore?.connectionManager.connect();
1499
1539
  return socket;
1500
1540
  } catch (error) {
1501
- console.error("Error connecting to socket", error);
1541
+ const wsDuration = Date.now() - wsStartTime;
1542
+ console.error("Dev server connection app websocket failed", consoleLogAttributes({
1543
+ connectionSource: "app",
1544
+ connectionType: connectionType || "initial",
1545
+ connectionTarget: connectionTarget || "default",
1546
+ durationMs: wsDuration,
1547
+ error: error instanceof Error ? error.message : String(error)
1548
+ }));
1549
+ window.parent.postMessage({
1550
+ type: "app-websocket-connected",
1551
+ payload: {
1552
+ success: false,
1553
+ durationMs: wsDuration,
1554
+ error: {
1555
+ message: error instanceof Error ? error.message : String(error),
1556
+ type: error instanceof Error ? error.constructor.name : "Unknown",
1557
+ stack: error instanceof Error ? error.stack : void 0
1558
+ }
1559
+ }
1560
+ }, "*");
1561
+ if (error instanceof Error) appWebsocketSpan.recordException(error);
1562
+ appWebsocketSpan.end();
1502
1563
  root_store_default.editStore?.connectionManager.disconnect();
1503
1564
  throw error;
1504
1565
  }
@@ -1859,10 +1920,10 @@ var RuntimeComponentNode = class {
1859
1920
  if (result) return result;
1860
1921
  }
1861
1922
  }
1862
- get nearestRegisteredAncestor() {
1863
- if (this.isSbComponent && (!this.noSelect || !this.isHtmlElement)) return this.selectorId;
1923
+ get nearestSelectableAncestor() {
1924
+ if (this.isSbComponent && !this.noSelect) return this.selectorId;
1864
1925
  const componentParent = this.store.graph.parent(this.selectorId);
1865
- if (componentParent) return this.store.jsxNodes[componentParent]?.nearestRegisteredAncestor;
1926
+ if (componentParent) return this.store.jsxNodes[componentParent]?.nearestSelectableAncestor;
1866
1927
  }
1867
1928
  get displayName() {
1868
1929
  if (this.isHtmlElement) return this.type;
@@ -1930,13 +1991,13 @@ var RuntimeTrackingStore = class {
1930
1991
  getFirstAnchorableTag(selectorId) {
1931
1992
  return this.jsxNodes[selectorId]?.firstRenderedTag;
1932
1993
  }
1933
- getNearestRegisteredAncestor(selectorId, skipSelf = false) {
1994
+ getNearestSelectableAncestor(selectorId, skipSelf = false) {
1934
1995
  if (skipSelf) {
1935
1996
  const componentParent = this.graph.parent(selectorId);
1936
- if (componentParent) return this.jsxNodes[componentParent]?.nearestRegisteredAncestor;
1997
+ if (componentParent) return this.jsxNodes[componentParent]?.nearestSelectableAncestor;
1937
1998
  return;
1938
1999
  }
1939
- return this.jsxNodes[selectorId]?.nearestRegisteredAncestor;
2000
+ return this.jsxNodes[selectorId]?.nearestSelectableAncestor;
1940
2001
  }
1941
2002
  updatePropsForComponent(selectorId, props) {
1942
2003
  const componentNode = this.jsxNodes[selectorId];
@@ -1971,9 +2032,6 @@ var RuntimeTrackingStore = class {
1971
2032
  hasRenderedNodes() {
1972
2033
  return Object.keys(this.jsxNodes).length > 0;
1973
2034
  }
1974
- get jsxNodeCount() {
1975
- return Object.keys(this.jsxNodes).length;
1976
- }
1977
2035
  };
1978
2036
  var runtime_tracking_store_default = RuntimeTrackingStore;
1979
2037
 
@@ -2360,9 +2418,6 @@ var RuntimeSubscriptionsStore = class {
2360
2418
  });
2361
2419
  return out;
2362
2420
  }
2363
- get jsxNodeCount() {
2364
- return this.editStore.runtimeTrackingStore.jsxNodeCount;
2365
- }
2366
2421
  };
2367
2422
 
2368
2423
  //#endregion
@@ -2404,10 +2459,7 @@ var EditStore = class {
2404
2459
  if (isInitialized) startEditorSync({
2405
2460
  store: this.runtimeSubscriptionsStore,
2406
2461
  storeId: "runtimeSync",
2407
- projection: (store) => ({
2408
- subscriptions: store.subscriptions,
2409
- jsxNodeCount: store.jsxNodeCount
2410
- })
2462
+ projection: (store) => store.subscriptions
2411
2463
  });
2412
2464
  }
2413
2465
  setInteractionMode(mode, notifyEditor = false) {
@@ -2530,23 +2582,23 @@ const Layers = {
2530
2582
 
2531
2583
  //#endregion
2532
2584
  //#region src/edit-mode/assets/close.svg
2533
- var _path$1;
2534
- function _extends$6() {
2535
- return _extends$6 = Object.assign ? Object.assign.bind() : function(n) {
2585
+ var _path$2;
2586
+ function _extends$7() {
2587
+ return _extends$7 = Object.assign ? Object.assign.bind() : function(n) {
2536
2588
  for (var e = 1; e < arguments.length; e++) {
2537
2589
  var t = arguments[e];
2538
2590
  for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
2539
2591
  }
2540
2592
  return n;
2541
- }, _extends$6.apply(null, arguments);
2593
+ }, _extends$7.apply(null, arguments);
2542
2594
  }
2543
2595
  var SvgClose = function SvgClose$1(props) {
2544
- return /* @__PURE__ */ React$1.createElement("svg", _extends$6({
2596
+ return /* @__PURE__ */ React$1.createElement("svg", _extends$7({
2545
2597
  xmlns: "http://www.w3.org/2000/svg",
2546
2598
  width: 16,
2547
2599
  height: 16,
2548
2600
  fill: "none"
2549
- }, props), _path$1 || (_path$1 = /* @__PURE__ */ React$1.createElement("path", {
2601
+ }, props), _path$2 || (_path$2 = /* @__PURE__ */ React$1.createElement("path", {
2550
2602
  stroke: "currentColor",
2551
2603
  strokeLinecap: "round",
2552
2604
  strokeLinejoin: "round",
@@ -2557,6 +2609,37 @@ var close_default = SvgClose;
2557
2609
 
2558
2610
  //#endregion
2559
2611
  //#region src/edit-mode/assets/pencil.svg
2612
+ var _path$1, _path2$1;
2613
+ function _extends$6() {
2614
+ return _extends$6 = Object.assign ? Object.assign.bind() : function(n) {
2615
+ for (var e = 1; e < arguments.length; e++) {
2616
+ var t = arguments[e];
2617
+ for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
2618
+ }
2619
+ return n;
2620
+ }, _extends$6.apply(null, arguments);
2621
+ }
2622
+ var SvgPencil = function SvgPencil$1(props) {
2623
+ return /* @__PURE__ */ React$1.createElement("svg", _extends$6({
2624
+ xmlns: "http://www.w3.org/2000/svg",
2625
+ width: 16,
2626
+ height: 16,
2627
+ fill: "none"
2628
+ }, props), _path$1 || (_path$1 = /* @__PURE__ */ React$1.createElement("path", {
2629
+ fill: "#fff",
2630
+ d: "m2.5 13.5 1.196-3.189a4 4 0 0 1 .917-1.424L10 3.5A2.5 2.5 0 0 0 12.5 6l-5.387 5.387a4 4 0 0 1-1.424.917z",
2631
+ opacity: .12
2632
+ })), _path2$1 || (_path2$1 = /* @__PURE__ */ React$1.createElement("path", {
2633
+ stroke: "#fff",
2634
+ strokeLinecap: "round",
2635
+ strokeLinejoin: "round",
2636
+ d: "M10 3.5 4.613 8.887a4 4 0 0 0-.917 1.424L2.5 13.5l3.189-1.196a4 4 0 0 0 1.424-.917L12.5 6M10 3.5l.75-.75a1.768 1.768 0 1 1 2.5 2.5L12.5 6M10 3.5A2.5 2.5 0 0 0 12.5 6"
2637
+ })));
2638
+ };
2639
+ var pencil_default = SvgPencil;
2640
+
2641
+ //#endregion
2642
+ //#region src/edit-mode/assets/target.svg
2560
2643
  var _path, _path2;
2561
2644
  function _extends$5() {
2562
2645
  return _extends$5 = Object.assign ? Object.assign.bind() : function(n) {
@@ -2567,7 +2650,7 @@ function _extends$5() {
2567
2650
  return n;
2568
2651
  }, _extends$5.apply(null, arguments);
2569
2652
  }
2570
- var SvgPencil = function SvgPencil$1(props) {
2653
+ var SvgTarget = function SvgTarget$1(props) {
2571
2654
  return /* @__PURE__ */ React$1.createElement("svg", _extends$5({
2572
2655
  xmlns: "http://www.w3.org/2000/svg",
2573
2656
  width: 16,
@@ -2575,16 +2658,18 @@ var SvgPencil = function SvgPencil$1(props) {
2575
2658
  fill: "none"
2576
2659
  }, props), _path || (_path = /* @__PURE__ */ React$1.createElement("path", {
2577
2660
  fill: "#fff",
2578
- d: "m2.5 13.5 1.196-3.189a4 4 0 0 1 .917-1.424L10 3.5A2.5 2.5 0 0 0 12.5 6l-5.387 5.387a4 4 0 0 1-1.424.917z",
2661
+ fillRule: "evenodd",
2662
+ d: "M14 8A6 6 0 1 1 2 8a6 6 0 0 1 12 0M8 9.263a1.263 1.263 0 1 0 0-2.526 1.263 1.263 0 0 0 0 2.526",
2663
+ clipRule: "evenodd",
2579
2664
  opacity: .12
2580
2665
  })), _path2 || (_path2 = /* @__PURE__ */ React$1.createElement("path", {
2581
2666
  stroke: "#fff",
2582
2667
  strokeLinecap: "round",
2583
2668
  strokeLinejoin: "round",
2584
- d: "M10 3.5 4.613 8.887a4 4 0 0 0-.917 1.424L2.5 13.5l3.189-1.196a4 4 0 0 0 1.424-.917L12.5 6M10 3.5l.75-.75a1.768 1.768 0 1 1 2.5 2.5L12.5 6M10 3.5A2.5 2.5 0 0 0 12.5 6"
2669
+ d: "M14 8a6 6 0 0 1-6 6m6-6a6 6 0 0 0-6-6m6 6h-2m-4 6a6 6 0 0 1-6-6m6 6v-2M2 8a6 6 0 0 1 6-6M2 8h2m4-6v2m1.263 4a1.263 1.263 0 1 1-2.526 0 1.263 1.263 0 0 1 2.526 0"
2585
2670
  })));
2586
2671
  };
2587
- var pencil_default = SvgPencil;
2672
+ var target_default = SvgTarget;
2588
2673
 
2589
2674
  //#endregion
2590
2675
  //#region src/edit-mode/interaction-utils.ts
@@ -2702,12 +2787,11 @@ function InteractionRectActions(props) {
2702
2787
  event.stopPropagation();
2703
2788
  event.preventDefault();
2704
2789
  const sourceId = getEditStore().runtimeTrackingStore.getComponent(selectorId)?.sourceId;
2705
- if (sourceId) editorBridge.addComponentToAiContext(sourceId, selectorId);
2790
+ if (sourceId) editorBridge.toggleComponentInAiContext(sourceId, selectorId, displayName);
2706
2791
  };
2707
2792
  const aiContextMode = getEditStore().ai.getAiContextMode();
2708
2793
  const isAiTaggingEnabled = getEditStore().ai.getIsTaggingEnabled();
2709
2794
  const shouldHideActions = !isPrimarySelectorId;
2710
- const shouldShowAddToChatButton = isAiTaggingEnabled && (aiContextMode === AiContextMode.SILENT || aiContextMode === AiContextMode.HIGHLIGHT && type !== "TARGETED");
2711
2795
  const shouldShowAiPurplePill = isAiTaggingEnabled && (aiContextMode === AiContextMode.AUTO_SELECT || aiContextMode === AiContextMode.HIGHLIGHT && type === "TARGETED");
2712
2796
  const renderedTagSelectorId = getEditStore().runtimeTrackingStore.getFirstAnchorableTag(selectorId);
2713
2797
  const showDesignModeToggle = getEditStore().interactionMode === "interactive";
@@ -2750,15 +2834,15 @@ function InteractionRectActions(props) {
2750
2834
  children: /* @__PURE__ */ jsx(close_default, {})
2751
2835
  })
2752
2836
  }), /* @__PURE__ */ jsx(TooltipPortal, { children: /* @__PURE__ */ jsx(TooltipContent$1, { children: "Exit design mode" }) })] }) }),
2753
- shouldShowAddToChatButton && /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsxs(Root, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
2837
+ isAiTaggingEnabled && /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsxs(Root, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
2754
2838
  asChild: true,
2755
2839
  children: /* @__PURE__ */ jsx("button", {
2756
- "aria-label": "Add to chat",
2840
+ "aria-label": type === "TARGETED" ? "Remove from chat" : "Add to chat",
2757
2841
  className: "sb-edit-add-to-chat-button",
2758
2842
  onPointerDownCapture: handleAddToChat,
2759
- children: /* @__PURE__ */ jsx(ai_stars_default, {})
2843
+ children: /* @__PURE__ */ jsx(target_default, {})
2760
2844
  })
2761
- }), /* @__PURE__ */ jsx(TooltipPortal, { children: /* @__PURE__ */ jsx(TooltipContent$1, { children: "Add to chat" }) })] }) }),
2845
+ }), /* @__PURE__ */ jsx(TooltipPortal, { children: /* @__PURE__ */ jsx(TooltipContent$1, { children: type === "TARGETED" ? "Remove from chat" : "Add to chat" }) })] }) }),
2762
2846
  /* @__PURE__ */ jsx(interaction_rect_name_pill_default, {
2763
2847
  selectorId,
2764
2848
  displayName,
@@ -2920,7 +3004,7 @@ const InteractionRectTargetBorder = ({ selectorId }) => {
2920
3004
  };
2921
3005
  const InteractionRect = (props) => {
2922
3006
  const { selectionType, selectorId } = props;
2923
- const parentSelectorId = getEditStore().runtimeTrackingStore.getNearestRegisteredAncestor(selectorId);
3007
+ const parentSelectorId = getEditStore().runtimeTrackingStore.getNearestSelectableAncestor(selectorId);
2924
3008
  const renderedParentTagSelectorId = parentSelectorId ? getEditStore().runtimeTrackingStore.getFirstAnchorableTag(parentSelectorId) : void 0;
2925
3009
  const renderedTagSelectorId = getEditStore().runtimeTrackingStore.getFirstAnchorableTag(selectorId);
2926
3010
  const aiContextMode = getEditStore().ai.getAiContextMode();
@@ -3036,6 +3120,7 @@ const IframeConnected = observer(function IframeConnected$1(props) {
3036
3120
  useEffect(() => {
3037
3121
  if (!isEmbeddedBySuperblocksFirstParty()) return;
3038
3122
  const handleInit = async ({ data }) => {
3123
+ if (data.payload.windowOriginUrl) initTracerProviderWithOrigin(data.payload.windowOriginUrl);
3039
3124
  initializeEditStore();
3040
3125
  const editStore = getEditStore();
3041
3126
  editorBridge.connected();
@@ -3056,7 +3141,10 @@ const IframeConnected = observer(function IframeConnected$1(props) {
3056
3141
  peerId: data.payload.peerId,
3057
3142
  userId: data.payload.userId,
3058
3143
  authorization: data.payload.devServerAuthorization,
3059
- applicationId: data.payload.appId
3144
+ applicationId: data.payload.appId,
3145
+ traceContext: data.payload.traceContext,
3146
+ connectionType: data.payload.connectionType,
3147
+ connectionTarget: data.payload.connectionTarget
3060
3148
  });
3061
3149
  } catch (error) {
3062
3150
  console.error("Error connecting to internal socket from library", error);
@@ -3125,9 +3213,9 @@ const EmbedWrapper = (props) => {
3125
3213
  root_store_default.apis.agentUrls = event.data.payload.agentUrls ?? (event.data.payload.agentUrl ? [event.data.payload.agentUrl] : []);
3126
3214
  root_store_default.apis.setTokens(event.data.payload.token, event.data.payload.accessToken);
3127
3215
  root_store_default.windowOriginUrl = event.data.payload.logContext.superblocks_window_origin_url;
3128
- if (root_store_default.windowOriginUrl) import("../utils-DR35eYvX.js").then(({ initTracerProviderWithOrigin }) => {
3129
- initTracerProviderWithOrigin(root_store_default.windowOriginUrl);
3130
- import("../logs-CgCPS9qr.js").then(({ initLibraryLoggerProvider }) => {
3216
+ if (root_store_default.windowOriginUrl) import("../utils-DR35eYvX.js").then(({ initTracerProviderWithOrigin: initTracerProviderWithOrigin$1 }) => {
3217
+ initTracerProviderWithOrigin$1(root_store_default.windowOriginUrl);
3218
+ import("../logs-CQnzO-hw.js").then(({ initLibraryLoggerProvider }) => {
3131
3219
  initLibraryLoggerProvider({
3132
3220
  windowOriginUrl: root_store_default.windowOriginUrl,
3133
3221
  appId: event.data.payload.appId,
@@ -3248,10 +3336,6 @@ const EmbedWrapper = (props) => {
3248
3336
  }
3249
3337
  };
3250
3338
  iframeMessageHandler.addEventListener("ai-updates", aiUpdatesListener);
3251
- const reloadAppListener = () => {
3252
- window.location.reload();
3253
- };
3254
- iframeMessageHandler.addEventListener("sb-reload-app", reloadAppListener);
3255
3339
  return () => {
3256
3340
  iframeMessageHandler.removeEventListener("sb-bootstrap-response", bootstrapResponseListener);
3257
3341
  iframeMessageHandler.removeEventListener("sb-update-active-agents", updateActiveAgentsListener);
@@ -3262,7 +3346,6 @@ const EmbedWrapper = (props) => {
3262
3346
  iframeMessageHandler.removeEventListener("sb-global-sync", globalSyncListener);
3263
3347
  iframeMessageHandler.removeEventListener("route-change", navigateToListener);
3264
3348
  iframeMessageHandler.removeEventListener("ai-updates", aiUpdatesListener);
3265
- iframeMessageHandler.removeEventListener("sb-reload-app", reloadAppListener);
3266
3349
  try {
3267
3350
  getEditStore().runtimeSubscriptionsStore.clearAll();
3268
3351
  } catch {}
@@ -3288,19 +3371,45 @@ const EmbedWrapper = (props) => {
3288
3371
  }
3289
3372
  case "RUN_API": {
3290
3373
  const { apiName, traceHeaders, callId, isTestRun, inputs } = action$1.payload;
3291
- if (isTestRun) root_store_default.apis.runApiByPath({
3292
- path: getApiPath(apiName),
3293
- inputs: {
3294
- ...traceHeaders,
3295
- ...inputs
3296
- },
3297
- isTestRun: true
3298
- }).catch((error$1) => {
3299
- console.error(`Failed to test API ${apiName}:`, error$1);
3300
- });
3301
- else if (callId) root_store_default.apis.rerunApiByCallId(callId).catch((error$1) => {
3302
- console.error(`Failed to re-run API with callId ${callId}:`, error$1);
3374
+ console.log("[iframe-wrappers] Received RUN_API:", {
3375
+ apiName,
3376
+ callId,
3377
+ isTestRun,
3378
+ hasInputs: !!inputs,
3379
+ inputs,
3380
+ traceHeaders
3303
3381
  });
3382
+ if (isTestRun) {
3383
+ console.log("[iframe-wrappers] Running as test run");
3384
+ root_store_default.apis.runApiByPath({
3385
+ path: getApiPath(apiName),
3386
+ inputs: {
3387
+ ...traceHeaders,
3388
+ ...inputs
3389
+ },
3390
+ isTestRun: true
3391
+ }).catch((error$1) => {
3392
+ console.error(`Failed to test API ${apiName}:`, error$1);
3393
+ });
3394
+ } else if (callId) {
3395
+ console.log("[iframe-wrappers] Re-running with callId:", callId);
3396
+ root_store_default.apis.rerunApiByCallId(callId).catch((error$1) => {
3397
+ console.error(`Failed to re-run API with callId ${callId}:`, error$1);
3398
+ });
3399
+ } else {
3400
+ console.log("[iframe-wrappers] This might be a Clark request - executing API normally");
3401
+ root_store_default.apis.runApiByPath({
3402
+ path: getApiPath(apiName),
3403
+ inputs: {
3404
+ ...traceHeaders,
3405
+ ...inputs
3406
+ },
3407
+ callId,
3408
+ isTestRun: false
3409
+ }).catch((error$1) => {
3410
+ console.error(`Failed to run API ${apiName}:`, error$1);
3411
+ });
3412
+ }
3304
3413
  break;
3305
3414
  }
3306
3415
  }
@@ -3442,7 +3551,7 @@ const getWidgetFromPointHelper = (params) => {
3442
3551
  const extendedWidget = widgetsWithBuffer.hoveredActual.find((item) => {
3443
3552
  let actualSelectorId = item.selectorId;
3444
3553
  if (item.noSelect) {
3445
- actualSelectorId = editStore.runtimeTrackingStore.getNearestRegisteredAncestor(item.selectorId, false);
3554
+ actualSelectorId = editStore.runtimeTrackingStore.getNearestSelectableAncestor(item.selectorId, false);
3446
3555
  if (!actualSelectorId) return false;
3447
3556
  }
3448
3557
  const componentType = editStore.runtimeTrackingStore.getComponent(actualSelectorId)?.type;
@@ -3456,7 +3565,7 @@ const getWidgetFromPointHelper = (params) => {
3456
3565
  });
3457
3566
  return getFirstItemWithFocusedSelectorPrioritized(atPointWidgets.hoveredPills) ?? atPointWidgets.hoveredActual[0];
3458
3567
  };
3459
- const shouldBubbleUpForNearestRegisteredAncestor = (selectorId) => {
3568
+ const shouldBubbleUpForNearestSelectableAncestor = (selectorId) => {
3460
3569
  const editStore = getEditStore();
3461
3570
  if (editStore.runtimeTrackingStore.getComponent(selectorId)?.noSelect) return true;
3462
3571
  const parentSelectorId = editStore.runtimeTrackingStore.getComponentParent(selectorId);
@@ -3492,8 +3601,8 @@ function getMostRelevantWidgetAtPoint(params) {
3492
3601
  const relevantParent = getRelevantParentIfItReducesRepetition(widget.selectorId);
3493
3602
  if (relevantParent) return relevantParent;
3494
3603
  }
3495
- if (shouldBubbleUpForNearestRegisteredAncestor(widget.selectorId)) {
3496
- const registeredAncestor = editStore.runtimeTrackingStore.getNearestRegisteredAncestor(widget.selectorId, false);
3604
+ if (shouldBubbleUpForNearestSelectableAncestor(widget.selectorId)) {
3605
+ const registeredAncestor = editStore.runtimeTrackingStore.getNearestSelectableAncestor(widget.selectorId, false);
3497
3606
  if (registeredAncestor) return registeredAncestor;
3498
3607
  }
3499
3608
  return widget.selectorId;
@@ -3586,16 +3695,29 @@ function useWidgetClick() {
3586
3695
  event.preventDefault();
3587
3696
  event.stopPropagation();
3588
3697
  }
3589
- if (event.altKey || editStore.ai.getIsTaggingEnabled() && editStore.ai.shouldToggleComponentInAiContext()) {
3698
+ if (event.altKey || editStore.ai.shouldToggleComponentInAiContext()) {
3590
3699
  console.log("[useWidgetClick] Toggling component in AI context");
3591
3700
  editorBridge.toggleComponentInAiContext(sourceId, selectorId, displayName);
3592
3701
  return;
3593
3702
  }
3594
3703
  editStore.ui.selectWidget(selectorId, event.shiftKey === true);
3595
3704
  };
3705
+ const isInsideInteractionLayer = (element) => {
3706
+ if (!(element instanceof Element)) return false;
3707
+ return element.closest(`[${INTERACTION_LAYER_ATTRIBUTE}="true"]`) !== null;
3708
+ };
3709
+ const handlePointerDown = (event) => {
3710
+ const isTargetMode = editStore.ai.shouldToggleComponentInAiContext();
3711
+ if ((editStore.interactionMode === "design" || isTargetMode) && !isInsideInteractionLayer(event.target)) {
3712
+ event.preventDefault();
3713
+ event.stopPropagation();
3714
+ }
3715
+ };
3596
3716
  rootElement?.addEventListener("click", handleClick, { capture: true });
3717
+ rootElement?.addEventListener("pointerdown", handlePointerDown, { capture: true });
3597
3718
  return () => {
3598
3719
  rootElement?.removeEventListener("click", handleClick, { capture: true });
3720
+ rootElement?.removeEventListener("pointerdown", handlePointerDown, { capture: true });
3599
3721
  };
3600
3722
  }, []);
3601
3723
  }
@@ -3692,7 +3814,14 @@ const ExternalInteractionLayer = observer(() => {
3692
3814
  const isEditStoreInitialized = Boolean(root_store_default.editStore?.isInitialized);
3693
3815
  const interactionLayerVisible = root_store_default.editStore?.interactionMode === "design" || root_store_default.editStore?.interactionMode === "interactive";
3694
3816
  if (!(isEditStoreInitialized && interactionLayerVisible)) return null;
3695
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(InteractionLayerManager, {}), root_store_default.editStore?.interactionMode === "design" && /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: `* { cursor: crosshair !important; }` } })] });
3817
+ const isDesignMode = root_store_default.editStore?.interactionMode === "design";
3818
+ const isTargetMode = root_store_default.editStore?.ai.shouldToggleComponentInAiContext();
3819
+ const pencilCursor = `url('data:image/svg+xml;utf8,<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path opacity="0.12" d="M2.5 13.5L3.69577 10.3113C3.89627 9.77662 4.2089 9.2911 4.61266 8.88734L10 3.5C10 4.88071 11.1193 6 12.5 6L7.11266 11.3873C6.7089 11.7911 6.22338 12.1037 5.68873 12.3042L2.5 13.5Z" fill="black"/><path d="M10 3.5L4.61266 8.88734C4.2089 9.2911 3.89627 9.77662 3.69577 10.3113L2.5 13.5L5.68873 12.3042C6.22338 12.1037 6.7089 11.7911 7.11266 11.3873L12.5 6M10 3.5L10.75 2.75C11.4404 2.05964 12.5596 2.05964 13.25 2.75C13.9404 3.44036 13.9404 4.55964 13.25 5.25L12.5 6M10 3.5C10 4.88071 11.1193 6 12.5 6" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><path d="M10 3.5L4.61266 8.88734C4.2089 9.2911 3.89627 9.77662 3.69577 10.3113L2.5 13.5L5.68873 12.3042C6.22338 12.1037 6.7089 11.7911 7.11266 11.3873L12.5 6M10 3.5L10.75 2.75C11.4404 2.05964 12.5596 2.05964 13.25 2.75C13.9404 3.44036 13.9404 4.55964 13.25 5.25L12.5 6M10 3.5C10 4.88071 11.1193 6 12.5 6" stroke="black" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>') 2 14, auto`;
3820
+ const targetCursor = `url('data:image/svg+xml;utf8,<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path opacity="0.12" fill-rule="evenodd" clip-rule="evenodd" d="M14 8C14 11.3137 11.3137 14 8 14C4.68629 14 2 11.3137 2 8C2 4.68629 4.68629 2 8 2C11.3137 2 14 4.68629 14 8ZM8 9.26316C8.69762 9.26316 9.26316 8.69762 9.26316 8C9.26316 7.30238 8.69762 6.73684 8 6.73684C7.30238 6.73684 6.73684 7.30238 6.73684 8C6.73684 8.69762 7.30238 9.26316 8 9.26316Z" fill="black"/><path d="M14 8C14 11.3137 11.3137 14 8 14M14 8C14 4.68629 11.3137 2 8 2M14 8H12M8 14C4.68629 14 2 11.3137 2 8M8 14V12M2 8C2 4.68629 4.68629 2 8 2M2 8H4M8 2V4M9.26316 8C9.26316 8.69762 8.69762 9.26316 8 9.26316C7.30238 9.26316 6.73684 8.69762 6.73684 8C6.73684 7.30238 7.30238 6.73684 8 6.73684C8.69762 6.73684 9.26316 7.30238 9.26316 8Z" stroke="white" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M14 8C14 11.3137 11.3137 14 8 14M14 8C14 4.68629 11.3137 2 8 2M14 8H12M8 14C4.68629 14 2 11.3137 2 8M8 14V12M2 8C2 4.68629 4.68629 2 8 2M2 8H4M8 2V4M9.26316 8C9.26316 8.69762 8.69762 9.26316 8 9.26316C7.30238 9.26316 6.73684 8.69762 6.73684 8C6.73684 7.30238 7.30238 6.73684 8 6.73684C8.69762 6.73684 9.26316 7.30238 9.26316 8Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/></svg>') 8 8, auto`;
3821
+ let cursorStyle = "";
3822
+ if (isTargetMode) cursorStyle = `* { cursor: ${targetCursor} !important; }`;
3823
+ else if (isDesignMode) cursorStyle = `* { cursor: ${pencilCursor} !important; }`;
3824
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(InteractionLayerManager, {}), cursorStyle && /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: cursorStyle } })] });
3696
3825
  });
3697
3826
  var interaction_layer_default = ExternalInteractionLayer;
3698
3827
 
@@ -3735,9 +3864,9 @@ const EmbedWrapper$1 = (props) => {
3735
3864
  root_store_default.apis.agentUrls = event.data.payload.agentUrls ?? (event.data.payload.agentUrl ? [event.data.payload.agentUrl] : []);
3736
3865
  root_store_default.apis.setTokens(event.data.payload.token, event.data.payload.accessToken);
3737
3866
  root_store_default.windowOriginUrl = event.data.payload.logContext.superblocks_window_origin_url;
3738
- if (root_store_default.windowOriginUrl) import("../utils-DR35eYvX.js").then(({ initTracerProviderWithOrigin }) => {
3739
- initTracerProviderWithOrigin(root_store_default.windowOriginUrl);
3740
- import("../logs-CgCPS9qr.js").then(({ initLibraryLoggerProvider }) => {
3867
+ if (root_store_default.windowOriginUrl) import("../utils-DR35eYvX.js").then(({ initTracerProviderWithOrigin: initTracerProviderWithOrigin$1 }) => {
3868
+ initTracerProviderWithOrigin$1(root_store_default.windowOriginUrl);
3869
+ import("../logs-CQnzO-hw.js").then(({ initLibraryLoggerProvider }) => {
3741
3870
  initLibraryLoggerProvider({
3742
3871
  windowOriginUrl: root_store_default.windowOriginUrl,
3743
3872
  appId: event.data.payload.appId,
@@ -5003,5 +5132,5 @@ early_console_buffer_default.getInstance().patchEarly();
5003
5132
  registerHtmlElements();
5004
5133
 
5005
5134
  //#endregion
5006
- export { App, PageNotFound, Prop, Property, PropsCategory, RouteLoadError, Section, sb_provider_default as SuperblocksProvider, registerComponent, tailwindStylesCategory, useApiStateful as useApi, useSuperblocksGroups, useSuperblocksProfiles, useSuperblocksUser };
5135
+ export { App, PageNotFound, Prop, Property, PropsCategory, RouteLoadError, Section, sb_provider_default as SuperblocksProvider, getAppMode, registerComponent, tailwindStylesCategory, useApiStateful as useApi, useSuperblocksGroups, useSuperblocksProfiles, useSuperblocksUser };
5007
5136
  //# sourceMappingURL=index.js.map