@trops/dash-core 0.1.397 → 0.1.399

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
@@ -50,8 +50,8 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
50
50
  var jsxRuntime__namespace = /*#__PURE__*/_interopNamespaceDefault(jsxRuntime);
51
51
  var ReactDOM__namespace = /*#__PURE__*/_interopNamespaceDefault(ReactDOM);
52
52
 
53
- function ownKeys$V(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
54
- function _objectSpread$V(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$V(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$V(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
53
+ function ownKeys$W(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
54
+ function _objectSpread$W(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$W(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$W(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
55
55
  var event = {
56
56
  list: new Map(),
57
57
  // Map(1) { '<widget-UUID>' => { 'CustomSearchbar[10].searchQueryChanged': [] } }
@@ -113,7 +113,7 @@ var event = {
113
113
  uuid: subscriber["uuid"]
114
114
  };
115
115
  if ("action" in subscriber && subscriber.action !== undefined) {
116
- subscriber["action"](_objectSpread$V({}, objectToSend));
116
+ subscriber["action"](_objectSpread$W({}, objectToSend));
117
117
  }
118
118
  });
119
119
  }
@@ -2891,8 +2891,8 @@ var DashboardWrapper = function DashboardWrapper(_ref) {
2891
2891
  });
2892
2892
  };
2893
2893
 
2894
- function ownKeys$U(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2895
- function _objectSpread$U(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$U(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$U(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2894
+ function ownKeys$V(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2895
+ function _objectSpread$V(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$V(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$V(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2896
2896
  function ThemeBroadcast(_ref) {
2897
2897
  var ctx = _ref.ctx;
2898
2898
  React.useEffect(function () {
@@ -2925,7 +2925,7 @@ var DashboardThemeProvider = function DashboardThemeProvider(_ref2) {
2925
2925
  var dashboardTheme = themes[themeKey];
2926
2926
  var themeValue = dashboardTheme ? dashboardTheme[themeVariant] || null : null;
2927
2927
  if (!themeValue) return null;
2928
- return _objectSpread$U(_objectSpread$U({}, parentContext), {}, {
2928
+ return _objectSpread$V(_objectSpread$V({}, parentContext), {}, {
2929
2929
  currentTheme: themeValue,
2930
2930
  currentThemeKey: themeKey,
2931
2931
  theme: themeValue,
@@ -2952,8 +2952,8 @@ var DashboardThemeProvider = function DashboardThemeProvider(_ref2) {
2952
2952
  });
2953
2953
  };
2954
2954
 
2955
- function ownKeys$T(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2956
- function _objectSpread$T(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$T(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$T(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2955
+ function ownKeys$U(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2956
+ function _objectSpread$U(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$U(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$U(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2957
2957
  var AppThemeScope = function AppThemeScope(_ref) {
2958
2958
  var children = _ref.children;
2959
2959
  var ctx = React.useContext(DashReact.ThemeContext);
@@ -2961,7 +2961,7 @@ var AppThemeScope = function AppThemeScope(_ref) {
2961
2961
  children: children
2962
2962
  });
2963
2963
  return /*#__PURE__*/jsxRuntime.jsx(DashReact.ThemeContext.Provider, {
2964
- value: _objectSpread$T(_objectSpread$T({}, ctx), {}, {
2964
+ value: _objectSpread$U(_objectSpread$U({}, ctx), {}, {
2965
2965
  currentTheme: ctx.appTheme,
2966
2966
  currentThemeKey: ctx.appThemeKey,
2967
2967
  theme: ctx.appTheme,
@@ -3073,11 +3073,11 @@ var LayoutContainer = function LayoutContainer(_ref) {
3073
3073
  });
3074
3074
  };
3075
3075
 
3076
- function ownKeys$S(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3077
- function _objectSpread$S(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$S(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$S(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3078
- function _createForOfIteratorHelper$s(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$s(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
3079
- function _unsupportedIterableToArray$s(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$s(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$s(r, a) : void 0; } }
3080
- function _arrayLikeToArray$s(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
3076
+ function ownKeys$T(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3077
+ function _objectSpread$T(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$T(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$T(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3078
+ function _createForOfIteratorHelper$t(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$t(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
3079
+ function _unsupportedIterableToArray$t(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$t(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$t(r, a) : void 0; } }
3080
+ function _arrayLikeToArray$t(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
3081
3081
  /**
3082
3082
  * Layout template definitions for the dashboard template picker.
3083
3083
  *
@@ -3351,12 +3351,12 @@ function createLayoutFromTemplate(template) {
3351
3351
  cols: template.cols,
3352
3352
  gap: "gap-2"
3353
3353
  };
3354
- var _iterator = _createForOfIteratorHelper$s(template.cells),
3354
+ var _iterator = _createForOfIteratorHelper$t(template.cells),
3355
3355
  _step;
3356
3356
  try {
3357
3357
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
3358
3358
  var cell = _step.value;
3359
- grid[cell.key] = _objectSpread$S({
3359
+ grid[cell.key] = _objectSpread$T({
3360
3360
  component: null,
3361
3361
  hide: cell.hide || false
3362
3362
  }, cell.span ? {
@@ -4282,11 +4282,11 @@ var RegistryAuthModal = function RegistryAuthModal(_ref) {
4282
4282
  });
4283
4283
  };
4284
4284
 
4285
- function _createForOfIteratorHelper$r(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$r(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
4286
- function _unsupportedIterableToArray$r(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$r(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$r(r, a) : void 0; } }
4287
- function _arrayLikeToArray$r(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
4288
- function ownKeys$R(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4289
- function _objectSpread$R(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$R(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$R(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4285
+ function _createForOfIteratorHelper$s(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$s(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
4286
+ function _unsupportedIterableToArray$s(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$s(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$s(r, a) : void 0; } }
4287
+ function _arrayLikeToArray$s(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
4288
+ function ownKeys$S(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4289
+ function _objectSpread$S(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$S(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$S(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4290
4290
  var RegistryDashboardDetail = function RegistryDashboardDetail(_ref) {
4291
4291
  var dashboardPackage = _ref.dashboardPackage,
4292
4292
  appId = _ref.appId,
@@ -4402,7 +4402,7 @@ var RegistryDashboardDetail = function RegistryDashboardDetail(_ref) {
4402
4402
  setProgressWidgets(function (prev) {
4403
4403
  var next = _toConsumableArray(prev);
4404
4404
  if (data.index >= 0 && data.index < next.length) {
4405
- next[data.index] = _objectSpread$R(_objectSpread$R({}, next[data.index]), {}, {
4405
+ next[data.index] = _objectSpread$S(_objectSpread$S({}, next[data.index]), {}, {
4406
4406
  status: data.status,
4407
4407
  error: data.error || null
4408
4408
  });
@@ -4498,7 +4498,7 @@ var RegistryDashboardDetail = function RegistryDashboardDetail(_ref) {
4498
4498
  var raw = preview === null || preview === void 0 ? void 0 : preview.compatibility;
4499
4499
  if (!raw) return raw;
4500
4500
  var cMap = ComponentManager.componentMap();
4501
- var augWidgets = _objectSpread$R({}, raw.widgets);
4501
+ var augWidgets = _objectSpread$S({}, raw.widgets);
4502
4502
  var fixedCount = 0;
4503
4503
  var _loop = function _loop() {
4504
4504
  var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
@@ -4525,7 +4525,7 @@ var RegistryDashboardDetail = function RegistryDashboardDetail(_ref) {
4525
4525
  toInstall = 0,
4526
4526
  unavailable = 0,
4527
4527
  hasUnavailableRequired = false;
4528
- var _iterator = _createForOfIteratorHelper$r(widgetDeps),
4528
+ var _iterator = _createForOfIteratorHelper$s(widgetDeps),
4529
4529
  _step;
4530
4530
  try {
4531
4531
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -5081,8 +5081,8 @@ var DiscoverDashboardsDetail = function DiscoverDashboardsDetail(_ref) {
5081
5081
  });
5082
5082
  };
5083
5083
 
5084
- function ownKeys$Q(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5085
- function _objectSpread$Q(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$Q(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$Q(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5084
+ function ownKeys$R(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5085
+ function _objectSpread$R(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$R(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$R(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5086
5086
  var LayoutManagerModal = function LayoutManagerModal(_ref) {
5087
5087
  var open = _ref.open,
5088
5088
  setIsOpen = _ref.setIsOpen,
@@ -5327,7 +5327,7 @@ var LayoutManagerModal = function LayoutManagerModal(_ref) {
5327
5327
  }
5328
5328
  return _context2.abrupt("return");
5329
5329
  case 6:
5330
- updatedWorkspace = _objectSpread$Q(_objectSpread$Q({}, importedWorkspace), {}, {
5330
+ updatedWorkspace = _objectSpread$R(_objectSpread$R({}, importedWorkspace), {}, {
5331
5331
  name: dashboardName.trim(),
5332
5332
  menuId: menuId,
5333
5333
  themeKey: selectedThemeKey
@@ -6300,9 +6300,9 @@ function cleanIpcError(message) {
6300
6300
  return match ? match[1] : message;
6301
6301
  }
6302
6302
 
6303
- function _createForOfIteratorHelper$q(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$q(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
6304
- function _unsupportedIterableToArray$q(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$q(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$q(r, a) : void 0; } }
6305
- function _arrayLikeToArray$q(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
6303
+ function _createForOfIteratorHelper$r(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$r(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
6304
+ function _unsupportedIterableToArray$r(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$r(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$r(r, a) : void 0; } }
6305
+ function _arrayLikeToArray$r(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
6306
6306
 
6307
6307
  /**
6308
6308
  * useRegistrySearch — shared hook for browsing and installing registry packages.
@@ -6416,13 +6416,13 @@ var useRegistrySearch = function useRegistrySearch() {
6416
6416
  return c.toLowerCase();
6417
6417
  }));
6418
6418
  widgets = [];
6419
- _iterator = _createForOfIteratorHelper$q(pkgs);
6419
+ _iterator = _createForOfIteratorHelper$r(pkgs);
6420
6420
  try {
6421
6421
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
6422
6422
  pkg = _step.value;
6423
6423
  // Compute missing APIs for the entire package
6424
6424
  allApiProviders = [];
6425
- _iterator2 = _createForOfIteratorHelper$q(pkg.providers || []);
6425
+ _iterator2 = _createForOfIteratorHelper$r(pkg.providers || []);
6426
6426
  try {
6427
6427
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
6428
6428
  p = _step2.value;
@@ -6435,11 +6435,11 @@ var useRegistrySearch = function useRegistrySearch() {
6435
6435
  } finally {
6436
6436
  _iterator2.f();
6437
6437
  }
6438
- _iterator3 = _createForOfIteratorHelper$q(pkg.widgets || []);
6438
+ _iterator3 = _createForOfIteratorHelper$r(pkg.widgets || []);
6439
6439
  try {
6440
6440
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
6441
6441
  w = _step3.value;
6442
- _iterator5 = _createForOfIteratorHelper$q(w.providers || []);
6442
+ _iterator5 = _createForOfIteratorHelper$r(w.providers || []);
6443
6443
  try {
6444
6444
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
6445
6445
  _p = _step5.value;
@@ -6461,7 +6461,7 @@ var useRegistrySearch = function useRegistrySearch() {
6461
6461
  missingApis = _toConsumableArray(new Set(allApiProviders)).filter(function (api) {
6462
6462
  return !capSet.has(api.toLowerCase());
6463
6463
  });
6464
- _iterator4 = _createForOfIteratorHelper$q(pkg.widgets || []);
6464
+ _iterator4 = _createForOfIteratorHelper$r(pkg.widgets || []);
6465
6465
  try {
6466
6466
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
6467
6467
  widget = _step4.value;
@@ -7082,11 +7082,11 @@ function applyFilters(items, filters, mode) {
7082
7082
  });
7083
7083
  }
7084
7084
 
7085
- function _createForOfIteratorHelper$p(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$p(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
7086
- function _unsupportedIterableToArray$p(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$p(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$p(r, a) : void 0; } }
7087
- function _arrayLikeToArray$p(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7088
- function ownKeys$P(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7089
- function _objectSpread$P(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$P(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$P(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7085
+ function _createForOfIteratorHelper$q(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$q(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
7086
+ function _unsupportedIterableToArray$q(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$q(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$q(r, a) : void 0; } }
7087
+ function _arrayLikeToArray$q(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7088
+ function ownKeys$Q(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7089
+ function _objectSpread$Q(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$Q(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$Q(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7090
7090
  var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
7091
7091
  var _state$selectedDashbo, _state$selectedDashbo2;
7092
7092
  var state = _ref.state,
@@ -7256,7 +7256,7 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
7256
7256
  _context2.next = 7;
7257
7257
  break;
7258
7258
  }
7259
- updatedWorkspace = _objectSpread$P(_objectSpread$P({}, installResult.workspace), {}, {
7259
+ updatedWorkspace = _objectSpread$Q(_objectSpread$Q({}, installResult.workspace), {}, {
7260
7260
  name: name.trim(),
7261
7261
  menuId: menuId || 1,
7262
7262
  themeKey: theme
@@ -7308,7 +7308,7 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
7308
7308
  installedNames = new Set(installedList.map(function (w) {
7309
7309
  return w.name;
7310
7310
  }));
7311
- _iterator = _createForOfIteratorHelper$p(state.selectedWidgets);
7311
+ _iterator = _createForOfIteratorHelper$q(state.selectedWidgets);
7312
7312
  _context2.prev = 13;
7313
7313
  _iterator.s();
7314
7314
  case 14:
@@ -8011,8 +8011,8 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
8011
8011
  });
8012
8012
  };
8013
8013
 
8014
- function ownKeys$O(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8015
- function _objectSpread$O(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$O(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$O(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8014
+ function ownKeys$P(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8015
+ function _objectSpread$P(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$P(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$P(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8016
8016
  var TOTAL_STEPS = 2; // Steps 0-1: Discover, Customize
8017
8017
 
8018
8018
  var initialState = {
@@ -8038,20 +8038,20 @@ var initialState = {
8038
8038
  function wizardReducer(state, action) {
8039
8039
  switch (action.type) {
8040
8040
  case "SET_STEP":
8041
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8041
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8042
8042
  step: action.payload
8043
8043
  });
8044
8044
  case "SET_FILTERS":
8045
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8046
- filters: _objectSpread$O(_objectSpread$O({}, state.filters), action.payload)
8045
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8046
+ filters: _objectSpread$P(_objectSpread$P({}, state.filters), action.payload)
8047
8047
  });
8048
8048
  case "TOGGLE_FILTER_CATEGORY":
8049
8049
  {
8050
8050
  var categories = state.filters.categories.includes(action.payload) ? state.filters.categories.filter(function (c) {
8051
8051
  return c !== action.payload;
8052
8052
  }) : [].concat(_toConsumableArray(state.filters.categories), [action.payload]);
8053
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8054
- filters: _objectSpread$O(_objectSpread$O({}, state.filters), {}, {
8053
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8054
+ filters: _objectSpread$P(_objectSpread$P({}, state.filters), {}, {
8055
8055
  categories: categories
8056
8056
  })
8057
8057
  });
@@ -8061,15 +8061,15 @@ function wizardReducer(state, action) {
8061
8061
  var providers = state.filters.providers.includes(action.payload) ? state.filters.providers.filter(function (p) {
8062
8062
  return p !== action.payload;
8063
8063
  }) : [].concat(_toConsumableArray(state.filters.providers), [action.payload]);
8064
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8065
- filters: _objectSpread$O(_objectSpread$O({}, state.filters), {}, {
8064
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8065
+ filters: _objectSpread$P(_objectSpread$P({}, state.filters), {}, {
8066
8066
  providers: providers
8067
8067
  })
8068
8068
  });
8069
8069
  }
8070
8070
  case "SET_SEARCH_QUERY":
8071
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8072
- filters: _objectSpread$O(_objectSpread$O({}, state.filters), {}, {
8071
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8072
+ filters: _objectSpread$P(_objectSpread$P({}, state.filters), {}, {
8073
8073
  query: action.payload
8074
8074
  })
8075
8075
  });
@@ -8079,7 +8079,7 @@ function wizardReducer(state, action) {
8079
8079
  var widgetOrder = action.payload.map(function (w) {
8080
8080
  return w.name || w.key;
8081
8081
  });
8082
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8082
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8083
8083
  selectedWidgets: action.payload,
8084
8084
  layout: {
8085
8085
  templateKey: templateKey,
@@ -8099,7 +8099,7 @@ function wizardReducer(state, action) {
8099
8099
  var toggleWidgetOrder = selectedWidgets.map(function (w) {
8100
8100
  return w.name || w.key;
8101
8101
  });
8102
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8102
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8103
8103
  selectedWidgets: selectedWidgets,
8104
8104
  layout: {
8105
8105
  templateKey: toggleTemplateKey,
@@ -8108,29 +8108,29 @@ function wizardReducer(state, action) {
8108
8108
  });
8109
8109
  }
8110
8110
  case "SET_SELECTED_DASHBOARD":
8111
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8111
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8112
8112
  selectedDashboard: action.payload
8113
8113
  });
8114
8114
  case "SET_PATH":
8115
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8115
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8116
8116
  path: action.payload
8117
8117
  });
8118
8118
  case "SET_LAYOUT":
8119
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8119
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8120
8120
  layout: action.payload
8121
8121
  });
8122
8122
  case "REORDER_WIDGETS":
8123
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8124
- layout: _objectSpread$O(_objectSpread$O({}, state.layout), {}, {
8123
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8124
+ layout: _objectSpread$P(_objectSpread$P({}, state.layout), {}, {
8125
8125
  widgetOrder: action.payload
8126
8126
  })
8127
8127
  });
8128
8128
  case "SET_CUSTOMIZATION":
8129
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8130
- customization: _objectSpread$O(_objectSpread$O({}, state.customization), action.payload)
8129
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8130
+ customization: _objectSpread$P(_objectSpread$P({}, state.customization), action.payload)
8131
8131
  });
8132
8132
  case "RESET":
8133
- return _objectSpread$O({}, initialState);
8133
+ return _objectSpread$P({}, initialState);
8134
8134
  default:
8135
8135
  return state;
8136
8136
  }
@@ -12782,8 +12782,8 @@ var deepEqual = function deepEqual(a, b, opts) {
12782
12782
 
12783
12783
  var deepEqual$1 = /*@__PURE__*/getDefaultExportFromCjs(deepEqual);
12784
12784
 
12785
- function ownKeys$N(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12786
- function _objectSpread$N(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$N(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$N(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12785
+ function ownKeys$O(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12786
+ function _objectSpread$O(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$O(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$O(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12787
12787
  var PanelEditItem = function PanelEditItem(_ref) {
12788
12788
  var _ComponentManager$get;
12789
12789
  var workspace = _ref.workspace,
@@ -12843,7 +12843,7 @@ var PanelEditItem = function PanelEditItem(_ref) {
12843
12843
  var uuid = newItem.uuid || newItem.uuidString;
12844
12844
  if (uuid) {
12845
12845
  workspaceTemp.selectedProviders = workspaceTemp.selectedProviders || {};
12846
- workspaceTemp.selectedProviders[uuid] = _objectSpread$N(_objectSpread$N({}, workspaceTemp.selectedProviders[uuid] || {}), {}, _defineProperty({}, providerType, providerId));
12846
+ workspaceTemp.selectedProviders[uuid] = _objectSpread$O(_objectSpread$O({}, workspaceTemp.selectedProviders[uuid] || {}), {}, _defineProperty({}, providerType, providerId));
12847
12847
  }
12848
12848
  onUpdate(newItem, workspaceTemp);
12849
12849
  forceUpdate();
@@ -12972,7 +12972,7 @@ var PanelEditItem = function PanelEditItem(_ref) {
12972
12972
  var _ref5 = _slicedToArray(_ref4, 2),
12973
12973
  name = _ref5[0],
12974
12974
  p = _ref5[1];
12975
- return _objectSpread$N({
12975
+ return _objectSpread$O({
12976
12976
  name: name
12977
12977
  }, p);
12978
12978
  });
@@ -13014,11 +13014,11 @@ var PanelEditItem = function PanelEditItem(_ref) {
13014
13014
  };
13015
13015
 
13016
13016
  var _excluded$6 = ["rows", "cols"];
13017
- function _createForOfIteratorHelper$o(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$o(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
13018
- function _unsupportedIterableToArray$o(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$o(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$o(r, a) : void 0; } }
13019
- function _arrayLikeToArray$o(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
13020
- function ownKeys$M(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13021
- function _objectSpread$M(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$M(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$M(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13017
+ function _createForOfIteratorHelper$p(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$p(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
13018
+ function _unsupportedIterableToArray$p(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$p(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$p(r, a) : void 0; } }
13019
+ function _arrayLikeToArray$p(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
13020
+ function ownKeys$N(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13021
+ function _objectSpread$N(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$N(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$N(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13022
13022
  var defaultGrid = {
13023
13023
  rows: 1,
13024
13024
  cols: 1,
@@ -13039,7 +13039,7 @@ function GridEditor(_ref) {
13039
13039
  setGrid = _useState2[1];
13040
13040
  var addRow = function addRow() {
13041
13041
  var newRow = grid.rows;
13042
- var newGrid = _objectSpread$M(_objectSpread$M({}, grid), {}, {
13042
+ var newGrid = _objectSpread$N(_objectSpread$N({}, grid), {}, {
13043
13043
  rows: grid.rows + 1
13044
13044
  });
13045
13045
  for (var col = 0; col < grid.cols; col++) {
@@ -13054,7 +13054,7 @@ function GridEditor(_ref) {
13054
13054
  };
13055
13055
  var addColumn = function addColumn() {
13056
13056
  var newCol = grid.cols;
13057
- var newGrid = _objectSpread$M(_objectSpread$M({}, grid), {}, {
13057
+ var newGrid = _objectSpread$N(_objectSpread$N({}, grid), {}, {
13058
13058
  cols: grid.cols + 1
13059
13059
  });
13060
13060
  for (var row = 0; row < grid.rows; row++) {
@@ -13087,8 +13087,8 @@ function GridEditor(_ref) {
13087
13087
  });
13088
13088
  }
13089
13089
  if (grid[nextKey]) {
13090
- var newGrid = _objectSpread$M({}, grid);
13091
- newGrid[currentKey] = _objectSpread$M(_objectSpread$M({}, newGrid[currentKey]), {}, {
13090
+ var newGrid = _objectSpread$N({}, grid);
13091
+ newGrid[currentKey] = _objectSpread$N(_objectSpread$N({}, newGrid[currentKey]), {}, {
13092
13092
  colSpan: newGrid[currentKey].colSpan + 1
13093
13093
  });
13094
13094
  delete newGrid[nextKey];
@@ -13101,8 +13101,8 @@ function GridEditor(_ref) {
13101
13101
  var currentKey = "".concat(row, ".").concat(col);
13102
13102
  var belowKey = "".concat(row + 1, ".").concat(col);
13103
13103
  if (grid[belowKey]) {
13104
- var newGrid = _objectSpread$M({}, grid);
13105
- newGrid[currentKey] = _objectSpread$M(_objectSpread$M({}, newGrid[currentKey]), {}, {
13104
+ var newGrid = _objectSpread$N({}, grid);
13105
+ newGrid[currentKey] = _objectSpread$N(_objectSpread$N({}, newGrid[currentKey]), {}, {
13106
13106
  rowSpan: newGrid[currentKey].rowSpan + 1
13107
13107
  });
13108
13108
  delete newGrid[belowKey];
@@ -13119,7 +13119,7 @@ function GridEditor(_ref) {
13119
13119
  var splitCell = function splitCell(row, col) {
13120
13120
  var key = "".concat(row, ".").concat(col);
13121
13121
  var cell = grid[key];
13122
- var newGrid = _objectSpread$M({}, grid);
13122
+ var newGrid = _objectSpread$N({}, grid);
13123
13123
 
13124
13124
  // we have to check the colspan, and since the colspan is greater than 1
13125
13125
  // Only handle horizontal split if colSpan > 1
@@ -13135,13 +13135,13 @@ function GridEditor(_ref) {
13135
13135
  var oldKey = "".concat(row, ".").concat(c);
13136
13136
  var newKey = "".concat(row, ".").concat(c + 1);
13137
13137
  if (newGrid[oldKey]) {
13138
- newGrid[newKey] = _objectSpread$M({}, newGrid[oldKey]);
13138
+ newGrid[newKey] = _objectSpread$N({}, newGrid[oldKey]);
13139
13139
  delete newGrid[oldKey];
13140
13140
  }
13141
13141
  }
13142
13142
 
13143
13143
  // Update the original cell's colSpan
13144
- newGrid[key] = _objectSpread$M(_objectSpread$M({}, cell), {}, {
13144
+ newGrid[key] = _objectSpread$N(_objectSpread$N({}, cell), {}, {
13145
13145
  colSpan: cell.colSpan - 1
13146
13146
  });
13147
13147
 
@@ -13153,7 +13153,7 @@ function GridEditor(_ref) {
13153
13153
  };
13154
13154
  }
13155
13155
  if (cell.rowSpan > 1) {
13156
- newGrid[key] = _objectSpread$M(_objectSpread$M({}, newGrid[key]), {}, {
13156
+ newGrid[key] = _objectSpread$N(_objectSpread$N({}, newGrid[key]), {}, {
13157
13157
  rowSpan: cell.rowSpan - 1
13158
13158
  });
13159
13159
  newGrid["".concat(row + 1, ".").concat(col)] = {
@@ -13169,7 +13169,7 @@ function GridEditor(_ref) {
13169
13169
  function sortObjectByKeys(obj) {
13170
13170
  var sortedKeys = Object.keys(obj).sort();
13171
13171
  var sortedObj = {};
13172
- var _iterator = _createForOfIteratorHelper$o(sortedKeys),
13172
+ var _iterator = _createForOfIteratorHelper$p(sortedKeys),
13173
13173
  _step;
13174
13174
  try {
13175
13175
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -13272,7 +13272,7 @@ function GridEditor(_ref) {
13272
13272
  var fromKey = "".concat(from.row, ".").concat(from.col);
13273
13273
  var toKey = "".concat(to.row, ".").concat(to.col);
13274
13274
  if (fromKey === toKey) return;
13275
- var newGrid = _objectSpread$M({}, grid);
13275
+ var newGrid = _objectSpread$N({}, grid);
13276
13276
 
13277
13277
  // Swap the cells
13278
13278
  var temp = newGrid[fromKey];
@@ -13298,7 +13298,7 @@ function GridEditor(_ref) {
13298
13298
  // console.log("Grid updated:", sequencedGrid);
13299
13299
  }
13300
13300
  function resetGridLayout() {
13301
- var newGrid = _objectSpread$M({}, defaultGrid);
13301
+ var newGrid = _objectSpread$N({}, defaultGrid);
13302
13302
  setGrid(newGrid);
13303
13303
  onUpdate(newGrid);
13304
13304
  }
@@ -13576,8 +13576,8 @@ var PanelEditItemGrid = function PanelEditItemGrid(_ref) {
13576
13576
  });
13577
13577
  };
13578
13578
 
13579
- function ownKeys$L(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13580
- function _objectSpread$L(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$L(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$L(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13579
+ function ownKeys$M(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13580
+ function _objectSpread$M(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$M(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$M(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13581
13581
  var PanelEditItemNotifications = function PanelEditItemNotifications(_ref) {
13582
13582
  var item = _ref.item;
13583
13583
  _ref.workspace;
@@ -13600,7 +13600,7 @@ var PanelEditItemNotifications = function PanelEditItemNotifications(_ref) {
13600
13600
  }, [widgetUuid, notificationDefs.length]);
13601
13601
  function handleNotifToggle(typeKey, value) {
13602
13602
  var _window$mainApi2;
13603
- var updated = _objectSpread$L(_objectSpread$L({}, notifPrefs), {}, _defineProperty({}, typeKey, value));
13603
+ var updated = _objectSpread$M(_objectSpread$M({}, notifPrefs), {}, _defineProperty({}, typeKey, value));
13604
13604
  setNotifPrefs(updated);
13605
13605
  if ((_window$mainApi2 = window.mainApi) !== null && _window$mainApi2 !== void 0 && (_window$mainApi2 = _window$mainApi2.notifications) !== null && _window$mainApi2 !== void 0 && _window$mainApi2.setPreferences && widgetUuid) {
13606
13606
  window.mainApi.notifications.setPreferences(widgetUuid, _defineProperty({}, typeKey, value));
@@ -13642,11 +13642,11 @@ var PanelEditItemNotifications = function PanelEditItemNotifications(_ref) {
13642
13642
  });
13643
13643
  };
13644
13644
 
13645
- function _createForOfIteratorHelper$n(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$n(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
13646
- function _unsupportedIterableToArray$n(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$n(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$n(r, a) : void 0; } }
13647
- function _arrayLikeToArray$n(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
13648
- function ownKeys$K(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13649
- function _objectSpread$K(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$K(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$K(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13645
+ function _createForOfIteratorHelper$o(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$o(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
13646
+ function _unsupportedIterableToArray$o(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$o(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$o(r, a) : void 0; } }
13647
+ function _arrayLikeToArray$o(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
13648
+ function ownKeys$L(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13649
+ function _objectSpread$L(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$L(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$L(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13650
13650
  var DAYS = [{
13651
13651
  key: "mon",
13652
13652
  label: "Mon"
@@ -13747,7 +13747,7 @@ function TaskScheduleEditor(_ref) {
13747
13747
  var _window$mainApi;
13748
13748
  var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
13749
13749
  if (!((_window$mainApi = window.mainApi) !== null && _window$mainApi !== void 0 && (_window$mainApi = _window$mainApi.scheduler) !== null && _window$mainApi !== void 0 && _window$mainApi.registerTask)) return;
13750
- var payload = _objectSpread$K({
13750
+ var payload = _objectSpread$L({
13751
13751
  widgetId: widgetId,
13752
13752
  widgetName: widgetName,
13753
13753
  workspaceId: workspaceId || "",
@@ -13973,7 +13973,7 @@ var PanelEditItemSchedule = function PanelEditItemSchedule(_ref2) {
13973
13973
  setIsLoading(true);
13974
13974
  window.mainApi.scheduler.getTasks(widgetUuid).then(function (tasks) {
13975
13975
  var stateMap = {};
13976
- var _iterator = _createForOfIteratorHelper$n(tasks || []),
13976
+ var _iterator = _createForOfIteratorHelper$o(tasks || []),
13977
13977
  _step;
13978
13978
  try {
13979
13979
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -16032,8 +16032,8 @@ var WidgetIcon = function WidgetIcon(_ref) {
16032
16032
  });
16033
16033
  };
16034
16034
 
16035
- function ownKeys$J(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16036
- function _objectSpread$J(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$J(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$J(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
16035
+ function ownKeys$K(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16036
+ function _objectSpread$K(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$K(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$K(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
16037
16037
  var ProviderForm = function ProviderForm(_ref) {
16038
16038
  var credentialSchema = _ref.credentialSchema,
16039
16039
  _ref$initialValues = _ref.initialValues,
@@ -16078,14 +16078,14 @@ var ProviderForm = function ProviderForm(_ref) {
16078
16078
  var oldKey = f.key;
16079
16079
  if (oldKey && formData[oldKey] !== undefined) {
16080
16080
  setFormData(function (fd) {
16081
- var updated = _objectSpread$J({}, fd);
16081
+ var updated = _objectSpread$K({}, fd);
16082
16082
  var val = updated[oldKey];
16083
16083
  delete updated[oldKey];
16084
16084
  if (newKey.trim()) updated[newKey] = val;
16085
16085
  return updated;
16086
16086
  });
16087
16087
  }
16088
- return _objectSpread$J(_objectSpread$J({}, f), {}, {
16088
+ return _objectSpread$K(_objectSpread$K({}, f), {}, {
16089
16089
  key: newKey
16090
16090
  });
16091
16091
  });
@@ -16097,14 +16097,14 @@ var ProviderForm = function ProviderForm(_ref) {
16097
16097
  });
16098
16098
  if (field !== null && field !== void 0 && field.key) {
16099
16099
  setFormData(function (prev) {
16100
- return _objectSpread$J(_objectSpread$J({}, prev), {}, _defineProperty({}, field.key, value));
16100
+ return _objectSpread$K(_objectSpread$K({}, prev), {}, _defineProperty({}, field.key, value));
16101
16101
  });
16102
16102
  }
16103
16103
  };
16104
16104
  var handleDynamicSecretToggle = function handleDynamicSecretToggle(id) {
16105
16105
  setDynamicFields(function (prev) {
16106
16106
  return prev.map(function (f) {
16107
- return f.id === id ? _objectSpread$J(_objectSpread$J({}, f), {}, {
16107
+ return f.id === id ? _objectSpread$K(_objectSpread$K({}, f), {}, {
16108
16108
  secret: !f.secret
16109
16109
  }) : f;
16110
16110
  });
@@ -16126,7 +16126,7 @@ var ProviderForm = function ProviderForm(_ref) {
16126
16126
  });
16127
16127
  if (field !== null && field !== void 0 && field.key) {
16128
16128
  setFormData(function (prev) {
16129
- var updated = _objectSpread$J({}, prev);
16129
+ var updated = _objectSpread$K({}, prev);
16130
16130
  delete updated[field.key];
16131
16131
  return updated;
16132
16132
  });
@@ -16168,13 +16168,13 @@ var ProviderForm = function ProviderForm(_ref) {
16168
16168
  */
16169
16169
  var handleInputChange = function handleInputChange(fieldName, value) {
16170
16170
  setFormData(function (prev) {
16171
- return _objectSpread$J(_objectSpread$J({}, prev), {}, _defineProperty({}, fieldName, value));
16171
+ return _objectSpread$K(_objectSpread$K({}, prev), {}, _defineProperty({}, fieldName, value));
16172
16172
  });
16173
16173
 
16174
16174
  // Clear error for this field if it was filled
16175
16175
  if (errors[fieldName] && value !== null && value !== void 0 && value.trim()) {
16176
16176
  setErrors(function (prev) {
16177
- var newErrors = _objectSpread$J({}, prev);
16177
+ var newErrors = _objectSpread$K({}, prev);
16178
16178
  delete newErrors[fieldName];
16179
16179
  return newErrors;
16180
16180
  });
@@ -16212,7 +16212,7 @@ var ProviderForm = function ProviderForm(_ref) {
16212
16212
  // Clear error if filled
16213
16213
  if (errors.providerName && value !== null && value !== void 0 && value.trim()) {
16214
16214
  setErrors(function (prev) {
16215
- var newErrors = _objectSpread$J({}, prev);
16215
+ var newErrors = _objectSpread$K({}, prev);
16216
16216
  delete newErrors.providerName;
16217
16217
  return newErrors;
16218
16218
  });
@@ -16449,8 +16449,8 @@ var ToolSelector$1 = function ToolSelector(_ref) {
16449
16449
  });
16450
16450
  };
16451
16451
 
16452
- function ownKeys$I(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16453
- function _objectSpread$I(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$I(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$I(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
16452
+ function ownKeys$J(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16453
+ function _objectSpread$J(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$J(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$J(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
16454
16454
  /**
16455
16455
  * Shared MCP utility functions.
16456
16456
  *
@@ -16578,7 +16578,7 @@ function buildMcpConfigFromOverrides(baseMcpConfig, envMappingRows, headerRows)
16578
16578
  headerTemplate[name] = value;
16579
16579
  }
16580
16580
  });
16581
- var config = _objectSpread$I({}, baseMcpConfig);
16581
+ var config = _objectSpread$J({}, baseMcpConfig);
16582
16582
  if (Object.keys(headerTemplate).length > 0) {
16583
16583
  config.headerTemplate = headerTemplate;
16584
16584
  } else {
@@ -16596,7 +16596,7 @@ function buildMcpConfigFromOverrides(baseMcpConfig, envMappingRows, headerRows)
16596
16596
  envMapping[env] = cred;
16597
16597
  }
16598
16598
  });
16599
- return _objectSpread$I(_objectSpread$I({}, baseMcpConfig), {}, {
16599
+ return _objectSpread$J(_objectSpread$J({}, baseMcpConfig), {}, {
16600
16600
  envMapping: envMapping
16601
16601
  });
16602
16602
  }
@@ -16837,11 +16837,11 @@ var getUserConfigurableProviders = function getUserConfigurableProviders(provide
16837
16837
  });
16838
16838
  };
16839
16839
 
16840
- function _createForOfIteratorHelper$m(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$m(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
16841
- function _unsupportedIterableToArray$m(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$m(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$m(r, a) : void 0; } }
16842
- function _arrayLikeToArray$m(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
16843
- function ownKeys$H(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16844
- function _objectSpread$H(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$H(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$H(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
16840
+ function _createForOfIteratorHelper$n(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$n(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
16841
+ function _unsupportedIterableToArray$n(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$n(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$n(r, a) : void 0; } }
16842
+ function _arrayLikeToArray$n(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
16843
+ function ownKeys$I(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16844
+ function _objectSpread$I(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$I(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$I(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
16845
16845
  var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
16846
16846
  var isOpen = _ref.isOpen,
16847
16847
  onClose = _ref.onClose,
@@ -17036,7 +17036,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17036
17036
  .map(function (entry) {
17037
17037
  var widget = allWidgets[entry.widgetKey];
17038
17038
  if (!widget) return null; // Widget no longer exists
17039
- return _objectSpread$H(_objectSpread$H({
17039
+ return _objectSpread$I(_objectSpread$I({
17040
17040
  key: entry.widgetKey
17041
17041
  }, widget), {}, {
17042
17042
  savedProviders: entry.providers || {},
@@ -17124,11 +17124,11 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17124
17124
 
17125
17125
  // Flatten all widgets from all packages for the widget list
17126
17126
  flatWidgets = [];
17127
- _iterator = _createForOfIteratorHelper$m(result.packages || []);
17127
+ _iterator = _createForOfIteratorHelper$n(result.packages || []);
17128
17128
  try {
17129
17129
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
17130
17130
  pkg = _step.value;
17131
- _iterator2 = _createForOfIteratorHelper$m(pkg.widgets || []);
17131
+ _iterator2 = _createForOfIteratorHelper$n(pkg.widgets || []);
17132
17132
  try {
17133
17133
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
17134
17134
  widget = _step2.value;
@@ -17187,7 +17187,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17187
17187
  // Get widgets from ComponentManager
17188
17188
  var allWidgets = ComponentManager.map();
17189
17189
  var widgetList = Object.keys(allWidgets).map(function (key) {
17190
- return _objectSpread$H({
17190
+ return _objectSpread$I({
17191
17191
  key: key
17192
17192
  }, allWidgets[key]);
17193
17193
  }).filter(function (widget) {
@@ -17418,7 +17418,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17418
17418
  setInlineCreateType(null);
17419
17419
  setInlineCreateSchema({});
17420
17420
  setInlineCreateError(null);
17421
- setSelectedProviders(_objectSpread$H(_objectSpread$H({}, selectedProviders), {}, _defineProperty({}, providerType, providerName)));
17421
+ setSelectedProviders(_objectSpread$I(_objectSpread$I({}, selectedProviders), {}, _defineProperty({}, providerType, providerName)));
17422
17422
  }
17423
17423
  };
17424
17424
  var handleInlineProviderSubmit = function handleInlineProviderSubmit(formData) {
@@ -17439,7 +17439,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17439
17439
 
17440
17440
  // Auto-select the newly created provider
17441
17441
  setSelectedProviders(function (prev) {
17442
- return _objectSpread$H(_objectSpread$H({}, prev), {}, _defineProperty({}, providerType, providerName));
17442
+ return _objectSpread$I(_objectSpread$I({}, prev), {}, _defineProperty({}, providerType, providerName));
17443
17443
  });
17444
17444
 
17445
17445
  // Collapse the inline form
@@ -17493,11 +17493,11 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17493
17493
  };
17494
17494
  var inlineHandleCredentialChange = function inlineHandleCredentialChange(fieldName, value) {
17495
17495
  setInlineCredentialData(function (prev) {
17496
- return _objectSpread$H(_objectSpread$H({}, prev), {}, _defineProperty({}, fieldName, value));
17496
+ return _objectSpread$I(_objectSpread$I({}, prev), {}, _defineProperty({}, fieldName, value));
17497
17497
  });
17498
17498
  if (inlineFormErrors[fieldName] && value !== null && value !== void 0 && value.trim()) {
17499
17499
  setInlineFormErrors(function (prev) {
17500
- var next = _objectSpread$H({}, prev);
17500
+ var next = _objectSpread$I({}, prev);
17501
17501
  delete next[fieldName];
17502
17502
  return next;
17503
17503
  });
@@ -17590,7 +17590,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17590
17590
  refreshProviders();
17591
17591
  }
17592
17592
  setSelectedProviders(function (prev) {
17593
- return _objectSpread$H(_objectSpread$H({}, prev), {}, _defineProperty({}, providerType, providerName));
17593
+ return _objectSpread$I(_objectSpread$I({}, prev), {}, _defineProperty({}, providerType, providerName));
17594
17594
  });
17595
17595
 
17596
17596
  // Reset stepper state
@@ -17611,7 +17611,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17611
17611
  });
17612
17612
  };
17613
17613
  var handleConfigChange = function handleConfigChange(key, value) {
17614
- setUserConfigValues(_objectSpread$H(_objectSpread$H({}, userConfigValues), {}, _defineProperty({}, key, value)));
17614
+ setUserConfigValues(_objectSpread$I(_objectSpread$I({}, userConfigValues), {}, _defineProperty({}, key, value)));
17615
17615
  };
17616
17616
 
17617
17617
  // Install a package from the registry
@@ -17677,7 +17677,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17677
17677
  // Mark items as installed
17678
17678
  setProgressWidgets(function (prev) {
17679
17679
  return prev.map(function (w) {
17680
- return _objectSpread$H(_objectSpread$H({}, w), {}, {
17680
+ return _objectSpread$I(_objectSpread$I({}, w), {}, {
17681
17681
  status: "installed"
17682
17682
  });
17683
17683
  });
@@ -17696,7 +17696,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17696
17696
  setInstallError(msg);
17697
17697
  setProgressWidgets(function (prev) {
17698
17698
  return prev.map(function (w) {
17699
- return _objectSpread$H(_objectSpread$H({}, w), {}, {
17699
+ return _objectSpread$I(_objectSpread$I({}, w), {}, {
17700
17700
  status: "failed",
17701
17701
  error: msg
17702
17702
  });
@@ -17770,7 +17770,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17770
17770
 
17771
17771
  // Phase 3: Save to recent widgets
17772
17772
  saveToRecent(selectedWidget, selectedProviders, userConfigValues);
17773
- onSelectWidget(_objectSpread$H(_objectSpread$H({}, selectedWidget), {}, {
17773
+ onSelectWidget(_objectSpread$I(_objectSpread$I({}, selectedWidget), {}, {
17774
17774
  selectedProviders: selectedProviders,
17775
17775
  // Pass to parent
17776
17776
  userConfigValues: userConfigValues // Pass to parent
@@ -18407,7 +18407,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
18407
18407
  setInlineProviderName(value);
18408
18408
  if (inlineFormErrors.providerName && value !== null && value !== void 0 && value.trim()) {
18409
18409
  setInlineFormErrors(function (prev) {
18410
- var next = _objectSpread$H({}, prev);
18410
+ var next = _objectSpread$I({}, prev);
18411
18411
  delete next.providerName;
18412
18412
  return next;
18413
18413
  });
@@ -18766,9 +18766,9 @@ var ProviderBadge = function ProviderBadge(_ref) {
18766
18766
  });
18767
18767
  };
18768
18768
 
18769
- function _createForOfIteratorHelper$l(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$l(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
18770
- function _unsupportedIterableToArray$l(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$l(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$l(r, a) : void 0; } }
18771
- function _arrayLikeToArray$l(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
18769
+ function _createForOfIteratorHelper$m(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$m(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
18770
+ function _unsupportedIterableToArray$m(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$m(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$m(r, a) : void 0; } }
18771
+ function _arrayLikeToArray$m(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
18772
18772
  var WidgetCardHeader = function WidgetCardHeader(_ref) {
18773
18773
  var item = _ref.item,
18774
18774
  widget = _ref.widget,
@@ -18813,7 +18813,7 @@ var WidgetCardHeader = function WidgetCardHeader(_ref) {
18813
18813
  var el = headerRef.current;
18814
18814
  if (!el) return;
18815
18815
  var observer = new ResizeObserver(function (entries) {
18816
- var _iterator = _createForOfIteratorHelper$l(entries),
18816
+ var _iterator = _createForOfIteratorHelper$m(entries),
18817
18817
  _step;
18818
18818
  try {
18819
18819
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -19205,9 +19205,9 @@ var useWidgetSchedulerStatus = function useWidgetSchedulerStatus(widgetId) {
19205
19205
  };
19206
19206
  };
19207
19207
 
19208
- function _createForOfIteratorHelper$k(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$k(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
19209
- function _unsupportedIterableToArray$k(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$k(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$k(r, a) : void 0; } }
19210
- function _arrayLikeToArray$k(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
19208
+ function _createForOfIteratorHelper$l(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$l(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
19209
+ function _unsupportedIterableToArray$l(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$l(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$l(r, a) : void 0; } }
19210
+ function _arrayLikeToArray$l(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
19211
19211
  function formatCountdown(ms) {
19212
19212
  if (ms == null || ms < 0) return "--";
19213
19213
  if (ms < 1000) return "< 1s";
@@ -19324,7 +19324,7 @@ var WidgetCardStatusBar = function WidgetCardStatusBar(_ref) {
19324
19324
 
19325
19325
  // Find soonest countdown among enabled tasks
19326
19326
  var soonestMs = null;
19327
- var _iterator = _createForOfIteratorHelper$k(enabledTasks),
19327
+ var _iterator = _createForOfIteratorHelper$l(enabledTasks),
19328
19328
  _step;
19329
19329
  try {
19330
19330
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -19777,8 +19777,8 @@ var ProviderSelector = function ProviderSelector(_ref) {
19777
19777
  });
19778
19778
  };
19779
19779
 
19780
- function ownKeys$G(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
19781
- function _objectSpread$G(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$G(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$G(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
19780
+ function ownKeys$H(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
19781
+ function _objectSpread$H(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$H(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$H(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
19782
19782
  var AdvancedMcpConfig = function AdvancedMcpConfig(_ref) {
19783
19783
  var transport = _ref.transport,
19784
19784
  envMappingRows = _ref.envMappingRows,
@@ -19807,7 +19807,7 @@ var AdvancedMcpConfig = function AdvancedMcpConfig(_ref) {
19807
19807
  var updateEnvRow = function updateEnvRow(id, field, value) {
19808
19808
  onEnvMappingRowsChange(function (prev) {
19809
19809
  return prev.map(function (row) {
19810
- return row.id === id ? _objectSpread$G(_objectSpread$G({}, row), {}, _defineProperty({}, field, value)) : row;
19810
+ return row.id === id ? _objectSpread$H(_objectSpread$H({}, row), {}, _defineProperty({}, field, value)) : row;
19811
19811
  });
19812
19812
  });
19813
19813
  };
@@ -19832,7 +19832,7 @@ var AdvancedMcpConfig = function AdvancedMcpConfig(_ref) {
19832
19832
  var updateHeaderRow = function updateHeaderRow(id, field, value) {
19833
19833
  onHeaderRowsChange(function (prev) {
19834
19834
  return prev.map(function (row) {
19835
- return row.id === id ? _objectSpread$G(_objectSpread$G({}, row), {}, _defineProperty({}, field, value)) : row;
19835
+ return row.id === id ? _objectSpread$H(_objectSpread$H({}, row), {}, _defineProperty({}, field, value)) : row;
19836
19836
  });
19837
19837
  });
19838
19838
  };
@@ -19981,8 +19981,8 @@ var AdvancedMcpConfig = function AdvancedMcpConfig(_ref) {
19981
19981
  });
19982
19982
  };
19983
19983
 
19984
- function ownKeys$F(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
19985
- function _objectSpread$F(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$F(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$F(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
19984
+ function ownKeys$G(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
19985
+ function _objectSpread$G(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$G(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$G(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
19986
19986
  var McpServerPicker = function McpServerPicker(_ref) {
19987
19987
  var _testResult$tools;
19988
19988
  var isOpen = _ref.isOpen,
@@ -20161,11 +20161,11 @@ var McpServerPicker = function McpServerPicker(_ref) {
20161
20161
  // Handle credential field changes
20162
20162
  var handleCredentialChange = function handleCredentialChange(fieldName, value) {
20163
20163
  setCredentialData(function (prev) {
20164
- return _objectSpread$F(_objectSpread$F({}, prev), {}, _defineProperty({}, fieldName, value));
20164
+ return _objectSpread$G(_objectSpread$G({}, prev), {}, _defineProperty({}, fieldName, value));
20165
20165
  });
20166
20166
  if (formErrors[fieldName] && value !== null && value !== void 0 && value.trim()) {
20167
20167
  setFormErrors(function (prev) {
20168
- var next = _objectSpread$F({}, prev);
20168
+ var next = _objectSpread$G({}, prev);
20169
20169
  delete next[fieldName];
20170
20170
  return next;
20171
20171
  });
@@ -20503,7 +20503,7 @@ var McpServerPicker = function McpServerPicker(_ref) {
20503
20503
  setProviderName(value);
20504
20504
  if (formErrors.providerName && value !== null && value !== void 0 && value.trim()) {
20505
20505
  setFormErrors(function (prev) {
20506
- var next = _objectSpread$F({}, prev);
20506
+ var next = _objectSpread$G({}, prev);
20507
20507
  delete next.providerName;
20508
20508
  return next;
20509
20509
  });
@@ -20693,8 +20693,8 @@ var McpServerPicker = function McpServerPicker(_ref) {
20693
20693
  });
20694
20694
  };
20695
20695
 
20696
- function ownKeys$E(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20697
- function _objectSpread$E(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$E(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$E(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
20696
+ function ownKeys$F(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20697
+ function _objectSpread$F(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$F(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$F(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
20698
20698
  var USE_ENHANCED_WIDGET_SELECTOR = true; // Set to false to use original modal
20699
20699
 
20700
20700
  /**
@@ -20740,7 +20740,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
20740
20740
  var _ref3 = _slicedToArray(_ref2, 2),
20741
20741
  id = _ref3[0],
20742
20742
  p = _ref3[1];
20743
- return _objectSpread$E(_objectSpread$E({}, p), {}, {
20743
+ return _objectSpread$F(_objectSpread$F({}, p), {}, {
20744
20744
  id: id,
20745
20745
  name: p.name || id
20746
20746
  });
@@ -20827,7 +20827,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
20827
20827
  // so we use its layout to replace any corrupted grid data.
20828
20828
  if (workspace && workspace["layout"]) {
20829
20829
  var model = new DashboardModel(workspace);
20830
- setCurrentWorkspace(_objectSpread$E(_objectSpread$E({}, workspace), {}, {
20830
+ setCurrentWorkspace(_objectSpread$F(_objectSpread$F({}, workspace), {}, {
20831
20831
  layout: model.layout
20832
20832
  }));
20833
20833
  } else {
@@ -20876,7 +20876,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
20876
20876
  }
20877
20877
  try {
20878
20878
  var hasChildren = config.type === "workspace";
20879
- var newLayout = addItemToItemLayout(ws.layout, gridItem.id, _objectSpread$E(_objectSpread$E({}, config), {}, {
20879
+ var newLayout = addItemToItemLayout(ws.layout, gridItem.id, _objectSpread$F(_objectSpread$F({}, config), {}, {
20880
20880
  component: widgetComponentName
20881
20881
  }), hasChildren);
20882
20882
  var newWidgetId = newLayout[newLayout.length - 1].id;
@@ -21304,7 +21304,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
21304
21304
  var uuid = widget.uuid || widget.uuidString;
21305
21305
  if (uuid) {
21306
21306
  newWorkspace.selectedProviders = newWorkspace.selectedProviders || {};
21307
- newWorkspace.selectedProviders[uuid] = _objectSpread$E(_objectSpread$E({}, newWorkspace.selectedProviders[uuid] || {}), {}, _defineProperty({}, providerType, providerId));
21307
+ newWorkspace.selectedProviders[uuid] = _objectSpread$F(_objectSpread$F({}, newWorkspace.selectedProviders[uuid] || {}), {}, _defineProperty({}, providerType, providerId));
21308
21308
  }
21309
21309
  setCurrentWorkspace(newWorkspace);
21310
21310
  }
@@ -21440,7 +21440,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
21440
21440
  var _gridContainer$grid;
21441
21441
  var config = ComponentManager.config(widgetKey);
21442
21442
  if (!config) return;
21443
- var widgetItem = _objectSpread$E(_objectSpread$E({}, config), {}, {
21443
+ var widgetItem = _objectSpread$F(_objectSpread$F({}, config), {}, {
21444
21444
  component: widgetKey,
21445
21445
  key: widgetKey
21446
21446
  });
@@ -21694,7 +21694,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
21694
21694
  onSelectWidget: function onSelectWidget(widget) {
21695
21695
 
21696
21696
  // Add component property from widget.key
21697
- var widgetWithComponent = _objectSpread$E(_objectSpread$E({}, widget), {}, {
21697
+ var widgetWithComponent = _objectSpread$F(_objectSpread$F({}, widget), {}, {
21698
21698
  component: widget.key
21699
21699
  });
21700
21700
  handleClickConfirmAdd(widgetWithComponent, dropdownTarget);
@@ -23323,8 +23323,8 @@ var MissingProviderPrompt = function MissingProviderPrompt(_ref) {
23323
23323
  });
23324
23324
  };
23325
23325
 
23326
- function ownKeys$D(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23327
- function _objectSpread$D(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$D(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$D(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
23326
+ function ownKeys$E(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23327
+ function _objectSpread$E(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$E(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$E(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
23328
23328
  function _callSuper$4(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$4() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
23329
23329
  function _isNativeReflectConstruct$4() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$4 = function _isNativeReflectConstruct() { return !!t; })(); }
23330
23330
  var ProviderErrorBoundary = /*#__PURE__*/function (_Component) {
@@ -23379,7 +23379,7 @@ var ProviderErrorBoundary = /*#__PURE__*/function (_Component) {
23379
23379
  _defineProperty(_this, "handleProviderSelect", function (providerType, providerName, credentials) {
23380
23380
 
23381
23381
  // Update local selected providers state
23382
- var updatedSelected = _objectSpread$D(_objectSpread$D({}, _this.state.selectedProviders), {}, _defineProperty({}, providerType, providerName));
23382
+ var updatedSelected = _objectSpread$E(_objectSpread$E({}, _this.state.selectedProviders), {}, _defineProperty({}, providerType, providerName));
23383
23383
  _this.setState({
23384
23384
  selectedProviders: updatedSelected
23385
23385
  }, function () {
@@ -23453,8 +23453,8 @@ var ProviderErrorBoundary = /*#__PURE__*/function (_Component) {
23453
23453
  }(React.Component);
23454
23454
  _defineProperty(ProviderErrorBoundary, "contextType", ProviderContext);
23455
23455
 
23456
- function ownKeys$C(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23457
- function _objectSpread$C(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$C(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$C(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
23456
+ function ownKeys$D(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23457
+ function _objectSpread$D(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$D(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$D(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
23458
23458
  var withProviderDetection = function withProviderDetection(Component) {
23459
23459
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
23460
23460
  _ref$requiredProvider = _ref.requiredProviders,
@@ -23479,7 +23479,7 @@ var withProviderDetection = function withProviderDetection(Component) {
23479
23479
  onProviderSelect: onProviderSelect
23480
23480
  });
23481
23481
  }
23482
- return /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread$C({}, props));
23482
+ return /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread$D({}, props));
23483
23483
  };
23484
23484
  };
23485
23485
 
@@ -24155,8 +24155,8 @@ var WidgetNotFound = function WidgetNotFound(_ref) {
24155
24155
  });
24156
24156
  };
24157
24157
 
24158
- function ownKeys$B(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
24159
- function _objectSpread$B(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$B(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$B(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
24158
+ function ownKeys$C(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
24159
+ function _objectSpread$C(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$C(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$C(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
24160
24160
  function _callSuper$2(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$2() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
24161
24161
  function _isNativeReflectConstruct$2() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$2 = function _isNativeReflectConstruct() { return !!t; })(); }
24162
24162
  var WidgetErrorBoundary = /*#__PURE__*/function (_Component) {
@@ -24239,6 +24239,35 @@ var WidgetRenderer = function WidgetRenderer(_ref) {
24239
24239
  children = _ref$children === void 0 ? null : _ref$children;
24240
24240
  var _useContext = React.useContext(DashboardContext),
24241
24241
  dashApi = _useContext.dashApi;
24242
+
24243
+ // When a widget package is updated via Settings > Widgets (or the AI
24244
+ // Widget Builder), the main process broadcasts "widget:installed"
24245
+ // and Dash.js rebroadcasts a "dash:widget-installed" CustomEvent on
24246
+ // window. We listen here, per-instance, and bump a local version
24247
+ // counter when OUR component is the one that was updated. The counter
24248
+ // is embedded in the child's React key so only matching instances
24249
+ // re-mount — unrelated widgets, the sidebar, and the Settings modal
24250
+ // are untouched. Replaces the old global stageKey remount in Dash.js.
24251
+ var _useState = React.useState(0),
24252
+ _useState2 = _slicedToArray(_useState, 2),
24253
+ componentVersion = _useState2[0],
24254
+ setComponentVersion = _useState2[1];
24255
+ React.useEffect(function () {
24256
+ var onWidgetInstalled = function onWidgetInstalled(e) {
24257
+ var _e$detail;
24258
+ var installed = e === null || e === void 0 || (_e$detail = e.detail) === null || _e$detail === void 0 ? void 0 : _e$detail.widgetName;
24259
+ if (!installed) return;
24260
+ if (installed === component) {
24261
+ setComponentVersion(function (v) {
24262
+ return v + 1;
24263
+ });
24264
+ }
24265
+ };
24266
+ window.addEventListener("dash:widget-installed", onWidgetInstalled);
24267
+ return function () {
24268
+ return window.removeEventListener("dash:widget-installed", onWidgetInstalled);
24269
+ };
24270
+ }, [component]);
24242
24271
  try {
24243
24272
  var m = ComponentManager.componentMap();
24244
24273
  if (component && m) {
@@ -24287,7 +24316,7 @@ var WidgetRenderer = function WidgetRenderer(_ref) {
24287
24316
 
24288
24317
  // Build widgetData for WidgetContext — hooks read from this
24289
24318
  var uuidString = DashReact.getUUID(params.uuid);
24290
- var widgetData = _objectSpread$B(_objectSpread$B({}, params), {}, {
24319
+ var widgetData = _objectSpread$C(_objectSpread$C({}, params), {}, {
24291
24320
  uuidString: uuidString,
24292
24321
  providers: (config === null || config === void 0 ? void 0 : config.providers) || [],
24293
24322
  notifications: (config === null || config === void 0 ? void 0 : config.notifications) || []
@@ -24311,7 +24340,7 @@ var WidgetRenderer = function WidgetRenderer(_ref) {
24311
24340
  widgetData: widgetData
24312
24341
  };
24313
24342
  var hasScheduledTasks = ((config === null || config === void 0 ? void 0 : config.scheduledTasks) || []).length > 0;
24314
- var widgetElement = children === null ? /*#__PURE__*/jsxRuntime.jsx(WidgetComponent, _objectSpread$B(_objectSpread$B(_objectSpread$B({
24343
+ var widgetElement = children === null ? /*#__PURE__*/jsxRuntime.jsx(WidgetComponent, _objectSpread$C(_objectSpread$C(_objectSpread$C({
24315
24344
  id: "widget-nokids-".concat(widgetKey),
24316
24345
  listen: function listen(listeners, handlers) {
24317
24346
  return helpers.listen(listeners, handlers);
@@ -24325,7 +24354,7 @@ var WidgetRenderer = function WidgetRenderer(_ref) {
24325
24354
  backgroundColor: bgColor,
24326
24355
  widgetConfig: helpers.config(),
24327
24356
  widgetEventNames: helpers.events()
24328
- }), "widget-nokids-".concat(widgetKey)) : /*#__PURE__*/jsxRuntime.jsx(WidgetComponent, _objectSpread$B(_objectSpread$B(_objectSpread$B({
24357
+ }), "widget-nokids-".concat(widgetKey, "-v").concat(componentVersion)) : /*#__PURE__*/jsxRuntime.jsx(WidgetComponent, _objectSpread$C(_objectSpread$C(_objectSpread$C({
24329
24358
  listen: function listen(listeners, handlers) {
24330
24359
  return helpers.listen(listeners, handlers);
24331
24360
  },
@@ -24338,7 +24367,7 @@ var WidgetRenderer = function WidgetRenderer(_ref) {
24338
24367
  }, params), userPrefs), {}, {
24339
24368
  backgroundColor: bgColor,
24340
24369
  children: children
24341
- }), "widget-kids-".concat(widgetKey));
24370
+ }), "widget-kids-".concat(widgetKey, "-v").concat(componentVersion));
24342
24371
 
24343
24372
  // Wrap widget rendering with WidgetContext + error boundary
24344
24373
  return /*#__PURE__*/jsxRuntime.jsx(WidgetContext.Provider, {
@@ -24525,11 +24554,11 @@ var ExternalWidget = function ExternalWidget(_ref) {
24525
24554
  var GRID_CELL_WIDGET_TYPE = "grid-cell-widget";
24526
24555
  var SIDEBAR_WIDGET_TYPE = "sidebar-widget";
24527
24556
 
24528
- function _createForOfIteratorHelper$j(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$j(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
24529
- function _unsupportedIterableToArray$j(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$j(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$j(r, a) : void 0; } }
24530
- function _arrayLikeToArray$j(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
24531
- function ownKeys$A(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
24532
- function _objectSpread$A(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$A(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$A(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
24557
+ function _createForOfIteratorHelper$k(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$k(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
24558
+ function _unsupportedIterableToArray$k(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$k(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$k(r, a) : void 0; } }
24559
+ function _arrayLikeToArray$k(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
24560
+ function ownKeys$B(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
24561
+ function _objectSpread$B(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$B(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$B(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
24533
24562
  var DraggableDroppableCellBody = function DraggableDroppableCellBody(_ref) {
24534
24563
  var cellNumber = _ref.cellNumber,
24535
24564
  gridContainerId = _ref.gridContainerId,
@@ -24727,7 +24756,7 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
24727
24756
  var _ref5 = _slicedToArray(_ref4, 2),
24728
24757
  id = _ref5[0],
24729
24758
  provider = _ref5[1];
24730
- return _objectSpread$A({
24759
+ return _objectSpread$B({
24731
24760
  id: id
24732
24761
  }, provider);
24733
24762
  }) : [];
@@ -25102,7 +25131,7 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
25102
25131
  return selectable["delete"](cn);
25103
25132
  });
25104
25133
  var resolved = new Set();
25105
- var _iterator = _createForOfIteratorHelper$j(selectable),
25134
+ var _iterator = _createForOfIteratorHelper$k(selectable),
25106
25135
  _step;
25107
25136
  try {
25108
25137
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -25771,7 +25800,7 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
25771
25800
  var widgetSpecificSelections = (workspace === null || workspace === void 0 || (_workspace$selectedPr = workspace.selectedProviders) === null || _workspace$selectedPr === void 0 ? void 0 : _workspace$selectedPr[id]) || {};
25772
25801
 
25773
25802
  // Add provider-related props from workspace
25774
- var itemWithProviders = _objectSpread$A(_objectSpread$A({}, item), {}, {
25803
+ var itemWithProviders = _objectSpread$B(_objectSpread$B({}, item), {}, {
25775
25804
  selectedProviders: widgetSpecificSelections,
25776
25805
  onProviderSelect: onProviderSelect
25777
25806
  });
@@ -27276,11 +27305,11 @@ function isWidgetResolvable(componentKey) {
27276
27305
  // isMinOrderForItem
27277
27306
  // }
27278
27307
 
27279
- function ownKeys$z(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
27280
- function _objectSpread$z(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$z(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$z(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
27281
- function _createForOfIteratorHelper$i(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$i(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
27282
- function _unsupportedIterableToArray$i(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$i(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$i(r, a) : void 0; } }
27283
- function _arrayLikeToArray$i(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
27308
+ function ownKeys$A(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
27309
+ function _objectSpread$A(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$A(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$A(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
27310
+ function _createForOfIteratorHelper$j(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$j(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
27311
+ function _unsupportedIterableToArray$j(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$j(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$j(r, a) : void 0; } }
27312
+ function _arrayLikeToArray$j(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
27284
27313
  /**
27285
27314
  * The model for all layout components used primarily in the renderLayout method
27286
27315
  * @param {Object} layoutItem an object containing various attributes of the layout item
@@ -27292,7 +27321,7 @@ function _arrayLikeToArray$i(r, a) { (null == a || a > r.length) && (a = r.lengt
27292
27321
  function sortObjectByKeys(obj) {
27293
27322
  var sortedKeys = Object.keys(obj).sort();
27294
27323
  var sortedObj = {};
27295
- var _iterator = _createForOfIteratorHelper$i(sortedKeys),
27324
+ var _iterator = _createForOfIteratorHelper$j(sortedKeys),
27296
27325
  _step;
27297
27326
  try {
27298
27327
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -27433,7 +27462,7 @@ var LayoutModel = function LayoutModel(layoutItem, workspaceLayout, dashboardId)
27433
27462
 
27434
27463
  // Merge user-entered config values (from EnhancedWidgetDropdown) into userPrefs
27435
27464
  if ("userConfigValues" in obj && obj.userConfigValues) {
27436
- layout.userPrefs = _objectSpread$z(_objectSpread$z({}, layout.userPrefs), obj.userConfigValues);
27465
+ layout.userPrefs = _objectSpread$A(_objectSpread$A({}, layout.userPrefs), obj.userConfigValues);
27437
27466
  }
27438
27467
 
27439
27468
  // Preserve provider selections for this widget
@@ -27564,6 +27593,822 @@ var SettingsModel = function SettingsModel() {
27564
27593
  return obj;
27565
27594
  };
27566
27595
 
27596
+ function _createForOfIteratorHelper$i(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$i(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
27597
+ function _unsupportedIterableToArray$i(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$i(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$i(r, a) : void 0; } }
27598
+ function _arrayLikeToArray$i(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
27599
+ /**
27600
+ * providerResolution.js
27601
+ *
27602
+ * Shared helpers for walking a workspace and figuring out which widgets
27603
+ * have required providers that are still unresolved after the 3-layer
27604
+ * resolution (widget → workspace → app-default → null). Used by:
27605
+ *
27606
+ * - DashboardConfigModal to render the Providers tab
27607
+ * - DashboardStage toolbar to show the unresolved-count badge
27608
+ *
27609
+ * Both places need the same answer, so keep the logic here to avoid drift
27610
+ * with the resolution inside `useMcpProvider` / `useWebSocketProvider`.
27611
+ */
27612
+
27613
+ /**
27614
+ * Resolve which provider name a given widget instance would bind to for
27615
+ * the given provider type. Mirrors the 3-layer chain in useMcpProvider
27616
+ * and useWebSocketProvider exactly:
27617
+ *
27618
+ * 1. widget-level override (layoutItem.selectedProviders[type])
27619
+ * 2. workspace-level binding (workspace.selectedProviders[id][type])
27620
+ * 3. app default (any provider of matching type flagged
27621
+ * `isDefaultForType` in appProviders)
27622
+ * 4. null (truly unresolved)
27623
+ */
27624
+ function resolveProviderName(_ref) {
27625
+ var _layoutItem$selectedP, _workspace$selectedPr;
27626
+ var providerType = _ref.providerType,
27627
+ layoutItem = _ref.layoutItem,
27628
+ widgetId = _ref.widgetId,
27629
+ workspace = _ref.workspace,
27630
+ appProviders = _ref.appProviders;
27631
+ // 1. Widget-level
27632
+ var widgetLevel = layoutItem === null || layoutItem === void 0 || (_layoutItem$selectedP = layoutItem.selectedProviders) === null || _layoutItem$selectedP === void 0 ? void 0 : _layoutItem$selectedP[providerType];
27633
+ if (widgetLevel) return widgetLevel;
27634
+
27635
+ // 2. Workspace-level
27636
+ var workspaceLevel = widgetId && (workspace === null || workspace === void 0 || (_workspace$selectedPr = workspace.selectedProviders) === null || _workspace$selectedPr === void 0 || (_workspace$selectedPr = _workspace$selectedPr[widgetId]) === null || _workspace$selectedPr === void 0 ? void 0 : _workspace$selectedPr[providerType]);
27637
+ if (workspaceLevel) return workspaceLevel;
27638
+
27639
+ // 3. App default — appProviders is either a map keyed by name or an
27640
+ // array. Support both because different callers shape it either way.
27641
+ if (appProviders) {
27642
+ if (Array.isArray(appProviders)) {
27643
+ var _iterator = _createForOfIteratorHelper$i(appProviders),
27644
+ _step;
27645
+ try {
27646
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
27647
+ var data = _step.value;
27648
+ if ((data === null || data === void 0 ? void 0 : data.type) === providerType && (data === null || data === void 0 ? void 0 : data.isDefaultForType) === true) {
27649
+ return data.name;
27650
+ }
27651
+ }
27652
+ } catch (err) {
27653
+ _iterator.e(err);
27654
+ } finally {
27655
+ _iterator.f();
27656
+ }
27657
+ } else if (_typeof(appProviders) === "object") {
27658
+ for (var _i = 0, _Object$entries = Object.entries(appProviders); _i < _Object$entries.length; _i++) {
27659
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
27660
+ name = _Object$entries$_i[0],
27661
+ _data = _Object$entries$_i[1];
27662
+ if ((_data === null || _data === void 0 ? void 0 : _data.type) === providerType && (_data === null || _data === void 0 ? void 0 : _data.isDefaultForType) === true) {
27663
+ return name;
27664
+ }
27665
+ }
27666
+ }
27667
+ }
27668
+ return null;
27669
+ }
27670
+
27671
+ /**
27672
+ * Walk every layout container in a workspace and yield each widget
27673
+ * instance with its concrete layout item. Handles the main layout,
27674
+ * per-page layouts, the sidebar, and nested LayoutGridContainers whose
27675
+ * children are stored on `items`/`layout`.
27676
+ *
27677
+ * Deduplicates by object identity AND by stable id so that shared
27678
+ * references across pages (or two structurally-distinct items that
27679
+ * carry the same uuidString / id, which is the wiring key) are
27680
+ * visited exactly once. Pipeline-style workspaces re-reference the
27681
+ * same widget objects across page layouts; without this dedupe the
27682
+ * Providers/Listeners tabs render one row per reference.
27683
+ */
27684
+ function forEachWidget(workspace, visit) {
27685
+ if (!workspace) return;
27686
+ var visitedObjects = new WeakSet();
27687
+ var visitedIds = new Set();
27688
+ var stableId = function stableId(item) {
27689
+ return (item === null || item === void 0 ? void 0 : item.uuidString) || (item === null || item === void 0 ? void 0 : item.uuid) || ((item === null || item === void 0 ? void 0 : item.component) != null && (item === null || item === void 0 ? void 0 : item.id) != null ? "".concat(item.component, "|").concat(item.id) : null);
27690
+ };
27691
+ var _walk = function walk(items) {
27692
+ if (!Array.isArray(items)) return;
27693
+ var _iterator2 = _createForOfIteratorHelper$i(items),
27694
+ _step2;
27695
+ try {
27696
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
27697
+ var item = _step2.value;
27698
+ if (!item || _typeof(item) !== "object") continue;
27699
+ // A "widget" is any layout item with a component name.
27700
+ // Containers can have both a component name AND nested items
27701
+ // (e.g. LayoutGridContainer), so still recurse.
27702
+ if (item.component) {
27703
+ var id = stableId(item);
27704
+ var alreadyByRef = visitedObjects.has(item);
27705
+ var alreadyById = id != null && visitedIds.has(id);
27706
+ if (!alreadyByRef && !alreadyById) {
27707
+ visitedObjects.add(item);
27708
+ if (id != null) visitedIds.add(id);
27709
+ visit(item);
27710
+ }
27711
+ }
27712
+ if (Array.isArray(item.items)) _walk(item.items);
27713
+ if (Array.isArray(item.layout)) _walk(item.layout);
27714
+ }
27715
+ } catch (err) {
27716
+ _iterator2.e(err);
27717
+ } finally {
27718
+ _iterator2.f();
27719
+ }
27720
+ };
27721
+ _walk(workspace.layout);
27722
+ if (Array.isArray(workspace.pages)) {
27723
+ var _iterator3 = _createForOfIteratorHelper$i(workspace.pages),
27724
+ _step3;
27725
+ try {
27726
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
27727
+ var page = _step3.value;
27728
+ _walk(page === null || page === void 0 ? void 0 : page.layout);
27729
+ }
27730
+ } catch (err) {
27731
+ _iterator3.e(err);
27732
+ } finally {
27733
+ _iterator3.f();
27734
+ }
27735
+ }
27736
+ _walk(workspace.sidebarLayout);
27737
+ }
27738
+
27739
+ /**
27740
+ * Compute the list of unresolved required providers across a workspace.
27741
+ *
27742
+ * @param {object} args
27743
+ * @param {object} args.workspace The workspace (with layout/pages/sidebarLayout/selectedProviders).
27744
+ * @param {object|Array} args.appProviders
27745
+ * Map keyed by provider name, or an array of provider objects. Each
27746
+ * entry has at least `{ type, isDefaultForType }`.
27747
+ * @param {(componentName: string) => Array<{type, required?, providerClass?}>} args.getWidgetRequirements
27748
+ * Returns the `providers: [...]` declaration from the component's
27749
+ * `.dash.js` (via `ComponentManager.componentMap()[name].providers`).
27750
+ *
27751
+ * @returns {Array<{ widgetId, component, providerType, providerClass, layoutItem }>}
27752
+ * One entry per (widget instance, required provider type) that lacks
27753
+ * a binding.
27754
+ */
27755
+ function getUnresolvedProviders(_ref2) {
27756
+ var workspace = _ref2.workspace,
27757
+ appProviders = _ref2.appProviders,
27758
+ getWidgetRequirements = _ref2.getWidgetRequirements;
27759
+ if (!workspace || typeof getWidgetRequirements !== "function") return [];
27760
+ var unresolved = [];
27761
+ forEachWidget(workspace, function (item) {
27762
+ var requirements = getWidgetRequirements(item.component) || [];
27763
+ if (!Array.isArray(requirements) || requirements.length === 0) return;
27764
+ var widgetId = item.uuidString || item.uuid || item.id || null;
27765
+ var _iterator4 = _createForOfIteratorHelper$i(requirements),
27766
+ _step4;
27767
+ try {
27768
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
27769
+ var req = _step4.value;
27770
+ if (!req || !req.type) continue;
27771
+ if (req.required === false) continue; // optional, skip
27772
+
27773
+ var name = resolveProviderName({
27774
+ providerType: req.type,
27775
+ layoutItem: item,
27776
+ widgetId: widgetId,
27777
+ workspace: workspace,
27778
+ appProviders: appProviders
27779
+ });
27780
+ if (!name) {
27781
+ unresolved.push({
27782
+ widgetId: widgetId,
27783
+ component: item.component,
27784
+ providerType: req.type,
27785
+ providerClass: req.providerClass || null,
27786
+ layoutItem: item
27787
+ });
27788
+ }
27789
+ }
27790
+ } catch (err) {
27791
+ _iterator4.e(err);
27792
+ } finally {
27793
+ _iterator4.f();
27794
+ }
27795
+ });
27796
+ return unresolved;
27797
+ }
27798
+
27799
+ /**
27800
+ * Group an unresolved-provider list (or any `{widget, providerType}` list)
27801
+ * by provider type, so the Providers tab can render one row per unique
27802
+ * type with N widgets beneath.
27803
+ */
27804
+ function groupByProviderType(unresolved) {
27805
+ var byType = new Map();
27806
+ var _iterator5 = _createForOfIteratorHelper$i(unresolved || []),
27807
+ _step5;
27808
+ try {
27809
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
27810
+ var u = _step5.value;
27811
+ if (!(u !== null && u !== void 0 && u.providerType)) continue;
27812
+ if (!byType.has(u.providerType)) byType.set(u.providerType, []);
27813
+ byType.get(u.providerType).push(u);
27814
+ }
27815
+ } catch (err) {
27816
+ _iterator5.e(err);
27817
+ } finally {
27818
+ _iterator5.f();
27819
+ }
27820
+ return byType;
27821
+ }
27822
+
27823
+ /**
27824
+ * Summarize every widget in the workspace that requires ANY provider,
27825
+ * regardless of whether it's already resolved. Drives the Providers tab's
27826
+ * "show per-widget overrides" expansion — the modal lists all widgets so
27827
+ * the user can change an explicit override even for types that are
27828
+ * already resolved via the app default.
27829
+ */
27830
+ function getAllProviderBindings(_ref3) {
27831
+ var workspace = _ref3.workspace,
27832
+ appProviders = _ref3.appProviders,
27833
+ getWidgetRequirements = _ref3.getWidgetRequirements;
27834
+ if (!workspace || typeof getWidgetRequirements !== "function") return [];
27835
+ var bindings = [];
27836
+ forEachWidget(workspace, function (item) {
27837
+ var requirements = getWidgetRequirements(item.component) || [];
27838
+ if (!Array.isArray(requirements) || requirements.length === 0) return;
27839
+ var widgetId = item.uuidString || item.uuid || item.id || null;
27840
+ var _iterator6 = _createForOfIteratorHelper$i(requirements),
27841
+ _step6;
27842
+ try {
27843
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
27844
+ var req = _step6.value;
27845
+ if (!req || !req.type) continue;
27846
+ var name = resolveProviderName({
27847
+ providerType: req.type,
27848
+ layoutItem: item,
27849
+ widgetId: widgetId,
27850
+ workspace: workspace,
27851
+ appProviders: appProviders
27852
+ });
27853
+ bindings.push({
27854
+ widgetId: widgetId,
27855
+ component: item.component,
27856
+ providerType: req.type,
27857
+ providerClass: req.providerClass || null,
27858
+ required: req.required !== false,
27859
+ resolvedProviderName: name,
27860
+ layoutItem: item
27861
+ });
27862
+ }
27863
+ } catch (err) {
27864
+ _iterator6.e(err);
27865
+ } finally {
27866
+ _iterator6.f();
27867
+ }
27868
+ });
27869
+ return bindings;
27870
+ }
27871
+
27872
+ function ownKeys$z(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
27873
+ function _objectSpread$z(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$z(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$z(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
27874
+ function _createForOfIteratorHelper$h(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$h(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
27875
+ function _unsupportedIterableToArray$h(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$h(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$h(r, a) : void 0; } }
27876
+ function _arrayLikeToArray$h(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
27877
+ var EVENT_STRING_RE = /^([^[]+)\[([^\]]+)\]\.(.+)$/;
27878
+
27879
+ /** Parse "Component[itemId].event" → { component, itemId, event }. */
27880
+ function parseEventString(eventString) {
27881
+ if (typeof eventString !== "string") return null;
27882
+ var m = eventString.match(EVENT_STRING_RE);
27883
+ if (!m) return null;
27884
+ return {
27885
+ component: m[1],
27886
+ itemId: m[2],
27887
+ event: m[3]
27888
+ };
27889
+ }
27890
+
27891
+ /** Build an event string in the canonical runtime format. */
27892
+ function formatEventString(component, itemId, event) {
27893
+ return "".concat(component, "[").concat(itemId, "].").concat(event);
27894
+ }
27895
+
27896
+ /**
27897
+ * Get a stable id for a layout item. Layout items historically used
27898
+ * numeric `id`; some newer flows also carry `uuidString`/`uuid`. The
27899
+ * runtime event-string format uses whichever is `item.id`, so we
27900
+ * default to that and fall back to the others for resilience.
27901
+ */
27902
+ function itemIdOf(item) {
27903
+ if (item == null) return null;
27904
+ if (item.id !== undefined && item.id !== null) return String(item.id);
27905
+ if (item.uuidString) return item.uuidString;
27906
+ if (item.uuid) return item.uuid;
27907
+ return null;
27908
+ }
27909
+
27910
+ /**
27911
+ * Best-effort human label for a layout item: explicit title, then
27912
+ * widget config display name, then component name + short id.
27913
+ */
27914
+ function labelFor(item, getWidgetConfig) {
27915
+ var _item$userPrefs, _item$userConfig;
27916
+ var cfg = (getWidgetConfig === null || getWidgetConfig === void 0 ? void 0 : getWidgetConfig(item.component)) || null;
27917
+ var explicit = (item === null || item === void 0 || (_item$userPrefs = item.userPrefs) === null || _item$userPrefs === void 0 ? void 0 : _item$userPrefs.title) || (item === null || item === void 0 || (_item$userConfig = item.userConfig) === null || _item$userConfig === void 0 ? void 0 : _item$userConfig.title);
27918
+ if (explicit) return explicit;
27919
+ if (cfg !== null && cfg !== void 0 && cfg.displayName) return cfg.displayName;
27920
+ var id = itemIdOf(item);
27921
+ return "".concat(item.component || "widget").concat(id ? "[".concat(String(id).slice(0, 6), "]") : "");
27922
+ }
27923
+
27924
+ /**
27925
+ * Read the events/eventHandlers metadata for a widget. Items can carry
27926
+ * the arrays inline (older pattern where they got cached onto the
27927
+ * layout item); the current component config carries them via the
27928
+ * ComponentManager catalog. We UNION both so we don't flag a binding
27929
+ * as orphaned just because an inline cache is stale — if the current
27930
+ * widget code declares the event/handler, the binding is valid.
27931
+ */
27932
+ function eventsOf(item, getWidgetConfig) {
27933
+ var inline = Array.isArray(item.events) ? item.events : [];
27934
+ var cfg = (getWidgetConfig === null || getWidgetConfig === void 0 ? void 0 : getWidgetConfig(item.component)) || {};
27935
+ var fromCfg = Array.isArray(cfg.events) ? cfg.events : [];
27936
+ return _toConsumableArray(new Set([].concat(_toConsumableArray(inline), _toConsumableArray(fromCfg))));
27937
+ }
27938
+ function eventHandlersOf(item, getWidgetConfig) {
27939
+ var inline = Array.isArray(item.eventHandlers) ? item.eventHandlers : [];
27940
+ var cfg = (getWidgetConfig === null || getWidgetConfig === void 0 ? void 0 : getWidgetConfig(item.component)) || {};
27941
+ var fromCfg = Array.isArray(cfg.eventHandlers) ? cfg.eventHandlers : [];
27942
+ return _toConsumableArray(new Set([].concat(_toConsumableArray(inline), _toConsumableArray(fromCfg))));
27943
+ }
27944
+
27945
+ /**
27946
+ * Every widget instance in the workspace that emits at least one event.
27947
+ * Deduplicated by `${component}|${itemId}` — the same compound key that
27948
+ * event strings use at runtime, so any "duplicate" in the tree (same
27949
+ * widget referenced across pages) resolves to the same wiring target.
27950
+ * @returns {Array<{ itemId, component, label, events: string[], key: string }>}
27951
+ */
27952
+ function getEmitters(workspace, getWidgetConfig) {
27953
+ var byKey = new Map();
27954
+ forEachWidget(workspace, function (item) {
27955
+ var events = eventsOf(item, getWidgetConfig);
27956
+ if (events.length === 0) return;
27957
+ var itemId = itemIdOf(item);
27958
+ if (itemId == null) return;
27959
+ var key = "".concat(item.component, "|").concat(itemId);
27960
+ if (byKey.has(key)) return;
27961
+ byKey.set(key, {
27962
+ key: key,
27963
+ itemId: itemId,
27964
+ component: item.component,
27965
+ label: labelFor(item, getWidgetConfig),
27966
+ events: events
27967
+ });
27968
+ });
27969
+ return Array.from(byKey.values());
27970
+ }
27971
+
27972
+ /**
27973
+ * Every widget instance in the workspace that accepts at least one
27974
+ * handler. Used to populate the receiver dropdown. Deduplicated by
27975
+ * `${component}|${itemId}` (see getEmitters).
27976
+ * @returns {Array<{ itemId, component, label, eventHandlers: string[], listeners: object, key: string }>}
27977
+ */
27978
+ function getReceivers(workspace, getWidgetConfig) {
27979
+ var byKey = new Map();
27980
+ forEachWidget(workspace, function (item) {
27981
+ var handlers = eventHandlersOf(item, getWidgetConfig);
27982
+ if (handlers.length === 0) return;
27983
+ var itemId = itemIdOf(item);
27984
+ if (itemId == null) return;
27985
+ var key = "".concat(item.component, "|").concat(itemId);
27986
+ if (byKey.has(key)) return;
27987
+ byKey.set(key, {
27988
+ key: key,
27989
+ itemId: itemId,
27990
+ component: item.component,
27991
+ label: labelFor(item, getWidgetConfig),
27992
+ eventHandlers: handlers,
27993
+ listeners: item.listeners || {}
27994
+ });
27995
+ });
27996
+ return Array.from(byKey.values());
27997
+ }
27998
+
27999
+ /**
28000
+ * Flatten every listener binding in the workspace into a list of
28001
+ * { receiverItemId, receiverComponent, handlerName, sourceComponent,
28002
+ * sourceItemId, eventName, raw } tuples. `raw` is the original
28003
+ * event string for round-trip fidelity on remove.
28004
+ */
28005
+ function getCurrentWiring(workspace) {
28006
+ var wiring = [];
28007
+ forEachWidget(workspace, function (item) {
28008
+ var receiverItemId = itemIdOf(item);
28009
+ if (receiverItemId == null) return;
28010
+ var listeners = item.listeners;
28011
+ if (!listeners || _typeof(listeners) !== "object") return;
28012
+ for (var _i = 0, _Object$entries = Object.entries(listeners); _i < _Object$entries.length; _i++) {
28013
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
28014
+ handlerName = _Object$entries$_i[0],
28015
+ eventList = _Object$entries$_i[1];
28016
+ // Live format is array; defensive guard for legacy object
28017
+ // form (a single source widget keyed under the handler).
28018
+ var events = Array.isArray(eventList) ? eventList : typeof eventList === "string" ? [eventList] : [];
28019
+ var _iterator = _createForOfIteratorHelper$h(events),
28020
+ _step;
28021
+ try {
28022
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
28023
+ var raw = _step.value;
28024
+ var parsed = parseEventString(raw);
28025
+ if (!parsed) continue;
28026
+ wiring.push({
28027
+ receiverItemId: receiverItemId,
28028
+ receiverComponent: item.component,
28029
+ handlerName: handlerName,
28030
+ sourceComponent: parsed.component,
28031
+ sourceItemId: parsed.itemId,
28032
+ eventName: parsed.event,
28033
+ raw: raw
28034
+ });
28035
+ }
28036
+ } catch (err) {
28037
+ _iterator.e(err);
28038
+ } finally {
28039
+ _iterator.f();
28040
+ }
28041
+ }
28042
+ });
28043
+ return wiring;
28044
+ }
28045
+
28046
+ /**
28047
+ * Detect listener bindings that are no longer valid: the source widget
28048
+ * doesn't exist in the workspace anymore, or the source widget doesn't
28049
+ * declare the event, or the receiver doesn't declare the handler.
28050
+ * Each entry includes a `reason` so the modal can show a sensible
28051
+ * message.
28052
+ */
28053
+ function getOrphanedListeners(workspace, getWidgetConfig) {
28054
+ var wiring = getCurrentWiring(workspace);
28055
+ if (wiring.length === 0) return [];
28056
+
28057
+ // Build two lookups:
28058
+ // byCompositeKey: `${component}|${itemId}` → widget meta (primary)
28059
+ // byItemId: `${itemId}` → widget meta (fallback,
28060
+ // used only for the "source-missing" check where
28061
+ // the wiring's component can't be trusted yet)
28062
+ // The composite key matches how the runtime event-string
28063
+ // (`Component[itemId].event`) identifies a widget, so orphan
28064
+ // decisions line up with what actually fires at runtime.
28065
+ var byCompositeKey = new Map();
28066
+ var byItemId = new Map();
28067
+ forEachWidget(workspace, function (item) {
28068
+ var id = itemIdOf(item);
28069
+ if (id == null) return;
28070
+ var meta = {
28071
+ component: item.component,
28072
+ events: eventsOf(item, getWidgetConfig),
28073
+ eventHandlers: eventHandlersOf(item, getWidgetConfig)
28074
+ };
28075
+ byCompositeKey.set("".concat(item.component, "|").concat(id), meta);
28076
+ // First-seen wins on numeric-id collisions; good enough for the
28077
+ // "does any widget with this id exist?" fallback.
28078
+ if (!byItemId.has(id)) byItemId.set(id, meta);
28079
+ });
28080
+ var orphans = [];
28081
+ var _iterator2 = _createForOfIteratorHelper$h(wiring),
28082
+ _step2;
28083
+ try {
28084
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
28085
+ var w = _step2.value;
28086
+ var srcKey = "".concat(w.sourceComponent, "|").concat(w.sourceItemId);
28087
+ var src = byCompositeKey.get(srcKey);
28088
+ if (!src) {
28089
+ // No (component, id) match. If some OTHER widget still owns
28090
+ // this id, the source component changed; otherwise it's truly
28091
+ // missing. Preserves the user's ability to see whether a
28092
+ // rename happened vs. a delete.
28093
+ var fallback = byItemId.get(String(w.sourceItemId));
28094
+ orphans.push(_objectSpread$z(_objectSpread$z({}, w), {}, {
28095
+ reason: fallback ? "source-component-mismatch" : "source-missing"
28096
+ }));
28097
+ continue;
28098
+ }
28099
+ if (!src.events.includes(w.eventName)) {
28100
+ orphans.push(_objectSpread$z(_objectSpread$z({}, w), {}, {
28101
+ reason: "event-not-emitted"
28102
+ }));
28103
+ continue;
28104
+ }
28105
+ var receiverKey = "".concat(w.receiverComponent, "|").concat(w.receiverItemId);
28106
+ var receiver = byCompositeKey.get(receiverKey);
28107
+ if (receiver && !receiver.eventHandlers.includes(w.handlerName)) {
28108
+ orphans.push(_objectSpread$z(_objectSpread$z({}, w), {}, {
28109
+ reason: "handler-not-declared"
28110
+ }));
28111
+ }
28112
+ }
28113
+ } catch (err) {
28114
+ _iterator2.e(err);
28115
+ } finally {
28116
+ _iterator2.f();
28117
+ }
28118
+ return orphans;
28119
+ }
28120
+
28121
+ /**
28122
+ * Mutate a workspace tree in place, removing listener bindings whose
28123
+ * source widget is not present in the workspace. Pure: doesn't need
28124
+ * ComponentManager, so it's safe to call from WorkspaceModel during
28125
+ * load — the workspace's own tree is the only source of truth.
28126
+ *
28127
+ * Handles the four cases producing a "source-missing" orphan:
28128
+ * - the emitter widget was deleted
28129
+ * - the emitter widget's id now belongs to a different component
28130
+ * (stored binding has stale component name)
28131
+ * - the source string failed to parse (legacy/garbage data)
28132
+ *
28133
+ * Leaves "event-not-emitted" / "handler-not-declared" cases untouched
28134
+ * because they require the current widget catalog to decide — those
28135
+ * are handled at runtime with full ComponentManager access.
28136
+ *
28137
+ * @returns {number} count of bindings removed (for logging/diagnostics)
28138
+ */
28139
+ function pruneDeadListenerReferences(workspace) {
28140
+ if (!workspace) return 0;
28141
+
28142
+ // Build the set of live widgets in the tree, keyed by the same
28143
+ // `${component}|${itemId}` the runtime uses to resolve events.
28144
+ var liveKeys = new Set();
28145
+ var _walkForLive = function walkForLive(items) {
28146
+ if (!Array.isArray(items)) return;
28147
+ var _iterator3 = _createForOfIteratorHelper$h(items),
28148
+ _step3;
28149
+ try {
28150
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
28151
+ var item = _step3.value;
28152
+ if (!item || _typeof(item) !== "object") continue;
28153
+ if (item.component) {
28154
+ var id = itemIdOf(item);
28155
+ if (id != null) liveKeys.add("".concat(item.component, "|").concat(id));
28156
+ }
28157
+ if (Array.isArray(item.items)) _walkForLive(item.items);
28158
+ if (Array.isArray(item.layout)) _walkForLive(item.layout);
28159
+ }
28160
+ } catch (err) {
28161
+ _iterator3.e(err);
28162
+ } finally {
28163
+ _iterator3.f();
28164
+ }
28165
+ };
28166
+ _walkForLive(workspace.layout);
28167
+ if (Array.isArray(workspace.pages)) {
28168
+ var _iterator4 = _createForOfIteratorHelper$h(workspace.pages),
28169
+ _step4;
28170
+ try {
28171
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
28172
+ var page = _step4.value;
28173
+ _walkForLive(page === null || page === void 0 ? void 0 : page.layout);
28174
+ }
28175
+ } catch (err) {
28176
+ _iterator4.e(err);
28177
+ } finally {
28178
+ _iterator4.f();
28179
+ }
28180
+ }
28181
+ _walkForLive(workspace.sidebarLayout);
28182
+ var removed = 0;
28183
+ var _pruneListeners = function pruneListeners(items) {
28184
+ if (!Array.isArray(items)) return;
28185
+ var _iterator5 = _createForOfIteratorHelper$h(items),
28186
+ _step5;
28187
+ try {
28188
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
28189
+ var item = _step5.value;
28190
+ if (!item || _typeof(item) !== "object") continue;
28191
+ if (item.listeners && _typeof(item.listeners) === "object") {
28192
+ for (var _i2 = 0, _Object$keys = Object.keys(item.listeners); _i2 < _Object$keys.length; _i2++) {
28193
+ var handler = _Object$keys[_i2];
28194
+ var events = item.listeners[handler];
28195
+ if (!Array.isArray(events)) continue;
28196
+ var kept = [];
28197
+ var _iterator6 = _createForOfIteratorHelper$h(events),
28198
+ _step6;
28199
+ try {
28200
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
28201
+ var raw = _step6.value;
28202
+ var parsed = parseEventString(raw);
28203
+ if (parsed && liveKeys.has("".concat(parsed.component, "|").concat(parsed.itemId))) {
28204
+ kept.push(raw);
28205
+ } else {
28206
+ removed += 1;
28207
+ }
28208
+ }
28209
+ } catch (err) {
28210
+ _iterator6.e(err);
28211
+ } finally {
28212
+ _iterator6.f();
28213
+ }
28214
+ if (kept.length === 0) {
28215
+ delete item.listeners[handler];
28216
+ } else if (kept.length !== events.length) {
28217
+ item.listeners[handler] = kept;
28218
+ }
28219
+ }
28220
+ }
28221
+ if (Array.isArray(item.items)) _pruneListeners(item.items);
28222
+ if (Array.isArray(item.layout)) _pruneListeners(item.layout);
28223
+ }
28224
+ } catch (err) {
28225
+ _iterator5.e(err);
28226
+ } finally {
28227
+ _iterator5.f();
28228
+ }
28229
+ };
28230
+ _pruneListeners(workspace.layout);
28231
+ if (Array.isArray(workspace.pages)) {
28232
+ var _iterator7 = _createForOfIteratorHelper$h(workspace.pages),
28233
+ _step7;
28234
+ try {
28235
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
28236
+ var _page = _step7.value;
28237
+ _pruneListeners(_page === null || _page === void 0 ? void 0 : _page.layout);
28238
+ }
28239
+ } catch (err) {
28240
+ _iterator7.e(err);
28241
+ } finally {
28242
+ _iterator7.f();
28243
+ }
28244
+ }
28245
+ _pruneListeners(workspace.sidebarLayout);
28246
+ return removed;
28247
+ }
28248
+
28249
+ /**
28250
+ * Apply a staged delta to a workspace's listener bindings and return a
28251
+ * NEW workspace object (deep-cloned along the modified path).
28252
+ *
28253
+ * `adds` / `removes` are arrays of
28254
+ * { receiverItemId, handlerName, sourceComponent, sourceItemId, eventName }
28255
+ *
28256
+ * Removes may also pass `raw` (the exact pre-existing event string) for
28257
+ * a precise match; otherwise we match on the canonical formatted form.
28258
+ */
28259
+ function applyWiringChanges(workspace, _ref) {
28260
+ var _ref$adds = _ref.adds,
28261
+ adds = _ref$adds === void 0 ? [] : _ref$adds,
28262
+ _ref$removes = _ref.removes,
28263
+ removes = _ref$removes === void 0 ? [] : _ref$removes;
28264
+ if (!workspace) return workspace;
28265
+ if (adds.length === 0 && removes.length === 0) return workspace;
28266
+
28267
+ // Group changes by receiver for cheap per-item updates.
28268
+ var byReceiver = new Map();
28269
+ var ensure = function ensure(id) {
28270
+ if (!byReceiver.has(id)) byReceiver.set(id, {
28271
+ adds: [],
28272
+ removes: []
28273
+ });
28274
+ return byReceiver.get(id);
28275
+ };
28276
+ var _iterator8 = _createForOfIteratorHelper$h(adds),
28277
+ _step8;
28278
+ try {
28279
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
28280
+ var a = _step8.value;
28281
+ if (!a.receiverItemId) continue;
28282
+ ensure(String(a.receiverItemId)).adds.push(a);
28283
+ }
28284
+ } catch (err) {
28285
+ _iterator8.e(err);
28286
+ } finally {
28287
+ _iterator8.f();
28288
+ }
28289
+ var _iterator9 = _createForOfIteratorHelper$h(removes),
28290
+ _step9;
28291
+ try {
28292
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
28293
+ var r = _step9.value;
28294
+ if (!r.receiverItemId) continue;
28295
+ ensure(String(r.receiverItemId)).removes.push(r);
28296
+ }
28297
+
28298
+ // Walk the tree and rebuild listeners on every touched item. We do
28299
+ // shallow clones along the path so React change detection is
28300
+ // reliable — but the tree shape is preserved.
28301
+ } catch (err) {
28302
+ _iterator9.e(err);
28303
+ } finally {
28304
+ _iterator9.f();
28305
+ }
28306
+ var cloneList = function cloneList(items) {
28307
+ return Array.isArray(items) ? items.map(function (item) {
28308
+ return transform(item);
28309
+ }) : items;
28310
+ };
28311
+ var transform = function transform(item) {
28312
+ if (!item || _typeof(item) !== "object") return item;
28313
+ var next = item;
28314
+ var id = itemIdOf(item);
28315
+ var change = id != null ? byReceiver.get(String(id)) : null;
28316
+ if (change) {
28317
+ var newListeners = applyToItem(item.listeners || {}, change);
28318
+ next = _objectSpread$z(_objectSpread$z({}, next), {}, {
28319
+ listeners: newListeners
28320
+ });
28321
+ }
28322
+ if (Array.isArray(next.items)) {
28323
+ next = _objectSpread$z(_objectSpread$z({}, next), {}, {
28324
+ items: cloneList(next.items)
28325
+ });
28326
+ }
28327
+ if (Array.isArray(next.layout)) {
28328
+ next = _objectSpread$z(_objectSpread$z({}, next), {}, {
28329
+ layout: cloneList(next.layout)
28330
+ });
28331
+ }
28332
+ return next;
28333
+ };
28334
+ var updatedWs = _objectSpread$z({}, workspace);
28335
+ if (Array.isArray(workspace.layout)) {
28336
+ updatedWs.layout = cloneList(workspace.layout);
28337
+ }
28338
+ if (Array.isArray(workspace.pages)) {
28339
+ updatedWs.pages = workspace.pages.map(function (page) {
28340
+ return _objectSpread$z(_objectSpread$z({}, page), {}, {
28341
+ layout: cloneList(page.layout)
28342
+ });
28343
+ });
28344
+ }
28345
+ if (Array.isArray(workspace.sidebarLayout)) {
28346
+ updatedWs.sidebarLayout = cloneList(workspace.sidebarLayout);
28347
+ }
28348
+ return updatedWs;
28349
+ }
28350
+ function applyToItem(listeners, _ref2) {
28351
+ var adds = _ref2.adds,
28352
+ removes = _ref2.removes;
28353
+ // Deep enough clone for handler arrays.
28354
+ var next = {};
28355
+ for (var _i3 = 0, _Object$entries2 = Object.entries(listeners); _i3 < _Object$entries2.length; _i3++) {
28356
+ var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i3], 2),
28357
+ k = _Object$entries2$_i[0],
28358
+ v = _Object$entries2$_i[1];
28359
+ next[k] = Array.isArray(v) ? _toConsumableArray(v) : v;
28360
+ }
28361
+
28362
+ // Removes first so a re-add (rare) lands.
28363
+ var _iterator0 = _createForOfIteratorHelper$h(removes),
28364
+ _step0;
28365
+ try {
28366
+ var _loop = function _loop() {
28367
+ var r = _step0.value;
28368
+ var target = r.handlerName;
28369
+ if (!target) return 0; // continue
28370
+ var events = next[target];
28371
+ if (!Array.isArray(events)) return 0; // continue
28372
+ var eventStr = r.raw || formatEventString(r.sourceComponent, r.sourceItemId, r.eventName);
28373
+ var filtered = events.filter(function (e) {
28374
+ return e !== eventStr;
28375
+ });
28376
+ if (filtered.length === 0) {
28377
+ delete next[target];
28378
+ } else {
28379
+ next[target] = filtered;
28380
+ }
28381
+ },
28382
+ _ret;
28383
+ for (_iterator0.s(); !(_step0 = _iterator0.n()).done;) {
28384
+ _ret = _loop();
28385
+ if (_ret === 0) continue;
28386
+ }
28387
+ } catch (err) {
28388
+ _iterator0.e(err);
28389
+ } finally {
28390
+ _iterator0.f();
28391
+ }
28392
+ var _iterator1 = _createForOfIteratorHelper$h(adds),
28393
+ _step1;
28394
+ try {
28395
+ for (_iterator1.s(); !(_step1 = _iterator1.n()).done;) {
28396
+ var a = _step1.value;
28397
+ var target = a.handlerName;
28398
+ if (!target) continue;
28399
+ var eventStr = formatEventString(a.sourceComponent, a.sourceItemId, a.eventName);
28400
+ var existing = Array.isArray(next[target]) ? next[target] : [];
28401
+ if (existing.includes(eventStr)) continue;
28402
+ next[target] = [].concat(_toConsumableArray(existing), [eventStr]);
28403
+ }
28404
+ } catch (err) {
28405
+ _iterator1.e(err);
28406
+ } finally {
28407
+ _iterator1.f();
28408
+ }
28409
+ return next;
28410
+ }
28411
+
27567
28412
  /**
27568
28413
  * Default layout for a brand-new workspace: a single 1x1 grid container
27569
28414
  * with one empty cell. Mirrors DashboardModel._initializeLayout().
@@ -27691,6 +28536,13 @@ var WorkspaceModel = function WorkspaceModel(workspaceItem) {
27691
28536
  workspace.menuId = "menuId" in obj ? obj["menuId"] : 1;
27692
28537
  workspace.selectedProviders = "selectedProviders" in obj ? obj["selectedProviders"] : {};
27693
28538
  workspace.themeKey = "themeKey" in obj ? obj["themeKey"] : null;
28539
+
28540
+ // Strip any listener bindings whose source widget is no longer in
28541
+ // the tree. These "orphan" bindings are dead — they don't match any
28542
+ // live publisher and never fire — so they're safe to remove at load
28543
+ // time before the renderer wires up subscriptions. Keeps stored
28544
+ // workspaces self-consistent without the user having to do anything.
28545
+ pruneDeadListenerReferences(workspace);
27694
28546
  return sanitizeWorkspaceObject(workspace);
27695
28547
  // return workspace;
27696
28548
  };
@@ -28027,9 +28879,9 @@ var MenuItemModel = function MenuItemModel() {
28027
28879
 
28028
28880
  function ownKeys$y(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
28029
28881
  function _objectSpread$y(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$y(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$y(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
28030
- function _createForOfIteratorHelper$h(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$h(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
28031
- function _unsupportedIterableToArray$h(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$h(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$h(r, a) : void 0; } }
28032
- function _arrayLikeToArray$h(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
28882
+ function _createForOfIteratorHelper$g(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$g(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
28883
+ function _unsupportedIterableToArray$g(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$g(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$g(r, a) : void 0; } }
28884
+ function _arrayLikeToArray$g(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
28033
28885
  /**
28034
28886
  * A Model for a Workspace (Dashboard)
28035
28887
  * The Dashboard in this instance is the entire Layout inclusive of the workspaces and widgets
@@ -28090,12 +28942,18 @@ var DashboardModel = /*#__PURE__*/function () {
28090
28942
  }
28091
28943
  obj = null;
28092
28944
 
28945
+ // Strip any listener bindings whose source widget is no longer in
28946
+ // the tree — dead bindings never fire and just clutter the stored
28947
+ // workspace. Safe at model-init time because it's purely tree-local
28948
+ // (doesn't need ComponentManager).
28949
+ pruneDeadListenerReferences(this);
28950
+
28093
28951
  // Normalize all grids on load to repair any persisted corruption
28094
28952
  this._normalizeAllGrids();
28095
28953
 
28096
28954
  // Also normalize grids within pages
28097
28955
  if (this.pages.length > 0) {
28098
- var _iterator = _createForOfIteratorHelper$h(this.pages),
28956
+ var _iterator = _createForOfIteratorHelper$g(this.pages),
28099
28957
  _step;
28100
28958
  try {
28101
28959
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -30071,7 +30929,7 @@ var DashboardModel = /*#__PURE__*/function () {
30071
30929
  try {
30072
30930
  // Collect all item IDs actively referenced by grid cells
30073
30931
  var activeItemIds = new Set();
30074
- var _iterator2 = _createForOfIteratorHelper$h(this.layout),
30932
+ var _iterator2 = _createForOfIteratorHelper$g(this.layout),
30075
30933
  _step2;
30076
30934
  try {
30077
30935
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -30111,7 +30969,7 @@ var DashboardModel = /*#__PURE__*/function () {
30111
30969
  });
30112
30970
 
30113
30971
  // Clean listener references on remaining items for each removed orphan
30114
- var _iterator3 = _createForOfIteratorHelper$h(orphanedIds),
30972
+ var _iterator3 = _createForOfIteratorHelper$g(orphanedIds),
30115
30973
  _step3;
30116
30974
  try {
30117
30975
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -30770,9 +31628,9 @@ var useDashboard = function useDashboard() {
30770
31628
  });
30771
31629
  };
30772
31630
 
30773
- function _createForOfIteratorHelper$g(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$g(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
30774
- function _unsupportedIterableToArray$g(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$g(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$g(r, a) : void 0; } }
30775
- function _arrayLikeToArray$g(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
31631
+ function _createForOfIteratorHelper$f(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$f(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
31632
+ function _unsupportedIterableToArray$f(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$f(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$f(r, a) : void 0; } }
31633
+ function _arrayLikeToArray$f(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
30776
31634
 
30777
31635
  /**
30778
31636
  * useWidgetProviders Hook
@@ -30823,7 +31681,7 @@ var useWidgetProviders = function useWidgetProviders() {
30823
31681
  // 1. Widget-level: stored directly on the layout item by handleSelectProvider
30824
31682
  // 2. Workspace-level: stored as workspace.selectedProviders[widgetId][providerType]
30825
31683
  var providers = {};
30826
- var _iterator = _createForOfIteratorHelper$g(providerDeclarations),
31684
+ var _iterator = _createForOfIteratorHelper$f(providerDeclarations),
30827
31685
  _step;
30828
31686
  try {
30829
31687
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -31578,9 +32436,9 @@ var useNotifications = function useNotifications() {
31578
32436
  };
31579
32437
  };
31580
32438
 
31581
- function _createForOfIteratorHelper$f(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$f(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
31582
- function _unsupportedIterableToArray$f(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$f(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$f(r, a) : void 0; } }
31583
- function _arrayLikeToArray$f(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
32439
+ function _createForOfIteratorHelper$e(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$e(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
32440
+ function _unsupportedIterableToArray$e(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$e(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$e(r, a) : void 0; } }
32441
+ function _arrayLikeToArray$e(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
31584
32442
 
31585
32443
  /**
31586
32444
  * useScheduler Hook
@@ -31653,7 +32511,7 @@ var useScheduler = function useScheduler() {
31653
32511
  if (pending && pending.length > 0) {
31654
32512
  setPendingResults(pending);
31655
32513
  // Call handlers for each pending result
31656
- var _iterator = _createForOfIteratorHelper$f(pending),
32514
+ var _iterator = _createForOfIteratorHelper$e(pending),
31657
32515
  _step;
31658
32516
  try {
31659
32517
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -34680,9 +35538,9 @@ function loadWidgetBundle(source, widgetName) {
34680
35538
  };
34681
35539
  }
34682
35540
 
34683
- function _createForOfIteratorHelper$e(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$e(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
34684
- function _unsupportedIterableToArray$e(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$e(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$e(r, a) : void 0; } }
34685
- function _arrayLikeToArray$e(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
35541
+ function _createForOfIteratorHelper$d(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$d(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
35542
+ function _unsupportedIterableToArray$d(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$d(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$d(r, a) : void 0; } }
35543
+ function _arrayLikeToArray$d(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
34686
35544
  /**
34687
35545
  * Validation utilities for grid-first dashboard architecture
34688
35546
  *
@@ -34921,7 +35779,7 @@ var validateCellMerge = function validateCellMerge(cellNumbers, grid) {
34921
35779
 
34922
35780
  // Validate each cell
34923
35781
  var cells = [];
34924
- var _iterator = _createForOfIteratorHelper$e(cellNumbers),
35782
+ var _iterator = _createForOfIteratorHelper$d(cellNumbers),
34925
35783
  _step;
34926
35784
  try {
34927
35785
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -35269,9 +36127,9 @@ var HARMONY_STRATEGIES = [{
35269
36127
  label: "Custom"
35270
36128
  }];
35271
36129
 
35272
- function _createForOfIteratorHelper$d(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$d(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
35273
- function _unsupportedIterableToArray$d(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$d(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$d(r, a) : void 0; } }
35274
- function _arrayLikeToArray$d(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
36130
+ function _createForOfIteratorHelper$c(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$c(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
36131
+ function _unsupportedIterableToArray$c(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$c(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$c(r, a) : void 0; } }
36132
+ function _arrayLikeToArray$c(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
35275
36133
  /**
35276
36134
  * markdownFormParser.js
35277
36135
  *
@@ -35318,7 +36176,7 @@ function detectColumnType(header, cellValues) {
35318
36176
  }
35319
36177
 
35320
36178
  // Check if any cell has an enum pattern (template placeholders)
35321
- var _iterator = _createForOfIteratorHelper$d(cellValues),
36179
+ var _iterator = _createForOfIteratorHelper$c(cellValues),
35322
36180
  _step;
35323
36181
  try {
35324
36182
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -35327,7 +36185,7 @@ function detectColumnType(header, cellValues) {
35327
36185
  if (options) {
35328
36186
  // Include all unique existing cell values as valid options
35329
36187
  var allOptions = new Set(options);
35330
- var _iterator2 = _createForOfIteratorHelper$d(cellValues),
36188
+ var _iterator2 = _createForOfIteratorHelper$c(cellValues),
35331
36189
  _step2;
35332
36190
  try {
35333
36191
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -35537,7 +36395,7 @@ function parse(markdown) {
35537
36395
  */
35538
36396
  function serialize(blocks) {
35539
36397
  var parts = [];
35540
- var _iterator3 = _createForOfIteratorHelper$d(blocks),
36398
+ var _iterator3 = _createForOfIteratorHelper$c(blocks),
35541
36399
  _step3;
35542
36400
  try {
35543
36401
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -35552,7 +36410,7 @@ function serialize(blocks) {
35552
36410
  parts.push("| " + block.columns.map(function () {
35553
36411
  return "------";
35554
36412
  }).join(" | ") + " |");
35555
- var _iterator4 = _createForOfIteratorHelper$d(block.rows),
36413
+ var _iterator4 = _createForOfIteratorHelper$c(block.rows),
35556
36414
  _step4;
35557
36415
  try {
35558
36416
  var _loop2 = function _loop2() {
@@ -35573,7 +36431,7 @@ function serialize(blocks) {
35573
36431
  break;
35574
36432
  }
35575
36433
  case "list":
35576
- var _iterator5 = _createForOfIteratorHelper$d(block.items),
36434
+ var _iterator5 = _createForOfIteratorHelper$c(block.items),
35577
36435
  _step5;
35578
36436
  try {
35579
36437
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
@@ -35587,7 +36445,7 @@ function serialize(blocks) {
35587
36445
  }
35588
36446
  break;
35589
36447
  case "blockquote":
35590
- var _iterator6 = _createForOfIteratorHelper$d(block.text.split("\n")),
36448
+ var _iterator6 = _createForOfIteratorHelper$c(block.text.split("\n")),
35591
36449
  _step6;
35592
36450
  try {
35593
36451
  for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
@@ -39090,9 +39948,9 @@ var ThemeManagerModal = function ThemeManagerModal(_ref) {
39090
39948
 
39091
39949
  function ownKeys$p(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
39092
39950
  function _objectSpread$p(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$p(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$p(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
39093
- function _createForOfIteratorHelper$c(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$c(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
39094
- function _unsupportedIterableToArray$c(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$c(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$c(r, a) : void 0; } }
39095
- function _arrayLikeToArray$c(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
39951
+ function _createForOfIteratorHelper$b(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$b(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
39952
+ function _unsupportedIterableToArray$b(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$b(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$b(r, a) : void 0; } }
39953
+ function _arrayLikeToArray$b(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
39096
39954
  var DASHBOARD_TAGS = ["productivity", "monitoring", "analytics", "communication", "developer", "sales", "marketing", "finance", "project-management", "social", "news", "utilities"];
39097
39955
  var BUMP_OPTIONS$1 = [{
39098
39956
  value: "patch",
@@ -39166,7 +40024,7 @@ function collectComponentConfigs() {
39166
40024
  // fixed "reference" entry.
39167
40025
  function seedSelections(plan, dashboardVisibility) {
39168
40026
  var selections = {};
39169
- var _iterator = _createForOfIteratorHelper$c(plan.widgets || []),
40027
+ var _iterator = _createForOfIteratorHelper$b(plan.widgets || []),
39170
40028
  _step;
39171
40029
  try {
39172
40030
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -39499,7 +40357,7 @@ var PublishDashboardModal = function PublishDashboardModal(_ref) {
39499
40357
  break;
39500
40358
  }
39501
40359
  seenPackages = new Set();
39502
- _iterator2 = _createForOfIteratorHelper$c(plan.widgets || []);
40360
+ _iterator2 = _createForOfIteratorHelper$b(plan.widgets || []);
39503
40361
  _context2.prev = 2;
39504
40362
  _iterator2.s();
39505
40363
  case 3:
@@ -40364,7 +41222,7 @@ function DependencyTable(_ref4) {
40364
41222
  // row. Each row shows the list of component widgets that live inside it
40365
41223
  // so the user knows what's getting published.
40366
41224
  var byKey = new Map();
40367
- var _iterator3 = _createForOfIteratorHelper$c(plan.widgets || []),
41225
+ var _iterator3 = _createForOfIteratorHelper$b(plan.widgets || []),
40368
41226
  _step4;
40369
41227
  try {
40370
41228
  for (_iterator3.s(); !(_step4 = _iterator3.n()).done;) {
@@ -43994,9 +44852,9 @@ var McpCatalogDetail = function McpCatalogDetail(_ref) {
43994
44852
 
43995
44853
  function ownKeys$j(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
43996
44854
  function _objectSpread$j(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$j(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$j(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
43997
- function _createForOfIteratorHelper$b(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$b(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
43998
- function _unsupportedIterableToArray$b(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$b(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$b(r, a) : void 0; } }
43999
- function _arrayLikeToArray$b(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
44855
+ function _createForOfIteratorHelper$a(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$a(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
44856
+ function _unsupportedIterableToArray$a(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$a(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$a(r, a) : void 0; } }
44857
+ function _arrayLikeToArray$a(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
44000
44858
  function isValidWsUrl(url) {
44001
44859
  if (!url) return false;
44002
44860
  try {
@@ -44043,7 +44901,7 @@ function extractCredentialFields(url, headerRows) {
44043
44901
  fields.add(match[1]);
44044
44902
  }
44045
44903
  }
44046
- var _iterator = _createForOfIteratorHelper$b(headerRows),
44904
+ var _iterator = _createForOfIteratorHelper$a(headerRows),
44047
44905
  _step;
44048
44906
  try {
44049
44907
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -44146,7 +45004,7 @@ var WebSocketProviderForm = function WebSocketProviderForm(_ref) {
44146
45004
  if (!url.trim()) errs.url = "WebSocket URL is required";else if (!isValidWsUrl(url)) errs.url = "URL must start with ws:// or wss://";
44147
45005
 
44148
45006
  // Check required credential fields are filled
44149
- var _iterator2 = _createForOfIteratorHelper$b(credentialFields),
45007
+ var _iterator2 = _createForOfIteratorHelper$a(credentialFields),
44150
45008
  _step2;
44151
45009
  try {
44152
45010
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -44169,7 +45027,7 @@ var WebSocketProviderForm = function WebSocketProviderForm(_ref) {
44169
45027
 
44170
45028
  // Build headers object from rows
44171
45029
  var headers = {};
44172
- var _iterator3 = _createForOfIteratorHelper$b(headerRows),
45030
+ var _iterator3 = _createForOfIteratorHelper$a(headerRows),
44173
45031
  _step3;
44174
45032
  try {
44175
45033
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -44238,7 +45096,7 @@ var WebSocketProviderForm = function WebSocketProviderForm(_ref) {
44238
45096
 
44239
45097
  // Build config from current form state (same as handleSave)
44240
45098
  headers = {};
44241
- _iterator4 = _createForOfIteratorHelper$b(headerRows);
45099
+ _iterator4 = _createForOfIteratorHelper$a(headerRows);
44242
45100
  try {
44243
45101
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
44244
45102
  row = _step4.value;
@@ -47397,9 +48255,9 @@ var InstallWidgetPicker = function InstallWidgetPicker(_ref2) {
47397
48255
 
47398
48256
  function ownKeys$g(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
47399
48257
  function _objectSpread$g(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$g(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$g(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
47400
- function _createForOfIteratorHelper$a(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$a(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
47401
- function _unsupportedIterableToArray$a(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$a(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$a(r, a) : void 0; } }
47402
- function _arrayLikeToArray$a(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
48258
+ function _createForOfIteratorHelper$9(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$9(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
48259
+ function _unsupportedIterableToArray$9(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$9(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$9(r, a) : void 0; } }
48260
+ function _arrayLikeToArray$9(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
47403
48261
  var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
47404
48262
  var onBack = _ref.onBack;
47405
48263
  var _useContext = React.useContext(DashReact.ThemeContext),
@@ -47506,7 +48364,7 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
47506
48364
  case 1:
47507
48365
  widgets = _context2.sent;
47508
48366
  names = new Set();
47509
- _iterator = _createForOfIteratorHelper$a(widgets);
48367
+ _iterator = _createForOfIteratorHelper$9(widgets);
47510
48368
  try {
47511
48369
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
47512
48370
  w = _step.value;
@@ -47612,12 +48470,12 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
47612
48470
  var checkToolConflicts = function checkToolConflicts(widget) {
47613
48471
  var conflicts = [];
47614
48472
  var packageWidgets = widget.packageWidgets || [];
47615
- var _iterator2 = _createForOfIteratorHelper$a(packageWidgets),
48473
+ var _iterator2 = _createForOfIteratorHelper$9(packageWidgets),
47616
48474
  _step2;
47617
48475
  try {
47618
48476
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
47619
48477
  var w = _step2.value;
47620
- var _iterator3 = _createForOfIteratorHelper$a(w.providers || []),
48478
+ var _iterator3 = _createForOfIteratorHelper$9(w.providers || []),
47621
48479
  _step3;
47622
48480
  try {
47623
48481
  var _loop = function _loop() {
@@ -47630,7 +48488,7 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
47630
48488
  prov = _ref5[1];
47631
48489
  return prov.type === p.type && prov.providerClass === "mcp" && prov.allowedTools;
47632
48490
  });
47633
- var _iterator4 = _createForOfIteratorHelper$a(matchingProviders),
48491
+ var _iterator4 = _createForOfIteratorHelper$9(matchingProviders),
47634
48492
  _step4;
47635
48493
  try {
47636
48494
  var _loop2 = function _loop2() {
@@ -47953,9 +48811,9 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
47953
48811
  });
47954
48812
  };
47955
48813
 
47956
- function _createForOfIteratorHelper$9(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$9(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
47957
- function _unsupportedIterableToArray$9(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$9(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$9(r, a) : void 0; } }
47958
- function _arrayLikeToArray$9(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
48814
+ function _createForOfIteratorHelper$8(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$8(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
48815
+ function _unsupportedIterableToArray$8(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$8(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$8(r, a) : void 0; } }
48816
+ function _arrayLikeToArray$8(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
47959
48817
 
47960
48818
  /**
47961
48819
  * Walk a workspace layout and collect widget component keys that are
@@ -47969,7 +48827,7 @@ function collectComponentsFromLayout(layout) {
47969
48827
 
47970
48828
  // Collect IDs of layout items that are actively referenced by grid cells
47971
48829
  var activeItemIds = new Set();
47972
- var _iterator = _createForOfIteratorHelper$9(layout),
48830
+ var _iterator = _createForOfIteratorHelper$8(layout),
47973
48831
  _step;
47974
48832
  try {
47975
48833
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -47989,7 +48847,7 @@ function collectComponentsFromLayout(layout) {
47989
48847
  } finally {
47990
48848
  _iterator.f();
47991
48849
  }
47992
- var _iterator2 = _createForOfIteratorHelper$9(layout),
48850
+ var _iterator2 = _createForOfIteratorHelper$8(layout),
47993
48851
  _step2;
47994
48852
  try {
47995
48853
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -48023,7 +48881,7 @@ function findWidgetUsage(componentNames, workspaces) {
48023
48881
  if (!(componentNames !== null && componentNames !== void 0 && componentNames.length) || !(workspaces !== null && workspaces !== void 0 && workspaces.length)) return [];
48024
48882
  var nameSet = new Set(componentNames);
48025
48883
  var results = [];
48026
- var _iterator3 = _createForOfIteratorHelper$9(workspaces),
48884
+ var _iterator3 = _createForOfIteratorHelper$8(workspaces),
48027
48885
  _step3;
48028
48886
  try {
48029
48887
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -48258,9 +49116,9 @@ var useInstalledWidgets = function useInstalledWidgets() {
48258
49116
  };
48259
49117
  };
48260
49118
 
48261
- function _createForOfIteratorHelper$8(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$8(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
48262
- function _unsupportedIterableToArray$8(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$8(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$8(r, a) : void 0; } }
48263
- function _arrayLikeToArray$8(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
49119
+ function _createForOfIteratorHelper$7(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$7(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
49120
+ function _unsupportedIterableToArray$7(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$7(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$7(r, a) : void 0; } }
49121
+ function _arrayLikeToArray$7(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
48264
49122
 
48265
49123
  /**
48266
49124
  * useWidgetUpdates — checks the registry for newer versions of installed widgets
@@ -48390,7 +49248,7 @@ function useWidgetUpdates() {
48390
49248
  // (install replaces the entire package, not just one widget)
48391
49249
  setUpdates(function (prev) {
48392
49250
  var next = new Map(prev);
48393
- var _iterator = _createForOfIteratorHelper$8(next),
49251
+ var _iterator = _createForOfIteratorHelper$7(next),
48394
49252
  _step;
48395
49253
  try {
48396
49254
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -52031,9 +52889,9 @@ var PopoverItem = function PopoverItem(_ref6) {
52031
52889
  });
52032
52890
  };
52033
52891
 
52034
- function _createForOfIteratorHelper$7(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$7(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
52035
- function _unsupportedIterableToArray$7(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$7(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$7(r, a) : void 0; } }
52036
- function _arrayLikeToArray$7(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
52892
+ function _createForOfIteratorHelper$6(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$6(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
52893
+ function _unsupportedIterableToArray$6(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$6(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$6(r, a) : void 0; } }
52894
+ function _arrayLikeToArray$6(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
52037
52895
  function ownKeys$9(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
52038
52896
  function _objectSpread$9(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$9(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$9(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
52039
52897
  var DraggableWidgetItem = function DraggableWidgetItem(_ref) {
@@ -52575,7 +53433,7 @@ var WidgetSidebar = function WidgetSidebar(_ref4) {
52575
53433
  return _context2.abrupt("return");
52576
53434
  case 2:
52577
53435
  names = new Set();
52578
- _iterator = _createForOfIteratorHelper$7(widgets);
53436
+ _iterator = _createForOfIteratorHelper$6(widgets);
52579
53437
  try {
52580
53438
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
52581
53439
  w = _step.value;
@@ -52963,9 +53821,9 @@ var useMissingWidgets = function useMissingWidgets(workspace) {
52963
53821
 
52964
53822
  function ownKeys$8(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
52965
53823
  function _objectSpread$8(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$8(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$8(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
52966
- function _createForOfIteratorHelper$6(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$6(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
52967
- function _unsupportedIterableToArray$6(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$6(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$6(r, a) : void 0; } }
52968
- function _arrayLikeToArray$6(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
53824
+ function _createForOfIteratorHelper$5(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$5(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
53825
+ function _unsupportedIterableToArray$5(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$5(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$5(r, a) : void 0; } }
53826
+ function _arrayLikeToArray$5(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
52969
53827
  var MissingWidgetsModal = function MissingWidgetsModal(_ref) {
52970
53828
  var _ref$missingComponent = _ref.missingComponents,
52971
53829
  missingComponents = _ref$missingComponent === void 0 ? [] : _ref$missingComponent,
@@ -53016,7 +53874,7 @@ var MissingWidgetsModal = function MissingWidgetsModal(_ref) {
53016
53874
  case 0:
53017
53875
  results = [];
53018
53876
  seen = new Set();
53019
- _iterator = _createForOfIteratorHelper$6(missingComponents);
53877
+ _iterator = _createForOfIteratorHelper$5(missingComponents);
53020
53878
  _context2.prev = 1;
53021
53879
  _loop = /*#__PURE__*/_regeneratorRuntime.mark(function _loop() {
53022
53880
  var componentKey, _getWidgetSearchQuery, packageName, widgetName, pkg, result;
@@ -53337,261 +54195,6 @@ var MissingWidgetsModal = function MissingWidgetsModal(_ref) {
53337
54195
  });
53338
54196
  };
53339
54197
 
53340
- function _createForOfIteratorHelper$5(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$5(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
53341
- function _unsupportedIterableToArray$5(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$5(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$5(r, a) : void 0; } }
53342
- function _arrayLikeToArray$5(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
53343
- /**
53344
- * providerResolution.js
53345
- *
53346
- * Shared helpers for walking a workspace and figuring out which widgets
53347
- * have required providers that are still unresolved after the 3-layer
53348
- * resolution (widget → workspace → app-default → null). Used by:
53349
- *
53350
- * - DashboardConfigModal to render the Providers tab
53351
- * - DashboardStage toolbar to show the unresolved-count badge
53352
- *
53353
- * Both places need the same answer, so keep the logic here to avoid drift
53354
- * with the resolution inside `useMcpProvider` / `useWebSocketProvider`.
53355
- */
53356
-
53357
- /**
53358
- * Resolve which provider name a given widget instance would bind to for
53359
- * the given provider type. Mirrors the 3-layer chain in useMcpProvider
53360
- * and useWebSocketProvider exactly:
53361
- *
53362
- * 1. widget-level override (layoutItem.selectedProviders[type])
53363
- * 2. workspace-level binding (workspace.selectedProviders[id][type])
53364
- * 3. app default (any provider of matching type flagged
53365
- * `isDefaultForType` in appProviders)
53366
- * 4. null (truly unresolved)
53367
- */
53368
- function resolveProviderName(_ref) {
53369
- var _layoutItem$selectedP, _workspace$selectedPr;
53370
- var providerType = _ref.providerType,
53371
- layoutItem = _ref.layoutItem,
53372
- widgetId = _ref.widgetId,
53373
- workspace = _ref.workspace,
53374
- appProviders = _ref.appProviders;
53375
- // 1. Widget-level
53376
- var widgetLevel = layoutItem === null || layoutItem === void 0 || (_layoutItem$selectedP = layoutItem.selectedProviders) === null || _layoutItem$selectedP === void 0 ? void 0 : _layoutItem$selectedP[providerType];
53377
- if (widgetLevel) return widgetLevel;
53378
-
53379
- // 2. Workspace-level
53380
- var workspaceLevel = widgetId && (workspace === null || workspace === void 0 || (_workspace$selectedPr = workspace.selectedProviders) === null || _workspace$selectedPr === void 0 || (_workspace$selectedPr = _workspace$selectedPr[widgetId]) === null || _workspace$selectedPr === void 0 ? void 0 : _workspace$selectedPr[providerType]);
53381
- if (workspaceLevel) return workspaceLevel;
53382
-
53383
- // 3. App default — appProviders is either a map keyed by name or an
53384
- // array. Support both because different callers shape it either way.
53385
- if (appProviders) {
53386
- if (Array.isArray(appProviders)) {
53387
- var _iterator = _createForOfIteratorHelper$5(appProviders),
53388
- _step;
53389
- try {
53390
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
53391
- var data = _step.value;
53392
- if ((data === null || data === void 0 ? void 0 : data.type) === providerType && (data === null || data === void 0 ? void 0 : data.isDefaultForType) === true) {
53393
- return data.name;
53394
- }
53395
- }
53396
- } catch (err) {
53397
- _iterator.e(err);
53398
- } finally {
53399
- _iterator.f();
53400
- }
53401
- } else if (_typeof(appProviders) === "object") {
53402
- for (var _i = 0, _Object$entries = Object.entries(appProviders); _i < _Object$entries.length; _i++) {
53403
- var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
53404
- name = _Object$entries$_i[0],
53405
- _data = _Object$entries$_i[1];
53406
- if ((_data === null || _data === void 0 ? void 0 : _data.type) === providerType && (_data === null || _data === void 0 ? void 0 : _data.isDefaultForType) === true) {
53407
- return name;
53408
- }
53409
- }
53410
- }
53411
- }
53412
- return null;
53413
- }
53414
-
53415
- /**
53416
- * Walk every layout container in a workspace and yield each widget
53417
- * instance with its concrete layout item. Handles the main layout,
53418
- * per-page layouts, the sidebar, and nested LayoutGridContainers whose
53419
- * children are stored on `items`/`layout`.
53420
- */
53421
- function forEachWidget(workspace, visit) {
53422
- if (!workspace) return;
53423
- var _walk = function walk(items) {
53424
- if (!Array.isArray(items)) return;
53425
- var _iterator2 = _createForOfIteratorHelper$5(items),
53426
- _step2;
53427
- try {
53428
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
53429
- var item = _step2.value;
53430
- if (!item || _typeof(item) !== "object") continue;
53431
- // A "widget" is any layout item with a component name.
53432
- // Containers can have both a component name AND nested items
53433
- // (e.g. LayoutGridContainer), so still recurse.
53434
- if (item.component) visit(item);
53435
- if (Array.isArray(item.items)) _walk(item.items);
53436
- if (Array.isArray(item.layout)) _walk(item.layout);
53437
- }
53438
- } catch (err) {
53439
- _iterator2.e(err);
53440
- } finally {
53441
- _iterator2.f();
53442
- }
53443
- };
53444
- _walk(workspace.layout);
53445
- if (Array.isArray(workspace.pages)) {
53446
- var _iterator3 = _createForOfIteratorHelper$5(workspace.pages),
53447
- _step3;
53448
- try {
53449
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
53450
- var page = _step3.value;
53451
- _walk(page === null || page === void 0 ? void 0 : page.layout);
53452
- }
53453
- } catch (err) {
53454
- _iterator3.e(err);
53455
- } finally {
53456
- _iterator3.f();
53457
- }
53458
- }
53459
- _walk(workspace.sidebarLayout);
53460
- }
53461
-
53462
- /**
53463
- * Compute the list of unresolved required providers across a workspace.
53464
- *
53465
- * @param {object} args
53466
- * @param {object} args.workspace The workspace (with layout/pages/sidebarLayout/selectedProviders).
53467
- * @param {object|Array} args.appProviders
53468
- * Map keyed by provider name, or an array of provider objects. Each
53469
- * entry has at least `{ type, isDefaultForType }`.
53470
- * @param {(componentName: string) => Array<{type, required?, providerClass?}>} args.getWidgetRequirements
53471
- * Returns the `providers: [...]` declaration from the component's
53472
- * `.dash.js` (via `ComponentManager.componentMap()[name].providers`).
53473
- *
53474
- * @returns {Array<{ widgetId, component, providerType, providerClass, layoutItem }>}
53475
- * One entry per (widget instance, required provider type) that lacks
53476
- * a binding.
53477
- */
53478
- function getUnresolvedProviders(_ref2) {
53479
- var workspace = _ref2.workspace,
53480
- appProviders = _ref2.appProviders,
53481
- getWidgetRequirements = _ref2.getWidgetRequirements;
53482
- if (!workspace || typeof getWidgetRequirements !== "function") return [];
53483
- var unresolved = [];
53484
- forEachWidget(workspace, function (item) {
53485
- var requirements = getWidgetRequirements(item.component) || [];
53486
- if (!Array.isArray(requirements) || requirements.length === 0) return;
53487
- var widgetId = item.uuidString || item.uuid || item.id || null;
53488
- var _iterator4 = _createForOfIteratorHelper$5(requirements),
53489
- _step4;
53490
- try {
53491
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
53492
- var req = _step4.value;
53493
- if (!req || !req.type) continue;
53494
- if (req.required === false) continue; // optional, skip
53495
-
53496
- var name = resolveProviderName({
53497
- providerType: req.type,
53498
- layoutItem: item,
53499
- widgetId: widgetId,
53500
- workspace: workspace,
53501
- appProviders: appProviders
53502
- });
53503
- if (!name) {
53504
- unresolved.push({
53505
- widgetId: widgetId,
53506
- component: item.component,
53507
- providerType: req.type,
53508
- providerClass: req.providerClass || null,
53509
- layoutItem: item
53510
- });
53511
- }
53512
- }
53513
- } catch (err) {
53514
- _iterator4.e(err);
53515
- } finally {
53516
- _iterator4.f();
53517
- }
53518
- });
53519
- return unresolved;
53520
- }
53521
-
53522
- /**
53523
- * Group an unresolved-provider list (or any `{widget, providerType}` list)
53524
- * by provider type, so the Providers tab can render one row per unique
53525
- * type with N widgets beneath.
53526
- */
53527
- function groupByProviderType(unresolved) {
53528
- var byType = new Map();
53529
- var _iterator5 = _createForOfIteratorHelper$5(unresolved || []),
53530
- _step5;
53531
- try {
53532
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
53533
- var u = _step5.value;
53534
- if (!(u !== null && u !== void 0 && u.providerType)) continue;
53535
- if (!byType.has(u.providerType)) byType.set(u.providerType, []);
53536
- byType.get(u.providerType).push(u);
53537
- }
53538
- } catch (err) {
53539
- _iterator5.e(err);
53540
- } finally {
53541
- _iterator5.f();
53542
- }
53543
- return byType;
53544
- }
53545
-
53546
- /**
53547
- * Summarize every widget in the workspace that requires ANY provider,
53548
- * regardless of whether it's already resolved. Drives the Providers tab's
53549
- * "show per-widget overrides" expansion — the modal lists all widgets so
53550
- * the user can change an explicit override even for types that are
53551
- * already resolved via the app default.
53552
- */
53553
- function getAllProviderBindings(_ref3) {
53554
- var workspace = _ref3.workspace,
53555
- appProviders = _ref3.appProviders,
53556
- getWidgetRequirements = _ref3.getWidgetRequirements;
53557
- if (!workspace || typeof getWidgetRequirements !== "function") return [];
53558
- var bindings = [];
53559
- forEachWidget(workspace, function (item) {
53560
- var requirements = getWidgetRequirements(item.component) || [];
53561
- if (!Array.isArray(requirements) || requirements.length === 0) return;
53562
- var widgetId = item.uuidString || item.uuid || item.id || null;
53563
- var _iterator6 = _createForOfIteratorHelper$5(requirements),
53564
- _step6;
53565
- try {
53566
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
53567
- var req = _step6.value;
53568
- if (!req || !req.type) continue;
53569
- var name = resolveProviderName({
53570
- providerType: req.type,
53571
- layoutItem: item,
53572
- widgetId: widgetId,
53573
- workspace: workspace,
53574
- appProviders: appProviders
53575
- });
53576
- bindings.push({
53577
- widgetId: widgetId,
53578
- component: item.component,
53579
- providerType: req.type,
53580
- providerClass: req.providerClass || null,
53581
- required: req.required !== false,
53582
- resolvedProviderName: name,
53583
- layoutItem: item
53584
- });
53585
- }
53586
- } catch (err) {
53587
- _iterator6.e(err);
53588
- } finally {
53589
- _iterator6.f();
53590
- }
53591
- });
53592
- return bindings;
53593
- }
53594
-
53595
54198
  function _createForOfIteratorHelper$4(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$4(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
53596
54199
  function _unsupportedIterableToArray$4(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$4(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$4(r, a) : void 0; } }
53597
54200
  function _arrayLikeToArray$4(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -53603,19 +54206,43 @@ var DashboardConfigModal = function DashboardConfigModal(_ref) {
53603
54206
  workspace = _ref.workspace,
53604
54207
  appProviders = _ref.appProviders,
53605
54208
  getWidgetRequirements = _ref.getWidgetRequirements,
53606
- onSaveBindings = _ref.onSaveBindings;
54209
+ _ref$getWidgetConfig = _ref.getWidgetConfig,
54210
+ getWidgetConfig = _ref$getWidgetConfig === void 0 ? null : _ref$getWidgetConfig,
54211
+ onSaveBindings = _ref.onSaveBindings,
54212
+ onSaveListeners = _ref.onSaveListeners,
54213
+ _ref$initialTab = _ref.initialTab,
54214
+ initialTab = _ref$initialTab === void 0 ? "providers" : _ref$initialTab;
53607
54215
  var _useContext = React.useContext(DashReact.ThemeContext),
53608
54216
  currentTheme = _useContext.currentTheme;
53609
54217
  var panelStyles = DashReact.getStylesForItem(DashReact.themeObjects.PANEL, currentTheme, {
53610
54218
  grow: false
53611
54219
  });
53612
54220
 
54221
+ // Active tab. Defaults to whatever the parent requested via
54222
+ // `initialTab`. Resets on each open via the modal's mount cycle.
54223
+ var _useState = React.useState(initialTab),
54224
+ _useState2 = _slicedToArray(_useState, 2),
54225
+ activeTab = _useState2[0],
54226
+ setActiveTab = _useState2[1];
54227
+
53613
54228
  // Staged changes: widgetId -> { [providerType]: providerName }. Empty
53614
54229
  // until the user picks something; applied on Save via onSaveBindings.
53615
- var _useState = React.useState({}),
53616
- _useState2 = _slicedToArray(_useState, 2),
53617
- staged = _useState2[0],
53618
- setStaged = _useState2[1];
54230
+ var _useState3 = React.useState({}),
54231
+ _useState4 = _slicedToArray(_useState3, 2),
54232
+ staged = _useState4[0],
54233
+ setStaged = _useState4[1];
54234
+
54235
+ // Staged listener changes — collected in the Listeners tab's UI and
54236
+ // committed alongside provider changes when the user clicks Save.
54237
+ // Shape: { adds: [...], removes: [...] } where each item is
54238
+ // { receiverItemId, handlerName, sourceComponent, sourceItemId, eventName, raw? }.
54239
+ var _useState5 = React.useState({
54240
+ adds: [],
54241
+ removes: []
54242
+ }),
54243
+ _useState6 = _slicedToArray(_useState5, 2),
54244
+ stagedListeners = _useState6[0],
54245
+ setStagedListeners = _useState6[1];
53619
54246
  var bindings = React.useMemo(function () {
53620
54247
  return getAllProviderBindings({
53621
54248
  workspace: workspace,
@@ -53681,9 +54308,98 @@ var DashboardConfigModal = function DashboardConfigModal(_ref) {
53681
54308
  var unresolvedCount = effectiveBindings.filter(function (b) {
53682
54309
  return b.required && !b.resolvedProviderName;
53683
54310
  }).length;
54311
+
54312
+ // Listeners tab data — emitter list, receiver list, current wiring,
54313
+ // orphans. All recompute when the workspace or staged delta changes
54314
+ // so the UI reflects pending edits without saving first.
54315
+ var wConfig = React.useMemo(function () {
54316
+ return typeof getWidgetConfig === "function" ? getWidgetConfig : function () {
54317
+ return null;
54318
+ };
54319
+ }, [getWidgetConfig]);
54320
+ var emitters = React.useMemo(function () {
54321
+ return getEmitters(workspace, wConfig);
54322
+ }, [workspace, wConfig]);
54323
+ var receivers = React.useMemo(function () {
54324
+ return getReceivers(workspace, wConfig);
54325
+ }, [workspace, wConfig]);
54326
+ var persistedWiring = React.useMemo(function () {
54327
+ return getCurrentWiring(workspace);
54328
+ }, [workspace]);
54329
+ var orphans = React.useMemo(function () {
54330
+ return getOrphanedListeners(workspace, wConfig);
54331
+ }, [workspace, wConfig]);
54332
+ var effectiveWiring = React.useMemo(function () {
54333
+ // Apply staged removes/adds to the persisted wiring for an
54334
+ // accurate "what will be there after save" view, then annotate
54335
+ // each entry with its orphan reason (if any) so HandlerCard chips
54336
+ // can render a stale-binding warning inline.
54337
+ var next = persistedWiring;
54338
+ if (stagedListeners.removes.length > 0) {
54339
+ next = next.filter(function (w) {
54340
+ return !stagedListeners.removes.some(function (r) {
54341
+ return sameWiringEntry(r, w);
54342
+ });
54343
+ });
54344
+ }
54345
+ if (stagedListeners.adds.length > 0) {
54346
+ // Append; avoid duplicates against current state.
54347
+ var _iterator2 = _createForOfIteratorHelper$4(stagedListeners.adds),
54348
+ _step2;
54349
+ try {
54350
+ var _loop = function _loop() {
54351
+ var a = _step2.value;
54352
+ if (!next.some(function (w) {
54353
+ return sameWiringEntry(w, a);
54354
+ })) {
54355
+ next = [].concat(_toConsumableArray(next), [_objectSpread$7(_objectSpread$7({}, a), {}, {
54356
+ raw: formatEventString(a.sourceComponent, a.sourceItemId, a.eventName)
54357
+ })]);
54358
+ }
54359
+ };
54360
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
54361
+ _loop();
54362
+ }
54363
+ } catch (err) {
54364
+ _iterator2.e(err);
54365
+ } finally {
54366
+ _iterator2.f();
54367
+ }
54368
+ }
54369
+ if (orphans.length === 0) return next;
54370
+ var orphanIndex = new Map();
54371
+ var _iterator3 = _createForOfIteratorHelper$4(orphans),
54372
+ _step3;
54373
+ try {
54374
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
54375
+ var o = _step3.value;
54376
+ orphanIndex.set("".concat(o.receiverItemId, "|").concat(o.handlerName, "|").concat(o.sourceComponent, "|").concat(o.sourceItemId, "|").concat(o.eventName), o.reason);
54377
+ }
54378
+ } catch (err) {
54379
+ _iterator3.e(err);
54380
+ } finally {
54381
+ _iterator3.f();
54382
+ }
54383
+ return next.map(function (w) {
54384
+ var key = "".concat(w.receiverItemId, "|").concat(w.handlerName, "|").concat(w.sourceComponent, "|").concat(w.sourceItemId, "|").concat(w.eventName);
54385
+ var reason = orphanIndex.get(key);
54386
+ return reason ? _objectSpread$7(_objectSpread$7({}, w), {}, {
54387
+ isOrphan: true,
54388
+ orphanReason: reason
54389
+ }) : w;
54390
+ });
54391
+ }, [persistedWiring, stagedListeners, orphans]);
54392
+ // Orphans reduced by what the user has already staged for removal.
54393
+ React.useMemo(function () {
54394
+ return orphans.filter(function (o) {
54395
+ return !stagedListeners.removes.some(function (r) {
54396
+ return sameWiringEntry(r, o);
54397
+ });
54398
+ });
54399
+ }, [orphans, stagedListeners.removes]);
53684
54400
  var hasStagedChanges = Object.keys(staged).some(function (wid) {
53685
54401
  return Object.keys(staged[wid] || {}).length > 0;
53686
- });
54402
+ }) || stagedListeners.adds.length > 0 || stagedListeners.removes.length > 0;
53687
54403
  function stageBinding(widgetId, providerType, providerName) {
53688
54404
  setStaged(function (prev) {
53689
54405
  var next = _objectSpread$7({}, prev);
@@ -53703,24 +54419,75 @@ var DashboardConfigModal = function DashboardConfigModal(_ref) {
53703
54419
  });
53704
54420
  setStaged(function (prev) {
53705
54421
  var next = _objectSpread$7({}, prev);
53706
- var _iterator2 = _createForOfIteratorHelper$4(affected),
53707
- _step2;
54422
+ var _iterator4 = _createForOfIteratorHelper$4(affected),
54423
+ _step4;
53708
54424
  try {
53709
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
53710
- var b = _step2.value;
54425
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
54426
+ var b = _step4.value;
53711
54427
  if (!b.widgetId) continue;
53712
54428
  next[b.widgetId] = _objectSpread$7(_objectSpread$7({}, next[b.widgetId] || {}), {}, _defineProperty({}, providerType, providerName || ""));
53713
54429
  }
53714
54430
  } catch (err) {
53715
- _iterator2.e(err);
54431
+ _iterator4.e(err);
53716
54432
  } finally {
53717
- _iterator2.f();
54433
+ _iterator4.f();
53718
54434
  }
53719
54435
  return next;
53720
54436
  });
53721
54437
  }
54438
+
54439
+ // Listener tab staging helpers. We treat add/remove as queue
54440
+ // operations so the user can build up several edits before
54441
+ // committing. Toggling a binding that's already staged in the
54442
+ // opposite direction cancels the staged change rather than queuing
54443
+ // both — keeps the diff minimal and the save predictable.
54444
+ var stageListenerAdd = function stageListenerAdd(entry) {
54445
+ setStagedListeners(function (prev) {
54446
+ var removeIdx = prev.removes.findIndex(function (r) {
54447
+ return sameWiringEntry(r, entry);
54448
+ });
54449
+ if (removeIdx >= 0) {
54450
+ return {
54451
+ adds: prev.adds,
54452
+ removes: prev.removes.filter(function (_, i) {
54453
+ return i !== removeIdx;
54454
+ })
54455
+ };
54456
+ }
54457
+ if (prev.adds.some(function (a) {
54458
+ return sameWiringEntry(a, entry);
54459
+ })) return prev;
54460
+ return {
54461
+ adds: [].concat(_toConsumableArray(prev.adds), [entry]),
54462
+ removes: prev.removes
54463
+ };
54464
+ });
54465
+ };
54466
+ var stageListenerRemove = function stageListenerRemove(entry) {
54467
+ setStagedListeners(function (prev) {
54468
+ var addIdx = prev.adds.findIndex(function (a) {
54469
+ return sameWiringEntry(a, entry);
54470
+ });
54471
+ if (addIdx >= 0) {
54472
+ return {
54473
+ adds: prev.adds.filter(function (_, i) {
54474
+ return i !== addIdx;
54475
+ }),
54476
+ removes: prev.removes
54477
+ };
54478
+ }
54479
+ if (prev.removes.some(function (r) {
54480
+ return sameWiringEntry(r, entry);
54481
+ })) return prev;
54482
+ return {
54483
+ adds: prev.adds,
54484
+ removes: [].concat(_toConsumableArray(prev.removes), [entry])
54485
+ };
54486
+ });
54487
+ };
53722
54488
  function handleSave() {
53723
- var changes = [];
54489
+ // Provider changes
54490
+ var providerChanges = [];
53724
54491
  for (var _i2 = 0, _Object$entries2 = Object.entries(staged); _i2 < _Object$entries2.length; _i2++) {
53725
54492
  var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2),
53726
54493
  widgetId = _Object$entries2$_i[0],
@@ -53729,31 +54496,44 @@ var DashboardConfigModal = function DashboardConfigModal(_ref) {
53729
54496
  var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i3], 2),
53730
54497
  providerType = _Object$entries3$_i[0],
53731
54498
  providerName = _Object$entries3$_i[1];
53732
- changes.push({
54499
+ providerChanges.push({
53733
54500
  widgetId: widgetId,
53734
54501
  providerType: providerType,
53735
54502
  providerName: providerName || null
53736
54503
  });
53737
54504
  }
53738
54505
  }
53739
- if (typeof onSaveBindings === "function") onSaveBindings(changes);
54506
+ if (providerChanges.length > 0 && typeof onSaveBindings === "function") {
54507
+ onSaveBindings(providerChanges);
54508
+ }
54509
+
54510
+ // Listener changes
54511
+ if ((stagedListeners.adds.length > 0 || stagedListeners.removes.length > 0) && typeof onSaveListeners === "function") {
54512
+ onSaveListeners(stagedListeners);
54513
+ }
53740
54514
  setStaged({});
54515
+ setStagedListeners({
54516
+ adds: [],
54517
+ removes: []
54518
+ });
53741
54519
  setIsOpen(false);
53742
54520
  }
53743
54521
  function handleCancel() {
53744
54522
  setStaged({});
54523
+ setStagedListeners({
54524
+ adds: [],
54525
+ removes: []
54526
+ });
53745
54527
  setIsOpen(false);
53746
54528
  }
53747
54529
  if (!isOpen) return null;
53748
54530
  return /*#__PURE__*/jsxRuntime.jsx(DashReact.Modal, {
53749
54531
  isOpen: isOpen,
53750
54532
  setIsOpen: handleCancel,
53751
- width: "w-full max-w-3xl",
54533
+ width: "w-11/12 xl:w-5/6",
54534
+ height: "h-5/6",
53752
54535
  children: /*#__PURE__*/jsxRuntime.jsxs("div", {
53753
- className: "flex flex-col rounded-lg overflow-clip border ".concat(panelStyles.backgroundColor || "", " ").concat(panelStyles.borderColor || "", " ").concat(panelStyles.textColor || ""),
53754
- style: {
53755
- maxHeight: "80vh"
53756
- },
54536
+ className: "flex flex-col h-full w-full rounded-lg overflow-clip border ".concat(panelStyles.backgroundColor || "", " ").concat(panelStyles.borderColor || "", " ").concat(panelStyles.textColor || ""),
53757
54537
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
53758
54538
  className: "flex-shrink-0 flex flex-row items-center justify-between p-4 border-b border-white/10",
53759
54539
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
@@ -53779,47 +54559,37 @@ var DashboardConfigModal = function DashboardConfigModal(_ref) {
53779
54559
  })]
53780
54560
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
53781
54561
  className: "flex-shrink-0 flex flex-row items-center gap-2 px-4 pt-3 border-b border-white/10",
53782
- children: [/*#__PURE__*/jsxRuntime.jsx("div", {
53783
- className: "px-3 py-1.5 text-sm font-medium border-b-2 border-indigo-400 -mb-px",
53784
- children: "Providers"
53785
- }), /*#__PURE__*/jsxRuntime.jsx("div", {
53786
- className: "px-3 py-1.5 text-sm opacity-40 cursor-not-allowed",
53787
- children: "Listeners (coming soon)"
53788
- })]
53789
- }), /*#__PURE__*/jsxRuntime.jsxs("div", {
53790
- className: "p-5 space-y-4 overflow-y-auto flex-1",
53791
- children: [grouped.size === 0 && /*#__PURE__*/jsxRuntime.jsx("div", {
53792
- className: "text-sm opacity-60 text-center py-6",
53793
- children: "No widgets in this dashboard require providers."
53794
- }), Array.from(grouped.entries()).map(function (_ref2) {
53795
- var _ref3 = _slicedToArray(_ref2, 2),
53796
- providerType = _ref3[0],
53797
- rows = _ref3[1];
53798
- var options = providersByType.get(providerType) || [];
53799
- var unresolvedHere = rows.filter(function (r) {
53800
- return r.required && !r.resolvedProviderName;
53801
- }).length;
53802
- // The "top" dropdown reflects the currently-agreeable choice:
53803
- // if every row has the same resolved value, show it; otherwise
53804
- // show "" (mixed) so the dropdown is neutral.
53805
- var allSame = rows.every(function (r) {
53806
- return r.resolvedProviderName === rows[0].resolvedProviderName;
53807
- });
53808
- var topValue = allSame ? rows[0].resolvedProviderName || "" : "";
53809
- return /*#__PURE__*/jsxRuntime.jsx(ProviderTypeRow, {
53810
- providerType: providerType,
53811
- rows: rows,
53812
- options: options,
53813
- topValue: topValue,
53814
- unresolvedHere: unresolvedHere,
53815
- onBulk: function onBulk(name) {
53816
- return stageBulk(providerType, name);
53817
- },
53818
- onPerWidget: function onPerWidget(widgetId, name) {
53819
- return stageBinding(widgetId, providerType, name);
53820
- }
53821
- }, providerType);
54562
+ children: [/*#__PURE__*/jsxRuntime.jsxs("button", {
54563
+ type: "button",
54564
+ onClick: function onClick() {
54565
+ return setActiveTab("providers");
54566
+ },
54567
+ className: "px-3 py-1.5 text-sm font-medium -mb-px border-b-2 ".concat(activeTab === "providers" ? "border-indigo-400" : "border-transparent opacity-60 hover:opacity-100"),
54568
+ children: ["Providers", unresolvedCount > 0 && /*#__PURE__*/jsxRuntime.jsx("span", {
54569
+ className: "ml-2 inline-block h-1.5 w-1.5 rounded-full bg-amber-400 align-middle"
54570
+ })]
54571
+ }), /*#__PURE__*/jsxRuntime.jsx("button", {
54572
+ type: "button",
54573
+ onClick: function onClick() {
54574
+ return setActiveTab("listeners");
54575
+ },
54576
+ className: "px-3 py-1.5 text-sm font-medium -mb-px border-b-2 ".concat(activeTab === "listeners" ? "border-indigo-400" : "border-transparent opacity-60 hover:opacity-100"),
54577
+ children: "Listeners"
53822
54578
  })]
54579
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
54580
+ className: "p-5 flex-1 min-h-0",
54581
+ children: activeTab === "listeners" ? /*#__PURE__*/jsxRuntime.jsx(ListenersTab, {
54582
+ emitters: emitters,
54583
+ receivers: receivers,
54584
+ wiring: effectiveWiring,
54585
+ onAdd: stageListenerAdd,
54586
+ onRemove: stageListenerRemove
54587
+ }) : /*#__PURE__*/jsxRuntime.jsx(ProvidersTab, {
54588
+ grouped: grouped,
54589
+ providersByType: providersByType,
54590
+ onBulk: stageBulk,
54591
+ onPerWidget: stageBinding
54592
+ })
53823
54593
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
53824
54594
  className: "flex-shrink-0 flex flex-row justify-end gap-2 p-4 border-t border-white/10",
53825
54595
  children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.Button3, {
@@ -53836,114 +54606,507 @@ var DashboardConfigModal = function DashboardConfigModal(_ref) {
53836
54606
  };
53837
54607
 
53838
54608
  /**
53839
- * A single provider-type row: bulk dropdown + expandable per-widget
53840
- * list. Local state for whether the per-widget overrides panel is open.
54609
+ * Providers tab with a sidebar/detail layout mirroring the Listeners
54610
+ * tab. Column 1 lists provider types in this workspace (with an amber
54611
+ * dot per-type when any widget of that type is unresolved). Column 2
54612
+ * shows the selected type's bulk dropdown + per-widget dropdowns.
53841
54613
  */
53842
- function ProviderTypeRow(_ref4) {
53843
- var providerType = _ref4.providerType,
53844
- rows = _ref4.rows,
53845
- options = _ref4.options,
53846
- topValue = _ref4.topValue,
53847
- unresolvedHere = _ref4.unresolvedHere,
53848
- onBulk = _ref4.onBulk,
53849
- onPerWidget = _ref4.onPerWidget;
53850
- var _useState3 = React.useState(unresolvedHere > 0),
53851
- _useState4 = _slicedToArray(_useState3, 2),
53852
- expanded = _useState4[0],
53853
- setExpanded = _useState4[1];
53854
- var widgetCount = rows.length;
54614
+ function ProvidersTab(_ref2) {
54615
+ var _typeEntries$, _selectedRows$;
54616
+ var grouped = _ref2.grouped,
54617
+ providersByType = _ref2.providersByType,
54618
+ onBulk = _ref2.onBulk,
54619
+ onPerWidget = _ref2.onPerWidget;
54620
+ var typeEntries = React.useMemo(function () {
54621
+ return Array.from(grouped.entries());
54622
+ }, [grouped]);
54623
+ var _useState7 = React.useState(((_typeEntries$ = typeEntries[0]) === null || _typeEntries$ === void 0 ? void 0 : _typeEntries$[0]) || null),
54624
+ _useState8 = _slicedToArray(_useState7, 2),
54625
+ selectedType = _useState8[0],
54626
+ setSelectedType = _useState8[1];
54627
+
54628
+ // If the selected type disappears (workspace changed), fall back.
54629
+ React.useMemo(function () {
54630
+ if (selectedType && !grouped.has(selectedType)) {
54631
+ var _typeEntries$2;
54632
+ setSelectedType(((_typeEntries$2 = typeEntries[0]) === null || _typeEntries$2 === void 0 ? void 0 : _typeEntries$2[0]) || null);
54633
+ }
54634
+ }, [grouped, selectedType, typeEntries]);
54635
+ if (typeEntries.length === 0) {
54636
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
54637
+ className: "text-sm opacity-60 text-center py-6",
54638
+ children: "No widgets in this dashboard require providers."
54639
+ });
54640
+ }
54641
+ var selectedRows = selectedType ? grouped.get(selectedType) || [] : [];
54642
+ var selectedOptions = selectedType ? providersByType.get(selectedType) || [] : [];
54643
+ var allSame = selectedRows.length > 0 && selectedRows.every(function (r) {
54644
+ return r.resolvedProviderName === selectedRows[0].resolvedProviderName;
54645
+ });
54646
+ var topValue = allSame ? ((_selectedRows$ = selectedRows[0]) === null || _selectedRows$ === void 0 ? void 0 : _selectedRows$.resolvedProviderName) || "" : "";
53855
54647
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
53856
- className: "bg-white/5 border border-white/10 rounded-lg p-3 space-y-3",
54648
+ className: "flex flex-row gap-3 h-full min-h-0",
53857
54649
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
53858
- className: "flex flex-row items-center gap-3",
54650
+ className: "w-56 flex-shrink-0 bg-white/5 border border-white/10 rounded-lg overflow-hidden flex flex-col",
53859
54651
  children: [/*#__PURE__*/jsxRuntime.jsx("div", {
53860
- className: "flex-1 min-w-0",
53861
- children: /*#__PURE__*/jsxRuntime.jsxs("div", {
53862
- className: "text-sm font-semibold flex items-center gap-2",
53863
- children: [/*#__PURE__*/jsxRuntime.jsx("code", {
53864
- className: "text-xs bg-white/10 px-1.5 py-0.5 rounded",
53865
- children: providerType
53866
- }), /*#__PURE__*/jsxRuntime.jsxs("span", {
53867
- className: "text-xs opacity-60",
53868
- children: [widgetCount, " widget", widgetCount === 1 ? "" : "s"]
53869
- }), unresolvedHere > 0 && /*#__PURE__*/jsxRuntime.jsxs("span", {
53870
- className: "text-xs text-amber-300 flex items-center gap-1",
53871
- children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
53872
- icon: "triangle-exclamation",
53873
- className: "h-3 w-3"
53874
- }), unresolvedHere, " unresolved"]
53875
- })]
54652
+ className: "px-3 py-2 text-xs font-semibold opacity-50 uppercase tracking-wider border-b border-white/10",
54653
+ children: "Provider Types"
54654
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
54655
+ className: "overflow-y-auto flex-1",
54656
+ children: typeEntries.map(function (_ref3) {
54657
+ var _ref4 = _slicedToArray(_ref3, 2),
54658
+ providerType = _ref4[0],
54659
+ rows = _ref4[1];
54660
+ var isActive = selectedType === providerType;
54661
+ var unresolvedHere = rows.filter(function (r) {
54662
+ return r.required && !r.resolvedProviderName;
54663
+ }).length;
54664
+ return /*#__PURE__*/jsxRuntime.jsxs("button", {
54665
+ type: "button",
54666
+ onClick: function onClick() {
54667
+ return setSelectedType(providerType);
54668
+ },
54669
+ className: "w-full text-left px-3 py-2 border-l-2 ".concat(isActive ? "bg-indigo-900/30 border-indigo-400" : "border-transparent hover:bg-white/5"),
54670
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
54671
+ className: "flex items-center gap-2",
54672
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
54673
+ className: "text-sm font-medium truncate",
54674
+ children: providerType
54675
+ }), unresolvedHere > 0 && /*#__PURE__*/jsxRuntime.jsxs("span", {
54676
+ className: "text-[10px] text-amber-300 flex items-center gap-1",
54677
+ children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
54678
+ icon: "triangle-exclamation",
54679
+ className: "h-2.5 w-2.5"
54680
+ }), unresolvedHere]
54681
+ })]
54682
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
54683
+ className: "text-xs opacity-50 mt-0.5",
54684
+ children: [rows.length, " widget", rows.length === 1 ? "" : "s"]
54685
+ })]
54686
+ }, providerType);
53876
54687
  })
53877
- }), /*#__PURE__*/jsxRuntime.jsxs("select", {
53878
- value: topValue,
53879
- onChange: function onChange(e) {
53880
- return onBulk(e.target.value);
53881
- },
53882
- className: "bg-gray-800 border border-white/10 rounded px-3 py-1.5 text-sm min-w-[14rem]",
53883
- children: [/*#__PURE__*/jsxRuntime.jsx("option", {
53884
- value: "",
53885
- children: "\u2014 Select provider \u2014"
53886
- }), options.map(function (opt) {
53887
- return /*#__PURE__*/jsxRuntime.jsxs("option", {
53888
- value: opt.name,
53889
- children: [opt.name, opt.isDefaultForType ? " (default)" : ""]
53890
- }, opt.name);
53891
- })]
53892
54688
  })]
53893
- }), /*#__PURE__*/jsxRuntime.jsxs("button", {
53894
- type: "button",
53895
- onClick: function onClick() {
53896
- return setExpanded(function (v) {
53897
- return !v;
53898
- });
53899
- },
53900
- className: "text-xs opacity-60 hover:opacity-100 flex items-center gap-1",
53901
- children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
53902
- icon: expanded ? "chevron-down" : "chevron-right",
53903
- className: "h-3 w-3"
53904
- }), expanded ? "Hide" : "Show", " per-widget overrides"]
53905
- }), expanded && /*#__PURE__*/jsxRuntime.jsx("div", {
53906
- className: "pl-3 border-l border-white/10 space-y-2",
53907
- children: rows.map(function (row) {
53908
- var _row$layoutItem;
53909
- var hasExplicitOverride = !!((_row$layoutItem = row.layoutItem) !== null && _row$layoutItem !== void 0 && (_row$layoutItem = _row$layoutItem.selectedProviders) !== null && _row$layoutItem !== void 0 && _row$layoutItem[providerType]);
53910
- return /*#__PURE__*/jsxRuntime.jsxs("div", {
53911
- className: "flex flex-row items-center gap-3",
54689
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
54690
+ className: "flex-1 min-w-0 bg-white/5 border border-white/10 rounded-lg overflow-hidden flex flex-col",
54691
+ children: selectedType ? /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
54692
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
54693
+ className: "px-4 py-3 border-b border-white/10 flex-shrink-0",
53912
54694
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
53913
- className: "flex-1 min-w-0 text-xs",
54695
+ className: "text-sm font-semibold",
54696
+ children: [selectedType, " ", /*#__PURE__*/jsxRuntime.jsx("span", {
54697
+ className: "opacity-60 font-normal",
54698
+ children: "provider"
54699
+ })]
54700
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
54701
+ className: "text-xs opacity-60 mt-1",
54702
+ children: "Apply one provider to every widget of this type, or adjust per-widget below."
54703
+ })]
54704
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
54705
+ className: "flex-1 overflow-y-auto p-4 space-y-4",
54706
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
54707
+ className: "flex items-center gap-3",
53914
54708
  children: [/*#__PURE__*/jsxRuntime.jsx("span", {
53915
- className: "font-mono opacity-80 truncate",
53916
- children: row.component || "widget"
53917
- }), /*#__PURE__*/jsxRuntime.jsx("span", {
53918
- className: "opacity-40 mx-1",
53919
- children: "\xB7"
53920
- }), /*#__PURE__*/jsxRuntime.jsx("span", {
53921
- className: "font-mono opacity-40 truncate",
53922
- children: (row.widgetId || "").slice(0, 8)
53923
- }), hasExplicitOverride && /*#__PURE__*/jsxRuntime.jsx("span", {
53924
- className: "ml-2 text-[10px] text-indigo-300 uppercase tracking-wide",
53925
- children: "widget override"
53926
- }), !row.resolvedProviderName && row.required && /*#__PURE__*/jsxRuntime.jsx("span", {
53927
- className: "ml-2 text-[10px] text-amber-300 uppercase tracking-wide",
53928
- children: "unresolved"
54709
+ className: "text-xs opacity-60 flex-shrink-0 w-20",
54710
+ children: "Bulk assign"
54711
+ }), /*#__PURE__*/jsxRuntime.jsxs("select", {
54712
+ value: topValue,
54713
+ onChange: function onChange(e) {
54714
+ return onBulk(selectedType, e.target.value);
54715
+ },
54716
+ className: "flex-1 bg-gray-800 border border-white/10 rounded px-3 py-1.5 text-sm",
54717
+ children: [/*#__PURE__*/jsxRuntime.jsx("option", {
54718
+ value: "",
54719
+ children: "\u2014 Select provider \u2014"
54720
+ }), selectedOptions.map(function (opt) {
54721
+ return /*#__PURE__*/jsxRuntime.jsxs("option", {
54722
+ value: opt.name,
54723
+ children: [opt.name, opt.isDefaultForType ? " (default)" : ""]
54724
+ }, opt.name);
54725
+ })]
53929
54726
  })]
53930
- }), /*#__PURE__*/jsxRuntime.jsxs("select", {
53931
- value: row.resolvedProviderName || "",
53932
- onChange: function onChange(e) {
53933
- return onPerWidget(row.widgetId, e.target.value);
53934
- },
53935
- className: "bg-gray-800 border border-white/10 rounded px-2 py-1 text-xs min-w-[12rem]",
53936
- children: [/*#__PURE__*/jsxRuntime.jsx("option", {
53937
- value: "",
53938
- children: "\u2014 none \u2014"
53939
- }), options.map(function (opt) {
53940
- return /*#__PURE__*/jsxRuntime.jsxs("option", {
53941
- value: opt.name,
53942
- children: [opt.name, opt.isDefaultForType ? " (default)" : ""]
53943
- }, opt.name);
54727
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
54728
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
54729
+ className: "text-xs font-semibold opacity-50 uppercase tracking-wider mb-2",
54730
+ children: "Per-widget"
54731
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
54732
+ children: selectedRows.map(function (row) {
54733
+ var _row$layoutItem;
54734
+ var hasExplicitOverride = !!((_row$layoutItem = row.layoutItem) !== null && _row$layoutItem !== void 0 && (_row$layoutItem = _row$layoutItem.selectedProviders) !== null && _row$layoutItem !== void 0 && _row$layoutItem[selectedType]);
54735
+ var isRequired = !!row.required;
54736
+ var isMissing = !row.resolvedProviderName;
54737
+ var needsAttention = isRequired && isMissing;
54738
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
54739
+ className: "flex flex-row items-center gap-3 py-2 px-2 rounded border-l-2 ".concat(needsAttention ? "bg-red-900 border-red-500" : "border-transparent"),
54740
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
54741
+ className: "flex-1 min-w-0",
54742
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
54743
+ className: "text-sm truncate flex items-center gap-1.5 ".concat(needsAttention ? "font-semibold text-red-100" : "font-medium"),
54744
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
54745
+ className: "truncate",
54746
+ children: row.component || "widget"
54747
+ }), isRequired && /*#__PURE__*/jsxRuntime.jsx("span", {
54748
+ className: needsAttention ? "text-red-300" : "text-indigo-300",
54749
+ title: "Required provider",
54750
+ "aria-label": "required",
54751
+ children: "*"
54752
+ })]
54753
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
54754
+ className: "flex items-center gap-1.5 mt-1 text-[10px]",
54755
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
54756
+ className: "uppercase tracking-wide px-1.5 py-0.5 rounded font-semibold ".concat(needsAttention ? "bg-red-600 text-white" : isRequired ? "bg-indigo-800 text-indigo-100" : "bg-gray-700 text-gray-300"),
54757
+ children: isRequired ? "required" : "optional"
54758
+ }), hasExplicitOverride && /*#__PURE__*/jsxRuntime.jsx("span", {
54759
+ className: "uppercase tracking-wide px-1.5 py-0.5 rounded font-semibold bg-indigo-900 text-indigo-200",
54760
+ children: "override"
54761
+ }), /*#__PURE__*/jsxRuntime.jsx("span", {
54762
+ className: "opacity-40 truncate ml-1",
54763
+ children: (row.widgetId || "").slice(0, 8)
54764
+ })]
54765
+ })]
54766
+ }), /*#__PURE__*/jsxRuntime.jsxs("select", {
54767
+ value: row.resolvedProviderName || "",
54768
+ onChange: function onChange(e) {
54769
+ return onPerWidget(row.widgetId, selectedType, e.target.value);
54770
+ },
54771
+ className: "bg-gray-800 border rounded px-2 py-1 text-xs min-w-[12rem] ".concat(needsAttention ? "border-red-400" : "border-gray-700"),
54772
+ children: [/*#__PURE__*/jsxRuntime.jsx("option", {
54773
+ value: "",
54774
+ children: "\u2014 none \u2014"
54775
+ }), selectedOptions.map(function (opt) {
54776
+ return /*#__PURE__*/jsxRuntime.jsxs("option", {
54777
+ value: opt.name,
54778
+ children: [opt.name, opt.isDefaultForType ? " (default)" : ""]
54779
+ }, opt.name);
54780
+ })]
54781
+ })]
54782
+ }, "".concat(row.widgetId, ":").concat(row.providerType));
54783
+ })
54784
+ })]
54785
+ })]
54786
+ })]
54787
+ }) : /*#__PURE__*/jsxRuntime.jsx("div", {
54788
+ className: "flex-1 flex items-center justify-center text-sm opacity-60",
54789
+ children: "Pick a provider type to bulk-assign or adjust per widget."
54790
+ })
54791
+ })]
54792
+ });
54793
+ }
54794
+
54795
+ // ─── Listeners tab ──────────────────────────────────────────────────────────
54796
+
54797
+ /**
54798
+ * Match two wiring entries on the four fields that uniquely identify
54799
+ * a listener binding (receiver + handler + source + event). Used to
54800
+ * dedupe stages, cancel opposite-direction stages, and detect "is
54801
+ * this binding already there".
54802
+ */
54803
+ function sameWiringEntry(a, b) {
54804
+ if (!a || !b) return false;
54805
+ return String(a.receiverItemId) === String(b.receiverItemId) && a.handlerName === b.handlerName && a.sourceComponent === b.sourceComponent && String(a.sourceItemId) === String(b.sourceItemId) && a.eventName === b.eventName;
54806
+ }
54807
+
54808
+ /**
54809
+ * Receiver-centric sidebar/detail layout. Mirrors the per-widget
54810
+ * PanelEditItemHandlers pattern (handler-by-handler editing) but
54811
+ * scoped to the whole dashboard. Picking a widget on the left shows
54812
+ * its handlers + currently wired sources on the right; the user
54813
+ * adjusts wiring per handler from a single dropdown of all emitters'
54814
+ * (widget × event) pairs.
54815
+ */
54816
+ function ListenersTab(_ref6) {
54817
+ var _receivers$;
54818
+ var emitters = _ref6.emitters,
54819
+ receivers = _ref6.receivers,
54820
+ wiring = _ref6.wiring,
54821
+ onAdd = _ref6.onAdd,
54822
+ onRemove = _ref6.onRemove;
54823
+ var _useState1 = React.useState(((_receivers$ = receivers[0]) === null || _receivers$ === void 0 ? void 0 : _receivers$.key) || null),
54824
+ _useState10 = _slicedToArray(_useState1, 2),
54825
+ selectedReceiverKey = _useState10[0],
54826
+ setSelectedReceiverKey = _useState10[1];
54827
+ var _useState11 = React.useState(null),
54828
+ _useState12 = _slicedToArray(_useState11, 2),
54829
+ selectedHandler = _useState12[0],
54830
+ setSelectedHandler = _useState12[1];
54831
+
54832
+ // Re-anchor selection if the previously-selected widget disappeared
54833
+ // (workspace switched, widget deleted, etc.).
54834
+ React.useMemo(function () {
54835
+ if (selectedReceiverKey && !receivers.some(function (r) {
54836
+ return r.key === selectedReceiverKey;
54837
+ })) {
54838
+ var _receivers$2;
54839
+ setSelectedReceiverKey(((_receivers$2 = receivers[0]) === null || _receivers$2 === void 0 ? void 0 : _receivers$2.key) || null);
54840
+ }
54841
+ }, [receivers, selectedReceiverKey]);
54842
+
54843
+ // Receiver lookup (by composite key) for label resolution in chips.
54844
+ var receiverByKey = React.useMemo(function () {
54845
+ var m = new Map();
54846
+ var _iterator5 = _createForOfIteratorHelper$4(receivers),
54847
+ _step5;
54848
+ try {
54849
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
54850
+ var r = _step5.value;
54851
+ m.set(r.key, r);
54852
+ }
54853
+ } catch (err) {
54854
+ _iterator5.e(err);
54855
+ } finally {
54856
+ _iterator5.f();
54857
+ }
54858
+ return m;
54859
+ }, [receivers]);
54860
+ if (receivers.length === 0) {
54861
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
54862
+ className: "flex items-center justify-center h-full text-sm opacity-60 text-center",
54863
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
54864
+ children: ["No widgets in this dashboard declare event handlers.", emitters.length > 0 && /*#__PURE__*/jsxRuntime.jsxs("div", {
54865
+ className: "mt-2",
54866
+ children: ["(", emitters.length, " widget", emitters.length === 1 ? "" : "s", " emit events but nothing is set up to receive.)"]
54867
+ })]
54868
+ })
54869
+ });
54870
+ }
54871
+ var selectedReceiver = selectedReceiverKey ? receiverByKey.get(selectedReceiverKey) || null : null;
54872
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
54873
+ className: "flex flex-col gap-3 h-full min-h-0",
54874
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
54875
+ className: "flex flex-row gap-3 flex-1 min-h-0",
54876
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
54877
+ className: "w-56 flex-shrink-0 bg-white/5 border border-white/10 rounded-lg overflow-hidden flex flex-col",
54878
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
54879
+ className: "px-3 py-2 text-xs font-semibold opacity-50 uppercase tracking-wider border-b border-white/10",
54880
+ children: "Widgets"
54881
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
54882
+ className: "overflow-y-auto flex-1",
54883
+ children: receivers.map(function (r) {
54884
+ var isActive = r.key === selectedReceiverKey;
54885
+ return /*#__PURE__*/jsxRuntime.jsx("button", {
54886
+ type: "button",
54887
+ onClick: function onClick() {
54888
+ return setSelectedReceiverKey(r.key);
54889
+ },
54890
+ className: "w-full text-left px-3 py-2 border-l-2 ".concat(isActive ? "bg-indigo-900/30 border-indigo-400" : "border-transparent hover:bg-white/5"),
54891
+ children: /*#__PURE__*/jsxRuntime.jsx("span", {
54892
+ className: "text-sm font-medium truncate",
54893
+ children: r.label
54894
+ })
54895
+ }, r.key);
54896
+ })
54897
+ })]
54898
+ }), selectedReceiver ? /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
54899
+ children: [/*#__PURE__*/jsxRuntime.jsx(HandlersColumn, {
54900
+ receiver: selectedReceiver,
54901
+ myWiring: wiring.filter(function (w) {
54902
+ return w.receiverComponent === selectedReceiver.component && String(w.receiverItemId) === String(selectedReceiver.itemId);
54903
+ }),
54904
+ selectedHandler: selectedHandler && selectedReceiver.eventHandlers.includes(selectedHandler) ? selectedHandler : null,
54905
+ onSelectHandler: setSelectedHandler
54906
+ }), /*#__PURE__*/jsxRuntime.jsx(EventsColumn, {
54907
+ receiver: selectedReceiver,
54908
+ handlerName: selectedHandler && selectedReceiver.eventHandlers.includes(selectedHandler) ? selectedHandler : null,
54909
+ myWiring: wiring.filter(function (w) {
54910
+ return w.receiverComponent === selectedReceiver.component && String(w.receiverItemId) === String(selectedReceiver.itemId);
54911
+ }),
54912
+ emitters: emitters,
54913
+ onAdd: onAdd,
54914
+ onRemove: onRemove
54915
+ })]
54916
+ }) : /*#__PURE__*/jsxRuntime.jsx("div", {
54917
+ className: "flex-1 min-w-0 bg-white/5 border border-white/10 rounded-lg flex items-center justify-center text-sm opacity-60",
54918
+ children: "Pick a widget on the left to wire its handlers."
54919
+ })]
54920
+ })
54921
+ });
54922
+ }
54923
+
54924
+ /**
54925
+ * Second column (within ListenersTab): the selected receiver's
54926
+ * handlers with connection counts. Picking one lights up the
54927
+ * third column. Matches the left-column look from
54928
+ * PanelEditItemHandlers.
54929
+ */
54930
+ function HandlersColumn(_ref8) {
54931
+ var receiver = _ref8.receiver,
54932
+ myWiring = _ref8.myWiring,
54933
+ selectedHandler = _ref8.selectedHandler,
54934
+ onSelectHandler = _ref8.onSelectHandler;
54935
+ var countsByHandler = React.useMemo(function () {
54936
+ var m = new Map();
54937
+ var _iterator6 = _createForOfIteratorHelper$4(myWiring),
54938
+ _step6;
54939
+ try {
54940
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
54941
+ var w = _step6.value;
54942
+ m.set(w.handlerName, (m.get(w.handlerName) || 0) + 1);
54943
+ }
54944
+ } catch (err) {
54945
+ _iterator6.e(err);
54946
+ } finally {
54947
+ _iterator6.f();
54948
+ }
54949
+ return m;
54950
+ }, [myWiring]);
54951
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
54952
+ className: "w-56 flex-shrink-0 bg-white/5 border border-white/10 rounded-lg overflow-hidden flex flex-col",
54953
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
54954
+ className: "px-3 py-2 text-xs font-semibold opacity-50 uppercase tracking-wider border-b border-white/10",
54955
+ children: "Event Handlers"
54956
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
54957
+ className: "overflow-y-auto flex-1",
54958
+ children: receiver.eventHandlers.length === 0 ? /*#__PURE__*/jsxRuntime.jsx("div", {
54959
+ className: "text-xs opacity-50 text-center py-6 px-3",
54960
+ children: "This widget declares no event handlers."
54961
+ }) : receiver.eventHandlers.map(function (h) {
54962
+ var isActive = h === selectedHandler;
54963
+ var count = countsByHandler.get(h) || 0;
54964
+ return /*#__PURE__*/jsxRuntime.jsxs("button", {
54965
+ type: "button",
54966
+ onClick: function onClick() {
54967
+ return onSelectHandler(h);
54968
+ },
54969
+ className: "w-full text-left px-3 py-2 text-sm flex items-center justify-between gap-2 border-l-2 ".concat(isActive ? "bg-indigo-900/30 border-indigo-400" : "border-transparent hover:bg-white/5"),
54970
+ children: [/*#__PURE__*/jsxRuntime.jsxs("span", {
54971
+ className: "flex items-center gap-2 min-w-0",
54972
+ children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
54973
+ icon: "bolt",
54974
+ className: "h-3 w-3 opacity-60 flex-shrink-0"
54975
+ }), /*#__PURE__*/jsxRuntime.jsx("code", {
54976
+ className: "truncate",
54977
+ children: h
53944
54978
  })]
54979
+ }), /*#__PURE__*/jsxRuntime.jsx("span", {
54980
+ className: "text-xs opacity-60 flex-shrink-0",
54981
+ children: count
53945
54982
  })]
53946
- }, "".concat(row.widgetId, ":").concat(row.providerType));
54983
+ }, h);
54984
+ })
54985
+ })]
54986
+ });
54987
+ }
54988
+
54989
+ /**
54990
+ * Third column: for the selected (receiver, handler), show every
54991
+ * emitter widget as a section with a checkbox list of its events.
54992
+ * Checked = wired; toggling commits an add/remove. Mirrors the
54993
+ * right-column UX of PanelEditItemHandlers.
54994
+ */
54995
+ function EventsColumn(_ref9) {
54996
+ var receiver = _ref9.receiver,
54997
+ handlerName = _ref9.handlerName,
54998
+ myWiring = _ref9.myWiring,
54999
+ emitters = _ref9.emitters,
55000
+ onAdd = _ref9.onAdd,
55001
+ onRemove = _ref9.onRemove;
55002
+ // Wired-for-this-handler: dedupe defensively (legacy workspaces
55003
+ // occasionally contain duplicate entries under the same handler).
55004
+ var wiredHere = React.useMemo(function () {
55005
+ var seen = new Set();
55006
+ var out = [];
55007
+ var _iterator7 = _createForOfIteratorHelper$4(myWiring),
55008
+ _step7;
55009
+ try {
55010
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
55011
+ var w = _step7.value;
55012
+ if (w.handlerName !== handlerName) continue;
55013
+ var key = "".concat(w.sourceComponent, "|").concat(w.sourceItemId, "|").concat(w.eventName);
55014
+ if (seen.has(key)) continue;
55015
+ seen.add(key);
55016
+ out.push(w);
55017
+ }
55018
+ } catch (err) {
55019
+ _iterator7.e(err);
55020
+ } finally {
55021
+ _iterator7.f();
55022
+ }
55023
+ return out;
55024
+ }, [myWiring, handlerName]);
55025
+ var wiredKeys = React.useMemo(function () {
55026
+ return new Set(wiredHere.map(function (w) {
55027
+ return "".concat(w.sourceComponent, "|").concat(w.sourceItemId, "|").concat(w.eventName);
55028
+ }));
55029
+ }, [wiredHere]);
55030
+
55031
+ // Separate orphans — these reference sources no longer in the
55032
+ // workspace, so they don't appear in the emitter sections below.
55033
+ wiredHere.filter(function (w) {
55034
+ return w.isOrphan;
55035
+ });
55036
+ if (!handlerName) {
55037
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
55038
+ className: "flex-1 min-w-0 bg-white/5 border border-white/10 rounded-lg flex items-center justify-center text-sm opacity-60",
55039
+ children: "Select a handler to view available events."
55040
+ });
55041
+ }
55042
+ function toggle(source) {
55043
+ var key = "".concat(source.sourceComponent, "|").concat(source.sourceItemId, "|").concat(source.eventName);
55044
+ if (wiredKeys.has(key)) {
55045
+ var existing = wiredHere.find(function (w) {
55046
+ return "".concat(w.sourceComponent, "|").concat(w.sourceItemId, "|").concat(w.eventName) === key;
55047
+ });
55048
+ onRemove(existing);
55049
+ } else {
55050
+ onAdd({
55051
+ receiverItemId: receiver.itemId,
55052
+ receiverComponent: receiver.component,
55053
+ handlerName: handlerName,
55054
+ sourceComponent: source.sourceComponent,
55055
+ sourceItemId: source.sourceItemId,
55056
+ eventName: source.eventName
55057
+ });
55058
+ }
55059
+ }
55060
+
55061
+ // Hide the selected receiver from its own emitter list — a widget
55062
+ // listening to its own events is almost always a mistake.
55063
+ var emittersForList = emitters.filter(function (e) {
55064
+ return !(e.component === receiver.component && String(e.itemId) === String(receiver.itemId));
55065
+ });
55066
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
55067
+ className: "flex-1 min-w-0 bg-white/5 border border-white/10 rounded-lg overflow-hidden flex flex-col",
55068
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
55069
+ className: "flex-shrink-0 px-4 py-2 border-b border-white/10 text-xs opacity-60",
55070
+ children: ["Check an event to fire", " ", /*#__PURE__*/jsxRuntime.jsx("code", {
55071
+ className: "text-xs",
55072
+ children: handlerName
55073
+ }), " on", " ", /*#__PURE__*/jsxRuntime.jsx("span", {
55074
+ className: "font-medium",
55075
+ children: receiver.label
55076
+ }), "."]
55077
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
55078
+ className: "flex-1 overflow-y-auto p-4 space-y-5",
55079
+ children: emittersForList.length === 0 ? /*#__PURE__*/jsxRuntime.jsx("div", {
55080
+ className: "text-sm opacity-60",
55081
+ children: "No other widgets in this dashboard emit events."
55082
+ }) : emittersForList.map(function (e) {
55083
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
55084
+ className: "space-y-1",
55085
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
55086
+ className: "text-xs font-semibold opacity-50 uppercase tracking-wider",
55087
+ children: e.label
55088
+ }), e.events.map(function (eventName) {
55089
+ var key = "".concat(e.component, "|").concat(e.itemId, "|").concat(eventName);
55090
+ var selected = wiredKeys.has(key);
55091
+ return /*#__PURE__*/jsxRuntime.jsxs("label", {
55092
+ className: "flex items-center gap-3 px-3 py-1.5 rounded-md cursor-pointer text-sm ".concat(selected ? "opacity-100" : "opacity-70 hover:opacity-100"),
55093
+ children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
55094
+ icon: selected ? "square-check" : "square",
55095
+ className: "h-4 w-4 flex-shrink-0",
55096
+ onClick: function onClick(ev) {
55097
+ ev.preventDefault();
55098
+ toggle({
55099
+ sourceComponent: e.component,
55100
+ sourceItemId: e.itemId,
55101
+ eventName: eventName
55102
+ });
55103
+ }
55104
+ }), /*#__PURE__*/jsxRuntime.jsx("span", {
55105
+ children: eventName
55106
+ })]
55107
+ }, key);
55108
+ })]
55109
+ }, e.key || "".concat(e.component, "|").concat(e.itemId));
53947
55110
  })
53948
55111
  })]
53949
55112
  });
@@ -54210,7 +55373,7 @@ var DashboardStageInner = function DashboardStageInner(_ref3) {
54210
55373
  _useState42 = _slicedToArray(_useState41, 2),
54211
55374
  isConfigModalOpen = _useState42[0],
54212
55375
  setIsConfigModalOpen = _useState42[1];
54213
- var configModalAutoOpenedFor = React.useRef(new Set());
55376
+ React.useRef(new Set());
54214
55377
  var _useState43 = React.useState(new Set()),
54215
55378
  _useState44 = _slicedToArray(_useState43, 2),
54216
55379
  dismissedUnresolvedForWorkspace = _useState44[0],
@@ -54745,7 +55908,29 @@ var DashboardStageInner = function DashboardStageInner(_ref3) {
54745
55908
  }
54746
55909
  }
54747
55910
 
54748
- // ─── Unresolved providers (Dashboard Config modal + auto-open) ───
55911
+ // ─── Bulk listener binding save ──────────────────────────────────
55912
+ // Takes { adds, removes } from the Dashboard Config modal's
55913
+ // Listeners tab and writes the updated workspace once. Applies the
55914
+ // delta via applyWiringChanges (uses item.listeners directly so the
55915
+ // existing PanelEditItemHandlers / runtime stays consistent).
55916
+ function handleBulkListenerBindings(changes) {
55917
+ if (!workspaceSelected || !dashApi || !(credentials !== null && credentials !== void 0 && credentials.appId)) return;
55918
+ if (!changes || (!changes.adds || changes.adds.length === 0) && (!changes.removes || changes.removes.length === 0)) {
55919
+ return;
55920
+ }
55921
+ var updatedWorkspace = applyWiringChanges(workspaceSelected, changes);
55922
+ updateTabWorkspace(updatedWorkspace);
55923
+ try {
55924
+ dashApi.saveWorkspace(credentials.appId, updatedWorkspace, function (e, result) {
55925
+ return (void 0);
55926
+ }, function (e, error) {
55927
+ return (void 0);
55928
+ });
55929
+ } catch (e) {
55930
+ }
55931
+ }
55932
+
55933
+ // ─── Unresolved providers + listener orphans (modal + auto-open) ─
54749
55934
  var unresolvedProviders = React.useMemo(function () {
54750
55935
  return getUnresolvedProviders({
54751
55936
  workspace: workspaceSelected,
@@ -54756,19 +55941,16 @@ var DashboardStageInner = function DashboardStageInner(_ref3) {
54756
55941
  }
54757
55942
  });
54758
55943
  }, [workspaceSelected, appContext === null || appContext === void 0 ? void 0 : appContext.providers]);
54759
- var unresolvedCount = unresolvedProviders.length;
55944
+ var unresolvedProvidersCount = unresolvedProviders.length;
55945
+ // Listener orphans are pruned in WorkspaceModel / DashboardModel at
55946
+ // load time, so the badge only counts unresolved provider bindings.
55947
+ var unresolvedCount = unresolvedProvidersCount;
54760
55948
 
54761
- // Auto-open the Dashboard Config modal the FIRST time a workspace with
54762
- // unresolved providers is loaded in this session. Tracked per workspace
54763
- // id so switching tabs or re-selecting doesn't nag the user every time.
54764
- React.useEffect(function () {
54765
- if (!(workspaceSelected !== null && workspaceSelected !== void 0 && workspaceSelected.id)) return;
54766
- if (unresolvedCount === 0) return;
54767
- if (configModalAutoOpenedFor.current.has(workspaceSelected.id)) return;
54768
- if (dismissedUnresolvedForWorkspace.has(workspaceSelected.id)) return;
54769
- configModalAutoOpenedFor.current.add(workspaceSelected.id);
54770
- setIsConfigModalOpen(true);
54771
- }, [workspaceSelected === null || workspaceSelected === void 0 ? void 0 : workspaceSelected.id, unresolvedCount, dismissedUnresolvedForWorkspace]);
55949
+ // (No auto-open.) Earlier versions popped the modal on first load
55950
+ // when anything was unresolved turned out to be jarring,
55951
+ // especially on dashboards that had a long-standing orphan list.
55952
+ // Awareness is delivered passively now: the gear icon's amber dot
55953
+ // and the banner. The user opens the modal when they're ready.
54772
55954
 
54773
55955
  // ─── Sidebar State ────────────────────────────────────────────────
54774
55956
  var sidebarEnabled = (workspaceSelected === null || workspaceSelected === void 0 ? void 0 : workspaceSelected.sidebarEnabled) || false;
@@ -55520,7 +56702,7 @@ var DashboardStageInner = function DashboardStageInner(_ref3) {
55520
56702
  onSidebarChange: popout ? null : handleSidebarToggle,
55521
56703
  scrollableEnabled: workspacePages.length <= 1 ? getRootScrollable() : undefined,
55522
56704
  onScrollableChange: workspacePages.length <= 1 && !popout ? handleScrollableChange : null,
55523
- onOpenConfig: popout ? null : function () {
56705
+ onOpenConfig: popout || previewMode ? null : function () {
55524
56706
  return setIsConfigModalOpen(true);
55525
56707
  },
55526
56708
  configUnresolvedCount: unresolvedCount
@@ -55554,14 +56736,14 @@ var DashboardStageInner = function DashboardStageInner(_ref3) {
55554
56736
  className: "h-3 w-3"
55555
56737
  })
55556
56738
  })]
55557
- }), unresolvedCount > 0 && !dismissedUnresolvedForWorkspace.has(workspaceSelected === null || workspaceSelected === void 0 ? void 0 : workspaceSelected.id) && /*#__PURE__*/jsxRuntime.jsxs("div", {
56739
+ }), unresolvedCount > 0 && !previewMode && !dismissedUnresolvedForWorkspace.has(workspaceSelected === null || workspaceSelected === void 0 ? void 0 : workspaceSelected.id) && /*#__PURE__*/jsxRuntime.jsxs("div", {
55558
56740
  className: "flex items-center gap-2 px-4 py-2 bg-amber-500/10 border-b border-amber-500/20 flex-shrink-0",
55559
56741
  children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
55560
56742
  icon: "triangle-exclamation",
55561
56743
  className: "h-3.5 w-3.5 text-amber-400 flex-shrink-0"
55562
- }), /*#__PURE__*/jsxRuntime.jsxs("span", {
56744
+ }), /*#__PURE__*/jsxRuntime.jsx("span", {
55563
56745
  className: "text-xs text-amber-300/90 flex-1",
55564
- children: [unresolvedCount, " widget", unresolvedCount === 1 ? "" : "s", " in this dashboard need a provider wired up."]
56746
+ children: [unresolvedProvidersCount > 0 && "".concat(unresolvedProvidersCount, " widget").concat(unresolvedProvidersCount === 1 ? "" : "s", " need").concat(unresolvedProvidersCount === 1 ? "s" : "", " a provider")].filter(Boolean).join(" · ")
55565
56747
  }), /*#__PURE__*/jsxRuntime.jsx("button", {
55566
56748
  type: "button",
55567
56749
  onClick: function onClick() {
@@ -55750,7 +56932,12 @@ var DashboardStageInner = function DashboardStageInner(_ref3) {
55750
56932
  var _ComponentManager$com2;
55751
56933
  return name && ((_ComponentManager$com2 = ComponentManager.componentMap()[name]) === null || _ComponentManager$com2 === void 0 ? void 0 : _ComponentManager$com2.providers) || [];
55752
56934
  },
55753
- onSaveBindings: handleBulkProviderBindings
56935
+ getWidgetConfig: function getWidgetConfig(name) {
56936
+ return name && ComponentManager.componentMap()[name] || null;
56937
+ },
56938
+ onSaveBindings: handleBulkProviderBindings,
56939
+ onSaveListeners: handleBulkListenerBindings,
56940
+ initialTab: "providers"
55754
56941
  })]
55755
56942
  })]
55756
56943
  }), !popout && /*#__PURE__*/jsxRuntime.jsx(DashCommandPalette, {
@@ -55994,10 +57181,7 @@ var DashboardHeader = function DashboardHeader(_ref) {
55994
57181
  className: "font-bold text-base"
55995
57182
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
55996
57183
  className: "flex flex-row items-center gap-1",
55997
- children: [onOpenConfig !== null && /*#__PURE__*/jsxRuntime.jsx(DashboardConfigButton, {
55998
- onClick: onOpenConfig,
55999
- unresolvedCount: configUnresolvedCount
56000
- }), onPopout !== null && /*#__PURE__*/jsxRuntime.jsx(DashReact.ButtonIcon, {
57184
+ children: [onPopout !== null && /*#__PURE__*/jsxRuntime.jsx(DashReact.ButtonIcon, {
56001
57185
  icon: "arrow-up-right-from-square",
56002
57186
  onClick: onPopout,
56003
57187
  hoverBackgroundColor: "hover:bg-indigo-700"