@trops/dash-core 0.1.320 → 0.1.321

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/index.js CHANGED
@@ -20436,6 +20436,58 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
20436
20436
  // eslint-disable-next-line react-hooks/exhaustive-deps
20437
20437
  }, [currentWorkspace]);
20438
20438
 
20439
+ // Ref for current workspace state (avoids stale closure in event listener)
20440
+ var wsRef = React.useRef(currentWorkspace);
20441
+ React.useEffect(function () {
20442
+ wsRef.current = currentWorkspace;
20443
+ }, [currentWorkspace]);
20444
+
20445
+ // Listen for AI widget builder placement — modifies layout state directly
20446
+ React.useEffect(function () {
20447
+ var handler = function handler(e) {
20448
+ var _ref4 = e.detail || {},
20449
+ widgetComponentName = _ref4.widgetComponentName,
20450
+ cellNumber = _ref4.cellNumber,
20451
+ gridItemId = _ref4.gridItemId;
20452
+ if (!widgetComponentName || !cellNumber || !gridItemId) return;
20453
+ var ws = wsRef.current;
20454
+ if (!(ws !== null && ws !== void 0 && ws.layout)) return;
20455
+ var gridItem = ws.layout.find(function (item) {
20456
+ return item.id === gridItemId;
20457
+ });
20458
+ if (!(gridItem !== null && gridItem !== void 0 && gridItem.grid)) return;
20459
+ var config = ComponentManager.config(widgetComponentName);
20460
+ if (!config) {
20461
+ return;
20462
+ }
20463
+ try {
20464
+ var hasChildren = config.type === "workspace";
20465
+ var newLayout = addItemToItemLayout(ws.layout, gridItem.id, _objectSpread$z(_objectSpread$z({}, config), {}, {
20466
+ component: widgetComponentName
20467
+ }), hasChildren);
20468
+ var newWidgetId = newLayout[newLayout.length - 1].id;
20469
+ var updatedGrid = newLayout.find(function (item) {
20470
+ return item.id === gridItem.id;
20471
+ });
20472
+ if (updatedGrid !== null && updatedGrid !== void 0 && updatedGrid.grid) {
20473
+ updatedGrid.grid[cellNumber] = {
20474
+ component: newWidgetId,
20475
+ hide: false
20476
+ };
20477
+ }
20478
+ var newWorkspace = JSON.parse(JSON.stringify(ws));
20479
+ newWorkspace.layout = newLayout;
20480
+ setCurrentWorkspace(newWorkspace);
20481
+ } catch (err) {
20482
+ }
20483
+ };
20484
+ window.addEventListener("dash:place-widget-in-cell", handler);
20485
+ return function () {
20486
+ return window.removeEventListener("dash:place-widget-in-cell", handler);
20487
+ };
20488
+ // eslint-disable-next-line react-hooks/exhaustive-deps
20489
+ }, []);
20490
+
20439
20491
  /**
20440
20492
  * onClickAdd
20441
20493
  * From the Widget or Container, clicked plus button to add a widget
@@ -20847,11 +20899,11 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
20847
20899
 
20848
20900
  // Grid Operation Handlers
20849
20901
 
20850
- function handleSplitCell(_ref4) {
20851
- var cellNumber = _ref4.cellNumber,
20852
- direction = _ref4.direction,
20853
- count = _ref4.count,
20854
- gridContainer = _ref4.gridContainer;
20902
+ function handleSplitCell(_ref5) {
20903
+ var cellNumber = _ref5.cellNumber,
20904
+ direction = _ref5.direction,
20905
+ count = _ref5.count,
20906
+ gridContainer = _ref5.gridContainer;
20855
20907
  try {
20856
20908
  var dashboard = new DashboardModel(currentWorkspace);
20857
20909
  var result = dashboard.splitGridCell(gridContainer.id, cellNumber, direction, count);
@@ -20863,10 +20915,10 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
20863
20915
  } catch (e) {
20864
20916
  }
20865
20917
  }
20866
- function handleMergeCells(_ref5) {
20867
- var cellNumbers = _ref5.cellNumbers,
20868
- gridContainer = _ref5.gridContainer,
20869
- keepComponent = _ref5.keepComponent;
20918
+ function handleMergeCells(_ref6) {
20919
+ var cellNumbers = _ref6.cellNumbers,
20920
+ gridContainer = _ref6.gridContainer,
20921
+ keepComponent = _ref6.keepComponent;
20870
20922
  try {
20871
20923
  var dashboard = new DashboardModel(currentWorkspace);
20872
20924
  var result = dashboard.mergeGridCells(gridContainer.id, cellNumbers);
@@ -25119,7 +25171,13 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
25119
25171
  })]
25120
25172
  }), /*#__PURE__*/jsxRuntime.jsxs("button", {
25121
25173
  onClick: function onClick() {
25122
- return window.dispatchEvent(new Event("dash:open-widget-builder"));
25174
+ return window.dispatchEvent(new CustomEvent("dash:open-widget-builder", {
25175
+ detail: {
25176
+ cellNumber: cellNumber,
25177
+ gridItemId: item.id,
25178
+ workspaceId: workspace === null || workspace === void 0 ? void 0 : workspace.id
25179
+ }
25180
+ }));
25123
25181
  },
25124
25182
  className: "flex items-center gap-1.5 px-3 py-1 rounded-md text-xs text-indigo-400/70 hover:text-indigo-300 hover:bg-indigo-900/20 transition-colors",
25125
25183
  children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {