@djangocfg/ui-tools 2.1.109 → 2.1.111

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 (159) hide show
  1. package/README.md +242 -49
  2. package/dist/JsonSchemaForm-65NLLK56.mjs +4 -0
  3. package/dist/JsonSchemaForm-65NLLK56.mjs.map +1 -0
  4. package/dist/JsonSchemaForm-PY6DH3HE.cjs +13 -0
  5. package/dist/JsonSchemaForm-PY6DH3HE.cjs.map +1 -0
  6. package/dist/JsonTree-6RYAOPSS.mjs +4 -0
  7. package/dist/JsonTree-6RYAOPSS.mjs.map +1 -0
  8. package/dist/JsonTree-7OH6CIHT.cjs +10 -0
  9. package/dist/JsonTree-7OH6CIHT.cjs.map +1 -0
  10. package/dist/MapContainer-GXQLP5WY.mjs +214 -0
  11. package/dist/MapContainer-GXQLP5WY.mjs.map +1 -0
  12. package/dist/MapContainer-RYG4HPH4.cjs +221 -0
  13. package/dist/MapContainer-RYG4HPH4.cjs.map +1 -0
  14. package/dist/{Mermaid.client-4OCKJ6QD.mjs → Mermaid.client-OKACITCW.mjs} +16 -7
  15. package/dist/Mermaid.client-OKACITCW.mjs.map +1 -0
  16. package/dist/{Mermaid.client-ZP6OE46Z.cjs → Mermaid.client-PNXEC6YL.cjs} +16 -7
  17. package/dist/Mermaid.client-PNXEC6YL.cjs.map +1 -0
  18. package/dist/{PlaygroundLayout-XXVBU4WZ.cjs → PlaygroundLayout-SYMEAG3J.cjs} +25 -24
  19. package/dist/PlaygroundLayout-SYMEAG3J.cjs.map +1 -0
  20. package/dist/{PlaygroundLayout-LMQTVXSP.mjs → PlaygroundLayout-UQRBU5RH.mjs} +4 -3
  21. package/dist/PlaygroundLayout-UQRBU5RH.mjs.map +1 -0
  22. package/dist/{PrettyCode.client-2CLSV2VD.cjs → PrettyCode.client-DANYYQYO.cjs} +11 -4
  23. package/dist/PrettyCode.client-DANYYQYO.cjs.map +1 -0
  24. package/dist/{PrettyCode.client-Y2BVON7R.mjs → PrettyCode.client-RS5ZTNBT.mjs} +11 -4
  25. package/dist/PrettyCode.client-RS5ZTNBT.mjs.map +1 -0
  26. package/dist/chunk-2DSR7V2L.mjs +561 -0
  27. package/dist/chunk-2DSR7V2L.mjs.map +1 -0
  28. package/dist/chunk-47T5ECYV.cjs +1357 -0
  29. package/dist/chunk-47T5ECYV.cjs.map +1 -0
  30. package/dist/chunk-5QT3QYFZ.cjs +189 -0
  31. package/dist/chunk-5QT3QYFZ.cjs.map +1 -0
  32. package/dist/chunk-7IIRYG4S.mjs +1057 -0
  33. package/dist/chunk-7IIRYG4S.mjs.map +1 -0
  34. package/dist/{chunk-FB5QBSI3.cjs → chunk-DI3HUXHK.cjs} +15 -195
  35. package/dist/chunk-DI3HUXHK.cjs.map +1 -0
  36. package/dist/chunk-EVGWYASL.cjs +1528 -0
  37. package/dist/chunk-EVGWYASL.cjs.map +1 -0
  38. package/dist/chunk-F2N7P5XU.cjs +30 -0
  39. package/dist/chunk-F2N7P5XU.cjs.map +1 -0
  40. package/dist/{chunk-L6UHASYQ.mjs → chunk-G6PRZP5I.mjs} +7 -186
  41. package/dist/chunk-G6PRZP5I.mjs.map +1 -0
  42. package/dist/chunk-JWB2EWQO.mjs +5 -0
  43. package/dist/chunk-JWB2EWQO.mjs.map +1 -0
  44. package/dist/chunk-LTJX2JXE.mjs +338 -0
  45. package/dist/chunk-LTJX2JXE.mjs.map +1 -0
  46. package/dist/chunk-OVNC4KW6.mjs +1494 -0
  47. package/dist/chunk-OVNC4KW6.mjs.map +1 -0
  48. package/dist/chunk-PNZSJN6T.cjs +1086 -0
  49. package/dist/chunk-PNZSJN6T.cjs.map +1 -0
  50. package/dist/chunk-TEFRA7GW.cjs +565 -0
  51. package/dist/chunk-TEFRA7GW.cjs.map +1 -0
  52. package/dist/chunk-UOMPPIED.mjs +1343 -0
  53. package/dist/chunk-UOMPPIED.mjs.map +1 -0
  54. package/dist/chunk-W6YHQI4F.mjs +187 -0
  55. package/dist/chunk-W6YHQI4F.mjs.map +1 -0
  56. package/dist/chunk-XTBRWVIV.cjs +346 -0
  57. package/dist/chunk-XTBRWVIV.cjs.map +1 -0
  58. package/dist/components-C7ZL7OMY.mjs +5 -0
  59. package/dist/components-C7ZL7OMY.mjs.map +1 -0
  60. package/dist/components-CJ2IB65O.cjs +27 -0
  61. package/dist/components-CJ2IB65O.cjs.map +1 -0
  62. package/dist/components-EASJYK45.mjs +6 -0
  63. package/dist/components-EASJYK45.mjs.map +1 -0
  64. package/dist/components-LDRFDV4A.cjs +22 -0
  65. package/dist/components-LDRFDV4A.cjs.map +1 -0
  66. package/dist/components-VZKUTDJK.mjs +5 -0
  67. package/dist/components-VZKUTDJK.mjs.map +1 -0
  68. package/dist/components-Y64GTIMQ.cjs +42 -0
  69. package/dist/components-Y64GTIMQ.cjs.map +1 -0
  70. package/dist/index.cjs +701 -4813
  71. package/dist/index.cjs.map +1 -1
  72. package/dist/index.d.cts +1274 -1026
  73. package/dist/index.d.ts +1274 -1026
  74. package/dist/index.mjs +358 -4730
  75. package/dist/index.mjs.map +1 -1
  76. package/package.json +27 -4
  77. package/src/components/index.ts +17 -0
  78. package/src/components/lazy-wrapper.tsx +281 -0
  79. package/src/index.ts +92 -7
  80. package/src/tools/AudioPlayer/components/HybridAudioPlayer.tsx +14 -5
  81. package/src/tools/AudioPlayer/lazy.tsx +85 -0
  82. package/src/tools/Gallery/components/Gallery.tsx +182 -0
  83. package/src/tools/Gallery/components/GalleryCarousel.tsx +251 -0
  84. package/src/tools/Gallery/components/GalleryCompact.tsx +173 -0
  85. package/src/tools/Gallery/components/GalleryGrid.tsx +493 -0
  86. package/src/tools/Gallery/components/GalleryImage.tsx +66 -0
  87. package/src/tools/Gallery/components/GalleryLightbox.tsx +331 -0
  88. package/src/tools/Gallery/components/GalleryMedia.tsx +66 -0
  89. package/src/tools/Gallery/components/GalleryThumbnails.tsx +173 -0
  90. package/src/tools/Gallery/components/GalleryThumbnailsVirtual.tsx +138 -0
  91. package/src/tools/Gallery/components/GalleryVideo.tsx +222 -0
  92. package/src/tools/Gallery/components/index.ts +13 -0
  93. package/src/tools/Gallery/hooks/index.ts +23 -0
  94. package/src/tools/Gallery/hooks/useGallery.ts +137 -0
  95. package/src/tools/Gallery/hooks/useImageDimensions.ts +223 -0
  96. package/src/tools/Gallery/hooks/usePinchZoom.ts +234 -0
  97. package/src/tools/Gallery/hooks/usePreloadImages.ts +71 -0
  98. package/src/tools/Gallery/hooks/useSwipe.ts +86 -0
  99. package/src/tools/Gallery/hooks/useVirtualList.ts +129 -0
  100. package/src/tools/Gallery/hooks/useZoom.ts +316 -0
  101. package/src/tools/Gallery/index.ts +66 -0
  102. package/src/tools/Gallery/types.ts +183 -0
  103. package/src/tools/Gallery/utils/imageAnalysis.ts +52 -0
  104. package/src/tools/Gallery/utils/index.ts +11 -0
  105. package/src/tools/ImageViewer/components/ImageToolbar.tsx +20 -8
  106. package/src/tools/ImageViewer/components/ImageViewer.tsx +12 -4
  107. package/src/tools/ImageViewer/lazy.tsx +37 -0
  108. package/src/tools/JsonForm/lazy.tsx +43 -0
  109. package/src/tools/JsonForm/widgets/ColorWidget.tsx +4 -1
  110. package/src/tools/JsonTree/lazy.tsx +45 -0
  111. package/src/tools/LottiePlayer/lazy.tsx +57 -0
  112. package/src/tools/Map/components/CustomOverlay.tsx +54 -0
  113. package/src/tools/Map/components/DrawControl.tsx +36 -0
  114. package/src/tools/Map/components/GeocoderControl.tsx +70 -0
  115. package/src/tools/Map/components/LayerSwitcher.tsx +225 -0
  116. package/src/tools/Map/components/MapCluster.tsx +273 -0
  117. package/src/tools/Map/components/MapContainer.tsx +191 -0
  118. package/src/tools/Map/components/MapControls.tsx +44 -0
  119. package/src/tools/Map/components/MapLegend.tsx +161 -0
  120. package/src/tools/Map/components/MapMarker.tsx +102 -0
  121. package/src/tools/Map/components/MapPopup.tsx +46 -0
  122. package/src/tools/Map/components/MapSource.tsx +30 -0
  123. package/src/tools/Map/components/index.ts +20 -0
  124. package/src/tools/Map/context/MapContext.tsx +89 -0
  125. package/src/tools/Map/context/index.ts +2 -0
  126. package/src/tools/Map/hooks/index.ts +9 -0
  127. package/src/tools/Map/hooks/useMap.ts +11 -0
  128. package/src/tools/Map/hooks/useMapControl.ts +99 -0
  129. package/src/tools/Map/hooks/useMapEvents.ts +147 -0
  130. package/src/tools/Map/hooks/useMapLayers.ts +83 -0
  131. package/src/tools/Map/hooks/useMapViewport.ts +62 -0
  132. package/src/tools/Map/hooks/useMarkers.ts +85 -0
  133. package/src/tools/Map/index.ts +116 -0
  134. package/src/tools/Map/layers/cluster.ts +94 -0
  135. package/src/tools/Map/layers/index.ts +15 -0
  136. package/src/tools/Map/layers/line.ts +93 -0
  137. package/src/tools/Map/layers/point.ts +61 -0
  138. package/src/tools/Map/layers/polygon.ts +73 -0
  139. package/src/tools/Map/lazy.tsx +56 -0
  140. package/src/tools/Map/styles/index.ts +15 -0
  141. package/src/tools/Map/types.ts +259 -0
  142. package/src/tools/Map/utils/geo.ts +88 -0
  143. package/src/tools/Map/utils/index.ts +16 -0
  144. package/src/tools/Map/utils/transform.ts +107 -0
  145. package/src/tools/Mermaid/Mermaid.client.tsx +12 -4
  146. package/src/tools/Mermaid/components/MermaidFullscreenModal.tsx +6 -2
  147. package/src/tools/Mermaid/lazy.tsx +46 -0
  148. package/src/tools/OpenapiViewer/lazy.tsx +72 -0
  149. package/src/tools/PrettyCode/PrettyCode.client.tsx +10 -3
  150. package/src/tools/PrettyCode/lazy.tsx +64 -0
  151. package/src/tools/VideoPlayer/lazy.tsx +63 -0
  152. package/dist/Mermaid.client-4OCKJ6QD.mjs.map +0 -1
  153. package/dist/Mermaid.client-ZP6OE46Z.cjs.map +0 -1
  154. package/dist/PlaygroundLayout-LMQTVXSP.mjs.map +0 -1
  155. package/dist/PlaygroundLayout-XXVBU4WZ.cjs.map +0 -1
  156. package/dist/PrettyCode.client-2CLSV2VD.cjs.map +0 -1
  157. package/dist/PrettyCode.client-Y2BVON7R.mjs.map +0 -1
  158. package/dist/chunk-FB5QBSI3.cjs.map +0 -1
  159. package/dist/chunk-L6UHASYQ.mjs.map +0 -1
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkFB5QBSI3_cjs = require('./chunk-FB5QBSI3.cjs');
3
+ var chunkDI3HUXHK_cjs = require('./chunk-DI3HUXHK.cjs');
4
+ var chunk5QT3QYFZ_cjs = require('./chunk-5QT3QYFZ.cjs');
4
5
  var chunkWGEGR3DF_cjs = require('./chunk-WGEGR3DF.cjs');
5
6
  var lucideReact = require('lucide-react');
6
7
  var components = require('@djangocfg/ui-core/components');
@@ -161,13 +162,13 @@ function useOpenApiSchema({
161
162
  }
162
163
  chunkWGEGR3DF_cjs.__name(useOpenApiSchema, "useOpenApiSchema");
163
164
  var VersionSelector = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
164
- const { state, config, setSelectedVersion } = chunkFB5QBSI3_cjs.usePlaygroundContext();
165
+ const { state, config, setSelectedVersion } = chunkDI3HUXHK_cjs.usePlaygroundContext();
165
166
  const { endpoints } = useOpenApiSchema({
166
167
  schemas: config.schemas,
167
168
  defaultSchemaId: config.defaultSchemaId
168
169
  });
169
- const currentVersion = chunkFB5QBSI3_cjs.getVersionById(state.selectedVersion);
170
- const versionStats = chunkFB5QBSI3_cjs.getVersionStats(endpoints);
170
+ const currentVersion = chunkDI3HUXHK_cjs.getVersionById(state.selectedVersion);
171
+ const versionStats = chunkDI3HUXHK_cjs.getVersionStats(endpoints);
171
172
  const handleVersionChange = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((versionId) => {
172
173
  setSelectedVersion(versionId);
173
174
  }, "handleVersionChange");
@@ -178,7 +179,7 @@ var VersionSelector = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
178
179
  ] }),
179
180
  /* @__PURE__ */ jsxRuntime.jsxs(components.Select, { value: state.selectedVersion, onValueChange: handleVersionChange, children: [
180
181
  /* @__PURE__ */ jsxRuntime.jsx(components.SelectTrigger, { className: "w-48", children: /* @__PURE__ */ jsxRuntime.jsx(components.SelectValue, {}) }),
181
- /* @__PURE__ */ jsxRuntime.jsx(components.SelectContent, { children: chunkFB5QBSI3_cjs.API_VERSIONS.map((version) => /* @__PURE__ */ jsxRuntime.jsx(components.SelectItem, { value: version.id, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between w-full", children: [
182
+ /* @__PURE__ */ jsxRuntime.jsx(components.SelectContent, { children: chunkDI3HUXHK_cjs.API_VERSIONS.map((version) => /* @__PURE__ */ jsxRuntime.jsx(components.SelectItem, { value: version.id, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between w-full", children: [
182
183
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center space-x-2", children: [
183
184
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: version.name }),
184
185
  version.isDefault && /* @__PURE__ */ jsxRuntime.jsx(components.Badge, { variant: "secondary", className: "text-xs", children: "Default" })
@@ -205,7 +206,7 @@ var categoryIcons = {
205
206
  "Other": /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Code, { className: "h-4 w-4" })
206
207
  };
207
208
  var EndpointsLibrary = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
208
- const { state, config, setSelectedEndpoint, setSelectedCategory, setSearchTerm } = chunkFB5QBSI3_cjs.usePlaygroundContext();
209
+ const { state, config, setSelectedEndpoint, setSelectedCategory, setSearchTerm } = chunkDI3HUXHK_cjs.usePlaygroundContext();
209
210
  const { endpoints, categories, loading, error } = useOpenApiSchema({
210
211
  schemas: config.schemas,
211
212
  defaultSchemaId: config.defaultSchemaId
@@ -220,7 +221,7 @@ var EndpointsLibrary = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
220
221
  }
221
222
  }, "getRelativePath");
222
223
  const filteredEndpoints = React.useMemo(() => {
223
- let filtered = chunkFB5QBSI3_cjs.deduplicateEndpoints(endpoints, state.selectedVersion);
224
+ let filtered = chunkDI3HUXHK_cjs.deduplicateEndpoints(endpoints, state.selectedVersion);
224
225
  if (state.selectedCategory && state.selectedCategory !== "All") {
225
226
  filtered = filtered.filter((endpoint) => endpoint.category === state.selectedCategory);
226
227
  }
@@ -236,7 +237,7 @@ var EndpointsLibrary = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
236
237
  setSelectedEndpoint(endpoint);
237
238
  }, "handleEndpointSelect");
238
239
  const getMethodBadges = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((methods) => {
239
- return methods.split(", ").map((method) => /* @__PURE__ */ jsxRuntime.jsx(components.Badge, { variant: chunkFB5QBSI3_cjs.getMethodColor(method) === "success" ? "default" : "secondary", className: "text-xs", children: method }, method));
240
+ return methods.split(", ").map((method) => /* @__PURE__ */ jsxRuntime.jsx(components.Badge, { variant: chunkDI3HUXHK_cjs.getMethodColor(method) === "success" ? "default" : "secondary", className: "text-xs", children: method }, method));
240
241
  }, "getMethodBadges");
241
242
  if (loading) {
242
243
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
@@ -372,7 +373,7 @@ var stepConfig = {
372
373
  }
373
374
  };
374
375
  var PlaygroundStepper = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
375
- const { state, setCurrentStep, goToNextStep, goToPreviousStep } = chunkFB5QBSI3_cjs.usePlaygroundContext();
376
+ const { state, setCurrentStep, goToNextStep, goToPreviousStep } = chunkDI3HUXHK_cjs.usePlaygroundContext();
376
377
  const { currentStep, steps } = state;
377
378
  const currentIndex = steps.indexOf(currentStep);
378
379
  const canGoNext = currentIndex < steps.length - 1;
@@ -435,7 +436,7 @@ var PlaygroundStepper = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
435
436
  ] });
436
437
  }, "PlaygroundStepper");
437
438
  var EndpointInfo = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
438
- const { state } = chunkFB5QBSI3_cjs.usePlaygroundContext();
439
+ const { state } = chunkDI3HUXHK_cjs.usePlaygroundContext();
439
440
  const { selectedEndpoint } = state;
440
441
  const endpointJson = React.useMemo(() => {
441
442
  if (!selectedEndpoint) return "";
@@ -453,7 +454,7 @@ var EndpointInfo = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
453
454
  return null;
454
455
  }
455
456
  const getMethodBadges = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((methods) => {
456
- return methods.split(", ").map((method) => /* @__PURE__ */ jsxRuntime.jsx(components.Badge, { variant: chunkFB5QBSI3_cjs.getMethodColor(method) === "success" ? "default" : "secondary", className: "text-xs", children: method }, method));
457
+ return methods.split(", ").map((method) => /* @__PURE__ */ jsxRuntime.jsx(components.Badge, { variant: chunkDI3HUXHK_cjs.getMethodColor(method) === "success" ? "default" : "secondary", className: "text-xs", children: method }, method));
457
458
  }, "getMethodBadges");
458
459
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
459
460
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
@@ -521,7 +522,7 @@ var EndpointInfo = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
521
522
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4" })
522
523
  ] }),
523
524
  /* @__PURE__ */ jsxRuntime.jsx(components.CollapsibleContent, { className: "mt-2 space-y-2", children: selectedEndpoint.responses.map((response, index) => {
524
- const statusColor = chunkFB5QBSI3_cjs.getStatusColor(parseInt(response.code));
525
+ const statusColor = chunkDI3HUXHK_cjs.getStatusColor(parseInt(response.code));
525
526
  const badgeVariant = statusColor === "success" ? "default" : statusColor === "error" ? "destructive" : "secondary";
526
527
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center space-x-2 text-xs", children: [
527
528
  /* @__PURE__ */ jsxRuntime.jsx(components.Badge, { variant: badgeVariant, className: "text-xs", children: response.code }),
@@ -534,7 +535,7 @@ var EndpointInfo = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
534
535
  ] });
535
536
  }, "EndpointInfo");
536
537
  var RequestParametersForm = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
537
- const { state, setParameters } = chunkFB5QBSI3_cjs.usePlaygroundContext();
538
+ const { state, setParameters } = chunkDI3HUXHK_cjs.usePlaygroundContext();
538
539
  const [formData, setFormData] = React.useState({});
539
540
  const [activeTab, setActiveTab] = React.useState("required");
540
541
  React.useEffect(() => {
@@ -715,12 +716,12 @@ var RequestBuilder = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
715
716
  setRequestBody,
716
717
  setManualApiToken,
717
718
  sendRequest
718
- } = chunkFB5QBSI3_cjs.usePlaygroundContext();
719
- const isJsonValid = state.requestBody ? chunkFB5QBSI3_cjs.isValidJson(state.requestBody) : true;
719
+ } = chunkDI3HUXHK_cjs.usePlaygroundContext();
720
+ const isJsonValid = state.requestBody ? chunkDI3HUXHK_cjs.isValidJson(state.requestBody) : true;
720
721
  const generateCurlCommand = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
721
722
  if (!state.requestUrl) return "";
722
- const apiKey = state.selectedApiKey ? chunkFB5QBSI3_cjs.findApiKeyById(apiKeys, state.selectedApiKey) : null;
723
- const headers = chunkFB5QBSI3_cjs.parseRequestHeaders(state.requestHeaders);
723
+ const apiKey = state.selectedApiKey ? chunkDI3HUXHK_cjs.findApiKeyById(apiKeys, state.selectedApiKey) : null;
724
+ const headers = chunkDI3HUXHK_cjs.parseRequestHeaders(state.requestHeaders);
724
725
  if (apiKey) {
725
726
  headers["X-API-Key"] = apiKey.id || "";
726
727
  }
@@ -807,12 +808,12 @@ var RequestBuilder = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
807
808
  }
808
809
  )
809
810
  ] }) }),
810
- /* @__PURE__ */ jsxRuntime.jsx(components.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkFB5QBSI3_cjs.PrettyCode_default, { data: curlCommand, language: "bash" }) })
811
+ /* @__PURE__ */ jsxRuntime.jsx(components.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkDI3HUXHK_cjs.PrettyCode_default, { data: curlCommand, language: "bash" }) })
811
812
  ] })
812
813
  ] });
813
814
  }, "RequestBuilder");
814
815
  var ResponseViewer = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
815
- const { state } = chunkFB5QBSI3_cjs.usePlaygroundContext();
816
+ const { state } = chunkDI3HUXHK_cjs.usePlaygroundContext();
816
817
  const { response } = state;
817
818
  const responseText = React.useMemo(() => {
818
819
  if (!response?.data) return "";
@@ -857,7 +858,7 @@ var ResponseViewer = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
857
858
  /* @__PURE__ */ jsxRuntime.jsx(
858
859
  components.Badge,
859
860
  {
860
- variant: chunkFB5QBSI3_cjs.getStatusColor(response.status || 0) === "success" ? "default" : chunkFB5QBSI3_cjs.getStatusColor(response.status || 0) === "error" ? "destructive" : "secondary",
861
+ variant: chunkDI3HUXHK_cjs.getStatusColor(response.status || 0) === "success" ? "default" : chunkDI3HUXHK_cjs.getStatusColor(response.status || 0) === "error" ? "destructive" : "secondary",
861
862
  className: "text-xs",
862
863
  children: response.status
863
864
  }
@@ -896,7 +897,7 @@ var ResponseViewer = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
896
897
  }
897
898
  if (response.data) {
898
899
  return /* @__PURE__ */ jsxRuntime.jsx(
899
- chunkFB5QBSI3_cjs.JsonTree_default,
900
+ chunk5QT3QYFZ_cjs.JsonTree_default,
900
901
  {
901
902
  title: "Response Body",
902
903
  data: response.data,
@@ -922,7 +923,7 @@ var ResponseViewer = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
922
923
  ] });
923
924
  }, "ResponseViewer");
924
925
  var PlaygroundLayout = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
925
- const { state, setSidebarOpen } = chunkFB5QBSI3_cjs.usePlaygroundContext();
926
+ const { state, setSidebarOpen } = chunkDI3HUXHK_cjs.usePlaygroundContext();
926
927
  const { isMobile } = useMobile();
927
928
  const renderStepContent = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
928
929
  switch (state.currentStep) {
@@ -999,5 +1000,5 @@ var PlaygroundLayout = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
999
1000
  }, "PlaygroundLayout");
1000
1001
 
1001
1002
  exports.PlaygroundLayout = PlaygroundLayout;
1002
- //# sourceMappingURL=PlaygroundLayout-XXVBU4WZ.cjs.map
1003
- //# sourceMappingURL=PlaygroundLayout-XXVBU4WZ.cjs.map
1003
+ //# sourceMappingURL=PlaygroundLayout-SYMEAG3J.cjs.map
1004
+ //# sourceMappingURL=PlaygroundLayout-SYMEAG3J.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tools/OpenapiViewer/hooks/useMobile.ts","../src/tools/OpenapiViewer/hooks/useOpenApiSchema.ts","../src/tools/OpenapiViewer/components/VersionSelector.tsx","../src/tools/OpenapiViewer/components/EndpointsLibrary.tsx","../src/tools/OpenapiViewer/components/PlaygroundStepper.tsx","../src/tools/OpenapiViewer/components/EndpointInfo.tsx","../src/tools/OpenapiViewer/components/RequestParametersForm.tsx","../src/tools/OpenapiViewer/components/RequestBuilder.tsx","../src/tools/OpenapiViewer/components/ResponseViewer.tsx","../src/tools/OpenapiViewer/components/PlaygroundLayout.tsx"],"names":["__name","useIsMobile","useState","useMemo","useEffect","consola","useCallback","usePlaygroundContext","getVersionById","getVersionStats","jsxs","jsx","GitBranch","Select","SelectTrigger","SelectValue","SelectContent","API_VERSIONS","SelectItem","Badge","Info","Shield","Users","Database","BarChart3","FileText","Settings","Code","React","deduplicateEndpoints","getMethodColor","Skeleton","Card","CardContent","Button","List","Grid3X3","Filter","Search","Input","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","CardHeader","CardTitle","Send","Check","ChevronLeft","ChevronRight","CopyButton","Collapsible","CollapsibleTrigger","ChevronDown","CollapsibleContent","AlertCircle","getStatusColor","Label","TooltipProvider","Tooltip","TooltipTrigger","HelpCircle","TooltipContent","Tabs","TabsList","TabsTrigger","TabsContent","Accordion","AccordionItem","AccordionTrigger","AccordionContent","Textarea","isValidJson","findApiKeyById","parseRequestHeaders","Key","Fragment","Loader2","PrettyCode_default","Download","XCircle","JsonTree_default","Sheet","SheetTrigger","Menu","SheetContent","X"],"mappings":"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","file":"PlaygroundLayout-SYMEAG3J.cjs","sourcesContent":["import { useIsMobile } from '@djangocfg/ui-core/hooks';\n\nexport const useMobile = () => {\n const isMobile = useIsMobile();\n\n return {\n isMobile,\n isDesktop: !isMobile,\n };\n}; ","'use client';\n\nimport consola from 'consola';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { ApiEndpoint, OpenApiSchema, SchemaSource, UseOpenApiSchemaReturn } from '../types';\n\n// Extract endpoints from OpenAPI schema (GET only)\nconst extractEndpoints = (schema: OpenApiSchema): ApiEndpoint[] => {\n const endpointMap = new Map<string, ApiEndpoint>();\n\n if (!schema.paths) return [];\n\n // Get base URL from servers\n const baseUrl = schema.servers && schema.servers.length > 0 ? schema.servers[0].url : '';\n\n for (const [path, methods] of Object.entries(schema.paths)) {\n // Only process GET methods\n const getOperation = (methods as any).get;\n if (!getOperation) continue;\n\n const op = getOperation as any;\n const description = op.description || op.summary || `GET ${path}`;\n const category = op.tags?.[0] || 'Other';\n\n const parameters: Array<{\n name: string;\n type: string;\n required: boolean;\n description?: string;\n }> = [];\n\n // Collect parameters\n if (op.parameters) {\n for (const param of op.parameters) {\n parameters.push({\n name: param.name,\n type: param.schema?.type || 'string',\n required: param.required || false,\n description: param.description,\n });\n }\n }\n\n // Collect responses\n const responses: Array<{\n code: string;\n description: string;\n }> = [];\n\n if (op.responses) {\n for (const [code, response] of Object.entries(op.responses)) {\n responses.push({\n code,\n description: (response as any).description || `Response ${code}`,\n });\n }\n }\n\n // Create endpoint (GET only) with full URL\n const endpoint: ApiEndpoint = {\n name: path.split('/').pop() || path,\n method: 'GET',\n path: baseUrl + path, // Combine baseUrl with path\n description,\n category,\n parameters: parameters.length > 0 ? parameters : undefined,\n requestBody: undefined, // GET requests don't have request body\n responses: responses.length > 0 ? responses : undefined,\n };\n\n endpointMap.set(path, endpoint);\n }\n\n return Array.from(endpointMap.values());\n};\n\n// Get unique categories from endpoints\nconst getCategories = (endpoints: ApiEndpoint[]): string[] => {\n const categories = new Set<string>();\n endpoints.forEach((endpoint) => categories.add(endpoint.category));\n return Array.from(categories).sort();\n};\n\n// Fetch schema from URL\nconst fetchSchema = async (url: string): Promise<OpenApiSchema> => {\n const response = await fetch(url, {\n headers: {\n 'Accept': 'application/json',\n },\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch schema: ${response.statusText}`);\n }\n return response.json();\n};\n\ninterface UseOpenApiSchemaProps {\n schemas: SchemaSource[];\n defaultSchemaId?: string;\n}\n\nexport default function useOpenApiSchema({\n schemas,\n defaultSchemaId,\n}: UseOpenApiSchemaProps): UseOpenApiSchemaReturn {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [currentSchemaId, setCurrentSchemaId] = useState<string>(\n defaultSchemaId || schemas[0]?.id\n );\n const [loadedSchemas, setLoadedSchemas] = useState<Map<string, OpenApiSchema>>(\n new Map()\n );\n\n const currentSchema = useMemo(\n () => schemas.find((s) => s.id === currentSchemaId) || null,\n [schemas, currentSchemaId]\n );\n\n const currentOpenApiSchema = useMemo(\n () => (currentSchemaId ? loadedSchemas.get(currentSchemaId) : null),\n [loadedSchemas, currentSchemaId]\n );\n\n const endpoints = useMemo(\n () => (currentOpenApiSchema ? extractEndpoints(currentOpenApiSchema) : []),\n [currentOpenApiSchema]\n );\n\n const categories = useMemo(() => getCategories(endpoints), [endpoints]);\n\n // Load schema when current schema changes\n useEffect(() => {\n if (!currentSchema) return;\n\n // Skip if already loaded\n if (loadedSchemas.has(currentSchema.id)) {\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n\n fetchSchema(currentSchema.url)\n .then((schema) => {\n setLoadedSchemas((prev) => new Map(prev).set(currentSchema.id, schema));\n consola.success(`Schema loaded: ${currentSchema.name}`);\n setLoading(false);\n })\n .catch((err) => {\n consola.error(`Error loading schema from ${currentSchema.url}:`, err);\n setError(err instanceof Error ? err.message : 'Failed to load schema');\n setLoading(false);\n });\n }, [currentSchema, loadedSchemas]);\n\n const setCurrentSchema = useCallback((schemaId: string) => {\n setCurrentSchemaId(schemaId);\n }, []);\n\n const refresh = useCallback(() => {\n if (!currentSchema) return;\n\n setLoading(true);\n setError(null);\n\n // Remove from cache to force reload\n setLoadedSchemas((prev) => {\n const next = new Map(prev);\n next.delete(currentSchema.id);\n return next;\n });\n\n fetchSchema(currentSchema.url)\n .then((schema) => {\n setLoadedSchemas((prev) => new Map(prev).set(currentSchema.id, schema));\n consola.success(`Schema refreshed: ${currentSchema.name}`);\n setLoading(false);\n })\n .catch((err) => {\n consola.error(`Error refreshing schema from ${currentSchema.url}:`, err);\n setError(err instanceof Error ? err.message : 'Failed to refresh schema');\n setLoading(false);\n });\n }, [currentSchema]);\n\n return {\n loading,\n error,\n endpoints,\n categories,\n schemas,\n currentSchema,\n setCurrentSchema,\n refresh,\n };\n}\n","'use client';\n\nimport { GitBranch, Info } from 'lucide-react';\nimport React from 'react';\n\nimport {\n Badge, Select, SelectContent, SelectItem, SelectTrigger, SelectValue\n} from '@djangocfg/ui-core/components';\n\nimport { usePlaygroundContext } from '../context/PlaygroundContext';\nimport useOpenApiSchema from '../hooks/useOpenApiSchema';\nimport { API_VERSIONS, getVersionById, getVersionStats } from '../utils/versionManager';\n\nexport const VersionSelector: React.FC = () => {\n const { state, config, setSelectedVersion } = usePlaygroundContext();\n const { endpoints } = useOpenApiSchema({\n schemas: config.schemas,\n defaultSchemaId: config.defaultSchemaId,\n });\n\n const currentVersion = getVersionById(state.selectedVersion);\n const versionStats = getVersionStats(endpoints);\n\n const handleVersionChange = (versionId: string) => {\n setSelectedVersion(versionId);\n };\n\n return (\n <div className=\"flex items-center space-x-3\">\n <div className=\"flex items-center space-x-2\">\n <GitBranch className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">API Version:</span>\n </div>\n\n <Select value={state.selectedVersion} onValueChange={handleVersionChange}>\n <SelectTrigger className=\"w-48\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {API_VERSIONS.map((version) => (\n <SelectItem key={version.id} value={version.id}>\n <div className=\"flex items-center justify-between w-full\">\n <div className=\"flex items-center space-x-2\">\n <span className=\"font-medium\">{version.name}</span>\n {version.isDefault && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n Default\n </Badge>\n )}\n </div>\n <span className=\"text-xs text-muted-foreground ml-2\">\n {versionStats[version.id] || 0} endpoints\n </span>\n </div>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n {currentVersion && (\n <div className=\"flex items-center space-x-1 text-xs text-muted-foreground\">\n <Info className=\"h-3 w-3\" />\n <span>{currentVersion.description}</span>\n </div>\n )}\n </div>\n );\n};\n","'use client';\n\nimport {\n BarChart3, Code, Database, FileText, Filter, Grid3X3, List, Search, Settings, Shield, Users\n} from 'lucide-react';\nimport React, { useMemo } from 'react';\n\nimport {\n Badge, Button, Card, CardContent, CardHeader, CardTitle, Input, Select, SelectContent,\n SelectItem, SelectTrigger, SelectValue, Skeleton, Table, TableBody, TableCell, TableHead,\n TableHeader, TableRow\n} from '@djangocfg/ui-core/components';\n\nimport { usePlaygroundContext } from '../context/PlaygroundContext';\nimport useOpenApiSchema from '../hooks/useOpenApiSchema';\nimport { getMethodColor } from '../utils';\nimport { deduplicateEndpoints } from '../utils/versionManager';\nimport { VersionSelector } from './VersionSelector';\n\nimport type { ApiEndpoint } from '../types';\nconst categoryIcons: Record<string, React.ReactNode> = {\n 'Authentication': <Shield className=\"h-4 w-4\" />,\n 'Users': <Users className=\"h-4 w-4\" />,\n 'Data': <Database className=\"h-4 w-4\" />,\n 'Analytics': <BarChart3 className=\"h-4 w-4\" />,\n 'Files': <FileText className=\"h-4 w-4\" />,\n 'Settings': <Settings className=\"h-4 w-4\" />,\n 'Other': <Code className=\"h-4 w-4\" />,\n};\n\nexport const EndpointsLibrary: React.FC = () => {\n const { state, config, setSelectedEndpoint, setSelectedCategory, setSearchTerm } = usePlaygroundContext();\n const { endpoints, categories, loading, error } = useOpenApiSchema({\n schemas: config.schemas,\n defaultSchemaId: config.defaultSchemaId,\n });\n const [viewMode, setViewMode] = React.useState<'table' | 'grid'>('table');\n\n // Helper to extract relative path from full URL\n const getRelativePath = (fullPath: string): string => {\n try {\n const url = new URL(fullPath);\n return url.pathname;\n } catch {\n // If not a valid URL, return as is (already relative)\n return fullPath;\n }\n };\n\n const filteredEndpoints = useMemo(() => {\n // First, deduplicate endpoints based on selected version\n let filtered = deduplicateEndpoints(endpoints, state.selectedVersion);\n\n // Filter by category\n if (state.selectedCategory && state.selectedCategory !== 'All') {\n filtered = filtered.filter((endpoint) => endpoint.category === state.selectedCategory);\n }\n\n // Filter by search term\n if (state.searchTerm) {\n const searchLower = state.searchTerm.toLowerCase();\n filtered = filtered.filter(\n (endpoint) =>\n endpoint.name.toLowerCase().includes(searchLower) ||\n endpoint.description.toLowerCase().includes(searchLower) ||\n endpoint.path.toLowerCase().includes(searchLower)\n );\n }\n\n return filtered;\n }, [endpoints, state.selectedCategory, state.searchTerm, state.selectedVersion]);\n\n const handleEndpointSelect = (endpoint: ApiEndpoint) => {\n setSelectedEndpoint(endpoint);\n };\n\n const getMethodBadges = (methods: string) => {\n return methods.split(', ').map((method) => (\n <Badge key={method} variant={getMethodColor(method) === 'success' ? 'default' : 'secondary'} className=\"text-xs\">\n {method}\n </Badge>\n ));\n };\n\n if (loading) {\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-foreground\">API Endpoints</h2>\n <div className=\"flex items-center space-x-2\">\n <Skeleton className=\"h-8 w-32\" />\n <Skeleton className=\"h-8 w-48\" />\n </div>\n </div>\n <div className=\"space-y-2\">\n {Array.from({ length: 5 }).map((_, i) => (\n <Skeleton key={i} className=\"h-20 w-full\" />\n ))}\n </div>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-foreground\">API Endpoints</h2>\n </div>\n <Card className=\"bg-destructive/10 border-destructive/20\">\n <CardContent className=\"p-4\">\n <p className=\"text-sm text-destructive\">Error loading endpoints: {error}</p>\n </CardContent>\n </Card>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4\">\n {/* Header */}\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex flex-col sm:flex-row sm:items-center justify-between gap-4\">\n <h2 className=\"text-lg font-semibold text-foreground\">API Endpoints</h2>\n <VersionSelector />\n </div>\n\n <div className=\"flex flex-col sm:flex-row sm:items-center justify-between gap-4\">\n <div className=\"flex items-center space-x-2\">\n {/* View Mode Toggle */}\n <div className=\"flex items-center border rounded-md\">\n <Button\n variant={viewMode === 'table' ? 'default' : 'ghost'}\n size=\"sm\"\n onClick={() => setViewMode('table')}\n className=\"rounded-r-none\"\n >\n <List className=\"h-4 w-4\" />\n </Button>\n <Button\n variant={viewMode === 'grid' ? 'default' : 'ghost'}\n size=\"sm\"\n onClick={() => setViewMode('grid')}\n className=\"rounded-l-none\"\n >\n <Grid3X3 className=\"h-4 w-4\" />\n </Button>\n </div>\n\n {/* Category Filter */}\n <Select value={state.selectedCategory} onValueChange={setSelectedCategory}>\n <SelectTrigger className=\"w-32\">\n <Filter className=\"h-4 w-4 mr-2\" />\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"All\">All</SelectItem>\n {categories.map((category) => (\n <SelectItem key={category} value={category}>\n {category}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n {/* Search */}\n <div className=\"relative\">\n <Search className=\"absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n placeholder=\"Search endpoints...\"\n value={state.searchTerm}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setSearchTerm(e.target.value)}\n className=\"w-48 pl-8\"\n />\n </div>\n </div>\n </div>\n </div>\n\n {/* Content */}\n {viewMode === 'table' ? (\n <Card>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className=\"text-foreground\">Methods</TableHead>\n <TableHead className=\"text-foreground\">Path</TableHead>\n <TableHead className=\"text-foreground\">Description</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {filteredEndpoints.length === 0 ? (\n <TableRow>\n <TableCell colSpan={3} className=\"text-center py-8 text-muted-foreground\">\n No endpoints found\n </TableCell>\n </TableRow>\n ) : (\n filteredEndpoints.map((endpoint) => (\n <TableRow\n key={`${endpoint.method}-${endpoint.path}`}\n className={`cursor-pointer transition-colors hover:bg-muted/50 ${state.selectedEndpoint?.path === endpoint.path ? 'bg-primary/10' : ''\n }`}\n onClick={() => handleEndpointSelect(endpoint)}\n >\n <TableCell>\n <div className=\"flex space-x-1\">\n {getMethodBadges(endpoint.method)}\n </div>\n </TableCell>\n <TableCell className=\"font-mono text-sm text-muted-foreground\">\n {getRelativePath(endpoint.path)}\n </TableCell>\n <TableCell className=\"text-sm text-muted-foreground max-w-xs truncate\">\n {endpoint.description}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </Card>\n ) : (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {filteredEndpoints.length === 0 ? (\n <div className=\"col-span-full text-center py-8 text-muted-foreground\">\n No endpoints found\n </div>\n ) : (\n filteredEndpoints.map((endpoint) => (\n <Card\n key={`${endpoint.method}-${endpoint.path}`}\n className={`cursor-pointer transition-all hover:shadow-md ${state.selectedEndpoint?.path === endpoint.path ? 'ring-2 ring-primary' : ''\n }`}\n onClick={() => handleEndpointSelect(endpoint)}\n >\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"flex items-center justify-between text-sm\">\n <div className=\"flex items-center space-x-2\">\n {categoryIcons[endpoint.category] || <Code className=\"h-4 w-4\" />}\n <span className=\"truncate\">{endpoint.name}</span>\n </div>\n <div className=\"flex space-x-1\">\n {getMethodBadges(endpoint.method)}\n </div>\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <p className=\"text-xs font-mono text-muted-foreground break-all\">\n {getRelativePath(endpoint.path)}\n </p>\n <p className=\"text-xs text-muted-foreground line-clamp-2\">\n {endpoint.description}\n </p>\n </CardContent>\n </Card>\n ))\n )}\n </div>\n )}\n </div>\n );\n}; ","'use client';\n\nimport { Check, ChevronLeft, ChevronRight, Code, FileText, Send } from 'lucide-react';\nimport React from 'react';\n\nimport { Badge, Button } from '@djangocfg/ui-core/components';\n\nimport { usePlaygroundContext } from '../context/PlaygroundContext';\nimport { PlaygroundStep } from '../types';\n\nconst stepConfig = {\n endpoints: {\n title: 'Endpoints',\n icon: Code,\n description: 'Select API endpoint'\n },\n request: {\n title: 'Request',\n icon: Send,\n description: 'Configure request'\n },\n response: {\n title: 'Response',\n icon: FileText,\n description: 'View response'\n }\n};\n\nexport const PlaygroundStepper: React.FC = () => {\n const { state, setCurrentStep, goToNextStep, goToPreviousStep } = usePlaygroundContext();\n const { currentStep, steps } = state;\n\n const currentIndex = steps.indexOf(currentStep);\n const canGoNext = currentIndex < steps.length - 1;\n const canGoPrevious = currentIndex > 0;\n\n return (\n <div className=\"flex items-center justify-between p-4 border-b\">\n {/* Steps */}\n <div className=\"flex items-center space-x-4\">\n {steps.map((step, index) => {\n const config = stepConfig[step];\n const Icon = config.icon;\n const isActive = step === currentStep;\n const isCompleted = index < currentIndex;\n const isClickable = index <= currentIndex + 1;\n\n return (\n <div key={step} className=\"flex items-center space-x-2\">\n <Button\n variant={isActive ? 'default' : 'ghost'}\n size=\"sm\"\n onClick={() => isClickable && setCurrentStep(step)}\n className={`flex items-center space-x-2 ${isClickable ? 'cursor-pointer' : 'cursor-not-allowed opacity-50'\n }`}\n disabled={!isClickable}\n >\n {isCompleted ? (\n <Check className=\"h-4 w-4\" />\n ) : (\n <Icon className=\"h-4 w-4\" />\n )}\n <span className=\"hidden sm:inline\">{config.title}</span>\n </Button>\n\n {index < steps.length - 1 && (\n <div className=\"w-8 h-px bg-border\" />\n )}\n </div>\n );\n })}\n </div>\n\n {/* Navigation */}\n <div className=\"flex items-center space-x-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToPreviousStep}\n disabled={!canGoPrevious}\n className=\"flex items-center space-x-1\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">Previous</span>\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToNextStep}\n disabled={!canGoNext}\n className=\"flex items-center space-x-1\"\n >\n <span className=\"hidden sm:inline\">Next</span>\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n );\n}; ","'use client';\n\nimport { AlertCircle, ChevronDown, Code, Database, FileText } from 'lucide-react';\nimport React, { useMemo } from 'react';\n\nimport {\n Badge, Card, CardContent, CardHeader, CardTitle, Collapsible, CollapsibleContent,\n CollapsibleTrigger, CopyButton\n} from '@djangocfg/ui-core/components';\n\nimport { usePlaygroundContext } from '../context/PlaygroundContext';\nimport { getMethodColor, getStatusColor } from '../utils';\n\nexport const EndpointInfo: React.FC = () => {\n const { state } = usePlaygroundContext();\n const { selectedEndpoint } = state;\n\n // Memoize endpoint JSON for copy\n const endpointJson = useMemo(() => {\n if (!selectedEndpoint) return '';\n return JSON.stringify({\n name: selectedEndpoint.name,\n method: selectedEndpoint.method,\n path: selectedEndpoint.path,\n description: selectedEndpoint.description,\n parameters: selectedEndpoint.parameters,\n requestBody: selectedEndpoint.requestBody,\n responses: selectedEndpoint.responses\n }, null, 2);\n }, [selectedEndpoint]);\n\n if (!selectedEndpoint) {\n return null;\n }\n\n const getMethodBadges = (methods: string) => {\n return methods.split(', ').map((method) => (\n <Badge key={method} variant={getMethodColor(method) === 'success' ? 'default' : 'secondary'} className=\"text-xs\">\n {method}\n </Badge>\n ));\n };\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-foreground\">Selected Endpoint</h2>\n <CopyButton value={endpointJson} variant=\"outline\" size=\"sm\">\n Copy\n </CopyButton>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center justify-between text-sm text-foreground\">\n <div className=\"flex items-center space-x-2\">\n <Code className=\"h-4 w-4\" />\n <span className=\"font-medium\">{selectedEndpoint.name}</span>\n </div>\n <div className=\"flex space-x-1\">{getMethodBadges(selectedEndpoint.method)}</div>\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <p className=\"text-xs font-mono text-muted-foreground break-all\">\n {selectedEndpoint.path}\n </p>\n <p className=\"text-xs text-muted-foreground mt-1\">\n {selectedEndpoint.description}\n </p>\n </div>\n\n {/* Parameters */}\n {selectedEndpoint.parameters && selectedEndpoint.parameters.length > 0 && (\n <Collapsible>\n <CollapsibleTrigger className=\"flex items-center space-x-2 text-sm font-medium text-foreground\">\n <Database className=\"h-4 w-4\" />\n <span>Parameters ({selectedEndpoint.parameters.length})</span>\n <ChevronDown className=\"h-4 w-4\" />\n </CollapsibleTrigger>\n <CollapsibleContent className=\"mt-2 space-y-2\">\n {selectedEndpoint.parameters.map((param, index) => (\n <div key={index} className=\"flex items-center space-x-2 text-xs\">\n <Badge variant={param.required ? 'destructive' : 'secondary'} className=\"text-xs\">\n {param.required ? 'Required' : 'Optional'}\n </Badge>\n <span className=\"font-mono text-muted-foreground\">\n {param.name}: {param.type}\n </span>\n {param.description && (\n <span className=\"text-muted-foreground\">- {param.description}</span>\n )}\n </div>\n ))}\n </CollapsibleContent>\n </Collapsible>\n )}\n\n {/* Request Body */}\n {selectedEndpoint.requestBody && (\n <Collapsible>\n <CollapsibleTrigger className=\"flex items-center space-x-2 text-sm font-medium text-foreground\">\n <FileText className=\"h-4 w-4\" />\n <span>Request Body</span>\n <ChevronDown className=\"h-4 w-4\" />\n </CollapsibleTrigger>\n <CollapsibleContent className=\"mt-2\">\n <div className=\"text-xs text-muted-foreground\">\n <p>Type: {selectedEndpoint.requestBody.type}</p>\n {selectedEndpoint.requestBody.description && (\n <p className=\"mt-1\">{selectedEndpoint.requestBody.description}</p>\n )}\n </div>\n </CollapsibleContent>\n </Collapsible>\n )}\n\n {/* Responses */}\n {selectedEndpoint.responses && selectedEndpoint.responses.length > 0 && (\n <Collapsible>\n <CollapsibleTrigger className=\"flex items-center space-x-2 text-sm font-medium text-foreground\">\n <AlertCircle className=\"h-4 w-4\" />\n <span>Responses ({selectedEndpoint.responses.length})</span>\n <ChevronDown className=\"h-4 w-4\" />\n </CollapsibleTrigger>\n <CollapsibleContent className=\"mt-2 space-y-2\">\n {selectedEndpoint.responses.map((response, index) => {\n const statusColor = getStatusColor(parseInt(response.code));\n const badgeVariant = statusColor === 'success' ? 'default' :\n statusColor === 'error' ? 'destructive' : 'secondary';\n return (\n <div key={index} className=\"flex items-center space-x-2 text-xs\">\n <Badge variant={badgeVariant} className=\"text-xs\">\n {response.code}\n </Badge>\n <span className=\"text-muted-foreground\">\n {response.description}\n </span>\n </div>\n );\n })}\n </CollapsibleContent>\n </Collapsible>\n )}\n </CardContent>\n </Card>\n </div>\n );\n}; ","'use client';\n\nimport { HelpCircle } from 'lucide-react';\nimport React, { useEffect, useState } from 'react';\n\nimport {\n Accordion, AccordionContent, AccordionItem, AccordionTrigger, Badge, Button, Card, CardContent,\n CardHeader, CardTitle, Input, Label, Tabs, TabsContent, TabsList, TabsTrigger, Textarea,\n Tooltip, TooltipContent, TooltipProvider, TooltipTrigger\n} from '@djangocfg/ui-core/components';\n\nimport { usePlaygroundContext } from '../context/PlaygroundContext';\n\ninterface Parameter {\n name: string;\n type: string;\n required: boolean;\n description?: string;\n}\n\nexport const RequestParametersForm: React.FC = () => {\n const { state, setParameters } = usePlaygroundContext();\n const [formData, setFormData] = useState<Record<string, string>>({});\n const [activeTab, setActiveTab] = useState('required');\n\n // Reset form data when endpoint changes\n useEffect(() => {\n if (state.selectedEndpoint?.parameters) {\n const initialData: Record<string, string> = {};\n state.selectedEndpoint.parameters.forEach(param => {\n initialData[param.name] = '';\n });\n setFormData(initialData);\n }\n }, [state.selectedEndpoint?.path, state.selectedEndpoint?.parameters]);\n\n const handleInputChange = (name: string, value: string) => {\n const newFormData = {\n ...formData,\n [name]: value\n };\n setFormData(newFormData);\n\n // Update parameters in context for URL substitution\n setParameters(newFormData);\n };\n\n const handleClearForm = () => {\n setFormData({});\n setParameters({});\n };\n\n const handleGenerateJson = () => {\n const hasData = Object.values(formData).some(value => value !== '' && value !== null && value !== undefined);\n if (hasData) {\n const jsonString = JSON.stringify(formData, null, 2);\n navigator.clipboard.writeText(jsonString);\n }\n };\n\n if (!state.selectedEndpoint) return null;\n\n const requiredParams = state.selectedEndpoint.parameters?.filter(param => param.required) || [];\n const optionalParams = state.selectedEndpoint.parameters?.filter(param => !param.required) || [];\n const hasParameters = (state.selectedEndpoint.parameters?.length || 0) > 0;\n\n if (!hasParameters) {\n return null;\n }\n\n const hasFormData = Object.values(formData).some(value => value !== '' && value !== null && value !== undefined);\n\n // Component for rendering parameter fields\n const ParameterField = ({ param }: { param: Parameter }) => (\n <div className=\"space-y-2\">\n <div className=\"flex items-center space-x-1\">\n <Label htmlFor={param.name} className=\"text-xs font-medium text-foreground\">\n {param.name}\n {param.required && <span className=\"text-destructive ml-1\">*</span>}\n </Label>\n {param.description && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <HelpCircle className=\"h-3 w-3 text-muted-foreground hover:text-foreground cursor-help\" />\n </TooltipTrigger>\n <TooltipContent side=\"top\" className=\"max-w-xs\">\n <p className=\"text-xs\">{param.description}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n <Input\n id={param.name}\n value={formData[param.name] || ''}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => handleInputChange(param.name, e.target.value)}\n placeholder={`Enter ${param.name}${param.required ? '' : ' (optional)'}`}\n className=\"text-sm\"\n />\n </div>\n );\n\n // Component for rendering parameters in grid or list layout\n const ParametersGrid = ({ params, title, badgeVariant }: {\n params: Parameter[],\n title: string,\n badgeVariant: 'destructive' | 'secondary'\n }) => {\n if (params.length === 0) return null;\n\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-2\">\n <Badge variant={badgeVariant} className=\"text-xs\">{title}</Badge>\n <span className=\"text-xs text-muted-foreground\">\n {params.length} parameter{params.length !== 1 ? 's' : ''}\n </span>\n </div>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {params.map((param) => (\n <ParameterField key={param.name} param={param} />\n ))}\n </div>\n </div>\n );\n };\n\n return (\n <TooltipProvider>\n <Card>\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-sm text-foreground\">Request Parameters</CardTitle>\n <div className=\"flex items-center space-x-2\">\n {hasFormData && (\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handleGenerateJson}\n className=\"text-xs\"\n >\n Copy JSON\n </Button>\n )}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleClearForm}\n className=\"text-xs\"\n >\n Clear\n </Button>\n </div>\n </div>\n </CardHeader>\n\n <CardContent className=\"space-y-4\">\n {/* Use Tabs for better organization when there are many parameters */}\n {(requiredParams.length + optionalParams.length) > 10 ? (\n <Tabs value={activeTab} onValueChange={setActiveTab}>\n <TabsList className=\"grid w-full grid-cols-2\">\n <TabsTrigger value=\"required\" className=\"text-xs\">\n Required ({requiredParams.length})\n </TabsTrigger>\n <TabsTrigger value=\"optional\" className=\"text-xs\">\n Optional ({optionalParams.length})\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"required\" className=\"space-y-4\">\n <ParametersGrid\n params={requiredParams}\n title=\"Required\"\n badgeVariant=\"destructive\"\n />\n </TabsContent>\n\n <TabsContent value=\"optional\" className=\"space-y-4\">\n <ParametersGrid\n params={optionalParams}\n title=\"Optional\"\n badgeVariant=\"secondary\"\n />\n </TabsContent>\n </Tabs>\n ) : (\n /* Use Accordion for smaller parameter sets */\n <Accordion type=\"multiple\" defaultValue={requiredParams.length > 0 ? [\"required\"] : [\"optional\"]}>\n {requiredParams.length > 0 && (\n <AccordionItem value=\"required\">\n <AccordionTrigger className=\"text-sm text-foreground\">\n <div className=\"flex items-center space-x-2\">\n <Badge variant=\"destructive\" className=\"text-xs\">Required</Badge>\n <span className=\"text-xs text-muted-foreground\">\n {requiredParams.length} parameter{requiredParams.length !== 1 ? 's' : ''}\n </span>\n </div>\n </AccordionTrigger>\n <AccordionContent>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 pt-2\">\n {requiredParams.map((param) => (\n <ParameterField key={param.name} param={param} />\n ))}\n </div>\n </AccordionContent>\n </AccordionItem>\n )}\n\n {optionalParams.length > 0 && (\n <AccordionItem value=\"optional\">\n <AccordionTrigger className=\"text-sm text-foreground\">\n <div className=\"flex items-center space-x-2\">\n <Badge variant=\"secondary\" className=\"text-xs\">Optional</Badge>\n <span className=\"text-xs text-muted-foreground\">\n {optionalParams.length} parameter{optionalParams.length !== 1 ? 's' : ''}\n </span>\n </div>\n </AccordionTrigger>\n <AccordionContent>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 pt-2\">\n {optionalParams.map((param) => (\n <ParameterField key={param.name} param={param} />\n ))}\n </div>\n </AccordionContent>\n </AccordionItem>\n )}\n </Accordion>\n )}\n\n {/* JSON Preview */}\n {hasFormData && (\n <div className=\"space-y-2 mt-6 pt-4 border-t\">\n <Label className=\"text-xs text-foreground\">Generated JSON</Label>\n <Textarea\n value={JSON.stringify(formData, null, 2)}\n readOnly\n className=\"text-xs font-mono\"\n rows={4}\n />\n <p className=\"text-xs text-muted-foreground\">\n Click &quot;Copy JSON&quot; to copy this to clipboard, then paste it into the Request Body field above.\n </p>\n </div>\n )}\n </CardContent>\n </Card>\n </TooltipProvider>\n );\n}; ","'use client';\n\nimport { Key, Loader2, Send } from 'lucide-react';\nimport React, { useCallback } from 'react';\n\nimport {\n Button, Card, CardContent, CardHeader, CardTitle, CopyButton, Input, Textarea\n} from '@djangocfg/ui-core/components';\n\nimport PrettyCode from '../../PrettyCode';\nimport { usePlaygroundContext } from '../context/PlaygroundContext';\nimport { findApiKeyById, isValidJson, parseRequestHeaders } from '../utils';\nimport { EndpointInfo } from './EndpointInfo';\nimport { RequestParametersForm } from './RequestParametersForm';\n\nexport const RequestBuilder: React.FC = () => {\n const {\n state,\n apiKeys,\n setRequestBody,\n setManualApiToken,\n sendRequest\n } = usePlaygroundContext();\n\n const isJsonValid = state.requestBody ? isValidJson(state.requestBody) : true;\n\n // Generate cURL command\n const generateCurlCommand = () => {\n if (!state.requestUrl) return '';\n\n const apiKey = state.selectedApiKey ? findApiKeyById(apiKeys, state.selectedApiKey) : null;\n const headers = parseRequestHeaders(state.requestHeaders);\n\n if (apiKey) {\n headers['X-API-Key'] = apiKey.id || ''; // Note: using id as full key not available\n }\n\n let curl = `curl -X ${state.requestMethod} \"${state.requestUrl}\"`;\n\n // Add headers\n Object.entries(headers).forEach(([key, value]) => {\n curl += ` \\\\\\n -H \"${key}: ${value}\"`;\n });\n\n // Add body for non-GET requests\n if (state.requestBody && state.requestMethod !== 'GET' && isJsonValid) {\n curl += ` \\\\\\n -d '${state.requestBody}'`;\n }\n\n return curl;\n };\n\n const curlCommand = generateCurlCommand();\n\n const handleSendRequest = useCallback(async () => {\n await sendRequest();\n }, [sendRequest]);\n\n return (\n <div className=\"space-y-4\">\n {/* Endpoint Info */}\n {state.selectedEndpoint && <EndpointInfo />}\n\n {/* Request Parameters Form */}\n {state.selectedEndpoint && (\n <RequestParametersForm />\n )}\n\n {/* Request Body */}\n {state.requestMethod !== 'GET' && (\n <Card className=\"\">\n <CardHeader>\n <CardTitle className=\"text-sm text-foreground\">Request Body</CardTitle>\n </CardHeader>\n <CardContent>\n <Textarea\n placeholder='{\\n \"key\": \"value\"\\n}'\n value={state.requestBody}\n onChange={(e) => setRequestBody(e.target.value)}\n className={`font-mono text-sm ${\n !isJsonValid ? 'border-destructive' : ''\n }`}\n rows={6}\n />\n {!isJsonValid && (\n <p className=\"mt-1 text-xs text-destructive\">Invalid JSON format</p>\n )}\n </CardContent>\n </Card>\n )}\n\n {/* Bearer Token Authentication */}\n <Card className=\"\">\n <CardHeader>\n <CardTitle className=\"flex items-center space-x-2 text-sm text-foreground\">\n <Key className=\"h-4 w-4\" />\n <span>Bearer Token</span>\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-col sm:flex-row sm:items-center gap-2\">\n <div className=\"flex-1\">\n <Input\n type=\"password\"\n placeholder=\"Enter Bearer token (optional, uses JWT if empty)\"\n value={state.manualApiToken}\n onChange={(e) => setManualApiToken(e.target.value)}\n className=\"font-mono text-sm\"\n />\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Leave empty to use JWT token from localStorage\n </p>\n </div>\n <Button\n onClick={handleSendRequest}\n disabled={state.loading || !state.requestUrl || !isJsonValid}\n className=\"bg-primary hover:bg-primary/90 text-primary-foreground flex items-center gap-2\"\n >\n {state.loading ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n <span className=\"hidden sm:inline\">Sending...</span>\n </>\n ) : (\n <>\n <Send className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">Send Request</span>\n </>\n )}\n </Button>\n </div>\n </CardContent>\n </Card>\n\n {/* cURL Command */}\n {curlCommand && (\n <Card>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-sm text-foreground\">cURL Command</CardTitle>\n <CopyButton\n value={curlCommand}\n variant=\"outline\"\n size=\"sm\"\n >\n Copy cURL\n </CopyButton>\n </div>\n </CardHeader>\n <CardContent>\n <PrettyCode data={curlCommand} language=\"bash\" />\n </CardContent>\n </Card>\n )}\n </div>\n );\n}; ","'use client';\n\nimport { Download, XCircle } from 'lucide-react';\nimport React, { useCallback, useMemo } from 'react';\n\nimport {\n Badge, Button, Card, CardContent, CardHeader, CardTitle, CopyButton\n} from '@djangocfg/ui-core/components';\n\nimport JsonTree from '../../JsonTree';\nimport { usePlaygroundContext } from '../context/PlaygroundContext';\nimport { getStatusColor } from '../utils';\n\nexport const ResponseViewer: React.FC = () => {\n const { state } = usePlaygroundContext();\n const { response } = state;\n\n // Memoize response text for copy/download\n const responseText = useMemo(() => {\n if (!response?.data) return '';\n return typeof response.data === 'string' ? response.data : JSON.stringify(response.data, null, 2);\n }, [response?.data]);\n\n const handleDownloadResponse = useCallback(() => {\n if (!responseText) return;\n const blob = new Blob([responseText], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = 'response.json';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }, [responseText]);\n\n if (!response) {\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-foreground\">Response</h2>\n </div>\n <Card>\n <CardContent className=\"flex items-center justify-center py-8\">\n <p className=\"text-sm text-muted-foreground\">No response yet. Send a request to see the response here.</p>\n </CardContent>\n </Card>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-foreground\">Response</h2>\n <div className=\"flex items-center space-x-2\">\n <CopyButton value={responseText} variant=\"outline\" size=\"sm\">\n Copy\n </CopyButton>\n <Button variant=\"outline\" size=\"sm\" onClick={handleDownloadResponse}>\n <Download className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">Download</span>\n </Button>\n </div>\n </div>\n\n {/* Response Status */}\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm text-foreground\">Response Information</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium text-foreground\">Status Code:</span>\n <Badge\n variant={getStatusColor(response.status || 0) === 'success' ? 'default' :\n getStatusColor(response.status || 0) === 'error' ? 'destructive' : 'secondary'}\n className=\"text-xs\"\n >\n {response.status}\n </Badge>\n </div>\n {response.statusText && (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium text-foreground\">Status Text:</span>\n <span className=\"text-sm text-muted-foreground\">{response.statusText}</span>\n </div>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium text-foreground\">Response Type:</span>\n <span className=\"text-sm text-muted-foreground\">\n {typeof response.data === 'string' ? 'Text' : 'JSON'}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium text-foreground\">Data Size:</span>\n <span className=\"text-sm text-muted-foreground\">\n {typeof response.data === 'string' ? response.data.length : JSON.stringify(response.data).length} chars\n </span>\n </div>\n </div>\n </div>\n\n {response.error && (\n <div className=\"bg-destructive/10 border border-destructive/20 rounded p-3\">\n <div className=\"flex items-center space-x-2\">\n <XCircle className=\"h-4 w-4 text-destructive\" />\n <p className=\"text-sm text-destructive\">{response.error}</p>\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Response Body */}\n <Card>\n <CardContent className=\"p-0\">\n {(() => {\n // Check if response body should be hidden\n const is404 = response.status === 404;\n const isNonJson = typeof response.data === 'string';\n\n if (is404 || isNonJson) {\n return (\n <div className=\"p-8 text-center\">\n <p className=\"text-sm text-muted-foreground\">\n {is404\n ? 'Response body hidden for 404 Not Found status'\n : 'Response body hidden for non-JSON responses'}\n </p>\n </div>\n );\n }\n\n if (response.data) {\n return (\n <JsonTree\n title=\"Response Body\"\n data={response.data}\n config={{\n // Smart defaults for API responses\n maxAutoExpandDepth: 2,\n maxAutoExpandArrayItems: 10,\n maxAutoExpandObjectKeys: 5,\n maxStringLength: 200,\n collectionLimit: 50,\n showCollectionInfo: true,\n showExpandControls: true,\n showActionButtons: false, // We have our own copy/download buttons above\n preserveKeyOrder: true,\n className: \"border-0 rounded-none\"\n }}\n />\n );\n }\n\n return (\n <div className=\"p-8 text-center\">\n <p className=\"text-sm text-muted-foreground\">No response body available</p>\n </div>\n );\n })()}\n </CardContent>\n </Card>\n\n </div>\n );\n}; ","'use client';\n\nimport { Menu, X } from 'lucide-react';\nimport React from 'react';\n\nimport { Button, Sheet, SheetContent, SheetTrigger } from '@djangocfg/ui-core/components';\n\nimport { usePlaygroundContext } from '../context/PlaygroundContext';\nimport { useMobile } from '../hooks/useMobile';\nimport { EndpointsLibrary } from './EndpointsLibrary';\nimport { PlaygroundStepper } from './PlaygroundStepper';\nimport { RequestBuilder } from './RequestBuilder';\nimport { ResponseViewer } from './ResponseViewer';\n\nexport const PlaygroundLayout: React.FC = () => {\n const { state, setSidebarOpen } = usePlaygroundContext();\n const { isMobile } = useMobile();\n\n const renderStepContent = () => {\n switch (state.currentStep) {\n case 'endpoints':\n return <EndpointsLibrary />;\n case 'request':\n return <RequestBuilder />;\n case 'response':\n return <ResponseViewer />;\n default:\n return <EndpointsLibrary />;\n }\n };\n\n const getStepTitle = () => {\n switch (state.currentStep) {\n case 'endpoints':\n return 'API Endpoints';\n case 'request':\n return 'Request Builder';\n case 'response':\n return 'Response Viewer';\n default:\n return 'API Playground';\n }\n };\n\n return (\n <div className=\"min-h-screen\">\n {/* Header */}\n <div className=\"border-b\">\n <div className=\"container mx-auto px-4 py-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-4\">\n <h1 className=\"text-xl font-bold text-foreground\">API Playground</h1>\n <p className=\"text-sm text-muted-foreground hidden sm:block\">\n Test and explore API endpoints\n </p>\n </div>\n \n {/* Mobile Menu */}\n {isMobile && (\n <Sheet open={state.sidebarOpen} onOpenChange={setSidebarOpen}>\n <SheetTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <Menu className=\"h-4 w-4\" />\n </Button>\n </SheetTrigger>\n <SheetContent side=\"left\" className=\"w-80\">\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-foreground\">Navigation</h2>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setSidebarOpen(false)}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n <PlaygroundStepper />\n </div>\n </SheetContent>\n </Sheet>\n )}\n </div>\n </div>\n </div>\n\n {/* Desktop Stepper */}\n {!isMobile && <PlaygroundStepper />}\n\n {/* Main Content */}\n <div className=\"container mx-auto px-6 py-6\">\n {/* Step Title */}\n <div className=\"mb-6\">\n <h2 className=\"text-2xl font-bold text-foreground\">{getStepTitle()}</h2>\n <p className=\"text-muted-foreground mt-1\">\n {state.currentStep === 'endpoints' && 'Browse and select API endpoints'}\n {state.currentStep === 'request' && 'Configure your API request'}\n {state.currentStep === 'response' && 'View API response and details'}\n </p>\n </div>\n\n {/* Content */}\n <div className=\"space-y-6\">\n {renderStepContent()}\n </div>\n </div>\n\n {/* Mobile Floating Action Button */}\n {isMobile && state.currentStep === 'request' && (\n <div className=\"fixed bottom-4 right-4 z-50\">\n <Button\n size=\"lg\"\n className=\"rounded-full shadow-lg\"\n onClick={() => {\n // Auto-advance to response step\n // This would be handled by the context\n }}\n >\n Send Request\n </Button>\n </div>\n )}\n </div>\n );\n}; "]}
@@ -1,4 +1,5 @@
1
- import { usePlaygroundContext, deduplicateEndpoints, getStatusColor, JsonTree_default, isValidJson, PrettyCode_default, getVersionById, getVersionStats, API_VERSIONS, getMethodColor, findApiKeyById, parseRequestHeaders } from './chunk-L6UHASYQ.mjs';
1
+ import { usePlaygroundContext, deduplicateEndpoints, getStatusColor, isValidJson, PrettyCode_default, getVersionById, getVersionStats, API_VERSIONS, getMethodColor, findApiKeyById, parseRequestHeaders } from './chunk-G6PRZP5I.mjs';
2
+ import { JsonTree_default } from './chunk-W6YHQI4F.mjs';
2
3
  import { __name } from './chunk-CGILA3WO.mjs';
3
4
  import { Menu, X, FileText, Send, Code, Check, ChevronLeft, ChevronRight, List, Grid3X3, Filter, Search, Download, XCircle, Key, Loader2, GitBranch, Info, Settings, BarChart3, Database, Users, Shield, ChevronDown, AlertCircle, HelpCircle } from 'lucide-react';
4
5
  import { Sheet, SheetTrigger, Button, SheetContent, Skeleton, Card, CardContent, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Input, Table, TableHeader, TableRow, TableHead, TableBody, TableCell, CardHeader, CardTitle, CopyButton, Badge, Textarea, Collapsible, CollapsibleTrigger, CollapsibleContent, TooltipProvider, Tabs, TabsList, TabsTrigger, TabsContent, Accordion, AccordionItem, AccordionTrigger, AccordionContent, Label, Tooltip, TooltipTrigger, TooltipContent } from '@djangocfg/ui-core/components';
@@ -992,5 +993,5 @@ var PlaygroundLayout = /* @__PURE__ */ __name(() => {
992
993
  }, "PlaygroundLayout");
993
994
 
994
995
  export { PlaygroundLayout };
995
- //# sourceMappingURL=PlaygroundLayout-LMQTVXSP.mjs.map
996
- //# sourceMappingURL=PlaygroundLayout-LMQTVXSP.mjs.map
996
+ //# sourceMappingURL=PlaygroundLayout-UQRBU5RH.mjs.map
997
+ //# sourceMappingURL=PlaygroundLayout-UQRBU5RH.mjs.map