@ltm-blueverse/alpha-semantic-hub 0.7.0

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.
Files changed (146) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1674 -0
  3. package/explorer/README.md +282 -0
  4. package/explorer/src/App.css +0 -0
  5. package/explorer/src/App.tsx +2035 -0
  6. package/explorer/src/ErrorBoundary.tsx +112 -0
  7. package/explorer/src/ExploreWorkspaceTabs.tsx +29 -0
  8. package/explorer/src/assets/hero.png +0 -0
  9. package/explorer/src/assets/react.svg +1 -0
  10. package/explorer/src/assets/vite.svg +1 -0
  11. package/explorer/src/explorerCapabilities.ts +24 -0
  12. package/explorer/src/index.css +71 -0
  13. package/explorer/src/main.tsx +7 -0
  14. package/explorer/src/store/edgePairKeys.d.ts +2 -0
  15. package/explorer/src/store/edgePairKeys.js +7 -0
  16. package/explorer/src/store/graphStore.ts +183 -0
  17. package/explorer/src/store/registryStore.ts +78 -0
  18. package/explorer/src/types.d.ts +16 -0
  19. package/explorer/src/ui/primitives.css +414 -0
  20. package/explorer/src/ui/primitives.tsx +170 -0
  21. package/explorer/src/workspaces/DecisionWorkspace/DecisionWorkspace.tsx +279 -0
  22. package/explorer/src/workspaces/DiffMergeWorkspace/DiffMergeWorkspace.tsx +121 -0
  23. package/explorer/src/workspaces/EnrichWorkspace/EntityResolutionTab.tsx +454 -0
  24. package/explorer/src/workspaces/EnrichWorkspace/RegistryTab.tsx +285 -0
  25. package/explorer/src/workspaces/GraphWorkspace/GraphCanvas.tsx +2673 -0
  26. package/explorer/src/workspaces/GraphWorkspace/GraphInspectorPanel.tsx +771 -0
  27. package/explorer/src/workspaces/GraphWorkspace/GraphLoadingOverlay.tsx +410 -0
  28. package/explorer/src/workspaces/GraphWorkspace/GraphWorkspace.tsx +3584 -0
  29. package/explorer/src/workspaces/GraphWorkspace/MarkdownContentViewer.tsx +705 -0
  30. package/explorer/src/workspaces/GraphWorkspace/SigmaSceneAdapter.tsx +55 -0
  31. package/explorer/src/workspaces/GraphWorkspace/TimelinePanel.tsx +193 -0
  32. package/explorer/src/workspaces/GraphWorkspace/behaviors/clickSelectionBehavior.ts +29 -0
  33. package/explorer/src/workspaces/GraphWorkspace/behaviors/fitViewBehavior.ts +15 -0
  34. package/explorer/src/workspaces/GraphWorkspace/behaviors/focusCameraBehavior.ts +25 -0
  35. package/explorer/src/workspaces/GraphWorkspace/behaviors/hoverActivationBehavior.ts +15 -0
  36. package/explorer/src/workspaces/GraphWorkspace/behaviors/pathHighlightBehavior.ts +52 -0
  37. package/explorer/src/workspaces/GraphWorkspace/behaviors/searchFocusBehavior.ts +36 -0
  38. package/explorer/src/workspaces/GraphWorkspace/behaviors/types.ts +41 -0
  39. package/explorer/src/workspaces/GraphWorkspace/behaviors/viewModeSwitchBehavior.ts +29 -0
  40. package/explorer/src/workspaces/GraphWorkspace/graphAnalytics.ts +779 -0
  41. package/explorer/src/workspaces/GraphWorkspace/graphColorLegend.ts +36 -0
  42. package/explorer/src/workspaces/GraphWorkspace/graphConfig.ts +102 -0
  43. package/explorer/src/workspaces/GraphWorkspace/graphEntityShape.ts +34 -0
  44. package/explorer/src/workspaces/GraphWorkspace/graphLoading.ts +84 -0
  45. package/explorer/src/workspaces/GraphWorkspace/graphSceneLayers.ts +775 -0
  46. package/explorer/src/workspaces/GraphWorkspace/graphSceneState.ts +2753 -0
  47. package/explorer/src/workspaces/GraphWorkspace/graphStructureLayer.ts +335 -0
  48. package/explorer/src/workspaces/GraphWorkspace/graphTheme.ts +1078 -0
  49. package/explorer/src/workspaces/GraphWorkspace/graphViewCopy.ts +41 -0
  50. package/explorer/src/workspaces/GraphWorkspace/localGraphTransition.ts +9 -0
  51. package/explorer/src/workspaces/GraphWorkspace/markdownEditorState.ts +114 -0
  52. package/explorer/src/workspaces/GraphWorkspace/markdownResourceClient.ts +103 -0
  53. package/explorer/src/workspaces/GraphWorkspace/markdownUrlSafety.ts +29 -0
  54. package/explorer/src/workspaces/GraphWorkspace/nodeMarkdownSync.ts +81 -0
  55. package/explorer/src/workspaces/GraphWorkspace/pluginRegistryPredicates.ts +24 -0
  56. package/explorer/src/workspaces/GraphWorkspace/plugins/explorationEffectsPlugin.tsx +353 -0
  57. package/explorer/src/workspaces/GraphWorkspace/plugins/explorationEffectsPluginPhaseC.tsx +522 -0
  58. package/explorer/src/workspaces/GraphWorkspace/plugins/index.ts +16 -0
  59. package/explorer/src/workspaces/GraphWorkspace/plugins/legendPlugin.tsx +120 -0
  60. package/explorer/src/workspaces/GraphWorkspace/plugins/neighborhoodPanelPlugin.tsx +231 -0
  61. package/explorer/src/workspaces/GraphWorkspace/plugins/temporalOverlayPlugin.tsx +142 -0
  62. package/explorer/src/workspaces/GraphWorkspace/plugins/types.ts +106 -0
  63. package/explorer/src/workspaces/GraphWorkspace/realtimeGraphAttributes.ts +50 -0
  64. package/explorer/src/workspaces/GraphWorkspace/scene.ts +79 -0
  65. package/explorer/src/workspaces/GraphWorkspace/sigmaNativeRendering.ts +421 -0
  66. package/explorer/src/workspaces/GraphWorkspace/smallGraphLayout.ts +135 -0
  67. package/explorer/src/workspaces/GraphWorkspace/temporalLifecyclePredicates.ts +31 -0
  68. package/explorer/src/workspaces/GraphWorkspace/temporalScrubberBounds.ts +46 -0
  69. package/explorer/src/workspaces/GraphWorkspace/temporalSnapshotGuards.ts +113 -0
  70. package/explorer/src/workspaces/GraphWorkspace/types.ts +395 -0
  71. package/explorer/src/workspaces/GraphWorkspace/useLoadGraph.ts +746 -0
  72. package/explorer/src/workspaces/GraphWorkspace/useMarkdownEditor.ts +177 -0
  73. package/explorer/src/workspaces/ImportExportWorkspace/ImportExportWorkspace.tsx +196 -0
  74. package/explorer/src/workspaces/LineageWorkspace/LineageDiagram.tsx +177 -0
  75. package/explorer/src/workspaces/ManageWorkspace/KGOverviewTab.tsx +291 -0
  76. package/explorer/src/workspaces/ManageWorkspace/OntologySummaryTab.tsx +346 -0
  77. package/explorer/src/workspaces/MemoryWorkspace.tsx +464 -0
  78. package/explorer/src/workspaces/OntologyWorkspace/AlignmentsTab.tsx +437 -0
  79. package/explorer/src/workspaces/OntologyWorkspace/HealthTab.tsx +214 -0
  80. package/explorer/src/workspaces/OntologyWorkspace/OntologyEditor.tsx +770 -0
  81. package/explorer/src/workspaces/OntologyWorkspace/OntologyLoader.tsx +913 -0
  82. package/explorer/src/workspaces/OntologyWorkspace/OntologyManager.tsx +930 -0
  83. package/explorer/src/workspaces/OntologyWorkspace/OntologySearch.tsx +590 -0
  84. package/explorer/src/workspaces/OntologyWorkspace/ProposalReview.tsx +429 -0
  85. package/explorer/src/workspaces/OntologyWorkspace/SKOSVocabularyManager.tsx +696 -0
  86. package/explorer/src/workspaces/OntologyWorkspace/ShaclStudio.tsx +363 -0
  87. package/explorer/src/workspaces/OntologyWorkspace/VersionsTab.tsx +546 -0
  88. package/explorer/src/workspaces/OntologyWorkspace/api.ts +164 -0
  89. package/explorer/src/workspaces/OntologyWorkspace/index.tsx +101 -0
  90. package/explorer/src/workspaces/OntologyWorkspace/ontologyEditorModel.ts +87 -0
  91. package/explorer/src/workspaces/OntologyWorkspace/ontologyUrlState.ts +94 -0
  92. package/explorer/src/workspaces/OntologyWorkspace/types.ts +119 -0
  93. package/explorer/src/workspaces/ReasoningWorkspace.tsx +243 -0
  94. package/explorer/src/workspaces/SparqlWorkspace/SparqlWorkspace.tsx +271 -0
  95. package/explorer/src/workspaces/VocabularyWorkspace/ConceptTree.tsx +97 -0
  96. package/explorer/src/workspaces/VocabularyWorkspace/ImportDropzone.tsx +95 -0
  97. package/explorer/src/workspaces/VocabularyWorkspace/PropertyPanel.tsx +116 -0
  98. package/explorer/src/workspaces/VocabularyWorkspace/Sidebar.tsx +112 -0
  99. package/explorer/src/workspaces/VocabularyWorkspace/VocabularyWorkspace.tsx +70 -0
  100. package/explorer/src/workspaces/VocabularyWorkspace/queries.ts +52 -0
  101. package/explorer/src/workspaces/VocabularyWorkspace/types.ts +24 -0
  102. package/package.json +31 -0
  103. package/plugins/.claude-plugin/README.md +262 -0
  104. package/plugins/.claude-plugin/marketplace.json +20 -0
  105. package/plugins/.claude-plugin/plugin.json +33 -0
  106. package/plugins/.cline-plugin/README.md +32 -0
  107. package/plugins/.cline-plugin/marketplace.json +17 -0
  108. package/plugins/.cline-plugin/plugin.json +35 -0
  109. package/plugins/.codex-plugin/marketplace.json +21 -0
  110. package/plugins/.codex-plugin/plugin.json +35 -0
  111. package/plugins/.continue-plugin/README.md +34 -0
  112. package/plugins/.continue-plugin/marketplace.json +17 -0
  113. package/plugins/.continue-plugin/plugin.json +33 -0
  114. package/plugins/.cursor-plugin/marketplace.json +18 -0
  115. package/plugins/.cursor-plugin/plugin.json +32 -0
  116. package/plugins/.openclaw-plugin/README.md +62 -0
  117. package/plugins/.openclaw-plugin/marketplace.json +18 -0
  118. package/plugins/.openclaw-plugin/plugin.json +46 -0
  119. package/plugins/.pi-plugin/README.md +35 -0
  120. package/plugins/.vscode-plugin/README.md +48 -0
  121. package/plugins/.vscode-plugin/marketplace.json +17 -0
  122. package/plugins/.vscode-plugin/plugin.json +35 -0
  123. package/plugins/.windsurf-plugin/README.md +39 -0
  124. package/plugins/.windsurf-plugin/marketplace.json +17 -0
  125. package/plugins/.windsurf-plugin/plugin.json +35 -0
  126. package/plugins/agents/decision-advisor.md +126 -0
  127. package/plugins/agents/explainability.md +129 -0
  128. package/plugins/agents/kg-assistant.md +73 -0
  129. package/plugins/hooks/hooks.json +12 -0
  130. package/plugins/skills/causal/SKILL.md +74 -0
  131. package/plugins/skills/change/SKILL.md +80 -0
  132. package/plugins/skills/decision/SKILL.md +197 -0
  133. package/plugins/skills/deduplicate/SKILL.md +41 -0
  134. package/plugins/skills/embed/SKILL.md +230 -0
  135. package/plugins/skills/explain/SKILL.md +44 -0
  136. package/plugins/skills/export/SKILL.md +67 -0
  137. package/plugins/skills/extract/SKILL.md +93 -0
  138. package/plugins/skills/ingest/SKILL.md +38 -0
  139. package/plugins/skills/ontology/SKILL.md +89 -0
  140. package/plugins/skills/policy/SKILL.md +66 -0
  141. package/plugins/skills/provenance/SKILL.md +70 -0
  142. package/plugins/skills/query/SKILL.md +84 -0
  143. package/plugins/skills/reason/SKILL.md +201 -0
  144. package/plugins/skills/temporal/SKILL.md +164 -0
  145. package/plugins/skills/validate/SKILL.md +228 -0
  146. package/plugins/skills/visualize/SKILL.md +249 -0
@@ -0,0 +1,353 @@
1
+ import type { CSSProperties } from "react";
2
+
3
+ import type {
4
+ GraphDiagnosticsSnapshot,
5
+ GraphEffectAvailability,
6
+ GraphEffectToggle,
7
+ } from "../types";
8
+ import type { GraphPlugin } from "./types";
9
+
10
+ const EFFECTS_PANEL_ID = "effects-panel";
11
+
12
+ type EffectRowConfig = {
13
+ key: GraphEffectToggle;
14
+ label: string;
15
+ description: string;
16
+ };
17
+
18
+ const EFFECT_ROWS: EffectRowConfig[] = [
19
+ {
20
+ key: "pathPulseEnabled",
21
+ label: "Path Pulse",
22
+ description: "Animated pulse on the active selected path.",
23
+ },
24
+ {
25
+ key: "pathFlowEnabled",
26
+ label: "Path Flow",
27
+ description: "Directional flow accents along the active selected path.",
28
+ },
29
+ {
30
+ key: "lensEnabled",
31
+ label: "Neighborhood Lens",
32
+ description: "Local emphasis around the hovered or selected node.",
33
+ },
34
+ {
35
+ key: "edgeLabelsEnabled",
36
+ label: "Edge Labels",
37
+ description: "Draw the relationship type on graph edges. Off restores label-free edges on dense graphs.",
38
+ },
39
+ {
40
+ key: "legendEnabled",
41
+ label: "Semantic Legend",
42
+ description: "Compact semantic group legend for graph orientation.",
43
+ },
44
+ ];
45
+
46
+ // Maps the effect toggle keys rendered by this plugin to their corresponding
47
+ // availability keys in GraphDiagnosticsSnapshot["effectAvailability"]. Kept
48
+ // local because this plugin only renders a subset of all effects.
49
+ const EFFECT_AVAILABILITY_KEYS: Partial<Record<GraphEffectToggle, keyof GraphDiagnosticsSnapshot["effectAvailability"]>> = {
50
+ pathPulseEnabled: "pathPulse",
51
+ pathFlowEnabled: "pathFlow",
52
+ lensEnabled: "lens",
53
+ edgeLabelsEnabled: "edgeLabels",
54
+ legendEnabled: "legend",
55
+ };
56
+
57
+ function renderAvailabilityText(availability: GraphEffectAvailability) {
58
+ if (availability.available) {
59
+ if (typeof availability.visibleSegments === "number" && typeof availability.segmentCap === "number") {
60
+ return `${availability.reason} · ${availability.visibleSegments}/${availability.segmentCap} segments`;
61
+ }
62
+ return availability.reason;
63
+ }
64
+
65
+ return availability.detail ? `${availability.reason} · ${availability.detail}` : availability.reason;
66
+ }
67
+
68
+ function collectLegendItems(context: Parameters<NonNullable<GraphPlugin["renderPanel"]>>[0]) {
69
+ const groups = new Map<string, { count: number; color: string }>();
70
+ context.graph.forEachNode((_nodeId, attrs) => {
71
+ const semanticGroup = String(attrs.semanticGroup || attrs.nodeType || "entity");
72
+ const color = String(attrs.baseColor || context.theme.palette.semantic[0]);
73
+ const current = groups.get(semanticGroup);
74
+ groups.set(semanticGroup, {
75
+ count: (current?.count ?? 0) + 1,
76
+ color,
77
+ });
78
+ });
79
+
80
+ return [...groups.entries()]
81
+ .map(([group, data]) => ({ group, ...data }))
82
+ .sort((left, right) => right.count - left.count)
83
+ .slice(0, context.theme.effects.legend.maxGroups);
84
+ }
85
+
86
+ function EffectToggleRow({
87
+ label,
88
+ description,
89
+ checked,
90
+ availability,
91
+ onToggle,
92
+ }: {
93
+ label: string;
94
+ description: string;
95
+ checked: boolean;
96
+ availability: GraphEffectAvailability;
97
+ onToggle: () => void;
98
+ }) {
99
+ return (
100
+ <div style={toggleRowStyle}>
101
+ <div style={{ minWidth: 0, flex: 1 }}>
102
+ <div style={rowTitleStyle}>{label}</div>
103
+ <div style={rowDescriptionStyle}>{description}</div>
104
+ <div style={rowMetaStyle}>{renderAvailabilityText(availability)}</div>
105
+ </div>
106
+ <button type="button" onClick={onToggle} style={checked ? toggleButtonActiveStyle : toggleButtonStyle}>
107
+ {checked ? "On" : "Off"}
108
+ </button>
109
+ </div>
110
+ );
111
+ }
112
+
113
+ export const explorationEffectsPlugin: GraphPlugin = {
114
+ id: "exploration-effects",
115
+ mount: () => {},
116
+ unmount: () => {},
117
+ onStateChange: () => {},
118
+ toolbarItems: (context) => [
119
+ {
120
+ id: "effects-toggle",
121
+ label: "Effects",
122
+ title: "Open exploration effects controls",
123
+ active: context.isPanelOpen(EFFECTS_PANEL_ID),
124
+ order: 18,
125
+ onClick: () => context.dispatchAction({ type: "togglePanel", panelId: EFFECTS_PANEL_ID }),
126
+ },
127
+ ],
128
+ renderPanel: (context) => {
129
+ if (!context.isPanelOpen(EFFECTS_PANEL_ID)) {
130
+ return null;
131
+ }
132
+
133
+ const effectsState = context.getEffectsState();
134
+ const diagnosticsSnapshot = context.getDiagnosticsSnapshot();
135
+ const availability = diagnosticsSnapshot?.effectAvailability;
136
+ const legendItems = effectsState.legendEnabled ? collectLegendItems(context) : [];
137
+
138
+ return {
139
+ id: EFFECTS_PANEL_ID,
140
+ title: "Effects",
141
+ placement: "bottom",
142
+ order: 8,
143
+ defaultOpen: false,
144
+ preferredWidth: 420,
145
+ preferredHeight: 320,
146
+ content: (
147
+ <div style={panelBodyStyle}>
148
+ <div style={panelEyebrowStyle}>Exploration effects</div>
149
+
150
+ <div style={sectionStyle}>
151
+ <div style={sectionTitleStyle}>Path and focus</div>
152
+ {EFFECT_ROWS.map((row) => (
153
+ <EffectToggleRow
154
+ key={row.key}
155
+ label={row.label}
156
+ description={row.description}
157
+ checked={effectsState[row.key]}
158
+ availability={
159
+ (EFFECT_AVAILABILITY_KEYS[row.key] !== undefined
160
+ ? availability?.[EFFECT_AVAILABILITY_KEYS[row.key]!]
161
+ : undefined) ?? {
162
+ enabled: effectsState[row.key],
163
+ available: false,
164
+ reason: "Waiting for graph runtime",
165
+ }
166
+ }
167
+ onToggle={() => context.dispatchAction({ type: "toggleEffect", effect: row.key })}
168
+ />
169
+ ))}
170
+ </div>
171
+
172
+ {effectsState.legendEnabled ? (
173
+ <div style={sectionStyle}>
174
+ <div style={sectionTitleStyle}>Semantic legend</div>
175
+ {legendItems.length ? (
176
+ <div style={{ display: "flex", flexDirection: "column", gap: 8 }}>
177
+ {legendItems.map((item) => (
178
+ <div key={item.group} style={legendRowStyle}>
179
+ <span
180
+ style={{
181
+ ...legendSwatchStyle,
182
+ background: item.color,
183
+ boxShadow: `0 0 0 1px rgba(255,255,255,0.06), 0 0 14px ${item.color}40`,
184
+ }}
185
+ />
186
+ <div style={{ minWidth: 0, flex: 1 }}>
187
+ <div style={rowTitleStyle}>{item.group}</div>
188
+ <div style={rowMetaStyle}>{item.count.toLocaleString()} nodes</div>
189
+ </div>
190
+ </div>
191
+ ))}
192
+ </div>
193
+ ) : (
194
+ <div style={emptyTextStyle}>Legend data will populate when graph metadata is available.</div>
195
+ )}
196
+ </div>
197
+ ) : null}
198
+
199
+ {import.meta.env.DEV ? (
200
+ <div style={sectionStyle}>
201
+ <div style={sectionTitleStyle}>Diagnostics</div>
202
+ <EffectToggleRow
203
+ label="Dev Diagnostics"
204
+ description="Inspect plugin, interaction, and effect gating state."
205
+ checked={effectsState.diagnosticsEnabled}
206
+ availability={
207
+ availability?.diagnostics ?? {
208
+ enabled: effectsState.diagnosticsEnabled,
209
+ available: false,
210
+ reason: "Waiting for graph runtime",
211
+ }
212
+ }
213
+ onToggle={() => context.dispatchAction({ type: "toggleEffect", effect: "diagnosticsEnabled" })}
214
+ />
215
+ {effectsState.diagnosticsEnabled && diagnosticsSnapshot ? (
216
+ <details style={detailsStyle}>
217
+ <summary style={summaryStyle}>Runtime snapshot</summary>
218
+ <pre style={diagnosticsPreStyle}>
219
+ {JSON.stringify(diagnosticsSnapshot, null, 2)}
220
+ </pre>
221
+ </details>
222
+ ) : null}
223
+ </div>
224
+ ) : null}
225
+ </div>
226
+ ),
227
+ };
228
+ },
229
+ };
230
+
231
+ const panelBodyStyle: CSSProperties = {
232
+ display: "flex",
233
+ flexDirection: "column",
234
+ gap: 12,
235
+ };
236
+
237
+ const panelEyebrowStyle: CSSProperties = {
238
+ color: "#c99aa3",
239
+ fontSize: 11,
240
+ fontWeight: 700,
241
+ letterSpacing: "0.08em",
242
+ textTransform: "uppercase",
243
+ };
244
+
245
+ const sectionStyle: CSSProperties = {
246
+ display: "flex",
247
+ flexDirection: "column",
248
+ gap: 8,
249
+ padding: "10px 12px",
250
+ borderRadius: 14,
251
+ border: "1px solid rgba(255,255,255,0.06)",
252
+ background: "rgba(255,255,255,0.025)",
253
+ };
254
+
255
+ const sectionTitleStyle: CSSProperties = {
256
+ color: "#ffdfe4",
257
+ fontSize: 12,
258
+ fontWeight: 700,
259
+ };
260
+
261
+ const toggleRowStyle: CSSProperties = {
262
+ display: "flex",
263
+ alignItems: "center",
264
+ gap: 12,
265
+ padding: "8px 0",
266
+ };
267
+
268
+ const rowTitleStyle: CSSProperties = {
269
+ color: "#fff1f3",
270
+ fontSize: 13,
271
+ fontWeight: 600,
272
+ };
273
+
274
+ const rowDescriptionStyle: CSSProperties = {
275
+ color: "#a1b7cf",
276
+ fontSize: 12,
277
+ lineHeight: 1.45,
278
+ };
279
+
280
+ const rowMetaStyle: CSSProperties = {
281
+ color: "#7fc6ff",
282
+ fontSize: 11,
283
+ lineHeight: 1.45,
284
+ };
285
+
286
+ const toggleButtonStyle: CSSProperties = {
287
+ minWidth: 52,
288
+ padding: "8px 10px",
289
+ borderRadius: 999,
290
+ border: "1px solid rgba(255,255,255,0.08)",
291
+ background: "rgba(255,255,255,0.03)",
292
+ color: "#cfe0f4",
293
+ fontSize: 12,
294
+ fontWeight: 700,
295
+ cursor: "pointer",
296
+ };
297
+
298
+ const toggleButtonActiveStyle: CSSProperties = {
299
+ ...toggleButtonStyle,
300
+ background: "rgba(31, 111, 235, 0.24)",
301
+ border: "1px solid rgba(255, 107, 129, 0.28)",
302
+ color: "#eef6ff",
303
+ };
304
+
305
+ const legendRowStyle: CSSProperties = {
306
+ display: "flex",
307
+ alignItems: "center",
308
+ gap: 10,
309
+ padding: "8px 10px",
310
+ borderRadius: 12,
311
+ border: "1px solid rgba(255,255,255,0.06)",
312
+ background: "rgba(255,255,255,0.025)",
313
+ };
314
+
315
+ const legendSwatchStyle: CSSProperties = {
316
+ width: 10,
317
+ height: 10,
318
+ borderRadius: 999,
319
+ flexShrink: 0,
320
+ };
321
+
322
+ const detailsStyle: CSSProperties = {
323
+ borderRadius: 12,
324
+ border: "1px solid rgba(255,255,255,0.05)",
325
+ background: "rgba(0,0,0,0.14)",
326
+ overflow: "hidden",
327
+ };
328
+
329
+ const summaryStyle: CSSProperties = {
330
+ cursor: "pointer",
331
+ padding: "10px 12px",
332
+ color: "#f0cdd3",
333
+ fontSize: 12,
334
+ fontWeight: 700,
335
+ letterSpacing: "0.04em",
336
+ textTransform: "uppercase",
337
+ };
338
+
339
+ const diagnosticsPreStyle: CSSProperties = {
340
+ margin: 0,
341
+ padding: "0 12px 12px",
342
+ color: "#ffdfe4",
343
+ fontSize: 11,
344
+ lineHeight: 1.55,
345
+ whiteSpace: "pre-wrap",
346
+ wordBreak: "break-word",
347
+ };
348
+
349
+ const emptyTextStyle: CSSProperties = {
350
+ color: "#c99aa3",
351
+ fontSize: 12,
352
+ lineHeight: 1.5,
353
+ };