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