text: "use strict";
  
  exports.__esModule = true;
  exports.default = void 0;
  const elements = ['svg', 'Svg'];
  
  const plugin = ({
    types: t
  }) => ({
    visitor: {
      JSXElement(path) {
        if (!elements.some(element => path.get('openingElement.name').isJSXIdentifier({
          name: element
        }))) {
          return;
        }
  
        function createTitle(children = [], attributes = []) {
          return t.jsxElement(t.jsxOpeningElement(t.jsxIdentifier('title'), attributes), t.jsxClosingElement(t.jsxIdentifier('title')), children);
        }
  
        function createTitleIdAttribute() {
          return t.jsxAttribute(t.jsxIdentifier('id'), t.jsxExpressionContainer(t.identifier('titleId')));
        }
  
        function enhanceAttributes(attributes) {
          const existingId = attributes.find(attribute => attribute.name.name === 'id');
  
          if (!existingId) {
            return [...attributes, createTitleIdAttribute()];
          }
  
          existingId.value = t.jsxExpressionContainer(t.logicalExpression('||', t.identifier('titleId'), existingId.value));
          return attributes;
        }
  
        function getTitleElement(existingTitle) {
          const titleExpression = t.identifier('title');
  
          if (existingTitle) {
            existingTitle.openingElement.attributes = enhanceAttributes(existingTitle.openingElement.attributes);
          }
  
          let titleElement = t.conditionalExpression(titleExpression, createTitle([t.jsxExpressionContainer(titleExpression)], existingTitle ? existingTitle.openingElement.attributes : [t.jsxAttribute(t.jsxIdentifier('id'), t.jsxExpressionContainer(t.identifier('titleId')))]), t.nullLiteral());
  
          if (existingTitle && existingTitle.children && existingTitle.children.length) {
            // if title already exists
            // render as follows
            const fallbackTitleElement = existingTitle; // {title === undefined ? fallbackTitleElement : titleElement}
  
            const conditionalExpressionForTitle = t.conditionalExpression(t.binaryExpression('===', titleExpression, t.identifier('undefined')), fallbackTitleElement, titleElement);
            titleElement = t.jsxExpressionContainer(conditionalExpressionForTitle);
          } else {
            titleElement = t.jsxExpressionContainer(titleElement);
          }
  
          return titleElement;
        } // store the title element
  
  
        let titleElement;
        const hasTitle = path.get('children').some(childPath => {
          if (!childPath.isJSXElement()) return false;
          if (childPath.node === titleElement) return false;
          if (childPath.node.openingElement.name.name !== 'title') return false;
          titleElement = getTitleElement(childPath.node);
          childPath.replaceWith(titleElement);
          return true;
        }); // create a title element if not already create
  
        titleElement = titleElement || getTitleElement();
  
        if (!hasTitle) {
          // path.unshiftContainer is not working well :(
          // path.unshiftContainer('children', titleElement)
          path.node.children.unshift(titleElement);
          path.replaceWith(path.node);
        }
      }
  
    }
  });
  
  var _default = plugin;
  exports.default = _default;