@lax-wp/design-system 0.13.41 → 0.13.42

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.
@@ -3,5 +3,5 @@
3
3
  `),e=e.split(`
4
4
  `).map(n=>n.trimEnd()).join(`
5
5
  `),e=e.replace(/\n+$/,"")+`
6
- `),navigator?.clipboard?.writeText(e).then(()=>{}).catch(n=>{const r=n;A.toast.error(r?.message||L.systemMessages.copyFailure("Python Code"),{toastId:L.systemMessages.copyFailure("Python Code")})})}catch(e){const n=e;A.toast.error(n?.message||L.systemMessages.copyFailure("Python Code"),{toastId:L.systemMessages.copyFailure("Python Code")})}else if(i==="json")try{const e=JSON.parse(o),n=JSON.stringify(e,null,4);navigator?.clipboard?.writeText(n)}catch(e){const n=e;A.toast.error(n?.message||L.systemMessages.copyFailure("JSON Code"),{toastId:L.systemMessages.copyFailure("JSON Code")})}else navigator?.clipboard?.writeText(o)},ee=e=>e==="python"?{type:"text/x-python",extension:"py"}:e==="json"?{type:"application/json",extension:"json"}:{type:"text/plain",extension:"txt"},te=(e,n)=>e.replace(/[<>:"/\\|?*\x00-\x1f]/g,"_").replace(/\.{2,}/g,".").replace(/^\.+|\.+$/g,"").trim()||n,Ie=()=>{try{const e=new Blob([o],{type:ee(i)?.type}),n=URL.createObjectURL(e),r=document.createElement("a");r.href=n;const c=ee(i)?.extension||"txt",a=te(c,"txt");r.download=te(`code_${Date.now()}.${a}`,`code_${Date.now()}.${a}`),document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)}catch(e){const n=e;A.toast.error(n?.message||L.systemMessages.copyFailure("Code download"),{toastId:L.systemMessages.copyFailure("Code download")})}};return t.jsx(oe.FullScreen,{handle:S,className:"h-full",children:t.jsxs("div",{className:qe.cn("relative border border-neutral-200 dark:border-neutral-700 rounded-lg h-full overflow-hidden",he),id:"code-editor-container-with-json-grid",children:[t.jsxs("div",{className:B("px-3 py-2 flex items-center bg-neutral-50 dark:bg-neutral-800","border-b border-neutral-200 dark:border-neutral-700",Y?"justify-between":"justify-end"),children:[Y&&J?t.jsx(Je.Toggle,{isChecked:N==="Grid",onChange:e=>Me(e?"Grid":"JSON"),statusText:"",hideStatus:!0,withIcon:!0,tooltip:N==="JSON"?"Grid view":"Code view",icon:{checkedIcon:t.jsx(re.GridOnIcon,{fontSize:6,className:"cursor-pointer !block text-primary-600 dark:text-neutral-300"}),uncheckedIcon:t.jsx(re.CodeIcon,{fontSize:10,className:"cursor-pointer !block text-neutral-700 dark:text-neutral-400"})}}):null,t.jsxs("div",{className:"flex items-center gap-0.5",children:[xe?.({editor:F.current,value:o,onChange:R,language:i,isEditMode:O,activeTab:N}),N==="Grid"&&O&&J&&t.jsx("span",{className:"flex items-center justify-center border-r border-neutral-200 dark:border-neutral-700 mr-1.5 pr-1.5",children:t.jsx(k,{title:"Add key",children:t.jsx("button",{type:"button",id:"btn-code-editor-json-grid-up",onClick:()=>X(!0),className:B("p-0.5 rounded-md flex items-center justify-center","hover:bg-primary-100 hover:dark:bg-neutral-800 text-primary-600 dark:text-neutral-100"),children:t.jsx(Ae,{fontSize:16})})})}),N==="Grid"?t.jsxs(t.Fragment,{children:[t.jsx(k,{title:"Collapse all",children:t.jsx("button",{type:"button",id:"btn-code-editor-json-grid-up",onClick:()=>P(!1),className:z,children:t.jsx(_e,{fontSize:16})})}),t.jsx(k,{title:"Expand all",children:t.jsx("button",{type:"button",id:"btn-code-editor-json-grid-down",onClick:()=>P(!0),className:z,children:t.jsx($e,{fontSize:16})})})]}):null,N==="JSON"&&J?t.jsx(k,{title:"Format",children:t.jsx("button",{type:"button",id:"btn-code-editor-format-code",onClick:Z,className:z,children:t.jsx(Ke,{fontSize:14})})}):null,ie&&N==="JSON"&&J?t.jsx(k,{title:q==="vs"?"Dark mode":"Light mode",children:t.jsx("button",{type:"button",id:"btn-code-editor-with-theme",onClick:()=>je(q==="vs"?"vs-dark":"vs"),className:z,children:q==="vs"?t.jsx(Ve,{fontSize:14}):t.jsx(Ge,{fontSize:14})})}):null,(i==="python"||i==="json")&&ce?t.jsx(k,{title:"Copy",children:t.jsx("button",{type:"button",id:"btn-code-editor-copy-code",onClick:Ee,className:z,children:t.jsx(Be,{fontSize:14})})}):null,(i==="python"||i==="json")&&le?t.jsx(k,{title:"Download",children:t.jsx("button",{type:"button",id:"btn-code-editor-download-code",onClick:Ie,className:z,children:t.jsx(De,{fontSize:14})})}):null,se?t.jsx(k,{title:"Fullscreen",children:t.jsx("button",{onClick:ke,type:"button",id:"btn-code-editor-fullscreen",className:z,children:t.jsx(Pe,{fontSize:14})})}):null]})]}),N==="Grid"&&i==="json"?t.jsx("div",{children:t.jsx(He.JsonGridViewer,{isFullScreen:S?.active,allExpanded:ve,toggleAll:()=>P(e=>!e),isEditMode:!!O,isDarkMode:ye==="dark",style:{height:S?.active?"100vh":$},value:o,onChange:R,setIsAddKeyModalOpen:X,isAddKeyModalOpen:Le})}):t.jsx(Re.default,{height:S?.active?"100vh":$,language:i,value:o,onChange:Fe,theme:q,onMount:Se,options:{fontSize:16,folding:!0,fontFamily:"Menlo, Monaco, 'Courier New', monospace",fontLigatures:!0,readOnly:!O}})]})})};exports.CodeEditor=Ue;
6
+ `),navigator?.clipboard?.writeText(e).then(()=>{}).catch(n=>{const r=n;A.toast.error(r?.message||L.systemMessages.copyFailure("Python Code"),{toastId:L.systemMessages.copyFailure("Python Code")})})}catch(e){const n=e;A.toast.error(n?.message||L.systemMessages.copyFailure("Python Code"),{toastId:L.systemMessages.copyFailure("Python Code")})}else if(i==="json")try{const e=JSON.parse(o),n=JSON.stringify(e,null,4);navigator?.clipboard?.writeText(n)}catch(e){const n=e;A.toast.error(n?.message||L.systemMessages.copyFailure("JSON Code"),{toastId:L.systemMessages.copyFailure("JSON Code")})}else navigator?.clipboard?.writeText(o)},ee=e=>e==="python"?{type:"text/x-python",extension:"py"}:e==="json"?{type:"application/json",extension:"json"}:{type:"text/plain",extension:"txt"},te=(e,n)=>e.replace(/[<>:"/\\|?*\x00-\x1f]/g,"_").replace(/\.{2,}/g,".").replace(/^\.+|\.+$/g,"").trim()||n,Ie=()=>{try{const e=new Blob([o],{type:ee(i)?.type}),n=URL.createObjectURL(e),r=document.createElement("a");r.href=n;const c=ee(i)?.extension||"txt",a=te(c,"txt");r.download=te(`code_${Date.now()}.${a}`,`code_${Date.now()}.${a}`),document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)}catch(e){const n=e;A.toast.error(n?.message||L.systemMessages.copyFailure("Code download"),{toastId:L.systemMessages.copyFailure("Code download")})}};return t.jsx(oe.FullScreen,{handle:S,className:"h-full",children:t.jsxs("div",{className:qe.cn("relative border border-neutral-200 dark:border-neutral-700 rounded-lg h-full overflow-hidden",he),id:"code-editor-container-with-json-grid",children:[t.jsxs("div",{className:B("px-3 py-2 flex items-center bg-neutral-50 dark:bg-neutral-800","border-b border-neutral-200 dark:border-neutral-700",Y?"justify-between":"justify-end"),children:[Y&&J?t.jsx(Je.Toggle,{isChecked:N==="Grid",onChange:e=>Me(e?"Grid":"JSON"),statusText:"",hideStatus:!0,withIcon:!0,tooltip:N==="JSON"?"Grid view":"Code view",icon:{checkedIcon:t.jsx(re.GridOnIcon,{className:"cursor-pointer !block text-primary-600 dark:text-neutral-300 h-2xs w-2xs lg:h-xs lg:w-xs"}),uncheckedIcon:t.jsx(re.CodeIcon,{className:"cursor-pointer !block text-neutral-700 dark:text-neutral-400 h-2xs w-2xs lg:h-xs lg:w-xs"})}}):null,t.jsxs("div",{className:"flex items-center gap-0.5",children:[xe?.({editor:F.current,value:o,onChange:R,language:i,isEditMode:O,activeTab:N}),N==="Grid"&&O&&J&&t.jsx("span",{className:"flex items-center justify-center border-r border-neutral-200 dark:border-neutral-700 mr-1.5 pr-1.5",children:t.jsx(k,{title:"Add key",children:t.jsx("button",{type:"button",id:"btn-code-editor-json-grid-up",onClick:()=>X(!0),className:B("p-0.5 rounded-md flex items-center justify-center","hover:bg-primary-100 hover:dark:bg-neutral-800 text-primary-600 dark:text-neutral-100"),children:t.jsx(Ae,{fontSize:16})})})}),N==="Grid"?t.jsxs(t.Fragment,{children:[t.jsx(k,{title:"Collapse all",children:t.jsx("button",{type:"button",id:"btn-code-editor-json-grid-up",onClick:()=>P(!1),className:z,children:t.jsx(_e,{fontSize:16})})}),t.jsx(k,{title:"Expand all",children:t.jsx("button",{type:"button",id:"btn-code-editor-json-grid-down",onClick:()=>P(!0),className:z,children:t.jsx($e,{fontSize:16})})})]}):null,N==="JSON"&&J?t.jsx(k,{title:"Format",children:t.jsx("button",{type:"button",id:"btn-code-editor-format-code",onClick:Z,className:z,children:t.jsx(Ke,{fontSize:14})})}):null,ie&&N==="JSON"&&J?t.jsx(k,{title:q==="vs"?"Dark mode":"Light mode",children:t.jsx("button",{type:"button",id:"btn-code-editor-with-theme",onClick:()=>je(q==="vs"?"vs-dark":"vs"),className:z,children:q==="vs"?t.jsx(Ve,{fontSize:14}):t.jsx(Ge,{fontSize:14})})}):null,(i==="python"||i==="json")&&ce?t.jsx(k,{title:"Copy",children:t.jsx("button",{type:"button",id:"btn-code-editor-copy-code",onClick:Ee,className:z,children:t.jsx(Be,{fontSize:14})})}):null,(i==="python"||i==="json")&&le?t.jsx(k,{title:"Download",children:t.jsx("button",{type:"button",id:"btn-code-editor-download-code",onClick:Ie,className:z,children:t.jsx(De,{fontSize:14})})}):null,se?t.jsx(k,{title:"Fullscreen",children:t.jsx("button",{onClick:ke,type:"button",id:"btn-code-editor-fullscreen",className:z,children:t.jsx(Pe,{fontSize:14})})}):null]})]}),N==="Grid"&&i==="json"?t.jsx("div",{children:t.jsx(He.JsonGridViewer,{isFullScreen:S?.active,allExpanded:ve,toggleAll:()=>P(e=>!e),isEditMode:!!O,isDarkMode:ye==="dark",style:{height:S?.active?"100vh":$},value:o,onChange:R,setIsAddKeyModalOpen:X,isAddKeyModalOpen:Le})}):t.jsx(Re.default,{height:S?.active?"100vh":$,language:i,value:o,onChange:Fe,theme:q,onMount:Se,options:{fontSize:16,folding:!0,fontFamily:"Menlo, Monaco, 'Courier New', monospace",fontLigatures:!0,readOnly:!O}})]})})};exports.CodeEditor=Ue;
7
7
  //# sourceMappingURL=CodeEditor.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CodeEditor.cjs.js","sources":["../../../../src/components/data-display/code-editor/CodeEditor.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport Editor, { type OnMount } from '@monaco-editor/react';\nimport classNames from 'classnames';\nimport { type FC, useCallback, useEffect, useRef, useState } from 'react';\nimport { FullScreen, useFullScreenHandle } from 'react-full-screen';\nimport { toast } from 'react-toastify';\nimport { useMonaco } from '../../../hooks/useMonaco';\nimport { usePythonSyntax } from '../../../hooks/usePythonSyntax';\nimport { type CodeEditorProps } from '../../../types';\nimport { systemMessages } from '../../../utils/messageConstants';\nimport { JsonGrid } from './JsonGrid';\nimport Tooltip from '../../tooltip/Tooltip';\nimport { Toggle } from '../../forms/toggle/Toggle';\nimport { cn } from '../../../lib/utils';\nimport { CodeIcon, GridOnIcon } from '../../icon';\n\n// Icon class styling (matching web portal)\nconst iconClass = classNames(\n 'text-neutral-600 cursor-pointer hover:text-neutral-800',\n 'dark:text-neutral-300 dark:hover:text-neutral-50'\n);\n\n// Material Icons converted to SVG components (matching web portal icons)\nconst AddIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n </svg>\n);\n\nconst ContentPasteRoundedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M19 2h-4.18C14.4.84 13.3 0 12 0S9.6.84 9.18 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z\" />\n </svg>\n);\n\nconst DarkModeOutlinedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M9.5 2c-1.82 0-3.53.5-5 1.35 2.99 1.73 5 4.95 5 8.65s-2.01 6.92-5 8.65c1.47.85 3.18 1.35 5 1.35 5.52 0 10-4.48 10-10S15.02 2 9.5 2z\" />\n </svg>\n);\n\nconst FileDownloadRoundedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M18 15v3H6v-3H4v3c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-3h-2zm-1-4-5 5-5-5h3V4h4v7h3z\" />\n </svg>\n);\n\nconst FullscreenRoundedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\" />\n </svg>\n);\n\nconst KeyboardDoubleArrowDownIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M18 6.41 16.59 5 12 9.58 7.41 5 6 6.41l6 6z\" />\n <path d=\"m18 13-1.41-1.41L12 16.17l-4.59-4.58L6 13l6 6z\" />\n </svg>\n);\n\nconst KeyboardDoubleArrowUpIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M6 17.59 7.41 19 12 14.42 16.59 19 18 17.59l-6-6z\" />\n <path d=\"m6 11 1.41 1.41L12 7.83l4.59 4.58L18 11l-6-6z\" />\n </svg>\n);\n\nconst LightModeOutlinedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M12 9c1.65 0 3 1.35 3 3s-1.35 3-3 3-3-1.35-3-3 1.35-3 3-3m0-2c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zM2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1zm18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1zM11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1zm0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1zM5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41L5.99 4.58zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41l-1.06-1.06zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06z\" />\n </svg>\n);\n\nconst SubjectOutlinedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M14 17H4v2h10v-2zm6-8H4v2h16V9zM4 15h16v-2H4v2zM4 5v2h16V5H4z\" />\n </svg>\n);\n\ntype TTabKey = 'JSON' | 'Grid';\n\nexport const CodeEditor: FC<CodeEditorProps> = ({\n value,\n onChange = () => false,\n withFullScreen = true,\n withTheme = true,\n isEditMode = false,\n height = \"55vh\",\n language = \"json\",\n monacoEditor,\n isShowCopy = true,\n isShowDownload = true,\n setIsDisableSave,\n withJsonGrid = true,\n editorTheme: externalEditorTheme,\n setEditorTheme: externalSetEditorTheme,\n theme: externalTheme,\n className,\n enableAutoFormatting = true,\n renderToolbarActions,\n onBlockClick,\n focusBlock,\n focusBlockTopLevelOnly = false,\n}) => {\n const editorRef = useRef<any>(null);\n\n // Internal theme state (used when not provided by parent)\n const [internalEditorTheme, setInternalEditorTheme] = useState<\n \"vs\" | \"vs-dark\"\n >(\"vs\");\n const [internalTheme, setInternalTheme] = useState<\"light\" | \"dark\">(\"light\");\n\n // Use external theme if provided, otherwise use internal\n const editorTheme = externalEditorTheme ?? internalEditorTheme;\n const theme = externalTheme ?? internalTheme;\n const setEditorTheme =\n externalSetEditorTheme ??\n ((newTheme: \"vs\" | \"vs-dark\") => {\n setInternalEditorTheme(newTheme);\n setInternalTheme(newTheme === \"vs-dark\" ? \"dark\" : \"light\");\n });\n\n const [allExpanded, setAllExpanded] = useState<boolean>(false);\n const [currentEditorModel, setCurrentEditorModel] = useState<any>(null);\n const monacoInstance = useMonaco();\n\n // Use provided monacoEditor prop or fall back to our managed instance\n const activeMonacoEditor = monacoEditor || monacoInstance;\n\n const {\n handleFormatCode: handleFormatPythonCode,\n pythonError,\n pythonLoading,\n } = usePythonSyntax({\n code: value,\n setCode: onChange,\n currentEditorModel,\n monacoEditor: activeMonacoEditor,\n enable: isEditMode === true && language === \"python\",\n });\n\n const fullScreenHandle = useFullScreenHandle();\n const [activeTab, setActiveTab] = useState<TTabKey>(\"JSON\");\n const [isAddKeyModalOpen, setIsAddKeyModalOpen] = useState(false);\n const isLanguageJson = language === \"json\";\n\n const toggleFocusMode = () => {\n if (fullScreenHandle?.active) {\n fullScreenHandle.exit();\n } else {\n fullScreenHandle.enter();\n }\n };\n\n const onBlockClickRef = useRef(onBlockClick);\n onBlockClickRef.current = onBlockClick;\n\n const detectBlock = useCallback(\n async (editor: any, lineNumber: number, column: number) => {\n if (!onBlockClickRef.current) return;\n\n const model = editor.getModel();\n if (!model) return;\n\n const getTextForRange = (startLine: number, endLine: number) =>\n model.getValueInRange({\n startLineNumber: startLine,\n startColumn: 1,\n endLineNumber: endLine,\n endColumn: model.getLineMaxColumn(endLine),\n });\n\n const emitBlock = (\n startLine: number,\n endLine: number,\n text: string,\n kind?: string,\n parentBlock?: { startLine: number; endLine: number; text: string; kind?: string }\n ) => {\n onBlockClickRef.current!({\n startLine,\n endLine,\n text,\n kind,\n cursorLine: lineNumber,\n cursorColumn: column,\n parentBlock,\n });\n };\n\n try {\n const foldingContrib = editor.getContribution(\n \"editor.contrib.folding\"\n );\n if (foldingContrib) {\n const foldingModel = await (foldingContrib as any).getFoldingModel();\n if (foldingModel?.regions) {\n const regions = foldingModel.regions;\n const totalLines = model.getLineCount();\n\n // Collect all folding ranges that contain the cursor line\n const containingRanges: {\n start: number;\n end: number;\n size: number;\n kind?: string;\n }[] = [];\n\n for (let i = 0; i < regions.length; i++) {\n const start = regions.getStartLineNumber(i);\n const foldEnd = regions.getEndLineNumber(i);\n const end = Math.min(foldEnd + 1, totalLines);\n const size = end - start;\n\n if (lineNumber >= start && lineNumber <= end) {\n const rawKind = regions.getType(i);\n const kind =\n rawKind === 1\n ? \"comment\"\n : rawKind === 2\n ? \"imports\"\n : rawKind === 3\n ? \"region\"\n : undefined;\n containingRanges.push({ start, end, size, kind });\n }\n }\n\n if (containingRanges.length > 0) {\n // Sort by size: smallest first (innermost) → largest last (outermost)\n containingRanges.sort((a, b) => a.size - b.size);\n\n const innermost = containingRanges[0];\n const text = getTextForRange(innermost.start, innermost.end);\n\n // Find the outermost block that isn't the root document range.\n // Walk from largest to smallest, skip any range that starts at\n // line 1 and ends at the last line (that's the root `{}`).\n let outermost: typeof containingRanges[number] | undefined;\n for (let j = containingRanges.length - 1; j > 0; j--) {\n const r = containingRanges[j];\n const isRoot = r.start <= 1 && r.end >= totalLines;\n if (!isRoot) {\n outermost = r;\n break;\n }\n }\n\n const parentBlock =\n outermost && outermost !== innermost\n ? {\n startLine: outermost.start,\n endLine: outermost.end,\n text: getTextForRange(outermost.start, outermost.end),\n kind: outermost.kind,\n }\n : undefined;\n\n emitBlock(innermost.start, innermost.end, text, innermost.kind, parentBlock);\n return;\n }\n }\n }\n\n // Bracket matching fallback — no parent detection available\n const position = { lineNumber, column };\n const brackets = model.bracketPairs?.findEnclosingBrackets?.(position);\n\n if (brackets && brackets.length === 2) {\n const [openRange, closeRange] = brackets;\n const startLine = openRange.startLineNumber;\n const endLine = closeRange.endLineNumber;\n const text = getTextForRange(startLine, endLine);\n emitBlock(startLine, endLine, text);\n return;\n }\n\n // Full document fallback\n const totalLines = model.getLineCount();\n const text = model.getValue();\n emitBlock(1, totalLines, text);\n } catch {\n // Editor not ready — ignore silently\n }\n },\n []\n );\n\n // Navigate to a block when focusBlock changes\n useEffect(() => {\n if (!focusBlock || !editorRef.current) return;\n\n const editor = editorRef.current;\n const model = editor.getModel();\n if (!model) return;\n\n const allMatches = model.findMatches(\n focusBlock,\n true,\n false,\n true,\n null,\n false\n );\n\n if (allMatches.length === 0) return;\n\n let match = allMatches[0];\n\n if (focusBlockTopLevelOnly && allMatches.length > 1) {\n // A top-level key in formatted JSON has minimal leading whitespace\n // (one indent level). Find the match closest to column 1.\n let bestCol = Infinity;\n for (const m of allMatches) {\n const lineContent = model.getLineContent(m.range.startLineNumber);\n const leadingSpaces = lineContent.length - lineContent.trimStart().length;\n if (leadingSpaces < bestCol) {\n bestCol = leadingSpaces;\n match = m;\n }\n }\n }\n\n const matchLine = match.range.startLineNumber;\n const matchCol = match.range.startColumn;\n\n // Move cursor to the match with smooth scroll\n editor.setPosition({ lineNumber: matchLine, column: matchCol });\n editor.revealLineInCenter(matchLine, 1);\n\n // Find the enclosing block and highlight it\n const findAndHighlightBlock = async () => {\n try {\n // Try folding ranges first\n const foldingContrib = editor.getContribution(\n \"editor.contrib.folding\"\n );\n if (foldingContrib) {\n const foldingModel = await (foldingContrib as any).getFoldingModel();\n if (foldingModel?.regions) {\n const regions = foldingModel.regions;\n let bestStart = -1;\n let bestEnd = -1;\n let bestSize = Infinity;\n\n for (let i = 0; i < regions.length; i++) {\n const start = regions.getStartLineNumber(i);\n const foldEnd = regions.getEndLineNumber(i);\n const end = Math.min(foldEnd + 1, model.getLineCount());\n const size = end - start;\n\n if (\n matchLine >= start &&\n matchLine <= end &&\n size < bestSize\n ) {\n bestStart = start;\n bestEnd = end;\n bestSize = size;\n }\n }\n\n if (bestStart !== -1) {\n editor.setSelection({\n startLineNumber: bestStart,\n startColumn: 1,\n endLineNumber: bestEnd,\n endColumn: model.getLineMaxColumn(bestEnd),\n });\n editor.revealRangeInCenter({\n startLineNumber: bestStart,\n startColumn: 1,\n endLineNumber: bestEnd,\n endColumn: model.getLineMaxColumn(bestEnd),\n }, 1);\n return;\n }\n }\n }\n\n // Fall back to bracket matching\n const position = { lineNumber: matchLine, column: matchCol };\n const brackets =\n model.bracketPairs?.findEnclosingBrackets?.(position);\n\n if (brackets && brackets.length === 2) {\n const [openRange, closeRange] = brackets;\n editor.setSelection({\n startLineNumber: openRange.startLineNumber,\n startColumn: 1,\n endLineNumber: closeRange.endLineNumber,\n endColumn: model.getLineMaxColumn(closeRange.endLineNumber),\n });\n editor.revealRangeInCenter({\n startLineNumber: openRange.startLineNumber,\n startColumn: 1,\n endLineNumber: closeRange.endLineNumber,\n endColumn: model.getLineMaxColumn(closeRange.endLineNumber),\n }, 1);\n return;\n }\n\n // Last resort — just highlight the matched text\n editor.setSelection(match.range);\n } catch {\n // Folding model not ready — just highlight the match\n editor.setSelection(match.range);\n }\n };\n\n // Small delay to let folding model compute after content may have changed\n requestAnimationFrame(() => {\n findAndHighlightBlock();\n });\n }, [focusBlock, focusBlockTopLevelOnly]);\n\n const handleEditorDidMount: OnMount = (editor) => {\n editorRef.current = editor;\n\n const initializeEditor = () => {\n try {\n if (language === \"python\") {\n const model = editor.getModel();\n if (model) {\n setCurrentEditorModel(model);\n }\n }\n\n if (language === \"json\" && enableAutoFormatting) {\n requestAnimationFrame(() => {\n handleFormatCode();\n });\n }\n } catch (error) {\n console.warn(\"Failed to initialize editor:\", error);\n }\n };\n\n if (editor.getModel()) {\n initializeEditor();\n } else {\n const disposable = editor.onDidChangeModel(() => {\n initializeEditor();\n disposable.dispose();\n });\n }\n\n // Detect block on mouse click — use onMouseDown + small delay so cursor\n // position is settled before we read it\n if (onBlockClickRef.current) {\n editor.onMouseDown(() => {\n requestAnimationFrame(() => {\n const pos = editor.getPosition();\n if (pos) {\n detectBlock(editor, pos.lineNumber, pos.column);\n }\n });\n });\n }\n };\n\n const handleFormatJsonCode = () => {\n try {\n const parsedJson = JSON.parse(value);\n const formattedJson = JSON.stringify(parsedJson, null, 4);\n onChange(formattedJson);\n\n // Also update the editor model if it exists\n if (currentEditorModel && activeMonacoEditor) {\n activeMonacoEditor.editor.setModelMarkers(\n currentEditorModel,\n \"json\",\n []\n );\n }\n } catch (error) {\n // Display error visually instead of logging to console\n if (currentEditorModel && activeMonacoEditor) {\n const errorMessage =\n error instanceof Error ? error.message : \"Invalid JSON\";\n try {\n activeMonacoEditor.editor.setModelMarkers(\n currentEditorModel,\n \"json\",\n [\n {\n startLineNumber: 1,\n startColumn: 1,\n endLineNumber: 1,\n endColumn: 1,\n message: `Cannot format: ${errorMessage}`,\n severity: activeMonacoEditor.MarkerSeverity.Error,\n },\n ]\n );\n } catch (markerError) {\n console.warn(\"Failed to set JSON error markers:\", markerError);\n }\n }\n }\n };\n\n const handleFormatCode = () => {\n if (language === \"python\") {\n handleFormatPythonCode();\n return;\n }\n\n if (language === \"json\") {\n handleFormatJsonCode();\n return;\n }\n\n if (editorRef.current) {\n try {\n const formatAction = editorRef.current.getAction(\n \"editor.action.formatDocument\"\n );\n if (formatAction) {\n formatAction.run();\n }\n } catch (error) {\n console.warn(\"Failed to format document:\", error);\n }\n }\n };\n\n const handleChange = (newValue: string | undefined) => {\n if (typeof newValue === \"string\") {\n onChange(newValue);\n }\n };\n\n useEffect(() => {\n if (setIsDisableSave) {\n setIsDisableSave(pythonError || pythonLoading);\n }\n }, [pythonError, pythonLoading, setIsDisableSave]);\n\n // Don't render the editor until Monaco is ready (unless we have a provided instance)\n if (!monacoEditor && !monacoInstance) {\n return (\n <div className=\"flex items-center justify-center p-8 border border-neutral-200 dark:border-neutral-700 rounded-lg\">\n <div className=\"text-neutral-600 dark:text-neutral-400\">\n Loading editor...\n </div>\n </div>\n );\n }\n\n const hoverClass = classNames(\n \"hover:bg-neutral-300 hover:dark:bg-neutral-700 p-0.5 rounded-md flex items-center justify-center\"\n );\n\n const handleCopyCode = () => {\n if (language === \"python\") {\n try {\n let formattedCode = value;\n if (formattedCode) {\n formattedCode = formattedCode\n .replace(/\\r\\n/g, \"\\n\")\n .replace(/\\r/g, \"\\n\");\n formattedCode = formattedCode\n .split(\"\\n\")\n .map((line) => line.trimEnd())\n .join(\"\\n\");\n formattedCode = formattedCode.replace(/\\n+$/, \"\") + \"\\n\";\n }\n\n navigator?.clipboard\n ?.writeText(formattedCode)\n .then(() => {\n // show success toast (kept silent as in web portal)\n })\n .catch((_error: unknown) => {\n const error = _error as Error;\n toast.error(\n error?.message || systemMessages.copyFailure(\"Python Code\"),\n {\n toastId: systemMessages.copyFailure(\"Python Code\"),\n }\n );\n });\n } catch (_error: unknown) {\n const error = _error as Error;\n toast.error(\n error?.message || systemMessages.copyFailure(\"Python Code\"),\n {\n toastId: systemMessages.copyFailure(\"Python Code\"),\n }\n );\n }\n } else if (language === \"json\") {\n try {\n const parsedJson = JSON.parse(value);\n const formattedJson = JSON.stringify(parsedJson, null, 4);\n navigator?.clipboard?.writeText(formattedJson);\n } catch (_error: unknown) {\n const error = _error as Error;\n toast.error(error?.message || systemMessages.copyFailure(\"JSON Code\"), {\n toastId: systemMessages.copyFailure(\"JSON Code\"),\n });\n }\n } else {\n navigator?.clipboard?.writeText(value);\n }\n };\n\n const getConfig = (code: string) => {\n if (code === \"python\") {\n return {\n type: \"text/x-python\",\n extension: \"py\",\n };\n }\n if (code === \"json\") {\n return {\n type: \"application/json\",\n extension: \"json\",\n };\n }\n return {\n type: \"text/plain\",\n extension: \"txt\",\n };\n };\n\n // Sanitize filename utility (matching web portal implementation)\n const sanitizeFilename = (filename: string, fallback: string): string => {\n // Remove or replace potentially dangerous characters\n const sanitized = filename\n .replace(/[<>:\"/\\\\|?*\\x00-\\x1f]/g, \"_\") // Replace illegal chars\n .replace(/\\.{2,}/g, \".\") // Replace multiple dots\n .replace(/^\\.+|\\.+$/g, \"\") // Remove leading/trailing dots\n .trim();\n\n return sanitized || fallback;\n };\n\n const handleDownloadCode = () => {\n try {\n const blob = new Blob([value], { type: getConfig(language)?.type });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n const extension = getConfig(language)?.extension || \"txt\";\n const sanitizedExtension = sanitizeFilename(extension, \"txt\");\n anchor.download = sanitizeFilename(\n `code_${Date.now()}.${sanitizedExtension}`,\n `code_${Date.now()}.${sanitizedExtension}`\n );\n document.body.appendChild(anchor);\n anchor.click();\n document.body.removeChild(anchor);\n URL.revokeObjectURL(url);\n } catch (_error: unknown) {\n const error = _error as Error;\n toast.error(\n error?.message || systemMessages.copyFailure(\"Code download\"),\n {\n toastId: systemMessages.copyFailure(\"Code download\"),\n }\n );\n }\n };\n\n return (\n <FullScreen handle={fullScreenHandle} className=\"h-full\">\n <div\n className={cn(\n \"relative border border-neutral-200 dark:border-neutral-700 rounded-lg h-full overflow-hidden\",\n className\n )}\n id=\"code-editor-container-with-json-grid\"\n >\n <div\n className={classNames(\n `px-3 py-2 flex items-center bg-neutral-50 dark:bg-neutral-800`,\n // withJsonGrid\n // ? \"border-none\"\n // : \"border-b border-neutral-200 dark:border-neutral-700\",\n \"border-b border-neutral-200 dark:border-neutral-700\",\n isLanguageJson ? \"justify-between\" : \"justify-end\"\n )}\n >\n {isLanguageJson && withJsonGrid ? (\n <Toggle\n isChecked={activeTab === \"Grid\"}\n onChange={(checked) => setActiveTab(checked ? \"Grid\" : \"JSON\")}\n statusText=''\n hideStatus\n withIcon\n tooltip={activeTab === \"JSON\" ? \"Grid view\" : \"Code view\"}\n icon={{\n checkedIcon: <GridOnIcon fontSize={6} className=\"cursor-pointer !block text-primary-600 dark:text-neutral-300\" />,\n uncheckedIcon: <CodeIcon fontSize={10} className=\"cursor-pointer !block text-neutral-700 dark:text-neutral-400\" />,\n }}\n />\n ) : null}\n <div className=\"flex items-center gap-0.5\">\n {renderToolbarActions?.({\n editor: editorRef.current,\n value,\n onChange,\n language,\n isEditMode,\n activeTab,\n })}\n {activeTab === \"Grid\" && isEditMode && withJsonGrid && (\n <span className=\"flex items-center justify-center border-r border-neutral-200 dark:border-neutral-700 mr-1.5 pr-1.5\">\n <Tooltip title=\"Add key\">\n <button\n type='button'\n id=\"btn-code-editor-json-grid-up\"\n onClick={() => setIsAddKeyModalOpen(true)}\n className={classNames(\n \"p-0.5 rounded-md flex items-center justify-center\",\n \"hover:bg-primary-100 hover:dark:bg-neutral-800 text-primary-600 dark:text-neutral-100\"\n )}\n >\n <AddIcon fontSize={16} />\n </button>\n </Tooltip>\n </span>\n )}\n {activeTab === \"Grid\" ? (\n <>\n <Tooltip title=\"Collapse all\">\n <button\n type='button'\n id=\"btn-code-editor-json-grid-up\"\n onClick={() => setAllExpanded(false)}\n className={hoverClass}\n >\n <KeyboardDoubleArrowUpIcon fontSize={16} />\n </button>\n </Tooltip>\n\n <Tooltip title=\"Expand all\">\n <button\n type='button'\n id=\"btn-code-editor-json-grid-down\"\n onClick={() => setAllExpanded(true)}\n className={hoverClass}\n >\n <KeyboardDoubleArrowDownIcon fontSize={16} />\n </button>\n </Tooltip>\n </>\n ) : null}\n {activeTab === \"JSON\" && withJsonGrid ? (\n <Tooltip title=\"Format\">\n <button\n type='button'\n id=\"btn-code-editor-format-code\"\n onClick={handleFormatCode}\n className={hoverClass}\n >\n <SubjectOutlinedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n {withTheme && activeTab === \"JSON\" && withJsonGrid ? (\n <Tooltip\n title={editorTheme === \"vs\" ? \"Dark mode\" : \"Light mode\"}\n >\n <button\n type='button'\n id=\"btn-code-editor-with-theme\"\n onClick={() =>\n setEditorTheme(editorTheme === \"vs\" ? \"vs-dark\" : \"vs\")\n }\n className={hoverClass}\n >\n {editorTheme === \"vs\" ? (\n <DarkModeOutlinedIcon fontSize={14} />\n ) : (\n <LightModeOutlinedIcon fontSize={14} />\n )}\n </button>\n </Tooltip>\n ) : null}\n {(language === \"python\" || language === \"json\") && isShowCopy ? (\n <Tooltip title=\"Copy\">\n <button\n type='button'\n id=\"btn-code-editor-copy-code\"\n onClick={handleCopyCode}\n className={hoverClass}\n >\n <ContentPasteRoundedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n {(language === \"python\" || language === \"json\") &&\n isShowDownload ? (\n <Tooltip title=\"Download\">\n <button\n type='button'\n id=\"btn-code-editor-download-code\"\n onClick={handleDownloadCode}\n className={hoverClass}\n >\n <FileDownloadRoundedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n {withFullScreen ? (\n <Tooltip title=\"Fullscreen\">\n <button\n onClick={toggleFocusMode}\n type='button'\n id=\"btn-code-editor-fullscreen\"\n className={hoverClass}\n >\n <FullscreenRoundedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n </div>\n </div>\n\n {activeTab === \"Grid\" && language === \"json\" ? (\n <div>\n <JsonGrid\n isFullScreen={fullScreenHandle?.active}\n allExpanded={allExpanded}\n toggleAll={() => setAllExpanded((prev) => !prev)}\n isEditMode={Boolean(isEditMode)}\n isDarkMode={theme === \"dark\"}\n style={{\n height: fullScreenHandle?.active ? \"100vh\" : height,\n }}\n value={value}\n onChange={onChange}\n setIsAddKeyModalOpen={setIsAddKeyModalOpen}\n isAddKeyModalOpen={isAddKeyModalOpen}\n />\n </div>\n ) : (\n <Editor\n height={fullScreenHandle?.active ? \"100vh\" : height}\n language={language}\n value={value}\n onChange={handleChange}\n theme={editorTheme}\n onMount={handleEditorDidMount}\n options={{\n fontSize: 16,\n folding: true,\n fontFamily: \"Menlo, Monaco, 'Courier New', monospace\",\n fontLigatures: true,\n readOnly: !isEditMode,\n }}\n />\n )}\n </div>\n </FullScreen>\n );\n};\n"],"names":["iconClass","classNames","AddIcon","fontSize","jsx","ContentPasteRoundedIcon","DarkModeOutlinedIcon","FileDownloadRoundedIcon","FullscreenRoundedIcon","KeyboardDoubleArrowDownIcon","KeyboardDoubleArrowUpIcon","LightModeOutlinedIcon","SubjectOutlinedIcon","CodeEditor","value","onChange","withFullScreen","withTheme","isEditMode","height","language","monacoEditor","isShowCopy","isShowDownload","setIsDisableSave","withJsonGrid","externalEditorTheme","externalSetEditorTheme","externalTheme","className","enableAutoFormatting","renderToolbarActions","onBlockClick","focusBlock","focusBlockTopLevelOnly","editorRef","useRef","internalEditorTheme","setInternalEditorTheme","useState","internalTheme","setInternalTheme","editorTheme","theme","setEditorTheme","newTheme","allExpanded","setAllExpanded","currentEditorModel","setCurrentEditorModel","monacoInstance","useMonaco","activeMonacoEditor","handleFormatPythonCode","pythonError","pythonLoading","usePythonSyntax","fullScreenHandle","useFullScreenHandle","activeTab","setActiveTab","isAddKeyModalOpen","setIsAddKeyModalOpen","isLanguageJson","toggleFocusMode","onBlockClickRef","detectBlock","useCallback","editor","lineNumber","column","model","getTextForRange","startLine","endLine","emitBlock","text","kind","parentBlock","foldingContrib","foldingModel","regions","totalLines","containingRanges","i","start","foldEnd","end","size","rawKind","a","b","innermost","outermost","j","r","position","brackets","openRange","closeRange","useEffect","allMatches","match","bestCol","m","lineContent","leadingSpaces","matchLine","matchCol","findAndHighlightBlock","bestStart","bestEnd","bestSize","handleEditorDidMount","initializeEditor","handleFormatCode","error","disposable","pos","handleFormatJsonCode","parsedJson","formattedJson","errorMessage","markerError","formatAction","handleChange","newValue","hoverClass","handleCopyCode","formattedCode","line","_error","toast","systemMessages","getConfig","code","sanitizeFilename","filename","fallback","handleDownloadCode","blob","url","anchor","extension","sanitizedExtension","FullScreen","jsxs","cn","Toggle","checked","GridOnIcon","CodeIcon","Tooltip","Fragment","JsonGrid","prev","Editor"],"mappings":"0rBAiBMA,EAAYC,EAChB,yDACA,kDACF,EAGMC,GAAU,CAAC,CAAE,SAAAC,KACjBC,EAAAA,IAAC,OAAI,MAAOD,EAAU,OAAQA,EAAU,QAAQ,YAAY,KAAK,eAC/D,eAAC,OAAA,CAAK,EAAE,sCAAsC,EAChD,EAGIE,GAA0B,CAAC,CAAE,SAAAF,CAAA,IACjCC,MAAC,MAAA,CAAI,MAAOD,EAAU,OAAQA,EAAU,QAAQ,YAAY,KAAK,eAAe,UAAWH,EACzF,SAAAI,MAAC,OAAA,CAAK,EAAE,mMAAA,CAAoM,CAAA,CAC9M,EAGIE,GAAuB,CAAC,CAAE,SAAAH,CAAA,IAC9BC,MAAC,MAAA,CAAI,MAAOD,EAAU,OAAQA,EAAU,QAAQ,YAAY,KAAK,eAAe,UAAWH,EACzF,SAAAI,MAAC,OAAA,CAAK,EAAE,qIAAA,CAAsI,CAAA,CAChJ,EAGIG,GAA0B,CAAC,CAAE,SAAAJ,CAAA,IACjCC,MAAC,MAAA,CAAI,MAAOD,EAAU,OAAQA,EAAU,QAAQ,YAAY,KAAK,eAAe,UAAWH,EACzF,SAAAI,MAAC,OAAA,CAAK,EAAE,kFAAA,CAAmF,CAAA,CAC7F,EAGII,GAAwB,CAAC,CAAE,SAAAL,CAAA,IAC/BC,MAAC,MAAA,CAAI,MAAOD,EAAU,OAAQA,EAAU,QAAQ,YAAY,KAAK,eAAe,UAAWH,EACzF,SAAAI,MAAC,OAAA,CAAK,EAAE,gFAAA,CAAiF,CAAA,CAC3F,EAGIK,GAA8B,CAAC,CAAE,SAAAN,CAAA,WACpC,MAAA,CAAI,MAAOA,EAAU,OAAQA,EAAU,QAAQ,YAAY,KAAK,eAAe,UAAWH,EACzF,SAAA,CAAAI,EAAAA,IAAC,OAAA,CAAK,EAAE,6CAAA,CAA8C,EACtDA,EAAAA,IAAC,OAAA,CAAK,EAAE,gDAAA,CAAiD,CAAA,EAC3D,EAGIM,GAA4B,CAAC,CAAE,SAAAP,CAAA,WAClC,MAAA,CAAI,MAAOA,EAAU,OAAQA,EAAU,QAAQ,YAAY,KAAK,eAAe,UAAWH,EACzF,SAAA,CAAAI,EAAAA,IAAC,OAAA,CAAK,EAAE,mDAAA,CAAoD,EAC5DA,EAAAA,IAAC,OAAA,CAAK,EAAE,+CAAA,CAAgD,CAAA,EAC1D,EAGIO,GAAwB,CAAC,CAAE,SAAAR,CAAA,IAC/BC,MAAC,MAAA,CAAI,MAAOD,EAAU,OAAQA,EAAU,QAAQ,YAAY,KAAK,eAAe,UAAWH,EACzF,SAAAI,MAAC,OAAA,CAAK,EAAE,o1BAAA,CAAq1B,CAAA,CAC/1B,EAGIQ,GAAsB,CAAC,CAAE,SAAAT,CAAA,IAC7BC,MAAC,MAAA,CAAI,MAAOD,EAAU,OAAQA,EAAU,QAAQ,YAAY,KAAK,eAAe,UAAWH,EACzF,SAAAI,MAAC,OAAA,CAAK,EAAE,+DAAA,CAAgE,CAAA,CAC1E,EAKWS,GAAkC,CAAC,CAC9C,MAAAC,EACA,SAAAC,EAAW,IAAM,GACjB,eAAAC,GAAiB,GACjB,UAAAC,GAAY,GACZ,WAAAC,EAAa,GACb,OAAAC,EAAS,OACT,SAAAC,EAAW,OACX,aAAAC,EACA,WAAAC,GAAa,GACb,eAAAC,GAAiB,GACjB,iBAAAC,EACA,aAAAC,EAAe,GACf,YAAaC,GACb,eAAgBC,GAChB,MAAOC,GACP,UAAAC,GACA,qBAAAC,GAAuB,GACvB,qBAAAC,GACA,aAAAC,EACA,WAAAC,EACA,uBAAAC,EAAyB,EAC3B,IAAM,CACJ,MAAMC,EAAYC,EAAAA,OAAY,IAAI,EAG5B,CAACC,GAAqBC,EAAsB,EAAIC,EAAAA,SAEpD,IAAI,EACA,CAACC,GAAeC,EAAgB,EAAIF,EAAAA,SAA2B,OAAO,EAGtEG,EAAchB,IAAuBW,GACrCM,GAAQf,IAAiBY,GACzBI,GACJjB,KACEkB,GAA+B,CAC/BP,GAAuBO,CAAQ,EAC/BJ,GAAiBI,IAAa,UAAY,OAAS,OAAO,CAC5D,GAEI,CAACC,GAAaC,CAAc,EAAIR,EAAAA,SAAkB,EAAK,EACvD,CAACS,EAAoBC,EAAqB,EAAIV,EAAAA,SAAc,IAAI,EAChEW,EAAiBC,GAAAA,UAAA,EAGjBC,EAAqB/B,GAAgB6B,EAErC,CACJ,iBAAkBG,GAClB,YAAAC,EACA,cAAAC,CAAA,EACEC,mBAAgB,CAClB,KAAM1C,EACN,QAASC,EACT,mBAAAiC,EACA,aAAcI,EACd,OAAQlC,IAAe,IAAQE,IAAa,QAAA,CAC7C,EAEKqC,EAAmBC,GAAAA,oBAAA,EACnB,CAACC,EAAWC,EAAY,EAAIrB,EAAAA,SAAkB,MAAM,EACpD,CAACsB,GAAmBC,CAAoB,EAAIvB,EAAAA,SAAS,EAAK,EAC1DwB,EAAiB3C,IAAa,OAE9B4C,GAAkB,IAAM,CACxBP,GAAkB,OACpBA,EAAiB,KAAA,EAEjBA,EAAiB,MAAA,CAErB,EAEMQ,EAAkB7B,EAAAA,OAAOJ,CAAY,EAC3CiC,EAAgB,QAAUjC,EAE1B,MAAMkC,GAAcC,EAAAA,YAClB,MAAOC,EAAaC,EAAoBC,IAAmB,CACzD,GAAI,CAACL,EAAgB,QAAS,OAE9B,MAAMM,EAAQH,EAAO,SAAA,EACrB,GAAI,CAACG,EAAO,OAEZ,MAAMC,EAAkB,CAACC,EAAmBC,IAC1CH,EAAM,gBAAgB,CACpB,gBAAiBE,EACjB,YAAa,EACb,cAAeC,EACf,UAAWH,EAAM,iBAAiBG,CAAO,CAAA,CAC1C,EAEGC,EAAY,CAChBF,EACAC,EACAE,EACAC,EACAC,IACG,CACHb,EAAgB,QAAS,CACvB,UAAAQ,EACA,QAAAC,EACA,KAAAE,EACA,KAAAC,EACA,WAAYR,EACZ,aAAcC,EACd,YAAAQ,CAAA,CACD,CACH,EAEA,GAAI,CACF,MAAMC,EAAiBX,EAAO,gBAC5B,wBAAA,EAEF,GAAIW,EAAgB,CAClB,MAAMC,EAAe,MAAOD,EAAuB,gBAAA,EACnD,GAAIC,GAAc,QAAS,CACzB,MAAMC,EAAUD,EAAa,QACvBE,EAAaX,EAAM,aAAA,EAGnBY,EAKA,CAAA,EAEN,QAASC,EAAI,EAAGA,EAAIH,EAAQ,OAAQG,IAAK,CACvC,MAAMC,EAAQJ,EAAQ,mBAAmBG,CAAC,EACpCE,EAAUL,EAAQ,iBAAiBG,CAAC,EACpCG,EAAM,KAAK,IAAID,EAAU,EAAGJ,CAAU,EACtCM,EAAOD,EAAMF,EAEnB,GAAIhB,GAAcgB,GAAShB,GAAckB,EAAK,CAC5C,MAAME,EAAUR,EAAQ,QAAQG,CAAC,EAC3BP,GACJY,IAAY,EACR,UACAA,IAAY,EACV,UACAA,IAAY,EACV,SACA,OACVN,EAAiB,KAAK,CAAE,MAAAE,EAAO,IAAAE,EAAK,KAAAC,EAAM,KAAAX,GAAM,CAClD,CACF,CAEA,GAAIM,EAAiB,OAAS,EAAG,CAE/BA,EAAiB,KAAK,CAACO,EAAGC,IAAMD,EAAE,KAAOC,EAAE,IAAI,EAE/C,MAAMC,EAAYT,EAAiB,CAAC,EAC9BP,EAAOJ,EAAgBoB,EAAU,MAAOA,EAAU,GAAG,EAK3D,IAAIC,EACJ,QAASC,EAAIX,EAAiB,OAAS,EAAGW,EAAI,EAAGA,IAAK,CACpD,MAAMC,EAAIZ,EAAiBW,CAAC,EAE5B,GAAI,EADWC,EAAE,OAAS,GAAKA,EAAE,KAAOb,GAC3B,CACXW,EAAYE,EACZ,KACF,CACF,CAEA,MAAMjB,EACJe,GAAaA,IAAcD,EACvB,CACE,UAAWC,EAAU,MACrB,QAASA,EAAU,IACnB,KAAMrB,EAAgBqB,EAAU,MAAOA,EAAU,GAAG,EACpD,KAAMA,EAAU,IAAA,EAElB,OAENlB,EAAUiB,EAAU,MAAOA,EAAU,IAAKhB,EAAMgB,EAAU,KAAMd,CAAW,EAC3E,MACF,CACF,CACF,CAGA,MAAMkB,EAAW,CAAE,WAAA3B,EAAY,OAAAC,CAAA,EACzB2B,EAAW1B,EAAM,cAAc,wBAAwByB,CAAQ,EAErE,GAAIC,GAAYA,EAAS,SAAW,EAAG,CACrC,KAAM,CAACC,EAAWC,CAAU,EAAIF,EAC1BxB,EAAYyB,EAAU,gBACtBxB,EAAUyB,EAAW,cACrBvB,EAAOJ,EAAgBC,EAAWC,CAAO,EAC/CC,EAAUF,EAAWC,EAASE,CAAI,EAClC,MACF,CAGA,MAAMM,EAAaX,EAAM,aAAA,EACnBK,EAAOL,EAAM,SAAA,EACnBI,EAAU,EAAGO,EAAYN,CAAI,CAC/B,MAAQ,CAER,CACF,EACA,CAAA,CAAC,EAIHwB,EAAAA,UAAU,IAAM,CACd,GAAI,CAACnE,GAAc,CAACE,EAAU,QAAS,OAEvC,MAAMiC,EAASjC,EAAU,QACnBoC,EAAQH,EAAO,SAAA,EACrB,GAAI,CAACG,EAAO,OAEZ,MAAM8B,EAAa9B,EAAM,YACvBtC,EACA,GACA,GACA,GACA,KACA,EAAA,EAGF,GAAIoE,EAAW,SAAW,EAAG,OAE7B,IAAIC,EAAQD,EAAW,CAAC,EAExB,GAAInE,GAA0BmE,EAAW,OAAS,EAAG,CAGnD,IAAIE,EAAU,IACd,UAAWC,KAAKH,EAAY,CAC1B,MAAMI,EAAclC,EAAM,eAAeiC,EAAE,MAAM,eAAe,EAC1DE,EAAgBD,EAAY,OAASA,EAAY,YAAY,OAC/DC,EAAgBH,IAClBA,EAAUG,EACVJ,EAAQE,EAEZ,CACF,CAEA,MAAMG,EAAYL,EAAM,MAAM,gBACxBM,EAAWN,EAAM,MAAM,YAG7BlC,EAAO,YAAY,CAAE,WAAYuC,EAAW,OAAQC,EAAU,EAC9DxC,EAAO,mBAAmBuC,EAAW,CAAC,EAGtC,MAAME,EAAwB,SAAY,CACxC,GAAI,CAEF,MAAM9B,EAAiBX,EAAO,gBAC5B,wBAAA,EAEF,GAAIW,EAAgB,CAClB,MAAMC,EAAe,MAAOD,EAAuB,gBAAA,EACnD,GAAIC,GAAc,QAAS,CACzB,MAAMC,EAAUD,EAAa,QAC7B,IAAI8B,EAAY,GACZC,EAAU,GACVC,EAAW,IAEf,QAAS5B,EAAI,EAAGA,EAAIH,EAAQ,OAAQG,IAAK,CACvC,MAAMC,EAAQJ,EAAQ,mBAAmBG,CAAC,EACpCE,EAAUL,EAAQ,iBAAiBG,CAAC,EACpCG,EAAM,KAAK,IAAID,EAAU,EAAGf,EAAM,cAAc,EAChDiB,EAAOD,EAAMF,EAGjBsB,GAAatB,GACbsB,GAAapB,GACbC,EAAOwB,IAEPF,EAAYzB,EACZ0B,EAAUxB,EACVyB,EAAWxB,EAEf,CAEA,GAAIsB,IAAc,GAAI,CACpB1C,EAAO,aAAa,CAClB,gBAAiB0C,EACjB,YAAa,EACb,cAAeC,EACf,UAAWxC,EAAM,iBAAiBwC,CAAO,CAAA,CAC1C,EACD3C,EAAO,oBAAoB,CACzB,gBAAiB0C,EACjB,YAAa,EACb,cAAeC,EACf,UAAWxC,EAAM,iBAAiBwC,CAAO,CAAA,EACxC,CAAC,EACJ,MACF,CACF,CACF,CAGA,MAAMf,EAAW,CAAE,WAAYW,EAAW,OAAQC,CAAA,EAC5CX,EACJ1B,EAAM,cAAc,wBAAwByB,CAAQ,EAEtD,GAAIC,GAAYA,EAAS,SAAW,EAAG,CACrC,KAAM,CAACC,EAAWC,CAAU,EAAIF,EAChC7B,EAAO,aAAa,CAClB,gBAAiB8B,EAAU,gBAC3B,YAAa,EACb,cAAeC,EAAW,cAC1B,UAAW5B,EAAM,iBAAiB4B,EAAW,aAAa,CAAA,CAC3D,EACD/B,EAAO,oBAAoB,CACzB,gBAAiB8B,EAAU,gBAC3B,YAAa,EACb,cAAeC,EAAW,cAC1B,UAAW5B,EAAM,iBAAiB4B,EAAW,aAAa,CAAA,EACzD,CAAC,EACJ,MACF,CAGA/B,EAAO,aAAakC,EAAM,KAAK,CACjC,MAAQ,CAENlC,EAAO,aAAakC,EAAM,KAAK,CACjC,CACF,EAGA,sBAAsB,IAAM,CAC1BO,EAAA,CACF,CAAC,CACH,EAAG,CAAC5E,EAAYC,CAAsB,CAAC,EAEvC,MAAM+E,GAAiC7C,GAAW,CAChDjC,EAAU,QAAUiC,EAEpB,MAAM8C,EAAmB,IAAM,CAC7B,GAAI,CACF,GAAI9F,IAAa,SAAU,CACzB,MAAMmD,EAAQH,EAAO,SAAA,EACjBG,GACFtB,GAAsBsB,CAAK,CAE/B,CAEInD,IAAa,QAAUU,IACzB,sBAAsB,IAAM,CAC1BqF,EAAA,CACF,CAAC,CAEL,OAASC,EAAO,CACd,QAAQ,KAAK,+BAAgCA,CAAK,CACpD,CACF,EAEA,GAAIhD,EAAO,WACT8C,EAAA,MACK,CACL,MAAMG,EAAajD,EAAO,iBAAiB,IAAM,CAC/C8C,EAAA,EACAG,EAAW,QAAA,CACb,CAAC,CACH,CAIIpD,EAAgB,SAClBG,EAAO,YAAY,IAAM,CACvB,sBAAsB,IAAM,CAC1B,MAAMkD,EAAMlD,EAAO,YAAA,EACfkD,GACFpD,GAAYE,EAAQkD,EAAI,WAAYA,EAAI,MAAM,CAElD,CAAC,CACH,CAAC,CAEL,EAEMC,GAAuB,IAAM,CACjC,GAAI,CACF,MAAMC,EAAa,KAAK,MAAM1G,CAAK,EAC7B2G,EAAgB,KAAK,UAAUD,EAAY,KAAM,CAAC,EACxDzG,EAAS0G,CAAa,EAGlBzE,GAAsBI,GACxBA,EAAmB,OAAO,gBACxBJ,EACA,OACA,CAAA,CAAC,CAGP,OAASoE,EAAO,CAEd,GAAIpE,GAAsBI,EAAoB,CAC5C,MAAMsE,EACJN,aAAiB,MAAQA,EAAM,QAAU,eAC3C,GAAI,CACFhE,EAAmB,OAAO,gBACxBJ,EACA,OACA,CACE,CACE,gBAAiB,EACjB,YAAa,EACb,cAAe,EACf,UAAW,EACX,QAAS,kBAAkB0E,CAAY,GACvC,SAAUtE,EAAmB,eAAe,KAAA,CAC9C,CACF,CAEJ,OAASuE,EAAa,CACpB,QAAQ,KAAK,oCAAqCA,CAAW,CAC/D,CACF,CACF,CACF,EAEMR,EAAmB,IAAM,CAC7B,GAAI/F,IAAa,SAAU,CACzBiC,GAAA,EACA,MACF,CAEA,GAAIjC,IAAa,OAAQ,CACvBmG,GAAA,EACA,MACF,CAEA,GAAIpF,EAAU,QACZ,GAAI,CACF,MAAMyF,EAAezF,EAAU,QAAQ,UACrC,8BAAA,EAEEyF,GACFA,EAAa,IAAA,CAEjB,OAASR,EAAO,CACd,QAAQ,KAAK,6BAA8BA,CAAK,CAClD,CAEJ,EAEMS,GAAgBC,GAAiC,CACjD,OAAOA,GAAa,UACtB/G,EAAS+G,CAAQ,CAErB,EASA,GAPA1B,EAAAA,UAAU,IAAM,CACV5E,GACFA,EAAiB8B,GAAeC,CAAa,CAEjD,EAAG,CAACD,EAAaC,EAAe/B,CAAgB,CAAC,EAG7C,CAACH,GAAgB,CAAC6B,EACpB,OACE9C,EAAAA,IAAC,OAAI,UAAU,oGACb,eAAC,MAAA,CAAI,UAAU,yCAAyC,SAAA,mBAAA,CAExD,CAAA,CACF,EAIJ,MAAM2H,EAAa9H,EACjB,kGAAA,EAGI+H,GAAiB,IAAM,CAC3B,GAAI5G,IAAa,SACf,GAAI,CACF,IAAI6G,EAAgBnH,EAChBmH,IACFA,EAAgBA,EACb,QAAQ,QAAS;AAAA,CAAI,EACrB,QAAQ,MAAO;AAAA,CAAI,EACtBA,EAAgBA,EACb,MAAM;AAAA,CAAI,EACV,IAAKC,GAASA,EAAK,QAAA,CAAS,EAC5B,KAAK;AAAA,CAAI,EACZD,EAAgBA,EAAc,QAAQ,OAAQ,EAAE,EAAI;AAAA,GAGtD,WAAW,WACP,UAAUA,CAAa,EACxB,KAAK,IAAM,CAEZ,CAAC,EACA,MAAOE,GAAoB,CAC1B,MAAMf,EAAQe,EACdC,EAAAA,MAAM,MACJhB,GAAO,SAAWiB,iBAAe,YAAY,aAAa,EAC1D,CACE,QAASA,EAAAA,eAAe,YAAY,aAAa,CAAA,CACnD,CAEJ,CAAC,CACL,OAASF,EAAiB,CACxB,MAAMf,EAAQe,EACdC,EAAAA,MAAM,MACJhB,GAAO,SAAWiB,iBAAe,YAAY,aAAa,EAC1D,CACE,QAASA,EAAAA,eAAe,YAAY,aAAa,CAAA,CACnD,CAEJ,SACSjH,IAAa,OACtB,GAAI,CACF,MAAMoG,EAAa,KAAK,MAAM1G,CAAK,EAC7B2G,EAAgB,KAAK,UAAUD,EAAY,KAAM,CAAC,EACxD,WAAW,WAAW,UAAUC,CAAa,CAC/C,OAASU,EAAiB,CACxB,MAAMf,EAAQe,EACdC,EAAAA,MAAM,MAAMhB,GAAO,SAAWiB,EAAAA,eAAe,YAAY,WAAW,EAAG,CACrE,QAASA,EAAAA,eAAe,YAAY,WAAW,CAAA,CAChD,CACH,MAEA,WAAW,WAAW,UAAUvH,CAAK,CAEzC,EAEMwH,GAAaC,GACbA,IAAS,SACJ,CACL,KAAM,gBACN,UAAW,IAAA,EAGXA,IAAS,OACJ,CACL,KAAM,mBACN,UAAW,MAAA,EAGR,CACL,KAAM,aACN,UAAW,KAAA,EAKTC,GAAmB,CAACC,EAAkBC,IAExBD,EACf,QAAQ,yBAA0B,GAAG,EACrC,QAAQ,UAAW,GAAG,EACtB,QAAQ,aAAc,EAAE,EACxB,KAAA,GAEiBC,EAGhBC,GAAqB,IAAM,CAC/B,GAAI,CACF,MAAMC,EAAO,IAAI,KAAK,CAAC9H,CAAK,EAAG,CAAE,KAAMwH,GAAUlH,CAAQ,GAAG,KAAM,EAC5DyH,EAAM,IAAI,gBAAgBD,CAAI,EAC9BE,EAAS,SAAS,cAAc,GAAG,EACzCA,EAAO,KAAOD,EACd,MAAME,EAAYT,GAAUlH,CAAQ,GAAG,WAAa,MAC9C4H,EAAqBR,GAAiBO,EAAW,KAAK,EAC5DD,EAAO,SAAWN,GAChB,QAAQ,KAAK,IAAA,CAAK,IAAIQ,CAAkB,GACxC,QAAQ,KAAK,IAAA,CAAK,IAAIA,CAAkB,EAAA,EAE1C,SAAS,KAAK,YAAYF,CAAM,EAChCA,EAAO,MAAA,EACP,SAAS,KAAK,YAAYA,CAAM,EAChC,IAAI,gBAAgBD,CAAG,CACzB,OAASV,EAAiB,CACxB,MAAMf,EAAQe,EACdC,EAAAA,MAAM,MACJhB,GAAO,SAAWiB,iBAAe,YAAY,eAAe,EAC5D,CACE,QAASA,EAAAA,eAAe,YAAY,eAAe,CAAA,CACrD,CAEJ,CACF,EAEA,OACEjI,EAAAA,IAAC6I,GAAAA,WAAA,CAAW,OAAQxF,EAAkB,UAAU,SAC9C,SAAAyF,EAAAA,KAAC,MAAA,CACC,UAAWC,GAAAA,GACT,+FACAtH,EAAA,EAEF,GAAG,uCAEH,SAAA,CAAAqH,EAAAA,KAAC,MAAA,CACC,UAAWjJ,EACT,gEAIA,sDACA8D,EAAiB,kBAAoB,aAAA,EAGtC,SAAA,CAAAA,GAAkBtC,EACjBrB,EAAAA,IAACgJ,GAAAA,OAAA,CACC,UAAWzF,IAAc,OACzB,SAAW0F,GAAYzF,GAAayF,EAAU,OAAS,MAAM,EAC7D,WAAW,GACX,WAAU,GACV,SAAQ,GACR,QAAS1F,IAAc,OAAS,YAAc,YAC9C,KAAM,CACJ,YAAavD,EAAAA,IAACkJ,cAAA,CAAW,SAAU,EAAG,UAAU,+DAA+D,EAC/G,cAAelJ,EAAAA,IAACmJ,YAAA,CAAS,SAAU,GAAI,UAAU,8DAAA,CAA+D,CAAA,CAClH,CAAA,EAEA,KACJL,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACZ,SAAA,CAAAnH,KAAuB,CACtB,OAAQI,EAAU,QAClB,MAAArB,EACA,SAAAC,EACA,SAAAK,EACA,WAAAF,EACA,UAAAyC,CAAA,CACD,EACAA,IAAc,QAAUzC,GAAcO,GACrCrB,EAAAA,IAAC,OAAA,CAAK,UAAU,qGACd,SAAAA,EAAAA,IAACoJ,EAAA,CAAQ,MAAM,UACb,SAAApJ,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,GAAG,+BACH,QAAS,IAAM0D,EAAqB,EAAI,EACxC,UAAW7D,EACT,oDACA,uFAAA,EAGF,SAAAG,EAAAA,IAACF,GAAA,CAAQ,SAAU,EAAA,CAAI,CAAA,CAAA,EAE3B,CAAA,CACF,EAEDyD,IAAc,OACbuF,EAAAA,KAAAO,EAAAA,SAAA,CACE,SAAA,CAAArJ,EAAAA,IAACoJ,EAAA,CAAQ,MAAM,eACb,SAAApJ,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,GAAG,+BACH,QAAS,IAAM2C,EAAe,EAAK,EACnC,UAAWgF,EAEX,SAAA3H,EAAAA,IAACM,GAAA,CAA0B,SAAU,EAAA,CAAI,CAAA,CAAA,EAE7C,EAEAN,EAAAA,IAACoJ,EAAA,CAAQ,MAAM,aACb,SAAApJ,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,GAAG,iCACH,QAAS,IAAM2C,EAAe,EAAI,EAClC,UAAWgF,EAEX,SAAA3H,EAAAA,IAACK,GAAA,CAA4B,SAAU,EAAA,CAAI,CAAA,CAAA,CAC7C,CACF,CAAA,CAAA,CACF,EACE,KACHkD,IAAc,QAAUlC,EACvBrB,EAAAA,IAACoJ,EAAA,CAAQ,MAAM,SACb,SAAApJ,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,GAAG,8BACH,QAAS+G,EACT,UAAWY,EAEX,SAAA3H,EAAAA,IAACQ,GAAA,CAAoB,SAAU,EAAA,CAAI,CAAA,CAAA,EAEvC,EACE,KACHK,IAAa0C,IAAc,QAAUlC,EACpCrB,EAAAA,IAACoJ,EAAA,CACC,MAAO9G,IAAgB,KAAO,YAAc,aAE5C,SAAAtC,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,GAAG,6BACH,QAAS,IACPwC,GAAeF,IAAgB,KAAO,UAAY,IAAI,EAExD,UAAWqF,EAEV,SAAArF,IAAgB,KACftC,EAAAA,IAACE,GAAA,CAAqB,SAAU,GAAI,EAEpCF,EAAAA,IAACO,GAAA,CAAsB,SAAU,EAAA,CAAI,CAAA,CAAA,CAEzC,CAAA,EAEA,MACFS,IAAa,UAAYA,IAAa,SAAWE,GACjDlB,MAACoJ,EAAA,CAAQ,MAAM,OACb,SAAApJ,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,GAAG,4BACH,QAAS4H,GACT,UAAWD,EAEX,SAAA3H,EAAAA,IAACC,GAAA,CAAwB,SAAU,EAAA,CAAI,CAAA,CAAA,EAE3C,EACE,MACFe,IAAa,UAAYA,IAAa,SACtCG,GACAnB,MAACoJ,EAAA,CAAQ,MAAM,WACb,SAAApJ,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,GAAG,gCACH,QAASuI,GACT,UAAWZ,EAEX,SAAA3H,EAAAA,IAACG,GAAA,CAAwB,SAAU,EAAA,CAAI,CAAA,CAAA,EAE3C,EACE,KACHS,GACCZ,EAAAA,IAACoJ,EAAA,CAAQ,MAAM,aACb,SAAApJ,EAAAA,IAAC,SAAA,CACC,QAAS4D,GACT,KAAK,SACL,GAAG,6BACH,UAAW+D,EAEX,SAAA3H,EAAAA,IAACI,GAAA,CAAsB,SAAU,EAAA,CAAI,CAAA,CAAA,EAEzC,EACE,IAAA,CAAA,CACN,CAAA,CAAA,CAAA,EAGDmD,IAAc,QAAUvC,IAAa,aACnC,MAAA,CACC,SAAAhB,EAAAA,IAACsJ,GAAAA,eAAA,CACC,aAAcjG,GAAkB,OAChC,YAAAX,GACA,UAAW,IAAMC,EAAgB4G,GAAS,CAACA,CAAI,EAC/C,WAAY,EAAQzI,EACpB,WAAYyB,KAAU,OACtB,MAAO,CACL,OAAQc,GAAkB,OAAS,QAAUtC,CAAA,EAE/C,MAAAL,EACA,SAAAC,EACA,qBAAA+C,EACA,kBAAAD,EAAA,CAAA,EAEJ,EAEAzD,EAAAA,IAACwJ,GAAAA,QAAA,CACC,OAAQnG,GAAkB,OAAS,QAAUtC,EAC7C,SAAAC,EACA,MAAAN,EACA,SAAU+G,GACV,MAAOnF,EACP,QAASuE,GACT,QAAS,CACP,SAAU,GACV,QAAS,GACT,WAAY,0CACZ,cAAe,GACf,SAAU,CAAC/F,CAAA,CACb,CAAA,CACF,CAAA,CAAA,EAGN,CAEJ"}
1
+ {"version":3,"file":"CodeEditor.cjs.js","sources":["../../../../src/components/data-display/code-editor/CodeEditor.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport Editor, { type OnMount } from '@monaco-editor/react';\nimport classNames from 'classnames';\nimport { type FC, useCallback, useEffect, useRef, useState } from 'react';\nimport { FullScreen, useFullScreenHandle } from 'react-full-screen';\nimport { toast } from 'react-toastify';\nimport { useMonaco } from '../../../hooks/useMonaco';\nimport { usePythonSyntax } from '../../../hooks/usePythonSyntax';\nimport { type CodeEditorProps } from '../../../types';\nimport { systemMessages } from '../../../utils/messageConstants';\nimport { JsonGrid } from './JsonGrid';\nimport Tooltip from '../../tooltip/Tooltip';\nimport { Toggle } from '../../forms/toggle/Toggle';\nimport { cn } from '../../../lib/utils';\nimport { CodeIcon, GridOnIcon } from '../../icon';\n\n// Icon class styling (matching web portal)\nconst iconClass = classNames(\n 'text-neutral-600 cursor-pointer hover:text-neutral-800',\n 'dark:text-neutral-300 dark:hover:text-neutral-50'\n);\n\n// Material Icons converted to SVG components (matching web portal icons)\nconst AddIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n </svg>\n);\n\nconst ContentPasteRoundedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M19 2h-4.18C14.4.84 13.3 0 12 0S9.6.84 9.18 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z\" />\n </svg>\n);\n\nconst DarkModeOutlinedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M9.5 2c-1.82 0-3.53.5-5 1.35 2.99 1.73 5 4.95 5 8.65s-2.01 6.92-5 8.65c1.47.85 3.18 1.35 5 1.35 5.52 0 10-4.48 10-10S15.02 2 9.5 2z\" />\n </svg>\n);\n\nconst FileDownloadRoundedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M18 15v3H6v-3H4v3c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-3h-2zm-1-4-5 5-5-5h3V4h4v7h3z\" />\n </svg>\n);\n\nconst FullscreenRoundedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\" />\n </svg>\n);\n\nconst KeyboardDoubleArrowDownIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M18 6.41 16.59 5 12 9.58 7.41 5 6 6.41l6 6z\" />\n <path d=\"m18 13-1.41-1.41L12 16.17l-4.59-4.58L6 13l6 6z\" />\n </svg>\n);\n\nconst KeyboardDoubleArrowUpIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M6 17.59 7.41 19 12 14.42 16.59 19 18 17.59l-6-6z\" />\n <path d=\"m6 11 1.41 1.41L12 7.83l4.59 4.58L18 11l-6-6z\" />\n </svg>\n);\n\nconst LightModeOutlinedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M12 9c1.65 0 3 1.35 3 3s-1.35 3-3 3-3-1.35-3-3 1.35-3 3-3m0-2c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zM2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1zm18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1zM11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1zm0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1zM5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41L5.99 4.58zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41l-1.06-1.06zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06z\" />\n </svg>\n);\n\nconst SubjectOutlinedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M14 17H4v2h10v-2zm6-8H4v2h16V9zM4 15h16v-2H4v2zM4 5v2h16V5H4z\" />\n </svg>\n);\n\ntype TTabKey = 'JSON' | 'Grid';\n\nexport const CodeEditor: FC<CodeEditorProps> = ({\n value,\n onChange = () => false,\n withFullScreen = true,\n withTheme = true,\n isEditMode = false,\n height = \"55vh\",\n language = \"json\",\n monacoEditor,\n isShowCopy = true,\n isShowDownload = true,\n setIsDisableSave,\n withJsonGrid = true,\n editorTheme: externalEditorTheme,\n setEditorTheme: externalSetEditorTheme,\n theme: externalTheme,\n className,\n enableAutoFormatting = true,\n renderToolbarActions,\n onBlockClick,\n focusBlock,\n focusBlockTopLevelOnly = false,\n}) => {\n const editorRef = useRef<any>(null);\n\n // Internal theme state (used when not provided by parent)\n const [internalEditorTheme, setInternalEditorTheme] = useState<\n \"vs\" | \"vs-dark\"\n >(\"vs\");\n const [internalTheme, setInternalTheme] = useState<\"light\" | \"dark\">(\"light\");\n\n // Use external theme if provided, otherwise use internal\n const editorTheme = externalEditorTheme ?? internalEditorTheme;\n const theme = externalTheme ?? internalTheme;\n const setEditorTheme =\n externalSetEditorTheme ??\n ((newTheme: \"vs\" | \"vs-dark\") => {\n setInternalEditorTheme(newTheme);\n setInternalTheme(newTheme === \"vs-dark\" ? \"dark\" : \"light\");\n });\n\n const [allExpanded, setAllExpanded] = useState<boolean>(false);\n const [currentEditorModel, setCurrentEditorModel] = useState<any>(null);\n const monacoInstance = useMonaco();\n\n // Use provided monacoEditor prop or fall back to our managed instance\n const activeMonacoEditor = monacoEditor || monacoInstance;\n\n const {\n handleFormatCode: handleFormatPythonCode,\n pythonError,\n pythonLoading,\n } = usePythonSyntax({\n code: value,\n setCode: onChange,\n currentEditorModel,\n monacoEditor: activeMonacoEditor,\n enable: isEditMode === true && language === \"python\",\n });\n\n const fullScreenHandle = useFullScreenHandle();\n const [activeTab, setActiveTab] = useState<TTabKey>(\"JSON\");\n const [isAddKeyModalOpen, setIsAddKeyModalOpen] = useState(false);\n const isLanguageJson = language === \"json\";\n\n const toggleFocusMode = () => {\n if (fullScreenHandle?.active) {\n fullScreenHandle.exit();\n } else {\n fullScreenHandle.enter();\n }\n };\n\n const onBlockClickRef = useRef(onBlockClick);\n onBlockClickRef.current = onBlockClick;\n\n const detectBlock = useCallback(\n async (editor: any, lineNumber: number, column: number) => {\n if (!onBlockClickRef.current) return;\n\n const model = editor.getModel();\n if (!model) return;\n\n const getTextForRange = (startLine: number, endLine: number) =>\n model.getValueInRange({\n startLineNumber: startLine,\n startColumn: 1,\n endLineNumber: endLine,\n endColumn: model.getLineMaxColumn(endLine),\n });\n\n const emitBlock = (\n startLine: number,\n endLine: number,\n text: string,\n kind?: string,\n parentBlock?: { startLine: number; endLine: number; text: string; kind?: string }\n ) => {\n onBlockClickRef.current!({\n startLine,\n endLine,\n text,\n kind,\n cursorLine: lineNumber,\n cursorColumn: column,\n parentBlock,\n });\n };\n\n try {\n const foldingContrib = editor.getContribution(\n \"editor.contrib.folding\"\n );\n if (foldingContrib) {\n const foldingModel = await (foldingContrib as any).getFoldingModel();\n if (foldingModel?.regions) {\n const regions = foldingModel.regions;\n const totalLines = model.getLineCount();\n\n // Collect all folding ranges that contain the cursor line\n const containingRanges: {\n start: number;\n end: number;\n size: number;\n kind?: string;\n }[] = [];\n\n for (let i = 0; i < regions.length; i++) {\n const start = regions.getStartLineNumber(i);\n const foldEnd = regions.getEndLineNumber(i);\n const end = Math.min(foldEnd + 1, totalLines);\n const size = end - start;\n\n if (lineNumber >= start && lineNumber <= end) {\n const rawKind = regions.getType(i);\n const kind =\n rawKind === 1\n ? \"comment\"\n : rawKind === 2\n ? \"imports\"\n : rawKind === 3\n ? \"region\"\n : undefined;\n containingRanges.push({ start, end, size, kind });\n }\n }\n\n if (containingRanges.length > 0) {\n // Sort by size: smallest first (innermost) → largest last (outermost)\n containingRanges.sort((a, b) => a.size - b.size);\n\n const innermost = containingRanges[0];\n const text = getTextForRange(innermost.start, innermost.end);\n\n // Find the outermost block that isn't the root document range.\n // Walk from largest to smallest, skip any range that starts at\n // line 1 and ends at the last line (that's the root `{}`).\n let outermost: typeof containingRanges[number] | undefined;\n for (let j = containingRanges.length - 1; j > 0; j--) {\n const r = containingRanges[j];\n const isRoot = r.start <= 1 && r.end >= totalLines;\n if (!isRoot) {\n outermost = r;\n break;\n }\n }\n\n const parentBlock =\n outermost && outermost !== innermost\n ? {\n startLine: outermost.start,\n endLine: outermost.end,\n text: getTextForRange(outermost.start, outermost.end),\n kind: outermost.kind,\n }\n : undefined;\n\n emitBlock(innermost.start, innermost.end, text, innermost.kind, parentBlock);\n return;\n }\n }\n }\n\n // Bracket matching fallback — no parent detection available\n const position = { lineNumber, column };\n const brackets = model.bracketPairs?.findEnclosingBrackets?.(position);\n\n if (brackets && brackets.length === 2) {\n const [openRange, closeRange] = brackets;\n const startLine = openRange.startLineNumber;\n const endLine = closeRange.endLineNumber;\n const text = getTextForRange(startLine, endLine);\n emitBlock(startLine, endLine, text);\n return;\n }\n\n // Full document fallback\n const totalLines = model.getLineCount();\n const text = model.getValue();\n emitBlock(1, totalLines, text);\n } catch {\n // Editor not ready — ignore silently\n }\n },\n []\n );\n\n // Navigate to a block when focusBlock changes\n useEffect(() => {\n if (!focusBlock || !editorRef.current) return;\n\n const editor = editorRef.current;\n const model = editor.getModel();\n if (!model) return;\n\n const allMatches = model.findMatches(\n focusBlock,\n true,\n false,\n true,\n null,\n false\n );\n\n if (allMatches.length === 0) return;\n\n let match = allMatches[0];\n\n if (focusBlockTopLevelOnly && allMatches.length > 1) {\n // A top-level key in formatted JSON has minimal leading whitespace\n // (one indent level). Find the match closest to column 1.\n let bestCol = Infinity;\n for (const m of allMatches) {\n const lineContent = model.getLineContent(m.range.startLineNumber);\n const leadingSpaces = lineContent.length - lineContent.trimStart().length;\n if (leadingSpaces < bestCol) {\n bestCol = leadingSpaces;\n match = m;\n }\n }\n }\n\n const matchLine = match.range.startLineNumber;\n const matchCol = match.range.startColumn;\n\n // Move cursor to the match with smooth scroll\n editor.setPosition({ lineNumber: matchLine, column: matchCol });\n editor.revealLineInCenter(matchLine, 1);\n\n // Find the enclosing block and highlight it\n const findAndHighlightBlock = async () => {\n try {\n // Try folding ranges first\n const foldingContrib = editor.getContribution(\n \"editor.contrib.folding\"\n );\n if (foldingContrib) {\n const foldingModel = await (foldingContrib as any).getFoldingModel();\n if (foldingModel?.regions) {\n const regions = foldingModel.regions;\n let bestStart = -1;\n let bestEnd = -1;\n let bestSize = Infinity;\n\n for (let i = 0; i < regions.length; i++) {\n const start = regions.getStartLineNumber(i);\n const foldEnd = regions.getEndLineNumber(i);\n const end = Math.min(foldEnd + 1, model.getLineCount());\n const size = end - start;\n\n if (\n matchLine >= start &&\n matchLine <= end &&\n size < bestSize\n ) {\n bestStart = start;\n bestEnd = end;\n bestSize = size;\n }\n }\n\n if (bestStart !== -1) {\n editor.setSelection({\n startLineNumber: bestStart,\n startColumn: 1,\n endLineNumber: bestEnd,\n endColumn: model.getLineMaxColumn(bestEnd),\n });\n editor.revealRangeInCenter({\n startLineNumber: bestStart,\n startColumn: 1,\n endLineNumber: bestEnd,\n endColumn: model.getLineMaxColumn(bestEnd),\n }, 1);\n return;\n }\n }\n }\n\n // Fall back to bracket matching\n const position = { lineNumber: matchLine, column: matchCol };\n const brackets =\n model.bracketPairs?.findEnclosingBrackets?.(position);\n\n if (brackets && brackets.length === 2) {\n const [openRange, closeRange] = brackets;\n editor.setSelection({\n startLineNumber: openRange.startLineNumber,\n startColumn: 1,\n endLineNumber: closeRange.endLineNumber,\n endColumn: model.getLineMaxColumn(closeRange.endLineNumber),\n });\n editor.revealRangeInCenter({\n startLineNumber: openRange.startLineNumber,\n startColumn: 1,\n endLineNumber: closeRange.endLineNumber,\n endColumn: model.getLineMaxColumn(closeRange.endLineNumber),\n }, 1);\n return;\n }\n\n // Last resort — just highlight the matched text\n editor.setSelection(match.range);\n } catch {\n // Folding model not ready — just highlight the match\n editor.setSelection(match.range);\n }\n };\n\n // Small delay to let folding model compute after content may have changed\n requestAnimationFrame(() => {\n findAndHighlightBlock();\n });\n }, [focusBlock, focusBlockTopLevelOnly]);\n\n const handleEditorDidMount: OnMount = (editor) => {\n editorRef.current = editor;\n\n const initializeEditor = () => {\n try {\n if (language === \"python\") {\n const model = editor.getModel();\n if (model) {\n setCurrentEditorModel(model);\n }\n }\n\n if (language === \"json\" && enableAutoFormatting) {\n requestAnimationFrame(() => {\n handleFormatCode();\n });\n }\n } catch (error) {\n console.warn(\"Failed to initialize editor:\", error);\n }\n };\n\n if (editor.getModel()) {\n initializeEditor();\n } else {\n const disposable = editor.onDidChangeModel(() => {\n initializeEditor();\n disposable.dispose();\n });\n }\n\n // Detect block on mouse click — use onMouseDown + small delay so cursor\n // position is settled before we read it\n if (onBlockClickRef.current) {\n editor.onMouseDown(() => {\n requestAnimationFrame(() => {\n const pos = editor.getPosition();\n if (pos) {\n detectBlock(editor, pos.lineNumber, pos.column);\n }\n });\n });\n }\n };\n\n const handleFormatJsonCode = () => {\n try {\n const parsedJson = JSON.parse(value);\n const formattedJson = JSON.stringify(parsedJson, null, 4);\n onChange(formattedJson);\n\n // Also update the editor model if it exists\n if (currentEditorModel && activeMonacoEditor) {\n activeMonacoEditor.editor.setModelMarkers(\n currentEditorModel,\n \"json\",\n []\n );\n }\n } catch (error) {\n // Display error visually instead of logging to console\n if (currentEditorModel && activeMonacoEditor) {\n const errorMessage =\n error instanceof Error ? error.message : \"Invalid JSON\";\n try {\n activeMonacoEditor.editor.setModelMarkers(\n currentEditorModel,\n \"json\",\n [\n {\n startLineNumber: 1,\n startColumn: 1,\n endLineNumber: 1,\n endColumn: 1,\n message: `Cannot format: ${errorMessage}`,\n severity: activeMonacoEditor.MarkerSeverity.Error,\n },\n ]\n );\n } catch (markerError) {\n console.warn(\"Failed to set JSON error markers:\", markerError);\n }\n }\n }\n };\n\n const handleFormatCode = () => {\n if (language === \"python\") {\n handleFormatPythonCode();\n return;\n }\n\n if (language === \"json\") {\n handleFormatJsonCode();\n return;\n }\n\n if (editorRef.current) {\n try {\n const formatAction = editorRef.current.getAction(\n \"editor.action.formatDocument\"\n );\n if (formatAction) {\n formatAction.run();\n }\n } catch (error) {\n console.warn(\"Failed to format document:\", error);\n }\n }\n };\n\n const handleChange = (newValue: string | undefined) => {\n if (typeof newValue === \"string\") {\n onChange(newValue);\n }\n };\n\n useEffect(() => {\n if (setIsDisableSave) {\n setIsDisableSave(pythonError || pythonLoading);\n }\n }, [pythonError, pythonLoading, setIsDisableSave]);\n\n // Don't render the editor until Monaco is ready (unless we have a provided instance)\n if (!monacoEditor && !monacoInstance) {\n return (\n <div className=\"flex items-center justify-center p-8 border border-neutral-200 dark:border-neutral-700 rounded-lg\">\n <div className=\"text-neutral-600 dark:text-neutral-400\">\n Loading editor...\n </div>\n </div>\n );\n }\n\n const hoverClass = classNames(\n \"hover:bg-neutral-300 hover:dark:bg-neutral-700 p-0.5 rounded-md flex items-center justify-center\"\n );\n\n const handleCopyCode = () => {\n if (language === \"python\") {\n try {\n let formattedCode = value;\n if (formattedCode) {\n formattedCode = formattedCode\n .replace(/\\r\\n/g, \"\\n\")\n .replace(/\\r/g, \"\\n\");\n formattedCode = formattedCode\n .split(\"\\n\")\n .map((line) => line.trimEnd())\n .join(\"\\n\");\n formattedCode = formattedCode.replace(/\\n+$/, \"\") + \"\\n\";\n }\n\n navigator?.clipboard\n ?.writeText(formattedCode)\n .then(() => {\n // show success toast (kept silent as in web portal)\n })\n .catch((_error: unknown) => {\n const error = _error as Error;\n toast.error(\n error?.message || systemMessages.copyFailure(\"Python Code\"),\n {\n toastId: systemMessages.copyFailure(\"Python Code\"),\n }\n );\n });\n } catch (_error: unknown) {\n const error = _error as Error;\n toast.error(\n error?.message || systemMessages.copyFailure(\"Python Code\"),\n {\n toastId: systemMessages.copyFailure(\"Python Code\"),\n }\n );\n }\n } else if (language === \"json\") {\n try {\n const parsedJson = JSON.parse(value);\n const formattedJson = JSON.stringify(parsedJson, null, 4);\n navigator?.clipboard?.writeText(formattedJson);\n } catch (_error: unknown) {\n const error = _error as Error;\n toast.error(error?.message || systemMessages.copyFailure(\"JSON Code\"), {\n toastId: systemMessages.copyFailure(\"JSON Code\"),\n });\n }\n } else {\n navigator?.clipboard?.writeText(value);\n }\n };\n\n const getConfig = (code: string) => {\n if (code === \"python\") {\n return {\n type: \"text/x-python\",\n extension: \"py\",\n };\n }\n if (code === \"json\") {\n return {\n type: \"application/json\",\n extension: \"json\",\n };\n }\n return {\n type: \"text/plain\",\n extension: \"txt\",\n };\n };\n\n // Sanitize filename utility (matching web portal implementation)\n const sanitizeFilename = (filename: string, fallback: string): string => {\n // Remove or replace potentially dangerous characters\n const sanitized = filename\n .replace(/[<>:\"/\\\\|?*\\x00-\\x1f]/g, \"_\") // Replace illegal chars\n .replace(/\\.{2,}/g, \".\") // Replace multiple dots\n .replace(/^\\.+|\\.+$/g, \"\") // Remove leading/trailing dots\n .trim();\n\n return sanitized || fallback;\n };\n\n const handleDownloadCode = () => {\n try {\n const blob = new Blob([value], { type: getConfig(language)?.type });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n const extension = getConfig(language)?.extension || \"txt\";\n const sanitizedExtension = sanitizeFilename(extension, \"txt\");\n anchor.download = sanitizeFilename(\n `code_${Date.now()}.${sanitizedExtension}`,\n `code_${Date.now()}.${sanitizedExtension}`\n );\n document.body.appendChild(anchor);\n anchor.click();\n document.body.removeChild(anchor);\n URL.revokeObjectURL(url);\n } catch (_error: unknown) {\n const error = _error as Error;\n toast.error(\n error?.message || systemMessages.copyFailure(\"Code download\"),\n {\n toastId: systemMessages.copyFailure(\"Code download\"),\n }\n );\n }\n };\n\n return (\n <FullScreen handle={fullScreenHandle} className=\"h-full\">\n <div\n className={cn(\n \"relative border border-neutral-200 dark:border-neutral-700 rounded-lg h-full overflow-hidden\",\n className\n )}\n id=\"code-editor-container-with-json-grid\"\n >\n <div\n className={classNames(\n `px-3 py-2 flex items-center bg-neutral-50 dark:bg-neutral-800`,\n // withJsonGrid\n // ? \"border-none\"\n // : \"border-b border-neutral-200 dark:border-neutral-700\",\n \"border-b border-neutral-200 dark:border-neutral-700\",\n isLanguageJson ? \"justify-between\" : \"justify-end\"\n )}\n >\n {isLanguageJson && withJsonGrid ? (\n <Toggle\n isChecked={activeTab === \"Grid\"}\n onChange={(checked) => setActiveTab(checked ? \"Grid\" : \"JSON\")}\n statusText=''\n hideStatus\n withIcon\n tooltip={activeTab === \"JSON\" ? \"Grid view\" : \"Code view\"}\n icon={{\n checkedIcon: <GridOnIcon className=\"cursor-pointer !block text-primary-600 dark:text-neutral-300 h-2xs w-2xs lg:h-xs lg:w-xs\" />,\n uncheckedIcon: <CodeIcon className=\"cursor-pointer !block text-neutral-700 dark:text-neutral-400 h-2xs w-2xs lg:h-xs lg:w-xs\" />,\n }}\n />\n ) : null}\n <div className=\"flex items-center gap-0.5\">\n {renderToolbarActions?.({\n editor: editorRef.current,\n value,\n onChange,\n language,\n isEditMode,\n activeTab,\n })}\n {activeTab === \"Grid\" && isEditMode && withJsonGrid && (\n <span className=\"flex items-center justify-center border-r border-neutral-200 dark:border-neutral-700 mr-1.5 pr-1.5\">\n <Tooltip title=\"Add key\">\n <button\n type='button'\n id=\"btn-code-editor-json-grid-up\"\n onClick={() => setIsAddKeyModalOpen(true)}\n className={classNames(\n \"p-0.5 rounded-md flex items-center justify-center\",\n \"hover:bg-primary-100 hover:dark:bg-neutral-800 text-primary-600 dark:text-neutral-100\"\n )}\n >\n <AddIcon fontSize={16} />\n </button>\n </Tooltip>\n </span>\n )}\n {activeTab === \"Grid\" ? (\n <>\n <Tooltip title=\"Collapse all\">\n <button\n type='button'\n id=\"btn-code-editor-json-grid-up\"\n onClick={() => setAllExpanded(false)}\n className={hoverClass}\n >\n <KeyboardDoubleArrowUpIcon fontSize={16} />\n </button>\n </Tooltip>\n\n <Tooltip title=\"Expand all\">\n <button\n type='button'\n id=\"btn-code-editor-json-grid-down\"\n onClick={() => setAllExpanded(true)}\n className={hoverClass}\n >\n <KeyboardDoubleArrowDownIcon fontSize={16} />\n </button>\n </Tooltip>\n </>\n ) : null}\n {activeTab === \"JSON\" && withJsonGrid ? (\n <Tooltip title=\"Format\">\n <button\n type='button'\n id=\"btn-code-editor-format-code\"\n onClick={handleFormatCode}\n className={hoverClass}\n >\n <SubjectOutlinedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n {withTheme && activeTab === \"JSON\" && withJsonGrid ? (\n <Tooltip\n title={editorTheme === \"vs\" ? \"Dark mode\" : \"Light mode\"}\n >\n <button\n type='button'\n id=\"btn-code-editor-with-theme\"\n onClick={() =>\n setEditorTheme(editorTheme === \"vs\" ? \"vs-dark\" : \"vs\")\n }\n className={hoverClass}\n >\n {editorTheme === \"vs\" ? (\n <DarkModeOutlinedIcon fontSize={14} />\n ) : (\n <LightModeOutlinedIcon fontSize={14} />\n )}\n </button>\n </Tooltip>\n ) : null}\n {(language === \"python\" || language === \"json\") && isShowCopy ? (\n <Tooltip title=\"Copy\">\n <button\n type='button'\n id=\"btn-code-editor-copy-code\"\n onClick={handleCopyCode}\n className={hoverClass}\n >\n <ContentPasteRoundedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n {(language === \"python\" || language === \"json\") &&\n isShowDownload ? (\n <Tooltip title=\"Download\">\n <button\n type='button'\n id=\"btn-code-editor-download-code\"\n onClick={handleDownloadCode}\n className={hoverClass}\n >\n <FileDownloadRoundedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n {withFullScreen ? (\n <Tooltip title=\"Fullscreen\">\n <button\n onClick={toggleFocusMode}\n type='button'\n id=\"btn-code-editor-fullscreen\"\n className={hoverClass}\n >\n <FullscreenRoundedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n </div>\n </div>\n\n {activeTab === \"Grid\" && language === \"json\" ? (\n <div>\n <JsonGrid\n isFullScreen={fullScreenHandle?.active}\n allExpanded={allExpanded}\n toggleAll={() => setAllExpanded((prev) => !prev)}\n isEditMode={Boolean(isEditMode)}\n isDarkMode={theme === \"dark\"}\n style={{\n height: fullScreenHandle?.active ? \"100vh\" : height,\n }}\n value={value}\n onChange={onChange}\n setIsAddKeyModalOpen={setIsAddKeyModalOpen}\n isAddKeyModalOpen={isAddKeyModalOpen}\n />\n </div>\n ) : (\n <Editor\n height={fullScreenHandle?.active ? \"100vh\" : height}\n language={language}\n value={value}\n onChange={handleChange}\n theme={editorTheme}\n onMount={handleEditorDidMount}\n options={{\n fontSize: 16,\n folding: true,\n fontFamily: \"Menlo, Monaco, 'Courier New', monospace\",\n fontLigatures: true,\n readOnly: !isEditMode,\n }}\n />\n )}\n </div>\n </FullScreen>\n );\n};\n"],"names":["iconClass","classNames","AddIcon","fontSize","jsx","ContentPasteRoundedIcon","DarkModeOutlinedIcon","FileDownloadRoundedIcon","FullscreenRoundedIcon","KeyboardDoubleArrowDownIcon","KeyboardDoubleArrowUpIcon","LightModeOutlinedIcon","SubjectOutlinedIcon","CodeEditor","value","onChange","withFullScreen","withTheme","isEditMode","height","language","monacoEditor","isShowCopy","isShowDownload","setIsDisableSave","withJsonGrid","externalEditorTheme","externalSetEditorTheme","externalTheme","className","enableAutoFormatting","renderToolbarActions","onBlockClick","focusBlock","focusBlockTopLevelOnly","editorRef","useRef","internalEditorTheme","setInternalEditorTheme","useState","internalTheme","setInternalTheme","editorTheme","theme","setEditorTheme","newTheme","allExpanded","setAllExpanded","currentEditorModel","setCurrentEditorModel","monacoInstance","useMonaco","activeMonacoEditor","handleFormatPythonCode","pythonError","pythonLoading","usePythonSyntax","fullScreenHandle","useFullScreenHandle","activeTab","setActiveTab","isAddKeyModalOpen","setIsAddKeyModalOpen","isLanguageJson","toggleFocusMode","onBlockClickRef","detectBlock","useCallback","editor","lineNumber","column","model","getTextForRange","startLine","endLine","emitBlock","text","kind","parentBlock","foldingContrib","foldingModel","regions","totalLines","containingRanges","i","start","foldEnd","end","size","rawKind","a","b","innermost","outermost","j","r","position","brackets","openRange","closeRange","useEffect","allMatches","match","bestCol","m","lineContent","leadingSpaces","matchLine","matchCol","findAndHighlightBlock","bestStart","bestEnd","bestSize","handleEditorDidMount","initializeEditor","handleFormatCode","error","disposable","pos","handleFormatJsonCode","parsedJson","formattedJson","errorMessage","markerError","formatAction","handleChange","newValue","hoverClass","handleCopyCode","formattedCode","line","_error","toast","systemMessages","getConfig","code","sanitizeFilename","filename","fallback","handleDownloadCode","blob","url","anchor","extension","sanitizedExtension","FullScreen","jsxs","cn","Toggle","checked","GridOnIcon","CodeIcon","Tooltip","Fragment","JsonGrid","prev","Editor"],"mappings":"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"}
@@ -44,9 +44,9 @@ const w = V(
44
44
  focusBlock: $,
45
45
  focusBlockTopLevelOnly: q = !1
46
46
  }) => {
47
- const F = re(null), [ge, be] = E("vs"), [ve, Ce] = E("light"), A = ae ?? ge, ye = he ?? ve, Ne = ue ?? ((e) => {
47
+ const S = re(null), [ge, be] = E("vs"), [ve, Ce] = E("light"), A = ae ?? ge, ye = he ?? ve, xe = ue ?? ((e) => {
48
48
  be(e), Ce(e === "vs-dark" ? "dark" : "light");
49
- }), [xe, _] = E(!1), [H, Le] = E(null), Q = Be(), j = K || Q, {
49
+ }), [Ne, _] = E(!1), [H, Le] = E(null), Q = Be(), j = K || Q, {
50
50
  handleFormatCode: ke,
51
51
  pythonError: W,
52
52
  pythonLoading: X
@@ -56,11 +56,11 @@ const w = V(
56
56
  currentEditorModel: H,
57
57
  monacoEditor: j,
58
58
  enable: J === !0 && s === "python"
59
- }), z = Te(), [x, Me] = E("JSON"), [we, Y] = E(!1), Z = s === "json", ze = () => {
59
+ }), z = Te(), [N, Me] = E("JSON"), [we, Y] = E(!1), Z = s === "json", ze = () => {
60
60
  z?.active ? z.exit() : z.enter();
61
61
  }, B = re(U);
62
62
  B.current = U;
63
- const Se = He(
63
+ const Fe = He(
64
64
  async (e, n, r) => {
65
65
  if (!B.current) return;
66
66
  const c = e.getModel();
@@ -92,18 +92,18 @@ const w = V(
92
92
  for (let i = 0; i < f.length; i++) {
93
93
  const C = f.getStartLineNumber(i), m = f.getEndLineNumber(i), y = Math.min(m + 1, p), v = y - C;
94
94
  if (n >= C && n <= y) {
95
- const N = f.getType(i), oe = N === 1 ? "comment" : N === 2 ? "imports" : N === 3 ? "region" : void 0;
95
+ const x = f.getType(i), oe = x === 1 ? "comment" : x === 2 ? "imports" : x === 3 ? "region" : void 0;
96
96
  h.push({ start: C, end: y, size: v, kind: oe });
97
97
  }
98
98
  }
99
99
  if (h.length > 0) {
100
- h.sort((v, N) => v.size - N.size);
100
+ h.sort((v, x) => v.size - x.size);
101
101
  const i = h[0], C = d(i.start, i.end);
102
102
  let m;
103
103
  for (let v = h.length - 1; v > 0; v--) {
104
- const N = h[v];
105
- if (!(N.start <= 1 && N.end >= p)) {
106
- m = N;
104
+ const x = h[v];
105
+ if (!(x.start <= 1 && x.end >= p)) {
106
+ m = x;
107
107
  break;
108
108
  }
109
109
  }
@@ -132,8 +132,8 @@ const w = V(
132
132
  []
133
133
  );
134
134
  ie(() => {
135
- if (!$ || !F.current) return;
136
- const e = F.current, n = e.getModel();
135
+ if (!$ || !S.current) return;
136
+ const e = S.current, n = e.getModel();
137
137
  if (!n) return;
138
138
  const r = n.findMatches(
139
139
  $,
@@ -209,8 +209,8 @@ const w = V(
209
209
  L();
210
210
  });
211
211
  }, [$, q]);
212
- const Fe = (e) => {
213
- F.current = e;
212
+ const Se = (e) => {
213
+ S.current = e;
214
214
  const n = () => {
215
215
  try {
216
216
  if (s === "python") {
@@ -234,7 +234,7 @@ const w = V(
234
234
  B.current && e.onMouseDown(() => {
235
235
  requestAnimationFrame(() => {
236
236
  const r = e.getPosition();
237
- r && Se(e, r.lineNumber, r.column);
237
+ r && Fe(e, r.lineNumber, r.column);
238
238
  });
239
239
  });
240
240
  }, je = () => {
@@ -277,9 +277,9 @@ const w = V(
277
277
  je();
278
278
  return;
279
279
  }
280
- if (F.current)
280
+ if (S.current)
281
281
  try {
282
- const e = F.current.getAction(
282
+ const e = S.current.getAction(
283
283
  "editor.action.formatDocument"
284
284
  );
285
285
  e && e.run();
@@ -293,7 +293,7 @@ const w = V(
293
293
  P && P(W || X);
294
294
  }, [W, X, P]), !K && !Q)
295
295
  return /* @__PURE__ */ t("div", { className: "flex items-center justify-center p-8 border border-neutral-200 dark:border-neutral-700 rounded-lg", children: /* @__PURE__ */ t("div", { className: "text-neutral-600 dark:text-neutral-400", children: "Loading editor..." }) });
296
- const S = V(
296
+ const F = V(
297
297
  "hover:bg-neutral-300 hover:dark:bg-neutral-700 p-0.5 rounded-md flex items-center justify-center"
298
298
  ), Ee = () => {
299
299
  if (s === "python")
@@ -387,28 +387,28 @@ const w = V(
387
387
  Z && T ? /* @__PURE__ */ t(
388
388
  Ve,
389
389
  {
390
- isChecked: x === "Grid",
390
+ isChecked: N === "Grid",
391
391
  onChange: (e) => Me(e ? "Grid" : "JSON"),
392
392
  statusText: "",
393
393
  hideStatus: !0,
394
394
  withIcon: !0,
395
- tooltip: x === "JSON" ? "Grid view" : "Code view",
395
+ tooltip: N === "JSON" ? "Grid view" : "Code view",
396
396
  icon: {
397
- checkedIcon: /* @__PURE__ */ t(_e, { fontSize: 6, className: "cursor-pointer !block text-primary-600 dark:text-neutral-300" }),
398
- uncheckedIcon: /* @__PURE__ */ t($e, { fontSize: 10, className: "cursor-pointer !block text-neutral-700 dark:text-neutral-400" })
397
+ checkedIcon: /* @__PURE__ */ t(_e, { className: "cursor-pointer !block text-primary-600 dark:text-neutral-300 h-2xs w-2xs lg:h-xs lg:w-xs" }),
398
+ uncheckedIcon: /* @__PURE__ */ t($e, { className: "cursor-pointer !block text-neutral-700 dark:text-neutral-400 h-2xs w-2xs lg:h-xs lg:w-xs" })
399
399
  }
400
400
  }
401
401
  ) : null,
402
402
  /* @__PURE__ */ O("div", { className: "flex items-center gap-0.5", children: [
403
403
  pe?.({
404
- editor: F.current,
404
+ editor: S.current,
405
405
  value: o,
406
406
  onChange: R,
407
407
  language: s,
408
408
  isEditMode: J,
409
- activeTab: x
409
+ activeTab: N
410
410
  }),
411
- x === "Grid" && J && T && /* @__PURE__ */ t("span", { className: "flex items-center justify-center border-r border-neutral-200 dark:border-neutral-700 mr-1.5 pr-1.5", children: /* @__PURE__ */ t(M, { title: "Add key", children: /* @__PURE__ */ t(
411
+ N === "Grid" && J && T && /* @__PURE__ */ t("span", { className: "flex items-center justify-center border-r border-neutral-200 dark:border-neutral-700 mr-1.5 pr-1.5", children: /* @__PURE__ */ t(M, { title: "Add key", children: /* @__PURE__ */ t(
412
412
  "button",
413
413
  {
414
414
  type: "button",
@@ -421,14 +421,14 @@ const w = V(
421
421
  children: /* @__PURE__ */ t(Ke, { fontSize: 16 })
422
422
  }
423
423
  ) }) }),
424
- x === "Grid" ? /* @__PURE__ */ O(Re, { children: [
424
+ N === "Grid" ? /* @__PURE__ */ O(Re, { children: [
425
425
  /* @__PURE__ */ t(M, { title: "Collapse all", children: /* @__PURE__ */ t(
426
426
  "button",
427
427
  {
428
428
  type: "button",
429
429
  id: "btn-code-editor-json-grid-up",
430
430
  onClick: () => _(!1),
431
- className: S,
431
+ className: F,
432
432
  children: /* @__PURE__ */ t(Ye, { fontSize: 16 })
433
433
  }
434
434
  ) }),
@@ -438,22 +438,22 @@ const w = V(
438
438
  type: "button",
439
439
  id: "btn-code-editor-json-grid-down",
440
440
  onClick: () => _(!0),
441
- className: S,
441
+ className: F,
442
442
  children: /* @__PURE__ */ t(Xe, { fontSize: 16 })
443
443
  }
444
444
  ) })
445
445
  ] }) : null,
446
- x === "JSON" && T ? /* @__PURE__ */ t(M, { title: "Format", children: /* @__PURE__ */ t(
446
+ N === "JSON" && T ? /* @__PURE__ */ t(M, { title: "Format", children: /* @__PURE__ */ t(
447
447
  "button",
448
448
  {
449
449
  type: "button",
450
450
  id: "btn-code-editor-format-code",
451
451
  onClick: ee,
452
- className: S,
452
+ className: F,
453
453
  children: /* @__PURE__ */ t(et, { fontSize: 14 })
454
454
  }
455
455
  ) }) : null,
456
- ce && x === "JSON" && T ? /* @__PURE__ */ t(
456
+ ce && N === "JSON" && T ? /* @__PURE__ */ t(
457
457
  M,
458
458
  {
459
459
  title: A === "vs" ? "Dark mode" : "Light mode",
@@ -462,8 +462,8 @@ const w = V(
462
462
  {
463
463
  type: "button",
464
464
  id: "btn-code-editor-with-theme",
465
- onClick: () => Ne(A === "vs" ? "vs-dark" : "vs"),
466
- className: S,
465
+ onClick: () => xe(A === "vs" ? "vs-dark" : "vs"),
466
+ className: F,
467
467
  children: A === "vs" ? /* @__PURE__ */ t(qe, { fontSize: 14 }) : /* @__PURE__ */ t(Ze, { fontSize: 14 })
468
468
  }
469
469
  )
@@ -475,7 +475,7 @@ const w = V(
475
475
  type: "button",
476
476
  id: "btn-code-editor-copy-code",
477
477
  onClick: Ee,
478
- className: S,
478
+ className: F,
479
479
  children: /* @__PURE__ */ t(Ue, { fontSize: 14 })
480
480
  }
481
481
  ) }) : null,
@@ -485,7 +485,7 @@ const w = V(
485
485
  type: "button",
486
486
  id: "btn-code-editor-download-code",
487
487
  onClick: Oe,
488
- className: S,
488
+ className: F,
489
489
  children: /* @__PURE__ */ t(Qe, { fontSize: 14 })
490
490
  }
491
491
  ) }) : null,
@@ -495,7 +495,7 @@ const w = V(
495
495
  onClick: ze,
496
496
  type: "button",
497
497
  id: "btn-code-editor-fullscreen",
498
- className: S,
498
+ className: F,
499
499
  children: /* @__PURE__ */ t(We, { fontSize: 14 })
500
500
  }
501
501
  ) }) : null
@@ -503,11 +503,11 @@ const w = V(
503
503
  ]
504
504
  }
505
505
  ),
506
- x === "Grid" && s === "json" ? /* @__PURE__ */ t("div", { children: /* @__PURE__ */ t(
506
+ N === "Grid" && s === "json" ? /* @__PURE__ */ t("div", { children: /* @__PURE__ */ t(
507
507
  Ge,
508
508
  {
509
509
  isFullScreen: z?.active,
510
- allExpanded: xe,
510
+ allExpanded: Ne,
511
511
  toggleAll: () => _((e) => !e),
512
512
  isEditMode: !!J,
513
513
  isDarkMode: ye === "dark",
@@ -527,7 +527,7 @@ const w = V(
527
527
  value: o,
528
528
  onChange: Ie,
529
529
  theme: A,
530
- onMount: Fe,
530
+ onMount: Se,
531
531
  options: {
532
532
  fontSize: 16,
533
533
  folding: !0,