@trops/dash-core 0.1.139 → 0.1.140

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
@@ -38186,7 +38186,9 @@ var RegistryPackageDetail = function RegistryPackageDetail(_ref) {
38186
38186
  _ref$isInstalling = _ref.isInstalling,
38187
38187
  isInstalling = _ref$isInstalling === void 0 ? false : _ref$isInstalling,
38188
38188
  _ref$installError = _ref.installError,
38189
- installError = _ref$installError === void 0 ? null : _ref$installError;
38189
+ installError = _ref$installError === void 0 ? null : _ref$installError,
38190
+ _ref$isInstalled = _ref.isInstalled,
38191
+ isInstalled = _ref$isInstalled === void 0 ? false : _ref$isInstalled;
38190
38192
  var _useContext = React.useContext(DashReact.ThemeContext),
38191
38193
  currentTheme = _useContext.currentTheme;
38192
38194
  var panelStyles = DashReact.getStylesForItem(DashReact.themeObjects.PANEL, currentTheme, {
@@ -38206,9 +38208,15 @@ var RegistryPackageDetail = function RegistryPackageDetail(_ref) {
38206
38208
  className: "h-5 w-5"
38207
38209
  })
38208
38210
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
38209
- children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.SubHeading3, {
38210
- title: widget.packageDisplayName,
38211
- padding: false
38211
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
38212
+ className: "flex items-center gap-2",
38213
+ children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.SubHeading3, {
38214
+ title: widget.packageDisplayName,
38215
+ padding: false
38216
+ }), isInstalled && /*#__PURE__*/jsxRuntime.jsx("span", {
38217
+ className: "text-[10px] px-1.5 py-0.5 rounded bg-emerald-500/20 text-emerald-400 flex-shrink-0",
38218
+ children: "Installed"
38219
+ })]
38212
38220
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
38213
38221
  className: "flex items-center gap-2 mt-0.5",
38214
38222
  children: [/*#__PURE__*/jsxRuntime.jsxs("span", {
@@ -38319,13 +38327,13 @@ var RegistryPackageDetail = function RegistryPackageDetail(_ref) {
38319
38327
  }), /*#__PURE__*/jsxRuntime.jsx("div", {
38320
38328
  className: "flex items-center justify-end px-6 py-3 border-t ".concat(currentTheme["border-primary-medium"]),
38321
38329
  children: /*#__PURE__*/jsxRuntime.jsx(DashReact.Button, {
38322
- title: isInstalling ? "Installing..." : "Install Package",
38323
- bgColor: "bg-blue-600",
38324
- hoverBackgroundColor: isInstalling ? "" : "hover:bg-blue-700",
38330
+ title: isInstalled ? "Installed" : isInstalling ? "Installing..." : "Install Package",
38331
+ bgColor: isInstalled ? "bg-emerald-600/50" : "bg-blue-600",
38332
+ hoverBackgroundColor: isInstalled || isInstalling ? "" : "hover:bg-blue-700",
38325
38333
  textSize: "text-sm",
38326
38334
  padding: "py-1.5 px-4",
38327
38335
  onClick: onInstall,
38328
- disabled: isInstalling
38336
+ disabled: isInstalling || isInstalled
38329
38337
  })
38330
38338
  })]
38331
38339
  });
@@ -38428,7 +38436,11 @@ var useRegistrySearch = function useRegistrySearch() {
38428
38436
  return window.mainApi.registry.search(query !== null && query !== void 0 ? query : searchQuery, filters);
38429
38437
  case 3:
38430
38438
  result = _context.sent;
38431
- pkgs = result.packages || [];
38439
+ // Only include packages that contain at least one widget
38440
+ // (filters out theme-only packages, etc.)
38441
+ pkgs = (result.packages || []).filter(function (pkg) {
38442
+ return pkg.widgets && pkg.widgets.length > 0;
38443
+ });
38432
38444
  setPackages(pkgs);
38433
38445
 
38434
38446
  // Flatten packages into widget entries
@@ -38647,6 +38659,83 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
38647
38659
  _useState4 = _slicedToArray(_useState3, 2),
38648
38660
  toolConflictWarning = _useState4[0],
38649
38661
  setToolConflictWarning = _useState4[1];
38662
+
38663
+ // Track installed package names (same pattern as WidgetSidebar)
38664
+ var _useState5 = React.useState(new Set()),
38665
+ _useState6 = _slicedToArray(_useState5, 2),
38666
+ installedPackageNames = _useState6[0],
38667
+ setInstalledPackageNames = _useState6[1];
38668
+ var loadInstalledPackages = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
38669
+ var widgets, names, _iterator, _step, w, folderName, _folderName;
38670
+ return _regeneratorRuntime.wrap(function (_context) {
38671
+ while (1) switch (_context.prev = _context.next) {
38672
+ case 0:
38673
+ _context.prev = 0;
38674
+ _context.next = 1;
38675
+ return window.mainApi.widgets.list();
38676
+ case 1:
38677
+ widgets = _context.sent;
38678
+ names = new Set();
38679
+ _iterator = _createForOfIteratorHelper$2(widgets);
38680
+ try {
38681
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
38682
+ w = _step.value;
38683
+ if (w.name) names.add(w.name);
38684
+ if (w.path) {
38685
+ folderName = w.path.split("/").pop();
38686
+ if (folderName) names.add(folderName);
38687
+ }
38688
+ if (w.author && w.name) {
38689
+ names.add("".concat(w.author, "/").concat(w.name));
38690
+ }
38691
+ if (w.author && w.path) {
38692
+ _folderName = w.path.split("/").pop();
38693
+ if (_folderName) names.add("".concat(w.author, "/").concat(_folderName));
38694
+ }
38695
+ }
38696
+ } catch (err) {
38697
+ _iterator.e(err);
38698
+ } finally {
38699
+ _iterator.f();
38700
+ }
38701
+ setInstalledPackageNames(names);
38702
+ _context.next = 3;
38703
+ break;
38704
+ case 2:
38705
+ _context.prev = 2;
38706
+ _context["catch"](0);
38707
+ case 3:
38708
+ case "end":
38709
+ return _context.stop();
38710
+ }
38711
+ }, _callee, null, [[0, 2]]);
38712
+ })), []);
38713
+ React.useEffect(function () {
38714
+ loadInstalledPackages();
38715
+ var handleWidgetsUpdated = function handleWidgetsUpdated() {
38716
+ return loadInstalledPackages();
38717
+ };
38718
+ window.addEventListener("dash:widgets-updated", handleWidgetsUpdated);
38719
+ return function () {
38720
+ return window.removeEventListener("dash:widgets-updated", handleWidgetsUpdated);
38721
+ };
38722
+ }, [loadInstalledPackages]);
38723
+ var isPackageInstalled = React.useCallback(function (pkg) {
38724
+ if (installedPackageNames.has(pkg.name) || pkg.scope && installedPackageNames.has("".concat(pkg.scope, "/").concat(pkg.name))) {
38725
+ return true;
38726
+ }
38727
+ var packageWidgets = pkg.widgets || [];
38728
+ if (packageWidgets.length > 0) {
38729
+ var cMap = ComponentManager.componentMap();
38730
+ var cMapKeys = Object.keys(cMap);
38731
+ return packageWidgets.some(function (w) {
38732
+ return w.name in cMap || cMapKeys.some(function (k) {
38733
+ return k === w.name || k.endsWith("_".concat(w.name));
38734
+ });
38735
+ });
38736
+ }
38737
+ return false;
38738
+ }, [installedPackageNames]);
38650
38739
  var selectedWidget = selectedPackageName ? flatWidgets.find(function (w) {
38651
38740
  return w.packageName === selectedPackageName;
38652
38741
  }) : null;
@@ -38655,31 +38744,31 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
38655
38744
  var checkToolConflicts = function checkToolConflicts(widget) {
38656
38745
  var conflicts = [];
38657
38746
  var packageWidgets = widget.packageWidgets || [];
38658
- var _iterator = _createForOfIteratorHelper$2(packageWidgets),
38659
- _step;
38747
+ var _iterator2 = _createForOfIteratorHelper$2(packageWidgets),
38748
+ _step2;
38660
38749
  try {
38661
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
38662
- var w = _step.value;
38663
- var _iterator2 = _createForOfIteratorHelper$2(w.providers || []),
38664
- _step2;
38750
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
38751
+ var w = _step2.value;
38752
+ var _iterator3 = _createForOfIteratorHelper$2(w.providers || []),
38753
+ _step3;
38665
38754
  try {
38666
38755
  var _loop = function _loop() {
38667
38756
  var _p$requiredTools;
38668
- var p = _step2.value;
38757
+ var p = _step3.value;
38669
38758
  if (!((_p$requiredTools = p.requiredTools) !== null && _p$requiredTools !== void 0 && _p$requiredTools.length) || p.providerClass !== "mcp") return 1; // continue
38670
38759
  // Find matching user provider
38671
- var matchingProviders = Object.entries(providers).filter(function (_ref2) {
38672
- var _ref3 = _slicedToArray(_ref2, 2),
38673
- prov = _ref3[1];
38760
+ var matchingProviders = Object.entries(providers).filter(function (_ref3) {
38761
+ var _ref4 = _slicedToArray(_ref3, 2),
38762
+ prov = _ref4[1];
38674
38763
  return prov.type === p.type && prov.providerClass === "mcp" && prov.allowedTools;
38675
38764
  });
38676
- var _iterator3 = _createForOfIteratorHelper$2(matchingProviders),
38677
- _step3;
38765
+ var _iterator4 = _createForOfIteratorHelper$2(matchingProviders),
38766
+ _step4;
38678
38767
  try {
38679
38768
  var _loop2 = function _loop2() {
38680
- var _step3$value = _slicedToArray(_step3.value, 2),
38681
- provName = _step3$value[0],
38682
- prov = _step3$value[1];
38769
+ var _step4$value = _slicedToArray(_step4.value, 2),
38770
+ provName = _step4$value[0],
38771
+ prov = _step4$value[1];
38683
38772
  var blocked = p.requiredTools.filter(function (t) {
38684
38773
  return !prov.allowedTools.includes(t);
38685
38774
  });
@@ -38691,28 +38780,28 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
38691
38780
  });
38692
38781
  }
38693
38782
  };
38694
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
38783
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
38695
38784
  _loop2();
38696
38785
  }
38697
38786
  } catch (err) {
38698
- _iterator3.e(err);
38787
+ _iterator4.e(err);
38699
38788
  } finally {
38700
- _iterator3.f();
38789
+ _iterator4.f();
38701
38790
  }
38702
38791
  };
38703
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
38792
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
38704
38793
  if (_loop()) continue;
38705
38794
  }
38706
38795
  } catch (err) {
38707
- _iterator2.e(err);
38796
+ _iterator3.e(err);
38708
38797
  } finally {
38709
- _iterator2.f();
38798
+ _iterator3.f();
38710
38799
  }
38711
38800
  }
38712
38801
  } catch (err) {
38713
- _iterator.e(err);
38802
+ _iterator2.e(err);
38714
38803
  } finally {
38715
- _iterator.f();
38804
+ _iterator2.f();
38716
38805
  }
38717
38806
  return conflicts;
38718
38807
  };
@@ -38755,7 +38844,10 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
38755
38844
  widget: selectedWidget,
38756
38845
  onInstall: handleInstall,
38757
38846
  isInstalling: isInstalling,
38758
- installError: installError
38847
+ installError: installError,
38848
+ isInstalled: selectedWidget ? isPackageInstalled(packages.find(function (p) {
38849
+ return p.name === selectedPackageName;
38850
+ }) || {}) : false
38759
38851
  })]
38760
38852
  });
38761
38853
  }
@@ -38808,6 +38900,7 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
38808
38900
  return w.packageName === pkg.name;
38809
38901
  });
38810
38902
  var hasIncompatible = (pkgWidget === null || pkgWidget === void 0 ? void 0 : pkgWidget.missingApis) && pkgWidget.missingApis.length > 0;
38903
+ var isInstalled = isPackageInstalled(pkg);
38811
38904
  return /*#__PURE__*/jsxRuntime.jsx(DashReact.Sidebar.Item, {
38812
38905
  icon: /*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
38813
38906
  icon: hasIncompatible ? "triangle-exclamation" : "cube",
@@ -38817,7 +38910,14 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
38817
38910
  return setSelectedPackageName(pkg.name);
38818
38911
  },
38819
38912
  badge: "".concat(widgetCount),
38820
- children: pkg.displayName || pkg.name
38913
+ className: isInstalled ? "opacity-50" : "",
38914
+ children: /*#__PURE__*/jsxRuntime.jsxs("span", {
38915
+ className: "flex items-center gap-1.5",
38916
+ children: [pkg.displayName || pkg.name, isInstalled && /*#__PURE__*/jsxRuntime.jsx("span", {
38917
+ className: "text-[10px] text-emerald-400",
38918
+ children: "Installed"
38919
+ })]
38920
+ })
38821
38921
  }, pkg.name);
38822
38922
  })
38823
38923
  });