@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.esm.js CHANGED
@@ -32,8 +32,8 @@ import { InstantSearch, Hits } from 'react-instantsearch-hooks-web';
32
32
  import { Link } from 'react-router-dom';
33
33
  import { marked } from 'marked';
34
34
 
35
- 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; }
36
- 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; }
35
+ 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; }
36
+ 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; }
37
37
  var event = {
38
38
  list: new Map(),
39
39
  // Map(1) { '<widget-UUID>' => { 'CustomSearchbar[10].searchQueryChanged': [] } }
@@ -95,7 +95,7 @@ var event = {
95
95
  uuid: subscriber["uuid"]
96
96
  };
97
97
  if ("action" in subscriber && subscriber.action !== undefined) {
98
- subscriber["action"](_objectSpread$V({}, objectToSend));
98
+ subscriber["action"](_objectSpread$W({}, objectToSend));
99
99
  }
100
100
  });
101
101
  }
@@ -2873,8 +2873,8 @@ var DashboardWrapper = function DashboardWrapper(_ref) {
2873
2873
  });
2874
2874
  };
2875
2875
 
2876
- 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; }
2877
- 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; }
2876
+ 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; }
2877
+ 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; }
2878
2878
  function ThemeBroadcast(_ref) {
2879
2879
  var ctx = _ref.ctx;
2880
2880
  useEffect(function () {
@@ -2907,7 +2907,7 @@ var DashboardThemeProvider = function DashboardThemeProvider(_ref2) {
2907
2907
  var dashboardTheme = themes[themeKey];
2908
2908
  var themeValue = dashboardTheme ? dashboardTheme[themeVariant] || null : null;
2909
2909
  if (!themeValue) return null;
2910
- return _objectSpread$U(_objectSpread$U({}, parentContext), {}, {
2910
+ return _objectSpread$V(_objectSpread$V({}, parentContext), {}, {
2911
2911
  currentTheme: themeValue,
2912
2912
  currentThemeKey: themeKey,
2913
2913
  theme: themeValue,
@@ -2934,8 +2934,8 @@ var DashboardThemeProvider = function DashboardThemeProvider(_ref2) {
2934
2934
  });
2935
2935
  };
2936
2936
 
2937
- 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; }
2938
- 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; }
2937
+ 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; }
2938
+ 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; }
2939
2939
  var AppThemeScope = function AppThemeScope(_ref) {
2940
2940
  var children = _ref.children;
2941
2941
  var ctx = useContext(ThemeContext);
@@ -2943,7 +2943,7 @@ var AppThemeScope = function AppThemeScope(_ref) {
2943
2943
  children: children
2944
2944
  });
2945
2945
  return /*#__PURE__*/jsx(ThemeContext.Provider, {
2946
- value: _objectSpread$T(_objectSpread$T({}, ctx), {}, {
2946
+ value: _objectSpread$U(_objectSpread$U({}, ctx), {}, {
2947
2947
  currentTheme: ctx.appTheme,
2948
2948
  currentThemeKey: ctx.appThemeKey,
2949
2949
  theme: ctx.appTheme,
@@ -3055,11 +3055,11 @@ var LayoutContainer = function LayoutContainer(_ref) {
3055
3055
  });
3056
3056
  };
3057
3057
 
3058
- 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; }
3059
- 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; }
3060
- 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; } } }; }
3061
- 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; } }
3062
- 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; }
3058
+ 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; }
3059
+ 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; }
3060
+ 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; } } }; }
3061
+ 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; } }
3062
+ 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; }
3063
3063
  /**
3064
3064
  * Layout template definitions for the dashboard template picker.
3065
3065
  *
@@ -3333,12 +3333,12 @@ function createLayoutFromTemplate(template) {
3333
3333
  cols: template.cols,
3334
3334
  gap: "gap-2"
3335
3335
  };
3336
- var _iterator = _createForOfIteratorHelper$s(template.cells),
3336
+ var _iterator = _createForOfIteratorHelper$t(template.cells),
3337
3337
  _step;
3338
3338
  try {
3339
3339
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
3340
3340
  var cell = _step.value;
3341
- grid[cell.key] = _objectSpread$S({
3341
+ grid[cell.key] = _objectSpread$T({
3342
3342
  component: null,
3343
3343
  hide: cell.hide || false
3344
3344
  }, cell.span ? {
@@ -4264,11 +4264,11 @@ var RegistryAuthModal = function RegistryAuthModal(_ref) {
4264
4264
  });
4265
4265
  };
4266
4266
 
4267
- 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; } } }; }
4268
- 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; } }
4269
- 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; }
4270
- 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; }
4271
- 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; }
4267
+ 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; } } }; }
4268
+ 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; } }
4269
+ 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; }
4270
+ 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; }
4271
+ 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; }
4272
4272
  var RegistryDashboardDetail = function RegistryDashboardDetail(_ref) {
4273
4273
  var dashboardPackage = _ref.dashboardPackage,
4274
4274
  appId = _ref.appId,
@@ -4384,7 +4384,7 @@ var RegistryDashboardDetail = function RegistryDashboardDetail(_ref) {
4384
4384
  setProgressWidgets(function (prev) {
4385
4385
  var next = _toConsumableArray(prev);
4386
4386
  if (data.index >= 0 && data.index < next.length) {
4387
- next[data.index] = _objectSpread$R(_objectSpread$R({}, next[data.index]), {}, {
4387
+ next[data.index] = _objectSpread$S(_objectSpread$S({}, next[data.index]), {}, {
4388
4388
  status: data.status,
4389
4389
  error: data.error || null
4390
4390
  });
@@ -4480,7 +4480,7 @@ var RegistryDashboardDetail = function RegistryDashboardDetail(_ref) {
4480
4480
  var raw = preview === null || preview === void 0 ? void 0 : preview.compatibility;
4481
4481
  if (!raw) return raw;
4482
4482
  var cMap = ComponentManager.componentMap();
4483
- var augWidgets = _objectSpread$R({}, raw.widgets);
4483
+ var augWidgets = _objectSpread$S({}, raw.widgets);
4484
4484
  var fixedCount = 0;
4485
4485
  var _loop = function _loop() {
4486
4486
  var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
@@ -4507,7 +4507,7 @@ var RegistryDashboardDetail = function RegistryDashboardDetail(_ref) {
4507
4507
  toInstall = 0,
4508
4508
  unavailable = 0,
4509
4509
  hasUnavailableRequired = false;
4510
- var _iterator = _createForOfIteratorHelper$r(widgetDeps),
4510
+ var _iterator = _createForOfIteratorHelper$s(widgetDeps),
4511
4511
  _step;
4512
4512
  try {
4513
4513
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -5063,8 +5063,8 @@ var DiscoverDashboardsDetail = function DiscoverDashboardsDetail(_ref) {
5063
5063
  });
5064
5064
  };
5065
5065
 
5066
- 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; }
5067
- 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; }
5066
+ 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; }
5067
+ 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; }
5068
5068
  var LayoutManagerModal = function LayoutManagerModal(_ref) {
5069
5069
  var open = _ref.open,
5070
5070
  setIsOpen = _ref.setIsOpen,
@@ -5309,7 +5309,7 @@ var LayoutManagerModal = function LayoutManagerModal(_ref) {
5309
5309
  }
5310
5310
  return _context2.abrupt("return");
5311
5311
  case 6:
5312
- updatedWorkspace = _objectSpread$Q(_objectSpread$Q({}, importedWorkspace), {}, {
5312
+ updatedWorkspace = _objectSpread$R(_objectSpread$R({}, importedWorkspace), {}, {
5313
5313
  name: dashboardName.trim(),
5314
5314
  menuId: menuId,
5315
5315
  themeKey: selectedThemeKey
@@ -6282,9 +6282,9 @@ function cleanIpcError(message) {
6282
6282
  return match ? match[1] : message;
6283
6283
  }
6284
6284
 
6285
- 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; } } }; }
6286
- 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; } }
6287
- 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; }
6285
+ 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; } } }; }
6286
+ 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; } }
6287
+ 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; }
6288
6288
 
6289
6289
  /**
6290
6290
  * useRegistrySearch — shared hook for browsing and installing registry packages.
@@ -6398,13 +6398,13 @@ var useRegistrySearch = function useRegistrySearch() {
6398
6398
  return c.toLowerCase();
6399
6399
  }));
6400
6400
  widgets = [];
6401
- _iterator = _createForOfIteratorHelper$q(pkgs);
6401
+ _iterator = _createForOfIteratorHelper$r(pkgs);
6402
6402
  try {
6403
6403
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
6404
6404
  pkg = _step.value;
6405
6405
  // Compute missing APIs for the entire package
6406
6406
  allApiProviders = [];
6407
- _iterator2 = _createForOfIteratorHelper$q(pkg.providers || []);
6407
+ _iterator2 = _createForOfIteratorHelper$r(pkg.providers || []);
6408
6408
  try {
6409
6409
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
6410
6410
  p = _step2.value;
@@ -6417,11 +6417,11 @@ var useRegistrySearch = function useRegistrySearch() {
6417
6417
  } finally {
6418
6418
  _iterator2.f();
6419
6419
  }
6420
- _iterator3 = _createForOfIteratorHelper$q(pkg.widgets || []);
6420
+ _iterator3 = _createForOfIteratorHelper$r(pkg.widgets || []);
6421
6421
  try {
6422
6422
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
6423
6423
  w = _step3.value;
6424
- _iterator5 = _createForOfIteratorHelper$q(w.providers || []);
6424
+ _iterator5 = _createForOfIteratorHelper$r(w.providers || []);
6425
6425
  try {
6426
6426
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
6427
6427
  _p = _step5.value;
@@ -6443,7 +6443,7 @@ var useRegistrySearch = function useRegistrySearch() {
6443
6443
  missingApis = _toConsumableArray(new Set(allApiProviders)).filter(function (api) {
6444
6444
  return !capSet.has(api.toLowerCase());
6445
6445
  });
6446
- _iterator4 = _createForOfIteratorHelper$q(pkg.widgets || []);
6446
+ _iterator4 = _createForOfIteratorHelper$r(pkg.widgets || []);
6447
6447
  try {
6448
6448
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
6449
6449
  widget = _step4.value;
@@ -7064,11 +7064,11 @@ function applyFilters(items, filters, mode) {
7064
7064
  });
7065
7065
  }
7066
7066
 
7067
- 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; } } }; }
7068
- 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; } }
7069
- 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; }
7070
- 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; }
7071
- 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; }
7067
+ 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; } } }; }
7068
+ 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; } }
7069
+ 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; }
7070
+ 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; }
7071
+ 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; }
7072
7072
  var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
7073
7073
  var _state$selectedDashbo, _state$selectedDashbo2;
7074
7074
  var state = _ref.state,
@@ -7238,7 +7238,7 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
7238
7238
  _context2.next = 7;
7239
7239
  break;
7240
7240
  }
7241
- updatedWorkspace = _objectSpread$P(_objectSpread$P({}, installResult.workspace), {}, {
7241
+ updatedWorkspace = _objectSpread$Q(_objectSpread$Q({}, installResult.workspace), {}, {
7242
7242
  name: name.trim(),
7243
7243
  menuId: menuId || 1,
7244
7244
  themeKey: theme
@@ -7290,7 +7290,7 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
7290
7290
  installedNames = new Set(installedList.map(function (w) {
7291
7291
  return w.name;
7292
7292
  }));
7293
- _iterator = _createForOfIteratorHelper$p(state.selectedWidgets);
7293
+ _iterator = _createForOfIteratorHelper$q(state.selectedWidgets);
7294
7294
  _context2.prev = 13;
7295
7295
  _iterator.s();
7296
7296
  case 14:
@@ -7993,8 +7993,8 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
7993
7993
  });
7994
7994
  };
7995
7995
 
7996
- 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; }
7997
- 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; }
7996
+ 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; }
7997
+ 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; }
7998
7998
  var TOTAL_STEPS = 2; // Steps 0-1: Discover, Customize
7999
7999
 
8000
8000
  var initialState = {
@@ -8020,20 +8020,20 @@ var initialState = {
8020
8020
  function wizardReducer(state, action) {
8021
8021
  switch (action.type) {
8022
8022
  case "SET_STEP":
8023
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8023
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8024
8024
  step: action.payload
8025
8025
  });
8026
8026
  case "SET_FILTERS":
8027
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8028
- filters: _objectSpread$O(_objectSpread$O({}, state.filters), action.payload)
8027
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8028
+ filters: _objectSpread$P(_objectSpread$P({}, state.filters), action.payload)
8029
8029
  });
8030
8030
  case "TOGGLE_FILTER_CATEGORY":
8031
8031
  {
8032
8032
  var categories = state.filters.categories.includes(action.payload) ? state.filters.categories.filter(function (c) {
8033
8033
  return c !== action.payload;
8034
8034
  }) : [].concat(_toConsumableArray(state.filters.categories), [action.payload]);
8035
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8036
- filters: _objectSpread$O(_objectSpread$O({}, state.filters), {}, {
8035
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8036
+ filters: _objectSpread$P(_objectSpread$P({}, state.filters), {}, {
8037
8037
  categories: categories
8038
8038
  })
8039
8039
  });
@@ -8043,15 +8043,15 @@ function wizardReducer(state, action) {
8043
8043
  var providers = state.filters.providers.includes(action.payload) ? state.filters.providers.filter(function (p) {
8044
8044
  return p !== action.payload;
8045
8045
  }) : [].concat(_toConsumableArray(state.filters.providers), [action.payload]);
8046
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8047
- filters: _objectSpread$O(_objectSpread$O({}, state.filters), {}, {
8046
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8047
+ filters: _objectSpread$P(_objectSpread$P({}, state.filters), {}, {
8048
8048
  providers: providers
8049
8049
  })
8050
8050
  });
8051
8051
  }
8052
8052
  case "SET_SEARCH_QUERY":
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
  query: action.payload
8056
8056
  })
8057
8057
  });
@@ -8061,7 +8061,7 @@ function wizardReducer(state, action) {
8061
8061
  var widgetOrder = action.payload.map(function (w) {
8062
8062
  return w.name || w.key;
8063
8063
  });
8064
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8064
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8065
8065
  selectedWidgets: action.payload,
8066
8066
  layout: {
8067
8067
  templateKey: templateKey,
@@ -8081,7 +8081,7 @@ function wizardReducer(state, action) {
8081
8081
  var toggleWidgetOrder = selectedWidgets.map(function (w) {
8082
8082
  return w.name || w.key;
8083
8083
  });
8084
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8084
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8085
8085
  selectedWidgets: selectedWidgets,
8086
8086
  layout: {
8087
8087
  templateKey: toggleTemplateKey,
@@ -8090,29 +8090,29 @@ function wizardReducer(state, action) {
8090
8090
  });
8091
8091
  }
8092
8092
  case "SET_SELECTED_DASHBOARD":
8093
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8093
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8094
8094
  selectedDashboard: action.payload
8095
8095
  });
8096
8096
  case "SET_PATH":
8097
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8097
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8098
8098
  path: action.payload
8099
8099
  });
8100
8100
  case "SET_LAYOUT":
8101
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8101
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8102
8102
  layout: action.payload
8103
8103
  });
8104
8104
  case "REORDER_WIDGETS":
8105
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8106
- layout: _objectSpread$O(_objectSpread$O({}, state.layout), {}, {
8105
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8106
+ layout: _objectSpread$P(_objectSpread$P({}, state.layout), {}, {
8107
8107
  widgetOrder: action.payload
8108
8108
  })
8109
8109
  });
8110
8110
  case "SET_CUSTOMIZATION":
8111
- return _objectSpread$O(_objectSpread$O({}, state), {}, {
8112
- customization: _objectSpread$O(_objectSpread$O({}, state.customization), action.payload)
8111
+ return _objectSpread$P(_objectSpread$P({}, state), {}, {
8112
+ customization: _objectSpread$P(_objectSpread$P({}, state.customization), action.payload)
8113
8113
  });
8114
8114
  case "RESET":
8115
- return _objectSpread$O({}, initialState);
8115
+ return _objectSpread$P({}, initialState);
8116
8116
  default:
8117
8117
  return state;
8118
8118
  }
@@ -12764,8 +12764,8 @@ var deepEqual = function deepEqual(a, b, opts) {
12764
12764
 
12765
12765
  var deepEqual$1 = /*@__PURE__*/getDefaultExportFromCjs(deepEqual);
12766
12766
 
12767
- 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; }
12768
- 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; }
12767
+ 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; }
12768
+ 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; }
12769
12769
  var PanelEditItem = function PanelEditItem(_ref) {
12770
12770
  var _ComponentManager$get;
12771
12771
  var workspace = _ref.workspace,
@@ -12825,7 +12825,7 @@ var PanelEditItem = function PanelEditItem(_ref) {
12825
12825
  var uuid = newItem.uuid || newItem.uuidString;
12826
12826
  if (uuid) {
12827
12827
  workspaceTemp.selectedProviders = workspaceTemp.selectedProviders || {};
12828
- workspaceTemp.selectedProviders[uuid] = _objectSpread$N(_objectSpread$N({}, workspaceTemp.selectedProviders[uuid] || {}), {}, _defineProperty({}, providerType, providerId));
12828
+ workspaceTemp.selectedProviders[uuid] = _objectSpread$O(_objectSpread$O({}, workspaceTemp.selectedProviders[uuid] || {}), {}, _defineProperty({}, providerType, providerId));
12829
12829
  }
12830
12830
  onUpdate(newItem, workspaceTemp);
12831
12831
  forceUpdate();
@@ -12954,7 +12954,7 @@ var PanelEditItem = function PanelEditItem(_ref) {
12954
12954
  var _ref5 = _slicedToArray(_ref4, 2),
12955
12955
  name = _ref5[0],
12956
12956
  p = _ref5[1];
12957
- return _objectSpread$N({
12957
+ return _objectSpread$O({
12958
12958
  name: name
12959
12959
  }, p);
12960
12960
  });
@@ -12996,11 +12996,11 @@ var PanelEditItem = function PanelEditItem(_ref) {
12996
12996
  };
12997
12997
 
12998
12998
  var _excluded$6 = ["rows", "cols"];
12999
- 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; } } }; }
13000
- 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; } }
13001
- 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; }
13002
- 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; }
13003
- 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; }
12999
+ 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; } } }; }
13000
+ 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; } }
13001
+ 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; }
13002
+ 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; }
13003
+ 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; }
13004
13004
  var defaultGrid = {
13005
13005
  rows: 1,
13006
13006
  cols: 1,
@@ -13021,7 +13021,7 @@ function GridEditor(_ref) {
13021
13021
  setGrid = _useState2[1];
13022
13022
  var addRow = function addRow() {
13023
13023
  var newRow = grid.rows;
13024
- var newGrid = _objectSpread$M(_objectSpread$M({}, grid), {}, {
13024
+ var newGrid = _objectSpread$N(_objectSpread$N({}, grid), {}, {
13025
13025
  rows: grid.rows + 1
13026
13026
  });
13027
13027
  for (var col = 0; col < grid.cols; col++) {
@@ -13036,7 +13036,7 @@ function GridEditor(_ref) {
13036
13036
  };
13037
13037
  var addColumn = function addColumn() {
13038
13038
  var newCol = grid.cols;
13039
- var newGrid = _objectSpread$M(_objectSpread$M({}, grid), {}, {
13039
+ var newGrid = _objectSpread$N(_objectSpread$N({}, grid), {}, {
13040
13040
  cols: grid.cols + 1
13041
13041
  });
13042
13042
  for (var row = 0; row < grid.rows; row++) {
@@ -13069,8 +13069,8 @@ function GridEditor(_ref) {
13069
13069
  });
13070
13070
  }
13071
13071
  if (grid[nextKey]) {
13072
- var newGrid = _objectSpread$M({}, grid);
13073
- newGrid[currentKey] = _objectSpread$M(_objectSpread$M({}, newGrid[currentKey]), {}, {
13072
+ var newGrid = _objectSpread$N({}, grid);
13073
+ newGrid[currentKey] = _objectSpread$N(_objectSpread$N({}, newGrid[currentKey]), {}, {
13074
13074
  colSpan: newGrid[currentKey].colSpan + 1
13075
13075
  });
13076
13076
  delete newGrid[nextKey];
@@ -13083,8 +13083,8 @@ function GridEditor(_ref) {
13083
13083
  var currentKey = "".concat(row, ".").concat(col);
13084
13084
  var belowKey = "".concat(row + 1, ".").concat(col);
13085
13085
  if (grid[belowKey]) {
13086
- var newGrid = _objectSpread$M({}, grid);
13087
- newGrid[currentKey] = _objectSpread$M(_objectSpread$M({}, newGrid[currentKey]), {}, {
13086
+ var newGrid = _objectSpread$N({}, grid);
13087
+ newGrid[currentKey] = _objectSpread$N(_objectSpread$N({}, newGrid[currentKey]), {}, {
13088
13088
  rowSpan: newGrid[currentKey].rowSpan + 1
13089
13089
  });
13090
13090
  delete newGrid[belowKey];
@@ -13101,7 +13101,7 @@ function GridEditor(_ref) {
13101
13101
  var splitCell = function splitCell(row, col) {
13102
13102
  var key = "".concat(row, ".").concat(col);
13103
13103
  var cell = grid[key];
13104
- var newGrid = _objectSpread$M({}, grid);
13104
+ var newGrid = _objectSpread$N({}, grid);
13105
13105
 
13106
13106
  // we have to check the colspan, and since the colspan is greater than 1
13107
13107
  // Only handle horizontal split if colSpan > 1
@@ -13117,13 +13117,13 @@ function GridEditor(_ref) {
13117
13117
  var oldKey = "".concat(row, ".").concat(c);
13118
13118
  var newKey = "".concat(row, ".").concat(c + 1);
13119
13119
  if (newGrid[oldKey]) {
13120
- newGrid[newKey] = _objectSpread$M({}, newGrid[oldKey]);
13120
+ newGrid[newKey] = _objectSpread$N({}, newGrid[oldKey]);
13121
13121
  delete newGrid[oldKey];
13122
13122
  }
13123
13123
  }
13124
13124
 
13125
13125
  // Update the original cell's colSpan
13126
- newGrid[key] = _objectSpread$M(_objectSpread$M({}, cell), {}, {
13126
+ newGrid[key] = _objectSpread$N(_objectSpread$N({}, cell), {}, {
13127
13127
  colSpan: cell.colSpan - 1
13128
13128
  });
13129
13129
 
@@ -13135,7 +13135,7 @@ function GridEditor(_ref) {
13135
13135
  };
13136
13136
  }
13137
13137
  if (cell.rowSpan > 1) {
13138
- newGrid[key] = _objectSpread$M(_objectSpread$M({}, newGrid[key]), {}, {
13138
+ newGrid[key] = _objectSpread$N(_objectSpread$N({}, newGrid[key]), {}, {
13139
13139
  rowSpan: cell.rowSpan - 1
13140
13140
  });
13141
13141
  newGrid["".concat(row + 1, ".").concat(col)] = {
@@ -13151,7 +13151,7 @@ function GridEditor(_ref) {
13151
13151
  function sortObjectByKeys(obj) {
13152
13152
  var sortedKeys = Object.keys(obj).sort();
13153
13153
  var sortedObj = {};
13154
- var _iterator = _createForOfIteratorHelper$o(sortedKeys),
13154
+ var _iterator = _createForOfIteratorHelper$p(sortedKeys),
13155
13155
  _step;
13156
13156
  try {
13157
13157
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -13254,7 +13254,7 @@ function GridEditor(_ref) {
13254
13254
  var fromKey = "".concat(from.row, ".").concat(from.col);
13255
13255
  var toKey = "".concat(to.row, ".").concat(to.col);
13256
13256
  if (fromKey === toKey) return;
13257
- var newGrid = _objectSpread$M({}, grid);
13257
+ var newGrid = _objectSpread$N({}, grid);
13258
13258
 
13259
13259
  // Swap the cells
13260
13260
  var temp = newGrid[fromKey];
@@ -13280,7 +13280,7 @@ function GridEditor(_ref) {
13280
13280
  // console.log("Grid updated:", sequencedGrid);
13281
13281
  }
13282
13282
  function resetGridLayout() {
13283
- var newGrid = _objectSpread$M({}, defaultGrid);
13283
+ var newGrid = _objectSpread$N({}, defaultGrid);
13284
13284
  setGrid(newGrid);
13285
13285
  onUpdate(newGrid);
13286
13286
  }
@@ -13558,8 +13558,8 @@ var PanelEditItemGrid = function PanelEditItemGrid(_ref) {
13558
13558
  });
13559
13559
  };
13560
13560
 
13561
- 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; }
13562
- 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; }
13561
+ 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; }
13562
+ 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; }
13563
13563
  var PanelEditItemNotifications = function PanelEditItemNotifications(_ref) {
13564
13564
  var item = _ref.item;
13565
13565
  _ref.workspace;
@@ -13582,7 +13582,7 @@ var PanelEditItemNotifications = function PanelEditItemNotifications(_ref) {
13582
13582
  }, [widgetUuid, notificationDefs.length]);
13583
13583
  function handleNotifToggle(typeKey, value) {
13584
13584
  var _window$mainApi2;
13585
- var updated = _objectSpread$L(_objectSpread$L({}, notifPrefs), {}, _defineProperty({}, typeKey, value));
13585
+ var updated = _objectSpread$M(_objectSpread$M({}, notifPrefs), {}, _defineProperty({}, typeKey, value));
13586
13586
  setNotifPrefs(updated);
13587
13587
  if ((_window$mainApi2 = window.mainApi) !== null && _window$mainApi2 !== void 0 && (_window$mainApi2 = _window$mainApi2.notifications) !== null && _window$mainApi2 !== void 0 && _window$mainApi2.setPreferences && widgetUuid) {
13588
13588
  window.mainApi.notifications.setPreferences(widgetUuid, _defineProperty({}, typeKey, value));
@@ -13624,11 +13624,11 @@ var PanelEditItemNotifications = function PanelEditItemNotifications(_ref) {
13624
13624
  });
13625
13625
  };
13626
13626
 
13627
- 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; } } }; }
13628
- 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; } }
13629
- 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; }
13630
- 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; }
13631
- 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; }
13627
+ 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; } } }; }
13628
+ 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; } }
13629
+ 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; }
13630
+ 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; }
13631
+ 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; }
13632
13632
  var DAYS = [{
13633
13633
  key: "mon",
13634
13634
  label: "Mon"
@@ -13729,7 +13729,7 @@ function TaskScheduleEditor(_ref) {
13729
13729
  var _window$mainApi;
13730
13730
  var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
13731
13731
  if (!((_window$mainApi = window.mainApi) !== null && _window$mainApi !== void 0 && (_window$mainApi = _window$mainApi.scheduler) !== null && _window$mainApi !== void 0 && _window$mainApi.registerTask)) return;
13732
- var payload = _objectSpread$K({
13732
+ var payload = _objectSpread$L({
13733
13733
  widgetId: widgetId,
13734
13734
  widgetName: widgetName,
13735
13735
  workspaceId: workspaceId || "",
@@ -13955,7 +13955,7 @@ var PanelEditItemSchedule = function PanelEditItemSchedule(_ref2) {
13955
13955
  setIsLoading(true);
13956
13956
  window.mainApi.scheduler.getTasks(widgetUuid).then(function (tasks) {
13957
13957
  var stateMap = {};
13958
- var _iterator = _createForOfIteratorHelper$n(tasks || []),
13958
+ var _iterator = _createForOfIteratorHelper$o(tasks || []),
13959
13959
  _step;
13960
13960
  try {
13961
13961
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -16014,8 +16014,8 @@ var WidgetIcon = function WidgetIcon(_ref) {
16014
16014
  });
16015
16015
  };
16016
16016
 
16017
- 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; }
16018
- 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; }
16017
+ 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; }
16018
+ 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; }
16019
16019
  var ProviderForm = function ProviderForm(_ref) {
16020
16020
  var credentialSchema = _ref.credentialSchema,
16021
16021
  _ref$initialValues = _ref.initialValues,
@@ -16060,14 +16060,14 @@ var ProviderForm = function ProviderForm(_ref) {
16060
16060
  var oldKey = f.key;
16061
16061
  if (oldKey && formData[oldKey] !== undefined) {
16062
16062
  setFormData(function (fd) {
16063
- var updated = _objectSpread$J({}, fd);
16063
+ var updated = _objectSpread$K({}, fd);
16064
16064
  var val = updated[oldKey];
16065
16065
  delete updated[oldKey];
16066
16066
  if (newKey.trim()) updated[newKey] = val;
16067
16067
  return updated;
16068
16068
  });
16069
16069
  }
16070
- return _objectSpread$J(_objectSpread$J({}, f), {}, {
16070
+ return _objectSpread$K(_objectSpread$K({}, f), {}, {
16071
16071
  key: newKey
16072
16072
  });
16073
16073
  });
@@ -16079,14 +16079,14 @@ var ProviderForm = function ProviderForm(_ref) {
16079
16079
  });
16080
16080
  if (field !== null && field !== void 0 && field.key) {
16081
16081
  setFormData(function (prev) {
16082
- return _objectSpread$J(_objectSpread$J({}, prev), {}, _defineProperty({}, field.key, value));
16082
+ return _objectSpread$K(_objectSpread$K({}, prev), {}, _defineProperty({}, field.key, value));
16083
16083
  });
16084
16084
  }
16085
16085
  };
16086
16086
  var handleDynamicSecretToggle = function handleDynamicSecretToggle(id) {
16087
16087
  setDynamicFields(function (prev) {
16088
16088
  return prev.map(function (f) {
16089
- return f.id === id ? _objectSpread$J(_objectSpread$J({}, f), {}, {
16089
+ return f.id === id ? _objectSpread$K(_objectSpread$K({}, f), {}, {
16090
16090
  secret: !f.secret
16091
16091
  }) : f;
16092
16092
  });
@@ -16108,7 +16108,7 @@ var ProviderForm = function ProviderForm(_ref) {
16108
16108
  });
16109
16109
  if (field !== null && field !== void 0 && field.key) {
16110
16110
  setFormData(function (prev) {
16111
- var updated = _objectSpread$J({}, prev);
16111
+ var updated = _objectSpread$K({}, prev);
16112
16112
  delete updated[field.key];
16113
16113
  return updated;
16114
16114
  });
@@ -16150,13 +16150,13 @@ var ProviderForm = function ProviderForm(_ref) {
16150
16150
  */
16151
16151
  var handleInputChange = function handleInputChange(fieldName, value) {
16152
16152
  setFormData(function (prev) {
16153
- return _objectSpread$J(_objectSpread$J({}, prev), {}, _defineProperty({}, fieldName, value));
16153
+ return _objectSpread$K(_objectSpread$K({}, prev), {}, _defineProperty({}, fieldName, value));
16154
16154
  });
16155
16155
 
16156
16156
  // Clear error for this field if it was filled
16157
16157
  if (errors[fieldName] && value !== null && value !== void 0 && value.trim()) {
16158
16158
  setErrors(function (prev) {
16159
- var newErrors = _objectSpread$J({}, prev);
16159
+ var newErrors = _objectSpread$K({}, prev);
16160
16160
  delete newErrors[fieldName];
16161
16161
  return newErrors;
16162
16162
  });
@@ -16194,7 +16194,7 @@ var ProviderForm = function ProviderForm(_ref) {
16194
16194
  // Clear error if filled
16195
16195
  if (errors.providerName && value !== null && value !== void 0 && value.trim()) {
16196
16196
  setErrors(function (prev) {
16197
- var newErrors = _objectSpread$J({}, prev);
16197
+ var newErrors = _objectSpread$K({}, prev);
16198
16198
  delete newErrors.providerName;
16199
16199
  return newErrors;
16200
16200
  });
@@ -16431,8 +16431,8 @@ var ToolSelector$1 = function ToolSelector(_ref) {
16431
16431
  });
16432
16432
  };
16433
16433
 
16434
- 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; }
16435
- 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; }
16434
+ 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; }
16435
+ 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; }
16436
16436
  /**
16437
16437
  * Shared MCP utility functions.
16438
16438
  *
@@ -16560,7 +16560,7 @@ function buildMcpConfigFromOverrides(baseMcpConfig, envMappingRows, headerRows)
16560
16560
  headerTemplate[name] = value;
16561
16561
  }
16562
16562
  });
16563
- var config = _objectSpread$I({}, baseMcpConfig);
16563
+ var config = _objectSpread$J({}, baseMcpConfig);
16564
16564
  if (Object.keys(headerTemplate).length > 0) {
16565
16565
  config.headerTemplate = headerTemplate;
16566
16566
  } else {
@@ -16578,7 +16578,7 @@ function buildMcpConfigFromOverrides(baseMcpConfig, envMappingRows, headerRows)
16578
16578
  envMapping[env] = cred;
16579
16579
  }
16580
16580
  });
16581
- return _objectSpread$I(_objectSpread$I({}, baseMcpConfig), {}, {
16581
+ return _objectSpread$J(_objectSpread$J({}, baseMcpConfig), {}, {
16582
16582
  envMapping: envMapping
16583
16583
  });
16584
16584
  }
@@ -16819,11 +16819,11 @@ var getUserConfigurableProviders = function getUserConfigurableProviders(provide
16819
16819
  });
16820
16820
  };
16821
16821
 
16822
- 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; } } }; }
16823
- 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; } }
16824
- 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; }
16825
- 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; }
16826
- 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; }
16822
+ 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; } } }; }
16823
+ 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; } }
16824
+ 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; }
16825
+ 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; }
16826
+ 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; }
16827
16827
  var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
16828
16828
  var isOpen = _ref.isOpen,
16829
16829
  onClose = _ref.onClose,
@@ -17018,7 +17018,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17018
17018
  .map(function (entry) {
17019
17019
  var widget = allWidgets[entry.widgetKey];
17020
17020
  if (!widget) return null; // Widget no longer exists
17021
- return _objectSpread$H(_objectSpread$H({
17021
+ return _objectSpread$I(_objectSpread$I({
17022
17022
  key: entry.widgetKey
17023
17023
  }, widget), {}, {
17024
17024
  savedProviders: entry.providers || {},
@@ -17106,11 +17106,11 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17106
17106
 
17107
17107
  // Flatten all widgets from all packages for the widget list
17108
17108
  flatWidgets = [];
17109
- _iterator = _createForOfIteratorHelper$m(result.packages || []);
17109
+ _iterator = _createForOfIteratorHelper$n(result.packages || []);
17110
17110
  try {
17111
17111
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
17112
17112
  pkg = _step.value;
17113
- _iterator2 = _createForOfIteratorHelper$m(pkg.widgets || []);
17113
+ _iterator2 = _createForOfIteratorHelper$n(pkg.widgets || []);
17114
17114
  try {
17115
17115
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
17116
17116
  widget = _step2.value;
@@ -17169,7 +17169,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17169
17169
  // Get widgets from ComponentManager
17170
17170
  var allWidgets = ComponentManager.map();
17171
17171
  var widgetList = Object.keys(allWidgets).map(function (key) {
17172
- return _objectSpread$H({
17172
+ return _objectSpread$I({
17173
17173
  key: key
17174
17174
  }, allWidgets[key]);
17175
17175
  }).filter(function (widget) {
@@ -17400,7 +17400,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17400
17400
  setInlineCreateType(null);
17401
17401
  setInlineCreateSchema({});
17402
17402
  setInlineCreateError(null);
17403
- setSelectedProviders(_objectSpread$H(_objectSpread$H({}, selectedProviders), {}, _defineProperty({}, providerType, providerName)));
17403
+ setSelectedProviders(_objectSpread$I(_objectSpread$I({}, selectedProviders), {}, _defineProperty({}, providerType, providerName)));
17404
17404
  }
17405
17405
  };
17406
17406
  var handleInlineProviderSubmit = function handleInlineProviderSubmit(formData) {
@@ -17421,7 +17421,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17421
17421
 
17422
17422
  // Auto-select the newly created provider
17423
17423
  setSelectedProviders(function (prev) {
17424
- return _objectSpread$H(_objectSpread$H({}, prev), {}, _defineProperty({}, providerType, providerName));
17424
+ return _objectSpread$I(_objectSpread$I({}, prev), {}, _defineProperty({}, providerType, providerName));
17425
17425
  });
17426
17426
 
17427
17427
  // Collapse the inline form
@@ -17475,11 +17475,11 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17475
17475
  };
17476
17476
  var inlineHandleCredentialChange = function inlineHandleCredentialChange(fieldName, value) {
17477
17477
  setInlineCredentialData(function (prev) {
17478
- return _objectSpread$H(_objectSpread$H({}, prev), {}, _defineProperty({}, fieldName, value));
17478
+ return _objectSpread$I(_objectSpread$I({}, prev), {}, _defineProperty({}, fieldName, value));
17479
17479
  });
17480
17480
  if (inlineFormErrors[fieldName] && value !== null && value !== void 0 && value.trim()) {
17481
17481
  setInlineFormErrors(function (prev) {
17482
- var next = _objectSpread$H({}, prev);
17482
+ var next = _objectSpread$I({}, prev);
17483
17483
  delete next[fieldName];
17484
17484
  return next;
17485
17485
  });
@@ -17572,7 +17572,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17572
17572
  refreshProviders();
17573
17573
  }
17574
17574
  setSelectedProviders(function (prev) {
17575
- return _objectSpread$H(_objectSpread$H({}, prev), {}, _defineProperty({}, providerType, providerName));
17575
+ return _objectSpread$I(_objectSpread$I({}, prev), {}, _defineProperty({}, providerType, providerName));
17576
17576
  });
17577
17577
 
17578
17578
  // Reset stepper state
@@ -17593,7 +17593,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17593
17593
  });
17594
17594
  };
17595
17595
  var handleConfigChange = function handleConfigChange(key, value) {
17596
- setUserConfigValues(_objectSpread$H(_objectSpread$H({}, userConfigValues), {}, _defineProperty({}, key, value)));
17596
+ setUserConfigValues(_objectSpread$I(_objectSpread$I({}, userConfigValues), {}, _defineProperty({}, key, value)));
17597
17597
  };
17598
17598
 
17599
17599
  // Install a package from the registry
@@ -17659,7 +17659,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17659
17659
  // Mark items as installed
17660
17660
  setProgressWidgets(function (prev) {
17661
17661
  return prev.map(function (w) {
17662
- return _objectSpread$H(_objectSpread$H({}, w), {}, {
17662
+ return _objectSpread$I(_objectSpread$I({}, w), {}, {
17663
17663
  status: "installed"
17664
17664
  });
17665
17665
  });
@@ -17678,7 +17678,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17678
17678
  setInstallError(msg);
17679
17679
  setProgressWidgets(function (prev) {
17680
17680
  return prev.map(function (w) {
17681
- return _objectSpread$H(_objectSpread$H({}, w), {}, {
17681
+ return _objectSpread$I(_objectSpread$I({}, w), {}, {
17682
17682
  status: "failed",
17683
17683
  error: msg
17684
17684
  });
@@ -17752,7 +17752,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
17752
17752
 
17753
17753
  // Phase 3: Save to recent widgets
17754
17754
  saveToRecent(selectedWidget, selectedProviders, userConfigValues);
17755
- onSelectWidget(_objectSpread$H(_objectSpread$H({}, selectedWidget), {}, {
17755
+ onSelectWidget(_objectSpread$I(_objectSpread$I({}, selectedWidget), {}, {
17756
17756
  selectedProviders: selectedProviders,
17757
17757
  // Pass to parent
17758
17758
  userConfigValues: userConfigValues // Pass to parent
@@ -18389,7 +18389,7 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
18389
18389
  setInlineProviderName(value);
18390
18390
  if (inlineFormErrors.providerName && value !== null && value !== void 0 && value.trim()) {
18391
18391
  setInlineFormErrors(function (prev) {
18392
- var next = _objectSpread$H({}, prev);
18392
+ var next = _objectSpread$I({}, prev);
18393
18393
  delete next.providerName;
18394
18394
  return next;
18395
18395
  });
@@ -18748,9 +18748,9 @@ var ProviderBadge = function ProviderBadge(_ref) {
18748
18748
  });
18749
18749
  };
18750
18750
 
18751
- 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; } } }; }
18752
- 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; } }
18753
- 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; }
18751
+ 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; } } }; }
18752
+ 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; } }
18753
+ 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; }
18754
18754
  var WidgetCardHeader = function WidgetCardHeader(_ref) {
18755
18755
  var item = _ref.item,
18756
18756
  widget = _ref.widget,
@@ -18795,7 +18795,7 @@ var WidgetCardHeader = function WidgetCardHeader(_ref) {
18795
18795
  var el = headerRef.current;
18796
18796
  if (!el) return;
18797
18797
  var observer = new ResizeObserver(function (entries) {
18798
- var _iterator = _createForOfIteratorHelper$l(entries),
18798
+ var _iterator = _createForOfIteratorHelper$m(entries),
18799
18799
  _step;
18800
18800
  try {
18801
18801
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -19187,9 +19187,9 @@ var useWidgetSchedulerStatus = function useWidgetSchedulerStatus(widgetId) {
19187
19187
  };
19188
19188
  };
19189
19189
 
19190
- 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; } } }; }
19191
- 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; } }
19192
- 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; }
19190
+ 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; } } }; }
19191
+ 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; } }
19192
+ 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; }
19193
19193
  function formatCountdown(ms) {
19194
19194
  if (ms == null || ms < 0) return "--";
19195
19195
  if (ms < 1000) return "< 1s";
@@ -19306,7 +19306,7 @@ var WidgetCardStatusBar = function WidgetCardStatusBar(_ref) {
19306
19306
 
19307
19307
  // Find soonest countdown among enabled tasks
19308
19308
  var soonestMs = null;
19309
- var _iterator = _createForOfIteratorHelper$k(enabledTasks),
19309
+ var _iterator = _createForOfIteratorHelper$l(enabledTasks),
19310
19310
  _step;
19311
19311
  try {
19312
19312
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -19759,8 +19759,8 @@ var ProviderSelector = function ProviderSelector(_ref) {
19759
19759
  });
19760
19760
  };
19761
19761
 
19762
- 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; }
19763
- 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; }
19762
+ 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; }
19763
+ 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; }
19764
19764
  var AdvancedMcpConfig = function AdvancedMcpConfig(_ref) {
19765
19765
  var transport = _ref.transport,
19766
19766
  envMappingRows = _ref.envMappingRows,
@@ -19789,7 +19789,7 @@ var AdvancedMcpConfig = function AdvancedMcpConfig(_ref) {
19789
19789
  var updateEnvRow = function updateEnvRow(id, field, value) {
19790
19790
  onEnvMappingRowsChange(function (prev) {
19791
19791
  return prev.map(function (row) {
19792
- return row.id === id ? _objectSpread$G(_objectSpread$G({}, row), {}, _defineProperty({}, field, value)) : row;
19792
+ return row.id === id ? _objectSpread$H(_objectSpread$H({}, row), {}, _defineProperty({}, field, value)) : row;
19793
19793
  });
19794
19794
  });
19795
19795
  };
@@ -19814,7 +19814,7 @@ var AdvancedMcpConfig = function AdvancedMcpConfig(_ref) {
19814
19814
  var updateHeaderRow = function updateHeaderRow(id, field, value) {
19815
19815
  onHeaderRowsChange(function (prev) {
19816
19816
  return prev.map(function (row) {
19817
- return row.id === id ? _objectSpread$G(_objectSpread$G({}, row), {}, _defineProperty({}, field, value)) : row;
19817
+ return row.id === id ? _objectSpread$H(_objectSpread$H({}, row), {}, _defineProperty({}, field, value)) : row;
19818
19818
  });
19819
19819
  });
19820
19820
  };
@@ -19963,8 +19963,8 @@ var AdvancedMcpConfig = function AdvancedMcpConfig(_ref) {
19963
19963
  });
19964
19964
  };
19965
19965
 
19966
- 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; }
19967
- 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; }
19966
+ 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; }
19967
+ 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; }
19968
19968
  var McpServerPicker = function McpServerPicker(_ref) {
19969
19969
  var _testResult$tools;
19970
19970
  var isOpen = _ref.isOpen,
@@ -20143,11 +20143,11 @@ var McpServerPicker = function McpServerPicker(_ref) {
20143
20143
  // Handle credential field changes
20144
20144
  var handleCredentialChange = function handleCredentialChange(fieldName, value) {
20145
20145
  setCredentialData(function (prev) {
20146
- return _objectSpread$F(_objectSpread$F({}, prev), {}, _defineProperty({}, fieldName, value));
20146
+ return _objectSpread$G(_objectSpread$G({}, prev), {}, _defineProperty({}, fieldName, value));
20147
20147
  });
20148
20148
  if (formErrors[fieldName] && value !== null && value !== void 0 && value.trim()) {
20149
20149
  setFormErrors(function (prev) {
20150
- var next = _objectSpread$F({}, prev);
20150
+ var next = _objectSpread$G({}, prev);
20151
20151
  delete next[fieldName];
20152
20152
  return next;
20153
20153
  });
@@ -20485,7 +20485,7 @@ var McpServerPicker = function McpServerPicker(_ref) {
20485
20485
  setProviderName(value);
20486
20486
  if (formErrors.providerName && value !== null && value !== void 0 && value.trim()) {
20487
20487
  setFormErrors(function (prev) {
20488
- var next = _objectSpread$F({}, prev);
20488
+ var next = _objectSpread$G({}, prev);
20489
20489
  delete next.providerName;
20490
20490
  return next;
20491
20491
  });
@@ -20675,8 +20675,8 @@ var McpServerPicker = function McpServerPicker(_ref) {
20675
20675
  });
20676
20676
  };
20677
20677
 
20678
- 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; }
20679
- 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; }
20678
+ 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; }
20679
+ 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; }
20680
20680
  var USE_ENHANCED_WIDGET_SELECTOR = true; // Set to false to use original modal
20681
20681
 
20682
20682
  /**
@@ -20722,7 +20722,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
20722
20722
  var _ref3 = _slicedToArray(_ref2, 2),
20723
20723
  id = _ref3[0],
20724
20724
  p = _ref3[1];
20725
- return _objectSpread$E(_objectSpread$E({}, p), {}, {
20725
+ return _objectSpread$F(_objectSpread$F({}, p), {}, {
20726
20726
  id: id,
20727
20727
  name: p.name || id
20728
20728
  });
@@ -20809,7 +20809,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
20809
20809
  // so we use its layout to replace any corrupted grid data.
20810
20810
  if (workspace && workspace["layout"]) {
20811
20811
  var model = new DashboardModel(workspace);
20812
- setCurrentWorkspace(_objectSpread$E(_objectSpread$E({}, workspace), {}, {
20812
+ setCurrentWorkspace(_objectSpread$F(_objectSpread$F({}, workspace), {}, {
20813
20813
  layout: model.layout
20814
20814
  }));
20815
20815
  } else {
@@ -20858,7 +20858,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
20858
20858
  }
20859
20859
  try {
20860
20860
  var hasChildren = config.type === "workspace";
20861
- var newLayout = addItemToItemLayout(ws.layout, gridItem.id, _objectSpread$E(_objectSpread$E({}, config), {}, {
20861
+ var newLayout = addItemToItemLayout(ws.layout, gridItem.id, _objectSpread$F(_objectSpread$F({}, config), {}, {
20862
20862
  component: widgetComponentName
20863
20863
  }), hasChildren);
20864
20864
  var newWidgetId = newLayout[newLayout.length - 1].id;
@@ -21286,7 +21286,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
21286
21286
  var uuid = widget.uuid || widget.uuidString;
21287
21287
  if (uuid) {
21288
21288
  newWorkspace.selectedProviders = newWorkspace.selectedProviders || {};
21289
- newWorkspace.selectedProviders[uuid] = _objectSpread$E(_objectSpread$E({}, newWorkspace.selectedProviders[uuid] || {}), {}, _defineProperty({}, providerType, providerId));
21289
+ newWorkspace.selectedProviders[uuid] = _objectSpread$F(_objectSpread$F({}, newWorkspace.selectedProviders[uuid] || {}), {}, _defineProperty({}, providerType, providerId));
21290
21290
  }
21291
21291
  setCurrentWorkspace(newWorkspace);
21292
21292
  }
@@ -21422,7 +21422,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
21422
21422
  var _gridContainer$grid;
21423
21423
  var config = ComponentManager.config(widgetKey);
21424
21424
  if (!config) return;
21425
- var widgetItem = _objectSpread$E(_objectSpread$E({}, config), {}, {
21425
+ var widgetItem = _objectSpread$F(_objectSpread$F({}, config), {}, {
21426
21426
  component: widgetKey,
21427
21427
  key: widgetKey
21428
21428
  });
@@ -21676,7 +21676,7 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
21676
21676
  onSelectWidget: function onSelectWidget(widget) {
21677
21677
 
21678
21678
  // Add component property from widget.key
21679
- var widgetWithComponent = _objectSpread$E(_objectSpread$E({}, widget), {}, {
21679
+ var widgetWithComponent = _objectSpread$F(_objectSpread$F({}, widget), {}, {
21680
21680
  component: widget.key
21681
21681
  });
21682
21682
  handleClickConfirmAdd(widgetWithComponent, dropdownTarget);
@@ -23305,8 +23305,8 @@ var MissingProviderPrompt = function MissingProviderPrompt(_ref) {
23305
23305
  });
23306
23306
  };
23307
23307
 
23308
- 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; }
23309
- 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; }
23308
+ 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; }
23309
+ 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; }
23310
23310
  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)); }
23311
23311
  function _isNativeReflectConstruct$4() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$4 = function _isNativeReflectConstruct() { return !!t; })(); }
23312
23312
  var ProviderErrorBoundary = /*#__PURE__*/function (_Component) {
@@ -23361,7 +23361,7 @@ var ProviderErrorBoundary = /*#__PURE__*/function (_Component) {
23361
23361
  _defineProperty(_this, "handleProviderSelect", function (providerType, providerName, credentials) {
23362
23362
 
23363
23363
  // Update local selected providers state
23364
- var updatedSelected = _objectSpread$D(_objectSpread$D({}, _this.state.selectedProviders), {}, _defineProperty({}, providerType, providerName));
23364
+ var updatedSelected = _objectSpread$E(_objectSpread$E({}, _this.state.selectedProviders), {}, _defineProperty({}, providerType, providerName));
23365
23365
  _this.setState({
23366
23366
  selectedProviders: updatedSelected
23367
23367
  }, function () {
@@ -23435,8 +23435,8 @@ var ProviderErrorBoundary = /*#__PURE__*/function (_Component) {
23435
23435
  }(Component);
23436
23436
  _defineProperty(ProviderErrorBoundary, "contextType", ProviderContext);
23437
23437
 
23438
- 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; }
23439
- 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; }
23438
+ 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; }
23439
+ 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; }
23440
23440
  var withProviderDetection = function withProviderDetection(Component) {
23441
23441
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
23442
23442
  _ref$requiredProvider = _ref.requiredProviders,
@@ -23461,7 +23461,7 @@ var withProviderDetection = function withProviderDetection(Component) {
23461
23461
  onProviderSelect: onProviderSelect
23462
23462
  });
23463
23463
  }
23464
- return /*#__PURE__*/jsx(Component, _objectSpread$C({}, props));
23464
+ return /*#__PURE__*/jsx(Component, _objectSpread$D({}, props));
23465
23465
  };
23466
23466
  };
23467
23467
 
@@ -24137,8 +24137,8 @@ var WidgetNotFound = function WidgetNotFound(_ref) {
24137
24137
  });
24138
24138
  };
24139
24139
 
24140
- 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; }
24141
- 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; }
24140
+ 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; }
24141
+ 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; }
24142
24142
  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)); }
24143
24143
  function _isNativeReflectConstruct$2() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$2 = function _isNativeReflectConstruct() { return !!t; })(); }
24144
24144
  var WidgetErrorBoundary = /*#__PURE__*/function (_Component) {
@@ -24221,6 +24221,35 @@ var WidgetRenderer = function WidgetRenderer(_ref) {
24221
24221
  children = _ref$children === void 0 ? null : _ref$children;
24222
24222
  var _useContext = useContext(DashboardContext),
24223
24223
  dashApi = _useContext.dashApi;
24224
+
24225
+ // When a widget package is updated via Settings > Widgets (or the AI
24226
+ // Widget Builder), the main process broadcasts "widget:installed"
24227
+ // and Dash.js rebroadcasts a "dash:widget-installed" CustomEvent on
24228
+ // window. We listen here, per-instance, and bump a local version
24229
+ // counter when OUR component is the one that was updated. The counter
24230
+ // is embedded in the child's React key so only matching instances
24231
+ // re-mount — unrelated widgets, the sidebar, and the Settings modal
24232
+ // are untouched. Replaces the old global stageKey remount in Dash.js.
24233
+ var _useState = useState(0),
24234
+ _useState2 = _slicedToArray(_useState, 2),
24235
+ componentVersion = _useState2[0],
24236
+ setComponentVersion = _useState2[1];
24237
+ useEffect(function () {
24238
+ var onWidgetInstalled = function onWidgetInstalled(e) {
24239
+ var _e$detail;
24240
+ var installed = e === null || e === void 0 || (_e$detail = e.detail) === null || _e$detail === void 0 ? void 0 : _e$detail.widgetName;
24241
+ if (!installed) return;
24242
+ if (installed === component) {
24243
+ setComponentVersion(function (v) {
24244
+ return v + 1;
24245
+ });
24246
+ }
24247
+ };
24248
+ window.addEventListener("dash:widget-installed", onWidgetInstalled);
24249
+ return function () {
24250
+ return window.removeEventListener("dash:widget-installed", onWidgetInstalled);
24251
+ };
24252
+ }, [component]);
24224
24253
  try {
24225
24254
  var m = ComponentManager.componentMap();
24226
24255
  if (component && m) {
@@ -24269,7 +24298,7 @@ var WidgetRenderer = function WidgetRenderer(_ref) {
24269
24298
 
24270
24299
  // Build widgetData for WidgetContext — hooks read from this
24271
24300
  var uuidString = getUUID(params.uuid);
24272
- var widgetData = _objectSpread$B(_objectSpread$B({}, params), {}, {
24301
+ var widgetData = _objectSpread$C(_objectSpread$C({}, params), {}, {
24273
24302
  uuidString: uuidString,
24274
24303
  providers: (config === null || config === void 0 ? void 0 : config.providers) || [],
24275
24304
  notifications: (config === null || config === void 0 ? void 0 : config.notifications) || []
@@ -24293,7 +24322,7 @@ var WidgetRenderer = function WidgetRenderer(_ref) {
24293
24322
  widgetData: widgetData
24294
24323
  };
24295
24324
  var hasScheduledTasks = ((config === null || config === void 0 ? void 0 : config.scheduledTasks) || []).length > 0;
24296
- var widgetElement = children === null ? /*#__PURE__*/jsx(WidgetComponent, _objectSpread$B(_objectSpread$B(_objectSpread$B({
24325
+ var widgetElement = children === null ? /*#__PURE__*/jsx(WidgetComponent, _objectSpread$C(_objectSpread$C(_objectSpread$C({
24297
24326
  id: "widget-nokids-".concat(widgetKey),
24298
24327
  listen: function listen(listeners, handlers) {
24299
24328
  return helpers.listen(listeners, handlers);
@@ -24307,7 +24336,7 @@ var WidgetRenderer = function WidgetRenderer(_ref) {
24307
24336
  backgroundColor: bgColor,
24308
24337
  widgetConfig: helpers.config(),
24309
24338
  widgetEventNames: helpers.events()
24310
- }), "widget-nokids-".concat(widgetKey)) : /*#__PURE__*/jsx(WidgetComponent, _objectSpread$B(_objectSpread$B(_objectSpread$B({
24339
+ }), "widget-nokids-".concat(widgetKey, "-v").concat(componentVersion)) : /*#__PURE__*/jsx(WidgetComponent, _objectSpread$C(_objectSpread$C(_objectSpread$C({
24311
24340
  listen: function listen(listeners, handlers) {
24312
24341
  return helpers.listen(listeners, handlers);
24313
24342
  },
@@ -24320,7 +24349,7 @@ var WidgetRenderer = function WidgetRenderer(_ref) {
24320
24349
  }, params), userPrefs), {}, {
24321
24350
  backgroundColor: bgColor,
24322
24351
  children: children
24323
- }), "widget-kids-".concat(widgetKey));
24352
+ }), "widget-kids-".concat(widgetKey, "-v").concat(componentVersion));
24324
24353
 
24325
24354
  // Wrap widget rendering with WidgetContext + error boundary
24326
24355
  return /*#__PURE__*/jsx(WidgetContext.Provider, {
@@ -24507,11 +24536,11 @@ var ExternalWidget = function ExternalWidget(_ref) {
24507
24536
  var GRID_CELL_WIDGET_TYPE = "grid-cell-widget";
24508
24537
  var SIDEBAR_WIDGET_TYPE = "sidebar-widget";
24509
24538
 
24510
- 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; } } }; }
24511
- 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; } }
24512
- 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; }
24513
- 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; }
24514
- 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; }
24539
+ 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; } } }; }
24540
+ 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; } }
24541
+ 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; }
24542
+ 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; }
24543
+ 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; }
24515
24544
  var DraggableDroppableCellBody = function DraggableDroppableCellBody(_ref) {
24516
24545
  var cellNumber = _ref.cellNumber,
24517
24546
  gridContainerId = _ref.gridContainerId,
@@ -24709,7 +24738,7 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
24709
24738
  var _ref5 = _slicedToArray(_ref4, 2),
24710
24739
  id = _ref5[0],
24711
24740
  provider = _ref5[1];
24712
- return _objectSpread$A({
24741
+ return _objectSpread$B({
24713
24742
  id: id
24714
24743
  }, provider);
24715
24744
  }) : [];
@@ -25084,7 +25113,7 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
25084
25113
  return selectable["delete"](cn);
25085
25114
  });
25086
25115
  var resolved = new Set();
25087
- var _iterator = _createForOfIteratorHelper$j(selectable),
25116
+ var _iterator = _createForOfIteratorHelper$k(selectable),
25088
25117
  _step;
25089
25118
  try {
25090
25119
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -25753,7 +25782,7 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
25753
25782
  var widgetSpecificSelections = (workspace === null || workspace === void 0 || (_workspace$selectedPr = workspace.selectedProviders) === null || _workspace$selectedPr === void 0 ? void 0 : _workspace$selectedPr[id]) || {};
25754
25783
 
25755
25784
  // Add provider-related props from workspace
25756
- var itemWithProviders = _objectSpread$A(_objectSpread$A({}, item), {}, {
25785
+ var itemWithProviders = _objectSpread$B(_objectSpread$B({}, item), {}, {
25757
25786
  selectedProviders: widgetSpecificSelections,
25758
25787
  onProviderSelect: onProviderSelect
25759
25788
  });
@@ -27258,11 +27287,11 @@ function isWidgetResolvable(componentKey) {
27258
27287
  // isMinOrderForItem
27259
27288
  // }
27260
27289
 
27261
- 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; }
27262
- 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; }
27263
- 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; } } }; }
27264
- 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; } }
27265
- 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; }
27290
+ 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; }
27291
+ 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; }
27292
+ 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; } } }; }
27293
+ 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; } }
27294
+ 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; }
27266
27295
  /**
27267
27296
  * The model for all layout components used primarily in the renderLayout method
27268
27297
  * @param {Object} layoutItem an object containing various attributes of the layout item
@@ -27274,7 +27303,7 @@ function _arrayLikeToArray$i(r, a) { (null == a || a > r.length) && (a = r.lengt
27274
27303
  function sortObjectByKeys(obj) {
27275
27304
  var sortedKeys = Object.keys(obj).sort();
27276
27305
  var sortedObj = {};
27277
- var _iterator = _createForOfIteratorHelper$i(sortedKeys),
27306
+ var _iterator = _createForOfIteratorHelper$j(sortedKeys),
27278
27307
  _step;
27279
27308
  try {
27280
27309
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -27415,7 +27444,7 @@ var LayoutModel = function LayoutModel(layoutItem, workspaceLayout, dashboardId)
27415
27444
 
27416
27445
  // Merge user-entered config values (from EnhancedWidgetDropdown) into userPrefs
27417
27446
  if ("userConfigValues" in obj && obj.userConfigValues) {
27418
- layout.userPrefs = _objectSpread$z(_objectSpread$z({}, layout.userPrefs), obj.userConfigValues);
27447
+ layout.userPrefs = _objectSpread$A(_objectSpread$A({}, layout.userPrefs), obj.userConfigValues);
27419
27448
  }
27420
27449
 
27421
27450
  // Preserve provider selections for this widget
@@ -27546,6 +27575,822 @@ var SettingsModel = function SettingsModel() {
27546
27575
  return obj;
27547
27576
  };
27548
27577
 
27578
+ 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; } } }; }
27579
+ 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; } }
27580
+ 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; }
27581
+ /**
27582
+ * providerResolution.js
27583
+ *
27584
+ * Shared helpers for walking a workspace and figuring out which widgets
27585
+ * have required providers that are still unresolved after the 3-layer
27586
+ * resolution (widget → workspace → app-default → null). Used by:
27587
+ *
27588
+ * - DashboardConfigModal to render the Providers tab
27589
+ * - DashboardStage toolbar to show the unresolved-count badge
27590
+ *
27591
+ * Both places need the same answer, so keep the logic here to avoid drift
27592
+ * with the resolution inside `useMcpProvider` / `useWebSocketProvider`.
27593
+ */
27594
+
27595
+ /**
27596
+ * Resolve which provider name a given widget instance would bind to for
27597
+ * the given provider type. Mirrors the 3-layer chain in useMcpProvider
27598
+ * and useWebSocketProvider exactly:
27599
+ *
27600
+ * 1. widget-level override (layoutItem.selectedProviders[type])
27601
+ * 2. workspace-level binding (workspace.selectedProviders[id][type])
27602
+ * 3. app default (any provider of matching type flagged
27603
+ * `isDefaultForType` in appProviders)
27604
+ * 4. null (truly unresolved)
27605
+ */
27606
+ function resolveProviderName(_ref) {
27607
+ var _layoutItem$selectedP, _workspace$selectedPr;
27608
+ var providerType = _ref.providerType,
27609
+ layoutItem = _ref.layoutItem,
27610
+ widgetId = _ref.widgetId,
27611
+ workspace = _ref.workspace,
27612
+ appProviders = _ref.appProviders;
27613
+ // 1. Widget-level
27614
+ var widgetLevel = layoutItem === null || layoutItem === void 0 || (_layoutItem$selectedP = layoutItem.selectedProviders) === null || _layoutItem$selectedP === void 0 ? void 0 : _layoutItem$selectedP[providerType];
27615
+ if (widgetLevel) return widgetLevel;
27616
+
27617
+ // 2. Workspace-level
27618
+ 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]);
27619
+ if (workspaceLevel) return workspaceLevel;
27620
+
27621
+ // 3. App default — appProviders is either a map keyed by name or an
27622
+ // array. Support both because different callers shape it either way.
27623
+ if (appProviders) {
27624
+ if (Array.isArray(appProviders)) {
27625
+ var _iterator = _createForOfIteratorHelper$i(appProviders),
27626
+ _step;
27627
+ try {
27628
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
27629
+ var data = _step.value;
27630
+ if ((data === null || data === void 0 ? void 0 : data.type) === providerType && (data === null || data === void 0 ? void 0 : data.isDefaultForType) === true) {
27631
+ return data.name;
27632
+ }
27633
+ }
27634
+ } catch (err) {
27635
+ _iterator.e(err);
27636
+ } finally {
27637
+ _iterator.f();
27638
+ }
27639
+ } else if (_typeof(appProviders) === "object") {
27640
+ for (var _i = 0, _Object$entries = Object.entries(appProviders); _i < _Object$entries.length; _i++) {
27641
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
27642
+ name = _Object$entries$_i[0],
27643
+ _data = _Object$entries$_i[1];
27644
+ if ((_data === null || _data === void 0 ? void 0 : _data.type) === providerType && (_data === null || _data === void 0 ? void 0 : _data.isDefaultForType) === true) {
27645
+ return name;
27646
+ }
27647
+ }
27648
+ }
27649
+ }
27650
+ return null;
27651
+ }
27652
+
27653
+ /**
27654
+ * Walk every layout container in a workspace and yield each widget
27655
+ * instance with its concrete layout item. Handles the main layout,
27656
+ * per-page layouts, the sidebar, and nested LayoutGridContainers whose
27657
+ * children are stored on `items`/`layout`.
27658
+ *
27659
+ * Deduplicates by object identity AND by stable id so that shared
27660
+ * references across pages (or two structurally-distinct items that
27661
+ * carry the same uuidString / id, which is the wiring key) are
27662
+ * visited exactly once. Pipeline-style workspaces re-reference the
27663
+ * same widget objects across page layouts; without this dedupe the
27664
+ * Providers/Listeners tabs render one row per reference.
27665
+ */
27666
+ function forEachWidget(workspace, visit) {
27667
+ if (!workspace) return;
27668
+ var visitedObjects = new WeakSet();
27669
+ var visitedIds = new Set();
27670
+ var stableId = function stableId(item) {
27671
+ 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);
27672
+ };
27673
+ var _walk = function walk(items) {
27674
+ if (!Array.isArray(items)) return;
27675
+ var _iterator2 = _createForOfIteratorHelper$i(items),
27676
+ _step2;
27677
+ try {
27678
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
27679
+ var item = _step2.value;
27680
+ if (!item || _typeof(item) !== "object") continue;
27681
+ // A "widget" is any layout item with a component name.
27682
+ // Containers can have both a component name AND nested items
27683
+ // (e.g. LayoutGridContainer), so still recurse.
27684
+ if (item.component) {
27685
+ var id = stableId(item);
27686
+ var alreadyByRef = visitedObjects.has(item);
27687
+ var alreadyById = id != null && visitedIds.has(id);
27688
+ if (!alreadyByRef && !alreadyById) {
27689
+ visitedObjects.add(item);
27690
+ if (id != null) visitedIds.add(id);
27691
+ visit(item);
27692
+ }
27693
+ }
27694
+ if (Array.isArray(item.items)) _walk(item.items);
27695
+ if (Array.isArray(item.layout)) _walk(item.layout);
27696
+ }
27697
+ } catch (err) {
27698
+ _iterator2.e(err);
27699
+ } finally {
27700
+ _iterator2.f();
27701
+ }
27702
+ };
27703
+ _walk(workspace.layout);
27704
+ if (Array.isArray(workspace.pages)) {
27705
+ var _iterator3 = _createForOfIteratorHelper$i(workspace.pages),
27706
+ _step3;
27707
+ try {
27708
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
27709
+ var page = _step3.value;
27710
+ _walk(page === null || page === void 0 ? void 0 : page.layout);
27711
+ }
27712
+ } catch (err) {
27713
+ _iterator3.e(err);
27714
+ } finally {
27715
+ _iterator3.f();
27716
+ }
27717
+ }
27718
+ _walk(workspace.sidebarLayout);
27719
+ }
27720
+
27721
+ /**
27722
+ * Compute the list of unresolved required providers across a workspace.
27723
+ *
27724
+ * @param {object} args
27725
+ * @param {object} args.workspace The workspace (with layout/pages/sidebarLayout/selectedProviders).
27726
+ * @param {object|Array} args.appProviders
27727
+ * Map keyed by provider name, or an array of provider objects. Each
27728
+ * entry has at least `{ type, isDefaultForType }`.
27729
+ * @param {(componentName: string) => Array<{type, required?, providerClass?}>} args.getWidgetRequirements
27730
+ * Returns the `providers: [...]` declaration from the component's
27731
+ * `.dash.js` (via `ComponentManager.componentMap()[name].providers`).
27732
+ *
27733
+ * @returns {Array<{ widgetId, component, providerType, providerClass, layoutItem }>}
27734
+ * One entry per (widget instance, required provider type) that lacks
27735
+ * a binding.
27736
+ */
27737
+ function getUnresolvedProviders(_ref2) {
27738
+ var workspace = _ref2.workspace,
27739
+ appProviders = _ref2.appProviders,
27740
+ getWidgetRequirements = _ref2.getWidgetRequirements;
27741
+ if (!workspace || typeof getWidgetRequirements !== "function") return [];
27742
+ var unresolved = [];
27743
+ forEachWidget(workspace, function (item) {
27744
+ var requirements = getWidgetRequirements(item.component) || [];
27745
+ if (!Array.isArray(requirements) || requirements.length === 0) return;
27746
+ var widgetId = item.uuidString || item.uuid || item.id || null;
27747
+ var _iterator4 = _createForOfIteratorHelper$i(requirements),
27748
+ _step4;
27749
+ try {
27750
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
27751
+ var req = _step4.value;
27752
+ if (!req || !req.type) continue;
27753
+ if (req.required === false) continue; // optional, skip
27754
+
27755
+ var name = resolveProviderName({
27756
+ providerType: req.type,
27757
+ layoutItem: item,
27758
+ widgetId: widgetId,
27759
+ workspace: workspace,
27760
+ appProviders: appProviders
27761
+ });
27762
+ if (!name) {
27763
+ unresolved.push({
27764
+ widgetId: widgetId,
27765
+ component: item.component,
27766
+ providerType: req.type,
27767
+ providerClass: req.providerClass || null,
27768
+ layoutItem: item
27769
+ });
27770
+ }
27771
+ }
27772
+ } catch (err) {
27773
+ _iterator4.e(err);
27774
+ } finally {
27775
+ _iterator4.f();
27776
+ }
27777
+ });
27778
+ return unresolved;
27779
+ }
27780
+
27781
+ /**
27782
+ * Group an unresolved-provider list (or any `{widget, providerType}` list)
27783
+ * by provider type, so the Providers tab can render one row per unique
27784
+ * type with N widgets beneath.
27785
+ */
27786
+ function groupByProviderType(unresolved) {
27787
+ var byType = new Map();
27788
+ var _iterator5 = _createForOfIteratorHelper$i(unresolved || []),
27789
+ _step5;
27790
+ try {
27791
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
27792
+ var u = _step5.value;
27793
+ if (!(u !== null && u !== void 0 && u.providerType)) continue;
27794
+ if (!byType.has(u.providerType)) byType.set(u.providerType, []);
27795
+ byType.get(u.providerType).push(u);
27796
+ }
27797
+ } catch (err) {
27798
+ _iterator5.e(err);
27799
+ } finally {
27800
+ _iterator5.f();
27801
+ }
27802
+ return byType;
27803
+ }
27804
+
27805
+ /**
27806
+ * Summarize every widget in the workspace that requires ANY provider,
27807
+ * regardless of whether it's already resolved. Drives the Providers tab's
27808
+ * "show per-widget overrides" expansion — the modal lists all widgets so
27809
+ * the user can change an explicit override even for types that are
27810
+ * already resolved via the app default.
27811
+ */
27812
+ function getAllProviderBindings(_ref3) {
27813
+ var workspace = _ref3.workspace,
27814
+ appProviders = _ref3.appProviders,
27815
+ getWidgetRequirements = _ref3.getWidgetRequirements;
27816
+ if (!workspace || typeof getWidgetRequirements !== "function") return [];
27817
+ var bindings = [];
27818
+ forEachWidget(workspace, function (item) {
27819
+ var requirements = getWidgetRequirements(item.component) || [];
27820
+ if (!Array.isArray(requirements) || requirements.length === 0) return;
27821
+ var widgetId = item.uuidString || item.uuid || item.id || null;
27822
+ var _iterator6 = _createForOfIteratorHelper$i(requirements),
27823
+ _step6;
27824
+ try {
27825
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
27826
+ var req = _step6.value;
27827
+ if (!req || !req.type) continue;
27828
+ var name = resolveProviderName({
27829
+ providerType: req.type,
27830
+ layoutItem: item,
27831
+ widgetId: widgetId,
27832
+ workspace: workspace,
27833
+ appProviders: appProviders
27834
+ });
27835
+ bindings.push({
27836
+ widgetId: widgetId,
27837
+ component: item.component,
27838
+ providerType: req.type,
27839
+ providerClass: req.providerClass || null,
27840
+ required: req.required !== false,
27841
+ resolvedProviderName: name,
27842
+ layoutItem: item
27843
+ });
27844
+ }
27845
+ } catch (err) {
27846
+ _iterator6.e(err);
27847
+ } finally {
27848
+ _iterator6.f();
27849
+ }
27850
+ });
27851
+ return bindings;
27852
+ }
27853
+
27854
+ 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; }
27855
+ 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; }
27856
+ 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; } } }; }
27857
+ 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; } }
27858
+ 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; }
27859
+ var EVENT_STRING_RE = /^([^[]+)\[([^\]]+)\]\.(.+)$/;
27860
+
27861
+ /** Parse "Component[itemId].event" → { component, itemId, event }. */
27862
+ function parseEventString(eventString) {
27863
+ if (typeof eventString !== "string") return null;
27864
+ var m = eventString.match(EVENT_STRING_RE);
27865
+ if (!m) return null;
27866
+ return {
27867
+ component: m[1],
27868
+ itemId: m[2],
27869
+ event: m[3]
27870
+ };
27871
+ }
27872
+
27873
+ /** Build an event string in the canonical runtime format. */
27874
+ function formatEventString(component, itemId, event) {
27875
+ return "".concat(component, "[").concat(itemId, "].").concat(event);
27876
+ }
27877
+
27878
+ /**
27879
+ * Get a stable id for a layout item. Layout items historically used
27880
+ * numeric `id`; some newer flows also carry `uuidString`/`uuid`. The
27881
+ * runtime event-string format uses whichever is `item.id`, so we
27882
+ * default to that and fall back to the others for resilience.
27883
+ */
27884
+ function itemIdOf(item) {
27885
+ if (item == null) return null;
27886
+ if (item.id !== undefined && item.id !== null) return String(item.id);
27887
+ if (item.uuidString) return item.uuidString;
27888
+ if (item.uuid) return item.uuid;
27889
+ return null;
27890
+ }
27891
+
27892
+ /**
27893
+ * Best-effort human label for a layout item: explicit title, then
27894
+ * widget config display name, then component name + short id.
27895
+ */
27896
+ function labelFor(item, getWidgetConfig) {
27897
+ var _item$userPrefs, _item$userConfig;
27898
+ var cfg = (getWidgetConfig === null || getWidgetConfig === void 0 ? void 0 : getWidgetConfig(item.component)) || null;
27899
+ 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);
27900
+ if (explicit) return explicit;
27901
+ if (cfg !== null && cfg !== void 0 && cfg.displayName) return cfg.displayName;
27902
+ var id = itemIdOf(item);
27903
+ return "".concat(item.component || "widget").concat(id ? "[".concat(String(id).slice(0, 6), "]") : "");
27904
+ }
27905
+
27906
+ /**
27907
+ * Read the events/eventHandlers metadata for a widget. Items can carry
27908
+ * the arrays inline (older pattern where they got cached onto the
27909
+ * layout item); the current component config carries them via the
27910
+ * ComponentManager catalog. We UNION both so we don't flag a binding
27911
+ * as orphaned just because an inline cache is stale — if the current
27912
+ * widget code declares the event/handler, the binding is valid.
27913
+ */
27914
+ function eventsOf(item, getWidgetConfig) {
27915
+ var inline = Array.isArray(item.events) ? item.events : [];
27916
+ var cfg = (getWidgetConfig === null || getWidgetConfig === void 0 ? void 0 : getWidgetConfig(item.component)) || {};
27917
+ var fromCfg = Array.isArray(cfg.events) ? cfg.events : [];
27918
+ return _toConsumableArray(new Set([].concat(_toConsumableArray(inline), _toConsumableArray(fromCfg))));
27919
+ }
27920
+ function eventHandlersOf(item, getWidgetConfig) {
27921
+ var inline = Array.isArray(item.eventHandlers) ? item.eventHandlers : [];
27922
+ var cfg = (getWidgetConfig === null || getWidgetConfig === void 0 ? void 0 : getWidgetConfig(item.component)) || {};
27923
+ var fromCfg = Array.isArray(cfg.eventHandlers) ? cfg.eventHandlers : [];
27924
+ return _toConsumableArray(new Set([].concat(_toConsumableArray(inline), _toConsumableArray(fromCfg))));
27925
+ }
27926
+
27927
+ /**
27928
+ * Every widget instance in the workspace that emits at least one event.
27929
+ * Deduplicated by `${component}|${itemId}` — the same compound key that
27930
+ * event strings use at runtime, so any "duplicate" in the tree (same
27931
+ * widget referenced across pages) resolves to the same wiring target.
27932
+ * @returns {Array<{ itemId, component, label, events: string[], key: string }>}
27933
+ */
27934
+ function getEmitters(workspace, getWidgetConfig) {
27935
+ var byKey = new Map();
27936
+ forEachWidget(workspace, function (item) {
27937
+ var events = eventsOf(item, getWidgetConfig);
27938
+ if (events.length === 0) return;
27939
+ var itemId = itemIdOf(item);
27940
+ if (itemId == null) return;
27941
+ var key = "".concat(item.component, "|").concat(itemId);
27942
+ if (byKey.has(key)) return;
27943
+ byKey.set(key, {
27944
+ key: key,
27945
+ itemId: itemId,
27946
+ component: item.component,
27947
+ label: labelFor(item, getWidgetConfig),
27948
+ events: events
27949
+ });
27950
+ });
27951
+ return Array.from(byKey.values());
27952
+ }
27953
+
27954
+ /**
27955
+ * Every widget instance in the workspace that accepts at least one
27956
+ * handler. Used to populate the receiver dropdown. Deduplicated by
27957
+ * `${component}|${itemId}` (see getEmitters).
27958
+ * @returns {Array<{ itemId, component, label, eventHandlers: string[], listeners: object, key: string }>}
27959
+ */
27960
+ function getReceivers(workspace, getWidgetConfig) {
27961
+ var byKey = new Map();
27962
+ forEachWidget(workspace, function (item) {
27963
+ var handlers = eventHandlersOf(item, getWidgetConfig);
27964
+ if (handlers.length === 0) return;
27965
+ var itemId = itemIdOf(item);
27966
+ if (itemId == null) return;
27967
+ var key = "".concat(item.component, "|").concat(itemId);
27968
+ if (byKey.has(key)) return;
27969
+ byKey.set(key, {
27970
+ key: key,
27971
+ itemId: itemId,
27972
+ component: item.component,
27973
+ label: labelFor(item, getWidgetConfig),
27974
+ eventHandlers: handlers,
27975
+ listeners: item.listeners || {}
27976
+ });
27977
+ });
27978
+ return Array.from(byKey.values());
27979
+ }
27980
+
27981
+ /**
27982
+ * Flatten every listener binding in the workspace into a list of
27983
+ * { receiverItemId, receiverComponent, handlerName, sourceComponent,
27984
+ * sourceItemId, eventName, raw } tuples. `raw` is the original
27985
+ * event string for round-trip fidelity on remove.
27986
+ */
27987
+ function getCurrentWiring(workspace) {
27988
+ var wiring = [];
27989
+ forEachWidget(workspace, function (item) {
27990
+ var receiverItemId = itemIdOf(item);
27991
+ if (receiverItemId == null) return;
27992
+ var listeners = item.listeners;
27993
+ if (!listeners || _typeof(listeners) !== "object") return;
27994
+ for (var _i = 0, _Object$entries = Object.entries(listeners); _i < _Object$entries.length; _i++) {
27995
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
27996
+ handlerName = _Object$entries$_i[0],
27997
+ eventList = _Object$entries$_i[1];
27998
+ // Live format is array; defensive guard for legacy object
27999
+ // form (a single source widget keyed under the handler).
28000
+ var events = Array.isArray(eventList) ? eventList : typeof eventList === "string" ? [eventList] : [];
28001
+ var _iterator = _createForOfIteratorHelper$h(events),
28002
+ _step;
28003
+ try {
28004
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
28005
+ var raw = _step.value;
28006
+ var parsed = parseEventString(raw);
28007
+ if (!parsed) continue;
28008
+ wiring.push({
28009
+ receiverItemId: receiverItemId,
28010
+ receiverComponent: item.component,
28011
+ handlerName: handlerName,
28012
+ sourceComponent: parsed.component,
28013
+ sourceItemId: parsed.itemId,
28014
+ eventName: parsed.event,
28015
+ raw: raw
28016
+ });
28017
+ }
28018
+ } catch (err) {
28019
+ _iterator.e(err);
28020
+ } finally {
28021
+ _iterator.f();
28022
+ }
28023
+ }
28024
+ });
28025
+ return wiring;
28026
+ }
28027
+
28028
+ /**
28029
+ * Detect listener bindings that are no longer valid: the source widget
28030
+ * doesn't exist in the workspace anymore, or the source widget doesn't
28031
+ * declare the event, or the receiver doesn't declare the handler.
28032
+ * Each entry includes a `reason` so the modal can show a sensible
28033
+ * message.
28034
+ */
28035
+ function getOrphanedListeners(workspace, getWidgetConfig) {
28036
+ var wiring = getCurrentWiring(workspace);
28037
+ if (wiring.length === 0) return [];
28038
+
28039
+ // Build two lookups:
28040
+ // byCompositeKey: `${component}|${itemId}` → widget meta (primary)
28041
+ // byItemId: `${itemId}` → widget meta (fallback,
28042
+ // used only for the "source-missing" check where
28043
+ // the wiring's component can't be trusted yet)
28044
+ // The composite key matches how the runtime event-string
28045
+ // (`Component[itemId].event`) identifies a widget, so orphan
28046
+ // decisions line up with what actually fires at runtime.
28047
+ var byCompositeKey = new Map();
28048
+ var byItemId = new Map();
28049
+ forEachWidget(workspace, function (item) {
28050
+ var id = itemIdOf(item);
28051
+ if (id == null) return;
28052
+ var meta = {
28053
+ component: item.component,
28054
+ events: eventsOf(item, getWidgetConfig),
28055
+ eventHandlers: eventHandlersOf(item, getWidgetConfig)
28056
+ };
28057
+ byCompositeKey.set("".concat(item.component, "|").concat(id), meta);
28058
+ // First-seen wins on numeric-id collisions; good enough for the
28059
+ // "does any widget with this id exist?" fallback.
28060
+ if (!byItemId.has(id)) byItemId.set(id, meta);
28061
+ });
28062
+ var orphans = [];
28063
+ var _iterator2 = _createForOfIteratorHelper$h(wiring),
28064
+ _step2;
28065
+ try {
28066
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
28067
+ var w = _step2.value;
28068
+ var srcKey = "".concat(w.sourceComponent, "|").concat(w.sourceItemId);
28069
+ var src = byCompositeKey.get(srcKey);
28070
+ if (!src) {
28071
+ // No (component, id) match. If some OTHER widget still owns
28072
+ // this id, the source component changed; otherwise it's truly
28073
+ // missing. Preserves the user's ability to see whether a
28074
+ // rename happened vs. a delete.
28075
+ var fallback = byItemId.get(String(w.sourceItemId));
28076
+ orphans.push(_objectSpread$z(_objectSpread$z({}, w), {}, {
28077
+ reason: fallback ? "source-component-mismatch" : "source-missing"
28078
+ }));
28079
+ continue;
28080
+ }
28081
+ if (!src.events.includes(w.eventName)) {
28082
+ orphans.push(_objectSpread$z(_objectSpread$z({}, w), {}, {
28083
+ reason: "event-not-emitted"
28084
+ }));
28085
+ continue;
28086
+ }
28087
+ var receiverKey = "".concat(w.receiverComponent, "|").concat(w.receiverItemId);
28088
+ var receiver = byCompositeKey.get(receiverKey);
28089
+ if (receiver && !receiver.eventHandlers.includes(w.handlerName)) {
28090
+ orphans.push(_objectSpread$z(_objectSpread$z({}, w), {}, {
28091
+ reason: "handler-not-declared"
28092
+ }));
28093
+ }
28094
+ }
28095
+ } catch (err) {
28096
+ _iterator2.e(err);
28097
+ } finally {
28098
+ _iterator2.f();
28099
+ }
28100
+ return orphans;
28101
+ }
28102
+
28103
+ /**
28104
+ * Mutate a workspace tree in place, removing listener bindings whose
28105
+ * source widget is not present in the workspace. Pure: doesn't need
28106
+ * ComponentManager, so it's safe to call from WorkspaceModel during
28107
+ * load — the workspace's own tree is the only source of truth.
28108
+ *
28109
+ * Handles the four cases producing a "source-missing" orphan:
28110
+ * - the emitter widget was deleted
28111
+ * - the emitter widget's id now belongs to a different component
28112
+ * (stored binding has stale component name)
28113
+ * - the source string failed to parse (legacy/garbage data)
28114
+ *
28115
+ * Leaves "event-not-emitted" / "handler-not-declared" cases untouched
28116
+ * because they require the current widget catalog to decide — those
28117
+ * are handled at runtime with full ComponentManager access.
28118
+ *
28119
+ * @returns {number} count of bindings removed (for logging/diagnostics)
28120
+ */
28121
+ function pruneDeadListenerReferences(workspace) {
28122
+ if (!workspace) return 0;
28123
+
28124
+ // Build the set of live widgets in the tree, keyed by the same
28125
+ // `${component}|${itemId}` the runtime uses to resolve events.
28126
+ var liveKeys = new Set();
28127
+ var _walkForLive = function walkForLive(items) {
28128
+ if (!Array.isArray(items)) return;
28129
+ var _iterator3 = _createForOfIteratorHelper$h(items),
28130
+ _step3;
28131
+ try {
28132
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
28133
+ var item = _step3.value;
28134
+ if (!item || _typeof(item) !== "object") continue;
28135
+ if (item.component) {
28136
+ var id = itemIdOf(item);
28137
+ if (id != null) liveKeys.add("".concat(item.component, "|").concat(id));
28138
+ }
28139
+ if (Array.isArray(item.items)) _walkForLive(item.items);
28140
+ if (Array.isArray(item.layout)) _walkForLive(item.layout);
28141
+ }
28142
+ } catch (err) {
28143
+ _iterator3.e(err);
28144
+ } finally {
28145
+ _iterator3.f();
28146
+ }
28147
+ };
28148
+ _walkForLive(workspace.layout);
28149
+ if (Array.isArray(workspace.pages)) {
28150
+ var _iterator4 = _createForOfIteratorHelper$h(workspace.pages),
28151
+ _step4;
28152
+ try {
28153
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
28154
+ var page = _step4.value;
28155
+ _walkForLive(page === null || page === void 0 ? void 0 : page.layout);
28156
+ }
28157
+ } catch (err) {
28158
+ _iterator4.e(err);
28159
+ } finally {
28160
+ _iterator4.f();
28161
+ }
28162
+ }
28163
+ _walkForLive(workspace.sidebarLayout);
28164
+ var removed = 0;
28165
+ var _pruneListeners = function pruneListeners(items) {
28166
+ if (!Array.isArray(items)) return;
28167
+ var _iterator5 = _createForOfIteratorHelper$h(items),
28168
+ _step5;
28169
+ try {
28170
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
28171
+ var item = _step5.value;
28172
+ if (!item || _typeof(item) !== "object") continue;
28173
+ if (item.listeners && _typeof(item.listeners) === "object") {
28174
+ for (var _i2 = 0, _Object$keys = Object.keys(item.listeners); _i2 < _Object$keys.length; _i2++) {
28175
+ var handler = _Object$keys[_i2];
28176
+ var events = item.listeners[handler];
28177
+ if (!Array.isArray(events)) continue;
28178
+ var kept = [];
28179
+ var _iterator6 = _createForOfIteratorHelper$h(events),
28180
+ _step6;
28181
+ try {
28182
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
28183
+ var raw = _step6.value;
28184
+ var parsed = parseEventString(raw);
28185
+ if (parsed && liveKeys.has("".concat(parsed.component, "|").concat(parsed.itemId))) {
28186
+ kept.push(raw);
28187
+ } else {
28188
+ removed += 1;
28189
+ }
28190
+ }
28191
+ } catch (err) {
28192
+ _iterator6.e(err);
28193
+ } finally {
28194
+ _iterator6.f();
28195
+ }
28196
+ if (kept.length === 0) {
28197
+ delete item.listeners[handler];
28198
+ } else if (kept.length !== events.length) {
28199
+ item.listeners[handler] = kept;
28200
+ }
28201
+ }
28202
+ }
28203
+ if (Array.isArray(item.items)) _pruneListeners(item.items);
28204
+ if (Array.isArray(item.layout)) _pruneListeners(item.layout);
28205
+ }
28206
+ } catch (err) {
28207
+ _iterator5.e(err);
28208
+ } finally {
28209
+ _iterator5.f();
28210
+ }
28211
+ };
28212
+ _pruneListeners(workspace.layout);
28213
+ if (Array.isArray(workspace.pages)) {
28214
+ var _iterator7 = _createForOfIteratorHelper$h(workspace.pages),
28215
+ _step7;
28216
+ try {
28217
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
28218
+ var _page = _step7.value;
28219
+ _pruneListeners(_page === null || _page === void 0 ? void 0 : _page.layout);
28220
+ }
28221
+ } catch (err) {
28222
+ _iterator7.e(err);
28223
+ } finally {
28224
+ _iterator7.f();
28225
+ }
28226
+ }
28227
+ _pruneListeners(workspace.sidebarLayout);
28228
+ return removed;
28229
+ }
28230
+
28231
+ /**
28232
+ * Apply a staged delta to a workspace's listener bindings and return a
28233
+ * NEW workspace object (deep-cloned along the modified path).
28234
+ *
28235
+ * `adds` / `removes` are arrays of
28236
+ * { receiverItemId, handlerName, sourceComponent, sourceItemId, eventName }
28237
+ *
28238
+ * Removes may also pass `raw` (the exact pre-existing event string) for
28239
+ * a precise match; otherwise we match on the canonical formatted form.
28240
+ */
28241
+ function applyWiringChanges(workspace, _ref) {
28242
+ var _ref$adds = _ref.adds,
28243
+ adds = _ref$adds === void 0 ? [] : _ref$adds,
28244
+ _ref$removes = _ref.removes,
28245
+ removes = _ref$removes === void 0 ? [] : _ref$removes;
28246
+ if (!workspace) return workspace;
28247
+ if (adds.length === 0 && removes.length === 0) return workspace;
28248
+
28249
+ // Group changes by receiver for cheap per-item updates.
28250
+ var byReceiver = new Map();
28251
+ var ensure = function ensure(id) {
28252
+ if (!byReceiver.has(id)) byReceiver.set(id, {
28253
+ adds: [],
28254
+ removes: []
28255
+ });
28256
+ return byReceiver.get(id);
28257
+ };
28258
+ var _iterator8 = _createForOfIteratorHelper$h(adds),
28259
+ _step8;
28260
+ try {
28261
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
28262
+ var a = _step8.value;
28263
+ if (!a.receiverItemId) continue;
28264
+ ensure(String(a.receiverItemId)).adds.push(a);
28265
+ }
28266
+ } catch (err) {
28267
+ _iterator8.e(err);
28268
+ } finally {
28269
+ _iterator8.f();
28270
+ }
28271
+ var _iterator9 = _createForOfIteratorHelper$h(removes),
28272
+ _step9;
28273
+ try {
28274
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
28275
+ var r = _step9.value;
28276
+ if (!r.receiverItemId) continue;
28277
+ ensure(String(r.receiverItemId)).removes.push(r);
28278
+ }
28279
+
28280
+ // Walk the tree and rebuild listeners on every touched item. We do
28281
+ // shallow clones along the path so React change detection is
28282
+ // reliable — but the tree shape is preserved.
28283
+ } catch (err) {
28284
+ _iterator9.e(err);
28285
+ } finally {
28286
+ _iterator9.f();
28287
+ }
28288
+ var cloneList = function cloneList(items) {
28289
+ return Array.isArray(items) ? items.map(function (item) {
28290
+ return transform(item);
28291
+ }) : items;
28292
+ };
28293
+ var transform = function transform(item) {
28294
+ if (!item || _typeof(item) !== "object") return item;
28295
+ var next = item;
28296
+ var id = itemIdOf(item);
28297
+ var change = id != null ? byReceiver.get(String(id)) : null;
28298
+ if (change) {
28299
+ var newListeners = applyToItem(item.listeners || {}, change);
28300
+ next = _objectSpread$z(_objectSpread$z({}, next), {}, {
28301
+ listeners: newListeners
28302
+ });
28303
+ }
28304
+ if (Array.isArray(next.items)) {
28305
+ next = _objectSpread$z(_objectSpread$z({}, next), {}, {
28306
+ items: cloneList(next.items)
28307
+ });
28308
+ }
28309
+ if (Array.isArray(next.layout)) {
28310
+ next = _objectSpread$z(_objectSpread$z({}, next), {}, {
28311
+ layout: cloneList(next.layout)
28312
+ });
28313
+ }
28314
+ return next;
28315
+ };
28316
+ var updatedWs = _objectSpread$z({}, workspace);
28317
+ if (Array.isArray(workspace.layout)) {
28318
+ updatedWs.layout = cloneList(workspace.layout);
28319
+ }
28320
+ if (Array.isArray(workspace.pages)) {
28321
+ updatedWs.pages = workspace.pages.map(function (page) {
28322
+ return _objectSpread$z(_objectSpread$z({}, page), {}, {
28323
+ layout: cloneList(page.layout)
28324
+ });
28325
+ });
28326
+ }
28327
+ if (Array.isArray(workspace.sidebarLayout)) {
28328
+ updatedWs.sidebarLayout = cloneList(workspace.sidebarLayout);
28329
+ }
28330
+ return updatedWs;
28331
+ }
28332
+ function applyToItem(listeners, _ref2) {
28333
+ var adds = _ref2.adds,
28334
+ removes = _ref2.removes;
28335
+ // Deep enough clone for handler arrays.
28336
+ var next = {};
28337
+ for (var _i3 = 0, _Object$entries2 = Object.entries(listeners); _i3 < _Object$entries2.length; _i3++) {
28338
+ var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i3], 2),
28339
+ k = _Object$entries2$_i[0],
28340
+ v = _Object$entries2$_i[1];
28341
+ next[k] = Array.isArray(v) ? _toConsumableArray(v) : v;
28342
+ }
28343
+
28344
+ // Removes first so a re-add (rare) lands.
28345
+ var _iterator0 = _createForOfIteratorHelper$h(removes),
28346
+ _step0;
28347
+ try {
28348
+ var _loop = function _loop() {
28349
+ var r = _step0.value;
28350
+ var target = r.handlerName;
28351
+ if (!target) return 0; // continue
28352
+ var events = next[target];
28353
+ if (!Array.isArray(events)) return 0; // continue
28354
+ var eventStr = r.raw || formatEventString(r.sourceComponent, r.sourceItemId, r.eventName);
28355
+ var filtered = events.filter(function (e) {
28356
+ return e !== eventStr;
28357
+ });
28358
+ if (filtered.length === 0) {
28359
+ delete next[target];
28360
+ } else {
28361
+ next[target] = filtered;
28362
+ }
28363
+ },
28364
+ _ret;
28365
+ for (_iterator0.s(); !(_step0 = _iterator0.n()).done;) {
28366
+ _ret = _loop();
28367
+ if (_ret === 0) continue;
28368
+ }
28369
+ } catch (err) {
28370
+ _iterator0.e(err);
28371
+ } finally {
28372
+ _iterator0.f();
28373
+ }
28374
+ var _iterator1 = _createForOfIteratorHelper$h(adds),
28375
+ _step1;
28376
+ try {
28377
+ for (_iterator1.s(); !(_step1 = _iterator1.n()).done;) {
28378
+ var a = _step1.value;
28379
+ var target = a.handlerName;
28380
+ if (!target) continue;
28381
+ var eventStr = formatEventString(a.sourceComponent, a.sourceItemId, a.eventName);
28382
+ var existing = Array.isArray(next[target]) ? next[target] : [];
28383
+ if (existing.includes(eventStr)) continue;
28384
+ next[target] = [].concat(_toConsumableArray(existing), [eventStr]);
28385
+ }
28386
+ } catch (err) {
28387
+ _iterator1.e(err);
28388
+ } finally {
28389
+ _iterator1.f();
28390
+ }
28391
+ return next;
28392
+ }
28393
+
27549
28394
  /**
27550
28395
  * Default layout for a brand-new workspace: a single 1x1 grid container
27551
28396
  * with one empty cell. Mirrors DashboardModel._initializeLayout().
@@ -27673,6 +28518,13 @@ var WorkspaceModel = function WorkspaceModel(workspaceItem) {
27673
28518
  workspace.menuId = "menuId" in obj ? obj["menuId"] : 1;
27674
28519
  workspace.selectedProviders = "selectedProviders" in obj ? obj["selectedProviders"] : {};
27675
28520
  workspace.themeKey = "themeKey" in obj ? obj["themeKey"] : null;
28521
+
28522
+ // Strip any listener bindings whose source widget is no longer in
28523
+ // the tree. These "orphan" bindings are dead — they don't match any
28524
+ // live publisher and never fire — so they're safe to remove at load
28525
+ // time before the renderer wires up subscriptions. Keeps stored
28526
+ // workspaces self-consistent without the user having to do anything.
28527
+ pruneDeadListenerReferences(workspace);
27676
28528
  return sanitizeWorkspaceObject(workspace);
27677
28529
  // return workspace;
27678
28530
  };
@@ -28009,9 +28861,9 @@ var MenuItemModel = function MenuItemModel() {
28009
28861
 
28010
28862
  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; }
28011
28863
  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; }
28012
- 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; } } }; }
28013
- 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; } }
28014
- 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; }
28864
+ 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; } } }; }
28865
+ 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; } }
28866
+ 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; }
28015
28867
  /**
28016
28868
  * A Model for a Workspace (Dashboard)
28017
28869
  * The Dashboard in this instance is the entire Layout inclusive of the workspaces and widgets
@@ -28072,12 +28924,18 @@ var DashboardModel = /*#__PURE__*/function () {
28072
28924
  }
28073
28925
  obj = null;
28074
28926
 
28927
+ // Strip any listener bindings whose source widget is no longer in
28928
+ // the tree — dead bindings never fire and just clutter the stored
28929
+ // workspace. Safe at model-init time because it's purely tree-local
28930
+ // (doesn't need ComponentManager).
28931
+ pruneDeadListenerReferences(this);
28932
+
28075
28933
  // Normalize all grids on load to repair any persisted corruption
28076
28934
  this._normalizeAllGrids();
28077
28935
 
28078
28936
  // Also normalize grids within pages
28079
28937
  if (this.pages.length > 0) {
28080
- var _iterator = _createForOfIteratorHelper$h(this.pages),
28938
+ var _iterator = _createForOfIteratorHelper$g(this.pages),
28081
28939
  _step;
28082
28940
  try {
28083
28941
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -30053,7 +30911,7 @@ var DashboardModel = /*#__PURE__*/function () {
30053
30911
  try {
30054
30912
  // Collect all item IDs actively referenced by grid cells
30055
30913
  var activeItemIds = new Set();
30056
- var _iterator2 = _createForOfIteratorHelper$h(this.layout),
30914
+ var _iterator2 = _createForOfIteratorHelper$g(this.layout),
30057
30915
  _step2;
30058
30916
  try {
30059
30917
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -30093,7 +30951,7 @@ var DashboardModel = /*#__PURE__*/function () {
30093
30951
  });
30094
30952
 
30095
30953
  // Clean listener references on remaining items for each removed orphan
30096
- var _iterator3 = _createForOfIteratorHelper$h(orphanedIds),
30954
+ var _iterator3 = _createForOfIteratorHelper$g(orphanedIds),
30097
30955
  _step3;
30098
30956
  try {
30099
30957
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -30752,9 +31610,9 @@ var useDashboard = function useDashboard() {
30752
31610
  });
30753
31611
  };
30754
31612
 
30755
- 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; } } }; }
30756
- 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; } }
30757
- 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; }
31613
+ 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; } } }; }
31614
+ 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; } }
31615
+ 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; }
30758
31616
 
30759
31617
  /**
30760
31618
  * useWidgetProviders Hook
@@ -30805,7 +31663,7 @@ var useWidgetProviders = function useWidgetProviders() {
30805
31663
  // 1. Widget-level: stored directly on the layout item by handleSelectProvider
30806
31664
  // 2. Workspace-level: stored as workspace.selectedProviders[widgetId][providerType]
30807
31665
  var providers = {};
30808
- var _iterator = _createForOfIteratorHelper$g(providerDeclarations),
31666
+ var _iterator = _createForOfIteratorHelper$f(providerDeclarations),
30809
31667
  _step;
30810
31668
  try {
30811
31669
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -31560,9 +32418,9 @@ var useNotifications = function useNotifications() {
31560
32418
  };
31561
32419
  };
31562
32420
 
31563
- 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; } } }; }
31564
- 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; } }
31565
- 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; }
32421
+ 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; } } }; }
32422
+ 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; } }
32423
+ 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; }
31566
32424
 
31567
32425
  /**
31568
32426
  * useScheduler Hook
@@ -31635,7 +32493,7 @@ var useScheduler = function useScheduler() {
31635
32493
  if (pending && pending.length > 0) {
31636
32494
  setPendingResults(pending);
31637
32495
  // Call handlers for each pending result
31638
- var _iterator = _createForOfIteratorHelper$f(pending),
32496
+ var _iterator = _createForOfIteratorHelper$e(pending),
31639
32497
  _step;
31640
32498
  try {
31641
32499
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -34662,9 +35520,9 @@ function loadWidgetBundle(source, widgetName) {
34662
35520
  };
34663
35521
  }
34664
35522
 
34665
- 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; } } }; }
34666
- 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; } }
34667
- 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; }
35523
+ 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; } } }; }
35524
+ 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; } }
35525
+ 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; }
34668
35526
  /**
34669
35527
  * Validation utilities for grid-first dashboard architecture
34670
35528
  *
@@ -34903,7 +35761,7 @@ var validateCellMerge = function validateCellMerge(cellNumbers, grid) {
34903
35761
 
34904
35762
  // Validate each cell
34905
35763
  var cells = [];
34906
- var _iterator = _createForOfIteratorHelper$e(cellNumbers),
35764
+ var _iterator = _createForOfIteratorHelper$d(cellNumbers),
34907
35765
  _step;
34908
35766
  try {
34909
35767
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -35251,9 +36109,9 @@ var HARMONY_STRATEGIES = [{
35251
36109
  label: "Custom"
35252
36110
  }];
35253
36111
 
35254
- 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; } } }; }
35255
- 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; } }
35256
- 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; }
36112
+ 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; } } }; }
36113
+ 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; } }
36114
+ 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; }
35257
36115
  /**
35258
36116
  * markdownFormParser.js
35259
36117
  *
@@ -35300,7 +36158,7 @@ function detectColumnType(header, cellValues) {
35300
36158
  }
35301
36159
 
35302
36160
  // Check if any cell has an enum pattern (template placeholders)
35303
- var _iterator = _createForOfIteratorHelper$d(cellValues),
36161
+ var _iterator = _createForOfIteratorHelper$c(cellValues),
35304
36162
  _step;
35305
36163
  try {
35306
36164
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -35309,7 +36167,7 @@ function detectColumnType(header, cellValues) {
35309
36167
  if (options) {
35310
36168
  // Include all unique existing cell values as valid options
35311
36169
  var allOptions = new Set(options);
35312
- var _iterator2 = _createForOfIteratorHelper$d(cellValues),
36170
+ var _iterator2 = _createForOfIteratorHelper$c(cellValues),
35313
36171
  _step2;
35314
36172
  try {
35315
36173
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -35519,7 +36377,7 @@ function parse(markdown) {
35519
36377
  */
35520
36378
  function serialize(blocks) {
35521
36379
  var parts = [];
35522
- var _iterator3 = _createForOfIteratorHelper$d(blocks),
36380
+ var _iterator3 = _createForOfIteratorHelper$c(blocks),
35523
36381
  _step3;
35524
36382
  try {
35525
36383
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -35534,7 +36392,7 @@ function serialize(blocks) {
35534
36392
  parts.push("| " + block.columns.map(function () {
35535
36393
  return "------";
35536
36394
  }).join(" | ") + " |");
35537
- var _iterator4 = _createForOfIteratorHelper$d(block.rows),
36395
+ var _iterator4 = _createForOfIteratorHelper$c(block.rows),
35538
36396
  _step4;
35539
36397
  try {
35540
36398
  var _loop2 = function _loop2() {
@@ -35555,7 +36413,7 @@ function serialize(blocks) {
35555
36413
  break;
35556
36414
  }
35557
36415
  case "list":
35558
- var _iterator5 = _createForOfIteratorHelper$d(block.items),
36416
+ var _iterator5 = _createForOfIteratorHelper$c(block.items),
35559
36417
  _step5;
35560
36418
  try {
35561
36419
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
@@ -35569,7 +36427,7 @@ function serialize(blocks) {
35569
36427
  }
35570
36428
  break;
35571
36429
  case "blockquote":
35572
- var _iterator6 = _createForOfIteratorHelper$d(block.text.split("\n")),
36430
+ var _iterator6 = _createForOfIteratorHelper$c(block.text.split("\n")),
35573
36431
  _step6;
35574
36432
  try {
35575
36433
  for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
@@ -39072,9 +39930,9 @@ var ThemeManagerModal = function ThemeManagerModal(_ref) {
39072
39930
 
39073
39931
  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; }
39074
39932
  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; }
39075
- 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; } } }; }
39076
- 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; } }
39077
- 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; }
39933
+ 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; } } }; }
39934
+ 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; } }
39935
+ 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; }
39078
39936
  var DASHBOARD_TAGS = ["productivity", "monitoring", "analytics", "communication", "developer", "sales", "marketing", "finance", "project-management", "social", "news", "utilities"];
39079
39937
  var BUMP_OPTIONS$1 = [{
39080
39938
  value: "patch",
@@ -39148,7 +40006,7 @@ function collectComponentConfigs() {
39148
40006
  // fixed "reference" entry.
39149
40007
  function seedSelections(plan, dashboardVisibility) {
39150
40008
  var selections = {};
39151
- var _iterator = _createForOfIteratorHelper$c(plan.widgets || []),
40009
+ var _iterator = _createForOfIteratorHelper$b(plan.widgets || []),
39152
40010
  _step;
39153
40011
  try {
39154
40012
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -39481,7 +40339,7 @@ var PublishDashboardModal = function PublishDashboardModal(_ref) {
39481
40339
  break;
39482
40340
  }
39483
40341
  seenPackages = new Set();
39484
- _iterator2 = _createForOfIteratorHelper$c(plan.widgets || []);
40342
+ _iterator2 = _createForOfIteratorHelper$b(plan.widgets || []);
39485
40343
  _context2.prev = 2;
39486
40344
  _iterator2.s();
39487
40345
  case 3:
@@ -40346,7 +41204,7 @@ function DependencyTable(_ref4) {
40346
41204
  // row. Each row shows the list of component widgets that live inside it
40347
41205
  // so the user knows what's getting published.
40348
41206
  var byKey = new Map();
40349
- var _iterator3 = _createForOfIteratorHelper$c(plan.widgets || []),
41207
+ var _iterator3 = _createForOfIteratorHelper$b(plan.widgets || []),
40350
41208
  _step4;
40351
41209
  try {
40352
41210
  for (_iterator3.s(); !(_step4 = _iterator3.n()).done;) {
@@ -43976,9 +44834,9 @@ var McpCatalogDetail = function McpCatalogDetail(_ref) {
43976
44834
 
43977
44835
  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; }
43978
44836
  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; }
43979
- 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; } } }; }
43980
- 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; } }
43981
- 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; }
44837
+ 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; } } }; }
44838
+ 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; } }
44839
+ 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; }
43982
44840
  function isValidWsUrl(url) {
43983
44841
  if (!url) return false;
43984
44842
  try {
@@ -44025,7 +44883,7 @@ function extractCredentialFields(url, headerRows) {
44025
44883
  fields.add(match[1]);
44026
44884
  }
44027
44885
  }
44028
- var _iterator = _createForOfIteratorHelper$b(headerRows),
44886
+ var _iterator = _createForOfIteratorHelper$a(headerRows),
44029
44887
  _step;
44030
44888
  try {
44031
44889
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -44128,7 +44986,7 @@ var WebSocketProviderForm = function WebSocketProviderForm(_ref) {
44128
44986
  if (!url.trim()) errs.url = "WebSocket URL is required";else if (!isValidWsUrl(url)) errs.url = "URL must start with ws:// or wss://";
44129
44987
 
44130
44988
  // Check required credential fields are filled
44131
- var _iterator2 = _createForOfIteratorHelper$b(credentialFields),
44989
+ var _iterator2 = _createForOfIteratorHelper$a(credentialFields),
44132
44990
  _step2;
44133
44991
  try {
44134
44992
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -44151,7 +45009,7 @@ var WebSocketProviderForm = function WebSocketProviderForm(_ref) {
44151
45009
 
44152
45010
  // Build headers object from rows
44153
45011
  var headers = {};
44154
- var _iterator3 = _createForOfIteratorHelper$b(headerRows),
45012
+ var _iterator3 = _createForOfIteratorHelper$a(headerRows),
44155
45013
  _step3;
44156
45014
  try {
44157
45015
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -44220,7 +45078,7 @@ var WebSocketProviderForm = function WebSocketProviderForm(_ref) {
44220
45078
 
44221
45079
  // Build config from current form state (same as handleSave)
44222
45080
  headers = {};
44223
- _iterator4 = _createForOfIteratorHelper$b(headerRows);
45081
+ _iterator4 = _createForOfIteratorHelper$a(headerRows);
44224
45082
  try {
44225
45083
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
44226
45084
  row = _step4.value;
@@ -47379,9 +48237,9 @@ var InstallWidgetPicker = function InstallWidgetPicker(_ref2) {
47379
48237
 
47380
48238
  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; }
47381
48239
  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; }
47382
- 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; } } }; }
47383
- 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; } }
47384
- 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; }
48240
+ 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; } } }; }
48241
+ 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; } }
48242
+ 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; }
47385
48243
  var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
47386
48244
  var onBack = _ref.onBack;
47387
48245
  var _useContext = useContext(ThemeContext),
@@ -47488,7 +48346,7 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
47488
48346
  case 1:
47489
48347
  widgets = _context2.sent;
47490
48348
  names = new Set();
47491
- _iterator = _createForOfIteratorHelper$a(widgets);
48349
+ _iterator = _createForOfIteratorHelper$9(widgets);
47492
48350
  try {
47493
48351
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
47494
48352
  w = _step.value;
@@ -47594,12 +48452,12 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
47594
48452
  var checkToolConflicts = function checkToolConflicts(widget) {
47595
48453
  var conflicts = [];
47596
48454
  var packageWidgets = widget.packageWidgets || [];
47597
- var _iterator2 = _createForOfIteratorHelper$a(packageWidgets),
48455
+ var _iterator2 = _createForOfIteratorHelper$9(packageWidgets),
47598
48456
  _step2;
47599
48457
  try {
47600
48458
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
47601
48459
  var w = _step2.value;
47602
- var _iterator3 = _createForOfIteratorHelper$a(w.providers || []),
48460
+ var _iterator3 = _createForOfIteratorHelper$9(w.providers || []),
47603
48461
  _step3;
47604
48462
  try {
47605
48463
  var _loop = function _loop() {
@@ -47612,7 +48470,7 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
47612
48470
  prov = _ref5[1];
47613
48471
  return prov.type === p.type && prov.providerClass === "mcp" && prov.allowedTools;
47614
48472
  });
47615
- var _iterator4 = _createForOfIteratorHelper$a(matchingProviders),
48473
+ var _iterator4 = _createForOfIteratorHelper$9(matchingProviders),
47616
48474
  _step4;
47617
48475
  try {
47618
48476
  var _loop2 = function _loop2() {
@@ -47935,9 +48793,9 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
47935
48793
  });
47936
48794
  };
47937
48795
 
47938
- 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; } } }; }
47939
- 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; } }
47940
- 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; }
48796
+ 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; } } }; }
48797
+ 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; } }
48798
+ 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; }
47941
48799
 
47942
48800
  /**
47943
48801
  * Walk a workspace layout and collect widget component keys that are
@@ -47951,7 +48809,7 @@ function collectComponentsFromLayout(layout) {
47951
48809
 
47952
48810
  // Collect IDs of layout items that are actively referenced by grid cells
47953
48811
  var activeItemIds = new Set();
47954
- var _iterator = _createForOfIteratorHelper$9(layout),
48812
+ var _iterator = _createForOfIteratorHelper$8(layout),
47955
48813
  _step;
47956
48814
  try {
47957
48815
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -47971,7 +48829,7 @@ function collectComponentsFromLayout(layout) {
47971
48829
  } finally {
47972
48830
  _iterator.f();
47973
48831
  }
47974
- var _iterator2 = _createForOfIteratorHelper$9(layout),
48832
+ var _iterator2 = _createForOfIteratorHelper$8(layout),
47975
48833
  _step2;
47976
48834
  try {
47977
48835
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -48005,7 +48863,7 @@ function findWidgetUsage(componentNames, workspaces) {
48005
48863
  if (!(componentNames !== null && componentNames !== void 0 && componentNames.length) || !(workspaces !== null && workspaces !== void 0 && workspaces.length)) return [];
48006
48864
  var nameSet = new Set(componentNames);
48007
48865
  var results = [];
48008
- var _iterator3 = _createForOfIteratorHelper$9(workspaces),
48866
+ var _iterator3 = _createForOfIteratorHelper$8(workspaces),
48009
48867
  _step3;
48010
48868
  try {
48011
48869
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -48240,9 +49098,9 @@ var useInstalledWidgets = function useInstalledWidgets() {
48240
49098
  };
48241
49099
  };
48242
49100
 
48243
- 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; } } }; }
48244
- 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; } }
48245
- 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; }
49101
+ 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; } } }; }
49102
+ 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; } }
49103
+ 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; }
48246
49104
 
48247
49105
  /**
48248
49106
  * useWidgetUpdates — checks the registry for newer versions of installed widgets
@@ -48372,7 +49230,7 @@ function useWidgetUpdates() {
48372
49230
  // (install replaces the entire package, not just one widget)
48373
49231
  setUpdates(function (prev) {
48374
49232
  var next = new Map(prev);
48375
- var _iterator = _createForOfIteratorHelper$8(next),
49233
+ var _iterator = _createForOfIteratorHelper$7(next),
48376
49234
  _step;
48377
49235
  try {
48378
49236
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -52013,9 +52871,9 @@ var PopoverItem = function PopoverItem(_ref6) {
52013
52871
  });
52014
52872
  };
52015
52873
 
52016
- 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; } } }; }
52017
- 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; } }
52018
- 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; }
52874
+ 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; } } }; }
52875
+ 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; } }
52876
+ 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; }
52019
52877
  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; }
52020
52878
  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; }
52021
52879
  var DraggableWidgetItem = function DraggableWidgetItem(_ref) {
@@ -52557,7 +53415,7 @@ var WidgetSidebar = function WidgetSidebar(_ref4) {
52557
53415
  return _context2.abrupt("return");
52558
53416
  case 2:
52559
53417
  names = new Set();
52560
- _iterator = _createForOfIteratorHelper$7(widgets);
53418
+ _iterator = _createForOfIteratorHelper$6(widgets);
52561
53419
  try {
52562
53420
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
52563
53421
  w = _step.value;
@@ -52945,9 +53803,9 @@ var useMissingWidgets = function useMissingWidgets(workspace) {
52945
53803
 
52946
53804
  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; }
52947
53805
  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; }
52948
- 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; } } }; }
52949
- 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; } }
52950
- 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; }
53806
+ 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; } } }; }
53807
+ 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; } }
53808
+ 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; }
52951
53809
  var MissingWidgetsModal = function MissingWidgetsModal(_ref) {
52952
53810
  var _ref$missingComponent = _ref.missingComponents,
52953
53811
  missingComponents = _ref$missingComponent === void 0 ? [] : _ref$missingComponent,
@@ -52998,7 +53856,7 @@ var MissingWidgetsModal = function MissingWidgetsModal(_ref) {
52998
53856
  case 0:
52999
53857
  results = [];
53000
53858
  seen = new Set();
53001
- _iterator = _createForOfIteratorHelper$6(missingComponents);
53859
+ _iterator = _createForOfIteratorHelper$5(missingComponents);
53002
53860
  _context2.prev = 1;
53003
53861
  _loop = /*#__PURE__*/_regeneratorRuntime.mark(function _loop() {
53004
53862
  var componentKey, _getWidgetSearchQuery, packageName, widgetName, pkg, result;
@@ -53319,261 +54177,6 @@ var MissingWidgetsModal = function MissingWidgetsModal(_ref) {
53319
54177
  });
53320
54178
  };
53321
54179
 
53322
- 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; } } }; }
53323
- 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; } }
53324
- 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; }
53325
- /**
53326
- * providerResolution.js
53327
- *
53328
- * Shared helpers for walking a workspace and figuring out which widgets
53329
- * have required providers that are still unresolved after the 3-layer
53330
- * resolution (widget → workspace → app-default → null). Used by:
53331
- *
53332
- * - DashboardConfigModal to render the Providers tab
53333
- * - DashboardStage toolbar to show the unresolved-count badge
53334
- *
53335
- * Both places need the same answer, so keep the logic here to avoid drift
53336
- * with the resolution inside `useMcpProvider` / `useWebSocketProvider`.
53337
- */
53338
-
53339
- /**
53340
- * Resolve which provider name a given widget instance would bind to for
53341
- * the given provider type. Mirrors the 3-layer chain in useMcpProvider
53342
- * and useWebSocketProvider exactly:
53343
- *
53344
- * 1. widget-level override (layoutItem.selectedProviders[type])
53345
- * 2. workspace-level binding (workspace.selectedProviders[id][type])
53346
- * 3. app default (any provider of matching type flagged
53347
- * `isDefaultForType` in appProviders)
53348
- * 4. null (truly unresolved)
53349
- */
53350
- function resolveProviderName(_ref) {
53351
- var _layoutItem$selectedP, _workspace$selectedPr;
53352
- var providerType = _ref.providerType,
53353
- layoutItem = _ref.layoutItem,
53354
- widgetId = _ref.widgetId,
53355
- workspace = _ref.workspace,
53356
- appProviders = _ref.appProviders;
53357
- // 1. Widget-level
53358
- var widgetLevel = layoutItem === null || layoutItem === void 0 || (_layoutItem$selectedP = layoutItem.selectedProviders) === null || _layoutItem$selectedP === void 0 ? void 0 : _layoutItem$selectedP[providerType];
53359
- if (widgetLevel) return widgetLevel;
53360
-
53361
- // 2. Workspace-level
53362
- 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]);
53363
- if (workspaceLevel) return workspaceLevel;
53364
-
53365
- // 3. App default — appProviders is either a map keyed by name or an
53366
- // array. Support both because different callers shape it either way.
53367
- if (appProviders) {
53368
- if (Array.isArray(appProviders)) {
53369
- var _iterator = _createForOfIteratorHelper$5(appProviders),
53370
- _step;
53371
- try {
53372
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
53373
- var data = _step.value;
53374
- if ((data === null || data === void 0 ? void 0 : data.type) === providerType && (data === null || data === void 0 ? void 0 : data.isDefaultForType) === true) {
53375
- return data.name;
53376
- }
53377
- }
53378
- } catch (err) {
53379
- _iterator.e(err);
53380
- } finally {
53381
- _iterator.f();
53382
- }
53383
- } else if (_typeof(appProviders) === "object") {
53384
- for (var _i = 0, _Object$entries = Object.entries(appProviders); _i < _Object$entries.length; _i++) {
53385
- var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
53386
- name = _Object$entries$_i[0],
53387
- _data = _Object$entries$_i[1];
53388
- if ((_data === null || _data === void 0 ? void 0 : _data.type) === providerType && (_data === null || _data === void 0 ? void 0 : _data.isDefaultForType) === true) {
53389
- return name;
53390
- }
53391
- }
53392
- }
53393
- }
53394
- return null;
53395
- }
53396
-
53397
- /**
53398
- * Walk every layout container in a workspace and yield each widget
53399
- * instance with its concrete layout item. Handles the main layout,
53400
- * per-page layouts, the sidebar, and nested LayoutGridContainers whose
53401
- * children are stored on `items`/`layout`.
53402
- */
53403
- function forEachWidget(workspace, visit) {
53404
- if (!workspace) return;
53405
- var _walk = function walk(items) {
53406
- if (!Array.isArray(items)) return;
53407
- var _iterator2 = _createForOfIteratorHelper$5(items),
53408
- _step2;
53409
- try {
53410
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
53411
- var item = _step2.value;
53412
- if (!item || _typeof(item) !== "object") continue;
53413
- // A "widget" is any layout item with a component name.
53414
- // Containers can have both a component name AND nested items
53415
- // (e.g. LayoutGridContainer), so still recurse.
53416
- if (item.component) visit(item);
53417
- if (Array.isArray(item.items)) _walk(item.items);
53418
- if (Array.isArray(item.layout)) _walk(item.layout);
53419
- }
53420
- } catch (err) {
53421
- _iterator2.e(err);
53422
- } finally {
53423
- _iterator2.f();
53424
- }
53425
- };
53426
- _walk(workspace.layout);
53427
- if (Array.isArray(workspace.pages)) {
53428
- var _iterator3 = _createForOfIteratorHelper$5(workspace.pages),
53429
- _step3;
53430
- try {
53431
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
53432
- var page = _step3.value;
53433
- _walk(page === null || page === void 0 ? void 0 : page.layout);
53434
- }
53435
- } catch (err) {
53436
- _iterator3.e(err);
53437
- } finally {
53438
- _iterator3.f();
53439
- }
53440
- }
53441
- _walk(workspace.sidebarLayout);
53442
- }
53443
-
53444
- /**
53445
- * Compute the list of unresolved required providers across a workspace.
53446
- *
53447
- * @param {object} args
53448
- * @param {object} args.workspace The workspace (with layout/pages/sidebarLayout/selectedProviders).
53449
- * @param {object|Array} args.appProviders
53450
- * Map keyed by provider name, or an array of provider objects. Each
53451
- * entry has at least `{ type, isDefaultForType }`.
53452
- * @param {(componentName: string) => Array<{type, required?, providerClass?}>} args.getWidgetRequirements
53453
- * Returns the `providers: [...]` declaration from the component's
53454
- * `.dash.js` (via `ComponentManager.componentMap()[name].providers`).
53455
- *
53456
- * @returns {Array<{ widgetId, component, providerType, providerClass, layoutItem }>}
53457
- * One entry per (widget instance, required provider type) that lacks
53458
- * a binding.
53459
- */
53460
- function getUnresolvedProviders(_ref2) {
53461
- var workspace = _ref2.workspace,
53462
- appProviders = _ref2.appProviders,
53463
- getWidgetRequirements = _ref2.getWidgetRequirements;
53464
- if (!workspace || typeof getWidgetRequirements !== "function") return [];
53465
- var unresolved = [];
53466
- forEachWidget(workspace, function (item) {
53467
- var requirements = getWidgetRequirements(item.component) || [];
53468
- if (!Array.isArray(requirements) || requirements.length === 0) return;
53469
- var widgetId = item.uuidString || item.uuid || item.id || null;
53470
- var _iterator4 = _createForOfIteratorHelper$5(requirements),
53471
- _step4;
53472
- try {
53473
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
53474
- var req = _step4.value;
53475
- if (!req || !req.type) continue;
53476
- if (req.required === false) continue; // optional, skip
53477
-
53478
- var name = resolveProviderName({
53479
- providerType: req.type,
53480
- layoutItem: item,
53481
- widgetId: widgetId,
53482
- workspace: workspace,
53483
- appProviders: appProviders
53484
- });
53485
- if (!name) {
53486
- unresolved.push({
53487
- widgetId: widgetId,
53488
- component: item.component,
53489
- providerType: req.type,
53490
- providerClass: req.providerClass || null,
53491
- layoutItem: item
53492
- });
53493
- }
53494
- }
53495
- } catch (err) {
53496
- _iterator4.e(err);
53497
- } finally {
53498
- _iterator4.f();
53499
- }
53500
- });
53501
- return unresolved;
53502
- }
53503
-
53504
- /**
53505
- * Group an unresolved-provider list (or any `{widget, providerType}` list)
53506
- * by provider type, so the Providers tab can render one row per unique
53507
- * type with N widgets beneath.
53508
- */
53509
- function groupByProviderType(unresolved) {
53510
- var byType = new Map();
53511
- var _iterator5 = _createForOfIteratorHelper$5(unresolved || []),
53512
- _step5;
53513
- try {
53514
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
53515
- var u = _step5.value;
53516
- if (!(u !== null && u !== void 0 && u.providerType)) continue;
53517
- if (!byType.has(u.providerType)) byType.set(u.providerType, []);
53518
- byType.get(u.providerType).push(u);
53519
- }
53520
- } catch (err) {
53521
- _iterator5.e(err);
53522
- } finally {
53523
- _iterator5.f();
53524
- }
53525
- return byType;
53526
- }
53527
-
53528
- /**
53529
- * Summarize every widget in the workspace that requires ANY provider,
53530
- * regardless of whether it's already resolved. Drives the Providers tab's
53531
- * "show per-widget overrides" expansion — the modal lists all widgets so
53532
- * the user can change an explicit override even for types that are
53533
- * already resolved via the app default.
53534
- */
53535
- function getAllProviderBindings(_ref3) {
53536
- var workspace = _ref3.workspace,
53537
- appProviders = _ref3.appProviders,
53538
- getWidgetRequirements = _ref3.getWidgetRequirements;
53539
- if (!workspace || typeof getWidgetRequirements !== "function") return [];
53540
- var bindings = [];
53541
- forEachWidget(workspace, function (item) {
53542
- var requirements = getWidgetRequirements(item.component) || [];
53543
- if (!Array.isArray(requirements) || requirements.length === 0) return;
53544
- var widgetId = item.uuidString || item.uuid || item.id || null;
53545
- var _iterator6 = _createForOfIteratorHelper$5(requirements),
53546
- _step6;
53547
- try {
53548
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
53549
- var req = _step6.value;
53550
- if (!req || !req.type) continue;
53551
- var name = resolveProviderName({
53552
- providerType: req.type,
53553
- layoutItem: item,
53554
- widgetId: widgetId,
53555
- workspace: workspace,
53556
- appProviders: appProviders
53557
- });
53558
- bindings.push({
53559
- widgetId: widgetId,
53560
- component: item.component,
53561
- providerType: req.type,
53562
- providerClass: req.providerClass || null,
53563
- required: req.required !== false,
53564
- resolvedProviderName: name,
53565
- layoutItem: item
53566
- });
53567
- }
53568
- } catch (err) {
53569
- _iterator6.e(err);
53570
- } finally {
53571
- _iterator6.f();
53572
- }
53573
- });
53574
- return bindings;
53575
- }
53576
-
53577
54180
  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; } } }; }
53578
54181
  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; } }
53579
54182
  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; }
@@ -53585,19 +54188,43 @@ var DashboardConfigModal = function DashboardConfigModal(_ref) {
53585
54188
  workspace = _ref.workspace,
53586
54189
  appProviders = _ref.appProviders,
53587
54190
  getWidgetRequirements = _ref.getWidgetRequirements,
53588
- onSaveBindings = _ref.onSaveBindings;
54191
+ _ref$getWidgetConfig = _ref.getWidgetConfig,
54192
+ getWidgetConfig = _ref$getWidgetConfig === void 0 ? null : _ref$getWidgetConfig,
54193
+ onSaveBindings = _ref.onSaveBindings,
54194
+ onSaveListeners = _ref.onSaveListeners,
54195
+ _ref$initialTab = _ref.initialTab,
54196
+ initialTab = _ref$initialTab === void 0 ? "providers" : _ref$initialTab;
53589
54197
  var _useContext = useContext(ThemeContext),
53590
54198
  currentTheme = _useContext.currentTheme;
53591
54199
  var panelStyles = getStylesForItem(themeObjects.PANEL, currentTheme, {
53592
54200
  grow: false
53593
54201
  });
53594
54202
 
54203
+ // Active tab. Defaults to whatever the parent requested via
54204
+ // `initialTab`. Resets on each open via the modal's mount cycle.
54205
+ var _useState = useState(initialTab),
54206
+ _useState2 = _slicedToArray(_useState, 2),
54207
+ activeTab = _useState2[0],
54208
+ setActiveTab = _useState2[1];
54209
+
53595
54210
  // Staged changes: widgetId -> { [providerType]: providerName }. Empty
53596
54211
  // until the user picks something; applied on Save via onSaveBindings.
53597
- var _useState = useState({}),
53598
- _useState2 = _slicedToArray(_useState, 2),
53599
- staged = _useState2[0],
53600
- setStaged = _useState2[1];
54212
+ var _useState3 = useState({}),
54213
+ _useState4 = _slicedToArray(_useState3, 2),
54214
+ staged = _useState4[0],
54215
+ setStaged = _useState4[1];
54216
+
54217
+ // Staged listener changes — collected in the Listeners tab's UI and
54218
+ // committed alongside provider changes when the user clicks Save.
54219
+ // Shape: { adds: [...], removes: [...] } where each item is
54220
+ // { receiverItemId, handlerName, sourceComponent, sourceItemId, eventName, raw? }.
54221
+ var _useState5 = useState({
54222
+ adds: [],
54223
+ removes: []
54224
+ }),
54225
+ _useState6 = _slicedToArray(_useState5, 2),
54226
+ stagedListeners = _useState6[0],
54227
+ setStagedListeners = _useState6[1];
53601
54228
  var bindings = useMemo(function () {
53602
54229
  return getAllProviderBindings({
53603
54230
  workspace: workspace,
@@ -53663,9 +54290,98 @@ var DashboardConfigModal = function DashboardConfigModal(_ref) {
53663
54290
  var unresolvedCount = effectiveBindings.filter(function (b) {
53664
54291
  return b.required && !b.resolvedProviderName;
53665
54292
  }).length;
54293
+
54294
+ // Listeners tab data — emitter list, receiver list, current wiring,
54295
+ // orphans. All recompute when the workspace or staged delta changes
54296
+ // so the UI reflects pending edits without saving first.
54297
+ var wConfig = useMemo(function () {
54298
+ return typeof getWidgetConfig === "function" ? getWidgetConfig : function () {
54299
+ return null;
54300
+ };
54301
+ }, [getWidgetConfig]);
54302
+ var emitters = useMemo(function () {
54303
+ return getEmitters(workspace, wConfig);
54304
+ }, [workspace, wConfig]);
54305
+ var receivers = useMemo(function () {
54306
+ return getReceivers(workspace, wConfig);
54307
+ }, [workspace, wConfig]);
54308
+ var persistedWiring = useMemo(function () {
54309
+ return getCurrentWiring(workspace);
54310
+ }, [workspace]);
54311
+ var orphans = useMemo(function () {
54312
+ return getOrphanedListeners(workspace, wConfig);
54313
+ }, [workspace, wConfig]);
54314
+ var effectiveWiring = useMemo(function () {
54315
+ // Apply staged removes/adds to the persisted wiring for an
54316
+ // accurate "what will be there after save" view, then annotate
54317
+ // each entry with its orphan reason (if any) so HandlerCard chips
54318
+ // can render a stale-binding warning inline.
54319
+ var next = persistedWiring;
54320
+ if (stagedListeners.removes.length > 0) {
54321
+ next = next.filter(function (w) {
54322
+ return !stagedListeners.removes.some(function (r) {
54323
+ return sameWiringEntry(r, w);
54324
+ });
54325
+ });
54326
+ }
54327
+ if (stagedListeners.adds.length > 0) {
54328
+ // Append; avoid duplicates against current state.
54329
+ var _iterator2 = _createForOfIteratorHelper$4(stagedListeners.adds),
54330
+ _step2;
54331
+ try {
54332
+ var _loop = function _loop() {
54333
+ var a = _step2.value;
54334
+ if (!next.some(function (w) {
54335
+ return sameWiringEntry(w, a);
54336
+ })) {
54337
+ next = [].concat(_toConsumableArray(next), [_objectSpread$7(_objectSpread$7({}, a), {}, {
54338
+ raw: formatEventString(a.sourceComponent, a.sourceItemId, a.eventName)
54339
+ })]);
54340
+ }
54341
+ };
54342
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
54343
+ _loop();
54344
+ }
54345
+ } catch (err) {
54346
+ _iterator2.e(err);
54347
+ } finally {
54348
+ _iterator2.f();
54349
+ }
54350
+ }
54351
+ if (orphans.length === 0) return next;
54352
+ var orphanIndex = new Map();
54353
+ var _iterator3 = _createForOfIteratorHelper$4(orphans),
54354
+ _step3;
54355
+ try {
54356
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
54357
+ var o = _step3.value;
54358
+ orphanIndex.set("".concat(o.receiverItemId, "|").concat(o.handlerName, "|").concat(o.sourceComponent, "|").concat(o.sourceItemId, "|").concat(o.eventName), o.reason);
54359
+ }
54360
+ } catch (err) {
54361
+ _iterator3.e(err);
54362
+ } finally {
54363
+ _iterator3.f();
54364
+ }
54365
+ return next.map(function (w) {
54366
+ var key = "".concat(w.receiverItemId, "|").concat(w.handlerName, "|").concat(w.sourceComponent, "|").concat(w.sourceItemId, "|").concat(w.eventName);
54367
+ var reason = orphanIndex.get(key);
54368
+ return reason ? _objectSpread$7(_objectSpread$7({}, w), {}, {
54369
+ isOrphan: true,
54370
+ orphanReason: reason
54371
+ }) : w;
54372
+ });
54373
+ }, [persistedWiring, stagedListeners, orphans]);
54374
+ // Orphans reduced by what the user has already staged for removal.
54375
+ useMemo(function () {
54376
+ return orphans.filter(function (o) {
54377
+ return !stagedListeners.removes.some(function (r) {
54378
+ return sameWiringEntry(r, o);
54379
+ });
54380
+ });
54381
+ }, [orphans, stagedListeners.removes]);
53666
54382
  var hasStagedChanges = Object.keys(staged).some(function (wid) {
53667
54383
  return Object.keys(staged[wid] || {}).length > 0;
53668
- });
54384
+ }) || stagedListeners.adds.length > 0 || stagedListeners.removes.length > 0;
53669
54385
  function stageBinding(widgetId, providerType, providerName) {
53670
54386
  setStaged(function (prev) {
53671
54387
  var next = _objectSpread$7({}, prev);
@@ -53685,24 +54401,75 @@ var DashboardConfigModal = function DashboardConfigModal(_ref) {
53685
54401
  });
53686
54402
  setStaged(function (prev) {
53687
54403
  var next = _objectSpread$7({}, prev);
53688
- var _iterator2 = _createForOfIteratorHelper$4(affected),
53689
- _step2;
54404
+ var _iterator4 = _createForOfIteratorHelper$4(affected),
54405
+ _step4;
53690
54406
  try {
53691
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
53692
- var b = _step2.value;
54407
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
54408
+ var b = _step4.value;
53693
54409
  if (!b.widgetId) continue;
53694
54410
  next[b.widgetId] = _objectSpread$7(_objectSpread$7({}, next[b.widgetId] || {}), {}, _defineProperty({}, providerType, providerName || ""));
53695
54411
  }
53696
54412
  } catch (err) {
53697
- _iterator2.e(err);
54413
+ _iterator4.e(err);
53698
54414
  } finally {
53699
- _iterator2.f();
54415
+ _iterator4.f();
53700
54416
  }
53701
54417
  return next;
53702
54418
  });
53703
54419
  }
54420
+
54421
+ // Listener tab staging helpers. We treat add/remove as queue
54422
+ // operations so the user can build up several edits before
54423
+ // committing. Toggling a binding that's already staged in the
54424
+ // opposite direction cancels the staged change rather than queuing
54425
+ // both — keeps the diff minimal and the save predictable.
54426
+ var stageListenerAdd = function stageListenerAdd(entry) {
54427
+ setStagedListeners(function (prev) {
54428
+ var removeIdx = prev.removes.findIndex(function (r) {
54429
+ return sameWiringEntry(r, entry);
54430
+ });
54431
+ if (removeIdx >= 0) {
54432
+ return {
54433
+ adds: prev.adds,
54434
+ removes: prev.removes.filter(function (_, i) {
54435
+ return i !== removeIdx;
54436
+ })
54437
+ };
54438
+ }
54439
+ if (prev.adds.some(function (a) {
54440
+ return sameWiringEntry(a, entry);
54441
+ })) return prev;
54442
+ return {
54443
+ adds: [].concat(_toConsumableArray(prev.adds), [entry]),
54444
+ removes: prev.removes
54445
+ };
54446
+ });
54447
+ };
54448
+ var stageListenerRemove = function stageListenerRemove(entry) {
54449
+ setStagedListeners(function (prev) {
54450
+ var addIdx = prev.adds.findIndex(function (a) {
54451
+ return sameWiringEntry(a, entry);
54452
+ });
54453
+ if (addIdx >= 0) {
54454
+ return {
54455
+ adds: prev.adds.filter(function (_, i) {
54456
+ return i !== addIdx;
54457
+ }),
54458
+ removes: prev.removes
54459
+ };
54460
+ }
54461
+ if (prev.removes.some(function (r) {
54462
+ return sameWiringEntry(r, entry);
54463
+ })) return prev;
54464
+ return {
54465
+ adds: prev.adds,
54466
+ removes: [].concat(_toConsumableArray(prev.removes), [entry])
54467
+ };
54468
+ });
54469
+ };
53704
54470
  function handleSave() {
53705
- var changes = [];
54471
+ // Provider changes
54472
+ var providerChanges = [];
53706
54473
  for (var _i2 = 0, _Object$entries2 = Object.entries(staged); _i2 < _Object$entries2.length; _i2++) {
53707
54474
  var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2),
53708
54475
  widgetId = _Object$entries2$_i[0],
@@ -53711,31 +54478,44 @@ var DashboardConfigModal = function DashboardConfigModal(_ref) {
53711
54478
  var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i3], 2),
53712
54479
  providerType = _Object$entries3$_i[0],
53713
54480
  providerName = _Object$entries3$_i[1];
53714
- changes.push({
54481
+ providerChanges.push({
53715
54482
  widgetId: widgetId,
53716
54483
  providerType: providerType,
53717
54484
  providerName: providerName || null
53718
54485
  });
53719
54486
  }
53720
54487
  }
53721
- if (typeof onSaveBindings === "function") onSaveBindings(changes);
54488
+ if (providerChanges.length > 0 && typeof onSaveBindings === "function") {
54489
+ onSaveBindings(providerChanges);
54490
+ }
54491
+
54492
+ // Listener changes
54493
+ if ((stagedListeners.adds.length > 0 || stagedListeners.removes.length > 0) && typeof onSaveListeners === "function") {
54494
+ onSaveListeners(stagedListeners);
54495
+ }
53722
54496
  setStaged({});
54497
+ setStagedListeners({
54498
+ adds: [],
54499
+ removes: []
54500
+ });
53723
54501
  setIsOpen(false);
53724
54502
  }
53725
54503
  function handleCancel() {
53726
54504
  setStaged({});
54505
+ setStagedListeners({
54506
+ adds: [],
54507
+ removes: []
54508
+ });
53727
54509
  setIsOpen(false);
53728
54510
  }
53729
54511
  if (!isOpen) return null;
53730
54512
  return /*#__PURE__*/jsx(Modal, {
53731
54513
  isOpen: isOpen,
53732
54514
  setIsOpen: handleCancel,
53733
- width: "w-full max-w-3xl",
54515
+ width: "w-11/12 xl:w-5/6",
54516
+ height: "h-5/6",
53734
54517
  children: /*#__PURE__*/jsxs("div", {
53735
- className: "flex flex-col rounded-lg overflow-clip border ".concat(panelStyles.backgroundColor || "", " ").concat(panelStyles.borderColor || "", " ").concat(panelStyles.textColor || ""),
53736
- style: {
53737
- maxHeight: "80vh"
53738
- },
54518
+ className: "flex flex-col h-full w-full rounded-lg overflow-clip border ".concat(panelStyles.backgroundColor || "", " ").concat(panelStyles.borderColor || "", " ").concat(panelStyles.textColor || ""),
53739
54519
  children: [/*#__PURE__*/jsxs("div", {
53740
54520
  className: "flex-shrink-0 flex flex-row items-center justify-between p-4 border-b border-white/10",
53741
54521
  children: [/*#__PURE__*/jsxs("div", {
@@ -53761,47 +54541,37 @@ var DashboardConfigModal = function DashboardConfigModal(_ref) {
53761
54541
  })]
53762
54542
  }), /*#__PURE__*/jsxs("div", {
53763
54543
  className: "flex-shrink-0 flex flex-row items-center gap-2 px-4 pt-3 border-b border-white/10",
53764
- children: [/*#__PURE__*/jsx("div", {
53765
- className: "px-3 py-1.5 text-sm font-medium border-b-2 border-indigo-400 -mb-px",
53766
- children: "Providers"
53767
- }), /*#__PURE__*/jsx("div", {
53768
- className: "px-3 py-1.5 text-sm opacity-40 cursor-not-allowed",
53769
- children: "Listeners (coming soon)"
53770
- })]
53771
- }), /*#__PURE__*/jsxs("div", {
53772
- className: "p-5 space-y-4 overflow-y-auto flex-1",
53773
- children: [grouped.size === 0 && /*#__PURE__*/jsx("div", {
53774
- className: "text-sm opacity-60 text-center py-6",
53775
- children: "No widgets in this dashboard require providers."
53776
- }), Array.from(grouped.entries()).map(function (_ref2) {
53777
- var _ref3 = _slicedToArray(_ref2, 2),
53778
- providerType = _ref3[0],
53779
- rows = _ref3[1];
53780
- var options = providersByType.get(providerType) || [];
53781
- var unresolvedHere = rows.filter(function (r) {
53782
- return r.required && !r.resolvedProviderName;
53783
- }).length;
53784
- // The "top" dropdown reflects the currently-agreeable choice:
53785
- // if every row has the same resolved value, show it; otherwise
53786
- // show "" (mixed) so the dropdown is neutral.
53787
- var allSame = rows.every(function (r) {
53788
- return r.resolvedProviderName === rows[0].resolvedProviderName;
53789
- });
53790
- var topValue = allSame ? rows[0].resolvedProviderName || "" : "";
53791
- return /*#__PURE__*/jsx(ProviderTypeRow, {
53792
- providerType: providerType,
53793
- rows: rows,
53794
- options: options,
53795
- topValue: topValue,
53796
- unresolvedHere: unresolvedHere,
53797
- onBulk: function onBulk(name) {
53798
- return stageBulk(providerType, name);
53799
- },
53800
- onPerWidget: function onPerWidget(widgetId, name) {
53801
- return stageBinding(widgetId, providerType, name);
53802
- }
53803
- }, providerType);
54544
+ children: [/*#__PURE__*/jsxs("button", {
54545
+ type: "button",
54546
+ onClick: function onClick() {
54547
+ return setActiveTab("providers");
54548
+ },
54549
+ 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"),
54550
+ children: ["Providers", unresolvedCount > 0 && /*#__PURE__*/jsx("span", {
54551
+ className: "ml-2 inline-block h-1.5 w-1.5 rounded-full bg-amber-400 align-middle"
54552
+ })]
54553
+ }), /*#__PURE__*/jsx("button", {
54554
+ type: "button",
54555
+ onClick: function onClick() {
54556
+ return setActiveTab("listeners");
54557
+ },
54558
+ 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"),
54559
+ children: "Listeners"
53804
54560
  })]
54561
+ }), /*#__PURE__*/jsx("div", {
54562
+ className: "p-5 flex-1 min-h-0",
54563
+ children: activeTab === "listeners" ? /*#__PURE__*/jsx(ListenersTab, {
54564
+ emitters: emitters,
54565
+ receivers: receivers,
54566
+ wiring: effectiveWiring,
54567
+ onAdd: stageListenerAdd,
54568
+ onRemove: stageListenerRemove
54569
+ }) : /*#__PURE__*/jsx(ProvidersTab, {
54570
+ grouped: grouped,
54571
+ providersByType: providersByType,
54572
+ onBulk: stageBulk,
54573
+ onPerWidget: stageBinding
54574
+ })
53805
54575
  }), /*#__PURE__*/jsxs("div", {
53806
54576
  className: "flex-shrink-0 flex flex-row justify-end gap-2 p-4 border-t border-white/10",
53807
54577
  children: [/*#__PURE__*/jsx(Button3, {
@@ -53818,114 +54588,507 @@ var DashboardConfigModal = function DashboardConfigModal(_ref) {
53818
54588
  };
53819
54589
 
53820
54590
  /**
53821
- * A single provider-type row: bulk dropdown + expandable per-widget
53822
- * list. Local state for whether the per-widget overrides panel is open.
54591
+ * Providers tab with a sidebar/detail layout mirroring the Listeners
54592
+ * tab. Column 1 lists provider types in this workspace (with an amber
54593
+ * dot per-type when any widget of that type is unresolved). Column 2
54594
+ * shows the selected type's bulk dropdown + per-widget dropdowns.
53823
54595
  */
53824
- function ProviderTypeRow(_ref4) {
53825
- var providerType = _ref4.providerType,
53826
- rows = _ref4.rows,
53827
- options = _ref4.options,
53828
- topValue = _ref4.topValue,
53829
- unresolvedHere = _ref4.unresolvedHere,
53830
- onBulk = _ref4.onBulk,
53831
- onPerWidget = _ref4.onPerWidget;
53832
- var _useState3 = useState(unresolvedHere > 0),
53833
- _useState4 = _slicedToArray(_useState3, 2),
53834
- expanded = _useState4[0],
53835
- setExpanded = _useState4[1];
53836
- var widgetCount = rows.length;
54596
+ function ProvidersTab(_ref2) {
54597
+ var _typeEntries$, _selectedRows$;
54598
+ var grouped = _ref2.grouped,
54599
+ providersByType = _ref2.providersByType,
54600
+ onBulk = _ref2.onBulk,
54601
+ onPerWidget = _ref2.onPerWidget;
54602
+ var typeEntries = useMemo(function () {
54603
+ return Array.from(grouped.entries());
54604
+ }, [grouped]);
54605
+ var _useState7 = useState(((_typeEntries$ = typeEntries[0]) === null || _typeEntries$ === void 0 ? void 0 : _typeEntries$[0]) || null),
54606
+ _useState8 = _slicedToArray(_useState7, 2),
54607
+ selectedType = _useState8[0],
54608
+ setSelectedType = _useState8[1];
54609
+
54610
+ // If the selected type disappears (workspace changed), fall back.
54611
+ useMemo(function () {
54612
+ if (selectedType && !grouped.has(selectedType)) {
54613
+ var _typeEntries$2;
54614
+ setSelectedType(((_typeEntries$2 = typeEntries[0]) === null || _typeEntries$2 === void 0 ? void 0 : _typeEntries$2[0]) || null);
54615
+ }
54616
+ }, [grouped, selectedType, typeEntries]);
54617
+ if (typeEntries.length === 0) {
54618
+ return /*#__PURE__*/jsx("div", {
54619
+ className: "text-sm opacity-60 text-center py-6",
54620
+ children: "No widgets in this dashboard require providers."
54621
+ });
54622
+ }
54623
+ var selectedRows = selectedType ? grouped.get(selectedType) || [] : [];
54624
+ var selectedOptions = selectedType ? providersByType.get(selectedType) || [] : [];
54625
+ var allSame = selectedRows.length > 0 && selectedRows.every(function (r) {
54626
+ return r.resolvedProviderName === selectedRows[0].resolvedProviderName;
54627
+ });
54628
+ var topValue = allSame ? ((_selectedRows$ = selectedRows[0]) === null || _selectedRows$ === void 0 ? void 0 : _selectedRows$.resolvedProviderName) || "" : "";
53837
54629
  return /*#__PURE__*/jsxs("div", {
53838
- className: "bg-white/5 border border-white/10 rounded-lg p-3 space-y-3",
54630
+ className: "flex flex-row gap-3 h-full min-h-0",
53839
54631
  children: [/*#__PURE__*/jsxs("div", {
53840
- className: "flex flex-row items-center gap-3",
54632
+ className: "w-56 flex-shrink-0 bg-white/5 border border-white/10 rounded-lg overflow-hidden flex flex-col",
53841
54633
  children: [/*#__PURE__*/jsx("div", {
53842
- className: "flex-1 min-w-0",
53843
- children: /*#__PURE__*/jsxs("div", {
53844
- className: "text-sm font-semibold flex items-center gap-2",
53845
- children: [/*#__PURE__*/jsx("code", {
53846
- className: "text-xs bg-white/10 px-1.5 py-0.5 rounded",
53847
- children: providerType
53848
- }), /*#__PURE__*/jsxs("span", {
53849
- className: "text-xs opacity-60",
53850
- children: [widgetCount, " widget", widgetCount === 1 ? "" : "s"]
53851
- }), unresolvedHere > 0 && /*#__PURE__*/jsxs("span", {
53852
- className: "text-xs text-amber-300 flex items-center gap-1",
53853
- children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
53854
- icon: "triangle-exclamation",
53855
- className: "h-3 w-3"
53856
- }), unresolvedHere, " unresolved"]
53857
- })]
54634
+ className: "px-3 py-2 text-xs font-semibold opacity-50 uppercase tracking-wider border-b border-white/10",
54635
+ children: "Provider Types"
54636
+ }), /*#__PURE__*/jsx("div", {
54637
+ className: "overflow-y-auto flex-1",
54638
+ children: typeEntries.map(function (_ref3) {
54639
+ var _ref4 = _slicedToArray(_ref3, 2),
54640
+ providerType = _ref4[0],
54641
+ rows = _ref4[1];
54642
+ var isActive = selectedType === providerType;
54643
+ var unresolvedHere = rows.filter(function (r) {
54644
+ return r.required && !r.resolvedProviderName;
54645
+ }).length;
54646
+ return /*#__PURE__*/jsxs("button", {
54647
+ type: "button",
54648
+ onClick: function onClick() {
54649
+ return setSelectedType(providerType);
54650
+ },
54651
+ 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"),
54652
+ children: [/*#__PURE__*/jsxs("div", {
54653
+ className: "flex items-center gap-2",
54654
+ children: [/*#__PURE__*/jsx("span", {
54655
+ className: "text-sm font-medium truncate",
54656
+ children: providerType
54657
+ }), unresolvedHere > 0 && /*#__PURE__*/jsxs("span", {
54658
+ className: "text-[10px] text-amber-300 flex items-center gap-1",
54659
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
54660
+ icon: "triangle-exclamation",
54661
+ className: "h-2.5 w-2.5"
54662
+ }), unresolvedHere]
54663
+ })]
54664
+ }), /*#__PURE__*/jsxs("div", {
54665
+ className: "text-xs opacity-50 mt-0.5",
54666
+ children: [rows.length, " widget", rows.length === 1 ? "" : "s"]
54667
+ })]
54668
+ }, providerType);
53858
54669
  })
53859
- }), /*#__PURE__*/jsxs("select", {
53860
- value: topValue,
53861
- onChange: function onChange(e) {
53862
- return onBulk(e.target.value);
53863
- },
53864
- className: "bg-gray-800 border border-white/10 rounded px-3 py-1.5 text-sm min-w-[14rem]",
53865
- children: [/*#__PURE__*/jsx("option", {
53866
- value: "",
53867
- children: "\u2014 Select provider \u2014"
53868
- }), options.map(function (opt) {
53869
- return /*#__PURE__*/jsxs("option", {
53870
- value: opt.name,
53871
- children: [opt.name, opt.isDefaultForType ? " (default)" : ""]
53872
- }, opt.name);
53873
- })]
53874
54670
  })]
53875
- }), /*#__PURE__*/jsxs("button", {
53876
- type: "button",
53877
- onClick: function onClick() {
53878
- return setExpanded(function (v) {
53879
- return !v;
53880
- });
53881
- },
53882
- className: "text-xs opacity-60 hover:opacity-100 flex items-center gap-1",
53883
- children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
53884
- icon: expanded ? "chevron-down" : "chevron-right",
53885
- className: "h-3 w-3"
53886
- }), expanded ? "Hide" : "Show", " per-widget overrides"]
53887
- }), expanded && /*#__PURE__*/jsx("div", {
53888
- className: "pl-3 border-l border-white/10 space-y-2",
53889
- children: rows.map(function (row) {
53890
- var _row$layoutItem;
53891
- var hasExplicitOverride = !!((_row$layoutItem = row.layoutItem) !== null && _row$layoutItem !== void 0 && (_row$layoutItem = _row$layoutItem.selectedProviders) !== null && _row$layoutItem !== void 0 && _row$layoutItem[providerType]);
53892
- return /*#__PURE__*/jsxs("div", {
53893
- className: "flex flex-row items-center gap-3",
54671
+ }), /*#__PURE__*/jsx("div", {
54672
+ className: "flex-1 min-w-0 bg-white/5 border border-white/10 rounded-lg overflow-hidden flex flex-col",
54673
+ children: selectedType ? /*#__PURE__*/jsxs(Fragment, {
54674
+ children: [/*#__PURE__*/jsxs("div", {
54675
+ className: "px-4 py-3 border-b border-white/10 flex-shrink-0",
53894
54676
  children: [/*#__PURE__*/jsxs("div", {
53895
- className: "flex-1 min-w-0 text-xs",
54677
+ className: "text-sm font-semibold",
54678
+ children: [selectedType, " ", /*#__PURE__*/jsx("span", {
54679
+ className: "opacity-60 font-normal",
54680
+ children: "provider"
54681
+ })]
54682
+ }), /*#__PURE__*/jsx("div", {
54683
+ className: "text-xs opacity-60 mt-1",
54684
+ children: "Apply one provider to every widget of this type, or adjust per-widget below."
54685
+ })]
54686
+ }), /*#__PURE__*/jsxs("div", {
54687
+ className: "flex-1 overflow-y-auto p-4 space-y-4",
54688
+ children: [/*#__PURE__*/jsxs("div", {
54689
+ className: "flex items-center gap-3",
53896
54690
  children: [/*#__PURE__*/jsx("span", {
53897
- className: "font-mono opacity-80 truncate",
53898
- children: row.component || "widget"
53899
- }), /*#__PURE__*/jsx("span", {
53900
- className: "opacity-40 mx-1",
53901
- children: "\xB7"
53902
- }), /*#__PURE__*/jsx("span", {
53903
- className: "font-mono opacity-40 truncate",
53904
- children: (row.widgetId || "").slice(0, 8)
53905
- }), hasExplicitOverride && /*#__PURE__*/jsx("span", {
53906
- className: "ml-2 text-[10px] text-indigo-300 uppercase tracking-wide",
53907
- children: "widget override"
53908
- }), !row.resolvedProviderName && row.required && /*#__PURE__*/jsx("span", {
53909
- className: "ml-2 text-[10px] text-amber-300 uppercase tracking-wide",
53910
- children: "unresolved"
54691
+ className: "text-xs opacity-60 flex-shrink-0 w-20",
54692
+ children: "Bulk assign"
54693
+ }), /*#__PURE__*/jsxs("select", {
54694
+ value: topValue,
54695
+ onChange: function onChange(e) {
54696
+ return onBulk(selectedType, e.target.value);
54697
+ },
54698
+ className: "flex-1 bg-gray-800 border border-white/10 rounded px-3 py-1.5 text-sm",
54699
+ children: [/*#__PURE__*/jsx("option", {
54700
+ value: "",
54701
+ children: "\u2014 Select provider \u2014"
54702
+ }), selectedOptions.map(function (opt) {
54703
+ return /*#__PURE__*/jsxs("option", {
54704
+ value: opt.name,
54705
+ children: [opt.name, opt.isDefaultForType ? " (default)" : ""]
54706
+ }, opt.name);
54707
+ })]
53911
54708
  })]
53912
- }), /*#__PURE__*/jsxs("select", {
53913
- value: row.resolvedProviderName || "",
53914
- onChange: function onChange(e) {
53915
- return onPerWidget(row.widgetId, e.target.value);
53916
- },
53917
- className: "bg-gray-800 border border-white/10 rounded px-2 py-1 text-xs min-w-[12rem]",
53918
- children: [/*#__PURE__*/jsx("option", {
53919
- value: "",
53920
- children: "\u2014 none \u2014"
53921
- }), options.map(function (opt) {
53922
- return /*#__PURE__*/jsxs("option", {
53923
- value: opt.name,
53924
- children: [opt.name, opt.isDefaultForType ? " (default)" : ""]
53925
- }, opt.name);
54709
+ }), /*#__PURE__*/jsxs("div", {
54710
+ children: [/*#__PURE__*/jsx("div", {
54711
+ className: "text-xs font-semibold opacity-50 uppercase tracking-wider mb-2",
54712
+ children: "Per-widget"
54713
+ }), /*#__PURE__*/jsx("div", {
54714
+ children: selectedRows.map(function (row) {
54715
+ var _row$layoutItem;
54716
+ var hasExplicitOverride = !!((_row$layoutItem = row.layoutItem) !== null && _row$layoutItem !== void 0 && (_row$layoutItem = _row$layoutItem.selectedProviders) !== null && _row$layoutItem !== void 0 && _row$layoutItem[selectedType]);
54717
+ var isRequired = !!row.required;
54718
+ var isMissing = !row.resolvedProviderName;
54719
+ var needsAttention = isRequired && isMissing;
54720
+ return /*#__PURE__*/jsxs("div", {
54721
+ 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"),
54722
+ children: [/*#__PURE__*/jsxs("div", {
54723
+ className: "flex-1 min-w-0",
54724
+ children: [/*#__PURE__*/jsxs("div", {
54725
+ className: "text-sm truncate flex items-center gap-1.5 ".concat(needsAttention ? "font-semibold text-red-100" : "font-medium"),
54726
+ children: [/*#__PURE__*/jsx("span", {
54727
+ className: "truncate",
54728
+ children: row.component || "widget"
54729
+ }), isRequired && /*#__PURE__*/jsx("span", {
54730
+ className: needsAttention ? "text-red-300" : "text-indigo-300",
54731
+ title: "Required provider",
54732
+ "aria-label": "required",
54733
+ children: "*"
54734
+ })]
54735
+ }), /*#__PURE__*/jsxs("div", {
54736
+ className: "flex items-center gap-1.5 mt-1 text-[10px]",
54737
+ children: [/*#__PURE__*/jsx("span", {
54738
+ 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"),
54739
+ children: isRequired ? "required" : "optional"
54740
+ }), hasExplicitOverride && /*#__PURE__*/jsx("span", {
54741
+ className: "uppercase tracking-wide px-1.5 py-0.5 rounded font-semibold bg-indigo-900 text-indigo-200",
54742
+ children: "override"
54743
+ }), /*#__PURE__*/jsx("span", {
54744
+ className: "opacity-40 truncate ml-1",
54745
+ children: (row.widgetId || "").slice(0, 8)
54746
+ })]
54747
+ })]
54748
+ }), /*#__PURE__*/jsxs("select", {
54749
+ value: row.resolvedProviderName || "",
54750
+ onChange: function onChange(e) {
54751
+ return onPerWidget(row.widgetId, selectedType, e.target.value);
54752
+ },
54753
+ className: "bg-gray-800 border rounded px-2 py-1 text-xs min-w-[12rem] ".concat(needsAttention ? "border-red-400" : "border-gray-700"),
54754
+ children: [/*#__PURE__*/jsx("option", {
54755
+ value: "",
54756
+ children: "\u2014 none \u2014"
54757
+ }), selectedOptions.map(function (opt) {
54758
+ return /*#__PURE__*/jsxs("option", {
54759
+ value: opt.name,
54760
+ children: [opt.name, opt.isDefaultForType ? " (default)" : ""]
54761
+ }, opt.name);
54762
+ })]
54763
+ })]
54764
+ }, "".concat(row.widgetId, ":").concat(row.providerType));
54765
+ })
54766
+ })]
54767
+ })]
54768
+ })]
54769
+ }) : /*#__PURE__*/jsx("div", {
54770
+ className: "flex-1 flex items-center justify-center text-sm opacity-60",
54771
+ children: "Pick a provider type to bulk-assign or adjust per widget."
54772
+ })
54773
+ })]
54774
+ });
54775
+ }
54776
+
54777
+ // ─── Listeners tab ──────────────────────────────────────────────────────────
54778
+
54779
+ /**
54780
+ * Match two wiring entries on the four fields that uniquely identify
54781
+ * a listener binding (receiver + handler + source + event). Used to
54782
+ * dedupe stages, cancel opposite-direction stages, and detect "is
54783
+ * this binding already there".
54784
+ */
54785
+ function sameWiringEntry(a, b) {
54786
+ if (!a || !b) return false;
54787
+ 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;
54788
+ }
54789
+
54790
+ /**
54791
+ * Receiver-centric sidebar/detail layout. Mirrors the per-widget
54792
+ * PanelEditItemHandlers pattern (handler-by-handler editing) but
54793
+ * scoped to the whole dashboard. Picking a widget on the left shows
54794
+ * its handlers + currently wired sources on the right; the user
54795
+ * adjusts wiring per handler from a single dropdown of all emitters'
54796
+ * (widget × event) pairs.
54797
+ */
54798
+ function ListenersTab(_ref6) {
54799
+ var _receivers$;
54800
+ var emitters = _ref6.emitters,
54801
+ receivers = _ref6.receivers,
54802
+ wiring = _ref6.wiring,
54803
+ onAdd = _ref6.onAdd,
54804
+ onRemove = _ref6.onRemove;
54805
+ var _useState1 = useState(((_receivers$ = receivers[0]) === null || _receivers$ === void 0 ? void 0 : _receivers$.key) || null),
54806
+ _useState10 = _slicedToArray(_useState1, 2),
54807
+ selectedReceiverKey = _useState10[0],
54808
+ setSelectedReceiverKey = _useState10[1];
54809
+ var _useState11 = useState(null),
54810
+ _useState12 = _slicedToArray(_useState11, 2),
54811
+ selectedHandler = _useState12[0],
54812
+ setSelectedHandler = _useState12[1];
54813
+
54814
+ // Re-anchor selection if the previously-selected widget disappeared
54815
+ // (workspace switched, widget deleted, etc.).
54816
+ useMemo(function () {
54817
+ if (selectedReceiverKey && !receivers.some(function (r) {
54818
+ return r.key === selectedReceiverKey;
54819
+ })) {
54820
+ var _receivers$2;
54821
+ setSelectedReceiverKey(((_receivers$2 = receivers[0]) === null || _receivers$2 === void 0 ? void 0 : _receivers$2.key) || null);
54822
+ }
54823
+ }, [receivers, selectedReceiverKey]);
54824
+
54825
+ // Receiver lookup (by composite key) for label resolution in chips.
54826
+ var receiverByKey = useMemo(function () {
54827
+ var m = new Map();
54828
+ var _iterator5 = _createForOfIteratorHelper$4(receivers),
54829
+ _step5;
54830
+ try {
54831
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
54832
+ var r = _step5.value;
54833
+ m.set(r.key, r);
54834
+ }
54835
+ } catch (err) {
54836
+ _iterator5.e(err);
54837
+ } finally {
54838
+ _iterator5.f();
54839
+ }
54840
+ return m;
54841
+ }, [receivers]);
54842
+ if (receivers.length === 0) {
54843
+ return /*#__PURE__*/jsx("div", {
54844
+ className: "flex items-center justify-center h-full text-sm opacity-60 text-center",
54845
+ children: /*#__PURE__*/jsxs("div", {
54846
+ children: ["No widgets in this dashboard declare event handlers.", emitters.length > 0 && /*#__PURE__*/jsxs("div", {
54847
+ className: "mt-2",
54848
+ children: ["(", emitters.length, " widget", emitters.length === 1 ? "" : "s", " emit events but nothing is set up to receive.)"]
54849
+ })]
54850
+ })
54851
+ });
54852
+ }
54853
+ var selectedReceiver = selectedReceiverKey ? receiverByKey.get(selectedReceiverKey) || null : null;
54854
+ return /*#__PURE__*/jsx("div", {
54855
+ className: "flex flex-col gap-3 h-full min-h-0",
54856
+ children: /*#__PURE__*/jsxs("div", {
54857
+ className: "flex flex-row gap-3 flex-1 min-h-0",
54858
+ children: [/*#__PURE__*/jsxs("div", {
54859
+ className: "w-56 flex-shrink-0 bg-white/5 border border-white/10 rounded-lg overflow-hidden flex flex-col",
54860
+ children: [/*#__PURE__*/jsx("div", {
54861
+ className: "px-3 py-2 text-xs font-semibold opacity-50 uppercase tracking-wider border-b border-white/10",
54862
+ children: "Widgets"
54863
+ }), /*#__PURE__*/jsx("div", {
54864
+ className: "overflow-y-auto flex-1",
54865
+ children: receivers.map(function (r) {
54866
+ var isActive = r.key === selectedReceiverKey;
54867
+ return /*#__PURE__*/jsx("button", {
54868
+ type: "button",
54869
+ onClick: function onClick() {
54870
+ return setSelectedReceiverKey(r.key);
54871
+ },
54872
+ 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"),
54873
+ children: /*#__PURE__*/jsx("span", {
54874
+ className: "text-sm font-medium truncate",
54875
+ children: r.label
54876
+ })
54877
+ }, r.key);
54878
+ })
54879
+ })]
54880
+ }), selectedReceiver ? /*#__PURE__*/jsxs(Fragment, {
54881
+ children: [/*#__PURE__*/jsx(HandlersColumn, {
54882
+ receiver: selectedReceiver,
54883
+ myWiring: wiring.filter(function (w) {
54884
+ return w.receiverComponent === selectedReceiver.component && String(w.receiverItemId) === String(selectedReceiver.itemId);
54885
+ }),
54886
+ selectedHandler: selectedHandler && selectedReceiver.eventHandlers.includes(selectedHandler) ? selectedHandler : null,
54887
+ onSelectHandler: setSelectedHandler
54888
+ }), /*#__PURE__*/jsx(EventsColumn, {
54889
+ receiver: selectedReceiver,
54890
+ handlerName: selectedHandler && selectedReceiver.eventHandlers.includes(selectedHandler) ? selectedHandler : null,
54891
+ myWiring: wiring.filter(function (w) {
54892
+ return w.receiverComponent === selectedReceiver.component && String(w.receiverItemId) === String(selectedReceiver.itemId);
54893
+ }),
54894
+ emitters: emitters,
54895
+ onAdd: onAdd,
54896
+ onRemove: onRemove
54897
+ })]
54898
+ }) : /*#__PURE__*/jsx("div", {
54899
+ className: "flex-1 min-w-0 bg-white/5 border border-white/10 rounded-lg flex items-center justify-center text-sm opacity-60",
54900
+ children: "Pick a widget on the left to wire its handlers."
54901
+ })]
54902
+ })
54903
+ });
54904
+ }
54905
+
54906
+ /**
54907
+ * Second column (within ListenersTab): the selected receiver's
54908
+ * handlers with connection counts. Picking one lights up the
54909
+ * third column. Matches the left-column look from
54910
+ * PanelEditItemHandlers.
54911
+ */
54912
+ function HandlersColumn(_ref8) {
54913
+ var receiver = _ref8.receiver,
54914
+ myWiring = _ref8.myWiring,
54915
+ selectedHandler = _ref8.selectedHandler,
54916
+ onSelectHandler = _ref8.onSelectHandler;
54917
+ var countsByHandler = useMemo(function () {
54918
+ var m = new Map();
54919
+ var _iterator6 = _createForOfIteratorHelper$4(myWiring),
54920
+ _step6;
54921
+ try {
54922
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
54923
+ var w = _step6.value;
54924
+ m.set(w.handlerName, (m.get(w.handlerName) || 0) + 1);
54925
+ }
54926
+ } catch (err) {
54927
+ _iterator6.e(err);
54928
+ } finally {
54929
+ _iterator6.f();
54930
+ }
54931
+ return m;
54932
+ }, [myWiring]);
54933
+ return /*#__PURE__*/jsxs("div", {
54934
+ className: "w-56 flex-shrink-0 bg-white/5 border border-white/10 rounded-lg overflow-hidden flex flex-col",
54935
+ children: [/*#__PURE__*/jsx("div", {
54936
+ className: "px-3 py-2 text-xs font-semibold opacity-50 uppercase tracking-wider border-b border-white/10",
54937
+ children: "Event Handlers"
54938
+ }), /*#__PURE__*/jsx("div", {
54939
+ className: "overflow-y-auto flex-1",
54940
+ children: receiver.eventHandlers.length === 0 ? /*#__PURE__*/jsx("div", {
54941
+ className: "text-xs opacity-50 text-center py-6 px-3",
54942
+ children: "This widget declares no event handlers."
54943
+ }) : receiver.eventHandlers.map(function (h) {
54944
+ var isActive = h === selectedHandler;
54945
+ var count = countsByHandler.get(h) || 0;
54946
+ return /*#__PURE__*/jsxs("button", {
54947
+ type: "button",
54948
+ onClick: function onClick() {
54949
+ return onSelectHandler(h);
54950
+ },
54951
+ 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"),
54952
+ children: [/*#__PURE__*/jsxs("span", {
54953
+ className: "flex items-center gap-2 min-w-0",
54954
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
54955
+ icon: "bolt",
54956
+ className: "h-3 w-3 opacity-60 flex-shrink-0"
54957
+ }), /*#__PURE__*/jsx("code", {
54958
+ className: "truncate",
54959
+ children: h
53926
54960
  })]
54961
+ }), /*#__PURE__*/jsx("span", {
54962
+ className: "text-xs opacity-60 flex-shrink-0",
54963
+ children: count
53927
54964
  })]
53928
- }, "".concat(row.widgetId, ":").concat(row.providerType));
54965
+ }, h);
54966
+ })
54967
+ })]
54968
+ });
54969
+ }
54970
+
54971
+ /**
54972
+ * Third column: for the selected (receiver, handler), show every
54973
+ * emitter widget as a section with a checkbox list of its events.
54974
+ * Checked = wired; toggling commits an add/remove. Mirrors the
54975
+ * right-column UX of PanelEditItemHandlers.
54976
+ */
54977
+ function EventsColumn(_ref9) {
54978
+ var receiver = _ref9.receiver,
54979
+ handlerName = _ref9.handlerName,
54980
+ myWiring = _ref9.myWiring,
54981
+ emitters = _ref9.emitters,
54982
+ onAdd = _ref9.onAdd,
54983
+ onRemove = _ref9.onRemove;
54984
+ // Wired-for-this-handler: dedupe defensively (legacy workspaces
54985
+ // occasionally contain duplicate entries under the same handler).
54986
+ var wiredHere = useMemo(function () {
54987
+ var seen = new Set();
54988
+ var out = [];
54989
+ var _iterator7 = _createForOfIteratorHelper$4(myWiring),
54990
+ _step7;
54991
+ try {
54992
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
54993
+ var w = _step7.value;
54994
+ if (w.handlerName !== handlerName) continue;
54995
+ var key = "".concat(w.sourceComponent, "|").concat(w.sourceItemId, "|").concat(w.eventName);
54996
+ if (seen.has(key)) continue;
54997
+ seen.add(key);
54998
+ out.push(w);
54999
+ }
55000
+ } catch (err) {
55001
+ _iterator7.e(err);
55002
+ } finally {
55003
+ _iterator7.f();
55004
+ }
55005
+ return out;
55006
+ }, [myWiring, handlerName]);
55007
+ var wiredKeys = useMemo(function () {
55008
+ return new Set(wiredHere.map(function (w) {
55009
+ return "".concat(w.sourceComponent, "|").concat(w.sourceItemId, "|").concat(w.eventName);
55010
+ }));
55011
+ }, [wiredHere]);
55012
+
55013
+ // Separate orphans — these reference sources no longer in the
55014
+ // workspace, so they don't appear in the emitter sections below.
55015
+ wiredHere.filter(function (w) {
55016
+ return w.isOrphan;
55017
+ });
55018
+ if (!handlerName) {
55019
+ return /*#__PURE__*/jsx("div", {
55020
+ className: "flex-1 min-w-0 bg-white/5 border border-white/10 rounded-lg flex items-center justify-center text-sm opacity-60",
55021
+ children: "Select a handler to view available events."
55022
+ });
55023
+ }
55024
+ function toggle(source) {
55025
+ var key = "".concat(source.sourceComponent, "|").concat(source.sourceItemId, "|").concat(source.eventName);
55026
+ if (wiredKeys.has(key)) {
55027
+ var existing = wiredHere.find(function (w) {
55028
+ return "".concat(w.sourceComponent, "|").concat(w.sourceItemId, "|").concat(w.eventName) === key;
55029
+ });
55030
+ onRemove(existing);
55031
+ } else {
55032
+ onAdd({
55033
+ receiverItemId: receiver.itemId,
55034
+ receiverComponent: receiver.component,
55035
+ handlerName: handlerName,
55036
+ sourceComponent: source.sourceComponent,
55037
+ sourceItemId: source.sourceItemId,
55038
+ eventName: source.eventName
55039
+ });
55040
+ }
55041
+ }
55042
+
55043
+ // Hide the selected receiver from its own emitter list — a widget
55044
+ // listening to its own events is almost always a mistake.
55045
+ var emittersForList = emitters.filter(function (e) {
55046
+ return !(e.component === receiver.component && String(e.itemId) === String(receiver.itemId));
55047
+ });
55048
+ return /*#__PURE__*/jsxs("div", {
55049
+ className: "flex-1 min-w-0 bg-white/5 border border-white/10 rounded-lg overflow-hidden flex flex-col",
55050
+ children: [/*#__PURE__*/jsxs("div", {
55051
+ className: "flex-shrink-0 px-4 py-2 border-b border-white/10 text-xs opacity-60",
55052
+ children: ["Check an event to fire", " ", /*#__PURE__*/jsx("code", {
55053
+ className: "text-xs",
55054
+ children: handlerName
55055
+ }), " on", " ", /*#__PURE__*/jsx("span", {
55056
+ className: "font-medium",
55057
+ children: receiver.label
55058
+ }), "."]
55059
+ }), /*#__PURE__*/jsx("div", {
55060
+ className: "flex-1 overflow-y-auto p-4 space-y-5",
55061
+ children: emittersForList.length === 0 ? /*#__PURE__*/jsx("div", {
55062
+ className: "text-sm opacity-60",
55063
+ children: "No other widgets in this dashboard emit events."
55064
+ }) : emittersForList.map(function (e) {
55065
+ return /*#__PURE__*/jsxs("div", {
55066
+ className: "space-y-1",
55067
+ children: [/*#__PURE__*/jsx("div", {
55068
+ className: "text-xs font-semibold opacity-50 uppercase tracking-wider",
55069
+ children: e.label
55070
+ }), e.events.map(function (eventName) {
55071
+ var key = "".concat(e.component, "|").concat(e.itemId, "|").concat(eventName);
55072
+ var selected = wiredKeys.has(key);
55073
+ return /*#__PURE__*/jsxs("label", {
55074
+ 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"),
55075
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
55076
+ icon: selected ? "square-check" : "square",
55077
+ className: "h-4 w-4 flex-shrink-0",
55078
+ onClick: function onClick(ev) {
55079
+ ev.preventDefault();
55080
+ toggle({
55081
+ sourceComponent: e.component,
55082
+ sourceItemId: e.itemId,
55083
+ eventName: eventName
55084
+ });
55085
+ }
55086
+ }), /*#__PURE__*/jsx("span", {
55087
+ children: eventName
55088
+ })]
55089
+ }, key);
55090
+ })]
55091
+ }, e.key || "".concat(e.component, "|").concat(e.itemId));
53929
55092
  })
53930
55093
  })]
53931
55094
  });
@@ -54192,7 +55355,7 @@ var DashboardStageInner = function DashboardStageInner(_ref3) {
54192
55355
  _useState42 = _slicedToArray(_useState41, 2),
54193
55356
  isConfigModalOpen = _useState42[0],
54194
55357
  setIsConfigModalOpen = _useState42[1];
54195
- var configModalAutoOpenedFor = useRef(new Set());
55358
+ useRef(new Set());
54196
55359
  var _useState43 = useState(new Set()),
54197
55360
  _useState44 = _slicedToArray(_useState43, 2),
54198
55361
  dismissedUnresolvedForWorkspace = _useState44[0],
@@ -54727,7 +55890,29 @@ var DashboardStageInner = function DashboardStageInner(_ref3) {
54727
55890
  }
54728
55891
  }
54729
55892
 
54730
- // ─── Unresolved providers (Dashboard Config modal + auto-open) ───
55893
+ // ─── Bulk listener binding save ──────────────────────────────────
55894
+ // Takes { adds, removes } from the Dashboard Config modal's
55895
+ // Listeners tab and writes the updated workspace once. Applies the
55896
+ // delta via applyWiringChanges (uses item.listeners directly so the
55897
+ // existing PanelEditItemHandlers / runtime stays consistent).
55898
+ function handleBulkListenerBindings(changes) {
55899
+ if (!workspaceSelected || !dashApi || !(credentials !== null && credentials !== void 0 && credentials.appId)) return;
55900
+ if (!changes || (!changes.adds || changes.adds.length === 0) && (!changes.removes || changes.removes.length === 0)) {
55901
+ return;
55902
+ }
55903
+ var updatedWorkspace = applyWiringChanges(workspaceSelected, changes);
55904
+ updateTabWorkspace(updatedWorkspace);
55905
+ try {
55906
+ dashApi.saveWorkspace(credentials.appId, updatedWorkspace, function (e, result) {
55907
+ return (void 0);
55908
+ }, function (e, error) {
55909
+ return (void 0);
55910
+ });
55911
+ } catch (e) {
55912
+ }
55913
+ }
55914
+
55915
+ // ─── Unresolved providers + listener orphans (modal + auto-open) ─
54731
55916
  var unresolvedProviders = useMemo(function () {
54732
55917
  return getUnresolvedProviders({
54733
55918
  workspace: workspaceSelected,
@@ -54738,19 +55923,16 @@ var DashboardStageInner = function DashboardStageInner(_ref3) {
54738
55923
  }
54739
55924
  });
54740
55925
  }, [workspaceSelected, appContext === null || appContext === void 0 ? void 0 : appContext.providers]);
54741
- var unresolvedCount = unresolvedProviders.length;
55926
+ var unresolvedProvidersCount = unresolvedProviders.length;
55927
+ // Listener orphans are pruned in WorkspaceModel / DashboardModel at
55928
+ // load time, so the badge only counts unresolved provider bindings.
55929
+ var unresolvedCount = unresolvedProvidersCount;
54742
55930
 
54743
- // Auto-open the Dashboard Config modal the FIRST time a workspace with
54744
- // unresolved providers is loaded in this session. Tracked per workspace
54745
- // id so switching tabs or re-selecting doesn't nag the user every time.
54746
- useEffect(function () {
54747
- if (!(workspaceSelected !== null && workspaceSelected !== void 0 && workspaceSelected.id)) return;
54748
- if (unresolvedCount === 0) return;
54749
- if (configModalAutoOpenedFor.current.has(workspaceSelected.id)) return;
54750
- if (dismissedUnresolvedForWorkspace.has(workspaceSelected.id)) return;
54751
- configModalAutoOpenedFor.current.add(workspaceSelected.id);
54752
- setIsConfigModalOpen(true);
54753
- }, [workspaceSelected === null || workspaceSelected === void 0 ? void 0 : workspaceSelected.id, unresolvedCount, dismissedUnresolvedForWorkspace]);
55931
+ // (No auto-open.) Earlier versions popped the modal on first load
55932
+ // when anything was unresolved turned out to be jarring,
55933
+ // especially on dashboards that had a long-standing orphan list.
55934
+ // Awareness is delivered passively now: the gear icon's amber dot
55935
+ // and the banner. The user opens the modal when they're ready.
54754
55936
 
54755
55937
  // ─── Sidebar State ────────────────────────────────────────────────
54756
55938
  var sidebarEnabled = (workspaceSelected === null || workspaceSelected === void 0 ? void 0 : workspaceSelected.sidebarEnabled) || false;
@@ -55502,7 +56684,7 @@ var DashboardStageInner = function DashboardStageInner(_ref3) {
55502
56684
  onSidebarChange: popout ? null : handleSidebarToggle,
55503
56685
  scrollableEnabled: workspacePages.length <= 1 ? getRootScrollable() : undefined,
55504
56686
  onScrollableChange: workspacePages.length <= 1 && !popout ? handleScrollableChange : null,
55505
- onOpenConfig: popout ? null : function () {
56687
+ onOpenConfig: popout || previewMode ? null : function () {
55506
56688
  return setIsConfigModalOpen(true);
55507
56689
  },
55508
56690
  configUnresolvedCount: unresolvedCount
@@ -55536,14 +56718,14 @@ var DashboardStageInner = function DashboardStageInner(_ref3) {
55536
56718
  className: "h-3 w-3"
55537
56719
  })
55538
56720
  })]
55539
- }), unresolvedCount > 0 && !dismissedUnresolvedForWorkspace.has(workspaceSelected === null || workspaceSelected === void 0 ? void 0 : workspaceSelected.id) && /*#__PURE__*/jsxs("div", {
56721
+ }), unresolvedCount > 0 && !previewMode && !dismissedUnresolvedForWorkspace.has(workspaceSelected === null || workspaceSelected === void 0 ? void 0 : workspaceSelected.id) && /*#__PURE__*/jsxs("div", {
55540
56722
  className: "flex items-center gap-2 px-4 py-2 bg-amber-500/10 border-b border-amber-500/20 flex-shrink-0",
55541
56723
  children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
55542
56724
  icon: "triangle-exclamation",
55543
56725
  className: "h-3.5 w-3.5 text-amber-400 flex-shrink-0"
55544
- }), /*#__PURE__*/jsxs("span", {
56726
+ }), /*#__PURE__*/jsx("span", {
55545
56727
  className: "text-xs text-amber-300/90 flex-1",
55546
- children: [unresolvedCount, " widget", unresolvedCount === 1 ? "" : "s", " in this dashboard need a provider wired up."]
56728
+ children: [unresolvedProvidersCount > 0 && "".concat(unresolvedProvidersCount, " widget").concat(unresolvedProvidersCount === 1 ? "" : "s", " need").concat(unresolvedProvidersCount === 1 ? "s" : "", " a provider")].filter(Boolean).join(" · ")
55547
56729
  }), /*#__PURE__*/jsx("button", {
55548
56730
  type: "button",
55549
56731
  onClick: function onClick() {
@@ -55732,7 +56914,12 @@ var DashboardStageInner = function DashboardStageInner(_ref3) {
55732
56914
  var _ComponentManager$com2;
55733
56915
  return name && ((_ComponentManager$com2 = ComponentManager.componentMap()[name]) === null || _ComponentManager$com2 === void 0 ? void 0 : _ComponentManager$com2.providers) || [];
55734
56916
  },
55735
- onSaveBindings: handleBulkProviderBindings
56917
+ getWidgetConfig: function getWidgetConfig(name) {
56918
+ return name && ComponentManager.componentMap()[name] || null;
56919
+ },
56920
+ onSaveBindings: handleBulkProviderBindings,
56921
+ onSaveListeners: handleBulkListenerBindings,
56922
+ initialTab: "providers"
55736
56923
  })]
55737
56924
  })]
55738
56925
  }), !popout && /*#__PURE__*/jsx(DashCommandPalette, {
@@ -55976,10 +57163,7 @@ var DashboardHeader = function DashboardHeader(_ref) {
55976
57163
  className: "font-bold text-base"
55977
57164
  }), /*#__PURE__*/jsxs("div", {
55978
57165
  className: "flex flex-row items-center gap-1",
55979
- children: [onOpenConfig !== null && /*#__PURE__*/jsx(DashboardConfigButton, {
55980
- onClick: onOpenConfig,
55981
- unresolvedCount: configUnresolvedCount
55982
- }), onPopout !== null && /*#__PURE__*/jsx(ButtonIcon, {
57166
+ children: [onPopout !== null && /*#__PURE__*/jsx(ButtonIcon, {
55983
57167
  icon: "arrow-up-right-from-square",
55984
57168
  onClick: onPopout,
55985
57169
  hoverBackgroundColor: "hover:bg-indigo-700"