@@ -162,8 +162,9 @@ const entityCardWidth = 226;
162162const entityColumnWidth = 264 ;
163163const entityLeftInset = 24 ;
164164const diagramCanvasWidth = entityLeftInset * 2 + entityColumnWidth * ( diagramColumns - 1 ) + entityCardWidth ;
165- const minDiagramZoom = 0.06 ;
165+ const minDiagramZoom = 0.1 ;
166166const maxDiagramZoom = 1.8 ;
167+ const defaultDiagramZoom = 1 ;
167168const diagramZoomStep = 0.1 ;
168169const defaultRepositoryName = "codedock-backend" ;
169170const erdDocumentsStorageKey = "codedock-erd-documents" ;
@@ -458,7 +459,7 @@ export function ERDPage({ embedded = false, repositoryName = defaultRepositoryNa
458459 const downloadMenuRef = useRef < HTMLDivElement > ( null ) ;
459460 const hasAutoFitCanvasRef = useRef ( false ) ;
460461 const repositoryKey = repositoryId ?? repositoryName ;
461- const [ diagramZoom , setDiagramZoom ] = useState ( 0.42 ) ;
462+ const [ diagramZoom , setDiagramZoom ] = useState ( defaultDiagramZoom ) ;
462463 const [ viewportSize , setViewportSize ] = useState ( { width : 0 , height : 0 } ) ;
463464 const [ mermaidSvg , setMermaidSvg ] = useState ( "" ) ;
464465 const [ mermaidError , setMermaidError ] = useState ( "" ) ;
@@ -584,12 +585,22 @@ export function ERDPage({ embedded = false, repositoryName = defaultRepositoryNa
584585
585586 if ( ! hasAutoFitCanvasRef . current ) {
586587 hasAutoFitCanvasRef . current = true ;
587- setDiagramZoom ( minCanvasZoom ) ;
588+ setDiagramZoom ( defaultDiagramZoom ) ;
589+
590+ const viewport = diagramViewportRef . current ;
591+ if ( viewport ) {
592+ window . requestAnimationFrame ( ( ) => {
593+ const insetX = Math . max ( 0 , ( viewportSize . width - worldCanvasWidth * defaultDiagramZoom ) / 2 ) ;
594+ const insetY = Math . max ( 0 , ( viewportSize . height - worldCanvasHeight * defaultDiagramZoom ) / 2 ) ;
595+ viewport . scrollLeft = ( diagramFrameOffsetX + diagramFrameWidth / 2 ) * defaultDiagramZoom + insetX - viewportSize . width / 2 ;
596+ viewport . scrollTop = ( diagramFrameOffsetY + diagramFrameHeight / 2 ) * defaultDiagramZoom + insetY - viewportSize . height / 2 ;
597+ } ) ;
598+ }
588599 return ;
589600 }
590601
591- setDiagramZoom ( ( prev ) => clampDiagramZoom ( prev , minCanvasZoom ) ) ;
592- } , [ minCanvasZoom , viewportSize . width , viewportSize . height ] ) ;
602+ setDiagramZoom ( ( prev ) => clampDiagramZoom ( prev , minDiagramZoom ) ) ;
603+ } , [ diagramFrameHeight , diagramFrameWidth , viewportSize . width , viewportSize . height , worldCanvasWidth , worldCanvasHeight ] ) ;
593604
594605 const updateSelectedErdCode = ( nextCode : string ) => {
595606 if ( ! selectedErdId ) return ;
@@ -771,7 +782,7 @@ export function ERDPage({ embedded = false, repositoryName = defaultRepositoryNa
771782 } ;
772783
773784 const handleZoomChange = ( delta : number ) => {
774- setDiagramZoom ( ( prev ) => clampDiagramZoom ( prev + delta , minCanvasZoom ) ) ;
785+ setDiagramZoom ( ( prev ) => clampDiagramZoom ( prev + delta , minDiagramZoom ) ) ;
775786 } ;
776787
777788 const getCanvasInset = ( zoom : number ) => ( {
@@ -801,7 +812,7 @@ export function ERDPage({ embedded = false, repositoryName = defaultRepositoryNa
801812 </ button >
802813 < button
803814 type = "button"
804- onClick = { ( ) => setDiagramZoom ( minCanvasZoom ) }
815+ onClick = { ( ) => setDiagramZoom ( defaultDiagramZoom ) }
805816 className = "inline-flex h-9 items-center justify-center gap-1 rounded-lg border-0 px-3 font-mono transition-all hover:scale-105"
806817 style = { {
807818 background : "rgba(32, 227, 255, 0.10)" ,
@@ -811,8 +822,8 @@ export function ERDPage({ embedded = false, repositoryName = defaultRepositoryNa
811822 fontSize : "12px" ,
812823 fontWeight : 950
813824 } }
814- aria-label = "ERD 캔버스 맞춤 "
815- title = "캔버스 맞춤 · Ctrl + 휠로 확대/축소"
825+ aria-label = "ERD 100%로 보기 "
826+ title = "100%로 보기 · Ctrl + 휠로 확대/축소"
816827 >
817828 < RotateCcw size = { 14 } />
818829 { zoomPercent } %
@@ -850,8 +861,9 @@ export function ERDPage({ embedded = false, repositoryName = defaultRepositoryNa
850861 const delta = event . deltaY < 0 ? diagramZoomStep : - diagramZoomStep ;
851862
852863 setDiagramZoom ( ( prev ) => {
853- const nextZoom = clampDiagramZoom ( prev + delta , minCanvasZoom ) ;
864+ const nextZoom = clampDiagramZoom ( prev + delta , minDiagramZoom ) ;
854865 if ( nextZoom === prev ) return prev ;
866+ if ( prev <= 0 ) return nextZoom ;
855867 const zoomRatio = nextZoom / prev ;
856868 const currentInset = getCanvasInset ( prev ) ;
857869 const nextInset = getCanvasInset ( nextZoom ) ;
@@ -872,7 +884,7 @@ export function ERDPage({ embedded = false, repositoryName = defaultRepositoryNa
872884 return ( ) => {
873885 viewport . removeEventListener ( "wheel" , handleDiagramWheel ) ;
874886 } ;
875- } , [ minCanvasZoom , viewportSize . width , viewportSize . height , worldCanvasWidth , worldCanvasHeight ] ) ;
887+ } , [ viewportSize . width , viewportSize . height , worldCanvasWidth , worldCanvasHeight ] ) ;
876888
877889 return (
878890 < div
0 commit comments