patch function

void patch(
  1. Node dom,
  2. Morphic prev,
  3. Morphic next
)

Implementation

void patch(Node dom, Morphic prev, Morphic next) {
  // Sanity check: Estos árboles deben estar resueltos
  assert(
    _isResolved(prev),
    'prev tree contains unresolved Components. Call resolveNode() first.',
  );
  assert(
    _isResolved(next),
    'next tree contains unresolved Components. Call resolveNode() first.',
  );

  // Tipo distinto → reemplazo
  if (prev.runtimeType != next.runtimeType) {
    _replace(dom, createDom(next));
    return;
  }

  // Text
  if (prev is TextMorphic && next is TextMorphic) {
    if (prev.value != next.value) {
      (dom as Text).data = next.value;
    }
    return;
  }

  // Element
  if (prev is ElementMorphic && next is ElementMorphic) {
    if (prev.tag != next.tag) {
      _replace(dom, createDom(next));
      return;
    }

    final el = dom as Element;

    _patchAttributes(el, prev, next);

    // Cast children a List<Morphic> (safe porque está resuelto)
    final prevChildren = prev.children.cast<Morphic>();
    final nextChildren = next.children.cast<Morphic>();

    _patchChildren(el, prevChildren, nextChildren);
  }
}