@mastra/playground-ui 58.0.0-alpha.3 → 58.0.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.
- package/dist/{code-DhrdtZce.cjs → code-B-x-9sJ1.cjs} +16 -4
- package/dist/code-B-x-9sJ1.cjs.map +1 -0
- package/dist/{code-D4Vw_fYq.js → code-BeWhOFT4.js} +16 -4
- package/dist/code-BeWhOFT4.js.map +1 -0
- package/dist/{code-block-BD2N5Yi2.js → code-block-C4caeNBi.js} +2 -2
- package/dist/{code-block-BD2N5Yi2.js.map → code-block-C4caeNBi.js.map} +1 -1
- package/dist/{code-block-fI67m2KV.cjs → code-block-il1MzQTs.cjs} +2 -2
- package/dist/{code-block-fI67m2KV.cjs.map → code-block-il1MzQTs.cjs.map} +1 -1
- package/dist/{code-diff-BHZTS4Zh.js → code-diff-Hao35skN.js} +2 -2
- package/dist/{code-diff-BHZTS4Zh.js.map → code-diff-Hao35skN.js.map} +1 -1
- package/dist/{code-editor-C-0srcj0.js → code-editor-BTxx6wLT.js} +4 -4
- package/dist/{code-editor-C-0srcj0.js.map → code-editor-BTxx6wLT.js.map} +1 -1
- package/dist/{code-editor-CFu_BYpQ.cjs → code-editor-LgrhXmOy.cjs} +3 -3
- package/dist/{code-editor-CFu_BYpQ.cjs.map → code-editor-LgrhXmOy.cjs.map} +1 -1
- package/dist/components/Code.cjs.js +1 -1
- package/dist/components/Code.es.js +1 -1
- package/dist/components/CodeBlock.cjs.js +1 -1
- package/dist/components/CodeBlock.es.js +1 -1
- package/dist/components/CodeDiff.es.js +1 -1
- package/dist/components/CodeEditor.cjs.js +1 -1
- package/dist/components/CodeEditor.es.js +1 -1
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataDetailsPanel.cjs.js +2 -78
- package/dist/components/DataDetailsPanel.cjs.js.map +1 -1
- package/dist/components/DataDetailsPanel.es.js +2 -78
- package/dist/components/DataDetailsPanel.es.js.map +1 -1
- package/dist/components/DataList.cjs.js +5 -5
- package/dist/components/DataList.es.js +5 -5
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +4 -2
- package/dist/components/LogsDataList.cjs.js.map +1 -1
- package/dist/components/LogsDataList.es.js +4 -2
- package/dist/components/LogsDataList.es.js.map +1 -1
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +2 -2
- package/dist/components/SideDialog.cjs.js.map +1 -1
- package/dist/components/SideDialog.es.js +3 -3
- package/dist/components/SideDialog.es.js.map +1 -1
- package/dist/components/ThemeProvider.es.js +1 -1
- package/dist/components/ThemeToggle.es.js +1 -1
- package/dist/components/Workflow.cjs.js +5 -5
- package/dist/components/Workflow.cjs.js.map +1 -1
- package/dist/components/Workflow.es.js +5 -5
- package/dist/components/Workflow.es.js.map +1 -1
- package/dist/components/ai/chat-event.cjs.js +1 -1
- package/dist/components/ai/chat-event.es.js +1 -1
- package/dist/components/ai/plan.cjs.js +1 -1
- package/dist/components/ai/plan.es.js +1 -1
- package/dist/components/ai/tool-call.cjs.js +2 -2
- package/dist/components/ai/tool-call.es.js +2 -2
- package/dist/data-code-section-Cth9zVkj.js +199 -0
- package/dist/data-code-section-Cth9zVkj.js.map +1 -0
- package/dist/{data-code-section-DzLc9O0B.cjs → data-code-section-DE4AgaTU.cjs} +44 -210
- package/dist/data-code-section-DE4AgaTU.cjs.map +1 -0
- package/dist/{data-list-DXjH5wkB.js → data-list-DisTjDHP.js} +3 -3
- package/dist/{data-list-DXjH5wkB.js.map → data-list-DisTjDHP.js.map} +1 -1
- package/dist/{data-list-CH3HAhK5.cjs → data-list-PwFpP_mo.cjs} +3 -3
- package/dist/{data-list-CH3HAhK5.cjs.map → data-list-PwFpP_mo.cjs.map} +1 -1
- package/dist/{data-list-skeleton-K_WmrVke.cjs → data-list-skeleton-CjwR0o3w.cjs} +2 -2
- package/dist/{data-list-skeleton-K_WmrVke.cjs.map → data-list-skeleton-CjwR0o3w.cjs.map} +1 -1
- package/dist/{data-list-skeleton-h4pILqCC.js → data-list-skeleton-DAfM8AjW.js} +2 -2
- package/dist/{data-list-skeleton-h4pILqCC.js.map → data-list-skeleton-DAfM8AjW.js.map} +1 -1
- package/dist/{data-list-spacer-BQ4_YeyT.js → data-list-spacer-BmorAN0V.js} +2 -2
- package/dist/{data-list-spacer-BQ4_YeyT.js.map → data-list-spacer-BmorAN0V.js.map} +1 -1
- package/dist/{data-list-spacer-GIVW2hB1.cjs → data-list-spacer-DEcgVGFM.cjs} +2 -2
- package/dist/{data-list-spacer-GIVW2hB1.cjs.map → data-list-spacer-DEcgVGFM.cjs.map} +1 -1
- package/dist/{data-list-top-LiaWUw5P.js → data-list-top-DpbOA3uw.js} +2 -2
- package/dist/data-list-top-DpbOA3uw.js.map +1 -0
- package/dist/{data-list-top-B-gb-FY6.cjs → data-list-top-WGUY167p.cjs} +2 -2
- package/dist/data-list-top-WGUY167p.cjs.map +1 -0
- package/dist/{data-panel-CPZ2GuZN.js → data-panel-BQVTKo86.js} +2 -2
- package/dist/{data-panel-CPZ2GuZN.js.map → data-panel-BQVTKo86.js.map} +1 -1
- package/dist/{data-panel-CIu6JToM.cjs → data-panel-XPXrhYJI.cjs} +2 -2
- package/dist/{data-panel-CIu6JToM.cjs.map → data-panel-XPXrhYJI.cjs.map} +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
- package/dist/domains/chat/messages/reasoning.cjs.js +1 -1
- package/dist/domains/chat/messages/reasoning.es.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
- package/dist/domains/logs/components/log-data-panel.cjs.js +118 -0
- package/dist/domains/logs/components/log-data-panel.cjs.js.map +1 -0
- package/dist/domains/logs/components/log-data-panel.d.ts +2 -0
- package/dist/domains/logs/components/log-data-panel.es.js +114 -0
- package/dist/domains/logs/components/log-data-panel.es.js.map +1 -0
- package/dist/domains/logs/components/logs-list-view.cjs.js +4 -4
- package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
- package/dist/domains/logs/components/logs-list-view.es.js +4 -4
- package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
- package/dist/domains/logs/components.cjs.js +2 -4
- package/dist/domains/logs/components.cjs.js.map +1 -1
- package/dist/domains/logs/components.es.js +1 -2
- package/dist/domains/logs/components.es.js.map +1 -1
- package/dist/domains/logs.cjs.js +2 -4
- package/dist/domains/logs.cjs.js.map +1 -1
- package/dist/domains/logs.es.js +1 -2
- package/dist/domains/logs.es.js.map +1 -1
- package/dist/domains/memory/components/observation-detail-view.es.js +1 -1
- package/dist/domains/metrics/components/memory-card-view.cjs.js +1 -1
- package/dist/domains/metrics/components/memory-card-view.es.js +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +1 -1
- package/dist/domains/metrics/components/scores-card-view.cjs.js +1 -1
- package/dist/domains/metrics/components/scores-card-view.es.js +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +2 -2
- package/dist/domains/traces/components/span-data-panel-view.es.js +2 -2
- package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
- package/dist/domains/traces/components/span-details-view.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +1 -1
- package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/span-summary-description.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.es.js +1 -1
- package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
- package/dist/domains/traces/components/trace-id-button.es.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
- package/dist/domains/traces/components/traces-list-view.cjs.js +3 -3
- package/dist/domains/traces/components/traces-list-view.es.js +3 -3
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +3 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js +3 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js +3 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +3 -1
- package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +2 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +2 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +1 -1
- package/dist/filter-bar-chip.css +34 -14
- package/dist/layout/tabbed-container.cjs.js +1 -1
- package/dist/layout/tabbed-container.es.js +1 -1
- package/dist/{logs-data-list-XU1hCwI5.js → logs-data-list-5BAeLU57.js} +11 -11
- package/dist/logs-data-list-5BAeLU57.js.map +1 -0
- package/dist/{logs-data-list-BGJTRyO_.cjs → logs-data-list-YL9yLKF3.cjs} +11 -11
- package/dist/logs-data-list-YL9yLKF3.cjs.map +1 -0
- package/dist/{markdown-renderer-BBYgxsXL.js → markdown-renderer-Ces7VyRK.js} +2 -2
- package/dist/{markdown-renderer-BBYgxsXL.js.map → markdown-renderer-Ces7VyRK.js.map} +1 -1
- package/dist/{markdown-renderer-Du_Zd1T-.cjs → markdown-renderer-DtH58325.cjs} +2 -2
- package/dist/{markdown-renderer-Du_Zd1T-.cjs.map → markdown-renderer-DtH58325.cjs.map} +1 -1
- package/dist/{span-payload-primitives-CzLh6axt.js → span-payload-primitives-Buq9V8nK.js} +2 -2
- package/dist/{span-payload-primitives-CzLh6axt.js.map → span-payload-primitives-Buq9V8nK.js.map} +1 -1
- package/dist/{span-payload-primitives-KEXwIaeZ.cjs → span-payload-primitives-CjlNH9C-.cjs} +2 -2
- package/dist/{span-payload-primitives-KEXwIaeZ.cjs.map → span-payload-primitives-CjlNH9C-.cjs.map} +1 -1
- package/dist/src/domains/logs/components/index.d.ts +1 -2
- package/dist/src/domains/logs/components/log-data-panel.d.ts +12 -0
- package/dist/src/ds/components/Code/code.d.ts +3 -1
- package/dist/src/ds/components/DataList/shared.d.ts +2 -2
- package/dist/style.css +50 -36
- package/dist/{theme-provider-C9ih9jSS.js → theme-provider-CQKmlkHX.js} +2 -2
- package/dist/{theme-provider-C9ih9jSS.js.map → theme-provider-CQKmlkHX.js.map} +1 -1
- package/dist/{traces-data-list-DLeKSbaZ.cjs → traces-data-list-Dam8-XW-.cjs} +4 -4
- package/dist/{traces-data-list-DLeKSbaZ.cjs.map → traces-data-list-Dam8-XW-.cjs.map} +1 -1
- package/dist/{traces-data-list-Cjy5a-1f.js → traces-data-list-Dvi0s56v.js} +4 -4
- package/dist/{traces-data-list-Cjy5a-1f.js.map → traces-data-list-Dvi0s56v.js.map} +1 -1
- package/package.json +8 -8
- package/dist/code-D4Vw_fYq.js.map +0 -1
- package/dist/code-DhrdtZce.cjs.map +0 -1
- package/dist/data-code-section-C75shCII.js +0 -365
- package/dist/data-code-section-C75shCII.js.map +0 -1
- package/dist/data-code-section-DzLc9O0B.cjs.map +0 -1
- package/dist/data-list-top-B-gb-FY6.cjs.map +0 -1
- package/dist/data-list-top-LiaWUw5P.js.map +0 -1
- package/dist/domains/logs/components/log-details-view.cjs.js +0 -131
- package/dist/domains/logs/components/log-details-view.cjs.js.map +0 -1
- package/dist/domains/logs/components/log-details-view.d.ts +0 -2
- package/dist/domains/logs/components/log-details-view.es.js +0 -127
- package/dist/domains/logs/components/log-details-view.es.js.map +0 -1
- package/dist/domains/logs/components/logs-layout.cjs.js +0 -36
- package/dist/domains/logs/components/logs-layout.cjs.js.map +0 -1
- package/dist/domains/logs/components/logs-layout.d.ts +0 -2
- package/dist/domains/logs/components/logs-layout.es.js +0 -32
- package/dist/domains/logs/components/logs-layout.es.js.map +0 -1
- package/dist/logs-data-list-BGJTRyO_.cjs.map +0 -1
- package/dist/logs-data-list-XU1hCwI5.js.map +0 -1
- package/dist/src/domains/logs/components/log-details-view.d.ts +0 -12
- package/dist/src/domains/logs/components/logs-layout.d.ts +0 -19
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { Chunk } from '@codemirror/merge';
|
|
3
|
+
import { Text } from '@codemirror/state';
|
|
4
|
+
import { AlignLeftIcon, AlignJustifyIcon, ExpandIcon, XIcon } from 'lucide-react';
|
|
5
|
+
import { useMemo, useState, useRef, useEffect, useCallback } from 'react';
|
|
6
|
+
import { B as Button } from './Button-B8nF87ai.js';
|
|
7
|
+
import { B as ButtonsGroup } from './buttons-group-DsZgrZBZ.js';
|
|
8
|
+
import { C as Code } from './code-BeWhOFT4.js';
|
|
9
|
+
import { C as CopyButton } from './copy-button-DcZ1mdw4.js';
|
|
10
|
+
import { D as DataPanelSectionHeading } from './data-panel-section-heading-CXD1skJD.js';
|
|
11
|
+
import { D as Dialog, a as DialogContent, b as DialogHeader, c as DialogTitle, d as DialogDescription, f as DialogClose } from './dialog-Dtfe1ylw.js';
|
|
12
|
+
import { S as SearchFieldBlock } from './search-field-block-fU3tStmB.js';
|
|
13
|
+
import { raisedSurfaceStyle } from './primitives/raised-surface.es.js';
|
|
14
|
+
import { c as cn } from './cn-65Adrsfj.js';
|
|
15
|
+
|
|
16
|
+
function changedLines(doc, { against, side }) {
|
|
17
|
+
const [a, b] = side === "a" ? [doc, against] : [against, doc];
|
|
18
|
+
const text = Text.of(doc.split("\n"));
|
|
19
|
+
const lines = /* @__PURE__ */ new Set();
|
|
20
|
+
for (const chunk of Chunk.build(Text.of(a.split("\n")), Text.of(b.split("\n")))) {
|
|
21
|
+
const from = side === "a" ? chunk.fromA : chunk.fromB;
|
|
22
|
+
const to = side === "a" ? chunk.endA : chunk.endB;
|
|
23
|
+
if (from >= to) continue;
|
|
24
|
+
for (let pos = from; pos <= Math.min(to, text.length); ) {
|
|
25
|
+
const line = text.lineAt(pos);
|
|
26
|
+
lines.add(line.number - 1);
|
|
27
|
+
if (line.to >= to) break;
|
|
28
|
+
pos = line.to + 1;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return lines;
|
|
32
|
+
}
|
|
33
|
+
const diffLineStyles = {
|
|
34
|
+
removed: "code-diff-removed bg-[color-mix(in_srgb,var(--accent2)_18%,transparent)]",
|
|
35
|
+
added: "code-diff-added bg-[color-mix(in_srgb,var(--accent1)_18%,transparent)]"
|
|
36
|
+
};
|
|
37
|
+
const searchMatchStyle = "code-search-match rounded-sm bg-[color-mix(in_srgb,var(--accent6)_30%,transparent)]";
|
|
38
|
+
function CodeView({ code, changed, diffSide, searchQuery }) {
|
|
39
|
+
const ref = useRef(null);
|
|
40
|
+
const query = searchQuery.toLowerCase();
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
if (query) ref.current?.querySelector(".code-search-match")?.scrollIntoView({ block: "nearest" });
|
|
43
|
+
}, [query]);
|
|
44
|
+
const lineClassName = useCallback(
|
|
45
|
+
(index, text) => {
|
|
46
|
+
const classes = [];
|
|
47
|
+
if (diffSide && changed?.has(index)) classes.push(diffLineStyles[diffSide === "a" ? "removed" : "added"]);
|
|
48
|
+
if (query && text.toLowerCase().includes(query)) classes.push(searchMatchStyle);
|
|
49
|
+
return classes.length ? classes.join(" ") : void 0;
|
|
50
|
+
},
|
|
51
|
+
[changed, diffSide, query]
|
|
52
|
+
);
|
|
53
|
+
return /* @__PURE__ */ jsx("div", { ref, children: /* @__PURE__ */ jsx(
|
|
54
|
+
Code,
|
|
55
|
+
{
|
|
56
|
+
code,
|
|
57
|
+
lang: "json",
|
|
58
|
+
lineClassName,
|
|
59
|
+
className: "font-mono text-caption break-all whitespace-pre-wrap"
|
|
60
|
+
}
|
|
61
|
+
) });
|
|
62
|
+
}
|
|
63
|
+
function DataCodeSection({
|
|
64
|
+
codeStr = "",
|
|
65
|
+
title,
|
|
66
|
+
dialogTitle,
|
|
67
|
+
icon,
|
|
68
|
+
simplified = false,
|
|
69
|
+
className,
|
|
70
|
+
diff,
|
|
71
|
+
actions
|
|
72
|
+
}) {
|
|
73
|
+
const changed = useMemo(() => diff ? changedLines(codeStr, diff) : void 0, [codeStr, diff]);
|
|
74
|
+
const [showAsMultilineText, setShowAsMultilineText] = useState(false);
|
|
75
|
+
const [searchMinimized, setSearchMinimized] = useState(true);
|
|
76
|
+
const [searchQuery, setSearchQuery] = useState("");
|
|
77
|
+
const [expandedOpen, setExpandedOpen] = useState(false);
|
|
78
|
+
const [expandedSearchQuery, setExpandedSearchQuery] = useState("");
|
|
79
|
+
const [expandedMultiline, setExpandedMultiline] = useState(false);
|
|
80
|
+
const hasMultilineText = useMemo(() => {
|
|
81
|
+
try {
|
|
82
|
+
const parsed = JSON.parse(codeStr);
|
|
83
|
+
return containsInnerNewline(parsed || "");
|
|
84
|
+
} catch {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}, [codeStr]);
|
|
88
|
+
const finalCodeStr = showAsMultilineText ? codeStr?.replace(/\\n/g, "\n") : codeStr;
|
|
89
|
+
const expandedFinalCodeStr = expandedMultiline ? codeStr?.replace(/\\n/g, "\n") : codeStr;
|
|
90
|
+
const usePlainTextView = simplified || showAsMultilineText;
|
|
91
|
+
if (!codeStr || codeStr === "null") return null;
|
|
92
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-2", className), children: [
|
|
93
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
94
|
+
/* @__PURE__ */ jsx(DataPanelSectionHeading, { icon, children: title }),
|
|
95
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
96
|
+
actions,
|
|
97
|
+
!usePlainTextView && /* @__PURE__ */ jsx(
|
|
98
|
+
SearchFieldBlock,
|
|
99
|
+
{
|
|
100
|
+
name: "code-section-search",
|
|
101
|
+
label: "Search code",
|
|
102
|
+
labelIsHidden: true,
|
|
103
|
+
placeholder: "Search...",
|
|
104
|
+
value: searchQuery,
|
|
105
|
+
onChange: (e) => setSearchQuery(e.target.value),
|
|
106
|
+
onReset: () => setSearchQuery(""),
|
|
107
|
+
size: "sm",
|
|
108
|
+
isMinimized: searchMinimized,
|
|
109
|
+
onMinimizedChange: setSearchMinimized
|
|
110
|
+
}
|
|
111
|
+
),
|
|
112
|
+
/* @__PURE__ */ jsxs(ButtonsGroup, { size: "sm", children: [
|
|
113
|
+
/* @__PURE__ */ jsx(CopyButton, { content: codeStr || "No content" }),
|
|
114
|
+
hasMultilineText && /* @__PURE__ */ jsx(
|
|
115
|
+
Button,
|
|
116
|
+
{
|
|
117
|
+
"aria-label": showAsMultilineText ? "Show escaped newlines" : "Show multiline text",
|
|
118
|
+
tooltip: showAsMultilineText ? "Show escaped newlines" : "Show multiline text",
|
|
119
|
+
onClick: () => setShowAsMultilineText((v) => !v),
|
|
120
|
+
children: showAsMultilineText ? /* @__PURE__ */ jsx(AlignLeftIcon, {}) : /* @__PURE__ */ jsx(AlignJustifyIcon, {})
|
|
121
|
+
}
|
|
122
|
+
),
|
|
123
|
+
/* @__PURE__ */ jsx(Button, { "aria-label": "Expand", tooltip: "Expand", onClick: () => setExpandedOpen(true), children: /* @__PURE__ */ jsx(ExpandIcon, {}) })
|
|
124
|
+
] })
|
|
125
|
+
] })
|
|
126
|
+
] }),
|
|
127
|
+
/* @__PURE__ */ jsx(
|
|
128
|
+
"div",
|
|
129
|
+
{
|
|
130
|
+
className: cn(
|
|
131
|
+
raisedSurfaceStyle,
|
|
132
|
+
"max-h-[30vh] overflow-hidden overflow-y-auto rounded-lg p-3 text-caption break-all text-muted-foreground"
|
|
133
|
+
),
|
|
134
|
+
children: usePlainTextView ? /* @__PURE__ */ jsx("div", { className: "font-mono break-all text-muted-foreground", children: /* @__PURE__ */ jsx("pre", { className: "text-wrap", children: finalCodeStr }) }) : /* @__PURE__ */ jsx(CodeView, { code: codeStr, changed, diffSide: diff?.side, searchQuery })
|
|
135
|
+
}
|
|
136
|
+
),
|
|
137
|
+
/* @__PURE__ */ jsx(Dialog, { open: expandedOpen, onOpenChange: setExpandedOpen, children: /* @__PURE__ */ jsxs(DialogContent, { className: "grid h-[calc(100vh-6rem)]! max-w-[90vw]! grid-rows-[auto_1fr] [&>.absolute]:hidden", children: [
|
|
138
|
+
/* @__PURE__ */ jsxs(DialogHeader, { className: "flex-row items-center justify-between", children: [
|
|
139
|
+
/* @__PURE__ */ jsx(DialogTitle, { className: "flex min-w-0 items-center gap-1.5 truncate text-caption [&>svg]:size-3.5", children: dialogTitle ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
140
|
+
icon,
|
|
141
|
+
title
|
|
142
|
+
] }) }),
|
|
143
|
+
/* @__PURE__ */ jsx(DialogDescription, { children: "Expanded code view" }),
|
|
144
|
+
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [
|
|
145
|
+
!expandedMultiline && /* @__PURE__ */ jsx(
|
|
146
|
+
SearchFieldBlock,
|
|
147
|
+
{
|
|
148
|
+
name: "expanded-code-search",
|
|
149
|
+
label: "Search code",
|
|
150
|
+
labelIsHidden: true,
|
|
151
|
+
placeholder: "Search...",
|
|
152
|
+
value: expandedSearchQuery,
|
|
153
|
+
onChange: (e) => setExpandedSearchQuery(e.target.value),
|
|
154
|
+
onReset: () => setExpandedSearchQuery(""),
|
|
155
|
+
size: "sm"
|
|
156
|
+
}
|
|
157
|
+
),
|
|
158
|
+
/* @__PURE__ */ jsxs(ButtonsGroup, { size: "sm", children: [
|
|
159
|
+
/* @__PURE__ */ jsx(CopyButton, { content: codeStr || "No content" }),
|
|
160
|
+
hasMultilineText && /* @__PURE__ */ jsx(
|
|
161
|
+
Button,
|
|
162
|
+
{
|
|
163
|
+
"aria-label": expandedMultiline ? "Show escaped newlines" : "Show multiline text",
|
|
164
|
+
tooltip: expandedMultiline ? "Show escaped newlines" : "Show multiline text",
|
|
165
|
+
onClick: () => setExpandedMultiline((v) => !v),
|
|
166
|
+
children: expandedMultiline ? /* @__PURE__ */ jsx(AlignLeftIcon, {}) : /* @__PURE__ */ jsx(AlignJustifyIcon, {})
|
|
167
|
+
}
|
|
168
|
+
),
|
|
169
|
+
/* @__PURE__ */ jsx(DialogClose, { asChild: true, children: /* @__PURE__ */ jsx(Button, { "aria-label": "Close", tooltip: "Close", children: /* @__PURE__ */ jsx(XIcon, {}) }) })
|
|
170
|
+
] })
|
|
171
|
+
] })
|
|
172
|
+
] }),
|
|
173
|
+
/* @__PURE__ */ jsx("div", { className: "overflow-auto px-6 pb-6", children: expandedMultiline ? /* @__PURE__ */ jsx(
|
|
174
|
+
"div",
|
|
175
|
+
{
|
|
176
|
+
className: cn(
|
|
177
|
+
raisedSurfaceStyle,
|
|
178
|
+
"overflow-hidden overflow-y-auto rounded-lg p-3 text-caption break-all text-muted-foreground"
|
|
179
|
+
),
|
|
180
|
+
children: /* @__PURE__ */ jsx("div", { className: "font-mono break-all text-muted-foreground", children: /* @__PURE__ */ jsx("pre", { className: "text-wrap", children: expandedFinalCodeStr }) })
|
|
181
|
+
}
|
|
182
|
+
) : /* @__PURE__ */ jsx(CodeView, { code: codeStr, changed, diffSide: diff?.side, searchQuery: expandedSearchQuery }) })
|
|
183
|
+
] }) })
|
|
184
|
+
] });
|
|
185
|
+
}
|
|
186
|
+
function containsInnerNewline(obj) {
|
|
187
|
+
if (typeof obj === "string") {
|
|
188
|
+
const idx = obj.indexOf("\n");
|
|
189
|
+
return idx !== -1 && idx !== obj.length - 1;
|
|
190
|
+
} else if (Array.isArray(obj)) {
|
|
191
|
+
return obj.some((item) => containsInnerNewline(item));
|
|
192
|
+
} else if (obj && typeof obj === "object") {
|
|
193
|
+
return Object.values(obj).some((value) => containsInnerNewline(value));
|
|
194
|
+
}
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export { DataCodeSection as D };
|
|
199
|
+
//# sourceMappingURL=data-code-section-Cth9zVkj.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-code-section-Cth9zVkj.js","sources":["../src/ds/components/DataCodeSection/data-code-section.tsx"],"sourcesContent":["import { Chunk } from '@codemirror/merge';\nimport { Text } from '@codemirror/state';\nimport { AlignJustifyIcon, AlignLeftIcon, ExpandIcon, XIcon } from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { Code } from '@/ds/components/Code/code';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { DataPanelSectionHeading } from '@/ds/components/DataPanel/data-panel-section-heading';\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from '@/ds/components/Dialog';\nimport { SearchFieldBlock } from '@/ds/components/FormFieldBlocks/fields/search-field-block';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface DataCodeSectionDiff {\n /** The other document to compare against. */\n against: string;\n /** `a` = this document is the \"before\" (changes in red), `b` = \"after\" (changes in green). */\n side: 'a' | 'b';\n}\n\n/** Zero-based indexes of the lines of `doc` that differ from `diff.against`. */\nfunction changedLines(doc: string, { against, side }: DataCodeSectionDiff): Set<number> {\n const [a, b] = side === 'a' ? [doc, against] : [against, doc];\n const text = Text.of(doc.split('\\n'));\n const lines = new Set<number>();\n for (const chunk of Chunk.build(Text.of(a.split('\\n')), Text.of(b.split('\\n')))) {\n const from = side === 'a' ? chunk.fromA : chunk.fromB;\n const to = side === 'a' ? chunk.endA : chunk.endB;\n if (from >= to) continue;\n for (let pos = from; pos <= Math.min(to, text.length);) {\n const line = text.lineAt(pos);\n lines.add(line.number - 1);\n if (line.to >= to) break;\n pos = line.to + 1;\n }\n }\n return lines;\n}\n\nconst diffLineStyles = {\n removed: 'code-diff-removed bg-[color-mix(in_srgb,var(--accent2)_18%,transparent)]',\n added: 'code-diff-added bg-[color-mix(in_srgb,var(--accent1)_18%,transparent)]',\n};\nconst searchMatchStyle = 'code-search-match rounded-sm bg-[color-mix(in_srgb,var(--accent6)_30%,transparent)]';\n\ninterface CodeViewProps {\n code: string;\n changed?: Set<number>;\n diffSide?: DataCodeSectionDiff['side'];\n searchQuery: string;\n}\n\nfunction CodeView({ code, changed, diffSide, searchQuery }: CodeViewProps) {\n const ref = useRef<HTMLDivElement>(null);\n const query = searchQuery.toLowerCase();\n\n useEffect(() => {\n if (query) ref.current?.querySelector('.code-search-match')?.scrollIntoView({ block: 'nearest' });\n }, [query]);\n\n const lineClassName = useCallback(\n (index: number, text: string) => {\n const classes: string[] = [];\n if (diffSide && changed?.has(index)) classes.push(diffLineStyles[diffSide === 'a' ? 'removed' : 'added']);\n if (query && text.toLowerCase().includes(query)) classes.push(searchMatchStyle);\n return classes.length ? classes.join(' ') : undefined;\n },\n [changed, diffSide, query],\n );\n\n return (\n <div ref={ref}>\n <Code\n code={code}\n lang=\"json\"\n lineClassName={lineClassName}\n className=\"font-mono text-caption break-all whitespace-pre-wrap\"\n />\n </div>\n );\n}\n\n// -- Component ----------------------------------------------------------------\n\nexport interface DataCodeSectionProps {\n title: React.ReactNode;\n dialogTitle?: React.ReactNode;\n icon?: React.ReactNode;\n codeStr?: string;\n simplified?: boolean;\n className?: string;\n /** Highlight lines that differ from another document. */\n diff?: DataCodeSectionDiff;\n /** Extra controls rendered in the header, before the built-in copy/expand buttons. */\n actions?: React.ReactNode;\n}\n\nexport function DataCodeSection({\n codeStr = '',\n title,\n dialogTitle,\n icon,\n simplified = false,\n className,\n diff,\n actions,\n}: DataCodeSectionProps) {\n const changed = useMemo(() => (diff ? changedLines(codeStr, diff) : undefined), [codeStr, diff]);\n const [showAsMultilineText, setShowAsMultilineText] = useState(false);\n const [searchMinimized, setSearchMinimized] = useState(true);\n const [searchQuery, setSearchQuery] = useState('');\n const [expandedOpen, setExpandedOpen] = useState(false);\n const [expandedSearchQuery, setExpandedSearchQuery] = useState('');\n const [expandedMultiline, setExpandedMultiline] = useState(false);\n\n const hasMultilineText = useMemo(() => {\n try {\n const parsed = JSON.parse(codeStr);\n return containsInnerNewline(parsed || '');\n } catch {\n return false;\n }\n }, [codeStr]);\n\n const finalCodeStr = showAsMultilineText ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const expandedFinalCodeStr = expandedMultiline ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const usePlainTextView = simplified || showAsMultilineText;\n\n if (!codeStr || codeStr === 'null') return null;\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <div className=\"flex items-center justify-between\">\n <DataPanelSectionHeading icon={icon}>{title}</DataPanelSectionHeading>\n <div className=\"flex items-center gap-2\">\n {actions}\n {!usePlainTextView && (\n <SearchFieldBlock\n name=\"code-section-search\"\n label=\"Search code\"\n labelIsHidden\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={e => setSearchQuery(e.target.value)}\n onReset={() => setSearchQuery('')}\n size=\"sm\"\n isMinimized={searchMinimized}\n onMinimizedChange={setSearchMinimized}\n />\n )}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n aria-label={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n tooltip={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setShowAsMultilineText(v => !v)}\n >\n {showAsMultilineText ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n <Button aria-label=\"Expand\" tooltip=\"Expand\" onClick={() => setExpandedOpen(true)}>\n <ExpandIcon />\n </Button>\n </ButtonsGroup>\n </div>\n </div>\n\n <div\n className={cn(\n raisedSurfaceStyle,\n 'max-h-[30vh] overflow-hidden overflow-y-auto rounded-lg p-3 text-caption break-all text-muted-foreground',\n )}\n >\n {usePlainTextView ? (\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{finalCodeStr}</pre>\n </div>\n ) : (\n <CodeView code={codeStr} changed={changed} diffSide={diff?.side} searchQuery={searchQuery} />\n )}\n </div>\n\n <Dialog open={expandedOpen} onOpenChange={setExpandedOpen}>\n <DialogContent className=\"grid h-[calc(100vh-6rem)]! max-w-[90vw]! grid-rows-[auto_1fr] [&>.absolute]:hidden\">\n <DialogHeader className=\"flex-row items-center justify-between\">\n <DialogTitle className=\"flex min-w-0 items-center gap-1.5 truncate text-caption [&>svg]:size-3.5\">\n {dialogTitle ?? (\n <>\n {icon}\n {title}\n </>\n )}\n </DialogTitle>\n <DialogDescription>Expanded code view</DialogDescription>\n <div className=\"flex shrink-0 items-center gap-2\">\n {!expandedMultiline && (\n <SearchFieldBlock\n name=\"expanded-code-search\"\n label=\"Search code\"\n labelIsHidden\n placeholder=\"Search...\"\n value={expandedSearchQuery}\n onChange={e => setExpandedSearchQuery(e.target.value)}\n onReset={() => setExpandedSearchQuery('')}\n size=\"sm\"\n />\n )}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n aria-label={expandedMultiline ? 'Show escaped newlines' : 'Show multiline text'}\n tooltip={expandedMultiline ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setExpandedMultiline(v => !v)}\n >\n {expandedMultiline ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n <DialogClose asChild>\n <Button aria-label=\"Close\" tooltip=\"Close\">\n <XIcon />\n </Button>\n </DialogClose>\n </ButtonsGroup>\n </div>\n </DialogHeader>\n <div className=\"overflow-auto px-6 pb-6\">\n {expandedMultiline ? (\n <div\n className={cn(\n raisedSurfaceStyle,\n 'overflow-hidden overflow-y-auto rounded-lg p-3 text-caption break-all text-muted-foreground',\n )}\n >\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{expandedFinalCodeStr}</pre>\n </div>\n </div>\n ) : (\n <CodeView code={codeStr} changed={changed} diffSide={diff?.side} searchQuery={expandedSearchQuery} />\n )}\n </div>\n </DialogContent>\n </Dialog>\n </div>\n );\n}\n\nfunction containsInnerNewline(obj: unknown): boolean {\n if (typeof obj === 'string') {\n const idx = obj.indexOf('\\n');\n return idx !== -1 && idx !== obj.length - 1;\n } else if (Array.isArray(obj)) {\n return obj.some(item => containsInnerNewline(item));\n } else if (obj && typeof obj === 'object') {\n return Object.values(obj).some(value => containsInnerNewline(value));\n }\n return false;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,146 +1,67 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
const langJson = require('@codemirror/lang-json');
|
|
5
|
-
const language = require('@codemirror/language');
|
|
6
4
|
const merge = require('@codemirror/merge');
|
|
7
|
-
const search = require('@codemirror/search');
|
|
8
5
|
const state = require('@codemirror/state');
|
|
9
|
-
const view = require('@codemirror/view');
|
|
10
|
-
const highlight = require('@lezer/highlight');
|
|
11
|
-
const codemirrorThemeDracula = require('@uiw/codemirror-theme-dracula');
|
|
12
|
-
const ReactCodeMirror = require('@uiw/react-codemirror');
|
|
13
6
|
const lucideReact = require('lucide-react');
|
|
14
7
|
const React = require('react');
|
|
15
8
|
const Button = require('./Button-BAMnPqos.cjs');
|
|
16
9
|
const buttonsGroup = require('./buttons-group-CoZP3lJt.cjs');
|
|
10
|
+
const code = require('./code-B-x-9sJ1.cjs');
|
|
17
11
|
const copyButton = require('./copy-button-D2MTGxq_.cjs');
|
|
18
12
|
const dataPanelSectionHeading = require('./data-panel-section-heading-V86Awzqg.cjs');
|
|
19
13
|
const dialog = require('./dialog-Vvcjm0rZ.cjs');
|
|
20
14
|
const searchFieldBlock = require('./search-field-block-7-ufp4uG.cjs');
|
|
21
|
-
const themeProvider = require('./theme-provider-aO5-jZVp.cjs');
|
|
22
15
|
const primitives_raisedSurface = require('./primitives/raised-surface.cjs.js');
|
|
23
16
|
const utils_cn = require('./cn-DG0X1KEP.cjs');
|
|
24
17
|
|
|
25
|
-
|
|
26
|
-
const searchHighlightMark = view.Decoration.mark({ class: "cm-search-match" });
|
|
27
|
-
const searchHighlightField = state.StateField.define({
|
|
28
|
-
create() {
|
|
29
|
-
return view.Decoration.none;
|
|
30
|
-
},
|
|
31
|
-
update(decorations, tr) {
|
|
32
|
-
for (const effect of tr.effects) {
|
|
33
|
-
if (effect.is(setSearchQuery)) {
|
|
34
|
-
const query = effect.value;
|
|
35
|
-
if (!query) return view.Decoration.none;
|
|
36
|
-
const builder = new state.RangeSetBuilder();
|
|
37
|
-
const cursor = new search.SearchCursor(tr.state.doc, query, 0, tr.state.doc.length, (a) => a.toLowerCase());
|
|
38
|
-
while (!cursor.next().done) {
|
|
39
|
-
builder.add(cursor.value.from, cursor.value.to, searchHighlightMark);
|
|
40
|
-
}
|
|
41
|
-
return builder.finish();
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return decorations;
|
|
45
|
-
},
|
|
46
|
-
provide: (f) => view.EditorView.decorations.from(f)
|
|
47
|
-
});
|
|
48
|
-
const searchHighlightTheme = view.EditorView.baseTheme({
|
|
49
|
-
".cm-search-match": {
|
|
50
|
-
backgroundColor: "color-mix(in srgb, var(--accent1) 60%, transparent)",
|
|
51
|
-
borderRadius: "var(--radius-sm)"
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
function searchHighlightExtension() {
|
|
55
|
-
return [searchHighlightField, searchHighlightTheme];
|
|
56
|
-
}
|
|
57
|
-
const diffLineTheme = view.EditorView.theme({
|
|
58
|
-
".cm-line.cm-diff-removed, .cm-line.cm-diff-removed.cm-activeLine": {
|
|
59
|
-
backgroundColor: "color-mix(in srgb, var(--accent2) 18%, transparent)"
|
|
60
|
-
},
|
|
61
|
-
".cm-line.cm-diff-added, .cm-line.cm-diff-added.cm-activeLine": {
|
|
62
|
-
backgroundColor: "color-mix(in srgb, var(--accent1) 18%, transparent)"
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
function diffHighlightExtension(doc, { against, side }) {
|
|
18
|
+
function changedLines(doc, { against, side }) {
|
|
66
19
|
const [a, b] = side === "a" ? [doc, against] : [against, doc];
|
|
67
20
|
const text = state.Text.of(doc.split("\n"));
|
|
68
|
-
const
|
|
69
|
-
const builder = new state.RangeSetBuilder();
|
|
21
|
+
const lines = /* @__PURE__ */ new Set();
|
|
70
22
|
for (const chunk of merge.Chunk.build(state.Text.of(a.split("\n")), state.Text.of(b.split("\n")))) {
|
|
71
23
|
const from = side === "a" ? chunk.fromA : chunk.fromB;
|
|
72
24
|
const to = side === "a" ? chunk.endA : chunk.endB;
|
|
73
25
|
if (from >= to) continue;
|
|
74
26
|
for (let pos = from; pos <= Math.min(to, text.length); ) {
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
if (
|
|
78
|
-
pos =
|
|
27
|
+
const line = text.lineAt(pos);
|
|
28
|
+
lines.add(line.number - 1);
|
|
29
|
+
if (line.to >= to) break;
|
|
30
|
+
pos = line.to + 1;
|
|
79
31
|
}
|
|
80
32
|
}
|
|
81
|
-
return
|
|
82
|
-
}
|
|
83
|
-
function buildDarkTheme() {
|
|
84
|
-
return codemirrorThemeDracula.draculaInit({
|
|
85
|
-
settings: {
|
|
86
|
-
fontFamily: "var(--font-mono)",
|
|
87
|
-
fontSize: "var(--text-caption)",
|
|
88
|
-
lineHighlight: "transparent",
|
|
89
|
-
gutterBackground: "transparent",
|
|
90
|
-
gutterForeground: "#939393",
|
|
91
|
-
background: "transparent"
|
|
92
|
-
},
|
|
93
|
-
styles: [{ tag: [highlight.tags.className, highlight.tags.propertyName] }]
|
|
94
|
-
});
|
|
33
|
+
return lines;
|
|
95
34
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
caretColor: "var(--foreground)"
|
|
114
|
-
},
|
|
115
|
-
".cm-activeLine": {
|
|
116
|
-
backgroundColor: "transparent"
|
|
117
|
-
},
|
|
118
|
-
".cm-activeLineGutter": {
|
|
119
|
-
backgroundColor: "transparent"
|
|
35
|
+
const diffLineStyles = {
|
|
36
|
+
removed: "code-diff-removed bg-[color-mix(in_srgb,var(--accent2)_18%,transparent)]",
|
|
37
|
+
added: "code-diff-added bg-[color-mix(in_srgb,var(--accent1)_18%,transparent)]"
|
|
38
|
+
};
|
|
39
|
+
const searchMatchStyle = "code-search-match rounded-sm bg-[color-mix(in_srgb,var(--accent6)_30%,transparent)]";
|
|
40
|
+
function CodeView({ code: code$1, changed, diffSide, searchQuery }) {
|
|
41
|
+
const ref = React.useRef(null);
|
|
42
|
+
const query = searchQuery.toLowerCase();
|
|
43
|
+
React.useEffect(() => {
|
|
44
|
+
if (query) ref.current?.querySelector(".code-search-match")?.scrollIntoView({ block: "nearest" });
|
|
45
|
+
}, [query]);
|
|
46
|
+
const lineClassName = React.useCallback(
|
|
47
|
+
(index, text) => {
|
|
48
|
+
const classes = [];
|
|
49
|
+
if (diffSide && changed?.has(index)) classes.push(diffLineStyles[diffSide === "a" ? "removed" : "added"]);
|
|
50
|
+
if (query && text.toLowerCase().includes(query)) classes.push(searchMatchStyle);
|
|
51
|
+
return classes.length ? classes.join(" ") : void 0;
|
|
120
52
|
},
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
const highlightStyle = language.HighlightStyle.define([
|
|
126
|
-
{ tag: [highlight.tags.comment, highlight.tags.bracket], color: "var(--placeholder)" },
|
|
127
|
-
{ tag: [highlight.tags.string, highlight.tags.meta, highlight.tags.regexp], color: "var(--accent1)" },
|
|
128
|
-
{ tag: [highlight.tags.atom, highlight.tags.bool, highlight.tags.special(highlight.tags.variableName)], color: "var(--accent6)" },
|
|
129
|
-
{ tag: [highlight.tags.keyword, highlight.tags.operator, highlight.tags.tagName], color: "var(--accent2)" },
|
|
130
|
-
{ tag: [highlight.tags.function(highlight.tags.propertyName), highlight.tags.propertyName], color: "var(--accent5)" },
|
|
53
|
+
[changed, diffSide, query]
|
|
54
|
+
);
|
|
55
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
56
|
+
code.Code,
|
|
131
57
|
{
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
return [editorTheme, language.syntaxHighlighting(highlightStyle)];
|
|
58
|
+
code: code$1,
|
|
59
|
+
lang: "json",
|
|
60
|
+
lineClassName,
|
|
61
|
+
className: "font-mono text-caption break-all whitespace-pre-wrap"
|
|
62
|
+
}
|
|
63
|
+
) });
|
|
139
64
|
}
|
|
140
|
-
const useCodemirrorTheme = () => {
|
|
141
|
-
const isDark = themeProvider.useTheme().resolvedTheme === "dark";
|
|
142
|
-
return React.useMemo(() => isDark ? buildDarkTheme() : buildLightTheme(), [isDark]);
|
|
143
|
-
};
|
|
144
65
|
function DataCodeSection({
|
|
145
66
|
codeStr = "",
|
|
146
67
|
title,
|
|
@@ -151,16 +72,13 @@ function DataCodeSection({
|
|
|
151
72
|
diff,
|
|
152
73
|
actions
|
|
153
74
|
}) {
|
|
154
|
-
const
|
|
155
|
-
const diffExtension = React.useMemo(() => diff ? diffHighlightExtension(codeStr, diff) : [], [codeStr, diff]);
|
|
75
|
+
const changed = React.useMemo(() => diff ? changedLines(codeStr, diff) : void 0, [codeStr, diff]);
|
|
156
76
|
const [showAsMultilineText, setShowAsMultilineText] = React.useState(false);
|
|
157
77
|
const [searchMinimized, setSearchMinimized] = React.useState(true);
|
|
158
|
-
const [searchQuery,
|
|
78
|
+
const [searchQuery, setSearchQuery] = React.useState("");
|
|
159
79
|
const [expandedOpen, setExpandedOpen] = React.useState(false);
|
|
160
80
|
const [expandedSearchQuery, setExpandedSearchQuery] = React.useState("");
|
|
161
81
|
const [expandedMultiline, setExpandedMultiline] = React.useState(false);
|
|
162
|
-
const editorRef = React.useRef(null);
|
|
163
|
-
const expandedEditorRef = React.useRef(null);
|
|
164
82
|
const hasMultilineText = React.useMemo(() => {
|
|
165
83
|
try {
|
|
166
84
|
const parsed = JSON.parse(codeStr);
|
|
@@ -169,72 +87,6 @@ function DataCodeSection({
|
|
|
169
87
|
return false;
|
|
170
88
|
}
|
|
171
89
|
}, [codeStr]);
|
|
172
|
-
const dispatchSearch = React.useCallback((query) => {
|
|
173
|
-
const view = editorRef.current?.view;
|
|
174
|
-
if (view) {
|
|
175
|
-
view.dispatch({ effects: setSearchQuery.of(query) });
|
|
176
|
-
if (query) {
|
|
177
|
-
const cursor = new search.SearchCursor(
|
|
178
|
-
view.state.doc,
|
|
179
|
-
query,
|
|
180
|
-
0,
|
|
181
|
-
view.state.doc.length,
|
|
182
|
-
(a) => a.toLowerCase()
|
|
183
|
-
);
|
|
184
|
-
if (!cursor.next().done) {
|
|
185
|
-
view.dispatch({
|
|
186
|
-
selection: { anchor: cursor.value.from },
|
|
187
|
-
scrollIntoView: true
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}, []);
|
|
193
|
-
const handleSearchChange = React.useCallback(
|
|
194
|
-
(e) => {
|
|
195
|
-
const val = e.target.value;
|
|
196
|
-
setSearchQueryState(val);
|
|
197
|
-
dispatchSearch(val);
|
|
198
|
-
},
|
|
199
|
-
[dispatchSearch]
|
|
200
|
-
);
|
|
201
|
-
const handleSearchReset = React.useCallback(() => {
|
|
202
|
-
setSearchQueryState("");
|
|
203
|
-
dispatchSearch("");
|
|
204
|
-
}, [dispatchSearch]);
|
|
205
|
-
const dispatchExpandedSearch = React.useCallback((query) => {
|
|
206
|
-
const view = expandedEditorRef.current?.view;
|
|
207
|
-
if (view) {
|
|
208
|
-
view.dispatch({ effects: setSearchQuery.of(query) });
|
|
209
|
-
if (query) {
|
|
210
|
-
const cursor = new search.SearchCursor(
|
|
211
|
-
view.state.doc,
|
|
212
|
-
query,
|
|
213
|
-
0,
|
|
214
|
-
view.state.doc.length,
|
|
215
|
-
(a) => a.toLowerCase()
|
|
216
|
-
);
|
|
217
|
-
if (!cursor.next().done) {
|
|
218
|
-
view.dispatch({
|
|
219
|
-
selection: { anchor: cursor.value.from },
|
|
220
|
-
scrollIntoView: true
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}, []);
|
|
226
|
-
const handleExpandedSearchChange = React.useCallback(
|
|
227
|
-
(e) => {
|
|
228
|
-
const val = e.target.value;
|
|
229
|
-
setExpandedSearchQuery(val);
|
|
230
|
-
dispatchExpandedSearch(val);
|
|
231
|
-
},
|
|
232
|
-
[dispatchExpandedSearch]
|
|
233
|
-
);
|
|
234
|
-
const handleExpandedSearchReset = React.useCallback(() => {
|
|
235
|
-
setExpandedSearchQuery("");
|
|
236
|
-
dispatchExpandedSearch("");
|
|
237
|
-
}, [dispatchExpandedSearch]);
|
|
238
90
|
const finalCodeStr = showAsMultilineText ? codeStr?.replace(/\\n/g, "\n") : codeStr;
|
|
239
91
|
const expandedFinalCodeStr = expandedMultiline ? codeStr?.replace(/\\n/g, "\n") : codeStr;
|
|
240
92
|
const usePlainTextView = simplified || showAsMultilineText;
|
|
@@ -252,8 +104,8 @@ function DataCodeSection({
|
|
|
252
104
|
labelIsHidden: true,
|
|
253
105
|
placeholder: "Search...",
|
|
254
106
|
value: searchQuery,
|
|
255
|
-
onChange:
|
|
256
|
-
onReset:
|
|
107
|
+
onChange: (e) => setSearchQuery(e.target.value),
|
|
108
|
+
onReset: () => setSearchQuery(""),
|
|
257
109
|
size: "sm",
|
|
258
110
|
isMinimized: searchMinimized,
|
|
259
111
|
onMinimizedChange: setSearchMinimized
|
|
@@ -281,16 +133,7 @@ function DataCodeSection({
|
|
|
281
133
|
primitives_raisedSurface.raisedSurfaceStyle,
|
|
282
134
|
"max-h-[30vh] overflow-hidden overflow-y-auto rounded-lg p-3 text-caption break-all text-muted-foreground"
|
|
283
135
|
),
|
|
284
|
-
children: usePlainTextView ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-mono break-all text-muted-foreground", children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "text-wrap", children: finalCodeStr }) }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
285
|
-
ReactCodeMirror,
|
|
286
|
-
{
|
|
287
|
-
ref: editorRef,
|
|
288
|
-
extensions: [langJson.json(), view.EditorView.lineWrapping, searchHighlightExtension(), diffExtension],
|
|
289
|
-
theme,
|
|
290
|
-
value: codeStr,
|
|
291
|
-
editable: false
|
|
292
|
-
}
|
|
293
|
-
)
|
|
136
|
+
children: usePlainTextView ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-mono break-all text-muted-foreground", children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "text-wrap", children: finalCodeStr }) }) : /* @__PURE__ */ jsxRuntime.jsx(CodeView, { code: codeStr, changed, diffSide: diff?.side, searchQuery })
|
|
294
137
|
}
|
|
295
138
|
),
|
|
296
139
|
/* @__PURE__ */ jsxRuntime.jsx(dialog.Dialog, { open: expandedOpen, onOpenChange: setExpandedOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(dialog.DialogContent, { className: "grid h-[calc(100vh-6rem)]! max-w-[90vw]! grid-rows-[auto_1fr] [&>.absolute]:hidden", children: [
|
|
@@ -309,8 +152,8 @@ function DataCodeSection({
|
|
|
309
152
|
labelIsHidden: true,
|
|
310
153
|
placeholder: "Search...",
|
|
311
154
|
value: expandedSearchQuery,
|
|
312
|
-
onChange:
|
|
313
|
-
onReset:
|
|
155
|
+
onChange: (e) => setExpandedSearchQuery(e.target.value),
|
|
156
|
+
onReset: () => setExpandedSearchQuery(""),
|
|
314
157
|
size: "sm"
|
|
315
158
|
}
|
|
316
159
|
),
|
|
@@ -338,16 +181,7 @@ function DataCodeSection({
|
|
|
338
181
|
),
|
|
339
182
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-mono break-all text-muted-foreground", children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "text-wrap", children: expandedFinalCodeStr }) })
|
|
340
183
|
}
|
|
341
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
342
|
-
ReactCodeMirror,
|
|
343
|
-
{
|
|
344
|
-
ref: expandedEditorRef,
|
|
345
|
-
extensions: [langJson.json(), view.EditorView.lineWrapping, searchHighlightExtension(), diffExtension],
|
|
346
|
-
theme,
|
|
347
|
-
value: codeStr,
|
|
348
|
-
editable: false
|
|
349
|
-
}
|
|
350
|
-
) })
|
|
184
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(CodeView, { code: codeStr, changed, diffSide: diff?.side, searchQuery: expandedSearchQuery }) })
|
|
351
185
|
] }) })
|
|
352
186
|
] });
|
|
353
187
|
}
|
|
@@ -364,4 +198,4 @@ function containsInnerNewline(obj) {
|
|
|
364
198
|
}
|
|
365
199
|
|
|
366
200
|
exports.DataCodeSection = DataCodeSection;
|
|
367
|
-
//# sourceMappingURL=data-code-section-
|
|
201
|
+
//# sourceMappingURL=data-code-section-DE4AgaTU.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-code-section-DE4AgaTU.cjs","sources":["../src/ds/components/DataCodeSection/data-code-section.tsx"],"sourcesContent":["import { Chunk } from '@codemirror/merge';\nimport { Text } from '@codemirror/state';\nimport { AlignJustifyIcon, AlignLeftIcon, ExpandIcon, XIcon } from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { Code } from '@/ds/components/Code/code';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { DataPanelSectionHeading } from '@/ds/components/DataPanel/data-panel-section-heading';\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from '@/ds/components/Dialog';\nimport { SearchFieldBlock } from '@/ds/components/FormFieldBlocks/fields/search-field-block';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface DataCodeSectionDiff {\n /** The other document to compare against. */\n against: string;\n /** `a` = this document is the \"before\" (changes in red), `b` = \"after\" (changes in green). */\n side: 'a' | 'b';\n}\n\n/** Zero-based indexes of the lines of `doc` that differ from `diff.against`. */\nfunction changedLines(doc: string, { against, side }: DataCodeSectionDiff): Set<number> {\n const [a, b] = side === 'a' ? [doc, against] : [against, doc];\n const text = Text.of(doc.split('\\n'));\n const lines = new Set<number>();\n for (const chunk of Chunk.build(Text.of(a.split('\\n')), Text.of(b.split('\\n')))) {\n const from = side === 'a' ? chunk.fromA : chunk.fromB;\n const to = side === 'a' ? chunk.endA : chunk.endB;\n if (from >= to) continue;\n for (let pos = from; pos <= Math.min(to, text.length);) {\n const line = text.lineAt(pos);\n lines.add(line.number - 1);\n if (line.to >= to) break;\n pos = line.to + 1;\n }\n }\n return lines;\n}\n\nconst diffLineStyles = {\n removed: 'code-diff-removed bg-[color-mix(in_srgb,var(--accent2)_18%,transparent)]',\n added: 'code-diff-added bg-[color-mix(in_srgb,var(--accent1)_18%,transparent)]',\n};\nconst searchMatchStyle = 'code-search-match rounded-sm bg-[color-mix(in_srgb,var(--accent6)_30%,transparent)]';\n\ninterface CodeViewProps {\n code: string;\n changed?: Set<number>;\n diffSide?: DataCodeSectionDiff['side'];\n searchQuery: string;\n}\n\nfunction CodeView({ code, changed, diffSide, searchQuery }: CodeViewProps) {\n const ref = useRef<HTMLDivElement>(null);\n const query = searchQuery.toLowerCase();\n\n useEffect(() => {\n if (query) ref.current?.querySelector('.code-search-match')?.scrollIntoView({ block: 'nearest' });\n }, [query]);\n\n const lineClassName = useCallback(\n (index: number, text: string) => {\n const classes: string[] = [];\n if (diffSide && changed?.has(index)) classes.push(diffLineStyles[diffSide === 'a' ? 'removed' : 'added']);\n if (query && text.toLowerCase().includes(query)) classes.push(searchMatchStyle);\n return classes.length ? classes.join(' ') : undefined;\n },\n [changed, diffSide, query],\n );\n\n return (\n <div ref={ref}>\n <Code\n code={code}\n lang=\"json\"\n lineClassName={lineClassName}\n className=\"font-mono text-caption break-all whitespace-pre-wrap\"\n />\n </div>\n );\n}\n\n// -- Component ----------------------------------------------------------------\n\nexport interface DataCodeSectionProps {\n title: React.ReactNode;\n dialogTitle?: React.ReactNode;\n icon?: React.ReactNode;\n codeStr?: string;\n simplified?: boolean;\n className?: string;\n /** Highlight lines that differ from another document. */\n diff?: DataCodeSectionDiff;\n /** Extra controls rendered in the header, before the built-in copy/expand buttons. */\n actions?: React.ReactNode;\n}\n\nexport function DataCodeSection({\n codeStr = '',\n title,\n dialogTitle,\n icon,\n simplified = false,\n className,\n diff,\n actions,\n}: DataCodeSectionProps) {\n const changed = useMemo(() => (diff ? changedLines(codeStr, diff) : undefined), [codeStr, diff]);\n const [showAsMultilineText, setShowAsMultilineText] = useState(false);\n const [searchMinimized, setSearchMinimized] = useState(true);\n const [searchQuery, setSearchQuery] = useState('');\n const [expandedOpen, setExpandedOpen] = useState(false);\n const [expandedSearchQuery, setExpandedSearchQuery] = useState('');\n const [expandedMultiline, setExpandedMultiline] = useState(false);\n\n const hasMultilineText = useMemo(() => {\n try {\n const parsed = JSON.parse(codeStr);\n return containsInnerNewline(parsed || '');\n } catch {\n return false;\n }\n }, [codeStr]);\n\n const finalCodeStr = showAsMultilineText ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const expandedFinalCodeStr = expandedMultiline ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const usePlainTextView = simplified || showAsMultilineText;\n\n if (!codeStr || codeStr === 'null') return null;\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <div className=\"flex items-center justify-between\">\n <DataPanelSectionHeading icon={icon}>{title}</DataPanelSectionHeading>\n <div className=\"flex items-center gap-2\">\n {actions}\n {!usePlainTextView && (\n <SearchFieldBlock\n name=\"code-section-search\"\n label=\"Search code\"\n labelIsHidden\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={e => setSearchQuery(e.target.value)}\n onReset={() => setSearchQuery('')}\n size=\"sm\"\n isMinimized={searchMinimized}\n onMinimizedChange={setSearchMinimized}\n />\n )}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n aria-label={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n tooltip={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setShowAsMultilineText(v => !v)}\n >\n {showAsMultilineText ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n <Button aria-label=\"Expand\" tooltip=\"Expand\" onClick={() => setExpandedOpen(true)}>\n <ExpandIcon />\n </Button>\n </ButtonsGroup>\n </div>\n </div>\n\n <div\n className={cn(\n raisedSurfaceStyle,\n 'max-h-[30vh] overflow-hidden overflow-y-auto rounded-lg p-3 text-caption break-all text-muted-foreground',\n )}\n >\n {usePlainTextView ? (\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{finalCodeStr}</pre>\n </div>\n ) : (\n <CodeView code={codeStr} changed={changed} diffSide={diff?.side} searchQuery={searchQuery} />\n )}\n </div>\n\n <Dialog open={expandedOpen} onOpenChange={setExpandedOpen}>\n <DialogContent className=\"grid h-[calc(100vh-6rem)]! max-w-[90vw]! grid-rows-[auto_1fr] [&>.absolute]:hidden\">\n <DialogHeader className=\"flex-row items-center justify-between\">\n <DialogTitle className=\"flex min-w-0 items-center gap-1.5 truncate text-caption [&>svg]:size-3.5\">\n {dialogTitle ?? (\n <>\n {icon}\n {title}\n </>\n )}\n </DialogTitle>\n <DialogDescription>Expanded code view</DialogDescription>\n <div className=\"flex shrink-0 items-center gap-2\">\n {!expandedMultiline && (\n <SearchFieldBlock\n name=\"expanded-code-search\"\n label=\"Search code\"\n labelIsHidden\n placeholder=\"Search...\"\n value={expandedSearchQuery}\n onChange={e => setExpandedSearchQuery(e.target.value)}\n onReset={() => setExpandedSearchQuery('')}\n size=\"sm\"\n />\n )}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n aria-label={expandedMultiline ? 'Show escaped newlines' : 'Show multiline text'}\n tooltip={expandedMultiline ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setExpandedMultiline(v => !v)}\n >\n {expandedMultiline ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n <DialogClose asChild>\n <Button aria-label=\"Close\" tooltip=\"Close\">\n <XIcon />\n </Button>\n </DialogClose>\n </ButtonsGroup>\n </div>\n </DialogHeader>\n <div className=\"overflow-auto px-6 pb-6\">\n {expandedMultiline ? (\n <div\n className={cn(\n raisedSurfaceStyle,\n 'overflow-hidden overflow-y-auto rounded-lg p-3 text-caption break-all text-muted-foreground',\n )}\n >\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{expandedFinalCodeStr}</pre>\n </div>\n </div>\n ) : (\n <CodeView code={codeStr} changed={changed} diffSide={diff?.side} searchQuery={expandedSearchQuery} />\n )}\n </div>\n </DialogContent>\n </Dialog>\n </div>\n );\n}\n\nfunction containsInnerNewline(obj: unknown): boolean {\n if (typeof obj === 'string') {\n const idx = obj.indexOf('\\n');\n return idx !== -1 && idx !== obj.length - 1;\n } else if (Array.isArray(obj)) {\n return obj.some(item => containsInnerNewline(item));\n } else if (obj && typeof obj === 'object') {\n return Object.values(obj).some(value => containsInnerNewline(value));\n }\n return false;\n}\n"],"names":["Text","Chunk","code","useRef","useEffect","useCallback","jsx","Code","useMemo","useState","cn","jsxs","DataPanelSectionHeading","SearchFieldBlock","ButtonsGroup","CopyButton","Button","AlignLeftIcon","AlignJustifyIcon","ExpandIcon","raisedSurfaceStyle","Dialog","DialogContent","DialogHeader","DialogTitle","Fragment","DialogDescription","DialogClose","XIcon"],"mappings":";;;;;;;;;;;;;;;;;AA6BA,SAAS,YAAA,CAAa,GAAA,EAAa,EAAE,OAAA,EAAS,MAAK,EAAqC;AACtF,EAAA,MAAM,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,IAAA,KAAS,GAAA,GAAM,CAAC,GAAA,EAAK,OAAO,CAAA,GAAI,CAAC,OAAA,EAAS,GAAG,CAAA;AAC5D,EAAA,MAAM,OAAOA,UAAA,CAAK,EAAA,CAAG,GAAA,CAAI,KAAA,CAAM,IAAI,CAAC,CAAA;AACpC,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,KAAA,MAAW,SAASC,WAAA,CAAM,KAAA,CAAMD,UAAA,CAAK,EAAA,CAAG,EAAE,KAAA,CAAM,IAAI,CAAC,CAAA,EAAGA,WAAK,EAAA,CAAG,CAAA,CAAE,MAAM,IAAI,CAAC,CAAC,CAAA,EAAG;AAC/E,IAAA,MAAM,IAAA,GAAO,IAAA,KAAS,GAAA,GAAM,KAAA,CAAM,QAAQ,KAAA,CAAM,KAAA;AAChD,IAAA,MAAM,EAAA,GAAK,IAAA,KAAS,GAAA,GAAM,KAAA,CAAM,OAAO,KAAA,CAAM,IAAA;AAC7C,IAAA,IAAI,QAAQ,EAAA,EAAI;AAChB,IAAA,KAAA,IAAS,GAAA,GAAM,MAAM,GAAA,IAAO,IAAA,CAAK,IAAI,EAAA,EAAI,IAAA,CAAK,MAAM,CAAA,IAAI;AACtD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAC5B,MAAA,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACzB,MAAA,IAAI,IAAA,CAAK,MAAM,EAAA,EAAI;AACnB,MAAA,GAAA,GAAM,KAAK,EAAA,GAAK,CAAA;AAAA,IAClB;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,MAAM,cAAA,GAAiB;AAAA,EACrB,OAAA,EAAS,0EAAA;AAAA,EACT,KAAA,EAAO;AACT,CAAA;AACA,MAAM,gBAAA,GAAmB,qFAAA;AASzB,SAAS,SAAS,QAAEE,MAAA,EAAM,OAAA,EAAS,QAAA,EAAU,aAAY,EAAkB;AACzE,EAAA,MAAM,GAAA,GAAMC,aAAuB,IAAI,CAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,YAAY,WAAA,EAAY;AAEtC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,KAAA,EAAO,GAAA,CAAI,OAAA,EAAS,aAAA,CAAc,oBAAoB,GAAG,cAAA,CAAe,EAAE,KAAA,EAAO,SAAA,EAAW,CAAA;AAAA,EAClG,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,aAAA,GAAgBC,iBAAA;AAAA,IACpB,CAAC,OAAe,IAAA,KAAiB;AAC/B,MAAA,MAAM,UAAoB,EAAC;AAC3B,MAAA,IAAI,QAAA,IAAY,OAAA,EAAS,GAAA,CAAI,KAAK,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,cAAA,CAAe,QAAA,KAAa,GAAA,GAAM,SAAA,GAAY,OAAO,CAAC,CAAA;AACxG,MAAA,IAAI,KAAA,IAAS,KAAK,WAAA,EAAY,CAAE,SAAS,KAAK,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,gBAAgB,CAAA;AAC9E,MAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,GAAI,MAAA;AAAA,IAC9C,CAAA;AAAA,IACA,CAAC,OAAA,EAAS,QAAA,EAAU,KAAK;AAAA,GAC3B;AAEA,EAAA,uBACEC,cAAA,CAAC,SAAI,GAAA,EACH,QAAA,kBAAAA,cAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,YACCL,MAAA;AAAA,MACA,IAAA,EAAK,MAAA;AAAA,MACL,aAAA;AAAA,MACA,SAAA,EAAU;AAAA;AAAA,GACZ,EACF,CAAA;AAEJ;AAiBO,SAAS,eAAA,CAAgB;AAAA,EAC9B,OAAA,GAAU,EAAA;AAAA,EACV,KAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,SAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,OAAA,GAAUM,aAAA,CAAQ,MAAO,IAAA,GAAO,YAAA,CAAa,OAAA,EAAS,IAAI,CAAA,GAAI,MAAA,EAAY,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA;AAC/F,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIC,eAAS,KAAK,CAAA;AACpE,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,eAAS,IAAI,CAAA;AAC3D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,eAAS,EAAE,CAAA;AACjE,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEhE,EAAA,MAAM,gBAAA,GAAmBD,cAAQ,MAAM;AACrC,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACjC,MAAA,OAAO,oBAAA,CAAqB,UAAU,EAAE,CAAA;AAAA,IAC1C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,eAAe,mBAAA,GAAsB,OAAA,EAAS,OAAA,CAAQ,MAAA,EAAQ,IAAI,CAAA,GAAI,OAAA;AAC5E,EAAA,MAAM,uBAAuB,iBAAA,GAAoB,OAAA,EAAS,OAAA,CAAQ,MAAA,EAAQ,IAAI,CAAA,GAAI,OAAA;AAClF,EAAA,MAAM,mBAAmB,UAAA,IAAc,mBAAA;AAEvC,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,MAAA,EAAQ,OAAO,IAAA;AAE3C,EAAA,uCACG,KAAA,EAAA,EAAI,SAAA,EAAWE,WAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EACjD,QAAA,EAAA;AAAA,oBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,cAAA,CAACM,+CAAA,EAAA,EAAwB,MAAa,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAC5CD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,QACA,CAAC,gBAAA,oBACAL,cAAA;AAAA,UAACO,iCAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,qBAAA;AAAA,YACL,KAAA,EAAM,aAAA;AAAA,YACN,aAAA,EAAa,IAAA;AAAA,YACb,WAAA,EAAY,WAAA;AAAA,YACZ,KAAA,EAAO,WAAA;AAAA,YACP,QAAA,EAAU,CAAA,CAAA,KAAK,cAAA,CAAe,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC5C,OAAA,EAAS,MAAM,cAAA,CAAe,EAAE,CAAA;AAAA,YAChC,IAAA,EAAK,IAAA;AAAA,YACL,WAAA,EAAa,eAAA;AAAA,YACb,iBAAA,EAAmB;AAAA;AAAA,SACrB;AAAA,wBAEFF,eAAA,CAACG,yBAAA,EAAA,EAAa,IAAA,EAAK,IAAA,EACjB,QAAA,EAAA;AAAA,0BAAAR,cAAA,CAACS,qBAAA,EAAA,EAAW,OAAA,EAAS,OAAA,IAAW,YAAA,EAAc,CAAA;AAAA,UAC7C,gBAAA,oBACCT,cAAA;AAAA,YAACU,aAAA;AAAA,YAAA;AAAA,cACC,YAAA,EAAY,sBAAsB,uBAAA,GAA0B,qBAAA;AAAA,cAC5D,OAAA,EAAS,sBAAsB,uBAAA,GAA0B,qBAAA;AAAA,cACzD,OAAA,EAAS,MAAM,sBAAA,CAAuB,CAAA,CAAA,KAAK,CAAC,CAAC,CAAA;AAAA,cAE5C,QAAA,EAAA,mBAAA,mBAAsBV,cAAA,CAACW,yBAAA,EAAA,EAAc,CAAA,kCAAMC,4BAAA,EAAA,EAAiB;AAAA;AAAA,WAC/D;AAAA,0BAEFZ,cAAA,CAACU,aAAA,EAAA,EAAO,YAAA,EAAW,QAAA,EAAS,OAAA,EAAQ,QAAA,EAAS,OAAA,EAAS,MAAM,eAAA,CAAgB,IAAI,CAAA,EAC9E,QAAA,kBAAAV,cAAA,CAACa,0BAAW,CAAA,EACd;AAAA,SAAA,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAb,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWI,WAAA;AAAA,UACTU,2CAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEC,QAAA,EAAA,gBAAA,kCACE,KAAA,EAAA,EAAI,SAAA,EAAU,6CACb,QAAA,kBAAAd,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EAAa,QAAA,EAAA,YAAA,EAAa,GAC3C,CAAA,mBAEAA,cAAA,CAAC,YAAS,IAAA,EAAM,OAAA,EAAS,SAAkB,QAAA,EAAU,IAAA,EAAM,MAAM,WAAA,EAA0B;AAAA;AAAA,KAE/F;AAAA,oBAEAA,cAAA,CAACe,iBAAO,IAAA,EAAM,YAAA,EAAc,cAAc,eAAA,EACxC,QAAA,kBAAAV,eAAA,CAACW,oBAAA,EAAA,EAAc,SAAA,EAAU,oFAAA,EACvB,QAAA,EAAA;AAAA,sBAAAX,eAAA,CAACY,mBAAA,EAAA,EAAa,WAAU,uCAAA,EACtB,QAAA,EAAA;AAAA,wBAAAjB,cAAA,CAACkB,kBAAA,EAAA,EAAY,SAAA,EAAU,0EAAA,EACpB,QAAA,EAAA,WAAA,oBACCb,eAAA,CAAAc,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,UAAA,IAAA;AAAA,UACA;AAAA,SAAA,EACH,CAAA,EAEJ,CAAA;AAAA,wBACAnB,cAAA,CAACoB,4BAAkB,QAAA,EAAA,oBAAA,EAAkB,CAAA;AAAA,wBACrCf,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACZ,QAAA,EAAA;AAAA,UAAA,CAAC,iBAAA,oBACAL,cAAA;AAAA,YAACO,iCAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,sBAAA;AAAA,cACL,KAAA,EAAM,aAAA;AAAA,cACN,aAAA,EAAa,IAAA;AAAA,cACb,WAAA,EAAY,WAAA;AAAA,cACZ,KAAA,EAAO,mBAAA;AAAA,cACP,QAAA,EAAU,CAAA,CAAA,KAAK,sBAAA,CAAuB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cACpD,OAAA,EAAS,MAAM,sBAAA,CAAuB,EAAE,CAAA;AAAA,cACxC,IAAA,EAAK;AAAA;AAAA,WACP;AAAA,0BAEFF,eAAA,CAACG,yBAAA,EAAA,EAAa,IAAA,EAAK,IAAA,EACjB,QAAA,EAAA;AAAA,4BAAAR,cAAA,CAACS,qBAAA,EAAA,EAAW,OAAA,EAAS,OAAA,IAAW,YAAA,EAAc,CAAA;AAAA,YAC7C,gBAAA,oBACCT,cAAA;AAAA,cAACU,aAAA;AAAA,cAAA;AAAA,gBACC,YAAA,EAAY,oBAAoB,uBAAA,GAA0B,qBAAA;AAAA,gBAC1D,OAAA,EAAS,oBAAoB,uBAAA,GAA0B,qBAAA;AAAA,gBACvD,OAAA,EAAS,MAAM,oBAAA,CAAqB,CAAA,CAAA,KAAK,CAAC,CAAC,CAAA;AAAA,gBAE1C,QAAA,EAAA,iBAAA,mBAAoBV,cAAA,CAACW,yBAAA,EAAA,EAAc,CAAA,kCAAMC,4BAAA,EAAA,EAAiB;AAAA;AAAA,aAC7D;AAAA,4BAEFZ,cAAA,CAACqB,kBAAA,EAAA,EAAY,OAAA,EAAO,IAAA,EAClB,QAAA,kBAAArB,cAAA,CAACU,aAAA,EAAA,EAAO,YAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,OAAA,EACjC,QAAA,kBAAAV,cAAA,CAACsB,iBAAA,EAAA,EAAM,GACT,CAAA,EACF;AAAA,WAAA,EACF;AAAA,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACAtB,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA,iBAAA,mBACCA,cAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAWI,WAAA;AAAA,YACTU,2CAAA;AAAA,YACA;AAAA,WACF;AAAA,UAEA,QAAA,kBAAAd,cAAA,CAAC,SAAI,SAAA,EAAU,2CAAA,EACb,yCAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAa,QAAA,EAAA,oBAAA,EAAqB,CAAA,EACnD;AAAA;AAAA,OACF,mBAEAA,cAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAM,OAAA,EAAS,OAAA,EAAkB,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,WAAA,EAAa,mBAAA,EAAqB,CAAA,EAEvG;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,qBAAqB,GAAA,EAAuB;AACnD,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA;AAC5B,IAAA,OAAO,GAAA,KAAQ,EAAA,IAAM,GAAA,KAAQ,GAAA,CAAI,MAAA,GAAS,CAAA;AAAA,EAC5C,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC7B,IAAA,OAAO,GAAA,CAAI,IAAA,CAAK,CAAA,IAAA,KAAQ,oBAAA,CAAqB,IAAI,CAAC,CAAA;AAAA,EACpD,CAAA,MAAA,IAAW,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AACzC,IAAA,OAAO,MAAA,CAAO,OAAO,GAAG,CAAA,CAAE,KAAK,CAAA,KAAA,KAAS,oBAAA,CAAqB,KAAK,CAAC,CAAA;AAAA,EACrE;AACA,EAAA,OAAO,KAAA;AACT;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { l as dataListRowStaticStyles, D as DataListRoot, m as DataListTopSelectCell, n as DataListSelectCell, f as DataListTimeCell, j as DataListCreatedCell, g as DataListDateCell, o as DataListNumberCell, p as DataListRowHeaderCell, k as DataListIdCell, q as DataListDescriptionCell, r as DataListNameCell, e as DataListTextCell, t as DataListActionsCell, c as DataListCell, h as DataListTopCellSmart, i as DataListTopCellWithTooltip, b as DataListTopCell, a as DataListTop } from './data-list-top-
|
|
2
|
-
import { u as useDataListRowWrapperContext, D as DataListNextPageLoading, b as DataListSpacer, a as DataListNoMatch, c as DataListRowLink, d as DataListRowButton, e as DataListRowWrapper, f as DataListSortableTopCell } from './data-list-spacer-
|
|
1
|
+
import { l as dataListRowStaticStyles, D as DataListRoot, m as DataListTopSelectCell, n as DataListSelectCell, f as DataListTimeCell, j as DataListCreatedCell, g as DataListDateCell, o as DataListNumberCell, p as DataListRowHeaderCell, k as DataListIdCell, q as DataListDescriptionCell, r as DataListNameCell, e as DataListTextCell, t as DataListActionsCell, c as DataListCell, h as DataListTopCellSmart, i as DataListTopCellWithTooltip, b as DataListTopCell, a as DataListTop } from './data-list-top-DpbOA3uw.js';
|
|
2
|
+
import { u as useDataListRowWrapperContext, D as DataListNextPageLoading, b as DataListSpacer, a as DataListNoMatch, c as DataListRowLink, d as DataListRowButton, e as DataListRowWrapper, f as DataListSortableTopCell } from './data-list-spacer-BmorAN0V.js';
|
|
3
3
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
4
|
import { ArrowLeftIcon, ArrowRightIcon } from 'lucide-react';
|
|
5
5
|
import { B as Button } from './Button-B8nF87ai.js';
|
|
@@ -118,4 +118,4 @@ const DataList = Object.assign(DataListRoot, {
|
|
|
118
118
|
});
|
|
119
119
|
|
|
120
120
|
export { DataList as D, DataListSubHeading as a, DataListSubheader as b };
|
|
121
|
-
//# sourceMappingURL=data-list-
|
|
121
|
+
//# sourceMappingURL=data-list-DisTjDHP.js.map
|