@djangocfg/ui-tools 2.1.223 → 2.1.225
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/JsonTree-63J76I75.mjs +5 -0
- package/dist/{JsonTree-EFWAIIUV.mjs.map → JsonTree-63J76I75.mjs.map} +1 -1
- package/dist/JsonTree-BJVX7XUH.cjs +11 -0
- package/dist/{JsonTree-LULSGFAW.cjs.map → JsonTree-BJVX7XUH.cjs.map} +1 -1
- package/dist/{PlaygroundLayout-F47LFRYB.cjs → PlaygroundLayout-5AHU5DI5.cjs} +20 -20
- package/dist/{PlaygroundLayout-F47LFRYB.cjs.map → PlaygroundLayout-5AHU5DI5.cjs.map} +1 -1
- package/dist/{PlaygroundLayout-NFNVEPIL.mjs → PlaygroundLayout-UKZX5HGM.mjs} +4 -4
- package/dist/{PlaygroundLayout-NFNVEPIL.mjs.map → PlaygroundLayout-UKZX5HGM.mjs.map} +1 -1
- package/dist/{chunk-3Q2X3CYQ.mjs → chunk-C5PVPPR7.mjs} +19 -15
- package/dist/chunk-C5PVPPR7.mjs.map +1 -0
- package/dist/{chunk-3IIZ5ESQ.cjs → chunk-HEU2ECX6.cjs} +2 -2
- package/dist/chunk-HEU2ECX6.cjs.map +1 -0
- package/dist/{chunk-TROOIHOR.mjs → chunk-J36VZHEZ.mjs} +2 -2
- package/dist/chunk-J36VZHEZ.mjs.map +1 -0
- package/dist/{chunk-LJ2VEBBZ.cjs → chunk-TNTCWAVZ.cjs} +19 -15
- package/dist/chunk-TNTCWAVZ.cjs.map +1 -0
- package/dist/index.cjs +10 -10
- package/dist/index.d.cts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.mjs +6 -6
- package/package.json +6 -6
- package/src/tools/JsonTree/README.md +27 -10
- package/src/tools/JsonTree/components/JsonContent.tsx +5 -3
- package/src/tools/JsonTree/index.tsx +3 -1
- package/src/tools/JsonTree/types.ts +7 -0
- package/src/tools/PrettyCode/index.tsx +2 -0
- package/dist/JsonTree-EFWAIIUV.mjs +0 -5
- package/dist/JsonTree-LULSGFAW.cjs +0 -11
- package/dist/chunk-3IIZ5ESQ.cjs.map +0 -1
- package/dist/chunk-3Q2X3CYQ.mjs.map +0 -1
- package/dist/chunk-LJ2VEBBZ.cjs.map +0 -1
- package/dist/chunk-TROOIHOR.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/JsonTree/components/JsonContent.tsx","../src/tools/JsonTree/hooks/useJsonExpand.ts","../src/tools/JsonTree/types.ts","../src/tools/JsonTree/index.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"chunk-C5PVPPR7.mjs","sourcesContent":["'use client';\n\nimport React from 'react';\nimport { CommonExternalProps, JSONTree } from 'react-json-tree';\n\nconst JSON_TREE_THEME = {\n scheme: 'djangocfg-dark',\n base00: 'transparent',\n base01: '#1a1a1a',\n base02: '#2a2a2a',\n base03: '#6b7280',\n base04: '#9ca3af',\n base05: '#e5e7eb',\n base06: '#f3f4f6',\n base07: '#ffffff',\n base08: '#ef4444', // null, undefined\n base09: '#f97316', // numbers\n base0A: '#eab308', // strings\n base0B: '#22c55e', // booleans\n base0C: '#06b6d4', // dates, regex\n base0D: '#3b82f6', // keys\n base0E: '#a855f7', // functions\n base0F: '#f43f5e', // deprecations\n};\n\ninterface JsonContentProps {\n data: unknown;\n renderKey: number;\n title?: string;\n showTitle: boolean;\n padding: string;\n collectionLimit: number;\n preserveKeyOrder: boolean;\n showCollectionInfo: boolean;\n maxStringLength: number;\n fontSize?: string;\n shouldExpandNodeInitially: (keyPath: readonly (string | number)[], nodeData: unknown, level: number) => boolean;\n jsonTreeProps?: Partial<CommonExternalProps>;\n}\n\nexport const JsonContent: React.FC<JsonContentProps> = ({\n data,\n renderKey,\n title,\n showTitle,\n padding,\n collectionLimit,\n preserveKeyOrder,\n showCollectionInfo,\n maxStringLength,\n fontSize,\n shouldExpandNodeInitially,\n jsonTreeProps = {},\n}) => {\n const getItemString = showCollectionInfo\n ? (nodeType: string, nodeData: unknown) => {\n if (nodeType === 'Array') {\n const length = Array.isArray(nodeData) ? nodeData.length : 0;\n return length > 0 ? <span className=\"text-muted-foreground text-xs\">({length})</span> : null;\n }\n if (nodeType === 'Object') {\n const keys = nodeData && typeof nodeData === 'object' ? Object.keys(nodeData) : [];\n return keys.length > 0 ? <span className=\"text-muted-foreground text-xs\">{`{${keys.length}}`}</span> : null;\n }\n return null;\n }\n : () => null;\n\n const postprocessValue = (value: unknown) => {\n if (typeof value === 'string' && value.length > maxStringLength) {\n return value.substring(0, maxStringLength) + '... (truncated)';\n }\n return value;\n };\n\n const isCustomNode = (value: unknown) =>\n typeof value === 'string' && (value.startsWith('http://') || value.startsWith('https://'));\n\n return (\n <div className={`overflow-auto h-full ${padding}`} style={fontSize ? { fontSize } : undefined}>\n {showTitle && title && (\n <h6 className=\"text-sm font-semibold text-foreground mb-2\">{title}</h6>\n )}\n <JSONTree\n key={renderKey}\n data={data}\n theme={JSON_TREE_THEME}\n invertTheme={false}\n hideRoot={true}\n shouldExpandNodeInitially={shouldExpandNodeInitially}\n getItemString={getItemString}\n postprocessValue={postprocessValue}\n isCustomNode={isCustomNode}\n collectionLimit={collectionLimit}\n sortObjectKeys={!preserveKeyOrder}\n {...jsonTreeProps}\n />\n </div>\n );\n};\n","'use client';\n\nimport { useState } from 'react';\n\ninterface UseJsonExpandOptions {\n maxAutoExpandDepth: number;\n maxAutoExpandArrayItems: number;\n maxAutoExpandObjectKeys: number;\n}\n\n/**\n * Manages expand/collapse state for JsonTree.\n * null = smart auto-expand mode (uses depth/size heuristics)\n * true = all expanded (user override)\n * false = all collapsed (user override)\n */\nexport function useJsonExpand({\n maxAutoExpandDepth,\n maxAutoExpandArrayItems,\n maxAutoExpandObjectKeys,\n}: UseJsonExpandOptions) {\n const [expandAll, setExpandAll] = useState<boolean | null>(null);\n const [renderKey, setRenderKey] = useState(0);\n\n // Reflects the effective visual state — used to show correct icon\n const isExpanded = expandAll === true || (expandAll === null && maxAutoExpandDepth > 0);\n\n const toggle = () => {\n setExpandAll(isExpanded ? false : true);\n setRenderKey(prev => prev + 1);\n };\n\n const shouldExpandNodeInitially = (\n _keyPath: readonly (string | number)[],\n nodeData: unknown,\n level: number,\n ): boolean => {\n if (expandAll === true) return true;\n if (expandAll === false) return false;\n // null = auto mode\n if (level <= maxAutoExpandDepth) return true;\n if (Array.isArray(nodeData) && nodeData.length <= maxAutoExpandArrayItems) return true;\n if (nodeData && typeof nodeData === 'object' && !Array.isArray(nodeData)) {\n return Object.keys(nodeData).length <= maxAutoExpandObjectKeys;\n }\n return false;\n };\n\n return { isExpanded, toggle, renderKey, shouldExpandNodeInitially };\n}\n","import { CommonExternalProps } from 'react-json-tree';\n\nexport type JsonTreeMode = 'full' | 'compact' | 'inline';\n\nexport interface JsonTreeConfig {\n /** Maximum depth to expand automatically (default: 2) */\n maxAutoExpandDepth?: number;\n /** Maximum items in array to auto-expand (default: 10) */\n maxAutoExpandArrayItems?: number;\n /** Maximum object keys to auto-expand (default: 5) */\n maxAutoExpandObjectKeys?: number;\n /** Maximum string length before truncation (default: 200) */\n maxStringLength?: number;\n /** Collection limit for performance (default: 50) */\n collectionLimit?: number;\n /** Whether to show collection info (array length, object keys count) */\n showCollectionInfo?: boolean;\n /** Whether to show expand/collapse all buttons */\n showExpandControls?: boolean;\n /** Whether to show copy/download buttons */\n showActionButtons?: boolean;\n /** Custom CSS classes for the container */\n className?: string;\n /** Whether to preserve object key order (default: true) */\n preserveKeyOrder?: boolean;\n /** Font size for tree nodes (default: '12px' for compact/inline, '13px' for full) */\n fontSize?: string;\n}\n\nexport interface JsonTreeComponentProps {\n title?: string;\n data: unknown;\n /**\n * Extra top offset in px for the floating toolbar — use when your layout\n * has a non-sticky header that useNavbarHeight cannot auto-detect.\n * Adds to the auto-detected navbar height.\n */\n toolbarOffset?: number;\n /**\n * Display mode:\n * - \"full\" (default): With toolbar and border\n * - \"compact\": No toolbar, subtle styling\n * - \"inline\": Minimal, no border\n */\n mode?: JsonTreeMode;\n config?: JsonTreeConfig;\n /** Override for react-json-tree props */\n jsonTreeProps?: Partial<CommonExternalProps>;\n}\n\nexport const MODE_PRESETS: Record<JsonTreeMode, Partial<JsonTreeConfig>> = {\n full: {\n showExpandControls: true,\n showActionButtons: true,\n showCollectionInfo: true,\n fontSize: '13px',\n },\n compact: {\n showExpandControls: false,\n showActionButtons: false,\n showCollectionInfo: true,\n fontSize: '11px',\n maxAutoExpandDepth: 1,\n },\n inline: {\n showExpandControls: false,\n showActionButtons: false,\n showCollectionInfo: false,\n fontSize: '11px',\n maxAutoExpandDepth: 1,\n },\n};\n","'use client';\n\nimport React, { useMemo, useRef } from 'react';\n\nimport { FloatingToolbar } from '../../components/FloatingToolbar';\nimport { CopyAction, DownloadAction, ExpandAction } from '../../components/FloatingToolbar/actions';\nimport { JsonContent } from './components/JsonContent';\nimport { useJsonExpand } from './hooks/useJsonExpand';\nimport { JsonTreeComponentProps, MODE_PRESETS } from './types';\n\nexport type { Language } from 'prism-react-renderer';\nexport type { JsonTreeConfig, JsonTreeComponentProps, JsonTreeMode } from './types';\n\nconst JsonTreeComponent = ({\n title,\n data,\n mode = 'full',\n config = {},\n jsonTreeProps = {},\n}: JsonTreeComponentProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n const mergedConfig = useMemo(() => ({ ...MODE_PRESETS[mode], ...config }), [mode, config]);\n\n const {\n maxAutoExpandDepth = 2,\n maxAutoExpandArrayItems = 10,\n maxAutoExpandObjectKeys = 5,\n maxStringLength = 200,\n collectionLimit = 50,\n showCollectionInfo = true,\n showExpandControls = true,\n showActionButtons = true,\n className = '',\n preserveKeyOrder = true,\n fontSize,\n } = mergedConfig;\n\n const { isExpanded, toggle, renderKey, shouldExpandNodeInitially } = useJsonExpand({\n maxAutoExpandDepth,\n maxAutoExpandArrayItems,\n maxAutoExpandObjectKeys,\n });\n\n const jsonString = useMemo(() => JSON.stringify(data, null, 2), [data]);\n\n const containerClasses = useMemo(() => {\n const base = 'relative w-full';\n switch (mode) {\n case 'full': return `${base} border border-border rounded-sm ${className}`;\n case 'compact': return `${base} border border-border/50 rounded-md ${className}`;\n default: return `${base} ${className}`;\n }\n }, [mode, className]);\n\n const contentPadding = mode === 'full' ? 'p-4' : mode === 'compact' ? 'p-2' : 'p-1';\n const showControls = (showExpandControls || showActionButtons) && mode === 'full';\n\n return (\n <div ref={containerRef} className={containerClasses}>\n {showControls && (\n <FloatingToolbar containerRef={containerRef}>\n {showExpandControls && <ExpandAction isExpanded={isExpanded} onToggle={toggle} />}\n {showActionButtons && (\n <>\n <CopyAction value={jsonString} title=\"Copy JSON\" />\n <DownloadAction value={jsonString} filename=\"data.json\" mimeType=\"application/json\" title=\"Download JSON\" />\n </>\n )}\n </FloatingToolbar>\n )}\n\n <JsonContent\n data={data}\n renderKey={renderKey}\n title={title}\n showTitle={mode === 'full'}\n padding={contentPadding}\n collectionLimit={collectionLimit}\n preserveKeyOrder={preserveKeyOrder}\n showCollectionInfo={showCollectionInfo}\n maxStringLength={maxStringLength}\n shouldExpandNodeInitially={shouldExpandNodeInitially}\n fontSize={fontSize}\n jsonTreeProps={jsonTreeProps}\n />\n </div>\n );\n};\n\nexport default JsonTreeComponent;\n"]}
|
|
@@ -391,5 +391,5 @@ exports.getStatusColor = getStatusColor;
|
|
|
391
391
|
exports.isValidJson = isValidJson;
|
|
392
392
|
exports.parseRequestHeaders = parseRequestHeaders;
|
|
393
393
|
exports.usePlaygroundContext = usePlaygroundContext;
|
|
394
|
-
//# sourceMappingURL=chunk-
|
|
395
|
-
//# sourceMappingURL=chunk-
|
|
394
|
+
//# sourceMappingURL=chunk-HEU2ECX6.cjs.map
|
|
395
|
+
//# sourceMappingURL=chunk-HEU2ECX6.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/PrettyCode/index.tsx","../src/tools/OpenapiViewer/utils/apiKeyManager.ts","../src/tools/OpenapiViewer/utils/versionManager.ts","../src/tools/OpenapiViewer/constants.ts","../src/tools/OpenapiViewer/utils/formatters.ts","../src/tools/OpenapiViewer/context/PlaygroundContext.tsx"],"names":["lazy","__name","jsx","jsxs","Suspense","createContext","useContext","useState","React","useEffect","consola","useCallback"],"mappings":"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","file":"chunk-HEU2ECX6.cjs","sourcesContent":["/**\n * PrettyCode Component - Dynamic Import Wrapper\n *\n * Lazy loads the heavy Prism library (~500KB) only when needed.\n * This significantly reduces the initial bundle size.\n */\n\n'use client';\n\nimport React, { lazy, Suspense } from 'react';\nimport type { Language } from 'prism-react-renderer';\n\n// Lazy load the client component\nconst PrettyCodeClient = lazy(() => import('./PrettyCode.client'));\n\n// Loading fallback component\nconst LoadingFallback = () => (\n <div className=\"relative rounded-sm border border-border overflow-hidden bg-muted dark:bg-zinc-900\">\n <div className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <div className=\"animate-pulse h-4 w-4 rounded-full bg-muted-foreground/20\"></div>\n <span className=\"text-xs text-muted-foreground\">Loading code...</span>\n </div>\n </div>\n </div>\n);\n\nexport interface PrettyCodeProps {\n data: string | object;\n language: Language;\n className?: string;\n mode?: 'dark' | 'light';\n inline?: boolean;\n customBg?: string;\n isCompact?: boolean;\n /** Block scroll capture until user clicks (default: true) */\n scrollIsolation?: boolean;\n}\n\nconst PrettyCode: React.FC<PrettyCodeProps> = (props) => {\n return (\n <Suspense fallback={<LoadingFallback />}>\n <PrettyCodeClient {...props} />\n </Suspense>\n );\n};\n\nexport default PrettyCode;\nexport type { Language };\n","/**\n * API Key Management Utility\n *\n * Provides centralized functions for managing API keys in headers and requests.\n * This utility can be used across different components that need to handle API keys.\n */\n\nimport type { ApiKey } from '../types';\n\nexport type { ApiKey };\n\nexport interface HeadersWithApiKey {\n [key: string]: string;\n}\n\n/**\n * Add API key to request headers\n * @param headers - Existing headers object\n * @param apiKey - API key object or string\n * @returns Headers with API key added\n */\nexport function addApiKeyToHeaders(headers: HeadersWithApiKey, apiKey: ApiKey | string | null): HeadersWithApiKey {\n if (!apiKey) {\n return headers;\n }\n\n const keyValue = typeof apiKey === 'string' ? apiKey : (apiKey.id || '');\n\n return {\n ...headers,\n 'X-API-Key': keyValue,\n };\n}\n\n/**\n * Remove API key from headers object\n * @param headers - Headers object\n * @returns Headers without API key\n */\nexport function removeApiKeyFromHeaders(headers: HeadersWithApiKey): HeadersWithApiKey {\n const { 'X-API-Key': removed, ...remainingHeaders } = headers;\n return remainingHeaders;\n}\n\n/**\n * Remove API key from headers JSON string\n * @param headersJson - JSON string of headers\n * @returns JSON string without API key\n */\nexport function removeApiKeyFromHeadersJson(headersJson: string): string {\n try {\n const headers = JSON.parse(headersJson);\n const updatedHeaders = removeApiKeyFromHeaders(headers);\n return JSON.stringify(updatedHeaders, null, 2);\n } catch (error) {\n console.error('Error parsing headers JSON:', error);\n return headersJson;\n }\n}\n\n/**\n * Update headers JSON string with API key\n * @param headersJson - JSON string of headers\n * @param apiKey - API key object or string\n * @returns Updated JSON string\n */\nexport function updateHeadersJsonWithApiKey(headersJson: string, apiKey: ApiKey | string | null): string {\n try {\n const headers = JSON.parse(headersJson);\n const updatedHeaders = addApiKeyToHeaders(headers, apiKey);\n return JSON.stringify(updatedHeaders, null, 2);\n } catch (error) {\n console.error('Error parsing headers JSON:', error);\n return headersJson;\n }\n}\n\n/**\n * Find API key by ID in a list of API keys\n * @param apiKeys - Array of API keys\n * @param keyId - ID of the API key to find\n * @returns API key object or null\n */\nexport function findApiKeyById(apiKeys: ApiKey[], keyId: string): ApiKey | null {\n return apiKeys.find((key) => key.id === keyId) || null;\n}\n\n/**\n * Validate API key format\n * @param apiKey - API key string to validate\n * @returns Whether the API key format is valid\n */\nexport function validateApiKeyFormat(apiKey: string): boolean {\n // Basic validation - adjust based on your API key format requirements\n return typeof apiKey === 'string' && apiKey.length > 0 && apiKey.trim() !== '';\n}\n\n/**\n * Create default headers with API key\n * @param apiKey - API key object or string\n * @returns Default headers with API key\n */\nexport function createDefaultHeaders(apiKey?: ApiKey | string): HeadersWithApiKey {\n const defaultHeaders: HeadersWithApiKey = {\n 'Content-Type': 'application/json',\n };\n\n if (apiKey) {\n return addApiKeyToHeaders(defaultHeaders, apiKey);\n }\n\n return defaultHeaders;\n}\n\n/**\n * Merge headers with API key\n * @param baseHeaders - Base headers object\n * @param additionalHeaders - Additional headers to merge\n * @param apiKey - API key to add\n * @returns Merged headers with API key\n */\nexport function mergeHeadersWithApiKey(baseHeaders: HeadersWithApiKey, additionalHeaders: HeadersWithApiKey, apiKey?: ApiKey | string): HeadersWithApiKey {\n const mergedHeaders = { ...baseHeaders, ...additionalHeaders };\n\n if (apiKey) {\n return addApiKeyToHeaders(mergedHeaders, apiKey);\n }\n\n return mergedHeaders;\n}\n\n/**\n * Log API key usage (for debugging/analytics)\n * @param apiKey - API key that was used\n * @param endpoint - Endpoint that was called\n * @param success - Whether the request was successful\n */\nexport function logApiKeyUsage(apiKey: ApiKey | string, endpoint: string, success: boolean): void {\n const keyValue = typeof apiKey === 'string' ? apiKey : (apiKey.id || '');\n const keyName = typeof apiKey === 'string' ? 'Unknown' : apiKey.name;\n\n console.log(`API Key Usage:`, {\n keyName,\n keyValue: keyValue.substring(0, 8) + '...',\n endpoint,\n success,\n timestamp: new Date().toISOString(),\n });\n}\n","/**\n * API Version Management Utilities\n * Handles version detection, filtering, and URL transformation\n */\n\nimport type { ApiEndpoint } from '../types';\n\nexport interface ApiVersion {\n id: string;\n name: string;\n description: string;\n isDefault: boolean;\n}\n\n// Available API versions\nexport const API_VERSIONS: ApiVersion[] = [\n {\n id: 'v1',\n name: 'v1',\n description: 'Current stable version',\n isDefault: true,\n },\n];\n\n/**\n * Detect version from endpoint path\n */\nexport const detectEndpointVersion = (path: string): string => {\n // Check for versioned paths like /api/vehicles_api/v1/...\n const versionMatch = path.match(/\\/api\\/[^/]+\\/(v\\d+)\\//);\n if (versionMatch && versionMatch[1]) {\n return versionMatch[1];\n }\n \n // If no version found, default to v1\n return 'v1';\n};\n\n/**\n * Check if endpoint belongs to specific version\n */\nexport const isEndpointInVersion = (endpoint: ApiEndpoint, version: string): boolean => {\n const endpointVersion = detectEndpointVersion(endpoint.path);\n return endpointVersion === version;\n};\n\n/**\n * Filter endpoints by version\n */\nexport const filterEndpointsByVersion = (endpoints: ApiEndpoint[], version: string): ApiEndpoint[] => {\n return endpoints.filter(endpoint => isEndpointInVersion(endpoint, version));\n};\n\n/**\n * Remove duplicate endpoints across versions\n * Keeps only the specified version, removes duplicates from other versions\n */\nexport const deduplicateEndpoints = (endpoints: ApiEndpoint[], preferredVersion: string): ApiEndpoint[] => {\n const endpointMap = new Map<string, ApiEndpoint>();\n \n // Group endpoints by normalized path (without version)\n const groupedEndpoints = new Map<string, ApiEndpoint[]>();\n \n endpoints.forEach(endpoint => {\n const normalizedPath = normalizeEndpointPath(endpoint.path);\n if (!groupedEndpoints.has(normalizedPath)) {\n groupedEndpoints.set(normalizedPath, []);\n }\n groupedEndpoints.get(normalizedPath)!.push(endpoint);\n });\n \n // For each group, pick the endpoint from preferred version\n groupedEndpoints.forEach((endpointGroup, normalizedPath) => {\n let selectedEndpoint: ApiEndpoint | null = null;\n \n // Try to find endpoint in preferred version\n const versionEndpoint = endpointGroup.find(ep => isEndpointInVersion(ep, preferredVersion));\n if (versionEndpoint) {\n selectedEndpoint = versionEndpoint;\n } else if (endpointGroup.length > 0) {\n // Fallback to first available endpoint\n selectedEndpoint = endpointGroup[0] || null;\n }\n \n if (selectedEndpoint) {\n endpointMap.set(normalizedPath, selectedEndpoint);\n }\n });\n \n return Array.from(endpointMap.values());\n};\n\n/**\n * Normalize endpoint path by removing version prefix\n * /api/vehicles_api/v1/vehicles/ -> /api/vehicles_api/vehicles/\n * /api/vehicles_api/vehicles/ -> /api/vehicles_api/vehicles/\n */\nexport const normalizeEndpointPath = (path: string): string => {\n // Remove version prefix like /v1/, /v2/, etc.\n return path.replace(/\\/v\\d+\\//, '/');\n};\n\n/**\n * Convert endpoint path to specific version\n */\nexport const convertEndpointToVersion = (endpoint: ApiEndpoint, targetVersion: string): ApiEndpoint => {\n const currentVersion = detectEndpointVersion(endpoint.path);\n \n // If already in target version, return as is\n if (currentVersion === targetVersion) {\n return endpoint;\n }\n \n let newPath = endpoint.path;\n \n // Replace version: /api/vehicles_api/v1/vehicles/ -> /api/vehicles_api/v2/vehicles/\n newPath = newPath.replace(/\\/v\\d+\\//, `/${targetVersion}/`);\n \n return {\n ...endpoint,\n path: newPath,\n };\n};\n\n/**\n * Get version info by ID\n */\nexport const getVersionById = (versionId: string): ApiVersion | undefined => {\n return API_VERSIONS.find(v => v.id === versionId);\n};\n\n/**\n * Get default version\n */\nexport const getDefaultVersion = (): ApiVersion => {\n const defaultVersion = API_VERSIONS.find(v => v.isDefault);\n if (defaultVersion) {\n return defaultVersion;\n }\n \n // Fallback to first version if no default is set\n if (API_VERSIONS.length > 0 && API_VERSIONS[0]) {\n return API_VERSIONS[0];\n }\n \n // This should never happen, but TypeScript requires it\n throw new Error('No API versions defined');\n};\n\n/**\n * Get version statistics from endpoints\n */\nexport const getVersionStats = (endpoints: ApiEndpoint[]): Record<string, number> => {\n const stats: Record<string, number> = {};\n \n API_VERSIONS.forEach(version => {\n stats[version.id] = filterEndpointsByVersion(endpoints, version.id).length;\n });\n \n return stats;\n};\n","// HTTP method colors mapping\nexport const HTTP_METHOD_COLORS = {\n GET: 'success',\n POST: 'primary',\n PUT: 'warning',\n DELETE: 'error',\n PATCH: 'default',\n} as const;\n\n// HTTP status code colors mapping\nexport const HTTP_STATUS_COLORS = {\n '2': 'success',\n '3': 'default',\n '4': 'warning',\n '5': 'error',\n} as const;\n\n// Default request headers\nexport const DEFAULT_HEADERS = {\n 'Content-Type': 'application/json',\n} as const;\n\n// Playground steps configuration\nexport const PLAYGROUND_STEPS = ['endpoints', 'request', 'response'] as const;\n\nexport const STEP_CONFIG = {\n endpoints: {\n title: 'API Endpoints',\n description: 'Browse and select API endpoints',\n },\n request: {\n title: 'Request Builder',\n description: 'Configure your API request',\n },\n response: {\n title: 'Response Viewer',\n description: 'View API response and details',\n },\n} as const;\n","import type { ApiKey } from '../types';\nimport { HTTP_METHOD_COLORS, HTTP_STATUS_COLORS } from '../constants';\n\nexport const getMethodColor = (\n method: string\n): 'success' | 'primary' | 'warning' | 'error' | 'default' => {\n return HTTP_METHOD_COLORS[method.toUpperCase() as keyof typeof HTTP_METHOD_COLORS] || 'default';\n};\n\nexport const getStatusColor = (\n status: number\n): 'success' | 'warning' | 'error' | 'default' => {\n const firstDigit = Math.floor(status / 100).toString();\n return HTTP_STATUS_COLORS[firstDigit as keyof typeof HTTP_STATUS_COLORS] || 'default';\n};\n\nexport const formatApiKeyDisplay = (apiKey: ApiKey): string => {\n const preview = apiKey.id.substring(0, 8);\n return `${apiKey.name} (${preview}...)`;\n};\n\nexport const isValidJson = (str: string): boolean => {\n if (!str || typeof str !== 'string') return false;\n try {\n JSON.parse(str);\n return true;\n } catch {\n return false;\n }\n};\n\nexport const formatRequestHeaders = (headers: Record<string, string>): string => {\n return JSON.stringify(headers, null, 2);\n};\n\nexport const parseRequestHeaders = (headersString: string): Record<string, string> => {\n if (!headersString || typeof headersString !== 'string') {\n return { 'Content-Type': 'application/json' };\n }\n\n try {\n const parsed = JSON.parse(headersString);\n return typeof parsed === 'object' && parsed !== null ? parsed : { 'Content-Type': 'application/json' };\n } catch {\n return { 'Content-Type': 'application/json' };\n }\n};\n\n// Substitute URL parameters like {id}, {userId}, etc.\nexport const substituteUrlParameters = (\n url: string,\n parameters: Record<string, string>\n): string => {\n let substitutedUrl = url;\n\n Object.entries(parameters).forEach(([key, value]) => {\n if (value && value.trim() !== '') {\n // Replace both {key} and %7Bkey%7D patterns (URL encoded version)\n const patterns = [\n new RegExp(`\\\\{${key}\\\\}`, 'g'),\n new RegExp(`%7B${key}%7D`, 'gi'),\n ];\n\n patterns.forEach((pattern) => {\n substitutedUrl = substitutedUrl.replace(pattern, encodeURIComponent(value));\n });\n }\n });\n\n return substitutedUrl;\n};\n","'use client';\n\nimport consola from 'consola';\nimport React, {\n createContext, ReactNode, useCallback, useContext, useEffect, useState\n} from 'react';\n\nimport type {\n ApiEndpoint, ApiResponse, PlaygroundConfig, PlaygroundContextType, PlaygroundState,\n PlaygroundStep\n} from '../types';\nimport { parseRequestHeaders, substituteUrlParameters } from '../utils';\nimport { getDefaultVersion } from '../utils/versionManager';\n\nconst createInitialState = (): PlaygroundState => ({\n // Step management\n currentStep: 'endpoints',\n steps: ['endpoints', 'request', 'response'],\n\n // Endpoint selection\n selectedEndpoint: null,\n selectedCategory: 'All',\n searchTerm: '',\n selectedVersion: getDefaultVersion().id,\n\n // Request configuration\n requestUrl: '',\n requestMethod: 'GET',\n requestHeaders: '{\\n \"Content-Type\": \"application/json\"\\n}',\n requestBody: '',\n selectedApiKey: null,\n manualApiToken: '',\n parameters: {},\n\n // Response\n response: null,\n loading: false,\n\n // UI state\n sidebarOpen: false,\n});\n\nconst PlaygroundContext = createContext<PlaygroundContextType | undefined>(undefined);\n\nexport const usePlaygroundContext = () => {\n const context = useContext(PlaygroundContext);\n if (!context) {\n throw new Error('usePlaygroundContext must be used within a PlaygroundProvider');\n }\n return context;\n};\n\ninterface PlaygroundProviderProps {\n children: ReactNode;\n config: PlaygroundConfig;\n}\n\nexport const PlaygroundProvider: React.FC<PlaygroundProviderProps> = ({ children, config }) => {\n const [state, setState] = useState<PlaygroundState>(() => createInitialState());\n\n // TODO: Get API keys from CFG context - temporarily disabled\n // const { apiKeys: apiKeysResponse, isLoadingApiKeys } = useApiKeysContext();\n // const apiKeys = (apiKeysResponse && apiKeysResponse.results) ? apiKeysResponse.results : [];\n const apiKeys = React.useMemo(() => [], []);\n const isLoadingApiKeys = false;\n\n const updateState = (updates: Partial<PlaygroundState>) => {\n setState((prev) => ({ ...prev, ...updates }));\n };\n\n // Auto-select first API key when available\n useEffect(() => {\n if (!isLoadingApiKeys && apiKeys.length > 0 && !state.selectedApiKey) {\n updateState({ selectedApiKey: apiKeys[0]?.id || null });\n }\n }, [apiKeys, isLoadingApiKeys, state.selectedApiKey]);\n\n // Update headers when API key changes\n useEffect(() => {\n try {\n setState(prev => {\n const headers = parseRequestHeaders(prev.requestHeaders);\n let hasChanged = false;\n\n if (prev.selectedApiKey) {\n const apiKey = apiKeys.find(k => k.id === prev.selectedApiKey);\n\n if (apiKey) {\n // Add API key to headers only if it changed\n if (headers['X-API-Key'] !== apiKey.id) {\n headers['X-API-Key'] = apiKey.id;\n hasChanged = true;\n }\n } else {\n // Selected API key no longer exists, clear selection\n return { ...prev, selectedApiKey: null };\n }\n } else {\n // Remove API key from headers if no key is selected\n if (headers['X-API-Key']) {\n delete headers['X-API-Key'];\n hasChanged = true;\n }\n }\n\n // Only update if headers actually changed\n if (hasChanged) {\n const updatedHeaders = JSON.stringify(headers, null, 2);\n return { ...prev, requestHeaders: updatedHeaders };\n }\n\n return prev;\n });\n } catch (error) {\n consola.error('Error updating headers:', error);\n }\n }, [state.selectedApiKey, apiKeys]); // Removed state.requestHeaders dependency\n\n // Update URL when parameters change\n useEffect(() => {\n if (state.selectedEndpoint && state.parameters) {\n // Path is already a full URL from the endpoint\n const updatedUrl = substituteUrlParameters(state.selectedEndpoint.path, state.parameters);\n\n // Only update if URL actually changed to avoid infinite loop\n if (updatedUrl !== state.requestUrl) {\n updateState({ requestUrl: updatedUrl });\n }\n }\n }, [state.parameters, state.selectedEndpoint, state.requestUrl]);\n\n // Step management\n const setCurrentStep = (step: PlaygroundStep) => {\n updateState({ currentStep: step });\n };\n\n const goToNextStep = () => {\n const currentIndex = state.steps.indexOf(state.currentStep);\n if (currentIndex < state.steps.length - 1) {\n updateState({ currentStep: state.steps[currentIndex + 1] });\n }\n };\n\n const goToPreviousStep = () => {\n const currentIndex = state.steps.indexOf(state.currentStep);\n if (currentIndex > 0) {\n updateState({ currentStep: state.steps[currentIndex - 1] });\n }\n };\n\n // Endpoint management\n const setSelectedEndpoint = (endpoint: ApiEndpoint | null) => {\n if (endpoint) {\n updateState({\n selectedEndpoint: endpoint,\n requestMethod: endpoint.method,\n requestUrl: endpoint.path,\n parameters: {}, // Reset parameters when endpoint changes\n currentStep: 'request'\n });\n } else {\n updateState({ selectedEndpoint: endpoint });\n }\n };\n\n const setSelectedCategory = (category: string) => {\n updateState({ selectedCategory: category });\n };\n\n const setSearchTerm = (term: string) => {\n updateState({ searchTerm: term });\n };\n\n const setSelectedVersion = (version: string) => {\n updateState({ selectedVersion: version });\n };\n\n // Request management\n const setRequestUrl = (url: string) => {\n updateState({ requestUrl: url });\n };\n\n const setRequestMethod = (method: string) => {\n updateState({ requestMethod: method });\n };\n\n const setRequestHeaders = (headers: string) => {\n updateState({ requestHeaders: headers });\n };\n\n const setRequestBody = (body: string) => {\n updateState({ requestBody: body });\n };\n\n const setSelectedApiKey = (apiKeyId: string | null) => {\n updateState({ selectedApiKey: apiKeyId });\n };\n\n const setManualApiToken = (manualApiToken: string) => {\n updateState({ manualApiToken });\n };\n\n const setParameters = (parameters: Record<string, string>) => {\n updateState({ parameters });\n };\n\n // Response management\n const setResponse = (response: ApiResponse | null) => {\n updateState({ response });\n };\n\n const setLoading = (loading: boolean) => {\n updateState({ loading });\n };\n\n // UI management\n const setSidebarOpen = (sidebarOpen: boolean) => {\n updateState({ sidebarOpen });\n };\n\n // Actions\n const clearAll = useCallback(() => {\n setState(createInitialState());\n }, []);\n\n const sendRequest = useCallback(async () => {\n if (!state.requestUrl) {\n consola.error('No URL provided');\n return;\n }\n\n setLoading(true);\n setResponse(null);\n\n try {\n const headers = parseRequestHeaders(state.requestHeaders);\n\n // Bearer token priority: manual token → JWT token from localStorage\n let bearerToken: string | null = null;\n\n if (state.manualApiToken) {\n // Use manual token if provided\n bearerToken = state.manualApiToken;\n } else {\n // Try to get JWT token from localStorage\n if (typeof window !== 'undefined') {\n bearerToken = window.localStorage.getItem('auth_token');\n }\n }\n\n if (bearerToken) {\n headers['Authorization'] = `Bearer ${bearerToken}`;\n }\n\n const requestOptions: RequestInit = {\n method: state.requestMethod,\n headers,\n };\n\n if (state.requestBody && state.requestMethod !== 'GET') {\n requestOptions.body = state.requestBody;\n }\n\n const response = await fetch(state.requestUrl, requestOptions);\n const responseText = await response.text();\n\n let responseData;\n try {\n responseData = JSON.parse(responseText);\n } catch {\n responseData = responseText;\n }\n\n setResponse({\n status: response.status,\n statusText: response.statusText,\n headers: Object.fromEntries(response.headers.entries()),\n data: responseData,\n });\n\n consola.success(`Request successful: ${state.requestMethod} ${state.requestUrl}`);\n\n // Auto-advance to response step\n updateState({ currentStep: 'response' });\n } catch (error) {\n consola.error('Request failed:', error);\n setResponse({\n error: error instanceof Error ? error.message : 'Request failed',\n });\n } finally {\n setLoading(false);\n }\n }, [state, setLoading, setResponse]);\n\n const contextValue: PlaygroundContextType = {\n // State\n state,\n config,\n apiKeys,\n apiKeysLoading: isLoadingApiKeys,\n\n // Step management\n setCurrentStep,\n goToNextStep,\n goToPreviousStep,\n\n // Endpoint management\n setSelectedEndpoint,\n setSelectedCategory,\n setSearchTerm,\n setSelectedVersion,\n\n // Request management\n setRequestUrl,\n setRequestMethod,\n setRequestHeaders,\n setRequestBody,\n setSelectedApiKey,\n setManualApiToken,\n setParameters,\n\n // Response management\n setResponse,\n setLoading,\n\n // UI management\n setSidebarOpen,\n\n // Actions\n clearAll,\n sendRequest,\n };\n\n return <PlaygroundContext.Provider value={contextValue}>{children}</PlaygroundContext.Provider>;\n}; "]}
|
|
@@ -376,5 +376,5 @@ var PlaygroundProvider = /* @__PURE__ */ __name(({ children, config }) => {
|
|
|
376
376
|
}, "PlaygroundProvider");
|
|
377
377
|
|
|
378
378
|
export { PlaygroundProvider, PrettyCode_default, deduplicateEndpoints, findApiKeyById, getMethodColor, getStatusColor, isValidJson, parseRequestHeaders, usePlaygroundContext };
|
|
379
|
-
//# sourceMappingURL=chunk-
|
|
380
|
-
//# sourceMappingURL=chunk-
|
|
379
|
+
//# sourceMappingURL=chunk-J36VZHEZ.mjs.map
|
|
380
|
+
//# sourceMappingURL=chunk-J36VZHEZ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/PrettyCode/index.tsx","../src/tools/OpenapiViewer/utils/apiKeyManager.ts","../src/tools/OpenapiViewer/utils/versionManager.ts","../src/tools/OpenapiViewer/constants.ts","../src/tools/OpenapiViewer/utils/formatters.ts","../src/tools/OpenapiViewer/context/PlaygroundContext.tsx"],"names":["React","jsx"],"mappings":"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","file":"chunk-J36VZHEZ.mjs","sourcesContent":["/**\n * PrettyCode Component - Dynamic Import Wrapper\n *\n * Lazy loads the heavy Prism library (~500KB) only when needed.\n * This significantly reduces the initial bundle size.\n */\n\n'use client';\n\nimport React, { lazy, Suspense } from 'react';\nimport type { Language } from 'prism-react-renderer';\n\n// Lazy load the client component\nconst PrettyCodeClient = lazy(() => import('./PrettyCode.client'));\n\n// Loading fallback component\nconst LoadingFallback = () => (\n <div className=\"relative rounded-sm border border-border overflow-hidden bg-muted dark:bg-zinc-900\">\n <div className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <div className=\"animate-pulse h-4 w-4 rounded-full bg-muted-foreground/20\"></div>\n <span className=\"text-xs text-muted-foreground\">Loading code...</span>\n </div>\n </div>\n </div>\n);\n\nexport interface PrettyCodeProps {\n data: string | object;\n language: Language;\n className?: string;\n mode?: 'dark' | 'light';\n inline?: boolean;\n customBg?: string;\n isCompact?: boolean;\n /** Block scroll capture until user clicks (default: true) */\n scrollIsolation?: boolean;\n}\n\nconst PrettyCode: React.FC<PrettyCodeProps> = (props) => {\n return (\n <Suspense fallback={<LoadingFallback />}>\n <PrettyCodeClient {...props} />\n </Suspense>\n );\n};\n\nexport default PrettyCode;\nexport type { Language };\n","/**\n * API Key Management Utility\n *\n * Provides centralized functions for managing API keys in headers and requests.\n * This utility can be used across different components that need to handle API keys.\n */\n\nimport type { ApiKey } from '../types';\n\nexport type { ApiKey };\n\nexport interface HeadersWithApiKey {\n [key: string]: string;\n}\n\n/**\n * Add API key to request headers\n * @param headers - Existing headers object\n * @param apiKey - API key object or string\n * @returns Headers with API key added\n */\nexport function addApiKeyToHeaders(headers: HeadersWithApiKey, apiKey: ApiKey | string | null): HeadersWithApiKey {\n if (!apiKey) {\n return headers;\n }\n\n const keyValue = typeof apiKey === 'string' ? apiKey : (apiKey.id || '');\n\n return {\n ...headers,\n 'X-API-Key': keyValue,\n };\n}\n\n/**\n * Remove API key from headers object\n * @param headers - Headers object\n * @returns Headers without API key\n */\nexport function removeApiKeyFromHeaders(headers: HeadersWithApiKey): HeadersWithApiKey {\n const { 'X-API-Key': removed, ...remainingHeaders } = headers;\n return remainingHeaders;\n}\n\n/**\n * Remove API key from headers JSON string\n * @param headersJson - JSON string of headers\n * @returns JSON string without API key\n */\nexport function removeApiKeyFromHeadersJson(headersJson: string): string {\n try {\n const headers = JSON.parse(headersJson);\n const updatedHeaders = removeApiKeyFromHeaders(headers);\n return JSON.stringify(updatedHeaders, null, 2);\n } catch (error) {\n console.error('Error parsing headers JSON:', error);\n return headersJson;\n }\n}\n\n/**\n * Update headers JSON string with API key\n * @param headersJson - JSON string of headers\n * @param apiKey - API key object or string\n * @returns Updated JSON string\n */\nexport function updateHeadersJsonWithApiKey(headersJson: string, apiKey: ApiKey | string | null): string {\n try {\n const headers = JSON.parse(headersJson);\n const updatedHeaders = addApiKeyToHeaders(headers, apiKey);\n return JSON.stringify(updatedHeaders, null, 2);\n } catch (error) {\n console.error('Error parsing headers JSON:', error);\n return headersJson;\n }\n}\n\n/**\n * Find API key by ID in a list of API keys\n * @param apiKeys - Array of API keys\n * @param keyId - ID of the API key to find\n * @returns API key object or null\n */\nexport function findApiKeyById(apiKeys: ApiKey[], keyId: string): ApiKey | null {\n return apiKeys.find((key) => key.id === keyId) || null;\n}\n\n/**\n * Validate API key format\n * @param apiKey - API key string to validate\n * @returns Whether the API key format is valid\n */\nexport function validateApiKeyFormat(apiKey: string): boolean {\n // Basic validation - adjust based on your API key format requirements\n return typeof apiKey === 'string' && apiKey.length > 0 && apiKey.trim() !== '';\n}\n\n/**\n * Create default headers with API key\n * @param apiKey - API key object or string\n * @returns Default headers with API key\n */\nexport function createDefaultHeaders(apiKey?: ApiKey | string): HeadersWithApiKey {\n const defaultHeaders: HeadersWithApiKey = {\n 'Content-Type': 'application/json',\n };\n\n if (apiKey) {\n return addApiKeyToHeaders(defaultHeaders, apiKey);\n }\n\n return defaultHeaders;\n}\n\n/**\n * Merge headers with API key\n * @param baseHeaders - Base headers object\n * @param additionalHeaders - Additional headers to merge\n * @param apiKey - API key to add\n * @returns Merged headers with API key\n */\nexport function mergeHeadersWithApiKey(baseHeaders: HeadersWithApiKey, additionalHeaders: HeadersWithApiKey, apiKey?: ApiKey | string): HeadersWithApiKey {\n const mergedHeaders = { ...baseHeaders, ...additionalHeaders };\n\n if (apiKey) {\n return addApiKeyToHeaders(mergedHeaders, apiKey);\n }\n\n return mergedHeaders;\n}\n\n/**\n * Log API key usage (for debugging/analytics)\n * @param apiKey - API key that was used\n * @param endpoint - Endpoint that was called\n * @param success - Whether the request was successful\n */\nexport function logApiKeyUsage(apiKey: ApiKey | string, endpoint: string, success: boolean): void {\n const keyValue = typeof apiKey === 'string' ? apiKey : (apiKey.id || '');\n const keyName = typeof apiKey === 'string' ? 'Unknown' : apiKey.name;\n\n console.log(`API Key Usage:`, {\n keyName,\n keyValue: keyValue.substring(0, 8) + '...',\n endpoint,\n success,\n timestamp: new Date().toISOString(),\n });\n}\n","/**\n * API Version Management Utilities\n * Handles version detection, filtering, and URL transformation\n */\n\nimport type { ApiEndpoint } from '../types';\n\nexport interface ApiVersion {\n id: string;\n name: string;\n description: string;\n isDefault: boolean;\n}\n\n// Available API versions\nexport const API_VERSIONS: ApiVersion[] = [\n {\n id: 'v1',\n name: 'v1',\n description: 'Current stable version',\n isDefault: true,\n },\n];\n\n/**\n * Detect version from endpoint path\n */\nexport const detectEndpointVersion = (path: string): string => {\n // Check for versioned paths like /api/vehicles_api/v1/...\n const versionMatch = path.match(/\\/api\\/[^/]+\\/(v\\d+)\\//);\n if (versionMatch && versionMatch[1]) {\n return versionMatch[1];\n }\n \n // If no version found, default to v1\n return 'v1';\n};\n\n/**\n * Check if endpoint belongs to specific version\n */\nexport const isEndpointInVersion = (endpoint: ApiEndpoint, version: string): boolean => {\n const endpointVersion = detectEndpointVersion(endpoint.path);\n return endpointVersion === version;\n};\n\n/**\n * Filter endpoints by version\n */\nexport const filterEndpointsByVersion = (endpoints: ApiEndpoint[], version: string): ApiEndpoint[] => {\n return endpoints.filter(endpoint => isEndpointInVersion(endpoint, version));\n};\n\n/**\n * Remove duplicate endpoints across versions\n * Keeps only the specified version, removes duplicates from other versions\n */\nexport const deduplicateEndpoints = (endpoints: ApiEndpoint[], preferredVersion: string): ApiEndpoint[] => {\n const endpointMap = new Map<string, ApiEndpoint>();\n \n // Group endpoints by normalized path (without version)\n const groupedEndpoints = new Map<string, ApiEndpoint[]>();\n \n endpoints.forEach(endpoint => {\n const normalizedPath = normalizeEndpointPath(endpoint.path);\n if (!groupedEndpoints.has(normalizedPath)) {\n groupedEndpoints.set(normalizedPath, []);\n }\n groupedEndpoints.get(normalizedPath)!.push(endpoint);\n });\n \n // For each group, pick the endpoint from preferred version\n groupedEndpoints.forEach((endpointGroup, normalizedPath) => {\n let selectedEndpoint: ApiEndpoint | null = null;\n \n // Try to find endpoint in preferred version\n const versionEndpoint = endpointGroup.find(ep => isEndpointInVersion(ep, preferredVersion));\n if (versionEndpoint) {\n selectedEndpoint = versionEndpoint;\n } else if (endpointGroup.length > 0) {\n // Fallback to first available endpoint\n selectedEndpoint = endpointGroup[0] || null;\n }\n \n if (selectedEndpoint) {\n endpointMap.set(normalizedPath, selectedEndpoint);\n }\n });\n \n return Array.from(endpointMap.values());\n};\n\n/**\n * Normalize endpoint path by removing version prefix\n * /api/vehicles_api/v1/vehicles/ -> /api/vehicles_api/vehicles/\n * /api/vehicles_api/vehicles/ -> /api/vehicles_api/vehicles/\n */\nexport const normalizeEndpointPath = (path: string): string => {\n // Remove version prefix like /v1/, /v2/, etc.\n return path.replace(/\\/v\\d+\\//, '/');\n};\n\n/**\n * Convert endpoint path to specific version\n */\nexport const convertEndpointToVersion = (endpoint: ApiEndpoint, targetVersion: string): ApiEndpoint => {\n const currentVersion = detectEndpointVersion(endpoint.path);\n \n // If already in target version, return as is\n if (currentVersion === targetVersion) {\n return endpoint;\n }\n \n let newPath = endpoint.path;\n \n // Replace version: /api/vehicles_api/v1/vehicles/ -> /api/vehicles_api/v2/vehicles/\n newPath = newPath.replace(/\\/v\\d+\\//, `/${targetVersion}/`);\n \n return {\n ...endpoint,\n path: newPath,\n };\n};\n\n/**\n * Get version info by ID\n */\nexport const getVersionById = (versionId: string): ApiVersion | undefined => {\n return API_VERSIONS.find(v => v.id === versionId);\n};\n\n/**\n * Get default version\n */\nexport const getDefaultVersion = (): ApiVersion => {\n const defaultVersion = API_VERSIONS.find(v => v.isDefault);\n if (defaultVersion) {\n return defaultVersion;\n }\n \n // Fallback to first version if no default is set\n if (API_VERSIONS.length > 0 && API_VERSIONS[0]) {\n return API_VERSIONS[0];\n }\n \n // This should never happen, but TypeScript requires it\n throw new Error('No API versions defined');\n};\n\n/**\n * Get version statistics from endpoints\n */\nexport const getVersionStats = (endpoints: ApiEndpoint[]): Record<string, number> => {\n const stats: Record<string, number> = {};\n \n API_VERSIONS.forEach(version => {\n stats[version.id] = filterEndpointsByVersion(endpoints, version.id).length;\n });\n \n return stats;\n};\n","// HTTP method colors mapping\nexport const HTTP_METHOD_COLORS = {\n GET: 'success',\n POST: 'primary',\n PUT: 'warning',\n DELETE: 'error',\n PATCH: 'default',\n} as const;\n\n// HTTP status code colors mapping\nexport const HTTP_STATUS_COLORS = {\n '2': 'success',\n '3': 'default',\n '4': 'warning',\n '5': 'error',\n} as const;\n\n// Default request headers\nexport const DEFAULT_HEADERS = {\n 'Content-Type': 'application/json',\n} as const;\n\n// Playground steps configuration\nexport const PLAYGROUND_STEPS = ['endpoints', 'request', 'response'] as const;\n\nexport const STEP_CONFIG = {\n endpoints: {\n title: 'API Endpoints',\n description: 'Browse and select API endpoints',\n },\n request: {\n title: 'Request Builder',\n description: 'Configure your API request',\n },\n response: {\n title: 'Response Viewer',\n description: 'View API response and details',\n },\n} as const;\n","import type { ApiKey } from '../types';\nimport { HTTP_METHOD_COLORS, HTTP_STATUS_COLORS } from '../constants';\n\nexport const getMethodColor = (\n method: string\n): 'success' | 'primary' | 'warning' | 'error' | 'default' => {\n return HTTP_METHOD_COLORS[method.toUpperCase() as keyof typeof HTTP_METHOD_COLORS] || 'default';\n};\n\nexport const getStatusColor = (\n status: number\n): 'success' | 'warning' | 'error' | 'default' => {\n const firstDigit = Math.floor(status / 100).toString();\n return HTTP_STATUS_COLORS[firstDigit as keyof typeof HTTP_STATUS_COLORS] || 'default';\n};\n\nexport const formatApiKeyDisplay = (apiKey: ApiKey): string => {\n const preview = apiKey.id.substring(0, 8);\n return `${apiKey.name} (${preview}...)`;\n};\n\nexport const isValidJson = (str: string): boolean => {\n if (!str || typeof str !== 'string') return false;\n try {\n JSON.parse(str);\n return true;\n } catch {\n return false;\n }\n};\n\nexport const formatRequestHeaders = (headers: Record<string, string>): string => {\n return JSON.stringify(headers, null, 2);\n};\n\nexport const parseRequestHeaders = (headersString: string): Record<string, string> => {\n if (!headersString || typeof headersString !== 'string') {\n return { 'Content-Type': 'application/json' };\n }\n\n try {\n const parsed = JSON.parse(headersString);\n return typeof parsed === 'object' && parsed !== null ? parsed : { 'Content-Type': 'application/json' };\n } catch {\n return { 'Content-Type': 'application/json' };\n }\n};\n\n// Substitute URL parameters like {id}, {userId}, etc.\nexport const substituteUrlParameters = (\n url: string,\n parameters: Record<string, string>\n): string => {\n let substitutedUrl = url;\n\n Object.entries(parameters).forEach(([key, value]) => {\n if (value && value.trim() !== '') {\n // Replace both {key} and %7Bkey%7D patterns (URL encoded version)\n const patterns = [\n new RegExp(`\\\\{${key}\\\\}`, 'g'),\n new RegExp(`%7B${key}%7D`, 'gi'),\n ];\n\n patterns.forEach((pattern) => {\n substitutedUrl = substitutedUrl.replace(pattern, encodeURIComponent(value));\n });\n }\n });\n\n return substitutedUrl;\n};\n","'use client';\n\nimport consola from 'consola';\nimport React, {\n createContext, ReactNode, useCallback, useContext, useEffect, useState\n} from 'react';\n\nimport type {\n ApiEndpoint, ApiResponse, PlaygroundConfig, PlaygroundContextType, PlaygroundState,\n PlaygroundStep\n} from '../types';\nimport { parseRequestHeaders, substituteUrlParameters } from '../utils';\nimport { getDefaultVersion } from '../utils/versionManager';\n\nconst createInitialState = (): PlaygroundState => ({\n // Step management\n currentStep: 'endpoints',\n steps: ['endpoints', 'request', 'response'],\n\n // Endpoint selection\n selectedEndpoint: null,\n selectedCategory: 'All',\n searchTerm: '',\n selectedVersion: getDefaultVersion().id,\n\n // Request configuration\n requestUrl: '',\n requestMethod: 'GET',\n requestHeaders: '{\\n \"Content-Type\": \"application/json\"\\n}',\n requestBody: '',\n selectedApiKey: null,\n manualApiToken: '',\n parameters: {},\n\n // Response\n response: null,\n loading: false,\n\n // UI state\n sidebarOpen: false,\n});\n\nconst PlaygroundContext = createContext<PlaygroundContextType | undefined>(undefined);\n\nexport const usePlaygroundContext = () => {\n const context = useContext(PlaygroundContext);\n if (!context) {\n throw new Error('usePlaygroundContext must be used within a PlaygroundProvider');\n }\n return context;\n};\n\ninterface PlaygroundProviderProps {\n children: ReactNode;\n config: PlaygroundConfig;\n}\n\nexport const PlaygroundProvider: React.FC<PlaygroundProviderProps> = ({ children, config }) => {\n const [state, setState] = useState<PlaygroundState>(() => createInitialState());\n\n // TODO: Get API keys from CFG context - temporarily disabled\n // const { apiKeys: apiKeysResponse, isLoadingApiKeys } = useApiKeysContext();\n // const apiKeys = (apiKeysResponse && apiKeysResponse.results) ? apiKeysResponse.results : [];\n const apiKeys = React.useMemo(() => [], []);\n const isLoadingApiKeys = false;\n\n const updateState = (updates: Partial<PlaygroundState>) => {\n setState((prev) => ({ ...prev, ...updates }));\n };\n\n // Auto-select first API key when available\n useEffect(() => {\n if (!isLoadingApiKeys && apiKeys.length > 0 && !state.selectedApiKey) {\n updateState({ selectedApiKey: apiKeys[0]?.id || null });\n }\n }, [apiKeys, isLoadingApiKeys, state.selectedApiKey]);\n\n // Update headers when API key changes\n useEffect(() => {\n try {\n setState(prev => {\n const headers = parseRequestHeaders(prev.requestHeaders);\n let hasChanged = false;\n\n if (prev.selectedApiKey) {\n const apiKey = apiKeys.find(k => k.id === prev.selectedApiKey);\n\n if (apiKey) {\n // Add API key to headers only if it changed\n if (headers['X-API-Key'] !== apiKey.id) {\n headers['X-API-Key'] = apiKey.id;\n hasChanged = true;\n }\n } else {\n // Selected API key no longer exists, clear selection\n return { ...prev, selectedApiKey: null };\n }\n } else {\n // Remove API key from headers if no key is selected\n if (headers['X-API-Key']) {\n delete headers['X-API-Key'];\n hasChanged = true;\n }\n }\n\n // Only update if headers actually changed\n if (hasChanged) {\n const updatedHeaders = JSON.stringify(headers, null, 2);\n return { ...prev, requestHeaders: updatedHeaders };\n }\n\n return prev;\n });\n } catch (error) {\n consola.error('Error updating headers:', error);\n }\n }, [state.selectedApiKey, apiKeys]); // Removed state.requestHeaders dependency\n\n // Update URL when parameters change\n useEffect(() => {\n if (state.selectedEndpoint && state.parameters) {\n // Path is already a full URL from the endpoint\n const updatedUrl = substituteUrlParameters(state.selectedEndpoint.path, state.parameters);\n\n // Only update if URL actually changed to avoid infinite loop\n if (updatedUrl !== state.requestUrl) {\n updateState({ requestUrl: updatedUrl });\n }\n }\n }, [state.parameters, state.selectedEndpoint, state.requestUrl]);\n\n // Step management\n const setCurrentStep = (step: PlaygroundStep) => {\n updateState({ currentStep: step });\n };\n\n const goToNextStep = () => {\n const currentIndex = state.steps.indexOf(state.currentStep);\n if (currentIndex < state.steps.length - 1) {\n updateState({ currentStep: state.steps[currentIndex + 1] });\n }\n };\n\n const goToPreviousStep = () => {\n const currentIndex = state.steps.indexOf(state.currentStep);\n if (currentIndex > 0) {\n updateState({ currentStep: state.steps[currentIndex - 1] });\n }\n };\n\n // Endpoint management\n const setSelectedEndpoint = (endpoint: ApiEndpoint | null) => {\n if (endpoint) {\n updateState({\n selectedEndpoint: endpoint,\n requestMethod: endpoint.method,\n requestUrl: endpoint.path,\n parameters: {}, // Reset parameters when endpoint changes\n currentStep: 'request'\n });\n } else {\n updateState({ selectedEndpoint: endpoint });\n }\n };\n\n const setSelectedCategory = (category: string) => {\n updateState({ selectedCategory: category });\n };\n\n const setSearchTerm = (term: string) => {\n updateState({ searchTerm: term });\n };\n\n const setSelectedVersion = (version: string) => {\n updateState({ selectedVersion: version });\n };\n\n // Request management\n const setRequestUrl = (url: string) => {\n updateState({ requestUrl: url });\n };\n\n const setRequestMethod = (method: string) => {\n updateState({ requestMethod: method });\n };\n\n const setRequestHeaders = (headers: string) => {\n updateState({ requestHeaders: headers });\n };\n\n const setRequestBody = (body: string) => {\n updateState({ requestBody: body });\n };\n\n const setSelectedApiKey = (apiKeyId: string | null) => {\n updateState({ selectedApiKey: apiKeyId });\n };\n\n const setManualApiToken = (manualApiToken: string) => {\n updateState({ manualApiToken });\n };\n\n const setParameters = (parameters: Record<string, string>) => {\n updateState({ parameters });\n };\n\n // Response management\n const setResponse = (response: ApiResponse | null) => {\n updateState({ response });\n };\n\n const setLoading = (loading: boolean) => {\n updateState({ loading });\n };\n\n // UI management\n const setSidebarOpen = (sidebarOpen: boolean) => {\n updateState({ sidebarOpen });\n };\n\n // Actions\n const clearAll = useCallback(() => {\n setState(createInitialState());\n }, []);\n\n const sendRequest = useCallback(async () => {\n if (!state.requestUrl) {\n consola.error('No URL provided');\n return;\n }\n\n setLoading(true);\n setResponse(null);\n\n try {\n const headers = parseRequestHeaders(state.requestHeaders);\n\n // Bearer token priority: manual token → JWT token from localStorage\n let bearerToken: string | null = null;\n\n if (state.manualApiToken) {\n // Use manual token if provided\n bearerToken = state.manualApiToken;\n } else {\n // Try to get JWT token from localStorage\n if (typeof window !== 'undefined') {\n bearerToken = window.localStorage.getItem('auth_token');\n }\n }\n\n if (bearerToken) {\n headers['Authorization'] = `Bearer ${bearerToken}`;\n }\n\n const requestOptions: RequestInit = {\n method: state.requestMethod,\n headers,\n };\n\n if (state.requestBody && state.requestMethod !== 'GET') {\n requestOptions.body = state.requestBody;\n }\n\n const response = await fetch(state.requestUrl, requestOptions);\n const responseText = await response.text();\n\n let responseData;\n try {\n responseData = JSON.parse(responseText);\n } catch {\n responseData = responseText;\n }\n\n setResponse({\n status: response.status,\n statusText: response.statusText,\n headers: Object.fromEntries(response.headers.entries()),\n data: responseData,\n });\n\n consola.success(`Request successful: ${state.requestMethod} ${state.requestUrl}`);\n\n // Auto-advance to response step\n updateState({ currentStep: 'response' });\n } catch (error) {\n consola.error('Request failed:', error);\n setResponse({\n error: error instanceof Error ? error.message : 'Request failed',\n });\n } finally {\n setLoading(false);\n }\n }, [state, setLoading, setResponse]);\n\n const contextValue: PlaygroundContextType = {\n // State\n state,\n config,\n apiKeys,\n apiKeysLoading: isLoadingApiKeys,\n\n // Step management\n setCurrentStep,\n goToNextStep,\n goToPreviousStep,\n\n // Endpoint management\n setSelectedEndpoint,\n setSelectedCategory,\n setSearchTerm,\n setSelectedVersion,\n\n // Request management\n setRequestUrl,\n setRequestMethod,\n setRequestHeaders,\n setRequestBody,\n setSelectedApiKey,\n setManualApiToken,\n setParameters,\n\n // Response management\n setResponse,\n setLoading,\n\n // UI management\n setSidebarOpen,\n\n // Actions\n clearAll,\n sendRequest,\n };\n\n return <PlaygroundContext.Provider value={contextValue}>{children}</PlaygroundContext.Provider>;\n}; "]}
|
|
@@ -43,25 +43,22 @@ var JsonContent = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({
|
|
|
43
43
|
preserveKeyOrder,
|
|
44
44
|
showCollectionInfo,
|
|
45
45
|
maxStringLength,
|
|
46
|
+
fontSize,
|
|
46
47
|
shouldExpandNodeInitially,
|
|
47
48
|
jsonTreeProps = {}
|
|
48
49
|
}) => {
|
|
49
50
|
const getItemString = showCollectionInfo ? (nodeType, nodeData) => {
|
|
50
51
|
if (nodeType === "Array") {
|
|
51
52
|
const length = Array.isArray(nodeData) ? nodeData.length : 0;
|
|
52
|
-
return length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground text-
|
|
53
|
+
return length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground text-xs", children: [
|
|
53
54
|
"(",
|
|
54
55
|
length,
|
|
55
|
-
"
|
|
56
|
+
")"
|
|
56
57
|
] }) : null;
|
|
57
58
|
}
|
|
58
59
|
if (nodeType === "Object") {
|
|
59
60
|
const keys = nodeData && typeof nodeData === "object" ? Object.keys(nodeData) : [];
|
|
60
|
-
return keys.length > 0 ? /* @__PURE__ */ jsxRuntime.
|
|
61
|
-
"(",
|
|
62
|
-
keys.length,
|
|
63
|
-
" keys)"
|
|
64
|
-
] }) : null;
|
|
61
|
+
return keys.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-xs", children: `{${keys.length}}` }) : null;
|
|
65
62
|
}
|
|
66
63
|
return null;
|
|
67
64
|
} : () => null;
|
|
@@ -72,7 +69,7 @@ var JsonContent = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({
|
|
|
72
69
|
return value;
|
|
73
70
|
}, "postprocessValue");
|
|
74
71
|
const isCustomNode = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((value) => typeof value === "string" && (value.startsWith("http://") || value.startsWith("https://")), "isCustomNode");
|
|
75
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `overflow-auto h-full ${padding}`, children: [
|
|
72
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `overflow-auto h-full ${padding}`, style: fontSize ? { fontSize } : void 0, children: [
|
|
76
73
|
showTitle && title && /* @__PURE__ */ jsxRuntime.jsx("h6", { className: "text-sm font-semibold text-foreground mb-2", children: title }),
|
|
77
74
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
78
75
|
reactJsonTree.JSONTree,
|
|
@@ -124,17 +121,22 @@ var MODE_PRESETS = {
|
|
|
124
121
|
full: {
|
|
125
122
|
showExpandControls: true,
|
|
126
123
|
showActionButtons: true,
|
|
127
|
-
showCollectionInfo: true
|
|
124
|
+
showCollectionInfo: true,
|
|
125
|
+
fontSize: "13px"
|
|
128
126
|
},
|
|
129
127
|
compact: {
|
|
130
128
|
showExpandControls: false,
|
|
131
129
|
showActionButtons: false,
|
|
132
|
-
showCollectionInfo: true
|
|
130
|
+
showCollectionInfo: true,
|
|
131
|
+
fontSize: "11px",
|
|
132
|
+
maxAutoExpandDepth: 1
|
|
133
133
|
},
|
|
134
134
|
inline: {
|
|
135
135
|
showExpandControls: false,
|
|
136
136
|
showActionButtons: false,
|
|
137
|
-
showCollectionInfo: false
|
|
137
|
+
showCollectionInfo: false,
|
|
138
|
+
fontSize: "11px",
|
|
139
|
+
maxAutoExpandDepth: 1
|
|
138
140
|
}
|
|
139
141
|
};
|
|
140
142
|
var JsonTreeComponent = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({
|
|
@@ -156,7 +158,8 @@ var JsonTreeComponent = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({
|
|
|
156
158
|
showExpandControls = true,
|
|
157
159
|
showActionButtons = true,
|
|
158
160
|
className = "",
|
|
159
|
-
preserveKeyOrder = true
|
|
161
|
+
preserveKeyOrder = true,
|
|
162
|
+
fontSize
|
|
160
163
|
} = mergedConfig;
|
|
161
164
|
const { isExpanded, toggle, renderKey, shouldExpandNodeInitially } = useJsonExpand({
|
|
162
165
|
maxAutoExpandDepth,
|
|
@@ -175,7 +178,7 @@ var JsonTreeComponent = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({
|
|
|
175
178
|
return `${base} ${className}`;
|
|
176
179
|
}
|
|
177
180
|
}, [mode, className]);
|
|
178
|
-
const contentPadding = mode === "full" ? "p-4" : mode === "compact" ? "p-
|
|
181
|
+
const contentPadding = mode === "full" ? "p-4" : mode === "compact" ? "p-2" : "p-1";
|
|
179
182
|
const showControls = (showExpandControls || showActionButtons) && mode === "full";
|
|
180
183
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: containerClasses, children: [
|
|
181
184
|
showControls && /* @__PURE__ */ jsxRuntime.jsxs(chunkG2A6SX5L_cjs.FloatingToolbar, { containerRef, children: [
|
|
@@ -198,6 +201,7 @@ var JsonTreeComponent = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({
|
|
|
198
201
|
showCollectionInfo,
|
|
199
202
|
maxStringLength,
|
|
200
203
|
shouldExpandNodeInitially,
|
|
204
|
+
fontSize,
|
|
201
205
|
jsonTreeProps
|
|
202
206
|
}
|
|
203
207
|
)
|
|
@@ -206,5 +210,5 @@ var JsonTreeComponent = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({
|
|
|
206
210
|
var JsonTree_default = JsonTreeComponent;
|
|
207
211
|
|
|
208
212
|
exports.JsonTree_default = JsonTree_default;
|
|
209
|
-
//# sourceMappingURL=chunk-
|
|
210
|
-
//# sourceMappingURL=chunk-
|
|
213
|
+
//# sourceMappingURL=chunk-TNTCWAVZ.cjs.map
|
|
214
|
+
//# sourceMappingURL=chunk-TNTCWAVZ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/JsonTree/components/JsonContent.tsx","../src/tools/JsonTree/hooks/useJsonExpand.ts","../src/tools/JsonTree/types.ts","../src/tools/JsonTree/index.tsx"],"names":["__name","jsxs","jsx","JSONTree","useState","useRef","useMemo","FloatingToolbar","ExpandAction","Fragment","CopyAction","DownloadAction"],"mappings":"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","file":"chunk-TNTCWAVZ.cjs","sourcesContent":["'use client';\n\nimport React from 'react';\nimport { CommonExternalProps, JSONTree } from 'react-json-tree';\n\nconst JSON_TREE_THEME = {\n scheme: 'djangocfg-dark',\n base00: 'transparent',\n base01: '#1a1a1a',\n base02: '#2a2a2a',\n base03: '#6b7280',\n base04: '#9ca3af',\n base05: '#e5e7eb',\n base06: '#f3f4f6',\n base07: '#ffffff',\n base08: '#ef4444', // null, undefined\n base09: '#f97316', // numbers\n base0A: '#eab308', // strings\n base0B: '#22c55e', // booleans\n base0C: '#06b6d4', // dates, regex\n base0D: '#3b82f6', // keys\n base0E: '#a855f7', // functions\n base0F: '#f43f5e', // deprecations\n};\n\ninterface JsonContentProps {\n data: unknown;\n renderKey: number;\n title?: string;\n showTitle: boolean;\n padding: string;\n collectionLimit: number;\n preserveKeyOrder: boolean;\n showCollectionInfo: boolean;\n maxStringLength: number;\n fontSize?: string;\n shouldExpandNodeInitially: (keyPath: readonly (string | number)[], nodeData: unknown, level: number) => boolean;\n jsonTreeProps?: Partial<CommonExternalProps>;\n}\n\nexport const JsonContent: React.FC<JsonContentProps> = ({\n data,\n renderKey,\n title,\n showTitle,\n padding,\n collectionLimit,\n preserveKeyOrder,\n showCollectionInfo,\n maxStringLength,\n fontSize,\n shouldExpandNodeInitially,\n jsonTreeProps = {},\n}) => {\n const getItemString = showCollectionInfo\n ? (nodeType: string, nodeData: unknown) => {\n if (nodeType === 'Array') {\n const length = Array.isArray(nodeData) ? nodeData.length : 0;\n return length > 0 ? <span className=\"text-muted-foreground text-xs\">({length})</span> : null;\n }\n if (nodeType === 'Object') {\n const keys = nodeData && typeof nodeData === 'object' ? Object.keys(nodeData) : [];\n return keys.length > 0 ? <span className=\"text-muted-foreground text-xs\">{`{${keys.length}}`}</span> : null;\n }\n return null;\n }\n : () => null;\n\n const postprocessValue = (value: unknown) => {\n if (typeof value === 'string' && value.length > maxStringLength) {\n return value.substring(0, maxStringLength) + '... (truncated)';\n }\n return value;\n };\n\n const isCustomNode = (value: unknown) =>\n typeof value === 'string' && (value.startsWith('http://') || value.startsWith('https://'));\n\n return (\n <div className={`overflow-auto h-full ${padding}`} style={fontSize ? { fontSize } : undefined}>\n {showTitle && title && (\n <h6 className=\"text-sm font-semibold text-foreground mb-2\">{title}</h6>\n )}\n <JSONTree\n key={renderKey}\n data={data}\n theme={JSON_TREE_THEME}\n invertTheme={false}\n hideRoot={true}\n shouldExpandNodeInitially={shouldExpandNodeInitially}\n getItemString={getItemString}\n postprocessValue={postprocessValue}\n isCustomNode={isCustomNode}\n collectionLimit={collectionLimit}\n sortObjectKeys={!preserveKeyOrder}\n {...jsonTreeProps}\n />\n </div>\n );\n};\n","'use client';\n\nimport { useState } from 'react';\n\ninterface UseJsonExpandOptions {\n maxAutoExpandDepth: number;\n maxAutoExpandArrayItems: number;\n maxAutoExpandObjectKeys: number;\n}\n\n/**\n * Manages expand/collapse state for JsonTree.\n * null = smart auto-expand mode (uses depth/size heuristics)\n * true = all expanded (user override)\n * false = all collapsed (user override)\n */\nexport function useJsonExpand({\n maxAutoExpandDepth,\n maxAutoExpandArrayItems,\n maxAutoExpandObjectKeys,\n}: UseJsonExpandOptions) {\n const [expandAll, setExpandAll] = useState<boolean | null>(null);\n const [renderKey, setRenderKey] = useState(0);\n\n // Reflects the effective visual state — used to show correct icon\n const isExpanded = expandAll === true || (expandAll === null && maxAutoExpandDepth > 0);\n\n const toggle = () => {\n setExpandAll(isExpanded ? false : true);\n setRenderKey(prev => prev + 1);\n };\n\n const shouldExpandNodeInitially = (\n _keyPath: readonly (string | number)[],\n nodeData: unknown,\n level: number,\n ): boolean => {\n if (expandAll === true) return true;\n if (expandAll === false) return false;\n // null = auto mode\n if (level <= maxAutoExpandDepth) return true;\n if (Array.isArray(nodeData) && nodeData.length <= maxAutoExpandArrayItems) return true;\n if (nodeData && typeof nodeData === 'object' && !Array.isArray(nodeData)) {\n return Object.keys(nodeData).length <= maxAutoExpandObjectKeys;\n }\n return false;\n };\n\n return { isExpanded, toggle, renderKey, shouldExpandNodeInitially };\n}\n","import { CommonExternalProps } from 'react-json-tree';\n\nexport type JsonTreeMode = 'full' | 'compact' | 'inline';\n\nexport interface JsonTreeConfig {\n /** Maximum depth to expand automatically (default: 2) */\n maxAutoExpandDepth?: number;\n /** Maximum items in array to auto-expand (default: 10) */\n maxAutoExpandArrayItems?: number;\n /** Maximum object keys to auto-expand (default: 5) */\n maxAutoExpandObjectKeys?: number;\n /** Maximum string length before truncation (default: 200) */\n maxStringLength?: number;\n /** Collection limit for performance (default: 50) */\n collectionLimit?: number;\n /** Whether to show collection info (array length, object keys count) */\n showCollectionInfo?: boolean;\n /** Whether to show expand/collapse all buttons */\n showExpandControls?: boolean;\n /** Whether to show copy/download buttons */\n showActionButtons?: boolean;\n /** Custom CSS classes for the container */\n className?: string;\n /** Whether to preserve object key order (default: true) */\n preserveKeyOrder?: boolean;\n /** Font size for tree nodes (default: '12px' for compact/inline, '13px' for full) */\n fontSize?: string;\n}\n\nexport interface JsonTreeComponentProps {\n title?: string;\n data: unknown;\n /**\n * Extra top offset in px for the floating toolbar — use when your layout\n * has a non-sticky header that useNavbarHeight cannot auto-detect.\n * Adds to the auto-detected navbar height.\n */\n toolbarOffset?: number;\n /**\n * Display mode:\n * - \"full\" (default): With toolbar and border\n * - \"compact\": No toolbar, subtle styling\n * - \"inline\": Minimal, no border\n */\n mode?: JsonTreeMode;\n config?: JsonTreeConfig;\n /** Override for react-json-tree props */\n jsonTreeProps?: Partial<CommonExternalProps>;\n}\n\nexport const MODE_PRESETS: Record<JsonTreeMode, Partial<JsonTreeConfig>> = {\n full: {\n showExpandControls: true,\n showActionButtons: true,\n showCollectionInfo: true,\n fontSize: '13px',\n },\n compact: {\n showExpandControls: false,\n showActionButtons: false,\n showCollectionInfo: true,\n fontSize: '11px',\n maxAutoExpandDepth: 1,\n },\n inline: {\n showExpandControls: false,\n showActionButtons: false,\n showCollectionInfo: false,\n fontSize: '11px',\n maxAutoExpandDepth: 1,\n },\n};\n","'use client';\n\nimport React, { useMemo, useRef } from 'react';\n\nimport { FloatingToolbar } from '../../components/FloatingToolbar';\nimport { CopyAction, DownloadAction, ExpandAction } from '../../components/FloatingToolbar/actions';\nimport { JsonContent } from './components/JsonContent';\nimport { useJsonExpand } from './hooks/useJsonExpand';\nimport { JsonTreeComponentProps, MODE_PRESETS } from './types';\n\nexport type { Language } from 'prism-react-renderer';\nexport type { JsonTreeConfig, JsonTreeComponentProps, JsonTreeMode } from './types';\n\nconst JsonTreeComponent = ({\n title,\n data,\n mode = 'full',\n config = {},\n jsonTreeProps = {},\n}: JsonTreeComponentProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n const mergedConfig = useMemo(() => ({ ...MODE_PRESETS[mode], ...config }), [mode, config]);\n\n const {\n maxAutoExpandDepth = 2,\n maxAutoExpandArrayItems = 10,\n maxAutoExpandObjectKeys = 5,\n maxStringLength = 200,\n collectionLimit = 50,\n showCollectionInfo = true,\n showExpandControls = true,\n showActionButtons = true,\n className = '',\n preserveKeyOrder = true,\n fontSize,\n } = mergedConfig;\n\n const { isExpanded, toggle, renderKey, shouldExpandNodeInitially } = useJsonExpand({\n maxAutoExpandDepth,\n maxAutoExpandArrayItems,\n maxAutoExpandObjectKeys,\n });\n\n const jsonString = useMemo(() => JSON.stringify(data, null, 2), [data]);\n\n const containerClasses = useMemo(() => {\n const base = 'relative w-full';\n switch (mode) {\n case 'full': return `${base} border border-border rounded-sm ${className}`;\n case 'compact': return `${base} border border-border/50 rounded-md ${className}`;\n default: return `${base} ${className}`;\n }\n }, [mode, className]);\n\n const contentPadding = mode === 'full' ? 'p-4' : mode === 'compact' ? 'p-2' : 'p-1';\n const showControls = (showExpandControls || showActionButtons) && mode === 'full';\n\n return (\n <div ref={containerRef} className={containerClasses}>\n {showControls && (\n <FloatingToolbar containerRef={containerRef}>\n {showExpandControls && <ExpandAction isExpanded={isExpanded} onToggle={toggle} />}\n {showActionButtons && (\n <>\n <CopyAction value={jsonString} title=\"Copy JSON\" />\n <DownloadAction value={jsonString} filename=\"data.json\" mimeType=\"application/json\" title=\"Download JSON\" />\n </>\n )}\n </FloatingToolbar>\n )}\n\n <JsonContent\n data={data}\n renderKey={renderKey}\n title={title}\n showTitle={mode === 'full'}\n padding={contentPadding}\n collectionLimit={collectionLimit}\n preserveKeyOrder={preserveKeyOrder}\n showCollectionInfo={showCollectionInfo}\n maxStringLength={maxStringLength}\n shouldExpandNodeInitially={shouldExpandNodeInitially}\n fontSize={fontSize}\n jsonTreeProps={jsonTreeProps}\n />\n </div>\n );\n};\n\nexport default JsonTreeComponent;\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -6,8 +6,8 @@ require('./chunk-F2N7P5XU.cjs');
|
|
|
6
6
|
var chunkIPRNIM7L_cjs = require('./chunk-IPRNIM7L.cjs');
|
|
7
7
|
var chunk77HQWEQ6_cjs = require('./chunk-77HQWEQ6.cjs');
|
|
8
8
|
var chunkF2CMIIOH_cjs = require('./chunk-F2CMIIOH.cjs');
|
|
9
|
-
var
|
|
10
|
-
var
|
|
9
|
+
var chunkHEU2ECX6_cjs = require('./chunk-HEU2ECX6.cjs');
|
|
10
|
+
var chunkTNTCWAVZ_cjs = require('./chunk-TNTCWAVZ.cjs');
|
|
11
11
|
require('./chunk-G2A6SX5L.cjs');
|
|
12
12
|
var chunkPNZSJN6T_cjs = require('./chunk-PNZSJN6T.cjs');
|
|
13
13
|
var chunkPRPG2T2E_cjs = require('./chunk-PRPG2T2E.cjs');
|
|
@@ -363,7 +363,7 @@ var CodeBlock = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({ code, language, isUs
|
|
|
363
363
|
}
|
|
364
364
|
),
|
|
365
365
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
366
|
-
|
|
366
|
+
chunkHEU2ECX6_cjs.PrettyCode_default,
|
|
367
367
|
{
|
|
368
368
|
data: code,
|
|
369
369
|
language,
|
|
@@ -726,14 +726,14 @@ function OpenapiLoadingFallback() {
|
|
|
726
726
|
}
|
|
727
727
|
chunkWGEGR3DF_cjs.__name(OpenapiLoadingFallback, "OpenapiLoadingFallback");
|
|
728
728
|
var LazyPlaygroundLayout = createLazyComponent(
|
|
729
|
-
() => import('./PlaygroundLayout-
|
|
729
|
+
() => import('./PlaygroundLayout-5AHU5DI5.cjs').then((mod) => ({ default: mod.PlaygroundLayout })),
|
|
730
730
|
{
|
|
731
731
|
displayName: "LazyPlaygroundLayout",
|
|
732
732
|
fallback: /* @__PURE__ */ jsxRuntime.jsx(OpenapiLoadingFallback, {})
|
|
733
733
|
}
|
|
734
734
|
);
|
|
735
735
|
var LazyOpenapiViewer = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({ config }) => {
|
|
736
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
736
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkHEU2ECX6_cjs.PlaygroundProvider, { config, children: /* @__PURE__ */ jsxRuntime.jsx(LazyPlaygroundLayout, {}) });
|
|
737
737
|
}, "LazyOpenapiViewer");
|
|
738
738
|
LazyOpenapiViewer.displayName = "LazyOpenapiViewer";
|
|
739
739
|
var LazyJsonSchemaForm = createLazyComponent(
|
|
@@ -842,7 +842,7 @@ var LazyVideoPlayer = createLazyComponent(
|
|
|
842
842
|
}
|
|
843
843
|
);
|
|
844
844
|
var LazyJsonTree = createLazyComponent(
|
|
845
|
-
() => import('./JsonTree-
|
|
845
|
+
() => import('./JsonTree-BJVX7XUH.cjs'),
|
|
846
846
|
{
|
|
847
847
|
displayName: "LazyJsonTree",
|
|
848
848
|
fallback: /* @__PURE__ */ jsxRuntime.jsx(LoadingFallback, { minHeight: 100, text: "Loading JSON viewer..." })
|
|
@@ -881,11 +881,11 @@ function LottiePlayer(props) {
|
|
|
881
881
|
}
|
|
882
882
|
chunkWGEGR3DF_cjs.__name(LottiePlayer, "LottiePlayer");
|
|
883
883
|
var PlaygroundLayout = React3.lazy(
|
|
884
|
-
() => import('./PlaygroundLayout-
|
|
884
|
+
() => import('./PlaygroundLayout-5AHU5DI5.cjs').then((mod) => ({ default: mod.PlaygroundLayout }))
|
|
885
885
|
);
|
|
886
886
|
var LoadingFallback9 = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center min-h-[400px]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground", children: "Loading API Playground..." }) }), "LoadingFallback");
|
|
887
887
|
var Playground = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({ config }) => {
|
|
888
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
888
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkHEU2ECX6_cjs.PlaygroundProvider, { config, children: /* @__PURE__ */ jsxRuntime.jsx(React3.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(LoadingFallback9, {}), children: /* @__PURE__ */ jsxRuntime.jsx(PlaygroundLayout, {}) }) });
|
|
889
889
|
}, "Playground");
|
|
890
890
|
var OpenapiViewer_default = Playground;
|
|
891
891
|
var CronSchedulerClient = React3.lazy(() => import('./CronScheduler.client-A4GO6YBY.cjs'));
|
|
@@ -1207,11 +1207,11 @@ Object.defineProperty(exports, "useCronWeekDays", {
|
|
|
1207
1207
|
});
|
|
1208
1208
|
Object.defineProperty(exports, "PrettyCode", {
|
|
1209
1209
|
enumerable: true,
|
|
1210
|
-
get: function () { return
|
|
1210
|
+
get: function () { return chunkHEU2ECX6_cjs.PrettyCode_default; }
|
|
1211
1211
|
});
|
|
1212
1212
|
Object.defineProperty(exports, "JsonTree", {
|
|
1213
1213
|
enumerable: true,
|
|
1214
|
-
get: function () { return
|
|
1214
|
+
get: function () { return chunkTNTCWAVZ_cjs.JsonTree_default; }
|
|
1215
1215
|
});
|
|
1216
1216
|
Object.defineProperty(exports, "ArrayFieldItemTemplate", {
|
|
1217
1217
|
enumerable: true,
|
package/dist/index.d.cts
CHANGED
|
@@ -1217,6 +1217,8 @@ interface JsonTreeConfig {
|
|
|
1217
1217
|
className?: string;
|
|
1218
1218
|
/** Whether to preserve object key order (default: true) */
|
|
1219
1219
|
preserveKeyOrder?: boolean;
|
|
1220
|
+
/** Font size for tree nodes (default: '12px' for compact/inline, '13px' for full) */
|
|
1221
|
+
fontSize?: string;
|
|
1220
1222
|
}
|
|
1221
1223
|
interface JsonTreeComponentProps {
|
|
1222
1224
|
title?: string;
|
|
@@ -1438,6 +1440,8 @@ interface PrettyCodeProps {
|
|
|
1438
1440
|
inline?: boolean;
|
|
1439
1441
|
customBg?: string;
|
|
1440
1442
|
isCompact?: boolean;
|
|
1443
|
+
/** Block scroll capture until user clicks (default: true) */
|
|
1444
|
+
scrollIsolation?: boolean;
|
|
1441
1445
|
}
|
|
1442
1446
|
declare const PrettyCode: React__default.FC<PrettyCodeProps>;
|
|
1443
1447
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1217,6 +1217,8 @@ interface JsonTreeConfig {
|
|
|
1217
1217
|
className?: string;
|
|
1218
1218
|
/** Whether to preserve object key order (default: true) */
|
|
1219
1219
|
preserveKeyOrder?: boolean;
|
|
1220
|
+
/** Font size for tree nodes (default: '12px' for compact/inline, '13px' for full) */
|
|
1221
|
+
fontSize?: string;
|
|
1220
1222
|
}
|
|
1221
1223
|
interface JsonTreeComponentProps {
|
|
1222
1224
|
title?: string;
|
|
@@ -1438,6 +1440,8 @@ interface PrettyCodeProps {
|
|
|
1438
1440
|
inline?: boolean;
|
|
1439
1441
|
customBg?: string;
|
|
1440
1442
|
isCompact?: boolean;
|
|
1443
|
+
/** Block scroll capture until user clicks (default: true) */
|
|
1444
|
+
scrollIsolation?: boolean;
|
|
1441
1445
|
}
|
|
1442
1446
|
declare const PrettyCode: React__default.FC<PrettyCodeProps>;
|
|
1443
1447
|
|
package/dist/index.mjs
CHANGED
|
@@ -4,9 +4,9 @@ import './chunk-JWB2EWQO.mjs';
|
|
|
4
4
|
export { ImageViewer } from './chunk-BEURMR25.mjs';
|
|
5
5
|
export { generateContentKey, useAudioCache, useBlobUrlCleanup, useImageCache, useMediaCacheStore, useVideoCache, useVideoPlayerSettings } from './chunk-5LBDYFWH.mjs';
|
|
6
6
|
export { CronSchedulerProvider, CustomInput, DayChips, MonthDayGrid, SchedulePreview, ScheduleTypeSelector, TimeSelector, buildCron, humanizeCron, isValidCron, parseCron, useCronCustom, useCronMonthDays, useCronPreview, useCronScheduler, useCronSchedulerContext, useCronTime, useCronType, useCronWeekDays } from './chunk-PZKAH7WQ.mjs';
|
|
7
|
-
import { PlaygroundProvider, PrettyCode_default } from './chunk-
|
|
8
|
-
export { PrettyCode_default as PrettyCode } from './chunk-
|
|
9
|
-
export { JsonTree_default as JsonTree } from './chunk-
|
|
7
|
+
import { PlaygroundProvider, PrettyCode_default } from './chunk-J36VZHEZ.mjs';
|
|
8
|
+
export { PrettyCode_default as PrettyCode } from './chunk-J36VZHEZ.mjs';
|
|
9
|
+
export { JsonTree_default as JsonTree } from './chunk-C5PVPPR7.mjs';
|
|
10
10
|
import './chunk-MBFBVGUP.mjs';
|
|
11
11
|
export { ArrayFieldItemTemplate, ArrayFieldTemplate, BaseInputTemplate, CheckboxWidget, ColorWidget, ErrorListTemplate, FieldTemplate, JsonSchemaForm, NumberWidget, ObjectFieldTemplate, SelectWidget, SliderWidget, SwitchWidget, TextWidget, getRequiredFields, hasRequiredFields, mergeDefaults, normalizeFormData, safeJsonParse, safeJsonStringify, validateRequiredFields, validateSchema } from './chunk-7IIRYG4S.mjs';
|
|
12
12
|
export { useLottie } from './chunk-6JTB2X72.mjs';
|
|
@@ -702,7 +702,7 @@ function OpenapiLoadingFallback() {
|
|
|
702
702
|
}
|
|
703
703
|
__name(OpenapiLoadingFallback, "OpenapiLoadingFallback");
|
|
704
704
|
var LazyPlaygroundLayout = createLazyComponent(
|
|
705
|
-
() => import('./PlaygroundLayout-
|
|
705
|
+
() => import('./PlaygroundLayout-UKZX5HGM.mjs').then((mod) => ({ default: mod.PlaygroundLayout })),
|
|
706
706
|
{
|
|
707
707
|
displayName: "LazyPlaygroundLayout",
|
|
708
708
|
fallback: /* @__PURE__ */ jsx(OpenapiLoadingFallback, {})
|
|
@@ -818,7 +818,7 @@ var LazyVideoPlayer = createLazyComponent(
|
|
|
818
818
|
}
|
|
819
819
|
);
|
|
820
820
|
var LazyJsonTree = createLazyComponent(
|
|
821
|
-
() => import('./JsonTree-
|
|
821
|
+
() => import('./JsonTree-63J76I75.mjs'),
|
|
822
822
|
{
|
|
823
823
|
displayName: "LazyJsonTree",
|
|
824
824
|
fallback: /* @__PURE__ */ jsx(LoadingFallback, { minHeight: 100, text: "Loading JSON viewer..." })
|
|
@@ -857,7 +857,7 @@ function LottiePlayer(props) {
|
|
|
857
857
|
}
|
|
858
858
|
__name(LottiePlayer, "LottiePlayer");
|
|
859
859
|
var PlaygroundLayout = lazy(
|
|
860
|
-
() => import('./PlaygroundLayout-
|
|
860
|
+
() => import('./PlaygroundLayout-UKZX5HGM.mjs').then((mod) => ({ default: mod.PlaygroundLayout }))
|
|
861
861
|
);
|
|
862
862
|
var LoadingFallback9 = /* @__PURE__ */ __name(() => /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center min-h-[400px]", children: /* @__PURE__ */ jsx("div", { className: "text-muted-foreground", children: "Loading API Playground..." }) }), "LoadingFallback");
|
|
863
863
|
var Playground = /* @__PURE__ */ __name(({ config }) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@djangocfg/ui-tools",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.225",
|
|
4
4
|
"description": "Heavy React tools with lazy loading - for Electron, Vite, CRA, Next.js apps",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ui-tools",
|
|
@@ -78,8 +78,8 @@
|
|
|
78
78
|
"check": "tsc --noEmit"
|
|
79
79
|
},
|
|
80
80
|
"peerDependencies": {
|
|
81
|
-
"@djangocfg/i18n": "^2.1.
|
|
82
|
-
"@djangocfg/ui-core": "^2.1.
|
|
81
|
+
"@djangocfg/i18n": "^2.1.225",
|
|
82
|
+
"@djangocfg/ui-core": "^2.1.225",
|
|
83
83
|
"lucide-react": "^0.545.0",
|
|
84
84
|
"react": "^19.1.0",
|
|
85
85
|
"react-dom": "^19.1.0",
|
|
@@ -112,10 +112,10 @@
|
|
|
112
112
|
"@maplibre/maplibre-gl-geocoder": "^1.7.0"
|
|
113
113
|
},
|
|
114
114
|
"devDependencies": {
|
|
115
|
-
"@djangocfg/i18n": "^2.1.
|
|
115
|
+
"@djangocfg/i18n": "^2.1.225",
|
|
116
116
|
"@djangocfg/playground": "workspace:*",
|
|
117
|
-
"@djangocfg/typescript-config": "^2.1.
|
|
118
|
-
"@djangocfg/ui-core": "^2.1.
|
|
117
|
+
"@djangocfg/typescript-config": "^2.1.225",
|
|
118
|
+
"@djangocfg/ui-core": "^2.1.225",
|
|
119
119
|
"@types/mapbox__mapbox-gl-draw": "^1.4.8",
|
|
120
120
|
"@types/node": "^24.7.2",
|
|
121
121
|
"@types/react": "^19.1.0",
|