@trops/dash-core 0.1.187 → 0.1.189

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
@@ -1,6 +1,6 @@
1
1
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import * as DashReact from '@trops/dash-react';
3
- import { isObject, ThemeContext, deepCopy, MainSection, getUUID, getStylesForItem, themeObjects, Heading, SearchInput, ButtonIcon, SubHeading3, InputText, Button, FontAwesomeIcon, Tag, Sidebar, Paragraph, Modal, Panel, Stepper, Heading3, MenuItem3, FormLabel, SelectMenu, Switch, SelectInput, CodeEditorInline, SettingsModal, SubHeading2, tailwindHeightFractions, Menu3, Panel3, DropdownPanel, MenuItem2, ButtonIcon2, DragComponent, ConfirmationModal, DropComponent, getStyleName, capitalizeFirstLetter, colorTypes, getCSSStyleForClassname, Panel2, Heading2, SubHeading, Paragraph2, Paragraph3, Button2, Button3, MenuItem, Tag2, Tag3, ButtonIcon3, DashPanel, colorNames, shades, themeVariants, Tabs3, DataList, Checkbox, StatCard, Card, Tabs, Accordion, Alert, Toast, ProgressBar, Toggle, Breadcrumbs, Card2, Tabs2, Accordion2, Alert2, Toast2, ProgressBar2, Toggle2, Breadcrumbs2, Card3, Accordion3, Alert3, Toast3, ProgressBar3, Toggle3, Breadcrumbs3, ThemeFromUrlPane, TextArea, Icon2, AlgoliaSearchBox, CommandPalette, EmptyState, Navbar, withRouter, Menu as Menu$1 } from '@trops/dash-react';
3
+ import { isObject, ThemeContext, deepCopy, MainSection, getUUID, getStylesForItem, themeObjects, Heading, SearchInput, ButtonIcon, SubHeading3, InputText, Button, FontAwesomeIcon, Tag, Sidebar, Paragraph, Modal, Panel, Stepper, SelectableCard, Tabs3, Heading3, MenuItem3, FormLabel, SelectMenu, Switch, SelectInput, CodeEditorInline, SettingsModal, SubHeading2, tailwindHeightFractions, Menu3, Panel3, DropdownPanel, MenuItem2, ButtonIcon2, DragComponent, ConfirmationModal, DropComponent, getStyleName, capitalizeFirstLetter, colorTypes, getCSSStyleForClassname, Panel2, Heading2, SubHeading, Paragraph2, Paragraph3, Button2, Button3, MenuItem, Tag2, Tag3, ButtonIcon3, DashPanel, colorNames, shades, themeVariants, DataList, Checkbox, StatCard, Card, Tabs, Accordion, Alert, Toast, ProgressBar, Toggle, Breadcrumbs, Card2, Tabs2, Accordion2, Alert2, Toast2, ProgressBar2, Toggle2, Breadcrumbs2, Card3, Accordion3, Alert3, Toast3, ProgressBar3, Toggle3, Breadcrumbs3, ThemeFromUrlPane, TextArea, Icon2, AlgoliaSearchBox, CommandPalette, EmptyState, Navbar, withRouter, Menu as Menu$1 } from '@trops/dash-react';
4
4
  export * from '@trops/dash-react';
5
5
  export { ThemeContext } from '@trops/dash-react';
6
6
  import _typeof from '@babel/runtime/helpers/typeof';
@@ -17,6 +17,7 @@ import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
17
17
  import _regeneratorRuntime from '@babel/runtime/regenerator';
18
18
  import { Menu, Transition, Popover, Dialog, Disclosure } from '@headlessui/react';
19
19
  import { EllipsisVerticalIcon } from '@heroicons/react/20/solid';
20
+ import { findIconDefinition } from '@fortawesome/fontawesome-svg-core';
20
21
  import clsx from 'clsx';
21
22
  import { DndProvider, useDrag, useDrop } from 'react-dnd';
22
23
  import { HTML5Backend } from 'react-dnd-html5-backend';
@@ -26,7 +27,6 @@ import _inherits from '@babel/runtime/helpers/inherits';
26
27
  import colors from 'tailwindcss/colors';
27
28
  import * as ReactDOM from 'react-dom';
28
29
  import { createPortal } from 'react-dom';
29
- import { findIconDefinition } from '@fortawesome/fontawesome-svg-core';
30
30
  import algoliasearch from 'algoliasearch';
31
31
  import { InstantSearch, Hits } from 'react-instantsearch-hooks-web';
32
32
  import { Link } from 'react-router-dom';
@@ -5204,6 +5204,837 @@ var LayoutQuickAddMenu = function LayoutQuickAddMenu(_ref) {
5204
5204
  });
5205
5205
  };
5206
5206
 
5207
+ var CATEGORIES = [{
5208
+ key: "reporting",
5209
+ label: "Reporting",
5210
+ icon: "chart-bar",
5211
+ description: "Dashboards for data visualization and reports"
5212
+ }, {
5213
+ key: "monitoring",
5214
+ label: "Monitoring",
5215
+ icon: "heart-pulse",
5216
+ description: "System health, uptime, and performance monitoring"
5217
+ }, {
5218
+ key: "productivity",
5219
+ label: "Productivity",
5220
+ icon: "list-check",
5221
+ description: "Task tracking, calendars, and workflow management"
5222
+ }, {
5223
+ key: "development",
5224
+ label: "Development",
5225
+ icon: "code",
5226
+ description: "Code repos, CI/CD, and developer tools"
5227
+ }, {
5228
+ key: "communication",
5229
+ label: "Communication",
5230
+ icon: "comments",
5231
+ description: "Messages, channels, and team communication"
5232
+ }, {
5233
+ key: "custom",
5234
+ label: "Custom",
5235
+ icon: "grid-2",
5236
+ description: "Build a fully custom dashboard"
5237
+ }];
5238
+
5239
+ /**
5240
+ * WizardIntentStep
5241
+ *
5242
+ * Step 0 of the Dashboard Wizard. Presents category cards so the user
5243
+ * can indicate what kind of dashboard they want to build.
5244
+ * Multi-select — user can pick multiple categories.
5245
+ *
5246
+ * @param {Object} props
5247
+ * @param {Object} props.state - Wizard state from useWizardState
5248
+ * @param {Function} props.dispatch - Wizard dispatch from useWizardState
5249
+ */
5250
+ var WizardIntentStep = function WizardIntentStep(_ref) {
5251
+ var state = _ref.state,
5252
+ dispatch = _ref.dispatch;
5253
+ var handleToggle = function handleToggle(key) {
5254
+ dispatch({
5255
+ type: "TOGGLE_INTENT",
5256
+ payload: key
5257
+ });
5258
+ };
5259
+ return /*#__PURE__*/jsxs("div", {
5260
+ className: "wizard-intent-step",
5261
+ children: [/*#__PURE__*/jsx("h3", {
5262
+ className: "wizard-step-header",
5263
+ children: "What is this dashboard for?"
5264
+ }), /*#__PURE__*/jsx("div", {
5265
+ className: "wizard-card-grid",
5266
+ children: CATEGORIES.map(function (cat) {
5267
+ return /*#__PURE__*/jsx(SelectableCard, {
5268
+ icon: /*#__PURE__*/jsx(FontAwesomeIcon, {
5269
+ icon: cat.icon,
5270
+ fixedWidth: true
5271
+ }),
5272
+ label: cat.label,
5273
+ description: cat.description,
5274
+ selected: state.intent.includes(cat.key),
5275
+ onSelect: function onSelect() {
5276
+ return handleToggle(cat.key);
5277
+ }
5278
+ }, cat.key);
5279
+ })
5280
+ })]
5281
+ });
5282
+ };
5283
+
5284
+ var FALLBACK = "puzzle-piece";
5285
+
5286
+ /**
5287
+ * Resolve an icon name to a valid FontAwesome icon reference.
5288
+ * Tries solid (fas) first, then brand (fab). Returns "puzzle-piece" if
5289
+ * the icon is falsy or not found in either prefix.
5290
+ */
5291
+ var resolveIcon = function resolveIcon(iconName) {
5292
+ if (!iconName) return FALLBACK;
5293
+
5294
+ // Already an array tuple like ["fab", "github"] — pass through
5295
+ if (Array.isArray(iconName)) return iconName;
5296
+
5297
+ // Try solid
5298
+ if (findIconDefinition({
5299
+ prefix: "fas",
5300
+ iconName: iconName
5301
+ })) return iconName;
5302
+
5303
+ // Try brand
5304
+ if (findIconDefinition({
5305
+ prefix: "fab",
5306
+ iconName: iconName
5307
+ })) return ["fab", iconName];
5308
+ return FALLBACK;
5309
+ };
5310
+
5311
+ var WizardProvidersStep = function WizardProvidersStep(_ref) {
5312
+ var state = _ref.state,
5313
+ dispatch = _ref.dispatch;
5314
+ var _useContext = useContext(AppContext),
5315
+ providersMap = _useContext.providers;
5316
+ var providerList = useMemo(function () {
5317
+ if (!providersMap || _typeof(providersMap) !== "object") return [];
5318
+ return Object.values(providersMap).map(function (p) {
5319
+ return {
5320
+ key: p.type || p.name,
5321
+ name: p.name,
5322
+ type: p.type,
5323
+ icon: p.icon || p.type,
5324
+ configured: !!(p.credentials && Object.keys(p.credentials).length > 0)
5325
+ };
5326
+ });
5327
+ }, [providersMap]);
5328
+
5329
+ // Pre-check configured providers on first render
5330
+ React__default.useEffect(function () {
5331
+ if (state.providers.length === 0 && providerList.length > 0) {
5332
+ var configuredKeys = providerList.filter(function (p) {
5333
+ return p.configured;
5334
+ }).map(function (p) {
5335
+ return p.key;
5336
+ });
5337
+ if (configuredKeys.length > 0) {
5338
+ dispatch({
5339
+ type: "SET_PROVIDERS",
5340
+ payload: configuredKeys
5341
+ });
5342
+ }
5343
+ }
5344
+ }, [providerList, state.providers.length, dispatch]);
5345
+ var handleToggle = function handleToggle(key) {
5346
+ dispatch({
5347
+ type: "TOGGLE_PROVIDER",
5348
+ payload: key
5349
+ });
5350
+ };
5351
+ if (providerList.length === 0) {
5352
+ return /*#__PURE__*/jsxs("div", {
5353
+ className: "wizard-providers-step",
5354
+ children: [/*#__PURE__*/jsx("h3", {
5355
+ className: "wizard-step-header",
5356
+ children: "Which tools and services do you use?"
5357
+ }), /*#__PURE__*/jsx("p", {
5358
+ className: "wizard-empty-message",
5359
+ children: "No providers configured yet. Add providers in Settings first."
5360
+ })]
5361
+ });
5362
+ }
5363
+ return /*#__PURE__*/jsxs("div", {
5364
+ className: "wizard-providers-step",
5365
+ children: [/*#__PURE__*/jsx("h3", {
5366
+ className: "wizard-step-header",
5367
+ children: "Which tools and services do you use?"
5368
+ }), /*#__PURE__*/jsx("div", {
5369
+ className: "wizard-card-grid",
5370
+ children: providerList.map(function (provider) {
5371
+ var isSelected = state.providers.includes(provider.key);
5372
+ var needsSetup = isSelected && !provider.configured;
5373
+ return /*#__PURE__*/jsx(SelectableCard, {
5374
+ icon: /*#__PURE__*/jsx(FontAwesomeIcon, {
5375
+ icon: resolveIcon(provider.icon),
5376
+ fixedWidth: true
5377
+ }),
5378
+ label: provider.name,
5379
+ description: needsSetup ? /*#__PURE__*/jsx("span", {
5380
+ className: "wizard-needs-setup-badge",
5381
+ children: "Needs setup"
5382
+ }) : null,
5383
+ selected: isSelected,
5384
+ onSelect: function onSelect() {
5385
+ return handleToggle(provider.key);
5386
+ }
5387
+ }, provider.key);
5388
+ })
5389
+ })]
5390
+ });
5391
+ };
5392
+
5393
+ function _createForOfIteratorHelper$e(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$e(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; } } }; }
5394
+ function _unsupportedIterableToArray$e(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$e(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$e(r, a) : void 0; } }
5395
+ function _arrayLikeToArray$e(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; }
5396
+
5397
+ /**
5398
+ * useRegistrySearch — shared hook for browsing and installing registry packages.
5399
+ *
5400
+ * Extracted from EnhancedWidgetDropdown so the same logic can power the
5401
+ * Discover tab inside AppSettingsModal (and anywhere else).
5402
+ *
5403
+ * Options:
5404
+ * filterByCapabilities – if true (default), only show packages compatible
5405
+ * with the app's API capabilities
5406
+ *
5407
+ * Returns:
5408
+ * packages – raw package objects from the registry
5409
+ * flatWidgets – flattened widget entries with `isRegistry: true`
5410
+ * isLoading – true while a search request is in flight
5411
+ * error – error message string (or null)
5412
+ * searchQuery / setSearchQuery – controlled search input
5413
+ * isInstalling – true during an install
5414
+ * installError – install error string (or null)
5415
+ * search() – manually trigger a search
5416
+ * installPackage(widget) – install a specific registry widget
5417
+ * showAllPackages / setShowAllPackages – toggle to show incompatible packages
5418
+ * appCapabilities – the app's API namespaces
5419
+ */
5420
+ var useRegistrySearch = function useRegistrySearch() {
5421
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
5422
+ _ref$filterByCapabili = _ref.filterByCapabilities,
5423
+ filterByCapabilities = _ref$filterByCapabili === void 0 ? true : _ref$filterByCapabili;
5424
+ var _useState = useState(false),
5425
+ _useState2 = _slicedToArray(_useState, 2),
5426
+ isLoading = _useState2[0],
5427
+ setIsLoading = _useState2[1];
5428
+ var _useState3 = useState(null),
5429
+ _useState4 = _slicedToArray(_useState3, 2),
5430
+ error = _useState4[0],
5431
+ setError = _useState4[1];
5432
+ var _useState5 = useState([]),
5433
+ _useState6 = _slicedToArray(_useState5, 2),
5434
+ packages = _useState6[0],
5435
+ setPackages = _useState6[1];
5436
+ var _useState7 = useState([]),
5437
+ _useState8 = _slicedToArray(_useState7, 2),
5438
+ flatWidgets = _useState8[0],
5439
+ setFlatWidgets = _useState8[1];
5440
+ var _useState9 = useState(""),
5441
+ _useState0 = _slicedToArray(_useState9, 2),
5442
+ searchQuery = _useState0[0],
5443
+ setSearchQuery = _useState0[1];
5444
+ var _useState1 = useState(false),
5445
+ _useState10 = _slicedToArray(_useState1, 2),
5446
+ isInstalling = _useState10[0],
5447
+ setIsInstalling = _useState10[1];
5448
+ var _useState11 = useState(null),
5449
+ _useState12 = _slicedToArray(_useState11, 2),
5450
+ installError = _useState12[0],
5451
+ setInstallError = _useState12[1];
5452
+ var _useState13 = useState(false),
5453
+ _useState14 = _slicedToArray(_useState13, 2),
5454
+ showAllPackages = _useState14[0],
5455
+ setShowAllPackages = _useState14[1];
5456
+
5457
+ // Discover app capabilities from window.mainApi
5458
+ var appCapabilities = useMemo(function () {
5459
+ if (typeof window !== "undefined" && window.mainApi) {
5460
+ return Object.keys(window.mainApi);
5461
+ }
5462
+ return [];
5463
+ }, []);
5464
+ var search = useCallback(/*#__PURE__*/function () {
5465
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(query) {
5466
+ var _window$mainApi;
5467
+ var filters, result, pkgs, capSet, widgets, _iterator, _step, pkg, allApiProviders, _iterator2, _step2, p, _iterator3, _step3, w, _iterator5, _step5, _p, missingApis, _iterator4, _step4, widget, _t;
5468
+ return _regeneratorRuntime.wrap(function (_context) {
5469
+ while (1) switch (_context.prev = _context.next) {
5470
+ case 0:
5471
+ if ((_window$mainApi = window.mainApi) !== null && _window$mainApi !== void 0 && _window$mainApi.registry) {
5472
+ _context.next = 1;
5473
+ break;
5474
+ }
5475
+ setPackages([]);
5476
+ setFlatWidgets([]);
5477
+ return _context.abrupt("return");
5478
+ case 1:
5479
+ setIsLoading(true);
5480
+ setError(null);
5481
+ _context.prev = 2;
5482
+ filters = {};
5483
+ if (filterByCapabilities && !showAllPackages && appCapabilities.length) {
5484
+ filters.appCapabilities = appCapabilities;
5485
+ }
5486
+ _context.next = 3;
5487
+ return window.mainApi.registry.search(query !== null && query !== void 0 ? query : searchQuery, filters);
5488
+ case 3:
5489
+ result = _context.sent;
5490
+ // Only include packages that contain at least one widget
5491
+ // (filters out theme-only packages, etc.)
5492
+ pkgs = (result.packages || []).filter(function (pkg) {
5493
+ return pkg.widgets && pkg.widgets.length > 0;
5494
+ });
5495
+ setPackages(pkgs);
5496
+
5497
+ // Flatten packages into widget entries
5498
+ capSet = new Set(appCapabilities.map(function (c) {
5499
+ return c.toLowerCase();
5500
+ }));
5501
+ widgets = [];
5502
+ _iterator = _createForOfIteratorHelper$e(pkgs);
5503
+ try {
5504
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
5505
+ pkg = _step.value;
5506
+ // Compute missing APIs for the entire package
5507
+ allApiProviders = [];
5508
+ _iterator2 = _createForOfIteratorHelper$e(pkg.providers || []);
5509
+ try {
5510
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
5511
+ p = _step2.value;
5512
+ if (p.providerClass === "api" && p.required !== false) {
5513
+ allApiProviders.push(p.type);
5514
+ }
5515
+ }
5516
+ } catch (err) {
5517
+ _iterator2.e(err);
5518
+ } finally {
5519
+ _iterator2.f();
5520
+ }
5521
+ _iterator3 = _createForOfIteratorHelper$e(pkg.widgets || []);
5522
+ try {
5523
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
5524
+ w = _step3.value;
5525
+ _iterator5 = _createForOfIteratorHelper$e(w.providers || []);
5526
+ try {
5527
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
5528
+ _p = _step5.value;
5529
+ if (_p.providerClass === "api" && _p.required !== false) {
5530
+ allApiProviders.push(_p.type);
5531
+ }
5532
+ }
5533
+ } catch (err) {
5534
+ _iterator5.e(err);
5535
+ } finally {
5536
+ _iterator5.f();
5537
+ }
5538
+ }
5539
+ } catch (err) {
5540
+ _iterator3.e(err);
5541
+ } finally {
5542
+ _iterator3.f();
5543
+ }
5544
+ missingApis = _toConsumableArray(new Set(allApiProviders)).filter(function (api) {
5545
+ return !capSet.has(api.toLowerCase());
5546
+ });
5547
+ _iterator4 = _createForOfIteratorHelper$e(pkg.widgets || []);
5548
+ try {
5549
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
5550
+ widget = _step4.value;
5551
+ widgets.push({
5552
+ key: "".concat(pkg.name, "/").concat(widget.name),
5553
+ name: widget.displayName || widget.name,
5554
+ description: widget.description || "",
5555
+ icon: widget.icon || null,
5556
+ providers: widget.providers || [],
5557
+ isRegistry: true,
5558
+ packageName: pkg.name,
5559
+ packageDisplayName: pkg.displayName || pkg.name,
5560
+ packageVersion: pkg.version,
5561
+ packageAuthor: pkg.author || "",
5562
+ packageDescription: pkg.description || "",
5563
+ packageTags: pkg.tags || [],
5564
+ packageCategory: pkg.category || "",
5565
+ downloadUrl: pkg.downloadUrl || "",
5566
+ repository: pkg.repository || "",
5567
+ publishedAt: pkg.publishedAt || "",
5568
+ packageWidgets: pkg.widgets || [],
5569
+ appOrigin: pkg.appOrigin || null,
5570
+ packageProviders: pkg.providers || [],
5571
+ missingApis: missingApis
5572
+ });
5573
+ }
5574
+ } catch (err) {
5575
+ _iterator4.e(err);
5576
+ } finally {
5577
+ _iterator4.f();
5578
+ }
5579
+ }
5580
+ } catch (err) {
5581
+ _iterator.e(err);
5582
+ } finally {
5583
+ _iterator.f();
5584
+ }
5585
+ setFlatWidgets(widgets);
5586
+ _context.next = 5;
5587
+ break;
5588
+ case 4:
5589
+ _context.prev = 4;
5590
+ _t = _context["catch"](2);
5591
+ setError(_t.message || "Failed to load registry");
5592
+ setPackages([]);
5593
+ setFlatWidgets([]);
5594
+ case 5:
5595
+ _context.prev = 5;
5596
+ setIsLoading(false);
5597
+ return _context.finish(5);
5598
+ case 6:
5599
+ case "end":
5600
+ return _context.stop();
5601
+ }
5602
+ }, _callee, null, [[2, 4, 5, 6]]);
5603
+ }));
5604
+ return function (_x) {
5605
+ return _ref2.apply(this, arguments);
5606
+ };
5607
+ }(), [searchQuery, filterByCapabilities, showAllPackages, appCapabilities]);
5608
+
5609
+ // Debounce search on query changes (300ms)
5610
+ useEffect(function () {
5611
+ var timer = setTimeout(function () {
5612
+ search(searchQuery);
5613
+ }, 300);
5614
+ return function () {
5615
+ return clearTimeout(timer);
5616
+ };
5617
+ // eslint-disable-next-line react-hooks/exhaustive-deps
5618
+ }, [searchQuery, showAllPackages]);
5619
+ var installPackage = useCallback(/*#__PURE__*/function () {
5620
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(widget) {
5621
+ var packageName, downloadUrl, packageVersion, resolvedUrl, _t2;
5622
+ return _regeneratorRuntime.wrap(function (_context2) {
5623
+ while (1) switch (_context2.prev = _context2.next) {
5624
+ case 0:
5625
+ if (!(!widget || !widget.isRegistry)) {
5626
+ _context2.next = 1;
5627
+ break;
5628
+ }
5629
+ return _context2.abrupt("return");
5630
+ case 1:
5631
+ setIsInstalling(true);
5632
+ setInstallError(null);
5633
+ _context2.prev = 2;
5634
+ packageName = widget.packageName, downloadUrl = widget.downloadUrl, packageVersion = widget.packageVersion; // Resolve placeholders in the download URL
5635
+ resolvedUrl = downloadUrl.replace(/\{version\}/g, packageVersion).replace(/\{name\}/g, packageName);
5636
+ _context2.next = 3;
5637
+ return window.mainApi.widgets.install(packageName, resolvedUrl);
5638
+ case 3:
5639
+ _context2.next = 5;
5640
+ break;
5641
+ case 4:
5642
+ _context2.prev = 4;
5643
+ _t2 = _context2["catch"](2);
5644
+ setInstallError(_t2.message || "Failed to install package");
5645
+ case 5:
5646
+ _context2.prev = 5;
5647
+ setIsInstalling(false);
5648
+ return _context2.finish(5);
5649
+ case 6:
5650
+ case "end":
5651
+ return _context2.stop();
5652
+ }
5653
+ }, _callee2, null, [[2, 4, 5, 6]]);
5654
+ }));
5655
+ return function (_x2) {
5656
+ return _ref3.apply(this, arguments);
5657
+ };
5658
+ }(), []);
5659
+ var retry = useCallback(function () {
5660
+ search(searchQuery);
5661
+ }, [search, searchQuery]);
5662
+ return {
5663
+ packages: packages,
5664
+ flatWidgets: flatWidgets,
5665
+ isLoading: isLoading,
5666
+ error: error,
5667
+ searchQuery: searchQuery,
5668
+ setSearchQuery: setSearchQuery,
5669
+ isInstalling: isInstalling,
5670
+ installError: installError,
5671
+ search: search,
5672
+ installPackage: installPackage,
5673
+ retry: retry,
5674
+ showAllPackages: showAllPackages,
5675
+ setShowAllPackages: setShowAllPackages,
5676
+ appCapabilities: appCapabilities
5677
+ };
5678
+ };
5679
+
5680
+ var WizardResultsStep = function WizardResultsStep(_ref) {
5681
+ var state = _ref.state,
5682
+ dispatch = _ref.dispatch;
5683
+ var _useState = useState("prebuilt"),
5684
+ _useState2 = _slicedToArray(_useState, 2),
5685
+ activeTab = _useState2[0],
5686
+ setActiveTab = _useState2[1];
5687
+
5688
+ // --- Dashboard search (Tab A) ---
5689
+ var _useState3 = useState([]),
5690
+ _useState4 = _slicedToArray(_useState3, 2),
5691
+ dashboards = _useState4[0],
5692
+ setDashboards = _useState4[1];
5693
+ var _useState5 = useState(false),
5694
+ _useState6 = _slicedToArray(_useState5, 2),
5695
+ dashLoading = _useState6[0],
5696
+ setDashLoading = _useState6[1];
5697
+ var _useState7 = useState(null),
5698
+ _useState8 = _slicedToArray(_useState7, 2),
5699
+ dashError = _useState8[0],
5700
+ setDashError = _useState8[1];
5701
+ var dashFilters = useMemo(function () {
5702
+ return {
5703
+ category: state.intent.length ? state.intent.join(",") : undefined,
5704
+ providerTypes: state.providers.length ? state.providers : undefined
5705
+ };
5706
+ }, [state.intent, state.providers]);
5707
+ var searchDashboards = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
5708
+ var _window$mainApi;
5709
+ var result, _t;
5710
+ return _regeneratorRuntime.wrap(function (_context) {
5711
+ while (1) switch (_context.prev = _context.next) {
5712
+ case 0:
5713
+ if ((_window$mainApi = window.mainApi) !== null && _window$mainApi !== void 0 && (_window$mainApi = _window$mainApi.registry) !== null && _window$mainApi !== void 0 && _window$mainApi.searchDashboards) {
5714
+ _context.next = 1;
5715
+ break;
5716
+ }
5717
+ setDashboards([]);
5718
+ return _context.abrupt("return");
5719
+ case 1:
5720
+ setDashLoading(true);
5721
+ setDashError(null);
5722
+ _context.prev = 2;
5723
+ _context.next = 3;
5724
+ return window.mainApi.registry.searchDashboards("", dashFilters);
5725
+ case 3:
5726
+ result = _context.sent;
5727
+ setDashboards(result.packages || []);
5728
+ _context.next = 5;
5729
+ break;
5730
+ case 4:
5731
+ _context.prev = 4;
5732
+ _t = _context["catch"](2);
5733
+ setDashError(_t.message || "Failed to search dashboards");
5734
+ setDashboards([]);
5735
+ case 5:
5736
+ _context.prev = 5;
5737
+ setDashLoading(false);
5738
+ return _context.finish(5);
5739
+ case 6:
5740
+ case "end":
5741
+ return _context.stop();
5742
+ }
5743
+ }, _callee, null, [[2, 4, 5, 6]]);
5744
+ })), [dashFilters]);
5745
+ useEffect(function () {
5746
+ searchDashboards();
5747
+ }, [searchDashboards]);
5748
+
5749
+ // --- Widget search (Tab B) ---
5750
+ var _useRegistrySearch = useRegistrySearch({
5751
+ filterByCapabilities: true
5752
+ }),
5753
+ flatWidgets = _useRegistrySearch.flatWidgets,
5754
+ widgetsLoading = _useRegistrySearch.isLoading,
5755
+ widgetsError = _useRegistrySearch.error;
5756
+
5757
+ // Filter widgets by selected categories + providers
5758
+ var filteredWidgets = useMemo(function () {
5759
+ return flatWidgets.filter(function (w) {
5760
+ // Category filter: match if widget's category overlaps user intent
5761
+ var catMatch = state.intent.length === 0 || state.intent.some(function (cat) {
5762
+ return (w.packageCategory || "").toLowerCase() === cat.toLowerCase();
5763
+ });
5764
+
5765
+ // Provider filter: match if widget requires any of the selected providers
5766
+ var providerMatch = state.providers.length === 0 || (w.providers || []).some(function (p) {
5767
+ return state.providers.includes(p.type);
5768
+ }) || (w.packageProviders || []).some(function (p) {
5769
+ return state.providers.includes(p.type);
5770
+ });
5771
+ return catMatch && providerMatch;
5772
+ });
5773
+ }, [flatWidgets, state.intent, state.providers]);
5774
+
5775
+ // --- Tab change: set wizard path ---
5776
+ var handleTabChange = useCallback(function (tab) {
5777
+ setActiveTab(tab);
5778
+ dispatch({
5779
+ type: "SET_PATH",
5780
+ payload: tab === "prebuilt" ? "prebuilt" : "custom"
5781
+ });
5782
+ }, [dispatch]);
5783
+
5784
+ // Set initial path on mount
5785
+ useEffect(function () {
5786
+ if (!state.path) {
5787
+ dispatch({
5788
+ type: "SET_PATH",
5789
+ payload: "prebuilt"
5790
+ });
5791
+ }
5792
+ }, [state.path, dispatch]);
5793
+
5794
+ // --- Dashboard selection (single-select) ---
5795
+ var handleSelectDashboard = useCallback(function (dashboard) {
5796
+ dispatch({
5797
+ type: "SET_SELECTED_DASHBOARD",
5798
+ payload: dashboard
5799
+ });
5800
+ }, [dispatch]);
5801
+
5802
+ // --- Widget selection (multi-select) ---
5803
+ var handleToggleWidget = useCallback(function (widget) {
5804
+ dispatch({
5805
+ type: "TOGGLE_WIDGET",
5806
+ payload: widget
5807
+ });
5808
+ }, [dispatch]);
5809
+ var isWidgetSelected = useCallback(function (widget) {
5810
+ return state.selectedWidgets.some(function (w) {
5811
+ return w.name === widget.name;
5812
+ });
5813
+ }, [state.selectedWidgets]);
5814
+ return /*#__PURE__*/jsxs("div", {
5815
+ className: "wizard-results-step",
5816
+ children: [/*#__PURE__*/jsx("h3", {
5817
+ className: "wizard-step-header",
5818
+ children: "Choose your starting point"
5819
+ }), /*#__PURE__*/jsxs(Tabs3, {
5820
+ value: activeTab,
5821
+ onValueChange: handleTabChange,
5822
+ className: "wizard-results-tabs",
5823
+ children: [/*#__PURE__*/jsxs(Tabs3.List, {
5824
+ className: "wizard-results-tab-list",
5825
+ children: [/*#__PURE__*/jsx(Tabs3.Trigger, {
5826
+ value: "prebuilt",
5827
+ children: "Pre-built Dashboards"
5828
+ }), /*#__PURE__*/jsxs(Tabs3.Trigger, {
5829
+ value: "custom",
5830
+ children: ["Build Your Own", state.selectedWidgets.length > 0 && /*#__PURE__*/jsx("span", {
5831
+ className: "wizard-count-badge",
5832
+ children: state.selectedWidgets.length
5833
+ })]
5834
+ })]
5835
+ }), /*#__PURE__*/jsx(Tabs3.Content, {
5836
+ value: "prebuilt",
5837
+ children: /*#__PURE__*/jsx(DashboardList, {
5838
+ dashboards: dashboards,
5839
+ isLoading: dashLoading,
5840
+ error: dashError,
5841
+ selectedDashboard: state.selectedDashboard,
5842
+ onSelect: handleSelectDashboard
5843
+ })
5844
+ }), /*#__PURE__*/jsx(Tabs3.Content, {
5845
+ value: "custom",
5846
+ children: /*#__PURE__*/jsx(WidgetList, {
5847
+ widgets: filteredWidgets,
5848
+ isLoading: widgetsLoading,
5849
+ error: widgetsError,
5850
+ isSelected: isWidgetSelected,
5851
+ onToggle: handleToggleWidget,
5852
+ selectedCount: state.selectedWidgets.length
5853
+ })
5854
+ })]
5855
+ })]
5856
+ });
5857
+ };
5858
+
5859
+ // --- Sub-components ---
5860
+
5861
+ var DashboardList = function DashboardList(_ref3) {
5862
+ var dashboards = _ref3.dashboards,
5863
+ isLoading = _ref3.isLoading,
5864
+ error = _ref3.error,
5865
+ selectedDashboard = _ref3.selectedDashboard,
5866
+ onSelect = _ref3.onSelect;
5867
+ if (isLoading) {
5868
+ return /*#__PURE__*/jsxs("div", {
5869
+ className: "wizard-loading",
5870
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
5871
+ icon: "spinner",
5872
+ spin: true,
5873
+ fixedWidth: true,
5874
+ className: "wizard-loading-icon"
5875
+ }), /*#__PURE__*/jsx("span", {
5876
+ children: "Searching dashboards..."
5877
+ })]
5878
+ });
5879
+ }
5880
+ if (error) {
5881
+ return /*#__PURE__*/jsxs("div", {
5882
+ className: "wizard-error",
5883
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
5884
+ icon: "circle-exclamation",
5885
+ fixedWidth: true
5886
+ }), /*#__PURE__*/jsx("span", {
5887
+ children: error
5888
+ })]
5889
+ });
5890
+ }
5891
+ if (dashboards.length === 0) {
5892
+ return /*#__PURE__*/jsxs("div", {
5893
+ className: "wizard-empty",
5894
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
5895
+ icon: "box-open",
5896
+ fixedWidth: true,
5897
+ className: "wizard-empty-icon"
5898
+ }), /*#__PURE__*/jsx("p", {
5899
+ children: "No pre-built dashboards match your selections."
5900
+ }), /*#__PURE__*/jsx("p", {
5901
+ className: "wizard-empty-hint",
5902
+ children: "Try the \"Build Your Own\" tab to pick individual widgets."
5903
+ })]
5904
+ });
5905
+ }
5906
+ return /*#__PURE__*/jsx("div", {
5907
+ className: "wizard-dashboard-list",
5908
+ children: dashboards.map(function (dash) {
5909
+ var isSelected = selectedDashboard && selectedDashboard.name === dash.name;
5910
+ var widgetCount = (dash.widgets || []).length;
5911
+ var providerNames = (dash.providers || []).map(function (p) {
5912
+ return p.name || p.type;
5913
+ }).join(", ");
5914
+ return /*#__PURE__*/jsxs("button", {
5915
+ type: "button",
5916
+ className: "wizard-dashboard-card ".concat(isSelected ? "wizard-dashboard-card--selected" : ""),
5917
+ onClick: function onClick() {
5918
+ return onSelect(dash);
5919
+ },
5920
+ children: [/*#__PURE__*/jsxs("div", {
5921
+ className: "wizard-dashboard-card-header",
5922
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
5923
+ icon: resolveIcon(dash.icon || "grid-2"),
5924
+ fixedWidth: true,
5925
+ className: "wizard-dashboard-card-icon"
5926
+ }), /*#__PURE__*/jsx("span", {
5927
+ className: "wizard-dashboard-card-name",
5928
+ children: dash.displayName || dash.name
5929
+ }), isSelected && /*#__PURE__*/jsx(FontAwesomeIcon, {
5930
+ icon: "circle-check",
5931
+ className: "wizard-dashboard-card-check"
5932
+ })]
5933
+ }), dash.description && /*#__PURE__*/jsx("p", {
5934
+ className: "wizard-dashboard-card-desc",
5935
+ children: dash.description
5936
+ }), /*#__PURE__*/jsxs("div", {
5937
+ className: "wizard-dashboard-card-meta",
5938
+ children: [/*#__PURE__*/jsxs("span", {
5939
+ children: [widgetCount, " widget", widgetCount !== 1 ? "s" : ""]
5940
+ }), providerNames && /*#__PURE__*/jsx("span", {
5941
+ children: providerNames
5942
+ })]
5943
+ })]
5944
+ }, dash.name);
5945
+ })
5946
+ });
5947
+ };
5948
+ var WidgetList = function WidgetList(_ref4) {
5949
+ var widgets = _ref4.widgets,
5950
+ isLoading = _ref4.isLoading,
5951
+ error = _ref4.error,
5952
+ isSelected = _ref4.isSelected,
5953
+ onToggle = _ref4.onToggle,
5954
+ selectedCount = _ref4.selectedCount;
5955
+ if (isLoading) {
5956
+ return /*#__PURE__*/jsxs("div", {
5957
+ className: "wizard-loading",
5958
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
5959
+ icon: "spinner",
5960
+ spin: true,
5961
+ fixedWidth: true,
5962
+ className: "wizard-loading-icon"
5963
+ }), /*#__PURE__*/jsx("span", {
5964
+ children: "Searching widgets..."
5965
+ })]
5966
+ });
5967
+ }
5968
+ if (error) {
5969
+ return /*#__PURE__*/jsxs("div", {
5970
+ className: "wizard-error",
5971
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
5972
+ icon: "circle-exclamation",
5973
+ fixedWidth: true
5974
+ }), /*#__PURE__*/jsx("span", {
5975
+ children: error
5976
+ })]
5977
+ });
5978
+ }
5979
+ if (widgets.length === 0) {
5980
+ return /*#__PURE__*/jsxs("div", {
5981
+ className: "wizard-empty",
5982
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
5983
+ icon: "puzzle-piece",
5984
+ fixedWidth: true,
5985
+ className: "wizard-empty-icon"
5986
+ }), /*#__PURE__*/jsx("p", {
5987
+ children: "No widgets match your selections."
5988
+ }), /*#__PURE__*/jsx("p", {
5989
+ className: "wizard-empty-hint",
5990
+ children: "Try adjusting your categories or providers in the previous steps."
5991
+ })]
5992
+ });
5993
+ }
5994
+ return /*#__PURE__*/jsxs("div", {
5995
+ className: "wizard-widget-list",
5996
+ children: [selectedCount > 0 && /*#__PURE__*/jsxs("p", {
5997
+ className: "wizard-widget-count",
5998
+ children: [selectedCount, " widget", selectedCount !== 1 ? "s" : "", " selected"]
5999
+ }), widgets.map(function (widget) {
6000
+ var checked = isSelected(widget);
6001
+ return /*#__PURE__*/jsxs("button", {
6002
+ type: "button",
6003
+ className: "wizard-widget-card ".concat(checked ? "wizard-widget-card--selected" : ""),
6004
+ onClick: function onClick() {
6005
+ return onToggle(widget);
6006
+ },
6007
+ children: [/*#__PURE__*/jsx("div", {
6008
+ className: "wizard-widget-card-checkbox",
6009
+ children: /*#__PURE__*/jsx(FontAwesomeIcon, {
6010
+ icon: checked ? "square-check" : "square",
6011
+ fixedWidth: true
6012
+ })
6013
+ }), /*#__PURE__*/jsxs("div", {
6014
+ className: "wizard-widget-card-info",
6015
+ children: [/*#__PURE__*/jsxs("div", {
6016
+ className: "wizard-widget-card-header",
6017
+ children: [widget.icon && /*#__PURE__*/jsx(FontAwesomeIcon, {
6018
+ icon: resolveIcon(widget.icon),
6019
+ fixedWidth: true,
6020
+ className: "wizard-widget-card-icon"
6021
+ }), /*#__PURE__*/jsx("span", {
6022
+ className: "wizard-widget-card-name",
6023
+ children: widget.name
6024
+ })]
6025
+ }), widget.description && /*#__PURE__*/jsx("p", {
6026
+ className: "wizard-widget-card-desc",
6027
+ children: widget.description
6028
+ }), widget.packageDisplayName && /*#__PURE__*/jsx("span", {
6029
+ className: "wizard-widget-card-package",
6030
+ children: widget.packageDisplayName
6031
+ })]
6032
+ })]
6033
+ }, widget.key);
6034
+ })]
6035
+ });
6036
+ };
6037
+
5207
6038
  var LayoutBuilderAddItemModal = function LayoutBuilderAddItemModal(_ref) {
5208
6039
  var workspace = _ref.workspace,
5209
6040
  open = _ref.open,
@@ -9836,9 +10667,9 @@ var PanelEditItem = function PanelEditItem(_ref) {
9836
10667
  };
9837
10668
 
9838
10669
  var _excluded$5 = ["rows", "cols"];
9839
- function _createForOfIteratorHelper$e(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$e(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; } } }; }
9840
- function _unsupportedIterableToArray$e(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$e(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$e(r, a) : void 0; } }
9841
- function _arrayLikeToArray$e(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; }
10670
+ function _createForOfIteratorHelper$d(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$d(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; } } }; }
10671
+ function _unsupportedIterableToArray$d(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$d(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$d(r, a) : void 0; } }
10672
+ function _arrayLikeToArray$d(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; }
9842
10673
  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; }
9843
10674
  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; }
9844
10675
  var defaultGrid = {
@@ -9991,7 +10822,7 @@ function GridEditor(_ref) {
9991
10822
  function sortObjectByKeys(obj) {
9992
10823
  var sortedKeys = Object.keys(obj).sort();
9993
10824
  var sortedObj = {};
9994
- var _iterator = _createForOfIteratorHelper$e(sortedKeys),
10825
+ var _iterator = _createForOfIteratorHelper$d(sortedKeys),
9995
10826
  _step;
9996
10827
  try {
9997
10828
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -10464,9 +11295,9 @@ var PanelEditItemNotifications = function PanelEditItemNotifications(_ref) {
10464
11295
  });
10465
11296
  };
10466
11297
 
10467
- function _createForOfIteratorHelper$d(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$d(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; } } }; }
10468
- function _unsupportedIterableToArray$d(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$d(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$d(r, a) : void 0; } }
10469
- function _arrayLikeToArray$d(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; }
11298
+ function _createForOfIteratorHelper$c(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$c(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; } } }; }
11299
+ function _unsupportedIterableToArray$c(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$c(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$c(r, a) : void 0; } }
11300
+ function _arrayLikeToArray$c(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; }
10470
11301
  function ownKeys$x(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; }
10471
11302
  function _objectSpread$x(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$x(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$x(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
10472
11303
  var DAYS = [{
@@ -10795,7 +11626,7 @@ var PanelEditItemSchedule = function PanelEditItemSchedule(_ref2) {
10795
11626
  setIsLoading(true);
10796
11627
  window.mainApi.scheduler.getTasks(widgetUuid).then(function (tasks) {
10797
11628
  var stateMap = {};
10798
- var _iterator = _createForOfIteratorHelper$d(tasks || []),
11629
+ var _iterator = _createForOfIteratorHelper$c(tasks || []),
10799
11630
  _step;
10800
11631
  try {
10801
11632
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -13645,9 +14476,9 @@ var getUserConfigurableProviders = function getUserConfigurableProviders(provide
13645
14476
  });
13646
14477
  };
13647
14478
 
13648
- function _createForOfIteratorHelper$c(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$c(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; } } }; }
13649
- function _unsupportedIterableToArray$c(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$c(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$c(r, a) : void 0; } }
13650
- function _arrayLikeToArray$c(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; }
14479
+ 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; } } }; }
14480
+ 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; } }
14481
+ 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; }
13651
14482
  function ownKeys$u(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; }
13652
14483
  function _objectSpread$u(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$u(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$u(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13653
14484
  var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
@@ -13914,11 +14745,11 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
13914
14745
 
13915
14746
  // Flatten all widgets from all packages for the widget list
13916
14747
  flatWidgets = [];
13917
- _iterator = _createForOfIteratorHelper$c(result.packages || []);
14748
+ _iterator = _createForOfIteratorHelper$b(result.packages || []);
13918
14749
  try {
13919
14750
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
13920
14751
  pkg = _step.value;
13921
- _iterator2 = _createForOfIteratorHelper$c(pkg.widgets || []);
14752
+ _iterator2 = _createForOfIteratorHelper$b(pkg.widgets || []);
13922
14753
  try {
13923
14754
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
13924
14755
  widget = _step2.value;
@@ -15474,9 +16305,9 @@ var ProviderBadge = function ProviderBadge(_ref) {
15474
16305
  });
15475
16306
  };
15476
16307
 
15477
- 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; } } }; }
15478
- 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; } }
15479
- 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; }
16308
+ 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; } } }; }
16309
+ 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; } }
16310
+ 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; }
15480
16311
  var WidgetCardHeader = function WidgetCardHeader(_ref) {
15481
16312
  var item = _ref.item,
15482
16313
  widget = _ref.widget,
@@ -15520,7 +16351,7 @@ var WidgetCardHeader = function WidgetCardHeader(_ref) {
15520
16351
  var el = headerRef.current;
15521
16352
  if (!el) return;
15522
16353
  var observer = new ResizeObserver(function (entries) {
15523
- var _iterator = _createForOfIteratorHelper$b(entries),
16354
+ var _iterator = _createForOfIteratorHelper$a(entries),
15524
16355
  _step;
15525
16356
  try {
15526
16357
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -15877,9 +16708,9 @@ var useWidgetSchedulerStatus = function useWidgetSchedulerStatus(widgetId) {
15877
16708
  };
15878
16709
  };
15879
16710
 
15880
- 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; } } }; }
15881
- 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; } }
15882
- 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; }
16711
+ 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; } } }; }
16712
+ 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; } }
16713
+ 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; }
15883
16714
  function formatCountdown(ms) {
15884
16715
  if (ms == null || ms < 0) return "--";
15885
16716
  if (ms < 1000) return "< 1s";
@@ -15996,7 +16827,7 @@ var WidgetCardStatusBar = function WidgetCardStatusBar(_ref) {
15996
16827
 
15997
16828
  // Find soonest countdown among enabled tasks
15998
16829
  var soonestMs = null;
15999
- var _iterator = _createForOfIteratorHelper$a(enabledTasks),
16830
+ var _iterator = _createForOfIteratorHelper$9(enabledTasks),
16000
16831
  _step;
16001
16832
  try {
16002
16833
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -20609,9 +21440,9 @@ var ExternalWidget = function ExternalWidget(_ref) {
20609
21440
  var GRID_CELL_WIDGET_TYPE = "grid-cell-widget";
20610
21441
  var SIDEBAR_WIDGET_TYPE = "sidebar-widget";
20611
21442
 
20612
- 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; } } }; }
20613
- 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; } }
20614
- 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; }
21443
+ 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; } } }; }
21444
+ 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; } }
21445
+ 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; }
20615
21446
  function ownKeys$n(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; }
20616
21447
  function _objectSpread$n(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$n(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$n(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
20617
21448
  var DraggableDroppableCellBody = function DraggableDroppableCellBody(_ref) {
@@ -21175,7 +22006,7 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
21175
22006
  return selectable["delete"](cn);
21176
22007
  });
21177
22008
  var resolved = new Set();
21178
- var _iterator = _createForOfIteratorHelper$9(selectable),
22009
+ var _iterator = _createForOfIteratorHelper$8(selectable),
21179
22010
  _step;
21180
22011
  try {
21181
22012
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -23315,9 +24146,9 @@ function isWidgetResolvable(componentKey) {
23315
24146
 
23316
24147
  function ownKeys$m(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; }
23317
24148
  function _objectSpread$m(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$m(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$m(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
23318
- 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; } } }; }
23319
- 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; } }
23320
- 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; }
24149
+ 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; } } }; }
24150
+ 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; } }
24151
+ 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; }
23321
24152
  /**
23322
24153
  * The model for all layout components used primarily in the renderLayout method
23323
24154
  * @param {Object} layoutItem an object containing various attributes of the layout item
@@ -23329,7 +24160,7 @@ function _arrayLikeToArray$8(r, a) { (null == a || a > r.length) && (a = r.lengt
23329
24160
  function sortObjectByKeys(obj) {
23330
24161
  var sortedKeys = Object.keys(obj).sort();
23331
24162
  var sortedObj = {};
23332
- var _iterator = _createForOfIteratorHelper$8(sortedKeys),
24163
+ var _iterator = _createForOfIteratorHelper$7(sortedKeys),
23333
24164
  _step;
23334
24165
  try {
23335
24166
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -26595,9 +27426,9 @@ var useDashboard = function useDashboard() {
26595
27426
  });
26596
27427
  };
26597
27428
 
26598
- 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; } } }; }
26599
- 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; } }
26600
- 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; }
27429
+ 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; } } }; }
27430
+ 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; } }
27431
+ 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; }
26601
27432
 
26602
27433
  /**
26603
27434
  * useWidgetProviders Hook
@@ -26648,7 +27479,7 @@ var useWidgetProviders = function useWidgetProviders() {
26648
27479
  // 1. Widget-level: stored directly on the layout item by handleSelectProvider
26649
27480
  // 2. Workspace-level: stored as workspace.selectedProviders[widgetId][providerType]
26650
27481
  var providers = {};
26651
- var _iterator = _createForOfIteratorHelper$7(providerDeclarations),
27482
+ var _iterator = _createForOfIteratorHelper$6(providerDeclarations),
26652
27483
  _step;
26653
27484
  try {
26654
27485
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -27383,9 +28214,9 @@ var useNotifications = function useNotifications() {
27383
28214
  };
27384
28215
  };
27385
28216
 
27386
- 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; } } }; }
27387
- 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; } }
27388
- 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; }
28217
+ 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; } } }; }
28218
+ 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; } }
28219
+ 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; }
27389
28220
 
27390
28221
  /**
27391
28222
  * useScheduler Hook
@@ -27458,7 +28289,7 @@ var useScheduler = function useScheduler() {
27458
28289
  if (pending && pending.length > 0) {
27459
28290
  setPendingResults(pending);
27460
28291
  // Call handlers for each pending result
27461
- var _iterator = _createForOfIteratorHelper$6(pending),
28292
+ var _iterator = _createForOfIteratorHelper$5(pending),
27462
28293
  _step;
27463
28294
  try {
27464
28295
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -30635,36 +31466,9 @@ function loadWidgetBundle(source, widgetName) {
30635
31466
  };
30636
31467
  }
30637
31468
 
30638
- var FALLBACK = "puzzle-piece";
30639
-
30640
- /**
30641
- * Resolve an icon name to a valid FontAwesome icon reference.
30642
- * Tries solid (fas) first, then brand (fab). Returns "puzzle-piece" if
30643
- * the icon is falsy or not found in either prefix.
30644
- */
30645
- var resolveIcon = function resolveIcon(iconName) {
30646
- if (!iconName) return FALLBACK;
30647
-
30648
- // Already an array tuple like ["fab", "github"] — pass through
30649
- if (Array.isArray(iconName)) return iconName;
30650
-
30651
- // Try solid
30652
- if (findIconDefinition({
30653
- prefix: "fas",
30654
- iconName: iconName
30655
- })) return iconName;
30656
-
30657
- // Try brand
30658
- if (findIconDefinition({
30659
- prefix: "fab",
30660
- iconName: iconName
30661
- })) return ["fab", iconName];
30662
- return FALLBACK;
30663
- };
30664
-
30665
- 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; } } }; }
30666
- 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; } }
30667
- 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; }
31469
+ 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; } } }; }
31470
+ 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; } }
31471
+ 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; }
30668
31472
  /**
30669
31473
  * Validation utilities for grid-first dashboard architecture
30670
31474
  *
@@ -30903,7 +31707,7 @@ var validateCellMerge = function validateCellMerge(cellNumbers, grid) {
30903
31707
 
30904
31708
  // Validate each cell
30905
31709
  var cells = [];
30906
- var _iterator = _createForOfIteratorHelper$5(cellNumbers),
31710
+ var _iterator = _createForOfIteratorHelper$4(cellNumbers),
30907
31711
  _step;
30908
31712
  try {
30909
31713
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -38647,9 +39451,9 @@ var McpCatalogDetail = function McpCatalogDetail(_ref) {
38647
39451
 
38648
39452
  function ownKeys$6(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; }
38649
39453
  function _objectSpread$6(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$6(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$6(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
38650
- 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; } } }; }
38651
- 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; } }
38652
- 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; }
39454
+ 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; } } }; }
39455
+ 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; } }
39456
+ 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; }
38653
39457
  function isValidWsUrl(url) {
38654
39458
  if (!url) return false;
38655
39459
  try {
@@ -38696,7 +39500,7 @@ function extractCredentialFields(url, headerRows) {
38696
39500
  fields.add(match[1]);
38697
39501
  }
38698
39502
  }
38699
- var _iterator = _createForOfIteratorHelper$4(headerRows),
39503
+ var _iterator = _createForOfIteratorHelper$3(headerRows),
38700
39504
  _step;
38701
39505
  try {
38702
39506
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -38799,7 +39603,7 @@ var WebSocketProviderForm = function WebSocketProviderForm(_ref) {
38799
39603
  if (!url.trim()) errs.url = "WebSocket URL is required";else if (!isValidWsUrl(url)) errs.url = "URL must start with ws:// or wss://";
38800
39604
 
38801
39605
  // Check required credential fields are filled
38802
- var _iterator2 = _createForOfIteratorHelper$4(credentialFields),
39606
+ var _iterator2 = _createForOfIteratorHelper$3(credentialFields),
38803
39607
  _step2;
38804
39608
  try {
38805
39609
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -38822,7 +39626,7 @@ var WebSocketProviderForm = function WebSocketProviderForm(_ref) {
38822
39626
 
38823
39627
  // Build headers object from rows
38824
39628
  var headers = {};
38825
- var _iterator3 = _createForOfIteratorHelper$4(headerRows),
39629
+ var _iterator3 = _createForOfIteratorHelper$3(headerRows),
38826
39630
  _step3;
38827
39631
  try {
38828
39632
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -38891,7 +39695,7 @@ var WebSocketProviderForm = function WebSocketProviderForm(_ref) {
38891
39695
 
38892
39696
  // Build config from current form state (same as handleSave)
38893
39697
  headers = {};
38894
- _iterator4 = _createForOfIteratorHelper$4(headerRows);
39698
+ _iterator4 = _createForOfIteratorHelper$3(headerRows);
38895
39699
  try {
38896
39700
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
38897
39701
  row = _step4.value;
@@ -41535,293 +42339,6 @@ var RegistryPackageDetail = function RegistryPackageDetail(_ref) {
41535
42339
  });
41536
42340
  };
41537
42341
 
41538
- 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; } } }; }
41539
- 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; } }
41540
- 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; }
41541
-
41542
- /**
41543
- * useRegistrySearch — shared hook for browsing and installing registry packages.
41544
- *
41545
- * Extracted from EnhancedWidgetDropdown so the same logic can power the
41546
- * Discover tab inside AppSettingsModal (and anywhere else).
41547
- *
41548
- * Options:
41549
- * filterByCapabilities – if true (default), only show packages compatible
41550
- * with the app's API capabilities
41551
- *
41552
- * Returns:
41553
- * packages – raw package objects from the registry
41554
- * flatWidgets – flattened widget entries with `isRegistry: true`
41555
- * isLoading – true while a search request is in flight
41556
- * error – error message string (or null)
41557
- * searchQuery / setSearchQuery – controlled search input
41558
- * isInstalling – true during an install
41559
- * installError – install error string (or null)
41560
- * search() – manually trigger a search
41561
- * installPackage(widget) – install a specific registry widget
41562
- * showAllPackages / setShowAllPackages – toggle to show incompatible packages
41563
- * appCapabilities – the app's API namespaces
41564
- */
41565
- var useRegistrySearch = function useRegistrySearch() {
41566
- var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
41567
- _ref$filterByCapabili = _ref.filterByCapabilities,
41568
- filterByCapabilities = _ref$filterByCapabili === void 0 ? true : _ref$filterByCapabili;
41569
- var _useState = useState(false),
41570
- _useState2 = _slicedToArray(_useState, 2),
41571
- isLoading = _useState2[0],
41572
- setIsLoading = _useState2[1];
41573
- var _useState3 = useState(null),
41574
- _useState4 = _slicedToArray(_useState3, 2),
41575
- error = _useState4[0],
41576
- setError = _useState4[1];
41577
- var _useState5 = useState([]),
41578
- _useState6 = _slicedToArray(_useState5, 2),
41579
- packages = _useState6[0],
41580
- setPackages = _useState6[1];
41581
- var _useState7 = useState([]),
41582
- _useState8 = _slicedToArray(_useState7, 2),
41583
- flatWidgets = _useState8[0],
41584
- setFlatWidgets = _useState8[1];
41585
- var _useState9 = useState(""),
41586
- _useState0 = _slicedToArray(_useState9, 2),
41587
- searchQuery = _useState0[0],
41588
- setSearchQuery = _useState0[1];
41589
- var _useState1 = useState(false),
41590
- _useState10 = _slicedToArray(_useState1, 2),
41591
- isInstalling = _useState10[0],
41592
- setIsInstalling = _useState10[1];
41593
- var _useState11 = useState(null),
41594
- _useState12 = _slicedToArray(_useState11, 2),
41595
- installError = _useState12[0],
41596
- setInstallError = _useState12[1];
41597
- var _useState13 = useState(false),
41598
- _useState14 = _slicedToArray(_useState13, 2),
41599
- showAllPackages = _useState14[0],
41600
- setShowAllPackages = _useState14[1];
41601
-
41602
- // Discover app capabilities from window.mainApi
41603
- var appCapabilities = useMemo(function () {
41604
- if (typeof window !== "undefined" && window.mainApi) {
41605
- return Object.keys(window.mainApi);
41606
- }
41607
- return [];
41608
- }, []);
41609
- var search = useCallback(/*#__PURE__*/function () {
41610
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(query) {
41611
- var _window$mainApi;
41612
- var filters, result, pkgs, capSet, widgets, _iterator, _step, pkg, allApiProviders, _iterator2, _step2, p, _iterator3, _step3, w, _iterator5, _step5, _p, missingApis, _iterator4, _step4, widget, _t;
41613
- return _regeneratorRuntime.wrap(function (_context) {
41614
- while (1) switch (_context.prev = _context.next) {
41615
- case 0:
41616
- if ((_window$mainApi = window.mainApi) !== null && _window$mainApi !== void 0 && _window$mainApi.registry) {
41617
- _context.next = 1;
41618
- break;
41619
- }
41620
- setPackages([]);
41621
- setFlatWidgets([]);
41622
- return _context.abrupt("return");
41623
- case 1:
41624
- setIsLoading(true);
41625
- setError(null);
41626
- _context.prev = 2;
41627
- filters = {};
41628
- if (filterByCapabilities && !showAllPackages && appCapabilities.length) {
41629
- filters.appCapabilities = appCapabilities;
41630
- }
41631
- _context.next = 3;
41632
- return window.mainApi.registry.search(query !== null && query !== void 0 ? query : searchQuery, filters);
41633
- case 3:
41634
- result = _context.sent;
41635
- // Only include packages that contain at least one widget
41636
- // (filters out theme-only packages, etc.)
41637
- pkgs = (result.packages || []).filter(function (pkg) {
41638
- return pkg.widgets && pkg.widgets.length > 0;
41639
- });
41640
- setPackages(pkgs);
41641
-
41642
- // Flatten packages into widget entries
41643
- capSet = new Set(appCapabilities.map(function (c) {
41644
- return c.toLowerCase();
41645
- }));
41646
- widgets = [];
41647
- _iterator = _createForOfIteratorHelper$3(pkgs);
41648
- try {
41649
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
41650
- pkg = _step.value;
41651
- // Compute missing APIs for the entire package
41652
- allApiProviders = [];
41653
- _iterator2 = _createForOfIteratorHelper$3(pkg.providers || []);
41654
- try {
41655
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
41656
- p = _step2.value;
41657
- if (p.providerClass === "api" && p.required !== false) {
41658
- allApiProviders.push(p.type);
41659
- }
41660
- }
41661
- } catch (err) {
41662
- _iterator2.e(err);
41663
- } finally {
41664
- _iterator2.f();
41665
- }
41666
- _iterator3 = _createForOfIteratorHelper$3(pkg.widgets || []);
41667
- try {
41668
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
41669
- w = _step3.value;
41670
- _iterator5 = _createForOfIteratorHelper$3(w.providers || []);
41671
- try {
41672
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
41673
- _p = _step5.value;
41674
- if (_p.providerClass === "api" && _p.required !== false) {
41675
- allApiProviders.push(_p.type);
41676
- }
41677
- }
41678
- } catch (err) {
41679
- _iterator5.e(err);
41680
- } finally {
41681
- _iterator5.f();
41682
- }
41683
- }
41684
- } catch (err) {
41685
- _iterator3.e(err);
41686
- } finally {
41687
- _iterator3.f();
41688
- }
41689
- missingApis = _toConsumableArray(new Set(allApiProviders)).filter(function (api) {
41690
- return !capSet.has(api.toLowerCase());
41691
- });
41692
- _iterator4 = _createForOfIteratorHelper$3(pkg.widgets || []);
41693
- try {
41694
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
41695
- widget = _step4.value;
41696
- widgets.push({
41697
- key: "".concat(pkg.name, "/").concat(widget.name),
41698
- name: widget.displayName || widget.name,
41699
- description: widget.description || "",
41700
- icon: widget.icon || null,
41701
- providers: widget.providers || [],
41702
- isRegistry: true,
41703
- packageName: pkg.name,
41704
- packageDisplayName: pkg.displayName || pkg.name,
41705
- packageVersion: pkg.version,
41706
- packageAuthor: pkg.author || "",
41707
- packageDescription: pkg.description || "",
41708
- packageTags: pkg.tags || [],
41709
- packageCategory: pkg.category || "",
41710
- downloadUrl: pkg.downloadUrl || "",
41711
- repository: pkg.repository || "",
41712
- publishedAt: pkg.publishedAt || "",
41713
- packageWidgets: pkg.widgets || [],
41714
- appOrigin: pkg.appOrigin || null,
41715
- packageProviders: pkg.providers || [],
41716
- missingApis: missingApis
41717
- });
41718
- }
41719
- } catch (err) {
41720
- _iterator4.e(err);
41721
- } finally {
41722
- _iterator4.f();
41723
- }
41724
- }
41725
- } catch (err) {
41726
- _iterator.e(err);
41727
- } finally {
41728
- _iterator.f();
41729
- }
41730
- setFlatWidgets(widgets);
41731
- _context.next = 5;
41732
- break;
41733
- case 4:
41734
- _context.prev = 4;
41735
- _t = _context["catch"](2);
41736
- setError(_t.message || "Failed to load registry");
41737
- setPackages([]);
41738
- setFlatWidgets([]);
41739
- case 5:
41740
- _context.prev = 5;
41741
- setIsLoading(false);
41742
- return _context.finish(5);
41743
- case 6:
41744
- case "end":
41745
- return _context.stop();
41746
- }
41747
- }, _callee, null, [[2, 4, 5, 6]]);
41748
- }));
41749
- return function (_x) {
41750
- return _ref2.apply(this, arguments);
41751
- };
41752
- }(), [searchQuery, filterByCapabilities, showAllPackages, appCapabilities]);
41753
-
41754
- // Debounce search on query changes (300ms)
41755
- useEffect(function () {
41756
- var timer = setTimeout(function () {
41757
- search(searchQuery);
41758
- }, 300);
41759
- return function () {
41760
- return clearTimeout(timer);
41761
- };
41762
- // eslint-disable-next-line react-hooks/exhaustive-deps
41763
- }, [searchQuery, showAllPackages]);
41764
- var installPackage = useCallback(/*#__PURE__*/function () {
41765
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(widget) {
41766
- var packageName, downloadUrl, packageVersion, resolvedUrl, _t2;
41767
- return _regeneratorRuntime.wrap(function (_context2) {
41768
- while (1) switch (_context2.prev = _context2.next) {
41769
- case 0:
41770
- if (!(!widget || !widget.isRegistry)) {
41771
- _context2.next = 1;
41772
- break;
41773
- }
41774
- return _context2.abrupt("return");
41775
- case 1:
41776
- setIsInstalling(true);
41777
- setInstallError(null);
41778
- _context2.prev = 2;
41779
- packageName = widget.packageName, downloadUrl = widget.downloadUrl, packageVersion = widget.packageVersion; // Resolve placeholders in the download URL
41780
- resolvedUrl = downloadUrl.replace(/\{version\}/g, packageVersion).replace(/\{name\}/g, packageName);
41781
- _context2.next = 3;
41782
- return window.mainApi.widgets.install(packageName, resolvedUrl);
41783
- case 3:
41784
- _context2.next = 5;
41785
- break;
41786
- case 4:
41787
- _context2.prev = 4;
41788
- _t2 = _context2["catch"](2);
41789
- setInstallError(_t2.message || "Failed to install package");
41790
- case 5:
41791
- _context2.prev = 5;
41792
- setIsInstalling(false);
41793
- return _context2.finish(5);
41794
- case 6:
41795
- case "end":
41796
- return _context2.stop();
41797
- }
41798
- }, _callee2, null, [[2, 4, 5, 6]]);
41799
- }));
41800
- return function (_x2) {
41801
- return _ref3.apply(this, arguments);
41802
- };
41803
- }(), []);
41804
- var retry = useCallback(function () {
41805
- search(searchQuery);
41806
- }, [search, searchQuery]);
41807
- return {
41808
- packages: packages,
41809
- flatWidgets: flatWidgets,
41810
- isLoading: isLoading,
41811
- error: error,
41812
- searchQuery: searchQuery,
41813
- setSearchQuery: setSearchQuery,
41814
- isInstalling: isInstalling,
41815
- installError: installError,
41816
- search: search,
41817
- installPackage: installPackage,
41818
- retry: retry,
41819
- showAllPackages: showAllPackages,
41820
- setShowAllPackages: setShowAllPackages,
41821
- appCapabilities: appCapabilities
41822
- };
41823
- };
41824
-
41825
42342
  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; } } }; }
41826
42343
  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; } }
41827
42344
  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; }
@@ -48311,5 +48828,5 @@ var WorkspaceMenu = function WorkspaceMenu(_ref) {
48311
48828
 
48312
48829
  ComponentManager.registerContainerTypes(LayoutContainer, LayoutGridContainer);
48313
48830
 
48314
- 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, 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, 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, Widget, WidgetApi, WidgetConfigPanel, WidgetContext, WidgetFactory, WidgetPopoutStage, WidgetProviderWrapper, WidgetSidebar, 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 };
48831
+ 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, 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, 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, Widget, WidgetApi, WidgetConfigPanel, WidgetContext, WidgetFactory, WidgetPopoutStage, WidgetProviderWrapper, WidgetSidebar, WizardIntentStep, WizardProvidersStep, WizardResultsStep, 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 };
48315
48832
  //# sourceMappingURL=index.esm.js.map