@pstdio/ui 0.17.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{MermaidComponent-BCMQqPqu.js → MermaidComponent-BPiVFNYK.js} +2 -2
- package/dist/{MermaidComponent-BCMQqPqu.js.map → MermaidComponent-BPiVFNYK.js.map} +1 -1
- package/dist/chat-ui.js +941 -899
- package/dist/chat-ui.js.map +1 -1
- package/dist/components/chat-ui/components/chat-message-list-items.d.ts +17 -0
- package/dist/components/chat-ui/components/message-types.d.ts +1 -0
- package/dist/components/chat-ui/components/timeline.d.ts +2 -0
- package/dist/components/chat-ui/tool-rendering/default-renderers.d.ts +1 -0
- package/dist/components/chat-ui/tool-rendering/shared.d.ts +3 -2
- package/dist/components/chat-ui/tool-rendering/standard-renderers.d.ts +1 -0
- package/dist/components/data-table/data-table-column-menu.d.ts +4 -1
- package/dist/components/data-table/data-table-header.d.ts +0 -8
- package/dist/components/data-table/data-table-skeleton.d.ts +13 -0
- package/dist/components/data-table/editable-cells-story.d.ts +9 -0
- package/dist/components/data-table/index.d.ts +2 -0
- package/dist/components/diff-viewer/code-editor.d.ts +2 -0
- package/dist/components/diff-viewer/index.d.ts +1 -1
- package/dist/components/diff-viewer/monaco-browser.d.ts +1 -0
- package/dist/components/overlays/dialog-accept-shortcut.d.ts +12 -0
- package/dist/components/overlays/index.d.ts +1 -0
- package/dist/components/overlays/searchable-menu-input.d.ts +9 -0
- package/dist/components/param-editor/index.d.ts +7 -2
- package/dist/components/param-editor/inputs/action-input.d.ts +1 -0
- package/dist/components/param-editor/inputs/boolean-input.d.ts +13 -0
- package/dist/components/param-editor/inputs/color-input.d.ts +1 -0
- package/dist/components/param-editor/inputs/date-input.d.ts +1 -0
- package/dist/components/param-editor/inputs/file-upload-input.d.ts +15 -0
- package/dist/components/param-editor/inputs/file-upload-value.d.ts +7 -0
- package/dist/components/param-editor/inputs/horizontal-text-input.d.ts +1 -0
- package/dist/components/param-editor/inputs/markdown-input.d.ts +13 -0
- package/dist/components/param-editor/inputs/number-input.d.ts +1 -0
- package/dist/components/param-editor/inputs/range-input.d.ts +1 -0
- package/dist/components/param-editor/inputs/resource-input.d.ts +2 -0
- package/dist/components/param-editor/inputs/segmented-input.d.ts +1 -0
- package/dist/components/param-editor/inputs/selection-input.d.ts +6 -0
- package/dist/components/param-editor/inputs/selection-menu.d.ts +10 -0
- package/dist/components/param-editor/inputs/text-input.d.ts +1 -0
- package/dist/components/param-editor/param-editor-advanced-field.d.ts +14 -0
- package/dist/components/param-editor/param-editor-control-fixtures.d.ts +24 -0
- package/dist/components/param-editor/param-editor-field.d.ts +2 -0
- package/dist/components/param-editor/param-editor-horizontal.d.ts +2 -2
- package/dist/components/param-editor/param-editor-label.d.ts +1 -0
- package/dist/components/param-editor/param-editor-presentation.d.ts +3 -0
- package/dist/components/param-editor/param-editor-row.d.ts +17 -0
- package/dist/components/param-editor/param-editor.types.d.ts +43 -13
- package/dist/components/param-editor/resolve-param-value.d.ts +2 -0
- package/dist/components/primitives/chip.d.ts +4 -0
- package/dist/components/primitives/glyph-icon.d.ts +16 -0
- package/dist/components/primitives/icon-color-picker.d.ts +3 -13
- package/dist/components/primitives/icon-options.d.ts +301 -0
- package/dist/components/primitives/index.d.ts +12 -3
- package/dist/components/primitives/resource-badge.d.ts +12 -10
- package/dist/components/primitives/segmented-control.d.ts +20 -0
- package/dist/components/primitives/tag-swatch.d.ts +10 -0
- package/dist/components/rich-text/index.d.ts +1 -0
- package/dist/components/rich-text/lazy-markdown-editor.d.ts +2 -0
- package/dist/components/rich-text/utils/inferResourceType.d.ts +1 -1
- package/dist/components/tag-editor/index.d.ts +4 -0
- package/dist/components/tag-editor/tag-editor-heading.d.ts +11 -0
- package/dist/components/tag-editor/tag-editor-row.d.ts +1 -1
- package/dist/components/tag-editor/tag-editor-save-bar.d.ts +13 -0
- package/dist/components/tag-editor/tag-editor.types.d.ts +11 -11
- package/dist/components/tag-editor/tag-settings-panel.d.ts +3 -1
- package/dist/data-table.js +1018 -926
- package/dist/data-table.js.map +1 -1
- package/dist/dialog-accept-shortcut-DAEBsoWW.js +7 -0
- package/dist/dialog-accept-shortcut-DAEBsoWW.js.map +1 -0
- package/dist/diff.js +370 -366
- package/dist/diff.js.map +1 -1
- package/dist/font/css/prompt-studio-icons.css +720 -0
- package/dist/font/prompt-studio-icons.eot +0 -0
- package/dist/font/prompt-studio-icons.svg +1 -0
- package/dist/font/prompt-studio-icons.ttf +0 -0
- package/dist/font/prompt-studio-icons.woff +0 -0
- package/dist/font/prompt-studio-icons.woff2 +0 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1958 -1744
- package/dist/index.js.map +1 -1
- package/dist/{kanban-renderer-toolbar-B9ro-9z1.js → kanban-renderer-toolbar-Bcj_N1qr.js} +66 -66
- package/dist/kanban-renderer-toolbar-Bcj_N1qr.js.map +1 -0
- package/dist/kanban-renderer.js +834 -817
- package/dist/kanban-renderer.js.map +1 -1
- package/dist/lazy-markdown-editor-DwhqQ-NN.js +26 -0
- package/dist/lazy-markdown-editor-DwhqQ-NN.js.map +1 -0
- package/dist/list-row-BtoVJpFs.js +821 -0
- package/dist/list-row-BtoVJpFs.js.map +1 -0
- package/dist/markdown-DDd2ESoH.js +743 -0
- package/dist/markdown-DDd2ESoH.js.map +1 -0
- package/dist/markdown-editor-CYVkzt8t.js +741 -0
- package/dist/markdown-editor-CYVkzt8t.js.map +1 -0
- package/dist/monaco-browser-CO0NxK_Z.js +19 -0
- package/dist/monaco-browser-CO0NxK_Z.js.map +1 -0
- package/dist/param-editor-XRjSu6MT.js +161 -0
- package/dist/param-editor-XRjSu6MT.js.map +1 -0
- package/dist/param-editor-field-B9lEPq8c.js +3028 -0
- package/dist/param-editor-field-B9lEPq8c.js.map +1 -0
- package/dist/resource-badge-CuItchgL.js +98 -0
- package/dist/resource-badge-CuItchgL.js.map +1 -0
- package/dist/rich-message--eRzjWYK.js +730 -0
- package/dist/rich-message--eRzjWYK.js.map +1 -0
- package/dist/rich-text.js +114 -827
- package/dist/rich-text.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/theme/primitives/fonts.d.ts +3 -0
- package/dist/theme/primitives/sizes.d.ts +59 -0
- package/dist/theme/recipes/badge.d.ts +8 -0
- package/dist/theme/recipes/color-picker.d.ts +18 -1
- package/dist/theme/recipes/segmented-control.d.ts +22 -0
- package/dist/theme/recipes/switch.d.ts +18 -0
- package/dist/theme/recipes/tabs.d.ts +11 -0
- package/dist/{theme-CNhnbvcE.js → theme-7PDdD9OD.js} +403 -195
- package/dist/theme-7PDdD9OD.js.map +1 -0
- package/dist/theme.js +1 -1
- package/dist/{tree-list-CZHLAURU.js → tree-list-B2L0cTj2.js} +2 -2
- package/dist/{tree-list-CZHLAURU.js.map → tree-list-B2L0cTj2.js.map} +1 -1
- package/package.json +3 -2
- package/dist/components/param-editor/inputs/file-accept.d.ts +0 -22
- package/dist/components/param-editor/inputs/file-drop-input.d.ts +0 -14
- package/dist/kanban-renderer-toolbar-B9ro-9z1.js.map +0 -1
- package/dist/list-row-YRUxEcy3.js +0 -808
- package/dist/list-row-YRUxEcy3.js.map +0 -1
- package/dist/param-editor-CYZJbmKu.js +0 -933
- package/dist/param-editor-CYZJbmKu.js.map +0 -1
- package/dist/param-editor-read-only-field-DgtLqcFa.js +0 -925
- package/dist/param-editor-read-only-field-DgtLqcFa.js.map +0 -1
- package/dist/prism-BXb57lxL.js +0 -125
- package/dist/prism-BXb57lxL.js.map +0 -1
- package/dist/resource-badge-qCWHP-wQ.js +0 -99
- package/dist/resource-badge-qCWHP-wQ.js.map +0 -1
- package/dist/rich-message-DBf_5YlW.js +0 -1450
- package/dist/rich-message-DBf_5YlW.js.map +0 -1
- package/dist/theme-CNhnbvcE.js.map +0 -1
package/dist/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sources":["../src/components/diff-viewer/code-editor.tsx","../../pstdio-file-types/src/index.ts","../src/components/diff-viewer/diff-size.ts","../src/components/diff-viewer/diff-card-body.tsx","../src/components/diff-viewer/diff-card-load-state.tsx","../src/components/diff-viewer/diff-card-content.tsx","../src/components/diff-viewer/diff-card.tsx","../src/components/diff-viewer/diff-drawer-empty-state.tsx","../src/components/diff-viewer/diff-drawer-height.ts","../src/components/diff-viewer/diff-drawer-scroll.ts","../src/components/diff-viewer/use-selected-diff-scroll.ts","../src/components/diff-viewer/diff-drawer.tsx","../src/components/diff-viewer/build-changed-files-tree.ts","../src/components/diff-viewer/diff-viewer.store.ts","../src/components/diff-viewer/diff-viewer-options-menu.tsx","../src/components/diff-viewer/file-list-panel.tsx","../src/components/diff-viewer/diff-viewer.tsx"],"sourcesContent":["import { DiffEditor, Editor } from \"@monaco-editor/react\";\nimport { useEffect, useRef } from \"react\";\nimport type { MonacoThemeData } from \"../../theme\";\nimport { useThemePreference } from \"../../utils/theme-preference\";\n\nexport const customTheme = {\n base: \"vs-dark\" as const,\n inherit: true,\n rules: [],\n colors: {\n \"editor.background\": \"#0a0d15\",\n \"editor.foreground\": \"#f5f5f5\",\n \"editor.lineHighlightBackground\": \"#22252C\",\n \"editorCursor.foreground\": \"#A7A7A7\",\n \"editorWhitespace.foreground\": \"#3B3B3B\",\n \"editorIndentGuide.background\": \"#404040\",\n \"editorIndentGuide.activeBackground\": \"#707070\",\n },\n} satisfies MonacoThemeData;\n\nconst isMonacoTheme = (value: unknown): value is MonacoThemeData =>\n typeof value === \"object\" && value !== null && \"base\" in value && \"colors\" in value;\n\ntype MonacoApi = {\n editor: {\n defineTheme: (name: string, data: MonacoThemeData) => void;\n setTheme: (name: string) => void;\n };\n};\n\nconst EDITOR_THEME_NAME = \"ps-theme\";\n\nconst useEditorTheme = () => {\n const { themePreference, themePreferences } = useThemePreference();\n const preference = themePreferences.find((theme) => theme.id === themePreference);\n return isMonacoTheme(preference?.monacoTheme) ? preference.monacoTheme : customTheme;\n};\n\nconst useApplyEditorTheme = (editorTheme: MonacoThemeData) => {\n const monacoRef = useRef<MonacoApi | null>(null);\n\n useEffect(() => {\n const monaco = monacoRef.current;\n if (!monaco) return;\n\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n }, [editorTheme]);\n\n return (monaco: MonacoApi) => {\n monacoRef.current = monaco;\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n };\n};\n\ninterface CodeEditorProps {\n language: string;\n defaultCode?: string;\n code?: string;\n isEditable: boolean;\n showLineNumbers?: boolean;\n onChange?: (code: string) => void;\n disableScroll?: boolean;\n}\n\nexport const CodeEditor = (props: CodeEditorProps) => {\n const { defaultCode, code, showLineNumbers, isEditable, language = \"javascript\", onChange, disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: !isEditable,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <Editor\n width=\"100%\"\n height=\"100%\"\n language={language}\n defaultValue={defaultCode}\n value={code}\n theme={EDITOR_THEME_NAME}\n options={options}\n onChange={(value) => {\n onChange?.(value || \"\");\n }}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={async (editor, monaco) => {\n applyEditorTheme(monaco);\n\n // Add JSX support\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n\n // Format on cmd+s\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, async () => {\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n });\n\n // Run format on the initial value\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n }}\n />\n );\n};\n\ninterface CodeDiffEditorProps {\n language: string;\n original: string;\n modified: string;\n showLineNumbers?: boolean;\n disableScroll?: boolean;\n}\n\nexport const CodeDiffEditor = (props: CodeDiffEditorProps) => {\n const { original, modified, showLineNumbers, language = \"javascript\", disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: true,\n originalEditable: false,\n renderSideBySide: true,\n useInlineViewWhenSpaceIsTooSmall: true,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <DiffEditor\n width=\"100%\"\n height=\"100%\"\n language={language}\n original={original}\n modified={modified}\n theme={EDITOR_THEME_NAME}\n options={options}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={(_, monaco) => {\n applyEditorTheme(monaco);\n\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n }}\n />\n );\n};\n","export const imagePreviewMimeTypes = {\n avif: \"image/avif\",\n bmp: \"image/bmp\",\n gif: \"image/gif\",\n heic: \"image/heic\",\n ico: \"image/x-icon\",\n jpeg: \"image/jpeg\",\n jpg: \"image/jpeg\",\n png: \"image/png\",\n tif: \"image/tiff\",\n tiff: \"image/tiff\",\n webp: \"image/webp\",\n} as const;\n\nexport const imagePreviewExtensions = Object.keys(imagePreviewMimeTypes);\n\nexport const getFileExtension = (filePath: string) => {\n const fileName = filePath.split(/[\\\\/]/).pop() ?? filePath;\n const extension = fileName.split(\".\").pop();\n return extension ? extension.toLowerCase() : \"\";\n};\n\nexport const getImagePreviewMimeType = (filePath: string) => {\n const extension = getFileExtension(filePath);\n return imagePreviewMimeTypes[extension as keyof typeof imagePreviewMimeTypes] ?? null;\n};\n\nexport const isImagePreviewPath = (filePath: string) => getImagePreviewMimeType(filePath) !== null;\n","import { getFileExtension, imagePreviewExtensions, isImagePreviewPath } from \"pstdio-file-types\";\n\nexport const LARGE_DIFF_LINE_THRESHOLD = 1000;\n\nconst generatedDiffFileNames = new Set([\"bun.lock\", \"bun.lockb\", \"package-lock.json\", \"pnpm-lock.yaml\", \"yarn.lock\"]);\n\n// Extensions whose byte content cannot be meaningfully shown as a unified diff.\n// SVG is intentionally excluded — it is text-based XML and benefits from a line diff.\nconst binaryDiffExtensions = new Set([\n ...imagePreviewExtensions,\n \"pdf\",\n \"zip\",\n \"tar\",\n \"gz\",\n \"tgz\",\n \"rar\",\n \"7z\",\n \"exe\",\n \"dll\",\n \"so\",\n \"dylib\",\n \"wasm\",\n \"class\",\n \"jar\",\n \"mp3\",\n \"mp4\",\n \"mov\",\n \"ogg\",\n \"wav\",\n \"webm\",\n \"flac\",\n \"ttf\",\n \"otf\",\n \"woff\",\n \"woff2\",\n \"eot\",\n]);\n\nexport const getDiffLineCount = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return (input.additions ?? 0) + (input.deletions ?? 0);\n};\n\nexport const isLargeDiffContent = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return getDiffLineCount(input) > LARGE_DIFF_LINE_THRESHOLD;\n};\n\nexport const isGeneratedDiffPath = (path: string) => {\n const fileName = path.split(/[\\\\/]/).pop() ?? path;\n\n return generatedDiffFileNames.has(fileName) || fileName.endsWith(\".min.js\") || fileName.endsWith(\".generated.ts\");\n};\n\nexport const isBinaryDiffPath = (path: string) => {\n const ext = getFileExtension(path);\n return ext.length > 0 && binaryDiffExtensions.has(ext);\n};\n\nexport const isImageDiffPath = isImagePreviewPath;\n","import { Box, Button, Grid, Image, Text } from \"@chakra-ui/react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffEditor } from \"./diff-editor\";\nimport { getDiffLineCount, isBinaryDiffPath, isImageDiffPath } from \"./diff-size\";\nimport { type BuiltDiffViewData, buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardBodyProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isLargeDiff: boolean;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardBodyModelInput extends DiffCardBodyProps {\n buildViewData?: typeof buildDiffViewData;\n}\n\nexport const createDiffCardBodyModel = (input: DiffCardBodyModelInput) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n buildViewData,\n } = input;\n\n if (isBinaryDiffPath(filePath)) {\n const oldImageSrc = getImagePreviewSource(oldContent);\n const newImageSrc = getImagePreviewSource(newContent);\n if (isImageDiffPath(filePath) && (oldImageSrc || newImageSrc)) {\n return {\n kind: \"image\" as const,\n filePath,\n oldSrc: oldImageSrc,\n newSrc: newImageSrc,\n };\n }\n\n return {\n kind: \"binary\" as const,\n filePath,\n isImage: isImageDiffPath(filePath),\n };\n }\n\n if (isLargeDiff && !hasOptedIntoLargeDiff) {\n return {\n kind: \"placeholder\" as const,\n filePath,\n renderedLineCount: getDiffLineCount(diff),\n onShowFullDiff,\n };\n }\n\n const diffViewData = (buildViewData ?? buildDiffViewData)({\n original: oldContent,\n modified: newContent,\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n return {\n kind: \"editor\" as const,\n diffViewData,\n sideBySide: diffViewMode === \"split\",\n };\n};\n\nconst getImagePreviewSource = (content: string) => (content.startsWith(\"data:image/\") ? content : \"\");\n\nexport const DiffCardBody = (props: DiffCardBodyProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n const model = createDiffCardBodyModel({\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode,\n });\n\n return (\n <Box bg=\"bg\" borderBottomRadius=\"xs\" overflow=\"hidden\">\n {model.kind === \"editor\" ? (\n <DiffEditor\n original={oldContent}\n modified={newContent}\n oldPath={diff.oldPath}\n newPath={diff.newPath}\n sideBySide={model.sideBySide}\n data={model.diffViewData}\n />\n ) : model.kind === \"image\" ? (\n <ImageDiffPreview oldSrc={model.oldSrc} newSrc={model.newSrc} />\n ) : model.kind === \"binary\" ? (\n <BinaryDiffPlaceholder isImage={model.isImage} />\n ) : (\n <LargeDiffPlaceholder\n filePath={model.filePath}\n renderedLineCount={model.renderedLineCount}\n onShowFullDiff={model.onShowFullDiff}\n />\n )}\n </Box>\n );\n};\n\ninterface ImageDiffPreviewProps {\n oldSrc: string;\n newSrc: string;\n}\n\nconst ImageDiffPreview = (props: ImageDiffPreviewProps) => {\n const { oldSrc, newSrc } = props;\n\n return (\n <Grid\n templateColumns={{ base: \"1fr\", md: \"1fr 1fr\" }}\n gap=\"sm\"\n p=\"sm\"\n borderTop=\"1px solid\"\n borderColor=\"border.subtle\"\n bg=\"bg\"\n >\n <ImageDiffPanel label=\"Old\" src={oldSrc} fallback=\"No old image\" />\n <ImageDiffPanel label=\"New\" src={newSrc} fallback=\"No new image\" />\n </Grid>\n );\n};\n\ninterface ImageDiffPanelProps {\n label: string;\n src: string;\n fallback: string;\n}\n\nconst ImageDiffPanel = (props: ImageDiffPanelProps) => {\n const { label, src, fallback } = props;\n\n return (\n <Box border=\"1px solid\" borderColor=\"border.subtle\" borderRadius=\"xs\" overflow=\"hidden\" bg=\"bg.subtle\" minW=\"0\">\n <Text\n px=\"xs\"\n py=\"2xs\"\n textStyle=\"label/S/medium\"\n color=\"fg.muted\"\n borderBottom=\"1px solid\"\n borderColor=\"border.subtle\"\n >\n {label}\n </Text>\n <Box display=\"grid\" placeItems=\"center\" minH=\"180px\" p=\"sm\">\n {src ? (\n <Image src={src} alt={`${label} image diff`} maxH=\"260px\" maxW=\"100%\" objectFit=\"contain\" />\n ) : (\n <Text color=\"fg.muted\" textStyle=\"body/S/regular\">\n {fallback}\n </Text>\n )}\n </Box>\n </Box>\n );\n};\n\ninterface LargeDiffPlaceholderProps {\n filePath: string;\n renderedLineCount: number;\n onShowFullDiff?: () => void;\n}\n\nconst LargeDiffPlaceholder = (props: LargeDiffPlaceholderProps) => {\n const { filePath, onShowFullDiff } = props;\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.subtle\" bg=\"bg\">\n <EmptyState title=\"Large diffs are hidden by default\" paddingY=\"sm\">\n {onShowFullDiff ? (\n <Button size=\"xs\" variant=\"outline\" aria-label={`Render full diff for ${filePath}`} onClick={onShowFullDiff}>\n Show full diff\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\ninterface BinaryDiffPlaceholderProps {\n isImage: boolean;\n}\n\nconst BinaryDiffPlaceholder = (props: BinaryDiffPlaceholderProps) => {\n const { isImage } = props;\n const title = isImage ? \"Image diffs are not shown\" : \"Binary diffs are not shown\";\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.subtle\" bg=\"bg\">\n <EmptyState title={title} paddingY=\"sm\" />\n </Box>\n );\n};\n\nexport type TestDiffViewData = BuiltDiffViewData;\n","import { Box, Button, Skeleton, Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\n\ninterface DeferredDiffLoadProps {\n title: string;\n actionLabel?: string;\n isLoadingDiff: boolean;\n onAction?: () => void;\n}\n\nexport const DeferredDiffLoad = (props: DeferredDiffLoadProps) => {\n const { title, actionLabel, isLoadingDiff, onAction } = props;\n\n return (\n <Box bg=\"bg\" p=\"md\" borderTop=\"1px solid\" borderColor=\"border.subtle\">\n <EmptyState title={title} paddingY=\"sm\">\n {actionLabel ? (\n <Button size=\"xs\" variant=\"outline\" loading={isLoadingDiff} onClick={onAction}>\n {actionLabel}\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\nconst loadingDiffContentRows = [\"first\", \"second\", \"third\"] as const;\n\nexport const LoadingDiffContent = () => (\n <Stack\n h=\"280px\"\n bg=\"bg\"\n borderTop=\"1px solid\"\n borderColor=\"border.subtle\"\n p=\"xs\"\n gap=\"2xs\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading diff\"\n >\n {loadingDiffContentRows.map((row) => (\n <Skeleton key={row} h=\"20px\" w=\"full\" borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n","import type { Diff } from \"./diff-card\";\nimport { DiffCardBody } from \"./diff-card-body\";\nimport { DeferredDiffLoad, LoadingDiffContent } from \"./diff-card-load-state\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardContentProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isExpanded: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n hasDiffContent: boolean;\n canLoadDiff: boolean;\n shouldAutoLoadDiff: boolean;\n loadError: boolean;\n isLoadingDiff: boolean;\n onLoadDiff: () => Promise<void>;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DeferredDiffLoadStateInput {\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n loadError: boolean;\n canLoadDiff: boolean;\n onLoadDiff: () => Promise<void>;\n onShowFullDiff?: () => void;\n}\n\nconst buildDeferredDiffLoadState = (input: DeferredDiffLoadStateInput) => {\n const { isLargeDiff, isGeneratedDiff, loadError, canLoadDiff, onLoadDiff, onShowFullDiff } = input;\n let title = \"Diff content is not loaded yet.\";\n let actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n let onAction: (() => void) | undefined = canLoadDiff ? () => void onLoadDiff() : undefined;\n\n if (isLargeDiff) {\n title = \"Large diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Show full diff\" : undefined;\n onAction = () => {\n onShowFullDiff?.();\n void onLoadDiff();\n };\n }\n\n if (isGeneratedDiff) {\n title = \"Generated diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n if (loadError) {\n title = \"Diff failed to load. Try again.\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n return { title, actionLabel, onAction };\n};\n\nexport const DiffCardContent = (props: DiffCardContentProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isExpanded,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n hasDiffContent,\n canLoadDiff,\n shouldAutoLoadDiff,\n loadError,\n isLoadingDiff,\n onLoadDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n if (!isExpanded) return null;\n\n if (isBinaryDiff) {\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={false}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n }\n\n if (!hasDiffContent && !shouldAutoLoadDiff) {\n const { title, actionLabel, onAction } = buildDeferredDiffLoadState({\n isLargeDiff,\n isGeneratedDiff,\n loadError,\n canLoadDiff,\n onLoadDiff,\n onShowFullDiff,\n });\n\n return (\n <DeferredDiffLoad title={title} actionLabel={actionLabel} isLoadingDiff={isLoadingDiff} onAction={onAction} />\n );\n }\n\n if (shouldAutoLoadDiff) {\n return <LoadingDiffContent />;\n }\n\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={isLargeDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n};\n","import { Box, Grid, IconButton, Text } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, ChevronRight, Copy } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport { DiffCardContent } from \"./diff-card-content\";\nimport { isBinaryDiffPath, isGeneratedDiffPath, isImageDiffPath, isLargeDiffContent } from \"./diff-size\";\nimport type { DiffViewMode } from \"./types\";\n\nexport interface Diff {\n change: \"added\" | \"deleted\" | \"modified\" | \"renamed\" | \"copied\" | \"permissionChange\";\n oldPath?: string;\n newPath?: string;\n oldContent?: string;\n newContent?: string;\n additions?: number;\n deletions?: number;\n}\n\ninterface DiffCardProps {\n diff: Diff;\n isSelected?: boolean;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n onSelect?: () => void;\n onLoadDiff?: (path: string) => Promise<void>;\n hasOptedIntoLargeDiff?: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardHeaderProps {\n diff: Diff;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n}\n\nexport const shouldAutoLoadDiffContent = (input: {\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n requestedPath: string | null;\n filePath: string;\n}) => {\n const { isExpanded, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, requestedPath, filePath } = input;\n\n return (\n isExpanded && !hasDiffContent && !isLargeDiff && !isGeneratedDiff && !isBinaryDiff && requestedPath !== filePath\n );\n};\n\nexport const resolveRequestedDiffPath = (input: {\n requestedPath: string | null;\n filePath: string;\n hasDiffContent: boolean;\n}) => {\n const { requestedPath, filePath, hasDiffContent } = input;\n\n if (requestedPath === filePath && hasDiffContent) {\n return null;\n }\n\n return requestedPath;\n};\n\nexport const shouldShowDiffStats = (filePath: string) => !isImageDiffPath(filePath);\n\nexport const resolveDiffFilePath = (diff: Diff) => diff.newPath || diff.oldPath || \"unknown\";\n\nconst useDiffContentLoader = (input: {\n filePath: string;\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n}) => {\n const { filePath, isExpanded, isSelected, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, onLoadDiff } =\n input;\n const [isLoadingDiff, setLoadingDiff] = useState(false);\n const [requestedPath, setRequestedPath] = useState<string | null>(null);\n const [loadError, setLoadError] = useState(false);\n\n const loadDiff = async () => {\n if (!onLoadDiff || isLoadingDiff) return;\n\n setRequestedPath(filePath);\n setLoadError(false);\n setLoadingDiff(true);\n try {\n await onLoadDiff(filePath);\n } catch {\n setRequestedPath(null);\n setLoadError(true);\n } finally {\n setLoadingDiff(false);\n }\n };\n\n const shouldAutoLoadDiff = shouldAutoLoadDiffContent({\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n requestedPath,\n filePath,\n });\n\n useEffect(() => {\n setRequestedPath((current) => resolveRequestedDiffPath({ requestedPath: current, filePath, hasDiffContent }));\n }, [filePath, hasDiffContent]);\n\n useEffect(() => {\n if (!onLoadDiff || !shouldAutoLoadDiff || loadError) {\n return;\n }\n\n void loadDiff();\n });\n\n return {\n isLoadingDiff,\n loadError,\n shouldAutoLoadDiff: Boolean(onLoadDiff) && shouldAutoLoadDiff && !loadError,\n loadDiff,\n };\n};\n\nexport const DiffCard = (props: DiffCardProps) => {\n const {\n diff,\n isSelected = false,\n isExpanded = true,\n onToggleExpanded,\n onSelect,\n onLoadDiff,\n hasOptedIntoLargeDiff = false,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n const filePath = resolveDiffFilePath(diff);\n const oldContent = diff.oldContent || \"\";\n const newContent = diff.newContent || \"\";\n const isLargeDiff = isLargeDiffContent(diff);\n const isGeneratedDiff = isGeneratedDiffPath(filePath);\n const isBinaryDiff = isBinaryDiffPath(filePath);\n const blocksDiffContentLoad = isBinaryDiff && !isImageDiffPath(filePath);\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n const { isLoadingDiff, loadError, shouldAutoLoadDiff, loadDiff } = useDiffContentLoader({\n filePath,\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff: isLargeDiff && !hasOptedIntoLargeDiff,\n isGeneratedDiff,\n isBinaryDiff: blocksDiffContentLoad,\n onLoadDiff,\n });\n\n return (\n <Box\n data-testid=\"diff-card\"\n border=\"1px solid\"\n borderColor={isSelected ? \"border.accent\" : \"border.subtle\"}\n borderRadius=\"xs\"\n overflow=\"visible\"\n bg=\"bg\"\n width=\"100%\"\n maxW=\"100%\"\n transition=\"border-color 0.14s ease\"\n _hover={{ borderColor: \"border.accent\" }}\n onClick={onSelect}\n >\n <DiffCardHeader diff={diff} isExpanded={isExpanded} onToggleExpanded={onToggleExpanded} />\n\n <DiffCardContent\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isExpanded={isExpanded}\n isLargeDiff={isLargeDiff}\n isGeneratedDiff={isGeneratedDiff}\n isBinaryDiff={blocksDiffContentLoad}\n hasDiffContent={hasDiffContent}\n canLoadDiff={Boolean(onLoadDiff)}\n shouldAutoLoadDiff={shouldAutoLoadDiff}\n loadError={loadError}\n isLoadingDiff={isLoadingDiff}\n onLoadDiff={loadDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n};\n\nexport const DiffCardHeader = (props: DiffCardHeaderProps) => {\n const { diff, isExpanded = true, onToggleExpanded } = props;\n const filePath = resolveDiffFilePath(diff);\n const additions = diff.additions ?? 0;\n const deletions = diff.deletions ?? 0;\n const showStats = shouldShowDiffStats(filePath);\n const [isCopied, setIsCopied] = useState(false);\n const copyResetTimeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n return () => {\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n };\n }, []);\n\n const copyFilePath = async () => {\n try {\n await navigator.clipboard.writeText(filePath);\n setIsCopied(true);\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n copyResetTimeoutRef.current = window.setTimeout(() => setIsCopied(false), 1200);\n } catch {\n setIsCopied(false);\n }\n };\n\n return (\n <Grid\n data-testid=\"diff-card-header\"\n templateColumns=\"auto minmax(0, 1fr) auto\"\n px=\"xs\"\n py=\"2xs\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n borderBottom={isExpanded ? \"1px solid\" : \"none\"}\n borderColor=\"border.subtle\"\n borderTopRadius=\"xs\"\n borderBottomRadius={isExpanded ? \"0\" : \"xs\"}\n position=\"sticky\"\n top=\"0\"\n zIndex=\"1\"\n bg=\"bg\"\n cursor=\"pointer\"\n transition=\"background 0.14s ease\"\n _hover={{ bg: \"bg\" }}\n onClick={() => onToggleExpanded?.()}\n gap=\"sm\"\n >\n <IconButton\n aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n variant=\"ghost\"\n size=\"2xs\"\n onClick={(event) => {\n event.stopPropagation();\n onToggleExpanded?.();\n }}\n flexShrink={0}\n >\n {isExpanded ? <ChevronDown size={16} /> : <ChevronRight size={16} />}\n </IconButton>\n\n <Grid templateColumns=\"minmax(0, max-content) auto\" alignItems=\"center\" justifyContent=\"start\" gap=\"2xs\" minW={0}>\n <Box minW={0} overflow=\"hidden\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\" title={filePath}>\n {diff.change === \"renamed\" ? (\n <Text as=\"span\" textStyle=\"sm\">\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" mr=\"xs\">\n {diff.oldPath}\n </Text>\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" verticalAlign=\"middle\" mr=\"xs\">\n <ChevronRight size={12} />\n </Box>\n {diff.newPath}\n </Text>\n ) : diff.change === \"deleted\" ? (\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" textStyle=\"sm\">\n {filePath}\n </Text>\n ) : (\n <Text as=\"span\" textStyle=\"sm\">\n {filePath}\n </Text>\n )}\n </Box>\n\n <Box\n opacity={isCopied ? \"1\" : \"0\"}\n pointerEvents={isCopied ? \"auto\" : \"none\"}\n transition=\"opacity 120ms ease\"\n css={{\n \"[data-testid='diff-card-header']:hover &, [data-testid='diff-card-header']:focus-within &\": {\n opacity: 1,\n pointerEvents: \"auto\",\n },\n }}\n >\n <Tooltip content={isCopied ? \"Copied\" : \"Copy file path\"}>\n <IconButton\n aria-label={isCopied ? \"Copied\" : \"Copy file path\"}\n variant=\"ghost\"\n size=\"2xs\"\n onClick={(event) => {\n event.stopPropagation();\n void copyFilePath();\n }}\n flexShrink={0}\n >\n {isCopied ? <Check size={12} /> : <Copy size={12} />}\n </IconButton>\n </Tooltip>\n </Box>\n </Grid>\n\n {showStats ? (\n <Box flexShrink={0}>\n <DiffBubble variant=\"ghost\" additions={additions} deletions={deletions} />\n </Box>\n ) : null}\n </Grid>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\n\nexport const DiffDrawerEmptyState = () => (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <ScrollArea flex=\"1\" minH=\"0\" contentProps={{ p: \"xs\", spaceY: \"xs\" }}>\n <EmptyState title=\"No changes detected\" description=\"Make some changes to see the diff here.\" paddingY=\"sm\" />\n </ScrollArea>\n </Stack>\n);\n","import type { Diff } from \"./diff-card\";\nimport { isBinaryDiffPath, isImageDiffPath, isLargeDiffContent } from \"./diff-size\";\nimport { buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\nconst CARD_HEADER_HEIGHT = 34;\nconst CARD_BODY_LINE_HEIGHT = 18;\nconst HUNK_ROW_HEIGHT = 28;\nconst COLLAPSED_CARD_HEIGHT = 34;\nconst DEFERRED_BODY_HEIGHT = 88;\nconst IMAGE_BODY_HEIGHT = 338;\nconst ITEM_GAP_HEIGHT = 8;\n\ninterface EstimateDiffCardHeightInput {\n diff: Diff;\n isCollapsed: boolean;\n hasOptedIntoLargeDiff?: boolean;\n diffViewMode?: DiffViewMode;\n}\n\nconst deferredCardHeight = () => CARD_HEADER_HEIGHT + DEFERRED_BODY_HEIGHT + ITEM_GAP_HEIGHT;\n\n// Mirrors the branches DiffCardContent renders, so the virtualizer's estimate matches the DOM\n// before measureElement gets a chance to refine it.\nexport const estimateDiffCardHeight = (input: EstimateDiffCardHeightInput) => {\n const { diff, isCollapsed, hasOptedIntoLargeDiff = false, diffViewMode = \"unified\" } = input;\n\n if (isCollapsed) return COLLAPSED_CARD_HEIGHT + ITEM_GAP_HEIGHT;\n\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n const filePath = diff.newPath ?? diff.oldPath ?? \"\";\n if (isImageDiffPath(filePath) && (diff.oldContent || diff.newContent)) {\n return CARD_HEADER_HEIGHT + IMAGE_BODY_HEIGHT + ITEM_GAP_HEIGHT;\n }\n if (isBinaryDiffPath(filePath)) return deferredCardHeight();\n if (!hasDiffContent) return deferredCardHeight();\n if (isLargeDiffContent(diff) && !hasOptedIntoLargeDiff) return deferredCardHeight();\n\n const { unifiedContentRows, splitContentRows, hunkRows } = buildDiffViewData({\n original: diff.oldContent ?? \"\",\n modified: diff.newContent ?? \"\",\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n const contentRows = diffViewMode === \"split\" ? splitContentRows : unifiedContentRows;\n if (contentRows === 0 && hunkRows === 0) return deferredCardHeight();\n\n const bodyHeight = contentRows * CARD_BODY_LINE_HEIGHT + hunkRows * HUNK_ROW_HEIGHT;\n return CARD_HEADER_HEIGHT + bodyHeight + ITEM_GAP_HEIGHT;\n};\n","import type { Diff } from \"./diff-card\";\n\ninterface SelectedExpansionCommand {\n action: string;\n id: number;\n path?: string;\n direction?: \"up\" | \"down\";\n}\n\ninterface ResolveSelectedScrollStateInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n expansionCommand: SelectedExpansionCommand | null;\n completedScrollCommandId: number | null;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst PINNED_DIFF_LOOKBEHIND_COUNT = 24;\n\nexport const resolveSelectedScrollState = (input: ResolveSelectedScrollStateInput) => {\n const { diffs, selectedDiffPath, collapsedPaths, expansionCommand, completedScrollCommandId } = input;\n let selectedScrollPath = selectedDiffPath;\n let selectedScrollSourceKey = selectedDiffPath ? `selected:${selectedDiffPath}` : null;\n const selectedScrollCommandId = expansionCommand?.action === \"expand-selected\" ? expansionCommand.id : null;\n const hasCompletedSelectedScroll =\n selectedScrollCommandId !== null && completedScrollCommandId === selectedScrollCommandId;\n\n if (expansionCommand?.action === \"expand-selected\" && expansionCommand.path) {\n selectedScrollPath = expansionCommand.path;\n selectedScrollSourceKey = `command:${expansionCommand.id}:${expansionCommand.path}`;\n }\n\n let selectedScrollKey = selectedScrollSourceKey;\n if (selectedScrollPath && selectedScrollSourceKey) {\n const selectedScrollExpansionState = collapsedPaths.has(selectedScrollPath) ? \"collapsed\" : \"expanded\";\n selectedScrollKey = `${selectedScrollSourceKey}:${selectedScrollExpansionState}`;\n }\n\n const selectedScrollIndex = selectedScrollPath\n ? diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath)\n : -1;\n const shouldPinSelectedScrollIndex =\n selectedScrollIndex >= 0 &&\n expansionCommand?.action === \"expand-selected\" &&\n expansionCommand.direction === \"up\" &&\n !hasCompletedSelectedScroll;\n\n return {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n };\n};\n\nexport const includePinnedDiffIndexes = (input: {\n indexes: number[];\n selectedScrollIndex: number;\n shouldPinSelectedScrollIndex: boolean;\n}) => {\n const { indexes, selectedScrollIndex, shouldPinSelectedScrollIndex } = input;\n if (!shouldPinSelectedScrollIndex || indexes.includes(selectedScrollIndex)) return indexes;\n\n const pinnedStartIndex = Math.max(0, selectedScrollIndex - PINNED_DIFF_LOOKBEHIND_COUNT);\n const pinnedIndexes = Array.from(\n { length: selectedScrollIndex - pinnedStartIndex + 1 },\n (_, index) => pinnedStartIndex + index,\n );\n\n return Array.from(new Set([...indexes, ...pinnedIndexes])).sort((a, b) => a - b);\n};\n","import type { Virtualizer } from \"@tanstack/react-virtual\";\nimport { useLayoutEffect, useState } from \"react\";\nimport type { Diff } from \"./diff-card\";\nimport type { DiffExpansionCommand } from \"./diff-drawer\";\nimport { resolveSelectedScrollState } from \"./diff-drawer-scroll\";\n\ninterface UseSelectedDiffScrollInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n expansionCommand: DiffExpansionCommand | null;\n scrollRef: { current: HTMLDivElement | null };\n virtualizerRef: { current: Virtualizer<HTMLDivElement, Element> | null };\n suppressScrollAdjustRef: { current: boolean };\n}\n\n// Re-align for a few frames so the target settles as it and its neighbours measure, then latch the\n// command as done. Capped so a diff that never settles can't spin the animation loop.\nconst SETTLE_FRAME_COUNT = 3;\nconst MAX_ALIGNMENT_FRAMES = 12;\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nexport const useSelectedDiffScroll = (input: UseSelectedDiffScrollInput) => {\n const {\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n scrollRef,\n virtualizerRef,\n suppressScrollAdjustRef,\n } = input;\n const [completedScrollCommandId, setCompletedScrollCommandId] = useState<number | null>(null);\n const {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n } = resolveSelectedScrollState({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n completedScrollCommandId,\n });\n\n useLayoutEffect(() => {\n if (!selectedScrollPath || !selectedScrollKey) return;\n if (hasCompletedSelectedScroll) return;\n // Selecting a collapsed diff expands it first (a sibling layout effect updates collapsedPaths and\n // re-runs this one). Wait for that: scrolling to a card that is about to grow lands on a stale\n // offset and snaps once it expands. Once expanded, its measured offset is stable.\n if (collapsedPaths.has(selectedScrollPath)) return;\n\n const index = diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath);\n if (index < 0) return;\n\n const virtualizer = virtualizerRef.current;\n const scrollElement = scrollRef.current;\n if (!virtualizer || !scrollElement) return;\n\n const frameIds: number[] = [];\n let cancelledByUserScroll = false;\n // Drive the scroll from the virtualizer's measured card heights (not per-diff estimates) and hold\n // its keep-in-place adjustments off while we do, so a mid-list target lands where it actually is\n // instead of overshooting and snapping back — the \"wild jump\" when opening files further down.\n suppressScrollAdjustRef.current = true;\n const stopAligning = () => {\n suppressScrollAdjustRef.current = false;\n };\n const cancelSelectedScroll = () => {\n cancelledByUserScroll = true;\n stopAligning();\n if (selectedScrollCommandId !== null) {\n setCompletedScrollCommandId(selectedScrollCommandId);\n }\n };\n\n let alignmentFrames = 0;\n const alignSelectedDiff = () => {\n if (cancelledByUserScroll) return;\n virtualizer.scrollToIndex(index, { align: \"start\" });\n alignmentFrames += 1;\n if (alignmentFrames >= SETTLE_FRAME_COUNT && selectedScrollCommandId !== null) {\n stopAligning();\n setCompletedScrollCommandId(selectedScrollCommandId);\n return;\n }\n if (alignmentFrames < MAX_ALIGNMENT_FRAMES) {\n frameIds.push(requestAnimationFrame(alignSelectedDiff));\n return;\n }\n stopAligning();\n };\n\n scrollElement.addEventListener(\"wheel\", cancelSelectedScroll, { passive: true });\n scrollElement.addEventListener(\"touchmove\", cancelSelectedScroll, { passive: true });\n alignSelectedDiff();\n\n return () => {\n stopAligning();\n scrollElement.removeEventListener(\"wheel\", cancelSelectedScroll);\n scrollElement.removeEventListener(\"touchmove\", cancelSelectedScroll);\n for (const frameId of frameIds) {\n cancelAnimationFrame(frameId);\n }\n };\n }, [\n selectedScrollKey,\n selectedScrollPath,\n selectedScrollCommandId,\n hasCompletedSelectedScroll,\n diffs,\n collapsedPaths,\n scrollRef,\n virtualizerRef,\n suppressScrollAdjustRef,\n ]);\n\n return { selectedScrollIndex, shouldPinSelectedScrollIndex };\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { defaultRangeExtractor, useVirtualizer, type Virtualizer } from \"@tanstack/react-virtual\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { type Diff, DiffCard } from \"./diff-card\";\nimport { DiffDrawerEmptyState } from \"./diff-drawer-empty-state\";\nimport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nimport { includePinnedDiffIndexes } from \"./diff-drawer-scroll\";\nimport type { DiffViewMode } from \"./types\";\nimport { useSelectedDiffScroll } from \"./use-selected-diff-scroll\";\n\ninterface DiffDrawerProps {\n diffs: Diff[];\n selectedDiffPath?: string | null;\n onLoadDiff?: (path: string) => Promise<void>;\n onSelectDiffPath?: (path: string) => void;\n onExpansionStateChange?: (state: DiffDrawerExpansionState) => void;\n expansionCommand?: DiffExpansionCommand | null;\n diffViewMode?: DiffViewMode;\n}\n\nexport interface DiffExpansionCommand {\n action: \"expand\" | \"collapse\" | \"expand-selected\";\n id: number;\n path?: string;\n direction?: \"up\" | \"down\";\n}\n\nexport interface DiffDrawerExpansionState {\n allExpanded: boolean;\n allCollapsed: boolean;\n}\n\nexport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nexport type { Diff };\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nconst INITIAL_EXPANDED_DIFF_COUNT = 10;\nconst INITIAL_COLLAPSED_LINE_THRESHOLD = 100;\n\nexport const buildInitialCollapsedPaths = (diffs: Diff[]) => {\n if (diffs.length <= INITIAL_EXPANDED_DIFF_COUNT) return new Set<string>();\n\n return new Set(\n diffs\n .filter((diff, index) => {\n const lineCount = (diff.additions ?? 0) + (diff.deletions ?? 0);\n return index >= INITIAL_EXPANDED_DIFF_COUNT || lineCount > INITIAL_COLLAPSED_LINE_THRESHOLD;\n })\n .map((diff) => getDiffPath(diff)),\n );\n};\n\nexport const buildAllCollapsedPaths = (diffs: Diff[]) => new Set(diffs.map((diff) => getDiffPath(diff)));\n\nexport const toggleCollapsedPath = (collapsedPaths: Set<string>, path: string) => {\n const next = new Set(collapsedPaths);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n};\n\nexport const resolveCollapsedPathsForSelectedDiff = (\n diffs: Diff[],\n collapsedPaths: Set<string>,\n selectedDiffPath: string | null,\n) => {\n if (!selectedDiffPath) return collapsedPaths;\n if (!collapsedPaths.has(selectedDiffPath)) return collapsedPaths;\n if (!diffs.some((diff) => getDiffPath(diff) === selectedDiffPath)) return collapsedPaths;\n\n const next = new Set(collapsedPaths);\n next.delete(selectedDiffPath);\n return next;\n};\n\n// Expand the newly navigated-to diff and re-collapse the one the previous tree navigation expanded.\n// Clicking through the tree otherwise leaves a growing wall of expanded diffs; their measured heights\n// drift ever further from the scroll estimates, which is what makes the panel overshoot and jump.\n// Manual chevron toggles don't flow through here, so diffs the user opens by hand stay open.\nexport const resolveCollapsedPathsForNavigation = (\n diffs: Diff[],\n collapsedPaths: Set<string>,\n selectedDiffPath: string,\n previousNavigatedPath: string | null,\n) => {\n const expanded = resolveCollapsedPathsForSelectedDiff(diffs, collapsedPaths, selectedDiffPath);\n if (\n !previousNavigatedPath ||\n previousNavigatedPath === selectedDiffPath ||\n expanded.has(previousNavigatedPath) ||\n !diffs.some((diff) => getDiffPath(diff) === previousNavigatedPath)\n ) {\n return expanded;\n }\n\n const next = expanded === collapsedPaths ? new Set(collapsedPaths) : expanded;\n next.add(previousNavigatedPath);\n return next;\n};\n\nexport function DiffDrawer(props: DiffDrawerProps) {\n const {\n diffs,\n selectedDiffPath = null,\n onLoadDiff,\n onSelectDiffPath,\n onExpansionStateChange,\n expansionCommand = null,\n diffViewMode = \"unified\",\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const reportedExpansionStateRef = useRef<DiffDrawerExpansionState | null>(null);\n // Populated after the virtualizer is created below so the scroll hook (which runs first) can drive\n // it from a layout effect. `suppressScrollAdjustRef` lets the hook freeze the virtualizer's\n // keep-in-place adjustments while it aligns the selected diff, so re-measuring off-screen cards\n // can't shove the scroll around mid-align.\n const virtualizerRef = useRef<Virtualizer<HTMLDivElement, Element> | null>(null);\n const suppressScrollAdjustRef = useRef(false);\n const lastNavigatedPathRef = useRef<string | null>(null);\n const [collapsedPaths, setCollapsedPaths] = useState<Set<string>>(() => buildInitialCollapsedPaths(diffs));\n const [largeDiffOptInPaths, setLargeDiffOptInPaths] = useState<Set<string>>(() => new Set());\n const { selectedScrollIndex, shouldPinSelectedScrollIndex } = useSelectedDiffScroll({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n scrollRef,\n virtualizerRef,\n suppressScrollAdjustRef,\n });\n\n const virtualizer = useVirtualizer({\n count: diffs.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index) => {\n const diff = diffs[index];\n const path = getDiffPath(diff);\n return estimateDiffCardHeight({\n diff,\n isCollapsed: collapsedPaths.has(path),\n hasOptedIntoLargeDiff: largeDiffOptInPaths.has(path),\n diffViewMode,\n });\n },\n getItemKey: (index) => getDiffPath(diffs[index]),\n overscan: 3,\n rangeExtractor: (range) => {\n const indexes = defaultRangeExtractor(range);\n return includePinnedDiffIndexes({ indexes, selectedScrollIndex, shouldPinSelectedScrollIndex });\n },\n });\n virtualizer.shouldAdjustScrollPositionOnItemSizeChange = (_item, _delta, instance) =>\n !instance.isScrolling && !suppressScrollAdjustRef.current;\n virtualizerRef.current = virtualizer;\n\n useLayoutEffect(() => {\n if (!selectedDiffPath) return;\n\n setCollapsedPaths((prev) => resolveCollapsedPathsForSelectedDiff(diffs, prev, selectedDiffPath));\n }, [diffs, selectedDiffPath]);\n\n useLayoutEffect(() => {\n if (!expansionCommand) return;\n\n if (expansionCommand.action === \"expand-selected\") {\n const navigatedPath = expansionCommand.path;\n if (navigatedPath) {\n const previousNavigatedPath = lastNavigatedPathRef.current;\n lastNavigatedPathRef.current = navigatedPath;\n setCollapsedPaths((prev) =>\n resolveCollapsedPathsForNavigation(diffs, prev, navigatedPath, previousNavigatedPath),\n );\n }\n return;\n }\n\n // Expand/collapse all is an explicit user choice; don't let it re-collapse on the next navigation.\n lastNavigatedPathRef.current = null;\n setCollapsedPaths(expansionCommand.action === \"collapse\" ? buildAllCollapsedPaths(diffs) : new Set());\n }, [diffs, expansionCommand]);\n\n useEffect(() => {\n const expansionState = {\n allExpanded: collapsedPaths.size === 0,\n allCollapsed: diffs.length > 0 && diffs.every((diff) => collapsedPaths.has(getDiffPath(diff))),\n };\n const reportedExpansionState = reportedExpansionStateRef.current;\n if (\n reportedExpansionState?.allExpanded === expansionState.allExpanded &&\n reportedExpansionState.allCollapsed === expansionState.allCollapsed\n ) {\n return;\n }\n\n reportedExpansionStateRef.current = expansionState;\n onExpansionStateChange?.(expansionState);\n }, [collapsedPaths, diffs, onExpansionStateChange]);\n\n if (diffs.length === 0) return <DiffDrawerEmptyState />;\n\n const toggleExpanded = (path: string) => {\n setCollapsedPaths((prev) => toggleCollapsedPath(prev, path));\n };\n\n const showFullDiff = (path: string) => {\n setLargeDiffOptInPaths((prev) => {\n const next = new Set(prev);\n next.add(path);\n return next;\n });\n };\n\n const virtualItems = virtualizer.getVirtualItems();\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <Box position=\"relative\" flex=\"1\" minH=\"0\" bg=\"bg\">\n <ScrollArea\n position=\"absolute\"\n inset=\"0\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowAnchor: \"none\" } }}\n contentProps={{ p: \"xs\" }}\n >\n <Box position=\"relative\" width=\"100%\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualItems.map((virtualItem) => {\n const diff = diffs[virtualItem.index];\n const path = getDiffPath(diff);\n\n return (\n <Box\n key={virtualItem.key}\n data-index={virtualItem.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n left=\"0\"\n width=\"100%\"\n pb=\"xs\"\n style={{ top: `${virtualItem.start}px` }}\n >\n <DiffCard\n key={path}\n diff={diff}\n isSelected={selectedDiffPath === path}\n isExpanded={!collapsedPaths.has(path)}\n onToggleExpanded={() => toggleExpanded(path)}\n onSelect={() => onSelectDiffPath?.(path)}\n onLoadDiff={onLoadDiff}\n hasOptedIntoLargeDiff={largeDiffOptInPaths.has(path)}\n onShowFullDiff={() => showFullDiff(path)}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n })}\n </Box>\n </ScrollArea>\n </Box>\n </Stack>\n );\n}\n","import type { ChangedFilesViewMode, ChangedFileTreeNode } from \"./types\";\n\nconst normalizeChangedFilePath = (path: string) =>\n path\n .split(\"/\")\n .map((segment) => segment.trim())\n .filter(Boolean)\n .join(\"/\");\n\nconst sortNodes = (nodes: ChangedFileTreeNode[]) => {\n nodes.sort((left, right) => {\n if (left.type !== right.type) return left.type === \"folder\" ? -1 : 1;\n return left.name.localeCompare(right.name);\n });\n\n nodes.forEach((node) => {\n if (node.children) sortNodes(node.children);\n });\n\n return nodes;\n};\n\nconst dedupePaths = (paths: string[]) => Array.from(new Set(paths.map(normalizeChangedFilePath).filter(Boolean)));\n\nconst buildFlatTree = (paths: string[]) =>\n dedupePaths(paths)\n .map((path) => ({ id: `file:${path}`, name: path, type: \"file\" }) satisfies ChangedFileTreeNode)\n .sort((left, right) => left.name.localeCompare(right.name));\n\nexport const buildChangedFilesTree = (paths: string[], mode: ChangedFilesViewMode): ChangedFileTreeNode[] => {\n if (mode === \"flat\") return buildFlatTree(paths);\n\n const treeById = new Map<string, ChangedFileTreeNode>();\n const rootNodes: ChangedFileTreeNode[] = [];\n\n dedupePaths(paths).forEach((path) => {\n const segments = path.split(\"/\");\n let parentPath = \"\";\n let parentNode: ChangedFileTreeNode | null = null;\n\n segments.forEach((segment, index) => {\n const currentPath = parentPath ? `${parentPath}/${segment}` : segment;\n const isFile = index === segments.length - 1;\n const nodeId = `${isFile ? \"file\" : \"folder\"}:${currentPath}`;\n const existingNode = treeById.get(nodeId);\n\n if (existingNode) {\n parentNode = existingNode;\n parentPath = currentPath;\n return;\n }\n\n const nextNode: ChangedFileTreeNode = {\n id: nodeId,\n name: segment,\n type: isFile ? \"file\" : \"folder\",\n ...(isFile ? {} : { children: [] }),\n };\n\n treeById.set(nodeId, nextNode);\n\n if (!parentNode) rootNodes.push(nextNode);\n else parentNode.children?.push(nextNode);\n\n parentNode = nextNode;\n parentPath = currentPath;\n });\n });\n\n return sortNodes(rootNodes);\n};\n\nexport const collectExpandedFolderIds = (nodes: ChangedFileTreeNode[]) => {\n const folderIds: string[] = [];\n\n const visit = (items: ChangedFileTreeNode[]) => {\n items.forEach((item) => {\n if (item.type !== \"folder\") return;\n folderIds.push(item.id);\n visit(item.children ?? []);\n });\n };\n\n visit(nodes);\n return folderIds;\n};\n\nconst collectNestedFileOrder = (nodes: ChangedFileTreeNode[]) => {\n const orderedPaths: string[] = [];\n\n const visit = (treeNodes: ChangedFileTreeNode[]) => {\n treeNodes.forEach((node) => {\n if (node.type === \"file\") {\n orderedPaths.push(node.id.replace(/^file:/, \"\"));\n return;\n }\n\n visit(node.children ?? []);\n });\n };\n\n visit(nodes);\n return orderedPaths;\n};\n\nexport const sortPathsByViewMode = (paths: string[], mode: ChangedFilesViewMode) => {\n if (mode === \"flat\") return [...paths].sort((left, right) => left.localeCompare(right));\n return collectNestedFileOrder(buildChangedFilesTree(paths, \"nested\"));\n};\n","import { create } from \"zustand\";\nimport type { ChangedFilesViewMode, DiffViewMode } from \"./types\";\n\ninterface DiffViewerState {\n isTreePanelOpen: boolean;\n viewMode: ChangedFilesViewMode;\n diffViewMode: DiffViewMode;\n searchQuery: string;\n selectedPath: string | null;\n expandedFolderIds: Set<string>;\n setTreePanelOpen: (open: boolean) => void;\n toggleTreePanel: () => void;\n setViewMode: (viewMode: ChangedFilesViewMode) => void;\n setDiffViewMode: (diffViewMode: DiffViewMode) => void;\n setSearchQuery: (searchQuery: string) => void;\n setSelectedPath: (selectedPath: string | null) => void;\n setExpandedFolderIds: (folderIds: string[]) => void;\n toggleFolder: (folderId: string) => void;\n expandAll: (folderIds: string[]) => void;\n collapseAll: () => void;\n}\n\nexport const useDiffViewerStore = create<DiffViewerState>((set) => ({\n isTreePanelOpen: true,\n viewMode: \"nested\",\n diffViewMode: \"unified\",\n searchQuery: \"\",\n selectedPath: null,\n expandedFolderIds: new Set(),\n setTreePanelOpen: (isTreePanelOpen) => set({ isTreePanelOpen }),\n toggleTreePanel: () => set((state) => ({ isTreePanelOpen: !state.isTreePanelOpen })),\n setViewMode: (viewMode) => set({ viewMode }),\n setDiffViewMode: (diffViewMode) => set({ diffViewMode }),\n setSearchQuery: (searchQuery) => set({ searchQuery }),\n setSelectedPath: (selectedPath) => set({ selectedPath }),\n setExpandedFolderIds: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n toggleFolder: (folderId) =>\n set((state) => {\n const expandedFolderIds = new Set(state.expandedFolderIds);\n if (expandedFolderIds.has(folderId)) expandedFolderIds.delete(folderId);\n else expandedFolderIds.add(folderId);\n return { expandedFolderIds };\n }),\n expandAll: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n collapseAll: () => set({ expandedFolderIds: new Set() }),\n}));\n","import { Box, IconButton, Menu } from \"@chakra-ui/react\";\nimport {\n Check,\n ChevronsDownUp,\n ChevronsUpDown,\n List,\n ListTree,\n PanelLeftClose,\n PanelLeftOpen,\n Rows2,\n Settings2,\n SquareSplitHorizontal,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { ChangedFilesViewMode, DiffViewMode } from \"./types\";\n\ninterface DiffViewerOptionsMenuProps {\n isTreePanelOpen: boolean;\n hasFilePaths: boolean;\n viewMode: ChangedFilesViewMode;\n diffViewMode: DiffViewMode;\n isExpandAllDisabled: boolean;\n isCollapseAllDisabled: boolean;\n onToggleTreePanel: () => void;\n onViewModeChange: (viewMode: ChangedFilesViewMode) => void;\n onDiffViewModeChange: (diffViewMode: DiffViewMode) => void;\n onExpandAll: () => void;\n onCollapseAll: () => void;\n}\n\ninterface DiffViewerMenuItemProps {\n id: string;\n label: string;\n icon: ReactNode;\n selected?: boolean;\n disabled?: boolean;\n onActivate: () => void;\n}\n\nconst SelectionIndicator = (props: { selected: boolean }) => (\n <Box w=\"14px\" flexShrink={0} display=\"flex\" justifyContent=\"center\">\n {props.selected ? <Check size={14} /> : null}\n </Box>\n);\n\nconst DiffViewerMenuItem = (props: DiffViewerMenuItemProps) => {\n const { id, label, icon, selected, disabled, onActivate } = props;\n\n return (\n <Menu.Item value={id} disabled={disabled} asChild>\n <ListRow\n asChild\n role={selected === undefined ? undefined : \"menuitemradio\"}\n aria-checked={selected}\n variant=\"full-width\"\n id={id}\n icon={icon}\n label={label}\n disabled={disabled}\n isSelected={selected}\n endContent={selected === undefined ? undefined : <SelectionIndicator selected={selected} />}\n onActivate={onActivate}\n />\n </Menu.Item>\n );\n};\n\nexport const DiffViewerOptionsMenu = (props: DiffViewerOptionsMenuProps) => {\n const {\n isTreePanelOpen,\n hasFilePaths,\n viewMode,\n diffViewMode,\n isExpandAllDisabled,\n isCollapseAllDisabled,\n onToggleTreePanel,\n onViewModeChange,\n onDiffViewModeChange,\n onExpandAll,\n onCollapseAll,\n } = props;\n\n return (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton aria-label=\"Diff view options\" variant=\"ghost\" size=\"sm\">\n <Settings2 size={14} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"190px\" bg=\"bg\" p=\"0\" gap=\"0\">\n <DiffViewerMenuItem\n id=\"toggle-file-tree\"\n icon={isTreePanelOpen ? <PanelLeftClose size={14} /> : <PanelLeftOpen size={14} />}\n label={isTreePanelOpen ? \"Hide file tree\" : \"Show file tree\"}\n onActivate={onToggleTreePanel}\n />\n <Menu.Separator />\n {hasFilePaths ? (\n <>\n <DiffViewerMenuItem\n id=\"nested\"\n icon={<ListTree size={14} />}\n label=\"Nested\"\n selected={viewMode === \"nested\"}\n onActivate={() => onViewModeChange(\"nested\")}\n />\n <DiffViewerMenuItem\n id=\"flat\"\n icon={<List size={14} />}\n label=\"Flat\"\n selected={viewMode === \"flat\"}\n onActivate={() => onViewModeChange(\"flat\")}\n />\n <Menu.Separator />\n </>\n ) : null}\n <DiffViewerMenuItem\n id=\"unified\"\n icon={<Rows2 size={14} />}\n label=\"Unified\"\n selected={diffViewMode === \"unified\"}\n onActivate={() => onDiffViewModeChange(\"unified\")}\n />\n <DiffViewerMenuItem\n id=\"split\"\n icon={<SquareSplitHorizontal size={14} />}\n label=\"Split\"\n selected={diffViewMode === \"split\"}\n onActivate={() => onDiffViewModeChange(\"split\")}\n />\n <Menu.Separator />\n <DiffViewerMenuItem\n id=\"expand-all\"\n icon={<ChevronsUpDown size={14} />}\n label=\"Expand all\"\n disabled={isExpandAllDisabled}\n onActivate={onExpandAll}\n />\n <DiffViewerMenuItem\n id=\"collapse-all\"\n icon={<ChevronsDownUp size={14} />}\n label=\"Collapse all\"\n disabled={isCollapseAllDisabled}\n onActivate={onCollapseAll}\n />\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n","import { Badge, Box, HStack, Icon, Input, InputGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { FileText, Search } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { Header } from \"@/components/layout/header\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { TreeList } from \"../tree-list/tree-list\";\nimport type { TreeListNode } from \"../tree-list/tree-list.types\";\nimport { buildChangedFilesTree } from \"./build-changed-files-tree\";\nimport type { ChangedFilesViewMode, ChangedFileTreeNode, FileIconInfo } from \"./types\";\n\ninterface FileListPanelProps {\n title: string;\n paths: string[];\n selectedPath: string | null;\n viewMode: ChangedFilesViewMode;\n searchQuery: string;\n expandedFolderIds: Set<string>;\n onSelectPath: (path: string) => void;\n onSearchQueryChange: (value: string) => void;\n onToggleFolder: (id: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}\n\nconst changeLabels: Record<string, string> = {\n added: \"A\",\n copied: \"C\",\n deleted: \"D\",\n modified: \"U\",\n permissionChange: \"M\",\n renamed: \"R\",\n};\n\nconst changeColors: Record<string, string> = {\n added: \"green\",\n copied: \"purple\",\n deleted: \"red\",\n modified: \"blue\",\n permissionChange: \"yellow\",\n renamed: \"orange\",\n};\n\nconst changeSemanticStyles: Record<string, { color: string; backgroundColor: string }> = {\n added: { color: \"fg.success\", backgroundColor: \"bg.success\" },\n deleted: { color: \"fg.error\", backgroundColor: \"bg.error\" },\n};\n\nconst filterInputChromeProps = {\n bg: \"transparent\",\n border: \"0\",\n borderColor: \"transparent\",\n borderRadius: \"0\",\n boxShadow: \"none\",\n _hover: { borderColor: \"transparent\" },\n _active: { borderColor: \"transparent\" },\n _focus: { borderColor: \"transparent\", outline: \"none\", boxShadow: \"none\" },\n _focusVisible: { borderColor: \"transparent\", outline: \"none\", boxShadow: \"none\" },\n} as const;\n\nconst getFilePathParts = (filePath: string) => {\n const lastSlashIndex = filePath.lastIndexOf(\"/\");\n if (lastSlashIndex < 0) return { fileName: filePath, dirPath: \"\" };\n return { fileName: filePath.slice(lastSlashIndex + 1), dirPath: filePath.slice(0, lastSlashIndex) };\n};\n\nconst renderFileLabel = (node: ChangedFileTreeNode, viewMode: ChangedFilesViewMode, filePath: string) => {\n const { fileName, dirPath } = getFilePathParts(filePath);\n if (viewMode !== \"flat\" || !dirPath) return node.name;\n\n return (\n <Text textStyle=\"label/S/regular\" truncate>\n <Text as=\"span\" color=\"fg.default\">\n {fileName}\n </Text>{\" \"}\n <Text as=\"span\" color=\"fg.muted\">\n {dirPath}\n </Text>\n </Text>\n );\n};\n\nconst toTreeListNodes = (input: {\n nodes: ChangedFileTreeNode[];\n viewMode: ChangedFilesViewMode;\n onSelectPath: (path: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}): TreeListNode[] => {\n const { nodes, viewMode, onSelectPath, resolveFileIcon, changeByPath } = input;\n\n return nodes.map((node) => {\n if (node.type === \"folder\") {\n return {\n id: node.id,\n label: node.name,\n isContainer: true,\n children: toTreeListNodes({\n nodes: node.children ?? [],\n viewMode,\n onSelectPath,\n resolveFileIcon,\n changeByPath,\n }),\n };\n }\n\n const filePath = node.id.replace(/^file:/, \"\");\n const fileIcon = resolveFileIcon?.(filePath) ?? { icon: <Icon as={FileText} boxSize=\"16px\" />, color: \"fg.subtle\" };\n const change = changeByPath?.get(filePath);\n const changeBadgeProps = change\n ? (changeSemanticStyles[change] ?? { colorPalette: changeColors[change] ?? \"gray\" })\n : {};\n\n return {\n id: node.id,\n label: renderFileLabel(node, viewMode, filePath),\n icon: fileIcon.icon,\n iconColor: fileIcon.color,\n endContent: change ? (\n <Badge size=\"xs\" variant=\"subtle\" flexShrink={0} {...changeBadgeProps}>\n {changeLabels[change] ?? change}\n </Badge>\n ) : undefined,\n onActivate: () => onSelectPath(filePath),\n };\n });\n};\n\nexport const FileListPanel = (props: FileListPanelProps) => {\n const {\n title,\n paths,\n selectedPath,\n viewMode,\n searchQuery,\n expandedFolderIds,\n onSelectPath,\n onSearchQueryChange,\n onToggleFolder,\n resolveFileIcon,\n changeByPath,\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const fileTree = buildChangedFilesTree(paths, viewMode);\n const treeNodes = toTreeListNodes({ nodes: fileTree, viewMode, onSelectPath, resolveFileIcon, changeByPath });\n const emptyTitle = searchQuery.trim() ? \"No matching files\" : \"No changed files\";\n\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" gap=\"0\" overflow=\"hidden\" bg=\"bg\">\n <Header variant=\"main\" justifyContent=\"space-between\" borderBottomWidth=\"1px\" borderColor=\"border.subtle\" bg=\"bg\">\n <HStack gap=\"2xs\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"foreground.secondary\" truncate>\n {title}\n </Text>\n <Badge size=\"sm\" variant=\"number\" flexShrink={0} colorPalette=\"gray\">\n {paths.length}\n </Badge>\n </HStack>\n </Header>\n <Stack gap=\"xs\" borderBottomWidth=\"1px\" bg=\"bg\">\n <InputGroup startElement={<Search size={14} />}>\n <Input\n size=\"sm\"\n mx=\"xs\"\n placeholder=\"Filter files\"\n value={searchQuery}\n {...filterInputChromeProps}\n onChange={(event) => onSearchQueryChange(event.target.value)}\n />\n </InputGroup>\n </Stack>\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n bg=\"bg\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowX: \"hidden\" } }}\n >\n {paths.length > 0 ? (\n <TreeList\n sections={[{ id: \"files\", nodes: treeNodes }]}\n expandedNodeIds={[...expandedFolderIds]}\n activeNodeId={selectedPath ? `file:${selectedPath}` : null}\n rowVariant=\"tree\"\n onToggleNode={onToggleFolder}\n virtualize\n scrollRef={scrollRef}\n />\n ) : (\n <Box px=\"xs\" py=\"xs\">\n <EmptyState title={emptyTitle} size=\"sm\" textAlign=\"left\" alignItems=\"flex-start\" />\n </Box>\n )}\n </ScrollArea>\n </Stack>\n );\n};\n","import { Box, Flex, HStack, Skeleton, Stack, Text } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport { Header } from \"@/components/layout/header\";\nimport { ResizableSplitLayout } from \"@/components/layout/resizable-split-layout\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { buildChangedFilesTree, collectExpandedFolderIds, sortPathsByViewMode } from \"./build-changed-files-tree\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffDrawer, type DiffDrawerExpansionState, type DiffExpansionCommand } from \"./diff-drawer\";\nimport { useDiffViewerStore } from \"./diff-viewer.store\";\nimport { DiffViewerOptionsMenu } from \"./diff-viewer-options-menu\";\nimport { FileListPanel } from \"./file-list-panel\";\nimport type { ChangedFilesViewMode, FileIconInfo } from \"./types\";\n\nexport interface DiffViewerProps {\n diffs: Diff[];\n changedFilePaths?: string[];\n defaultSelectedPath?: string | null;\n loading?: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst buildChangeByPath = (diffs: Diff[]) => new Map(diffs.map((diff) => [getDiffPath(diff), diff.change]));\nconst sumDiffStats = (diffs: Diff[]) =>\n diffs.reduce(\n (total, diff) => ({\n additions: total.additions + (diff.additions ?? 0),\n deletions: total.deletions + (diff.deletions ?? 0),\n }),\n { additions: 0, deletions: 0 },\n );\n\nconst buildFilteredDiffs = (input: {\n diffs: Diff[];\n normalizedSearchQuery: string;\n viewMode: ChangedFilesViewMode;\n}) => {\n const { diffs, normalizedSearchQuery, viewMode } = input;\n const matchingDiffs = normalizedSearchQuery\n ? diffs.filter((diff) => getDiffPath(diff).toLowerCase().includes(normalizedSearchQuery))\n : diffs;\n const orderedPaths = sortPathsByViewMode(matchingDiffs.map(getDiffPath), viewMode);\n const orderByPath = new Map(orderedPaths.map((path, index) => [path, index]));\n\n return [...matchingDiffs].sort((left, right) => {\n const leftOrder = orderByPath.get(getDiffPath(left)) ?? Number.MAX_SAFE_INTEGER;\n const rightOrder = orderByPath.get(getDiffPath(right)) ?? Number.MAX_SAFE_INTEGER;\n return leftOrder - rightOrder;\n });\n};\n\nconst resolveSelectedPath = (preferredPaths: string[], fallbackPaths: string[]) =>\n preferredPaths[0] ?? fallbackPaths[0] ?? null;\n\nconst loadingDiffItems = [\"first\", \"second\", \"third\"] as const;\n\nconst DiffViewerLoading = () => (\n <Stack flex=\"1\" minH=\"0\" bg=\"bg\" p=\"xs\" gap=\"xs\" role=\"status\" aria-busy=\"true\" aria-label=\"Loading diff panel\">\n {loadingDiffItems.map((item) => (\n <Skeleton key={item} h=\"72px\" w=\"full\" flexShrink=\"0\" borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n\nexport const DiffViewer = (props: DiffViewerProps) => {\n const { diffs, changedFilePaths, defaultSelectedPath = null, loading = false, onLoadDiff, resolveFileIcon } = props;\n const [diffExpansionCommand, setDiffExpansionCommand] = useState<DiffExpansionCommand | null>(null);\n const [diffExpansionState, setDiffExpansionState] = useState<DiffDrawerExpansionState>({\n allExpanded: false,\n allCollapsed: false,\n });\n const {\n isTreePanelOpen,\n viewMode,\n diffViewMode,\n searchQuery,\n selectedPath,\n expandedFolderIds,\n setTreePanelOpen,\n setViewMode,\n setDiffViewMode,\n setSearchQuery,\n setSelectedPath,\n setExpandedFolderIds,\n toggleFolder,\n expandAll,\n collapseAll,\n } = useDiffViewerStore();\n\n const diffPaths = diffs.map(getDiffPath);\n const filePaths = changedFilePaths ?? diffPaths;\n const normalizedSearchQuery = searchQuery.trim().toLowerCase();\n const filteredFilePaths = normalizedSearchQuery\n ? filePaths.filter((path) => path.toLowerCase().includes(normalizedSearchQuery))\n : filePaths;\n const filteredDiffs = buildFilteredDiffs({ diffs, normalizedSearchQuery, viewMode });\n const changeByPath = buildChangeByPath(diffs);\n const filteredDiffPaths = filteredDiffs.map(getDiffPath);\n const fileTree = buildChangedFilesTree(filteredFilePaths, viewMode);\n const folderIds = viewMode === \"nested\" ? collectExpandedFolderIds(fileTree) : [];\n const filteredFilePathKey = filteredFilePaths.join(\"\\0\");\n const filteredDiffPathKey = filteredDiffPaths.join(\"\\0\");\n const resolvedSelectedPath =\n selectedPath ?? defaultSelectedPath ?? resolveSelectedPath(filteredDiffPaths, filteredFilePaths);\n const hasDiffs = filteredDiffs.length > 0;\n const emptyDiffTitle = normalizedSearchQuery ? \"No matching diffs\" : \"No changes\";\n const showDiffEmptyState = !loading && !hasDiffs;\n const totalDiff = sumDiffStats(filteredDiffs);\n const hasExpandableItems = folderIds.length > 0 || filteredDiffs.length > 0;\n const allFilesExpanded = folderIds.every((folderId) => expandedFolderIds.has(folderId));\n const allFilesCollapsed = folderIds.every((folderId) => !expandedFolderIds.has(folderId));\n const allDiffsExpanded = filteredDiffs.length === 0 || diffExpansionState.allExpanded;\n const allDiffsCollapsed = filteredDiffs.length === 0 || diffExpansionState.allCollapsed;\n const isExpandAllDisabled = !hasExpandableItems || (allFilesExpanded && allDiffsExpanded);\n const isCollapseAllDisabled = !hasExpandableItems || (allFilesCollapsed && allDiffsCollapsed);\n\n useEffect(() => {\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n const tree = buildChangedFilesTree(filePaths, viewMode);\n setExpandedFolderIds(viewMode === \"nested\" ? collectExpandedFolderIds(tree) : []);\n }, [filteredFilePathKey, setExpandedFolderIds, viewMode]);\n\n useEffect(() => {\n const diffPaths = filteredDiffPathKey ? filteredDiffPathKey.split(\"\\0\") : [];\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n if (resolvedSelectedPath && diffPaths.includes(resolvedSelectedPath)) return;\n setSelectedPath(resolveSelectedPath(diffPaths, filePaths));\n }, [filteredDiffPathKey, filteredFilePathKey, resolvedSelectedPath, setSelectedPath]);\n\n const expandAllFilesAndDiffs = () => {\n expandAll(folderIds);\n setDiffExpansionCommand((current) => ({ action: \"expand\", id: (current?.id ?? 0) + 1 }));\n };\n\n const collapseAllFilesAndDiffs = () => {\n collapseAll();\n setDiffExpansionCommand((current) => ({ action: \"collapse\", id: (current?.id ?? 0) + 1 }));\n };\n\n const selectChangedFilePath = (path: string) => {\n const currentIndex = resolvedSelectedPath ? filteredDiffPaths.indexOf(resolvedSelectedPath) : -1;\n const nextIndex = filteredDiffPaths.indexOf(path);\n const direction = currentIndex >= 0 && nextIndex >= 0 && nextIndex < currentIndex ? \"up\" : \"down\";\n\n setSelectedPath(path);\n setDiffExpansionCommand((current) => ({ action: \"expand-selected\", direction, id: (current?.id ?? 0) + 1, path }));\n };\n\n const diffPanel = (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" flex=\"1\" bg=\"bg\" gap=\"0\">\n <Header variant=\"main\" borderBottomWidth=\"1px\" borderColor=\"border.subtle\" bg=\"bg\" justifyContent=\"space-between\">\n <HStack gap=\"xs\" minW=\"0\">\n <DiffViewerOptionsMenu\n isTreePanelOpen={isTreePanelOpen}\n hasFilePaths={filePaths.length > 0}\n viewMode={viewMode}\n diffViewMode={diffViewMode}\n isExpandAllDisabled={isExpandAllDisabled}\n isCollapseAllDisabled={isCollapseAllDisabled}\n onToggleTreePanel={() => setTreePanelOpen(!isTreePanelOpen)}\n onViewModeChange={setViewMode}\n onDiffViewModeChange={setDiffViewMode}\n onExpandAll={expandAllFilesAndDiffs}\n onCollapseAll={collapseAllFilesAndDiffs}\n />\n {showDiffEmptyState ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" truncate>\n {emptyDiffTitle}\n </Text>\n ) : null}\n </HStack>\n <DiffBubble variant=\"ghost\" size=\"small\" additions={totalDiff.additions} deletions={totalDiff.deletions} />\n </Header>\n {loading ? (\n <DiffViewerLoading />\n ) : hasDiffs ? (\n <Box flex=\"1\" minH=\"0\">\n <DiffDrawer\n diffs={filteredDiffs}\n selectedDiffPath={resolvedSelectedPath}\n onLoadDiff={onLoadDiff}\n onSelectDiffPath={setSelectedPath}\n onExpansionStateChange={setDiffExpansionState}\n expansionCommand={diffExpansionCommand}\n diffViewMode={diffViewMode}\n />\n </Box>\n ) : (\n <Box flex=\"1\" minH=\"0\" px=\"md\" py=\"lg\" display=\"flex\" alignItems=\"center\" justifyContent=\"center\" bg=\"bg\">\n <EmptyState title={emptyDiffTitle} />\n </Box>\n )}\n </Stack>\n );\n\n return (\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" bg=\"bg\" gap=\"0\" data-testid=\"diff-viewer\">\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={\n <FileListPanel\n title=\"Changed files\"\n paths={filteredFilePaths}\n selectedPath={resolvedSelectedPath}\n viewMode={viewMode}\n searchQuery={searchQuery}\n expandedFolderIds={expandedFolderIds}\n onSelectPath={selectChangedFilePath}\n onSearchQueryChange={setSearchQuery}\n onToggleFolder={toggleFolder}\n resolveFileIcon={resolveFileIcon}\n changeByPath={changeByPath}\n />\n }\n contentPanel={diffPanel}\n collapsed={!isTreePanelOpen}\n defaultSizePx={288}\n minSizePx={224}\n contentMinSizePx={320}\n resizeLabel=\"Resize file list panel\"\n onCollapsedChange={(collapsed) => setTreePanelOpen(!collapsed)}\n />\n </Flex>\n );\n};\n"],"names":["customTheme","base","inherit","rules","colors","isMonacoTheme","value","EDITOR_THEME_NAME","useEditorTheme","$","_c","themePreference","themePreferences","useThemePreference","t0","t1","theme","id","preference","find","monacoTheme","useApplyEditorTheme","editorTheme","monacoRef","useRef","monaco","current","editor","defineTheme","setTheme","useEffect","t2","monaco_0","CodeEditor","props","defaultCode","code","showLineNumbers","isEditable","language","onChange","disableScroll","undefined","applyEditorTheme","Symbol","for","enabled","t3","t4","scrollbar","vertical","horizontal","useShadows","alwaysConsumeMouseWheel","scrollBeyondLastLine","mouseWheelScrollSensitivity","overviewRulerLanes","t5","tabSize","minimap","fontSize","readOnly","lineNumbers","options","t6","t7","t8","languages","typescript","typescriptDefaults","setCompilerOptions","jsx","JsxEmit","React","addCommand","KeyMod","CtrlCmd","KeyCode","KeyS","getAction","run","t9","Editor","CodeDiffEditor","original","modified","originalEditable","renderSideBySide","useInlineViewWhenSpaceIsTooSmall","_","DiffEditor","imagePreviewMimeTypes","avif","bmp","gif","heic","ico","jpeg","jpg","png","tif","tiff","webp","imagePreviewExtensions","Object","keys","getFileExtension","filePath","extension","split","pop","toLowerCase","getImagePreviewMimeType","isImagePreviewPath","LARGE_DIFF_LINE_THRESHOLD","generatedDiffFileNames","Set","binaryDiffExtensions","getDiffLineCount","input","additions","deletions","isLargeDiffContent","isGeneratedDiffPath","path","fileName","has","endsWith","isBinaryDiffPath","ext","length","isImageDiffPath","createDiffCardBodyModel","diff","oldContent","newContent","isLargeDiff","hasOptedIntoLargeDiff","onShowFullDiff","diffViewMode","buildViewData","oldImageSrc","getImagePreviewSource","newImageSrc","kind","oldSrc","newSrc","isImage","renderedLineCount","diffViewData","buildDiffViewData","oldPath","newPath","sideBySide","content","startsWith","DiffCardBody","model","Box","ImageDiffPreview","BinaryDiffPlaceholder","LargeDiffPlaceholder","md","ImageDiffPanel","Grid","label","src","fallback","Text","Image","jsxs","Button","EmptyState","title","DeferredDiffLoad","actionLabel","isLoadingDiff","onAction","loadingDiffContentRows","LoadingDiffContent","Stack","map","_temp","row","Skeleton","buildDeferredDiffLoadState","isGeneratedDiff","loadError","canLoadDiff","onLoadDiff","DiffCardContent","isExpanded","isBinaryDiff","hasDiffContent","shouldAutoLoadDiff","shouldAutoLoadDiffContent","requestedPath","resolveRequestedDiffPath","shouldShowDiffStats","resolveDiffFilePath","useDiffContentLoader","isSelected","setLoadingDiff","useState","setRequestedPath","setLoadError","loadDiff","Boolean","DiffCard","onToggleExpanded","onSelect","blocksDiffContentLoad","borderColor","DiffCardHeader","t10","t11","t12","showStats","isCopied","setIsCopied","copyResetTimeoutRef","window","clearTimeout","navigator","clipboard","writeText","setTimeout","copyFilePath","bg","event","stopPropagation","ChevronDown","ChevronRight","IconButton","t13","change","t14","t15","t16","t17","opacity","pointerEvents","t18","t19","t20","event_0","t21","Check","Copy","t22","t23","Tooltip","t24","t25","t26","DiffBubble","t27","DiffDrawerEmptyState","ScrollArea","p","spaceY","CARD_HEADER_HEIGHT","CARD_BODY_LINE_HEIGHT","HUNK_ROW_HEIGHT","COLLAPSED_CARD_HEIGHT","DEFERRED_BODY_HEIGHT","IMAGE_BODY_HEIGHT","ITEM_GAP_HEIGHT","deferredCardHeight","estimateDiffCardHeight","isCollapsed","unifiedContentRows","splitContentRows","hunkRows","contentRows","bodyHeight","getDiffPath","PINNED_DIFF_LOOKBEHIND_COUNT","resolveSelectedScrollState","diffs","selectedDiffPath","collapsedPaths","expansionCommand","completedScrollCommandId","selectedScrollPath","selectedScrollSourceKey","selectedScrollCommandId","action","hasCompletedSelectedScroll","selectedScrollKey","selectedScrollExpansionState","selectedScrollIndex","findIndex","shouldPinSelectedScrollIndex","direction","includePinnedDiffIndexes","indexes","includes","pinnedStartIndex","Math","max","pinnedIndexes","Array","from","index","sort","a","b","SETTLE_FRAME_COUNT","MAX_ALIGNMENT_FRAMES","useSelectedDiffScroll","scrollRef","virtualizerRef","suppressScrollAdjustRef","setCompletedScrollCommandId","virtualizer","scrollElement","frameIds","cancelledByUserScroll","stopAligning","cancelSelectedScroll","alignmentFrames","alignSelectedDiff","scrollToIndex","align","push","requestAnimationFrame","addEventListener","passive","removeEventListener","frameId","cancelAnimationFrame","useLayoutEffect","INITIAL_EXPANDED_DIFF_COUNT","INITIAL_COLLAPSED_LINE_THRESHOLD","buildInitialCollapsedPaths","filter","lineCount","buildAllCollapsedPaths","toggleCollapsedPath","next","delete","add","resolveCollapsedPathsForSelectedDiff","some","resolveCollapsedPathsForNavigation","previousNavigatedPath","expanded","DiffDrawer","onSelectDiffPath","onExpansionStateChange","reportedExpansionStateRef","lastNavigatedPathRef","setCollapsedPaths","largeDiffOptInPaths","setLargeDiffOptInPaths","useVirtualizer","count","getScrollElement","estimateSize","getItemKey","overscan","rangeExtractor","range","defaultRangeExtractor","shouldAdjustScrollPositionOnItemSizeChange","_item","_delta","instance","isScrolling","prev","navigatedPath","expansionState","allExpanded","size","allCollapsed","every","reportedExpansionState","toggleExpanded","showFullDiff","virtualItems","getVirtualItems","style","overflowAnchor","height","getTotalSize","virtualItem","measureElement","top","start","key","normalizeChangedFilePath","segment","trim","join","sortNodes","nodes","left","right","type","name","localeCompare","forEach","node","children","dedupePaths","paths","buildFlatTree","buildChangedFilesTree","mode","treeById","Map","rootNodes","segments","parentPath","parentNode","currentPath","isFile","nodeId","existingNode","get","nextNode","set","collectExpandedFolderIds","folderIds","visit","items","item","collectNestedFileOrder","orderedPaths","treeNodes","replace","sortPathsByViewMode","useDiffViewerStore","create","isTreePanelOpen","viewMode","searchQuery","selectedPath","expandedFolderIds","setTreePanelOpen","toggleTreePanel","state","setViewMode","setDiffViewMode","setSearchQuery","setSelectedPath","setExpandedFolderIds","toggleFolder","folderId","expandAll","collapseAll","SelectionIndicator","selected","DiffViewerMenuItem","icon","disabled","onActivate","ListRow","DiffViewerOptionsMenu","hasFilePaths","isExpandAllDisabled","isCollapseAllDisabled","onToggleTreePanel","onViewModeChange","onDiffViewModeChange","onExpandAll","onCollapseAll","Menu","Settings2","PanelLeftClose","PanelLeftOpen","Fragment","ListTree","List","Rows2","SquareSplitHorizontal","ChevronsUpDown","ChevronsDownUp","changeLabels","added","copied","deleted","permissionChange","renamed","changeColors","changeSemanticStyles","color","backgroundColor","filterInputChromeProps","border","borderRadius","boxShadow","_hover","_active","_focus","outline","_focusVisible","getFilePathParts","lastSlashIndex","lastIndexOf","dirPath","slice","renderFileLabel","toTreeListNodes","onSelectPath","resolveFileIcon","changeByPath","isContainer","fileIcon","Icon","FileText","changeBadgeProps","colorPalette","iconColor","endContent","Badge","FileListPanel","onSearchQueryChange","onToggleFolder","fileTree","emptyTitle","Header","HStack","Search","target","InputGroup","Input","overflowX","TreeList","buildChangeByPath","sumDiffStats","reduce","total","buildFilteredDiffs","normalizedSearchQuery","matchingDiffs","orderByPath","leftOrder","Number","MAX_SAFE_INTEGER","rightOrder","resolveSelectedPath","preferredPaths","fallbackPaths","loadingDiffItems","DiffViewerLoading","DiffViewer","changedFilePaths","defaultSelectedPath","loading","diffExpansionCommand","setDiffExpansionCommand","diffExpansionState","setDiffExpansionState","allFilesExpanded","emptyDiffTitle","filePaths","filteredDiffPathKey","filteredDiffPaths","filteredDiffs","filteredFilePathKey","filteredFilePaths","hasDiffs","hasExpandableItems","resolvedSelectedPath","showDiffEmptyState","totalDiff","diffPaths","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","filePaths_0","tree","diffPaths_0","filePaths_1","_temp2","expandAllFilesAndDiffs","_temp3","collapseAllFilesAndDiffs","path_0","currentIndex","indexOf","nextIndex","current_1","selectChangedFilePath","diffPanel","collapsed","Flex","ResizableSplitLayout","current_0"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"diff.js","sources":["../src/components/diff-viewer/code-editor.tsx","../../pstdio-file-types/src/index.ts","../src/components/diff-viewer/diff-size.ts","../src/components/diff-viewer/diff-card-body.tsx","../src/components/diff-viewer/diff-card-load-state.tsx","../src/components/diff-viewer/diff-card-content.tsx","../src/components/diff-viewer/diff-card.tsx","../src/components/diff-viewer/diff-drawer-empty-state.tsx","../src/components/diff-viewer/diff-drawer-height.ts","../src/components/diff-viewer/diff-drawer-scroll.ts","../src/components/diff-viewer/use-selected-diff-scroll.ts","../src/components/diff-viewer/diff-drawer.tsx","../src/components/diff-viewer/build-changed-files-tree.ts","../src/components/diff-viewer/diff-viewer.store.ts","../src/components/diff-viewer/diff-viewer-options-menu.tsx","../src/components/diff-viewer/file-list-panel.tsx","../src/components/diff-viewer/diff-viewer.tsx"],"sourcesContent":["import { DiffEditor, Editor } from \"@monaco-editor/react\";\nimport { useEffect, useRef } from \"react\";\nimport type { MonacoThemeData } from \"../../theme\";\nimport { useThemePreference } from \"../../utils/theme-preference\";\n\nexport const createCodeEditorPreloader = (initialize: () => Promise<unknown>) => {\n let initialization: Promise<unknown> | undefined;\n\n return () => {\n initialization ??= initialize();\n return initialization;\n };\n};\n\nexport const preloadCodeEditor = createCodeEditorPreloader(() =>\n import(\"./monaco-browser\").then((module) => module.initializeMonaco()),\n);\n\nexport const customTheme = {\n base: \"vs-dark\" as const,\n inherit: true,\n rules: [],\n colors: {\n \"editor.background\": \"#0a0d15\",\n \"editor.foreground\": \"#f5f5f5\",\n \"editor.lineHighlightBackground\": \"#22252C\",\n \"editorCursor.foreground\": \"#A7A7A7\",\n \"editorWhitespace.foreground\": \"#3B3B3B\",\n \"editorIndentGuide.background\": \"#404040\",\n \"editorIndentGuide.activeBackground\": \"#707070\",\n },\n} satisfies MonacoThemeData;\n\nconst isMonacoTheme = (value: unknown): value is MonacoThemeData =>\n typeof value === \"object\" && value !== null && \"base\" in value && \"colors\" in value;\n\ntype MonacoApi = {\n editor: {\n defineTheme: (name: string, data: MonacoThemeData) => void;\n setTheme: (name: string) => void;\n };\n};\n\nconst EDITOR_THEME_NAME = \"ps-theme\";\n\nconst useEditorTheme = () => {\n const { themePreference, themePreferences } = useThemePreference();\n const preference = themePreferences.find((theme) => theme.id === themePreference);\n return isMonacoTheme(preference?.monacoTheme) ? preference.monacoTheme : customTheme;\n};\n\nconst useApplyEditorTheme = (editorTheme: MonacoThemeData) => {\n const monacoRef = useRef<MonacoApi | null>(null);\n\n useEffect(() => {\n const monaco = monacoRef.current;\n if (!monaco) return;\n\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n }, [editorTheme]);\n\n return (monaco: MonacoApi) => {\n monacoRef.current = monaco;\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n };\n};\n\ninterface CodeEditorProps {\n language: string;\n defaultCode?: string;\n code?: string;\n isEditable: boolean;\n showLineNumbers?: boolean;\n onChange?: (code: string) => void;\n disableScroll?: boolean;\n}\n\nexport const CodeEditor = (props: CodeEditorProps) => {\n const { defaultCode, code, showLineNumbers, isEditable, language = \"javascript\", onChange, disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: !isEditable,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <Editor\n width=\"100%\"\n height=\"100%\"\n language={language}\n defaultValue={defaultCode}\n value={code}\n theme={EDITOR_THEME_NAME}\n options={options}\n onChange={(value) => {\n onChange?.(value || \"\");\n }}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={async (editor, monaco) => {\n applyEditorTheme(monaco);\n\n // Add JSX support\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n\n // Format on cmd+s\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, async () => {\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n });\n\n // Run format on the initial value\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n }}\n />\n );\n};\n\ninterface CodeDiffEditorProps {\n language: string;\n original: string;\n modified: string;\n showLineNumbers?: boolean;\n disableScroll?: boolean;\n}\n\nexport const CodeDiffEditor = (props: CodeDiffEditorProps) => {\n const { original, modified, showLineNumbers, language = \"javascript\", disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: true,\n originalEditable: false,\n renderSideBySide: true,\n useInlineViewWhenSpaceIsTooSmall: true,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <DiffEditor\n width=\"100%\"\n height=\"100%\"\n language={language}\n original={original}\n modified={modified}\n theme={EDITOR_THEME_NAME}\n options={options}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={(_, monaco) => {\n applyEditorTheme(monaco);\n\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n }}\n />\n );\n};\n","export const imagePreviewMimeTypes = {\n avif: \"image/avif\",\n bmp: \"image/bmp\",\n gif: \"image/gif\",\n heic: \"image/heic\",\n ico: \"image/x-icon\",\n jpeg: \"image/jpeg\",\n jpg: \"image/jpeg\",\n png: \"image/png\",\n tif: \"image/tiff\",\n tiff: \"image/tiff\",\n webp: \"image/webp\",\n} as const;\n\nexport const imagePreviewExtensions = Object.keys(imagePreviewMimeTypes);\n\nexport const getFileExtension = (filePath: string) => {\n const fileName = filePath.split(/[\\\\/]/).pop() ?? filePath;\n const extension = fileName.split(\".\").pop();\n return extension ? extension.toLowerCase() : \"\";\n};\n\nexport const getImagePreviewMimeType = (filePath: string) => {\n const extension = getFileExtension(filePath);\n return imagePreviewMimeTypes[extension as keyof typeof imagePreviewMimeTypes] ?? null;\n};\n\nexport const isImagePreviewPath = (filePath: string) => getImagePreviewMimeType(filePath) !== null;\n","import { getFileExtension, imagePreviewExtensions, isImagePreviewPath } from \"pstdio-file-types\";\n\nexport const LARGE_DIFF_LINE_THRESHOLD = 1000;\n\nconst generatedDiffFileNames = new Set([\"bun.lock\", \"bun.lockb\", \"package-lock.json\", \"pnpm-lock.yaml\", \"yarn.lock\"]);\n\n// Extensions whose byte content cannot be meaningfully shown as a unified diff.\n// SVG is intentionally excluded — it is text-based XML and benefits from a line diff.\nconst binaryDiffExtensions = new Set([\n ...imagePreviewExtensions,\n \"pdf\",\n \"zip\",\n \"tar\",\n \"gz\",\n \"tgz\",\n \"rar\",\n \"7z\",\n \"exe\",\n \"dll\",\n \"so\",\n \"dylib\",\n \"wasm\",\n \"class\",\n \"jar\",\n \"mp3\",\n \"mp4\",\n \"mov\",\n \"ogg\",\n \"wav\",\n \"webm\",\n \"flac\",\n \"ttf\",\n \"otf\",\n \"woff\",\n \"woff2\",\n \"eot\",\n]);\n\nexport const getDiffLineCount = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return (input.additions ?? 0) + (input.deletions ?? 0);\n};\n\nexport const isLargeDiffContent = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return getDiffLineCount(input) > LARGE_DIFF_LINE_THRESHOLD;\n};\n\nexport const isGeneratedDiffPath = (path: string) => {\n const fileName = path.split(/[\\\\/]/).pop() ?? path;\n\n return generatedDiffFileNames.has(fileName) || fileName.endsWith(\".min.js\") || fileName.endsWith(\".generated.ts\");\n};\n\nexport const isBinaryDiffPath = (path: string) => {\n const ext = getFileExtension(path);\n return ext.length > 0 && binaryDiffExtensions.has(ext);\n};\n\nexport const isImageDiffPath = isImagePreviewPath;\n","import { Box, Button, Grid, Image, Text } from \"@chakra-ui/react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffEditor } from \"./diff-editor\";\nimport { getDiffLineCount, isBinaryDiffPath, isImageDiffPath } from \"./diff-size\";\nimport { type BuiltDiffViewData, buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardBodyProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isLargeDiff: boolean;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardBodyModelInput extends DiffCardBodyProps {\n buildViewData?: typeof buildDiffViewData;\n}\n\nexport const createDiffCardBodyModel = (input: DiffCardBodyModelInput) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n buildViewData,\n } = input;\n\n if (isBinaryDiffPath(filePath)) {\n const oldImageSrc = getImagePreviewSource(oldContent);\n const newImageSrc = getImagePreviewSource(newContent);\n if (isImageDiffPath(filePath) && (oldImageSrc || newImageSrc)) {\n return {\n kind: \"image\" as const,\n filePath,\n oldSrc: oldImageSrc,\n newSrc: newImageSrc,\n };\n }\n\n return {\n kind: \"binary\" as const,\n filePath,\n isImage: isImageDiffPath(filePath),\n };\n }\n\n if (isLargeDiff && !hasOptedIntoLargeDiff) {\n return {\n kind: \"placeholder\" as const,\n filePath,\n renderedLineCount: getDiffLineCount(diff),\n onShowFullDiff,\n };\n }\n\n const diffViewData = (buildViewData ?? buildDiffViewData)({\n original: oldContent,\n modified: newContent,\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n return {\n kind: \"editor\" as const,\n diffViewData,\n sideBySide: diffViewMode === \"split\",\n };\n};\n\nconst getImagePreviewSource = (content: string) => (content.startsWith(\"data:image/\") ? content : \"\");\n\nexport const DiffCardBody = (props: DiffCardBodyProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n const model = createDiffCardBodyModel({\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode,\n });\n\n return (\n <Box bg=\"bg\" borderBottomRadius=\"xs\" overflow=\"hidden\">\n {model.kind === \"editor\" ? (\n <DiffEditor\n original={oldContent}\n modified={newContent}\n oldPath={diff.oldPath}\n newPath={diff.newPath}\n sideBySide={model.sideBySide}\n data={model.diffViewData}\n />\n ) : model.kind === \"image\" ? (\n <ImageDiffPreview oldSrc={model.oldSrc} newSrc={model.newSrc} />\n ) : model.kind === \"binary\" ? (\n <BinaryDiffPlaceholder isImage={model.isImage} />\n ) : (\n <LargeDiffPlaceholder\n filePath={model.filePath}\n renderedLineCount={model.renderedLineCount}\n onShowFullDiff={model.onShowFullDiff}\n />\n )}\n </Box>\n );\n};\n\ninterface ImageDiffPreviewProps {\n oldSrc: string;\n newSrc: string;\n}\n\nconst ImageDiffPreview = (props: ImageDiffPreviewProps) => {\n const { oldSrc, newSrc } = props;\n\n return (\n <Grid\n templateColumns={{ base: \"1fr\", md: \"1fr 1fr\" }}\n gap=\"sm\"\n p=\"sm\"\n borderTop=\"1px solid\"\n borderColor=\"border.subtle\"\n bg=\"bg\"\n >\n <ImageDiffPanel label=\"Old\" src={oldSrc} fallback=\"No old image\" />\n <ImageDiffPanel label=\"New\" src={newSrc} fallback=\"No new image\" />\n </Grid>\n );\n};\n\ninterface ImageDiffPanelProps {\n label: string;\n src: string;\n fallback: string;\n}\n\nconst ImageDiffPanel = (props: ImageDiffPanelProps) => {\n const { label, src, fallback } = props;\n\n return (\n <Box border=\"1px solid\" borderColor=\"border.subtle\" borderRadius=\"xs\" overflow=\"hidden\" bg=\"bg.subtle\" minW=\"0\">\n <Text\n px=\"xs\"\n py=\"2xs\"\n textStyle=\"label/S/medium\"\n color=\"fg.muted\"\n borderBottom=\"1px solid\"\n borderColor=\"border.subtle\"\n >\n {label}\n </Text>\n <Box display=\"grid\" placeItems=\"center\" minH=\"180px\" p=\"sm\">\n {src ? (\n <Image src={src} alt={`${label} image diff`} maxH=\"260px\" maxW=\"100%\" objectFit=\"contain\" />\n ) : (\n <Text color=\"fg.muted\" textStyle=\"body/S/regular\">\n {fallback}\n </Text>\n )}\n </Box>\n </Box>\n );\n};\n\ninterface LargeDiffPlaceholderProps {\n filePath: string;\n renderedLineCount: number;\n onShowFullDiff?: () => void;\n}\n\nconst LargeDiffPlaceholder = (props: LargeDiffPlaceholderProps) => {\n const { filePath, onShowFullDiff } = props;\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.subtle\" bg=\"bg\">\n <EmptyState title=\"Large diffs are hidden by default\" paddingY=\"sm\">\n {onShowFullDiff ? (\n <Button size=\"xs\" variant=\"outline\" aria-label={`Render full diff for ${filePath}`} onClick={onShowFullDiff}>\n Show full diff\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\ninterface BinaryDiffPlaceholderProps {\n isImage: boolean;\n}\n\nconst BinaryDiffPlaceholder = (props: BinaryDiffPlaceholderProps) => {\n const { isImage } = props;\n const title = isImage ? \"Image diffs are not shown\" : \"Binary diffs are not shown\";\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.subtle\" bg=\"bg\">\n <EmptyState title={title} paddingY=\"sm\" />\n </Box>\n );\n};\n\nexport type TestDiffViewData = BuiltDiffViewData;\n","import { Box, Button, Skeleton, Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\n\ninterface DeferredDiffLoadProps {\n title: string;\n actionLabel?: string;\n isLoadingDiff: boolean;\n onAction?: () => void;\n}\n\nexport const DeferredDiffLoad = (props: DeferredDiffLoadProps) => {\n const { title, actionLabel, isLoadingDiff, onAction } = props;\n\n return (\n <Box bg=\"bg\" p=\"md\" borderTop=\"1px solid\" borderColor=\"border.subtle\">\n <EmptyState title={title} paddingY=\"sm\">\n {actionLabel ? (\n <Button size=\"xs\" variant=\"outline\" loading={isLoadingDiff} onClick={onAction}>\n {actionLabel}\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\nconst loadingDiffContentRows = [\"first\", \"second\", \"third\"] as const;\n\nexport const LoadingDiffContent = () => (\n <Stack\n h=\"280px\"\n bg=\"bg\"\n borderTop=\"1px solid\"\n borderColor=\"border.subtle\"\n p=\"xs\"\n gap=\"2xs\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading diff\"\n >\n {loadingDiffContentRows.map((row) => (\n <Skeleton key={row} h=\"20px\" w=\"full\" borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n","import type { Diff } from \"./diff-card\";\nimport { DiffCardBody } from \"./diff-card-body\";\nimport { DeferredDiffLoad, LoadingDiffContent } from \"./diff-card-load-state\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardContentProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isExpanded: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n hasDiffContent: boolean;\n canLoadDiff: boolean;\n shouldAutoLoadDiff: boolean;\n loadError: boolean;\n isLoadingDiff: boolean;\n onLoadDiff: () => Promise<void>;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DeferredDiffLoadStateInput {\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n loadError: boolean;\n canLoadDiff: boolean;\n onLoadDiff: () => Promise<void>;\n onShowFullDiff?: () => void;\n}\n\nconst buildDeferredDiffLoadState = (input: DeferredDiffLoadStateInput) => {\n const { isLargeDiff, isGeneratedDiff, loadError, canLoadDiff, onLoadDiff, onShowFullDiff } = input;\n let title = \"Diff content is not loaded yet.\";\n let actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n let onAction: (() => void) | undefined = canLoadDiff ? () => void onLoadDiff() : undefined;\n\n if (isLargeDiff) {\n title = \"Large diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Show full diff\" : undefined;\n onAction = () => {\n onShowFullDiff?.();\n void onLoadDiff();\n };\n }\n\n if (isGeneratedDiff) {\n title = \"Generated diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n if (loadError) {\n title = \"Diff failed to load. Try again.\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n return { title, actionLabel, onAction };\n};\n\nexport const DiffCardContent = (props: DiffCardContentProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isExpanded,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n hasDiffContent,\n canLoadDiff,\n shouldAutoLoadDiff,\n loadError,\n isLoadingDiff,\n onLoadDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n if (!isExpanded) return null;\n\n if (isBinaryDiff) {\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={false}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n }\n\n if (!hasDiffContent && !shouldAutoLoadDiff) {\n const { title, actionLabel, onAction } = buildDeferredDiffLoadState({\n isLargeDiff,\n isGeneratedDiff,\n loadError,\n canLoadDiff,\n onLoadDiff,\n onShowFullDiff,\n });\n\n return (\n <DeferredDiffLoad title={title} actionLabel={actionLabel} isLoadingDiff={isLoadingDiff} onAction={onAction} />\n );\n }\n\n if (shouldAutoLoadDiff) {\n return <LoadingDiffContent />;\n }\n\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={isLargeDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n};\n","import { Box, Grid, IconButton, Text } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, ChevronRight, Copy } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport { DiffCardContent } from \"./diff-card-content\";\nimport { isBinaryDiffPath, isGeneratedDiffPath, isImageDiffPath, isLargeDiffContent } from \"./diff-size\";\nimport type { DiffViewMode } from \"./types\";\n\nexport interface Diff {\n change: \"added\" | \"deleted\" | \"modified\" | \"renamed\" | \"copied\" | \"permissionChange\";\n oldPath?: string;\n newPath?: string;\n oldContent?: string;\n newContent?: string;\n additions?: number;\n deletions?: number;\n}\n\ninterface DiffCardProps {\n diff: Diff;\n isSelected?: boolean;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n onSelect?: () => void;\n onLoadDiff?: (path: string) => Promise<void>;\n hasOptedIntoLargeDiff?: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardHeaderProps {\n diff: Diff;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n}\n\nexport const shouldAutoLoadDiffContent = (input: {\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n requestedPath: string | null;\n filePath: string;\n}) => {\n const { isExpanded, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, requestedPath, filePath } = input;\n\n return (\n isExpanded && !hasDiffContent && !isLargeDiff && !isGeneratedDiff && !isBinaryDiff && requestedPath !== filePath\n );\n};\n\nexport const resolveRequestedDiffPath = (input: {\n requestedPath: string | null;\n filePath: string;\n hasDiffContent: boolean;\n}) => {\n const { requestedPath, filePath, hasDiffContent } = input;\n\n if (requestedPath === filePath && hasDiffContent) {\n return null;\n }\n\n return requestedPath;\n};\n\nexport const shouldShowDiffStats = (filePath: string) => !isImageDiffPath(filePath);\n\nexport const resolveDiffFilePath = (diff: Diff) => diff.newPath || diff.oldPath || \"unknown\";\n\nconst useDiffContentLoader = (input: {\n filePath: string;\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n}) => {\n const { filePath, isExpanded, isSelected, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, onLoadDiff } =\n input;\n const [isLoadingDiff, setLoadingDiff] = useState(false);\n const [requestedPath, setRequestedPath] = useState<string | null>(null);\n const [loadError, setLoadError] = useState(false);\n\n const loadDiff = async () => {\n if (!onLoadDiff || isLoadingDiff) return;\n\n setRequestedPath(filePath);\n setLoadError(false);\n setLoadingDiff(true);\n try {\n await onLoadDiff(filePath);\n } catch {\n setRequestedPath(null);\n setLoadError(true);\n } finally {\n setLoadingDiff(false);\n }\n };\n\n const shouldAutoLoadDiff = shouldAutoLoadDiffContent({\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n requestedPath,\n filePath,\n });\n\n useEffect(() => {\n setRequestedPath((current) => resolveRequestedDiffPath({ requestedPath: current, filePath, hasDiffContent }));\n }, [filePath, hasDiffContent]);\n\n useEffect(() => {\n if (!onLoadDiff || !shouldAutoLoadDiff || loadError) {\n return;\n }\n\n void loadDiff();\n });\n\n return {\n isLoadingDiff,\n loadError,\n shouldAutoLoadDiff: Boolean(onLoadDiff) && shouldAutoLoadDiff && !loadError,\n loadDiff,\n };\n};\n\nexport const DiffCard = (props: DiffCardProps) => {\n const {\n diff,\n isSelected = false,\n isExpanded = true,\n onToggleExpanded,\n onSelect,\n onLoadDiff,\n hasOptedIntoLargeDiff = false,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n const filePath = resolveDiffFilePath(diff);\n const oldContent = diff.oldContent || \"\";\n const newContent = diff.newContent || \"\";\n const isLargeDiff = isLargeDiffContent(diff);\n const isGeneratedDiff = isGeneratedDiffPath(filePath);\n const isBinaryDiff = isBinaryDiffPath(filePath);\n const blocksDiffContentLoad = isBinaryDiff && !isImageDiffPath(filePath);\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n const { isLoadingDiff, loadError, shouldAutoLoadDiff, loadDiff } = useDiffContentLoader({\n filePath,\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff: isLargeDiff && !hasOptedIntoLargeDiff,\n isGeneratedDiff,\n isBinaryDiff: blocksDiffContentLoad,\n onLoadDiff,\n });\n\n return (\n <Box\n data-testid=\"diff-card\"\n border=\"1px solid\"\n borderColor={isSelected ? \"border.accent\" : \"border.subtle\"}\n borderRadius=\"xs\"\n overflow=\"visible\"\n bg=\"bg\"\n width=\"100%\"\n maxW=\"100%\"\n transition=\"border-color 0.14s ease\"\n _hover={{ borderColor: \"border.accent\" }}\n onClick={onSelect}\n >\n <DiffCardHeader diff={diff} isExpanded={isExpanded} onToggleExpanded={onToggleExpanded} />\n\n <DiffCardContent\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isExpanded={isExpanded}\n isLargeDiff={isLargeDiff}\n isGeneratedDiff={isGeneratedDiff}\n isBinaryDiff={blocksDiffContentLoad}\n hasDiffContent={hasDiffContent}\n canLoadDiff={Boolean(onLoadDiff)}\n shouldAutoLoadDiff={shouldAutoLoadDiff}\n loadError={loadError}\n isLoadingDiff={isLoadingDiff}\n onLoadDiff={loadDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n};\n\nexport const DiffCardHeader = (props: DiffCardHeaderProps) => {\n const { diff, isExpanded = true, onToggleExpanded } = props;\n const filePath = resolveDiffFilePath(diff);\n const additions = diff.additions ?? 0;\n const deletions = diff.deletions ?? 0;\n const showStats = shouldShowDiffStats(filePath);\n const [isCopied, setIsCopied] = useState(false);\n const copyResetTimeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n return () => {\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n };\n }, []);\n\n const copyFilePath = async () => {\n try {\n await navigator.clipboard.writeText(filePath);\n setIsCopied(true);\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n copyResetTimeoutRef.current = window.setTimeout(() => setIsCopied(false), 1200);\n } catch {\n setIsCopied(false);\n }\n };\n\n return (\n <Grid\n data-testid=\"diff-card-header\"\n templateColumns=\"auto minmax(0, 1fr) auto\"\n px=\"xs\"\n py=\"2xs\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n borderBottom={isExpanded ? \"1px solid\" : \"none\"}\n borderColor=\"border.subtle\"\n borderTopRadius=\"xs\"\n borderBottomRadius={isExpanded ? \"0\" : \"xs\"}\n position=\"sticky\"\n top=\"0\"\n zIndex=\"1\"\n bg=\"bg\"\n cursor=\"pointer\"\n transition=\"background 0.14s ease\"\n _hover={{ bg: \"bg\" }}\n onClick={() => onToggleExpanded?.()}\n gap=\"sm\"\n >\n <IconButton\n aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n variant=\"ghost\"\n size=\"2xs\"\n onClick={(event) => {\n event.stopPropagation();\n onToggleExpanded?.();\n }}\n flexShrink={0}\n >\n {isExpanded ? <ChevronDown size={16} /> : <ChevronRight size={16} />}\n </IconButton>\n\n <Grid templateColumns=\"minmax(0, max-content) auto\" alignItems=\"center\" justifyContent=\"start\" gap=\"2xs\" minW={0}>\n <Box minW={0} overflow=\"hidden\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\" title={filePath}>\n {diff.change === \"renamed\" ? (\n <Text as=\"span\" textStyle=\"sm\">\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" mr=\"xs\">\n {diff.oldPath}\n </Text>\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" verticalAlign=\"middle\" mr=\"xs\">\n <ChevronRight size={12} />\n </Box>\n {diff.newPath}\n </Text>\n ) : diff.change === \"deleted\" ? (\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" textStyle=\"sm\">\n {filePath}\n </Text>\n ) : (\n <Text as=\"span\" textStyle=\"sm\">\n {filePath}\n </Text>\n )}\n </Box>\n\n <Box\n opacity={isCopied ? \"1\" : \"0\"}\n pointerEvents={isCopied ? \"auto\" : \"none\"}\n transition=\"opacity 120ms ease\"\n css={{\n \"[data-testid='diff-card-header']:hover &, [data-testid='diff-card-header']:focus-within &\": {\n opacity: 1,\n pointerEvents: \"auto\",\n },\n }}\n >\n <Tooltip content={isCopied ? \"Copied\" : \"Copy file path\"}>\n <IconButton\n aria-label={isCopied ? \"Copied\" : \"Copy file path\"}\n variant=\"ghost\"\n size=\"2xs\"\n onClick={(event) => {\n event.stopPropagation();\n void copyFilePath();\n }}\n flexShrink={0}\n >\n {isCopied ? <Check size={12} /> : <Copy size={12} />}\n </IconButton>\n </Tooltip>\n </Box>\n </Grid>\n\n {showStats ? (\n <Box flexShrink={0}>\n <DiffBubble variant=\"ghost\" additions={additions} deletions={deletions} />\n </Box>\n ) : null}\n </Grid>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\n\nexport const DiffDrawerEmptyState = () => (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <ScrollArea flex=\"1\" minH=\"0\" contentProps={{ p: \"xs\", spaceY: \"xs\" }}>\n <EmptyState title=\"No changes detected\" description=\"Make some changes to see the diff here.\" paddingY=\"sm\" />\n </ScrollArea>\n </Stack>\n);\n","import type { Diff } from \"./diff-card\";\nimport { isBinaryDiffPath, isImageDiffPath, isLargeDiffContent } from \"./diff-size\";\nimport { buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\nconst CARD_HEADER_HEIGHT = 34;\nconst CARD_BODY_LINE_HEIGHT = 18;\nconst HUNK_ROW_HEIGHT = 28;\nconst COLLAPSED_CARD_HEIGHT = 34;\nconst DEFERRED_BODY_HEIGHT = 88;\nconst IMAGE_BODY_HEIGHT = 338;\nconst ITEM_GAP_HEIGHT = 8;\n\ninterface EstimateDiffCardHeightInput {\n diff: Diff;\n isCollapsed: boolean;\n hasOptedIntoLargeDiff?: boolean;\n diffViewMode?: DiffViewMode;\n}\n\nconst deferredCardHeight = () => CARD_HEADER_HEIGHT + DEFERRED_BODY_HEIGHT + ITEM_GAP_HEIGHT;\n\n// Mirrors the branches DiffCardContent renders, so the virtualizer's estimate matches the DOM\n// before measureElement gets a chance to refine it.\nexport const estimateDiffCardHeight = (input: EstimateDiffCardHeightInput) => {\n const { diff, isCollapsed, hasOptedIntoLargeDiff = false, diffViewMode = \"unified\" } = input;\n\n if (isCollapsed) return COLLAPSED_CARD_HEIGHT + ITEM_GAP_HEIGHT;\n\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n const filePath = diff.newPath ?? diff.oldPath ?? \"\";\n if (isImageDiffPath(filePath) && (diff.oldContent || diff.newContent)) {\n return CARD_HEADER_HEIGHT + IMAGE_BODY_HEIGHT + ITEM_GAP_HEIGHT;\n }\n if (isBinaryDiffPath(filePath)) return deferredCardHeight();\n if (!hasDiffContent) return deferredCardHeight();\n if (isLargeDiffContent(diff) && !hasOptedIntoLargeDiff) return deferredCardHeight();\n\n const { unifiedContentRows, splitContentRows, hunkRows } = buildDiffViewData({\n original: diff.oldContent ?? \"\",\n modified: diff.newContent ?? \"\",\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n const contentRows = diffViewMode === \"split\" ? splitContentRows : unifiedContentRows;\n if (contentRows === 0 && hunkRows === 0) return deferredCardHeight();\n\n const bodyHeight = contentRows * CARD_BODY_LINE_HEIGHT + hunkRows * HUNK_ROW_HEIGHT;\n return CARD_HEADER_HEIGHT + bodyHeight + ITEM_GAP_HEIGHT;\n};\n","import type { Diff } from \"./diff-card\";\n\ninterface SelectedExpansionCommand {\n action: string;\n id: number;\n path?: string;\n direction?: \"up\" | \"down\";\n}\n\ninterface ResolveSelectedScrollStateInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n expansionCommand: SelectedExpansionCommand | null;\n completedScrollCommandId: number | null;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst PINNED_DIFF_LOOKBEHIND_COUNT = 24;\n\nexport const resolveSelectedScrollState = (input: ResolveSelectedScrollStateInput) => {\n const { diffs, selectedDiffPath, collapsedPaths, expansionCommand, completedScrollCommandId } = input;\n let selectedScrollPath = selectedDiffPath;\n let selectedScrollSourceKey = selectedDiffPath ? `selected:${selectedDiffPath}` : null;\n const selectedScrollCommandId = expansionCommand?.action === \"expand-selected\" ? expansionCommand.id : null;\n const hasCompletedSelectedScroll =\n selectedScrollCommandId !== null && completedScrollCommandId === selectedScrollCommandId;\n\n if (expansionCommand?.action === \"expand-selected\" && expansionCommand.path) {\n selectedScrollPath = expansionCommand.path;\n selectedScrollSourceKey = `command:${expansionCommand.id}:${expansionCommand.path}`;\n }\n\n let selectedScrollKey = selectedScrollSourceKey;\n if (selectedScrollPath && selectedScrollSourceKey) {\n const selectedScrollExpansionState = collapsedPaths.has(selectedScrollPath) ? \"collapsed\" : \"expanded\";\n selectedScrollKey = `${selectedScrollSourceKey}:${selectedScrollExpansionState}`;\n }\n\n const selectedScrollIndex = selectedScrollPath\n ? diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath)\n : -1;\n const shouldPinSelectedScrollIndex =\n selectedScrollIndex >= 0 &&\n expansionCommand?.action === \"expand-selected\" &&\n expansionCommand.direction === \"up\" &&\n !hasCompletedSelectedScroll;\n\n return {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n };\n};\n\nexport const includePinnedDiffIndexes = (input: {\n indexes: number[];\n selectedScrollIndex: number;\n shouldPinSelectedScrollIndex: boolean;\n}) => {\n const { indexes, selectedScrollIndex, shouldPinSelectedScrollIndex } = input;\n if (!shouldPinSelectedScrollIndex || indexes.includes(selectedScrollIndex)) return indexes;\n\n const pinnedStartIndex = Math.max(0, selectedScrollIndex - PINNED_DIFF_LOOKBEHIND_COUNT);\n const pinnedIndexes = Array.from(\n { length: selectedScrollIndex - pinnedStartIndex + 1 },\n (_, index) => pinnedStartIndex + index,\n );\n\n return Array.from(new Set([...indexes, ...pinnedIndexes])).sort((a, b) => a - b);\n};\n","import type { Virtualizer } from \"@tanstack/react-virtual\";\nimport { useLayoutEffect, useState } from \"react\";\nimport type { Diff } from \"./diff-card\";\nimport type { DiffExpansionCommand } from \"./diff-drawer\";\nimport { resolveSelectedScrollState } from \"./diff-drawer-scroll\";\n\ninterface UseSelectedDiffScrollInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n expansionCommand: DiffExpansionCommand | null;\n scrollRef: { current: HTMLDivElement | null };\n virtualizerRef: { current: Virtualizer<HTMLDivElement, Element> | null };\n suppressScrollAdjustRef: { current: boolean };\n}\n\n// Re-align for a few frames so the target settles as it and its neighbours measure, then latch the\n// command as done. Capped so a diff that never settles can't spin the animation loop.\nconst SETTLE_FRAME_COUNT = 3;\nconst MAX_ALIGNMENT_FRAMES = 12;\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nexport const useSelectedDiffScroll = (input: UseSelectedDiffScrollInput) => {\n const {\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n scrollRef,\n virtualizerRef,\n suppressScrollAdjustRef,\n } = input;\n const [completedScrollCommandId, setCompletedScrollCommandId] = useState<number | null>(null);\n const {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n } = resolveSelectedScrollState({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n completedScrollCommandId,\n });\n\n useLayoutEffect(() => {\n if (!selectedScrollPath || !selectedScrollKey) return;\n if (hasCompletedSelectedScroll) return;\n // Selecting a collapsed diff expands it first (a sibling layout effect updates collapsedPaths and\n // re-runs this one). Wait for that: scrolling to a card that is about to grow lands on a stale\n // offset and snaps once it expands. Once expanded, its measured offset is stable.\n if (collapsedPaths.has(selectedScrollPath)) return;\n\n const index = diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath);\n if (index < 0) return;\n\n const virtualizer = virtualizerRef.current;\n const scrollElement = scrollRef.current;\n if (!virtualizer || !scrollElement) return;\n\n const frameIds: number[] = [];\n let cancelledByUserScroll = false;\n // Drive the scroll from the virtualizer's measured card heights (not per-diff estimates) and hold\n // its keep-in-place adjustments off while we do, so a mid-list target lands where it actually is\n // instead of overshooting and snapping back — the \"wild jump\" when opening files further down.\n suppressScrollAdjustRef.current = true;\n const stopAligning = () => {\n suppressScrollAdjustRef.current = false;\n };\n const cancelSelectedScroll = () => {\n cancelledByUserScroll = true;\n stopAligning();\n if (selectedScrollCommandId !== null) {\n setCompletedScrollCommandId(selectedScrollCommandId);\n }\n };\n\n let alignmentFrames = 0;\n const alignSelectedDiff = () => {\n if (cancelledByUserScroll) return;\n virtualizer.scrollToIndex(index, { align: \"start\" });\n alignmentFrames += 1;\n if (alignmentFrames >= SETTLE_FRAME_COUNT && selectedScrollCommandId !== null) {\n stopAligning();\n setCompletedScrollCommandId(selectedScrollCommandId);\n return;\n }\n if (alignmentFrames < MAX_ALIGNMENT_FRAMES) {\n frameIds.push(requestAnimationFrame(alignSelectedDiff));\n return;\n }\n stopAligning();\n };\n\n scrollElement.addEventListener(\"wheel\", cancelSelectedScroll, { passive: true });\n scrollElement.addEventListener(\"touchmove\", cancelSelectedScroll, { passive: true });\n alignSelectedDiff();\n\n return () => {\n stopAligning();\n scrollElement.removeEventListener(\"wheel\", cancelSelectedScroll);\n scrollElement.removeEventListener(\"touchmove\", cancelSelectedScroll);\n for (const frameId of frameIds) {\n cancelAnimationFrame(frameId);\n }\n };\n }, [\n selectedScrollKey,\n selectedScrollPath,\n selectedScrollCommandId,\n hasCompletedSelectedScroll,\n diffs,\n collapsedPaths,\n scrollRef,\n virtualizerRef,\n suppressScrollAdjustRef,\n ]);\n\n return { selectedScrollIndex, shouldPinSelectedScrollIndex };\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { defaultRangeExtractor, useVirtualizer, type Virtualizer } from \"@tanstack/react-virtual\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { type Diff, DiffCard } from \"./diff-card\";\nimport { DiffDrawerEmptyState } from \"./diff-drawer-empty-state\";\nimport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nimport { includePinnedDiffIndexes } from \"./diff-drawer-scroll\";\nimport type { DiffViewMode } from \"./types\";\nimport { useSelectedDiffScroll } from \"./use-selected-diff-scroll\";\n\ninterface DiffDrawerProps {\n diffs: Diff[];\n selectedDiffPath?: string | null;\n onLoadDiff?: (path: string) => Promise<void>;\n onSelectDiffPath?: (path: string) => void;\n onExpansionStateChange?: (state: DiffDrawerExpansionState) => void;\n expansionCommand?: DiffExpansionCommand | null;\n diffViewMode?: DiffViewMode;\n}\n\nexport interface DiffExpansionCommand {\n action: \"expand\" | \"collapse\" | \"expand-selected\";\n id: number;\n path?: string;\n direction?: \"up\" | \"down\";\n}\n\nexport interface DiffDrawerExpansionState {\n allExpanded: boolean;\n allCollapsed: boolean;\n}\n\nexport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nexport type { Diff };\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nconst INITIAL_EXPANDED_DIFF_COUNT = 10;\nconst INITIAL_COLLAPSED_LINE_THRESHOLD = 100;\n\nexport const buildInitialCollapsedPaths = (diffs: Diff[]) => {\n if (diffs.length <= INITIAL_EXPANDED_DIFF_COUNT) return new Set<string>();\n\n return new Set(\n diffs\n .filter((diff, index) => {\n const lineCount = (diff.additions ?? 0) + (diff.deletions ?? 0);\n return index >= INITIAL_EXPANDED_DIFF_COUNT || lineCount > INITIAL_COLLAPSED_LINE_THRESHOLD;\n })\n .map((diff) => getDiffPath(diff)),\n );\n};\n\nexport const buildAllCollapsedPaths = (diffs: Diff[]) => new Set(diffs.map((diff) => getDiffPath(diff)));\n\nexport const toggleCollapsedPath = (collapsedPaths: Set<string>, path: string) => {\n const next = new Set(collapsedPaths);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n};\n\nexport const resolveCollapsedPathsForSelectedDiff = (\n diffs: Diff[],\n collapsedPaths: Set<string>,\n selectedDiffPath: string | null,\n) => {\n if (!selectedDiffPath) return collapsedPaths;\n if (!collapsedPaths.has(selectedDiffPath)) return collapsedPaths;\n if (!diffs.some((diff) => getDiffPath(diff) === selectedDiffPath)) return collapsedPaths;\n\n const next = new Set(collapsedPaths);\n next.delete(selectedDiffPath);\n return next;\n};\n\n// Expand the newly navigated-to diff and re-collapse the one the previous tree navigation expanded.\n// Clicking through the tree otherwise leaves a growing wall of expanded diffs; their measured heights\n// drift ever further from the scroll estimates, which is what makes the panel overshoot and jump.\n// Manual chevron toggles don't flow through here, so diffs the user opens by hand stay open.\nexport const resolveCollapsedPathsForNavigation = (\n diffs: Diff[],\n collapsedPaths: Set<string>,\n selectedDiffPath: string,\n previousNavigatedPath: string | null,\n) => {\n const expanded = resolveCollapsedPathsForSelectedDiff(diffs, collapsedPaths, selectedDiffPath);\n if (\n !previousNavigatedPath ||\n previousNavigatedPath === selectedDiffPath ||\n expanded.has(previousNavigatedPath) ||\n !diffs.some((diff) => getDiffPath(diff) === previousNavigatedPath)\n ) {\n return expanded;\n }\n\n const next = expanded === collapsedPaths ? new Set(collapsedPaths) : expanded;\n next.add(previousNavigatedPath);\n return next;\n};\n\nexport function DiffDrawer(props: DiffDrawerProps) {\n const {\n diffs,\n selectedDiffPath = null,\n onLoadDiff,\n onSelectDiffPath,\n onExpansionStateChange,\n expansionCommand = null,\n diffViewMode = \"unified\",\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const reportedExpansionStateRef = useRef<DiffDrawerExpansionState | null>(null);\n // Populated after the virtualizer is created below so the scroll hook (which runs first) can drive\n // it from a layout effect. `suppressScrollAdjustRef` lets the hook freeze the virtualizer's\n // keep-in-place adjustments while it aligns the selected diff, so re-measuring off-screen cards\n // can't shove the scroll around mid-align.\n const virtualizerRef = useRef<Virtualizer<HTMLDivElement, Element> | null>(null);\n const suppressScrollAdjustRef = useRef(false);\n const lastNavigatedPathRef = useRef<string | null>(null);\n const [collapsedPaths, setCollapsedPaths] = useState<Set<string>>(() => buildInitialCollapsedPaths(diffs));\n const [largeDiffOptInPaths, setLargeDiffOptInPaths] = useState<Set<string>>(() => new Set());\n const { selectedScrollIndex, shouldPinSelectedScrollIndex } = useSelectedDiffScroll({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n scrollRef,\n virtualizerRef,\n suppressScrollAdjustRef,\n });\n\n const virtualizer = useVirtualizer({\n count: diffs.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index) => {\n const diff = diffs[index];\n const path = getDiffPath(diff);\n return estimateDiffCardHeight({\n diff,\n isCollapsed: collapsedPaths.has(path),\n hasOptedIntoLargeDiff: largeDiffOptInPaths.has(path),\n diffViewMode,\n });\n },\n getItemKey: (index) => getDiffPath(diffs[index]),\n overscan: 3,\n rangeExtractor: (range) => {\n const indexes = defaultRangeExtractor(range);\n return includePinnedDiffIndexes({ indexes, selectedScrollIndex, shouldPinSelectedScrollIndex });\n },\n });\n virtualizer.shouldAdjustScrollPositionOnItemSizeChange = (_item, _delta, instance) =>\n !instance.isScrolling && !suppressScrollAdjustRef.current;\n virtualizerRef.current = virtualizer;\n\n useLayoutEffect(() => {\n if (!selectedDiffPath) return;\n\n setCollapsedPaths((prev) => resolveCollapsedPathsForSelectedDiff(diffs, prev, selectedDiffPath));\n }, [diffs, selectedDiffPath]);\n\n useLayoutEffect(() => {\n if (!expansionCommand) return;\n\n if (expansionCommand.action === \"expand-selected\") {\n const navigatedPath = expansionCommand.path;\n if (navigatedPath) {\n const previousNavigatedPath = lastNavigatedPathRef.current;\n lastNavigatedPathRef.current = navigatedPath;\n setCollapsedPaths((prev) =>\n resolveCollapsedPathsForNavigation(diffs, prev, navigatedPath, previousNavigatedPath),\n );\n }\n return;\n }\n\n // Expand/collapse all is an explicit user choice; don't let it re-collapse on the next navigation.\n lastNavigatedPathRef.current = null;\n setCollapsedPaths(expansionCommand.action === \"collapse\" ? buildAllCollapsedPaths(diffs) : new Set());\n }, [diffs, expansionCommand]);\n\n useEffect(() => {\n const expansionState = {\n allExpanded: collapsedPaths.size === 0,\n allCollapsed: diffs.length > 0 && diffs.every((diff) => collapsedPaths.has(getDiffPath(diff))),\n };\n const reportedExpansionState = reportedExpansionStateRef.current;\n if (\n reportedExpansionState?.allExpanded === expansionState.allExpanded &&\n reportedExpansionState.allCollapsed === expansionState.allCollapsed\n ) {\n return;\n }\n\n reportedExpansionStateRef.current = expansionState;\n onExpansionStateChange?.(expansionState);\n }, [collapsedPaths, diffs, onExpansionStateChange]);\n\n if (diffs.length === 0) return <DiffDrawerEmptyState />;\n\n const toggleExpanded = (path: string) => {\n setCollapsedPaths((prev) => toggleCollapsedPath(prev, path));\n };\n\n const showFullDiff = (path: string) => {\n setLargeDiffOptInPaths((prev) => {\n const next = new Set(prev);\n next.add(path);\n return next;\n });\n };\n\n const virtualItems = virtualizer.getVirtualItems();\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <Box position=\"relative\" flex=\"1\" minH=\"0\" bg=\"bg\">\n <ScrollArea\n position=\"absolute\"\n inset=\"0\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowAnchor: \"none\" } }}\n contentProps={{ p: \"xs\" }}\n >\n <Box position=\"relative\" width=\"100%\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualItems.map((virtualItem) => {\n const diff = diffs[virtualItem.index];\n const path = getDiffPath(diff);\n\n return (\n <Box\n key={virtualItem.key}\n data-index={virtualItem.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n left=\"0\"\n width=\"100%\"\n pb=\"xs\"\n style={{ top: `${virtualItem.start}px` }}\n >\n <DiffCard\n key={path}\n diff={diff}\n isSelected={selectedDiffPath === path}\n isExpanded={!collapsedPaths.has(path)}\n onToggleExpanded={() => toggleExpanded(path)}\n onSelect={() => onSelectDiffPath?.(path)}\n onLoadDiff={onLoadDiff}\n hasOptedIntoLargeDiff={largeDiffOptInPaths.has(path)}\n onShowFullDiff={() => showFullDiff(path)}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n })}\n </Box>\n </ScrollArea>\n </Box>\n </Stack>\n );\n}\n","import type { ChangedFilesViewMode, ChangedFileTreeNode } from \"./types\";\n\nconst normalizeChangedFilePath = (path: string) =>\n path\n .split(\"/\")\n .map((segment) => segment.trim())\n .filter(Boolean)\n .join(\"/\");\n\nconst sortNodes = (nodes: ChangedFileTreeNode[]) => {\n nodes.sort((left, right) => {\n if (left.type !== right.type) return left.type === \"folder\" ? -1 : 1;\n return left.name.localeCompare(right.name);\n });\n\n nodes.forEach((node) => {\n if (node.children) sortNodes(node.children);\n });\n\n return nodes;\n};\n\nconst dedupePaths = (paths: string[]) => Array.from(new Set(paths.map(normalizeChangedFilePath).filter(Boolean)));\n\nconst buildFlatTree = (paths: string[]) =>\n dedupePaths(paths)\n .map((path) => ({ id: `file:${path}`, name: path, type: \"file\" }) satisfies ChangedFileTreeNode)\n .sort((left, right) => left.name.localeCompare(right.name));\n\nexport const buildChangedFilesTree = (paths: string[], mode: ChangedFilesViewMode): ChangedFileTreeNode[] => {\n if (mode === \"flat\") return buildFlatTree(paths);\n\n const treeById = new Map<string, ChangedFileTreeNode>();\n const rootNodes: ChangedFileTreeNode[] = [];\n\n dedupePaths(paths).forEach((path) => {\n const segments = path.split(\"/\");\n let parentPath = \"\";\n let parentNode: ChangedFileTreeNode | null = null;\n\n segments.forEach((segment, index) => {\n const currentPath = parentPath ? `${parentPath}/${segment}` : segment;\n const isFile = index === segments.length - 1;\n const nodeId = `${isFile ? \"file\" : \"folder\"}:${currentPath}`;\n const existingNode = treeById.get(nodeId);\n\n if (existingNode) {\n parentNode = existingNode;\n parentPath = currentPath;\n return;\n }\n\n const nextNode: ChangedFileTreeNode = {\n id: nodeId,\n name: segment,\n type: isFile ? \"file\" : \"folder\",\n ...(isFile ? {} : { children: [] }),\n };\n\n treeById.set(nodeId, nextNode);\n\n if (!parentNode) rootNodes.push(nextNode);\n else parentNode.children?.push(nextNode);\n\n parentNode = nextNode;\n parentPath = currentPath;\n });\n });\n\n return sortNodes(rootNodes);\n};\n\nexport const collectExpandedFolderIds = (nodes: ChangedFileTreeNode[]) => {\n const folderIds: string[] = [];\n\n const visit = (items: ChangedFileTreeNode[]) => {\n items.forEach((item) => {\n if (item.type !== \"folder\") return;\n folderIds.push(item.id);\n visit(item.children ?? []);\n });\n };\n\n visit(nodes);\n return folderIds;\n};\n\nconst collectNestedFileOrder = (nodes: ChangedFileTreeNode[]) => {\n const orderedPaths: string[] = [];\n\n const visit = (treeNodes: ChangedFileTreeNode[]) => {\n treeNodes.forEach((node) => {\n if (node.type === \"file\") {\n orderedPaths.push(node.id.replace(/^file:/, \"\"));\n return;\n }\n\n visit(node.children ?? []);\n });\n };\n\n visit(nodes);\n return orderedPaths;\n};\n\nexport const sortPathsByViewMode = (paths: string[], mode: ChangedFilesViewMode) => {\n if (mode === \"flat\") return [...paths].sort((left, right) => left.localeCompare(right));\n return collectNestedFileOrder(buildChangedFilesTree(paths, \"nested\"));\n};\n","import { create } from \"zustand\";\nimport type { ChangedFilesViewMode, DiffViewMode } from \"./types\";\n\ninterface DiffViewerState {\n isTreePanelOpen: boolean;\n viewMode: ChangedFilesViewMode;\n diffViewMode: DiffViewMode;\n searchQuery: string;\n selectedPath: string | null;\n expandedFolderIds: Set<string>;\n setTreePanelOpen: (open: boolean) => void;\n toggleTreePanel: () => void;\n setViewMode: (viewMode: ChangedFilesViewMode) => void;\n setDiffViewMode: (diffViewMode: DiffViewMode) => void;\n setSearchQuery: (searchQuery: string) => void;\n setSelectedPath: (selectedPath: string | null) => void;\n setExpandedFolderIds: (folderIds: string[]) => void;\n toggleFolder: (folderId: string) => void;\n expandAll: (folderIds: string[]) => void;\n collapseAll: () => void;\n}\n\nexport const useDiffViewerStore = create<DiffViewerState>((set) => ({\n isTreePanelOpen: true,\n viewMode: \"nested\",\n diffViewMode: \"unified\",\n searchQuery: \"\",\n selectedPath: null,\n expandedFolderIds: new Set(),\n setTreePanelOpen: (isTreePanelOpen) => set({ isTreePanelOpen }),\n toggleTreePanel: () => set((state) => ({ isTreePanelOpen: !state.isTreePanelOpen })),\n setViewMode: (viewMode) => set({ viewMode }),\n setDiffViewMode: (diffViewMode) => set({ diffViewMode }),\n setSearchQuery: (searchQuery) => set({ searchQuery }),\n setSelectedPath: (selectedPath) => set({ selectedPath }),\n setExpandedFolderIds: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n toggleFolder: (folderId) =>\n set((state) => {\n const expandedFolderIds = new Set(state.expandedFolderIds);\n if (expandedFolderIds.has(folderId)) expandedFolderIds.delete(folderId);\n else expandedFolderIds.add(folderId);\n return { expandedFolderIds };\n }),\n expandAll: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n collapseAll: () => set({ expandedFolderIds: new Set() }),\n}));\n","import { Box, IconButton, Menu } from \"@chakra-ui/react\";\nimport {\n Check,\n ChevronsDownUp,\n ChevronsUpDown,\n List,\n ListTree,\n PanelLeftClose,\n PanelLeftOpen,\n Rows2,\n Settings2,\n SquareSplitHorizontal,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { ChangedFilesViewMode, DiffViewMode } from \"./types\";\n\ninterface DiffViewerOptionsMenuProps {\n isTreePanelOpen: boolean;\n hasFilePaths: boolean;\n viewMode: ChangedFilesViewMode;\n diffViewMode: DiffViewMode;\n isExpandAllDisabled: boolean;\n isCollapseAllDisabled: boolean;\n onToggleTreePanel: () => void;\n onViewModeChange: (viewMode: ChangedFilesViewMode) => void;\n onDiffViewModeChange: (diffViewMode: DiffViewMode) => void;\n onExpandAll: () => void;\n onCollapseAll: () => void;\n}\n\ninterface DiffViewerMenuItemProps {\n id: string;\n label: string;\n icon: ReactNode;\n selected?: boolean;\n disabled?: boolean;\n onActivate: () => void;\n}\n\nconst SelectionIndicator = (props: { selected: boolean }) => (\n <Box w=\"14px\" flexShrink={0} display=\"flex\" justifyContent=\"center\">\n {props.selected ? <Check size={14} /> : null}\n </Box>\n);\n\nconst DiffViewerMenuItem = (props: DiffViewerMenuItemProps) => {\n const { id, label, icon, selected, disabled, onActivate } = props;\n\n return (\n <Menu.Item value={id} disabled={disabled} asChild>\n <ListRow\n asChild\n role={selected === undefined ? undefined : \"menuitemradio\"}\n aria-checked={selected}\n variant=\"full-width\"\n id={id}\n icon={icon}\n label={label}\n disabled={disabled}\n isSelected={selected}\n endContent={selected === undefined ? undefined : <SelectionIndicator selected={selected} />}\n onActivate={onActivate}\n />\n </Menu.Item>\n );\n};\n\nexport const DiffViewerOptionsMenu = (props: DiffViewerOptionsMenuProps) => {\n const {\n isTreePanelOpen,\n hasFilePaths,\n viewMode,\n diffViewMode,\n isExpandAllDisabled,\n isCollapseAllDisabled,\n onToggleTreePanel,\n onViewModeChange,\n onDiffViewModeChange,\n onExpandAll,\n onCollapseAll,\n } = props;\n\n return (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton aria-label=\"Diff view options\" variant=\"ghost\" size=\"sm\">\n <Settings2 size={14} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"190px\" bg=\"bg\" p=\"0\" gap=\"0\">\n <DiffViewerMenuItem\n id=\"toggle-file-tree\"\n icon={isTreePanelOpen ? <PanelLeftClose size={14} /> : <PanelLeftOpen size={14} />}\n label={isTreePanelOpen ? \"Hide file tree\" : \"Show file tree\"}\n onActivate={onToggleTreePanel}\n />\n <Menu.Separator />\n {hasFilePaths ? (\n <>\n <DiffViewerMenuItem\n id=\"nested\"\n icon={<ListTree size={14} />}\n label=\"Nested\"\n selected={viewMode === \"nested\"}\n onActivate={() => onViewModeChange(\"nested\")}\n />\n <DiffViewerMenuItem\n id=\"flat\"\n icon={<List size={14} />}\n label=\"Flat\"\n selected={viewMode === \"flat\"}\n onActivate={() => onViewModeChange(\"flat\")}\n />\n <Menu.Separator />\n </>\n ) : null}\n <DiffViewerMenuItem\n id=\"unified\"\n icon={<Rows2 size={14} />}\n label=\"Unified\"\n selected={diffViewMode === \"unified\"}\n onActivate={() => onDiffViewModeChange(\"unified\")}\n />\n <DiffViewerMenuItem\n id=\"split\"\n icon={<SquareSplitHorizontal size={14} />}\n label=\"Split\"\n selected={diffViewMode === \"split\"}\n onActivate={() => onDiffViewModeChange(\"split\")}\n />\n <Menu.Separator />\n <DiffViewerMenuItem\n id=\"expand-all\"\n icon={<ChevronsUpDown size={14} />}\n label=\"Expand all\"\n disabled={isExpandAllDisabled}\n onActivate={onExpandAll}\n />\n <DiffViewerMenuItem\n id=\"collapse-all\"\n icon={<ChevronsDownUp size={14} />}\n label=\"Collapse all\"\n disabled={isCollapseAllDisabled}\n onActivate={onCollapseAll}\n />\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n","import { Badge, Box, HStack, Icon, Input, InputGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { FileText, Search } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { Header } from \"@/components/layout/header\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { TreeList } from \"../tree-list/tree-list\";\nimport type { TreeListNode } from \"../tree-list/tree-list.types\";\nimport { buildChangedFilesTree } from \"./build-changed-files-tree\";\nimport type { ChangedFilesViewMode, ChangedFileTreeNode, FileIconInfo } from \"./types\";\n\ninterface FileListPanelProps {\n title: string;\n paths: string[];\n selectedPath: string | null;\n viewMode: ChangedFilesViewMode;\n searchQuery: string;\n expandedFolderIds: Set<string>;\n onSelectPath: (path: string) => void;\n onSearchQueryChange: (value: string) => void;\n onToggleFolder: (id: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}\n\nconst changeLabels: Record<string, string> = {\n added: \"A\",\n copied: \"C\",\n deleted: \"D\",\n modified: \"U\",\n permissionChange: \"M\",\n renamed: \"R\",\n};\n\nconst changeColors: Record<string, string> = {\n added: \"green\",\n copied: \"purple\",\n deleted: \"red\",\n modified: \"blue\",\n permissionChange: \"yellow\",\n renamed: \"orange\",\n};\n\nconst changeSemanticStyles: Record<string, { color: string; backgroundColor: string }> = {\n added: { color: \"fg.success\", backgroundColor: \"bg.success\" },\n deleted: { color: \"fg.error\", backgroundColor: \"bg.error\" },\n};\n\nconst filterInputChromeProps = {\n bg: \"transparent\",\n border: \"0\",\n borderColor: \"transparent\",\n borderRadius: \"0\",\n boxShadow: \"none\",\n _hover: { borderColor: \"transparent\" },\n _active: { borderColor: \"transparent\" },\n _focus: { borderColor: \"transparent\", outline: \"none\", boxShadow: \"none\" },\n _focusVisible: { borderColor: \"transparent\", outline: \"none\", boxShadow: \"none\" },\n} as const;\n\nconst getFilePathParts = (filePath: string) => {\n const lastSlashIndex = filePath.lastIndexOf(\"/\");\n if (lastSlashIndex < 0) return { fileName: filePath, dirPath: \"\" };\n return { fileName: filePath.slice(lastSlashIndex + 1), dirPath: filePath.slice(0, lastSlashIndex) };\n};\n\nconst renderFileLabel = (node: ChangedFileTreeNode, viewMode: ChangedFilesViewMode, filePath: string) => {\n const { fileName, dirPath } = getFilePathParts(filePath);\n if (viewMode !== \"flat\" || !dirPath) return node.name;\n\n return (\n <Text textStyle=\"label/S/regular\" truncate>\n <Text as=\"span\" color=\"fg.default\">\n {fileName}\n </Text>{\" \"}\n <Text as=\"span\" color=\"fg.muted\">\n {dirPath}\n </Text>\n </Text>\n );\n};\n\nconst toTreeListNodes = (input: {\n nodes: ChangedFileTreeNode[];\n viewMode: ChangedFilesViewMode;\n onSelectPath: (path: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}): TreeListNode[] => {\n const { nodes, viewMode, onSelectPath, resolveFileIcon, changeByPath } = input;\n\n return nodes.map((node) => {\n if (node.type === \"folder\") {\n return {\n id: node.id,\n label: node.name,\n isContainer: true,\n children: toTreeListNodes({\n nodes: node.children ?? [],\n viewMode,\n onSelectPath,\n resolveFileIcon,\n changeByPath,\n }),\n };\n }\n\n const filePath = node.id.replace(/^file:/, \"\");\n const fileIcon = resolveFileIcon?.(filePath) ?? { icon: <Icon as={FileText} boxSize=\"16px\" />, color: \"fg.subtle\" };\n const change = changeByPath?.get(filePath);\n const changeBadgeProps = change\n ? (changeSemanticStyles[change] ?? { colorPalette: changeColors[change] ?? \"gray\" })\n : {};\n\n return {\n id: node.id,\n label: renderFileLabel(node, viewMode, filePath),\n icon: fileIcon.icon,\n iconColor: fileIcon.color,\n endContent: change ? (\n <Badge size=\"xs\" variant=\"subtle\" flexShrink={0} {...changeBadgeProps}>\n {changeLabels[change] ?? change}\n </Badge>\n ) : undefined,\n onActivate: () => onSelectPath(filePath),\n };\n });\n};\n\nexport const FileListPanel = (props: FileListPanelProps) => {\n const {\n title,\n paths,\n selectedPath,\n viewMode,\n searchQuery,\n expandedFolderIds,\n onSelectPath,\n onSearchQueryChange,\n onToggleFolder,\n resolveFileIcon,\n changeByPath,\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const fileTree = buildChangedFilesTree(paths, viewMode);\n const treeNodes = toTreeListNodes({ nodes: fileTree, viewMode, onSelectPath, resolveFileIcon, changeByPath });\n const emptyTitle = searchQuery.trim() ? \"No matching files\" : \"No changed files\";\n\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" gap=\"0\" overflow=\"hidden\" bg=\"bg\">\n <Header variant=\"main\" justifyContent=\"space-between\" borderBottomWidth=\"1px\" borderColor=\"border.subtle\" bg=\"bg\">\n <HStack gap=\"2xs\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"foreground.secondary\" truncate>\n {title}\n </Text>\n <Badge size=\"sm\" variant=\"number\" flexShrink={0} colorPalette=\"gray\">\n {paths.length}\n </Badge>\n </HStack>\n </Header>\n <Stack gap=\"xs\" borderBottomWidth=\"1px\" bg=\"bg\">\n <InputGroup startElement={<Search size={14} />}>\n <Input\n size=\"sm\"\n mx=\"xs\"\n placeholder=\"Filter files\"\n value={searchQuery}\n {...filterInputChromeProps}\n onChange={(event) => onSearchQueryChange(event.target.value)}\n />\n </InputGroup>\n </Stack>\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n bg=\"bg\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowX: \"hidden\" } }}\n >\n {paths.length > 0 ? (\n <TreeList\n sections={[{ id: \"files\", nodes: treeNodes }]}\n expandedNodeIds={[...expandedFolderIds]}\n activeNodeId={selectedPath ? `file:${selectedPath}` : null}\n rowVariant=\"tree\"\n onToggleNode={onToggleFolder}\n virtualize\n scrollRef={scrollRef}\n />\n ) : (\n <Box px=\"xs\" py=\"xs\">\n <EmptyState title={emptyTitle} size=\"sm\" textAlign=\"left\" alignItems=\"flex-start\" />\n </Box>\n )}\n </ScrollArea>\n </Stack>\n );\n};\n","import { Box, Flex, HStack, Skeleton, Stack, Text } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport { Header } from \"@/components/layout/header\";\nimport { ResizableSplitLayout } from \"@/components/layout/resizable-split-layout\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { buildChangedFilesTree, collectExpandedFolderIds, sortPathsByViewMode } from \"./build-changed-files-tree\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffDrawer, type DiffDrawerExpansionState, type DiffExpansionCommand } from \"./diff-drawer\";\nimport { useDiffViewerStore } from \"./diff-viewer.store\";\nimport { DiffViewerOptionsMenu } from \"./diff-viewer-options-menu\";\nimport { FileListPanel } from \"./file-list-panel\";\nimport type { ChangedFilesViewMode, FileIconInfo } from \"./types\";\n\nexport interface DiffViewerProps {\n diffs: Diff[];\n changedFilePaths?: string[];\n defaultSelectedPath?: string | null;\n loading?: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst buildChangeByPath = (diffs: Diff[]) => new Map(diffs.map((diff) => [getDiffPath(diff), diff.change]));\nconst sumDiffStats = (diffs: Diff[]) =>\n diffs.reduce(\n (total, diff) => ({\n additions: total.additions + (diff.additions ?? 0),\n deletions: total.deletions + (diff.deletions ?? 0),\n }),\n { additions: 0, deletions: 0 },\n );\n\nconst buildFilteredDiffs = (input: {\n diffs: Diff[];\n normalizedSearchQuery: string;\n viewMode: ChangedFilesViewMode;\n}) => {\n const { diffs, normalizedSearchQuery, viewMode } = input;\n const matchingDiffs = normalizedSearchQuery\n ? diffs.filter((diff) => getDiffPath(diff).toLowerCase().includes(normalizedSearchQuery))\n : diffs;\n const orderedPaths = sortPathsByViewMode(matchingDiffs.map(getDiffPath), viewMode);\n const orderByPath = new Map(orderedPaths.map((path, index) => [path, index]));\n\n return [...matchingDiffs].sort((left, right) => {\n const leftOrder = orderByPath.get(getDiffPath(left)) ?? Number.MAX_SAFE_INTEGER;\n const rightOrder = orderByPath.get(getDiffPath(right)) ?? Number.MAX_SAFE_INTEGER;\n return leftOrder - rightOrder;\n });\n};\n\nconst resolveSelectedPath = (preferredPaths: string[], fallbackPaths: string[]) =>\n preferredPaths[0] ?? fallbackPaths[0] ?? null;\n\nconst loadingDiffItems = [\"first\", \"second\", \"third\"] as const;\n\nconst DiffViewerLoading = () => (\n <Stack flex=\"1\" minH=\"0\" bg=\"bg\" p=\"xs\" gap=\"xs\" role=\"status\" aria-busy=\"true\" aria-label=\"Loading diff panel\">\n {loadingDiffItems.map((item) => (\n <Skeleton key={item} h=\"72px\" w=\"full\" flexShrink=\"0\" borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n\nexport const DiffViewer = (props: DiffViewerProps) => {\n const { diffs, changedFilePaths, defaultSelectedPath = null, loading = false, onLoadDiff, resolveFileIcon } = props;\n const [diffExpansionCommand, setDiffExpansionCommand] = useState<DiffExpansionCommand | null>(null);\n const [diffExpansionState, setDiffExpansionState] = useState<DiffDrawerExpansionState>({\n allExpanded: false,\n allCollapsed: false,\n });\n const {\n isTreePanelOpen,\n viewMode,\n diffViewMode,\n searchQuery,\n selectedPath,\n expandedFolderIds,\n setTreePanelOpen,\n setViewMode,\n setDiffViewMode,\n setSearchQuery,\n setSelectedPath,\n setExpandedFolderIds,\n toggleFolder,\n expandAll,\n collapseAll,\n } = useDiffViewerStore();\n\n const diffPaths = diffs.map(getDiffPath);\n const filePaths = changedFilePaths ?? diffPaths;\n const normalizedSearchQuery = searchQuery.trim().toLowerCase();\n const filteredFilePaths = normalizedSearchQuery\n ? filePaths.filter((path) => path.toLowerCase().includes(normalizedSearchQuery))\n : filePaths;\n const filteredDiffs = buildFilteredDiffs({ diffs, normalizedSearchQuery, viewMode });\n const changeByPath = buildChangeByPath(diffs);\n const filteredDiffPaths = filteredDiffs.map(getDiffPath);\n const fileTree = buildChangedFilesTree(filteredFilePaths, viewMode);\n const folderIds = viewMode === \"nested\" ? collectExpandedFolderIds(fileTree) : [];\n const filteredFilePathKey = filteredFilePaths.join(\"\\0\");\n const filteredDiffPathKey = filteredDiffPaths.join(\"\\0\");\n const resolvedSelectedPath =\n selectedPath ?? defaultSelectedPath ?? resolveSelectedPath(filteredDiffPaths, filteredFilePaths);\n const hasDiffs = filteredDiffs.length > 0;\n const emptyDiffTitle = normalizedSearchQuery ? \"No matching diffs\" : \"No changes\";\n const showDiffEmptyState = !loading && !hasDiffs;\n const totalDiff = sumDiffStats(filteredDiffs);\n const hasExpandableItems = folderIds.length > 0 || filteredDiffs.length > 0;\n const allFilesExpanded = folderIds.every((folderId) => expandedFolderIds.has(folderId));\n const allFilesCollapsed = folderIds.every((folderId) => !expandedFolderIds.has(folderId));\n const allDiffsExpanded = filteredDiffs.length === 0 || diffExpansionState.allExpanded;\n const allDiffsCollapsed = filteredDiffs.length === 0 || diffExpansionState.allCollapsed;\n const isExpandAllDisabled = !hasExpandableItems || (allFilesExpanded && allDiffsExpanded);\n const isCollapseAllDisabled = !hasExpandableItems || (allFilesCollapsed && allDiffsCollapsed);\n\n useEffect(() => {\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n const tree = buildChangedFilesTree(filePaths, viewMode);\n setExpandedFolderIds(viewMode === \"nested\" ? collectExpandedFolderIds(tree) : []);\n }, [filteredFilePathKey, setExpandedFolderIds, viewMode]);\n\n useEffect(() => {\n const diffPaths = filteredDiffPathKey ? filteredDiffPathKey.split(\"\\0\") : [];\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n if (resolvedSelectedPath && diffPaths.includes(resolvedSelectedPath)) return;\n setSelectedPath(resolveSelectedPath(diffPaths, filePaths));\n }, [filteredDiffPathKey, filteredFilePathKey, resolvedSelectedPath, setSelectedPath]);\n\n const expandAllFilesAndDiffs = () => {\n expandAll(folderIds);\n setDiffExpansionCommand((current) => ({ action: \"expand\", id: (current?.id ?? 0) + 1 }));\n };\n\n const collapseAllFilesAndDiffs = () => {\n collapseAll();\n setDiffExpansionCommand((current) => ({ action: \"collapse\", id: (current?.id ?? 0) + 1 }));\n };\n\n const selectChangedFilePath = (path: string) => {\n const currentIndex = resolvedSelectedPath ? filteredDiffPaths.indexOf(resolvedSelectedPath) : -1;\n const nextIndex = filteredDiffPaths.indexOf(path);\n const direction = currentIndex >= 0 && nextIndex >= 0 && nextIndex < currentIndex ? \"up\" : \"down\";\n\n setSelectedPath(path);\n setDiffExpansionCommand((current) => ({ action: \"expand-selected\", direction, id: (current?.id ?? 0) + 1, path }));\n };\n\n const diffPanel = (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" flex=\"1\" bg=\"bg\" gap=\"0\">\n <Header variant=\"main\" borderBottomWidth=\"1px\" borderColor=\"border.subtle\" bg=\"bg\" justifyContent=\"space-between\">\n <HStack gap=\"xs\" minW=\"0\">\n <DiffViewerOptionsMenu\n isTreePanelOpen={isTreePanelOpen}\n hasFilePaths={filePaths.length > 0}\n viewMode={viewMode}\n diffViewMode={diffViewMode}\n isExpandAllDisabled={isExpandAllDisabled}\n isCollapseAllDisabled={isCollapseAllDisabled}\n onToggleTreePanel={() => setTreePanelOpen(!isTreePanelOpen)}\n onViewModeChange={setViewMode}\n onDiffViewModeChange={setDiffViewMode}\n onExpandAll={expandAllFilesAndDiffs}\n onCollapseAll={collapseAllFilesAndDiffs}\n />\n {showDiffEmptyState ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" truncate>\n {emptyDiffTitle}\n </Text>\n ) : null}\n </HStack>\n <DiffBubble variant=\"ghost\" size=\"small\" additions={totalDiff.additions} deletions={totalDiff.deletions} />\n </Header>\n {loading ? (\n <DiffViewerLoading />\n ) : hasDiffs ? (\n <Box flex=\"1\" minH=\"0\">\n <DiffDrawer\n diffs={filteredDiffs}\n selectedDiffPath={resolvedSelectedPath}\n onLoadDiff={onLoadDiff}\n onSelectDiffPath={setSelectedPath}\n onExpansionStateChange={setDiffExpansionState}\n expansionCommand={diffExpansionCommand}\n diffViewMode={diffViewMode}\n />\n </Box>\n ) : (\n <Box flex=\"1\" minH=\"0\" px=\"md\" py=\"lg\" display=\"flex\" alignItems=\"center\" justifyContent=\"center\" bg=\"bg\">\n <EmptyState title={emptyDiffTitle} />\n </Box>\n )}\n </Stack>\n );\n\n return (\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" bg=\"bg\" gap=\"0\" data-testid=\"diff-viewer\">\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={\n <FileListPanel\n title=\"Changed files\"\n paths={filteredFilePaths}\n selectedPath={resolvedSelectedPath}\n viewMode={viewMode}\n searchQuery={searchQuery}\n expandedFolderIds={expandedFolderIds}\n onSelectPath={selectChangedFilePath}\n onSearchQueryChange={setSearchQuery}\n onToggleFolder={toggleFolder}\n resolveFileIcon={resolveFileIcon}\n changeByPath={changeByPath}\n />\n }\n contentPanel={diffPanel}\n collapsed={!isTreePanelOpen}\n defaultSizePx={288}\n minSizePx={224}\n contentMinSizePx={320}\n resizeLabel=\"Resize file list panel\"\n onCollapsedChange={(collapsed) => setTreePanelOpen(!collapsed)}\n />\n </Flex>\n );\n};\n"],"names":["createCodeEditorPreloader","initialize","initialization","preloadCodeEditor","then","module","initializeMonaco","customTheme","base","inherit","rules","colors","isMonacoTheme","value","EDITOR_THEME_NAME","useEditorTheme","$","_c","themePreference","themePreferences","useThemePreference","t0","t1","theme","id","preference","find","monacoTheme","useApplyEditorTheme","editorTheme","monacoRef","useRef","monaco","current","editor","defineTheme","setTheme","useEffect","t2","monaco_0","CodeEditor","props","defaultCode","code","showLineNumbers","isEditable","language","onChange","disableScroll","undefined","applyEditorTheme","Symbol","for","enabled","t3","t4","scrollbar","vertical","horizontal","useShadows","alwaysConsumeMouseWheel","scrollBeyondLastLine","mouseWheelScrollSensitivity","overviewRulerLanes","t5","tabSize","minimap","fontSize","readOnly","lineNumbers","options","t6","t7","t8","languages","typescript","typescriptDefaults","setCompilerOptions","jsx","JsxEmit","React","addCommand","KeyMod","CtrlCmd","KeyCode","KeyS","getAction","run","t9","Editor","CodeDiffEditor","original","modified","originalEditable","renderSideBySide","useInlineViewWhenSpaceIsTooSmall","_","DiffEditor","imagePreviewMimeTypes","avif","bmp","gif","heic","ico","jpeg","jpg","png","tif","tiff","webp","imagePreviewExtensions","Object","keys","getFileExtension","filePath","extension","split","pop","toLowerCase","getImagePreviewMimeType","isImagePreviewPath","LARGE_DIFF_LINE_THRESHOLD","generatedDiffFileNames","Set","binaryDiffExtensions","getDiffLineCount","input","additions","deletions","isLargeDiffContent","isGeneratedDiffPath","path","fileName","has","endsWith","isBinaryDiffPath","ext","length","isImageDiffPath","createDiffCardBodyModel","diff","oldContent","newContent","isLargeDiff","hasOptedIntoLargeDiff","onShowFullDiff","diffViewMode","buildViewData","oldImageSrc","getImagePreviewSource","newImageSrc","kind","oldSrc","newSrc","isImage","renderedLineCount","diffViewData","buildDiffViewData","oldPath","newPath","sideBySide","content","startsWith","DiffCardBody","model","Box","ImageDiffPreview","BinaryDiffPlaceholder","LargeDiffPlaceholder","md","ImageDiffPanel","Grid","label","src","fallback","Text","Image","jsxs","Button","EmptyState","title","DeferredDiffLoad","actionLabel","isLoadingDiff","onAction","loadingDiffContentRows","LoadingDiffContent","Stack","map","_temp","row","Skeleton","buildDeferredDiffLoadState","isGeneratedDiff","loadError","canLoadDiff","onLoadDiff","DiffCardContent","isExpanded","isBinaryDiff","hasDiffContent","shouldAutoLoadDiff","shouldAutoLoadDiffContent","requestedPath","resolveRequestedDiffPath","shouldShowDiffStats","resolveDiffFilePath","useDiffContentLoader","isSelected","setLoadingDiff","useState","setRequestedPath","setLoadError","loadDiff","Boolean","DiffCard","onToggleExpanded","onSelect","blocksDiffContentLoad","borderColor","DiffCardHeader","t10","t11","t12","showStats","isCopied","setIsCopied","copyResetTimeoutRef","window","clearTimeout","navigator","clipboard","writeText","setTimeout","copyFilePath","bg","event","stopPropagation","ChevronDown","ChevronRight","IconButton","t13","change","t14","t15","t16","t17","opacity","pointerEvents","t18","t19","t20","event_0","t21","Check","Copy","t22","t23","Tooltip","t24","t25","t26","DiffBubble","t27","DiffDrawerEmptyState","ScrollArea","p","spaceY","CARD_HEADER_HEIGHT","CARD_BODY_LINE_HEIGHT","HUNK_ROW_HEIGHT","COLLAPSED_CARD_HEIGHT","DEFERRED_BODY_HEIGHT","IMAGE_BODY_HEIGHT","ITEM_GAP_HEIGHT","deferredCardHeight","estimateDiffCardHeight","isCollapsed","unifiedContentRows","splitContentRows","hunkRows","contentRows","bodyHeight","getDiffPath","PINNED_DIFF_LOOKBEHIND_COUNT","resolveSelectedScrollState","diffs","selectedDiffPath","collapsedPaths","expansionCommand","completedScrollCommandId","selectedScrollPath","selectedScrollSourceKey","selectedScrollCommandId","action","hasCompletedSelectedScroll","selectedScrollKey","selectedScrollExpansionState","selectedScrollIndex","findIndex","shouldPinSelectedScrollIndex","direction","includePinnedDiffIndexes","indexes","includes","pinnedStartIndex","Math","max","pinnedIndexes","Array","from","index","sort","a","b","SETTLE_FRAME_COUNT","MAX_ALIGNMENT_FRAMES","useSelectedDiffScroll","scrollRef","virtualizerRef","suppressScrollAdjustRef","setCompletedScrollCommandId","virtualizer","scrollElement","frameIds","cancelledByUserScroll","stopAligning","cancelSelectedScroll","alignmentFrames","alignSelectedDiff","scrollToIndex","align","push","requestAnimationFrame","addEventListener","passive","removeEventListener","frameId","cancelAnimationFrame","useLayoutEffect","INITIAL_EXPANDED_DIFF_COUNT","INITIAL_COLLAPSED_LINE_THRESHOLD","buildInitialCollapsedPaths","filter","lineCount","buildAllCollapsedPaths","toggleCollapsedPath","next","delete","add","resolveCollapsedPathsForSelectedDiff","some","resolveCollapsedPathsForNavigation","previousNavigatedPath","expanded","DiffDrawer","onSelectDiffPath","onExpansionStateChange","reportedExpansionStateRef","lastNavigatedPathRef","setCollapsedPaths","largeDiffOptInPaths","setLargeDiffOptInPaths","useVirtualizer","count","getScrollElement","estimateSize","getItemKey","overscan","rangeExtractor","range","defaultRangeExtractor","shouldAdjustScrollPositionOnItemSizeChange","_item","_delta","instance","isScrolling","prev","navigatedPath","expansionState","allExpanded","size","allCollapsed","every","reportedExpansionState","toggleExpanded","showFullDiff","virtualItems","getVirtualItems","style","overflowAnchor","height","getTotalSize","virtualItem","measureElement","top","start","key","normalizeChangedFilePath","segment","trim","join","sortNodes","nodes","left","right","type","name","localeCompare","forEach","node","children","dedupePaths","paths","buildFlatTree","buildChangedFilesTree","mode","treeById","Map","rootNodes","segments","parentPath","parentNode","currentPath","isFile","nodeId","existingNode","get","nextNode","set","collectExpandedFolderIds","folderIds","visit","items","item","collectNestedFileOrder","orderedPaths","treeNodes","replace","sortPathsByViewMode","useDiffViewerStore","create","isTreePanelOpen","viewMode","searchQuery","selectedPath","expandedFolderIds","setTreePanelOpen","toggleTreePanel","state","setViewMode","setDiffViewMode","setSearchQuery","setSelectedPath","setExpandedFolderIds","toggleFolder","folderId","expandAll","collapseAll","SelectionIndicator","selected","DiffViewerMenuItem","icon","disabled","onActivate","ListRow","DiffViewerOptionsMenu","hasFilePaths","isExpandAllDisabled","isCollapseAllDisabled","onToggleTreePanel","onViewModeChange","onDiffViewModeChange","onExpandAll","onCollapseAll","Menu","Settings2","PanelLeftClose","PanelLeftOpen","Fragment","ListTree","List","Rows2","SquareSplitHorizontal","ChevronsUpDown","ChevronsDownUp","changeLabels","added","copied","deleted","permissionChange","renamed","changeColors","changeSemanticStyles","color","backgroundColor","filterInputChromeProps","border","borderRadius","boxShadow","_hover","_active","_focus","outline","_focusVisible","getFilePathParts","lastSlashIndex","lastIndexOf","dirPath","slice","renderFileLabel","toTreeListNodes","onSelectPath","resolveFileIcon","changeByPath","isContainer","fileIcon","Icon","FileText","changeBadgeProps","colorPalette","iconColor","endContent","Badge","FileListPanel","onSearchQueryChange","onToggleFolder","fileTree","emptyTitle","Header","HStack","Search","target","InputGroup","Input","overflowX","TreeList","buildChangeByPath","sumDiffStats","reduce","total","buildFilteredDiffs","normalizedSearchQuery","matchingDiffs","orderByPath","leftOrder","Number","MAX_SAFE_INTEGER","rightOrder","resolveSelectedPath","preferredPaths","fallbackPaths","loadingDiffItems","DiffViewerLoading","DiffViewer","changedFilePaths","defaultSelectedPath","loading","diffExpansionCommand","setDiffExpansionCommand","diffExpansionState","setDiffExpansionState","allFilesExpanded","emptyDiffTitle","filePaths","filteredDiffPathKey","filteredDiffPaths","filteredDiffs","filteredFilePathKey","filteredFilePaths","hasDiffs","hasExpandableItems","resolvedSelectedPath","showDiffEmptyState","totalDiff","diffPaths","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","filePaths_0","tree","diffPaths_0","filePaths_1","_temp2","expandAllFilesAndDiffs","_temp3","collapseAllFilesAndDiffs","path_0","currentIndex","indexOf","nextIndex","current_1","selectChangedFilePath","diffPanel","collapsed","Flex","ResizableSplitLayout","current_0"],"mappings":";;;;;;;;;;;;;;AAKO,MAAMA,KAA4BA,CAACC,MAAuC;AAC/E,MAAIC;AAEJ,SAAO,OACLA,MAAmBD,EAAAA,GACZC;AAEX,GAEaC,KAAoBH,GAA0B,MACzD,OAAO,8BAAkB,EAAEI,KAAMC,CAAAA,MAAWA,EAAOC,kBAAkB,CACvE,GAEaC,KAAc;AAAA,EACzBC,MAAM;AAAA,EACNC,SAAS;AAAA,EACTC,OAAO,CAAA;AAAA,EACPC,QAAQ;AAAA,IACN,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,kCAAkC;AAAA,IAClC,2BAA2B;AAAA,IAC3B,+BAA+B;AAAA,IAC/B,gCAAgC;AAAA,IAChC,sCAAsC;AAAA,EAAA;AAE1C,GAEMC,KAAgBA,CAACC,MACrB,OAAOA,KAAU,YAAYA,MAAU,QAAQ,UAAUA,KAAS,YAAYA,GAS1EC,KAAoB,YAEpBC,KAAiBA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GACrB;AAAA,IAAAC,iBAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,EAAAA,IAA8CC,GAAAA;AAAqB,MAAAC;AAAA,MAAAL,EAAA,CAAA,MAAAE,KAAAF,SAAAG,GAAA;AAAA,QAAAG;AAAA,IAAAN,SAAAE,KAC1BI,IAAAC,CAAAA,MAAWA,EAAKC,OAAQN,GAAeF,OAAAE,GAAAF,OAAAM,KAAAA,IAAAN,EAAA,CAAA;AAAhF,UAAAS,IAAmBN,EAAgBO,KAAMJ,CAAuC;AACzED,IAAAA,IAAAT,GAAca,GAAUE,WAAoD,IAAnCF,EAAUE,cAAnDpB,IAA6ES,OAAAE,GAAAF,OAAAG,GAAAH,OAAAK;AAAAA,EAAA;AAAAA,IAAAA,IAAAL,EAAA,CAAA;AAAA,SAA7EK;AAA6E,GAGhFO,KAAsBC,CAAAA,MAAA;AAAA,QAAAb,IAAAC,EAAA,CAAA,GAC1Ba,IAAkBC,EAAyB,IAAI;AAAE,MAAAV,GAAAC;AAAA,EAAAN,SAAAa,KAEvCR,IAAAA,MAAA;AACR,UAAAW,IAAeF,EAASG;AACxB,IAAKD,MAELA,EAAME,OAAOC,YAAarB,IAAmBe,CAAW,GACxDG,EAAME,OAAOE,SAAUtB,EAAiB;AAAA,EAAC,GACxCQ,IAAA,CAACO,CAAW,GAACb,OAAAa,GAAAb,OAAAK,GAAAL,OAAAM,MAAAD,IAAAL,EAAA,CAAA,GAAAM,IAAAN,EAAA,CAAA,IANhBqB,GAAUhB,GAMPC,CAAa;AAAC,MAAAgB;AAAA,SAAAtB,SAAAa,KAEVS,IAAAC,CAAAA,MAAA;AACLT,IAAAA,EAASG,UAAWD,GACpBA,EAAME,OAAOC,YAAarB,IAAmBe,CAAW,GACxDG,EAAME,OAAOE,SAAUtB,EAAiB;AAAA,EAAC,GAC1CE,OAAAa,GAAAb,OAAAsB,KAAAA,IAAAtB,EAAA,CAAA,GAJMsB;AAIN,GAaUE,KAAaC,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,EAAA,GACxB;AAAA,IAAAyB,aAAAA;AAAAA,IAAAC,MAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,UAAAzB;AAAAA,IAAA0B,UAAAA;AAAAA,IAAAC,eAAAA;AAAAA,EAAAA,IAA6GP,GAArDK,IAAAzB,MAAA4B,SAAA,eAAA5B,GACxDQ,IAAoBd,GAAAA,GACpBmC,IAAyBtB,GAAoBC,CAAW;AAAE,MAAAP;AAAA,EAAAN,EAAA,CAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAI/C9B,IAAA;AAAA,IAAA+B,SACE;AAAA,EAAA,GACVrC,OAAAM,KAAAA,IAAAN,EAAA,CAAA;AAES,QAAAsB,KAACO,GACES,IAAAV,IAAA,OAAA;AAA8B,MAAAW;AAAA,EAAAvC,SAAAgC,KACvCO,IAAAP,IAAA;AAAA,IAAAQ,WAEa;AAAA,MAAAC,UACC;AAAA,MAAiBC,YACf;AAAA,MAAiBC,YACjB;AAAA,MAAKC,yBACQ;AAAA,IAAA;AAAA,IAC1BC,sBACqB;AAAA,IAAKC,6BACE;AAAA,IAACC,oBACV;AAAA,EAAA,IAVtB,CAAA,GAYE/C,OAAAgC,GAAAhC,OAAAuC,KAAAA,IAAAvC,EAAA,CAAA;AAAA,MAAAgD;AAAA,EAAAhD,EAAA,CAAA,MAAAsB,KAAAtB,SAAAsC,KAAAtC,EAAA,CAAA,MAAAuC,KApBQS,IAAA;AAAA,IAAAC,SACL;AAAA,IAACC,SACD5C;AAAAA,IAER6C,UACS;AAAA,IAAEC,UACF9B;AAAAA,IAAW+B,aACRf;AAAAA,IAA8B,GACvCC;AAAAA,EAAAA,GAaLvC,OAAAsB,GAAAtB,OAAAsC,GAAAtC,OAAAuC,GAAAvC,OAAAgD,KAAAA,IAAAhD,EAAA,CAAA;AArBD,QAAAsD,IAAgBN;AAqBL,MAAAO;AAAA,EAAAvD,SAAA+B,KAWGwB,IAAA1D,CAAAA,MAAA;AACRkC,IAAAA,IAAWlC,KAAA,EAAW;AAAA,EAAC,GACxBG,OAAA+B,GAAA/B,OAAAuD,KAAAA,IAAAvD,EAAA,CAAA;AAAA,MAAAwD,GAAAC;AAAA,EAAAzD,SAAAkC,KACYsB,IAAAxC,CAAAA,MAAA;AACXkB,IAAAA,EAAiBlB,CAAM;AAAA,EAAC,GAEjByC,IAAA,OAAAvC,GAAAK,MAAA;AACPW,IAAAA,EAAiBlB,CAAM,GAGvBA,EAAM0C,UAAUC,WAAWC,mBAAmBC,mBAAoB;AAAA,MAAAC,KAC3D9C,EAAM0C,UAAUC,WAAWI,QAAQC;AAAAA,IAAAA,CACzC,GAGD9C,EAAM+C,WAAYjD,EAAMkD,OAAOC,UAAWnD,EAAMoD,QAAQC,MAAO,YAAA;AAC7D,YAAMnD,EAAMoD,UAAW,8BAAmC,GAACC,IAAAA;AAAAA,IAAE,CAC9D,GAGD,MAAMrD,EAAMoD,UAAW,8BAAmC,GAACC,IAAAA;AAAAA,EAAE,GAC9DvE,OAAAkC,GAAAlC,QAAAwD,GAAAxD,QAAAyD,MAAAD,IAAAxD,EAAA,EAAA,GAAAyD,IAAAzD,EAAA,EAAA;AAAA,MAAAwE;AAAA,SAAAxE,EAAA,EAAA,MAAA2B,KAAA3B,EAAA,EAAA,MAAA0B,KAAA1B,EAAA,EAAA,MAAA8B,KAAA9B,UAAAsD,KAAAtD,EAAA,EAAA,MAAAuD,KAAAvD,EAAA,EAAA,MAAAwD,KAAAxD,EAAA,EAAA,MAAAyD,KA7BHe,sBAACC,IAAA,EACO,OAAA,QACC,QAAA,QACG3C,UAAAA,GACIJ,cAAAA,GACPC,OAAAA,GACA7B,OAAAA,IACEwD,SAAAA,GACC,UAAAC,GAGG,aAAAC,GAGJ,SAAAC,GAeR,GACDzD,QAAA2B,GAAA3B,QAAA0B,GAAA1B,QAAA8B,GAAA9B,QAAAsD,GAAAtD,QAAAuD,GAAAvD,QAAAwD,GAAAxD,QAAAyD,GAAAzD,QAAAwE,KAAAA,IAAAxE,EAAA,EAAA,GA9BFwE;AA8BE,GAYOE,KAAiBjD,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,EAAA,GAC5B;AAAA,IAAA0E,UAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAhD,iBAAAA;AAAAA,IAAAE,UAAAzB;AAAAA,IAAA2B,eAAAA;AAAAA,EAAAA,IAAwFP,GAA3CK,IAAAzB,MAAA4B,SAAA,eAAA5B,GAC7CQ,IAAoBd,GAAAA,GACpBmC,IAAyBtB,GAAoBC,CAAW;AAAE,MAAAP;AAAA,EAAAN,EAAA,CAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAI/C9B,IAAA;AAAA,IAAA+B,SACE;AAAA,EAAA,GACVrC,OAAAM,KAAAA,IAAAN,EAAA,CAAA;AAMY,QAAAsB,IAAAM,IAAA,OAAA;AAA8B,MAAAU;AAAA,EAAAtC,SAAAgC,KACvCM,IAAAN,IAAA;AAAA,IAAAQ,WAEa;AAAA,MAAAC,UACC;AAAA,MAAiBC,YACf;AAAA,MAAiBC,YACjB;AAAA,MAAKC,yBACQ;AAAA,IAAA;AAAA,IAC1BC,sBACqB;AAAA,IAAKC,6BACE;AAAA,IAACC,oBACV;AAAA,EAAA,IAVtB,CAAA,GAYE/C,OAAAgC,GAAAhC,OAAAsC,KAAAA,IAAAtC,EAAA,CAAA;AAAA,MAAAuC;AAAA,EAAAvC,EAAA,CAAA,MAAAsB,KAAAtB,SAAAsC,KAvBQC,IAAA;AAAA,IAAAU,SACL;AAAA,IAACC,SACD5C;AAAAA,IAER6C,UACS;AAAA,IAAEC,UACF;AAAA,IAAIyB,kBACI;AAAA,IAAKC,kBACL;AAAA,IAAIC,kCACY;AAAA,IAAI1B,aACzB/B;AAAAA,IAA8B,GACvCgB;AAAAA,EAAAA,GAaLtC,OAAAsB,GAAAtB,OAAAsC,GAAAtC,OAAAuC,KAAAA,IAAAvC,EAAA,CAAA;AAxBD,QAAAsD,IAAgBf;AAwBL,MAAAS,GAAAO;AAAA,EAAAvD,SAAAkC,KAWMc,IAAAhC,CAAAA,MAAA;AACXkB,IAAAA,EAAiBlB,CAAM;AAAA,EAAC,GAEjBuC,IAAAA,CAAAyB,GAAAzD,MAAA;AACPW,IAAAA,EAAiBlB,CAAM,GAEvBA,EAAM0C,UAAUC,WAAWC,mBAAmBC,mBAAoB;AAAA,MAAAC,KAC3D9C,EAAM0C,UAAUC,WAAWI,QAAQC;AAAAA,IAAAA,CACzC;AAAA,EAAC,GACHhE,OAAAkC,GAAAlC,OAAAgD,GAAAhD,OAAAuD,MAAAP,IAAAhD,EAAA,CAAA,GAAAuD,IAAAvD,EAAA,CAAA;AAAA,MAAAwD;AAAA,SAAAxD,SAAA8B,KAAA9B,EAAA,EAAA,MAAA4E,KAAA5E,EAAA,EAAA,MAAAsD,KAAAtD,EAAA,EAAA,MAAA2E,KAAA3E,UAAAgD,KAAAhD,EAAA,EAAA,MAAAuD,KAjBHC,IAAA,gBAAAM,EAACmB,IAAA,EACO,OAAA,QACC,QAAA,QACGnD,UAAAA,GACA6C,UAAAA,GACAC,UAAAA,GACH9E,OAAAA,IACEwD,SAAAA,GACI,aAAAN,GAGJ,SAAAO,GAMR,GACDvD,OAAA8B,GAAA9B,QAAA4E,GAAA5E,QAAAsD,GAAAtD,QAAA2E,GAAA3E,QAAAgD,GAAAhD,QAAAuD,GAAAvD,QAAAwD,KAAAA,IAAAxD,EAAA,EAAA,GAlBFwD;AAkBE,GCxMO0B,KAAwB;AAAA,EACnCC,MAAM;AAAA,EACNC,KAAK;AAAA,EACLC,KAAK;AAAA,EACLC,MAAM;AAAA,EACNC,KAAK;AAAA,EACLC,MAAM;AAAA,EACNC,KAAK;AAAA,EACLC,KAAK;AAAA,EACLC,KAAK;AAAA,EACLC,MAAM;AAAA,EACNC,MAAM;AACR,GAEaC,KAAyBC,OAAOC,KAAKd,EAAqB,GAE1De,KAAmBA,CAACC,MAAqB;AAEpD,QAAMC,KADWD,EAASE,MAAM,OAAO,EAAEC,SAASH,GACvBE,MAAM,GAAG,EAAEC,IAAAA;AACtC,SAAOF,IAAYA,EAAUG,YAAAA,IAAgB;AAC/C,GAEaC,KAA0BA,CAACL,MAAqB;AAC3D,QAAMC,IAAYF,GAAiBC,CAAQ;AAC3C,SAAOhB,GAAsBiB,CAA+C,KAAK;AACnF,GAEaK,KAAqBA,CAACN,MAAqBK,GAAwBL,CAAQ,MAAM,MCzBjFO,KAA4B,KAEnCC,yBAA6BC,IAAI,CAAC,YAAY,aAAa,qBAAqB,kBAAkB,WAAW,CAAC,GAI9GC,KAAuB,oBAAID,IAAI,CACnC,GAAGb,IACH,OACA,OACA,OACA,MACA,OACA,OACA,MACA,OACA,OACA,MACA,SACA,QACA,SACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,OACA,OACA,QACA,SACA,KAAK,CACN,GAEYe,KAAmBA,CAACC,OAMvBA,EAAMC,aAAa,MAAMD,EAAME,aAAa,IAGzCC,KAAqBA,CAACH,MAM1BD,GAAiBC,CAAK,IAAIL,IAGtBS,KAAsBA,CAACC,MAAiB;AACnD,QAAMC,IAAWD,EAAKf,MAAM,OAAO,EAAEC,SAASc;AAE9C,SAAOT,GAAuBW,IAAID,CAAQ,KAAKA,EAASE,SAAS,SAAS,KAAKF,EAASE,SAAS,eAAe;AAClH,GAEaC,KAAmBA,CAACJ,MAAiB;AAChD,QAAMK,IAAMvB,GAAiBkB,CAAI;AACjC,SAAOK,EAAIC,SAAS,KAAKb,GAAqBS,IAAIG,CAAG;AACvD,GAEaE,KAAkBlB,IC5ClBmB,KAA0BA,CAACb,MAAkC;AACxE,QAAM;AAAA,IACJc,MAAAA;AAAAA,IACA1B,UAAAA;AAAAA,IACA2B,YAAAA;AAAAA,IACAC,YAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAC,uBAAAA;AAAAA,IACAC,gBAAAA;AAAAA,IACAC,cAAAA,IAAe;AAAA,IACfC,eAAAA;AAAAA,EAAAA,IACErB;AAEJ,MAAIS,GAAiBrB,CAAQ,GAAG;AAC9B,UAAMkC,IAAcC,GAAsBR,CAAU,GAC9CS,IAAcD,GAAsBP,CAAU;AACpD,WAAIJ,GAAgBxB,CAAQ,MAAMkC,KAAeE,KACxC;AAAA,MACLC,MAAM;AAAA,MACNrC,UAAAA;AAAAA,MACAsC,QAAQJ;AAAAA,MACRK,QAAQH;AAAAA,IAAAA,IAIL;AAAA,MACLC,MAAM;AAAA,MACNrC,UAAAA;AAAAA,MACAwC,SAAShB,GAAgBxB,CAAQ;AAAA,IAAA;AAAA,EAErC;AAEA,SAAI6B,KAAe,CAACC,IACX;AAAA,IACLO,MAAM;AAAA,IACNrC,UAAAA;AAAAA,IACAyC,mBAAmB9B,GAAiBe,CAAI;AAAA,IACxCK,gBAAAA;AAAAA,EAAAA,IAUG;AAAA,IACLM,MAAM;AAAA,IACNK,eARoBT,KAAiBU,IAAmB;AAAA,MACxDlE,UAAUkD;AAAAA,MACVjD,UAAUkD;AAAAA,MACVgB,SAASlB,EAAKkB;AAAAA,MACdC,SAASnB,EAAKmB;AAAAA,IAAAA,CACf;AAAA,IAICC,YAAYd,MAAiB;AAAA,EAAA;AAEjC,GAEMG,KAAwBA,CAACY,MAAqBA,EAAQC,WAAW,aAAa,IAAID,IAAU,IAErFE,KAAe1H,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,EAAA,GAC1B;AAAA,IAAA2H,MAAAA;AAAAA,IAAA1B,UAAAA;AAAAA,IAAA2B,YAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAC,uBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,cAAA7H;AAAAA,EAAAA,IASIoB,GADFyG,IAAA7H,MAAA4B,SAAA,YAAA5B;AAAwB,MAAAC;AAAA,EAAAN,EAAA,CAAA,MAAA4H,KAAA5H,EAAA,CAAA,MAAAkI,KAAAlI,EAAA,CAAA,MAAAkG,KAAAlG,EAAA,CAAA,MAAAgI,KAAAhI,EAAA,CAAA,MAAA+H,KAAA/H,EAAA,CAAA,MAAA8H,KAAA9H,EAAA,CAAA,MAAA6H,KAAA7H,SAAAiI,KAEZ3H,IAAAqH,GAAwB;AAAA,IAAAC,MAAAA;AAAAA,IAAA1B,UAAAA;AAAAA,IAAA2B,YAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAC,uBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,cAAAA;AAAAA,EAAAA,CASrC,GAAClI,OAAA4H,GAAA5H,OAAAkI,GAAAlI,OAAAkG,GAAAlG,OAAAgI,GAAAhI,OAAA+H,GAAA/H,OAAA8H,GAAA9H,OAAA6H,GAAA7H,OAAAiI,GAAAjI,OAAAM,KAAAA,IAAAN,EAAA,CAAA;AATF,QAAAoJ,IAAc9I;AASX,MAAAgB;AAAA,SAAAtB,EAAA,CAAA,MAAA4H,KAAA5H,EAAA,EAAA,MAAAoJ,EAAAR,gBAAA5I,EAAA,EAAA,MAAAoJ,EAAAlD,YAAAlG,EAAA,EAAA,MAAAoJ,EAAAV,WAAA1I,EAAA,EAAA,MAAAoJ,EAAAb,QAAAvI,UAAAoJ,EAAAX,UAAAzI,EAAA,EAAA,MAAAoJ,EAAAZ,UAAAxI,EAAA,EAAA,MAAAoJ,EAAAnB,kBAAAjI,EAAA,EAAA,MAAAoJ,EAAAT,qBAAA3I,EAAA,EAAA,MAAAoJ,EAAAJ,cAAAhJ,EAAA,EAAA,MAAA8H,KAAA9H,UAAA6H,KAGDvG,IAAA,gBAAAwC,EAACuF,GAAA,EAAO,IAAA,MAAwB,oBAAA,MAAc,UAAA,UAC3CD,UAAAA,EAAKb,SAAU,WACd,gBAAAzE,EAACmB,IAAA,EACW4C,UAAAA,GACAC,UAAAA,GACD,SAAAF,EAAIkB,SACJ,SAAAlB,EAAImB,SACD,YAAAK,EAAKJ,YACX,MAAAI,EAAKR,cAAa,IAExBQ,EAAKb,SAAU,UACjB,gBAAAzE,EAACwF,IAAA,EAAyB,QAAAF,EAAKZ,QAAiB,QAAAY,EAAKX,OAAAA,CAAO,IAC1DW,EAAKb,SAAU,WACjB,gBAAAzE,EAACyF,IAAA,EAA+B,SAAAH,EAAKV,QAAAA,CAAQ,IAE7C,gBAAA5E,EAAC0F,IAAA,EACW,UAAAJ,EAAKlD,UACI,mBAAAkD,EAAKT,mBACR,gBAAAS,EAAKnB,gBAAe,GAG1C,GAAMjI,OAAA4H,GAAA5H,EAAA,EAAA,IAAAoJ,EAAAR,cAAA5I,EAAA,EAAA,IAAAoJ,EAAAlD,UAAAlG,EAAA,EAAA,IAAAoJ,EAAAV,SAAA1I,EAAA,EAAA,IAAAoJ,EAAAb,MAAAvI,EAAA,EAAA,IAAAoJ,EAAAX,QAAAzI,EAAA,EAAA,IAAAoJ,EAAAZ,QAAAxI,EAAA,EAAA,IAAAoJ,EAAAnB,gBAAAjI,EAAA,EAAA,IAAAoJ,EAAAT,mBAAA3I,EAAA,EAAA,IAAAoJ,EAAAJ,YAAAhJ,QAAA8H,GAAA9H,QAAA6H,GAAA7H,QAAAsB,KAAAA,IAAAtB,EAAA,EAAA,GArBNsB;AAqBM,GASJgI,KAAmB7H,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,CAAA,GACvB;AAAA,IAAAuI,QAAAA;AAAAA,IAAAC,QAAAA;AAAAA,EAAAA,IAA2BhH;AAAM,MAAApB;AAAA,EAAAL,EAAA,CAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAIZ/B,IAAA;AAAA,IAAAb,MAAQ;AAAA,IAAKiK,IAAM;AAAA,EAAA,GAAWzJ,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAM;AAAA,EAAAN,SAAAwI,KAO/ClI,sBAACoJ,IAAA,EAAqB,OAAA,OAAWlB,QAAiB,UAAA,gBAAc,GAAGxI,OAAAwI,GAAAxI,OAAAM,KAAAA,IAAAN,EAAA,CAAA;AAAA,MAAAsB;AAAA,EAAAtB,SAAAyI,KACnEnH,sBAACoI,IAAA,EAAqB,OAAA,OAAWjB,QAAiB,UAAA,gBAAc,GAAGzI,OAAAyI,GAAAzI,OAAAsB,KAAAA,IAAAtB,EAAA,CAAA;AAAA,MAAAsC;AAAA,SAAAtC,EAAA,CAAA,MAAAM,KAAAN,SAAAsB,KATrEgB,sBAACqH,IAAA,EACkB,iBAAAtJ,GACb,KAAA,MACF,GAAA,MACQ,WAAA,aACE,aAAA,iBACT,IAAA,MAEHC,UAAAA;AAAAA,IAAAA;AAAAA,IACAgB;AAAAA,EAAAA,GACF,GAAOtB,OAAAM,GAAAN,OAAAsB,GAAAtB,OAAAsC,KAAAA,IAAAtC,EAAA,CAAA,GAVPsC;AAUO,GAULoH,KAAiBjI,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,CAAA,GACrB;AAAA,IAAA2J,OAAAA;AAAAA,IAAAC,KAAAA;AAAAA,IAAAC,UAAAA;AAAAA,EAAAA,IAAiCrI;AAAM,MAAApB;AAAA,EAAAL,SAAA4J,KAInCvJ,IAAA,gBAAAyD,EAACiG,GAAA,EACI,IAAA,MACA,IAAA,OACO,WAAA,kBACJ,OAAA,YACO,cAAA,aACD,aAAA,iBAEXH,UAAAA,GACH,GAAO5J,OAAA4J,GAAA5J,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAM;AAAA,EAAAN,EAAA,CAAA,MAAA8J,KAAA9J,SAAA4J,KAAA5J,EAAA,CAAA,MAAA6J,KACPvJ,IAAA,gBAAAwD,EAACuF,GAAA,EAAY,SAAA,QAAkB,YAAA,UAAc,MAAA,SAAU,GAAA,MACpDQ,UAAAA,IACC,gBAAA/F,EAACkG,IAAA,EAAWH,KAAAA,GAAU,KAAA,GAAGD,CAAK,eAAoB,MAAA,SAAa,MAAA,QAAiB,WAAA,UAAA,CAAS,IAEzF,gBAAA9F,EAACiG,GAAA,EAAW,OAAA,YAAqB,WAAA,kBAC9BD,aACH,GAEJ,GAAM9J,OAAA8J,GAAA9J,OAAA4J,GAAA5J,OAAA6J,GAAA7J,OAAAM,KAAAA,IAAAN,EAAA,CAAA;AAAA,MAAAsB;AAAA,SAAAtB,EAAA,CAAA,MAAAK,KAAAL,SAAAM,KAnBRgB,IAAA,gBAAA2I,EAACZ,GAAA,EAAW,QAAA,aAAwB,aAAA,iBAA6B,cAAA,MAAc,UAAA,UAAY,IAAA,aAAiB,MAAA,KAC1GhJ,UAAAA;AAAAA,IAAAA;AAAAA,IAUAC;AAAAA,EAAAA,GASF,GAAMN,OAAAK,GAAAL,OAAAM,GAAAN,OAAAsB,KAAAA,IAAAtB,EAAA,CAAA,GApBNsB;AAoBM,GAUJkI,KAAuB/H,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,CAAA,GAC3B;AAAA,IAAAiG,UAAAA;AAAAA,IAAA+B,gBAAAA;AAAAA,EAAAA,IAAqCxG;AAAM,MAAApB;AAAA,EAAAL,EAAA,CAAA,MAAAkG,KAAAlG,SAAAiI,KAKpC5H,IAAA4H,IACC,gBAAAnE,EAACoG,IAAA,EAAY,MAAA,MAAa,SAAA,WAAsB,cAAA,wBAAwBhE,CAAQ,IAAa+B,SAAAA,GAAgB,4BAE7G,IAHD,MAIOjI,OAAAkG,GAAAlG,OAAAiI,GAAAjI,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAM;AAAA,SAAAN,SAAAK,KANZC,sBAAC+I,GAAA,EAAM,GAAA,MAAe,WAAA,aAAwB,aAAA,iBAAmB,IAAA,MAC/D,4BAACc,IAAA,EAAiB,OAAA,qCAA6C,UAAA,MAC5D9J,aAKH,GACF,GAAML,OAAAK,GAAAL,OAAAM,KAAAA,IAAAN,EAAA,CAAA,GARNM;AAQM,GAQJiJ,KAAwB9H,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,CAAA,GAC5B;AAAA,IAAAyI,SAAAA;AAAAA,EAAAA,IAAoBjH,GACpB2I,IAAc1B,IAAA,8BAAA;AAAqE,MAAArI;AAAA,SAAAL,SAAAoK,KAGjF/J,IAAA,gBAAAyD,EAACuF,GAAA,EAAM,GAAA,MAAe,WAAA,aAAwB,aAAA,iBAAmB,IAAA,MAC/D,UAAA,gBAAAvF,EAACqG,IAAA,EAAkBC,OAAAA,GAAgB,UAAA,MAAI,GACzC,GAAMpK,OAAAoK,GAAApK,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFNK;AAEM,GC/MGgK,KAAmB5I,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,CAAA,GAC9B;AAAA,IAAAmK,OAAAA;AAAAA,IAAAE,aAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAC,UAAAA;AAAAA,EAAAA,IAAwD/I;AAAM,MAAApB;AAAA,EAAAL,EAAA,CAAA,MAAAsK,KAAAtK,SAAAuK,KAAAvK,EAAA,CAAA,MAAAwK,KAKvDnK,IAAAiK,IACC,gBAAAxG,EAACoG,IAAA,EAAY,MAAA,MAAa,SAAA,WAAmBK,SAAAA,GAAwBC,SAAAA,GAClEF,UAAAA,EAAAA,CACH,IAHD,MAIOtK,OAAAsK,GAAAtK,OAAAuK,GAAAvK,OAAAwK,GAAAxK,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAM;AAAA,SAAAN,EAAA,CAAA,MAAAK,KAAAL,SAAAoK,KANZ9J,sBAAC+I,GAAA,EAAO,IAAA,MAAO,GAAA,MAAe,WAAA,aAAwB,aAAA,iBACpD,4BAACc,IAAA,EAAkBC,OAAAA,GAAgB,UAAA,MAChC/J,aAKH,GACF,GAAML,OAAAK,GAAAL,OAAAoK,GAAApK,OAAAM,KAAAA,IAAAN,EAAA,CAAA,GARNM;AAQM,GAIJmK,KAAyB,CAAC,SAAS,UAAU,OAAO,GAE7CC,KAAqBA,MAAA;AAAA,QAAA1K,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,EAAA,CAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAChC/B,IAAA,gBAAAyD,EAAC6G,MACG,GAAA,SACC,IAAA,MACO,WAAA,aACE,aAAA,iBACV,GAAA,MACE,KAAA,OACC,MAAA,UACK,aAAA,QACC,cAAA,gBAEVF,UAAAA,GAAsBG,IAAKC,EAE3B,EAAA,CACH,GAAQ7K,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAdRK;AAcQ;AAfwB,SAAAwK,GAAAC,GAAA;AAAA,SAa5B,gBAAAhH,EAACiH,MAAqB,GAAA,QAAS,GAAA,QAAoB,cAAA,QAApCD,CAAwC;AAAG;ACPhE,MAAME,KAA6BA,CAAClE,MAAsC;AACxE,QAAM;AAAA,IAAEiB,aAAAA;AAAAA,IAAakD,iBAAAA;AAAAA,IAAiBC,WAAAA;AAAAA,IAAWC,aAAAA;AAAAA,IAAaC,YAAAA;AAAAA,IAAYnD,gBAAAA;AAAAA,EAAAA,IAAmBnB;AAC7F,MAAIsD,IAAQ,mCACRE,IAAca,IAAc,cAAclJ,QAC1CuI,IAAqCW,IAAc;AAAM,IAAKC;MAAenJ;AAEjF,SAAI8F,MACFqC,IAAQ,qCACRE,IAAca,IAAc,mBAAmBlJ,QAC/CuI,IAAWA,MAAM;AACfvC,IAAAA,IAAAA,GACKmD,EAAAA;AAAAA,EACP,IAGEH,MACFb,IAAQ,yCACRE,IAAca,IAAc,cAAclJ,QAC1CuI,IAAWW,IAAc;AAAM,IAAKC,EAAAA;AAAAA,MAAenJ,SAGjDiJ,MACFd,IAAQ,mCACRE,IAAca,IAAc,cAAclJ,QAC1CuI,IAAWW,IAAc;AAAM,IAAKC,EAAAA;AAAAA,MAAenJ,SAG9C;AAAA,IAAEmI,OAAAA;AAAAA,IAAOE,aAAAA;AAAAA,IAAaE,UAAAA;AAAAA,EAAAA;AAC/B,GAEaa,KAAkB5J,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,EAAA,GAC7B;AAAA,IAAA2H,MAAAA;AAAAA,IAAA1B,UAAAA;AAAAA,IAAA2B,YAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAwD,YAAAA;AAAAA,IAAAvD,aAAAA;AAAAA,IAAAkD,iBAAAA;AAAAA,IAAAM,cAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAL,aAAAA;AAAAA,IAAAM,oBAAAA;AAAAA,IAAAP,WAAAA;AAAAA,IAAAX,eAAAA;AAAAA,IAAAa,YAAAA;AAAAA,IAAApD,uBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,cAAA7H;AAAAA,EAAAA,IAkBIoB,GADFyG,IAAA7H,MAAA4B,SAAA,YAAA5B;AAGF,MAAI,CAACiL;AAAU,WAAS;AAExB,MAAIC,GAAY;AAAA,QAAAjL;AAAA,WAAAN,EAAA,CAAA,MAAA4H,KAAA5H,EAAA,CAAA,MAAAkI,KAAAlI,EAAA,CAAA,MAAAkG,KAAAlG,SAAAgI,KAAAhI,EAAA,CAAA,MAAA8H,KAAA9H,EAAA,CAAA,MAAA6H,KAAA7H,EAAA,CAAA,MAAAiI,KAEZ3H,sBAAC6I,IAAA,EACOvB,MAAAA,GACI1B,UAAAA,GACE2B,YAAAA,GACAC,YAAAA,GACC,aAAA,IACUE,uBAAAA,GACPC,gBAAAA,GACFC,cAAAA,EAAAA,CAAY,GAC1BlI,OAAA4H,GAAA5H,OAAAkI,GAAAlI,OAAAkG,GAAAlG,OAAAgI,GAAAhI,OAAA8H,GAAA9H,OAAA6H,GAAA7H,OAAAiI,GAAAjI,OAAAM,KAAAA,IAAAN,EAAA,CAAA,GATFM;AAAAA,EASE;AAIN,MAAI,CAACkL,KAAD,CAAoBC,GAAkB;AAAA,QAAAnL;AAAA,IAAAN,SAAAmL,KAAAnL,EAAA,CAAA,MAAAiL,KAAAjL,EAAA,EAAA,MAAA+H,KAAA/H,EAAA,EAAA,MAAAkL,KAAAlL,UAAAoL,KAAApL,EAAA,EAAA,MAAAiI,KACC3H,IAAA0K,GAA2B;AAAA,MAAAjD,aAAAA;AAAAA,MAAAkD,iBAAAA;AAAAA,MAAAC,WAAAA;AAAAA,MAAAC,aAAAA;AAAAA,MAAAC,YAAAA;AAAAA,MAAAnD,gBAAAA;AAAAA,IAAAA,CAOnE,GAACjI,OAAAmL,GAAAnL,OAAAiL,GAAAjL,QAAA+H,GAAA/H,QAAAkL,GAAAlL,QAAAoL,GAAApL,QAAAiI,GAAAjI,QAAAM,KAAAA,IAAAN,EAAA,EAAA;AAPF,UAAA;AAAA,MAAAoK,OAAAA;AAAAA,MAAAE,aAAAA;AAAAA,MAAAE,UAAAA;AAAAA,IAAAA,IAAyClK;AAOtC,QAAAgB;AAAA,WAAAtB,EAAA,EAAA,MAAAsK,KAAAtK,EAAA,EAAA,MAAAuK,KAAAvK,EAAA,EAAA,MAAAwK,KAAAxK,UAAAoK,KAGD9I,IAAA,gBAAAwC,EAACuG,IAAA,EAAwBD,OAAAA,GAAoBE,aAAAA,GAA4BC,eAAAA,GAAyBC,UAAAA,GAAQ,GAAIxK,QAAAsK,GAAAtK,QAAAuK,GAAAvK,QAAAwK,GAAAxK,QAAAoK,GAAApK,QAAAsB,KAAAA,IAAAtB,EAAA,EAAA,GAA9GsB;AAAAA,EAA8G;AAIlH,MAAImK,GAAkB;AAAA,QAAAnL;AAAA,WAAAN,EAAA,EAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KACb9B,sBAACoK,IAAA,EAAkB,GAAG1K,QAAAM,KAAAA,IAAAN,EAAA,EAAA,GAAtBM;AAAAA,EAAsB;AAC9B,MAAAA;AAAA,SAAAN,EAAA,EAAA,MAAA4H,KAAA5H,EAAA,EAAA,MAAAkI,KAAAlI,EAAA,EAAA,MAAAkG,KAAAlG,EAAA,EAAA,MAAAgI,KAAAhI,EAAA,EAAA,MAAA+H,KAAA/H,EAAA,EAAA,MAAA8H,KAAA9H,EAAA,EAAA,MAAA6H,KAAA7H,UAAAiI,KAGC3H,sBAAC6I,MACOvB,MAAAA,GACI1B,UAAAA,GACE2B,YAAAA,GACAC,YAAAA,GACCC,aAAAA,GACUC,uBAAAA,GACPC,gBAAAA,GACFC,cAAAA,EAAAA,CAAY,GAC1BlI,QAAA4H,GAAA5H,QAAAkI,GAAAlI,QAAAkG,GAAAlG,QAAAgI,GAAAhI,QAAA+H,GAAA/H,QAAA8H,GAAA9H,QAAA6H,GAAA7H,QAAAiI,GAAAjI,QAAAM,KAAAA,IAAAN,EAAA,EAAA,GATFM;AASE,GC9FOoL,KAA4BA,CAAC5E,MASpC;AACJ,QAAM;AAAA,IAAEwE,YAAAA;AAAAA,IAAYE,gBAAAA;AAAAA,IAAgBzD,aAAAA;AAAAA,IAAakD,iBAAAA;AAAAA,IAAiBM,cAAAA;AAAAA,IAAcI,eAAAA;AAAAA,IAAezF,UAAAA;AAAAA,EAAAA,IAAaY;AAE5G,SACEwE,KAAc,CAACE,KAAkB,CAACzD,KAAe,CAACkD,KAAmB,CAACM,KAAgBI,MAAkBzF;AAE5G,GAEa0F,KAA2BA,CAAC9E,MAInC;AACJ,QAAM;AAAA,IAAE6E,eAAAA;AAAAA,IAAezF,UAAAA;AAAAA,IAAUsF,gBAAAA;AAAAA,EAAAA,IAAmB1E;AAEpD,SAAI6E,MAAkBzF,KAAYsF,IACzB,OAGFG;AACT,GAEaE,KAAsBA,CAAC3F,MAAqB,CAACwB,GAAgBxB,CAAQ,GAErE4F,KAAsBA,CAAClE,MAAeA,EAAKmB,WAAWnB,EAAKkB,WAAW,WAE7EiD,KAAuBA,CAACjF,MASxB;AACJ,QAAM;AAAA,IAAEZ,UAAAA;AAAAA,IAAUoF,YAAAA;AAAAA,IAAYU,YAAAA;AAAAA,IAAYR,gBAAAA;AAAAA,IAAgBzD,aAAAA;AAAAA,IAAakD,iBAAAA;AAAAA,IAAiBM,cAAAA;AAAAA,IAAcH,YAAAA;AAAAA,EAAAA,IACpGtE,GACI,CAACyD,GAAe0B,CAAc,IAAIC,EAAS,EAAK,GAChD,CAACP,GAAeQ,CAAgB,IAAID,EAAwB,IAAI,GAChE,CAAChB,GAAWkB,CAAY,IAAIF,EAAS,EAAK,GAE1CG,IAAW,YAAY;AAC3B,QAAI,GAACjB,KAAcb,IAEnB4B;AAAAA,MAAAA,EAAiBjG,CAAQ,GACzBkG,EAAa,EAAK,GAClBH,EAAe,EAAI;AACnB,UAAI;AACF,cAAMb,EAAWlF,CAAQ;AAAA,MAC3B,QAAQ;AACNiG,QAAAA,EAAiB,IAAI,GACrBC,EAAa,EAAI;AAAA,MACnB,UAAA;AACEH,QAAAA,EAAe,EAAK;AAAA,MACtB;AAAA;AAAA,EACF,GAEMR,IAAqBC,GAA0B;AAAA,IACnDJ,YAAAA;AAAAA,IAEAE,gBAAAA;AAAAA,IACAzD,aAAAA;AAAAA,IACAkD,iBAAAA;AAAAA,IACAM,cAAAA;AAAAA,IACAI,eAAAA;AAAAA,IACAzF,UAAAA;AAAAA,EAAAA,CACD;AAED7E,SAAAA,GAAU,MAAM;AACd8K,IAAAA,EAAkBlL,OAAY2K,GAAyB;AAAA,MAAED,eAAe1K;AAAAA,MAASiF,UAAAA;AAAAA,MAAUsF,gBAAAA;AAAAA,IAAAA,CAAgB,CAAC;AAAA,EAC9G,GAAG,CAACtF,GAAUsF,CAAc,CAAC,GAE7BnK,GAAU,MAAM;AACd,IAAI,CAAC+J,KAAc,CAACK,KAAsBP,KAIrCmB,EAAAA;AAAAA,EACP,CAAC,GAEM;AAAA,IACL9B,eAAAA;AAAAA,IACAW,WAAAA;AAAAA,IACAO,oBAAoBa,EAAQlB,KAAeK,KAAsB,CAACP;AAAAA,IAClEmB,UAAAA;AAAAA,EAAAA;AAEJ,GAEaE,KAAW9K,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,EAAA,GACtB;AAAA,IAAA2H,MAAAA;AAAAA,IAAAoE,YAAA3L;AAAAA,IAAAiL,YAAAhL;AAAAA,IAAAkM,kBAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAArB,YAAAA;AAAAA,IAAApD,uBAAA1G;AAAAA,IAAA2G,gBAAAA;AAAAA,IAAAC,cAAA5F;AAAAA,EAAAA,IAUIb,GARFuK,IAAA3L,MAAA4B,SAAA,KAAA5B,GACAiL,IAAAhL,MAAA2B,SAAA,KAAA3B,GAIA0H,IAAA1G,MAAAW,SAAA,KAAAX,GAEA4G,IAAA5F,MAAAL,SAAA,YAAAK;AAAwB,MAAA4D,GAAA+E,GAAAlD,GAAAD,GAAAD,GAAAtF;AAAA,EAAAvC,SAAA4H,KAG1B1B,IAAiB4F,GAAoBlE,CAAI,GACzCC,IAAmBD,EAAIC,cAAJ,IACnBC,IAAmBF,EAAIE,cAAJ,IACnBC,IAAoBd,GAAmBW,CAAI,GAC3CqD,IAAwB/D,GAAoBhB,CAAQ,GAEtB3D,IADTgF,GAAiBrB,CAAQ,KAChB,CAAiBwB,GAAgBxB,CAAQ,GAAClG,OAAA4H,GAAA5H,OAAAkG,GAAAlG,OAAAiL,GAAAjL,OAAA+H,GAAA/H,OAAA8H,GAAA9H,OAAA6H,GAAA7H,OAAAuC,MAAA2D,IAAAlG,EAAA,CAAA,GAAAiL,IAAAjL,EAAA,CAAA,GAAA+H,IAAA/H,EAAA,CAAA,GAAA8H,IAAA9H,EAAA,CAAA,GAAA6H,IAAA7H,EAAA,CAAA,GAAAuC,IAAAvC,EAAA,CAAA;AAAxE,QAAA0M,IAA8BnK,GAC9BiJ,IAAuB5D,EAAIC,eAAgB5F,UAAa2F,EAAIE,eAAgB7F,QAM7De,IAAA+E,KAAA,CAAgBC;AAAqB,MAAAzE;AAAA,EAAAvD,EAAA,CAAA,MAAA0M,KAAA1M,EAAA,CAAA,MAAAkG,KAAAlG,EAAA,CAAA,MAAAwL,KAAAxL,EAAA,EAAA,MAAAsL,KAAAtL,EAAA,EAAA,MAAAiL,KAAAjL,EAAA,EAAA,MAAAgM,KAAAhM,EAAA,EAAA,MAAAoL,KAAApL,UAAAgD,KALoCO,IAAA;AAAA,IAAA2C,UAAAA;AAAAA,IAAAoF,YAAAA;AAAAA,IAAAU,YAAAA;AAAAA,IAAAR,gBAAAA;AAAAA,IAAAzD,aAKzE/E;AAAAA,IAAqCiI,iBAAAA;AAAAA,IAAAM,cAEpCmB;AAAAA,IAAqBtB,YAAAA;AAAAA,EAAAA,GAEpCpL,OAAA0M,GAAA1M,OAAAkG,GAAAlG,OAAAwL,GAAAxL,QAAAsL,GAAAtL,QAAAiL,GAAAjL,QAAAgM,GAAAhM,QAAAoL,GAAApL,QAAAgD,GAAAhD,QAAAuD,KAAAA,IAAAvD,EAAA,EAAA;AATD,QAAA;AAAA,IAAAuK,eAAAA;AAAAA,IAAAW,WAAAA;AAAAA,IAAAO,oBAAAA;AAAAA,IAAAY,UAAAA;AAAAA,EAAAA,IAAmEN,GAAqBxI,CASvF,GAMgBC,IAAAwI,IAAA,kBAAA;AAA8C,MAAAvI;AAAA,EAAAzD,EAAA,EAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAOnDqB,IAAA;AAAA,IAAAkJ,aAAe;AAAA,EAAA,GAAiB3M,QAAAyD,KAAAA,IAAAzD,EAAA,EAAA;AAAA,MAAAwE;AAAA,EAAAxE,EAAA,EAAA,MAAA4H,KAAA5H,UAAAsL,KAAAtL,EAAA,EAAA,MAAAwM,KAGxChI,sBAACoI,IAAA,EAAqBhF,MAAAA,GAAkB0D,YAAAA,GAA8BkB,kBAAAA,GAAgB,GAAIxM,QAAA4H,GAAA5H,QAAAsL,GAAAtL,QAAAwM,GAAAxM,QAAAwE,KAAAA,IAAAxE,EAAA,EAAA;AAY3E,QAAA6M,IAAAP,EAAQlB;AAAW,MAAA0B;AAAA,EAAA9M,EAAA,EAAA,MAAA0M,KAAA1M,EAAA,EAAA,MAAA4H,KAAA5H,EAAA,EAAA,MAAAkI,KAAAlI,EAAA,EAAA,MAAAkG,KAAAlG,EAAA,EAAA,MAAAwL,KAAAxL,UAAAgI,KAAAhI,EAAA,EAAA,MAAAsL,KAAAtL,EAAA,EAAA,MAAAiL,KAAAjL,EAAA,EAAA,MAAA+H,KAAA/H,EAAA,EAAA,MAAAuK,KAAAvK,EAAA,EAAA,MAAAqM,KAAArM,EAAA,EAAA,MAAAkL,KAAAlL,EAAA,EAAA,MAAA8H,KAAA9H,EAAA,EAAA,MAAA6H,KAAA7H,EAAA,EAAA,MAAAiI,KAAAjI,EAAA,EAAA,MAAAyL,KAAAzL,UAAA6M,KAVlCC,sBAACzB,MACOzD,MAAAA,GACI1B,UAAAA,GACE2B,YAAAA,GACAC,YAAAA,GACAwD,YAAAA,GACCvD,aAAAA,GACIkD,iBAAAA,GACHyB,cAAAA,GACElB,gBAAAA,GACH,aAAAqB,GACOpB,oBAAAA,GACTP,WAAAA,GACIX,eAAAA,GACH8B,YAAAA,GACWrE,uBAAAA,GACPC,gBAAAA,GACFC,cAAAA,EAAAA,CAAY,GAC1BlI,QAAA0M,GAAA1M,QAAA4H,GAAA5H,QAAAkI,GAAAlI,QAAAkG,GAAAlG,QAAAwL,GAAAxL,QAAAgI,GAAAhI,QAAAsL,GAAAtL,QAAAiL,GAAAjL,QAAA+H,GAAA/H,QAAAuK,GAAAvK,QAAAqM,GAAArM,QAAAkL,GAAAlL,QAAA8H,GAAA9H,QAAA6H,GAAA7H,QAAAiI,GAAAjI,QAAAyL,GAAAzL,QAAA6M,GAAA7M,QAAA8M,KAAAA,IAAA9M,EAAA,EAAA;AAAA,MAAA+M;AAAA,SAAA/M,EAAA,EAAA,MAAAyM,KAAAzM,EAAA,EAAA,MAAA8M,KAAA9M,EAAA,EAAA,MAAAwD,KAAAxD,UAAAwE,KAjCJuI,IAAA,gBAAA9C,EAACZ,KACa,eAAA,aACL,QAAA,aACM,aAAA7F,GACA,cAAA,MACJ,UAAA,WACN,IAAA,MACG,OAAA,QACD,MAAA,QACM,YAAA,2BACH,QAAAC,GACCgJ,SAAAA,GAETjI,UAAAA;AAAAA,IAAAA;AAAAA,IAEAsI;AAAAA,EAAAA,GAmBF,GAAM9M,QAAAyM,GAAAzM,QAAA8M,GAAA9M,QAAAwD,GAAAxD,QAAAwE,GAAAxE,QAAA+M,KAAAA,IAAA/M,EAAA,EAAA,GAlCN+M;AAkCM,GAIGH,KAAiBnL,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,EAAA,GAC5B;AAAA,IAAA2H,MAAAA;AAAAA,IAAA0D,YAAAjL;AAAAA,IAAAmM,kBAAAA;AAAAA,EAAAA,IAAsD/K,GAAxC6J,IAAAjL,MAAA4B,SAAA,KAAA5B;AAAiB,MAAA0G,GAAAC,GAAAd,GAAA5F;AAAA,EAAAN,SAAA4H,KAC/B1B,IAAiB4F,GAAoBlE,CAAI,GACzCb,IAAkBa,EAAIb,aAAJ,GAClBC,IAAkBY,EAAIZ,aAAJ,GACA1G,IAAAuL,GAAoB3F,CAAQ,GAAClG,OAAA4H,GAAA5H,OAAA+G,GAAA/G,OAAAgH,GAAAhH,OAAAkG,GAAAlG,OAAAM,MAAAyG,IAAA/G,EAAA,CAAA,GAAAgH,IAAAhH,EAAA,CAAA,GAAAkG,IAAAlG,EAAA,CAAA,GAAAM,IAAAN,EAAA,CAAA;AAA/C,QAAAgN,IAAkB1M,GAClB,CAAA2M,GAAAC,CAAA,IAAgChB,EAAS,EAAK,GAC9CiB,IAA4BpM,EAAsB,IAAI;AAAE,MAAAO,GAAAgB;AAAA,EAAAtC,EAAA,CAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAE9Cd,IAAAA,MACD,MAAA;AACL,IAAI6L,EAAmBlM,YAAa,QAClCmM,OAAMC,aAAcF,EAAmBlM,OAAQ;AAAA,EAChD,GAEFqB,IAAA,CAAA,GAAEtC,OAAAsB,GAAAtB,OAAAsC,MAAAhB,IAAAtB,EAAA,CAAA,GAAAsC,IAAAtC,EAAA,CAAA,IANLqB,GAAUC,GAMPgB,CAAE;AAAC,MAAAC;AAAA,EAAAvC,SAAAkG,KAEe3D,gBAAA;AACnB,QAAA;AACE,YAAM+K,UAASC,UAAUC,UAAWtH,CAAQ,GAC5CgH,EAAY,EAAI,GACZC,EAAmBlM,YAAa,QAClCmM,OAAMC,aAAcF,EAAmBlM,OAAQ,GAEjDkM,EAAmBlM,UAAWmM,OAAMK,WAAY,MAAMP,EAAY,EAAK,GAAG,IAAI;AAAA,IAAnD,QAAA;AAE3BA,MAAAA,EAAY,EAAK;AAAA,IAAC;AAAA,EACnB,GACFlN,OAAAkG,GAAAlG,OAAAuC,KAAAA,IAAAvC,EAAA,CAAA;AAXD,QAAA0N,IAAqBnL,GAqBHS,IAAAsI,IAAA,cAAA,QAGM/H,IAAA+H,IAAA,MAAA;AAAuB,MAAA9H;AAAA,EAAAxD,EAAA,CAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAOnCoB,IAAA;AAAA,IAAAmK,IAAM;AAAA,EAAA,GAAM3N,OAAAwD,KAAAA,IAAAxD,EAAA,CAAA;AAAA,MAAAyD;AAAA,EAAAzD,UAAAwM,KACX/I,IAAAA,MAAM+I,IAAAA,GAAoBxM,QAAAwM,GAAAxM,QAAAyD,KAAAA,IAAAzD,EAAA,EAAA;AAIrB,QAAAwE,IAAA8G,IAAA,aAAA;AAAkC,MAAAuB;AAAA,EAAA7M,UAAAwM,KAGrCK,IAAAe,CAAAA,MAAA;AACPA,IAAAA,EAAKC,gBAAAA,GACLrB,IAAAA;AAAAA,EAAoB,GACrBxM,QAAAwM,GAAAxM,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA;AAAA,MAAA8M;AAAA,EAAA9M,UAAAsL,KAGAwB,IAAAxB,sBAAcwC,IAAA,EAAkB,MAAA,IAAE,IAAO,gBAAAhK,EAACiK,IAAA,EAAmB,MAAA,GAAA,CAAE,GAAI/N,QAAAsL,GAAAtL,QAAA8M,KAAAA,IAAA9M,EAAA,EAAA;AAAA,MAAA+M;AAAA,EAAA/M,EAAA,EAAA,MAAA6M,KAAA7M,UAAA8M,KAAA9M,EAAA,EAAA,MAAAwE,KAVtEuI,IAAA,gBAAAjJ,EAACkK,IAAA,EACa,cAAAxJ,GACJ,SAAA,SACH,MAAA,OACI,SAAAqI,GAIG,YAAA,GAEXC,UAAAA,GACH,GAAa9M,QAAA6M,GAAA7M,QAAA8M,GAAA9M,QAAAwE,GAAAxE,QAAA+M,KAAAA,IAAA/M,EAAA,EAAA;AAAA,MAAAiO;AAAA,EAAAjO,UAAA4H,EAAAsG,UAAAlO,UAAA4H,EAAAmB,WAAA/I,UAAA4H,EAAAkB,WAAA9I,UAAAkG,KAIR+H,IAAArG,EAAIsG,WAAY,YACf,gBAAAjE,EAACF,KAAQ,IAAA,QAAiB,WAAA,MACxB,UAAA;AAAA,IAAA,gBAAAjG,EAACiG,GAAA,EAAQ,IAAA,QAAa,OAAA,YAA0B,gBAAA,gBAAkB,IAAA,MAC/DnC,UAAAA,EAAIkB,QAAAA,CACP;AAAA,sBACCO,GAAA,EAAO,IAAA,QAAe,SAAA,eAAyB,YAAA,UAAuB,eAAA,UAAY,IAAA,MACjF,UAAA,gBAAAvF,EAACiK,IAAA,EAAmB,MAAA,IAAE,GACxB;AAAA,IACCnG,EAAImB;AAAAA,EAAAA,EAAAA,CACP,IACEnB,EAAIsG,WAAY,8BACjBnE,GAAA,EAAQ,IAAA,QAAa,OAAA,YAA0B,gBAAA,gBAAyB,WAAA,MACtE7D,aACH,IAEA,gBAAApC,EAACiG,KAAQ,IAAA,QAAiB,WAAA,MACvB7D,UAAAA,EAAAA,CACH,GACDlG,EAAA,EAAA,IAAA4H,EAAAsG,QAAAlO,EAAA,EAAA,IAAA4H,EAAAmB,SAAA/I,EAAA,EAAA,IAAA4H,EAAAkB,SAAA9I,QAAAkG,GAAAlG,QAAAiO,KAAAA,IAAAjO,EAAA,EAAA;AAAA,MAAAmO;AAAA,EAAAnO,EAAA,EAAA,MAAAkG,KAAAlG,UAAAiO,KAnBHE,IAAA,gBAAArK,EAACuF,GAAA,EAAU,MAAA,GAAY,UAAA,UAAsB,cAAA,YAAsB,YAAA,UAAgBnD,OAAAA,GAChF+H,UAAAA,GAmBH,GAAMjO,QAAAkG,GAAAlG,QAAAiO,GAAAjO,QAAAmO,KAAAA,IAAAnO,EAAA,EAAA;AAGK,QAAAoO,IAAAnB,IAAA,MAAA,KACMoB,IAAApB,IAAA,SAAA;AAA0B,MAAAqB;AAAA,EAAAtO,EAAA,EAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAEpCkM,IAAA;AAAA,IAAA,6FAC0F;AAAA,MAAAC,SAClF;AAAA,MAACC,eACK;AAAA,IAAA;AAAA,EACjB,GACDxO,QAAAsO,KAAAA,IAAAtO,EAAA,EAAA;AAEiB,QAAAyO,IAAAxB,IAAA,WAAA,kBAEFyB,IAAAzB,IAAA,WAAA;AAAsC,MAAA0B;AAAA,EAAA3O,UAAA0N,KAGzCiB,IAAAC,CAAAA,MAAA;AACPhB,IAAAA,EAAKC,gBAAAA,GACAH,EAAAA;AAAAA,EAAc,GACpB1N,QAAA0N,GAAA1N,QAAA2O,KAAAA,IAAA3O,EAAA,EAAA;AAAA,MAAA6O;AAAA,EAAA7O,UAAAiN,KAGA4B,IAAA5B,sBAAY6B,IAAA,EAAY,MAAA,IAAE,IAAO,gBAAAhL,EAACiL,IAAA,EAAW,MAAA,GAAA,CAAE,GAAI/O,QAAAiN,GAAAjN,QAAA6O,KAAAA,IAAA7O,EAAA,EAAA;AAAA,MAAAgP;AAAA,EAAAhP,EAAA,EAAA,MAAA0O,KAAA1O,UAAA2O,KAAA3O,EAAA,EAAA,MAAA6O,KAVtDG,IAAA,gBAAAlL,EAACkK,IAAA,EACa,cAAAU,GACJ,SAAA,SACH,MAAA,OACI,SAAAC,GAIG,YAAA,GAEXE,UAAAA,GACH,GAAa7O,QAAA0O,GAAA1O,QAAA2O,GAAA3O,QAAA6O,GAAA7O,QAAAgP,KAAAA,IAAAhP,EAAA,EAAA;AAAA,MAAAiP;AAAA,EAAAjP,EAAA,EAAA,MAAAyO,KAAAzO,UAAAgP,KAZfC,IAAA,gBAAAnL,EAACoL,IAAA,EAAiB,SAAAT,GAChBO,UAAAA,GAYF,GAAUhP,QAAAyO,GAAAzO,QAAAgP,GAAAhP,QAAAiP,KAAAA,IAAAjP,EAAA,EAAA;AAAA,MAAAmP;AAAA,EAAAnP,EAAA,EAAA,MAAAoO,KAAApO,UAAAqO,KAAArO,EAAA,EAAA,MAAAiP,KAxBZE,IAAA,gBAAArL,EAACuF,GAAA,EACU,SAAA+E,GACM,eAAAC,GACJ,YAAA,sBACN,KAAAC,GAOLW,UAAAA,EAAAA,CAcF,GAAMjP,QAAAoO,GAAApO,QAAAqO,GAAArO,QAAAiP,GAAAjP,QAAAmP,KAAAA,IAAAnP,EAAA,EAAA;AAAA,MAAAoP;AAAA,EAAApP,EAAA,EAAA,MAAAmO,KAAAnO,UAAAmP,KAhDRC,IAAA,gBAAAnF,EAACN,IAAA,EAAqB,iBAAA,+BAAyC,YAAA,UAAwB,gBAAA,SAAY,KAAA,OAAY,SAC7GwE,UAAAA;AAAAA,IAAAA;AAAAA,IAsBAgB;AAAAA,EAAAA,GA0BF,GAAOnP,QAAAmO,GAAAnO,QAAAmP,GAAAnP,QAAAoP,KAAAA,IAAApP,EAAA,EAAA;AAAA,MAAAqP;AAAA,EAAArP,EAAA,EAAA,MAAA+G,KAAA/G,UAAAgH,KAAAhH,EAAA,EAAA,MAAAgN,KAENqC,IAAArC,IACC,gBAAAlJ,EAACuF,GAAA,EAAgB,YAAA,GACf,UAAA,gBAAAvF,EAACwL,IAAA,EAAmB,SAAA,SAAmBvI,WAAAA,GAAsBC,WAAAA,EAAAA,CAAS,EAAA,CACxE,IAHD,MAIOhH,QAAA+G,GAAA/G,QAAAgH,GAAAhH,QAAAgN,GAAAhN,QAAAqP,KAAAA,IAAArP,EAAA,EAAA;AAAA,MAAAuP;AAAA,SAAAvP,UAAA+M,KAAA/M,EAAA,EAAA,MAAAoP,KAAApP,EAAA,EAAA,MAAAqP,KAAArP,EAAA,EAAA,MAAAgD,KAAAhD,UAAAuD,KAAAvD,EAAA,EAAA,MAAAyD,KAzFV8L,sBAAC5F,IAAA,EACa,eAAA,oBACI,iBAAA,4BACb,IAAA,MACA,IAAA,OACQ,YAAA,UACI,gBAAA,iBACD,cAAA3G,GACF,aAAA,iBACI,iBAAA,MACI,oBAAAO,GACX,UAAA,UACL,KAAA,KACG,QAAA,KACJ,IAAA,MACI,QAAA,WACI,YAAA,yBACH,QAAAC,GACC,SAAAC,GACL,KAAA,MAEJsJ,UAAAA;AAAAA,IAAAA;AAAAA,IAaAqC;AAAAA,IAmDCC;AAAAA,EAAAA,GAKH,GAAOrP,QAAA+M,GAAA/M,QAAAoP,GAAApP,QAAAqP,GAAArP,QAAAgD,GAAAhD,QAAAuD,GAAAvD,QAAAyD,GAAAzD,QAAAuP,KAAAA,IAAAvP,EAAA,EAAA,GA1FPuP;AA0FO,GCnUEC,KAAuBA,MAAA;AAAA,QAAAxP,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,EAAA,CAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAClC/B,sBAACsK,IAAA,EAAQ,GAAA,QAAY,MAAA,KAAQ,KAAA,KAAO,IAAA,MAClC,4BAAC8E,IAAA,EAAgB,MAAA,KAAS,MAAA,KAAkB,cAAA;AAAA,IAAAC,GAAK;AAAA,IAAIC,QAAU;AAAA,EAAA,GAC7D,UAAA,gBAAA7L,EAACqG,IAAA,EAAiB,OAAA,uBAAkC,aAAA,2CAAmD,UAAA,MAAI,EAAA,CAC7G,EAAA,CACF,GAAQnK,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAJRK;AAIQ,GCJJuP,KAAqB,IACrBC,KAAwB,IACxBC,KAAkB,IAClBC,KAAwB,IACxBC,KAAuB,IACvBC,KAAoB,KACpBC,KAAkB,GASlBC,KAAqBA,MAAMP,KAAqBI,KAAuBE,IAIhEE,KAAyBA,CAACtJ,MAAuC;AAC5E,QAAM;AAAA,IAAEc,MAAAA;AAAAA,IAAMyI,aAAAA;AAAAA,IAAarI,uBAAAA,IAAwB;AAAA,IAAOE,cAAAA,IAAe;AAAA,EAAA,IAAcpB;AAEvF,MAAIuJ,UAAoBN,KAAwBG;AAEhD,QAAM1E,IAAiB5D,EAAKC,eAAe5F,UAAa2F,EAAKE,eAAe7F,QACtEiE,IAAW0B,EAAKmB,WAAWnB,EAAKkB,WAAW;AACjD,MAAIpB,GAAgBxB,CAAQ,MAAM0B,EAAKC,cAAcD,EAAKE;AACxD,WAAO8H,KAAqBK,KAAoBC;AAIlD,MAFI3I,GAAiBrB,CAAQ,KACzB,CAACsF,KACDvE,GAAmBW,CAAI,KAAK,CAACI,UAA8BmI,GAAAA;AAE/D,QAAM;AAAA,IAAEG,oBAAAA;AAAAA,IAAoBC,kBAAAA;AAAAA,IAAkBC,UAAAA;AAAAA,EAAAA,IAAa3H,GAAkB;AAAA,IAC3ElE,UAAUiD,EAAKC,cAAc;AAAA,IAC7BjD,UAAUgD,EAAKE,cAAc;AAAA,IAC7BgB,SAASlB,EAAKkB;AAAAA,IACdC,SAASnB,EAAKmB;AAAAA,EAAAA,CACf,GACK0H,IAAcvI,MAAiB,UAAUqI,IAAmBD;AAClE,MAAIG,MAAgB,KAAKD,MAAa,UAAUL,GAAAA;AAEhD,QAAMO,IAAaD,IAAcZ,KAAwBW,IAAWV;AACpE,SAAOF,KAAqBc,IAAaR;AAC3C,GChCMS,KAAcA,CAAC/I,MAAeA,EAAKmB,WAAWnB,EAAKkB,WAAW,WAC9D8H,KAA+B,IAExBC,KAA6BA,CAAC/J,MAA2C;AACpF,QAAM;AAAA,IAAEgK,OAAAA;AAAAA,IAAOC,kBAAAA;AAAAA,IAAkBC,gBAAAA;AAAAA,IAAgBC,kBAAAA;AAAAA,IAAkBC,0BAAAA;AAAAA,EAAAA,IAA6BpK;AAChG,MAAIqK,IAAqBJ,GACrBK,IAA0BL,IAAmB,YAAYA,CAAgB,KAAK;AAClF,QAAMM,IAA0BJ,GAAkBK,WAAW,oBAAoBL,EAAiBzQ,KAAK,MACjG+Q,IACJF,MAA4B,QAAQH,MAA6BG;AAEnE,EAAIJ,GAAkBK,WAAW,qBAAqBL,EAAiB9J,SACrEgK,IAAqBF,EAAiB9J,MACtCiK,IAA0B,WAAWH,EAAiBzQ,EAAE,IAAIyQ,EAAiB9J,IAAI;AAGnF,MAAIqK,IAAoBJ;AACxB,MAAID,KAAsBC,GAAyB;AACjD,UAAMK,IAA+BT,EAAe3J,IAAI8J,CAAkB,IAAI,cAAc;AAC5FK,IAAAA,IAAoB,GAAGJ,CAAuB,IAAIK,CAA4B;AAAA,EAChF;AAEA,QAAMC,IAAsBP,IACxBL,EAAMa,UAAW/J,OAAS+I,GAAY/I,CAAI,MAAMuJ,CAAkB,IAClE,IACES,IACJF,KAAuB,KACvBT,GAAkBK,WAAW,qBAC7BL,EAAiBY,cAAc,QAC/B,CAACN;AAEH,SAAO;AAAA,IACLJ,oBAAAA;AAAAA,IACAK,mBAAAA;AAAAA,IACAH,yBAAAA;AAAAA,IACAK,qBAAAA;AAAAA,IACAE,8BAAAA;AAAAA,IACAL,4BAAAA;AAAAA,EAAAA;AAEJ,GAEaO,KAA2BA,CAAChL,MAInC;AACJ,QAAM;AAAA,IAAEiL,SAAAA;AAAAA,IAASL,qBAAAA;AAAAA,IAAqBE,8BAAAA;AAAAA,EAAAA,IAAiC9K;AACvE,MAAI,CAAC8K,KAAgCG,EAAQC,SAASN,CAAmB,EAAG,QAAOK;AAEnF,QAAME,IAAmBC,KAAKC,IAAI,GAAGT,IAAsBd,EAA4B,GACjFwB,IAAgBC,MAAMC,KAC1B;AAAA,IAAE7K,QAAQiK,IAAsBO,IAAmB;AAAA,EAAA,GACnD,CAACjN,GAAGuN,MAAUN,IAAmBM,CACnC;AAEA,SAAOF,MAAMC,KAAK,oBAAI3L,IAAI,CAAC,GAAGoL,GAAS,GAAGK,CAAa,CAAC,CAAC,EAAEI,KAAK,CAACC,GAAGC,MAAMD,IAAIC,CAAC;AACjF,GCvDMC,KAAqB,GACrBC,KAAuB,IAEvBjC,KAAcA,CAAC/I,MAAeA,EAAKmB,WAAWnB,EAAKkB,WAAW,WAEvD+J,KAAwB/L,CAAAA,MAAA;AAAA,QAAA9G,IAAAC,EAAA,EAAA,GACnC;AAAA,IAAA6Q,OAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,IAAA6B,WAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,yBAAAA;AAAAA,EAAAA,IAQIlM,GACJ,CAAAoK,GAAA+B,CAAA,IAAgE/G,EAAwB,IAAI;AAAE,MAAA7L;AAAA,EAAAL,EAAA,CAAA,MAAAgR,KAAAhR,EAAA,CAAA,MAAAkR,KAAAlR,EAAA,CAAA,MAAA8Q,KAAA9Q,EAAA,CAAA,MAAAiR,KAAAjR,SAAA+Q,KAQ1F1Q,IAAAwQ,GAA2B;AAAA,IAAAC,OAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,IAAAC,0BAAAA;AAAAA,EAAAA,CAM9B,GAAClR,OAAAgR,GAAAhR,OAAAkR,GAAAlR,OAAA8Q,GAAA9Q,OAAAiR,GAAAjR,OAAA+Q,GAAA/Q,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAbF,QAAA;AAAA,IAAAmR,oBAAAA;AAAAA,IAAAK,mBAAAA;AAAAA,IAAAH,yBAAAA;AAAAA,IAAAK,qBAAAA;AAAAA,IAAAE,8BAAAA;AAAAA,IAAAL,4BAAAA;AAAAA,EAAAA,IAOIlR;AAMD,MAAAC,GAAAgB;AAAA,EAAAtB,EAAA,CAAA,MAAAgR,KAAAhR,EAAA,CAAA,MAAA8Q,KAAA9Q,SAAAuR,KAAAvR,EAAA,CAAA,MAAA8S,KAAA9S,EAAA,EAAA,MAAAqR,KAAArR,EAAA,EAAA,MAAAwR,KAAAxR,EAAA,EAAA,MAAAmR,KAAAnR,EAAA,EAAA,MAAAgT,KAAAhT,UAAA+S,KAEazS,IAAAA,MAAA;AAMd,QALI,CAAC6Q,KAAD,CAAwBK,KACxBD,KAIAP,EAAc3J,IAAK8J,CAAkB;AAAC;AAE1C,UAAAoB,IAAczB,EAAKa,UAAW/J,OAAU+I,GAAY/I,CAAI,MAAMuJ,CAAkB;AAChF,QAAIoB,IAAQ;AAAC;AAEb,UAAAW,IAAoBH,EAAc9R,SAClCkS,IAAsBL,EAAS7R;AAC/B,QAAI,CAACiS,KAAD,CAAiBC;AAAa;AAElC,UAAAC,IAA2B,CAAA;AAC3B,QAAAC,IAA4B;AAI5BL,IAAAA,EAAuB/R,UAAW;AAClC,UAAAqS,IAAqBA,MAAA;AACnBN,MAAAA,EAAuB/R,UAAW;AAAA,IAAH,GAEjCsS,IAA6BA,MAAA;AAC3BF,MAAAA,IAAwBA,IACxBC,EAAAA,GACIjC,MAA4B,QAC9B4B,EAA4B5B,CAAuB;AAAA,IACpD;AAGH,QAAAmC,IAAsB;AACtB,UAAAC,IAA0BA,MAAA;AACxB,UAAIJ,CAAAA,GAGJ;AAAA,YAFAH,EAAWQ,cAAenB,GAAO;AAAA,UAAAoB,OAAS;AAAA,QAAA,CAAS,GACnDH,IAAAA,IAAmB,GACfA,KAAmBb,MAAsBtB,MAA4B,MAAI;AAC3EiC,UAAAA,EAAAA,GACAL,EAA4B5B,CAAuB;AAAC;AAAA,QAAA;AAGtD,YAAImC,IAAkBZ,IAAoB;AACxCQ,UAAAA,EAAQQ,KAAMC,sBAAsBJ,CAAiB,CAAC;AAAC;AAAA,QAAA;AAGzDH,QAAAA,EAAAA;AAAAA;AAAAA,IAAc;AAGhBH,WAAAA,EAAaW,iBAAkB,SAASP,GAAsB;AAAA,MAAAQ,SAAW;AAAA,IAAA,CAAM,GAC/EZ,EAAaW,iBAAkB,aAAaP,GAAsB;AAAA,MAAAQ,SAAW;AAAA,IAAA,CAAM,GACnFN,EAAAA,GAEO,MAAA;AACLH,MAAAA,EAAAA,GACAH,EAAaa,oBAAqB,SAAST,CAAoB,GAC/DJ,EAAaa,oBAAqB,aAAaT,CAAoB;AACnE,iBAAKU,KAAiBb;AACpBc,6BAAqBD,CAAO;AAAA,IAC7B;AAAA,EACF,GACA3S,KACDkQ,GACAL,GACAE,GACAE,GACAT,GACAE,GACA8B,GACAC,GACAC,CAAuB,GACxBhT,OAAAgR,GAAAhR,OAAA8Q,GAAA9Q,OAAAuR,GAAAvR,OAAA8S,GAAA9S,QAAAqR,GAAArR,QAAAwR,GAAAxR,QAAAmR,GAAAnR,QAAAgT,GAAAhT,QAAA+S,GAAA/S,QAAAM,GAAAN,QAAAsB,MAAAhB,IAAAN,EAAA,EAAA,GAAAsB,IAAAtB,EAAA,EAAA,IAvEDmU,GAAgB7T,GA6DbgB,CAUF;AAAC,MAAAgB;AAAA,SAAAtC,EAAA,EAAA,MAAA0R,KAAA1R,UAAA4R,KAEKtP,IAAA;AAAA,IAAAoP,qBAAAA;AAAAA,IAAAE,8BAAAA;AAAAA,EAAAA,GAAqD5R,QAAA0R,GAAA1R,QAAA4R,GAAA5R,QAAAsC,KAAAA,IAAAtC,EAAA,EAAA,GAArDsC;AAAqD,GCtFxDqO,KAAcA,CAAC/I,MAAeA,EAAKmB,WAAWnB,EAAKkB,WAAW,WAE9DsL,KAA8B,IAC9BC,KAAmC,KAE5BC,KAA6BA,CAACxD,MACrCA,EAAMrJ,UAAU2M,yBAAwCzN,IAAAA,IAErD,IAAIA,IACTmK,EACGyD,OAAO,CAAC3M,GAAM2K,MAAU;AACvB,QAAMiC,KAAa5M,EAAKb,aAAa,MAAMa,EAAKZ,aAAa;AAC7D,SAAOuL,KAAS6B,MAA+BI,IAAYH;AAC7D,CAAC,EACAzJ,IAAKhD,OAAS+I,GAAY/I,CAAI,CAAC,CACpC,GAGW6M,KAAyBA,CAAC3D,MAAkB,IAAInK,IAAImK,EAAMlG,IAAKhD,CAAAA,MAAS+I,GAAY/I,CAAI,CAAC,CAAC,GAE1F8M,KAAsBA,CAAC1D,GAA6B7J,MAAiB;AAChF,QAAMwN,IAAO,IAAIhO,IAAIqK,CAAc;AACnC,SAAI2D,EAAKtN,IAAIF,CAAI,IACfwN,EAAKC,OAAOzN,CAAI,IAEhBwN,EAAKE,IAAI1N,CAAI,GAERwN;AACT,GAEaG,KAAuCA,CAClDhE,GACAE,GACAD,MACG;AAGH,MAFI,CAACA,KACD,CAACC,EAAe3J,IAAI0J,CAAgB,KACpC,CAACD,EAAMiE,KAAMnN,CAAAA,MAAS+I,GAAY/I,CAAI,MAAMmJ,CAAgB,EAAG,QAAOC;AAE1E,QAAM2D,IAAO,IAAIhO,IAAIqK,CAAc;AACnC2D,SAAAA,EAAKC,OAAO7D,CAAgB,GACrB4D;AACT,GAMaK,KAAqCA,CAChDlE,GACAE,GACAD,GACAkE,MACG;AACH,QAAMC,IAAWJ,GAAqChE,GAAOE,GAAgBD,CAAgB;AAC7F,MACE,CAACkE,KACDA,MAA0BlE,KAC1BmE,EAAS7N,IAAI4N,CAAqB,KAClC,CAACnE,EAAMiE,KAAMnN,CAAAA,MAAS+I,GAAY/I,CAAI,MAAMqN,CAAqB;AAEjE,WAAOC;AAGT,QAAMP,IAAOO,MAAalE,IAAiB,IAAIrK,IAAIqK,CAAc,IAAIkE;AACrEP,SAAAA,EAAKE,IAAII,CAAqB,GACvBN;AACT;AAEO,SAASQ,GAAW1T,GAAwB;AACjD,QAAM;AAAA,IACJqP,OAAAA;AAAAA,IACAC,kBAAAA,IAAmB;AAAA,IACnB3F,YAAAA;AAAAA,IACAgK,kBAAAA;AAAAA,IACAC,wBAAAA;AAAAA,IACApE,kBAAAA,IAAmB;AAAA,IACnB/I,cAAAA,IAAe;AAAA,EAAA,IACbzG,GACEqR,IAAY/R,EAAuB,IAAI,GACvCuU,IAA4BvU,EAAwC,IAAI,GAKxEgS,IAAiBhS,EAAoD,IAAI,GACzEiS,IAA0BjS,EAAO,EAAK,GACtCwU,IAAuBxU,EAAsB,IAAI,GACjD,CAACiQ,GAAgBwE,CAAiB,IAAItJ,EAAsB,MAAMoI,GAA2BxD,CAAK,CAAC,GACnG,CAAC2E,GAAqBC,CAAsB,IAAIxJ,EAAsB,MAAM,oBAAIvF,KAAK,GACrF;AAAA,IAAE+K,qBAAAA;AAAAA,IAAqBE,8BAAAA;AAAAA,EAAAA,IAAiCiB,GAAsB;AAAA,IAClF/B,OAAAA;AAAAA,IACAC,kBAAAA;AAAAA,IACAC,gBAAAA;AAAAA,IACAC,kBAAAA;AAAAA,IACA6B,WAAAA;AAAAA,IACAC,gBAAAA;AAAAA,IACAC,yBAAAA;AAAAA,EAAAA,CACD,GAEKE,IAAcyC,GAAe;AAAA,IACjCC,OAAO9E,EAAMrJ;AAAAA,IACboO,kBAAkBA,MAAM/C,EAAU7R;AAAAA,IAClC6U,cAAevD,CAAAA,MAAU;AACvB,YAAM3K,IAAOkJ,EAAMyB,CAAK,GAClBpL,IAAOwJ,GAAY/I,CAAI;AAC7B,aAAOwI,GAAuB;AAAA,QAC5BxI,MAAAA;AAAAA,QACAyI,aAAaW,EAAe3J,IAAIF,CAAI;AAAA,QACpCa,uBAAuByN,EAAoBpO,IAAIF,CAAI;AAAA,QACnDe,cAAAA;AAAAA,MAAAA,CACD;AAAA,IACH;AAAA,IACA6N,YAAaxD,CAAAA,MAAU5B,GAAYG,EAAMyB,CAAK,CAAC;AAAA,IAC/CyD,UAAU;AAAA,IACVC,gBAAiBC,CAAAA,MAAU;AACzB,YAAMnE,IAAUoE,GAAsBD,CAAK;AAC3C,aAAOpE,GAAyB;AAAA,QAAEC,SAAAA;AAAAA,QAASL,qBAAAA;AAAAA,QAAqBE,8BAAAA;AAAAA,MAAAA,CAA8B;AAAA,IAChG;AAAA,EAAA,CACD;AAgDD,MA/CAsB,EAAYkD,6CAA6C,CAACC,GAAOC,GAAQC,MACvE,CAACA,EAASC,eAAe,CAACxD,EAAwB/R,SACpD8R,EAAe9R,UAAUiS,GAEzBiB,GAAgB,MAAM;AACpB,IAAKpD,KAELyE,EAAmBiB,CAAAA,MAAS3B,GAAqChE,GAAO2F,GAAM1F,CAAgB,CAAC;AAAA,EACjG,GAAG,CAACD,GAAOC,CAAgB,CAAC,GAE5BoD,GAAgB,MAAM;AACpB,QAAKlD,GAEL;AAAA,UAAIA,EAAiBK,WAAW,mBAAmB;AACjD,cAAMoF,IAAgBzF,EAAiB9J;AACvC,YAAIuP,GAAe;AACjB,gBAAMzB,IAAwBM,EAAqBtU;AACnDsU,UAAAA,EAAqBtU,UAAUyV,GAC/BlB,EAAmBiB,OACjBzB,GAAmClE,GAAO2F,GAAMC,GAAezB,CAAqB,CACtF;AAAA,QACF;AACA;AAAA,MACF;AAGAM,MAAAA,EAAqBtU,UAAU,MAC/BuU,EAAkBvE,EAAiBK,WAAW,aAAamD,GAAuB3D,CAAK,IAAI,oBAAInK,KAAK;AAAA;AAAA,EACtG,GAAG,CAACmK,GAAOG,CAAgB,CAAC,GAE5B5P,GAAU,MAAM;AACd,UAAMsV,IAAiB;AAAA,MACrBC,aAAa5F,EAAe6F,SAAS;AAAA,MACrCC,cAAchG,EAAMrJ,SAAS,KAAKqJ,EAAMiG,MAAOnP,CAAAA,MAASoJ,EAAe3J,IAAIsJ,GAAY/I,CAAI,CAAC,CAAC;AAAA,IAAA,GAEzFoP,IAAyB1B,EAA0BrU;AACzD,IACE+V,GAAwBJ,gBAAgBD,EAAeC,eACvDI,EAAuBF,iBAAiBH,EAAeG,iBAKzDxB,EAA0BrU,UAAU0V,GACpCtB,IAAyBsB,CAAc;AAAA,EACzC,GAAG,CAAC3F,GAAgBF,GAAOuE,CAAsB,CAAC,GAE9CvE,EAAMrJ,WAAW,EAAG,0BAAQ+H,IAAA,EAAoB;AAEpD,QAAMyH,IAAiBA,CAAC9P,MAAiB;AACvCqO,IAAAA,EAAmBiB,CAAAA,MAAS/B,GAAoB+B,GAAMtP,CAAI,CAAC;AAAA,EAC7D,GAEM+P,IAAeA,CAAC/P,MAAiB;AACrCuO,IAAAA,EAAwBe,CAAAA,MAAS;AAC/B,YAAM9B,IAAO,IAAIhO,IAAI8P,CAAI;AACzB9B,aAAAA,EAAKE,IAAI1N,CAAI,GACNwN;AAAAA,IACT,CAAC;AAAA,EACH,GAEMwC,IAAejE,EAAYkE,gBAAAA;AAEjC,SACE,gBAAAtT,EAAC6G,IAAA,EAAM,GAAE,QAAO,MAAK,KAAI,KAAI,KAAI,IAAG,MAClC,UAAA,gBAAA7G,EAACuF,GAAA,EAAI,UAAS,YAAW,MAAK,KAAI,MAAK,KAAI,IAAG,MAC5C,UAAA,gBAAAvF,EAAC2L,IAAA,EACC,UAAS,YACT,OAAM,KACN,aAAaqD,GACb,eAAe;AAAA,IAAEuE,OAAO;AAAA,MAAEC,gBAAgB;AAAA,IAAA;AAAA,EAAO,GACjD,cAAc;AAAA,IAAE5H,GAAG;AAAA,EAAA,GAEnB,UAAA,gBAAA5L,EAACuF,GAAA,EAAI,UAAS,YAAW,OAAM,QAAO,OAAO;AAAA,IAAEkO,QAAQrE,EAAYsE,aAAAA;AAAAA,EAAa,GAC7EL,UAAAA,EAAavM,IAAK6M,CAAAA,MAAgB;AACjC,UAAM7P,IAAOkJ,EAAM2G,EAAYlF,KAAK,GAC9BpL,IAAOwJ,GAAY/I,CAAI;AAE7B,6BACGyB,GAAA,EAEC,cAAYoO,EAAYlF,OACxB,KAAKW,EAAYwE,gBACjB,UAAS,YACT,MAAK,KACL,OAAM,QACN,IAAG,MACH,OAAO;AAAA,MAAEC,KAAK,GAAGF,EAAYG,KAAK;AAAA,IAAA,GAElC,UAAA,gBAAA9T,EAACyI,IAAA,EAEC,MAAM3E,GACN,YAAYmJ,MAAqB5J,GACjC,YAAY,CAAC6J,EAAe3J,IAAIF,CAAI,GACpC,kBAAkB,MAAM8P,EAAe9P,CAAI,GAC3C,UAAU,MAAMiO,IAAmBjO,CAAI,GACvC,YAAAiE,GACA,uBAAuBqK,EAAoBpO,IAAIF,CAAI,GACnD,gBAAgB,MAAM+P,EAAa/P,CAAI,GACvC,cAAAe,KATKf,CASsB,EAAA,GAnBxBsQ,EAAYI,GAqBnB;AAAA,EAEJ,CAAC,EAAA,CACH,GACF,EAAA,CACF,EAAA,CACF;AAEJ;ACvQA,MAAMC,KAA2BA,CAAC3Q,MAChCA,EACGf,MAAM,GAAG,EACTwE,IAAKmN,CAAAA,MAAYA,EAAQC,MAAM,EAC/BzD,OAAOjI,OAAO,EACd2L,KAAK,GAAG,GAEPC,KAAYA,CAACC,OACjBA,EAAM3F,KAAK,CAAC4F,GAAMC,MACZD,EAAKE,SAASD,EAAMC,OAAaF,EAAKE,SAAS,WAAW,KAAK,IAC5DF,EAAKG,KAAKC,cAAcH,EAAME,IAAI,CAC1C,GAEDJ,EAAMM,QAASC,CAAAA,MAAS;AACtB,EAAIA,EAAKC,YAAUT,GAAUQ,EAAKC,QAAQ;AAC5C,CAAC,GAEMR,IAGHS,KAAcA,CAACC,MAAoBxG,MAAMC,KAAK,IAAI3L,IAAIkS,EAAMjO,IAAIkN,EAAwB,EAAEvD,OAAOjI,OAAO,CAAC,CAAC,GAE1GwM,KAAgBA,CAACD,MACrBD,GAAYC,CAAK,EACdjO,IAAKzD,CAAAA,OAAU;AAAA,EAAE3G,IAAI,QAAQ2G,CAAI;AAAA,EAAIoR,MAAMpR;AAAAA,EAAMmR,MAAM;AAAO,EAAgC,EAC9F9F,KAAK,CAAC4F,GAAMC,MAAUD,EAAKG,KAAKC,cAAcH,EAAME,IAAI,CAAC,GAEjDQ,KAAwBA,CAACF,GAAiBG,MAAsD;AAC3G,MAAIA,MAAS,OAAQ,QAAOF,GAAcD,CAAK;AAE/C,QAAMI,wBAAeC,IAAAA,GACfC,IAAmC,CAAA;AAEzCP,SAAAA,GAAYC,CAAK,EAAEJ,QAAStR,CAAAA,MAAS;AACnC,UAAMiS,IAAWjS,EAAKf,MAAM,GAAG;AAC/B,QAAIiT,IAAa,IACbC,IAAyC;AAE7CF,IAAAA,EAASX,QAAQ,CAACV,GAASxF,MAAU;AACnC,YAAMgH,IAAcF,IAAa,GAAGA,CAAU,IAAItB,CAAO,KAAKA,GACxDyB,IAASjH,MAAU6G,EAAS3R,SAAS,GACrCgS,IAAS,GAAGD,IAAS,SAAS,QAAQ,IAAID,CAAW,IACrDG,IAAeT,EAASU,IAAIF,CAAM;AAExC,UAAIC,GAAc;AAChBJ,QAAAA,IAAaI,GACbL,IAAaE;AACb;AAAA,MACF;AAEA,YAAMK,IAAgC;AAAA,QACpCpZ,IAAIiZ;AAAAA,QACJlB,MAAMR;AAAAA,QACNO,MAAMkB,IAAS,SAAS;AAAA,QACxB,GAAIA,IAAS,CAAA,IAAK;AAAA,UAAEb,UAAU,CAAA;AAAA,QAAA;AAAA,MAAG;AAGnCM,MAAAA,EAASY,IAAIJ,GAAQG,CAAQ,GAExBN,IACAA,EAAWX,UAAU/E,KAAKgG,CAAQ,IADtBT,EAAUvF,KAAKgG,CAAQ,GAGxCN,IAAaM,GACbP,IAAaE;AAAAA,IACf,CAAC;AAAA,EACH,CAAC,GAEMrB,GAAUiB,CAAS;AAC5B,GAEaW,KAA2BA,CAAC3B,MAAiC;AACxE,QAAM4B,IAAsB,CAAA,GAEtBC,IAAQA,CAACC,MAAiC;AAC9CA,IAAAA,EAAMxB,QAASyB,CAAAA,MAAS;AACtB,MAAIA,EAAK5B,SAAS,aAClByB,EAAUnG,KAAKsG,EAAK1Z,EAAE,GACtBwZ,EAAME,EAAKvB,YAAY,EAAE;AAAA,IAC3B,CAAC;AAAA,EACH;AAEAqB,SAAAA,EAAM7B,CAAK,GACJ4B;AACT,GAEMI,KAAyBA,CAAChC,MAAiC;AAC/D,QAAMiC,IAAyB,CAAA,GAEzBJ,IAAQA,CAACK,MAAqC;AAClDA,IAAAA,EAAU5B,QAASC,CAAAA,MAAS;AAC1B,UAAIA,EAAKJ,SAAS,QAAQ;AACxB8B,QAAAA,EAAaxG,KAAK8E,EAAKlY,GAAG8Z,QAAQ,UAAU,EAAE,CAAC;AAC/C;AAAA,MACF;AAEAN,MAAAA,EAAMtB,EAAKC,YAAY,EAAE;AAAA,IAC3B,CAAC;AAAA,EACH;AAEAqB,SAAAA,EAAM7B,CAAK,GACJiC;AACT,GAEaG,KAAsBA,CAAC1B,GAAiBG,MAC/CA,MAAS,SAAe,CAAC,GAAGH,CAAK,EAAErG,KAAK,CAAC4F,GAAMC,MAAUD,EAAKI,cAAcH,CAAK,CAAC,IAC/E8B,GAAuBpB,GAAsBF,GAAO,QAAQ,CAAC,GCrFzD2B,KAAqBC,GAAyBZ,CAAAA,OAAS;AAAA,EAClEa,iBAAiB;AAAA,EACjBC,UAAU;AAAA,EACVzS,cAAc;AAAA,EACd0S,aAAa;AAAA,EACbC,cAAc;AAAA,EACdC,uCAAuBnU,IAAAA;AAAAA,EACvBoU,kBAAmBL,OAAoBb,EAAI;AAAA,IAAEa,iBAAAA;AAAAA,EAAAA,CAAiB;AAAA,EAC9DM,iBAAiBA,MAAMnB,EAAKoB,CAAAA,OAAW;AAAA,IAAEP,iBAAiB,CAACO,EAAMP;AAAAA,EAAAA,EAAkB;AAAA,EACnFQ,aAAcP,OAAad,EAAI;AAAA,IAAEc,UAAAA;AAAAA,EAAAA,CAAU;AAAA,EAC3CQ,iBAAkBjT,OAAiB2R,EAAI;AAAA,IAAE3R,cAAAA;AAAAA,EAAAA,CAAc;AAAA,EACvDkT,gBAAiBR,OAAgBf,EAAI;AAAA,IAAEe,aAAAA;AAAAA,EAAAA,CAAa;AAAA,EACpDS,iBAAkBR,OAAiBhB,EAAI;AAAA,IAAEgB,cAAAA;AAAAA,EAAAA,CAAc;AAAA,EACvDS,sBAAuBvB,OAAcF,EAAI;AAAA,IAAEiB,mBAAmB,IAAInU,IAAIoT,CAAS;AAAA,EAAA,CAAG;AAAA,EAClFwB,cAAeC,CAAAA,MACb3B,EAAKoB,CAAAA,MAAU;AACb,UAAMH,IAAoB,IAAInU,IAAIsU,EAAMH,iBAAiB;AACzD,WAAIA,EAAkBzT,IAAImU,CAAQ,IAAGV,EAAkBlG,OAAO4G,CAAQ,IACjEV,EAAkBjG,IAAI2G,CAAQ,GAC5B;AAAA,MAAEV,mBAAAA;AAAAA,IAAAA;AAAAA,EACX,CAAC;AAAA,EACHW,WAAY1B,OAAcF,EAAI;AAAA,IAAEiB,mBAAmB,IAAInU,IAAIoT,CAAS;AAAA,EAAA,CAAG;AAAA,EACvE2B,aAAaA,MAAM7B,EAAI;AAAA,IAAEiB,uCAAuBnU,IAAAA;AAAAA,EAAI,CAAG;AACzD,EAAE,GCLIgV,KAAqBla,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,EAAAL,EAAA,CAAA,MAAAyB,EAAAma,YAEtBvb,IAAAoB,EAAKma,WAAY,gBAAA9X,EAACgL,IAAA,EAAY,MAAA,IAAE,IAAhC,MAA2C9O,EAAA,CAAA,IAAAyB,EAAAma,UAAA5b,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAM;AAAA,SAAAN,SAAAK,KAD9CC,IAAA,gBAAAwD,EAACuF,GAAA,EAAM,GAAA,QAAmB,YAAA,GAAW,SAAA,QAAsB,gBAAA,UACxDhJ,UAAAA,EAAAA,CACH,GAAML,OAAAK,GAAAL,OAAAM,KAAAA,IAAAN,EAAA,CAAA,GAFNM;AAEM,GAGFub,KAAqBpa,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,EAAA,GACzB;AAAA,IAAAO,IAAAA;AAAAA,IAAAoJ,OAAAA;AAAAA,IAAAkS,MAAAA;AAAAA,IAAAF,UAAAA;AAAAA,IAAAG,UAAAA;AAAAA,IAAAC,YAAAA;AAAAA,EAAAA,IAA4Dva,GAMhDpB,IAAAub,MAAa3Z,SAAbA,SAAA;AAAoD,MAAA3B;AAAA,EAAAN,SAAA4b,KAQ9Ctb,IAAAsb,MAAa3Z,SAAbA,SAAqC,gBAAA6B,EAAC6X,MAA6BC,UAAAA,GAAQ,GAAI5b,OAAA4b,GAAA5b,OAAAM,KAAAA,IAAAN,EAAA,CAAA;AAAA,MAAAsB;AAAA,EAAAtB,EAAA,CAAA,MAAA+b,KAAA/b,EAAA,CAAA,MAAA8b,KAAA9b,EAAA,CAAA,MAAAQ,KAAAR,EAAA,CAAA,MAAA4J,KAAA5J,EAAA,CAAA,MAAAgc,KAAAhc,EAAA,CAAA,MAAA4b,KAAA5b,EAAA,CAAA,MAAAK,KAAAL,SAAAM,KAV7FgB,sBAAC2a,IAAA,EACC,SAAA,IACM,MAAA5b,GACQub,gBAAAA,GACN,SAAA,cACJpb,IAAAA,GACEsb,MAAAA,GACClS,OAAAA,GACGmS,UAAAA,GACEH,YAAAA,GACA,YAAAtb,GACA0b,YAAAA,GAAU,GACtBhc,OAAA+b,GAAA/b,OAAA8b,GAAA9b,OAAAQ,GAAAR,OAAA4J,GAAA5J,OAAAgc,GAAAhc,OAAA4b,GAAA5b,OAAAK,GAAAL,OAAAM,GAAAN,QAAAsB,KAAAA,IAAAtB,EAAA,EAAA;AAAA,MAAAsC;AAAA,SAAAtC,EAAA,EAAA,MAAA+b,KAAA/b,UAAAQ,KAAAR,EAAA,EAAA,MAAAsB,KAbJgB,gCAAkB9B,UAAcub,UAAAA,GAAU,SAAA,IACxCza,UAAAA,EAAAA,CAaF,GAAYtB,QAAA+b,GAAA/b,QAAAQ,GAAAR,QAAAsB,GAAAtB,QAAAsC,KAAAA,IAAAtC,EAAA,EAAA,GAdZsC;AAcY,GAIH4Z,KAAwBza,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,EAAA,GACnC;AAAA,IAAAya,iBAAAA;AAAAA,IAAAyB,cAAAA;AAAAA,IAAAxB,UAAAA;AAAAA,IAAAzS,cAAAA;AAAAA,IAAAkU,qBAAAA;AAAAA,IAAAC,uBAAAA;AAAAA,IAAAC,mBAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,IAAAC,sBAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAC,eAAAA;AAAAA,EAAAA,IAYIjb;AAAM,MAAApB;AAAA,EAAAL,EAAA,CAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAIN/B,sBAAAsc,EAAA,SAAA,EAAc,SAAA,IACZ,4BAAC3O,IAAA,EAAsB,cAAA,qBAA4B,SAAA,SAAa,MAAA,MAC9D,UAAA,gBAAAlK,EAAC8Y,MAAgB,MAAA,IAAE,GACrB,EAAA,CACF,GAAe5c,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAM;AAAA,EAAAN,SAAA0a,KAKHpa,IAAAoa,sBAAmBmC,IAAA,EAAqB,MAAA,IAAE,IAAO,gBAAA/Y,EAACgZ,IAAA,EAAoB,MAAA,GAAA,CAAE,GAAI9c,OAAA0a,GAAA1a,OAAAM,KAAAA,IAAAN,EAAA,CAAA;AAC3E,QAAAsB,IAAAoZ,IAAA,mBAAA;AAAqD,MAAApY;AAAA,EAAAtC,EAAA,CAAA,MAAAsc,KAAAtc,SAAAM,KAAAN,EAAA,CAAA,MAAAsB,KAH9DgB,IAAA,gBAAAwB,EAAC+X,MACI,IAAA,oBACG,MAAAvb,GACC,OAAAgB,GACKgb,YAAAA,EAAAA,CAAiB,GAC7Btc,OAAAsc,GAAAtc,OAAAM,GAAAN,OAAAsB,GAAAtB,OAAAsC,KAAAA,IAAAtC,EAAA,CAAA;AAAA,MAAAuC;AAAA,EAAAvC,EAAA,CAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KACFG,IAAA,gBAAAuB,EAAA6Y,EAAA,WAAA,CAAA,CAAA,GAAkB3c,OAAAuC,KAAAA,IAAAvC,EAAA,CAAA;AAAA,MAAAgD;AAAA,EAAAhD,EAAA,CAAA,MAAAmc,KAAAnc,SAAAuc,KAAAvc,EAAA,EAAA,MAAA2a,KACjB3X,IAAAmZ,IAAA,gBAAAlS,EAAA8S,IAAA,EAEG,UAAA;AAAA,IAAA,gBAAAjZ,EAAC+X,MACI,IAAA,UACG,MAAA,gBAAA/X,EAACkZ,IAAA,EAAe,MAAA,GAAA,CAAE,GAClB,OAAA,UACI,UAAArC,MAAa,UACX,YAAA,MAAM4B,EAAiB,QAAQ,GAAC;AAAA,sBAE7CV,IAAA,EACI,IAAA,QACG,MAAA,gBAAA/X,EAACmZ,MAAW,MAAA,GAAA,CAAE,GACd,OAAA,QACI,UAAAtC,MAAa,QACX,YAAA,MAAM4B,EAAiB,MAAM;IAE3C,gBAAAzY,EAAA6Y,EAAA,WAAA,CAAA,CAAA;AAAA,EAAA,EAAA,CAAkB,IAhBrB,MAkBO3c,OAAAmc,GAAAnc,OAAAuc,GAAAvc,QAAA2a,GAAA3a,QAAAgD,KAAAA,IAAAhD,EAAA,EAAA;AAAA,MAAAuD;AAAA,EAAAvD,EAAA,EAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAGAmB,sBAAC2Z,IAAA,EAAY,MAAA,GAAA,CAAE,GAAIld,QAAAuD,KAAAA,IAAAvD,EAAA,EAAA;AAEf,QAAAwD,IAAA0E,MAAiB;AAAS,MAAAzE;AAAA,EAAAzD,UAAAwc,KACxB/Y,IAAAA,MAAM+Y,EAAqB,SAAS,GAACxc,QAAAwc,GAAAxc,QAAAyD,KAAAA,IAAAzD,EAAA,EAAA;AAAA,MAAAwE;AAAA,EAAAxE,EAAA,EAAA,MAAAwD,KAAAxD,UAAAyD,KALnDe,IAAA,gBAAAV,EAAC+X,IAAA,EACI,IAAA,WACG,MAAAtY,GACA,OAAA,WACI,UAAAC,GACE,YAAAC,EAAAA,CAAqC,GACjDzD,QAAAwD,GAAAxD,QAAAyD,GAAAzD,QAAAwE,KAAAA,IAAAxE,EAAA,EAAA;AAAA,MAAA6M;AAAA,EAAA7M,EAAA,EAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAGMyK,sBAACsQ,IAAA,EAA4B,MAAA,GAAA,CAAE,GAAInd,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA;AAE/B,QAAA8M,IAAA5E,MAAiB;AAAO,MAAA6E;AAAA,EAAA/M,UAAAwc,KACtBzP,IAAAA,MAAMyP,EAAqB,OAAO,GAACxc,QAAAwc,GAAAxc,QAAA+M,KAAAA,IAAA/M,EAAA,EAAA;AAAA,MAAAiO;AAAA,EAAAjO,EAAA,EAAA,MAAA8M,KAAA9M,UAAA+M,KALjDkB,IAAA,gBAAAnK,EAAC+X,IAAA,EACI,IAAA,SACG,MAAAhP,GACA,OAAA,SACI,UAAAC,GACE,YAAAC,EAAAA,CAAmC,GAC/C/M,QAAA8M,GAAA9M,QAAA+M,GAAA/M,QAAAiO,KAAAA,IAAAjO,EAAA,EAAA;AAAA,MAAAmO;AAAA,EAAAnO,EAAA,EAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KACF+L,IAAA,gBAAArK,EAAA6Y,EAAA,WAAA,CAAA,CAAA,GAAkB3c,QAAAmO,KAAAA,IAAAnO,EAAA,EAAA;AAAA,MAAAoO;AAAA,EAAApO,EAAA,EAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAGVgM,sBAACgP,IAAA,EAAqB,MAAA,GAAA,CAAE,GAAIpd,QAAAoO,KAAAA,IAAApO,EAAA,EAAA;AAAA,MAAAqO;AAAA,EAAArO,EAAA,EAAA,MAAAoc,KAAApc,UAAAyc,KAFpCpO,IAAA,gBAAAvK,EAAC+X,IAAA,EACI,IAAA,cACG,MAAAzN,GACA,OAAA,cACIgO,UAAAA,GACEK,YAAAA,EAAAA,CAAW,GACvBzc,QAAAoc,GAAApc,QAAAyc,GAAAzc,QAAAqO,KAAAA,IAAArO,EAAA,EAAA;AAAA,MAAAsO;AAAA,EAAAtO,EAAA,EAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAGMkM,sBAAC+O,IAAA,EAAqB,MAAA,GAAA,CAAE,GAAIrd,QAAAsO,KAAAA,IAAAtO,EAAA,EAAA;AAAA,MAAAyO;AAAA,EAAAzO,EAAA,EAAA,MAAAqc,KAAArc,UAAA0c,KAFpCjO,IAAA,gBAAA3K,EAAC+X,IAAA,EACI,IAAA,gBACG,MAAAvN,GACA,OAAA,gBACI+N,UAAAA,GACEK,YAAAA,EAAAA,CAAa,GACzB1c,QAAAqc,GAAArc,QAAA0c,GAAA1c,QAAAyO,KAAAA,IAAAzO,EAAA,EAAA;AAAA,MAAA0O;AAAA,SAAA1O,UAAAiO,KAAAjO,EAAA,EAAA,MAAAqO,KAAArO,EAAA,EAAA,MAAAyO,KAAAzO,EAAA,EAAA,MAAAsC,KAAAtC,UAAAgD,KAAAhD,EAAA,EAAA,MAAAwE,KA9DRkK,IAAA,gBAAAzE,EAAA0S,EAAA,MAAA,EACEtc,UAAAA;AAAAA,IAAAA;AAAAA,IAKA,gBAAAyD,kBACE,4BAAA6Y,EAAA,SAAA,EAAmB,MAAA,SAAW,IAAA,MAAO,GAAA,KAAQ,KAAA,KAC3Cra,UAAAA;AAAAA,MAAAA;AAAAA,MAMAC;AAAAA,MACCS;AAAAA,MAmBDwB;AAAAA,MAOAyJ;AAAAA,MAOAE;AAAAA,MACAE;AAAAA,MAOAI;AAAAA,IAAAA,EAAAA,CAOF,EAAA,CACF;AAAA,EAAA,GACF,GAAYzO,QAAAiO,GAAAjO,QAAAqO,GAAArO,QAAAyO,GAAAzO,QAAAsC,GAAAtC,QAAAgD,GAAAhD,QAAAwE,GAAAxE,QAAA0O,KAAAA,IAAA1O,EAAA,EAAA,GAjEZ0O;AAiEY,GC5HV4O,KAAuC;AAAA,EAC3CC,OAAO;AAAA,EACPC,QAAQ;AAAA,EACRC,SAAS;AAAA,EACT7Y,UAAU;AAAA,EACV8Y,kBAAkB;AAAA,EAClBC,SAAS;AACX,GAEMC,KAAuC;AAAA,EAC3CL,OAAO;AAAA,EACPC,QAAQ;AAAA,EACRC,SAAS;AAAA,EACT7Y,UAAU;AAAA,EACV8Y,kBAAkB;AAAA,EAClBC,SAAS;AACX,GAEME,KAAmF;AAAA,EACvFN,OAAO;AAAA,IAAEO,OAAO;AAAA,IAAcC,iBAAiB;AAAA,EAAA;AAAA,EAC/CN,SAAS;AAAA,IAAEK,OAAO;AAAA,IAAYC,iBAAiB;AAAA,EAAA;AACjD,GAEMC,KAAyB;AAAA,EAC7BrQ,IAAI;AAAA,EACJsQ,QAAQ;AAAA,EACRtR,aAAa;AAAA,EACbuR,cAAc;AAAA,EACdC,WAAW;AAAA,EACXC,QAAQ;AAAA,IAAEzR,aAAa;AAAA,EAAA;AAAA,EACvB0R,SAAS;AAAA,IAAE1R,aAAa;AAAA,EAAA;AAAA,EACxB2R,QAAQ;AAAA,IAAE3R,aAAa;AAAA,IAAe4R,SAAS;AAAA,IAAQJ,WAAW;AAAA,EAAA;AAAA,EAClEK,eAAe;AAAA,IAAE7R,aAAa;AAAA,IAAe4R,SAAS;AAAA,IAAQJ,WAAW;AAAA,EAAA;AAC3E,GAEMM,KAAmBA,CAACvY,MAAqB;AAC7C,QAAMwY,IAAiBxY,EAASyY,YAAY,GAAG;AAC/C,SAAID,IAAiB,IAAU;AAAA,IAAEtX,UAAUlB;AAAAA,IAAU0Y,SAAS;AAAA,EAAA,IACvD;AAAA,IAAExX,UAAUlB,EAAS2Y,MAAMH,IAAiB,CAAC;AAAA,IAAGE,SAAS1Y,EAAS2Y,MAAM,GAAGH,CAAc;AAAA,EAAA;AAClG,GAEMI,KAAkBA,CAACpG,GAA2BiC,GAAgCzU,MAAqB;AACvG,QAAM;AAAA,IAAEkB,UAAAA;AAAAA,IAAUwX,SAAAA;AAAAA,EAAAA,IAAYH,GAAiBvY,CAAQ;AACvD,SAAIyU,MAAa,UAAU,CAACiE,IAAgBlG,EAAKH,OAG/C,gBAAAtO,EAACF,GAAA,EAAK,WAAU,mBAAkB,UAAQ,IACxC,UAAA;AAAA,IAAA,gBAAAjG,EAACiG,GAAA,EAAK,IAAG,QAAO,OAAM,cACnB3C,UAAAA,GACH;AAAA,IAAQ;AAAA,sBACP2C,GAAA,EAAK,IAAG,QAAO,OAAM,YACnB6U,UAAAA,EAAAA,CACH;AAAA,EAAA,GACF;AAEJ,GAEMG,KAAkBA,CAACjY,MAMH;AACpB,QAAM;AAAA,IAAEqR,OAAAA;AAAAA,IAAOwC,UAAAA;AAAAA,IAAUqE,cAAAA;AAAAA,IAAcC,iBAAAA;AAAAA,IAAiBC,cAAAA;AAAAA,EAAAA,IAAiBpY;AAEzE,SAAOqR,EAAMvN,IAAK8N,CAAAA,MAAS;AACzB,QAAIA,EAAKJ,SAAS;AAChB,aAAO;AAAA,QACL9X,IAAIkY,EAAKlY;AAAAA,QACToJ,OAAO8O,EAAKH;AAAAA,QACZ4G,aAAa;AAAA,QACbxG,UAAUoG,GAAgB;AAAA,UACxB5G,OAAOO,EAAKC,YAAY,CAAA;AAAA,UACxBgC,UAAAA;AAAAA,UACAqE,cAAAA;AAAAA,UACAC,iBAAAA;AAAAA,UACAC,cAAAA;AAAAA,QAAAA,CACD;AAAA,MAAA;AAIL,UAAMhZ,IAAWwS,EAAKlY,GAAG8Z,QAAQ,UAAU,EAAE,GACvC8E,IAAWH,IAAkB/Y,CAAQ,KAAK;AAAA,MAAE4V,MAAM,gBAAAhY,EAACub,IAAA,EAAK,IAAIC,IAAU,SAAQ,QAAM;AAAA,MAAKxB,OAAO;AAAA,IAAA,GAChG5P,IAASgR,GAAcvF,IAAIzT,CAAQ,GACnCqZ,IAAmBrR,IACpB2P,GAAqB3P,CAAM,KAAK;AAAA,MAAEsR,cAAc5B,GAAa1P,CAAM,KAAK;AAAA,IAAA,IACzE,CAAA;AAEJ,WAAO;AAAA,MACL1N,IAAIkY,EAAKlY;AAAAA,MACToJ,OAAOkV,GAAgBpG,GAAMiC,GAAUzU,CAAQ;AAAA,MAC/C4V,MAAMsD,EAAStD;AAAAA,MACf2D,WAAWL,EAAStB;AAAAA,MACpB4B,YAAYxR,IACV,gBAAApK,EAAC6b,IAAA,EAAM,MAAK,MAAK,SAAQ,UAAS,YAAY,GAAG,GAAIJ,GAClDjC,UAAAA,GAAapP,CAAM,KAAKA,GAC3B,IACEjM;AAAAA,MACJ+Z,YAAYA,MAAMgD,EAAa9Y,CAAQ;AAAA,IAAA;AAAA,EAE3C,CAAC;AACH,GAEa0Z,KAAgBne,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,EAAA,GAC3B;AAAA,IAAAmK,OAAAA;AAAAA,IAAAyO,OAAAA;AAAAA,IAAAgC,cAAAA;AAAAA,IAAAF,UAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAE,mBAAAA;AAAAA,IAAAkE,cAAAA;AAAAA,IAAAa,qBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAb,iBAAAA;AAAAA,IAAAC,cAAAA;AAAAA,EAAAA,IAYIzd,GACJqR,IAAkB/R,EAAuB,IAAI;AAAE,MAAAV;AAAA,MAAAL,EAAA,CAAA,MAAAkf,KAAAlf,EAAA,CAAA,MAAAgf,KAAAhf,EAAA,CAAA,MAAA6Y,KAAA7Y,EAAA,CAAA,MAAAif,KAAAjf,SAAA2a,GAAA;AAC/C,UAAAoF,IAAiBhH,GAAsBF,GAAO8B,CAAQ;AACpCta,IAAAA,IAAA0e,GAAgB;AAAA,MAAA5G,OAAS4H;AAAAA,MAAQpF,UAAAA;AAAAA,MAAAqE,cAAAA;AAAAA,MAAAC,iBAAAA;AAAAA,MAAAC,cAAAA;AAAAA,IAAAA,CAAyD,GAAClf,OAAAkf,GAAAlf,OAAAgf,GAAAhf,OAAA6Y,GAAA7Y,OAAAif,GAAAjf,OAAA2a,GAAA3a,OAAAK;AAAAA,EAAA;AAAAA,IAAAA,IAAAL,EAAA,CAAA;AAA7G,QAAAqa,IAAkBha,GAClB2f,IAAmBpF,EAAW5C,KAAAA,IAAX,sBAAA;AAA8D,MAAA1X;AAAA,EAAAN,SAAAoK,KAMzE9J,IAAA,gBAAAwD,EAACiG,KAAe,WAAA,kBAAuB,OAAA,wBAAuB,2BAE9D,GAAO/J,OAAAoK,GAAApK,OAAAM,KAAAA,IAAAN,EAAA,CAAA;AAAA,MAAAsB;AAAA,EAAAtB,EAAA,CAAA,MAAA6Y,EAAApR,UACPnG,IAAA,gBAAAwC,EAAC6b,IAAA,EAAW,MAAA,MAAa,SAAA,UAAqB,eAAgB,cAAA,QAC3D9G,UAAAA,EAAKpR,QACR,GAAQzH,EAAA,CAAA,IAAA6Y,EAAApR,QAAAzH,OAAAsB,KAAAA,IAAAtB,EAAA,CAAA;AAAA,MAAAsC;AAAA,EAAAtC,EAAA,EAAA,MAAAM,KAAAN,UAAAsB,KAPZgB,sBAAC2d,IAAA,EAAe,SAAA,QAAsB,gBAAA,iBAAkC,mBAAA,OAAkB,aAAA,iBAAmB,IAAA,MAC3G,UAAA,gBAAAhW,EAACiW,MAAW,KAAA,OAAW,MAAA,KACrB5f,UAAAA;AAAAA,IAAAA;AAAAA,IAGAgB;AAAAA,EAAAA,EAAAA,CAGF,EAAA,CACF,GAAStB,QAAAM,GAAAN,QAAAsB,GAAAtB,QAAAsC,KAAAA,IAAAtC,EAAA,EAAA;AAAA,MAAAuC;AAAA,EAAAvC,EAAA,EAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAEmBG,sBAAC4d,IAAA,EAAa,MAAA,GAAA,CAAE,GAAIngB,QAAAuC,KAAAA,IAAAvC,EAAA,EAAA;AAAA,MAAAgD;AAAA,EAAAhD,UAAA6f,KAOhC7c,IAAA4K,CAAAA,MAAWiS,EAAoBjS,EAAKwS,OAAOvgB,KAAM,GAACG,QAAA6f,GAAA7f,QAAAgD,KAAAA,IAAAhD,EAAA,EAAA;AAAA,MAAAuD;AAAA,EAAAvD,EAAA,EAAA,MAAA4a,KAAA5a,UAAAgD,KARlEO,IAAA,gBAAAO,EAAC6G,IAAA,EAAU,KAAA,MAAuB,mBAAA,OAAS,IAAA,MACzC,UAAA,gBAAA7G,EAACuc,IAAA,EAAyB,cAAA9d,GACxB,UAAA,gBAAAuB,EAACwc,IAAA,EACM,MAAA,MACF,IAAA,MACS,aAAA,gBACL1F,OAAAA,GAAW,GACdoD,IACM,UAAAhb,EAAAA,CAAkD,EAAA,CAEhE,GACF,GAAQhD,QAAA4a,GAAA5a,QAAAgD,GAAAhD,QAAAuD,KAAAA,IAAAvD,EAAA,EAAA;AAAA,MAAAwD;AAAA,EAAAxD,EAAA,EAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KAOSoB,IAAA;AAAA,IAAA6T,OAAS;AAAA,MAAAkJ,WAAa;AAAA,IAAA;AAAA,EAAS,GAAGvgB,QAAAwD,KAAAA,IAAAxD,EAAA,EAAA;AAAA,MAAAyD;AAAA,EAAAzD,EAAA,EAAA,MAAAggB,KAAAhgB,UAAA8a,KAAA9a,EAAA,EAAA,MAAA8f,KAAA9f,EAAA,EAAA,MAAA6Y,EAAApR,UAAAzH,UAAA6a,KAAA7a,EAAA,EAAA,MAAAqa,KANnD5W,sBAACgM,MACM,MAAA,KACA,MAAA,KACA,MAAA,KACF,IAAA,MACUqD,aAAAA,GACE,eAAAtP,GAEdqV,UAAAA,EAAKpR,SAAU,IACd,gBAAA3D,EAAC0c,IAAA,EACW,UAAA,CAAC;AAAA,IAAAhgB,IAAM;AAAA,IAAO2X,OAASkC;AAAAA,EAAAA,CAAW,GAC3B,iBAAA,CAAA,GAAIS,CAAiB,GACxB,cAAAD,IAAA,QAAuBA,CAAY,KAAnC,MACH,YAAA,QACGiF,cAAAA,GACd,YAAA,IACWhN,WAAAA,EAAAA,CAAS,sBAGrBzJ,GAAA,EAAO,IAAA,MAAQ,IAAA,MACd,UAAA,gBAAAvF,EAACqG,IAAA,EAAkB6V,OAAAA,GAAiB,MAAA,MAAe,WAAA,QAAkB,YAAA,aAAA,IACvE,GAEJ,GAAahgB,QAAAggB,GAAAhgB,QAAA8a,GAAA9a,QAAA8f,GAAA9f,EAAA,EAAA,IAAA6Y,EAAApR,QAAAzH,QAAA6a,GAAA7a,QAAAqa,GAAAra,QAAAyD,KAAAA,IAAAzD,EAAA,EAAA;AAAA,MAAAwE;AAAA,SAAAxE,EAAA,EAAA,MAAAsC,KAAAtC,UAAAuD,KAAAvD,EAAA,EAAA,MAAAyD,KA9Cfe,sBAACmG,IAAA,EAAQ,GAAA,QAAY,MAAA,KAAS,MAAA,KAAM,GAAA,QAAW,KAAA,KAAa,UAAA,UAAY,IAAA,MACtErI,UAAAA;AAAAA,IAAAA;AAAAA,IAUAiB;AAAAA,IAYAE;AAAAA,EAAAA,GAwBF,GAAQzD,QAAAsC,GAAAtC,QAAAuD,GAAAvD,QAAAyD,GAAAzD,QAAAwE,KAAAA,IAAAxE,EAAA,EAAA,GA/CRwE;AA+CQ,GC7KNmM,KAAcA,CAAC/I,MAAeA,EAAKmB,WAAWnB,EAAKkB,WAAW,WAC9D2X,KAAoBA,CAAC3P,MAAkB,IAAIoI,IAAIpI,EAAMlG,IAAKhD,CAAAA,MAAS,CAAC+I,GAAY/I,CAAI,GAAGA,EAAKsG,MAAM,CAAC,CAAC,GACpGwS,KAAeA,CAAC5P,MACpBA,EAAM6P,OACJ,CAACC,GAAOhZ,OAAU;AAAA,EAChBb,WAAW6Z,EAAM7Z,aAAaa,EAAKb,aAAa;AAAA,EAChDC,WAAW4Z,EAAM5Z,aAAaY,EAAKZ,aAAa;AAClD,IACA;AAAA,EAAED,WAAW;AAAA,EAAGC,WAAW;AAAE,CAC/B,GAEI6Z,KAAqBA,CAAC/Z,MAItB;AACJ,QAAM;AAAA,IAAEgK,OAAAA;AAAAA,IAAOgQ,uBAAAA;AAAAA,IAAuBnG,UAAAA;AAAAA,EAAAA,IAAa7T,GAC7Cia,IAAgBD,IAClBhQ,EAAMyD,OAAQ3M,CAAAA,MAAS+I,GAAY/I,CAAI,EAAEtB,YAAAA,EAAc0L,SAAS8O,CAAqB,CAAC,IACtFhQ,GACEsJ,IAAeG,GAAoBwG,EAAcnW,IAAI+F,EAAW,GAAGgK,CAAQ,GAC3EqG,IAAc,IAAI9H,IAAIkB,EAAaxP,IAAI,CAACzD,GAAMoL,MAAU,CAACpL,GAAMoL,CAAK,CAAC,CAAC;AAE5E,SAAO,CAAC,GAAGwO,CAAa,EAAEvO,KAAK,CAAC4F,GAAMC,MAAU;AAC9C,UAAM4I,IAAYD,EAAYrH,IAAIhJ,GAAYyH,CAAI,CAAC,KAAK8I,OAAOC,kBACzDC,IAAaJ,EAAYrH,IAAIhJ,GAAY0H,CAAK,CAAC,KAAK6I,OAAOC;AACjE,WAAOF,IAAYG;AAAAA,EACrB,CAAC;AACH,GAEMC,KAAsBA,CAACC,GAA0BC,MACrDD,EAAe,CAAC,KAAKC,EAAc,CAAC,KAAK,MAErCC,KAAmB,CAAC,SAAS,UAAU,OAAO,GAE9CC,KAAoBA,MAAA;AAAA,QAAAzhB,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,EAAA,CAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KACxB/B,IAAA,gBAAAyD,EAAC6G,MAAW,MAAA,KAAS,MAAA,KAAO,IAAA,MAAO,GAAA,MAAS,KAAA,MAAU,MAAA,UAAmB,aAAA,QAAkB,cAAA,sBACxF6W,UAAAA,GAAgB5W,IAAKC,EAErB,EAAA,CACH,GAAQ7K,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAJRK;AAIQ,GAGGqhB,KAAajgB,CAAAA,MAAA;AAAA,QAAAzB,IAAAC,EAAA,GAAA,GACxB;AAAA,IAAA6Q,OAAAA;AAAAA,IAAA6Q,kBAAAA;AAAAA,IAAAC,qBAAAvhB;AAAAA,IAAAwhB,SAAAvhB;AAAAA,IAAA8K,YAAAA;AAAAA,IAAA6T,iBAAAA;AAAAA,EAAAA,IAA8Gxd,GAA7EmgB,IAAAvhB,MAAA4B,SAAA,OAAA5B,GAA4BwhB,IAAAvhB,MAAA2B,SAAA,KAAA3B,GAC7D,CAAAwhB,GAAAC,CAAA,IAAwD7V,EAAsC,IAAI;AAAE,MAAA5K;AAAA,EAAAtB,EAAA,CAAA,MAAAmC,uBAAAC,IAAA,2BAAA,KACbd,IAAA;AAAA,IAAAsV,aACxE;AAAA,IAAKE,cACJ;AAAA,EAAA,GACf9W,OAAAsB,KAAAA,IAAAtB,EAAA,CAAA;AAHD,QAAA,CAAAgiB,GAAAC,CAAA,IAAoD/V,EAAmC5K,CAGtF,GACD;AAAA,IAAAoZ,iBAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAzS,cAAAA;AAAAA,IAAA0S,aAAAA;AAAAA,IAAAC,cAAAA;AAAAA,IAAAC,mBAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,IAAAG,aAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAC,sBAAAA;AAAAA,IAAAC,cAAAA;AAAAA,IAAAE,WAAAA;AAAAA,IAAAC,aAAAA;AAAAA,EAAAA,IAgBIlB,GAAAA;AAAqB,MAAA0H,GAAAhD,GAAAiD,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAA1I,GAAA2I,GAAAC,GAAAC,GAAAC,IAAAvgB,IAAAwgB;AAAA,MAAA9iB,EAAA,CAAA,MAAA2hB,KAAA3hB,EAAA,CAAA,MAAA4hB,KAAA5hB,EAAA,CAAA,MAAA8Q,KAAA9Q,EAAA,CAAA,MAAA8a,KAAA9a,EAAA,CAAA,MAAA6hB,KAAA7hB,EAAA,CAAA,MAAA4a,KAAA5a,EAAA,CAAA,MAAA6a,KAAA7a,SAAA2a,GAAA;AAEzB,UAAAoI,IAAkBjS,EAAKlG,IAAK+F,EAAW;AACvCyR,IAAAA,IAAkBT,KAAAoB;AAClB,UAAAjC,IAA8BlG,EAAW5C,KAAAA,EAAO1R,YAAAA;AAChDmc,IAAAA,IAA0B3B,IACtBsB,EAAS7N,OAAQpN,CAAAA,OAAUA,GAAIb,cAAc0L,SAAU8O,CAAqB,CACpE,IAFcsB,GAG1BG,IAAsB1B,GAAmB;AAAA,MAAA/P,OAAAA;AAAAA,MAAAgQ,uBAAAA;AAAAA,MAAAnG,UAAAA;AAAAA,IAAAA,CAA0C;AAAE,QAAApY;AAAA,IAAAvC,UAAA8Q,KAChEvO,KAAAke,GAAkB3P,CAAK,GAAC9Q,QAAA8Q,GAAA9Q,QAAAuC,MAAAA,KAAAvC,EAAA,EAAA,GAA7Ckf,IAAqB3c,IACrB+f,IAA0BC,EAAa3X,IAAK+F,EAAW;AACvD,UAAAoP,KAAiBhH,GAAsB0J,GAAmB9H,CAAQ;AAClEZ,IAAAA,IAAkBY,MAAa,WAAWb,GAAyBiG,EAAa,IAA9D,CAAA,GAClByC,IAA4BC,EAAiBxK,KAAM,IAAI,GACvDoK,IAA4BC,EAAiBrK,KAAM,IAAI,GACvD2K,IACE/H,KAAA+G,KAAuCP,GAAoBiB,GAAmBG,CAAiB,GACjGC,IAAiBH,EAAa9a,SAAU,GACxC0a,IAAuBrB,IAAA,sBAAA,cACvB+B,KAA2B,CAAChB,KAAD,CAAaa,GACxCI,IAAkBpC,GAAa6B,CAAa,GAC5CI,IAA2B5I,EAAStS,SAAU,KAAK8a,EAAa9a,SAAU;AAAE,QAAAzE;AAAA,IAAAhD,UAAA8a,KACnC9X,KAAAwY,CAAAA,OAAcV,EAAiBzT,IAAKmU,EAAQ,GAACxb,QAAA8a,GAAA9a,QAAAgD,MAAAA,KAAAhD,EAAA,EAAA,GAAtFkiB,IAAyBnI,EAAShD,MAAO/T,EAA6C;AAAE,QAAAO;AAAA,IAAAvD,UAAA8a,KAC9CvX,KAAAyf,CAAAA,OAAc,CAAClI,EAAiBzT,IAAKmU,EAAQ,GAACxb,QAAA8a,GAAA9a,QAAAuD,MAAAA,KAAAvD,EAAA,EAAA,GAA9DsC,KAAAyX,EAAShD,MAAOxT,EAA8C,GAACvD,OAAA2hB,GAAA3hB,OAAA4hB,GAAA5hB,OAAA8Q,GAAA9Q,OAAA8a,GAAA9a,OAAA6hB,GAAA7hB,OAAA4a,GAAA5a,OAAA6a,GAAA7a,OAAA2a,GAAA3a,OAAAkiB,GAAAliB,QAAAkf,GAAAlf,QAAAmiB,GAAAniB,QAAAoiB,GAAApiB,QAAAqiB,GAAAriB,QAAAsiB,GAAAtiB,QAAAuiB,GAAAviB,QAAAwiB,GAAAxiB,QAAAyiB,GAAAziB,QAAA+Z,GAAA/Z,QAAA0iB,GAAA1iB,QAAA2iB,GAAA3iB,QAAA4iB,GAAA5iB,QAAA6iB,IAAA7iB,QAAAsC,IAAAtC,QAAA8iB;AAAAA,EAAA;AAAAZ,IAAAA,IAAAliB,EAAA,CAAA,GAAAkf,IAAAlf,EAAA,EAAA,GAAAmiB,IAAAniB,EAAA,EAAA,GAAAoiB,IAAApiB,EAAA,EAAA,GAAAqiB,IAAAriB,EAAA,EAAA,GAAAsiB,IAAAtiB,EAAA,EAAA,GAAAuiB,IAAAviB,EAAA,EAAA,GAAAwiB,IAAAxiB,EAAA,EAAA,GAAAyiB,IAAAziB,EAAA,EAAA,GAAA+Z,IAAA/Z,EAAA,EAAA,GAAA0iB,IAAA1iB,EAAA,EAAA,GAAA2iB,IAAA3iB,EAAA,EAAA,GAAA4iB,IAAA5iB,EAAA,EAAA,GAAA6iB,KAAA7iB,EAAA,EAAA,GAAAsC,KAAAtC,EAAA,EAAA,GAAA8iB,IAAA9iB,EAAA,EAAA;AAAzF,QAAAijB,KAA0B3gB,IAC1B4gB,KAAyBX,EAAa9a,WAAY,KAAKua,EAAkBpL,aACzEuM,KAA0BZ,EAAa9a,WAAY,KAAKua,EAAkBlL,cAC1EsF,KAA4B,CAACuG,KAAuBT,KAAAgB,IACpD7G,KAA8B,CAACsG,KAAuBM,MAAAE;AAAwC,MAAA5gB,IAAAS;AAAA,EAAAhD,EAAA,EAAA,MAAAwiB,KAAAxiB,UAAAsb,KAAAtb,EAAA,EAAA,MAAA2a,KAEpFpY,KAAAA,MAAA;AACR,UAAA6gB,IAAkBZ,IAAsBA,EAAmBpc,MAAO,IAAS,IAAzD,CAAA,GAClBid,IAAatK,GAAsBqJ,GAAWzH,CAAQ;AACtDW,IAAAA,EAAqBX,MAAa,WAAWb,GAAyBuJ,CAAS,IAA1D,CAAA,CAA2D;AAAA,EAAC,GAChFrgB,MAACwf,GAAqBlH,GAAsBX,CAAQ,GAAC3a,QAAAwiB,GAAAxiB,QAAAsb,GAAAtb,QAAA2a,GAAA3a,QAAAuC,IAAAvC,QAAAgD,OAAAT,KAAAvC,EAAA,EAAA,GAAAgD,KAAAhD,EAAA,EAAA,IAJxDqB,GAAUkB,IAIPS,EAAqD;AAAC,MAAAO,IAAAC;AAAA,EAAAxD,EAAA,EAAA,MAAAqiB,KAAAriB,EAAA,EAAA,MAAAwiB,KAAAxiB,EAAA,EAAA,MAAA4iB,KAAA5iB,UAAAqb,KAE/C9X,KAAAA,MAAA;AACR,UAAA+f,IAAkBjB,IAAsBA,EAAmBjc,MAAO,IAAS,IAAzD,CAAA,GAClBmd,IAAkBf,IAAsBA,EAAmBpc,MAAO,IAAS,IAAzD,CAAA;AAClB,IAAIwc,KAAwBG,EAAS/Q,SAAU4Q,CAAoB,KACnEvH,EAAgBgG,GAAoB0B,GAAWX,CAAS,CAAC;AAAA,EAAC,GACzD5e,KAAA,CAAC6e,GAAqBG,GAAqBI,GAAsBvH,CAAe,GAACrb,QAAAqiB,GAAAriB,QAAAwiB,GAAAxiB,QAAA4iB,GAAA5iB,QAAAqb,GAAArb,QAAAuD,IAAAvD,QAAAwD,OAAAD,KAAAvD,EAAA,EAAA,GAAAwD,KAAAxD,EAAA,EAAA,IALpFqB,GAAUkC,IAKPC,EAAiF;AAAC,MAAAC;AAAA,EAAAzD,EAAA,EAAA,MAAAyb,KAAAzb,UAAA+Z,KAEtDtW,KAAAA,MAAA;AAC7BgY,IAAAA,EAAU1B,CAAS,GACnBgI,EAAwByB,EAA+D;AAAA,EAAC,GACzFxjB,QAAAyb,GAAAzb,QAAA+Z,GAAA/Z,QAAAyD,MAAAA,KAAAzD,EAAA,EAAA;AAHD,QAAAyjB,KAA+BhgB;AAG7B,MAAAe;AAAA,EAAAxE,UAAA0b,KAE+BlX,KAAAA,MAAA;AAC/BkX,IAAAA,EAAAA,GACAqG,EAAwB2B,EAAiE;AAAA,EAAC,GAC3F1jB,QAAA0b,GAAA1b,QAAAwE,MAAAA,KAAAxE,EAAA,EAAA;AAHD,QAAA2jB,KAAiCnf;AAG/B,MAAAqI;AAAA,EAAA7M,EAAA,EAAA,MAAAsiB,KAAAtiB,UAAA4iB,KAAA5iB,EAAA,EAAA,MAAAqb,KAE4BxO,KAAA+W,CAAAA,MAAA;AAC5B,UAAAC,IAAqBjB,IAAuBN,EAAiBwB,QAASlB,CAAyB,IAA1E,IACrBmB,KAAkBzB,EAAiBwB,QAAS3c,CAAI,GAChD0K,KAAkBgS,KAAgB,KAAKE,MAAa,KAAKA,KAAYF,IAAnD,OAAA;AAElBxI,IAAAA,EAAgBlU,CAAI,GACpB4a,EAAwBiC,CAAAA,QAAc;AAAA,MAAA1S,QAAU;AAAA,MAAiBO,WAAAA;AAAAA,MAAArR,KAAkBS,IAAOT,MAAP,KAAoB;AAAA,MAAC2G,MAAEA;AAAAA,IAAAA,EAAO;AAAA,EAAC,GACnHnH,QAAAsiB,GAAAtiB,QAAA4iB,GAAA5iB,QAAAqb,GAAArb,QAAA6M,MAAAA,KAAA7M,EAAA,EAAA;AAPD,QAAAikB,KAA8BpX,IAeNC,KAAAsV,EAAS3a,SAAU;AAAC,MAAAsF;AAAA,EAAA/M,EAAA,EAAA,MAAA0a,KAAA1a,UAAA+a,KAKfhO,KAAAA,MAAMgO,EAAiB,CAACL,CAAe,GAAC1a,QAAA0a,GAAA1a,QAAA+a,GAAA/a,QAAA+M,MAAAA,KAAA/M,EAAA,EAAA;AAAA,MAAAiO;AAAA,EAAAjO,EAAA,EAAA,MAAA2jB,MAAA3jB,EAAA,EAAA,MAAAkI,KAAAlI,UAAAyjB,MAAAzjB,EAAA,EAAA,MAAAqc,MAAArc,EAAA,EAAA,MAAAoc,MAAApc,EAAA,EAAA,MAAA0a,KAAA1a,EAAA,EAAA,MAAAmb,KAAAnb,UAAAkb,KAAAlb,EAAA,EAAA,MAAA8M,MAAA9M,EAAA,EAAA,MAAA+M,MAAA/M,UAAA2a,KAP7D1M,uBAACiO,IAAA,EACkBxB,iBAAAA,GACH,cAAA5N,IACJ6N,UAAAA,GACIzS,cAAAA,GACOkU,qBAAAA,IACEC,uBAAAA,IACJ,mBAAAtP,IACDmO,kBAAAA,GACIC,sBAAAA,GACTsI,aAAAA,IACEE,eAAAA,IAAwB,GACvC3jB,QAAA2jB,IAAA3jB,QAAAkI,GAAAlI,QAAAyjB,IAAAzjB,QAAAqc,IAAArc,QAAAoc,IAAApc,QAAA0a,GAAA1a,QAAAmb,GAAAnb,QAAAkb,GAAAlb,QAAA8M,IAAA9M,QAAA+M,IAAA/M,QAAA2a,GAAA3a,QAAAiO,MAAAA,KAAAjO,EAAA,EAAA;AAAA,MAAAmO;AAAA,EAAAnO,EAAA,EAAA,MAAAmiB,KAAAniB,UAAA6iB,MACD1U,KAAA0U,KACC,gBAAA/e,EAACiG,GAAA,EAAe,WAAA,mBAAwB,OAAA,YAAW,UAAA,IAChDoY,UAAAA,EAAAA,CACH,IAHD,MAIOniB,QAAAmiB,GAAAniB,QAAA6iB,IAAA7iB,QAAAmO,MAAAA,KAAAnO,EAAA,EAAA;AAAA,MAAAoO;AAAA,EAAApO,EAAA,EAAA,MAAAiO,MAAAjO,UAAAmO,MAlBVC,uBAAC8R,IAAA,EAAW,KAAA,MAAU,MAAA,KACpBjS,UAAAA;AAAAA,IAAAA;AAAAA,IAaCE;AAAAA,EAAAA,GAKH,GAASnO,QAAAiO,IAAAjO,QAAAmO,IAAAnO,QAAAoO,MAAAA,KAAApO,EAAA,EAAA;AAAA,MAAAqO;AAAA,EAAArO,EAAA,EAAA,MAAA8iB,EAAA/b,aAAA/G,EAAA,EAAA,MAAA8iB,EAAA9b,aACTqH,KAAA,gBAAAvK,EAACwL,IAAA,EAAmB,SAAA,SAAa,MAAA,SAAmB,WAAAwT,EAAS/b,WAAuB,WAAA+b,EAAS9b,UAAAA,CAAU,GAAIhH,EAAA,EAAA,IAAA8iB,EAAA/b,WAAA/G,EAAA,EAAA,IAAA8iB,EAAA9b,WAAAhH,QAAAqO,MAAAA,KAAArO,EAAA,EAAA;AAAA,MAAAsO;AAAA,EAAAtO,EAAA,EAAA,MAAAoO,MAAApO,UAAAqO,MArB7GC,KAAA,gBAAArE,EAACgW,IAAA,EAAe,SAAA,QAAyB,mBAAA,OAAkB,aAAA,iBAAmB,IAAA,MAAoB,gBAAA,iBAChG7R,UAAAA;AAAAA,IAAAA;AAAAA,IAoBAC;AAAAA,EAAAA,GACF,GAASrO,QAAAoO,IAAApO,QAAAqO,IAAArO,QAAAsO,MAAAA,KAAAtO,EAAA,EAAA;AAAA,MAAAyO;AAAA,EAAAzO,EAAA,EAAA,MAAA8hB,KAAA9hB,EAAA,EAAA,MAAAkI,KAAAlI,UAAAmiB,KAAAniB,EAAA,EAAA,MAAAuiB,KAAAviB,EAAA,EAAA,MAAA0iB,KAAA1iB,EAAA,EAAA,MAAA6hB,KAAA7hB,EAAA,EAAA,MAAAoL,KAAApL,EAAA,EAAA,MAAA4iB,KAAA5iB,UAAAqb,KACR5M,KAAAoT,sBACEJ,IAAA,CAAA,CAAiB,IAChBiB,IACF,gBAAA5e,EAACuF,GAAA,EAAS,MAAA,KAAS,MAAA,KACjB,4BAAC8L,IAAA,EACQoN,UACWK,kBAAAA,GACNxX,YAAAA,GACMiQ,kBAAAA,GACM4G,wBAAAA,GACNH,kBAAAA,GACJ5Z,cAAAA,GAAY,EAAA,CAE9B,sBAECmB,GAAA,EAAS,MAAA,KAAS,MAAA,KAAO,IAAA,MAAQ,IAAA,MAAa,SAAA,QAAkB,YAAA,UAAwB,gBAAA,UAAY,IAAA,MACnG,UAAA,gBAAAvF,EAACqG,IAAA,EAAkBgY,UAAc,EAAA,CACnC,GACDniB,QAAA8hB,GAAA9hB,QAAAkI,GAAAlI,QAAAmiB,GAAAniB,QAAAuiB,GAAAviB,QAAA0iB,GAAA1iB,QAAA6hB,GAAA7hB,QAAAoL,GAAApL,QAAA4iB,GAAA5iB,QAAAqb,GAAArb,QAAAyO,MAAAA,KAAAzO,EAAA,EAAA;AAAA,MAAA0O;AAAA,EAAA1O,EAAA,EAAA,MAAAsO,MAAAtO,UAAAyO,MA1CHC,KAAA,gBAAAzE,EAACU,IAAA,EAAQ,GAAA,QAAY,MAAA,KAAS,MAAA,KAAS,MAAA,KAAO,IAAA,MAAS,KAAA,KACrD2D,UAAAA;AAAAA,IAAAA;AAAAA,IAuBCG;AAAAA,EAAAA,GAmBH,GAAQzO,QAAAsO,IAAAtO,QAAAyO,IAAAzO,QAAA0O,MAAAA,KAAA1O,EAAA,EAAA;AA5CV,QAAAkkB,KACExV;AA4CA,MAAAC;AAAA,EAAA3O,EAAA,EAAA,MAAAkf,KAAAlf,UAAA8a,KAAA9a,EAAA,EAAA,MAAAyiB,KAAAziB,UAAAif,KAAAjf,EAAA,EAAA,MAAA4iB,KAAA5iB,UAAA4a,KAAA5a,EAAA,EAAA,MAAAikB,MAAAjkB,EAAA,EAAA,MAAAob,KAAApb,EAAA,EAAA,MAAAub,KAAAvb,WAAA2a,KASMhM,uBAACiR,IAAA,EACO,OAAA,iBACC6C,OAAAA,GACOG,cAAAA,GACJjI,UAAAA,GACGC,aAAAA,GACME,mBAAAA,GACLmJ,cAAAA,IACO7I,qBAAAA,GACLG,gBAAAA,GACC0D,iBAAAA,GACHC,cAAAA,GAAY,GAC1Blf,QAAAkf,GAAAlf,QAAA8a,GAAA9a,QAAAyiB,GAAAziB,QAAAif,GAAAjf,QAAA4iB,GAAA5iB,QAAA4a,GAAA5a,QAAAikB,IAAAjkB,QAAAob,GAAApb,QAAAub,GAAAvb,SAAA2a,GAAA3a,SAAA2O,MAAAA,KAAA3O,EAAA,GAAA;AAGO,QAAA6O,MAAC6L;AAAe,MAAA1L;AAAA,EAAAhP,WAAA+a,KAKR/L,KAAAmV,CAAAA,MAAepJ,EAAiB,CAACoJ,CAAS,GAACnkB,SAAA+a,GAAA/a,SAAAgP,MAAAA,KAAAhP,EAAA,GAAA;AAAA,MAAAiP;AAAA,SAAAjP,EAAA,GAAA,MAAAkkB,MAAAlkB,EAAA,GAAA,MAAA2O,MAAA3O,EAAA,GAAA,MAAA6O,MAAA7O,WAAAgP,MA1BlEC,uBAACmV,IAAA,EAAU,MAAA,KAAS,MAAA,KAAS,MAAA,KAAO,IAAA,MAAS,KAAA,KAAgB,eAAA,eAC3D,UAAA,gBAAAtgB,EAACugB,IAAA,EACM,MAAA,KACA,MAAA,KACA,MAAA,KAEH,gBAAA1V,IAcYuV,cAAAA,IACH,WAAArV,IACI,eAAA,KACJ,WAAA,KACO,kBAAA,KACN,aAAA,0BACO,mBAAAG,IAA2C,GAElE,GAAOhP,SAAAkkB,IAAAlkB,SAAA2O,IAAA3O,SAAA6O,IAAA7O,SAAAgP,IAAAhP,SAAAiP,MAAAA,KAAAjP,EAAA,GAAA,GA5BPiP;AA4BO;AAxKe,SAAApE,GAAAqP,GAAA;AAAA,SAGpB,gBAAApW,EAACiH,IAAA,EAAsB,GAAA,QAAS,GAAA,QAAkB,YAAA,KAAiB,cAAA,KAAA,GAApDmP,CAAwD;AAAG;AAKtD,SAAAsJ,GAAAviB,GAAA;AAAA,SAmEgB;AAAA,IAAAqQ,QAAU;AAAA,IAAQ9Q,KAAOS,GAAOT,MAAP,KAAoB;AAAA,EAAA;AAAG;AAnEhE,SAAAkjB,GAAAY,GAAA;AAAA,SAwEgB;AAAA,IAAAhT,QAAU;AAAA,IAAU9Q,KAAOS,GAAOT,MAAP,KAAoB;AAAA,EAAA;AAAG;"}
|