text: /** @license
   * Copyright (c) 2012 Willow Systems Corporation, willow-systems.com
   *
   * Permission is hereby granted, free of charge, to any person obtaining
   * a copy of this software and associated documentation files (the
   * "Software"), to deal in the Software without restriction, including
   * without limitation the rights to use, copy, modify, merge, publish,
   * distribute, sublicense, and/or sell copies of the Software, and to
   * permit persons to whom the Software is furnished to do so, subject to
   * the following conditions:
   *
   * The above copyright notice and this permission notice shall be
   * included in all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
   * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
   * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
   * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   * ====================================================================
   */
  
  import { jsPDF } from "../jspdf.js";
  import { console } from "../libs/console.js";
  import { globalObject } from "../libs/globalObject.js";
  
  /**
   * jsPDF SVG plugin
   *
   * @name svg
   * @module
   */
  (function(jsPDFAPI) {
    "use strict";
  
    function loadCanvg() {
      return (function() {
        if (globalObject["canvg"]) {
          return Promise.resolve(globalObject["canvg"]);
        }
  
        // @if MODULE_FORMAT='es'
        return import("canvg");
        // @endif
  
        // @if MODULE_FORMAT!='es'
        if (typeof exports === "object" && typeof module !== "undefined") {
          return new Promise(function(resolve, reject) {
            try {
              resolve(require("canvg"));
            } catch (e) {
              reject(e);
            }
          });
        }
        if (typeof define === "function" && define.amd) {
          return new Promise(function(resolve, reject) {
            try {
              require(["canvg"], resolve);
            } catch (e) {
              reject(e);
            }
          });
        }
        return Promise.reject(new Error("Could not load canvg"));
        // @endif
      })()
        .catch(function(e) {
          return Promise.reject(new Error("Could not load canvg: " + e));
        })
        .then(function(canvg) {
          return canvg.default ? canvg.default : canvg;
        });
    }
  
    /**
     * Parses SVG XML and saves it as image into the PDF.
     *
     * Depends on canvas-element and canvg
     *
     * @name addSvgAsImage
     * @public
     * @function
     * @param {string} SVG-Data as Text
     * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page
     * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page
     * @param {number} width of SVG-Image (in units declared at inception of PDF document)
     * @param {number} height of SVG-Image (in units declared at inception of PDF document)
     * @param {string} alias of SVG-Image (if used multiple times)
     * @param {string} compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'
     * @param {number} rotation of the image in degrees (0-359)
     *
     * @returns jsPDF jsPDF-instance
     */
    jsPDFAPI.addSvgAsImage = function(
      svg,
      x,
      y,
      w,
      h,
      alias,
      compression,
      rotation
    ) {
      if (isNaN(x) || isNaN(y)) {
        console.error("jsPDF.addSvgAsImage: Invalid coordinates", arguments);
        throw new Error("Invalid coordinates passed to jsPDF.addSvgAsImage");
      }
  
      if (isNaN(w) || isNaN(h)) {
        console.error("jsPDF.addSvgAsImage: Invalid measurements", arguments);
        throw new Error(
          "Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage"
        );
      }
  
      var canvas = document.createElement("canvas");
      canvas.width = w;
      canvas.height = h;
      var ctx = canvas.getContext("2d");
      ctx.fillStyle = "#fff"; /// set white fill style
      ctx.fillRect(0, 0, canvas.width, canvas.height);
  
      var options = {
        ignoreMouse: true,
        ignoreAnimation: true,
        ignoreDimensions: true
      };
      var doc = this;
      return loadCanvg()
        .then(
          function(canvg) {
            return canvg.Canvg.fromString(ctx, svg, options);
          },
          function() {
            return Promise.reject(new Error("Could not load canvg."));
          }
        )
        .then(function(instance) {
          return instance.render(options);
        })
        .then(function() {
          doc.addImage(
            canvas.toDataURL("image/jpeg", 1.0),
            x,
            y,
            w,
            h,
            compression,
            rotation
          );
        });
    };
  })(jsPDF.API);
  