@djangocfg/ui-tools 2.1.103 → 2.1.105

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 (32) hide show
  1. package/dist/{LottiePlayer.client-WFMG2OOW.cjs → LottiePlayer.client-6WVWDO75.cjs} +6 -6
  2. package/dist/{LottiePlayer.client-WFMG2OOW.cjs.map → LottiePlayer.client-6WVWDO75.cjs.map} +1 -1
  3. package/dist/{LottiePlayer.client-LBEC2JKY.mjs → LottiePlayer.client-B4I6WNZM.mjs} +4 -4
  4. package/dist/{LottiePlayer.client-LBEC2JKY.mjs.map → LottiePlayer.client-B4I6WNZM.mjs.map} +1 -1
  5. package/dist/{Mermaid.client-4TU2TSH3.mjs → Mermaid.client-4OCKJ6QD.mjs} +3 -3
  6. package/dist/{Mermaid.client-4TU2TSH3.mjs.map → Mermaid.client-4OCKJ6QD.mjs.map} +1 -1
  7. package/dist/{Mermaid.client-SBYY364Q.cjs → Mermaid.client-ZP6OE46Z.cjs} +23 -23
  8. package/dist/{Mermaid.client-SBYY364Q.cjs.map → Mermaid.client-ZP6OE46Z.cjs.map} +1 -1
  9. package/dist/{PlaygroundLayout-4DYBORAS.mjs → PlaygroundLayout-LMQTVXSP.mjs} +4 -4
  10. package/dist/{PlaygroundLayout-4DYBORAS.mjs.map → PlaygroundLayout-LMQTVXSP.mjs.map} +1 -1
  11. package/dist/{PlaygroundLayout-3YVSAEAF.cjs → PlaygroundLayout-XXVBU4WZ.cjs} +51 -51
  12. package/dist/{PlaygroundLayout-3YVSAEAF.cjs.map → PlaygroundLayout-XXVBU4WZ.cjs.map} +1 -1
  13. package/dist/{PrettyCode.client-PNPLXRH6.cjs → PrettyCode.client-2CLSV2VD.cjs} +5 -5
  14. package/dist/{PrettyCode.client-PNPLXRH6.cjs.map → PrettyCode.client-2CLSV2VD.cjs.map} +1 -1
  15. package/dist/{PrettyCode.client-LCBPPTIX.mjs → PrettyCode.client-Y2BVON7R.mjs} +3 -3
  16. package/dist/{PrettyCode.client-LCBPPTIX.mjs.map → PrettyCode.client-Y2BVON7R.mjs.map} +1 -1
  17. package/dist/{chunk-YFRNE2IR.mjs → chunk-6JTB2X72.mjs} +3 -3
  18. package/dist/{chunk-YFRNE2IR.mjs.map → chunk-6JTB2X72.mjs.map} +1 -1
  19. package/dist/{chunk-37ZI6VD4.mjs → chunk-CGILA3WO.mjs} +2 -2
  20. package/dist/{chunk-37ZI6VD4.mjs.map → chunk-CGILA3WO.mjs.map} +1 -1
  21. package/dist/{chunk-7DGDQVQW.cjs → chunk-FB5QBSI3.cjs} +46 -46
  22. package/dist/{chunk-7DGDQVQW.cjs.map → chunk-FB5QBSI3.cjs.map} +1 -1
  23. package/dist/{chunk-M6P2FU7L.mjs → chunk-L6UHASYQ.mjs} +4 -4
  24. package/dist/{chunk-M6P2FU7L.mjs.map → chunk-L6UHASYQ.mjs.map} +1 -1
  25. package/dist/{chunk-3HK2OE62.cjs → chunk-PRPG2T2E.cjs} +6 -6
  26. package/dist/{chunk-3HK2OE62.cjs.map → chunk-PRPG2T2E.cjs.map} +1 -1
  27. package/dist/{chunk-UQ3XI5MY.cjs → chunk-WGEGR3DF.cjs} +2 -2
  28. package/dist/{chunk-UQ3XI5MY.cjs.map → chunk-WGEGR3DF.cjs.map} +1 -1
  29. package/dist/index.cjs +227 -227
  30. package/dist/index.mjs +7 -7
  31. package/package.json +3 -3
  32. package/src/index.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tools/PrettyCode/PrettyCode.client.tsx"],"names":["__name","useResolvedTheme","themes","bgClass","jsx","Highlight","className","jsxs","CopyButton"],"mappings":"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","file":"PrettyCode.client-PNPLXRH6.cjs","sourcesContent":["'use client';\n\nimport { Highlight, Language, themes } from 'prism-react-renderer';\nimport React from 'react';\n\nimport { CopyButton } from '@djangocfg/ui-core/components';\n\nimport { useResolvedTheme } from '@djangocfg/ui-core/hooks';\n\ninterface PrettyCodeProps {\n data: string | object;\n language: Language;\n className?: string;\n mode?: 'dark' | 'light';\n inline?: boolean;\n customBg?: string; // Custom background class\n isCompact?: boolean; // Compact mode for smaller font sizes\n}\n\nconst PrettyCode = ({ data, language, className, mode, inline = false, customBg, isCompact = false }: PrettyCodeProps) => {\n const detectedTheme = useResolvedTheme();\n\n // Font size based on compact mode\n const fontSize = isCompact ? '0.75rem' : '0.875rem'; // 12px vs 14px\n\n // Use provided mode or fall back to detected theme\n const currentTheme = mode || detectedTheme;\n const isDarkMode = currentTheme === 'dark';\n\n // Select the Prism theme based on the current theme\n const prismTheme = isDarkMode ? themes.vsDark : themes.vsLight;\n\n // Convert form object to JSON string with proper formatting\n const contentJson = typeof data === 'string' ? data : JSON.stringify(data || {}, null, 2);\n \n // Handle empty content\n if (!contentJson || contentJson.trim() === '') {\n const bgClass = customBg || 'bg-muted dark:bg-zinc-900';\n return (\n <div className={`relative h-full ${bgClass} rounded-sm border border-border dark:border-zinc-700 ${className || ''}`}>\n <div className=\"h-full overflow-auto p-4\">\n <p className=\"text-muted-foreground text-sm italic\">No content available</p>\n </div>\n </div>\n );\n }\n\n // Get display name for language badge\n const getLanguageDisplayName = (lang: string): string => {\n switch (lang.toLowerCase()) {\n case 'bash':\n case 'shell':\n return 'Bash';\n case 'python':\n case 'py':\n return 'Python';\n case 'javascript':\n case 'js':\n return 'JavaScript';\n case 'typescript':\n case 'ts':\n return 'TypeScript';\n case 'json':\n return 'JSON';\n case 'yaml':\n case 'yml':\n return 'YAML';\n case 'html':\n return 'HTML';\n case 'css':\n return 'CSS';\n case 'sql':\n return 'SQL';\n case 'xml':\n return 'XML';\n case 'markdown':\n case 'md':\n return 'Markdown';\n case 'plaintext':\n case 'text':\n return 'Text';\n case 'mermaid':\n return 'Mermaid';\n default:\n return lang.charAt(0).toUpperCase() + lang.slice(1);\n }\n };\n\n // Normalize language for Prism - use only basic supported languages\n const normalizedLanguage = (() => {\n const lang = language.toLowerCase();\n \n // Try basic languages that are definitely supported\n switch (lang) {\n case 'javascript':\n case 'js':\n return 'javascript';\n case 'typescript':\n case 'ts':\n return 'typescript'; // Try TypeScript first\n case 'python':\n case 'py':\n return 'python';\n case 'json':\n return 'json';\n case 'css':\n return 'css';\n case 'html':\n return 'markup';\n case 'xml':\n return 'markup';\n case 'bash':\n case 'shell':\n return 'bash';\n case 'sql':\n return 'sql';\n case 'yaml':\n case 'yml':\n return 'yaml';\n case 'markdown':\n case 'md':\n return 'markdown';\n case 'mermaid':\n return 'text'; // Mermaid is handled separately in MarkdownMessage\n default:\n // For unknown languages, try to use the original name first\n // If it doesn't work, Prism will fallback to plain text\n return lang || 'text';\n }\n })();\n\n const displayLanguage = getLanguageDisplayName(language);\n\n if (inline) {\n const inlineBgClass = customBg || 'bg-muted dark:bg-[#1e1e1e]';\n return (\n <Highlight theme={prismTheme} code={contentJson} language={normalizedLanguage as Language}>\n {({ className, style, tokens, getTokenProps }) => (\n <code\n className={`${className} ${inlineBgClass} px-2 py-1 rounded ${isCompact ? 'text-xs' : 'text-sm'} font-mono inline-block`}\n style={{\n ...style,\n fontSize,\n fontFamily: 'monospace',\n }}\n >\n {tokens.map((line) => (\n line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))\n ))}\n </code>\n )}\n </Highlight>\n );\n }\n\n const bgClass = customBg || 'bg-muted dark:bg-[#1e1e1e]';\n \n return (\n <div className={`relative h-full ${bgClass} rounded-sm border border-border dark:border-zinc-800 dark:shadow-sm ${className || ''}`}>\n {/* Header with language badge and copy button */}\n <div className=\"absolute top-2 left-3 right-3 z-10 flex items-center justify-between\">\n <span className=\"inline-flex items-center px-2 py-1 rounded text-xs font-medium bg-background/80 text-muted-foreground border border-border/50 backdrop-blur-sm\">\n {displayLanguage}\n </span>\n <CopyButton\n value={contentJson}\n variant=\"ghost\"\n className=\"h-7 w-7 bg-background/80 border border-border/50 backdrop-blur-sm\"\n iconClassName=\"h-3.5 w-3.5\"\n title=\"Copy code\"\n />\n </div>\n \n <div className=\"h-full overflow-auto\">\n <Highlight theme={prismTheme} code={contentJson} language={normalizedLanguage as Language}>\n {({ className, style, tokens, getLineProps, getTokenProps }) => (\n <pre\n className={`${className}`}\n style={{\n ...style,\n margin: 0,\n padding: '2.5rem 1rem 1rem 1rem', // Extra top padding for language badge\n fontSize,\n lineHeight: isCompact ? 1.4 : 1.5,\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n }}\n >\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n </div>\n </div>\n );\n};\n\nexport default PrettyCode; "]}
1
+ {"version":3,"sources":["../src/tools/PrettyCode/PrettyCode.client.tsx"],"names":["__name","useResolvedTheme","themes","bgClass","jsx","Highlight","className","jsxs","CopyButton"],"mappings":"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","file":"PrettyCode.client-2CLSV2VD.cjs","sourcesContent":["'use client';\n\nimport { Highlight, Language, themes } from 'prism-react-renderer';\nimport React from 'react';\n\nimport { CopyButton } from '@djangocfg/ui-core/components';\n\nimport { useResolvedTheme } from '@djangocfg/ui-core/hooks';\n\ninterface PrettyCodeProps {\n data: string | object;\n language: Language;\n className?: string;\n mode?: 'dark' | 'light';\n inline?: boolean;\n customBg?: string; // Custom background class\n isCompact?: boolean; // Compact mode for smaller font sizes\n}\n\nconst PrettyCode = ({ data, language, className, mode, inline = false, customBg, isCompact = false }: PrettyCodeProps) => {\n const detectedTheme = useResolvedTheme();\n\n // Font size based on compact mode\n const fontSize = isCompact ? '0.75rem' : '0.875rem'; // 12px vs 14px\n\n // Use provided mode or fall back to detected theme\n const currentTheme = mode || detectedTheme;\n const isDarkMode = currentTheme === 'dark';\n\n // Select the Prism theme based on the current theme\n const prismTheme = isDarkMode ? themes.vsDark : themes.vsLight;\n\n // Convert form object to JSON string with proper formatting\n const contentJson = typeof data === 'string' ? data : JSON.stringify(data || {}, null, 2);\n \n // Handle empty content\n if (!contentJson || contentJson.trim() === '') {\n const bgClass = customBg || 'bg-muted dark:bg-zinc-900';\n return (\n <div className={`relative h-full ${bgClass} rounded-sm border border-border dark:border-zinc-700 ${className || ''}`}>\n <div className=\"h-full overflow-auto p-4\">\n <p className=\"text-muted-foreground text-sm italic\">No content available</p>\n </div>\n </div>\n );\n }\n\n // Get display name for language badge\n const getLanguageDisplayName = (lang: string): string => {\n switch (lang.toLowerCase()) {\n case 'bash':\n case 'shell':\n return 'Bash';\n case 'python':\n case 'py':\n return 'Python';\n case 'javascript':\n case 'js':\n return 'JavaScript';\n case 'typescript':\n case 'ts':\n return 'TypeScript';\n case 'json':\n return 'JSON';\n case 'yaml':\n case 'yml':\n return 'YAML';\n case 'html':\n return 'HTML';\n case 'css':\n return 'CSS';\n case 'sql':\n return 'SQL';\n case 'xml':\n return 'XML';\n case 'markdown':\n case 'md':\n return 'Markdown';\n case 'plaintext':\n case 'text':\n return 'Text';\n case 'mermaid':\n return 'Mermaid';\n default:\n return lang.charAt(0).toUpperCase() + lang.slice(1);\n }\n };\n\n // Normalize language for Prism - use only basic supported languages\n const normalizedLanguage = (() => {\n const lang = language.toLowerCase();\n \n // Try basic languages that are definitely supported\n switch (lang) {\n case 'javascript':\n case 'js':\n return 'javascript';\n case 'typescript':\n case 'ts':\n return 'typescript'; // Try TypeScript first\n case 'python':\n case 'py':\n return 'python';\n case 'json':\n return 'json';\n case 'css':\n return 'css';\n case 'html':\n return 'markup';\n case 'xml':\n return 'markup';\n case 'bash':\n case 'shell':\n return 'bash';\n case 'sql':\n return 'sql';\n case 'yaml':\n case 'yml':\n return 'yaml';\n case 'markdown':\n case 'md':\n return 'markdown';\n case 'mermaid':\n return 'text'; // Mermaid is handled separately in MarkdownMessage\n default:\n // For unknown languages, try to use the original name first\n // If it doesn't work, Prism will fallback to plain text\n return lang || 'text';\n }\n })();\n\n const displayLanguage = getLanguageDisplayName(language);\n\n if (inline) {\n const inlineBgClass = customBg || 'bg-muted dark:bg-[#1e1e1e]';\n return (\n <Highlight theme={prismTheme} code={contentJson} language={normalizedLanguage as Language}>\n {({ className, style, tokens, getTokenProps }) => (\n <code\n className={`${className} ${inlineBgClass} px-2 py-1 rounded ${isCompact ? 'text-xs' : 'text-sm'} font-mono inline-block`}\n style={{\n ...style,\n fontSize,\n fontFamily: 'monospace',\n }}\n >\n {tokens.map((line) => (\n line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))\n ))}\n </code>\n )}\n </Highlight>\n );\n }\n\n const bgClass = customBg || 'bg-muted dark:bg-[#1e1e1e]';\n \n return (\n <div className={`relative h-full ${bgClass} rounded-sm border border-border dark:border-zinc-800 dark:shadow-sm ${className || ''}`}>\n {/* Header with language badge and copy button */}\n <div className=\"absolute top-2 left-3 right-3 z-10 flex items-center justify-between\">\n <span className=\"inline-flex items-center px-2 py-1 rounded text-xs font-medium bg-background/80 text-muted-foreground border border-border/50 backdrop-blur-sm\">\n {displayLanguage}\n </span>\n <CopyButton\n value={contentJson}\n variant=\"ghost\"\n className=\"h-7 w-7 bg-background/80 border border-border/50 backdrop-blur-sm\"\n iconClassName=\"h-3.5 w-3.5\"\n title=\"Copy code\"\n />\n </div>\n \n <div className=\"h-full overflow-auto\">\n <Highlight theme={prismTheme} code={contentJson} language={normalizedLanguage as Language}>\n {({ className, style, tokens, getLineProps, getTokenProps }) => (\n <pre\n className={`${className}`}\n style={{\n ...style,\n margin: 0,\n padding: '2.5rem 1rem 1rem 1rem', // Extra top padding for language badge\n fontSize,\n lineHeight: isCompact ? 1.4 : 1.5,\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n }}\n >\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n </div>\n </div>\n );\n};\n\nexport default PrettyCode; "]}
@@ -1,4 +1,4 @@
1
- import { __name } from './chunk-37ZI6VD4.mjs';
1
+ import { __name } from './chunk-CGILA3WO.mjs';
2
2
  import { themes, Highlight } from 'prism-react-renderer';
3
3
  import { CopyButton } from '@djangocfg/ui-core/components';
4
4
  import { useResolvedTheme } from '@djangocfg/ui-core/hooks';
@@ -148,5 +148,5 @@ var PrettyCode = /* @__PURE__ */ __name(({ data, language, className, mode, inli
148
148
  var PrettyCode_client_default = PrettyCode;
149
149
 
150
150
  export { PrettyCode_client_default as default };
151
- //# sourceMappingURL=PrettyCode.client-LCBPPTIX.mjs.map
152
- //# sourceMappingURL=PrettyCode.client-LCBPPTIX.mjs.map
151
+ //# sourceMappingURL=PrettyCode.client-Y2BVON7R.mjs.map
152
+ //# sourceMappingURL=PrettyCode.client-Y2BVON7R.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tools/PrettyCode/PrettyCode.client.tsx"],"names":["bgClass","className"],"mappings":"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","file":"PrettyCode.client-LCBPPTIX.mjs","sourcesContent":["'use client';\n\nimport { Highlight, Language, themes } from 'prism-react-renderer';\nimport React from 'react';\n\nimport { CopyButton } from '@djangocfg/ui-core/components';\n\nimport { useResolvedTheme } from '@djangocfg/ui-core/hooks';\n\ninterface PrettyCodeProps {\n data: string | object;\n language: Language;\n className?: string;\n mode?: 'dark' | 'light';\n inline?: boolean;\n customBg?: string; // Custom background class\n isCompact?: boolean; // Compact mode for smaller font sizes\n}\n\nconst PrettyCode = ({ data, language, className, mode, inline = false, customBg, isCompact = false }: PrettyCodeProps) => {\n const detectedTheme = useResolvedTheme();\n\n // Font size based on compact mode\n const fontSize = isCompact ? '0.75rem' : '0.875rem'; // 12px vs 14px\n\n // Use provided mode or fall back to detected theme\n const currentTheme = mode || detectedTheme;\n const isDarkMode = currentTheme === 'dark';\n\n // Select the Prism theme based on the current theme\n const prismTheme = isDarkMode ? themes.vsDark : themes.vsLight;\n\n // Convert form object to JSON string with proper formatting\n const contentJson = typeof data === 'string' ? data : JSON.stringify(data || {}, null, 2);\n \n // Handle empty content\n if (!contentJson || contentJson.trim() === '') {\n const bgClass = customBg || 'bg-muted dark:bg-zinc-900';\n return (\n <div className={`relative h-full ${bgClass} rounded-sm border border-border dark:border-zinc-700 ${className || ''}`}>\n <div className=\"h-full overflow-auto p-4\">\n <p className=\"text-muted-foreground text-sm italic\">No content available</p>\n </div>\n </div>\n );\n }\n\n // Get display name for language badge\n const getLanguageDisplayName = (lang: string): string => {\n switch (lang.toLowerCase()) {\n case 'bash':\n case 'shell':\n return 'Bash';\n case 'python':\n case 'py':\n return 'Python';\n case 'javascript':\n case 'js':\n return 'JavaScript';\n case 'typescript':\n case 'ts':\n return 'TypeScript';\n case 'json':\n return 'JSON';\n case 'yaml':\n case 'yml':\n return 'YAML';\n case 'html':\n return 'HTML';\n case 'css':\n return 'CSS';\n case 'sql':\n return 'SQL';\n case 'xml':\n return 'XML';\n case 'markdown':\n case 'md':\n return 'Markdown';\n case 'plaintext':\n case 'text':\n return 'Text';\n case 'mermaid':\n return 'Mermaid';\n default:\n return lang.charAt(0).toUpperCase() + lang.slice(1);\n }\n };\n\n // Normalize language for Prism - use only basic supported languages\n const normalizedLanguage = (() => {\n const lang = language.toLowerCase();\n \n // Try basic languages that are definitely supported\n switch (lang) {\n case 'javascript':\n case 'js':\n return 'javascript';\n case 'typescript':\n case 'ts':\n return 'typescript'; // Try TypeScript first\n case 'python':\n case 'py':\n return 'python';\n case 'json':\n return 'json';\n case 'css':\n return 'css';\n case 'html':\n return 'markup';\n case 'xml':\n return 'markup';\n case 'bash':\n case 'shell':\n return 'bash';\n case 'sql':\n return 'sql';\n case 'yaml':\n case 'yml':\n return 'yaml';\n case 'markdown':\n case 'md':\n return 'markdown';\n case 'mermaid':\n return 'text'; // Mermaid is handled separately in MarkdownMessage\n default:\n // For unknown languages, try to use the original name first\n // If it doesn't work, Prism will fallback to plain text\n return lang || 'text';\n }\n })();\n\n const displayLanguage = getLanguageDisplayName(language);\n\n if (inline) {\n const inlineBgClass = customBg || 'bg-muted dark:bg-[#1e1e1e]';\n return (\n <Highlight theme={prismTheme} code={contentJson} language={normalizedLanguage as Language}>\n {({ className, style, tokens, getTokenProps }) => (\n <code\n className={`${className} ${inlineBgClass} px-2 py-1 rounded ${isCompact ? 'text-xs' : 'text-sm'} font-mono inline-block`}\n style={{\n ...style,\n fontSize,\n fontFamily: 'monospace',\n }}\n >\n {tokens.map((line) => (\n line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))\n ))}\n </code>\n )}\n </Highlight>\n );\n }\n\n const bgClass = customBg || 'bg-muted dark:bg-[#1e1e1e]';\n \n return (\n <div className={`relative h-full ${bgClass} rounded-sm border border-border dark:border-zinc-800 dark:shadow-sm ${className || ''}`}>\n {/* Header with language badge and copy button */}\n <div className=\"absolute top-2 left-3 right-3 z-10 flex items-center justify-between\">\n <span className=\"inline-flex items-center px-2 py-1 rounded text-xs font-medium bg-background/80 text-muted-foreground border border-border/50 backdrop-blur-sm\">\n {displayLanguage}\n </span>\n <CopyButton\n value={contentJson}\n variant=\"ghost\"\n className=\"h-7 w-7 bg-background/80 border border-border/50 backdrop-blur-sm\"\n iconClassName=\"h-3.5 w-3.5\"\n title=\"Copy code\"\n />\n </div>\n \n <div className=\"h-full overflow-auto\">\n <Highlight theme={prismTheme} code={contentJson} language={normalizedLanguage as Language}>\n {({ className, style, tokens, getLineProps, getTokenProps }) => (\n <pre\n className={`${className}`}\n style={{\n ...style,\n margin: 0,\n padding: '2.5rem 1rem 1rem 1rem', // Extra top padding for language badge\n fontSize,\n lineHeight: isCompact ? 1.4 : 1.5,\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n }}\n >\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n </div>\n </div>\n );\n};\n\nexport default PrettyCode; "]}
1
+ {"version":3,"sources":["../src/tools/PrettyCode/PrettyCode.client.tsx"],"names":["bgClass","className"],"mappings":"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","file":"PrettyCode.client-Y2BVON7R.mjs","sourcesContent":["'use client';\n\nimport { Highlight, Language, themes } from 'prism-react-renderer';\nimport React from 'react';\n\nimport { CopyButton } from '@djangocfg/ui-core/components';\n\nimport { useResolvedTheme } from '@djangocfg/ui-core/hooks';\n\ninterface PrettyCodeProps {\n data: string | object;\n language: Language;\n className?: string;\n mode?: 'dark' | 'light';\n inline?: boolean;\n customBg?: string; // Custom background class\n isCompact?: boolean; // Compact mode for smaller font sizes\n}\n\nconst PrettyCode = ({ data, language, className, mode, inline = false, customBg, isCompact = false }: PrettyCodeProps) => {\n const detectedTheme = useResolvedTheme();\n\n // Font size based on compact mode\n const fontSize = isCompact ? '0.75rem' : '0.875rem'; // 12px vs 14px\n\n // Use provided mode or fall back to detected theme\n const currentTheme = mode || detectedTheme;\n const isDarkMode = currentTheme === 'dark';\n\n // Select the Prism theme based on the current theme\n const prismTheme = isDarkMode ? themes.vsDark : themes.vsLight;\n\n // Convert form object to JSON string with proper formatting\n const contentJson = typeof data === 'string' ? data : JSON.stringify(data || {}, null, 2);\n \n // Handle empty content\n if (!contentJson || contentJson.trim() === '') {\n const bgClass = customBg || 'bg-muted dark:bg-zinc-900';\n return (\n <div className={`relative h-full ${bgClass} rounded-sm border border-border dark:border-zinc-700 ${className || ''}`}>\n <div className=\"h-full overflow-auto p-4\">\n <p className=\"text-muted-foreground text-sm italic\">No content available</p>\n </div>\n </div>\n );\n }\n\n // Get display name for language badge\n const getLanguageDisplayName = (lang: string): string => {\n switch (lang.toLowerCase()) {\n case 'bash':\n case 'shell':\n return 'Bash';\n case 'python':\n case 'py':\n return 'Python';\n case 'javascript':\n case 'js':\n return 'JavaScript';\n case 'typescript':\n case 'ts':\n return 'TypeScript';\n case 'json':\n return 'JSON';\n case 'yaml':\n case 'yml':\n return 'YAML';\n case 'html':\n return 'HTML';\n case 'css':\n return 'CSS';\n case 'sql':\n return 'SQL';\n case 'xml':\n return 'XML';\n case 'markdown':\n case 'md':\n return 'Markdown';\n case 'plaintext':\n case 'text':\n return 'Text';\n case 'mermaid':\n return 'Mermaid';\n default:\n return lang.charAt(0).toUpperCase() + lang.slice(1);\n }\n };\n\n // Normalize language for Prism - use only basic supported languages\n const normalizedLanguage = (() => {\n const lang = language.toLowerCase();\n \n // Try basic languages that are definitely supported\n switch (lang) {\n case 'javascript':\n case 'js':\n return 'javascript';\n case 'typescript':\n case 'ts':\n return 'typescript'; // Try TypeScript first\n case 'python':\n case 'py':\n return 'python';\n case 'json':\n return 'json';\n case 'css':\n return 'css';\n case 'html':\n return 'markup';\n case 'xml':\n return 'markup';\n case 'bash':\n case 'shell':\n return 'bash';\n case 'sql':\n return 'sql';\n case 'yaml':\n case 'yml':\n return 'yaml';\n case 'markdown':\n case 'md':\n return 'markdown';\n case 'mermaid':\n return 'text'; // Mermaid is handled separately in MarkdownMessage\n default:\n // For unknown languages, try to use the original name first\n // If it doesn't work, Prism will fallback to plain text\n return lang || 'text';\n }\n })();\n\n const displayLanguage = getLanguageDisplayName(language);\n\n if (inline) {\n const inlineBgClass = customBg || 'bg-muted dark:bg-[#1e1e1e]';\n return (\n <Highlight theme={prismTheme} code={contentJson} language={normalizedLanguage as Language}>\n {({ className, style, tokens, getTokenProps }) => (\n <code\n className={`${className} ${inlineBgClass} px-2 py-1 rounded ${isCompact ? 'text-xs' : 'text-sm'} font-mono inline-block`}\n style={{\n ...style,\n fontSize,\n fontFamily: 'monospace',\n }}\n >\n {tokens.map((line) => (\n line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))\n ))}\n </code>\n )}\n </Highlight>\n );\n }\n\n const bgClass = customBg || 'bg-muted dark:bg-[#1e1e1e]';\n \n return (\n <div className={`relative h-full ${bgClass} rounded-sm border border-border dark:border-zinc-800 dark:shadow-sm ${className || ''}`}>\n {/* Header with language badge and copy button */}\n <div className=\"absolute top-2 left-3 right-3 z-10 flex items-center justify-between\">\n <span className=\"inline-flex items-center px-2 py-1 rounded text-xs font-medium bg-background/80 text-muted-foreground border border-border/50 backdrop-blur-sm\">\n {displayLanguage}\n </span>\n <CopyButton\n value={contentJson}\n variant=\"ghost\"\n className=\"h-7 w-7 bg-background/80 border border-border/50 backdrop-blur-sm\"\n iconClassName=\"h-3.5 w-3.5\"\n title=\"Copy code\"\n />\n </div>\n \n <div className=\"h-full overflow-auto\">\n <Highlight theme={prismTheme} code={contentJson} language={normalizedLanguage as Language}>\n {({ className, style, tokens, getLineProps, getTokenProps }) => (\n <pre\n className={`${className}`}\n style={{\n ...style,\n margin: 0,\n padding: '2.5rem 1rem 1rem 1rem', // Extra top padding for language badge\n fontSize,\n lineHeight: isCompact ? 1.4 : 1.5,\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n }}\n >\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n </div>\n </div>\n );\n};\n\nexport default PrettyCode; "]}
@@ -1,4 +1,4 @@
1
- import { __name } from './chunk-37ZI6VD4.mjs';
1
+ import { __name } from './chunk-CGILA3WO.mjs';
2
2
  import { useState, useRef, useEffect } from 'react';
3
3
 
4
4
  var animationCache = /* @__PURE__ */ new Map();
@@ -75,5 +75,5 @@ function useLottie(options) {
75
75
  __name(useLottie, "useLottie");
76
76
 
77
77
  export { useLottie };
78
- //# sourceMappingURL=chunk-YFRNE2IR.mjs.map
79
- //# sourceMappingURL=chunk-YFRNE2IR.mjs.map
78
+ //# sourceMappingURL=chunk-6JTB2X72.mjs.map
79
+ //# sourceMappingURL=chunk-6JTB2X72.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tools/LottiePlayer/useLottie.ts"],"names":[],"mappings":"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","file":"chunk-YFRNE2IR.mjs","sourcesContent":["/**\n * useLottie Hook\n *\n * Hook for loading and managing Lottie animation data\n */\n\n'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { LottieAnimationData } from './types';\n\nexport interface UseLottieOptions {\n /**\n * Animation data (JSON object) or URL to load from\n */\n src: string | object;\n\n /**\n * Enable caching of loaded animations\n * @default true\n */\n cache?: boolean;\n}\n\nexport interface UseLottieReturn {\n /**\n * Loaded animation data\n */\n animationData: object | null;\n\n /**\n * Loading state\n */\n isLoading: boolean;\n\n /**\n * Error state\n */\n error: Error | null;\n\n /**\n * Retry loading the animation\n */\n retry: () => void;\n}\n\n// Simple in-memory cache for loaded animations\nconst animationCache = new Map<string, object>();\n\n/**\n * Hook for loading Lottie animations from URLs or objects\n *\n * Features:\n * - Loads animations from URLs or accepts animation objects directly\n * - Caching support to prevent re-fetching the same animation\n * - Error handling with retry capability\n * - Loading states\n *\n * Usage:\n * ```tsx\n * const { animationData, isLoading, error, retry } = useLottie({\n * src: 'https://example.com/animation.json'\n * });\n *\n * if (isLoading) return <div>Loading...</div>;\n * if (error) return <div>Error: {error.message} <button onClick={retry}>Retry</button></div>;\n * if (!animationData) return null;\n *\n * return <LottiePlayer animationData={animationData} />;\n * ```\n */\nexport function useLottie(options: UseLottieOptions): UseLottieReturn {\n const { src, cache = true } = options;\n\n const [animationData, setAnimationData] = useState<object | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [retryCount, setRetryCount] = useState(0);\n\n // Track if component is mounted to prevent state updates on unmounted component\n const isMountedRef = useRef(true);\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n // If src is already an object, use it directly\n if (typeof src === 'object' && src !== null) {\n setAnimationData(src);\n setIsLoading(false);\n setError(null);\n return;\n }\n\n // If src is a string (URL), fetch it\n if (typeof src === 'string') {\n const loadAnimation = async () => {\n // Check cache first\n if (cache && animationCache.has(src)) {\n if (isMountedRef.current) {\n setAnimationData(animationCache.get(src)!);\n setIsLoading(false);\n setError(null);\n }\n return;\n }\n\n // Load from URL\n if (isMountedRef.current) {\n setIsLoading(true);\n setError(null);\n }\n\n try {\n const response = await fetch(src);\n\n if (!response.ok) {\n throw new Error(`Failed to load animation: ${response.status} ${response.statusText}`);\n }\n\n const data = await response.json();\n\n // Validate that it's a valid Lottie animation\n if (!data || typeof data !== 'object' || !data.v || !data.layers) {\n throw new Error('Invalid Lottie animation data');\n }\n\n // Cache the loaded animation\n if (cache) {\n animationCache.set(src, data);\n }\n\n if (isMountedRef.current) {\n setAnimationData(data);\n setIsLoading(false);\n }\n } catch (err) {\n if (isMountedRef.current) {\n setError(err instanceof Error ? err : new Error('Failed to load animation'));\n setIsLoading(false);\n }\n }\n };\n\n loadAnimation();\n }\n }, [src, cache, retryCount]);\n\n const retry = () => {\n setRetryCount((prev) => prev + 1);\n };\n\n return {\n animationData,\n isLoading,\n error,\n retry,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/tools/LottiePlayer/useLottie.ts"],"names":[],"mappings":"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","file":"chunk-6JTB2X72.mjs","sourcesContent":["/**\n * useLottie Hook\n *\n * Hook for loading and managing Lottie animation data\n */\n\n'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { LottieAnimationData } from './types';\n\nexport interface UseLottieOptions {\n /**\n * Animation data (JSON object) or URL to load from\n */\n src: string | object;\n\n /**\n * Enable caching of loaded animations\n * @default true\n */\n cache?: boolean;\n}\n\nexport interface UseLottieReturn {\n /**\n * Loaded animation data\n */\n animationData: object | null;\n\n /**\n * Loading state\n */\n isLoading: boolean;\n\n /**\n * Error state\n */\n error: Error | null;\n\n /**\n * Retry loading the animation\n */\n retry: () => void;\n}\n\n// Simple in-memory cache for loaded animations\nconst animationCache = new Map<string, object>();\n\n/**\n * Hook for loading Lottie animations from URLs or objects\n *\n * Features:\n * - Loads animations from URLs or accepts animation objects directly\n * - Caching support to prevent re-fetching the same animation\n * - Error handling with retry capability\n * - Loading states\n *\n * Usage:\n * ```tsx\n * const { animationData, isLoading, error, retry } = useLottie({\n * src: 'https://example.com/animation.json'\n * });\n *\n * if (isLoading) return <div>Loading...</div>;\n * if (error) return <div>Error: {error.message} <button onClick={retry}>Retry</button></div>;\n * if (!animationData) return null;\n *\n * return <LottiePlayer animationData={animationData} />;\n * ```\n */\nexport function useLottie(options: UseLottieOptions): UseLottieReturn {\n const { src, cache = true } = options;\n\n const [animationData, setAnimationData] = useState<object | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [retryCount, setRetryCount] = useState(0);\n\n // Track if component is mounted to prevent state updates on unmounted component\n const isMountedRef = useRef(true);\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n // If src is already an object, use it directly\n if (typeof src === 'object' && src !== null) {\n setAnimationData(src);\n setIsLoading(false);\n setError(null);\n return;\n }\n\n // If src is a string (URL), fetch it\n if (typeof src === 'string') {\n const loadAnimation = async () => {\n // Check cache first\n if (cache && animationCache.has(src)) {\n if (isMountedRef.current) {\n setAnimationData(animationCache.get(src)!);\n setIsLoading(false);\n setError(null);\n }\n return;\n }\n\n // Load from URL\n if (isMountedRef.current) {\n setIsLoading(true);\n setError(null);\n }\n\n try {\n const response = await fetch(src);\n\n if (!response.ok) {\n throw new Error(`Failed to load animation: ${response.status} ${response.statusText}`);\n }\n\n const data = await response.json();\n\n // Validate that it's a valid Lottie animation\n if (!data || typeof data !== 'object' || !data.v || !data.layers) {\n throw new Error('Invalid Lottie animation data');\n }\n\n // Cache the loaded animation\n if (cache) {\n animationCache.set(src, data);\n }\n\n if (isMountedRef.current) {\n setAnimationData(data);\n setIsLoading(false);\n }\n } catch (err) {\n if (isMountedRef.current) {\n setError(err instanceof Error ? err : new Error('Failed to load animation'));\n setIsLoading(false);\n }\n }\n };\n\n loadAnimation();\n }\n }, [src, cache, retryCount]);\n\n const retry = () => {\n setRetryCount((prev) => prev + 1);\n };\n\n return {\n animationData,\n isLoading,\n error,\n retry,\n };\n}\n"]}
@@ -8,5 +8,5 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
8
8
  });
9
9
 
10
10
  export { __name, __require };
11
- //# sourceMappingURL=chunk-37ZI6VD4.mjs.map
12
- //# sourceMappingURL=chunk-37ZI6VD4.mjs.map
11
+ //# sourceMappingURL=chunk-CGILA3WO.mjs.map
12
+ //# sourceMappingURL=chunk-CGILA3WO.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-37ZI6VD4.mjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-CGILA3WO.mjs"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkUQ3XI5MY_cjs = require('./chunk-UQ3XI5MY.cjs');
3
+ var chunkWGEGR3DF_cjs = require('./chunk-WGEGR3DF.cjs');
4
4
  var lucideReact = require('lucide-react');
5
5
  var React3 = require('react');
6
6
  var reactJsonTree = require('react-json-tree');
@@ -13,7 +13,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
13
  var React3__default = /*#__PURE__*/_interopDefault(React3);
14
14
  var consola__default = /*#__PURE__*/_interopDefault(consola);
15
15
 
16
- var JsonTreeComponent = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(({ title, data, config = {}, jsonTreeProps = {} }) => {
16
+ var JsonTreeComponent = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({ title, data, config = {}, jsonTreeProps = {} }) => {
17
17
  const [expandAll, setExpandAll] = React3.useState(null);
18
18
  const [renderKey, setRenderKey] = React3.useState(0);
19
19
  const {
@@ -63,7 +63,7 @@ var JsonTreeComponent = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(({ title, data,
63
63
  base0F: "#f43f5e"
64
64
  // Pink - for deprecations
65
65
  };
66
- const shouldExpandNodeInitially = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((keyPath, nodeData, level) => {
66
+ const shouldExpandNodeInitially = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((keyPath, nodeData, level) => {
67
67
  if (expandAll === true) return true;
68
68
  if (expandAll === false) return false;
69
69
  if (level <= maxAutoExpandDepth) return true;
@@ -93,20 +93,20 @@ var JsonTreeComponent = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(({ title, data,
93
93
  }
94
94
  return null;
95
95
  } : () => null;
96
- const postprocessValue = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((value) => {
96
+ const postprocessValue = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((value) => {
97
97
  if (typeof value === "string" && value.length > maxStringLength) {
98
98
  return value.substring(0, maxStringLength) + "... (truncated)";
99
99
  }
100
100
  return value;
101
101
  }, "postprocessValue");
102
- const isCustomNode = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((value) => {
102
+ const isCustomNode = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((value) => {
103
103
  if (typeof value === "string" && (value.startsWith("http://") || value.startsWith("https://"))) {
104
104
  return true;
105
105
  }
106
106
  return false;
107
107
  }, "isCustomNode");
108
108
  const jsonString = JSON.stringify(data, null, 2);
109
- const handleDownload = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(() => {
109
+ const handleDownload = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
110
110
  const blob = new Blob([jsonString], { type: "application/json" });
111
111
  const url = URL.createObjectURL(blob);
112
112
  const a = document.createElement("a");
@@ -189,12 +189,12 @@ var JsonTreeComponent = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(({ title, data,
189
189
  ] });
190
190
  }, "JsonTreeComponent");
191
191
  var JsonTree_default = JsonTreeComponent;
192
- var PrettyCodeClient = React3.lazy(() => import('./PrettyCode.client-PNPLXRH6.cjs'));
193
- var LoadingFallback = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(() => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative rounded-sm border border-border overflow-hidden bg-muted dark:bg-zinc-900", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
192
+ var PrettyCodeClient = React3.lazy(() => import('./PrettyCode.client-2CLSV2VD.cjs'));
193
+ var LoadingFallback = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative rounded-sm border border-border overflow-hidden bg-muted dark:bg-zinc-900", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
194
194
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "animate-pulse h-4 w-4 rounded-full bg-muted-foreground/20" }),
195
195
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: "Loading code..." })
196
196
  ] }) }) }), "LoadingFallback");
197
- var PrettyCode = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((props) => {
197
+ var PrettyCode = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((props) => {
198
198
  return /* @__PURE__ */ jsxRuntime.jsx(React3.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(LoadingFallback, {}), children: /* @__PURE__ */ jsxRuntime.jsx(PrettyCodeClient, { ...props }) });
199
199
  }, "PrettyCode");
200
200
  var PrettyCode_default = PrettyCode;
@@ -203,7 +203,7 @@ var PrettyCode_default = PrettyCode;
203
203
  function findApiKeyById(apiKeys, keyId) {
204
204
  return apiKeys.find((key) => key.id === keyId) || null;
205
205
  }
206
- chunkUQ3XI5MY_cjs.__name(findApiKeyById, "findApiKeyById");
206
+ chunkWGEGR3DF_cjs.__name(findApiKeyById, "findApiKeyById");
207
207
 
208
208
  // src/tools/OpenapiViewer/utils/versionManager.ts
209
209
  var API_VERSIONS = [
@@ -214,21 +214,21 @@ var API_VERSIONS = [
214
214
  isDefault: true
215
215
  }
216
216
  ];
217
- var detectEndpointVersion = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((path) => {
217
+ var detectEndpointVersion = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((path) => {
218
218
  const versionMatch = path.match(/\/api\/[^/]+\/(v\d+)\//);
219
219
  if (versionMatch && versionMatch[1]) {
220
220
  return versionMatch[1];
221
221
  }
222
222
  return "v1";
223
223
  }, "detectEndpointVersion");
224
- var isEndpointInVersion = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((endpoint, version) => {
224
+ var isEndpointInVersion = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((endpoint, version) => {
225
225
  const endpointVersion = detectEndpointVersion(endpoint.path);
226
226
  return endpointVersion === version;
227
227
  }, "isEndpointInVersion");
228
- var filterEndpointsByVersion = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((endpoints, version) => {
228
+ var filterEndpointsByVersion = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((endpoints, version) => {
229
229
  return endpoints.filter((endpoint) => isEndpointInVersion(endpoint, version));
230
230
  }, "filterEndpointsByVersion");
231
- var deduplicateEndpoints = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((endpoints, preferredVersion) => {
231
+ var deduplicateEndpoints = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((endpoints, preferredVersion) => {
232
232
  const endpointMap = /* @__PURE__ */ new Map();
233
233
  const groupedEndpoints = /* @__PURE__ */ new Map();
234
234
  endpoints.forEach((endpoint) => {
@@ -252,13 +252,13 @@ var deduplicateEndpoints = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((endpoints,
252
252
  });
253
253
  return Array.from(endpointMap.values());
254
254
  }, "deduplicateEndpoints");
255
- var normalizeEndpointPath = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((path) => {
255
+ var normalizeEndpointPath = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((path) => {
256
256
  return path.replace(/\/v\d+\//, "/");
257
257
  }, "normalizeEndpointPath");
258
- var getVersionById = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((versionId) => {
258
+ var getVersionById = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((versionId) => {
259
259
  return API_VERSIONS.find((v) => v.id === versionId);
260
260
  }, "getVersionById");
261
- var getDefaultVersion = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(() => {
261
+ var getDefaultVersion = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
262
262
  const defaultVersion = API_VERSIONS.find((v) => v.isDefault);
263
263
  if (defaultVersion) {
264
264
  return defaultVersion;
@@ -268,7 +268,7 @@ var getDefaultVersion = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(() => {
268
268
  }
269
269
  throw new Error("No API versions defined");
270
270
  }, "getDefaultVersion");
271
- var getVersionStats = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((endpoints) => {
271
+ var getVersionStats = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((endpoints) => {
272
272
  const stats = {};
273
273
  API_VERSIONS.forEach((version) => {
274
274
  stats[version.id] = filterEndpointsByVersion(endpoints, version.id).length;
@@ -292,14 +292,14 @@ var HTTP_STATUS_COLORS = {
292
292
  };
293
293
 
294
294
  // src/tools/OpenapiViewer/utils/formatters.ts
295
- var getMethodColor = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((method) => {
295
+ var getMethodColor = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((method) => {
296
296
  return HTTP_METHOD_COLORS[method.toUpperCase()] || "default";
297
297
  }, "getMethodColor");
298
- var getStatusColor = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((status) => {
298
+ var getStatusColor = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((status) => {
299
299
  const firstDigit = Math.floor(status / 100).toString();
300
300
  return HTTP_STATUS_COLORS[firstDigit] || "default";
301
301
  }, "getStatusColor");
302
- var isValidJson = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((str) => {
302
+ var isValidJson = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((str) => {
303
303
  if (!str || typeof str !== "string") return false;
304
304
  try {
305
305
  JSON.parse(str);
@@ -308,7 +308,7 @@ var isValidJson = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((str) => {
308
308
  return false;
309
309
  }
310
310
  }, "isValidJson");
311
- var parseRequestHeaders = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((headersString) => {
311
+ var parseRequestHeaders = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((headersString) => {
312
312
  if (!headersString || typeof headersString !== "string") {
313
313
  return { "Content-Type": "application/json" };
314
314
  }
@@ -319,7 +319,7 @@ var parseRequestHeaders = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((headersStrin
319
319
  return { "Content-Type": "application/json" };
320
320
  }
321
321
  }, "parseRequestHeaders");
322
- var substituteUrlParameters = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((url, parameters) => {
322
+ var substituteUrlParameters = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((url, parameters) => {
323
323
  let substitutedUrl = url;
324
324
  Object.entries(parameters).forEach(([key, value]) => {
325
325
  if (value && value.trim() !== "") {
@@ -334,7 +334,7 @@ var substituteUrlParameters = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((url, par
334
334
  });
335
335
  return substitutedUrl;
336
336
  }, "substituteUrlParameters");
337
- var createInitialState = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(() => ({
337
+ var createInitialState = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => ({
338
338
  // Step management
339
339
  currentStep: "endpoints",
340
340
  steps: ["endpoints", "request", "response"],
@@ -358,18 +358,18 @@ var createInitialState = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(() => ({
358
358
  sidebarOpen: false
359
359
  }), "createInitialState");
360
360
  var PlaygroundContext = React3.createContext(void 0);
361
- var usePlaygroundContext = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(() => {
361
+ var usePlaygroundContext = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
362
362
  const context = React3.useContext(PlaygroundContext);
363
363
  if (!context) {
364
364
  throw new Error("usePlaygroundContext must be used within a PlaygroundProvider");
365
365
  }
366
366
  return context;
367
367
  }, "usePlaygroundContext");
368
- var PlaygroundProvider = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(({ children, config }) => {
368
+ var PlaygroundProvider = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({ children, config }) => {
369
369
  const [state, setState] = React3.useState(() => createInitialState());
370
370
  const apiKeys = React3__default.default.useMemo(() => [], []);
371
371
  const isLoadingApiKeys = false;
372
- const updateState = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((updates) => {
372
+ const updateState = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((updates) => {
373
373
  setState((prev) => ({ ...prev, ...updates }));
374
374
  }, "updateState");
375
375
  React3.useEffect(() => {
@@ -416,22 +416,22 @@ var PlaygroundProvider = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(({ children, c
416
416
  }
417
417
  }
418
418
  }, [state.parameters, state.selectedEndpoint, state.requestUrl]);
419
- const setCurrentStep = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((step) => {
419
+ const setCurrentStep = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((step) => {
420
420
  updateState({ currentStep: step });
421
421
  }, "setCurrentStep");
422
- const goToNextStep = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(() => {
422
+ const goToNextStep = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
423
423
  const currentIndex = state.steps.indexOf(state.currentStep);
424
424
  if (currentIndex < state.steps.length - 1) {
425
425
  updateState({ currentStep: state.steps[currentIndex + 1] });
426
426
  }
427
427
  }, "goToNextStep");
428
- const goToPreviousStep = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(() => {
428
+ const goToPreviousStep = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => {
429
429
  const currentIndex = state.steps.indexOf(state.currentStep);
430
430
  if (currentIndex > 0) {
431
431
  updateState({ currentStep: state.steps[currentIndex - 1] });
432
432
  }
433
433
  }, "goToPreviousStep");
434
- const setSelectedEndpoint = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((endpoint) => {
434
+ const setSelectedEndpoint = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((endpoint) => {
435
435
  if (endpoint) {
436
436
  updateState({
437
437
  selectedEndpoint: endpoint,
@@ -445,43 +445,43 @@ var PlaygroundProvider = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name(({ children, c
445
445
  updateState({ selectedEndpoint: endpoint });
446
446
  }
447
447
  }, "setSelectedEndpoint");
448
- const setSelectedCategory = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((category) => {
448
+ const setSelectedCategory = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((category) => {
449
449
  updateState({ selectedCategory: category });
450
450
  }, "setSelectedCategory");
451
- const setSearchTerm = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((term) => {
451
+ const setSearchTerm = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((term) => {
452
452
  updateState({ searchTerm: term });
453
453
  }, "setSearchTerm");
454
- const setSelectedVersion = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((version) => {
454
+ const setSelectedVersion = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((version) => {
455
455
  updateState({ selectedVersion: version });
456
456
  }, "setSelectedVersion");
457
- const setRequestUrl = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((url) => {
457
+ const setRequestUrl = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((url) => {
458
458
  updateState({ requestUrl: url });
459
459
  }, "setRequestUrl");
460
- const setRequestMethod = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((method) => {
460
+ const setRequestMethod = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((method) => {
461
461
  updateState({ requestMethod: method });
462
462
  }, "setRequestMethod");
463
- const setRequestHeaders = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((headers) => {
463
+ const setRequestHeaders = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((headers) => {
464
464
  updateState({ requestHeaders: headers });
465
465
  }, "setRequestHeaders");
466
- const setRequestBody = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((body) => {
466
+ const setRequestBody = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((body) => {
467
467
  updateState({ requestBody: body });
468
468
  }, "setRequestBody");
469
- const setSelectedApiKey = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((apiKeyId) => {
469
+ const setSelectedApiKey = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((apiKeyId) => {
470
470
  updateState({ selectedApiKey: apiKeyId });
471
471
  }, "setSelectedApiKey");
472
- const setManualApiToken = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((manualApiToken) => {
472
+ const setManualApiToken = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((manualApiToken) => {
473
473
  updateState({ manualApiToken });
474
474
  }, "setManualApiToken");
475
- const setParameters = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((parameters) => {
475
+ const setParameters = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((parameters) => {
476
476
  updateState({ parameters });
477
477
  }, "setParameters");
478
- const setResponse = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((response) => {
478
+ const setResponse = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((response) => {
479
479
  updateState({ response });
480
480
  }, "setResponse");
481
- const setLoading = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((loading) => {
481
+ const setLoading = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((loading) => {
482
482
  updateState({ loading });
483
483
  }, "setLoading");
484
- const setSidebarOpen = /* @__PURE__ */ chunkUQ3XI5MY_cjs.__name((sidebarOpen) => {
484
+ const setSidebarOpen = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name((sidebarOpen) => {
485
485
  updateState({ sidebarOpen });
486
486
  }, "setSidebarOpen");
487
487
  const clearAll = React3.useCallback(() => {
@@ -587,5 +587,5 @@ exports.getVersionStats = getVersionStats;
587
587
  exports.isValidJson = isValidJson;
588
588
  exports.parseRequestHeaders = parseRequestHeaders;
589
589
  exports.usePlaygroundContext = usePlaygroundContext;
590
- //# sourceMappingURL=chunk-7DGDQVQW.cjs.map
591
- //# sourceMappingURL=chunk-7DGDQVQW.cjs.map
590
+ //# sourceMappingURL=chunk-FB5QBSI3.cjs.map
591
+ //# sourceMappingURL=chunk-FB5QBSI3.cjs.map