@djangocfg/ui-tools 2.1.210 → 2.1.213
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/JsonTree-EFWAIIUV.mjs +5 -0
- package/dist/{JsonTree-5CRPHRP5.mjs.map → JsonTree-EFWAIIUV.mjs.map} +1 -1
- package/dist/JsonTree-LULSGFAW.cjs +11 -0
- package/dist/{JsonTree-IIVOSSVZ.cjs.map → JsonTree-LULSGFAW.cjs.map} +1 -1
- package/dist/JsonTree-MLET23ZA.css +6 -0
- package/dist/JsonTree-MLET23ZA.css.map +1 -0
- package/dist/{Mermaid.client-HG24D5KB.mjs → Mermaid.client-5EKULAUZ.mjs} +12 -22
- package/dist/Mermaid.client-5EKULAUZ.mjs.map +1 -0
- package/dist/Mermaid.client-DDXWXZXY.css +6 -0
- package/dist/Mermaid.client-DDXWXZXY.css.map +1 -0
- package/dist/{Mermaid.client-2TAFAXPW.cjs → Mermaid.client-Z25LMNPA.cjs} +12 -22
- package/dist/Mermaid.client-Z25LMNPA.cjs.map +1 -0
- package/dist/{PlaygroundLayout-XYMJBNT4.cjs → PlaygroundLayout-F47LFRYB.cjs} +21 -20
- package/dist/PlaygroundLayout-F47LFRYB.cjs.map +1 -0
- package/dist/{PlaygroundLayout-DWRNA2QM.mjs → PlaygroundLayout-NFNVEPIL.mjs} +5 -4
- package/dist/PlaygroundLayout-NFNVEPIL.mjs.map +1 -0
- package/dist/PlaygroundLayout-O52C6HK5.css +6 -0
- package/dist/PlaygroundLayout-O52C6HK5.css.map +1 -0
- package/dist/PrettyCode.client-GWFAIVFN.css +6 -0
- package/dist/PrettyCode.client-GWFAIVFN.css.map +1 -0
- package/dist/{PrettyCode.client-TCVEDDCJ.cjs → PrettyCode.client-VH6C6OC5.cjs} +15 -18
- package/dist/PrettyCode.client-VH6C6OC5.cjs.map +1 -0
- package/dist/{PrettyCode.client-RHOS5D6V.mjs → PrettyCode.client-VNTMCHXR.mjs} +16 -19
- package/dist/PrettyCode.client-VNTMCHXR.mjs.map +1 -0
- package/dist/{chunk-QP6QAK3F.cjs → chunk-3IIZ5ESQ.cjs} +3 -3
- package/dist/{chunk-QP6QAK3F.cjs.map → chunk-3IIZ5ESQ.cjs.map} +1 -1
- package/dist/chunk-3Q2X3CYQ.mjs +208 -0
- package/dist/chunk-3Q2X3CYQ.mjs.map +1 -0
- package/dist/chunk-G2A6SX5L.cjs +235 -0
- package/dist/chunk-G2A6SX5L.cjs.map +1 -0
- package/dist/chunk-LJ2VEBBZ.cjs +210 -0
- package/dist/chunk-LJ2VEBBZ.cjs.map +1 -0
- package/dist/chunk-MBFBVGUP.mjs +229 -0
- package/dist/chunk-MBFBVGUP.mjs.map +1 -0
- package/dist/{chunk-52WXASRO.mjs → chunk-SQLEKTT2.mjs} +8 -8
- package/dist/chunk-SQLEKTT2.mjs.map +1 -0
- package/dist/{chunk-FXFTJW2Y.mjs → chunk-TROOIHOR.mjs} +3 -3
- package/dist/{chunk-FXFTJW2Y.mjs.map → chunk-TROOIHOR.mjs.map} +1 -1
- package/dist/{chunk-DF6ORMTF.cjs → chunk-ZQX7KIC5.cjs} +8 -8
- package/dist/chunk-ZQX7KIC5.cjs.map +1 -0
- package/dist/{components-4Z2JIRZI.cjs → components-4FGDYL7K.cjs} +12 -12
- package/dist/{components-4Z2JIRZI.cjs.map → components-4FGDYL7K.cjs.map} +1 -1
- package/dist/{components-YWYUZQIH.mjs → components-MPEPRVCT.mjs} +3 -3
- package/dist/{components-YWYUZQIH.mjs.map → components-MPEPRVCT.mjs.map} +1 -1
- package/dist/index.cjs +53 -52
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +6 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +8 -7
- package/dist/index.d.ts +8 -7
- package/dist/index.mjs +14 -13
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -6
- package/src/components/FloatingToolbar/FloatingToolbar.css +5 -0
- package/src/components/FloatingToolbar/actions/CopyAction.tsx +22 -0
- package/src/components/FloatingToolbar/actions/DownloadAction.tsx +46 -0
- package/src/components/FloatingToolbar/actions/ExpandAction.tsx +25 -0
- package/src/components/FloatingToolbar/actions/FullscreenAction.tsx +30 -0
- package/src/components/FloatingToolbar/actions/index.ts +4 -0
- package/src/components/FloatingToolbar/hooks/useElementCorner.ts +84 -0
- package/src/components/FloatingToolbar/hooks/useScrollIsolation.ts +62 -0
- package/src/components/FloatingToolbar/index.tsx +131 -0
- package/src/styles/index.css +1 -0
- package/src/tools/AudioPlayer/components/HybridCompactPlayer.tsx +1 -1
- package/src/tools/AudioPlayer/components/HybridWaveform.tsx +10 -10
- package/src/tools/JsonTree/JsonTree.story.tsx +3 -2
- package/src/tools/JsonTree/README.md +60 -0
- package/src/tools/JsonTree/components/JsonContent.tsx +98 -0
- package/src/tools/JsonTree/components/JsonToolbar.tsx +88 -0
- package/src/tools/JsonTree/hooks/useElementCorner.ts +84 -0
- package/src/tools/JsonTree/hooks/useJsonExpand.ts +50 -0
- package/src/tools/JsonTree/hooks/useNavbarHeight.ts +83 -0
- package/src/tools/JsonTree/index.tsx +46 -278
- package/src/tools/JsonTree/types.ts +65 -0
- package/src/tools/Mermaid/Mermaid.client.tsx +12 -20
- package/src/tools/PrettyCode/PrettyCode.client.tsx +19 -19
- package/src/tools/PrettyCode/PrettyCode.story.tsx +476 -41
- package/dist/JsonTree-5CRPHRP5.mjs +0 -4
- package/dist/JsonTree-IIVOSSVZ.cjs +0 -10
- package/dist/Mermaid.client-2TAFAXPW.cjs.map +0 -1
- package/dist/Mermaid.client-HG24D5KB.mjs.map +0 -1
- package/dist/PlaygroundLayout-DWRNA2QM.mjs.map +0 -1
- package/dist/PlaygroundLayout-XYMJBNT4.cjs.map +0 -1
- package/dist/PrettyCode.client-RHOS5D6V.mjs.map +0 -1
- package/dist/PrettyCode.client-TCVEDDCJ.cjs.map +0 -1
- package/dist/chunk-52WXASRO.mjs.map +0 -1
- package/dist/chunk-DF6ORMTF.cjs.map +0 -1
- package/dist/chunk-DFWXRCIC.cjs +0 -242
- package/dist/chunk-DFWXRCIC.cjs.map +0 -1
- package/dist/chunk-XXFYTIQK.mjs +0 -240
- package/dist/chunk-XXFYTIQK.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/JsonTree/index.tsx"],"names":["__name","useState","useMemo","jsxs","jsx","Button","Fragment","ChevronUp","ChevronDown","CopyButton","Download","JSONTree"],"mappings":"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","file":"chunk-DFWXRCIC.cjs","sourcesContent":["'use client';\n\nimport { ChevronDown, ChevronUp, Download } from 'lucide-react';\nimport React, { useState, useMemo } from 'react';\nimport { CommonExternalProps, JSONTree } from 'react-json-tree';\n\nimport { Button, CopyButton } from '@djangocfg/ui-core/components';\n\nexport type { Language } from 'prism-react-renderer';\n\n/**\n * Display modes for JsonTree\n * - full: With toolbar (Expand All, Copy, Download) and border\n * - compact: No toolbar, with subtle border\n * - inline: Minimal, no border, for embedding in other components\n */\nexport type JsonTreeMode = 'full' | 'compact' | 'inline';\n\nexport interface JsonTreeConfig {\n /** Maximum depth to expand automatically (default: 2) */\n maxAutoExpandDepth?: number;\n /** Maximum items in array to auto-expand (default: 10) */\n maxAutoExpandArrayItems?: number;\n /** Maximum object keys to auto-expand (default: 5) */\n maxAutoExpandObjectKeys?: number;\n /** Maximum string length before truncation (default: 200) */\n maxStringLength?: number;\n /** Collection limit for performance (default: 50) */\n collectionLimit?: number;\n /** Whether to show collection info (array length, object keys count) */\n showCollectionInfo?: boolean;\n /** Whether to show expand/collapse all buttons */\n showExpandControls?: boolean;\n /** Whether to show copy/download buttons */\n showActionButtons?: boolean;\n /** Custom CSS classes for the container */\n className?: string;\n /** Whether to preserve object key order (default: true) */\n preserveKeyOrder?: boolean;\n}\n\nexport interface JsonTreeComponentProps {\n title?: string;\n data: unknown;\n /**\n * Display mode:\n * - \"full\" (default): With toolbar and border\n * - \"compact\": No toolbar, subtle styling\n * - \"inline\": Minimal, no border\n */\n mode?: JsonTreeMode;\n config?: JsonTreeConfig;\n /** Override for react-json-tree props */\n jsonTreeProps?: Partial<CommonExternalProps>;\n}\n\n// Mode presets\nconst MODE_PRESETS: Record<JsonTreeMode, Partial<JsonTreeConfig>> = {\n full: {\n showExpandControls: true,\n showActionButtons: true,\n showCollectionInfo: true,\n },\n compact: {\n showExpandControls: false,\n showActionButtons: false,\n showCollectionInfo: true,\n },\n inline: {\n showExpandControls: false,\n showActionButtons: false,\n showCollectionInfo: false,\n },\n};\n\nconst JsonTreeComponent = ({\n title,\n data,\n mode = 'full',\n config = {},\n jsonTreeProps = {}\n}: JsonTreeComponentProps) => {\n // State for expand/collapse all\n const [expandAll, setExpandAll] = useState<boolean | null>(null);\n const [renderKey, setRenderKey] = useState(0);\n\n // Merge mode presets with config (config overrides presets)\n const mergedConfig = useMemo(() => ({\n ...MODE_PRESETS[mode],\n ...config,\n }), [mode, config]);\n\n // Default configuration\n const {\n maxAutoExpandDepth = 2,\n maxAutoExpandArrayItems = 10,\n maxAutoExpandObjectKeys = 5,\n maxStringLength = 200,\n collectionLimit = 50,\n showCollectionInfo = true,\n showExpandControls = true,\n showActionButtons = true,\n className = '',\n preserveKeyOrder = true,\n } = mergedConfig;\n\n // JSON Tree theme optimized for dark theme\n const jsonTreeTheme = {\n scheme: 'djangocfg-dark',\n base00: 'transparent', // Background\n base01: '#1a1a1a', // Lighter background\n base02: '#2a2a2a', // Selection background\n base03: '#6b7280', // Comments, invisibles\n base04: '#9ca3af', // Dark foreground\n base05: '#e5e7eb', // Default foreground\n base06: '#f3f4f6', // Light foreground\n base07: '#ffffff', // Lightest foreground\n base08: '#ef4444', // Red - for null, undefined\n base09: '#f97316', // Orange - for numbers\n base0A: '#eab308', // Yellow - for strings\n base0B: '#22c55e', // Green - for booleans (true)\n base0C: '#06b6d4', // Cyan - for dates, regex\n base0D: '#3b82f6', // Blue - for keys\n base0E: '#a855f7', // Purple - for functions\n base0F: '#f43f5e', // Pink - for deprecations\n };\n\n // Smart expansion logic\n const shouldExpandNodeInitially = (keyPath: readonly (string | number)[], nodeData: unknown, level: number) => {\n // If user explicitly clicked \"Expand All\", expand everything\n if (expandAll === true) return true;\n\n // If user explicitly clicked \"Collapse All\", collapse everything\n if (expandAll === false) return false;\n\n // Default auto-expansion (expandAll === null)\n // Always expand up to maxAutoExpandDepth\n if (level <= maxAutoExpandDepth) return true;\n\n // For arrays, expand if they have less than maxAutoExpandArrayItems\n if (Array.isArray(nodeData) && nodeData.length <= maxAutoExpandArrayItems) return true;\n\n // For objects, expand if they have less than maxAutoExpandObjectKeys\n if (nodeData && typeof nodeData === 'object' && !Array.isArray(nodeData)) {\n const keys = Object.keys(nodeData);\n return keys.length <= maxAutoExpandObjectKeys;\n }\n\n return false;\n };\n\n // Collection info display\n const getItemString = showCollectionInfo\n ? (nodeType: string, nodeData: unknown) => {\n if (nodeType === 'Array') {\n const length = Array.isArray(nodeData) ? nodeData.length : 0;\n return length > 0 ? <span className=\"text-muted-foreground text-sm\">({length} items)</span> : null;\n }\n if (nodeType === 'Object') {\n const keys = nodeData && typeof nodeData === 'object' ? Object.keys(nodeData) : [];\n return keys.length > 0 ? <span className=\"text-muted-foreground text-sm\">({keys.length} keys)</span> : null;\n }\n return null;\n }\n : () => null;\n\n // Value processing for better display\n const postprocessValue = (value: unknown) => {\n // Truncate very long strings\n if (typeof value === 'string' && value.length > maxStringLength) {\n return value.substring(0, maxStringLength) + '... (truncated)';\n }\n return value;\n };\n\n // Custom node detection for special formatting\n const isCustomNode = (value: unknown) => {\n // Mark URLs as custom nodes for special styling\n if (typeof value === 'string' && (value.startsWith('http://') || value.startsWith('https://'))) {\n return true;\n }\n return false;\n };\n\n // JSON string for copy/download\n const jsonString = JSON.stringify(data, null, 2);\n\n // Action handlers\n const handleDownload = () => {\n const blob = new Blob([jsonString], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = 'data.json';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n };\n\n // Container classes based on mode\n const containerClasses = useMemo(() => {\n const base = 'relative overflow-hidden';\n switch (mode) {\n case 'full':\n return `${base} border border-border rounded-sm h-full ${className}`;\n case 'compact':\n return `${base} border border-border/50 rounded-md ${className}`;\n case 'inline':\n return `${base} ${className}`;\n default:\n return `${base} ${className}`;\n }\n }, [mode, className]);\n\n // Content padding based on mode\n const contentPadding = useMemo(() => {\n switch (mode) {\n case 'full':\n return 'p-4';\n case 'compact':\n return 'p-3';\n case 'inline':\n return 'p-2';\n default:\n return 'p-4';\n }\n }, [mode]);\n\n // Show header only in full mode or when title is provided\n const showHeader = (title || showExpandControls || showActionButtons) && mode === 'full';\n\n return (\n <div className={containerClasses}>\n {/* Header with title and controls */}\n {showHeader && (\n <div className=\"p-4 border-b border-border bg-muted/50 rounded-t-sm\">\n <div className=\"flex items-center justify-between\">\n {title && (\n <h6 className=\"text-lg font-semibold text-foreground\">{title}</h6>\n )}\n\n {(showExpandControls || showActionButtons) && (\n <div className=\"flex items-center space-x-2\">\n {/* Expand/Collapse Controls */}\n {showExpandControls && (\n <Button\n variant={expandAll === true ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={() => {\n const newState = expandAll === true ? false : true;\n setExpandAll(newState);\n setRenderKey(prev => prev + 1);\n }}\n className=\"h-8 px-2\"\n >\n {expandAll === true ? (\n <>\n <ChevronUp className=\"h-3 w-3\" />\n <span className=\"ml-1 text-xs\">Collapse All</span>\n </>\n ) : (\n <>\n <ChevronDown className=\"h-3 w-3\" />\n <span className=\"ml-1 text-xs\">Expand All</span>\n </>\n )}\n </Button>\n )}\n\n {/* Action Buttons */}\n {showActionButtons && (\n <>\n <CopyButton\n value={jsonString}\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 px-2\"\n iconClassName=\"h-3 w-3\"\n >\n Copy\n </CopyButton>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleDownload}\n className=\"h-8 px-2\"\n >\n <Download className=\"h-3 w-3\" />\n <span className=\"ml-1 text-xs hidden sm:inline\">Download</span>\n </Button>\n </>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* JSON Tree Content */}\n <div className={`overflow-auto ${contentPadding}`}>\n <JSONTree\n key={renderKey} // Force re-render when expand/collapse state changes\n data={data}\n theme={jsonTreeTheme}\n invertTheme={false}\n hideRoot={true}\n shouldExpandNodeInitially={shouldExpandNodeInitially}\n getItemString={getItemString}\n postprocessValue={postprocessValue}\n isCustomNode={isCustomNode}\n collectionLimit={collectionLimit}\n sortObjectKeys={!preserveKeyOrder}\n {...jsonTreeProps}\n />\n </div>\n </div>\n );\n};\n\nexport default JsonTreeComponent;\n"]}
|
package/dist/chunk-XXFYTIQK.mjs
DELETED
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
import { __name } from './chunk-CGILA3WO.mjs';
|
|
2
|
-
import { ChevronUp, ChevronDown, Download } from 'lucide-react';
|
|
3
|
-
import { useState, useMemo } from 'react';
|
|
4
|
-
import { JSONTree } from 'react-json-tree';
|
|
5
|
-
import { Button, CopyButton } from '@djangocfg/ui-core/components';
|
|
6
|
-
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
7
|
-
|
|
8
|
-
var MODE_PRESETS = {
|
|
9
|
-
full: {
|
|
10
|
-
showExpandControls: true,
|
|
11
|
-
showActionButtons: true,
|
|
12
|
-
showCollectionInfo: true
|
|
13
|
-
},
|
|
14
|
-
compact: {
|
|
15
|
-
showExpandControls: false,
|
|
16
|
-
showActionButtons: false,
|
|
17
|
-
showCollectionInfo: true
|
|
18
|
-
},
|
|
19
|
-
inline: {
|
|
20
|
-
showExpandControls: false,
|
|
21
|
-
showActionButtons: false,
|
|
22
|
-
showCollectionInfo: false
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
var JsonTreeComponent = /* @__PURE__ */ __name(({
|
|
26
|
-
title,
|
|
27
|
-
data,
|
|
28
|
-
mode = "full",
|
|
29
|
-
config = {},
|
|
30
|
-
jsonTreeProps = {}
|
|
31
|
-
}) => {
|
|
32
|
-
const [expandAll, setExpandAll] = useState(null);
|
|
33
|
-
const [renderKey, setRenderKey] = useState(0);
|
|
34
|
-
const mergedConfig = useMemo(() => ({
|
|
35
|
-
...MODE_PRESETS[mode],
|
|
36
|
-
...config
|
|
37
|
-
}), [mode, config]);
|
|
38
|
-
const {
|
|
39
|
-
maxAutoExpandDepth = 2,
|
|
40
|
-
maxAutoExpandArrayItems = 10,
|
|
41
|
-
maxAutoExpandObjectKeys = 5,
|
|
42
|
-
maxStringLength = 200,
|
|
43
|
-
collectionLimit = 50,
|
|
44
|
-
showCollectionInfo = true,
|
|
45
|
-
showExpandControls = true,
|
|
46
|
-
showActionButtons = true,
|
|
47
|
-
className = "",
|
|
48
|
-
preserveKeyOrder = true
|
|
49
|
-
} = mergedConfig;
|
|
50
|
-
const jsonTreeTheme = {
|
|
51
|
-
scheme: "djangocfg-dark",
|
|
52
|
-
base00: "transparent",
|
|
53
|
-
// Background
|
|
54
|
-
base01: "#1a1a1a",
|
|
55
|
-
// Lighter background
|
|
56
|
-
base02: "#2a2a2a",
|
|
57
|
-
// Selection background
|
|
58
|
-
base03: "#6b7280",
|
|
59
|
-
// Comments, invisibles
|
|
60
|
-
base04: "#9ca3af",
|
|
61
|
-
// Dark foreground
|
|
62
|
-
base05: "#e5e7eb",
|
|
63
|
-
// Default foreground
|
|
64
|
-
base06: "#f3f4f6",
|
|
65
|
-
// Light foreground
|
|
66
|
-
base07: "#ffffff",
|
|
67
|
-
// Lightest foreground
|
|
68
|
-
base08: "#ef4444",
|
|
69
|
-
// Red - for null, undefined
|
|
70
|
-
base09: "#f97316",
|
|
71
|
-
// Orange - for numbers
|
|
72
|
-
base0A: "#eab308",
|
|
73
|
-
// Yellow - for strings
|
|
74
|
-
base0B: "#22c55e",
|
|
75
|
-
// Green - for booleans (true)
|
|
76
|
-
base0C: "#06b6d4",
|
|
77
|
-
// Cyan - for dates, regex
|
|
78
|
-
base0D: "#3b82f6",
|
|
79
|
-
// Blue - for keys
|
|
80
|
-
base0E: "#a855f7",
|
|
81
|
-
// Purple - for functions
|
|
82
|
-
base0F: "#f43f5e"
|
|
83
|
-
// Pink - for deprecations
|
|
84
|
-
};
|
|
85
|
-
const shouldExpandNodeInitially = /* @__PURE__ */ __name((keyPath, nodeData, level) => {
|
|
86
|
-
if (expandAll === true) return true;
|
|
87
|
-
if (expandAll === false) return false;
|
|
88
|
-
if (level <= maxAutoExpandDepth) return true;
|
|
89
|
-
if (Array.isArray(nodeData) && nodeData.length <= maxAutoExpandArrayItems) return true;
|
|
90
|
-
if (nodeData && typeof nodeData === "object" && !Array.isArray(nodeData)) {
|
|
91
|
-
const keys = Object.keys(nodeData);
|
|
92
|
-
return keys.length <= maxAutoExpandObjectKeys;
|
|
93
|
-
}
|
|
94
|
-
return false;
|
|
95
|
-
}, "shouldExpandNodeInitially");
|
|
96
|
-
const getItemString = showCollectionInfo ? (nodeType, nodeData) => {
|
|
97
|
-
if (nodeType === "Array") {
|
|
98
|
-
const length = Array.isArray(nodeData) ? nodeData.length : 0;
|
|
99
|
-
return length > 0 ? /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground text-sm", children: [
|
|
100
|
-
"(",
|
|
101
|
-
length,
|
|
102
|
-
" items)"
|
|
103
|
-
] }) : null;
|
|
104
|
-
}
|
|
105
|
-
if (nodeType === "Object") {
|
|
106
|
-
const keys = nodeData && typeof nodeData === "object" ? Object.keys(nodeData) : [];
|
|
107
|
-
return keys.length > 0 ? /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground text-sm", children: [
|
|
108
|
-
"(",
|
|
109
|
-
keys.length,
|
|
110
|
-
" keys)"
|
|
111
|
-
] }) : null;
|
|
112
|
-
}
|
|
113
|
-
return null;
|
|
114
|
-
} : () => null;
|
|
115
|
-
const postprocessValue = /* @__PURE__ */ __name((value) => {
|
|
116
|
-
if (typeof value === "string" && value.length > maxStringLength) {
|
|
117
|
-
return value.substring(0, maxStringLength) + "... (truncated)";
|
|
118
|
-
}
|
|
119
|
-
return value;
|
|
120
|
-
}, "postprocessValue");
|
|
121
|
-
const isCustomNode = /* @__PURE__ */ __name((value) => {
|
|
122
|
-
if (typeof value === "string" && (value.startsWith("http://") || value.startsWith("https://"))) {
|
|
123
|
-
return true;
|
|
124
|
-
}
|
|
125
|
-
return false;
|
|
126
|
-
}, "isCustomNode");
|
|
127
|
-
const jsonString = JSON.stringify(data, null, 2);
|
|
128
|
-
const handleDownload = /* @__PURE__ */ __name(() => {
|
|
129
|
-
const blob = new Blob([jsonString], { type: "application/json" });
|
|
130
|
-
const url = URL.createObjectURL(blob);
|
|
131
|
-
const a = document.createElement("a");
|
|
132
|
-
a.href = url;
|
|
133
|
-
a.download = "data.json";
|
|
134
|
-
document.body.appendChild(a);
|
|
135
|
-
a.click();
|
|
136
|
-
document.body.removeChild(a);
|
|
137
|
-
URL.revokeObjectURL(url);
|
|
138
|
-
}, "handleDownload");
|
|
139
|
-
const containerClasses = useMemo(() => {
|
|
140
|
-
const base = "relative overflow-hidden";
|
|
141
|
-
switch (mode) {
|
|
142
|
-
case "full":
|
|
143
|
-
return `${base} border border-border rounded-sm h-full ${className}`;
|
|
144
|
-
case "compact":
|
|
145
|
-
return `${base} border border-border/50 rounded-md ${className}`;
|
|
146
|
-
case "inline":
|
|
147
|
-
return `${base} ${className}`;
|
|
148
|
-
default:
|
|
149
|
-
return `${base} ${className}`;
|
|
150
|
-
}
|
|
151
|
-
}, [mode, className]);
|
|
152
|
-
const contentPadding = useMemo(() => {
|
|
153
|
-
switch (mode) {
|
|
154
|
-
case "full":
|
|
155
|
-
return "p-4";
|
|
156
|
-
case "compact":
|
|
157
|
-
return "p-3";
|
|
158
|
-
case "inline":
|
|
159
|
-
return "p-2";
|
|
160
|
-
default:
|
|
161
|
-
return "p-4";
|
|
162
|
-
}
|
|
163
|
-
}, [mode]);
|
|
164
|
-
const showHeader = (title || showExpandControls || showActionButtons) && mode === "full";
|
|
165
|
-
return /* @__PURE__ */ jsxs("div", { className: containerClasses, children: [
|
|
166
|
-
showHeader && /* @__PURE__ */ jsx("div", { className: "p-4 border-b border-border bg-muted/50 rounded-t-sm", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
167
|
-
title && /* @__PURE__ */ jsx("h6", { className: "text-lg font-semibold text-foreground", children: title }),
|
|
168
|
-
(showExpandControls || showActionButtons) && /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-2", children: [
|
|
169
|
-
showExpandControls && /* @__PURE__ */ jsx(
|
|
170
|
-
Button,
|
|
171
|
-
{
|
|
172
|
-
variant: expandAll === true ? "default" : "outline",
|
|
173
|
-
size: "sm",
|
|
174
|
-
onClick: () => {
|
|
175
|
-
const newState = expandAll === true ? false : true;
|
|
176
|
-
setExpandAll(newState);
|
|
177
|
-
setRenderKey((prev) => prev + 1);
|
|
178
|
-
},
|
|
179
|
-
className: "h-8 px-2",
|
|
180
|
-
children: expandAll === true ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
181
|
-
/* @__PURE__ */ jsx(ChevronUp, { className: "h-3 w-3" }),
|
|
182
|
-
/* @__PURE__ */ jsx("span", { className: "ml-1 text-xs", children: "Collapse All" })
|
|
183
|
-
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
184
|
-
/* @__PURE__ */ jsx(ChevronDown, { className: "h-3 w-3" }),
|
|
185
|
-
/* @__PURE__ */ jsx("span", { className: "ml-1 text-xs", children: "Expand All" })
|
|
186
|
-
] })
|
|
187
|
-
}
|
|
188
|
-
),
|
|
189
|
-
showActionButtons && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
190
|
-
/* @__PURE__ */ jsx(
|
|
191
|
-
CopyButton,
|
|
192
|
-
{
|
|
193
|
-
value: jsonString,
|
|
194
|
-
variant: "outline",
|
|
195
|
-
size: "sm",
|
|
196
|
-
className: "h-8 px-2",
|
|
197
|
-
iconClassName: "h-3 w-3",
|
|
198
|
-
children: "Copy"
|
|
199
|
-
}
|
|
200
|
-
),
|
|
201
|
-
/* @__PURE__ */ jsxs(
|
|
202
|
-
Button,
|
|
203
|
-
{
|
|
204
|
-
variant: "outline",
|
|
205
|
-
size: "sm",
|
|
206
|
-
onClick: handleDownload,
|
|
207
|
-
className: "h-8 px-2",
|
|
208
|
-
children: [
|
|
209
|
-
/* @__PURE__ */ jsx(Download, { className: "h-3 w-3" }),
|
|
210
|
-
/* @__PURE__ */ jsx("span", { className: "ml-1 text-xs hidden sm:inline", children: "Download" })
|
|
211
|
-
]
|
|
212
|
-
}
|
|
213
|
-
)
|
|
214
|
-
] })
|
|
215
|
-
] })
|
|
216
|
-
] }) }),
|
|
217
|
-
/* @__PURE__ */ jsx("div", { className: `overflow-auto ${contentPadding}`, children: /* @__PURE__ */ jsx(
|
|
218
|
-
JSONTree,
|
|
219
|
-
{
|
|
220
|
-
data,
|
|
221
|
-
theme: jsonTreeTheme,
|
|
222
|
-
invertTheme: false,
|
|
223
|
-
hideRoot: true,
|
|
224
|
-
shouldExpandNodeInitially,
|
|
225
|
-
getItemString,
|
|
226
|
-
postprocessValue,
|
|
227
|
-
isCustomNode,
|
|
228
|
-
collectionLimit,
|
|
229
|
-
sortObjectKeys: !preserveKeyOrder,
|
|
230
|
-
...jsonTreeProps
|
|
231
|
-
},
|
|
232
|
-
renderKey
|
|
233
|
-
) })
|
|
234
|
-
] });
|
|
235
|
-
}, "JsonTreeComponent");
|
|
236
|
-
var JsonTree_default = JsonTreeComponent;
|
|
237
|
-
|
|
238
|
-
export { JsonTree_default };
|
|
239
|
-
//# sourceMappingURL=chunk-XXFYTIQK.mjs.map
|
|
240
|
-
//# sourceMappingURL=chunk-XXFYTIQK.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/JsonTree/index.tsx"],"names":[],"mappings":";;;;;;;AAyDA,IAAM,YAAA,GAA8D;AAAA,EAClE,IAAA,EAAM;AAAA,IACJ,kBAAA,EAAoB,IAAA;AAAA,IACpB,iBAAA,EAAmB,IAAA;AAAA,IACnB,kBAAA,EAAoB;AAAA,GACtB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,kBAAA,EAAoB,KAAA;AAAA,IACpB,iBAAA,EAAmB,KAAA;AAAA,IACnB,kBAAA,EAAoB;AAAA,GACtB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,kBAAA,EAAoB,KAAA;AAAA,IACpB,iBAAA,EAAmB,KAAA;AAAA,IACnB,kBAAA,EAAoB;AAAA;AAExB,CAAA;AAEA,IAAM,oCAAoB,MAAA,CAAA,CAAC;AAAA,EACzB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA,GAAO,MAAA;AAAA,EACP,SAAS,EAAC;AAAA,EACV,gBAAgB;AAClB,CAAA,KAA8B;AAE5B,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAyB,IAAI,CAAA;AAC/D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,CAAC,CAAA;AAG5C,EAAA,MAAM,YAAA,GAAe,QAAQ,OAAO;AAAA,IAClC,GAAG,aAAa,IAAI,CAAA;AAAA,IACpB,GAAG;AAAA,GACL,CAAA,EAAI,CAAC,IAAA,EAAM,MAAM,CAAC,CAAA;AAGlB,EAAA,MAAM;AAAA,IACJ,kBAAA,GAAqB,CAAA;AAAA,IACrB,uBAAA,GAA0B,EAAA;AAAA,IAC1B,uBAAA,GAA0B,CAAA;AAAA,IAC1B,eAAA,GAAkB,GAAA;AAAA,IAClB,eAAA,GAAkB,EAAA;AAAA,IAClB,kBAAA,GAAqB,IAAA;AAAA,IACrB,kBAAA,GAAqB,IAAA;AAAA,IACrB,iBAAA,GAAoB,IAAA;AAAA,IACpB,SAAA,GAAY,EAAA;AAAA,IACZ,gBAAA,GAAmB;AAAA,GACrB,GAAI,YAAA;AAGJ,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,MAAA,EAAQ,gBAAA;AAAA,IACR,MAAA,EAAQ,aAAA;AAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA;AAAA,IACR,MAAA,EAAQ;AAAA;AAAA,GACV;AAGA,EAAA,MAAM,yBAAA,mBAA4B,MAAA,CAAA,CAAC,OAAA,EAAuC,QAAA,EAAmB,KAAA,KAAkB;AAE7G,IAAA,IAAI,SAAA,KAAc,MAAM,OAAO,IAAA;AAG/B,IAAA,IAAI,SAAA,KAAc,OAAO,OAAO,KAAA;AAIhC,IAAA,IAAI,KAAA,IAAS,oBAAoB,OAAO,IAAA;AAGxC,IAAA,IAAI,MAAM,OAAA,CAAQ,QAAQ,KAAK,QAAA,CAAS,MAAA,IAAU,yBAAyB,OAAO,IAAA;AAGlF,IAAA,IAAI,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACxE,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA;AACjC,MAAA,OAAO,KAAK,MAAA,IAAU,uBAAA;AAAA,IACxB;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EArBkC,2BAAA,CAAA;AAwBlC,EAAA,MAAM,aAAA,GAAgB,kBAAA,GAClB,CAAC,QAAA,EAAkB,QAAA,KAAsB;AACvC,IAAA,IAAI,aAAa,OAAA,EAAS;AACxB,MAAA,MAAM,SAAS,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAAI,SAAS,MAAA,GAAS,CAAA;AAC3D,MAAA,OAAO,MAAA,GAAS,CAAA,mBAAI,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,QAAA,GAAA;AAAA,QAAE,MAAA;AAAA,QAAO;AAAA,OAAA,EAAO,CAAA,GAAU,IAAA;AAAA,IAChG;AACA,IAAA,IAAI,aAAa,QAAA,EAAU;AACzB,MAAA,MAAM,IAAA,GAAO,YAAY,OAAO,QAAA,KAAa,WAAW,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,GAAI,EAAC;AACjF,MAAA,OAAO,KAAK,MAAA,GAAS,CAAA,mBAAI,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,QAAA,GAAA;AAAA,QAAE,IAAA,CAAK,MAAA;AAAA,QAAO;AAAA,OAAA,EAAM,CAAA,GAAU,IAAA;AAAA,IACzG;AACA,IAAA,OAAO,IAAA;AAAA,EACT,IACA,MAAM,IAAA;AAGV,EAAA,MAAM,gBAAA,2BAAoB,KAAA,KAAmB;AAE3C,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,SAAS,eAAA,EAAiB;AAC/D,MAAA,OAAO,KAAA,CAAM,SAAA,CAAU,CAAA,EAAG,eAAe,CAAA,GAAI,iBAAA;AAAA,IAC/C;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EANyB,kBAAA,CAAA;AASzB,EAAA,MAAM,YAAA,2BAAgB,KAAA,KAAmB;AAEvC,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,KAAa,KAAA,CAAM,UAAA,CAAW,SAAS,CAAA,IAAK,KAAA,CAAM,UAAA,CAAW,UAAU,CAAA,CAAA,EAAI;AAC9F,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EANqB,cAAA,CAAA;AASrB,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,MAAM,CAAC,CAAA;AAG/C,EAAA,MAAM,iCAAiB,MAAA,CAAA,MAAM;AAC3B,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,UAAU,CAAA,EAAG,EAAE,IAAA,EAAM,kBAAA,EAAoB,CAAA;AAChE,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA;AACpC,IAAA,MAAM,CAAA,GAAI,QAAA,CAAS,aAAA,CAAc,GAAG,CAAA;AACpC,IAAA,CAAA,CAAE,IAAA,GAAO,GAAA;AACT,IAAA,CAAA,CAAE,QAAA,GAAW,WAAA;AACb,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,CAAC,CAAA;AAC3B,IAAA,CAAA,CAAE,KAAA,EAAM;AACR,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,CAAC,CAAA;AAC3B,IAAA,GAAA,CAAI,gBAAgB,GAAG,CAAA;AAAA,EACzB,CAAA,EAVuB,gBAAA,CAAA;AAavB,EAAA,MAAM,gBAAA,GAAmB,QAAQ,MAAM;AACrC,IAAA,MAAM,IAAA,GAAO,0BAAA;AACb,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,MAAA;AACH,QAAA,OAAO,CAAA,EAAG,IAAI,CAAA,wCAAA,EAA2C,SAAS,CAAA,CAAA;AAAA,MACpE,KAAK,SAAA;AACH,QAAA,OAAO,CAAA,EAAG,IAAI,CAAA,oCAAA,EAAuC,SAAS,CAAA,CAAA;AAAA,MAChE,KAAK,QAAA;AACH,QAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,MAC7B;AACE,QAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA;AAC/B,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,SAAS,CAAC,CAAA;AAGpB,EAAA,MAAM,cAAA,GAAiB,QAAQ,MAAM;AACnC,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,MAAA;AACH,QAAA,OAAO,KAAA;AAAA,MACT,KAAK,SAAA;AACH,QAAA,OAAO,KAAA;AAAA,MACT,KAAK,QAAA;AACH,QAAA,OAAO,KAAA;AAAA,MACT;AACE,QAAA,OAAO,KAAA;AAAA;AACX,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAGT,EAAA,MAAM,UAAA,GAAA,CAAc,KAAA,IAAS,kBAAA,IAAsB,iBAAA,KAAsB,IAAA,KAAS,MAAA;AAElF,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,gBAAA,EAEb,QAAA,EAAA;AAAA,IAAA,UAAA,wBACE,KAAA,EAAA,EAAI,SAAA,EAAU,uDACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACC,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAAA,CAG7D,kBAAA,IAAsB,iBAAA,qBACtB,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6BAAA,EAEZ,QAAA,EAAA;AAAA,QAAA,kBAAA,oBACC,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,SAAA,KAAc,IAAA,GAAO,SAAA,GAAY,SAAA;AAAA,YAC1C,IAAA,EAAK,IAAA;AAAA,YACL,SAAS,MAAM;AACb,cAAA,MAAM,QAAA,GAAW,SAAA,KAAc,IAAA,GAAO,KAAA,GAAQ,IAAA;AAC9C,cAAA,YAAA,CAAa,QAAQ,CAAA;AACrB,cAAA,YAAA,CAAa,CAAA,IAAA,KAAQ,OAAO,CAAC,CAAA;AAAA,YAC/B,CAAA;AAAA,YACA,SAAA,EAAU,UAAA;AAAA,YAET,QAAA,EAAA,SAAA,KAAc,uBACb,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,SAAA,EAAA,EAAU,WAAU,SAAA,EAAU,CAAA;AAAA,8BAC/B,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAe,QAAA,EAAA,cAAA,EAAY;AAAA,aAAA,EAC7C,oBAEA,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,WAAA,EAAA,EAAY,WAAU,SAAA,EAAU,CAAA;AAAA,8BACjC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAe,QAAA,EAAA,YAAA,EAAU;AAAA,aAAA,EAC3C;AAAA;AAAA,SAEJ;AAAA,QAID,qCACC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,UAAA;AAAA,cACP,OAAA,EAAQ,SAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,SAAA,EAAU,UAAA;AAAA,cACV,aAAA,EAAc,SAAA;AAAA,cACf,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,0BACA,IAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAS,cAAA;AAAA,cACT,SAAA,EAAU,UAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,SAAA,EAAU,CAAA;AAAA,gCAC9B,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,UAAA,EAAQ;AAAA;AAAA;AAAA;AAC1D,SAAA,EACF;AAAA,OAAA,EAEJ;AAAA,KAAA,EAEJ,CAAA,EACF,CAAA;AAAA,oBAIF,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,cAAA,EAAiB,cAAc,CAAA,CAAA,EAC7C,QAAA,kBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA;AAAA,QACA,KAAA,EAAO,aAAA;AAAA,QACP,WAAA,EAAa,KAAA;AAAA,QACb,QAAA,EAAU,IAAA;AAAA,QACV,yBAAA;AAAA,QACA,aAAA;AAAA,QACA,gBAAA;AAAA,QACA,YAAA;AAAA,QACA,eAAA;AAAA,QACA,gBAAgB,CAAC,gBAAA;AAAA,QAChB,GAAG;AAAA,OAAA;AAAA,MAXC;AAAA,KAYP,EACF;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA,EAnP0B,mBAAA,CAAA;AAqP1B,IAAO,gBAAA,GAAQ","file":"chunk-XXFYTIQK.mjs","sourcesContent":["'use client';\n\nimport { ChevronDown, ChevronUp, Download } from 'lucide-react';\nimport React, { useState, useMemo } from 'react';\nimport { CommonExternalProps, JSONTree } from 'react-json-tree';\n\nimport { Button, CopyButton } from '@djangocfg/ui-core/components';\n\nexport type { Language } from 'prism-react-renderer';\n\n/**\n * Display modes for JsonTree\n * - full: With toolbar (Expand All, Copy, Download) and border\n * - compact: No toolbar, with subtle border\n * - inline: Minimal, no border, for embedding in other components\n */\nexport type JsonTreeMode = 'full' | 'compact' | 'inline';\n\nexport interface JsonTreeConfig {\n /** Maximum depth to expand automatically (default: 2) */\n maxAutoExpandDepth?: number;\n /** Maximum items in array to auto-expand (default: 10) */\n maxAutoExpandArrayItems?: number;\n /** Maximum object keys to auto-expand (default: 5) */\n maxAutoExpandObjectKeys?: number;\n /** Maximum string length before truncation (default: 200) */\n maxStringLength?: number;\n /** Collection limit for performance (default: 50) */\n collectionLimit?: number;\n /** Whether to show collection info (array length, object keys count) */\n showCollectionInfo?: boolean;\n /** Whether to show expand/collapse all buttons */\n showExpandControls?: boolean;\n /** Whether to show copy/download buttons */\n showActionButtons?: boolean;\n /** Custom CSS classes for the container */\n className?: string;\n /** Whether to preserve object key order (default: true) */\n preserveKeyOrder?: boolean;\n}\n\nexport interface JsonTreeComponentProps {\n title?: string;\n data: unknown;\n /**\n * Display mode:\n * - \"full\" (default): With toolbar and border\n * - \"compact\": No toolbar, subtle styling\n * - \"inline\": Minimal, no border\n */\n mode?: JsonTreeMode;\n config?: JsonTreeConfig;\n /** Override for react-json-tree props */\n jsonTreeProps?: Partial<CommonExternalProps>;\n}\n\n// Mode presets\nconst MODE_PRESETS: Record<JsonTreeMode, Partial<JsonTreeConfig>> = {\n full: {\n showExpandControls: true,\n showActionButtons: true,\n showCollectionInfo: true,\n },\n compact: {\n showExpandControls: false,\n showActionButtons: false,\n showCollectionInfo: true,\n },\n inline: {\n showExpandControls: false,\n showActionButtons: false,\n showCollectionInfo: false,\n },\n};\n\nconst JsonTreeComponent = ({\n title,\n data,\n mode = 'full',\n config = {},\n jsonTreeProps = {}\n}: JsonTreeComponentProps) => {\n // State for expand/collapse all\n const [expandAll, setExpandAll] = useState<boolean | null>(null);\n const [renderKey, setRenderKey] = useState(0);\n\n // Merge mode presets with config (config overrides presets)\n const mergedConfig = useMemo(() => ({\n ...MODE_PRESETS[mode],\n ...config,\n }), [mode, config]);\n\n // Default configuration\n const {\n maxAutoExpandDepth = 2,\n maxAutoExpandArrayItems = 10,\n maxAutoExpandObjectKeys = 5,\n maxStringLength = 200,\n collectionLimit = 50,\n showCollectionInfo = true,\n showExpandControls = true,\n showActionButtons = true,\n className = '',\n preserveKeyOrder = true,\n } = mergedConfig;\n\n // JSON Tree theme optimized for dark theme\n const jsonTreeTheme = {\n scheme: 'djangocfg-dark',\n base00: 'transparent', // Background\n base01: '#1a1a1a', // Lighter background\n base02: '#2a2a2a', // Selection background\n base03: '#6b7280', // Comments, invisibles\n base04: '#9ca3af', // Dark foreground\n base05: '#e5e7eb', // Default foreground\n base06: '#f3f4f6', // Light foreground\n base07: '#ffffff', // Lightest foreground\n base08: '#ef4444', // Red - for null, undefined\n base09: '#f97316', // Orange - for numbers\n base0A: '#eab308', // Yellow - for strings\n base0B: '#22c55e', // Green - for booleans (true)\n base0C: '#06b6d4', // Cyan - for dates, regex\n base0D: '#3b82f6', // Blue - for keys\n base0E: '#a855f7', // Purple - for functions\n base0F: '#f43f5e', // Pink - for deprecations\n };\n\n // Smart expansion logic\n const shouldExpandNodeInitially = (keyPath: readonly (string | number)[], nodeData: unknown, level: number) => {\n // If user explicitly clicked \"Expand All\", expand everything\n if (expandAll === true) return true;\n\n // If user explicitly clicked \"Collapse All\", collapse everything\n if (expandAll === false) return false;\n\n // Default auto-expansion (expandAll === null)\n // Always expand up to maxAutoExpandDepth\n if (level <= maxAutoExpandDepth) return true;\n\n // For arrays, expand if they have less than maxAutoExpandArrayItems\n if (Array.isArray(nodeData) && nodeData.length <= maxAutoExpandArrayItems) return true;\n\n // For objects, expand if they have less than maxAutoExpandObjectKeys\n if (nodeData && typeof nodeData === 'object' && !Array.isArray(nodeData)) {\n const keys = Object.keys(nodeData);\n return keys.length <= maxAutoExpandObjectKeys;\n }\n\n return false;\n };\n\n // Collection info display\n const getItemString = showCollectionInfo\n ? (nodeType: string, nodeData: unknown) => {\n if (nodeType === 'Array') {\n const length = Array.isArray(nodeData) ? nodeData.length : 0;\n return length > 0 ? <span className=\"text-muted-foreground text-sm\">({length} items)</span> : null;\n }\n if (nodeType === 'Object') {\n const keys = nodeData && typeof nodeData === 'object' ? Object.keys(nodeData) : [];\n return keys.length > 0 ? <span className=\"text-muted-foreground text-sm\">({keys.length} keys)</span> : null;\n }\n return null;\n }\n : () => null;\n\n // Value processing for better display\n const postprocessValue = (value: unknown) => {\n // Truncate very long strings\n if (typeof value === 'string' && value.length > maxStringLength) {\n return value.substring(0, maxStringLength) + '... (truncated)';\n }\n return value;\n };\n\n // Custom node detection for special formatting\n const isCustomNode = (value: unknown) => {\n // Mark URLs as custom nodes for special styling\n if (typeof value === 'string' && (value.startsWith('http://') || value.startsWith('https://'))) {\n return true;\n }\n return false;\n };\n\n // JSON string for copy/download\n const jsonString = JSON.stringify(data, null, 2);\n\n // Action handlers\n const handleDownload = () => {\n const blob = new Blob([jsonString], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = 'data.json';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n };\n\n // Container classes based on mode\n const containerClasses = useMemo(() => {\n const base = 'relative overflow-hidden';\n switch (mode) {\n case 'full':\n return `${base} border border-border rounded-sm h-full ${className}`;\n case 'compact':\n return `${base} border border-border/50 rounded-md ${className}`;\n case 'inline':\n return `${base} ${className}`;\n default:\n return `${base} ${className}`;\n }\n }, [mode, className]);\n\n // Content padding based on mode\n const contentPadding = useMemo(() => {\n switch (mode) {\n case 'full':\n return 'p-4';\n case 'compact':\n return 'p-3';\n case 'inline':\n return 'p-2';\n default:\n return 'p-4';\n }\n }, [mode]);\n\n // Show header only in full mode or when title is provided\n const showHeader = (title || showExpandControls || showActionButtons) && mode === 'full';\n\n return (\n <div className={containerClasses}>\n {/* Header with title and controls */}\n {showHeader && (\n <div className=\"p-4 border-b border-border bg-muted/50 rounded-t-sm\">\n <div className=\"flex items-center justify-between\">\n {title && (\n <h6 className=\"text-lg font-semibold text-foreground\">{title}</h6>\n )}\n\n {(showExpandControls || showActionButtons) && (\n <div className=\"flex items-center space-x-2\">\n {/* Expand/Collapse Controls */}\n {showExpandControls && (\n <Button\n variant={expandAll === true ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={() => {\n const newState = expandAll === true ? false : true;\n setExpandAll(newState);\n setRenderKey(prev => prev + 1);\n }}\n className=\"h-8 px-2\"\n >\n {expandAll === true ? (\n <>\n <ChevronUp className=\"h-3 w-3\" />\n <span className=\"ml-1 text-xs\">Collapse All</span>\n </>\n ) : (\n <>\n <ChevronDown className=\"h-3 w-3\" />\n <span className=\"ml-1 text-xs\">Expand All</span>\n </>\n )}\n </Button>\n )}\n\n {/* Action Buttons */}\n {showActionButtons && (\n <>\n <CopyButton\n value={jsonString}\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 px-2\"\n iconClassName=\"h-3 w-3\"\n >\n Copy\n </CopyButton>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleDownload}\n className=\"h-8 px-2\"\n >\n <Download className=\"h-3 w-3\" />\n <span className=\"ml-1 text-xs hidden sm:inline\">Download</span>\n </Button>\n </>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* JSON Tree Content */}\n <div className={`overflow-auto ${contentPadding}`}>\n <JSONTree\n key={renderKey} // Force re-render when expand/collapse state changes\n data={data}\n theme={jsonTreeTheme}\n invertTheme={false}\n hideRoot={true}\n shouldExpandNodeInitially={shouldExpandNodeInitially}\n getItemString={getItemString}\n postprocessValue={postprocessValue}\n isCustomNode={isCustomNode}\n collectionLimit={collectionLimit}\n sortObjectKeys={!preserveKeyOrder}\n {...jsonTreeProps}\n />\n </div>\n </div>\n );\n};\n\nexport default JsonTreeComponent;\n"]}
|