@pstdio/ui 0.40.0 → 0.41.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-81jr28u4.js → MermaidComponent-BCiI63_G.js} +3 -3
- package/dist/{MermaidComponent-81jr28u4.js.map → MermaidComponent-BCiI63_G.js.map} +1 -1
- package/dist/chat-question-bubble-w2vMbFsS.js +68 -0
- package/dist/chat-question-bubble-w2vMbFsS.js.map +1 -0
- package/dist/chat-ui.d.ts +96 -21
- package/dist/chat-ui.js +2091 -1441
- package/dist/chat-ui.js.map +1 -1
- package/dist/{data-table-stats-row-CpRe_xK2.js → data-table-stats-row-EiTEONdY.js} +2 -2
- package/dist/{data-table-stats-row-CpRe_xK2.js.map → data-table-stats-row-EiTEONdY.js.map} +1 -1
- package/dist/data-table.d.ts +27 -7
- package/dist/data-table.js +1035 -872
- package/dist/data-table.js.map +1 -1
- package/dist/diff-bubble-DewUd_2w.js +61 -0
- package/dist/diff-bubble-DewUd_2w.js.map +1 -0
- package/dist/{diff-drawer-45rpk3aq.js → diff-drawer-BwZBOObe.js} +106 -85
- package/dist/diff-drawer-BwZBOObe.js.map +1 -0
- package/dist/diff-viewer-kOOd7C7h.js +574 -0
- package/dist/diff-viewer-kOOd7C7h.js.map +1 -0
- package/dist/diff.d.ts +11 -0
- package/dist/diff.js +107 -98
- package/dist/diff.js.map +1 -1
- package/dist/display-sort-control-DPxc0e5z.js +587 -0
- package/dist/display-sort-control-DPxc0e5z.js.map +1 -0
- package/dist/{workspace-badge-Brm3Xr3m.d.ts → host-storage-DP0RLj4i.d.ts} +15 -1
- package/dist/{index-Bfddrlz8.d.ts → index-C9mywhyX.d.ts} +50 -14
- package/dist/index-D3UJyWWh.d.ts +501 -0
- package/dist/{index-CbtbcvKm.d.ts → index-DlmvvQ6x.d.ts} +1 -1
- package/dist/index.d.ts +44 -19
- package/dist/index.js +941 -908
- package/dist/index.js.map +1 -1
- package/dist/kanban-renderer.d.ts +2 -326
- package/dist/kanban-renderer.js +991 -610
- package/dist/kanban-renderer.js.map +1 -1
- package/dist/list-row-DM0DiIrN.js +1167 -0
- package/dist/list-row-DM0DiIrN.js.map +1 -0
- package/dist/{mermaid-renderer-DImi0fDp.js → mermaid-renderer-0PmNkOXI.js} +29 -29
- package/dist/mermaid-renderer-0PmNkOXI.js.map +1 -0
- package/dist/mermaid.js +1 -1
- package/dist/param-editor.js +2 -3
- package/dist/prism-JVIsQMoJ.js +1029 -0
- package/dist/prism-JVIsQMoJ.js.map +1 -0
- package/dist/{resource-badge-95WPVlZf.d.ts → resource-badge-nOWPqxFU.d.ts} +1 -0
- package/dist/rich-text-DM24VNQZ.js +10447 -0
- package/dist/rich-text-DM24VNQZ.js.map +1 -0
- package/dist/rich-text.d.ts +2 -2
- package/dist/rich-text.js +2 -2
- package/dist/style.css +1 -1
- package/dist/terminal.d.ts +5 -63
- package/dist/terminal.js +102 -122
- package/dist/terminal.js.map +1 -1
- package/dist/{theme-CbmSEbRF.js → theme-at0rtSnX.js} +435 -245
- package/dist/theme-at0rtSnX.js.map +1 -0
- package/dist/theme-kKuLN2jb.js +80 -0
- package/dist/theme-kKuLN2jb.js.map +1 -0
- package/dist/theme-preference-BV4cbJNB.js +115 -0
- package/dist/theme-preference-BV4cbJNB.js.map +1 -0
- package/dist/theme.js +3 -2
- package/dist/{tree-list-BNZwjQZA.js → tree-list-Cqgl8mnN.js} +255 -250
- package/dist/tree-list-Cqgl8mnN.js.map +1 -0
- package/package.json +4 -4
- package/dist/diff-bubble-DZsarmSG.js +0 -61
- package/dist/diff-bubble-DZsarmSG.js.map +0 -1
- package/dist/diff-drawer-45rpk3aq.js.map +0 -1
- package/dist/diff-viewer-BP_mI6Wx.js +0 -558
- package/dist/diff-viewer-BP_mI6Wx.js.map +0 -1
- package/dist/list-row-uqD-q4gv.js +0 -1018
- package/dist/list-row-uqD-q4gv.js.map +0 -1
- package/dist/mermaid-renderer-DImi0fDp.js.map +0 -1
- package/dist/param-editor-BQd4AOUP.js +0 -225
- package/dist/param-editor-BQd4AOUP.js.map +0 -1
- package/dist/param-editor-field-BJ_rLUnV.js +0 -2385
- package/dist/param-editor-field-BJ_rLUnV.js.map +0 -1
- package/dist/prism-BStPsJSB.js +0 -658
- package/dist/prism-BStPsJSB.js.map +0 -1
- package/dist/rich-text-VYAmEigU.js +0 -6979
- package/dist/rich-text-VYAmEigU.js.map +0 -1
- package/dist/slider-hwHYe98I.js +0 -423
- package/dist/slider-hwHYe98I.js.map +0 -1
- package/dist/theme-CbmSEbRF.js.map +0 -1
- package/dist/theme-preference-pzfuK5cH.js +0 -101
- package/dist/theme-preference-pzfuK5cH.js.map +0 -1
- package/dist/tree-list-BNZwjQZA.js.map +0 -1
- package/dist/types-DWA3enV6.d.ts +0 -182
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-viewer-kOOd7C7h.js","names":["ChangedFilesViewMode","ChangedFileTreeNode","normalizeChangedFilePath","path","split","map","segment","trim","filter","Boolean","join","sortNodes","nodes","sort","left","right","type","name","localeCompare","forEach","node","children","dedupePaths","paths","Array","from","Set","buildFlatTree","id","buildChangedFilesTree","mode","treeById","Map","rootNodes","segments","parentPath","parentNode","index","currentPath","isFile","length","nodeId","existingNode","get","nextNode","set","push","collectExpandedFolderIds","folderIds","visit","items","item","collectNestedFileOrder","orderedPaths","treeNodes","replace","sortPathsByViewMode","Box","IconButton","Menu","Check","ChevronsDownUp","ChevronsUpDown","List","ListTree","PanelLeftClose","PanelLeftOpen","Rows2","Settings2","SquareSplitHorizontal","ReactNode","ListRow","ChangedFilesViewMode","DiffViewMode","DiffViewerOptionsMenuProps","isTreePanelOpen","hasFilePaths","viewMode","diffViewMode","isExpandAllDisabled","isCollapseAllDisabled","onToggleTreePanel","onViewModeChange","onDiffViewModeChange","onExpandAll","onCollapseAll","DiffViewerMenuItemProps","id","label","icon","selected","disabled","onActivate","SelectionIndicator","props","$","_c","t0","t1","DiffViewerMenuItem","undefined","t2","t3","DiffViewerOptionsMenu","Symbol","for","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","_c","_Fragment","Box","Icon","Input","InputGroup","Stack","Text","FileText","Search","useRef","Header","EmptyState","ScrollArea","TreeList","TreeListNode","buildChangedFilesTree","FileChangeBadge","ChangedFilesViewMode","ChangedFileTreeNode","FileIconInfo","FileListPanelProps","paths","selectedPath","viewMode","searchQuery","expandedFolderIds","Set","onSelectPath","path","onSearchQueryChange","value","onToggleFolder","id","resolveFileIcon","options","isFolder","isExpanded","changeByPath","Map","getFilePathParts","filePath","lastSlashIndex","lastIndexOf","fileName","dirPath","slice","FlatFileLabelProps","FlatFileLabel","props","$","_c","t0","t1","t2","toTreeListNodes","input","nodes","map","node","type","label","name","isContainer","children","replace","fileIcon","icon","color","change","get","iconColor","endContent","undefined","onActivate","FileListPanel","scrollRef","fileTree","treeNodes","emptyTitle","trim","Symbol","for","event","target","t3","t4","style","overflowX","t5","length","t6","_c","ScrollArea","EmptyState","Box","Flex","HStack","Skeleton","Stack","Text","useEffect","useState","Header","ResizableSplitLayout","EmptyState","buildChangedFilesTree","collectExpandedFolderIds","sortPathsByViewMode","DiffBubble","Diff","DiffDrawer","DiffDrawerExpansionState","DiffExpansionCommand","useDiffViewerStore","DiffViewerOptionsMenu","FileListPanel","ChangedFilesViewMode","FileIconInfo","DiffViewerProps","diffs","changedFilePaths","defaultSelectedPath","loading","onLoadDiff","path","Promise","resolveFileIcon","options","isFolder","isExpanded","getDiffPath","diff","newPath","oldPath","buildChangeByPath","Map","map","change","sumDiffStats","reduce","total","additions","deletions","buildFilteredDiffs","input","normalizedSearchQuery","viewMode","matchingDiffs","filter","toLowerCase","includes","orderedPaths","orderByPath","index","sort","left","right","leftOrder","get","Number","MAX_SAFE_INTEGER","rightOrder","resolveSelectedPath","preferredPaths","fallbackPaths","loadingDiffItems","const","DiffViewerLoading","$","_c","t0","Symbol","for","_temp","DiffViewer","props","t1","undefined","diffExpansionCommand","setDiffExpansionCommand","t2","allExpanded","allCollapsed","diffExpansionState","setDiffExpansionState","isTreePanelOpen","diffViewMode","searchQuery","selectedPath","expandedFolderIds","setTreePanelOpen","setViewMode","setDiffViewMode","setSearchQuery","setSelectedPath","setExpandedFolderIds","toggleFolder","expandAll","collapseAll","allFilesExpanded","changeByPath","emptyDiffTitle","filePaths","filteredDiffPathKey","filteredDiffPaths","filteredDiffs","filteredFilePathKey","filteredFilePaths","folderIds","hasDiffs","hasExpandableItems","resolvedSelectedPath","showDiffEmptyState","t3","totalDiff","diffPaths","trim","t4","fileTree","join","length","t5","folderId","has","every","t6","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","isExpandAllDisabled","isCollapseAllDisabled","filePaths_0","split","tree","t7","diffPaths_0","filePaths_1","t8","_temp2","expandAllFilesAndDiffs","t9","_temp3","collapseAllFilesAndDiffs","t10","path_0","currentIndex","indexOf","nextIndex","direction","current_1","action","id","current","selectChangedFilePath","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","diffPanel","t22","t23","t24","collapsed","t25","item","current_0","_c","EmptyState","ScrollArea$1","Header","ListRow","ResizableSplitLayout","TreeList","EmptyState$1","DiffBubble","useDiffViewerStore","FileChangeBadge","normalizeChangedFilePath","path","segment","sortNodes","nodes","left","right","node","dedupePaths","paths","buildFlatTree","buildChangedFilesTree","mode","treeById","rootNodes","segments","parentPath","parentNode","currentPath","isFile","index","nodeId","existingNode","nextNode","collectExpandedFolderIds","folderIds","visit","item","collectNestedFileOrder","orderedPaths","sortPathsByViewMode","SelectionIndicator","$","c","t0","props","Check","t1","Box","DiffViewerMenuItem","selected","t2","disabled","icon","id","label","onActivate","t3","Menu","DiffViewerOptionsMenu","IconButton","Settings2","isTreePanelOpen","jsx","PanelLeftClose","PanelLeftOpen","onToggleTreePanel","t4","t5","hasFilePaths","onViewModeChange","viewMode","Fragment","ListTree","List","t6","Rows2","t7","diffViewMode","t8","onDiffViewModeChange","t9","t10","SquareSplitHorizontal","t11","t12","t13","t14","t15","ChevronsUpDown","t16","isExpandAllDisabled","onExpandAll","t17","ChevronsDownUp","t18","isCollapseAllDisabled","onCollapseAll","t19","getFilePathParts","lastSlashIndex","filePath","FlatFileLabel","fileName","Text","dirPath","toTreeListNodes","input","fileIcon","resolveFileIcon","Icon","FileText","change","changeByPath","onSelectPath","FileListPanel","scrollRef","useRef","treeNodes","emptyTitle","searchQuery","Search","onSearchQueryChange","event","InputGroup","Input","expandedFolderIds","onToggleFolder","selectedPath","Stack","getDiffPath","diff","buildChangeByPath","diffs","sumDiffStats","total","buildFilteredDiffs","matchingDiffs","normalizedSearchQuery","orderByPath","resolveSelectedPath","preferredPaths","fallbackPaths","loadingDiffItems","DiffViewerLoading","_temp","DiffViewer","defaultSelectedPath","loading","diffExpansionCommand","setDiffExpansionCommand","useState","diffExpansionState","setDiffExpansionState","allFilesExpanded","emptyDiffTitle","filePaths","filteredDiffPathKey","filteredDiffPaths","filteredDiffs","filteredFilePathKey","filteredFilePaths","hasDiffs","hasExpandableItems","resolvedSelectedPath","showDiffEmptyState","totalDiff","changedFilePaths","diffPaths","fileTree","folderId","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","setExpandedFolderIds","tree","useEffect","setSelectedPath","diffPaths_0","filePaths_1","expandAll","_temp2","expandAllFilesAndDiffs","collapseAll","_temp3","collapseAllFilesAndDiffs","currentIndex","nextIndex","path_0","direction","current_1","selectChangedFilePath","setTreePanelOpen","setDiffViewMode","setViewMode","HStack","onLoadDiff","DiffDrawer","t20","t21","diffPanel","t22","setSearchQuery","toggleFolder","t23","t24","collapsed","t25","Flex","Skeleton","current","current_0"],"sources":["../src/components/diff-viewer/build-changed-files-tree.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 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 { 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 { Box, 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 { FileChangeBadge } from \"./file-change-badge\";\nimport type { ChangedFilesViewMode, ChangedFileTreeNode, FileIconInfo } from \"./types\";\n\ninterface FileListPanelProps {\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 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\ninterface FlatFileLabelProps {\n fileName: string;\n dirPath: string;\n}\n\nconst FlatFileLabel = (props: FlatFileLabelProps) => {\n const { fileName, dirPath } = props;\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 { fileName, dirPath } = getFilePathParts(filePath);\n const fileIcon = resolveFileIcon?.(filePath) ?? { icon: <Icon as={FileText} boxSize=\"16px\" />, color: \"fg.subtle\" };\n const change = changeByPath?.get(filePath);\n return {\n id: node.id,\n label: viewMode === \"flat\" && dirPath ? <FlatFileLabel fileName={fileName} dirPath={dirPath} /> : node.name,\n icon: fileIcon.icon,\n iconColor: fileIcon.color,\n endContent: change ? <FileChangeBadge change={change} /> : undefined,\n onActivate: () => onSelectPath(filePath),\n };\n });\n};\n\nexport const FileListPanel = (props: FileListPanelProps) => {\n const {\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 flexShrink={0} borderBottomWidth=\"1px\" borderColor=\"border.subtle\" bg=\"bg\">\n <InputGroup startElement={<Search size={14} />}>\n <Input\n size=\"sm\"\n variant=\"borderless\"\n aria-label=\"Search files\"\n placeholder=\"Search files\"\n value={searchQuery}\n onChange={(event) => onSearchQueryChange(event.target.value)}\n />\n </InputGroup>\n </Header>\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 changes\" : \"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 && <DiffViewerLoading />}\n {!loading && 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 {!loading && !hasDiffs && (\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 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 separator=\"line\"\n onCollapsedChange={(collapsed) => setTreePanelOpen(!collapsed)}\n />\n </Flex>\n );\n};\n"],"mappings":";;;;;;;;;;;;;AAEA,IAAME,KAA4BC,MAChCA,EACGC,MAAM,GAAG,CAAC,CACVC,KAAKC,MAAYA,EAAQC,KAAK,CAAC,CAAC,CAChCC,OAAOC,OAAO,CAAC,CACfC,KAAK,GAAG,GAEPC,KAAaC,OACjBA,EAAMC,MAAMC,GAAMC,MACZD,EAAKE,SAASD,EAAMC,OACjBF,EAAKG,KAAKC,cAAcH,EAAME,IAAI,IADJH,EAAKE,SAAS,WAAW,KAAK,CAEpE,GAEDJ,EAAMO,SAASC,MAAS;CACtB,AAAIA,EAAKC,YAAUV,EAAUS,EAAKC,QAAQ;AAC5C,CAAC,GAEMT,IAGHU,KAAeC,MAAoBC,MAAMC,KAAK,IAAIC,IAAIH,EAAMlB,IAAIH,CAAwB,CAAC,CAACM,OAAOC,OAAO,CAAC,CAAC,GAE1GkB,KAAiBJ,MACrBD,EAAYC,CAAK,CAAC,CACflB,KAAKF,OAAU;CAAEyB,IAAI,QAAQzB;CAAQc,MAAMd;CAAMa,MAAM;AAAO,EAAgC,CAAC,CAC/FH,MAAMC,GAAMC,MAAUD,EAAKG,KAAKC,cAAcH,EAAME,IAAI,CAAC,GAEjDY,KAAyBN,GAAiBO,MAAsD;CAC3G,IAAIA,MAAS,QAAQ,OAAOH,EAAcJ,CAAK;CAE/C,IAAMQ,oBAAW,IAAIC,IAAiC,GAChDC,IAAmC,CAAA;CAoCzC,OAlCAX,EAAYC,CAAK,CAAC,CAACJ,SAAShB,MAAS;EACnC,IAAM+B,IAAW/B,EAAKC,MAAM,GAAG,GAC3B+B,IAAa,IACbC,IAAyC;EAE7CF,EAASf,SAASb,GAAS+B,MAAU;GACnC,IAAMC,IAAcH,IAAa,GAAGA,EAAU,GAAI7B,MAAYA,GACxDiC,IAASF,MAAUH,EAASM,SAAS,GACrCC,IAAS,GAAGF,IAAS,SAAS,SAAQ,GAAID,KAC1CI,IAAeX,EAASY,IAAIF,CAAM;GAExC,IAAIC,GAAc;IAEhBP,AADAC,IAAaM,GACbP,IAAaG;IACb;GACF;GAEA,IAAMM,IAAgC;IACpChB,IAAIa;IACJxB,MAAMX;IACNU,MAAMuB,IAAS,SAAS;IACxB,GAAIA,IAAS,CAAC,IAAI,EAAElB,UAAU,CAAA,EAAG;GACnC;GAQAc,AANAJ,EAASc,IAAIJ,GAAQG,CAAQ,GAExBR,IACAA,EAAWf,UAAUyB,KAAKF,CAAQ,IADtBX,EAAUa,KAAKF,CAAQ,GAGxCR,IAAaQ,GACbT,IAAaG;EACf,CAAC;CACH,CAAC,GAEM3B,EAAUsB,CAAS;AAC5B,GAEac,MAA4BnC,MAAiC;CACxE,IAAMoC,IAAsB,CAAA,GAEtBC,KAASC,MAAiC;EAC9CA,EAAM/B,SAASgC,MAAS;GACtB,AAAIA,EAAKnC,SAAS,aAClBgC,EAAUF,KAAKK,EAAKvB,EAAE,GACtBqB,EAAME,EAAK9B,YAAY,CAAA,CAAE;EAC3B,CAAC;CACH;CAGA,OADA4B,EAAMrC,CAAK,GACJoC;AACT,GAEMI,KAA0BxC,MAAiC;CAC/D,IAAMyC,IAAyB,CAAA,GAEzBJ,KAASK,MAAqC;EAClDA,EAAUnC,SAASC,MAAS;GAC1B,IAAIA,EAAKJ,SAAS,QAAQ;IACxBqC,EAAaP,KAAK1B,EAAKQ,GAAG2B,QAAQ,UAAU,EAAE,CAAC;IAC/C;GACF;GAEAN,EAAM7B,EAAKC,YAAY,CAAA,CAAE;EAC3B,CAAC;CACH;CAGA,OADA4B,EAAMrC,CAAK,GACJyC;AACT,GAEaG,KAAuBjC,GAAiBO,MAC/CA,MAAS,SAAe,CAAC,GAAGP,CAAK,CAAC,CAACV,MAAMC,GAAMC,MAAUD,EAAKI,cAAcH,CAAK,CAAC,IAC/EqC,EAAuBvB,EAAsBN,GAAO,QAAQ,CAAC,GCnEhEsE,MAAqBC,MAAA;CAAA,IAAAC,IAAAC,GAAA,CAAA,GAAAC;CAAA,AAAAF,EAAA,OAAAD,EAAAJ,WAEqBO,IAAAF,EAAA,MAA3CE,IAAAH,EAAKJ,WAAY,kBAACkW,GAAD,EAAa,MAAA,GAAE,CAAA,IAAhC,MAA2C7V,EAAA,KAAAD,EAAAJ,UAAAK,EAAA,KAAAE;CAAA,IAAAC;CACxC,OADwCH,EAAA,OAAAE,IACxCC,IAAAH,EAAA,MAFNG,IAAA,kBAAC4V,GAAD;EAAO,GAAA;EAAmB,YAAA;EAAW,SAAA;EAAsB,gBAAA;EACxD7V,UAAAA;CADC,CAAA,GAEEF,EAAA,KAAAE,GAAAF,EAAA,KAAAG,IAFNA;AAEM,GAGFC,KAAqBL,MAAA;CAAA,IAAAC,IAAAC,GAAA,EAAA,GACzB,EAAAT,OAAAC,UAAAC,SAAAC,aAAAC,aAAAC,kBAA4DE,GAMhDG,IAAAP,MAAaU,KAAAA,IAAbA,KAAAA,IAAA,iBAAoDF;CAAA,AAAAH,EAAA,OAAAL,IAQiCQ,IAAAH,EAAA,MAA/EG,IAAAR,MAAaU,KAAAA,IAAbA,KAAAA,IAAqC,kBAACmV,IAAD,EAA8B7V,YAAQ,CAAA,GAAIK,EAAA,KAAAL,GAAAK,EAAA,KAAAG;CAAA,IAAAG;CAAA,AAAAN,EAAA,OAAAJ,KAAAI,EAAA,OAAAN,KAAAM,EAAA,OAAAR,KAAAQ,EAAA,OAAAP,KAAAO,EAAA,OAAAH,KAAAG,EAAA,OAAAL,KAAAK,EAAA,OAAAE,KAAAF,EAAA,OAAAG,KAV7FG,IAAA,kBAAC4S,GAAD;EACE,SAAA;EACM,MAAAhT;EACQP,gBAAAA;EACN,SAAA;EACJH;EACEE;EACCD;EACGG;EACED,YAAAA;EACA,YAAAQ;EACAN;CAAU,CAAA,GACtBG,EAAA,KAAAJ,GAAAI,EAAA,KAAAN,GAAAM,EAAA,KAAAR,GAAAQ,EAAA,KAAAP,GAAAO,EAAA,KAAAH,GAAAG,EAAA,KAAAL,GAAAK,EAAA,KAAAE,GAAAF,EAAA,KAAAG,GAAAH,EAAA,MAAAM,KAAAA,IAAAN,EAAA;CAAA,IAAAO;CACQ,OADRP,EAAA,QAAAJ,KAAAI,EAAA,QAAAR,KAAAQ,EAAA,QAAAM,KAbJC,IAAA,kBAAAkW,EAAA,MAAA;EAAkBjX,OAAAA;EAAcI;EAAU,SAAA;EACxCU,UAAAA;CAaF,CAAA,GAAYN,EAAA,MAAAJ,GAAAI,EAAA,MAAAR,GAAAQ,EAAA,MAAAM,GAAAN,EAAA,MAAAO,KAAAA,IAAAP,EAAA,KAdZO;AAcY,GAIHC,MAAwBT,MAAA;CAAA,IAAAC,IAAAC,GAAA,EAAA,GACnC,EAAArB,oBAAAC,iBAAAC,aAAAC,iBAAAC,wBAAAC,0BAAAC,sBAAAC,qBAAAC,yBAAAC,gBAAAC,qBAYIS,GAAMG;CAAA,AAAAF,EAAA,OAAAS,OAAAC,IAAA,2BAAA,KAINR,IAAA,kBAAAuW,EAAA,SAAA;EAAc,SAAA;EACZ,UAAA,kBAACE,IAAD;GAAuB,cAAA;GAA4B,SAAA;GAAa,MAAA;GAC9D,UAAA,kBAACC,IAAD,EAAiB,MAAA,GAAE,CAAA;EADV,CAAA;CAGb,CAAA,GAAe5W,EAAA,KAAAE,KAAAA,IAAAF,EAAA;CAAA,IAAAG;CAAA,AAAAH,EAAA,OAAApB,IAKyEuB,IAAAH,EAAA,MAA5EG,IAAkB2W,EAAlBlY,IAAmBmY,IAA+BC,IAAhC,EAAsB,MAAA,GAAE,CAA8B,GAAIhX,EAAA,KAAApB,GAAAoB,EAAA,KAAAG;CAC3E,IAAAG,IAAA1B,IAAA,mBAAA,kBAAqD2B;CAAA,AAAAP,EAAA,OAAAd,KAAAc,EAAA,OAAAG,KAAAH,EAAA,OAAAM,KAH9DC,IAAA,kBAACyV,GAAD;EACK,IAAA;EACG,MAAA7V;EACC,OAAAG;EACKpB,YAAAA;CAAiB,CAAA,GAC7Bc,EAAA,KAAAd,GAAAc,EAAA,KAAAG,GAAAH,EAAA,KAAAM,GAAAN,EAAA,KAAAO,KAAAA,IAAAP,EAAA;CAAA,IAAAW;CAAA,AAAAX,EAAA,OAAAS,OAAAC,IAAA,2BAAA,KACFC,KAAA,kBAAA8V,EAAA,WAAA,CAAA,CAAA,GAAkBzW,EAAA,KAAAW,MAAAA,KAAAX,EAAA;CAAA,IAAAY;CAAA,AAAAZ,EAAA,OAAAnB,KAAAmB,EAAA,OAAAb,KAAAa,EAAA,QAAAlB,KACjB8B,IAAA/B,IAAA,kBAAA+C,GAAA,EAAA,UAAA;EAEG,kBAACoU,GAAD;GACK,IAAA;GACG,MAAA,kBAACwB,GAAD,EAAgB,MAAA,GAAE,CAAA;GAClB,OAAA;GACI,UAAA1Y,MAAa;GACX,kBAAMK,EAAiB,QAAQ;EAAC,CAAA;EAE9C,kBAAC6W,GAAD;GACK,IAAA;GACG,MAAA,kBAACyB,GAAD,EAAY,MAAA,GAAE,CAAA;GACd,OAAA;GACI,UAAA3Y,MAAa;GACX,kBAAMK,EAAiB,MAAM;EAAC,CAAA;EAE5C,kBAAAsX,EAAA,WAAA,CAAA,CAAA;CAAkB,EAAA,CAAA,IAhBrB,MAkBOzW,EAAA,KAAAnB,GAAAmB,EAAA,KAAAb,GAAAa,EAAA,MAAAlB,GAAAkB,EAAA,MAAAY,KAAAA,IAAAZ,EAAA;CAAA,IAAAa;CAAA,AAAAb,EAAA,QAAAS,OAAAC,IAAA,2BAAA,KAGAG,IAAA,kBAAC8W,GAAD,EAAa,MAAA,GAAE,CAAA,GAAI3X,EAAA,MAAAa,KAAAA,IAAAb,EAAA;CAEf,IAAAc,IAAA/B,MAAiB,WAASgC;CAAA,AAAAf,EAAA,QAAAZ,IACa2B,IAAAf,EAAA,OAArCe,UAAM3B,EAAqB,SAAS,GAACY,EAAA,MAAAZ,GAAAY,EAAA,MAAAe;CAAA,IAAAC;CAAA,AAAAhB,EAAA,QAAAc,KAAAd,EAAA,QAAAe,KALnDC,IAAA,kBAACgV,GAAD;EACK,IAAA;EACG,MAAAnV;EACA,OAAA;EACI,UAAAC;EACE,YAAAC;CAAqC,CAAA,GACjDf,EAAA,MAAAc,GAAAd,EAAA,MAAAe,GAAAf,EAAA,MAAAgB,KAAAA,IAAAhB,EAAA;CAAA,IAAAiB;CAAA,AAAAjB,EAAA,QAAAS,OAAAC,IAAA,2BAAA,KAGMO,IAAA,kBAACiX,IAAD,EAA6B,MAAA,GAAE,CAAA,GAAIlY,EAAA,MAAAiB,KAAAA,IAAAjB,EAAA;CAE/B,IAAAkB,IAAAnC,MAAiB,SAAOoC;CAAA,AAAAnB,EAAA,QAAAZ,IACa+B,IAAAnB,EAAA,OAAnCmB,UAAM/B,EAAqB,OAAO,GAACY,EAAA,MAAAZ,GAAAY,EAAA,MAAAmB;CAAA,IAAAC;CAAA,AAAApB,EAAA,QAAAkB,KAAAlB,EAAA,QAAAmB,KALjDC,IAAA,kBAAC4U,GAAD;EACK,IAAA;EACG,MAAA/U;EACA,OAAA;EACI,UAAAC;EACE,YAAAC;CAAmC,CAAA,GAC/CnB,EAAA,MAAAkB,GAAAlB,EAAA,MAAAmB,GAAAnB,EAAA,MAAAoB,KAAAA,IAAApB,EAAA;CAAA,IAAAqB;CAAA,AAAArB,EAAA,QAAAS,OAAAC,IAAA,2BAAA,KACFW,IAAA,kBAAAoV,EAAA,WAAA,CAAA,CAAA,GAAkBzW,EAAA,MAAAqB,KAAAA,IAAArB,EAAA;CAAA,IAAAsB;CAAA,AAAAtB,EAAA,QAAAS,OAAAC,IAAA,2BAAA,KAGVY,IAAA,kBAACkX,GAAD,EAAsB,MAAA,GAAE,CAAA,GAAIxY,EAAA,MAAAsB,KAAAA,IAAAtB,EAAA;CAAA,IAAAuB;CAAA,AAAAvB,EAAA,QAAAhB,KAAAgB,EAAA,QAAAX,KAFpCkC,IAAA,kBAACyU,GAAD;EACK,IAAA;EACG,MAAA1U;EACA,OAAA;EACItC,UAAAA;EACEK,YAAAA;CAAW,CAAA,GACvBW,EAAA,MAAAhB,GAAAgB,EAAA,MAAAX,GAAAW,EAAA,MAAAuB,KAAAA,IAAAvB,EAAA;CAAA,IAAAwB;CAAA,AAAAxB,EAAA,QAAAS,OAAAC,IAAA,2BAAA,KAGMc,KAAA,kBAACqX,GAAD,EAAsB,MAAA,GAAE,CAAA,GAAI7Y,EAAA,MAAAwB,MAAAA,KAAAxB,EAAA;CAAA,IAAAyB;CAAA,AAAAzB,EAAA,QAAAf,KAAAe,EAAA,QAAAV,KAFpCmC,IAAA,kBAACuU,GAAD;EACK,IAAA;EACG,MAAAxU;EACA,OAAA;EACIvC,UAAAA;EACEK,YAAAA;CAAa,CAAA,GACzBU,EAAA,MAAAf,GAAAe,EAAA,MAAAV,GAAAU,EAAA,MAAAyB,KAAAA,IAAAzB,EAAA;CAAA,IAAA0B;CAGI,OAHJ1B,EAAA,QAAAoB,KAAApB,EAAA,QAAAuB,KAAAvB,EAAA,QAAAyB,KAAAzB,EAAA,QAAAO,KAAAP,EAAA,QAAAY,KAAAZ,EAAA,QAAAgB,KA9DRU,IAAA,kBAAA+U,EAAA,MAAA,EAAA,UAAA,CACEvW,GAKA,kBAAAuW,EAAA,YAAA,EAAA,UACE,kBAAAA,EAAA,SAAA;EAAmB,MAAA;EAAW,IAAA;EAAO,GAAA;EAAQ,KAAA;EAA7C,UAAA;GACElW;GAMAI;GACCC;GAmBDI;GAOAI;GAOAC;GACAE;GAOAE;EAOF;CACF,CAAA,EAAA,CAAA,CACF,EAAA,CAAA,GAAYzB,EAAA,MAAAoB,GAAApB,EAAA,MAAAuB,GAAAvB,EAAA,MAAAyB,GAAAzB,EAAA,MAAAO,GAAAP,EAAA,MAAAY,GAAAZ,EAAA,MAAAgB,GAAAhB,EAAA,MAAA0B,KAAAA,IAAA1B,EAAA,KAjEZ0B;AAiEY,GC5HVyC,KAAoBC,MAAqB;CAC7C,IAAMC,IAAiBD,EAASE,YAAY,GAAG;CAE/C,OADID,IAAiB,IAAU;EAAEE,UAAUH;EAAUI,SAAS;CAAG,IAC1D;EAAED,UAAUH,EAASK,MAAMJ,IAAiB,CAAC;EAAGG,SAASJ,EAASK,MAAM,GAAGJ,CAAc;CAAE;AACpG,GAOMM,KAAgBC,MAAA;CAAA,IAAAC,IAAAC,GAAA,CAAA,GACpB,EAAAP,aAAAC,eAA8BI,GAAMG;CAAA,AAAAF,EAAA,OAAAN,IAMzBQ,IAAAF,EAAA,MAFPE,IAAA,kBAACwU,GAAD;EAAS,IAAA;EAAa,OAAA;EACnBhV,UAAAA;CADE,CAAA,GAEEM,EAAA,KAAAN,GAAAM,EAAA,KAAAE;CAAA,IAAAC;CAAA,AAAAH,EAAA,OAAAL,IAGAQ,IAAAH,EAAA,MAFPG,IAAA,kBAACuU,GAAD;EAAS,IAAA;EAAa,OAAA;EACnB/U,UAAAA;CADE,CAAA,GAEEK,EAAA,KAAAL,GAAAK,EAAA,KAAAG;CAAA,IAAAC;CACF,OADEJ,EAAA,OAAAE,KAAAF,EAAA,OAAAG,KANTC,IAAA,kBAACsU,GAAD;EAAgB,WAAA;EAAkB,UAAA;EAAlC,UAAA;GACExU;GAEQ;GACRC;EAJG;KAOEH,EAAA,KAAAE,GAAAF,EAAA,KAAAG,GAAAH,EAAA,KAAAI,KAAAA,IAAAJ,EAAA,IAPPI;AAOO,GAILC,KAAmBC,MAMH;CACpB,IAAM,EAAEC,UAAOjC,aAAUI,iBAAcM,oBAAiBI,oBAAiBkB;CAEzE,OAAOC,EAAMC,KAAKC,MAAS;EACzB,IAAIA,EAAKC,SAAS,UAChB,OAAO;GACL3B,IAAI0B,EAAK1B;GACT4B,OAAOF,EAAKG;GACZC,aAAa;GACbC,UAAUT,EAAgB;IACxBE,OAAOE,EAAKK,YAAY,CAAA;IACxBxC;IACAI;IACAM;IACAI;GACF,CAAC;EACH;EAGF,IAAMG,IAAWkB,EAAK1B,GAAGgC,QAAQ,UAAU,EAAE,GACvC,EAAErB,aAAUC,eAAYL,EAAiBC,CAAQ,GACjDyB,IAAWhC,IAAkBO,CAAQ,KAAK;GAAE0B,MAAM,kBAAC+T,GAAD;IAAM,IAAI1X;IAAU,SAAQ;GAAM,CAAA;GAAK4D,OAAO;EAAY,GAC5GC,IAAS/B,GAAcgC,IAAI7B,CAAQ;EACzC,OAAO;GACLR,IAAI0B,EAAK1B;GACT4B,OAAOrC,MAAa,UAAUqB,IAAU,kBAAC6U,GAAD;IAAyB9U;IAAmBC;GAAQ,CAAA,IAAMc,EAAKG;GACvGK,MAAMD,EAASC;GACfI,WAAWL,EAASE;GACpBI,YAAYH,IAAS,kBAACwN,GAAD,EAAyBxN,UAAO,CAAA,IAAMI,KAAAA;GAC3DC,kBAAkB9C,EAAaa,CAAQ;EACzC;CACF,CAAC;AACH,GAEakC,MAAgB1B,MAAA;CAAA,IAAAC,IAAAC,GAAA,EAAA,GAC3B,EAAA7B,UAAAC,iBAAAC,aAAAC,gBAAAC,sBAAAE,iBAAAE,wBAAAE,oBAAAE,oBAAAI,oBAWIW,GACJ2B,IAAkBlE,EAAuB,IAAI,GAAE0C;CAAA,AAAAF,EAAA,OAAAZ,KAAAY,EAAA,OAAAtB,KAAAsB,EAAA,OAAA5B,KAAA4B,EAAA,OAAAhB,KAAAgB,EAAA,OAAA1B,KAE7B4B,IAAAG,EAAgB;EAAAE,OADjBzC,EAAsBM,GAAOE,CACHqD;EAAQrD;EAAAI;EAAAM;EAAAI;CAAwD,CAAC,GAACY,EAAA,KAAAZ,GAAAY,EAAA,KAAAtB,GAAAsB,EAAA,KAAA5B,GAAA4B,EAAA,KAAAhB,GAAAgB,EAAA,KAAA1B,GAAA0B,EAAA,KAAAE,KAAAA,IAAAF,EAAA;CAA7G,IAAA4B,IAAkB1B,GAClB2B,IAAmBtD,EAAWuD,KAAiD,IAA5D,sBAAA,oBAA8D3B;CAAA,AAAAH,EAAA,OAAA+B,OAAAC,IAAA,2BAAA,KAKjD7B,IAAA,kBAACwV,GAAD,EAAc,MAAA,GAAE,CAAA,GAAI3V,EAAA,KAAAG,KAAAA,IAAAH,EAAA;CAAA,IAAAI;CAAA,AAAAJ,EAAA,OAAApB,IAOkBwB,IAAAJ,EAAA,MAAlDI,KAAA6B,MAAWrD,EAAoBqD,EAAKC,OAAOrD,KAAM,GAACmB,EAAA,KAAApB,GAAAoB,EAAA,KAAAI;CAAA,IAAA+B;CAAA,AAAAnC,EAAA,OAAAzB,KAAAyB,EAAA,QAAAI,KARlE+B,IAAA,kBAACiM,GAAD;EAAoB,YAAA;EAAqB,mBAAA;EAAkB,aAAA;EAAmB,IAAA;EAC5E,UAAA,kBAAC0H,GAAD;GAA0B,cAAA3V;GACxB,UAAA,kBAAC4V,GAAD;IACO,MAAA;IACG,SAAA;IACG,cAAA;IACC,aAAA;IACLxX,OAAAA;IACG,UAAA6B;GAAkD,CAAA;EAPrD,CAAA;CADN,CAAA,GAWEJ,EAAA,KAAAzB,GAAAyB,EAAA,MAAAI,GAAAJ,EAAA,MAAAmC,KAAAA,IAAAnC,EAAA;CAAA,IAAAoC;CAAA,AAAApC,EAAA,QAAA+B,OAAAC,IAAA,2BAAA,KAOQI,IAAA,EAAAC,OAAS,EAAAC,WAAa,SAAS,EAAE,GAACtC,EAAA,MAAAoC,KAAAA,IAAApC,EAAA;CAAA,IAAAuC;CAAA,AAAAvC,EAAA,QAAA6B,KAAA7B,EAAA,QAAAxB,KAAAwB,EAAA,QAAAlB,MAAAkB,EAAA,QAAA5B,EAAAoE,UAAAxC,EAAA,QAAA3B,KAAA2B,EAAA,QAAA4B,KANnDW,IAAA,kBAACI,GAAD;EACO,MAAA;EACA,MAAA;EACA,MAAA;EACF,IAAA;EACUjB,aAAAA;EACE,eAAAU;EAEdhE,UAAAA,EAAKoE,SAAU,IACd,kBAAC+L,GAAD;GACY,UAAA,CAAC;IAAAxP,IAAM;IAAOwB,OAASqB;GAAU,CAAC;GAC3B,iBAAA,CAAA,GAAIpD,CAAiB;GACxB,cAAAH,IAAA,QAAuBA,MAAvB;GACH,YAAA;GACGS,cAAAA;GACd,YAAA;GACW4C;EAAS,CAAA,IAGtB,kBAACwP,GAAD;GAAQ,IAAA;GAAQ,IAAA;GACd,UAAA,kBAACtO,GAAD;IAAmBf,OAAAA;IAAiB,MAAA;IAAe,WAAA;IAAkB,YAAA;GAAY,CAAA;EAD/E,CAAA;CAnBG,CAAA,GAuBE7B,EAAA,MAAA6B,GAAA7B,EAAA,MAAAxB,GAAAwB,EAAA,MAAAlB,IAAAkB,EAAA,MAAA5B,EAAAoE,QAAAxC,EAAA,MAAA3B,GAAA2B,EAAA,MAAA4B,GAAA5B,EAAA,MAAAuC,KAAAA,IAAAvC,EAAA;CAAA,IAAAyC;CACP,OADOzC,EAAA,QAAAmC,KAAAnC,EAAA,QAAAuC,KApCfE,IAAA,kBAAC0T,IAAD;EAAS,GAAA;EAAY,MAAA;EAAS,MAAA;EAAM,GAAA;EAAW,KAAA;EAAa,UAAA;EAAY,IAAA;EAAxE,UAAA,CACEhU,GAYAI,CAbI;KAqCEvC,EAAA,MAAAmC,GAAAnC,EAAA,MAAAuC,GAAAvC,EAAA,MAAAyC,KAAAA,IAAAzC,EAAA,KArCRyC;AAqCQ,GC5HNwC,KAAeC,MAAeA,EAAKC,WAAWD,EAAKE,WAAW,WAC9DC,MAAqBf,MAAkB,IAAIgB,IAAIhB,EAAMiB,KAAKL,MAAS,CAACD,EAAYC,CAAI,GAAGA,EAAKM,MAAM,CAAC,CAAC,GACpGC,MAAgBnB,MACpBA,EAAMoB,QACHC,GAAOT,OAAU;CAChBU,WAAWD,EAAMC,aAAaV,EAAKU,aAAa;CAChDC,WAAWF,EAAME,aAAaX,EAAKW,aAAa;AAClD,IACA;CAAED,WAAW;CAAGC,WAAW;AAAE,CAC/B,GAEIC,MAAsBC,MAItB;CACJ,IAAM,EAAEzB,UAAO0B,0BAAuBC,gBAAaF,GAC7CG,IAAgBF,IAClB1B,EAAM6B,QAAQjB,MAASD,EAAYC,CAAI,CAAC,CAACkB,YAAY,CAAC,CAACC,SAASL,CAAqB,CAAC,IACtF1B,GACEgC,IAAe5C,EAAoBwC,EAAcX,IAAIN,CAAW,GAAGgB,CAAQ,GAC3EM,IAAc,IAAIjB,IAAIgB,EAAaf,KAAKZ,GAAM6B,MAAU,CAAC7B,GAAM6B,CAAK,CAAC,CAAC;CAE5E,OAAO,CAAC,GAAGN,CAAa,CAAC,CAACO,MAAMC,GAAMC,OAClBJ,EAAYM,IAAI5B,EAAYyB,CAAI,CAAC,qBAChCH,EAAYM,IAAI5B,EAAY0B,CAAK,CAAC,iBAEtD;AACH,GAEMM,MAAuBC,GAA0BC,MACrDD,EAAe,MAAMC,EAAc,MAAM,MAErCC,IAAmB;CAAC;CAAS;CAAU;AAAO,GAE9CE,WAAoB;CAAA,IAAAC,IAAAC,GAAA,CAAA,GAAAC;CAKhB,OALgBF,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KACxBF,IAAA,kBAAC0O,IAAD;EAAY,MAAA;EAAS,MAAA;EAAO,IAAA;EAAO,GAAA;EAAS,KAAA;EAAU,MAAA;EAAmB,aAAA;EAAkB,cAAA;EACxF/O,UAAAA,EAAgB7B,IAAKqC,CAErB;CAHG,CAAA,GAIEL,EAAA,KAAAE,KAAAA,IAAAF,EAAA,IAJRE;AAIQ,GAGGI,KAAaC,MAAA;CAAA,IAAAP,IAAAC,GAAA,GAAA,GACxB,EAAAlD,UAAAC,qBAAAC,qBAAAiD,GAAAhD,SAAAsD,IAAArD,eAAAG,uBAA8GiD,GAA7EtD,IAAAiD,MAAAO,KAAAA,IAAA,OAAAP,GAA4BhD,IAAAsD,OAAAC,KAAAA,KAAAD,IAC7D,CAAAE,GAAAC,KAAwD9E,EAAsC,IAAI,GAAE+E;CAAA,AAAAZ,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KACbQ,IAAA;EAAAC,aACxE;EAAKC,cACJ;CAChB,GAACd,EAAA,KAAAY,KAAAA,IAAAZ,EAAA;CAHD,IAAA,CAAAe,GAAAC,KAAoDnF,EAAmC+E,CAGtF,GACD,EAAAK,oBAAAvC,aAAAwC,iBAAAC,gBAAAC,kBAAAC,sBAAAC,qBAAAC,iBAAAC,qBAAAC,mBAAAC,oBAAAC,yBAAAC,iBAAAC,cAAAC,mBAgBIrF,EAAmB,GAAEsF,IAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,IAAAC,GAAAC,IAAAC,IAAAC;CAAA,IAAA9C,EAAA,OAAAhD,KAAAgD,EAAA,OAAA/C,KAAA+C,EAAA,OAAAjD,KAAAiD,EAAA,OAAAqB,KAAArB,EAAA,OAAA9C,KAAA8C,EAAA,OAAAmB,KAAAnB,EAAA,OAAAoB,MAAApB,EAAA,OAAAtB,GAAA;EAEzB,IAAAqE,IAAkBhG,EAAKiB,IAAKN,CAAW;EACvCwE,IAAkBlF,KAAA+F;EAClB,IAAAtE,IAA8B0C,EAAW6B,KAAM,CAAC,CAAAnE,YAAa;EAI7DwD,AAHAE,IAA0B9D,IACtByD,EAAStD,QAAQxB,MAAUA,EAAIyB,YAAa,CAAC,CAAAC,SAAUL,CAAqB,CACpE,IAFcyD,GAG1BG,IAAsB9D,GAAmB;GAAAxB;GAAA0B;GAAAC;EAAyC,CAAC;EAAE,IAAAuE;EAErFb,AAFqFpC,EAAA,QAAAjD,IACxCkG,IAAAjD,EAAA,OAAxBiD,IAAAnF,GAAkBf,CAAK,GAACiD,EAAA,MAAAjD,GAAAiD,EAAA,MAAAiD,IAA7CjB,IAAqBiB,GACrBb,IAA0BC,EAAarE,IAAKN,CAAW;EACvD,IAAAwF,IAAiBjH,EAAsBsG,GAAmB7D,CAAQ;EAUlEgE,AATAF,IAAkB9D,MAAa,WAAWxC,GAAyBgH,CAAa,IAA9D,CAAA,GAClBZ,IAA4BC,EAAiBY,KAAM,IAAI,GACvDhB,IAA4BC,EAAiBe,KAAM,IAAI,GACvDR,IACEvB,MAAAnE,KAAuCyC,GAAoB0C,GAAmBG,CAAiB,GACjGE,IAAiBJ,EAAae,SAAU,GACxCnB,IAAuBxD,IAAA,wBAAA,cACvBmE,KAA2B,CAAC1F,KAAD,CAAauF,GACxCK,IAAkB5E,GAAamE,CAAa,GAC5CK,KAA2BF,EAASY,SAAU,KAAKf,EAAae,SAAU;EAAE,IAAAC;EAC5EtB,AAD4E/B,EAAA,QAAAqB,IACUgC,IAAArD,EAAA,OAA7CqD,KAAAC,MAAcjC,EAAiBkC,IAAKD,CAAQ,GAACtD,EAAA,MAAAqB,GAAArB,EAAA,MAAAqD,IAAtFtB,KAAyBS,EAASgB,MAAOH,CAA6C;EAAE,IAAAI;EACCzD,AADDA,EAAA,QAAAqB,IACAoC,IAAAzD,EAAA,OAA9CyD,KAAAC,MAAc,CAACrC,EAAiBkC,IAAKD,CAAQ,GAACtD,EAAA,MAAAqB,GAAArB,EAAA,MAAAyD,IAA9DZ,KAAAL,EAASgB,MAAOC,CAA8C,GAACzD,EAAA,KAAAhD,GAAAgD,EAAA,KAAA/C,GAAA+C,EAAA,KAAAjD,GAAAiD,EAAA,KAAAqB,GAAArB,EAAA,KAAA9C,GAAA8C,EAAA,KAAAmB,GAAAnB,EAAA,KAAAoB,IAAApB,EAAA,KAAAtB,GAAAsB,EAAA,KAAA+B,IAAA/B,EAAA,MAAAgC,GAAAhC,EAAA,MAAAiC,GAAAjC,EAAA,MAAAkC,GAAAlC,EAAA,MAAAmC,GAAAnC,EAAA,MAAAoC,GAAApC,EAAA,MAAAqC,GAAArC,EAAA,MAAAsC,GAAAtC,EAAA,MAAAuC,GAAAvC,EAAA,MAAAwC,GAAAxC,EAAA,MAAAyC,GAAAzC,EAAA,MAAA0C,IAAA1C,EAAA,MAAA2C,GAAA3C,EAAA,MAAA4C,IAAA5C,EAAA,MAAA6C,IAAA7C,EAAA,MAAA8C;CAAA,OAAAA,AAAAf,KAAA/B,EAAA,IAAAgC,IAAAhC,EAAA,KAAAiC,IAAAjC,EAAA,KAAAkC,IAAAlC,EAAA,KAAAmC,IAAAnC,EAAA,KAAAoC,IAAApC,EAAA,KAAAqC,IAAArC,EAAA,KAAAsC,IAAAtC,EAAA,KAAAuC,IAAAvC,EAAA,KAAAwC,IAAAxC,EAAA,KAAAyC,IAAAzC,EAAA,KAAA0C,KAAA1C,EAAA,KAAA2C,IAAA3C,EAAA,KAAA4C,KAAA5C,EAAA,KAAA6C,KAAA7C,EAAA,KAAA8C,IAAA9C,EAAA;CAAzF,IAAA2D,KAA0Bd,IAC1Be,KAAyBvB,EAAae,WAAY,KAAKrC,EAAkBF,aACzEgD,KAA0BxB,EAAae,WAAY,KAAKrC,EAAkBD,cAC1EgD,KAA4B,CAACpB,MAAuBX,MAAA6B,IACpDG,KAA8B,CAACrB,MAAuBiB,MAAAE,IAAwCZ,IAAAI;CAE9FzH,AAF8FoE,EAAA,QAAAsC,KAAAtC,EAAA,QAAA2B,KAAA3B,EAAA,QAAAtB,KAEpFuE,WAAA;EAER,IAAAiB,IAAajI,EADKqG,IAAsBA,EAAmB2B,MAAO,IAAS,IAAzD,CAAA,GAC4BvF,CAAQ;EACtDiD,EAAqBjD,MAAa,WAAWxC,GAAyBgI,CAAS,IAA1D,CAAA,CAA2D;CAAC,GAChFb,KAAA;EAACf;EAAqBX;EAAsBjD;CAAQ,GAACsB,EAAA,MAAAsC,GAAAtC,EAAA,MAAA2B,GAAA3B,EAAA,MAAAtB,GAAAsB,EAAA,MAAAiD,IAAAjD,EAAA,MAAAqD,OAAAJ,KAAAjD,EAAA,KAAAqD,KAAArD,EAAA,MAJxDpE,EAAUqH,IAIPI,EAAqD;CAAC,IAAAI,IAAAU;CAEzDvI,AAFyDoE,EAAA,QAAAmC,KAAAnC,EAAA,QAAAsC,KAAAtC,EAAA,QAAA2C,KAAA3C,EAAA,QAAA0B,KAE/C+B,WAAA;EACR,IAAAW,IAAkBjC,IAAsBA,EAAmB8B,MAAO,IAAS,IAAzD,CAAA,GAClBI,IAAkB/B,IAAsBA,EAAmB2B,MAAO,IAAS,IAAzD,CAAA;EAClB,AAAItB,KAAwBI,EAASjE,SAAU6D,CAAoB,KACnEjB,EAAgBhC,GAAoBqD,GAAWb,CAAS,CAAC;CAAC,GACzDiC,KAAA;EAAChC;EAAqBG;EAAqBK;EAAsBjB;CAAe,GAAC1B,EAAA,MAAAmC,GAAAnC,EAAA,MAAAsC,GAAAtC,EAAA,MAAA2C,GAAA3C,EAAA,MAAA0B,GAAA1B,EAAA,MAAAyD,IAAAzD,EAAA,MAAAmE,OAAAV,KAAAzD,EAAA,KAAAmE,KAAAnE,EAAA,MALpFpE,EAAU6H,IAKPU,EAAiF;CAAC,IAAAG;CAAA,AAAAtE,EAAA,QAAA6B,KAAA7B,EAAA,QAAAwC,KAEtD8B,WAAA;EAE7B3D,AADAkB,EAAUW,CAAS,GACnB7B,EAAwB4D,EAA+D;CAAC,GACzFvE,EAAA,MAAA6B,GAAA7B,EAAA,MAAAwC,GAAAxC,EAAA,MAAAsE,MAAAA,KAAAtE,EAAA;CAHD,IAAAwE,KAA+BF,IAG7BG;CAAA,AAAAzE,EAAA,QAAA8B,IAKD2C,KAAAzE,EAAA,OAHgCyE,WAAA;EAE/B9D,AADAmB,EAAY,GACZnB,EAAwB+D,EAAiE;CAAC,GAC3F1E,EAAA,MAAA8B,GAAA9B,EAAA,MAAAyE;CAHD,IAAAE,KAAiCF,IAG/BG;CAAA,AAAA5E,EAAA,QAAAoC,KAAApC,EAAA,QAAA2C,KAAA3C,EAAA,QAAA0B,KAE4BkD,MAAAC,MAAA;EAC5B,IAAAC,IAAqBnC,IAAuBP,EAAiB2C,QAASpC,CAAyB,IAA1E,IACrBqC,IAAkB5C,EAAiB2C,QAAS3H,CAAI,GAChD6H,IAAkBH,KAAgB,KAAKE,KAAa,KAAKA,IAAYF,IAAnD,OAAA;EAGlBnE,AADAe,EAAgBtE,CAAI,GACpBuD,GAAwBuE,OAAc;GAAAC,QAAU;GAAiBF;GAAAG,KAAkBC,GAAOD,MAAP,KAAoB;GAAChI,MAAEA;EAAK,EAAE;CAAC,GACnH4C,EAAA,MAAAoC,GAAApC,EAAA,MAAA2C,GAAA3C,EAAA,MAAA0B,GAAA1B,EAAA,MAAA4E,MAAAA,KAAA5E,EAAA;CAPD,IAAAsF,KAA8BV,IAeNW,KAAArD,EAASkB,SAAU,GAACoC;CAAA,AAAAxF,EAAA,QAAAiB,KAAAjB,EAAA,QAAAsB,KAKfkE,WAAMlE,EAAiB,CAACL,CAAe,GAACjB,EAAA,MAAAiB,GAAAjB,EAAA,MAAAsB,GAAAtB,EAAA,MAAAwF,MAAAA,KAAAxF,EAAA;CAAA,IAAAyF;CAAA,AAAAzF,EAAA,QAAA2E,MAAA3E,EAAA,QAAAkB,KAAAlB,EAAA,QAAAwE,MAAAxE,EAAA,QAAA+D,MAAA/D,EAAA,QAAA8D,MAAA9D,EAAA,QAAAiB,KAAAjB,EAAA,QAAAwB,MAAAxB,EAAA,QAAAuB,MAAAvB,EAAA,QAAAuF,MAAAvF,EAAA,QAAAwF,MAAAxF,EAAA,QAAAtB,KAP7D+G,KAAA,kBAAC6E,IAAD;EACmBrJ;EACH,cAAAsE;EACJ7G;EACIwC;EACO4C;EACEC;EACJ,mBAAAyB;EACDjE,kBAAAA;EACIC,sBAAAA;EACTgD,aAAAA;EACEG,eAAAA;CAAwB,CAAA,GACvC3E,EAAA,MAAA2E,IAAA3E,EAAA,MAAAkB,GAAAlB,EAAA,MAAAwE,IAAAxE,EAAA,MAAA+D,IAAA/D,EAAA,MAAA8D,IAAA9D,EAAA,MAAAiB,GAAAjB,EAAA,MAAAwB,IAAAxB,EAAA,MAAAuB,IAAAvB,EAAA,MAAAuF,IAAAvF,EAAA,MAAAwF,IAAAxF,EAAA,MAAAtB,GAAAsB,EAAA,MAAAyF,MAAAA,KAAAzF,EAAA;CAAA,IAAA0F;CAAA,AAAA1F,EAAA,QAAAiC,KAAAjC,EAAA,QAAA4C,MACD8C,KAAA9C,KACC,kBAACuK,GAAD;EAAgB,WAAA;EAAwB,OAAA;EAAW,UAAA;EAChDlL,UAAAA;CADE,CAAA,IADN,MAIOjC,EAAA,MAAAiC,GAAAjC,EAAA,MAAA4C,IAAA5C,EAAA,MAAA0F,MAAAA,KAAA1F,EAAA;CAAA,IAAA2F;CAAA,AAAA3F,EAAA,QAAAyF,MAAAzF,EAAA,QAAA0F,MAlBVC,KAAA,kBAACoN,GAAD;EAAY,KAAA;EAAU,MAAA;EAAtB,UAAA,CACEtN,IAaCC,EAdI;KAmBE1F,EAAA,MAAAyF,IAAAzF,EAAA,MAAA0F,IAAA1F,EAAA,MAAA2F,MAAAA,KAAA3F,EAAA;CAAA,IAAA4F;CAAA,AAAA5F,EAAA,QAAA8C,EAAAzE,aAAA2B,EAAA,QAAA8C,EAAAxE,aACTsH,KAAA,kBAACsB,GAAD;EAAoB,SAAA;EAAa,MAAA;EAAmB,WAAApE,EAASzE;EAAuB,WAAAyE,EAASxE;CAAU,CAAA,GAAI0B,EAAA,MAAA8C,EAAAzE,WAAA2B,EAAA,MAAA8C,EAAAxE,WAAA0B,EAAA,MAAA4F,MAAAA,KAAA5F,EAAA;CAAA,IAAA6F;CAAA,AAAA7F,EAAA,QAAA2F,MAAA3F,EAAA,QAAA4F,MArB7GC,KAAA,kBAACgB,GAAD;EAAgB,SAAA;EAAyB,mBAAA;EAAkB,aAAA;EAAmB,IAAA;EAAoB,gBAAA;EAAlG,UAAA,CACElB,IAoBAC,EArBK;KAsBE5F,EAAA,MAAA2F,IAAA3F,EAAA,MAAA4F,IAAA5F,EAAA,MAAA6F,MAAAA,KAAA7F,EAAA;CAAA,IAAA8F;CAAA,AAAA9F,EAAA,QAAA9C,IACwB4I,KAAA9F,EAAA,OAAhC8F,KAAA5I,KAAW,kBAACyS,IAAD,CAAkB,CAAA,GAAG3P,EAAA,MAAA9C,GAAA8C,EAAA,MAAA8F;CAAA,IAAAC;CAAA,AAAA/F,EAAA,QAAAU,KAAAV,EAAA,QAAAkB,KAAAlB,EAAA,QAAAqC,KAAArC,EAAA,QAAAyC,KAAAzC,EAAA,QAAA9C,KAAA8C,EAAA,QAAA7C,KAAA6C,EAAA,QAAA2C,KAAA3C,EAAA,QAAA0B,KAChCqE,KAAA,CAAC7I,KAADuF,KACC,kBAACkH,GAAD;EAAU,MAAA;EAAS,MAAA;EACjB,UAAA,kBAACsJ,GAAD;GACS5Q,OAAAA;GACWM,kBAAAA;GACNxF;GACMuE,kBAAAA;GACMV,wBAAAA;GACNN,kBAAAA;GACJQ;EAAY,CAAA;CAR1B,CAAA,GAWLlB,EAAA,MAAAU,GAAAV,EAAA,MAAAkB,GAAAlB,EAAA,MAAAqC,GAAArC,EAAA,MAAAyC,GAAAzC,EAAA,MAAA9C,GAAA8C,EAAA,MAAA7C,GAAA6C,EAAA,MAAA2C,GAAA3C,EAAA,MAAA0B,GAAA1B,EAAA,MAAA+F,MAAAA,KAAA/F,EAAA;CAAA,IAAAgG;CAAA,AAAAhG,EAAA,QAAAiC,KAAAjC,EAAA,QAAAyC,KAAAzC,EAAA,QAAA9C,KACA8I,KAAA,CAAC9I,KAAD,CAAauF,KACZ,kBAACkH,GAAD;EAAU,MAAA;EAAS,MAAA;EAAO,IAAA;EAAQ,IAAA;EAAa,SAAA;EAAkB,YAAA;EAAwB,gBAAA;EAAY,IAAA;EACnG,UAAA,kBAAChD,GAAD,EAAmB1E,OAAAA,EAAc,CAAA;CAD/B,CAAA,GAGLjC,EAAA,MAAAiC,GAAAjC,EAAA,MAAAyC,GAAAzC,EAAA,MAAA9C,GAAA8C,EAAA,MAAAgG,MAAAA,KAAAhG,EAAA;CAAA,IAAAiG;CAAA,AAAAjG,EAAA,QAAA6F,MAAA7F,EAAA,QAAA8F,MAAA9F,EAAA,QAAA+F,MAAA/F,EAAA,QAAAgG,MA1CHC,KAAA,kBAAC2I,IAAD;EAAS,GAAA;EAAY,MAAA;EAAS,MAAA;EAAS,MAAA;EAAO,IAAA;EAAS,KAAA;EAAvD,UAAA;GACE/I;GAuBCC;GACAC;GAaAC;EAtCG;KA2CEhG,EAAA,MAAA6F,IAAA7F,EAAA,MAAA8F,IAAA9F,EAAA,MAAA+F,IAAA/F,EAAA,MAAAgG,IAAAhG,EAAA,MAAAiG,MAAAA,KAAAjG,EAAA;CA5CV,IAAAkG,KACED,IA4CAE;CAAA,AAAAnG,EAAA,QAAAgC,KAAAhC,EAAA,QAAAqB,KAAArB,EAAA,SAAAuC,KAAAvC,EAAA,SAAA1C,KAAA0C,EAAA,SAAA2C,KAAA3C,EAAA,SAAAmB,KAAAnB,EAAA,SAAAsF,MAAAtF,EAAA,SAAAyB,KAAAzB,EAAA,SAAA4B,KAAA5B,EAAA,SAAAtB,KASMyH,KAAA,kBAAC2H,IAAD;EACSvL,OAAAA;EACOI,cAAAA;EACJjE;EACGyC;EACME;EACLiE,cAAAA;EACO7D,qBAAAA;EACLG,gBAAAA;EACCtE;EACH0E;CAAY,CAAA,GAC1BhC,EAAA,MAAAgC,GAAAhC,EAAA,MAAAqB,GAAArB,EAAA,OAAAuC,GAAAvC,EAAA,OAAA1C,GAAA0C,EAAA,OAAA2C,GAAA3C,EAAA,OAAAmB,GAAAnB,EAAA,OAAAsF,IAAAtF,EAAA,OAAAyB,GAAAzB,EAAA,OAAA4B,GAAA5B,EAAA,OAAAtB,GAAAsB,EAAA,OAAAmG,MAAAA,KAAAnG,EAAA;CAGO,IAAAoG,KAAA,CAACnF,GAAeoF;CAAA,AAAArG,EAAA,SAAAsB,IAMmC+E,KAAArG,EAAA,QAA3CqG,MAAAC,MAAehF,EAAiB,CAACgF,CAAS,GAACtG,EAAA,OAAAsB,GAAAtB,EAAA,OAAAqG;CAAA,IAAAE;CAE3D,OAF2DvG,EAAA,SAAAkG,MAAAlG,EAAA,SAAAmG,MAAAnG,EAAA,SAAAoG,MAAApG,EAAA,SAAAqG,MA1BlEE,KAAA,kBAACqN,GAAD;EAAW,MAAA;EAAS,MAAA;EAAS,MAAA;EAAO,IAAA;EAAS,KAAA;EAAgB,eAAA;EAC3D,UAAA,kBAAC7M,GAAD;GACO,MAAA;GACA,MAAA;GACA,MAAA;GAEH,gBAAAZ;GAaYD,cAAAA;GACH,WAAAE;GACI,eAAA;GACJ,WAAA;GACO,kBAAA;GACN,aAAA;GACF,WAAA;GACS,mBAAAC;EAA2C,CAAA;CA1B7D,CAAA,GA4BErG,EAAA,OAAAkG,IAAAlG,EAAA,OAAAmG,IAAAnG,EAAA,OAAAoG,IAAApG,EAAA,OAAAqG,IAAArG,EAAA,OAAAuG,MAAAA,KAAAvG,EAAA,MA5BPuG;AA4BO;AAxKe,SAAAlG,EAAAmG,GAAA;CAAA,OAGpB,kBAACqN,GAAD;EAAuB,GAAA;EAAS,GAAA;EAAkB,YAAA;EAAiB,cAAA;CAAI,GAAxDrN,CAAwD;AAAG;AAKtD,SAAAjC,GAAAc,GAAA;CAAA,OAmEgB;EAAAF,QAAU;EAAQC,KAAOC,GAAOD,MAAP,KAAoB;CAAE;AAAC;AAnEhE,SAAAV,GAAA+B,GAAA;CAAA,OAwEgB;EAAAtB,QAAU;EAAUC,KAAOC,GAAOD,MAAP,KAAoB;CAAE;AAAC"}
|
package/dist/diff.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { Span } from "@chakra-ui/react";
|
|
2
2
|
import React, { ComponentProps, MouseEvent, ReactNode } from "react";
|
|
3
|
+
//#region src/components/diff-viewer/source-position.d.ts
|
|
4
|
+
interface CodeSourcePosition {
|
|
5
|
+
line: number;
|
|
6
|
+
column?: number;
|
|
7
|
+
endLine?: number;
|
|
8
|
+
endColumn?: number;
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
3
11
|
//#region src/components/diff-viewer/code-editor.d.ts
|
|
4
12
|
export declare const preloadCodeEditor: () => Promise<unknown>;
|
|
5
13
|
interface CodeEditorProps {
|
|
@@ -12,6 +20,7 @@ interface CodeEditorProps {
|
|
|
12
20
|
showLineNumbers?: boolean;
|
|
13
21
|
onChange?: (code: string) => void;
|
|
14
22
|
disableScroll?: boolean;
|
|
23
|
+
position?: CodeSourcePosition;
|
|
15
24
|
}
|
|
16
25
|
export declare const CodeEditor: (props: CodeEditorProps) => import("react/jsx-runtime").JSX.Element;
|
|
17
26
|
interface CodeDiffEditorProps {
|
|
@@ -28,6 +37,8 @@ interface DiffBubbleProps extends Omit<ComponentProps<typeof Span>, "onClick"> {
|
|
|
28
37
|
fileName?: string;
|
|
29
38
|
additions: number;
|
|
30
39
|
deletions: number;
|
|
40
|
+
additionsLabel?: React.ReactNode;
|
|
41
|
+
deletionsLabel?: React.ReactNode;
|
|
31
42
|
label?: React.ReactNode;
|
|
32
43
|
variant?: "outline" | "ghost";
|
|
33
44
|
size?: "default" | "small";
|
package/dist/diff.js
CHANGED
|
@@ -1,104 +1,113 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t } from "./
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
1
|
+
import { t as e } from "./theme-at0rtSnX.js";
|
|
2
|
+
import { r as t } from "./theme-preference-BV4cbJNB.js";
|
|
3
|
+
import { t as n } from "./diff-bubble-DewUd_2w.js";
|
|
4
|
+
import { i as r, r as i, t as a } from "./diff-size-Dydn_Uw5.js";
|
|
5
|
+
import { n as o, t as s } from "./file-change-badge-0QFNv82B.js";
|
|
6
|
+
import { c } from "react/compiler-runtime";
|
|
7
|
+
import { jsx as l } from "react/jsx-runtime";
|
|
8
|
+
import { Suspense as u, lazy as d, useEffect as f, useId as p, useRef as m } from "react";
|
|
9
|
+
import { DiffEditor as h, Editor as g } from "@monaco-editor/react";
|
|
10
|
+
//#region src/components/diff-viewer/source-position.ts
|
|
11
|
+
var _ = (e, t) => {
|
|
12
|
+
let n = (e) => Math.min(e, t.getLineCount()), r = n(e.line), i = n(e.endLine ?? e.line), a = Math.min(e.column ?? 1, t.getLineMaxColumn(r)), o = Math.min(e.endColumn ?? (e.endLine === void 0 ? e.column : void 0) ?? 1, t.getLineMaxColumn(i));
|
|
13
|
+
return {
|
|
14
|
+
startLineNumber: r,
|
|
15
|
+
startColumn: a,
|
|
16
|
+
endLineNumber: i,
|
|
17
|
+
endColumn: i === r ? Math.max(a, o) : o
|
|
18
|
+
};
|
|
19
|
+
}, v = ((e) => {
|
|
10
20
|
let t;
|
|
11
21
|
return () => (t ??= e(), t);
|
|
12
|
-
})(() => import("./monaco-browser-CLRPSE4-.js").then((e) => e.initializeMonaco())),
|
|
22
|
+
})(() => import("./monaco-browser-CLRPSE4-.js").then((e) => e.initializeMonaco())), y = d(async () => (await v(), { default: g })), b = d(async () => (await v(), { default: h })), x = {
|
|
13
23
|
base: "vs-dark",
|
|
14
24
|
inherit: !0,
|
|
15
25
|
rules: [],
|
|
16
26
|
colors: {
|
|
17
|
-
"editor.background": "
|
|
18
|
-
"editor.foreground": "
|
|
19
|
-
"editor.lineHighlightBackground": "
|
|
20
|
-
"editorCursor.foreground": "
|
|
21
|
-
"editorWhitespace.foreground": "
|
|
22
|
-
"editorIndentGuide.background": "
|
|
23
|
-
"editorIndentGuide.activeBackground": "
|
|
27
|
+
"editor.background": e.token("colors.codeEditor.background"),
|
|
28
|
+
"editor.foreground": e.token("colors.codeEditor.foreground"),
|
|
29
|
+
"editor.lineHighlightBackground": e.token("colors.codeEditor.lineHighlightBackground"),
|
|
30
|
+
"editorCursor.foreground": e.token("colors.codeEditor.cursor"),
|
|
31
|
+
"editorWhitespace.foreground": e.token("colors.codeEditor.whitespace"),
|
|
32
|
+
"editorIndentGuide.background": e.token("colors.codeEditor.indentGuide"),
|
|
33
|
+
"editorIndentGuide.activeBackground": e.token("colors.codeEditor.indentGuideActive")
|
|
24
34
|
}
|
|
25
|
-
},
|
|
26
|
-
let
|
|
27
|
-
if (
|
|
28
|
-
let
|
|
29
|
-
|
|
30
|
-
let a = r.find(
|
|
31
|
-
i =
|
|
32
|
-
} else i =
|
|
35
|
+
}, S = (e) => typeof e == "object" && !!e && "base" in e && "colors" in e, C = "ps-theme", w = () => {
|
|
36
|
+
let e = c(5), { themePreference: n, themePreferences: r } = t(), i;
|
|
37
|
+
if (e[0] !== n || e[1] !== r) {
|
|
38
|
+
let t;
|
|
39
|
+
e[3] === n ? t = e[4] : (t = (e) => e.id === n, e[3] = n, e[4] = t);
|
|
40
|
+
let a = r.find(t);
|
|
41
|
+
i = S(a?.monacoTheme) ? a.monacoTheme : x, e[0] = n, e[1] = r, e[2] = i;
|
|
42
|
+
} else i = e[2];
|
|
33
43
|
return i;
|
|
34
|
-
},
|
|
35
|
-
let t =
|
|
44
|
+
}, T = (e) => {
|
|
45
|
+
let t = c(5), n = m(null), r, i;
|
|
36
46
|
t[0] === e ? (r = t[1], i = t[2]) : (r = () => {
|
|
37
47
|
let t = n.current;
|
|
38
|
-
t && (t.editor.defineTheme(
|
|
39
|
-
}, i = [e], t[0] = e, t[1] = r, t[2] = i),
|
|
48
|
+
t && (t.editor.defineTheme(C, e), t.editor.setTheme(C));
|
|
49
|
+
}, i = [e], t[0] = e, t[1] = r, t[2] = i), f(r, i);
|
|
40
50
|
let a;
|
|
41
51
|
return t[3] === e ? a = t[4] : (a = (t) => {
|
|
42
|
-
n.current = t, t.editor.defineTheme(
|
|
52
|
+
n.current = t, t.editor.defineTheme(C, e), t.editor.setTheme(C);
|
|
43
53
|
}, t[3] = e, t[4] = a), a;
|
|
44
|
-
},
|
|
54
|
+
}, E = (e, t) => {
|
|
45
55
|
e.addCommand(t.KeyMod.CtrlCmd | t.KeyCode.KeyS, async () => {
|
|
46
56
|
await e.getAction("editor.action.formatDocument")?.run();
|
|
47
57
|
});
|
|
48
|
-
},
|
|
49
|
-
let
|
|
50
|
-
|
|
51
|
-
let
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
scrollBeyondLastLine: !1,
|
|
60
|
-
mouseWheelScrollSensitivity: 0,
|
|
61
|
-
overviewRulerLanes: 0
|
|
62
|
-
} : {}, t[1] = p, t[2] = E);
|
|
63
|
-
let D;
|
|
64
|
-
t[3] !== b || t[4] !== T || t[5] !== E ? (D = {
|
|
58
|
+
}, D = (e, t) => {
|
|
59
|
+
let n = e.getModel();
|
|
60
|
+
if (!n || !t) return;
|
|
61
|
+
let r = _(t, n);
|
|
62
|
+
e.setSelection(r), e.revealRangeInCenter(r);
|
|
63
|
+
}, O = (e) => {
|
|
64
|
+
let { defaultCode: t, code: n, showLineNumbers: r, isEditable: i, language: a = "javascript", fileName: o, onChange: s, disableScroll: c, position: d } = e, h = m(null), g = m(d);
|
|
65
|
+
g.current = d, f(() => {
|
|
66
|
+
h.current && D(h.current, d);
|
|
67
|
+
}, [d]);
|
|
68
|
+
let _ = p(), v = o ? `inmemory://editor/${encodeURIComponent(_)}/${encodeURIComponent(o)}` : void 0, b = T(w()), x = {
|
|
65
69
|
tabSize: 2,
|
|
66
70
|
fixedOverflowWidgets: !0,
|
|
67
|
-
minimap:
|
|
71
|
+
minimap: { enabled: !1 },
|
|
68
72
|
fontSize: 12,
|
|
69
|
-
readOnly:
|
|
70
|
-
lineNumbers:
|
|
71
|
-
...
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
return t[12] !== r || t[13] !== n || t[14] !== m || t[15] !== g || t[16] !== O || t[17] !== k || t[18] !== A || t[19] !== j ? (M = /* @__PURE__ */ c(l, {
|
|
73
|
+
readOnly: !i,
|
|
74
|
+
lineNumbers: r ? "on" : "off",
|
|
75
|
+
...c ? {
|
|
76
|
+
scrollbar: {
|
|
77
|
+
vertical: "hidden",
|
|
78
|
+
horizontal: "hidden",
|
|
79
|
+
useShadows: !1,
|
|
80
|
+
alwaysConsumeMouseWheel: !1
|
|
81
|
+
},
|
|
82
|
+
scrollBeyondLastLine: !1,
|
|
83
|
+
mouseWheelScrollSensitivity: 0,
|
|
84
|
+
overviewRulerLanes: 0
|
|
85
|
+
} : {}
|
|
86
|
+
};
|
|
87
|
+
return /* @__PURE__ */ l(u, {
|
|
85
88
|
fallback: null,
|
|
86
|
-
children: /* @__PURE__ */
|
|
89
|
+
children: /* @__PURE__ */ l(y, {
|
|
87
90
|
width: "100%",
|
|
88
91
|
height: "100%",
|
|
89
|
-
language:
|
|
90
|
-
path:
|
|
91
|
-
defaultValue:
|
|
92
|
-
value:
|
|
93
|
-
theme:
|
|
94
|
-
options:
|
|
95
|
-
onChange:
|
|
96
|
-
|
|
97
|
-
|
|
92
|
+
language: a,
|
|
93
|
+
path: v,
|
|
94
|
+
defaultValue: t,
|
|
95
|
+
value: n,
|
|
96
|
+
theme: C,
|
|
97
|
+
options: x,
|
|
98
|
+
onChange: (e) => {
|
|
99
|
+
s?.(e || "");
|
|
100
|
+
},
|
|
101
|
+
beforeMount: (e) => {
|
|
102
|
+
b(e);
|
|
103
|
+
},
|
|
104
|
+
onMount: (e, t) => {
|
|
105
|
+
b(t), E(e, t), h.current = e, D(e, g.current);
|
|
106
|
+
}
|
|
98
107
|
})
|
|
99
|
-
})
|
|
100
|
-
},
|
|
101
|
-
let t =
|
|
108
|
+
});
|
|
109
|
+
}, k = (e) => {
|
|
110
|
+
let t = c(16), { original: n, modified: r, showLineNumbers: i, language: a, disableScroll: o } = e, s = a === void 0 ? "javascript" : a, d = T(w()), f;
|
|
102
111
|
t[0] === Symbol.for("react.memo_cache_sentinel") ? (f = { enabled: !1 }, t[0] = f) : f = t[0];
|
|
103
112
|
let p = i ? "on" : "off", m;
|
|
104
113
|
t[1] === o ? m = t[2] : (m = o ? {
|
|
@@ -124,41 +133,41 @@ var g = ((e) => {
|
|
|
124
133
|
lineNumbers: p,
|
|
125
134
|
...m
|
|
126
135
|
}, t[3] = p, t[4] = m, t[5] = h) : h = t[5];
|
|
127
|
-
let g = h, _,
|
|
128
|
-
t[6] === d ? (_ = t[7],
|
|
136
|
+
let g = h, _, v;
|
|
137
|
+
t[6] === d ? (_ = t[7], v = t[8]) : (_ = (e) => {
|
|
129
138
|
d(e);
|
|
130
|
-
},
|
|
139
|
+
}, v = (e, t) => {
|
|
131
140
|
d(t);
|
|
132
|
-
}, t[6] = d, t[7] = _, t[8] =
|
|
133
|
-
let
|
|
134
|
-
return t[9] !==
|
|
141
|
+
}, t[6] = d, t[7] = _, t[8] = v);
|
|
142
|
+
let y;
|
|
143
|
+
return t[9] !== s || t[10] !== r || t[11] !== g || t[12] !== n || t[13] !== _ || t[14] !== v ? (y = /* @__PURE__ */ l(u, {
|
|
135
144
|
fallback: null,
|
|
136
|
-
children: /* @__PURE__ */
|
|
145
|
+
children: /* @__PURE__ */ l(b, {
|
|
137
146
|
width: "100%",
|
|
138
147
|
height: "100%",
|
|
139
|
-
language:
|
|
148
|
+
language: s,
|
|
140
149
|
original: n,
|
|
141
150
|
modified: r,
|
|
142
|
-
theme:
|
|
151
|
+
theme: C,
|
|
143
152
|
options: g,
|
|
144
153
|
beforeMount: _,
|
|
145
|
-
onMount:
|
|
154
|
+
onMount: v
|
|
146
155
|
})
|
|
147
|
-
}), t[9] =
|
|
148
|
-
},
|
|
149
|
-
let t =
|
|
150
|
-
return t[0] === e ? n = t[1] : (n = /* @__PURE__ */
|
|
156
|
+
}), t[9] = s, t[10] = r, t[11] = g, t[12] = n, t[13] = _, t[14] = v, t[15] = y) : y = t[15], y;
|
|
157
|
+
}, A = d(() => import("./diff-drawer-BwZBOObe.js").then((e) => ({ default: e.DiffDrawer }))), j = d(() => import("./diff-viewer-kOOd7C7h.js").then((e) => ({ default: e.DiffViewer }))), M = (e) => {
|
|
158
|
+
let t = c(2), n;
|
|
159
|
+
return t[0] === e ? n = t[1] : (n = /* @__PURE__ */ l(u, {
|
|
151
160
|
fallback: null,
|
|
152
|
-
children: /* @__PURE__ */
|
|
161
|
+
children: /* @__PURE__ */ l(A, { ...e })
|
|
153
162
|
}), t[0] = e, t[1] = n), n;
|
|
154
|
-
},
|
|
155
|
-
let t =
|
|
156
|
-
return t[0] === e ? n = t[1] : (n = /* @__PURE__ */
|
|
163
|
+
}, N = (e) => {
|
|
164
|
+
let t = c(2), n;
|
|
165
|
+
return t[0] === e ? n = t[1] : (n = /* @__PURE__ */ l(u, {
|
|
157
166
|
fallback: null,
|
|
158
|
-
children: /* @__PURE__ */
|
|
167
|
+
children: /* @__PURE__ */ l(j, { ...e })
|
|
159
168
|
}), t[0] = e, t[1] = n), n;
|
|
160
169
|
};
|
|
161
170
|
//#endregion
|
|
162
|
-
export {
|
|
171
|
+
export { k as CodeDiffEditor, O as CodeEditor, n as DiffBubble, M as DiffDrawer, N as DiffViewer, s as FileChangeBadge, a as LARGE_DIFF_LINE_THRESHOLD, i as isBinaryDiffPath, r as isGeneratedDiffPath, v as preloadCodeEditor, o as useDiffViewerStore };
|
|
163
172
|
|
|
164
173
|
//# sourceMappingURL=diff.js.map
|
package/dist/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","names":["DiffEditor","Editor","Monaco","lazy","Suspense","useEffect","useId","useRef","MonacoThemeData","useThemePreference","createCodeEditorPreloader","initialize","Promise","initialization","preloadCodeEditor","then","module","initializeMonaco","MonacoEditor","default","MonacoDiffEditor","customTheme","base","const","inherit","rules","colors","isMonacoTheme","value","MonacoApi","editor","defineTheme","name","data","setTheme","EDITOR_THEME_NAME","useEditorTheme","$","_c","themePreference","themePreferences","t0","t1","theme","id","preference","find","monacoTheme","useApplyEditorTheme","editorTheme","monacoRef","monaco","current","t2","monaco_0","configureCodeEditor","addCommand","key","handler","getAction","Pick","IEditorAction","KeyMod","KeyCode","CtrlCmd","KeyS","run","CodeEditorProps","language","fileName","defaultCode","code","isEditable","showLineNumbers","onChange","disableScroll","CodeEditor","props","undefined","editorId","modelPath","encodeURIComponent","applyEditorTheme","Symbol","for","enabled","t3","t4","scrollbar","vertical","horizontal","useShadows","alwaysConsumeMouseWheel","scrollBeyondLastLine","mouseWheelScrollSensitivity","overviewRulerLanes","t5","tabSize","fixedOverflowWidgets","minimap","fontSize","readOnly","lineNumbers","options","t6","t7","t8","t9","CodeDiffEditorProps","original","modified","CodeDiffEditor","originalEditable","renderSideBySide","useInlineViewWhenSpaceIsTooSmall","_","_c","lazy","Suspense","DiffDrawerProps","DiffViewerProps","Drawer","then","module","default","DiffDrawer","Viewer","DiffViewer","props","$","_c","t0","_c","useThemePreference","isGeneratedDiffPath","LARGE_DIFF_LINE_THRESHOLD","useDiffViewerStore","FileChangeBadge","preloadCodeEditor","initialization","initialize","module","MonacoEditor","lazy","Editor","MonacoDiffEditor","DiffEditor","customTheme","isMonacoTheme","value","EDITOR_THEME_NAME","useEditorTheme","$","c","t0","themePreference","themePreferences","t1","theme","preference","useApplyEditorTheme","monacoRef","useRef","editorTheme","monaco","useEffect","t2","monaco_0","configureCodeEditor","editor","CodeEditor","props","language","editorId","useId","modelPath","fileName","applyEditorTheme","isEditable","t3","showLineNumbers","t4","disableScroll","t5","options","t6","onChange","t7","t8","t9","code","defaultCode","Suspense","CodeDiffEditor","modified","original","Drawer","Viewer","DiffDrawer","DiffViewer","DiffBubble","isBinaryDiffPath"],"sources":["../src/components/diff-viewer/code-editor.tsx","../src/components/diff-viewer/lazy-diff.tsx"],"sourcesContent":["import { DiffEditor, Editor } from \"@monaco-editor/react\";\nimport type * as Monaco from \"monaco-editor\";\nimport { lazy, Suspense, useEffect, useId, 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\nconst MonacoEditor = lazy(async () => {\n await preloadCodeEditor();\n return { default: Editor };\n});\n\nconst MonacoDiffEditor = lazy(async () => {\n await preloadCodeEditor();\n return { default: DiffEditor };\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\nexport const configureCodeEditor = (\n editor: {\n addCommand: (key: number, handler: () => Promise<void>) => unknown;\n getAction: (id: string) => Pick<Monaco.editor.IEditorAction, \"run\"> | null;\n },\n monaco: { KeyMod: Pick<typeof Monaco.KeyMod, \"CtrlCmd\">; KeyCode: Pick<typeof Monaco.KeyCode, \"KeyS\"> },\n) => {\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, async () => {\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n });\n};\n\ninterface CodeEditorProps {\n language: string;\n /** File name, including its extension, used to parse the editor model. */\n fileName?: 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 {\n defaultCode,\n code,\n showLineNumbers,\n isEditable,\n language = \"javascript\",\n fileName,\n onChange,\n disableScroll,\n } = props;\n const editorId = useId();\n // Preserve the extension for JSX parsing while keeping each editor's model independent.\n const modelPath = fileName\n ? `inmemory://editor/${encodeURIComponent(editorId)}/${encodeURIComponent(fileName)}`\n : undefined;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n fixedOverflowWidgets: true,\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 <Suspense fallback={null}>\n <MonacoEditor\n width=\"100%\"\n height=\"100%\"\n language={language}\n path={modelPath}\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={(editor, monaco) => {\n applyEditorTheme(monaco);\n configureCodeEditor(editor, monaco);\n }}\n />\n </Suspense>\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 <Suspense fallback={null}>\n <MonacoDiffEditor\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 />\n </Suspense>\n );\n};\n","import { lazy, Suspense } from \"react\";\nimport type { DiffDrawerProps } from \"./diff-drawer\";\nimport type { DiffViewerProps } from \"./diff-viewer\";\n\nconst Drawer = lazy(() => import(\"./diff-drawer\").then((module) => ({ default: module.DiffDrawer })));\nconst Viewer = lazy(() => import(\"./diff-viewer\").then((module) => ({ default: module.DiffViewer })));\n\n// Diff parsing loads its syntax languages. Keep it out of the initial workbench module graph.\nexport const DiffDrawer = (props: DiffDrawerProps) => (\n <Suspense fallback={null}>\n <Drawer {...props} />\n </Suspense>\n);\n\nexport const DiffViewer = (props: DiffViewerProps) => (\n <Suspense fallback={null}>\n <Viewer {...props} />\n </Suspense>\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"diff.js","names":["CodeSourcePosition","line","column","endLine","endColumn","sourcePositionSelection","position","model","getLineCount","getLineMaxColumn","clampLine","Math","min","undefined","startLineNumber","startColumn","endLineNumber","max","DiffEditor","Editor","Monaco","lazy","Suspense","useEffect","useId","useRef","MonacoThemeData","psTheme","useThemePreference","CodeSourcePosition","sourcePositionSelection","createCodeEditorPreloader","initialize","Promise","initialization","preloadCodeEditor","then","module","initializeMonaco","MonacoEditor","default","MonacoDiffEditor","customTheme","base","const","inherit","rules","colors","token","isMonacoTheme","value","MonacoApi","editor","defineTheme","name","data","setTheme","EDITOR_THEME_NAME","useEditorTheme","$","_c","themePreference","themePreferences","t0","t1","theme","id","preference","find","monacoTheme","useApplyEditorTheme","editorTheme","monacoRef","monaco","current","t2","monaco_0","configureCodeEditor","addCommand","key","handler","getAction","Pick","IEditorAction","KeyMod","KeyCode","CtrlCmd","KeyS","run","reveal","IStandaloneCodeEditor","target","model","getModel","selection","setSelection","revealRangeInCenter","CodeEditorProps","language","fileName","defaultCode","code","isEditable","showLineNumbers","onChange","disableScroll","position","CodeEditor","props","editorRef","positionRef","editorId","modelPath","encodeURIComponent","undefined","applyEditorTheme","options","tabSize","fixedOverflowWidgets","minimap","enabled","fontSize","readOnly","lineNumbers","scrollbar","vertical","horizontal","useShadows","alwaysConsumeMouseWheel","scrollBeyondLastLine","mouseWheelScrollSensitivity","overviewRulerLanes","CodeDiffEditorProps","original","modified","CodeDiffEditor","Symbol","for","t3","t4","originalEditable","renderSideBySide","useInlineViewWhenSpaceIsTooSmall","t5","t6","_","t7","psTheme","_c","lazy","Suspense","DiffDrawerProps","DiffViewerProps","Drawer","then","module","default","DiffDrawer","Viewer","DiffViewer","props","$","_c","t0","_c","theme_default","useThemePreference","DiffBubble","isGeneratedDiffPath","isBinaryDiffPath","LARGE_DIFF_LINE_THRESHOLD","useDiffViewerStore","FileChangeBadge","sourcePositionSelection","clampLine","line","model","position","endLine","column","endColumn","preloadCodeEditor","initialization","initialize","module","MonacoEditor","lazy","Editor","MonacoDiffEditor","DiffEditor","customTheme","isMonacoTheme","value","EDITOR_THEME_NAME","useEditorTheme","$","t0","themePreference","themePreferences","t1","theme","preference","useApplyEditorTheme","monacoRef","useRef","editorTheme","monaco","useEffect","t2","monaco_0","configureCodeEditor","editor","reveal","target","selection","CodeEditor","props","editorRef","positionRef","editorId","useId","modelPath","fileName","applyEditorTheme","options","isEditable","showLineNumbers","disableScroll","Suspense","defaultCode","code","CodeDiffEditor","language","t3","t4","t5","t6","t7","modified","original","Drawer","Viewer","DiffDrawer","DiffViewer"],"sources":["../src/components/diff-viewer/source-position.ts","../src/components/diff-viewer/code-editor.tsx","../src/components/diff-viewer/lazy-diff.tsx"],"sourcesContent":["export interface CodeSourcePosition {\n line: number;\n column?: number;\n endLine?: number;\n endColumn?: number;\n}\n\nexport const sourcePositionSelection = (\n position: CodeSourcePosition,\n model: {\n getLineCount(): number;\n getLineMaxColumn(line: number): number;\n },\n) => {\n const clampLine = (line: number) => Math.min(line, model.getLineCount());\n const line = clampLine(position.line);\n const endLine = clampLine(position.endLine ?? position.line);\n const column = Math.min(position.column ?? 1, model.getLineMaxColumn(line));\n const endColumn = Math.min(\n position.endColumn ?? (position.endLine === undefined ? position.column : undefined) ?? 1,\n model.getLineMaxColumn(endLine),\n );\n return {\n startLineNumber: line,\n startColumn: column,\n endLineNumber: endLine,\n endColumn: endLine === line ? Math.max(column, endColumn) : endColumn,\n };\n};\n","import { DiffEditor, Editor } from \"@monaco-editor/react\";\nimport type * as Monaco from \"monaco-editor\";\nimport { lazy, Suspense, useEffect, useId, useRef } from \"react\";\nimport type { MonacoThemeData } from \"../../theme\";\nimport psTheme from \"../../theme/theme\";\nimport { useThemePreference } from \"../../utils/theme-preference\";\nimport { type CodeSourcePosition, sourcePositionSelection } from \"./source-position\";\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\nconst MonacoEditor = lazy(async () => {\n await preloadCodeEditor();\n return { default: Editor };\n});\n\nconst MonacoDiffEditor = lazy(async () => {\n await preloadCodeEditor();\n return { default: DiffEditor };\n});\n\nexport const customTheme = {\n base: \"vs-dark\" as const,\n inherit: true,\n rules: [],\n // Monaco parses color strings itself, so resolve raw token values instead of CSS variables.\n colors: {\n \"editor.background\": psTheme.token(\"colors.codeEditor.background\"),\n \"editor.foreground\": psTheme.token(\"colors.codeEditor.foreground\"),\n \"editor.lineHighlightBackground\": psTheme.token(\"colors.codeEditor.lineHighlightBackground\"),\n \"editorCursor.foreground\": psTheme.token(\"colors.codeEditor.cursor\"),\n \"editorWhitespace.foreground\": psTheme.token(\"colors.codeEditor.whitespace\"),\n \"editorIndentGuide.background\": psTheme.token(\"colors.codeEditor.indentGuide\"),\n \"editorIndentGuide.activeBackground\": psTheme.token(\"colors.codeEditor.indentGuideActive\"),\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\nexport const configureCodeEditor = (\n editor: {\n addCommand: (key: number, handler: () => Promise<void>) => unknown;\n getAction: (id: string) => Pick<Monaco.editor.IEditorAction, \"run\"> | null;\n },\n monaco: { KeyMod: Pick<typeof Monaco.KeyMod, \"CtrlCmd\">; KeyCode: Pick<typeof Monaco.KeyCode, \"KeyS\"> },\n) => {\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, async () => {\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n });\n};\n\nconst reveal = (editor: Monaco.editor.IStandaloneCodeEditor, target?: CodeSourcePosition) => {\n const model = editor.getModel();\n if (!model || !target) return;\n const selection = sourcePositionSelection(target, model);\n editor.setSelection(selection);\n editor.revealRangeInCenter(selection);\n};\n\ninterface CodeEditorProps {\n language: string;\n /** File name, including its extension, used to parse the editor model. */\n fileName?: string;\n defaultCode?: string;\n code?: string;\n isEditable: boolean;\n showLineNumbers?: boolean;\n onChange?: (code: string) => void;\n disableScroll?: boolean;\n position?: CodeSourcePosition;\n}\n\nexport const CodeEditor = (props: CodeEditorProps) => {\n const {\n defaultCode,\n code,\n showLineNumbers,\n isEditable,\n language = \"javascript\",\n fileName,\n onChange,\n disableScroll,\n position,\n } = props;\n const editorRef = useRef<Monaco.editor.IStandaloneCodeEditor | null>(null);\n const positionRef = useRef(position);\n positionRef.current = position;\n useEffect(() => {\n if (editorRef.current) reveal(editorRef.current, position);\n }, [position]);\n const editorId = useId();\n // Preserve the extension for JSX parsing while keeping each editor's model independent.\n const modelPath = fileName\n ? `inmemory://editor/${encodeURIComponent(editorId)}/${encodeURIComponent(fileName)}`\n : undefined;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n fixedOverflowWidgets: true,\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 <Suspense fallback={null}>\n <MonacoEditor\n width=\"100%\"\n height=\"100%\"\n language={language}\n path={modelPath}\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={(editor, monaco) => {\n applyEditorTheme(monaco);\n configureCodeEditor(editor, monaco);\n editorRef.current = editor;\n reveal(editor, positionRef.current);\n }}\n />\n </Suspense>\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 <Suspense fallback={null}>\n <MonacoDiffEditor\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 />\n </Suspense>\n );\n};\n","import { lazy, Suspense } from \"react\";\nimport type { DiffDrawerProps } from \"./diff-drawer\";\nimport type { DiffViewerProps } from \"./diff-viewer\";\n\nconst Drawer = lazy(() => import(\"./diff-drawer\").then((module) => ({ default: module.DiffDrawer })));\nconst Viewer = lazy(() => import(\"./diff-viewer\").then((module) => ({ default: module.DiffViewer })));\n\n// Diff parsing loads its syntax languages. Keep it out of the initial workbench module graph.\nexport const DiffDrawer = (props: DiffDrawerProps) => (\n <Suspense fallback={null}>\n <Drawer {...props} />\n </Suspense>\n);\n\nexport const DiffViewer = (props: DiffViewerProps) => (\n <Suspense fallback={null}>\n <Viewer {...props} />\n </Suspense>\n);\n"],"mappings":"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"}
|