docs: function projection(nodeIndex, selectorIndex, attrs) {
      if (selectorIndex === void 0) { selectorIndex = 0; }
      var node = createLNode(nodeIndex, 1 /* Projection */, null, null, attrs || null, null);
      // We can't use viewData[HOST_NODE] because projection nodes can be nested in embedded views.
      if (node.tNode.projection === null)
          node.tNode.projection = selectorIndex;
      // `<ng-content>` has no content
      isParent = false;
      // re-distribution of projectable nodes is stored on a component's view level
      var parent = getParentLNode(node);
      if (canInsertNativeNode(parent, viewData)) {
          var componentNode = findComponentHost(viewData);
          var nodeToProject = componentNode.tNode.projection[selectorIndex];
          var projectedView = componentNode.view;
          var projectionNodeIndex = -1;
          var grandparent = void 0;
          var renderParent = parent.tNode.type === 2 /* View */ ?
              (grandparent = getParentLNode(parent)) &&
                  grandparent.data[RENDER_PARENT] :
              parent;
          while (nodeToProject) {
              if (nodeToProject.type === 1 /* Projection */) {
                  // This node is re-projected, so we must go up the tree to get its projected nodes.
                  var currentComponentHost = findComponentHost(projectedView);
                  var firstProjectedNode = currentComponentHost.tNode.projection[nodeToProject.projection];
                  if (firstProjectedNode) {
                      projectionNodeStack$1[++projectionNodeIndex] = projectedView[nodeToProject.index];
                      nodeToProject = firstProjectedNode;
                      projectedView = currentComponentHost.view;
                      continue;
                  }
              }
              else {
                  var lNode = projectedView[nodeToProject.index];
                  lNode.tNode.flags |= 8192 /* isProjected */;
                  appendProjectedNode(lNode, parent, viewData, renderParent);
              }
              // If we are finished with a list of re-projected nodes, we need to get
              // back to the root projection node that was re-projected.
              if (nodeToProject.next === null && projectedView !== componentNode.view) {
                  // move down into the view of the component we're projecting right now
                  var lNode = projectionNodeStack$1[projectionNodeIndex--];
                  nodeToProject = lNode.tNode;
                  projectedView = lNode.view;
              }
              nodeToProject = nodeToProject.next;
          }
      }
  }