@trops/dash-core 0.1.371 → 0.1.373

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
@@ -4715,7 +4715,10 @@ var DiscoverDashboardsDetail = function DiscoverDashboardsDetail(_ref) {
4715
4715
  _useState2 = _slicedToArray(_useState, 2),
4716
4716
  packages = _useState2[0],
4717
4717
  setPackages = _useState2[1];
4718
- var _useState3 = useState(false),
4718
+ // Start in the loading state so the empty UI doesn't flash while the
4719
+ // initial debounce is pending — otherwise the sign-in nudge appears
4720
+ // briefly then disappears as soon as the registry returns results.
4721
+ var _useState3 = useState(true),
4719
4722
  _useState4 = _slicedToArray(_useState3, 2),
4720
4723
  isLoading = _useState4[0],
4721
4724
  setIsLoading = _useState4[1];
@@ -4731,47 +4734,87 @@ var DiscoverDashboardsDetail = function DiscoverDashboardsDetail(_ref) {
4731
4734
  _useState0 = _slicedToArray(_useState9, 2),
4732
4735
  selectedPackageName = _useState0[0],
4733
4736
  setSelectedPackageName = _useState0[1];
4734
- var search = useCallback(/*#__PURE__*/function () {
4735
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(query) {
4736
- var _window$mainApi;
4737
- var result, _t;
4737
+
4738
+ // Auth state when the empty state shows up to a non-signed-in user,
4739
+ // they may not realize private packages they own are filtered out.
4740
+ var _useState1 = useState(null),
4741
+ _useState10 = _slicedToArray(_useState1, 2),
4742
+ registryAuthed = _useState10[0],
4743
+ setRegistryAuthed = _useState10[1];
4744
+ var _useState11 = useState(false),
4745
+ _useState12 = _slicedToArray(_useState11, 2),
4746
+ showAuthFromEmpty = _useState12[0],
4747
+ setShowAuthFromEmpty = _useState12[1];
4748
+ useEffect(function () {
4749
+ var cancelled = false;
4750
+ _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
4751
+ var _window$mainApi, status;
4738
4752
  return _regeneratorRuntime.wrap(function (_context) {
4739
4753
  while (1) switch (_context.prev = _context.next) {
4740
4754
  case 0:
4741
- if ((_window$mainApi = window.mainApi) !== null && _window$mainApi !== void 0 && (_window$mainApi = _window$mainApi.registry) !== null && _window$mainApi !== void 0 && _window$mainApi.searchDashboards) {
4742
- _context.next = 1;
4755
+ _context.prev = 0;
4756
+ _context.next = 1;
4757
+ return (_window$mainApi = window.mainApi) === null || _window$mainApi === void 0 || (_window$mainApi = _window$mainApi.registryAuth) === null || _window$mainApi === void 0 ? void 0 : _window$mainApi.getStatus();
4758
+ case 1:
4759
+ status = _context.sent;
4760
+ if (!cancelled) setRegistryAuthed(!!(status !== null && status !== void 0 && status.authenticated));
4761
+ _context.next = 3;
4762
+ break;
4763
+ case 2:
4764
+ _context.prev = 2;
4765
+ _context["catch"](0);
4766
+ if (!cancelled) setRegistryAuthed(false);
4767
+ case 3:
4768
+ case "end":
4769
+ return _context.stop();
4770
+ }
4771
+ }, _callee, null, [[0, 2]]);
4772
+ }))();
4773
+ return function () {
4774
+ cancelled = true;
4775
+ };
4776
+ }, [showAuthFromEmpty]);
4777
+ var search = useCallback(/*#__PURE__*/function () {
4778
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(query) {
4779
+ var _window$mainApi2;
4780
+ var result, _t2;
4781
+ return _regeneratorRuntime.wrap(function (_context2) {
4782
+ while (1) switch (_context2.prev = _context2.next) {
4783
+ case 0:
4784
+ if ((_window$mainApi2 = window.mainApi) !== null && _window$mainApi2 !== void 0 && (_window$mainApi2 = _window$mainApi2.registry) !== null && _window$mainApi2 !== void 0 && _window$mainApi2.searchDashboards) {
4785
+ _context2.next = 1;
4743
4786
  break;
4744
4787
  }
4745
4788
  setPackages([]);
4746
- return _context.abrupt("return");
4789
+ return _context2.abrupt("return");
4747
4790
  case 1:
4748
4791
  setIsLoading(true);
4749
4792
  setError(null);
4750
- _context.prev = 2;
4751
- _context.next = 3;
4793
+ _context2.prev = 2;
4794
+ _context2.next = 3;
4752
4795
  return window.mainApi.registry.searchDashboards(query || "", {});
4753
4796
  case 3:
4754
- result = _context.sent;
4797
+ result = _context2.sent;
4755
4798
  setPackages((result === null || result === void 0 ? void 0 : result.packages) || []);
4756
- _context.next = 5;
4799
+ _context2.next = 5;
4757
4800
  break;
4758
4801
  case 4:
4759
- _context.prev = 4;
4760
- _t = _context["catch"](2);
4761
- setError(_t.message || "Failed to search dashboard registry");
4802
+ _context2.prev = 4;
4803
+ _t2 = _context2["catch"](2);
4804
+ setError(_t2.message || "Failed to search dashboard registry");
4762
4805
  setPackages([]);
4763
4806
  case 5:
4764
- _context.prev = 5;
4807
+ _context2.prev = 5;
4765
4808
  setIsLoading(false);
4766
- return _context.finish(5);
4809
+ return _context2.finish(5);
4767
4810
  case 6:
4768
4811
  case "end":
4769
- return _context.stop();
4812
+ return _context2.stop();
4770
4813
  }
4771
- }, _callee, null, [[2, 4, 5, 6]]);
4814
+ }, _callee2, null, [[2, 4, 5, 6]]);
4772
4815
  }));
4773
4816
  return function (_x) {
4774
- return _ref2.apply(this, arguments);
4817
+ return _ref3.apply(this, arguments);
4775
4818
  };
4776
4819
  }(), []);
4777
4820
 
@@ -4850,12 +4893,27 @@ var DiscoverDashboardsDetail = function DiscoverDashboardsDetail(_ref) {
4850
4893
  })]
4851
4894
  });
4852
4895
  } else if (packages.length === 0) {
4853
- listBody = /*#__PURE__*/jsx("div", {
4854
- className: "px-4 py-8 text-center",
4855
- children: /*#__PURE__*/jsx(Paragraph, {
4896
+ listBody = /*#__PURE__*/jsxs("div", {
4897
+ className: "px-4 py-8 text-center space-y-3",
4898
+ children: [/*#__PURE__*/jsx(Paragraph, {
4856
4899
  className: "text-sm opacity-50",
4857
4900
  children: searchQuery ? "No dashboards match your search." : "No dashboard packages available."
4858
- })
4901
+ }), registryAuthed === false && /*#__PURE__*/jsxs("div", {
4902
+ className: "inline-flex flex-col items-center gap-2 px-4 py-3 rounded-lg bg-amber-900/15 border border-amber-700/30",
4903
+ children: [/*#__PURE__*/jsx(Paragraph, {
4904
+ className: "text-xs text-amber-200",
4905
+ children: "Sign in to the registry to see your private dashboards."
4906
+ }), /*#__PURE__*/jsx(Button, {
4907
+ title: "Sign in to Registry",
4908
+ bgColor: "bg-indigo-600",
4909
+ hoverBackgroundColor: "hover:bg-indigo-500",
4910
+ textSize: "text-sm",
4911
+ padding: "py-1 px-3",
4912
+ onClick: function onClick() {
4913
+ return setShowAuthFromEmpty(true);
4914
+ }
4915
+ })]
4916
+ })]
4859
4917
  });
4860
4918
  } else {
4861
4919
  listBody = /*#__PURE__*/jsx("div", {
@@ -4905,6 +4963,18 @@ var DiscoverDashboardsDetail = function DiscoverDashboardsDetail(_ref) {
4905
4963
  }), !isLoading && !error && packages.length > 0 && /*#__PURE__*/jsxs("div", {
4906
4964
  className: "flex-shrink-0 px-4 py-2 text-[10px] opacity-40 border-t border-white/10",
4907
4965
  children: [packages.length, " dashboard", packages.length !== 1 ? "s" : ""]
4966
+ }), /*#__PURE__*/jsx(RegistryAuthModal, {
4967
+ isOpen: showAuthFromEmpty,
4968
+ setIsOpen: setShowAuthFromEmpty,
4969
+ onAuthenticated: function onAuthenticated() {
4970
+ setShowAuthFromEmpty(false);
4971
+ setRegistryAuthed(true);
4972
+ search(searchQuery);
4973
+ },
4974
+ onCancel: function onCancel() {
4975
+ return setShowAuthFromEmpty(false);
4976
+ },
4977
+ message: "Sign in to see your private dashboards and install ones you've published."
4908
4978
  })]
4909
4979
  });
4910
4980
  };
@@ -6159,7 +6229,10 @@ var useRegistrySearch = function useRegistrySearch() {
6159
6229
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
6160
6230
  _ref$filterByCapabili = _ref.filterByCapabilities,
6161
6231
  filterByCapabilities = _ref$filterByCapabili === void 0 ? true : _ref$filterByCapabili;
6162
- var _useState = useState(false),
6232
+ // Start in the loading state so consumers don't briefly render an
6233
+ // empty-list state during the initial debounce window before the first
6234
+ // search fires.
6235
+ var _useState = useState(true),
6163
6236
  _useState2 = _slicedToArray(_useState, 2),
6164
6237
  isLoading = _useState2[0],
6165
6238
  setIsLoading = _useState2[1];
@@ -38217,7 +38290,9 @@ var DiscoverThemesDetail = function DiscoverThemesDetail(_ref) {
38217
38290
  _useState2 = _slicedToArray(_useState, 2),
38218
38291
  packages = _useState2[0],
38219
38292
  setPackages = _useState2[1];
38220
- var _useState3 = useState(false),
38293
+ // Start loading so the empty state with sign-in nudge doesn't flash
38294
+ // before the first fetch resolves.
38295
+ var _useState3 = useState(true),
38221
38296
  _useState4 = _slicedToArray(_useState3, 2),
38222
38297
  isLoading = _useState4[0],
38223
38298
  setIsLoading = _useState4[1];
@@ -38233,47 +38308,86 @@ var DiscoverThemesDetail = function DiscoverThemesDetail(_ref) {
38233
38308
  _useState0 = _slicedToArray(_useState9, 2),
38234
38309
  selectedPackageName = _useState0[0],
38235
38310
  setSelectedPackageName = _useState0[1];
38236
- var search = useCallback(/*#__PURE__*/function () {
38237
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(query) {
38238
- var _window$mainApi;
38239
- var result, _t;
38311
+
38312
+ // Auth state for the empty-state hint.
38313
+ var _useState1 = useState(null),
38314
+ _useState10 = _slicedToArray(_useState1, 2),
38315
+ registryAuthed = _useState10[0],
38316
+ setRegistryAuthed = _useState10[1];
38317
+ var _useState11 = useState(false),
38318
+ _useState12 = _slicedToArray(_useState11, 2),
38319
+ showAuthFromEmpty = _useState12[0],
38320
+ setShowAuthFromEmpty = _useState12[1];
38321
+ useEffect(function () {
38322
+ var cancelled = false;
38323
+ _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
38324
+ var _window$mainApi, status;
38240
38325
  return _regeneratorRuntime.wrap(function (_context) {
38241
38326
  while (1) switch (_context.prev = _context.next) {
38242
38327
  case 0:
38243
- if ((_window$mainApi = window.mainApi) !== null && _window$mainApi !== void 0 && (_window$mainApi = _window$mainApi.registry) !== null && _window$mainApi !== void 0 && _window$mainApi.searchThemes) {
38244
- _context.next = 1;
38328
+ _context.prev = 0;
38329
+ _context.next = 1;
38330
+ return (_window$mainApi = window.mainApi) === null || _window$mainApi === void 0 || (_window$mainApi = _window$mainApi.registryAuth) === null || _window$mainApi === void 0 ? void 0 : _window$mainApi.getStatus();
38331
+ case 1:
38332
+ status = _context.sent;
38333
+ if (!cancelled) setRegistryAuthed(!!(status !== null && status !== void 0 && status.authenticated));
38334
+ _context.next = 3;
38335
+ break;
38336
+ case 2:
38337
+ _context.prev = 2;
38338
+ _context["catch"](0);
38339
+ if (!cancelled) setRegistryAuthed(false);
38340
+ case 3:
38341
+ case "end":
38342
+ return _context.stop();
38343
+ }
38344
+ }, _callee, null, [[0, 2]]);
38345
+ }))();
38346
+ return function () {
38347
+ cancelled = true;
38348
+ };
38349
+ }, [showAuthFromEmpty]);
38350
+ var search = useCallback(/*#__PURE__*/function () {
38351
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(query) {
38352
+ var _window$mainApi2;
38353
+ var result, _t2;
38354
+ return _regeneratorRuntime.wrap(function (_context2) {
38355
+ while (1) switch (_context2.prev = _context2.next) {
38356
+ case 0:
38357
+ if ((_window$mainApi2 = window.mainApi) !== null && _window$mainApi2 !== void 0 && (_window$mainApi2 = _window$mainApi2.registry) !== null && _window$mainApi2 !== void 0 && _window$mainApi2.searchThemes) {
38358
+ _context2.next = 1;
38245
38359
  break;
38246
38360
  }
38247
38361
  setPackages([]);
38248
- return _context.abrupt("return");
38362
+ return _context2.abrupt("return");
38249
38363
  case 1:
38250
38364
  setIsLoading(true);
38251
38365
  setError(null);
38252
- _context.prev = 2;
38253
- _context.next = 3;
38366
+ _context2.prev = 2;
38367
+ _context2.next = 3;
38254
38368
  return window.mainApi.registry.searchThemes(query || "", {});
38255
38369
  case 3:
38256
- result = _context.sent;
38370
+ result = _context2.sent;
38257
38371
  setPackages((result === null || result === void 0 ? void 0 : result.packages) || []);
38258
- _context.next = 5;
38372
+ _context2.next = 5;
38259
38373
  break;
38260
38374
  case 4:
38261
- _context.prev = 4;
38262
- _t = _context["catch"](2);
38263
- setError(_t.message || "Failed to search theme registry");
38375
+ _context2.prev = 4;
38376
+ _t2 = _context2["catch"](2);
38377
+ setError(_t2.message || "Failed to search theme registry");
38264
38378
  setPackages([]);
38265
38379
  case 5:
38266
- _context.prev = 5;
38380
+ _context2.prev = 5;
38267
38381
  setIsLoading(false);
38268
- return _context.finish(5);
38382
+ return _context2.finish(5);
38269
38383
  case 6:
38270
38384
  case "end":
38271
- return _context.stop();
38385
+ return _context2.stop();
38272
38386
  }
38273
- }, _callee, null, [[2, 4, 5, 6]]);
38387
+ }, _callee2, null, [[2, 4, 5, 6]]);
38274
38388
  }));
38275
38389
  return function (_x) {
38276
- return _ref2.apply(this, arguments);
38390
+ return _ref3.apply(this, arguments);
38277
38391
  };
38278
38392
  }(), []);
38279
38393
 
@@ -38352,12 +38466,27 @@ var DiscoverThemesDetail = function DiscoverThemesDetail(_ref) {
38352
38466
  })]
38353
38467
  });
38354
38468
  } else if (packages.length === 0) {
38355
- listBody = /*#__PURE__*/jsx("div", {
38356
- className: "px-4 py-8 text-center",
38357
- children: /*#__PURE__*/jsx(Paragraph, {
38469
+ listBody = /*#__PURE__*/jsxs("div", {
38470
+ className: "px-4 py-8 text-center space-y-3",
38471
+ children: [/*#__PURE__*/jsx(Paragraph, {
38358
38472
  className: "text-sm opacity-50",
38359
38473
  children: searchQuery ? "No themes match your search." : "No theme packages available."
38360
- })
38474
+ }), registryAuthed === false && /*#__PURE__*/jsxs("div", {
38475
+ className: "inline-flex flex-col items-center gap-2 px-4 py-3 rounded-lg bg-amber-900/15 border border-amber-700/30",
38476
+ children: [/*#__PURE__*/jsx(Paragraph, {
38477
+ className: "text-xs text-amber-200",
38478
+ children: "Sign in to the registry to see your private themes."
38479
+ }), /*#__PURE__*/jsx(Button, {
38480
+ title: "Sign in to Registry",
38481
+ bgColor: "bg-indigo-600",
38482
+ hoverBackgroundColor: "hover:bg-indigo-500",
38483
+ textSize: "text-sm",
38484
+ padding: "py-1 px-3",
38485
+ onClick: function onClick() {
38486
+ return setShowAuthFromEmpty(true);
38487
+ }
38488
+ })]
38489
+ })]
38361
38490
  });
38362
38491
  } else {
38363
38492
  listBody = /*#__PURE__*/jsx("div", {
@@ -38409,6 +38538,18 @@ var DiscoverThemesDetail = function DiscoverThemesDetail(_ref) {
38409
38538
  }), !isLoading && !error && packages.length > 0 && /*#__PURE__*/jsxs("div", {
38410
38539
  className: "flex-shrink-0 px-4 py-2 text-[10px] opacity-40 border-t border-white/10",
38411
38540
  children: [packages.length, " theme", packages.length !== 1 ? "s" : ""]
38541
+ }), /*#__PURE__*/jsx(RegistryAuthModal, {
38542
+ isOpen: showAuthFromEmpty,
38543
+ setIsOpen: setShowAuthFromEmpty,
38544
+ onAuthenticated: function onAuthenticated() {
38545
+ setShowAuthFromEmpty(false);
38546
+ setRegistryAuthed(true);
38547
+ search(searchQuery);
38548
+ },
38549
+ onCancel: function onCancel() {
38550
+ return setShowAuthFromEmpty(false);
38551
+ },
38552
+ message: "Sign in to see your private themes and install ones you've published."
38412
38553
  })]
38413
38554
  });
38414
38555
  };
@@ -46918,37 +47059,78 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
46918
47059
  toolConflictWarning = _useState4[0],
46919
47060
  setToolConflictWarning = _useState4[1];
46920
47061
 
46921
- // Install progress modal state
46922
- var _useState5 = useState(false),
47062
+ // Auth state used to nudge unauthenticated users toward signing in
47063
+ // when the empty state appears (so they realize private packages are
47064
+ // hidden behind auth).
47065
+ var _useState5 = useState(null),
46923
47066
  _useState6 = _slicedToArray(_useState5, 2),
46924
- showProgressModal = _useState6[0],
46925
- setShowProgressModal = _useState6[1];
46926
- var _useState7 = useState([]),
47067
+ registryAuthed = _useState6[0],
47068
+ setRegistryAuthed = _useState6[1];
47069
+ var _useState7 = useState(false),
46927
47070
  _useState8 = _slicedToArray(_useState7, 2),
46928
- progressWidgets = _useState8[0],
46929
- setProgressWidgets = _useState8[1];
47071
+ showAuthFromEmpty = _useState8[0],
47072
+ setShowAuthFromEmpty = _useState8[1];
47073
+ useEffect(function () {
47074
+ var cancelled = false;
47075
+ _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
47076
+ var _window$mainApi, status;
47077
+ return _regeneratorRuntime.wrap(function (_context) {
47078
+ while (1) switch (_context.prev = _context.next) {
47079
+ case 0:
47080
+ _context.prev = 0;
47081
+ _context.next = 1;
47082
+ return (_window$mainApi = window.mainApi) === null || _window$mainApi === void 0 || (_window$mainApi = _window$mainApi.registryAuth) === null || _window$mainApi === void 0 ? void 0 : _window$mainApi.getStatus();
47083
+ case 1:
47084
+ status = _context.sent;
47085
+ if (!cancelled) setRegistryAuthed(!!(status !== null && status !== void 0 && status.authenticated));
47086
+ _context.next = 3;
47087
+ break;
47088
+ case 2:
47089
+ _context.prev = 2;
47090
+ _context["catch"](0);
47091
+ if (!cancelled) setRegistryAuthed(false);
47092
+ case 3:
47093
+ case "end":
47094
+ return _context.stop();
47095
+ }
47096
+ }, _callee, null, [[0, 2]]);
47097
+ }))();
47098
+ return function () {
47099
+ cancelled = true;
47100
+ };
47101
+ }, [needsAuth, showAuthFromEmpty]);
47102
+
47103
+ // Install progress modal state
46930
47104
  var _useState9 = useState(false),
46931
47105
  _useState0 = _slicedToArray(_useState9, 2),
46932
- progressComplete = _useState0[0],
46933
- setProgressComplete = _useState0[1];
47106
+ showProgressModal = _useState0[0],
47107
+ setShowProgressModal = _useState0[1];
47108
+ var _useState1 = useState([]),
47109
+ _useState10 = _slicedToArray(_useState1, 2),
47110
+ progressWidgets = _useState10[0],
47111
+ setProgressWidgets = _useState10[1];
47112
+ var _useState11 = useState(false),
47113
+ _useState12 = _slicedToArray(_useState11, 2),
47114
+ progressComplete = _useState12[0],
47115
+ setProgressComplete = _useState12[1];
46934
47116
  var installActiveRef = useRef(false);
46935
47117
  var pendingInstallRef = useRef(null);
46936
47118
 
46937
47119
  // Track installed package names (same pattern as WidgetSidebar)
46938
- var _useState1 = useState(new Set()),
46939
- _useState10 = _slicedToArray(_useState1, 2),
46940
- installedPackageNames = _useState10[0],
46941
- setInstalledPackageNames = _useState10[1];
46942
- var loadInstalledPackages = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
47120
+ var _useState13 = useState(new Set()),
47121
+ _useState14 = _slicedToArray(_useState13, 2),
47122
+ installedPackageNames = _useState14[0],
47123
+ setInstalledPackageNames = _useState14[1];
47124
+ var loadInstalledPackages = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
46943
47125
  var widgets, names, _iterator, _step, w, folderName, _folderName;
46944
- return _regeneratorRuntime.wrap(function (_context) {
46945
- while (1) switch (_context.prev = _context.next) {
47126
+ return _regeneratorRuntime.wrap(function (_context2) {
47127
+ while (1) switch (_context2.prev = _context2.next) {
46946
47128
  case 0:
46947
- _context.prev = 0;
46948
- _context.next = 1;
47129
+ _context2.prev = 0;
47130
+ _context2.next = 1;
46949
47131
  return window.mainApi.widgets.list();
46950
47132
  case 1:
46951
- widgets = _context.sent;
47133
+ widgets = _context2.sent;
46952
47134
  names = new Set();
46953
47135
  _iterator = _createForOfIteratorHelper$7(widgets);
46954
47136
  try {
@@ -46973,16 +47155,16 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
46973
47155
  _iterator.f();
46974
47156
  }
46975
47157
  setInstalledPackageNames(names);
46976
- _context.next = 3;
47158
+ _context2.next = 3;
46977
47159
  break;
46978
47160
  case 2:
46979
- _context.prev = 2;
46980
- _context["catch"](0);
47161
+ _context2.prev = 2;
47162
+ _context2["catch"](0);
46981
47163
  case 3:
46982
47164
  case "end":
46983
- return _context.stop();
47165
+ return _context2.stop();
46984
47166
  }
46985
- }, _callee, null, [[0, 2]]);
47167
+ }, _callee2, null, [[0, 2]]);
46986
47168
  })), []);
46987
47169
  useEffect(function () {
46988
47170
  loadInstalledPackages();
@@ -47069,9 +47251,9 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
47069
47251
  var p = _step3.value;
47070
47252
  if (!((_p$requiredTools = p.requiredTools) !== null && _p$requiredTools !== void 0 && _p$requiredTools.length) || p.providerClass !== "mcp") return 1; // continue
47071
47253
  // Find matching user provider
47072
- var matchingProviders = Object.entries(providers).filter(function (_ref3) {
47073
- var _ref4 = _slicedToArray(_ref3, 2),
47074
- prov = _ref4[1];
47254
+ var matchingProviders = Object.entries(providers).filter(function (_ref4) {
47255
+ var _ref5 = _slicedToArray(_ref4, 2),
47256
+ prov = _ref5[1];
47075
47257
  return prov.type === p.type && prov.providerClass === "mcp" && prov.allowedTools;
47076
47258
  });
47077
47259
  var _iterator4 = _createForOfIteratorHelper$7(matchingProviders),
@@ -47212,6 +47394,20 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
47212
47394
  },
47213
47395
  onCancel: clearNeedsAuth,
47214
47396
  message: "Sign in to install this widget from the Dash Registry."
47397
+ }), /*#__PURE__*/jsx(RegistryAuthModal, {
47398
+ isOpen: showAuthFromEmpty,
47399
+ setIsOpen: setShowAuthFromEmpty,
47400
+ onAuthenticated: function onAuthenticated() {
47401
+ setShowAuthFromEmpty(false);
47402
+ setRegistryAuthed(true);
47403
+ // Trigger a refresh of the list now that the user can see
47404
+ // their private packages.
47405
+ retry();
47406
+ },
47407
+ onCancel: function onCancel() {
47408
+ return setShowAuthFromEmpty(false);
47409
+ },
47410
+ message: "Sign in to see your private packages and install widgets you've published."
47215
47411
  })]
47216
47412
  });
47217
47413
  }
@@ -47247,12 +47443,27 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
47247
47443
  })]
47248
47444
  });
47249
47445
  } else if (packages.length === 0) {
47250
- listBody = /*#__PURE__*/jsx("div", {
47251
- className: "px-4 py-8 text-center",
47252
- children: /*#__PURE__*/jsx(Paragraph, {
47446
+ listBody = /*#__PURE__*/jsxs("div", {
47447
+ className: "px-4 py-8 text-center space-y-3",
47448
+ children: [/*#__PURE__*/jsx(Paragraph, {
47253
47449
  className: "text-sm opacity-50",
47254
47450
  children: searchQuery ? "No packages match your search." : "No packages available."
47255
- })
47451
+ }), registryAuthed === false && /*#__PURE__*/jsxs("div", {
47452
+ className: "inline-flex flex-col items-center gap-2 px-4 py-3 rounded-lg bg-amber-900/15 border border-amber-700/30",
47453
+ children: [/*#__PURE__*/jsx(Paragraph, {
47454
+ className: "text-xs text-amber-200",
47455
+ children: "Sign in to the registry to see your private packages."
47456
+ }), /*#__PURE__*/jsx(Button, {
47457
+ title: "Sign in to Registry",
47458
+ bgColor: "bg-indigo-600",
47459
+ hoverBackgroundColor: "hover:bg-indigo-500",
47460
+ textSize: "text-sm",
47461
+ padding: "py-1 px-3",
47462
+ onClick: function onClick() {
47463
+ return setShowAuthFromEmpty(true);
47464
+ }
47465
+ })]
47466
+ })]
47256
47467
  });
47257
47468
  } else {
47258
47469
  listBody = /*#__PURE__*/jsx("div", {