blob: 4ae65f2f4af4cf7bdf0351020c6b6b1d49623f77 [file]
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;
}
}