| 377 | } |
| 378 | |
| 379 | get style(): CSSProperties { |
| 380 | // React sets display: none to hide elements during Suspense. |
| 381 | // We'll handle this by setting the element to hidden and invalidating |
| 382 | // its siblings/parent. Hidden elements remain in the Document, but |
| 383 | // are removed from the Collection. |
| 384 | let element = this; |
| 385 | return { |
| 386 | get display() { |
| 387 | return element.isHidden ? 'none' : ''; |
| 388 | }, |
| 389 | set display(value) { |
| 390 | let isHidden = value === 'none'; |
| 391 | if (element.isHidden !== isHidden) { |
| 392 | // Mark parent node dirty if this element is currently the first or last visible child. |
| 393 | if ( |
| 394 | element.parentNode?.firstVisibleChild === element || |
| 395 | element.parentNode?.lastVisibleChild === element |
| 396 | ) { |
| 397 | element.ownerDocument.markDirty(element.parentNode); |
| 398 | } |
| 399 | |
| 400 | // Mark sibling visible elements dirty. |
| 401 | let prev = element.previousVisibleSibling; |
| 402 | let next = element.nextVisibleSibling; |
| 403 | if (prev) { |
| 404 | element.ownerDocument.markDirty(prev); |
| 405 | } |
| 406 | if (next) { |
| 407 | element.ownerDocument.markDirty(next); |
| 408 | } |
| 409 | |
| 410 | // Mark self dirty. |
| 411 | element.isHidden = isHidden; |
| 412 | element.ownerDocument.markDirty(element); |
| 413 | } |
| 414 | } |
| 415 | }; |
| 416 | } |
| 417 | |
| 418 | hasAttribute(): void {} |
| 419 | setAttribute(): void {} |