@trops/dash-core 0.1.429 → 0.1.432

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
@@ -27668,6 +27668,16 @@ var LayoutModel = function LayoutModel(layoutItem, workspaceLayout, dashboardId)
27668
27668
  if (Array.isArray(widgetConfig.eventHandlers)) {
27669
27669
  layout.eventHandlers = widgetConfig.eventHandlers;
27670
27670
  }
27671
+ // Migrate legacy bare `component` references to the canonical
27672
+ // scoped form (`scope.package.Component`). ComponentManager.config
27673
+ // returns the resolved scoped key on `widgetConfig.component`, so
27674
+ // we just lift it. Idempotent: items already scoped pass through
27675
+ // unchanged because resolveComponentKey returns the input verbatim
27676
+ // when it's already in the map. Persisted on next save — no
27677
+ // separate migration step needed.
27678
+ if (typeof widgetConfig.component === "string" && widgetConfig.component && widgetConfig.component !== layout.component) {
27679
+ layout.component = widgetConfig.component;
27680
+ }
27671
27681
  }
27672
27682
 
27673
27683
  // Merge user-entered config values (from EnhancedWidgetDropdown) into userPrefs
@@ -28734,8 +28744,16 @@ var WorkspaceModel = function WorkspaceModel(workspaceItem) {
28734
28744
  // Skip items already produced by LayoutModel (idempotent: LayoutModel
28735
28745
  // is safe to call on its own output).
28736
28746
  var wsId = "id" in obj ? obj["id"] : workspace.id;
28747
+ // LayoutModel returns null when an item can't be normalized (e.g.
28748
+ // throw inside its catch). A null in the layout array crashes
28749
+ // downstream forEach/map consumers with `Cannot read properties of
28750
+ // null (reading 'type')`. Filter nulls so the renderer never sees
28751
+ // them — the original raw item is already lost at that point, so
28752
+ // dropping it is the only safe action.
28737
28753
  workspace.layout = rawLayout.map(function (item) {
28738
28754
  return LayoutModel(item, rawLayout, wsId);
28755
+ }).filter(function (item) {
28756
+ return item != null;
28739
28757
  });
28740
28758
  workspace.pages = "pages" in obj ? obj["pages"] : [];
28741
28759
  workspace.activePageId = "activePageId" in obj ? obj["activePageId"] : null;
@@ -31345,7 +31363,117 @@ var ContextModel = /*#__PURE__*/function () {
31345
31363
  }]);
31346
31364
  }();
31347
31365
 
31366
+ /**
31367
+ * scopedComponentId.js
31368
+ *
31369
+ * Single source of truth for the canonical scoped component id used by
31370
+ * ComponentManager registration, layout items, and publish-time scope
31371
+ * remap. Format: `scope.packageName.ComponentName`.
31372
+ *
31373
+ * Why a 3-part dotted form (and not `@scope/pkg.Component`)?
31374
+ * - Matches existing `config.id` shape that `.dash.js` files already
31375
+ * set when authored explicitly (see ComponentManager.registerWidget:
31376
+ * `const registrationKey = config.id || widgetKey;`).
31377
+ * - Trivial to parse (`split(".")` — three parts, ordered).
31378
+ * - Avoids slashes inside object keys, which some downstream serializers
31379
+ * (older dash-registry indexers) historically choked on.
31380
+ *
31381
+ * The upstream package id may arrive in either of two shapes:
31382
+ * - "@scope/pkg" (npm-style)
31383
+ * - "scope/pkg" (bare scope)
31384
+ * Both produce the same scoped id.
31385
+ */
31386
+
31387
+ /**
31388
+ * Build the canonical scoped component id from a package name and a
31389
+ * bare component name.
31390
+ *
31391
+ * @param {string} packageName e.g. "@ai-built/pipeline" or "ai-built/pipeline"
31392
+ * @param {string} componentName e.g. "ProspectListColumn"
31393
+ * @returns {string} e.g. "ai-built.pipeline.ProspectListColumn"
31394
+ */
31395
+ function makeScopedComponentId(packageName, componentName) {
31396
+ if (!componentName) return "";
31397
+ if (!packageName) return componentName;
31398
+ var cleaned = String(packageName).replace(/^@/, "").replace(/\//g, ".");
31399
+ return "".concat(cleaned, ".").concat(componentName);
31400
+ }
31401
+
31402
+ /**
31403
+ * Parse a scoped component id into its three parts. Returns null when
31404
+ * the input isn't a 3-part dotted id (e.g. legacy bare names).
31405
+ *
31406
+ * @param {string} scopedId
31407
+ * @returns {{scope: string, packageName: string, componentName: string} | null}
31408
+ */
31409
+ function parseScopedComponentId(scopedId) {
31410
+ if (typeof scopedId !== "string") return null;
31411
+ var parts = scopedId.split(".");
31412
+ if (parts.length !== 3) return null;
31413
+ return {
31414
+ scope: parts[0],
31415
+ packageName: parts[1],
31416
+ componentName: parts[2]
31417
+ };
31418
+ }
31419
+
31420
+ /**
31421
+ * Pull the bare component name from a scoped or unscoped id.
31422
+ *
31423
+ * @param {string} idOrName
31424
+ * @returns {string}
31425
+ */
31426
+ function bareComponentName(idOrName) {
31427
+ if (typeof idOrName !== "string") return "";
31428
+ var parts = idOrName.split(".");
31429
+ return parts[parts.length - 1] || "";
31430
+ }
31431
+
31348
31432
  var _componentMap = {};
31433
+
31434
+ /**
31435
+ * Resolve the registry key for a component lookup. Returns null if no
31436
+ * match exists.
31437
+ *
31438
+ * Lookup order (the LAYOUT ITEM is the source of truth):
31439
+ * 1. EXACT match on `component` — covers the new scoped form
31440
+ * (`scope.package.X`) and any legacy `.dash.js` that already set
31441
+ * `config.id` to a scoped value.
31442
+ * 2. If `component` is bare (no dots) AND we have a packageId hint
31443
+ * on the layout item, build the scoped id and try that.
31444
+ * 3. Bare-name fallback: scan the map for any key ending in
31445
+ * `.${component}`. If exactly one matches, use it. If multiple
31446
+ * match (the collision case), prefer the one matching the layout
31447
+ * item's `packageId` / `_sourcePackage`; otherwise fall through
31448
+ * to the first match (deterministic, but also logs a warning so
31449
+ * callers can spot the ambiguity).
31450
+ *
31451
+ * Step (3) is the back-compat path for layouts authored before scoped
31452
+ * registration landed. New layouts ALWAYS resolve via step (1) — the
31453
+ * `component` field is already scoped.
31454
+ */
31455
+ function resolveComponentKey(componentMap, component, data) {
31456
+ if (!component) return null;
31457
+ if (component in componentMap) return component;
31458
+ if (typeof component !== "string") return null;
31459
+ if (component.includes(".")) return null;
31460
+ var packageId = (data === null || data === void 0 ? void 0 : data.packageId) || (data === null || data === void 0 ? void 0 : data._sourcePackage) || (data === null || data === void 0 ? void 0 : data.packageName) || null;
31461
+ if (packageId) {
31462
+ var scoped = makeScopedComponentId(packageId, component);
31463
+ if (scoped in componentMap) return scoped;
31464
+ }
31465
+ var suffix = ".".concat(component);
31466
+ var matches = Object.keys(componentMap).filter(function (k) {
31467
+ return k.endsWith(suffix);
31468
+ });
31469
+ if (matches.length === 0) return null;
31470
+ if (matches.length === 1) return matches[0];
31471
+ if (packageId) {
31472
+ var target = makeScopedComponentId(packageId, component);
31473
+ if (matches.includes(target)) return target;
31474
+ }
31475
+ return matches[0];
31476
+ }
31349
31477
  var _containerComponent = null;
31350
31478
  var _gridContainerComponent = null;
31351
31479
  var ComponentManager = {
@@ -31449,15 +31577,18 @@ var ComponentManager = {
31449
31577
  * @returns {Widget} the Widget in the component map
31450
31578
  */
31451
31579
  getComponent: function getComponent(component) {
31580
+ var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
31452
31581
  try {
31453
31582
  // console.log("get component");
31454
31583
  if (component && this.componentMap()) {
31455
31584
  if (ComponentManager.isLayoutContainer(component) === false) {
31456
31585
  var m = this.componentMap();
31457
- // Try exact match first (works for both scoped ids and legacy names)
31458
- var cmp = component in m ? m[component] : null;
31459
- if (cmp !== null) {
31460
- cmp["componentName"] = component;
31586
+ // Resolve through the scoped/bare lookup pipeline so layouts
31587
+ // authored under either format land at the same registry key.
31588
+ var resolvedKey = resolveComponentKey(m, component, data);
31589
+ var cmp = resolvedKey ? m[resolvedKey] : null;
31590
+ if (cmp !== null && cmp !== undefined) {
31591
+ cmp["componentName"] = resolvedKey;
31461
31592
  return cmp;
31462
31593
  }
31463
31594
  } else {
@@ -31635,17 +31766,20 @@ var ComponentManager = {
31635
31766
 
31636
31767
  // get the component configuration from the map
31637
31768
  var components = this.map();
31638
- if (component in components) {
31769
+ var resolvedKey = resolveComponentKey(components, component, data);
31770
+ if (resolvedKey && resolvedKey in components) {
31639
31771
  // let c = deepCopy(components['component']);
31640
31772
 
31641
31773
  // we have to make sure that we remove the component if this is a context
31642
31774
 
31643
- var tempComponent = components[component];
31775
+ var tempComponent = components[resolvedKey];
31644
31776
  delete tempComponent["component"];
31645
31777
  var c = JSON.parse(JSON.stringify(tempComponent));
31646
31778
 
31647
- // tack on the component name
31648
- c["component"] = component;
31779
+ // Carry the canonical scoped id forward so callers (LayoutModel,
31780
+ // ComponentManager.getComponent) can rewrite layout items'
31781
+ // `component` to the scoped form on first load.
31782
+ c["component"] = resolvedKey;
31649
31783
 
31650
31784
  // if no userConfig key. let's add it for the next step
31651
31785
  if ("userConfig" in c === false) {
@@ -57406,26 +57540,36 @@ var DashboardStageInner = function DashboardStageInner(_ref3) {
57406
57540
  try {
57407
57541
  var _message$workspaces;
57408
57542
  var workspaces = deepCopy(message["workspaces"]);
57543
+ // LayoutModel returns null when normalization throws (e.g. a
57544
+ // widget config that references a component the registry can't
57545
+ // resolve yet — common right after a fresh dashboard install
57546
+ // where some widgets are still downloading). Filter nulls so
57547
+ // every renderer that walks the layout sees only well-formed
57548
+ // items and never crashes on `Cannot read properties of null
57549
+ // (reading 'type')` or similar.
57409
57550
  var workspacesTemp = workspaces.map(function (ws) {
57410
- var tempLayout = ws["layout"].map(function (layoutOG) {
57551
+ ws["layout"] = (ws["layout"] || []).map(function (layoutOG) {
57411
57552
  return LayoutModel(layoutOG, workspaces, ws["id"]);
57553
+ }).filter(function (item) {
57554
+ return item != null;
57412
57555
  });
57413
- ws["layout"] = tempLayout;
57414
- // Normalize page layouts too
57415
57556
  if (ws.pages && Array.isArray(ws.pages)) {
57416
57557
  ws.pages = ws.pages.map(function (page) {
57417
57558
  if (page.layout && Array.isArray(page.layout)) {
57418
57559
  page.layout = page.layout.map(function (layoutOG) {
57419
57560
  return LayoutModel(layoutOG, workspaces, ws["id"]);
57561
+ }).filter(function (item) {
57562
+ return item != null;
57420
57563
  });
57421
57564
  }
57422
57565
  return page;
57423
57566
  });
57424
57567
  }
57425
- // Normalize sidebar layout
57426
57568
  if (ws.sidebarLayout && Array.isArray(ws.sidebarLayout)) {
57427
57569
  ws.sidebarLayout = ws.sidebarLayout.map(function (layoutOG) {
57428
57570
  return LayoutModel(layoutOG, workspaces, ws["id"]);
57571
+ }).filter(function (item) {
57572
+ return item != null;
57429
57573
  });
57430
57574
  }
57431
57575
  return WorkspaceModel(ws);
@@ -58209,13 +58353,16 @@ var DashboardStageInner = function DashboardStageInner(_ref3) {
58209
58353
  }
58210
58354
  function handleSaveWorkspaceComplete(e, message) {
58211
58355
 
58212
- // Reconstruct workspaces through LayoutModel (same as load path)
58356
+ // Reconstruct workspaces through LayoutModel (same as load path).
58357
+ // Filter nulls so a partially-failed normalize doesn't poison the
58358
+ // layout array — see handleLoadWorkspacesComplete for the rationale.
58213
58359
  var workspaces = deepCopy(message["workspaces"]);
58214
58360
  var workspacesTemp = workspaces.map(function (ws) {
58215
- var tempLayout = ws["layout"].map(function (layoutOG) {
58361
+ ws["layout"] = (ws["layout"] || []).map(function (layoutOG) {
58216
58362
  return LayoutModel(layoutOG, workspaces, ws["id"]);
58363
+ }).filter(function (item) {
58364
+ return item != null;
58217
58365
  });
58218
- ws["layout"] = tempLayout;
58219
58366
  return WorkspaceModel(ws);
58220
58367
  });
58221
58368
  pub.pub("dashboard.workspaceChange", {
@@ -62066,5 +62213,5 @@ function MarkdownFormEditor(_ref8) {
62066
62213
 
62067
62214
  ComponentManager.registerContainerTypes(LayoutContainer, LayoutGridContainer);
62068
62215
 
62069
- 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, ChatCore, ChatInput, ChatMessages, 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, DashboardActionsApi, DashboardApi, DashboardContext, DashboardFooter, DashboardHeader, DashboardMenuItem, DashboardModel, DashboardMonitor, DashboardPublisher, DashboardStage, DashboardThemeProvider, DashboardWizardModal, DashboardWrapper, ElectronDashboardApi, ErrorBoundary, ExternalWidget, GRID_CELL_WIDGET_TYPE, HARMONY_STRATEGIES, LAYOUT_LIST, LAYOUT_LIST_COMPLETE, LAYOUT_LIST_ERROR, LAYOUT_SAVE, LAYOUT_SAVE_COMPLETE, LAYOUT_SAVE_ERROR, Layout, LayoutBuilder, LayoutBuilderAddItemModal, LayoutBuilderConfigContainerMenuItem, LayoutBuilderConfigMenuItem, LayoutBuilderConfigModal, LayoutBuilderEditItemModal, LayoutBuilderEventModal, LayoutBuilderGridItem, LayoutContainer, LayoutDragBuilder, LayoutDragBuilderEdit, LayoutGridContainer, LayoutManagerModal, LayoutModel, LayoutQuickAddMenu, MCP_CALL_TOOL_COMPLETE, MCP_CALL_TOOL_ERROR, MCP_GET_CATALOG_COMPLETE, MCP_GET_CATALOG_ERROR, MCP_LIST_RESOURCES_COMPLETE, MCP_LIST_RESOURCES_ERROR, MCP_LIST_TOOLS_COMPLETE, MCP_LIST_TOOLS_ERROR, MCP_READ_RESOURCE_COMPLETE, MCP_READ_RESOURCE_ERROR, MCP_RUN_AUTH_COMPLETE, MCP_RUN_AUTH_ERROR, MCP_SERVER_STATUS_COMPLETE, MCP_SERVER_STATUS_ERROR, MCP_START_SERVER_COMPLETE, MCP_START_SERVER_ERROR, MCP_STOP_SERVER_COMPLETE, MCP_STOP_SERVER_ERROR, MENU_ITEMS_DELETE, MENU_ITEMS_DELETE_COMPLETE, MENU_ITEMS_DELETE_ERROR, MENU_ITEMS_LIST, MENU_ITEMS_LIST_COMPLETE, MENU_ITEMS_LIST_ERROR, MENU_ITEMS_SAVE, MENU_ITEMS_SAVE_COMPLETE, MENU_ITEMS_SAVE_ERROR, MainMenu, MainMenuItem, MainMenuSection, MarkdownFormEditor, McpServerPicker, MenuItemModel, MenuSlideOverlay, MergeCellsModal, MessageBubble, 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, PageTabBar, PanelCode, PanelEditItem, PanelEditItemHandlers, PanelEditItemNotifications, PanelEditItemProviders, PinnedSidebar, 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, StreamingText, 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, ToolCallBlock, ToolSelector, WELCOME_STORAGE_KEY, WORKSPACE_DELETE, WORKSPACE_DELETE_COMPLETE, WORKSPACE_DELETE_ERROR, WORKSPACE_LIST, WORKSPACE_LIST_COMPLETE, WORKSPACE_LIST_ERROR, WORKSPACE_SAVE, WORKSPACE_SAVE_COMPLETE, WORKSPACE_SAVE_ERROR, WebDashboardApi, WelcomePrompt, Widget, WidgetApi, WidgetConfigPanel, WidgetContext, WidgetFactory, WidgetNotFound, WidgetPopoutStage, WidgetProviderWrapper, WidgetSidebar, WizardCustomizeStep, WizardDiscoverStep, Workspace, WorkspaceContext, WorkspaceFooter, WorkspaceMenu, WorkspaceModel, WorkspaceScopeContext, 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, moveWidgetAcrossContainers, numChildrenForLayout, parse, removeItemFromLayout, renderComponent, renderGridLayout, renderGridLayoutFlow, _renderLayout as renderLayout, renderLayoutMenu, replaceItemInLayout, resolveIcon, serialize, setHostModules, traverseParentTree, updateLayoutItem, updateParentForItem, useDashboard, useMcpDashServer, useMcpProvider, useNotifications, useProvider, useProviderClient, useScheduler, useWebSocketProvider, useWidgetEvents, useWidgetProviders, useWidgetSchedulerStatus, useWizardState, validateCellMerge, validateGridCell, validateGridPlacement, validateWidgetPlacement, widgetCountToTemplate, withProviderDetection };
62216
+ 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, ChatCore, ChatInput, ChatMessages, 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, DashboardActionsApi, DashboardApi, DashboardContext, DashboardFooter, DashboardHeader, DashboardMenuItem, DashboardModel, DashboardMonitor, DashboardPublisher, DashboardStage, DashboardThemeProvider, DashboardWizardModal, DashboardWrapper, ElectronDashboardApi, ErrorBoundary, ExternalWidget, GRID_CELL_WIDGET_TYPE, HARMONY_STRATEGIES, LAYOUT_LIST, LAYOUT_LIST_COMPLETE, LAYOUT_LIST_ERROR, LAYOUT_SAVE, LAYOUT_SAVE_COMPLETE, LAYOUT_SAVE_ERROR, Layout, LayoutBuilder, LayoutBuilderAddItemModal, LayoutBuilderConfigContainerMenuItem, LayoutBuilderConfigMenuItem, LayoutBuilderConfigModal, LayoutBuilderEditItemModal, LayoutBuilderEventModal, LayoutBuilderGridItem, LayoutContainer, LayoutDragBuilder, LayoutDragBuilderEdit, LayoutGridContainer, LayoutManagerModal, LayoutModel, LayoutQuickAddMenu, MCP_CALL_TOOL_COMPLETE, MCP_CALL_TOOL_ERROR, MCP_GET_CATALOG_COMPLETE, MCP_GET_CATALOG_ERROR, MCP_LIST_RESOURCES_COMPLETE, MCP_LIST_RESOURCES_ERROR, MCP_LIST_TOOLS_COMPLETE, MCP_LIST_TOOLS_ERROR, MCP_READ_RESOURCE_COMPLETE, MCP_READ_RESOURCE_ERROR, MCP_RUN_AUTH_COMPLETE, MCP_RUN_AUTH_ERROR, MCP_SERVER_STATUS_COMPLETE, MCP_SERVER_STATUS_ERROR, MCP_START_SERVER_COMPLETE, MCP_START_SERVER_ERROR, MCP_STOP_SERVER_COMPLETE, MCP_STOP_SERVER_ERROR, MENU_ITEMS_DELETE, MENU_ITEMS_DELETE_COMPLETE, MENU_ITEMS_DELETE_ERROR, MENU_ITEMS_LIST, MENU_ITEMS_LIST_COMPLETE, MENU_ITEMS_LIST_ERROR, MENU_ITEMS_SAVE, MENU_ITEMS_SAVE_COMPLETE, MENU_ITEMS_SAVE_ERROR, MainMenu, MainMenuItem, MainMenuSection, MarkdownFormEditor, McpServerPicker, MenuItemModel, MenuSlideOverlay, MergeCellsModal, MessageBubble, 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, PageTabBar, PanelCode, PanelEditItem, PanelEditItemHandlers, PanelEditItemNotifications, PanelEditItemProviders, PinnedSidebar, 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, StreamingText, 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, ToolCallBlock, ToolSelector, WELCOME_STORAGE_KEY, WORKSPACE_DELETE, WORKSPACE_DELETE_COMPLETE, WORKSPACE_DELETE_ERROR, WORKSPACE_LIST, WORKSPACE_LIST_COMPLETE, WORKSPACE_LIST_ERROR, WORKSPACE_SAVE, WORKSPACE_SAVE_COMPLETE, WORKSPACE_SAVE_ERROR, WebDashboardApi, WelcomePrompt, Widget, WidgetApi, WidgetConfigPanel, WidgetContext, WidgetFactory, WidgetNotFound, WidgetPopoutStage, WidgetProviderWrapper, WidgetSidebar, WizardCustomizeStep, WizardDiscoverStep, Workspace, WorkspaceContext, WorkspaceFooter, WorkspaceMenu, WorkspaceModel, WorkspaceScopeContext, addChildToLayoutItem, addItemToItemLayout, bareComponentName, 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, makeScopedComponentId, mcpJsonToFormState, moveWidgetAcrossContainers, numChildrenForLayout, parse, parseScopedComponentId, removeItemFromLayout, renderComponent, renderGridLayout, renderGridLayoutFlow, _renderLayout as renderLayout, renderLayoutMenu, replaceItemInLayout, resolveIcon, serialize, setHostModules, traverseParentTree, updateLayoutItem, updateParentForItem, useDashboard, useMcpDashServer, useMcpProvider, useNotifications, useProvider, useProviderClient, useScheduler, useWebSocketProvider, useWidgetEvents, useWidgetProviders, useWidgetSchedulerStatus, useWizardState, validateCellMerge, validateGridCell, validateGridPlacement, validateWidgetPlacement, widgetCountToTemplate, withProviderDetection };
62070
62217
  //# sourceMappingURL=index.esm.js.map