@industry-theme/principal-view-panels 0.12.81 → 0.12.82

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.
@@ -1 +1 @@
1
- {"version":3,"file":"StoryboardListPanel.d.ts","sourceRoot":"","sources":["../../src/panels/StoryboardListPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAEjF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AA2K9D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CA4hDvE,CAAC"}
1
+ {"version":3,"file":"StoryboardListPanel.d.ts","sourceRoot":"","sources":["../../src/panels/StoryboardListPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAEjF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AA2K9D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CAivDvE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { PanelActions, DataSlice } from '@principal-ade/panel-framework-core';
2
- import { CanvasDiscovery, type DiscoveredCanvas, type DiscoveredStoryboard, type DiscoveredTestTrace } from '@principal-ai/principal-view-core';
2
+ import { CanvasDiscovery, type DiscoveredCanvas, type DiscoveredStoryboard, type DiscoveredTestTrace, type DiscoveredDashboard } from '@principal-ai/principal-view-core';
3
3
  import type { FileTree } from '@principal-ai/repository-abstraction';
4
4
  interface UseCanvasDataContext {
5
5
  fileTree: DataSlice<FileTree | null>;
@@ -12,6 +12,7 @@ interface UseCanvasDataReturn {
12
12
  canvases: DiscoveredCanvas[];
13
13
  storyboards: DiscoveredStoryboard[];
14
14
  testTraces: DiscoveredTestTrace[];
15
+ dashboards: DiscoveredDashboard[];
15
16
  isLoading: boolean;
16
17
  error: string | null;
17
18
  refreshCanvases: () => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"useCanvasData.d.ts","sourceRoot":"","sources":["../../../../src/panels/canvas-list/hooks/useCanvasData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EACL,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAErE,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;CACtC;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,oEAAoE;IACpE,SAAS,EAAE,eAAe,CAAC;CAC5B;AAOD;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,uBAG3B,mBAAmB,KAAG,mBAmGxB,CAAC"}
1
+ {"version":3,"file":"useCanvasData.d.ts","sourceRoot":"","sources":["../../../../src/panels/canvas-list/hooks/useCanvasData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EACL,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAErE,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;CACtC;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,oEAAoE;IACpE,SAAS,EAAE,eAAe,CAAC;CAC5B;AAQD;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,uBAG3B,mBAAmB,KAAG,mBAsGxB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { PanelActions, DataSlice } from '@principal-ade/panel-framework-core';
2
- import type { DiscoveredCanvas, DiscoveredStoryboard, DiscoveredTestTrace, DiscoveredWorkflow, WorkflowTemplate } from '@principal-ai/principal-view-core';
2
+ import type { DiscoveredCanvas, DiscoveredStoryboard, DiscoveredTestTrace, DiscoveredDashboard, DiscoveredWorkflow, WorkflowTemplate } from '@principal-ai/principal-view-core';
3
3
  import type { FileTree } from '@principal-ai/repository-abstraction';
4
4
  interface UseCanvasWorkflowDataContext {
5
5
  fileTree: DataSlice<FileTree | null>;
@@ -12,6 +12,7 @@ interface UseCanvasNarrativeDataReturn {
12
12
  canvases: DiscoveredCanvas[];
13
13
  storyboards: DiscoveredStoryboard[];
14
14
  testTraces: DiscoveredTestTrace[];
15
+ dashboards: DiscoveredDashboard[];
15
16
  workflows: Array<{
16
17
  file: DiscoveredWorkflow;
17
18
  template: WorkflowTemplate;
@@ -1 +1 @@
1
- {"version":3,"file":"useCanvasWorkflowData.d.ts","sourceRoot":"","sources":["../../../../src/panels/canvas-list/hooks/useCanvasWorkflowData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAGrE,UAAU,4BAA4B;IACpC,QAAQ,EAAE,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;CACtC;AAED,UAAU,4BAA4B;IACpC,OAAO,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,UAAU,4BAA4B;IACpC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,kBAAkB,CAAC;QAAC,QAAQ,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAC;IAC3E,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,oEAAoE;IACpE,SAAS,EAAE,OAAO,mCAAmC,EAAE,eAAe,CAAC;CACxE;AAKD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,uBAGnC,4BAA4B,KAAG,4BAgIjC,CAAC"}
1
+ {"version":3,"file":"useCanvasWorkflowData.d.ts","sourceRoot":"","sources":["../../../../src/panels/canvas-list/hooks/useCanvasWorkflowData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAGrE,UAAU,4BAA4B;IACpC,QAAQ,EAAE,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;CACtC;AAED,UAAU,4BAA4B;IACpC,OAAO,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,UAAU,4BAA4B;IACpC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,kBAAkB,CAAC;QAAC,QAAQ,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAC;IAC3E,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,oEAAoE;IACpE,SAAS,EAAE,OAAO,mCAAmC,EAAE,eAAe,CAAC;CACxE;AAKD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,uBAGnC,4BAA4B,KAAG,4BAkIjC,CAAC"}
@@ -195390,6 +195390,7 @@ function gt(o, e, t, r2) {
195390
195390
  const EMPTY_CANVAS_ARRAY = [];
195391
195391
  const EMPTY_STORYBOARDS_ARRAY = [];
195392
195392
  const EMPTY_TEST_TRACES_ARRAY = [];
195393
+ const EMPTY_DASHBOARDS_ARRAY = [];
195393
195394
  const useCanvasData = ({
195394
195395
  context: context2,
195395
195396
  actions
@@ -195397,6 +195398,7 @@ const useCanvasData = ({
195397
195398
  const [canvases, setCanvases] = useState(EMPTY_CANVAS_ARRAY);
195398
195399
  const [storyboards, setStoryboards] = useState(EMPTY_STORYBOARDS_ARRAY);
195399
195400
  const [testTraces, setTestTraces] = useState(EMPTY_TEST_TRACES_ARRAY);
195401
+ const [dashboards, setDashboards] = useState(EMPTY_DASHBOARDS_ARRAY);
195400
195402
  const [isLoading, setIsLoading] = useState(true);
195401
195403
  const [error, setError] = useState(null);
195402
195404
  const fileTreeSlice = context2.fileTree;
@@ -195439,6 +195441,7 @@ const useCanvasData = ({
195439
195441
  setCanvases(sortedCanvases);
195440
195442
  setStoryboards(result.storyboards);
195441
195443
  setTestTraces(result.testTraces);
195444
+ setDashboards(result.dashboards);
195442
195445
  lastLoadedSha.current = fileTreeSha;
195443
195446
  } catch (err) {
195444
195447
  const errorMessage = err instanceof Error ? err.message : "Failed to load canvases";
@@ -195460,6 +195463,7 @@ const useCanvasData = ({
195460
195463
  canvases,
195461
195464
  storyboards,
195462
195465
  testTraces,
195466
+ dashboards,
195463
195467
  isLoading,
195464
195468
  error,
195465
195469
  refreshCanvases,
@@ -195475,6 +195479,7 @@ const useCanvasWorkflowData = ({
195475
195479
  canvases,
195476
195480
  storyboards,
195477
195481
  testTraces,
195482
+ dashboards,
195478
195483
  isLoading: canvasesLoading,
195479
195484
  error: canvasesError,
195480
195485
  refreshCanvases,
@@ -195559,6 +195564,7 @@ const useCanvasWorkflowData = ({
195559
195564
  canvases,
195560
195565
  storyboards,
195561
195566
  testTraces,
195567
+ dashboards,
195562
195568
  workflows,
195563
195569
  isLoading,
195564
195570
  error,
@@ -195968,7 +195974,7 @@ const StoryboardListPanel = ({
195968
195974
  actions,
195969
195975
  events
195970
195976
  }) => {
195971
- var _a2;
195977
+ var _a2, _b2;
195972
195978
  const { theme: theme2 } = useTheme();
195973
195979
  const panelRef = useRef(null);
195974
195980
  gt("storyboard-list", events, () => {
@@ -196017,10 +196023,13 @@ const StoryboardListPanel = ({
196017
196023
  const [spanConventionFilter, setSpanConventionFilter] = useState(null);
196018
196024
  const [showSpanFilterDropdown, setShowSpanFilterDropdown] = useState(false);
196019
196025
  const spanFilterRef = useRef(null);
196026
+ const [scopeFilter, setScopeFilter] = useState(null);
196027
+ const [showScopeFilterDropdown, setShowScopeFilterDropdown] = useState(false);
196028
+ const scopeFilterRef = useRef(null);
196020
196029
  const [contextMenu, setContextMenu] = useState(null);
196021
196030
  const [contextMenuCopied, setContextMenuCopied] = useState(false);
196022
196031
  const contextMenuRef = useRef(null);
196023
- const { storyboards, workflows, testTraces, isLoading, error, discovery } = useCanvasWorkflowData({ context: context2, actions });
196032
+ const { storyboards, workflows, testTraces, dashboards, isLoading, error, discovery } = useCanvasWorkflowData({ context: context2, actions });
196024
196033
  useEffect(() => {
196025
196034
  if (!events) return;
196026
196035
  const handleSelectNode = (event) => {
@@ -196088,6 +196097,22 @@ const StoryboardListPanel = ({
196088
196097
  const regular = storyboards.filter((sb) => architectureTypes.includes(sb.canvas.type)).length;
196089
196098
  return { otelCount: otel, staticCount: regular };
196090
196099
  }, [storyboards]);
196100
+ const uniqueScopes = useMemo(() => {
196101
+ const scopeMap = /* @__PURE__ */ new Map();
196102
+ for (const storyboard of storyboards) {
196103
+ if (storyboard.canvas.type !== "otel") continue;
196104
+ for (const workflow of storyboard.workflows) {
196105
+ const workflowWithScope = workflow;
196106
+ const scope = workflowWithScope.instrumentationScope;
196107
+ if (scope) {
196108
+ if (!scopeMap.has(scope) || workflowWithScope.instrumentationScopeLabel) {
196109
+ scopeMap.set(scope, workflowWithScope.instrumentationScopeLabel);
196110
+ }
196111
+ }
196112
+ }
196113
+ }
196114
+ return Array.from(scopeMap.entries()).map(([scope, label]) => ({ scope, label })).sort((a, b) => (a.label || a.scope).localeCompare(b.label || b.scope));
196115
+ }, [storyboards]);
196091
196116
  const uniqueSpanConventions = useMemo(() => {
196092
196117
  const spanMap = /* @__PURE__ */ new Map();
196093
196118
  for (const storyboard of storyboards) {
@@ -196096,15 +196121,19 @@ const StoryboardListPanel = ({
196096
196121
  const referencedSpans = workflow.referencedSpans;
196097
196122
  if (referencedSpans) {
196098
196123
  for (const span of referencedSpans) {
196099
- if (!spanMap.has(span.pattern) || span.label) {
196100
- spanMap.set(span.pattern, span.label);
196124
+ const existing = spanMap.get(span.pattern);
196125
+ if (!existing || span.label || span.scope) {
196126
+ spanMap.set(span.pattern, {
196127
+ label: span.label || (existing == null ? void 0 : existing.label),
196128
+ scope: span.scope || (existing == null ? void 0 : existing.scope)
196129
+ });
196101
196130
  }
196102
196131
  }
196103
196132
  }
196104
196133
  }
196105
196134
  }
196106
- return Array.from(spanMap.entries()).map(([pattern, label]) => ({ pattern, label })).sort((a, b) => (a.label || a.pattern).localeCompare(b.label || b.pattern));
196107
- }, [storyboards]);
196135
+ return Array.from(spanMap.entries()).map(([pattern, info]) => ({ pattern, label: info.label, scope: info.scope })).filter((span) => !scopeFilter || span.scope === scopeFilter).sort((a, b) => (a.label || a.pattern).localeCompare(b.label || b.pattern));
196136
+ }, [storyboards, scopeFilter]);
196108
196137
  const telemetry = useStoryboardListPanelTelemetry({
196109
196138
  isLoading,
196110
196139
  error,
@@ -196237,6 +196266,14 @@ const StoryboardListPanel = ({
196237
196266
  }
196238
196267
  return storyboard.canvas.type === effectiveCanvasTypeFilter;
196239
196268
  });
196269
+ if (scopeFilter && effectiveCanvasTypeFilter === "otel") {
196270
+ filtered = filtered.filter((storyboard) => {
196271
+ return storyboard.workflows.some((workflow) => {
196272
+ const workflowWithScope = workflow;
196273
+ return workflowWithScope.instrumentationScope === scopeFilter;
196274
+ });
196275
+ });
196276
+ }
196240
196277
  if (spanConventionFilter && effectiveCanvasTypeFilter === "otel") {
196241
196278
  filtered = filtered.filter((storyboard) => {
196242
196279
  return storyboard.workflows.some((workflow) => {
@@ -196258,17 +196295,17 @@ const StoryboardListPanel = ({
196258
196295
  });
196259
196296
  }
196260
196297
  return filtered;
196261
- }, [storyboards, searchQuery, effectiveCanvasTypeFilter, spanConventionFilter]);
196298
+ }, [storyboards, searchQuery, effectiveCanvasTypeFilter, scopeFilter, spanConventionFilter]);
196262
196299
  const filteredCanvases = useMemo(() => {
196263
196300
  return filteredStoryboards.map((storyboard) => storyboard.canvas);
196264
196301
  }, [filteredStoryboards]);
196265
196302
  const handleTreeNodeClick = useCallback((node2, event) => {
196266
- var _a3, _b2, _c, _d, _e4, _f, _g;
196303
+ var _a3, _b3, _c, _d, _e4, _f, _g;
196267
196304
  if ((event == null ? void 0 : event.metaKey) || (event == null ? void 0 : event.ctrlKey)) {
196268
196305
  let filePath;
196269
196306
  if (node2.type === "canvas" && ((_a3 = node2.canvas) == null ? void 0 : _a3.path)) {
196270
196307
  filePath = node2.canvas.path;
196271
- } else if (node2.type === "workflow" && "workflow" in node2 && ((_b2 = node2.workflow) == null ? void 0 : _b2.path)) {
196308
+ } else if (node2.type === "workflow" && "workflow" in node2 && ((_b3 = node2.workflow) == null ? void 0 : _b3.path)) {
196272
196309
  filePath = node2.workflow.path;
196273
196310
  } else if (node2.markdownPath) {
196274
196311
  filePath = node2.markdownPath;
@@ -196358,10 +196395,10 @@ const StoryboardListPanel = ({
196358
196395
  }
196359
196396
  }, [events, getCanvasFileInfo, workflows, telemetry]);
196360
196397
  const getNodeFilePath = useCallback((node2) => {
196361
- var _a3, _b2, _c, _d, _e4;
196398
+ var _a3, _b3, _c, _d, _e4;
196362
196399
  if (node2.type === "canvas" && ((_a3 = node2.canvas) == null ? void 0 : _a3.path)) {
196363
196400
  return node2.canvas.path;
196364
- } else if (node2.type === "workflow" && "workflow" in node2 && ((_b2 = node2.workflow) == null ? void 0 : _b2.path)) {
196401
+ } else if (node2.type === "workflow" && "workflow" in node2 && ((_b3 = node2.workflow) == null ? void 0 : _b3.path)) {
196365
196402
  return node2.workflow.path;
196366
196403
  } else if (node2.type === "overview" && node2.markdownPath) {
196367
196404
  return node2.markdownPath;
@@ -196434,6 +196471,23 @@ const StoryboardListPanel = ({
196434
196471
  document.removeEventListener("keydown", handleKeyDown);
196435
196472
  };
196436
196473
  }, [showSpanFilterDropdown]);
196474
+ useEffect(() => {
196475
+ if (!showScopeFilterDropdown) return;
196476
+ const handleClickOutside = (e) => {
196477
+ if (scopeFilterRef.current && !scopeFilterRef.current.contains(e.target)) {
196478
+ setShowScopeFilterDropdown(false);
196479
+ }
196480
+ };
196481
+ const handleKeyDown = (e) => {
196482
+ if (e.key === "Escape") setShowScopeFilterDropdown(false);
196483
+ };
196484
+ document.addEventListener("mousedown", handleClickOutside);
196485
+ document.addEventListener("keydown", handleKeyDown);
196486
+ return () => {
196487
+ document.removeEventListener("mousedown", handleClickOutside);
196488
+ document.removeEventListener("keydown", handleKeyDown);
196489
+ };
196490
+ }, [showScopeFilterDropdown]);
196437
196491
  useEffect(() => {
196438
196492
  handleTreeNodeClickRef.current = handleTreeNodeClick;
196439
196493
  }, [handleTreeNodeClick]);
@@ -196703,6 +196757,145 @@ const StoryboardListPanel = ({
196703
196757
  }
196704
196758
  )
196705
196759
  ] }),
196760
+ effectiveCanvasTypeFilter === "otel" && uniqueScopes.length > 0 && /* @__PURE__ */ jsxs(
196761
+ "div",
196762
+ {
196763
+ ref: scopeFilterRef,
196764
+ style: { position: "relative" },
196765
+ children: [
196766
+ /* @__PURE__ */ jsxs(
196767
+ "button",
196768
+ {
196769
+ onClick: () => setShowScopeFilterDropdown(!showScopeFilterDropdown),
196770
+ style: {
196771
+ width: "100%",
196772
+ display: "flex",
196773
+ alignItems: "center",
196774
+ justifyContent: "space-between",
196775
+ gap: "8px",
196776
+ padding: "8px 12px",
196777
+ background: scopeFilter ? theme2.colors.primary : theme2.colors.backgroundSecondary,
196778
+ border: `1px solid ${theme2.colors.border}`,
196779
+ borderRadius: theme2.radii[2],
196780
+ cursor: "pointer",
196781
+ fontSize: theme2.fontSizes[1],
196782
+ fontFamily: theme2.fonts.body,
196783
+ color: scopeFilter ? theme2.colors.textOnPrimary : theme2.colors.text,
196784
+ transition: "all 0.2s ease"
196785
+ },
196786
+ children: [
196787
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
196788
+ /* @__PURE__ */ jsx(Layers, { size: 14 }),
196789
+ /* @__PURE__ */ jsx("span", { children: scopeFilter ? `Scope: ${((_a2 = uniqueScopes.find((s2) => s2.scope === scopeFilter)) == null ? void 0 : _a2.label) || scopeFilter}` : "Filter by Scope" })
196790
+ ] }),
196791
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "4px" }, children: [
196792
+ scopeFilter && /* @__PURE__ */ jsx(
196793
+ "button",
196794
+ {
196795
+ onClick: (e) => {
196796
+ e.stopPropagation();
196797
+ setScopeFilter(null);
196798
+ setSpanConventionFilter(null);
196799
+ },
196800
+ style: {
196801
+ display: "flex",
196802
+ alignItems: "center",
196803
+ justifyContent: "center",
196804
+ padding: "2px",
196805
+ background: "transparent",
196806
+ border: "none",
196807
+ cursor: "pointer",
196808
+ borderRadius: "4px"
196809
+ },
196810
+ title: "Clear filter",
196811
+ children: /* @__PURE__ */ jsx(X$2, { size: 14, color: scopeFilter ? theme2.colors.textOnPrimary : theme2.colors.textSecondary })
196812
+ }
196813
+ ),
196814
+ /* @__PURE__ */ jsx(
196815
+ ChevronDown,
196816
+ {
196817
+ size: 14,
196818
+ style: {
196819
+ transform: showScopeFilterDropdown ? "rotate(180deg)" : "none",
196820
+ transition: "transform 0.2s ease"
196821
+ }
196822
+ }
196823
+ )
196824
+ ] })
196825
+ ]
196826
+ }
196827
+ ),
196828
+ showScopeFilterDropdown && /* @__PURE__ */ jsx(
196829
+ "div",
196830
+ {
196831
+ style: {
196832
+ position: "absolute",
196833
+ top: "100%",
196834
+ left: 0,
196835
+ right: 0,
196836
+ marginTop: "4px",
196837
+ background: theme2.colors.background,
196838
+ border: `1px solid ${theme2.colors.border}`,
196839
+ borderRadius: theme2.radii[2],
196840
+ boxShadow: "0 4px 12px rgba(0, 0, 0, 0.15)",
196841
+ zIndex: 100,
196842
+ maxHeight: "200px",
196843
+ overflowY: "auto"
196844
+ },
196845
+ children: uniqueScopes.map((scopeInfo) => /* @__PURE__ */ jsxs(
196846
+ "button",
196847
+ {
196848
+ onClick: () => {
196849
+ const newScope = scopeInfo.scope === scopeFilter ? null : scopeInfo.scope;
196850
+ setScopeFilter(newScope);
196851
+ if (newScope !== scopeFilter) {
196852
+ setSpanConventionFilter(null);
196853
+ }
196854
+ setShowScopeFilterDropdown(false);
196855
+ },
196856
+ style: {
196857
+ width: "100%",
196858
+ display: "flex",
196859
+ flexDirection: "column",
196860
+ alignItems: "flex-start",
196861
+ gap: "2px",
196862
+ padding: "8px 12px",
196863
+ background: scopeInfo.scope === scopeFilter ? theme2.colors.backgroundTertiary : "transparent",
196864
+ border: "none",
196865
+ cursor: "pointer",
196866
+ textAlign: "left",
196867
+ transition: "background 0.15s ease"
196868
+ },
196869
+ onMouseEnter: (e) => {
196870
+ if (scopeInfo.scope !== scopeFilter) {
196871
+ e.currentTarget.style.background = theme2.colors.backgroundSecondary;
196872
+ }
196873
+ },
196874
+ onMouseLeave: (e) => {
196875
+ if (scopeInfo.scope !== scopeFilter) {
196876
+ e.currentTarget.style.background = "transparent";
196877
+ }
196878
+ },
196879
+ children: [
196880
+ /* @__PURE__ */ jsx("span", { style: {
196881
+ fontSize: theme2.fontSizes[1],
196882
+ fontFamily: theme2.fonts.body,
196883
+ color: theme2.colors.text
196884
+ }, children: scopeInfo.label || scopeInfo.scope }),
196885
+ scopeInfo.label && /* @__PURE__ */ jsx("span", { style: {
196886
+ fontSize: theme2.fontSizes[0],
196887
+ fontFamily: theme2.fonts.monospace,
196888
+ color: theme2.colors.textMuted
196889
+ }, children: scopeInfo.scope })
196890
+ ]
196891
+ },
196892
+ scopeInfo.scope
196893
+ ))
196894
+ }
196895
+ )
196896
+ ]
196897
+ }
196898
+ ),
196706
196899
  effectiveCanvasTypeFilter === "otel" && uniqueSpanConventions.length > 0 && /* @__PURE__ */ jsxs(
196707
196900
  "div",
196708
196901
  {
@@ -196732,7 +196925,7 @@ const StoryboardListPanel = ({
196732
196925
  children: [
196733
196926
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
196734
196927
  /* @__PURE__ */ jsx(Funnel, { size: 14 }),
196735
- /* @__PURE__ */ jsx("span", { children: spanConventionFilter ? `Surface: ${((_a2 = uniqueSpanConventions.find((s2) => s2.pattern === spanConventionFilter)) == null ? void 0 : _a2.label) || spanConventionFilter}` : "Filter by Surface" })
196928
+ /* @__PURE__ */ jsx("span", { children: spanConventionFilter ? `Surface: ${((_b2 = uniqueSpanConventions.find((s2) => s2.pattern === spanConventionFilter)) == null ? void 0 : _b2.label) || spanConventionFilter}` : "Filter by Surface" })
196736
196929
  ] }),
196737
196930
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "4px" }, children: [
196738
196931
  spanConventionFilter && /* @__PURE__ */ jsx(
@@ -197089,6 +197282,7 @@ const StoryboardListPanel = ({
197089
197282
  CanvasListTreeCore,
197090
197283
  {
197091
197284
  canvases: filteredCanvases,
197285
+ dashboards,
197092
197286
  theme: theme2,
197093
197287
  onClick: handleTreeNodeClick,
197094
197288
  onContextMenu: handleContextMenu,