@trops/dash-core 0.1.127 → 0.1.129

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2706,9 +2706,9 @@ var LayoutContainer = function LayoutContainer(_ref) {
2706
2706
 
2707
2707
  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; }
2708
2708
  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; }
2709
- 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; } } }; }
2710
- 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; } }
2711
- 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; }
2709
+ 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; } } }; }
2710
+ 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; } }
2711
+ 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; }
2712
2712
  /**
2713
2713
  * Layout template definitions for the dashboard template picker.
2714
2714
  *
@@ -2944,7 +2944,7 @@ function createLayoutFromTemplate(template) {
2944
2944
  cols: template.cols,
2945
2945
  gap: "gap-2"
2946
2946
  };
2947
- var _iterator = _createForOfIteratorHelper$a(template.cells),
2947
+ var _iterator = _createForOfIteratorHelper$b(template.cells),
2948
2948
  _step;
2949
2949
  try {
2950
2950
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -4008,13 +4008,21 @@ var LayoutManagerModal = function LayoutManagerModal(_ref) {
4008
4008
  // Reset state when modal opens
4009
4009
  React.useEffect(function () {
4010
4010
  if (open) {
4011
+ var _Object$entries$sort$;
4011
4012
  setCreationMethod(null);
4012
4013
  setDashboardName("");
4013
4014
  setActiveStep(0);
4014
4015
  setLocalMenuItems(menuItems || []);
4015
4016
  setSelectedMenuId(menuItems && menuItems.length > 0 ? menuItems[0].id : 1);
4016
4017
  setSelectedTemplate(layoutTemplates[0]);
4017
- setSelectedThemeKey(null);
4018
+ var fallback = themes ? ((_Object$entries$sort$ = Object.entries(themes).sort(function (_ref2, _ref3) {
4019
+ var _ref4 = _slicedToArray(_ref2, 2),
4020
+ a = _ref4[1];
4021
+ var _ref5 = _slicedToArray(_ref3, 2),
4022
+ b = _ref5[1];
4023
+ return (a.name || "").localeCompare(b.name || "");
4024
+ })[0]) === null || _Object$entries$sort$ === void 0 ? void 0 : _Object$entries$sort$[0]) || null : null;
4025
+ setSelectedThemeKey(appThemeKey || fallback);
4018
4026
  setImportedWorkspace(null);
4019
4027
  setSelectedFile(null);
4020
4028
  setIsCreatingFolder(false);
@@ -4340,7 +4348,7 @@ var LayoutManagerModal = function LayoutManagerModal(_ref) {
4340
4348
  textColor: "text-gray-300"
4341
4349
  }), /*#__PURE__*/jsxRuntime.jsx("p", {
4342
4350
  className: "text-base font-normal text-gray-400",
4343
- children: "Choose a theme for this dashboard, or use the application default."
4351
+ children: "Choose a theme for this dashboard."
4344
4352
  }), selectedThemeKey !== null && themes && themes[selectedThemeKey] && /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
4345
4353
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
4346
4354
  className: "flex flex-row items-center space-x-2 mt-4 pt-4 border-t border-gray-700",
@@ -4361,45 +4369,19 @@ var LayoutManagerModal = function LayoutManagerModal(_ref) {
4361
4369
  className: "w-8 h-8 rounded bg-".concat(themes[selectedThemeKey].tertiary, "-500")
4362
4370
  })]
4363
4371
  })]
4364
- }), selectedThemeKey === null && /*#__PURE__*/jsxRuntime.jsxs("div", {
4365
- className: "flex flex-row items-center space-x-2 mt-4 pt-4 border-t border-gray-700",
4366
- children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
4367
- icon: "palette",
4368
- className: "text-blue-400"
4369
- }), /*#__PURE__*/jsxRuntime.jsx("span", {
4370
- className: "text-sm font-medium text-gray-300",
4371
- children: "App Default"
4372
- })]
4373
4372
  })]
4374
- }), /*#__PURE__*/jsxRuntime.jsxs("div", {
4373
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
4375
4374
  className: "flex flex-col w-2/3 p-6 overflow-y-auto space-y-2",
4376
- children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
4377
- className: "flex flex-row items-center px-4 py-3 rounded-lg cursor-pointer transition-all ".concat(selectedThemeKey === null ? "ring-2 ring-blue-500 bg-gray-700" : "hover:bg-gray-750 hover:ring-1 hover:ring-gray-600 bg-gray-800/50"),
4378
- onClick: function onClick() {
4379
- return setSelectedThemeKey(null);
4380
- },
4381
- children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
4382
- icon: "palette",
4383
- className: "w-5 h-5 mr-3 ".concat(selectedThemeKey === null ? "text-blue-400" : "text-gray-400")
4384
- }), /*#__PURE__*/jsxRuntime.jsx("span", {
4385
- className: "text-sm font-medium ".concat(selectedThemeKey === null ? "text-blue-300" : "text-gray-300"),
4386
- children: "App Default"
4387
- }), /*#__PURE__*/jsxRuntime.jsx("div", {
4388
- className: "flex flex-row space-x-1 ml-auto",
4389
- children: themes && appThemeKey && themes[appThemeKey] && /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
4390
- children: [themes[appThemeKey].primary && /*#__PURE__*/jsxRuntime.jsx("div", {
4391
- className: "w-4 h-4 rounded bg-".concat(themes[appThemeKey].primary, "-500")
4392
- }), themes[appThemeKey].secondary && /*#__PURE__*/jsxRuntime.jsx("div", {
4393
- className: "w-4 h-4 rounded bg-".concat(themes[appThemeKey].secondary, "-500")
4394
- }), themes[appThemeKey].tertiary && /*#__PURE__*/jsxRuntime.jsx("div", {
4395
- className: "w-4 h-4 rounded bg-".concat(themes[appThemeKey].tertiary, "-500")
4396
- })]
4397
- })
4398
- })]
4399
- }), themes && Object.entries(themes).map(function (_ref2) {
4400
- var _ref3 = _slicedToArray(_ref2, 2),
4401
- key = _ref3[0],
4402
- t = _ref3[1];
4375
+ children: themes && Object.entries(themes).sort(function (_ref6, _ref7) {
4376
+ var _ref8 = _slicedToArray(_ref6, 2),
4377
+ a = _ref8[1];
4378
+ var _ref9 = _slicedToArray(_ref7, 2),
4379
+ b = _ref9[1];
4380
+ return (a.name || "").localeCompare(b.name || "");
4381
+ }).map(function (_ref0) {
4382
+ var _ref1 = _slicedToArray(_ref0, 2),
4383
+ key = _ref1[0],
4384
+ t = _ref1[1];
4403
4385
  var isThemeSelected = selectedThemeKey === key;
4404
4386
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
4405
4387
  className: "flex flex-row items-center px-4 py-3 rounded-lg cursor-pointer transition-all ".concat(isThemeSelected ? "ring-2 ring-blue-500 bg-gray-700" : "hover:bg-gray-750 hover:ring-1 hover:ring-gray-600 bg-gray-800/50"),
@@ -4423,7 +4405,7 @@ var LayoutManagerModal = function LayoutManagerModal(_ref) {
4423
4405
  })]
4424
4406
  })]
4425
4407
  }, key);
4426
- })]
4408
+ })
4427
4409
  })]
4428
4410
  });
4429
4411
  }
@@ -9775,9 +9757,9 @@ var PanelEditItem = function PanelEditItem(_ref) {
9775
9757
  };
9776
9758
 
9777
9759
  var _excluded$5 = ["rows", "cols"];
9778
- 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; } } }; }
9779
- 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; } }
9780
- 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; }
9760
+ 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; } } }; }
9761
+ 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; } }
9762
+ 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; }
9781
9763
  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; }
9782
9764
  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; }
9783
9765
  var defaultGrid = {
@@ -9930,7 +9912,7 @@ function GridEditor(_ref) {
9930
9912
  function sortObjectByKeys(obj) {
9931
9913
  var sortedKeys = Object.keys(obj).sort();
9932
9914
  var sortedObj = {};
9933
- var _iterator = _createForOfIteratorHelper$9(sortedKeys),
9915
+ var _iterator = _createForOfIteratorHelper$a(sortedKeys),
9934
9916
  _step;
9935
9917
  try {
9936
9918
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -13195,9 +13177,9 @@ var getUserConfigurableProviders = function getUserConfigurableProviders(provide
13195
13177
  });
13196
13178
  };
13197
13179
 
13198
- 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; } } }; }
13199
- 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; } }
13200
- 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; }
13180
+ 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; } } }; }
13181
+ 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; } }
13182
+ 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; }
13201
13183
  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; }
13202
13184
  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; }
13203
13185
  var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
@@ -13464,11 +13446,11 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
13464
13446
 
13465
13447
  // Flatten all widgets from all packages for the widget list
13466
13448
  flatWidgets = [];
13467
- _iterator = _createForOfIteratorHelper$8(result.packages || []);
13449
+ _iterator = _createForOfIteratorHelper$9(result.packages || []);
13468
13450
  try {
13469
13451
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
13470
13452
  pkg = _step.value;
13471
- _iterator2 = _createForOfIteratorHelper$8(pkg.widgets || []);
13453
+ _iterator2 = _createForOfIteratorHelper$9(pkg.widgets || []);
13472
13454
  try {
13473
13455
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
13474
13456
  widget = _step2.value;
@@ -15024,9 +15006,9 @@ var ProviderBadge = function ProviderBadge(_ref) {
15024
15006
  });
15025
15007
  };
15026
15008
 
15027
- 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; } } }; }
15028
- 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; } }
15029
- 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; }
15009
+ 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; } } }; }
15010
+ 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; } }
15011
+ 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; }
15030
15012
  var WidgetCardHeader = function WidgetCardHeader(_ref) {
15031
15013
  var item = _ref.item,
15032
15014
  widget = _ref.widget,
@@ -15070,7 +15052,7 @@ var WidgetCardHeader = function WidgetCardHeader(_ref) {
15070
15052
  var el = headerRef.current;
15071
15053
  if (!el) return;
15072
15054
  var observer = new ResizeObserver(function (entries) {
15073
- var _iterator = _createForOfIteratorHelper$7(entries),
15055
+ var _iterator = _createForOfIteratorHelper$8(entries),
15074
15056
  _step;
15075
15057
  try {
15076
15058
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -19862,9 +19844,9 @@ var ExternalWidget = function ExternalWidget(_ref) {
19862
19844
  var GRID_CELL_WIDGET_TYPE = "grid-cell-widget";
19863
19845
  var SIDEBAR_WIDGET_TYPE = "sidebar-widget";
19864
19846
 
19865
- 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; } } }; }
19866
- 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; } }
19867
- 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; }
19847
+ 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; } } }; }
19848
+ 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; } }
19849
+ 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; }
19868
19850
  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; }
19869
19851
  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; }
19870
19852
  var DraggableCellBody = function DraggableCellBody(_ref) {
@@ -20392,7 +20374,7 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
20392
20374
  return selectable["delete"](cn);
20393
20375
  });
20394
20376
  var resolved = new Set();
20395
- var _iterator = _createForOfIteratorHelper$6(selectable),
20377
+ var _iterator = _createForOfIteratorHelper$7(selectable),
20396
20378
  _step;
20397
20379
  try {
20398
20380
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -22530,9 +22512,9 @@ function isWidgetResolvable(componentKey) {
22530
22512
 
22531
22513
  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; }
22532
22514
  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; }
22533
- 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; } } }; }
22534
- 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; } }
22535
- 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; }
22515
+ 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; } } }; }
22516
+ 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; } }
22517
+ 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; }
22536
22518
  /**
22537
22519
  * The model for all layout components used primarily in the renderLayout method
22538
22520
  * @param {Object} layoutItem an object containing various attributes of the layout item
@@ -22544,7 +22526,7 @@ function _arrayLikeToArray$5(r, a) { (null == a || a > r.length) && (a = r.lengt
22544
22526
  function sortObjectByKeys(obj) {
22545
22527
  var sortedKeys = Object.keys(obj).sort();
22546
22528
  var sortedObj = {};
22547
- var _iterator = _createForOfIteratorHelper$5(sortedKeys),
22529
+ var _iterator = _createForOfIteratorHelper$6(sortedKeys),
22548
22530
  _step;
22549
22531
  try {
22550
22532
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -25801,9 +25783,9 @@ var useDashboard = function useDashboard() {
25801
25783
  });
25802
25784
  };
25803
25785
 
25804
- 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; } } }; }
25805
- 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; } }
25806
- 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; }
25786
+ 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; } } }; }
25787
+ 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; } }
25788
+ 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; }
25807
25789
 
25808
25790
  /**
25809
25791
  * useWidgetProviders Hook
@@ -25854,7 +25836,7 @@ var useWidgetProviders = function useWidgetProviders() {
25854
25836
  // 1. Widget-level: stored directly on the layout item by handleSelectProvider
25855
25837
  // 2. Workspace-level: stored as workspace.selectedProviders[widgetId][providerType]
25856
25838
  var providers = {};
25857
- var _iterator = _createForOfIteratorHelper$4(providerDeclarations),
25839
+ var _iterator = _createForOfIteratorHelper$5(providerDeclarations),
25858
25840
  _step;
25859
25841
  try {
25860
25842
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -28778,9 +28760,9 @@ var resolveIcon = function resolveIcon(iconName) {
28778
28760
  return FALLBACK;
28779
28761
  };
28780
28762
 
28781
- function _createForOfIteratorHelper$3(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$3(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; } } }; }
28782
- function _unsupportedIterableToArray$3(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$3(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$3(r, a) : void 0; } }
28783
- function _arrayLikeToArray$3(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; }
28763
+ 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; } } }; }
28764
+ 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; } }
28765
+ 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; }
28784
28766
  /**
28785
28767
  * Validation utilities for grid-first dashboard architecture
28786
28768
  *
@@ -29019,7 +29001,7 @@ var validateCellMerge = function validateCellMerge(cellNumbers, grid) {
29019
29001
 
29020
29002
  // Validate each cell
29021
29003
  var cells = [];
29022
- var _iterator = _createForOfIteratorHelper$3(cellNumbers),
29004
+ var _iterator = _createForOfIteratorHelper$4(cellNumbers),
29023
29005
  _step;
29024
29006
  try {
29025
29007
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -32782,18 +32764,21 @@ var DashboardDetail = function DashboardDetail(_ref2) {
32782
32764
  value: String(m.id)
32783
32765
  };
32784
32766
  });
32785
- var themeOptions = [{
32786
- label: "App Default",
32787
- value: ""
32788
- }].concat(_toConsumableArray(Object.entries(themes || {}).map(function (_ref3) {
32789
- var _ref4 = _slicedToArray(_ref3, 2),
32790
- key = _ref4[0],
32791
- t = _ref4[1];
32767
+ var themeOptions = _toConsumableArray(Object.entries(themes || {}).sort(function (_ref3, _ref4) {
32768
+ var _ref5 = _slicedToArray(_ref3, 2),
32769
+ a = _ref5[1];
32770
+ var _ref6 = _slicedToArray(_ref4, 2),
32771
+ b = _ref6[1];
32772
+ return (a.name || "").localeCompare(b.name || "");
32773
+ }).map(function (_ref7) {
32774
+ var _ref8 = _slicedToArray(_ref7, 2),
32775
+ key = _ref8[0],
32776
+ t = _ref8[1];
32792
32777
  return {
32793
32778
  label: t.name || key,
32794
32779
  value: key
32795
32780
  };
32796
- })));
32781
+ }));
32797
32782
  function handleChangeFolder(val) {
32798
32783
  if (!dashApi || !appId) return;
32799
32784
  var updated = DashReact.deepCopy(ws);
@@ -32880,7 +32865,7 @@ var DashboardDetail = function DashboardDetail(_ref2) {
32880
32865
  return handleChangeTheme(val);
32881
32866
  },
32882
32867
  options: themeOptions,
32883
- placeholder: "App Default"
32868
+ placeholder: "Select a theme"
32884
32869
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
32885
32870
  className: "flex flex-row items-center gap-2",
32886
32871
  children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
@@ -37122,9 +37107,9 @@ var RegistryPackageDetail = function RegistryPackageDetail(_ref) {
37122
37107
  });
37123
37108
  };
37124
37109
 
37125
- function _createForOfIteratorHelper$2(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$2(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; } } }; }
37126
- function _unsupportedIterableToArray$2(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$2(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$2(r, a) : void 0; } }
37127
- function _arrayLikeToArray$2(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; }
37110
+ function _createForOfIteratorHelper$3(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$3(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; } } }; }
37111
+ function _unsupportedIterableToArray$3(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$3(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$3(r, a) : void 0; } }
37112
+ function _arrayLikeToArray$3(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; }
37128
37113
 
37129
37114
  /**
37130
37115
  * useRegistrySearch — shared hook for browsing and installing registry packages.
@@ -37227,13 +37212,13 @@ var useRegistrySearch = function useRegistrySearch() {
37227
37212
  return c.toLowerCase();
37228
37213
  }));
37229
37214
  widgets = [];
37230
- _iterator = _createForOfIteratorHelper$2(pkgs);
37215
+ _iterator = _createForOfIteratorHelper$3(pkgs);
37231
37216
  try {
37232
37217
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
37233
37218
  pkg = _step.value;
37234
37219
  // Compute missing APIs for the entire package
37235
37220
  allApiProviders = [];
37236
- _iterator2 = _createForOfIteratorHelper$2(pkg.providers || []);
37221
+ _iterator2 = _createForOfIteratorHelper$3(pkg.providers || []);
37237
37222
  try {
37238
37223
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
37239
37224
  p = _step2.value;
@@ -37246,11 +37231,11 @@ var useRegistrySearch = function useRegistrySearch() {
37246
37231
  } finally {
37247
37232
  _iterator2.f();
37248
37233
  }
37249
- _iterator3 = _createForOfIteratorHelper$2(pkg.widgets || []);
37234
+ _iterator3 = _createForOfIteratorHelper$3(pkg.widgets || []);
37250
37235
  try {
37251
37236
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
37252
37237
  w = _step3.value;
37253
- _iterator5 = _createForOfIteratorHelper$2(w.providers || []);
37238
+ _iterator5 = _createForOfIteratorHelper$3(w.providers || []);
37254
37239
  try {
37255
37240
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
37256
37241
  _p = _step5.value;
@@ -37272,7 +37257,7 @@ var useRegistrySearch = function useRegistrySearch() {
37272
37257
  missingApis = _toConsumableArray(new Set(allApiProviders)).filter(function (api) {
37273
37258
  return !capSet.has(api.toLowerCase());
37274
37259
  });
37275
- _iterator4 = _createForOfIteratorHelper$2(pkg.widgets || []);
37260
+ _iterator4 = _createForOfIteratorHelper$3(pkg.widgets || []);
37276
37261
  try {
37277
37262
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
37278
37263
  widget = _step4.value;
@@ -37405,9 +37390,9 @@ var useRegistrySearch = function useRegistrySearch() {
37405
37390
  };
37406
37391
  };
37407
37392
 
37408
- function _createForOfIteratorHelper$1(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$1(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; } } }; }
37409
- function _unsupportedIterableToArray$1(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$1(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$1(r, a) : void 0; } }
37410
- function _arrayLikeToArray$1(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; }
37393
+ function _createForOfIteratorHelper$2(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$2(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; } } }; }
37394
+ function _unsupportedIterableToArray$2(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$2(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$2(r, a) : void 0; } }
37395
+ function _arrayLikeToArray$2(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; }
37411
37396
  var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
37412
37397
  var onBack = _ref.onBack;
37413
37398
  var _useContext = React.useContext(DashReact.ThemeContext),
@@ -37446,12 +37431,12 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
37446
37431
  var checkToolConflicts = function checkToolConflicts(widget) {
37447
37432
  var conflicts = [];
37448
37433
  var packageWidgets = widget.packageWidgets || [];
37449
- var _iterator = _createForOfIteratorHelper$1(packageWidgets),
37434
+ var _iterator = _createForOfIteratorHelper$2(packageWidgets),
37450
37435
  _step;
37451
37436
  try {
37452
37437
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
37453
37438
  var w = _step.value;
37454
- var _iterator2 = _createForOfIteratorHelper$1(w.providers || []),
37439
+ var _iterator2 = _createForOfIteratorHelper$2(w.providers || []),
37455
37440
  _step2;
37456
37441
  try {
37457
37442
  var _loop = function _loop() {
@@ -37464,7 +37449,7 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
37464
37449
  prov = _ref3[1];
37465
37450
  return prov.type === p.type && prov.providerClass === "mcp" && prov.allowedTools;
37466
37451
  });
37467
- var _iterator3 = _createForOfIteratorHelper$1(matchingProviders),
37452
+ var _iterator3 = _createForOfIteratorHelper$2(matchingProviders),
37468
37453
  _step3;
37469
37454
  try {
37470
37455
  var _loop2 = function _loop2() {
@@ -37670,9 +37655,9 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
37670
37655
  });
37671
37656
  };
37672
37657
 
37673
- function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(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; } } }; }
37674
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(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, a) : void 0; } }
37675
- function _arrayLikeToArray(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; }
37658
+ function _createForOfIteratorHelper$1(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$1(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; } } }; }
37659
+ function _unsupportedIterableToArray$1(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$1(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$1(r, a) : void 0; } }
37660
+ function _arrayLikeToArray$1(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; }
37676
37661
 
37677
37662
  /**
37678
37663
  * Walk a workspace layout array (possibly nested via LayoutGridContainer
@@ -37681,7 +37666,7 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
37681
37666
  function collectComponentsFromLayout(layout) {
37682
37667
  var components = [];
37683
37668
  if (!Array.isArray(layout)) return components;
37684
- var _iterator = _createForOfIteratorHelper(layout),
37669
+ var _iterator = _createForOfIteratorHelper$1(layout),
37685
37670
  _step;
37686
37671
  try {
37687
37672
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -37710,7 +37695,7 @@ function findWidgetUsage(componentNames, workspaces) {
37710
37695
  if (!(componentNames !== null && componentNames !== void 0 && componentNames.length) || !(workspaces !== null && workspaces !== void 0 && workspaces.length)) return [];
37711
37696
  var nameSet = new Set(componentNames);
37712
37697
  var results = [];
37713
- var _iterator2 = _createForOfIteratorHelper(workspaces),
37698
+ var _iterator2 = _createForOfIteratorHelper$1(workspaces),
37714
37699
  _step2;
37715
37700
  try {
37716
37701
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -40309,6 +40294,9 @@ var PopoverItem = function PopoverItem(_ref4) {
40309
40294
  });
40310
40295
  };
40311
40296
 
40297
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(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; } } }; }
40298
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(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, a) : void 0; } }
40299
+ function _arrayLikeToArray(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; }
40312
40300
  var DraggableWidgetItem = function DraggableWidgetItem(_ref) {
40313
40301
  var widgetKey = _ref.widgetKey,
40314
40302
  widget = _ref.widget;
@@ -40372,11 +40360,35 @@ var DraggableWidgetItem = function DraggableWidgetItem(_ref) {
40372
40360
 
40373
40361
  var SidebarDiscoverContent = function SidebarDiscoverContent(_ref2) {
40374
40362
  var registry = _ref2.registry,
40375
- onInstallSuccess = _ref2.onInstallSuccess;
40363
+ onInstallSuccess = _ref2.onInstallSuccess,
40364
+ installedPackageNames = _ref2.installedPackageNames;
40376
40365
  var _useState = React.useState(null),
40377
40366
  _useState2 = _slicedToArray(_useState, 2),
40378
40367
  selectedPackageName = _useState2[0],
40379
40368
  setSelectedPackageName = _useState2[1];
40369
+
40370
+ // Check if a package is installed by name or scope/name
40371
+ var isPackageInstalled = React.useCallback(function (pkg) {
40372
+ var _pkg$widgets;
40373
+ // Check via WidgetRegistry (externally installed packages)
40374
+ if (installedPackageNames.has(pkg.name) || pkg.scope && installedPackageNames.has("".concat(pkg.scope, "/").concat(pkg.name))) {
40375
+ return true;
40376
+ }
40377
+ // Check if any of this package's widgets are registered in ComponentManager
40378
+ // (covers built-in widgets loaded directly, not through the WidgetRegistry).
40379
+ // ComponentManager keys may be prefixed (e.g., "DashSamples_EventReceiverWidget")
40380
+ // so we also check if any key ends with the widget name.
40381
+ if (((_pkg$widgets = pkg.widgets) === null || _pkg$widgets === void 0 ? void 0 : _pkg$widgets.length) > 0) {
40382
+ var cMap = ComponentManager.componentMap();
40383
+ var cMapKeys = Object.keys(cMap);
40384
+ return pkg.widgets.some(function (w) {
40385
+ return w.name in cMap || cMapKeys.some(function (k) {
40386
+ return k === w.name || k.endsWith("_".concat(w.name));
40387
+ });
40388
+ });
40389
+ }
40390
+ return false;
40391
+ }, [installedPackageNames]);
40380
40392
  var selectedPackage = React.useMemo(function () {
40381
40393
  if (!selectedPackageName) return null;
40382
40394
  return registry.packages.find(function (pkg) {
@@ -40385,13 +40397,13 @@ var SidebarDiscoverContent = function SidebarDiscoverContent(_ref2) {
40385
40397
  }, [selectedPackageName, registry.packages]);
40386
40398
  var handleInstall = React.useCallback(/*#__PURE__*/function () {
40387
40399
  var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(pkg) {
40388
- var _pkg$widgets;
40400
+ var _pkg$widgets2;
40389
40401
  var firstWidget, installable;
40390
40402
  return _regeneratorRuntime.wrap(function (_context) {
40391
40403
  while (1) switch (_context.prev = _context.next) {
40392
40404
  case 0:
40393
40405
  // Build a widget-like object that useRegistrySearch.installPackage expects
40394
- firstWidget = (_pkg$widgets = pkg.widgets) === null || _pkg$widgets === void 0 ? void 0 : _pkg$widgets[0];
40406
+ firstWidget = (_pkg$widgets2 = pkg.widgets) === null || _pkg$widgets2 === void 0 ? void 0 : _pkg$widgets2[0];
40395
40407
  if (firstWidget) {
40396
40408
  _context.next = 1;
40397
40409
  break;
@@ -40425,8 +40437,9 @@ var SidebarDiscoverContent = function SidebarDiscoverContent(_ref2) {
40425
40437
 
40426
40438
  // Detail view for a selected package
40427
40439
  if (selectedPackage) {
40428
- var _pkg$tags, _pkg$widgets2;
40440
+ var _pkg$tags, _pkg$widgets3;
40429
40441
  var pkg = selectedPackage;
40442
+ var isInstalled = isPackageInstalled(pkg);
40430
40443
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
40431
40444
  className: "flex flex-col h-full",
40432
40445
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
@@ -40448,9 +40461,15 @@ var SidebarDiscoverContent = function SidebarDiscoverContent(_ref2) {
40448
40461
  className: "h-4 w-4 opacity-60 mt-0.5 flex-shrink-0"
40449
40462
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
40450
40463
  className: "min-w-0",
40451
- children: [/*#__PURE__*/jsxRuntime.jsx("div", {
40452
- className: "font-medium text-sm truncate",
40453
- children: pkg.displayName || pkg.name
40464
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
40465
+ className: "flex items-center gap-1.5 font-medium text-sm",
40466
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
40467
+ className: "truncate",
40468
+ children: pkg.displayName || pkg.name
40469
+ }), isInstalled && /*#__PURE__*/jsxRuntime.jsx("span", {
40470
+ className: "text-[10px] px-1.5 py-0.5 rounded bg-emerald-500/20 text-emerald-400 flex-shrink-0",
40471
+ children: "Installed"
40472
+ })]
40454
40473
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
40455
40474
  className: "text-[10px] opacity-50",
40456
40475
  children: [pkg.author && /*#__PURE__*/jsxRuntime.jsxs("span", {
@@ -40469,7 +40488,7 @@ var SidebarDiscoverContent = function SidebarDiscoverContent(_ref2) {
40469
40488
  children: tag
40470
40489
  }, tag);
40471
40490
  })
40472
- }), ((_pkg$widgets2 = pkg.widgets) === null || _pkg$widgets2 === void 0 ? void 0 : _pkg$widgets2.length) > 0 && /*#__PURE__*/jsxRuntime.jsxs("div", {
40491
+ }), ((_pkg$widgets3 = pkg.widgets) === null || _pkg$widgets3 === void 0 ? void 0 : _pkg$widgets3.length) > 0 && /*#__PURE__*/jsxRuntime.jsxs("div", {
40473
40492
  className: "mb-3",
40474
40493
  children: [/*#__PURE__*/jsxRuntime.jsx("div", {
40475
40494
  className: "text-[10px] font-medium opacity-50 uppercase tracking-wider mb-1.5",
@@ -40506,9 +40525,9 @@ var SidebarDiscoverContent = function SidebarDiscoverContent(_ref2) {
40506
40525
  onClick: function onClick() {
40507
40526
  return handleInstall(pkg);
40508
40527
  },
40509
- disabled: registry.isInstalling,
40528
+ disabled: registry.isInstalling || isInstalled,
40510
40529
  className: "w-full py-1.5 rounded-md text-xs font-medium bg-blue-600 hover:bg-blue-500 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",
40511
- children: registry.isInstalling ? "Installing..." : "Install Package"
40530
+ children: isInstalled ? "Installed" : registry.isInstalling ? "Installing..." : "Install Package"
40512
40531
  })
40513
40532
  })]
40514
40533
  });
@@ -40570,13 +40589,14 @@ var SidebarDiscoverContent = function SidebarDiscoverContent(_ref2) {
40570
40589
  children: /*#__PURE__*/jsxRuntime.jsx("div", {
40571
40590
  className: "flex flex-col gap-1 px-3 py-1",
40572
40591
  children: registry.packages.map(function (pkg) {
40573
- var _pkg$widgets3, _pkg$widgets4;
40592
+ var _pkg$widgets4, _pkg$widgets5;
40593
+ var isInstalled = isPackageInstalled(pkg);
40574
40594
  return /*#__PURE__*/jsxRuntime.jsxs("button", {
40575
40595
  type: "button",
40576
40596
  onClick: function onClick() {
40577
40597
  return setSelectedPackageName(pkg.name);
40578
40598
  },
40579
- className: "flex items-center gap-2 px-3 py-2 rounded-md text-left bg-white/5 hover:bg-white/10 transition-colors w-full",
40599
+ className: "flex items-center gap-2 px-3 py-2 rounded-md text-left\n bg-white/5 hover:bg-white/10 transition-colors w-full".concat(isInstalled ? " opacity-50" : ""),
40580
40600
  children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
40581
40601
  icon: "cube",
40582
40602
  className: "h-3 w-3 opacity-40 flex-shrink-0"
@@ -40590,10 +40610,17 @@ var SidebarDiscoverContent = function SidebarDiscoverContent(_ref2) {
40590
40610
  children: [pkg.author && /*#__PURE__*/jsxRuntime.jsx("span", {
40591
40611
  className: "truncate",
40592
40612
  children: pkg.author
40593
- }), pkg.author && ((_pkg$widgets3 = pkg.widgets) === null || _pkg$widgets3 === void 0 ? void 0 : _pkg$widgets3.length) > 0 && /*#__PURE__*/jsxRuntime.jsx("span", {
40613
+ }), pkg.author && ((_pkg$widgets4 = pkg.widgets) === null || _pkg$widgets4 === void 0 ? void 0 : _pkg$widgets4.length) > 0 && /*#__PURE__*/jsxRuntime.jsx("span", {
40594
40614
  children: "\xB7"
40595
- }), ((_pkg$widgets4 = pkg.widgets) === null || _pkg$widgets4 === void 0 ? void 0 : _pkg$widgets4.length) > 0 && /*#__PURE__*/jsxRuntime.jsxs("span", {
40615
+ }), ((_pkg$widgets5 = pkg.widgets) === null || _pkg$widgets5 === void 0 ? void 0 : _pkg$widgets5.length) > 0 && /*#__PURE__*/jsxRuntime.jsxs("span", {
40596
40616
  children: [pkg.widgets.length, " widget", pkg.widgets.length !== 1 ? "s" : ""]
40617
+ }), isInstalled && /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
40618
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
40619
+ children: "\xB7"
40620
+ }), /*#__PURE__*/jsxRuntime.jsx("span", {
40621
+ className: "text-emerald-400",
40622
+ children: "Installed"
40623
+ })]
40597
40624
  })]
40598
40625
  })]
40599
40626
  })]
@@ -40683,10 +40710,83 @@ var WidgetSidebar = function WidgetSidebar(_ref4) {
40683
40710
  });
40684
40711
  }, [widgetVersion]);
40685
40712
 
40713
+ // Set of installed package identifiers for "Installed" badge in Discover tab.
40714
+ // Stores folder names, package names, and "author/name" keys for matching.
40715
+ var _useState17 = React.useState(new Set()),
40716
+ _useState18 = _slicedToArray(_useState17, 2),
40717
+ installedPackageNames = _useState18[0],
40718
+ setInstalledPackageNames = _useState18[1];
40719
+ React.useEffect(function () {
40720
+ var cancelled = false;
40721
+ var loadInstalled = /*#__PURE__*/function () {
40722
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
40723
+ var widgets, names, _iterator, _step, w, folderName, _folderName;
40724
+ return _regeneratorRuntime.wrap(function (_context2) {
40725
+ while (1) switch (_context2.prev = _context2.next) {
40726
+ case 0:
40727
+ _context2.prev = 0;
40728
+ _context2.next = 1;
40729
+ return window.mainApi.widgets.list();
40730
+ case 1:
40731
+ widgets = _context2.sent;
40732
+ if (!cancelled) {
40733
+ _context2.next = 2;
40734
+ break;
40735
+ }
40736
+ return _context2.abrupt("return");
40737
+ case 2:
40738
+ names = new Set();
40739
+ _iterator = _createForOfIteratorHelper(widgets);
40740
+ try {
40741
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
40742
+ w = _step.value;
40743
+ // w is a config object with name, path, author, etc.
40744
+ if (w.name) names.add(w.name);
40745
+ // Extract folder name from path (matches registry pkg.name)
40746
+ if (w.path) {
40747
+ folderName = w.path.split("/").pop();
40748
+ if (folderName) names.add(folderName);
40749
+ }
40750
+ // Add author-scoped keys for disambiguation
40751
+ if (w.author && w.name) {
40752
+ names.add("".concat(w.author, "/").concat(w.name));
40753
+ }
40754
+ if (w.author && w.path) {
40755
+ _folderName = w.path.split("/").pop();
40756
+ if (_folderName) names.add("".concat(w.author, "/").concat(_folderName));
40757
+ }
40758
+ }
40759
+ } catch (err) {
40760
+ _iterator.e(err);
40761
+ } finally {
40762
+ _iterator.f();
40763
+ }
40764
+ setInstalledPackageNames(names);
40765
+ _context2.next = 4;
40766
+ break;
40767
+ case 3:
40768
+ _context2.prev = 3;
40769
+ _context2["catch"](0);
40770
+ case 4:
40771
+ case "end":
40772
+ return _context2.stop();
40773
+ }
40774
+ }, _callee2, null, [[0, 3]]);
40775
+ }));
40776
+ return function loadInstalled() {
40777
+ return _ref5.apply(this, arguments);
40778
+ };
40779
+ }();
40780
+ loadInstalled();
40781
+ return function () {
40782
+ cancelled = true;
40783
+ };
40784
+ }, [widgetVersion]);
40785
+
40686
40786
  // Derive unique groups for dropdown (package > author > "Other")
40687
40787
  var uniqueAuthors = React.useMemo(function () {
40688
- return _toConsumableArray(new Set(allWidgets.map(function (_ref5) {
40689
- var widget = _ref5.widget;
40788
+ return _toConsumableArray(new Set(allWidgets.map(function (_ref6) {
40789
+ var widget = _ref6.widget;
40690
40790
  return widget["package"] || widget.author || "Other";
40691
40791
  }))).sort();
40692
40792
  }, [allWidgets]);
@@ -40694,8 +40794,8 @@ var WidgetSidebar = function WidgetSidebar(_ref4) {
40694
40794
  // Derive unique provider types for dropdown
40695
40795
  var uniqueProviders = React.useMemo(function () {
40696
40796
  var types = new Set();
40697
- allWidgets.forEach(function (_ref6) {
40698
- var widget = _ref6.widget;
40797
+ allWidgets.forEach(function (_ref7) {
40798
+ var widget = _ref7.widget;
40699
40799
  return (widget.providers || []).forEach(function (p) {
40700
40800
  return types.add(p.type);
40701
40801
  });
@@ -40705,9 +40805,9 @@ var WidgetSidebar = function WidgetSidebar(_ref4) {
40705
40805
 
40706
40806
  // Filtered + grouped widgets
40707
40807
  var filteredGrouped = React.useMemo(function () {
40708
- var filtered = allWidgets.filter(function (_ref7) {
40709
- var key = _ref7.key,
40710
- widget = _ref7.widget;
40808
+ var filtered = allWidgets.filter(function (_ref8) {
40809
+ var key = _ref8.key,
40810
+ widget = _ref8.widget;
40711
40811
  // Search: match name, key, or description
40712
40812
  if (searchQuery) {
40713
40813
  var q = searchQuery.toLowerCase();
@@ -40747,9 +40847,9 @@ var WidgetSidebar = function WidgetSidebar(_ref4) {
40747
40847
 
40748
40848
  // Group by package > author > "Other"
40749
40849
  var groups = {};
40750
- filtered.forEach(function (_ref8) {
40751
- var key = _ref8.key,
40752
- widget = _ref8.widget;
40850
+ filtered.forEach(function (_ref9) {
40851
+ var key = _ref9.key,
40852
+ widget = _ref9.widget;
40753
40853
  var group = widget["package"] || widget.author || "Other";
40754
40854
  if (!groups[group]) groups[group] = [];
40755
40855
  groups[group].push({
@@ -40939,9 +41039,9 @@ var WidgetSidebar = function WidgetSidebar(_ref4) {
40939
41039
  label: author,
40940
41040
  children: /*#__PURE__*/jsxRuntime.jsx("div", {
40941
41041
  className: "flex flex-col gap-1",
40942
- children: filteredGrouped[author].map(function (_ref9) {
40943
- var key = _ref9.key,
40944
- widget = _ref9.widget;
41042
+ children: filteredGrouped[author].map(function (_ref0) {
41043
+ var key = _ref0.key,
41044
+ widget = _ref0.widget;
40945
41045
  return /*#__PURE__*/jsxRuntime.jsx(DraggableWidgetItem, {
40946
41046
  widgetKey: key,
40947
41047
  widget: widget
@@ -40962,7 +41062,8 @@ var WidgetSidebar = function WidgetSidebar(_ref4) {
40962
41062
  })]
40963
41063
  }) : /*#__PURE__*/jsxRuntime.jsx(SidebarDiscoverContent, {
40964
41064
  registry: registry,
40965
- onInstallSuccess: handleInstallSuccess
41065
+ onInstallSuccess: handleInstallSuccess,
41066
+ installedPackageNames: installedPackageNames
40966
41067
  })
40967
41068
  }), !collapsed && activeTab === "installed" && installSuccess && /*#__PURE__*/jsxRuntime.jsx(DashReact.Sidebar.Footer, {
40968
41069
  children: /*#__PURE__*/jsxRuntime.jsxs("div", {
@@ -42211,10 +42312,16 @@ var DashboardHeader = function DashboardHeader(_ref) {
42211
42312
  className: "w-40 shrink-0"
42212
42313
  }), onThemeChange && Object.keys(resolvedThemes).length > 0 && /*#__PURE__*/jsxRuntime.jsx(DashReact.SelectInput, {
42213
42314
  value: workspaceSelected.themeKey || "",
42214
- options: Object.entries(resolvedThemes).map(function (_ref2) {
42215
- var _ref3 = _slicedToArray(_ref2, 2),
42216
- key = _ref3[0],
42217
- t = _ref3[1];
42315
+ options: Object.entries(resolvedThemes).sort(function (_ref2, _ref3) {
42316
+ var _ref4 = _slicedToArray(_ref2, 2),
42317
+ a = _ref4[1];
42318
+ var _ref5 = _slicedToArray(_ref3, 2),
42319
+ b = _ref5[1];
42320
+ return (a.name || "").localeCompare(b.name || "");
42321
+ }).map(function (_ref6) {
42322
+ var _ref7 = _slicedToArray(_ref6, 2),
42323
+ key = _ref7[0],
42324
+ t = _ref7[1];
42218
42325
  return {
42219
42326
  label: t.name || key,
42220
42327
  value: key,
@@ -42222,7 +42329,7 @@ var DashboardHeader = function DashboardHeader(_ref) {
42222
42329
  };
42223
42330
  }),
42224
42331
  onChange: onThemeChange,
42225
- placeholder: "Theme",
42332
+ placeholder: "Select a theme",
42226
42333
  backgroundColor: currentTheme["bg-primary-very-dark"],
42227
42334
  textColor: currentTheme["text-primary-medium"],
42228
42335
  borderColor: currentTheme["border-primary-dark"],