@djangocfg/ui-tools 2.1.91
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/LottiePlayer.client-LBEC2JKY.mjs +161 -0
- package/dist/LottiePlayer.client-LBEC2JKY.mjs.map +1 -0
- package/dist/LottiePlayer.client-WFMG2OOW.cjs +168 -0
- package/dist/LottiePlayer.client-WFMG2OOW.cjs.map +1 -0
- package/dist/Mermaid.client-4TU2TSH3.mjs +477 -0
- package/dist/Mermaid.client-4TU2TSH3.mjs.map +1 -0
- package/dist/Mermaid.client-SBYY364Q.cjs +483 -0
- package/dist/Mermaid.client-SBYY364Q.cjs.map +1 -0
- package/dist/PlaygroundLayout-3YVSAEAF.cjs +1003 -0
- package/dist/PlaygroundLayout-3YVSAEAF.cjs.map +1 -0
- package/dist/PlaygroundLayout-4DYBORAS.mjs +996 -0
- package/dist/PlaygroundLayout-4DYBORAS.mjs.map +1 -0
- package/dist/PrettyCode.client-LCBPPTIX.mjs +152 -0
- package/dist/PrettyCode.client-LCBPPTIX.mjs.map +1 -0
- package/dist/PrettyCode.client-PNPLXRH6.cjs +154 -0
- package/dist/PrettyCode.client-PNPLXRH6.cjs.map +1 -0
- package/dist/chunk-37ZI6VD4.mjs +12 -0
- package/dist/chunk-37ZI6VD4.mjs.map +1 -0
- package/dist/chunk-3HK2OE62.cjs +81 -0
- package/dist/chunk-3HK2OE62.cjs.map +1 -0
- package/dist/chunk-7DGDQVQW.cjs +591 -0
- package/dist/chunk-7DGDQVQW.cjs.map +1 -0
- package/dist/chunk-M6P2FU7L.mjs +572 -0
- package/dist/chunk-M6P2FU7L.mjs.map +1 -0
- package/dist/chunk-UQ3XI5MY.cjs +15 -0
- package/dist/chunk-UQ3XI5MY.cjs.map +1 -0
- package/dist/chunk-YFRNE2IR.mjs +79 -0
- package/dist/chunk-YFRNE2IR.mjs.map +1 -0
- package/dist/index.cjs +5042 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1591 -0
- package/dist/index.d.ts +1591 -0
- package/dist/index.mjs +4941 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +86 -0
- package/src/components/markdown/MarkdownMessage.tsx +340 -0
- package/src/components/markdown/index.ts +5 -0
- package/src/index.ts +26 -0
- package/src/stores/index.ts +9 -0
- package/src/stores/mediaCache.ts +534 -0
- package/src/tools/AudioPlayer/README.md +206 -0
- package/src/tools/AudioPlayer/components/HybridAudioPlayer.tsx +216 -0
- package/src/tools/AudioPlayer/components/HybridSimplePlayer.tsx +280 -0
- package/src/tools/AudioPlayer/components/HybridWaveform.tsx +279 -0
- package/src/tools/AudioPlayer/components/ReactiveCover/AudioReactiveCover.tsx +149 -0
- package/src/tools/AudioPlayer/components/ReactiveCover/effects/GlowEffect.tsx +110 -0
- package/src/tools/AudioPlayer/components/ReactiveCover/effects/MeshEffect.tsx +58 -0
- package/src/tools/AudioPlayer/components/ReactiveCover/effects/OrbsEffect.tsx +45 -0
- package/src/tools/AudioPlayer/components/ReactiveCover/effects/SpotlightEffect.tsx +82 -0
- package/src/tools/AudioPlayer/components/ReactiveCover/effects/index.ts +8 -0
- package/src/tools/AudioPlayer/components/ReactiveCover/index.ts +6 -0
- package/src/tools/AudioPlayer/components/index.ts +22 -0
- package/src/tools/AudioPlayer/context/HybridAudioProvider.tsx +158 -0
- package/src/tools/AudioPlayer/context/index.ts +16 -0
- package/src/tools/AudioPlayer/effects/index.ts +412 -0
- package/src/tools/AudioPlayer/hooks/index.ts +35 -0
- package/src/tools/AudioPlayer/hooks/useHybridAudio.ts +387 -0
- package/src/tools/AudioPlayer/hooks/useHybridAudioAnalysis.ts +95 -0
- package/src/tools/AudioPlayer/hooks/useVisualization.tsx +207 -0
- package/src/tools/AudioPlayer/index.ts +133 -0
- package/src/tools/AudioPlayer/types/effects.ts +73 -0
- package/src/tools/AudioPlayer/types/index.ts +27 -0
- package/src/tools/AudioPlayer/utils/debug.ts +14 -0
- package/src/tools/AudioPlayer/utils/formatTime.ts +10 -0
- package/src/tools/AudioPlayer/utils/index.ts +6 -0
- package/src/tools/ImageViewer/@refactoring/00-PLAN.md +71 -0
- package/src/tools/ImageViewer/@refactoring/01-TYPES.md +121 -0
- package/src/tools/ImageViewer/@refactoring/02-UTILS.md +143 -0
- package/src/tools/ImageViewer/@refactoring/03-HOOKS.md +261 -0
- package/src/tools/ImageViewer/@refactoring/04-COMPONENTS.md +427 -0
- package/src/tools/ImageViewer/@refactoring/05-EXECUTION-CHECKLIST.md +126 -0
- package/src/tools/ImageViewer/README.md +200 -0
- package/src/tools/ImageViewer/components/ImageInfo.tsx +44 -0
- package/src/tools/ImageViewer/components/ImageToolbar.tsx +145 -0
- package/src/tools/ImageViewer/components/ImageViewer.tsx +241 -0
- package/src/tools/ImageViewer/components/index.ts +7 -0
- package/src/tools/ImageViewer/hooks/index.ts +9 -0
- package/src/tools/ImageViewer/hooks/useImageLoading.ts +204 -0
- package/src/tools/ImageViewer/hooks/useImageTransform.ts +101 -0
- package/src/tools/ImageViewer/index.ts +60 -0
- package/src/tools/ImageViewer/types.ts +81 -0
- package/src/tools/ImageViewer/utils/constants.ts +59 -0
- package/src/tools/ImageViewer/utils/debug.ts +14 -0
- package/src/tools/ImageViewer/utils/index.ts +17 -0
- package/src/tools/ImageViewer/utils/lqip.ts +47 -0
- package/src/tools/JsonForm/JsonSchemaForm.tsx +197 -0
- package/src/tools/JsonForm/examples/BotConfigExample.tsx +249 -0
- package/src/tools/JsonForm/examples/RealBotConfigExample.tsx +161 -0
- package/src/tools/JsonForm/index.ts +46 -0
- package/src/tools/JsonForm/templates/ArrayFieldItemTemplate.tsx +47 -0
- package/src/tools/JsonForm/templates/ArrayFieldTemplate.tsx +74 -0
- package/src/tools/JsonForm/templates/BaseInputTemplate.tsx +107 -0
- package/src/tools/JsonForm/templates/ErrorListTemplate.tsx +35 -0
- package/src/tools/JsonForm/templates/FieldTemplate.tsx +62 -0
- package/src/tools/JsonForm/templates/ObjectFieldTemplate.tsx +116 -0
- package/src/tools/JsonForm/templates/index.ts +12 -0
- package/src/tools/JsonForm/types.ts +83 -0
- package/src/tools/JsonForm/utils.ts +213 -0
- package/src/tools/JsonForm/widgets/CheckboxWidget.tsx +37 -0
- package/src/tools/JsonForm/widgets/ColorWidget.tsx +219 -0
- package/src/tools/JsonForm/widgets/NumberWidget.tsx +89 -0
- package/src/tools/JsonForm/widgets/SelectWidget.tsx +97 -0
- package/src/tools/JsonForm/widgets/SliderWidget.tsx +148 -0
- package/src/tools/JsonForm/widgets/SwitchWidget.tsx +35 -0
- package/src/tools/JsonForm/widgets/TextWidget.tsx +96 -0
- package/src/tools/JsonForm/widgets/index.ts +14 -0
- package/src/tools/JsonTree/index.tsx +243 -0
- package/src/tools/LottiePlayer/LottiePlayer.client.tsx +213 -0
- package/src/tools/LottiePlayer/index.tsx +56 -0
- package/src/tools/LottiePlayer/types.ts +108 -0
- package/src/tools/LottiePlayer/useLottie.ts +164 -0
- package/src/tools/Mermaid/Mermaid.client.tsx +82 -0
- package/src/tools/Mermaid/components/MermaidCodeViewer.tsx +95 -0
- package/src/tools/Mermaid/components/MermaidFullscreenModal.tsx +103 -0
- package/src/tools/Mermaid/hooks/index.ts +4 -0
- package/src/tools/Mermaid/hooks/useMermaidCleanup.ts +73 -0
- package/src/tools/Mermaid/hooks/useMermaidFullscreen.ts +46 -0
- package/src/tools/Mermaid/hooks/useMermaidRenderer.ts +226 -0
- package/src/tools/Mermaid/hooks/useMermaidValidation.ts +29 -0
- package/src/tools/Mermaid/index.tsx +44 -0
- package/src/tools/Mermaid/utils/mermaid-helpers.ts +33 -0
- package/src/tools/OpenapiViewer/components/EndpointInfo.tsx +149 -0
- package/src/tools/OpenapiViewer/components/EndpointsLibrary.tsx +263 -0
- package/src/tools/OpenapiViewer/components/PlaygroundLayout.tsx +125 -0
- package/src/tools/OpenapiViewer/components/PlaygroundStepper.tsx +100 -0
- package/src/tools/OpenapiViewer/components/RequestBuilder.tsx +157 -0
- package/src/tools/OpenapiViewer/components/RequestParametersForm.tsx +253 -0
- package/src/tools/OpenapiViewer/components/ResponseViewer.tsx +173 -0
- package/src/tools/OpenapiViewer/components/VersionSelector.tsx +68 -0
- package/src/tools/OpenapiViewer/components/index.ts +14 -0
- package/src/tools/OpenapiViewer/constants.ts +39 -0
- package/src/tools/OpenapiViewer/context/PlaygroundContext.tsx +337 -0
- package/src/tools/OpenapiViewer/hooks/index.ts +8 -0
- package/src/tools/OpenapiViewer/hooks/useMobile.ts +10 -0
- package/src/tools/OpenapiViewer/hooks/useOpenApiSchema.ts +199 -0
- package/src/tools/OpenapiViewer/index.tsx +37 -0
- package/src/tools/OpenapiViewer/types.ts +151 -0
- package/src/tools/OpenapiViewer/utils/apiKeyManager.ts +149 -0
- package/src/tools/OpenapiViewer/utils/formatters.ts +71 -0
- package/src/tools/OpenapiViewer/utils/index.ts +9 -0
- package/src/tools/OpenapiViewer/utils/versionManager.ts +161 -0
- package/src/tools/PrettyCode/PrettyCode.client.tsx +208 -0
- package/src/tools/PrettyCode/index.tsx +47 -0
- package/src/tools/VideoPlayer/@refactoring/00-PLAN.md +91 -0
- package/src/tools/VideoPlayer/@refactoring/01-TYPES.md +284 -0
- package/src/tools/VideoPlayer/@refactoring/02-UTILS.md +141 -0
- package/src/tools/VideoPlayer/@refactoring/03-HOOKS.md +178 -0
- package/src/tools/VideoPlayer/@refactoring/04-COMPONENTS.md +95 -0
- package/src/tools/VideoPlayer/@refactoring/05-EXECUTION-CHECKLIST.md +139 -0
- package/src/tools/VideoPlayer/README.md +264 -0
- package/src/tools/VideoPlayer/components/VideoControls.tsx +138 -0
- package/src/tools/VideoPlayer/components/VideoErrorFallback.tsx +172 -0
- package/src/tools/VideoPlayer/components/VideoPlayer.tsx +201 -0
- package/src/tools/VideoPlayer/components/index.ts +14 -0
- package/src/tools/VideoPlayer/context/VideoPlayerContext.tsx +52 -0
- package/src/tools/VideoPlayer/context/index.ts +8 -0
- package/src/tools/VideoPlayer/hooks/index.ts +12 -0
- package/src/tools/VideoPlayer/hooks/useVideoPlayerSettings.ts +70 -0
- package/src/tools/VideoPlayer/hooks/useVideoPositionCache.ts +116 -0
- package/src/tools/VideoPlayer/index.ts +77 -0
- package/src/tools/VideoPlayer/providers/NativeProvider.tsx +284 -0
- package/src/tools/VideoPlayer/providers/StreamProvider.tsx +505 -0
- package/src/tools/VideoPlayer/providers/VidstackProvider.tsx +400 -0
- package/src/tools/VideoPlayer/providers/index.ts +8 -0
- package/src/tools/VideoPlayer/types/index.ts +38 -0
- package/src/tools/VideoPlayer/types/player.ts +116 -0
- package/src/tools/VideoPlayer/types/provider.ts +93 -0
- package/src/tools/VideoPlayer/types/sources.ts +97 -0
- package/src/tools/VideoPlayer/utils/debug.ts +14 -0
- package/src/tools/VideoPlayer/utils/fileSource.ts +78 -0
- package/src/tools/VideoPlayer/utils/index.ts +12 -0
- package/src/tools/VideoPlayer/utils/resolvers.ts +75 -0
- package/src/tools/_shared.ts +29 -0
- package/src/tools/index.ts +172 -0
|
@@ -0,0 +1,572 @@
|
|
|
1
|
+
import { __name } from './chunk-37ZI6VD4.mjs';
|
|
2
|
+
import { ChevronUp, ChevronDown, Download } from 'lucide-react';
|
|
3
|
+
import React3, { lazy, createContext, useState, Suspense, useContext, useEffect, useCallback } 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
|
+
import consola from 'consola';
|
|
8
|
+
|
|
9
|
+
var JsonTreeComponent = /* @__PURE__ */ __name(({ title, data, config = {}, jsonTreeProps = {} }) => {
|
|
10
|
+
const [expandAll, setExpandAll] = useState(null);
|
|
11
|
+
const [renderKey, setRenderKey] = useState(0);
|
|
12
|
+
const {
|
|
13
|
+
maxAutoExpandDepth = 2,
|
|
14
|
+
maxAutoExpandArrayItems = 10,
|
|
15
|
+
maxAutoExpandObjectKeys = 5,
|
|
16
|
+
maxStringLength = 200,
|
|
17
|
+
collectionLimit = 50,
|
|
18
|
+
showCollectionInfo = true,
|
|
19
|
+
showExpandControls = true,
|
|
20
|
+
showActionButtons = true,
|
|
21
|
+
className = "",
|
|
22
|
+
preserveKeyOrder = true
|
|
23
|
+
} = config;
|
|
24
|
+
const jsonTreeTheme = {
|
|
25
|
+
scheme: "djangocfg-dark",
|
|
26
|
+
base00: "transparent",
|
|
27
|
+
// Background
|
|
28
|
+
base01: "#1a1a1a",
|
|
29
|
+
// Lighter background
|
|
30
|
+
base02: "#2a2a2a",
|
|
31
|
+
// Selection background
|
|
32
|
+
base03: "#6b7280",
|
|
33
|
+
// Comments, invisibles
|
|
34
|
+
base04: "#9ca3af",
|
|
35
|
+
// Dark foreground
|
|
36
|
+
base05: "#e5e7eb",
|
|
37
|
+
// Default foreground
|
|
38
|
+
base06: "#f3f4f6",
|
|
39
|
+
// Light foreground
|
|
40
|
+
base07: "#ffffff",
|
|
41
|
+
// Lightest foreground
|
|
42
|
+
base08: "#ef4444",
|
|
43
|
+
// Red - for null, undefined
|
|
44
|
+
base09: "#f97316",
|
|
45
|
+
// Orange - for numbers
|
|
46
|
+
base0A: "#eab308",
|
|
47
|
+
// Yellow - for strings
|
|
48
|
+
base0B: "#22c55e",
|
|
49
|
+
// Green - for booleans (true)
|
|
50
|
+
base0C: "#06b6d4",
|
|
51
|
+
// Cyan - for dates, regex
|
|
52
|
+
base0D: "#3b82f6",
|
|
53
|
+
// Blue - for keys
|
|
54
|
+
base0E: "#a855f7",
|
|
55
|
+
// Purple - for functions
|
|
56
|
+
base0F: "#f43f5e"
|
|
57
|
+
// Pink - for deprecations
|
|
58
|
+
};
|
|
59
|
+
const shouldExpandNodeInitially = /* @__PURE__ */ __name((keyPath, nodeData, level) => {
|
|
60
|
+
if (expandAll === true) return true;
|
|
61
|
+
if (expandAll === false) return false;
|
|
62
|
+
if (level <= maxAutoExpandDepth) return true;
|
|
63
|
+
if (Array.isArray(nodeData) && nodeData.length <= maxAutoExpandArrayItems) return true;
|
|
64
|
+
if (nodeData && typeof nodeData === "object" && !Array.isArray(nodeData)) {
|
|
65
|
+
const keys = Object.keys(nodeData);
|
|
66
|
+
return keys.length <= maxAutoExpandObjectKeys;
|
|
67
|
+
}
|
|
68
|
+
return false;
|
|
69
|
+
}, "shouldExpandNodeInitially");
|
|
70
|
+
const getItemString = showCollectionInfo ? (nodeType, nodeData) => {
|
|
71
|
+
if (nodeType === "Array") {
|
|
72
|
+
const length = Array.isArray(nodeData) ? nodeData.length : 0;
|
|
73
|
+
return length > 0 ? /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground text-sm", children: [
|
|
74
|
+
"(",
|
|
75
|
+
length,
|
|
76
|
+
" items)"
|
|
77
|
+
] }) : null;
|
|
78
|
+
}
|
|
79
|
+
if (nodeType === "Object") {
|
|
80
|
+
const keys = nodeData && typeof nodeData === "object" ? Object.keys(nodeData) : [];
|
|
81
|
+
return keys.length > 0 ? /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground text-sm", children: [
|
|
82
|
+
"(",
|
|
83
|
+
keys.length,
|
|
84
|
+
" keys)"
|
|
85
|
+
] }) : null;
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
} : () => null;
|
|
89
|
+
const postprocessValue = /* @__PURE__ */ __name((value) => {
|
|
90
|
+
if (typeof value === "string" && value.length > maxStringLength) {
|
|
91
|
+
return value.substring(0, maxStringLength) + "... (truncated)";
|
|
92
|
+
}
|
|
93
|
+
return value;
|
|
94
|
+
}, "postprocessValue");
|
|
95
|
+
const isCustomNode = /* @__PURE__ */ __name((value) => {
|
|
96
|
+
if (typeof value === "string" && (value.startsWith("http://") || value.startsWith("https://"))) {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
return false;
|
|
100
|
+
}, "isCustomNode");
|
|
101
|
+
const jsonString = JSON.stringify(data, null, 2);
|
|
102
|
+
const handleDownload = /* @__PURE__ */ __name(() => {
|
|
103
|
+
const blob = new Blob([jsonString], { type: "application/json" });
|
|
104
|
+
const url = URL.createObjectURL(blob);
|
|
105
|
+
const a = document.createElement("a");
|
|
106
|
+
a.href = url;
|
|
107
|
+
a.download = "data.json";
|
|
108
|
+
document.body.appendChild(a);
|
|
109
|
+
a.click();
|
|
110
|
+
document.body.removeChild(a);
|
|
111
|
+
URL.revokeObjectURL(url);
|
|
112
|
+
}, "handleDownload");
|
|
113
|
+
return /* @__PURE__ */ jsxs("div", { className: `relative border border-border rounded-sm h-full overflow-hidden ${className}`, children: [
|
|
114
|
+
(title || showExpandControls || showActionButtons) && /* @__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: [
|
|
115
|
+
title && /* @__PURE__ */ jsx("h6", { className: "text-lg font-semibold text-foreground", children: title }),
|
|
116
|
+
(showExpandControls || showActionButtons) && /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-2", children: [
|
|
117
|
+
showExpandControls && /* @__PURE__ */ jsx(
|
|
118
|
+
Button,
|
|
119
|
+
{
|
|
120
|
+
variant: expandAll === true ? "default" : "outline",
|
|
121
|
+
size: "sm",
|
|
122
|
+
onClick: () => {
|
|
123
|
+
const newState = expandAll === true ? false : true;
|
|
124
|
+
setExpandAll(newState);
|
|
125
|
+
setRenderKey((prev) => prev + 1);
|
|
126
|
+
},
|
|
127
|
+
className: "h-8 px-2",
|
|
128
|
+
children: expandAll === true ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
129
|
+
/* @__PURE__ */ jsx(ChevronUp, { className: "h-3 w-3" }),
|
|
130
|
+
/* @__PURE__ */ jsx("span", { className: "ml-1 text-xs", children: "Collapse All" })
|
|
131
|
+
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
132
|
+
/* @__PURE__ */ jsx(ChevronDown, { className: "h-3 w-3" }),
|
|
133
|
+
/* @__PURE__ */ jsx("span", { className: "ml-1 text-xs", children: "Expand All" })
|
|
134
|
+
] })
|
|
135
|
+
}
|
|
136
|
+
),
|
|
137
|
+
showActionButtons && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
138
|
+
/* @__PURE__ */ jsx(
|
|
139
|
+
CopyButton,
|
|
140
|
+
{
|
|
141
|
+
value: jsonString,
|
|
142
|
+
variant: "outline",
|
|
143
|
+
size: "sm",
|
|
144
|
+
className: "h-8 px-2",
|
|
145
|
+
iconClassName: "h-3 w-3",
|
|
146
|
+
children: "Copy"
|
|
147
|
+
}
|
|
148
|
+
),
|
|
149
|
+
/* @__PURE__ */ jsxs(
|
|
150
|
+
Button,
|
|
151
|
+
{
|
|
152
|
+
variant: "outline",
|
|
153
|
+
size: "sm",
|
|
154
|
+
onClick: handleDownload,
|
|
155
|
+
className: "h-8 px-2",
|
|
156
|
+
children: [
|
|
157
|
+
/* @__PURE__ */ jsx(Download, { className: "h-3 w-3" }),
|
|
158
|
+
/* @__PURE__ */ jsx("span", { className: "ml-1 text-xs hidden sm:inline", children: "Download" })
|
|
159
|
+
]
|
|
160
|
+
}
|
|
161
|
+
)
|
|
162
|
+
] })
|
|
163
|
+
] })
|
|
164
|
+
] }) }),
|
|
165
|
+
/* @__PURE__ */ jsx("div", { className: "h-full overflow-auto p-4", children: /* @__PURE__ */ jsx(
|
|
166
|
+
JSONTree,
|
|
167
|
+
{
|
|
168
|
+
data,
|
|
169
|
+
theme: jsonTreeTheme,
|
|
170
|
+
invertTheme: false,
|
|
171
|
+
hideRoot: true,
|
|
172
|
+
shouldExpandNodeInitially,
|
|
173
|
+
getItemString,
|
|
174
|
+
postprocessValue,
|
|
175
|
+
isCustomNode,
|
|
176
|
+
collectionLimit,
|
|
177
|
+
sortObjectKeys: !preserveKeyOrder,
|
|
178
|
+
...jsonTreeProps
|
|
179
|
+
},
|
|
180
|
+
renderKey
|
|
181
|
+
) })
|
|
182
|
+
] });
|
|
183
|
+
}, "JsonTreeComponent");
|
|
184
|
+
var JsonTree_default = JsonTreeComponent;
|
|
185
|
+
var PrettyCodeClient = lazy(() => import('./PrettyCode.client-LCBPPTIX.mjs'));
|
|
186
|
+
var LoadingFallback = /* @__PURE__ */ __name(() => /* @__PURE__ */ jsx("div", { className: "relative rounded-sm border border-border overflow-hidden bg-muted dark:bg-zinc-900", children: /* @__PURE__ */ jsx("div", { className: "p-4", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
187
|
+
/* @__PURE__ */ jsx("div", { className: "animate-pulse h-4 w-4 rounded-full bg-muted-foreground/20" }),
|
|
188
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: "Loading code..." })
|
|
189
|
+
] }) }) }), "LoadingFallback");
|
|
190
|
+
var PrettyCode = /* @__PURE__ */ __name((props) => {
|
|
191
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(LoadingFallback, {}), children: /* @__PURE__ */ jsx(PrettyCodeClient, { ...props }) });
|
|
192
|
+
}, "PrettyCode");
|
|
193
|
+
var PrettyCode_default = PrettyCode;
|
|
194
|
+
|
|
195
|
+
// src/tools/OpenapiViewer/utils/apiKeyManager.ts
|
|
196
|
+
function findApiKeyById(apiKeys, keyId) {
|
|
197
|
+
return apiKeys.find((key) => key.id === keyId) || null;
|
|
198
|
+
}
|
|
199
|
+
__name(findApiKeyById, "findApiKeyById");
|
|
200
|
+
|
|
201
|
+
// src/tools/OpenapiViewer/utils/versionManager.ts
|
|
202
|
+
var API_VERSIONS = [
|
|
203
|
+
{
|
|
204
|
+
id: "v1",
|
|
205
|
+
name: "v1",
|
|
206
|
+
description: "Current stable version",
|
|
207
|
+
isDefault: true
|
|
208
|
+
}
|
|
209
|
+
];
|
|
210
|
+
var detectEndpointVersion = /* @__PURE__ */ __name((path) => {
|
|
211
|
+
const versionMatch = path.match(/\/api\/[^/]+\/(v\d+)\//);
|
|
212
|
+
if (versionMatch && versionMatch[1]) {
|
|
213
|
+
return versionMatch[1];
|
|
214
|
+
}
|
|
215
|
+
return "v1";
|
|
216
|
+
}, "detectEndpointVersion");
|
|
217
|
+
var isEndpointInVersion = /* @__PURE__ */ __name((endpoint, version) => {
|
|
218
|
+
const endpointVersion = detectEndpointVersion(endpoint.path);
|
|
219
|
+
return endpointVersion === version;
|
|
220
|
+
}, "isEndpointInVersion");
|
|
221
|
+
var filterEndpointsByVersion = /* @__PURE__ */ __name((endpoints, version) => {
|
|
222
|
+
return endpoints.filter((endpoint) => isEndpointInVersion(endpoint, version));
|
|
223
|
+
}, "filterEndpointsByVersion");
|
|
224
|
+
var deduplicateEndpoints = /* @__PURE__ */ __name((endpoints, preferredVersion) => {
|
|
225
|
+
const endpointMap = /* @__PURE__ */ new Map();
|
|
226
|
+
const groupedEndpoints = /* @__PURE__ */ new Map();
|
|
227
|
+
endpoints.forEach((endpoint) => {
|
|
228
|
+
const normalizedPath = normalizeEndpointPath(endpoint.path);
|
|
229
|
+
if (!groupedEndpoints.has(normalizedPath)) {
|
|
230
|
+
groupedEndpoints.set(normalizedPath, []);
|
|
231
|
+
}
|
|
232
|
+
groupedEndpoints.get(normalizedPath).push(endpoint);
|
|
233
|
+
});
|
|
234
|
+
groupedEndpoints.forEach((endpointGroup, normalizedPath) => {
|
|
235
|
+
let selectedEndpoint = null;
|
|
236
|
+
const versionEndpoint = endpointGroup.find((ep) => isEndpointInVersion(ep, preferredVersion));
|
|
237
|
+
if (versionEndpoint) {
|
|
238
|
+
selectedEndpoint = versionEndpoint;
|
|
239
|
+
} else if (endpointGroup.length > 0) {
|
|
240
|
+
selectedEndpoint = endpointGroup[0] || null;
|
|
241
|
+
}
|
|
242
|
+
if (selectedEndpoint) {
|
|
243
|
+
endpointMap.set(normalizedPath, selectedEndpoint);
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
return Array.from(endpointMap.values());
|
|
247
|
+
}, "deduplicateEndpoints");
|
|
248
|
+
var normalizeEndpointPath = /* @__PURE__ */ __name((path) => {
|
|
249
|
+
return path.replace(/\/v\d+\//, "/");
|
|
250
|
+
}, "normalizeEndpointPath");
|
|
251
|
+
var getVersionById = /* @__PURE__ */ __name((versionId) => {
|
|
252
|
+
return API_VERSIONS.find((v) => v.id === versionId);
|
|
253
|
+
}, "getVersionById");
|
|
254
|
+
var getDefaultVersion = /* @__PURE__ */ __name(() => {
|
|
255
|
+
const defaultVersion = API_VERSIONS.find((v) => v.isDefault);
|
|
256
|
+
if (defaultVersion) {
|
|
257
|
+
return defaultVersion;
|
|
258
|
+
}
|
|
259
|
+
if (API_VERSIONS.length > 0 && API_VERSIONS[0]) {
|
|
260
|
+
return API_VERSIONS[0];
|
|
261
|
+
}
|
|
262
|
+
throw new Error("No API versions defined");
|
|
263
|
+
}, "getDefaultVersion");
|
|
264
|
+
var getVersionStats = /* @__PURE__ */ __name((endpoints) => {
|
|
265
|
+
const stats = {};
|
|
266
|
+
API_VERSIONS.forEach((version) => {
|
|
267
|
+
stats[version.id] = filterEndpointsByVersion(endpoints, version.id).length;
|
|
268
|
+
});
|
|
269
|
+
return stats;
|
|
270
|
+
}, "getVersionStats");
|
|
271
|
+
|
|
272
|
+
// src/tools/OpenapiViewer/constants.ts
|
|
273
|
+
var HTTP_METHOD_COLORS = {
|
|
274
|
+
GET: "success",
|
|
275
|
+
POST: "primary",
|
|
276
|
+
PUT: "warning",
|
|
277
|
+
DELETE: "error",
|
|
278
|
+
PATCH: "default"
|
|
279
|
+
};
|
|
280
|
+
var HTTP_STATUS_COLORS = {
|
|
281
|
+
"2": "success",
|
|
282
|
+
"3": "default",
|
|
283
|
+
"4": "warning",
|
|
284
|
+
"5": "error"
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
// src/tools/OpenapiViewer/utils/formatters.ts
|
|
288
|
+
var getMethodColor = /* @__PURE__ */ __name((method) => {
|
|
289
|
+
return HTTP_METHOD_COLORS[method.toUpperCase()] || "default";
|
|
290
|
+
}, "getMethodColor");
|
|
291
|
+
var getStatusColor = /* @__PURE__ */ __name((status) => {
|
|
292
|
+
const firstDigit = Math.floor(status / 100).toString();
|
|
293
|
+
return HTTP_STATUS_COLORS[firstDigit] || "default";
|
|
294
|
+
}, "getStatusColor");
|
|
295
|
+
var isValidJson = /* @__PURE__ */ __name((str) => {
|
|
296
|
+
if (!str || typeof str !== "string") return false;
|
|
297
|
+
try {
|
|
298
|
+
JSON.parse(str);
|
|
299
|
+
return true;
|
|
300
|
+
} catch {
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
}, "isValidJson");
|
|
304
|
+
var parseRequestHeaders = /* @__PURE__ */ __name((headersString) => {
|
|
305
|
+
if (!headersString || typeof headersString !== "string") {
|
|
306
|
+
return { "Content-Type": "application/json" };
|
|
307
|
+
}
|
|
308
|
+
try {
|
|
309
|
+
const parsed = JSON.parse(headersString);
|
|
310
|
+
return typeof parsed === "object" && parsed !== null ? parsed : { "Content-Type": "application/json" };
|
|
311
|
+
} catch {
|
|
312
|
+
return { "Content-Type": "application/json" };
|
|
313
|
+
}
|
|
314
|
+
}, "parseRequestHeaders");
|
|
315
|
+
var substituteUrlParameters = /* @__PURE__ */ __name((url, parameters) => {
|
|
316
|
+
let substitutedUrl = url;
|
|
317
|
+
Object.entries(parameters).forEach(([key, value]) => {
|
|
318
|
+
if (value && value.trim() !== "") {
|
|
319
|
+
const patterns = [
|
|
320
|
+
new RegExp(`\\{${key}\\}`, "g"),
|
|
321
|
+
new RegExp(`%7B${key}%7D`, "gi")
|
|
322
|
+
];
|
|
323
|
+
patterns.forEach((pattern) => {
|
|
324
|
+
substitutedUrl = substitutedUrl.replace(pattern, encodeURIComponent(value));
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
return substitutedUrl;
|
|
329
|
+
}, "substituteUrlParameters");
|
|
330
|
+
var createInitialState = /* @__PURE__ */ __name(() => ({
|
|
331
|
+
// Step management
|
|
332
|
+
currentStep: "endpoints",
|
|
333
|
+
steps: ["endpoints", "request", "response"],
|
|
334
|
+
// Endpoint selection
|
|
335
|
+
selectedEndpoint: null,
|
|
336
|
+
selectedCategory: "All",
|
|
337
|
+
searchTerm: "",
|
|
338
|
+
selectedVersion: getDefaultVersion().id,
|
|
339
|
+
// Request configuration
|
|
340
|
+
requestUrl: "",
|
|
341
|
+
requestMethod: "GET",
|
|
342
|
+
requestHeaders: '{\n "Content-Type": "application/json"\n}',
|
|
343
|
+
requestBody: "",
|
|
344
|
+
selectedApiKey: null,
|
|
345
|
+
manualApiToken: "",
|
|
346
|
+
parameters: {},
|
|
347
|
+
// Response
|
|
348
|
+
response: null,
|
|
349
|
+
loading: false,
|
|
350
|
+
// UI state
|
|
351
|
+
sidebarOpen: false
|
|
352
|
+
}), "createInitialState");
|
|
353
|
+
var PlaygroundContext = createContext(void 0);
|
|
354
|
+
var usePlaygroundContext = /* @__PURE__ */ __name(() => {
|
|
355
|
+
const context = useContext(PlaygroundContext);
|
|
356
|
+
if (!context) {
|
|
357
|
+
throw new Error("usePlaygroundContext must be used within a PlaygroundProvider");
|
|
358
|
+
}
|
|
359
|
+
return context;
|
|
360
|
+
}, "usePlaygroundContext");
|
|
361
|
+
var PlaygroundProvider = /* @__PURE__ */ __name(({ children, config }) => {
|
|
362
|
+
const [state, setState] = useState(() => createInitialState());
|
|
363
|
+
const apiKeys = React3.useMemo(() => [], []);
|
|
364
|
+
const isLoadingApiKeys = false;
|
|
365
|
+
const updateState = /* @__PURE__ */ __name((updates) => {
|
|
366
|
+
setState((prev) => ({ ...prev, ...updates }));
|
|
367
|
+
}, "updateState");
|
|
368
|
+
useEffect(() => {
|
|
369
|
+
if (apiKeys.length > 0 && !state.selectedApiKey) {
|
|
370
|
+
updateState({ selectedApiKey: apiKeys[0]?.id || null });
|
|
371
|
+
}
|
|
372
|
+
}, [apiKeys, isLoadingApiKeys, state.selectedApiKey]);
|
|
373
|
+
useEffect(() => {
|
|
374
|
+
try {
|
|
375
|
+
setState((prev) => {
|
|
376
|
+
const headers = parseRequestHeaders(prev.requestHeaders);
|
|
377
|
+
let hasChanged = false;
|
|
378
|
+
if (prev.selectedApiKey) {
|
|
379
|
+
const apiKey = apiKeys.find((k) => k.id === prev.selectedApiKey);
|
|
380
|
+
if (apiKey) {
|
|
381
|
+
if (headers["X-API-Key"] !== apiKey.id) {
|
|
382
|
+
headers["X-API-Key"] = apiKey.id;
|
|
383
|
+
hasChanged = true;
|
|
384
|
+
}
|
|
385
|
+
} else {
|
|
386
|
+
return { ...prev, selectedApiKey: null };
|
|
387
|
+
}
|
|
388
|
+
} else {
|
|
389
|
+
if (headers["X-API-Key"]) {
|
|
390
|
+
delete headers["X-API-Key"];
|
|
391
|
+
hasChanged = true;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
if (hasChanged) {
|
|
395
|
+
const updatedHeaders = JSON.stringify(headers, null, 2);
|
|
396
|
+
return { ...prev, requestHeaders: updatedHeaders };
|
|
397
|
+
}
|
|
398
|
+
return prev;
|
|
399
|
+
});
|
|
400
|
+
} catch (error) {
|
|
401
|
+
consola.error("Error updating headers:", error);
|
|
402
|
+
}
|
|
403
|
+
}, [state.selectedApiKey, apiKeys]);
|
|
404
|
+
useEffect(() => {
|
|
405
|
+
if (state.selectedEndpoint && state.parameters) {
|
|
406
|
+
const updatedUrl = substituteUrlParameters(state.selectedEndpoint.path, state.parameters);
|
|
407
|
+
if (updatedUrl !== state.requestUrl) {
|
|
408
|
+
updateState({ requestUrl: updatedUrl });
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}, [state.parameters, state.selectedEndpoint, state.requestUrl]);
|
|
412
|
+
const setCurrentStep = /* @__PURE__ */ __name((step) => {
|
|
413
|
+
updateState({ currentStep: step });
|
|
414
|
+
}, "setCurrentStep");
|
|
415
|
+
const goToNextStep = /* @__PURE__ */ __name(() => {
|
|
416
|
+
const currentIndex = state.steps.indexOf(state.currentStep);
|
|
417
|
+
if (currentIndex < state.steps.length - 1) {
|
|
418
|
+
updateState({ currentStep: state.steps[currentIndex + 1] });
|
|
419
|
+
}
|
|
420
|
+
}, "goToNextStep");
|
|
421
|
+
const goToPreviousStep = /* @__PURE__ */ __name(() => {
|
|
422
|
+
const currentIndex = state.steps.indexOf(state.currentStep);
|
|
423
|
+
if (currentIndex > 0) {
|
|
424
|
+
updateState({ currentStep: state.steps[currentIndex - 1] });
|
|
425
|
+
}
|
|
426
|
+
}, "goToPreviousStep");
|
|
427
|
+
const setSelectedEndpoint = /* @__PURE__ */ __name((endpoint) => {
|
|
428
|
+
if (endpoint) {
|
|
429
|
+
updateState({
|
|
430
|
+
selectedEndpoint: endpoint,
|
|
431
|
+
requestMethod: "GET",
|
|
432
|
+
requestUrl: endpoint.path,
|
|
433
|
+
parameters: {},
|
|
434
|
+
// Reset parameters when endpoint changes
|
|
435
|
+
currentStep: "request"
|
|
436
|
+
});
|
|
437
|
+
} else {
|
|
438
|
+
updateState({ selectedEndpoint: endpoint });
|
|
439
|
+
}
|
|
440
|
+
}, "setSelectedEndpoint");
|
|
441
|
+
const setSelectedCategory = /* @__PURE__ */ __name((category) => {
|
|
442
|
+
updateState({ selectedCategory: category });
|
|
443
|
+
}, "setSelectedCategory");
|
|
444
|
+
const setSearchTerm = /* @__PURE__ */ __name((term) => {
|
|
445
|
+
updateState({ searchTerm: term });
|
|
446
|
+
}, "setSearchTerm");
|
|
447
|
+
const setSelectedVersion = /* @__PURE__ */ __name((version) => {
|
|
448
|
+
updateState({ selectedVersion: version });
|
|
449
|
+
}, "setSelectedVersion");
|
|
450
|
+
const setRequestUrl = /* @__PURE__ */ __name((url) => {
|
|
451
|
+
updateState({ requestUrl: url });
|
|
452
|
+
}, "setRequestUrl");
|
|
453
|
+
const setRequestMethod = /* @__PURE__ */ __name((method) => {
|
|
454
|
+
updateState({ requestMethod: method });
|
|
455
|
+
}, "setRequestMethod");
|
|
456
|
+
const setRequestHeaders = /* @__PURE__ */ __name((headers) => {
|
|
457
|
+
updateState({ requestHeaders: headers });
|
|
458
|
+
}, "setRequestHeaders");
|
|
459
|
+
const setRequestBody = /* @__PURE__ */ __name((body) => {
|
|
460
|
+
updateState({ requestBody: body });
|
|
461
|
+
}, "setRequestBody");
|
|
462
|
+
const setSelectedApiKey = /* @__PURE__ */ __name((apiKeyId) => {
|
|
463
|
+
updateState({ selectedApiKey: apiKeyId });
|
|
464
|
+
}, "setSelectedApiKey");
|
|
465
|
+
const setManualApiToken = /* @__PURE__ */ __name((manualApiToken) => {
|
|
466
|
+
updateState({ manualApiToken });
|
|
467
|
+
}, "setManualApiToken");
|
|
468
|
+
const setParameters = /* @__PURE__ */ __name((parameters) => {
|
|
469
|
+
updateState({ parameters });
|
|
470
|
+
}, "setParameters");
|
|
471
|
+
const setResponse = /* @__PURE__ */ __name((response) => {
|
|
472
|
+
updateState({ response });
|
|
473
|
+
}, "setResponse");
|
|
474
|
+
const setLoading = /* @__PURE__ */ __name((loading) => {
|
|
475
|
+
updateState({ loading });
|
|
476
|
+
}, "setLoading");
|
|
477
|
+
const setSidebarOpen = /* @__PURE__ */ __name((sidebarOpen) => {
|
|
478
|
+
updateState({ sidebarOpen });
|
|
479
|
+
}, "setSidebarOpen");
|
|
480
|
+
const clearAll = useCallback(() => {
|
|
481
|
+
setState(createInitialState());
|
|
482
|
+
}, []);
|
|
483
|
+
const sendRequest = useCallback(async () => {
|
|
484
|
+
if (!state.requestUrl) {
|
|
485
|
+
consola.error("No URL provided");
|
|
486
|
+
return;
|
|
487
|
+
}
|
|
488
|
+
setLoading(true);
|
|
489
|
+
setResponse(null);
|
|
490
|
+
try {
|
|
491
|
+
const headers = parseRequestHeaders(state.requestHeaders);
|
|
492
|
+
let bearerToken = null;
|
|
493
|
+
if (state.manualApiToken) {
|
|
494
|
+
bearerToken = state.manualApiToken;
|
|
495
|
+
} else {
|
|
496
|
+
if (typeof window !== "undefined") {
|
|
497
|
+
bearerToken = window.localStorage.getItem("auth_token");
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
if (bearerToken) {
|
|
501
|
+
headers["Authorization"] = `Bearer ${bearerToken}`;
|
|
502
|
+
}
|
|
503
|
+
const requestOptions = {
|
|
504
|
+
method: state.requestMethod,
|
|
505
|
+
headers
|
|
506
|
+
};
|
|
507
|
+
if (state.requestBody && state.requestMethod !== "GET") {
|
|
508
|
+
requestOptions.body = state.requestBody;
|
|
509
|
+
}
|
|
510
|
+
const response = await fetch(state.requestUrl, requestOptions);
|
|
511
|
+
const responseText = await response.text();
|
|
512
|
+
let responseData;
|
|
513
|
+
try {
|
|
514
|
+
responseData = JSON.parse(responseText);
|
|
515
|
+
} catch {
|
|
516
|
+
responseData = responseText;
|
|
517
|
+
}
|
|
518
|
+
setResponse({
|
|
519
|
+
status: response.status,
|
|
520
|
+
statusText: response.statusText,
|
|
521
|
+
headers: Object.fromEntries(response.headers.entries()),
|
|
522
|
+
data: responseData
|
|
523
|
+
});
|
|
524
|
+
consola.success(`Request successful: ${state.requestMethod} ${state.requestUrl}`);
|
|
525
|
+
updateState({ currentStep: "response" });
|
|
526
|
+
} catch (error) {
|
|
527
|
+
consola.error("Request failed:", error);
|
|
528
|
+
setResponse({
|
|
529
|
+
error: error instanceof Error ? error.message : "Request failed"
|
|
530
|
+
});
|
|
531
|
+
} finally {
|
|
532
|
+
setLoading(false);
|
|
533
|
+
}
|
|
534
|
+
}, [state, setLoading, setResponse]);
|
|
535
|
+
const contextValue = {
|
|
536
|
+
// State
|
|
537
|
+
state,
|
|
538
|
+
config,
|
|
539
|
+
apiKeys,
|
|
540
|
+
apiKeysLoading: isLoadingApiKeys,
|
|
541
|
+
// Step management
|
|
542
|
+
setCurrentStep,
|
|
543
|
+
goToNextStep,
|
|
544
|
+
goToPreviousStep,
|
|
545
|
+
// Endpoint management
|
|
546
|
+
setSelectedEndpoint,
|
|
547
|
+
setSelectedCategory,
|
|
548
|
+
setSearchTerm,
|
|
549
|
+
setSelectedVersion,
|
|
550
|
+
// Request management
|
|
551
|
+
setRequestUrl,
|
|
552
|
+
setRequestMethod,
|
|
553
|
+
setRequestHeaders,
|
|
554
|
+
setRequestBody,
|
|
555
|
+
setSelectedApiKey,
|
|
556
|
+
setManualApiToken,
|
|
557
|
+
setParameters,
|
|
558
|
+
// Response management
|
|
559
|
+
setResponse,
|
|
560
|
+
setLoading,
|
|
561
|
+
// UI management
|
|
562
|
+
setSidebarOpen,
|
|
563
|
+
// Actions
|
|
564
|
+
clearAll,
|
|
565
|
+
sendRequest
|
|
566
|
+
};
|
|
567
|
+
return /* @__PURE__ */ jsx(PlaygroundContext.Provider, { value: contextValue, children });
|
|
568
|
+
}, "PlaygroundProvider");
|
|
569
|
+
|
|
570
|
+
export { API_VERSIONS, JsonTree_default, PlaygroundProvider, PrettyCode_default, deduplicateEndpoints, findApiKeyById, getMethodColor, getStatusColor, getVersionById, getVersionStats, isValidJson, parseRequestHeaders, usePlaygroundContext };
|
|
571
|
+
//# sourceMappingURL=chunk-M6P2FU7L.mjs.map
|
|
572
|
+
//# sourceMappingURL=chunk-M6P2FU7L.mjs.map
|