11import { openSearchPanel } from "@codemirror/search" ;
22import { EditorView } from "@codemirror/view" ;
3- import { DotsThree } from "@phosphor-icons/react" ;
4- import { Box , DropdownMenu , Flex , IconButton , Text } from "@radix-ui/themes" ;
3+ import { Columns , Rows } from "@phosphor-icons/react" ;
4+ import { Box , Button , Flex , Text } from "@radix-ui/themes" ;
55import { useEffect , useMemo } from "react" ;
66import { useCodeMirror } from "../hooks/useCodeMirror" ;
77import { useEditorExtensions } from "../hooks/useEditorExtensions" ;
88import { useDiffViewerStore } from "../stores/diffViewerStore" ;
9+ import { DiffSettingsMenu } from "./DiffSettingsMenu" ;
910
1011interface CodeMirrorDiffEditorProps {
1112 originalContent : string ;
@@ -14,6 +15,7 @@ interface CodeMirrorDiffEditorProps {
1415 relativePath ?: string ;
1516 onContentChange ?: ( content : string ) => void ;
1617 onRefresh ?: ( ) => void ;
18+ hideToolbar ?: boolean ;
1719}
1820
1921export function CodeMirrorDiffEditor ( {
@@ -23,21 +25,15 @@ export function CodeMirrorDiffEditor({
2325 relativePath,
2426 onContentChange,
2527 onRefresh,
28+ hideToolbar,
2629} : CodeMirrorDiffEditorProps ) {
2730 const viewMode = useDiffViewerStore ( ( s ) => s . viewMode ) ;
2831 const toggleViewMode = useDiffViewerStore ( ( s ) => s . toggleViewMode ) ;
29- const wordWrap = useDiffViewerStore ( ( s ) => s . wordWrap ) ;
30- const toggleWordWrap = useDiffViewerStore ( ( s ) => s . toggleWordWrap ) ;
3132 const loadFullFiles = useDiffViewerStore ( ( s ) => s . loadFullFiles ) ;
32- const toggleLoadFullFiles = useDiffViewerStore ( ( s ) => s . toggleLoadFullFiles ) ;
3333 const wordDiffs = useDiffViewerStore ( ( s ) => s . wordDiffs ) ;
34- const toggleWordDiffs = useDiffViewerStore ( ( s ) => s . toggleWordDiffs ) ;
3534 const hideWhitespaceChanges = useDiffViewerStore (
3635 ( s ) => s . hideWhitespaceChanges ,
3736 ) ;
38- const toggleHideWhitespaceChanges = useDiffViewerStore (
39- ( s ) => s . toggleHideWhitespaceChanges ,
40- ) ;
4137 const extensions = useEditorExtensions ( filePath , true , true ) ;
4238 const options = useMemo (
4339 ( ) => ( {
@@ -84,6 +80,10 @@ export function CodeMirrorDiffEditor({
8480 document . removeEventListener ( "keydown" , handleKeyDown , { capture : true } ) ;
8581 } , [ instanceRef ] ) ;
8682
83+ if ( hideToolbar ) {
84+ return < div ref = { containerRef } style = { { width : "100%" } } /> ;
85+ }
86+
8787 return (
8888 < Flex direction = "column" height = "100%" >
8989 < Flex
@@ -104,53 +104,19 @@ export function CodeMirrorDiffEditor({
104104 ) : (
105105 < span />
106106 ) }
107- < DropdownMenu . Root >
108- < DropdownMenu . Trigger >
109- < IconButton
110- size = "1"
111- variant = "ghost"
112- style = { { color : "var(--gray-9)" } }
113- >
114- < DotsThree size = { 16 } weight = "bold" />
115- </ IconButton >
116- </ DropdownMenu . Trigger >
117- < DropdownMenu . Content size = "1" align = "end" >
118- < DropdownMenu . Item onSelect = { toggleViewMode } >
119- < Text size = "1" >
120- { viewMode === "split" ? "Unified view" : "Split view" }
121- </ Text >
122- </ DropdownMenu . Item >
123- < DropdownMenu . Item onSelect = { toggleWordWrap } >
124- < Text size = "1" >
125- { wordWrap ? "Disable word wrap" : "Enable word wrap" }
126- </ Text >
127- </ DropdownMenu . Item >
128- < DropdownMenu . Item onSelect = { toggleLoadFullFiles } >
129- < Text size = "1" >
130- { loadFullFiles ? "Collapse unchanged" : "Load full files" }
131- </ Text >
132- </ DropdownMenu . Item >
133- < DropdownMenu . Item onSelect = { toggleWordDiffs } >
134- < Text size = "1" >
135- { wordDiffs ? "Disable word diffs" : "Enable word diffs" }
136- </ Text >
137- </ DropdownMenu . Item >
138- < DropdownMenu . Item onSelect = { toggleHideWhitespaceChanges } >
139- < Text size = "1" >
140- { hideWhitespaceChanges ? "Show whitespace" : "Hide whitespace" }
141- </ Text >
142- </ DropdownMenu . Item >
143-
144- { onRefresh && (
145- < >
146- < DropdownMenu . Separator />
147- < DropdownMenu . Item onSelect = { onRefresh } >
148- < Text size = "1" > Refresh</ Text >
149- </ DropdownMenu . Item >
150- </ >
151- ) }
152- </ DropdownMenu . Content >
153- </ DropdownMenu . Root >
107+ < Flex align = "center" gap = "1" >
108+ < Button
109+ size = "1"
110+ variant = "ghost"
111+ color = "gray"
112+ onClick = { toggleViewMode }
113+ style = { { cursor : "pointer" } }
114+ >
115+ { viewMode === "split" ? < Rows size = { 14 } /> : < Columns size = { 14 } /> }
116+ < Text size = "1" > { viewMode === "split" ? "Unified" : "Split" } </ Text >
117+ </ Button >
118+ < DiffSettingsMenu onRefresh = { onRefresh } />
119+ </ Flex >
154120 </ Flex >
155121 < Box style = { { flex : 1 , overflow : "auto" } } >
156122 < div ref = { containerRef } style = { { height : "100%" , width : "100%" } } />
0 commit comments