@@ -62,8 +62,7 @@ export class LionTextarea extends ObserverMixin(LionInput) {
6262 connectedCallback ( ) {
6363 // eslint-disable-next-line wc/guard-super-call
6464 super . connectedCallback ( ) ;
65- this . setTextareaMaxHeight ( ) ;
66- autosize ( this . inputElement ) ;
65+ this . __initializeAutoresize ( ) ;
6766 }
6867
6968 disconnectedCallback ( ) {
@@ -101,7 +100,39 @@ export class LionTextarea extends ObserverMixin(LionInput) {
101100 ] ;
102101 }
103102
103+ get updateComplete ( ) {
104+ if ( this . __textareaUpdateComplete ) {
105+ return Promise . all ( [ this . __textareaUpdateComplete , super . updateComplete ] ) ;
106+ }
107+ return super . updateComplete ;
108+ }
109+
104110 resizeTextarea ( ) {
105111 autosize . update ( this . inputElement ) ;
106112 }
113+
114+ __initializeAutoresize ( ) {
115+ if ( this . __shady_native_contains ) {
116+ this . __textareaUpdateComplete = this . __waitForTextareaRenderedInRealDOM ( ) . then ( ( ) => {
117+ this . __startAutoresize ( ) ;
118+ this . __textareaUpdateComplete = null ;
119+ } ) ;
120+ } else {
121+ this . __startAutoresize ( ) ;
122+ }
123+ }
124+
125+ async __waitForTextareaRenderedInRealDOM ( ) {
126+ let count = 3 ; // max tasks to wait for
127+ while ( count !== 0 && ! this . __shady_native_contains ( this . inputElement ) ) {
128+ // eslint-disable-next-line no-await-in-loop
129+ await new Promise ( resolve => setTimeout ( resolve ) ) ;
130+ count -= 1 ;
131+ }
132+ }
133+
134+ __startAutoresize ( ) {
135+ autosize ( this . inputElement ) ;
136+ this . setTextareaMaxHeight ( ) ;
137+ }
107138}
0 commit comments