| import 'package:jaspr/client.dart'; |
| import 'package:web/web.dart' as web; |
| |
| /// A component that renders a [web.Node] in the DOM. |
| /// |
| /// This is used to insert dom elements into the component tree that are not managed by Jaspr. |
| class NodeContainer extends Component { |
| const NodeContainer(this.containerNode); |
| final web.Node containerNode; |
| |
| @override |
| Element createElement() => _NodeContainerElement(this); |
| } |
| |
| class _NodeContainerElement extends LeafRenderObjectElement { |
| _NodeContainerElement(NodeContainer super.component); |
| |
| @override |
| RenderObject createRenderObject() { |
| final parent = parentRenderObjectElement!.renderObject; |
| return _NodeContainerRenderObject((component as NodeContainer).containerNode)..parent = parent as DomRenderObject; |
| } |
| |
| @override |
| void updateRenderObject(RenderObject renderObject) {} |
| } |
| |
| class _NodeContainerRenderObject extends DomRenderObject { |
| _NodeContainerRenderObject(this.node); |
| |
| @override |
| final web.Node node; |
| |
| @override |
| void attach(covariant RenderObject child, {covariant RenderObject? after}) { |
| throw UnsupportedError('NodeContainerRenderObject cannot have children attached to it.'); |
| } |
| |
| @override |
| void remove(covariant RenderObject child) { |
| throw UnsupportedError('NodeContainerRenderObject cannot have children removed from it.'); |
| } |
| |
| @override |
| void finalize() {} |
| |
| @override |
| web.Node? retakeNode(bool Function(web.Node node) visitNode) { |
| return null; |
| } |
| } |