@@ -15,6 +15,7 @@ import {
1515 moveHandlePlacement ,
1616 positionStart ,
1717 resizeFromHandle ,
18+ resizeMaxWidthForViewport ,
1819 toggleDecoration ,
1920 toggleFontStyle ,
2021 toggleFontWeight ,
@@ -436,6 +437,7 @@ export function createCanvasTextEditor({
436437 onDelete = ( ) => { } ,
437438 onSelectionChange = ( ) => { } ,
438439 onTextRangeChange = ( ) => { } ,
440+ onInteractionStart = ( ) => { } ,
439441 onMoveStart = ( ) => { } ,
440442 onMoveEnd = ( ) => { } ,
441443} ) {
@@ -662,6 +664,7 @@ export function createCanvasTextEditor({
662664 if ( ! selected ) return ;
663665 event . preventDefault ( ) ;
664666 event . stopPropagation ( ) ;
667+ onInteractionStart ( selected ) ;
665668 const handle = captureTarget ?. setPointerCapture ? captureTarget : event . currentTarget ;
666669 handle ?. setPointerCapture ?. ( event . pointerId ) ;
667670 const listenerTarget = doc ;
@@ -779,8 +782,10 @@ export function createCanvasTextEditor({
779782 if ( ! selected ) return ;
780783 event . preventDefault ( ) ;
781784 event . stopPropagation ( ) ;
785+ onInteractionStart ( selected ) ;
782786 onBeforeChange ( ) ;
783787 const handle = event . currentTarget ;
788+ const listenerTarget = doc ;
784789 const side = handle . dataset . handle ;
785790 handle . setPointerCapture ( event . pointerId ) ;
786791 const startX = event . clientX ;
@@ -796,6 +801,14 @@ export function createCanvasTextEditor({
796801 } ) ;
797802 const wasStatic = computed . position === "static" ;
798803 const wasInline = computed . display === "inline" ;
804+ const maxWidth = resizeMaxWidthForViewport ( {
805+ side,
806+ startWidth,
807+ rectLeft : rect . left ,
808+ rectRight : rect . right ,
809+ viewportWidth : win . innerWidth ,
810+ margin : 4 ,
811+ } ) ;
799812 if ( side === "left" && wasStatic ) selected . style . position = "relative" ;
800813 if ( wasInline ) selected . style . display = "inline-block" ;
801814 selected . style . boxSizing = "border-box" ;
@@ -811,16 +824,16 @@ export function createCanvasTextEditor({
811824 startWidth,
812825 startLeft,
813826 deltaX : moveEvent . clientX - startX ,
814- maxWidth : side === "left" ? rect . right - 4 : win . innerWidth - rect . left - 4 ,
827+ maxWidth,
815828 } ) ;
816829 selected . style . width = `${ latest . width } px` ;
817830 if ( side === "left" ) selected . style . left = `${ latest . left } px` ;
818831 refresh ( ) ;
819832 } ;
820833 const finish = ( ) => {
821- handle . removeEventListener ( "pointermove" , move ) ;
822- handle . removeEventListener ( "pointerup" , finish ) ;
823- handle . removeEventListener ( "pointercancel" , finish ) ;
834+ listenerTarget . removeEventListener ( "pointermove" , move ) ;
835+ listenerTarget . removeEventListener ( "pointerup" , finish ) ;
836+ listenerTarget . removeEventListener ( "pointercancel" , finish ) ;
824837 const changes = [
825838 { property : "box-sizing" , value : "border-box" } ,
826839 { property : "max-width" , value : "none" } ,
@@ -836,9 +849,9 @@ export function createCanvasTextEditor({
836849 onSelectionChange ( selected ) ;
837850 sync ( ) ;
838851 } ;
839- handle . addEventListener ( "pointermove" , move ) ;
840- handle . addEventListener ( "pointerup" , finish ) ;
841- handle . addEventListener ( "pointercancel" , finish ) ;
852+ listenerTarget . addEventListener ( "pointermove" , move ) ;
853+ listenerTarget . addEventListener ( "pointerup" , finish ) ;
854+ listenerTarget . addEventListener ( "pointercancel" , finish ) ;
842855 }
843856
844857 root . querySelector ( '[data-handle="move"]' ) . addEventListener ( "pointerdown" , beginMove ) ;
0 commit comments