@@ -64,6 +64,7 @@ export class AnycodeEditor {
6464 private code : Code ;
6565 private offset : number ;
6666 private settings : EditorSettings ;
67+ private editorFontSettingsHandler : ( ( event : Event ) => void ) | null = null ;
6768 private renderer ! : Renderer ;
6869 private container ! : HTMLDivElement ;
6970 private buttonsColumn ! : HTMLDivElement ;
@@ -134,6 +135,26 @@ export class AnycodeEditor {
134135 }
135136
136137 this . settings = { lineHeight : 20 , buffer : 15 } ;
138+ if ( typeof window !== 'undefined' ) {
139+ const rootStyles = window . getComputedStyle ( document . documentElement ) ;
140+ const fontSize = Number . parseFloat ( rootStyles . getPropertyValue ( '--editor-font-size' ) ) ;
141+ const lineHeight = Number . parseFloat ( rootStyles . getPropertyValue ( '--editor-line-height' ) ) ;
142+ if ( Number . isFinite ( fontSize ) && Number . isFinite ( lineHeight ) ) {
143+ this . settings . lineHeight = Math . max ( 12 , Math . round ( fontSize * lineHeight ) ) ;
144+ }
145+ }
146+ if ( typeof window !== 'undefined' ) {
147+ this . editorFontSettingsHandler = ( event : Event ) => {
148+ const detail = ( event as CustomEvent < { size ?: number ; lineHeight ?: number } > ) . detail ;
149+ if ( ! detail ) return ;
150+ const fontSize = Number ( detail . size ) ;
151+ const lineHeight = Number ( detail . lineHeight ) ;
152+ if ( Number . isFinite ( fontSize ) && Number . isFinite ( lineHeight ) ) {
153+ this . setLineHeight ( fontSize * lineHeight ) ;
154+ }
155+ } ;
156+ window . addEventListener ( 'anycode:editor-font-settings' , this . editorFontSettingsHandler ) ;
157+ }
137158
138159 if ( options . theme ) {
139160 const css = generateCssClasses ( options . theme ) ;
@@ -179,6 +200,10 @@ export class AnycodeEditor {
179200
180201 public clean ( ) {
181202 this . removeEventListeners ( ) ;
203+ if ( this . editorFontSettingsHandler && typeof window !== 'undefined' ) {
204+ window . removeEventListener ( 'anycode:editor-font-settings' , this . editorFontSettingsHandler ) ;
205+ this . editorFontSettingsHandler = null ;
206+ }
182207 this . clearPendingHover ( ) ;
183208 this . closeHover ( ) ;
184209 if ( this . scrollAnimationFrameId !== null ) {
@@ -602,6 +627,14 @@ export class AnycodeEditor {
602627 this . renderer . renderCursorOrSelection ( this . getEditorState ( ) ) ;
603628 }
604629
630+ public setLineHeight ( lineHeight : number ) : void {
631+ const nextLineHeight = Math . max ( 12 , Math . round ( lineHeight ) ) ;
632+ if ( this . settings . lineHeight === nextLineHeight ) return ;
633+ this . settings . lineHeight = nextLineHeight ;
634+ this . container . style . setProperty ( '--anycode-line-height' , `${ nextLineHeight } px` ) ;
635+ this . render ( ) ;
636+ }
637+
605638 private getDiffGapTarget ( target : EventTarget | null ) : HTMLElement | null {
606639 if ( ! ( target instanceof Element ) ) {
607640 return null ;
0 commit comments