@djangocfg/ui-tools 2.1.389 → 2.1.393
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/README.md +7 -10
- package/dist/chunk-PAWJFY3S.mjs +6 -0
- package/dist/{chunk-N2XQF2OL.mjs.map → chunk-PAWJFY3S.mjs.map} +1 -1
- package/dist/chunk-PK6SKIKE.cjs +8 -0
- package/dist/{chunk-OLISEQHS.cjs.map → chunk-PK6SKIKE.cjs.map} +1 -1
- package/dist/file-icon/index.cjs +6 -6
- package/dist/file-icon/index.d.cts +1 -1
- package/dist/file-icon/index.d.ts +1 -1
- package/dist/file-icon/index.mjs +1 -1
- package/dist/tree/index.cjs +1372 -143
- package/dist/tree/index.cjs.map +1 -1
- package/dist/tree/index.d.cts +2 -2
- package/dist/tree/index.d.ts +2 -2
- package/dist/tree/index.mjs +1322 -3
- package/dist/tree/index.mjs.map +1 -1
- package/dist/{types-CevSbyfD.d.cts → types-B_zhyAqR.d.cts} +1 -1
- package/dist/{types-CevSbyfD.d.ts → types-B_zhyAqR.d.ts} +1 -1
- package/package.json +9 -17
- package/src/tools/AudioPlayer/README.md +4 -4
- package/src/tools/Chat/README.md +6 -6
- package/src/tools/CronScheduler/index.tsx +1 -1
- package/src/tools/CronScheduler/lazy.tsx +1 -1
- package/src/tools/ImageViewer/README.md +1 -1
- package/src/tools/JsonForm/README.md +2 -2
- package/src/tools/MarkdownEditor/README.md +3 -3
- package/src/tools/MarkdownMessage/README.md +2 -2
- package/src/tools/OpenapiViewer/components/DocsLayout/grouping.ts +5 -1
- package/src/tools/SpeechRecognition/README.md +1 -1
- package/dist/ChatRoot-EFNXQXXN.cjs +0 -15
- package/dist/ChatRoot-EFNXQXXN.cjs.map +0 -1
- package/dist/ChatRoot-FITF5RVP.mjs +0 -6
- package/dist/ChatRoot-FITF5RVP.mjs.map +0 -1
- package/dist/ChatRoot-PNNGQCYF.css +0 -7
- package/dist/ChatRoot-PNNGQCYF.css.map +0 -1
- package/dist/CronScheduler.client-DLMXCPAJ.mjs +0 -67
- package/dist/CronScheduler.client-DLMXCPAJ.mjs.map +0 -1
- package/dist/CronScheduler.client-WEJF4PWQ.cjs +0 -72
- package/dist/CronScheduler.client-WEJF4PWQ.cjs.map +0 -1
- package/dist/DictationField-AS2F33WI.cjs +0 -13
- package/dist/DictationField-AS2F33WI.cjs.map +0 -1
- package/dist/DictationField-WPONUCYE.mjs +0 -4
- package/dist/DictationField-WPONUCYE.mjs.map +0 -1
- package/dist/DocsLayout-EKASBSP7.mjs +0 -3448
- package/dist/DocsLayout-EKASBSP7.mjs.map +0 -1
- package/dist/DocsLayout-MBFIB4NO.css +0 -7
- package/dist/DocsLayout-MBFIB4NO.css.map +0 -1
- package/dist/DocsLayout-OURFYWQE.cjs +0 -3455
- package/dist/DocsLayout-OURFYWQE.cjs.map +0 -1
- package/dist/JsonSchemaForm-DD7CLRIG.cjs +0 -13
- package/dist/JsonSchemaForm-DD7CLRIG.cjs.map +0 -1
- package/dist/JsonSchemaForm-XKUIVELK.mjs +0 -4
- package/dist/JsonSchemaForm-XKUIVELK.mjs.map +0 -1
- package/dist/JsonTree-43PQAJKY.mjs +0 -5
- package/dist/JsonTree-43PQAJKY.mjs.map +0 -1
- package/dist/JsonTree-MLET23ZA.css +0 -7
- package/dist/JsonTree-MLET23ZA.css.map +0 -1
- package/dist/JsonTree-X6W5YEVY.cjs +0 -11
- package/dist/JsonTree-X6W5YEVY.cjs.map +0 -1
- package/dist/LottiePlayer.client-2S7ISJ2S.cjs +0 -168
- package/dist/LottiePlayer.client-2S7ISJ2S.cjs.map +0 -1
- package/dist/LottiePlayer.client-5LDSSJWS.mjs +0 -161
- package/dist/LottiePlayer.client-5LDSSJWS.mjs.map +0 -1
- package/dist/MapContainer-AKIPABJK.mjs +0 -4
- package/dist/MapContainer-AKIPABJK.mjs.map +0 -1
- package/dist/MapContainer-STVDMC36.cjs +0 -17
- package/dist/MapContainer-STVDMC36.cjs.map +0 -1
- package/dist/Mermaid.client-DDXWXZXY.css +0 -7
- package/dist/Mermaid.client-DDXWXZXY.css.map +0 -1
- package/dist/Mermaid.client-NL4SVR7F.mjs +0 -481
- package/dist/Mermaid.client-NL4SVR7F.mjs.map +0 -1
- package/dist/Mermaid.client-NNTI6DFX.cjs +0 -487
- package/dist/Mermaid.client-NNTI6DFX.cjs.map +0 -1
- package/dist/Player-BRV7XTWR.mjs +0 -4
- package/dist/Player-BRV7XTWR.mjs.map +0 -1
- package/dist/Player-PM7F7DD7.cjs +0 -13
- package/dist/Player-PM7F7DD7.cjs.map +0 -1
- package/dist/Player-ZGQKKOWI.css +0 -66
- package/dist/Player-ZGQKKOWI.css.map +0 -1
- package/dist/PrettyCode.client-GWFAIVFN.css +0 -7
- package/dist/PrettyCode.client-GWFAIVFN.css.map +0 -1
- package/dist/PrettyCode.client-KOHDVPPN.cjs +0 -285
- package/dist/PrettyCode.client-KOHDVPPN.cjs.map +0 -1
- package/dist/PrettyCode.client-ZGYGKE7G.mjs +0 -283
- package/dist/PrettyCode.client-ZGYGKE7G.mjs.map +0 -1
- package/dist/TreeRoot-5COOOSWG.mjs +0 -4
- package/dist/TreeRoot-5COOOSWG.mjs.map +0 -1
- package/dist/TreeRoot-AABP2J6Y.cjs +0 -19
- package/dist/TreeRoot-AABP2J6Y.cjs.map +0 -1
- package/dist/chunk-2NG4SXEP.mjs +0 -743
- package/dist/chunk-2NG4SXEP.mjs.map +0 -1
- package/dist/chunk-4LFB7I5K.cjs +0 -1387
- package/dist/chunk-4LFB7I5K.cjs.map +0 -1
- package/dist/chunk-5D2OCOPQ.cjs +0 -222
- package/dist/chunk-5D2OCOPQ.cjs.map +0 -1
- package/dist/chunk-5I5QNGUG.cjs +0 -611
- package/dist/chunk-5I5QNGUG.cjs.map +0 -1
- package/dist/chunk-6ZX2G25W.mjs +0 -1361
- package/dist/chunk-6ZX2G25W.mjs.map +0 -1
- package/dist/chunk-76NNDZH6.cjs +0 -1061
- package/dist/chunk-76NNDZH6.cjs.map +0 -1
- package/dist/chunk-7CWGZPO3.mjs +0 -214
- package/dist/chunk-7CWGZPO3.mjs.map +0 -1
- package/dist/chunk-7EYHNP3E.cjs +0 -965
- package/dist/chunk-7EYHNP3E.cjs.map +0 -1
- package/dist/chunk-7IYXZUJO.cjs +0 -769
- package/dist/chunk-7IYXZUJO.cjs.map +0 -1
- package/dist/chunk-ADEN3UA4.cjs +0 -892
- package/dist/chunk-ADEN3UA4.cjs.map +0 -1
- package/dist/chunk-B6IR5KSC.mjs +0 -59
- package/dist/chunk-B6IR5KSC.mjs.map +0 -1
- package/dist/chunk-C6GXVH5J.mjs +0 -338
- package/dist/chunk-C6GXVH5J.mjs.map +0 -1
- package/dist/chunk-DMX7W4XZ.mjs +0 -1113
- package/dist/chunk-DMX7W4XZ.mjs.map +0 -1
- package/dist/chunk-ECONRHIG.mjs +0 -212
- package/dist/chunk-ECONRHIG.mjs.map +0 -1
- package/dist/chunk-FEN5S772.cjs +0 -1227
- package/dist/chunk-FEN5S772.cjs.map +0 -1
- package/dist/chunk-FP2RLYQZ.cjs +0 -187
- package/dist/chunk-FP2RLYQZ.cjs.map +0 -1
- package/dist/chunk-FVVF7VCD.cjs +0 -1325
- package/dist/chunk-FVVF7VCD.cjs.map +0 -1
- package/dist/chunk-GYIO7W7M.mjs +0 -1197
- package/dist/chunk-GYIO7W7M.mjs.map +0 -1
- package/dist/chunk-KNDLV4PI.cjs +0 -1356
- package/dist/chunk-KNDLV4PI.cjs.map +0 -1
- package/dist/chunk-KNEQRUBA.mjs +0 -181
- package/dist/chunk-KNEQRUBA.mjs.map +0 -1
- package/dist/chunk-N2XQF2OL.mjs +0 -14
- package/dist/chunk-N4MZYNR4.mjs +0 -1342
- package/dist/chunk-N4MZYNR4.mjs.map +0 -1
- package/dist/chunk-NTVBIIUD.mjs +0 -1439
- package/dist/chunk-NTVBIIUD.mjs.map +0 -1
- package/dist/chunk-OBRSGM64.mjs +0 -607
- package/dist/chunk-OBRSGM64.mjs.map +0 -1
- package/dist/chunk-ODO4GMW7.mjs +0 -79
- package/dist/chunk-ODO4GMW7.mjs.map +0 -1
- package/dist/chunk-OLISEQHS.cjs +0 -18
- package/dist/chunk-PVAX67JG.mjs +0 -1041
- package/dist/chunk-PVAX67JG.mjs.map +0 -1
- package/dist/chunk-QJ6GTUCO.cjs +0 -81
- package/dist/chunk-QJ6GTUCO.cjs.map +0 -1
- package/dist/chunk-T3MWM23F.cjs +0 -214
- package/dist/chunk-T3MWM23F.cjs.map +0 -1
- package/dist/chunk-TBSHZO5R.cjs +0 -1134
- package/dist/chunk-TBSHZO5R.cjs.map +0 -1
- package/dist/chunk-UNCS5V5F.mjs +0 -887
- package/dist/chunk-UNCS5V5F.mjs.map +0 -1
- package/dist/chunk-VWQ5WOIL.mjs +0 -2059
- package/dist/chunk-VWQ5WOIL.mjs.map +0 -1
- package/dist/chunk-W75B7Y6C.cjs +0 -1478
- package/dist/chunk-W75B7Y6C.cjs.map +0 -1
- package/dist/chunk-Y6UTOBF6.mjs +0 -938
- package/dist/chunk-Y6UTOBF6.mjs.map +0 -1
- package/dist/chunk-YDPDTOSP.cjs +0 -2061
- package/dist/chunk-YDPDTOSP.cjs.map +0 -1
- package/dist/chunk-YW5IVWHQ.cjs +0 -346
- package/dist/chunk-YW5IVWHQ.cjs.map +0 -1
- package/dist/chunk-YXZ6GU7H.cjs +0 -63
- package/dist/chunk-YXZ6GU7H.cjs.map +0 -1
- package/dist/chunk-ZL7FH4NW.mjs +0 -1274
- package/dist/chunk-ZL7FH4NW.mjs.map +0 -1
- package/dist/components-EHOGXATG.cjs +0 -22
- package/dist/components-EHOGXATG.cjs.map +0 -1
- package/dist/components-MQ6DR7TX.cjs +0 -26
- package/dist/components-MQ6DR7TX.cjs.map +0 -1
- package/dist/components-XRX7QGLB.mjs +0 -5
- package/dist/components-XRX7QGLB.mjs.map +0 -1
- package/dist/components-YATKRWLH.mjs +0 -5
- package/dist/components-YATKRWLH.mjs.map +0 -1
- package/dist/index.cjs +0 -3674
- package/dist/index.cjs.map +0 -1
- package/dist/index.css +0 -234
- package/dist/index.css.map +0 -1
- package/dist/index.d.cts +0 -4929
- package/dist/index.d.ts +0 -4929
- package/dist/index.mjs +0 -2912
- package/dist/index.mjs.map +0 -1
- package/dist/launcher-5Y42OBSN.mjs +0 -6
- package/dist/launcher-5Y42OBSN.mjs.map +0 -1
- package/dist/launcher-PMW2YB24.cjs +0 -59
- package/dist/launcher-PMW2YB24.cjs.map +0 -1
- package/src/index.ts +0 -157
package/dist/chunk-ECONRHIG.mjs
DELETED
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
import { FloatingToolbar, ExpandAction, CopyAction, DownloadAction } from './chunk-KNEQRUBA.mjs';
|
|
2
|
-
import { __name } from './chunk-N2XQF2OL.mjs';
|
|
3
|
-
import { memo, useRef, useMemo, useState } from 'react';
|
|
4
|
-
import { JSONTree } from 'react-json-tree';
|
|
5
|
-
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
6
|
-
|
|
7
|
-
var JSON_TREE_THEME = {
|
|
8
|
-
scheme: "djangocfg-dark",
|
|
9
|
-
base00: "transparent",
|
|
10
|
-
base01: "#1a1a1a",
|
|
11
|
-
base02: "#2a2a2a",
|
|
12
|
-
base03: "#6b7280",
|
|
13
|
-
base04: "#9ca3af",
|
|
14
|
-
base05: "#e5e7eb",
|
|
15
|
-
base06: "#f3f4f6",
|
|
16
|
-
base07: "#ffffff",
|
|
17
|
-
base08: "#ef4444",
|
|
18
|
-
// null, undefined
|
|
19
|
-
base09: "#f97316",
|
|
20
|
-
// numbers
|
|
21
|
-
base0A: "#eab308",
|
|
22
|
-
// strings
|
|
23
|
-
base0B: "#22c55e",
|
|
24
|
-
// booleans
|
|
25
|
-
base0C: "#06b6d4",
|
|
26
|
-
// dates, regex
|
|
27
|
-
base0D: "#3b82f6",
|
|
28
|
-
// keys
|
|
29
|
-
base0E: "#a855f7",
|
|
30
|
-
// functions
|
|
31
|
-
base0F: "#f43f5e"
|
|
32
|
-
// deprecations
|
|
33
|
-
};
|
|
34
|
-
var JsonContent = memo(({
|
|
35
|
-
data,
|
|
36
|
-
renderKey,
|
|
37
|
-
title,
|
|
38
|
-
showTitle,
|
|
39
|
-
padding,
|
|
40
|
-
collectionLimit,
|
|
41
|
-
preserveKeyOrder,
|
|
42
|
-
showCollectionInfo,
|
|
43
|
-
maxStringLength,
|
|
44
|
-
fontSize,
|
|
45
|
-
shouldExpandNodeInitially,
|
|
46
|
-
jsonTreeProps = {}
|
|
47
|
-
}) => {
|
|
48
|
-
const getItemString = showCollectionInfo ? (nodeType, nodeData) => {
|
|
49
|
-
if (nodeType === "Array") {
|
|
50
|
-
const length = Array.isArray(nodeData) ? nodeData.length : 0;
|
|
51
|
-
return length > 0 ? /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground text-xs", children: [
|
|
52
|
-
"(",
|
|
53
|
-
length,
|
|
54
|
-
")"
|
|
55
|
-
] }) : null;
|
|
56
|
-
}
|
|
57
|
-
if (nodeType === "Object") {
|
|
58
|
-
const keys = nodeData && typeof nodeData === "object" ? Object.keys(nodeData) : [];
|
|
59
|
-
return keys.length > 0 ? /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-xs", children: `{${keys.length}}` }) : null;
|
|
60
|
-
}
|
|
61
|
-
return null;
|
|
62
|
-
} : () => null;
|
|
63
|
-
const postprocessValue = /* @__PURE__ */ __name((value) => {
|
|
64
|
-
if (typeof value === "string" && value.length > maxStringLength) {
|
|
65
|
-
return value.substring(0, maxStringLength) + "... (truncated)";
|
|
66
|
-
}
|
|
67
|
-
return value;
|
|
68
|
-
}, "postprocessValue");
|
|
69
|
-
const isCustomNode = /* @__PURE__ */ __name((value) => typeof value === "string" && (value.startsWith("http://") || value.startsWith("https://")), "isCustomNode");
|
|
70
|
-
return /* @__PURE__ */ jsxs("div", { className: `overflow-auto h-full ${padding}`, style: fontSize ? { fontSize } : void 0, children: [
|
|
71
|
-
showTitle && title && /* @__PURE__ */ jsx("h6", { className: "text-sm font-semibold text-foreground mb-2", children: title }),
|
|
72
|
-
/* @__PURE__ */ jsx(
|
|
73
|
-
JSONTree,
|
|
74
|
-
{
|
|
75
|
-
data,
|
|
76
|
-
theme: JSON_TREE_THEME,
|
|
77
|
-
invertTheme: false,
|
|
78
|
-
hideRoot: true,
|
|
79
|
-
shouldExpandNodeInitially,
|
|
80
|
-
getItemString,
|
|
81
|
-
postprocessValue,
|
|
82
|
-
isCustomNode,
|
|
83
|
-
collectionLimit,
|
|
84
|
-
sortObjectKeys: !preserveKeyOrder,
|
|
85
|
-
...jsonTreeProps
|
|
86
|
-
},
|
|
87
|
-
renderKey
|
|
88
|
-
)
|
|
89
|
-
] });
|
|
90
|
-
});
|
|
91
|
-
function useJsonExpand({
|
|
92
|
-
maxAutoExpandDepth,
|
|
93
|
-
maxAutoExpandArrayItems,
|
|
94
|
-
maxAutoExpandObjectKeys
|
|
95
|
-
}) {
|
|
96
|
-
const [expandAll, setExpandAll] = useState(null);
|
|
97
|
-
const [renderKey, setRenderKey] = useState(0);
|
|
98
|
-
const isExpanded = expandAll === true || expandAll === null && maxAutoExpandDepth > 0;
|
|
99
|
-
const toggle = /* @__PURE__ */ __name(() => {
|
|
100
|
-
setExpandAll(isExpanded ? false : true);
|
|
101
|
-
setRenderKey((prev) => prev + 1);
|
|
102
|
-
}, "toggle");
|
|
103
|
-
const shouldExpandNodeInitially = /* @__PURE__ */ __name((_keyPath, nodeData, level) => {
|
|
104
|
-
if (expandAll === true) return true;
|
|
105
|
-
if (expandAll === false) return false;
|
|
106
|
-
if (level <= maxAutoExpandDepth) return true;
|
|
107
|
-
if (Array.isArray(nodeData) && nodeData.length <= maxAutoExpandArrayItems) return true;
|
|
108
|
-
if (nodeData && typeof nodeData === "object" && !Array.isArray(nodeData)) {
|
|
109
|
-
return Object.keys(nodeData).length <= maxAutoExpandObjectKeys;
|
|
110
|
-
}
|
|
111
|
-
return false;
|
|
112
|
-
}, "shouldExpandNodeInitially");
|
|
113
|
-
return { isExpanded, toggle, renderKey, shouldExpandNodeInitially };
|
|
114
|
-
}
|
|
115
|
-
__name(useJsonExpand, "useJsonExpand");
|
|
116
|
-
|
|
117
|
-
// src/tools/JsonTree/types.ts
|
|
118
|
-
var MODE_PRESETS = {
|
|
119
|
-
full: {
|
|
120
|
-
showExpandControls: true,
|
|
121
|
-
showActionButtons: true,
|
|
122
|
-
showCollectionInfo: true,
|
|
123
|
-
fontSize: "13px"
|
|
124
|
-
},
|
|
125
|
-
compact: {
|
|
126
|
-
showExpandControls: false,
|
|
127
|
-
showActionButtons: false,
|
|
128
|
-
showCollectionInfo: true,
|
|
129
|
-
fontSize: "11px",
|
|
130
|
-
maxAutoExpandDepth: 1
|
|
131
|
-
},
|
|
132
|
-
inline: {
|
|
133
|
-
showExpandControls: false,
|
|
134
|
-
showActionButtons: false,
|
|
135
|
-
showCollectionInfo: false,
|
|
136
|
-
fontSize: "11px",
|
|
137
|
-
maxAutoExpandDepth: 1
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
var JsonTreeComponent = memo(({
|
|
141
|
-
title,
|
|
142
|
-
data,
|
|
143
|
-
mode = "full",
|
|
144
|
-
config = {},
|
|
145
|
-
jsonTreeProps = {}
|
|
146
|
-
}) => {
|
|
147
|
-
const containerRef = useRef(null);
|
|
148
|
-
const mergedConfig = useMemo(() => ({ ...MODE_PRESETS[mode], ...config }), [mode, config]);
|
|
149
|
-
const {
|
|
150
|
-
maxAutoExpandDepth = 2,
|
|
151
|
-
maxAutoExpandArrayItems = 10,
|
|
152
|
-
maxAutoExpandObjectKeys = 5,
|
|
153
|
-
maxStringLength = 200,
|
|
154
|
-
collectionLimit = 50,
|
|
155
|
-
showCollectionInfo = true,
|
|
156
|
-
showExpandControls = true,
|
|
157
|
-
showActionButtons = true,
|
|
158
|
-
className = "",
|
|
159
|
-
preserveKeyOrder = true,
|
|
160
|
-
fontSize
|
|
161
|
-
} = mergedConfig;
|
|
162
|
-
const { isExpanded, toggle, renderKey, shouldExpandNodeInitially } = useJsonExpand({
|
|
163
|
-
maxAutoExpandDepth,
|
|
164
|
-
maxAutoExpandArrayItems,
|
|
165
|
-
maxAutoExpandObjectKeys
|
|
166
|
-
});
|
|
167
|
-
const jsonString = useMemo(() => JSON.stringify(data, null, 2), [data]);
|
|
168
|
-
const containerClasses = useMemo(() => {
|
|
169
|
-
const base = "relative w-full";
|
|
170
|
-
switch (mode) {
|
|
171
|
-
case "full":
|
|
172
|
-
return `${base} border border-border rounded-sm ${className}`;
|
|
173
|
-
case "compact":
|
|
174
|
-
return `${base} border border-border/50 rounded-md ${className}`;
|
|
175
|
-
default:
|
|
176
|
-
return `${base} ${className}`;
|
|
177
|
-
}
|
|
178
|
-
}, [mode, className]);
|
|
179
|
-
const contentPadding = mode === "full" ? "p-4" : mode === "compact" ? "p-2" : "p-1";
|
|
180
|
-
const showControls = (showExpandControls || showActionButtons) && mode === "full";
|
|
181
|
-
return /* @__PURE__ */ jsxs("div", { ref: containerRef, className: containerClasses, children: [
|
|
182
|
-
showControls && /* @__PURE__ */ jsxs(FloatingToolbar, { containerRef, children: [
|
|
183
|
-
showExpandControls && /* @__PURE__ */ jsx(ExpandAction, { isExpanded, onToggle: toggle }),
|
|
184
|
-
showActionButtons && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
185
|
-
/* @__PURE__ */ jsx(CopyAction, { value: jsonString, title: "Copy JSON" }),
|
|
186
|
-
/* @__PURE__ */ jsx(DownloadAction, { value: jsonString, filename: "data.json", mimeType: "application/json", title: "Download JSON" })
|
|
187
|
-
] })
|
|
188
|
-
] }),
|
|
189
|
-
/* @__PURE__ */ jsx(
|
|
190
|
-
JsonContent,
|
|
191
|
-
{
|
|
192
|
-
data,
|
|
193
|
-
renderKey,
|
|
194
|
-
title,
|
|
195
|
-
showTitle: mode === "full",
|
|
196
|
-
padding: contentPadding,
|
|
197
|
-
collectionLimit,
|
|
198
|
-
preserveKeyOrder,
|
|
199
|
-
showCollectionInfo,
|
|
200
|
-
maxStringLength,
|
|
201
|
-
shouldExpandNodeInitially,
|
|
202
|
-
fontSize,
|
|
203
|
-
jsonTreeProps
|
|
204
|
-
}
|
|
205
|
-
)
|
|
206
|
-
] });
|
|
207
|
-
});
|
|
208
|
-
var JsonTree_default = JsonTreeComponent;
|
|
209
|
-
|
|
210
|
-
export { JsonTree_default };
|
|
211
|
-
//# sourceMappingURL=chunk-ECONRHIG.mjs.map
|
|
212
|
-
//# sourceMappingURL=chunk-ECONRHIG.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/JsonTree/components/JsonContent.tsx","../src/tools/JsonTree/hooks/useJsonExpand.ts","../src/tools/JsonTree/types.ts","../src/tools/JsonTree/index.tsx"],"names":["memo","jsxs","jsx"],"mappings":"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","file":"chunk-ECONRHIG.mjs","sourcesContent":["'use client';\n\nimport React, { memo } from 'react';\nimport { CommonExternalProps, JSONTree } from 'react-json-tree';\n\nconst JSON_TREE_THEME = {\n scheme: 'djangocfg-dark',\n base00: 'transparent',\n base01: '#1a1a1a',\n base02: '#2a2a2a',\n base03: '#6b7280',\n base04: '#9ca3af',\n base05: '#e5e7eb',\n base06: '#f3f4f6',\n base07: '#ffffff',\n base08: '#ef4444', // null, undefined\n base09: '#f97316', // numbers\n base0A: '#eab308', // strings\n base0B: '#22c55e', // booleans\n base0C: '#06b6d4', // dates, regex\n base0D: '#3b82f6', // keys\n base0E: '#a855f7', // functions\n base0F: '#f43f5e', // deprecations\n};\n\ninterface JsonContentProps {\n data: unknown;\n renderKey: number;\n title?: string;\n showTitle: boolean;\n padding: string;\n collectionLimit: number;\n preserveKeyOrder: boolean;\n showCollectionInfo: boolean;\n maxStringLength: number;\n fontSize?: string;\n shouldExpandNodeInitially: (keyPath: readonly (string | number)[], nodeData: unknown, level: number) => boolean;\n jsonTreeProps?: Partial<CommonExternalProps>;\n}\n\n/**\n * JsonContent — react-json-tree wrapper with theming.\n *\n * Memoised: re-renders only when any prop changes. `data` is compared\n * by reference — the parent should not mutate the object in place.\n */\nconst JsonContent = memo(({\n data,\n renderKey,\n title,\n showTitle,\n padding,\n collectionLimit,\n preserveKeyOrder,\n showCollectionInfo,\n maxStringLength,\n fontSize,\n shouldExpandNodeInitially,\n jsonTreeProps = {},\n}: JsonContentProps) => {\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-xs\">({length})</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-xs\">{`{${keys.length}}`}</span> : null;\n }\n return null;\n }\n : () => null;\n\n const postprocessValue = (value: unknown) => {\n if (typeof value === 'string' && value.length > maxStringLength) {\n return value.substring(0, maxStringLength) + '... (truncated)';\n }\n return value;\n };\n\n const isCustomNode = (value: unknown) =>\n typeof value === 'string' && (value.startsWith('http://') || value.startsWith('https://'));\n\n return (\n <div className={`overflow-auto h-full ${padding}`} style={fontSize ? { fontSize } : undefined}>\n {showTitle && title && (\n <h6 className=\"text-sm font-semibold text-foreground mb-2\">{title}</h6>\n )}\n <JSONTree\n key={renderKey}\n data={data}\n theme={JSON_TREE_THEME}\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 );\n});\n\nexport { JsonContent };\nexport default JsonContent;\n","'use client';\n\nimport { useState } from 'react';\n\ninterface UseJsonExpandOptions {\n maxAutoExpandDepth: number;\n maxAutoExpandArrayItems: number;\n maxAutoExpandObjectKeys: number;\n}\n\n/**\n * Manages expand/collapse state for JsonTree.\n * null = smart auto-expand mode (uses depth/size heuristics)\n * true = all expanded (user override)\n * false = all collapsed (user override)\n */\nexport function useJsonExpand({\n maxAutoExpandDepth,\n maxAutoExpandArrayItems,\n maxAutoExpandObjectKeys,\n}: UseJsonExpandOptions) {\n const [expandAll, setExpandAll] = useState<boolean | null>(null);\n const [renderKey, setRenderKey] = useState(0);\n\n // Reflects the effective visual state — used to show correct icon\n const isExpanded = expandAll === true || (expandAll === null && maxAutoExpandDepth > 0);\n\n const toggle = () => {\n setExpandAll(isExpanded ? false : true);\n setRenderKey(prev => prev + 1);\n };\n\n const shouldExpandNodeInitially = (\n _keyPath: readonly (string | number)[],\n nodeData: unknown,\n level: number,\n ): boolean => {\n if (expandAll === true) return true;\n if (expandAll === false) return false;\n // null = auto mode\n if (level <= maxAutoExpandDepth) return true;\n if (Array.isArray(nodeData) && nodeData.length <= maxAutoExpandArrayItems) return true;\n if (nodeData && typeof nodeData === 'object' && !Array.isArray(nodeData)) {\n return Object.keys(nodeData).length <= maxAutoExpandObjectKeys;\n }\n return false;\n };\n\n return { isExpanded, toggle, renderKey, shouldExpandNodeInitially };\n}\n","import { CommonExternalProps } from 'react-json-tree';\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 /** Font size for tree nodes (default: '12px' for compact/inline, '13px' for full) */\n fontSize?: string;\n}\n\nexport interface JsonTreeComponentProps {\n title?: string;\n data: unknown;\n /**\n * Extra top offset in px for the floating toolbar — use when your layout\n * has a non-sticky header that useNavbarHeight cannot auto-detect.\n * Adds to the auto-detected navbar height.\n */\n toolbarOffset?: number;\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\nexport const MODE_PRESETS: Record<JsonTreeMode, Partial<JsonTreeConfig>> = {\n full: {\n showExpandControls: true,\n showActionButtons: true,\n showCollectionInfo: true,\n fontSize: '13px',\n },\n compact: {\n showExpandControls: false,\n showActionButtons: false,\n showCollectionInfo: true,\n fontSize: '11px',\n maxAutoExpandDepth: 1,\n },\n inline: {\n showExpandControls: false,\n showActionButtons: false,\n showCollectionInfo: false,\n fontSize: '11px',\n maxAutoExpandDepth: 1,\n },\n};\n","'use client';\n\nimport React, { memo, useMemo, useRef } from 'react';\n\nimport { FloatingToolbar } from '../../components/FloatingToolbar';\nimport { CopyAction, DownloadAction, ExpandAction } from '../../components/FloatingToolbar/actions';\nimport { JsonContent } from './components/JsonContent';\nimport { useJsonExpand } from './hooks/useJsonExpand';\nimport { JsonTreeComponentProps, MODE_PRESETS } from './types';\n\nexport type { Language } from 'prism-react-renderer';\nexport type { JsonTreeConfig, JsonTreeComponentProps, JsonTreeMode } from './types';\n\n/**\n * JsonTreeComponent — JSON viewer with expand/collapse, copy, download.\n *\n * Memoised: re-renders only when `title`, `data`, `mode`, `config` or\n * `jsonTreeProps` change. `data` is compared by reference — the parent\n * should not mutate the object in place.\n */\nconst JsonTreeComponent = memo(({\n title,\n data,\n mode = 'full',\n config = {},\n jsonTreeProps = {},\n}: JsonTreeComponentProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n const mergedConfig = useMemo(() => ({ ...MODE_PRESETS[mode], ...config }), [mode, config]);\n\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 fontSize,\n } = mergedConfig;\n\n const { isExpanded, toggle, renderKey, shouldExpandNodeInitially } = useJsonExpand({\n maxAutoExpandDepth,\n maxAutoExpandArrayItems,\n maxAutoExpandObjectKeys,\n });\n\n const jsonString = useMemo(() => JSON.stringify(data, null, 2), [data]);\n\n const containerClasses = useMemo(() => {\n const base = 'relative w-full';\n switch (mode) {\n case 'full': return `${base} border border-border rounded-sm ${className}`;\n case 'compact': return `${base} border border-border/50 rounded-md ${className}`;\n default: return `${base} ${className}`;\n }\n }, [mode, className]);\n\n const contentPadding = mode === 'full' ? 'p-4' : mode === 'compact' ? 'p-2' : 'p-1';\n const showControls = (showExpandControls || showActionButtons) && mode === 'full';\n\n return (\n <div ref={containerRef} className={containerClasses}>\n {showControls && (\n <FloatingToolbar containerRef={containerRef}>\n {showExpandControls && <ExpandAction isExpanded={isExpanded} onToggle={toggle} />}\n {showActionButtons && (\n <>\n <CopyAction value={jsonString} title=\"Copy JSON\" />\n <DownloadAction value={jsonString} filename=\"data.json\" mimeType=\"application/json\" title=\"Download JSON\" />\n </>\n )}\n </FloatingToolbar>\n )}\n\n <JsonContent\n data={data}\n renderKey={renderKey}\n title={title}\n showTitle={mode === 'full'}\n padding={contentPadding}\n collectionLimit={collectionLimit}\n preserveKeyOrder={preserveKeyOrder}\n showCollectionInfo={showCollectionInfo}\n maxStringLength={maxStringLength}\n shouldExpandNodeInitially={shouldExpandNodeInitially}\n fontSize={fontSize}\n jsonTreeProps={jsonTreeProps}\n />\n </div>\n );\n});\n\nexport default JsonTreeComponent;\n"]}
|