procsi 0.2.6
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/LICENSE +665 -0
- package/README.md +587 -0
- package/dist/cli/commands/clear.d.ts +3 -0
- package/dist/cli/commands/clear.d.ts.map +1 -0
- package/dist/cli/commands/clear.js +30 -0
- package/dist/cli/commands/clear.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +3 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/daemon.js +59 -0
- package/dist/cli/commands/daemon.js.map +1 -0
- package/dist/cli/commands/debug-dump.d.ts +27 -0
- package/dist/cli/commands/debug-dump.d.ts.map +1 -0
- package/dist/cli/commands/debug-dump.js +102 -0
- package/dist/cli/commands/debug-dump.js.map +1 -0
- package/dist/cli/commands/helpers.d.ts +18 -0
- package/dist/cli/commands/helpers.d.ts.map +1 -0
- package/dist/cli/commands/helpers.js +34 -0
- package/dist/cli/commands/helpers.js.map +1 -0
- package/dist/cli/commands/init.d.ts +9 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +28 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/intercept.d.ts +9 -0
- package/dist/cli/commands/intercept.d.ts.map +1 -0
- package/dist/cli/commands/intercept.js +121 -0
- package/dist/cli/commands/intercept.js.map +1 -0
- package/dist/cli/commands/interceptors.d.ts +3 -0
- package/dist/cli/commands/interceptors.d.ts.map +1 -0
- package/dist/cli/commands/interceptors.js +163 -0
- package/dist/cli/commands/interceptors.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +3 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +24 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/off.d.ts +8 -0
- package/dist/cli/commands/off.d.ts.map +1 -0
- package/dist/cli/commands/off.js +34 -0
- package/dist/cli/commands/off.js.map +1 -0
- package/dist/cli/commands/on.d.ts +9 -0
- package/dist/cli/commands/on.d.ts.map +1 -0
- package/dist/cli/commands/on.js +121 -0
- package/dist/cli/commands/on.js.map +1 -0
- package/dist/cli/commands/project.d.ts +3 -0
- package/dist/cli/commands/project.d.ts.map +1 -0
- package/dist/cli/commands/project.js +15 -0
- package/dist/cli/commands/project.js.map +1 -0
- package/dist/cli/commands/restart.d.ts +3 -0
- package/dist/cli/commands/restart.d.ts.map +1 -0
- package/dist/cli/commands/restart.js +35 -0
- package/dist/cli/commands/restart.js.map +1 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +66 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +3 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +24 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/commands/tui.d.ts +3 -0
- package/dist/cli/commands/tui.d.ts.map +1 -0
- package/dist/cli/commands/tui.js +36 -0
- package/dist/cli/commands/tui.js.map +1 -0
- package/dist/cli/commands/vars.d.ts +36 -0
- package/dist/cli/commands/vars.d.ts.map +1 -0
- package/dist/cli/commands/vars.js +207 -0
- package/dist/cli/commands/vars.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +37 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/tui/App.d.ts +15 -0
- package/dist/cli/tui/App.d.ts.map +1 -0
- package/dist/cli/tui/App.js +544 -0
- package/dist/cli/tui/App.js.map +1 -0
- package/dist/cli/tui/components/AccordionContent.d.ts +28 -0
- package/dist/cli/tui/components/AccordionContent.d.ts.map +1 -0
- package/dist/cli/tui/components/AccordionContent.js +87 -0
- package/dist/cli/tui/components/AccordionContent.js.map +1 -0
- package/dist/cli/tui/components/AccordionPanel.d.ts +38 -0
- package/dist/cli/tui/components/AccordionPanel.d.ts.map +1 -0
- package/dist/cli/tui/components/AccordionPanel.js +110 -0
- package/dist/cli/tui/components/AccordionPanel.js.map +1 -0
- package/dist/cli/tui/components/AccordionSection.d.ts +32 -0
- package/dist/cli/tui/components/AccordionSection.d.ts.map +1 -0
- package/dist/cli/tui/components/AccordionSection.js +41 -0
- package/dist/cli/tui/components/AccordionSection.js.map +1 -0
- package/dist/cli/tui/components/BodyView.d.ts +14 -0
- package/dist/cli/tui/components/BodyView.d.ts.map +1 -0
- package/dist/cli/tui/components/BodyView.js +39 -0
- package/dist/cli/tui/components/BodyView.js.map +1 -0
- package/dist/cli/tui/components/ExportModal.d.ts +34 -0
- package/dist/cli/tui/components/ExportModal.d.ts.map +1 -0
- package/dist/cli/tui/components/ExportModal.js +109 -0
- package/dist/cli/tui/components/ExportModal.js.map +1 -0
- package/dist/cli/tui/components/FilterBar.d.ts +21 -0
- package/dist/cli/tui/components/FilterBar.d.ts.map +1 -0
- package/dist/cli/tui/components/FilterBar.js +155 -0
- package/dist/cli/tui/components/FilterBar.js.map +1 -0
- package/dist/cli/tui/components/HeadersView.d.ts +13 -0
- package/dist/cli/tui/components/HeadersView.d.ts.map +1 -0
- package/dist/cli/tui/components/HeadersView.js +8 -0
- package/dist/cli/tui/components/HeadersView.js.map +1 -0
- package/dist/cli/tui/components/HelpModal.d.ts +13 -0
- package/dist/cli/tui/components/HelpModal.d.ts.map +1 -0
- package/dist/cli/tui/components/HelpModal.js +78 -0
- package/dist/cli/tui/components/HelpModal.js.map +1 -0
- package/dist/cli/tui/components/HintContent.d.ts +25 -0
- package/dist/cli/tui/components/HintContent.d.ts.map +1 -0
- package/dist/cli/tui/components/HintContent.js +44 -0
- package/dist/cli/tui/components/HintContent.js.map +1 -0
- package/dist/cli/tui/components/InfoModal.d.ts +15 -0
- package/dist/cli/tui/components/InfoModal.d.ts.map +1 -0
- package/dist/cli/tui/components/InfoModal.js +17 -0
- package/dist/cli/tui/components/InfoModal.js.map +1 -0
- package/dist/cli/tui/components/JsonExplorerModal.d.ts +24 -0
- package/dist/cli/tui/components/JsonExplorerModal.d.ts.map +1 -0
- package/dist/cli/tui/components/JsonExplorerModal.js +311 -0
- package/dist/cli/tui/components/JsonExplorerModal.js.map +1 -0
- package/dist/cli/tui/components/Modal.d.ts +26 -0
- package/dist/cli/tui/components/Modal.d.ts.map +1 -0
- package/dist/cli/tui/components/Modal.js +15 -0
- package/dist/cli/tui/components/Modal.js.map +1 -0
- package/dist/cli/tui/components/Panel.d.ts +19 -0
- package/dist/cli/tui/components/Panel.d.ts.map +1 -0
- package/dist/cli/tui/components/Panel.js +37 -0
- package/dist/cli/tui/components/Panel.js.map +1 -0
- package/dist/cli/tui/components/RequestDetails.d.ts +16 -0
- package/dist/cli/tui/components/RequestDetails.d.ts.map +1 -0
- package/dist/cli/tui/components/RequestDetails.js +23 -0
- package/dist/cli/tui/components/RequestDetails.js.map +1 -0
- package/dist/cli/tui/components/RequestList.d.ts +21 -0
- package/dist/cli/tui/components/RequestList.d.ts.map +1 -0
- package/dist/cli/tui/components/RequestList.js +30 -0
- package/dist/cli/tui/components/RequestList.js.map +1 -0
- package/dist/cli/tui/components/RequestListItem.d.ts +36 -0
- package/dist/cli/tui/components/RequestListItem.d.ts.map +1 -0
- package/dist/cli/tui/components/RequestListItem.js +130 -0
- package/dist/cli/tui/components/RequestListItem.js.map +1 -0
- package/dist/cli/tui/components/SaveModal.d.ts +30 -0
- package/dist/cli/tui/components/SaveModal.d.ts.map +1 -0
- package/dist/cli/tui/components/SaveModal.js +95 -0
- package/dist/cli/tui/components/SaveModal.js.map +1 -0
- package/dist/cli/tui/components/StatusBar.d.ts +39 -0
- package/dist/cli/tui/components/StatusBar.d.ts.map +1 -0
- package/dist/cli/tui/components/StatusBar.js +53 -0
- package/dist/cli/tui/components/StatusBar.js.map +1 -0
- package/dist/cli/tui/components/TextViewerModal.d.ts +19 -0
- package/dist/cli/tui/components/TextViewerModal.d.ts.map +1 -0
- package/dist/cli/tui/components/TextViewerModal.js +227 -0
- package/dist/cli/tui/components/TextViewerModal.js.map +1 -0
- package/dist/cli/tui/hooks/useBodyExport.d.ts +26 -0
- package/dist/cli/tui/hooks/useBodyExport.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useBodyExport.js +173 -0
- package/dist/cli/tui/hooks/useBodyExport.js.map +1 -0
- package/dist/cli/tui/hooks/useExport.d.ts +29 -0
- package/dist/cli/tui/hooks/useExport.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useExport.js +64 -0
- package/dist/cli/tui/hooks/useExport.js.map +1 -0
- package/dist/cli/tui/hooks/useRequests.d.ts +26 -0
- package/dist/cli/tui/hooks/useRequests.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useRequests.js +131 -0
- package/dist/cli/tui/hooks/useRequests.js.map +1 -0
- package/dist/cli/tui/hooks/useSaveBinary.d.ts +26 -0
- package/dist/cli/tui/hooks/useSaveBinary.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useSaveBinary.js +165 -0
- package/dist/cli/tui/hooks/useSaveBinary.js.map +1 -0
- package/dist/cli/tui/hooks/useSpinner.d.ts +5 -0
- package/dist/cli/tui/hooks/useSpinner.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useSpinner.js +25 -0
- package/dist/cli/tui/hooks/useSpinner.js.map +1 -0
- package/dist/cli/tui/hooks/useStdoutDimensions.d.ts +11 -0
- package/dist/cli/tui/hooks/useStdoutDimensions.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useStdoutDimensions.js +29 -0
- package/dist/cli/tui/hooks/useStdoutDimensions.js.map +1 -0
- package/dist/cli/tui/utils/binary.d.ts +24 -0
- package/dist/cli/tui/utils/binary.d.ts.map +1 -0
- package/dist/cli/tui/utils/binary.js +152 -0
- package/dist/cli/tui/utils/binary.js.map +1 -0
- package/dist/cli/tui/utils/clipboard.d.ts +9 -0
- package/dist/cli/tui/utils/clipboard.d.ts.map +1 -0
- package/dist/cli/tui/utils/clipboard.js +58 -0
- package/dist/cli/tui/utils/clipboard.js.map +1 -0
- package/dist/cli/tui/utils/content-type.d.ts +8 -0
- package/dist/cli/tui/utils/content-type.d.ts.map +1 -0
- package/dist/cli/tui/utils/content-type.js +10 -0
- package/dist/cli/tui/utils/content-type.js.map +1 -0
- package/dist/cli/tui/utils/curl.d.ts +9 -0
- package/dist/cli/tui/utils/curl.d.ts.map +1 -0
- package/dist/cli/tui/utils/curl.js +54 -0
- package/dist/cli/tui/utils/curl.js.map +1 -0
- package/dist/cli/tui/utils/filters.d.ts +6 -0
- package/dist/cli/tui/utils/filters.d.ts.map +1 -0
- package/dist/cli/tui/utils/filters.js +13 -0
- package/dist/cli/tui/utils/filters.js.map +1 -0
- package/dist/cli/tui/utils/formatters.d.ts +49 -0
- package/dist/cli/tui/utils/formatters.d.ts.map +1 -0
- package/dist/cli/tui/utils/formatters.js +200 -0
- package/dist/cli/tui/utils/formatters.js.map +1 -0
- package/dist/cli/tui/utils/har.d.ts +75 -0
- package/dist/cli/tui/utils/har.d.ts.map +1 -0
- package/dist/cli/tui/utils/har.js +117 -0
- package/dist/cli/tui/utils/har.js.map +1 -0
- package/dist/cli/tui/utils/json-tree.d.ts +69 -0
- package/dist/cli/tui/utils/json-tree.d.ts.map +1 -0
- package/dist/cli/tui/utils/json-tree.js +339 -0
- package/dist/cli/tui/utils/json-tree.js.map +1 -0
- package/dist/cli/tui/utils/open-external.d.ts +17 -0
- package/dist/cli/tui/utils/open-external.d.ts.map +1 -0
- package/dist/cli/tui/utils/open-external.js +57 -0
- package/dist/cli/tui/utils/open-external.js.map +1 -0
- package/dist/cli/tui/utils/syntax-highlight.d.ts +16 -0
- package/dist/cli/tui/utils/syntax-highlight.d.ts.map +1 -0
- package/dist/cli/tui/utils/syntax-highlight.js +64 -0
- package/dist/cli/tui/utils/syntax-highlight.js.map +1 -0
- package/dist/daemon/control.d.ts +21 -0
- package/dist/daemon/control.d.ts.map +1 -0
- package/dist/daemon/control.js +311 -0
- package/dist/daemon/control.js.map +1 -0
- package/dist/daemon/htpx-client.d.ts +8 -0
- package/dist/daemon/htpx-client.d.ts.map +1 -0
- package/dist/daemon/htpx-client.js +25 -0
- package/dist/daemon/htpx-client.js.map +1 -0
- package/dist/daemon/index.d.ts +3 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +178 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/interceptor-loader.d.ts +30 -0
- package/dist/daemon/interceptor-loader.d.ts.map +1 -0
- package/dist/daemon/interceptor-loader.js +249 -0
- package/dist/daemon/interceptor-loader.js.map +1 -0
- package/dist/daemon/interceptor-runner.d.ts +39 -0
- package/dist/daemon/interceptor-runner.d.ts.map +1 -0
- package/dist/daemon/interceptor-runner.js +312 -0
- package/dist/daemon/interceptor-runner.js.map +1 -0
- package/dist/daemon/procsi-client.d.ts +8 -0
- package/dist/daemon/procsi-client.d.ts.map +1 -0
- package/dist/daemon/procsi-client.js +25 -0
- package/dist/daemon/procsi-client.js.map +1 -0
- package/dist/daemon/proxy.d.ts +34 -0
- package/dist/daemon/proxy.d.ts.map +1 -0
- package/dist/daemon/proxy.js +213 -0
- package/dist/daemon/proxy.js.map +1 -0
- package/dist/daemon/storage.d.ts +130 -0
- package/dist/daemon/storage.d.ts.map +1 -0
- package/dist/daemon/storage.js +761 -0
- package/dist/daemon/storage.js.map +1 -0
- package/dist/interceptors.d.ts +2 -0
- package/dist/interceptors.d.ts.map +1 -0
- package/dist/interceptors.js +2 -0
- package/dist/interceptors.js.map +1 -0
- package/dist/mcp/server.d.ts +110 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +806 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/overrides/node.d.ts +30 -0
- package/dist/overrides/node.d.ts.map +1 -0
- package/dist/overrides/node.js +66 -0
- package/dist/overrides/node.js.map +1 -0
- package/dist/shared/config.d.ts +21 -0
- package/dist/shared/config.d.ts.map +1 -0
- package/dist/shared/config.js +83 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/content-type.d.ts +64 -0
- package/dist/shared/content-type.d.ts.map +1 -0
- package/dist/shared/content-type.js +145 -0
- package/dist/shared/content-type.js.map +1 -0
- package/dist/shared/control-client.d.ts +144 -0
- package/dist/shared/control-client.d.ts.map +1 -0
- package/dist/shared/control-client.js +272 -0
- package/dist/shared/control-client.js.map +1 -0
- package/dist/shared/daemon.d.ts +33 -0
- package/dist/shared/daemon.d.ts.map +1 -0
- package/dist/shared/daemon.js +231 -0
- package/dist/shared/daemon.js.map +1 -0
- package/dist/shared/logger.d.ts +47 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/logger.js +200 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/project.d.ts +76 -0
- package/dist/shared/project.d.ts.map +1 -0
- package/dist/shared/project.js +185 -0
- package/dist/shared/project.js.map +1 -0
- package/dist/shared/proxy-info.d.ts +10 -0
- package/dist/shared/proxy-info.d.ts.map +1 -0
- package/dist/shared/proxy-info.js +15 -0
- package/dist/shared/proxy-info.js.map +1 -0
- package/dist/shared/types.d.ts +128 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +5 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/shared/version.d.ts +5 -0
- package/dist/shared/version.d.ts.map +1 -0
- package/dist/shared/version.js +21 -0
- package/dist/shared/version.js.map +1 -0
- package/package.json +113 -0
- package/skills/procsi/SKILL.md +228 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Content components for accordion sections: headers, body, binary, truncated.
|
|
4
|
+
*/
|
|
5
|
+
import { useMemo } from "react";
|
|
6
|
+
import { Box, Text } from "ink";
|
|
7
|
+
import { formatSize } from "../utils/formatters.js";
|
|
8
|
+
import { isBinaryContent, getBinaryTypeDescription } from "../utils/binary.js";
|
|
9
|
+
import { highlightCode } from "../utils/syntax-highlight.js";
|
|
10
|
+
/** Only process the first 10 KB of body content for display — full body remains available for export/save. */
|
|
11
|
+
const BODY_PREVIEW_LIMIT = 10 * 1024;
|
|
12
|
+
import { isJsonContent } from "../utils/content-type.js";
|
|
13
|
+
/**
|
|
14
|
+
* Display request/response headers as key-value pairs.
|
|
15
|
+
*/
|
|
16
|
+
export function HeadersContent({ headers, maxLines, }) {
|
|
17
|
+
const entries = headers ? Object.entries(headers) : [];
|
|
18
|
+
if (entries.length === 0) {
|
|
19
|
+
return _jsx(Text, { dimColor: true, children: "No headers" });
|
|
20
|
+
}
|
|
21
|
+
const visibleEntries = entries.slice(0, maxLines);
|
|
22
|
+
const remaining = entries.length - visibleEntries.length;
|
|
23
|
+
return (_jsxs(Box, { flexDirection: "column", children: [visibleEntries.map(([name, value]) => (_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: name }), _jsx(Text, { children: ": " }), _jsx(Text, { wrap: "truncate", children: value })] }, name))), remaining > 0 && _jsxs(Text, { dimColor: true, children: ["... and ", remaining, " more"] })] }));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Display a message for bodies that were too large to capture.
|
|
27
|
+
*/
|
|
28
|
+
export function TruncatedBodyContent({ contentLength, }) {
|
|
29
|
+
const size = contentLength ? formatSize(parseInt(contentLength, 10)) : "unknown size";
|
|
30
|
+
return (_jsxs(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", children: [_jsxs(Text, { dimColor: true, children: ["Body too large to capture (", size, ")"] }), _jsx(Text, { dimColor: true, children: "Content delivered to client" })] }));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Display a message for binary content with save prompt.
|
|
34
|
+
*/
|
|
35
|
+
function BinaryBodyContent({ body, contentType, }) {
|
|
36
|
+
const description = getBinaryTypeDescription(contentType);
|
|
37
|
+
const size = formatSize(body.length);
|
|
38
|
+
return (_jsxs(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", children: [_jsxs(Text, { dimColor: true, children: [description, " content (", size, ")"] }), _jsx(Text, { color: "cyan", children: "Press 's' to export" })] }));
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Display body content with JSON pretty-printing and binary detection.
|
|
42
|
+
*/
|
|
43
|
+
export function BodyContent({ body, contentType, maxLines, isTruncated, contentLength, }) {
|
|
44
|
+
// All hooks must be called before any conditional returns
|
|
45
|
+
const binaryCheck = useMemo(() => isBinaryContent(body, contentType), [body, contentType]);
|
|
46
|
+
// Compute text lines (only used for text content, but must be called unconditionally)
|
|
47
|
+
const lines = useMemo(() => {
|
|
48
|
+
if (!body || body.length === 0) {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
const truncated = body.length > BODY_PREVIEW_LIMIT;
|
|
52
|
+
let text = (truncated ? body.subarray(0, BODY_PREVIEW_LIMIT) : body).toString("utf-8");
|
|
53
|
+
if (isJsonContent(contentType) && !truncated) {
|
|
54
|
+
try {
|
|
55
|
+
const parsed = JSON.parse(text);
|
|
56
|
+
text = JSON.stringify(parsed, null, 2);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Not valid JSON, keep original text
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Apply syntax highlighting (returns original on failure or unknown type)
|
|
63
|
+
text = highlightCode(text, contentType);
|
|
64
|
+
const result = text.split("\n");
|
|
65
|
+
if (truncated) {
|
|
66
|
+
result.push(`... truncated (${formatSize(body.length)} total)`);
|
|
67
|
+
}
|
|
68
|
+
return result;
|
|
69
|
+
}, [body, contentType]);
|
|
70
|
+
// Handle truncated bodies
|
|
71
|
+
if (isTruncated) {
|
|
72
|
+
return _jsx(TruncatedBodyContent, { contentLength: contentLength });
|
|
73
|
+
}
|
|
74
|
+
// Handle empty bodies
|
|
75
|
+
if (!body || body.length === 0) {
|
|
76
|
+
return _jsx(Text, { dimColor: true, children: "(empty)" });
|
|
77
|
+
}
|
|
78
|
+
// Handle binary content
|
|
79
|
+
if (binaryCheck.isBinary) {
|
|
80
|
+
return _jsx(BinaryBodyContent, { body: body, contentType: contentType });
|
|
81
|
+
}
|
|
82
|
+
// Text content
|
|
83
|
+
const visibleLines = lines.slice(0, maxLines);
|
|
84
|
+
const remaining = lines.length - visibleLines.length;
|
|
85
|
+
return (_jsxs(Box, { flexDirection: "column", children: [visibleLines.map((line, index) => (_jsx(Text, { wrap: "truncate", children: line }, index))), remaining > 0 && _jsxs(Text, { dimColor: true, children: ["... ", remaining, " more lines"] })] }));
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=AccordionContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionContent.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/AccordionContent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Container component managing 4 collapsible accordion sections for request details.
|
|
3
|
+
* Sections: Request, Request Body, Response, Response Body
|
|
4
|
+
*
|
|
5
|
+
* Renders as a single cohesive panel with connected borders:
|
|
6
|
+
* ┌─ ▶ [2] Request ──────────────────────────┐
|
|
7
|
+
* ├─ ▶ [3] Request Body ─────────────────────┤
|
|
8
|
+
* ├─ ▶ [4] Response ─────────────── 200 OK ──┤
|
|
9
|
+
* ├─ ▶ [5] Response Body ─────────── html ───┤
|
|
10
|
+
* │ content here... │
|
|
11
|
+
* └──────────────────────────────────────────┘
|
|
12
|
+
*/
|
|
13
|
+
import React from "react";
|
|
14
|
+
import { type DOMElement } from "ink";
|
|
15
|
+
import type { CapturedRequest } from "../../../shared/types.js";
|
|
16
|
+
/**
|
|
17
|
+
* Section indices (used for keyboard shortcuts 2-5)
|
|
18
|
+
*/
|
|
19
|
+
export declare const SECTION_REQUEST = 0;
|
|
20
|
+
export declare const SECTION_REQUEST_BODY = 1;
|
|
21
|
+
export declare const SECTION_RESPONSE = 2;
|
|
22
|
+
export declare const SECTION_RESPONSE_BODY = 3;
|
|
23
|
+
interface AccordionPanelProps {
|
|
24
|
+
request: CapturedRequest | null | undefined;
|
|
25
|
+
width: number;
|
|
26
|
+
height: number;
|
|
27
|
+
isActive: boolean;
|
|
28
|
+
focusedSection: number;
|
|
29
|
+
expandedSections: Set<number>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check if a body section has content that can be exported (copied, saved, opened).
|
|
33
|
+
* Any non-empty, non-truncated body is exportable regardless of content type.
|
|
34
|
+
*/
|
|
35
|
+
export declare function hasExportableBody(body: Buffer | undefined, isTruncated: boolean | undefined): boolean;
|
|
36
|
+
export declare const AccordionPanel: React.ForwardRefExoticComponent<AccordionPanelProps & React.RefAttributes<DOMElement>>;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=AccordionPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionPanel.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/AccordionPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAWhE;;GAEG;AACH,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,UAAU,mBAAmB;IAC3B,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,WAAW,EAAE,OAAO,GAAG,SAAS,GAC/B,OAAO,CAET;AAgDD,eAAO,MAAM,cAAc,wFAmKzB,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Container component managing 4 collapsible accordion sections for request details.
|
|
4
|
+
* Sections: Request, Request Body, Response, Response Body
|
|
5
|
+
*
|
|
6
|
+
* Renders as a single cohesive panel with connected borders:
|
|
7
|
+
* ┌─ ▶ [2] Request ──────────────────────────┐
|
|
8
|
+
* ├─ ▶ [3] Request Body ─────────────────────┤
|
|
9
|
+
* ├─ ▶ [4] Response ─────────────── 200 OK ──┤
|
|
10
|
+
* ├─ ▶ [5] Response Body ─────────── html ───┤
|
|
11
|
+
* │ content here... │
|
|
12
|
+
* └──────────────────────────────────────────┘
|
|
13
|
+
*/
|
|
14
|
+
import { forwardRef } from "react";
|
|
15
|
+
import { Box, Text } from "ink";
|
|
16
|
+
import { AccordionSection } from "./AccordionSection.js";
|
|
17
|
+
import { HeadersContent, BodyContent, TruncatedBodyContent } from "./AccordionContent.js";
|
|
18
|
+
import { formatSize, getStatusText, shortContentType, formatMethod, breakUrl } from "../utils/formatters.js";
|
|
19
|
+
// Box drawing characters for the bottom border
|
|
20
|
+
const BOX = {
|
|
21
|
+
bottomLeft: "└",
|
|
22
|
+
bottomRight: "┘",
|
|
23
|
+
horizontal: "─",
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Section indices (used for keyboard shortcuts 2-5)
|
|
27
|
+
*/
|
|
28
|
+
export const SECTION_REQUEST = 0;
|
|
29
|
+
export const SECTION_REQUEST_BODY = 1;
|
|
30
|
+
export const SECTION_RESPONSE = 2;
|
|
31
|
+
export const SECTION_RESPONSE_BODY = 3;
|
|
32
|
+
/**
|
|
33
|
+
* Check if a body section has content that can be exported (copied, saved, opened).
|
|
34
|
+
* Any non-empty, non-truncated body is exportable regardless of content type.
|
|
35
|
+
*/
|
|
36
|
+
export function hasExportableBody(body, isTruncated) {
|
|
37
|
+
return !isTruncated && !!body && body.length > 0;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Calculate height distribution for sections.
|
|
41
|
+
* Collapsed sections get 1 row, expanded sections share the remaining space equally.
|
|
42
|
+
* Reserves 1 row for the bottom border.
|
|
43
|
+
*/
|
|
44
|
+
function calculateHeights(totalHeight, expandedSections, sectionCount) {
|
|
45
|
+
const collapsedCount = sectionCount - expandedSections.size;
|
|
46
|
+
const expandedCount = expandedSections.size;
|
|
47
|
+
// Reserve 1 row for bottom border
|
|
48
|
+
const availableHeight = totalHeight - 1;
|
|
49
|
+
// Each collapsed section takes 1 row
|
|
50
|
+
const collapsedHeight = collapsedCount;
|
|
51
|
+
const remainingHeight = availableHeight - collapsedHeight;
|
|
52
|
+
// Minimum height for expanded sections
|
|
53
|
+
const minExpandedHeight = 3;
|
|
54
|
+
const heights = [];
|
|
55
|
+
if (expandedCount === 0) {
|
|
56
|
+
// All collapsed - each gets 1 row
|
|
57
|
+
for (let i = 0; i < sectionCount; i++) {
|
|
58
|
+
heights.push(1);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
// Distribute remaining height among expanded sections
|
|
63
|
+
const expandedHeight = Math.max(minExpandedHeight, Math.floor(remainingHeight / expandedCount));
|
|
64
|
+
for (let i = 0; i < sectionCount; i++) {
|
|
65
|
+
if (expandedSections.has(i)) {
|
|
66
|
+
heights.push(expandedHeight);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
heights.push(1);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return heights;
|
|
74
|
+
}
|
|
75
|
+
export const AccordionPanel = forwardRef(function AccordionPanel({ request, width, height, isActive, focusedSection, expandedSections }, ref) {
|
|
76
|
+
const sectionCount = 4;
|
|
77
|
+
const heights = calculateHeights(height, expandedSections, sectionCount);
|
|
78
|
+
// Extract content type and size info for section headers
|
|
79
|
+
const reqContentType = request?.requestHeaders["content-type"];
|
|
80
|
+
const resContentType = request?.responseHeaders?.["content-type"];
|
|
81
|
+
const reqBodySize = request?.requestBody?.length;
|
|
82
|
+
const resBodySize = request?.responseBody?.length;
|
|
83
|
+
// Build right-aligned values for each section
|
|
84
|
+
const requestRightValue = reqContentType ? shortContentType(reqContentType) : undefined;
|
|
85
|
+
const requestBodyRightValue = reqContentType || reqBodySize
|
|
86
|
+
? `${shortContentType(reqContentType)}${reqBodySize ? ` ${formatSize(reqBodySize)}` : ""}`
|
|
87
|
+
: undefined;
|
|
88
|
+
const responseRightValue = request?.responseStatus !== undefined
|
|
89
|
+
? `${request.responseStatus} ${getStatusText(request.responseStatus)}`
|
|
90
|
+
: undefined;
|
|
91
|
+
const responseBodyRightValue = resContentType || resBodySize
|
|
92
|
+
? `${shortContentType(resContentType)}${resBodySize ? ` ${formatSize(resBodySize)}` : ""}`
|
|
93
|
+
: undefined;
|
|
94
|
+
// Calculate content lines available for each expanded section
|
|
95
|
+
// Height includes header (1 row) and borders (2 rows for bottom)
|
|
96
|
+
const getContentLines = (sectionHeight) => Math.max(1, sectionHeight - 3);
|
|
97
|
+
// Determine border colour based on whether any section is focused
|
|
98
|
+
const getBorderColour = (sectionIndex) => {
|
|
99
|
+
if (!isActive)
|
|
100
|
+
return "gray";
|
|
101
|
+
return focusedSection === sectionIndex ? "cyan" : "white";
|
|
102
|
+
};
|
|
103
|
+
// Build the bottom border line
|
|
104
|
+
const bottomBorder = `${BOX.bottomLeft}${BOX.horizontal.repeat(width - 2)}${BOX.bottomRight}`;
|
|
105
|
+
if (!request) {
|
|
106
|
+
return (_jsx(Box, { ref: ref, flexDirection: "column", width: width, height: height, children: _jsx(Box, { flexGrow: 1, alignItems: "center", justifyContent: "center", children: _jsx(Text, { dimColor: true, children: "Select a request to view details" }) }) }));
|
|
107
|
+
}
|
|
108
|
+
return (_jsxs(Box, { ref: ref, flexDirection: "column", width: width, height: height, children: [_jsx(AccordionSection, { title: "[2] Request", rightValue: requestRightValue, isExpanded: expandedSections.has(SECTION_REQUEST), isFocused: isActive && focusedSection === SECTION_REQUEST, height: heights[SECTION_REQUEST] ?? 1, width: width, isFirst: true, borderColour: getBorderColour(SECTION_REQUEST), children: _jsxs(Box, { flexDirection: "column", children: [request.interceptedBy && (_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: "magenta", bold: true, children: "Intercepted by: " }), _jsx(Text, { children: request.interceptedBy }), request.interceptionType && (_jsxs(Text, { dimColor: true, children: [" (", request.interceptionType, ")"] }))] })), _jsxs(Box, { marginBottom: 1, children: [_jsx(Box, { width: 8, flexShrink: 0, children: _jsx(Text, { color: "green", bold: true, children: formatMethod(request.method) }) }), _jsx(Text, { wrap: "truncate", children: breakUrl(request.url) })] }), _jsx(HeadersContent, { headers: request.requestHeaders, maxLines: getContentLines(heights[SECTION_REQUEST] ?? 1) - 2 })] }) }), _jsx(AccordionSection, { title: "[3] Request Body", rightValue: requestBodyRightValue, isExpanded: expandedSections.has(SECTION_REQUEST_BODY), isFocused: isActive && focusedSection === SECTION_REQUEST_BODY, height: heights[SECTION_REQUEST_BODY] ?? 1, width: width, isFirst: false, borderColour: getBorderColour(SECTION_REQUEST_BODY), children: request.requestBody && request.requestBody.length > 0 ? (_jsx(BodyContent, { body: request.requestBody, contentType: reqContentType, maxLines: getContentLines(heights[SECTION_REQUEST_BODY] ?? 1), isTruncated: request.requestBodyTruncated, contentLength: request.requestHeaders["content-length"] })) : request.requestBodyTruncated ? (_jsx(TruncatedBodyContent, { contentLength: request.requestHeaders["content-length"] })) : (_jsx(Text, { dimColor: true, children: "(no body)" })) }), _jsx(AccordionSection, { title: "[4] Response", rightValue: responseRightValue, isExpanded: expandedSections.has(SECTION_RESPONSE), isFocused: isActive && focusedSection === SECTION_RESPONSE, height: heights[SECTION_RESPONSE] ?? 1, width: width, isFirst: false, borderColour: getBorderColour(SECTION_RESPONSE), children: request.responseHeaders ? (_jsx(HeadersContent, { headers: request.responseHeaders, maxLines: getContentLines(heights[SECTION_RESPONSE] ?? 1) })) : (_jsx(Text, { dimColor: true, children: "(pending response)" })) }), _jsx(AccordionSection, { title: "[5] Response Body", rightValue: responseBodyRightValue, isExpanded: expandedSections.has(SECTION_RESPONSE_BODY), isFocused: isActive && focusedSection === SECTION_RESPONSE_BODY, height: heights[SECTION_RESPONSE_BODY] ?? 1, width: width, isFirst: false, borderColour: getBorderColour(SECTION_RESPONSE_BODY), children: request.responseBody && request.responseBody.length > 0 ? (_jsx(BodyContent, { body: request.responseBody, contentType: resContentType, maxLines: getContentLines(heights[SECTION_RESPONSE_BODY] ?? 1), isTruncated: request.responseBodyTruncated, contentLength: request.responseHeaders?.["content-length"] })) : request.responseBodyTruncated ? (_jsx(TruncatedBodyContent, { contentLength: request.responseHeaders?.["content-length"] })) : (_jsx(Text, { dimColor: true, children: "(no body)" })) }), _jsx(Text, { color: isActive ? "white" : "gray", children: bottomBorder })] }));
|
|
109
|
+
});
|
|
110
|
+
//# sourceMappingURL=AccordionPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionPanel.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/AccordionPanel.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;AAEH,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAmB,MAAM,KAAK,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC7G,+CAA+C;AAC/C,MAAM,GAAG,GAAG;IACV,UAAU,EAAE,GAAG;IACf,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,GAAG;CACP,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AACjC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAWvC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAwB,EACxB,WAAgC;IAEhC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CACvB,WAAmB,EACnB,gBAA6B,EAC7B,YAAoB;IAEpB,MAAM,cAAc,GAAG,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC;IAC5D,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC;IAE5C,kCAAkC;IAClC,MAAM,eAAe,GAAG,WAAW,GAAG,CAAC,CAAC;IAExC,qCAAqC;IACrC,MAAM,eAAe,GAAG,cAAc,CAAC;IACvC,MAAM,eAAe,GAAG,eAAe,GAAG,eAAe,CAAC;IAE1D,uCAAuC;IACvC,MAAM,iBAAiB,GAAG,CAAC,CAAC;IAE5B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;QACxB,kCAAkC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,sDAAsD;QACtD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC;QAEhG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAkC,SAAS,cAAc,CAC/F,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,EACtE,GAAG;IAEH,MAAM,YAAY,GAAG,CAAC,CAAC;IACvB,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAEzE,yDAAyD;IACzD,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;IAC/D,MAAM,cAAc,GAAG,OAAO,EAAE,eAAe,EAAE,CAAC,cAAc,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC;IACjD,MAAM,WAAW,GAAG,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC;IAElD,8CAA8C;IAC9C,MAAM,iBAAiB,GAAG,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,MAAM,qBAAqB,GACzB,cAAc,IAAI,WAAW;QAC3B,CAAC,CAAC,GAAG,gBAAgB,CAAC,cAAc,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1F,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,kBAAkB,GACtB,OAAO,EAAE,cAAc,KAAK,SAAS;QACnC,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,IAAI,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;QACtE,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,sBAAsB,GAC1B,cAAc,IAAI,WAAW;QAC3B,CAAC,CAAC,GAAG,gBAAgB,CAAC,cAAc,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1F,CAAC,CAAC,SAAS,CAAC;IAEhB,8DAA8D;IAC9D,iEAAiE;IACjE,MAAM,eAAe,GAAG,CAAC,aAAqB,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;IAElF,kEAAkE;IAClE,MAAM,eAAe,GAAG,CAAC,YAAoB,EAAU,EAAE;QACvD,IAAI,CAAC,QAAQ;YAAE,OAAO,MAAM,CAAC;QAC7B,OAAO,cAAc,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5D,CAAC,CAAC;IAEF,+BAA+B;IAC/B,MAAM,YAAY,GAAG,GAAG,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAE9F,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CACL,KAAC,GAAG,IAAC,GAAG,EAAE,GAAG,EAAE,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAChE,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAC,cAAc,EAAC,QAAQ,YAC3D,KAAC,IAAI,IAAC,QAAQ,uDAAwC,GAClD,GACF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAC,GAAG,IAAC,GAAG,EAAE,GAAG,EAAE,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAEhE,KAAC,gBAAgB,IACf,KAAK,EAAC,aAAa,EACnB,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,EACjD,SAAS,EAAE,QAAQ,IAAI,cAAc,KAAK,eAAe,EACzD,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EACrC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,IAAI,EACb,YAAY,EAAE,eAAe,CAAC,eAAe,CAAC,YAE9C,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,OAAO,CAAC,aAAa,IAAI,CACxB,MAAC,GAAG,IAAC,YAAY,EAAE,CAAC,aAClB,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,uCAAwB,EAClD,KAAC,IAAI,cAAE,OAAO,CAAC,aAAa,GAAQ,EACnC,OAAO,CAAC,gBAAgB,IAAI,CAC3B,MAAC,IAAI,IAAC,QAAQ,yBAAI,OAAO,CAAC,gBAAgB,SAAS,CACpD,IACG,CACP,EACD,MAAC,GAAG,IAAC,YAAY,EAAE,CAAC,aAClB,KAAC,GAAG,IAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YAC1B,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,kBACrB,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,GACxB,GACH,EACN,KAAC,IAAI,IAAC,IAAI,EAAC,UAAU,YAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAQ,IAChD,EACN,KAAC,cAAc,IAAC,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAI,IAC7G,GACW,EAGnB,KAAC,gBAAgB,IACf,KAAK,EAAC,kBAAkB,EACxB,UAAU,EAAE,qBAAqB,EACjC,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC,EACtD,SAAS,EAAE,QAAQ,IAAI,cAAc,KAAK,oBAAoB,EAC9D,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAC1C,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,KAAK,EACd,YAAY,EAAE,eAAe,CAAC,oBAAoB,CAAC,YAElD,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACvD,KAAC,WAAW,IACV,IAAI,EAAE,OAAO,CAAC,WAAW,EACzB,WAAW,EAAE,cAAc,EAC3B,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAC7D,WAAW,EAAE,OAAO,CAAC,oBAAoB,EACzC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,GACvD,CACH,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CACjC,KAAC,oBAAoB,IAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,GAAI,CAClF,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,QAAQ,gCAAiB,CAChC,GACgB,EAGnB,KAAC,gBAAgB,IACf,KAAK,EAAC,cAAc,EACpB,UAAU,EAAE,kBAAkB,EAC9B,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAClD,SAAS,EAAE,QAAQ,IAAI,cAAc,KAAK,gBAAgB,EAC1D,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EACtC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,KAAK,EACd,YAAY,EAAE,eAAe,CAAC,gBAAgB,CAAC,YAE9C,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CACzB,KAAC,cAAc,IACb,OAAO,EAAE,OAAO,CAAC,eAAe,EAChC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GACzD,CACH,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,QAAQ,yCAA0B,CACzC,GACgB,EAGnB,KAAC,gBAAgB,IACf,KAAK,EAAC,mBAAmB,EACzB,UAAU,EAAE,sBAAsB,EAClC,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,qBAAqB,CAAC,EACvD,SAAS,EAAE,QAAQ,IAAI,cAAc,KAAK,qBAAqB,EAC/D,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAC3C,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,KAAK,EACd,YAAY,EAAE,eAAe,CAAC,qBAAqB,CAAC,YAEnD,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACzD,KAAC,WAAW,IACV,IAAI,EAAE,OAAO,CAAC,YAAY,EAC1B,WAAW,EAAE,cAAc,EAC3B,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,EAC9D,WAAW,EAAE,OAAO,CAAC,qBAAqB,EAC1C,aAAa,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,gBAAgB,CAAC,GAC1D,CACH,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAClC,KAAC,oBAAoB,IAAC,aAAa,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,gBAAgB,CAAC,GAAI,CACrF,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,QAAQ,gCAAiB,CAChC,GACgB,EAGnB,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,YAAG,YAAY,GAAQ,IAC3D,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A collapsible section component for the accordion panel.
|
|
3
|
+
* Shows a divider line with expand/collapse indicator, title, and optional right-aligned accessory text.
|
|
4
|
+
* When expanded, shows content below the divider.
|
|
5
|
+
*
|
|
6
|
+
* This component is designed to be used within an AccordionPanel which provides
|
|
7
|
+
* the outer container with left/right vertical borders and bottom border.
|
|
8
|
+
*/
|
|
9
|
+
import React from "react";
|
|
10
|
+
export interface AccordionSectionProps {
|
|
11
|
+
title: string;
|
|
12
|
+
/** Optional value to display right-aligned in the header (e.g., content-type, size) */
|
|
13
|
+
rightValue?: string;
|
|
14
|
+
isExpanded: boolean;
|
|
15
|
+
isFocused: boolean;
|
|
16
|
+
children: React.ReactNode;
|
|
17
|
+
/** Total height allocated to this section (including divider line) */
|
|
18
|
+
height: number;
|
|
19
|
+
/** Total width of the section */
|
|
20
|
+
width: number;
|
|
21
|
+
/** Whether this is the first section (uses ┌─ ─┐ instead of ├─ ─┤) */
|
|
22
|
+
isFirst: boolean;
|
|
23
|
+
/** Border colour to use */
|
|
24
|
+
borderColour: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Creates the divider line with expand/collapse indicator, title, and right value.
|
|
28
|
+
* Format: ├─ ▼ Title ─────────── value ─┤ (or ┌─...─┐ for first section)
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildDividerLine(title: string, isExpanded: boolean, isFocused: boolean, totalWidth: number, isFirst: boolean, rightValue?: string): string;
|
|
31
|
+
export declare function AccordionSection({ title, rightValue, isExpanded, isFocused, children, height, width, isFirst, borderColour, }: AccordionSectionProps): React.ReactElement;
|
|
32
|
+
//# sourceMappingURL=AccordionSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionSection.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/AccordionSection.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,OAAO,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAiBR;AAGD,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,UAAU,EACV,UAAU,EACV,SAAS,EACT,QAAQ,EACR,MAAM,EACN,KAAK,EACL,OAAO,EACP,YAAY,GACb,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,CA8B5C"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
// Box drawing characters
|
|
4
|
+
const BOX = {
|
|
5
|
+
topLeft: "┌",
|
|
6
|
+
topRight: "┐",
|
|
7
|
+
midLeft: "├",
|
|
8
|
+
midRight: "┤",
|
|
9
|
+
vertical: "│",
|
|
10
|
+
horizontal: "─",
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Creates the divider line with expand/collapse indicator, title, and right value.
|
|
14
|
+
* Format: ├─ ▼ Title ─────────── value ─┤ (or ┌─...─┐ for first section)
|
|
15
|
+
*/
|
|
16
|
+
export function buildDividerLine(title, isExpanded, isFocused, totalWidth, isFirst, rightValue) {
|
|
17
|
+
const indicator = isExpanded ? "▼" : "▶";
|
|
18
|
+
const focusMarker = isFocused ? "»" : " ";
|
|
19
|
+
const titleWithSpaces = ` ${focusMarker} ${indicator} ${title} `;
|
|
20
|
+
const leftCorner = isFirst ? BOX.topLeft : BOX.midLeft;
|
|
21
|
+
const rightCorner = isFirst ? BOX.topRight : BOX.midRight;
|
|
22
|
+
const leftPart = `${leftCorner}${BOX.horizontal}`;
|
|
23
|
+
const rightValueStr = rightValue ? ` ${rightValue} ${BOX.horizontal}` : "";
|
|
24
|
+
const rightPart = rightCorner;
|
|
25
|
+
const usedWidth = leftPart.length + titleWithSpaces.length + rightValueStr.length + rightPart.length;
|
|
26
|
+
const remainingWidth = Math.max(1, totalWidth - usedWidth);
|
|
27
|
+
const dashes = BOX.horizontal.repeat(remainingWidth);
|
|
28
|
+
return `${leftPart}${titleWithSpaces}${dashes}${rightValueStr}${rightPart}`;
|
|
29
|
+
}
|
|
30
|
+
export function AccordionSection({ title, rightValue, isExpanded, isFocused, children, height, width, isFirst, borderColour, }) {
|
|
31
|
+
const dividerLine = buildDividerLine(title, isExpanded, isFocused, width, isFirst, rightValue);
|
|
32
|
+
// When collapsed, only show the divider line
|
|
33
|
+
// Use wrap="truncate" to prevent ink from wrapping the text
|
|
34
|
+
if (!isExpanded) {
|
|
35
|
+
return _jsx(Text, { color: borderColour, bold: isFocused, wrap: "truncate", children: dividerLine });
|
|
36
|
+
}
|
|
37
|
+
// When expanded, show divider + content with left/right borders
|
|
38
|
+
const contentHeight = height - 1;
|
|
39
|
+
return (_jsxs(Box, { flexDirection: "column", width: width, height: height, children: [_jsx(Text, { color: borderColour, bold: isFocused, children: dividerLine }), _jsx(Box, { flexDirection: "column", width: width, height: contentHeight, borderStyle: "single", borderColor: borderColour, borderTop: false, borderBottom: false, overflowY: "hidden", paddingLeft: 1, children: children })] }));
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=AccordionSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionSection.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/AccordionSection.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Display HTTP body with JSON pretty-printing.
|
|
3
|
+
*/
|
|
4
|
+
import React from "react";
|
|
5
|
+
interface BodyViewProps {
|
|
6
|
+
title: string;
|
|
7
|
+
body: Buffer | undefined;
|
|
8
|
+
contentType?: string;
|
|
9
|
+
maxLines?: number;
|
|
10
|
+
scrollOffset?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function BodyView({ title, body, contentType, maxLines, scrollOffset, }: BodyViewProps): React.ReactElement;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=BodyView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BodyView.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/BodyView.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAkB,MAAM,OAAO,CAAC;AAIvC,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAgCD,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,YAAgB,GACjB,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY,CA0BpC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Display HTTP body with JSON pretty-printing.
|
|
4
|
+
*/
|
|
5
|
+
import { useMemo } from "react";
|
|
6
|
+
import { Box, Text } from "ink";
|
|
7
|
+
import { formatSize } from "../utils/formatters.js";
|
|
8
|
+
/**
|
|
9
|
+
* Attempt to parse and format JSON body.
|
|
10
|
+
*/
|
|
11
|
+
function formatBody(body, contentType) {
|
|
12
|
+
if (!body || body.length === 0) {
|
|
13
|
+
return ["(empty)"];
|
|
14
|
+
}
|
|
15
|
+
const bodyStr = body.toString("utf-8");
|
|
16
|
+
// Try JSON formatting if content type suggests JSON or body looks like JSON
|
|
17
|
+
const isJson = contentType?.includes("application/json") ||
|
|
18
|
+
bodyStr.trimStart().startsWith("{") ||
|
|
19
|
+
bodyStr.trimStart().startsWith("[");
|
|
20
|
+
if (isJson) {
|
|
21
|
+
try {
|
|
22
|
+
const parsed = JSON.parse(bodyStr);
|
|
23
|
+
const formatted = JSON.stringify(parsed, null, 2);
|
|
24
|
+
return formatted.split("\n");
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Not valid JSON, show as-is
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// For non-JSON or invalid JSON, show as-is with line breaks
|
|
31
|
+
return bodyStr.split("\n");
|
|
32
|
+
}
|
|
33
|
+
export function BodyView({ title, body, contentType, maxLines, scrollOffset = 0, }) {
|
|
34
|
+
const lines = useMemo(() => formatBody(body, contentType), [body, contentType]);
|
|
35
|
+
const visibleLines = maxLines !== undefined ? lines.slice(scrollOffset, scrollOffset + maxLines) : lines;
|
|
36
|
+
const sizeStr = body ? formatSize(body.length) : "-";
|
|
37
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "yellow", children: title }), _jsxs(Text, { dimColor: true, children: [" (", sizeStr, ")"] })] }), visibleLines.map((line, index) => (_jsx(Text, { wrap: "truncate", children: line }, scrollOffset + index))), maxLines !== undefined && lines.length > maxLines + scrollOffset && (_jsxs(Text, { dimColor: true, children: ["... ", lines.length - maxLines - scrollOffset, " more lines"] }))] }));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=BodyView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BodyView.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/BodyView.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAc,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAUpD;;GAEG;AACH,SAAS,UAAU,CAAC,IAAwB,EAAE,WAAoB;IAChE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEvC,4EAA4E;IAC5E,MAAM,MAAM,GACV,WAAW,EAAE,QAAQ,CAAC,kBAAkB,CAAC;QACzC,OAAO,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QACnC,OAAO,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;YAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAClD,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,EACL,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,YAAY,GAAG,CAAC,GACF;IACd,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAEhF,MAAM,YAAY,GAChB,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAEtF,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAErD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,QAAQ,YACtB,KAAK,GACD,EACP,MAAC,IAAI,IAAC,QAAQ,yBAAI,OAAO,SAAS,IAC9B,EACL,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACjC,KAAC,IAAI,IAA4B,IAAI,EAAC,UAAU,YAC7C,IAAI,IADI,YAAY,GAAG,KAAK,CAExB,CACR,CAAC,EACD,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,GAAG,YAAY,IAAI,CACnE,MAAC,IAAI,IAAC,QAAQ,2BAAM,KAAK,CAAC,MAAM,GAAG,QAAQ,GAAG,YAAY,mBAAmB,CAC9E,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Full-screen export dialog for body content.
|
|
3
|
+
*
|
|
4
|
+
* Replaces the main TUI when active (terminals don't support true overlays).
|
|
5
|
+
*
|
|
6
|
+
* Provides five options:
|
|
7
|
+
* [1] Copy to clipboard
|
|
8
|
+
* [2] .procsi/exports/ - Project exports folder
|
|
9
|
+
* [3] ~/Downloads/ - Downloads folder
|
|
10
|
+
* [4] Custom path... - Text input
|
|
11
|
+
* [5] Open externally - Default app
|
|
12
|
+
*/
|
|
13
|
+
import React from "react";
|
|
14
|
+
export type ExportAction = "clipboard" | "exports" | "downloads" | "custom" | "open-external";
|
|
15
|
+
export interface ExportModalProps {
|
|
16
|
+
/** Filename being exported */
|
|
17
|
+
filename: string;
|
|
18
|
+
/** File size for display */
|
|
19
|
+
fileSize: string;
|
|
20
|
+
/** Whether the body is binary content */
|
|
21
|
+
isBinary: boolean;
|
|
22
|
+
/** Screen width */
|
|
23
|
+
width: number;
|
|
24
|
+
/** Screen height */
|
|
25
|
+
height: number;
|
|
26
|
+
/** Called when user selects an export action */
|
|
27
|
+
onExport: (action: ExportAction, customPath?: string) => void;
|
|
28
|
+
/** Called when modal should close */
|
|
29
|
+
onClose: () => void;
|
|
30
|
+
/** Whether input is active (for testing) */
|
|
31
|
+
isActive?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export declare function ExportModal({ filename, fileSize, isBinary, width, height, onExport, onClose, isActive, }: ExportModalProps): React.ReactElement;
|
|
34
|
+
//# sourceMappingURL=ExportModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExportModal.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/ExportModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,eAAe,CAAC;AAE9F,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,qCAAqC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA0CD,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,QAAe,GAChB,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAuHvC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Full-screen export dialog for body content.
|
|
4
|
+
*
|
|
5
|
+
* Replaces the main TUI when active (terminals don't support true overlays).
|
|
6
|
+
*
|
|
7
|
+
* Provides five options:
|
|
8
|
+
* [1] Copy to clipboard
|
|
9
|
+
* [2] .procsi/exports/ - Project exports folder
|
|
10
|
+
* [3] ~/Downloads/ - Downloads folder
|
|
11
|
+
* [4] Custom path... - Text input
|
|
12
|
+
* [5] Open externally - Default app
|
|
13
|
+
*/
|
|
14
|
+
import { useState } from "react";
|
|
15
|
+
import { Box, Text, useInput } from "ink";
|
|
16
|
+
const OPTIONS = [
|
|
17
|
+
{
|
|
18
|
+
key: "1",
|
|
19
|
+
action: "clipboard",
|
|
20
|
+
label: "Copy to clipboard",
|
|
21
|
+
description: "Copy body text to clipboard",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
key: "2",
|
|
25
|
+
action: "exports",
|
|
26
|
+
label: ".procsi/exports/",
|
|
27
|
+
description: "Project exports folder",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
key: "3",
|
|
31
|
+
action: "downloads",
|
|
32
|
+
label: "~/Downloads/",
|
|
33
|
+
description: "Downloads folder",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
key: "4",
|
|
37
|
+
action: "custom",
|
|
38
|
+
label: "Custom path...",
|
|
39
|
+
description: "Enter a custom directory",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
key: "5",
|
|
43
|
+
action: "open-external",
|
|
44
|
+
label: "Open externally",
|
|
45
|
+
description: "Open in default app",
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
export function ExportModal({ filename, fileSize, isBinary, width, height, onExport, onClose, isActive = true, }) {
|
|
49
|
+
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
50
|
+
const [showCustomInput, setShowCustomInput] = useState(false);
|
|
51
|
+
const [customPath, setCustomPath] = useState("");
|
|
52
|
+
useInput((input, key) => {
|
|
53
|
+
if (showCustomInput) {
|
|
54
|
+
if (key.return) {
|
|
55
|
+
if (customPath.trim()) {
|
|
56
|
+
onExport("custom", customPath.trim());
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else if (key.backspace || key.delete) {
|
|
60
|
+
setCustomPath((prev) => prev.slice(0, -1));
|
|
61
|
+
}
|
|
62
|
+
else if (key.escape) {
|
|
63
|
+
setShowCustomInput(false);
|
|
64
|
+
setCustomPath("");
|
|
65
|
+
}
|
|
66
|
+
else if (input && !key.ctrl && !key.meta) {
|
|
67
|
+
setCustomPath((prev) => prev + input);
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (key.escape) {
|
|
72
|
+
onClose();
|
|
73
|
+
}
|
|
74
|
+
else if (input === "j" || key.downArrow) {
|
|
75
|
+
setSelectedIndex((prev) => Math.min(prev + 1, OPTIONS.length - 1));
|
|
76
|
+
}
|
|
77
|
+
else if (input === "k" || key.upArrow) {
|
|
78
|
+
setSelectedIndex((prev) => Math.max(prev - 1, 0));
|
|
79
|
+
}
|
|
80
|
+
else if (input === "1") {
|
|
81
|
+
onExport("clipboard");
|
|
82
|
+
}
|
|
83
|
+
else if (input === "2") {
|
|
84
|
+
onExport("exports");
|
|
85
|
+
}
|
|
86
|
+
else if (input === "3") {
|
|
87
|
+
onExport("downloads");
|
|
88
|
+
}
|
|
89
|
+
else if (input === "4") {
|
|
90
|
+
setShowCustomInput(true);
|
|
91
|
+
}
|
|
92
|
+
else if (input === "5") {
|
|
93
|
+
onExport("open-external");
|
|
94
|
+
}
|
|
95
|
+
else if (key.return) {
|
|
96
|
+
const option = OPTIONS[selectedIndex];
|
|
97
|
+
if (option) {
|
|
98
|
+
if (option.action === "custom") {
|
|
99
|
+
setShowCustomInput(true);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
onExport(option.action);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}, { isActive });
|
|
107
|
+
return (_jsxs(Box, { flexDirection: "column", width: width, height: height, alignItems: "center", justifyContent: "center", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "cyan", bold: true, children: "Export Body Content" }) }), _jsx(Box, { marginBottom: 2, children: _jsxs(Text, { dimColor: true, children: [filename, " (", fileSize, ")"] }) }), showCustomInput ? (_jsxs(Box, { flexDirection: "column", alignItems: "center", children: [_jsx(Text, { children: "Enter directory path:" }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "cyan", children: "> " }), _jsx(Text, { children: customPath }), _jsx(Text, { color: "cyan", children: "_" })] }), _jsx(Box, { marginTop: 2, children: _jsx(Text, { dimColor: true, children: "Enter to save, Escape to go back" }) })] })) : (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: "Select export action:" }) }), OPTIONS.map((option, index) => (_jsxs(Box, { marginLeft: 2, children: [_jsx(Text, { color: index === selectedIndex ? "cyan" : undefined, children: index === selectedIndex ? "❯ " : " " }), _jsxs(Text, { color: "yellow", bold: true, children: ["[", option.key, "]"] }), _jsxs(Text, { color: index === selectedIndex ? "white" : "gray", children: [" ", option.label] }), _jsxs(Text, { dimColor: true, children: [" - ", option.description] }), option.action === "clipboard" && isBinary && (_jsx(Text, { dimColor: true, italic: true, children: " (binary \u2014 will copy raw bytes)" }))] }, option.key))), _jsx(Box, { marginTop: 2, children: _jsx(Text, { dimColor: true, children: "j/k navigate \u2502 Enter or number to select \u2502 Escape to cancel" }) })] }))] }));
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=ExportModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExportModal.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/ExportModal.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;AAEH,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AA8B1C,MAAM,OAAO,GAAa;IACxB;QACE,GAAG,EAAE,GAAG;QACR,MAAM,EAAE,WAAW;QACnB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,6BAA6B;KAC3C;IACD;QACE,GAAG,EAAE,GAAG;QACR,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,wBAAwB;KACtC;IACD;QACE,GAAG,EAAE,GAAG;QACR,MAAM,EAAE,WAAW;QACnB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,kBAAkB;KAChC;IACD;QACE,GAAG,EAAE,GAAG;QACR,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,0BAA0B;KACxC;IACD;QACE,GAAG,EAAE,GAAG;QACR,MAAM,EAAE,eAAe;QACvB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,qBAAqB;KACnC;CACF,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,QAAQ,GAAG,IAAI,GACE;IACjB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEjD,QAAQ,CACN,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACb,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;oBACtB,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACvC,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACtB,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAC1B,aAAa,CAAC,EAAE,CAAC,CAAC;YACpB,CAAC;iBAAM,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC3C,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;YACxC,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAC1C,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACxC,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,QAAQ,CAAC,WAAW,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,QAAQ,CAAC,WAAW,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,QAAQ,CAAC,eAAe,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;YACtC,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC/B,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAC,QAAQ,EACnB,cAAc,EAAC,QAAQ,aAGvB,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,0CAEhB,GACH,EAGN,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,MAAC,IAAI,IAAC,QAAQ,mBACX,QAAQ,QAAI,QAAQ,SAChB,GACH,EAEL,eAAe,CAAC,CAAC,CAAC,CACjB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,aAC7C,KAAC,IAAI,wCAA6B,EAClC,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,mBAAa,EAC/B,KAAC,IAAI,cAAE,UAAU,GAAQ,EACzB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kBAAS,IACvB,EACN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,QAAQ,uDAAwC,GAClD,IACF,CACP,CAAC,CAAC,CAAC,CACF,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,wCAA6B,GAC9B,EAEL,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAC9B,MAAC,GAAG,IAAkB,UAAU,EAAE,CAAC,aACjC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YACtD,KAAK,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GACjC,EACP,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,wBACrB,MAAM,CAAC,GAAG,SACP,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,KAAK,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,aACpD,GAAG,EACH,MAAM,CAAC,KAAK,IACR,EACP,MAAC,IAAI,IAAC,QAAQ,0BAAK,MAAM,CAAC,WAAW,IAAQ,EAC5C,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,QAAQ,IAAI,CAC5C,KAAC,IAAI,IAAC,QAAQ,QAAC,MAAM,2DAAuC,CAC7D,KAdO,MAAM,CAAC,GAAG,CAed,CACP,CAAC,EAEF,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,QAAQ,4FAAmE,GAC7E,IACF,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter bar for narrowing displayed requests by search text, HTTP method, and status range.
|
|
3
|
+
* Activated by '/' in the main TUI — maintains local state until Enter confirms.
|
|
4
|
+
*
|
|
5
|
+
* Tab/Shift+Tab cycles focus between three fields: search, method, status.
|
|
6
|
+
* When focused on search, all keys are text input.
|
|
7
|
+
* When focused on method/status, left/right arrows cycle the value.
|
|
8
|
+
*/
|
|
9
|
+
import React from "react";
|
|
10
|
+
import type { RequestFilter } from "../../../shared/types.js";
|
|
11
|
+
export interface FilterBarProps {
|
|
12
|
+
isActive: boolean;
|
|
13
|
+
filter: RequestFilter;
|
|
14
|
+
onFilterChange: (filter: RequestFilter) => void;
|
|
15
|
+
onClose: () => void;
|
|
16
|
+
/** Called on Escape — reverts filter to pre-open state */
|
|
17
|
+
onCancel?: () => void;
|
|
18
|
+
width: number;
|
|
19
|
+
}
|
|
20
|
+
export declare function FilterBar({ isActive, filter, onFilterChange, onClose, onCancel, width, }: FilterBarProps): React.ReactElement;
|
|
21
|
+
//# sourceMappingURL=FilterBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterBar.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/FilterBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAU9D,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,cAAc,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAChD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,MAAM,EACN,cAAc,EACd,OAAO,EACP,QAAQ,EACR,KAAK,GACN,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CAkMrC"}
|