@trops/dash-core 0.1.247 → 0.1.250

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
@@ -23114,6 +23114,395 @@ var ExternalWidget = function ExternalWidget(_ref) {
23114
23114
  });
23115
23115
  };
23116
23116
 
23117
+ var RegistryPackageDetail = function RegistryPackageDetail(_ref) {
23118
+ var widget = _ref.widget,
23119
+ onInstall = _ref.onInstall,
23120
+ _ref$isInstalling = _ref.isInstalling,
23121
+ isInstalling = _ref$isInstalling === void 0 ? false : _ref$isInstalling,
23122
+ _ref$installError = _ref.installError,
23123
+ installError = _ref$installError === void 0 ? null : _ref$installError,
23124
+ _ref$isInstalled = _ref.isInstalled,
23125
+ isInstalled = _ref$isInstalled === void 0 ? false : _ref$isInstalled;
23126
+ var _useContext = useContext(ThemeContext),
23127
+ currentTheme = _useContext.currentTheme;
23128
+ var panelStyles = getStylesForItem(themeObjects.PANEL, currentTheme, {
23129
+ grow: false
23130
+ });
23131
+ if (!widget) return null;
23132
+ return /*#__PURE__*/jsxs("div", {
23133
+ className: "flex flex-col flex-1 min-h-0",
23134
+ children: [/*#__PURE__*/jsxs("div", {
23135
+ className: "flex-1 min-h-0 overflow-y-auto p-6 space-y-6 ".concat(panelStyles.textColor || "text-gray-200"),
23136
+ children: [/*#__PURE__*/jsxs("div", {
23137
+ className: "flex flex-row items-center gap-3",
23138
+ children: [/*#__PURE__*/jsx("div", {
23139
+ className: "h-5 w-5 flex-shrink-0 flex items-center justify-center",
23140
+ children: /*#__PURE__*/jsx(FontAwesomeIcon, {
23141
+ icon: widget.icon || "cube",
23142
+ className: "h-5 w-5"
23143
+ })
23144
+ }), /*#__PURE__*/jsxs("div", {
23145
+ children: [/*#__PURE__*/jsxs("div", {
23146
+ className: "flex items-center gap-2",
23147
+ children: [/*#__PURE__*/jsx(SubHeading3, {
23148
+ title: widget.packageDisplayName,
23149
+ padding: false
23150
+ }), isInstalled && /*#__PURE__*/jsx("span", {
23151
+ className: "text-[10px] px-1.5 py-0.5 rounded bg-emerald-500/20 text-emerald-400 flex-shrink-0",
23152
+ children: "Installed"
23153
+ })]
23154
+ }), /*#__PURE__*/jsxs("div", {
23155
+ className: "flex items-center gap-2 mt-0.5",
23156
+ children: [/*#__PURE__*/jsxs("span", {
23157
+ className: "text-sm opacity-60",
23158
+ children: ["by ", widget.packageAuthor || "Unknown"]
23159
+ }), /*#__PURE__*/jsxs("span", {
23160
+ className: "text-xs px-2 py-0.5 rounded ".concat(currentTheme["bg-primary-medium"], " opacity-70"),
23161
+ children: ["v", widget.packageVersion]
23162
+ })]
23163
+ })]
23164
+ })]
23165
+ }), /*#__PURE__*/jsx("hr", {
23166
+ className: currentTheme["border-primary-medium"]
23167
+ }), widget.packageDescription && /*#__PURE__*/jsx("p", {
23168
+ className: "text-sm",
23169
+ children: widget.packageDescription
23170
+ }), widget.packageTags && widget.packageTags.length > 0 && /*#__PURE__*/jsx("div", {
23171
+ className: "flex flex-wrap gap-1",
23172
+ children: widget.packageTags.map(function (tag) {
23173
+ return /*#__PURE__*/jsx("span", {
23174
+ className: "text-xs px-2 py-0.5 rounded ".concat(currentTheme["bg-primary-medium"], " opacity-60"),
23175
+ children: tag
23176
+ }, tag);
23177
+ })
23178
+ }), /*#__PURE__*/jsxs("div", {
23179
+ children: [/*#__PURE__*/jsx("span", {
23180
+ className: "text-xs font-semibold opacity-50 mb-1 block",
23181
+ children: "INCLUDED WIDGETS"
23182
+ }), /*#__PURE__*/jsx("div", {
23183
+ className: "space-y-1.5",
23184
+ children: (widget.packageWidgets || []).map(function (w, idx) {
23185
+ return /*#__PURE__*/jsxs("div", {
23186
+ className: "p-2 rounded ".concat(currentTheme["bg-primary-medium"]),
23187
+ children: [/*#__PURE__*/jsx("div", {
23188
+ className: "text-sm font-medium",
23189
+ children: w.displayName || w.name
23190
+ }), w.description && /*#__PURE__*/jsx("div", {
23191
+ className: "text-xs opacity-50 mt-0.5",
23192
+ children: w.description
23193
+ }), getUserConfigurableProviders(w.providers).length > 0 && /*#__PURE__*/jsxs("div", {
23194
+ className: "space-y-1 mt-1",
23195
+ children: [/*#__PURE__*/jsx("div", {
23196
+ className: "flex gap-1 flex-wrap",
23197
+ children: getUserConfigurableProviders(w.providers).map(function (p, pidx) {
23198
+ return /*#__PURE__*/jsxs("span", {
23199
+ className: "text-xs px-1.5 py-0.5 rounded bg-blue-900/30 text-blue-400",
23200
+ children: [p.type, p.required ? " *" : ""]
23201
+ }, pidx);
23202
+ })
23203
+ }), getUserConfigurableProviders(w.providers).some(function (p) {
23204
+ var _p$requiredTools;
23205
+ return ((_p$requiredTools = p.requiredTools) === null || _p$requiredTools === void 0 ? void 0 : _p$requiredTools.length) > 0;
23206
+ }) && /*#__PURE__*/jsx("div", {
23207
+ className: "flex flex-wrap gap-1 ml-1",
23208
+ children: getUserConfigurableProviders(w.providers).filter(function (p) {
23209
+ var _p$requiredTools2;
23210
+ return ((_p$requiredTools2 = p.requiredTools) === null || _p$requiredTools2 === void 0 ? void 0 : _p$requiredTools2.length) > 0;
23211
+ }).flatMap(function (p) {
23212
+ return p.requiredTools.map(function (tool) {
23213
+ return /*#__PURE__*/jsx("span", {
23214
+ className: "text-[10px] font-mono px-1.5 py-0.5 rounded bg-white/5 opacity-60",
23215
+ children: tool
23216
+ }, "".concat(p.type, "-").concat(tool));
23217
+ });
23218
+ })
23219
+ })]
23220
+ })]
23221
+ }, idx);
23222
+ })
23223
+ })]
23224
+ }), widget.appOrigin && /*#__PURE__*/jsxs("div", {
23225
+ className: "flex items-center gap-1.5 text-xs opacity-50",
23226
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
23227
+ icon: "laptop",
23228
+ className: "h-3 w-3"
23229
+ }), /*#__PURE__*/jsxs("span", {
23230
+ children: ["Built for ", widget.appOrigin]
23231
+ })]
23232
+ }), widget.missingApis && widget.missingApis.length > 0 && /*#__PURE__*/jsx("div", {
23233
+ className: "p-2 rounded bg-yellow-900/30 border border-yellow-700",
23234
+ children: /*#__PURE__*/jsxs("p", {
23235
+ className: "text-xs text-yellow-400",
23236
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
23237
+ icon: "triangle-exclamation",
23238
+ className: "mr-1"
23239
+ }), "Incompatible \u2014 requires ", widget.missingApis.join(", "), " API", widget.missingApis.length !== 1 ? "s" : ""]
23240
+ })
23241
+ }), widget.repository && /*#__PURE__*/jsxs("div", {
23242
+ children: [/*#__PURE__*/jsx("span", {
23243
+ className: "text-xs font-semibold opacity-50 mb-1 block",
23244
+ children: "REPOSITORY"
23245
+ }), /*#__PURE__*/jsx("button", {
23246
+ type: "button",
23247
+ onClick: function onClick() {
23248
+ var _window$mainApi;
23249
+ return (_window$mainApi = window.mainApi) === null || _window$mainApi === void 0 || (_window$mainApi = _window$mainApi.shell) === null || _window$mainApi === void 0 ? void 0 : _window$mainApi.openExternal(widget.repository);
23250
+ },
23251
+ className: "text-sm text-blue-400 hover:text-blue-300 hover:underline transition-colors break-all text-left",
23252
+ children: widget.repository
23253
+ })]
23254
+ }), installError && /*#__PURE__*/jsx("div", {
23255
+ className: "p-2 rounded bg-red-900/30 border border-red-700",
23256
+ children: /*#__PURE__*/jsx("p", {
23257
+ className: "text-xs text-red-400",
23258
+ children: installError
23259
+ })
23260
+ })]
23261
+ }), /*#__PURE__*/jsx("div", {
23262
+ className: "flex items-center justify-end px-6 py-3 border-t ".concat(currentTheme["border-primary-medium"]),
23263
+ children: /*#__PURE__*/jsx(Button, {
23264
+ title: isInstalled ? "Installed" : isInstalling ? "Installing..." : "Install Package",
23265
+ bgColor: isInstalled ? "bg-emerald-600/50" : "bg-blue-600",
23266
+ hoverBackgroundColor: isInstalled || isInstalling ? "" : "hover:bg-blue-700",
23267
+ textSize: "text-sm",
23268
+ padding: "py-1.5 px-4",
23269
+ onClick: onInstall,
23270
+ disabled: isInstalling || isInstalled
23271
+ })
23272
+ })]
23273
+ });
23274
+ };
23275
+
23276
+ function getWidgetSearchQuery(componentKey) {
23277
+ var parts = componentKey.split(".");
23278
+ if (parts.length >= 3) {
23279
+ return {
23280
+ packageName: parts[1],
23281
+ widgetName: parts[2],
23282
+ scope: parts[0]
23283
+ };
23284
+ }
23285
+ return {
23286
+ packageName: null,
23287
+ widgetName: componentKey,
23288
+ scope: null
23289
+ };
23290
+ }
23291
+
23292
+ /**
23293
+ * Convert a raw registry package object into the flat widget shape
23294
+ * expected by RegistryPackageDetail.
23295
+ */
23296
+ function packageToFlatWidget(pkg) {
23297
+ return {
23298
+ key: "".concat(pkg.name, "/0"),
23299
+ name: pkg.displayName || pkg.name,
23300
+ icon: pkg.icon || null,
23301
+ isRegistry: true,
23302
+ packageName: pkg.name,
23303
+ packageScope: pkg.scope || null,
23304
+ packageDisplayName: pkg.displayName || pkg.name,
23305
+ packageVersion: pkg.version,
23306
+ packageAuthor: pkg.author || "",
23307
+ packageDescription: pkg.description || "",
23308
+ packageTags: pkg.tags || [],
23309
+ packageCategory: pkg.category || "",
23310
+ downloadUrl: pkg.downloadUrl || "",
23311
+ repository: pkg.repository || "",
23312
+ publishedAt: pkg.publishedAt || "",
23313
+ packageWidgets: pkg.widgets || [],
23314
+ appOrigin: pkg.appOrigin || null,
23315
+ packageProviders: pkg.providers || [],
23316
+ missingApis: []
23317
+ };
23318
+ }
23319
+
23320
+ /**
23321
+ * WidgetNotFound — rendered in place of an unresolvable widget.
23322
+ *
23323
+ * Shows the existing "Widget Not Found" error display and adds a
23324
+ * "Find in Registry" button that does an exact registry lookup and
23325
+ * opens an install modal.
23326
+ */
23327
+ var WidgetNotFound = function WidgetNotFound(_ref) {
23328
+ var component = _ref.component;
23329
+ var _useState = useState(false),
23330
+ _useState2 = _slicedToArray(_useState, 2),
23331
+ showModal = _useState2[0],
23332
+ setShowModal = _useState2[1];
23333
+ var _useState3 = useState(null),
23334
+ _useState4 = _slicedToArray(_useState3, 2),
23335
+ registryWidget = _useState4[0],
23336
+ setRegistryWidget = _useState4[1];
23337
+ var _useState5 = useState(false),
23338
+ _useState6 = _slicedToArray(_useState5, 2),
23339
+ isLoading = _useState6[0],
23340
+ setIsLoading = _useState6[1];
23341
+ var _useState7 = useState(false),
23342
+ _useState8 = _slicedToArray(_useState7, 2),
23343
+ notFound = _useState8[0],
23344
+ setNotFound = _useState8[1];
23345
+ var _useState9 = useState(false),
23346
+ _useState0 = _slicedToArray(_useState9, 2),
23347
+ isInstalling = _useState0[0],
23348
+ setIsInstalling = _useState0[1];
23349
+ var _useState1 = useState(null),
23350
+ _useState10 = _slicedToArray(_useState1, 2),
23351
+ installError = _useState10[0],
23352
+ setInstallError = _useState10[1];
23353
+ var lookupWidget = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
23354
+ var _getWidgetSearchQuery, packageName, widgetName, pkg, result;
23355
+ return _regeneratorRuntime.wrap(function (_context) {
23356
+ while (1) switch (_context.prev = _context.next) {
23357
+ case 0:
23358
+ setShowModal(true);
23359
+ setIsLoading(true);
23360
+ setNotFound(false);
23361
+ setRegistryWidget(null);
23362
+ setInstallError(null);
23363
+ _getWidgetSearchQuery = getWidgetSearchQuery(component), packageName = _getWidgetSearchQuery.packageName, widgetName = _getWidgetSearchQuery.widgetName;
23364
+ _context.prev = 1;
23365
+ pkg = null; // Scoped ID — exact package lookup
23366
+ if (!packageName) {
23367
+ _context.next = 3;
23368
+ break;
23369
+ }
23370
+ _context.next = 2;
23371
+ return window.mainApi.registry.getPackage(packageName);
23372
+ case 2:
23373
+ pkg = _context.sent;
23374
+ case 3:
23375
+ if (pkg) {
23376
+ _context.next = 5;
23377
+ break;
23378
+ }
23379
+ _context.next = 4;
23380
+ return window.mainApi.registry.search(widgetName);
23381
+ case 4:
23382
+ result = _context.sent;
23383
+ pkg = (result.packages || []).find(function (p) {
23384
+ return (p.widgets || []).some(function (w) {
23385
+ return w.name === widgetName;
23386
+ });
23387
+ });
23388
+ case 5:
23389
+ if (pkg) {
23390
+ setRegistryWidget(packageToFlatWidget(pkg));
23391
+ } else {
23392
+ setNotFound(true);
23393
+ }
23394
+ _context.next = 7;
23395
+ break;
23396
+ case 6:
23397
+ _context.prev = 6;
23398
+ _context["catch"](1);
23399
+ setNotFound(true);
23400
+ case 7:
23401
+ setIsLoading(false);
23402
+ case 8:
23403
+ case "end":
23404
+ return _context.stop();
23405
+ }
23406
+ }, _callee, null, [[1, 6]]);
23407
+ })), [component]);
23408
+ var handleInstall = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
23409
+ var packageName, packageScope, downloadUrl, packageVersion, scopedId, resolvedUrl, _t2;
23410
+ return _regeneratorRuntime.wrap(function (_context2) {
23411
+ while (1) switch (_context2.prev = _context2.next) {
23412
+ case 0:
23413
+ if (registryWidget) {
23414
+ _context2.next = 1;
23415
+ break;
23416
+ }
23417
+ return _context2.abrupt("return");
23418
+ case 1:
23419
+ setIsInstalling(true);
23420
+ setInstallError(null);
23421
+ _context2.prev = 2;
23422
+ packageName = registryWidget.packageName, packageScope = registryWidget.packageScope, downloadUrl = registryWidget.downloadUrl, packageVersion = registryWidget.packageVersion;
23423
+ scopedId = packageScope ? "@".concat(packageScope.replace(/^@/, ""), "/").concat(packageName) : packageName;
23424
+ resolvedUrl = downloadUrl.replace(/\{version\}/g, packageVersion).replace(/\{name\}/g, packageName);
23425
+ _context2.next = 3;
23426
+ return window.mainApi.widgets.install(scopedId, resolvedUrl);
23427
+ case 3:
23428
+ setShowModal(false);
23429
+ _context2.next = 5;
23430
+ break;
23431
+ case 4:
23432
+ _context2.prev = 4;
23433
+ _t2 = _context2["catch"](2);
23434
+ setInstallError(_t2.message || "Failed to install package");
23435
+ case 5:
23436
+ setIsInstalling(false);
23437
+ case 6:
23438
+ case "end":
23439
+ return _context2.stop();
23440
+ }
23441
+ }, _callee2, null, [[2, 4]]);
23442
+ })), [registryWidget]);
23443
+ return /*#__PURE__*/jsxs(Fragment, {
23444
+ children: [/*#__PURE__*/jsxs("div", {
23445
+ className: "flex flex-col h-full justify-center items-center w-full z-10 gap-2 p-4 text-center",
23446
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
23447
+ icon: "triangle-exclamation",
23448
+ className: "h-6 w-6 text-amber-500"
23449
+ }), /*#__PURE__*/jsx("div", {
23450
+ className: "text-sm font-semibold text-gray-300",
23451
+ children: "Widget Not Found"
23452
+ }), /*#__PURE__*/jsx("div", {
23453
+ className: "text-xs text-gray-500 font-mono",
23454
+ children: component
23455
+ }), /*#__PURE__*/jsx("div", {
23456
+ className: "text-xs text-gray-600 mt-1",
23457
+ children: "This widget may have been uninstalled or renamed."
23458
+ }), /*#__PURE__*/jsxs("button", {
23459
+ type: "button",
23460
+ className: "flex items-center gap-1.5 text-xs text-blue-400 hover:text-blue-300 transition-colors mt-2",
23461
+ onClick: lookupWidget,
23462
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
23463
+ icon: "magnifying-glass",
23464
+ className: "h-3 w-3"
23465
+ }), "Find in Registry"]
23466
+ })]
23467
+ }), /*#__PURE__*/jsxs(Modal, {
23468
+ isOpen: showModal,
23469
+ setIsOpen: setShowModal,
23470
+ width: "w-1/3",
23471
+ height: "auto",
23472
+ children: [isLoading && /*#__PURE__*/jsx("div", {
23473
+ className: "flex items-center justify-center p-12",
23474
+ children: /*#__PURE__*/jsx(FontAwesomeIcon, {
23475
+ icon: "spinner",
23476
+ className: "h-5 w-5 text-gray-400 animate-spin"
23477
+ })
23478
+ }), !isLoading && registryWidget && /*#__PURE__*/jsx(RegistryPackageDetail, {
23479
+ widget: registryWidget,
23480
+ onInstall: handleInstall,
23481
+ isInstalling: isInstalling,
23482
+ installError: installError
23483
+ }), !isLoading && notFound && /*#__PURE__*/jsxs("div", {
23484
+ className: "flex flex-col items-center justify-center gap-3 p-12 text-center",
23485
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
23486
+ icon: "triangle-exclamation",
23487
+ className: "h-6 w-6 text-amber-500"
23488
+ }), /*#__PURE__*/jsx("div", {
23489
+ className: "text-sm text-gray-400",
23490
+ children: "This widget is not available in the registry."
23491
+ }), /*#__PURE__*/jsx(Button, {
23492
+ title: "Close",
23493
+ bgColor: "bg-gray-600",
23494
+ hoverBackgroundColor: "hover:bg-gray-700",
23495
+ textSize: "text-sm",
23496
+ padding: "py-1.5 px-4",
23497
+ onClick: function onClick() {
23498
+ return setShowModal(false);
23499
+ }
23500
+ })]
23501
+ })]
23502
+ })]
23503
+ });
23504
+ };
23505
+
23117
23506
  var GRID_CELL_WIDGET_TYPE = "grid-cell-widget";
23118
23507
  var SIDEBAR_WIDGET_TYPE = "sidebar-widget";
23119
23508
 
@@ -25138,21 +25527,8 @@ function renderComponent(component, id) {
25138
25527
  // WidgetFactory.render() always returns a React element (truthy),
25139
25528
  // so the old ternary fallback could never fire.
25140
25529
  if (!isWidgetResolvable(component)) {
25141
- return /*#__PURE__*/jsxs("div", {
25142
- className: "flex flex-col h-full justify-center items-center w-full z-10 gap-2 p-4 text-center",
25143
- children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
25144
- icon: "triangle-exclamation",
25145
- className: "h-6 w-6 text-amber-500"
25146
- }), /*#__PURE__*/jsx("div", {
25147
- className: "text-sm font-semibold text-gray-300",
25148
- children: "Widget Not Found"
25149
- }), /*#__PURE__*/jsx("div", {
25150
- className: "text-xs text-gray-500 font-mono",
25151
- children: component
25152
- }), /*#__PURE__*/jsx("div", {
25153
- className: "text-xs text-gray-600 mt-1",
25154
- children: "This widget may have been uninstalled or renamed."
25155
- })]
25530
+ return /*#__PURE__*/jsx(WidgetNotFound, {
25531
+ component: component
25156
25532
  });
25157
25533
  }
25158
25534
  if ("height" in params) {
@@ -43910,165 +44286,6 @@ var InstallWidgetPicker = function InstallWidgetPicker(_ref2) {
43910
44286
  });
43911
44287
  };
43912
44288
 
43913
- var RegistryPackageDetail = function RegistryPackageDetail(_ref) {
43914
- var widget = _ref.widget,
43915
- onInstall = _ref.onInstall,
43916
- _ref$isInstalling = _ref.isInstalling,
43917
- isInstalling = _ref$isInstalling === void 0 ? false : _ref$isInstalling,
43918
- _ref$installError = _ref.installError,
43919
- installError = _ref$installError === void 0 ? null : _ref$installError,
43920
- _ref$isInstalled = _ref.isInstalled,
43921
- isInstalled = _ref$isInstalled === void 0 ? false : _ref$isInstalled;
43922
- var _useContext = useContext(ThemeContext),
43923
- currentTheme = _useContext.currentTheme;
43924
- var panelStyles = getStylesForItem(themeObjects.PANEL, currentTheme, {
43925
- grow: false
43926
- });
43927
- if (!widget) return null;
43928
- return /*#__PURE__*/jsxs("div", {
43929
- className: "flex flex-col flex-1 min-h-0",
43930
- children: [/*#__PURE__*/jsxs("div", {
43931
- className: "flex-1 min-h-0 overflow-y-auto p-6 space-y-6 ".concat(panelStyles.textColor || "text-gray-200"),
43932
- children: [/*#__PURE__*/jsxs("div", {
43933
- className: "flex flex-row items-center gap-3",
43934
- children: [/*#__PURE__*/jsx("div", {
43935
- className: "h-5 w-5 flex-shrink-0 flex items-center justify-center",
43936
- children: /*#__PURE__*/jsx(FontAwesomeIcon, {
43937
- icon: widget.icon || "cube",
43938
- className: "h-5 w-5"
43939
- })
43940
- }), /*#__PURE__*/jsxs("div", {
43941
- children: [/*#__PURE__*/jsxs("div", {
43942
- className: "flex items-center gap-2",
43943
- children: [/*#__PURE__*/jsx(SubHeading3, {
43944
- title: widget.packageDisplayName,
43945
- padding: false
43946
- }), isInstalled && /*#__PURE__*/jsx("span", {
43947
- className: "text-[10px] px-1.5 py-0.5 rounded bg-emerald-500/20 text-emerald-400 flex-shrink-0",
43948
- children: "Installed"
43949
- })]
43950
- }), /*#__PURE__*/jsxs("div", {
43951
- className: "flex items-center gap-2 mt-0.5",
43952
- children: [/*#__PURE__*/jsxs("span", {
43953
- className: "text-sm opacity-60",
43954
- children: ["by ", widget.packageAuthor || "Unknown"]
43955
- }), /*#__PURE__*/jsxs("span", {
43956
- className: "text-xs px-2 py-0.5 rounded ".concat(currentTheme["bg-primary-medium"], " opacity-70"),
43957
- children: ["v", widget.packageVersion]
43958
- })]
43959
- })]
43960
- })]
43961
- }), /*#__PURE__*/jsx("hr", {
43962
- className: currentTheme["border-primary-medium"]
43963
- }), widget.packageDescription && /*#__PURE__*/jsx("p", {
43964
- className: "text-sm",
43965
- children: widget.packageDescription
43966
- }), widget.packageTags && widget.packageTags.length > 0 && /*#__PURE__*/jsx("div", {
43967
- className: "flex flex-wrap gap-1",
43968
- children: widget.packageTags.map(function (tag) {
43969
- return /*#__PURE__*/jsx("span", {
43970
- className: "text-xs px-2 py-0.5 rounded ".concat(currentTheme["bg-primary-medium"], " opacity-60"),
43971
- children: tag
43972
- }, tag);
43973
- })
43974
- }), /*#__PURE__*/jsxs("div", {
43975
- children: [/*#__PURE__*/jsx("span", {
43976
- className: "text-xs font-semibold opacity-50 mb-1 block",
43977
- children: "INCLUDED WIDGETS"
43978
- }), /*#__PURE__*/jsx("div", {
43979
- className: "space-y-1.5",
43980
- children: (widget.packageWidgets || []).map(function (w, idx) {
43981
- return /*#__PURE__*/jsxs("div", {
43982
- className: "p-2 rounded ".concat(currentTheme["bg-primary-medium"]),
43983
- children: [/*#__PURE__*/jsx("div", {
43984
- className: "text-sm font-medium",
43985
- children: w.displayName || w.name
43986
- }), w.description && /*#__PURE__*/jsx("div", {
43987
- className: "text-xs opacity-50 mt-0.5",
43988
- children: w.description
43989
- }), getUserConfigurableProviders(w.providers).length > 0 && /*#__PURE__*/jsxs("div", {
43990
- className: "space-y-1 mt-1",
43991
- children: [/*#__PURE__*/jsx("div", {
43992
- className: "flex gap-1 flex-wrap",
43993
- children: getUserConfigurableProviders(w.providers).map(function (p, pidx) {
43994
- return /*#__PURE__*/jsxs("span", {
43995
- className: "text-xs px-1.5 py-0.5 rounded bg-blue-900/30 text-blue-400",
43996
- children: [p.type, p.required ? " *" : ""]
43997
- }, pidx);
43998
- })
43999
- }), getUserConfigurableProviders(w.providers).some(function (p) {
44000
- var _p$requiredTools;
44001
- return ((_p$requiredTools = p.requiredTools) === null || _p$requiredTools === void 0 ? void 0 : _p$requiredTools.length) > 0;
44002
- }) && /*#__PURE__*/jsx("div", {
44003
- className: "flex flex-wrap gap-1 ml-1",
44004
- children: getUserConfigurableProviders(w.providers).filter(function (p) {
44005
- var _p$requiredTools2;
44006
- return ((_p$requiredTools2 = p.requiredTools) === null || _p$requiredTools2 === void 0 ? void 0 : _p$requiredTools2.length) > 0;
44007
- }).flatMap(function (p) {
44008
- return p.requiredTools.map(function (tool) {
44009
- return /*#__PURE__*/jsx("span", {
44010
- className: "text-[10px] font-mono px-1.5 py-0.5 rounded bg-white/5 opacity-60",
44011
- children: tool
44012
- }, "".concat(p.type, "-").concat(tool));
44013
- });
44014
- })
44015
- })]
44016
- })]
44017
- }, idx);
44018
- })
44019
- })]
44020
- }), widget.appOrigin && /*#__PURE__*/jsxs("div", {
44021
- className: "flex items-center gap-1.5 text-xs opacity-50",
44022
- children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
44023
- icon: "laptop",
44024
- className: "h-3 w-3"
44025
- }), /*#__PURE__*/jsxs("span", {
44026
- children: ["Built for ", widget.appOrigin]
44027
- })]
44028
- }), widget.missingApis && widget.missingApis.length > 0 && /*#__PURE__*/jsx("div", {
44029
- className: "p-2 rounded bg-yellow-900/30 border border-yellow-700",
44030
- children: /*#__PURE__*/jsxs("p", {
44031
- className: "text-xs text-yellow-400",
44032
- children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
44033
- icon: "triangle-exclamation",
44034
- className: "mr-1"
44035
- }), "Incompatible \u2014 requires ", widget.missingApis.join(", "), " API", widget.missingApis.length !== 1 ? "s" : ""]
44036
- })
44037
- }), widget.repository && /*#__PURE__*/jsxs("div", {
44038
- children: [/*#__PURE__*/jsx("span", {
44039
- className: "text-xs font-semibold opacity-50 mb-1 block",
44040
- children: "REPOSITORY"
44041
- }), /*#__PURE__*/jsx("button", {
44042
- type: "button",
44043
- onClick: function onClick() {
44044
- var _window$mainApi;
44045
- return (_window$mainApi = window.mainApi) === null || _window$mainApi === void 0 || (_window$mainApi = _window$mainApi.shell) === null || _window$mainApi === void 0 ? void 0 : _window$mainApi.openExternal(widget.repository);
44046
- },
44047
- className: "text-sm text-blue-400 hover:text-blue-300 hover:underline transition-colors break-all text-left",
44048
- children: widget.repository
44049
- })]
44050
- }), installError && /*#__PURE__*/jsx("div", {
44051
- className: "p-2 rounded bg-red-900/30 border border-red-700",
44052
- children: /*#__PURE__*/jsx("p", {
44053
- className: "text-xs text-red-400",
44054
- children: installError
44055
- })
44056
- })]
44057
- }), /*#__PURE__*/jsx("div", {
44058
- className: "flex items-center justify-end px-6 py-3 border-t ".concat(currentTheme["border-primary-medium"]),
44059
- children: /*#__PURE__*/jsx(Button, {
44060
- title: isInstalled ? "Installed" : isInstalling ? "Installing..." : "Install Package",
44061
- bgColor: isInstalled ? "bg-emerald-600/50" : "bg-blue-600",
44062
- hoverBackgroundColor: isInstalled || isInstalling ? "" : "hover:bg-blue-700",
44063
- textSize: "text-sm",
44064
- padding: "py-1.5 px-4",
44065
- onClick: onInstall,
44066
- disabled: isInstalling || isInstalled
44067
- })
44068
- })]
44069
- });
44070
- };
44071
-
44072
44289
  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; } } }; }
44073
44290
  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; } }
44074
44291
  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; }
@@ -50782,5 +50999,5 @@ var WorkspaceMenu = function WorkspaceMenu(_ref) {
50782
50999
 
50783
51000
  ComponentManager.registerContainerTypes(LayoutContainer, LayoutGridContainer);
50784
51001
 
50785
- export { ALGOLIA_ANALYTICS_FOR_QUERY, ALGOLIA_ANALYTICS_FOR_QUERY_COMPLETE, ALGOLIA_ANALYTICS_FOR_QUERY_ERROR, ALGOLIA_LIST_INDICES, ALGOLIA_LIST_INDICES_COMPLETE, ALGOLIA_LIST_INDICES_ERROR, AVAILABLE_COLORS, AddMenuItemModal, AdvancedMcpConfig, AppContext, AppSettingsModal, AppThemeScope, AppWrapper, CHOOSE_FILE, CHOOSE_FILE_COMPLETE, CHOOSE_FILE_ERROR, ColorModel, ComponentConfigModel, ComponentManager, ContextModel, DATA_JSON_TO_CSV_FILE, DATA_JSON_TO_CSV_FILE_COMPLETE, DATA_JSON_TO_CSV_FILE_ERROR, DATA_JSON_TO_CSV_STRING, DATA_JSON_TO_CSV_STRING_COMPLETE, DATA_JSON_TO_CSV_STRING_ERROR, DATA_READ_FROM_FILE, DATA_READ_FROM_FILE_COMPLETE, DATA_READ_FROM_FILE_ERROR, DATA_SAVE_TO_FILE, DATA_SAVE_TO_FILE_COMPLETE, DATA_SAVE_TO_FILE_ERROR, DashCommandPalette, DashNavbar, DashSidebar, DashTabBar, DashboardStage as Dashboard, DashboardApi, DashboardContext, DashboardFooter, DashboardHeader, DashboardMenuItem, DashboardModel, DashboardMonitor, DashboardPublisher, DashboardStage, DashboardThemeProvider, DashboardWizardModal, DashboardWrapper, ElectronDashboardApi, ErrorBoundary, ExternalWidget, GRID_CELL_WIDGET_TYPE, HARMONY_STRATEGIES, LAYOUT_LIST, LAYOUT_LIST_COMPLETE, LAYOUT_LIST_ERROR, LAYOUT_SAVE, LAYOUT_SAVE_COMPLETE, LAYOUT_SAVE_ERROR, Layout, LayoutBuilder, LayoutBuilderAddItemModal, LayoutBuilderConfigContainerMenuItem, LayoutBuilderConfigMenuItem, LayoutBuilderConfigModal, LayoutBuilderEditItemModal, LayoutBuilderEventModal, LayoutBuilderGridItem, LayoutContainer, LayoutDragBuilder, LayoutDragBuilderEdit, LayoutGridContainer, LayoutManagerModal, LayoutModel, LayoutQuickAddMenu, MCP_CALL_TOOL_COMPLETE, MCP_CALL_TOOL_ERROR, MCP_GET_CATALOG_COMPLETE, MCP_GET_CATALOG_ERROR, MCP_LIST_RESOURCES_COMPLETE, MCP_LIST_RESOURCES_ERROR, MCP_LIST_TOOLS_COMPLETE, MCP_LIST_TOOLS_ERROR, MCP_READ_RESOURCE_COMPLETE, MCP_READ_RESOURCE_ERROR, MCP_RUN_AUTH_COMPLETE, MCP_RUN_AUTH_ERROR, MCP_SERVER_STATUS_COMPLETE, MCP_SERVER_STATUS_ERROR, MCP_START_SERVER_COMPLETE, MCP_START_SERVER_ERROR, MCP_STOP_SERVER_COMPLETE, MCP_STOP_SERVER_ERROR, MENU_ITEMS_DELETE, MENU_ITEMS_DELETE_COMPLETE, MENU_ITEMS_DELETE_ERROR, MENU_ITEMS_LIST, MENU_ITEMS_LIST_COMPLETE, MENU_ITEMS_LIST_ERROR, MENU_ITEMS_SAVE, MENU_ITEMS_SAVE_COMPLETE, MENU_ITEMS_SAVE_ERROR, MainMenu, MainMenuItem, MainMenuSection, McpServerPicker, MenuItemModel, MenuSlideOverlay, MergeCellsModal, MissingProviderPrompt, MockDashboardApi, PROVIDER_DELETE_COMPLETE, PROVIDER_DELETE_ERROR, PROVIDER_GET_COMPLETE, PROVIDER_GET_ERROR, PROVIDER_LIST_COMPLETE, PROVIDER_LIST_ERROR, PROVIDER_SAVE_COMPLETE, PROVIDER_SAVE_ERROR, PanelCode, PanelEditItem, PanelEditItemHandlers, PanelEditItemNotifications, ProviderContext, ProviderErrorBoundary, ProviderForm, ProviderSelector, SECURE_STORAGE_ENCRYPT_STRING, SECURE_STORAGE_ENCRYPT_STRING_COMPLETE, SECURE_STORAGE_ENCRYPT_STRING_ERROR, SECURE_STORE_ENCRYPTION_CHECK, SECURE_STORE_ENCRYPTION_CHECK_COMPLETE, SECURE_STORE_ENCRYPTION_CHECK_ERROR, SECURE_STORE_GET_DATA, SECURE_STORE_GET_DATA_COMPLETE, SECURE_STORE_GET_DATA_ERROR, SECURE_STORE_SET_DATA, SECURE_STORE_SET_DATA_COMPLETE, SECURE_STORE_SET_DATA_ERROR, SETTINGS_GET, SETTINGS_GET_COMPLETE, SETTINGS_GET_ERROR, SETTINGS_SAVE, SETTINGS_SAVE_COMPLETE, SETTINGS_SAVE_ERROR, SIDEBAR_WIDGET_TYPE, SettingsModel, SideMenu, SplitCellModal, THEME_DELETE, THEME_DELETE_COMPLETE, THEME_DELETE_ERROR, THEME_EXTRACT_FROM_URL, THEME_EXTRACT_FROM_URL_COMPLETE, THEME_EXTRACT_FROM_URL_ERROR, THEME_LIST, THEME_LIST_COMPLETE, THEME_LIST_ERROR, THEME_MAP_PALETTE, THEME_MAP_PALETTE_COMPLETE, THEME_MAP_PALETTE_ERROR, THEME_SAVE, THEME_SAVE_COMPLETE, THEME_SAVE_ERROR, ThemeApi, ThemeColorDots, ThemeManagerModal, ThemeModel, ThemeWrapper, WELCOME_STORAGE_KEY, WORKSPACE_DELETE, WORKSPACE_DELETE_COMPLETE, WORKSPACE_DELETE_ERROR, WORKSPACE_LIST, WORKSPACE_LIST_COMPLETE, WORKSPACE_LIST_ERROR, WORKSPACE_SAVE, WORKSPACE_SAVE_COMPLETE, WORKSPACE_SAVE_ERROR, WebDashboardApi, WelcomePrompt, Widget, WidgetApi, WidgetConfigPanel, WidgetContext, WidgetFactory, WidgetPopoutStage, WidgetProviderWrapper, WidgetSidebar, WizardCustomizeStep, WizardDiscoverStep, Workspace, WorkspaceContext, WorkspaceFooter, WorkspaceMenu, WorkspaceModel, addChildToLayoutItem, addItemToItemLayout, buildMcpConfigFromOverrides, canHaveChildren, changeDirectionForLayoutItem, createProviderRegistry, deriveFormFields, envMappingToRows, evaluateBundle, extractWidgetConfigs, formStateToMcpJson, formatFieldName, generateCustomTheme, generateHarmonyTheme, generateRandomTheme, generateThemeName, getBorderStyle, getChildrenForLayoutItem, getComponentInLayout, getContainerBorderColor, getContainerColor, getIndexOfLayoutChildrenForItem, getIndexOfLayoutItem, getLayoutItemById, getLayoutItemForWorkspace, getNearestParentWorkspace, getNextHighestId, getNextHighestItemInLayout, getNextHighestOrder, getNextHighestParentId, getNextLowestItemInLayout, getParentForLayoutItem, getParentWorkspaceForItem, getThemePresets, getUserConfigurableProviders, getWidgetsForWorkspace, getWorkspacesForWorkspace, headerTemplateToRows, isContainer, isLikelySecret, isMaxOrderForItem, isMinOrderForItem, isWidget, isWidgetResolvable, isWorkspace, layoutItemHasWorkspaceAsChild, loadWidgetBundle, mcpJsonToFormState, numChildrenForLayout, removeItemFromLayout, renderComponent, renderGridLayout, renderGridLayoutFlow, _renderLayout as renderLayout, renderLayoutMenu, replaceItemInLayout, resolveIcon, setHostModules, traverseParentTree, updateLayoutItem, updateParentForItem, useDashboard, useMcpDashServer, useMcpProvider, useNotifications, useProvider, useProviderClient, useScheduler, useWebSocketProvider, useWidgetEvents, useWidgetProviders, useWidgetSchedulerStatus, useWizardState, validateCellMerge, validateGridCell, validateGridPlacement, validateWidgetPlacement, widgetCountToTemplate, withProviderDetection };
51002
+ export { ALGOLIA_ANALYTICS_FOR_QUERY, ALGOLIA_ANALYTICS_FOR_QUERY_COMPLETE, ALGOLIA_ANALYTICS_FOR_QUERY_ERROR, ALGOLIA_LIST_INDICES, ALGOLIA_LIST_INDICES_COMPLETE, ALGOLIA_LIST_INDICES_ERROR, AVAILABLE_COLORS, AddMenuItemModal, AdvancedMcpConfig, AppContext, AppSettingsModal, AppThemeScope, AppWrapper, CHOOSE_FILE, CHOOSE_FILE_COMPLETE, CHOOSE_FILE_ERROR, ColorModel, ComponentConfigModel, ComponentManager, ContextModel, DATA_JSON_TO_CSV_FILE, DATA_JSON_TO_CSV_FILE_COMPLETE, DATA_JSON_TO_CSV_FILE_ERROR, DATA_JSON_TO_CSV_STRING, DATA_JSON_TO_CSV_STRING_COMPLETE, DATA_JSON_TO_CSV_STRING_ERROR, DATA_READ_FROM_FILE, DATA_READ_FROM_FILE_COMPLETE, DATA_READ_FROM_FILE_ERROR, DATA_SAVE_TO_FILE, DATA_SAVE_TO_FILE_COMPLETE, DATA_SAVE_TO_FILE_ERROR, DashCommandPalette, DashNavbar, DashSidebar, DashTabBar, DashboardStage as Dashboard, DashboardApi, DashboardContext, DashboardFooter, DashboardHeader, DashboardMenuItem, DashboardModel, DashboardMonitor, DashboardPublisher, DashboardStage, DashboardThemeProvider, DashboardWizardModal, DashboardWrapper, ElectronDashboardApi, ErrorBoundary, ExternalWidget, GRID_CELL_WIDGET_TYPE, HARMONY_STRATEGIES, LAYOUT_LIST, LAYOUT_LIST_COMPLETE, LAYOUT_LIST_ERROR, LAYOUT_SAVE, LAYOUT_SAVE_COMPLETE, LAYOUT_SAVE_ERROR, Layout, LayoutBuilder, LayoutBuilderAddItemModal, LayoutBuilderConfigContainerMenuItem, LayoutBuilderConfigMenuItem, LayoutBuilderConfigModal, LayoutBuilderEditItemModal, LayoutBuilderEventModal, LayoutBuilderGridItem, LayoutContainer, LayoutDragBuilder, LayoutDragBuilderEdit, LayoutGridContainer, LayoutManagerModal, LayoutModel, LayoutQuickAddMenu, MCP_CALL_TOOL_COMPLETE, MCP_CALL_TOOL_ERROR, MCP_GET_CATALOG_COMPLETE, MCP_GET_CATALOG_ERROR, MCP_LIST_RESOURCES_COMPLETE, MCP_LIST_RESOURCES_ERROR, MCP_LIST_TOOLS_COMPLETE, MCP_LIST_TOOLS_ERROR, MCP_READ_RESOURCE_COMPLETE, MCP_READ_RESOURCE_ERROR, MCP_RUN_AUTH_COMPLETE, MCP_RUN_AUTH_ERROR, MCP_SERVER_STATUS_COMPLETE, MCP_SERVER_STATUS_ERROR, MCP_START_SERVER_COMPLETE, MCP_START_SERVER_ERROR, MCP_STOP_SERVER_COMPLETE, MCP_STOP_SERVER_ERROR, MENU_ITEMS_DELETE, MENU_ITEMS_DELETE_COMPLETE, MENU_ITEMS_DELETE_ERROR, MENU_ITEMS_LIST, MENU_ITEMS_LIST_COMPLETE, MENU_ITEMS_LIST_ERROR, MENU_ITEMS_SAVE, MENU_ITEMS_SAVE_COMPLETE, MENU_ITEMS_SAVE_ERROR, MainMenu, MainMenuItem, MainMenuSection, McpServerPicker, MenuItemModel, MenuSlideOverlay, MergeCellsModal, MissingProviderPrompt, MockDashboardApi, PROVIDER_DELETE_COMPLETE, PROVIDER_DELETE_ERROR, PROVIDER_GET_COMPLETE, PROVIDER_GET_ERROR, PROVIDER_LIST_COMPLETE, PROVIDER_LIST_ERROR, PROVIDER_SAVE_COMPLETE, PROVIDER_SAVE_ERROR, PanelCode, PanelEditItem, PanelEditItemHandlers, PanelEditItemNotifications, ProviderContext, ProviderErrorBoundary, ProviderForm, ProviderSelector, SECURE_STORAGE_ENCRYPT_STRING, SECURE_STORAGE_ENCRYPT_STRING_COMPLETE, SECURE_STORAGE_ENCRYPT_STRING_ERROR, SECURE_STORE_ENCRYPTION_CHECK, SECURE_STORE_ENCRYPTION_CHECK_COMPLETE, SECURE_STORE_ENCRYPTION_CHECK_ERROR, SECURE_STORE_GET_DATA, SECURE_STORE_GET_DATA_COMPLETE, SECURE_STORE_GET_DATA_ERROR, SECURE_STORE_SET_DATA, SECURE_STORE_SET_DATA_COMPLETE, SECURE_STORE_SET_DATA_ERROR, SETTINGS_GET, SETTINGS_GET_COMPLETE, SETTINGS_GET_ERROR, SETTINGS_SAVE, SETTINGS_SAVE_COMPLETE, SETTINGS_SAVE_ERROR, SIDEBAR_WIDGET_TYPE, SettingsModel, SideMenu, SplitCellModal, THEME_DELETE, THEME_DELETE_COMPLETE, THEME_DELETE_ERROR, THEME_EXTRACT_FROM_URL, THEME_EXTRACT_FROM_URL_COMPLETE, THEME_EXTRACT_FROM_URL_ERROR, THEME_LIST, THEME_LIST_COMPLETE, THEME_LIST_ERROR, THEME_MAP_PALETTE, THEME_MAP_PALETTE_COMPLETE, THEME_MAP_PALETTE_ERROR, THEME_SAVE, THEME_SAVE_COMPLETE, THEME_SAVE_ERROR, ThemeApi, ThemeColorDots, ThemeManagerModal, ThemeModel, ThemeWrapper, WELCOME_STORAGE_KEY, WORKSPACE_DELETE, WORKSPACE_DELETE_COMPLETE, WORKSPACE_DELETE_ERROR, WORKSPACE_LIST, WORKSPACE_LIST_COMPLETE, WORKSPACE_LIST_ERROR, WORKSPACE_SAVE, WORKSPACE_SAVE_COMPLETE, WORKSPACE_SAVE_ERROR, WebDashboardApi, WelcomePrompt, Widget, WidgetApi, WidgetConfigPanel, WidgetContext, WidgetFactory, WidgetNotFound, WidgetPopoutStage, WidgetProviderWrapper, WidgetSidebar, WizardCustomizeStep, WizardDiscoverStep, Workspace, WorkspaceContext, WorkspaceFooter, WorkspaceMenu, WorkspaceModel, addChildToLayoutItem, addItemToItemLayout, buildMcpConfigFromOverrides, canHaveChildren, changeDirectionForLayoutItem, createProviderRegistry, deriveFormFields, envMappingToRows, evaluateBundle, extractWidgetConfigs, formStateToMcpJson, formatFieldName, generateCustomTheme, generateHarmonyTheme, generateRandomTheme, generateThemeName, getBorderStyle, getChildrenForLayoutItem, getComponentInLayout, getContainerBorderColor, getContainerColor, getIndexOfLayoutChildrenForItem, getIndexOfLayoutItem, getLayoutItemById, getLayoutItemForWorkspace, getNearestParentWorkspace, getNextHighestId, getNextHighestItemInLayout, getNextHighestOrder, getNextHighestParentId, getNextLowestItemInLayout, getParentForLayoutItem, getParentWorkspaceForItem, getThemePresets, getUserConfigurableProviders, getWidgetsForWorkspace, getWorkspacesForWorkspace, headerTemplateToRows, isContainer, isLikelySecret, isMaxOrderForItem, isMinOrderForItem, isWidget, isWidgetResolvable, isWorkspace, layoutItemHasWorkspaceAsChild, loadWidgetBundle, mcpJsonToFormState, numChildrenForLayout, removeItemFromLayout, renderComponent, renderGridLayout, renderGridLayoutFlow, _renderLayout as renderLayout, renderLayoutMenu, replaceItemInLayout, resolveIcon, setHostModules, traverseParentTree, updateLayoutItem, updateParentForItem, useDashboard, useMcpDashServer, useMcpProvider, useNotifications, useProvider, useProviderClient, useScheduler, useWebSocketProvider, useWidgetEvents, useWidgetProviders, useWidgetSchedulerStatus, useWizardState, validateCellMerge, validateGridCell, validateGridPlacement, validateWidgetPlacement, widgetCountToTemplate, withProviderDetection };
50786
51003
  //# sourceMappingURL=index.esm.js.map