@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.esm.js CHANGED
@@ -38168,7 +38168,9 @@ var RegistryPackageDetail = function RegistryPackageDetail(_ref) {
38168
38168
  _ref$isInstalling = _ref.isInstalling,
38169
38169
  isInstalling = _ref$isInstalling === void 0 ? false : _ref$isInstalling,
38170
38170
  _ref$installError = _ref.installError,
38171
- installError = _ref$installError === void 0 ? null : _ref$installError;
38171
+ installError = _ref$installError === void 0 ? null : _ref$installError,
38172
+ _ref$isInstalled = _ref.isInstalled,
38173
+ isInstalled = _ref$isInstalled === void 0 ? false : _ref$isInstalled;
38172
38174
  var _useContext = useContext(ThemeContext),
38173
38175
  currentTheme = _useContext.currentTheme;
38174
38176
  var panelStyles = getStylesForItem(themeObjects.PANEL, currentTheme, {
@@ -38188,9 +38190,15 @@ var RegistryPackageDetail = function RegistryPackageDetail(_ref) {
38188
38190
  className: "h-5 w-5"
38189
38191
  })
38190
38192
  }), /*#__PURE__*/jsxs("div", {
38191
- children: [/*#__PURE__*/jsx(SubHeading3, {
38192
- title: widget.packageDisplayName,
38193
- padding: false
38193
+ children: [/*#__PURE__*/jsxs("div", {
38194
+ className: "flex items-center gap-2",
38195
+ children: [/*#__PURE__*/jsx(SubHeading3, {
38196
+ title: widget.packageDisplayName,
38197
+ padding: false
38198
+ }), isInstalled && /*#__PURE__*/jsx("span", {
38199
+ className: "text-[10px] px-1.5 py-0.5 rounded bg-emerald-500/20 text-emerald-400 flex-shrink-0",
38200
+ children: "Installed"
38201
+ })]
38194
38202
  }), /*#__PURE__*/jsxs("div", {
38195
38203
  className: "flex items-center gap-2 mt-0.5",
38196
38204
  children: [/*#__PURE__*/jsxs("span", {
@@ -38301,13 +38309,13 @@ var RegistryPackageDetail = function RegistryPackageDetail(_ref) {
38301
38309
  }), /*#__PURE__*/jsx("div", {
38302
38310
  className: "flex items-center justify-end px-6 py-3 border-t ".concat(currentTheme["border-primary-medium"]),
38303
38311
  children: /*#__PURE__*/jsx(Button, {
38304
- title: isInstalling ? "Installing..." : "Install Package",
38305
- bgColor: "bg-blue-600",
38306
- hoverBackgroundColor: isInstalling ? "" : "hover:bg-blue-700",
38312
+ title: isInstalled ? "Installed" : isInstalling ? "Installing..." : "Install Package",
38313
+ bgColor: isInstalled ? "bg-emerald-600/50" : "bg-blue-600",
38314
+ hoverBackgroundColor: isInstalled || isInstalling ? "" : "hover:bg-blue-700",
38307
38315
  textSize: "text-sm",
38308
38316
  padding: "py-1.5 px-4",
38309
38317
  onClick: onInstall,
38310
- disabled: isInstalling
38318
+ disabled: isInstalling || isInstalled
38311
38319
  })
38312
38320
  })]
38313
38321
  });
@@ -38410,7 +38418,11 @@ var useRegistrySearch = function useRegistrySearch() {
38410
38418
  return window.mainApi.registry.search(query !== null && query !== void 0 ? query : searchQuery, filters);
38411
38419
  case 3:
38412
38420
  result = _context.sent;
38413
- pkgs = result.packages || [];
38421
+ // Only include packages that contain at least one widget
38422
+ // (filters out theme-only packages, etc.)
38423
+ pkgs = (result.packages || []).filter(function (pkg) {
38424
+ return pkg.widgets && pkg.widgets.length > 0;
38425
+ });
38414
38426
  setPackages(pkgs);
38415
38427
 
38416
38428
  // Flatten packages into widget entries
@@ -38629,6 +38641,83 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
38629
38641
  _useState4 = _slicedToArray(_useState3, 2),
38630
38642
  toolConflictWarning = _useState4[0],
38631
38643
  setToolConflictWarning = _useState4[1];
38644
+
38645
+ // Track installed package names (same pattern as WidgetSidebar)
38646
+ var _useState5 = useState(new Set()),
38647
+ _useState6 = _slicedToArray(_useState5, 2),
38648
+ installedPackageNames = _useState6[0],
38649
+ setInstalledPackageNames = _useState6[1];
38650
+ var loadInstalledPackages = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
38651
+ var widgets, names, _iterator, _step, w, folderName, _folderName;
38652
+ return _regeneratorRuntime.wrap(function (_context) {
38653
+ while (1) switch (_context.prev = _context.next) {
38654
+ case 0:
38655
+ _context.prev = 0;
38656
+ _context.next = 1;
38657
+ return window.mainApi.widgets.list();
38658
+ case 1:
38659
+ widgets = _context.sent;
38660
+ names = new Set();
38661
+ _iterator = _createForOfIteratorHelper$2(widgets);
38662
+ try {
38663
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
38664
+ w = _step.value;
38665
+ if (w.name) names.add(w.name);
38666
+ if (w.path) {
38667
+ folderName = w.path.split("/").pop();
38668
+ if (folderName) names.add(folderName);
38669
+ }
38670
+ if (w.author && w.name) {
38671
+ names.add("".concat(w.author, "/").concat(w.name));
38672
+ }
38673
+ if (w.author && w.path) {
38674
+ _folderName = w.path.split("/").pop();
38675
+ if (_folderName) names.add("".concat(w.author, "/").concat(_folderName));
38676
+ }
38677
+ }
38678
+ } catch (err) {
38679
+ _iterator.e(err);
38680
+ } finally {
38681
+ _iterator.f();
38682
+ }
38683
+ setInstalledPackageNames(names);
38684
+ _context.next = 3;
38685
+ break;
38686
+ case 2:
38687
+ _context.prev = 2;
38688
+ _context["catch"](0);
38689
+ case 3:
38690
+ case "end":
38691
+ return _context.stop();
38692
+ }
38693
+ }, _callee, null, [[0, 2]]);
38694
+ })), []);
38695
+ useEffect(function () {
38696
+ loadInstalledPackages();
38697
+ var handleWidgetsUpdated = function handleWidgetsUpdated() {
38698
+ return loadInstalledPackages();
38699
+ };
38700
+ window.addEventListener("dash:widgets-updated", handleWidgetsUpdated);
38701
+ return function () {
38702
+ return window.removeEventListener("dash:widgets-updated", handleWidgetsUpdated);
38703
+ };
38704
+ }, [loadInstalledPackages]);
38705
+ var isPackageInstalled = useCallback(function (pkg) {
38706
+ if (installedPackageNames.has(pkg.name) || pkg.scope && installedPackageNames.has("".concat(pkg.scope, "/").concat(pkg.name))) {
38707
+ return true;
38708
+ }
38709
+ var packageWidgets = pkg.widgets || [];
38710
+ if (packageWidgets.length > 0) {
38711
+ var cMap = ComponentManager.componentMap();
38712
+ var cMapKeys = Object.keys(cMap);
38713
+ return packageWidgets.some(function (w) {
38714
+ return w.name in cMap || cMapKeys.some(function (k) {
38715
+ return k === w.name || k.endsWith("_".concat(w.name));
38716
+ });
38717
+ });
38718
+ }
38719
+ return false;
38720
+ }, [installedPackageNames]);
38632
38721
  var selectedWidget = selectedPackageName ? flatWidgets.find(function (w) {
38633
38722
  return w.packageName === selectedPackageName;
38634
38723
  }) : null;
@@ -38637,31 +38726,31 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
38637
38726
  var checkToolConflicts = function checkToolConflicts(widget) {
38638
38727
  var conflicts = [];
38639
38728
  var packageWidgets = widget.packageWidgets || [];
38640
- var _iterator = _createForOfIteratorHelper$2(packageWidgets),
38641
- _step;
38729
+ var _iterator2 = _createForOfIteratorHelper$2(packageWidgets),
38730
+ _step2;
38642
38731
  try {
38643
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
38644
- var w = _step.value;
38645
- var _iterator2 = _createForOfIteratorHelper$2(w.providers || []),
38646
- _step2;
38732
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
38733
+ var w = _step2.value;
38734
+ var _iterator3 = _createForOfIteratorHelper$2(w.providers || []),
38735
+ _step3;
38647
38736
  try {
38648
38737
  var _loop = function _loop() {
38649
38738
  var _p$requiredTools;
38650
- var p = _step2.value;
38739
+ var p = _step3.value;
38651
38740
  if (!((_p$requiredTools = p.requiredTools) !== null && _p$requiredTools !== void 0 && _p$requiredTools.length) || p.providerClass !== "mcp") return 1; // continue
38652
38741
  // Find matching user provider
38653
- var matchingProviders = Object.entries(providers).filter(function (_ref2) {
38654
- var _ref3 = _slicedToArray(_ref2, 2),
38655
- prov = _ref3[1];
38742
+ var matchingProviders = Object.entries(providers).filter(function (_ref3) {
38743
+ var _ref4 = _slicedToArray(_ref3, 2),
38744
+ prov = _ref4[1];
38656
38745
  return prov.type === p.type && prov.providerClass === "mcp" && prov.allowedTools;
38657
38746
  });
38658
- var _iterator3 = _createForOfIteratorHelper$2(matchingProviders),
38659
- _step3;
38747
+ var _iterator4 = _createForOfIteratorHelper$2(matchingProviders),
38748
+ _step4;
38660
38749
  try {
38661
38750
  var _loop2 = function _loop2() {
38662
- var _step3$value = _slicedToArray(_step3.value, 2),
38663
- provName = _step3$value[0],
38664
- prov = _step3$value[1];
38751
+ var _step4$value = _slicedToArray(_step4.value, 2),
38752
+ provName = _step4$value[0],
38753
+ prov = _step4$value[1];
38665
38754
  var blocked = p.requiredTools.filter(function (t) {
38666
38755
  return !prov.allowedTools.includes(t);
38667
38756
  });
@@ -38673,28 +38762,28 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
38673
38762
  });
38674
38763
  }
38675
38764
  };
38676
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
38765
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
38677
38766
  _loop2();
38678
38767
  }
38679
38768
  } catch (err) {
38680
- _iterator3.e(err);
38769
+ _iterator4.e(err);
38681
38770
  } finally {
38682
- _iterator3.f();
38771
+ _iterator4.f();
38683
38772
  }
38684
38773
  };
38685
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
38774
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
38686
38775
  if (_loop()) continue;
38687
38776
  }
38688
38777
  } catch (err) {
38689
- _iterator2.e(err);
38778
+ _iterator3.e(err);
38690
38779
  } finally {
38691
- _iterator2.f();
38780
+ _iterator3.f();
38692
38781
  }
38693
38782
  }
38694
38783
  } catch (err) {
38695
- _iterator.e(err);
38784
+ _iterator2.e(err);
38696
38785
  } finally {
38697
- _iterator.f();
38786
+ _iterator2.f();
38698
38787
  }
38699
38788
  return conflicts;
38700
38789
  };
@@ -38737,7 +38826,10 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
38737
38826
  widget: selectedWidget,
38738
38827
  onInstall: handleInstall,
38739
38828
  isInstalling: isInstalling,
38740
- installError: installError
38829
+ installError: installError,
38830
+ isInstalled: selectedWidget ? isPackageInstalled(packages.find(function (p) {
38831
+ return p.name === selectedPackageName;
38832
+ }) || {}) : false
38741
38833
  })]
38742
38834
  });
38743
38835
  }
@@ -38790,6 +38882,7 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
38790
38882
  return w.packageName === pkg.name;
38791
38883
  });
38792
38884
  var hasIncompatible = (pkgWidget === null || pkgWidget === void 0 ? void 0 : pkgWidget.missingApis) && pkgWidget.missingApis.length > 0;
38885
+ var isInstalled = isPackageInstalled(pkg);
38793
38886
  return /*#__PURE__*/jsx(Sidebar.Item, {
38794
38887
  icon: /*#__PURE__*/jsx(FontAwesomeIcon, {
38795
38888
  icon: hasIncompatible ? "triangle-exclamation" : "cube",
@@ -38799,7 +38892,14 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
38799
38892
  return setSelectedPackageName(pkg.name);
38800
38893
  },
38801
38894
  badge: "".concat(widgetCount),
38802
- children: pkg.displayName || pkg.name
38895
+ className: isInstalled ? "opacity-50" : "",
38896
+ children: /*#__PURE__*/jsxs("span", {
38897
+ className: "flex items-center gap-1.5",
38898
+ children: [pkg.displayName || pkg.name, isInstalled && /*#__PURE__*/jsx("span", {
38899
+ className: "text-[10px] text-emerald-400",
38900
+ children: "Installed"
38901
+ })]
38902
+ })
38803
38903
  }, pkg.name);
38804
38904
  })
38805
38905
  });