{
  "version": 3,
  "sources": ["../../cypress-visual-regression/dist/command.mjs"],
  "sourcesContent": ["// src/command.ts\nfunction addCompareSnapshotCommand(screenshotOptions) {\n  Cypress.Commands.add(\n    \"compareSnapshot\",\n    { prevSubject: [\"optional\", \"element\"] },\n    function(subject, name, commandOptions) {\n      if (name === void 0 || name === \"\") {\n        throw new Error(\"Snapshot name must be specified\");\n      }\n      const screenshotOptionsObject = { ...screenshotOptions };\n      const commandOptionsObject = typeof commandOptions === \"number\" ? { errorThreshold: commandOptions } : { ...commandOptions };\n      const visualRegressionOptions = prepareOptions(name, screenshotOptionsObject, commandOptionsObject);\n      const folderAndName = `${Cypress.spec.relative}/${name}`;\n      return takeScreenshot(subject, folderAndName, visualRegressionOptions.screenshotOptions).then(\n        (screenshotPath) => {\n          visualRegressionOptions.screenshotAbsolutePath = screenshotPath;\n          visualRegressionOptions.spec = Cypress.spec;\n          switch (visualRegressionOptions.type) {\n            case \"regression\":\n              return compareScreenshots(subject, visualRegressionOptions);\n            case \"base\":\n              return updateSnapshots(subject, visualRegressionOptions);\n            default:\n              throw new Error(\n                `The 'type' environment variable is invalid. Expected: 'regression' or 'base' instead of '${visualRegressionOptions.type}'`\n              );\n          }\n        }\n      );\n    }\n  );\n}\nfunction prepareOptions(name, screenshotOptions, commandOptions) {\n  if (Cypress.env(\"visualRegressionType\") === void 0) {\n    throw new Error(\"The 'type' environment variable is missing. Expected values: 'regression' or 'base'\");\n  }\n  const defaultCommandOptions = {\n    errorThreshold: 0,\n    failSilently: false,\n    pixelmatchOptions: { threshold: 0.1 }\n  };\n  const options = {\n    type: Cypress.env(\"visualRegressionType\"),\n    screenshotName: name,\n    screenshotAbsolutePath: \"null\",\n    // will be set after takeScreenshot\n    pluginOptions: defaultCommandOptions,\n    screenshotOptions: {},\n    baseDirectory: \"cypress/snapshots/base\",\n    diffDirectory: \"cypress/snapshots/diff\",\n    generateDiff: \"fail\",\n    spec: Cypress.spec\n  };\n  if (screenshotOptions.pixelmatchOptions !== void 0) {\n    options.pluginOptions.pixelmatchOptions = screenshotOptions.pixelmatchOptions;\n  }\n  if (screenshotOptions.errorThreshold !== void 0) {\n    options.pluginOptions.errorThreshold = screenshotOptions.errorThreshold;\n  }\n  if (screenshotOptions.failSilently !== void 0) {\n    options.pluginOptions.failSilently = screenshotOptions.failSilently;\n  }\n  options.screenshotOptions = { ...screenshotOptions, ...commandOptions };\n  if (Cypress.env(\"visualRegressionBaseDirectory\") !== void 0) {\n    options.baseDirectory = Cypress.env(\"visualRegressionBaseDirectory\");\n  }\n  if (Cypress.env(\"visualRegressionDiffDirectory\") !== void 0) {\n    options.diffDirectory = Cypress.env(\"visualRegressionDiffDirectory\");\n  }\n  if (Cypress.env(\"visualRegressionGenerateDiff\") !== void 0) {\n    options.generateDiff = Cypress.env(\"visualRegressionGenerateDiff\");\n  }\n  if (Cypress.env(\"visualRegressionFailSilently\") !== void 0) {\n    options.pluginOptions.failSilently = Cypress.env(\"visualRegressionFailSilently\");\n  }\n  if (commandOptions.failSilently !== void 0) {\n    options.pluginOptions.failSilently = commandOptions.failSilently;\n  }\n  if (commandOptions.errorThreshold !== void 0) {\n    options.pluginOptions.errorThreshold = commandOptions.errorThreshold;\n  }\n  if (commandOptions.pixelmatchOptions !== void 0) {\n    options.pluginOptions.pixelmatchOptions = commandOptions.pixelmatchOptions;\n  }\n  return options;\n}\nfunction takeScreenshot(subject, name, screenshotOptions) {\n  const objToOperateOn = subject !== void 0 ? cy.get(subject) : cy;\n  let screenshotDetails;\n  return objToOperateOn.screenshot(name, {\n    ...screenshotOptions,\n    log: false,\n    onAfterScreenshot(_el, props) {\n      screenshotDetails = props.path;\n      screenshotOptions?.onAfterScreenshot?.(_el, props);\n    }\n  }).then(() => screenshotDetails);\n}\nfunction compareScreenshots(subject, options) {\n  return cy.task(\"compareSnapshots\", options, { log: false }).then((result) => {\n    const log = Cypress.log({\n      type: \"parent\",\n      name: \"compareScreenshots\",\n      displayName: \"compareScreenshots\",\n      message: \"captureMode: 'fullPage'\",\n      consoleProps: () => {\n        return {\n          Options: options,\n          Result: result\n        };\n      }\n    });\n    if (subject != null) {\n      log.set(\"$el\", subject);\n      log.set(\"message\", subject.selector);\n      log.set(\"type\", \"child\");\n    } else if (options.screenshotOptions?.capture !== void 0) {\n      log.set(\"message\", `captureMode: ${options.screenshotOptions.capture}`);\n    }\n    if (result.error !== void 0 && !options.pluginOptions.failSilently) {\n      if (result.error.includes(\"image is different\") && top !== null) {\n        const random = Math.random();\n        result.error += ` - [Show Difference](#visualRegressionPopup${random})`;\n        Cypress.$(top.document.body).on(\"click\", `a[href^=\"#visualRegressionPopup${random}\"]`, (e) => {\n          e.preventDefault();\n          if (top === null) {\n            throw Error(\"Cypress runner not properly initialized\");\n          }\n          Cypress.$(getVisual(result.images)).appendTo(top.document.body);\n          if (result.images.diff === void 0) {\n            Cypress.$(\"#diffContainer\", top.document.body).remove();\n          }\n          const popup = Cypress.$(\"#visualRegressionPopup\", top.document.body);\n          popup.on(\"click\", 'button[data-type=\"close\"]', () => {\n            popup.remove();\n          });\n          popup.on(\"click\", function(e2) {\n            if (e2.target === this) {\n              popup.remove();\n            }\n          });\n          return false;\n        });\n      }\n      throw constructCypressError(log, new Error(result.error));\n    }\n    return result;\n  });\n}\nfunction updateSnapshots(subject, options) {\n  return cy.task(\"updateSnapshot\", options, { log: false }).then((result) => {\n    const log = Cypress.log({\n      type: \"parent\",\n      name: \"compareScreenshots\",\n      displayName: \"compareScreenshots\",\n      message: \"base generation\",\n      consoleProps: () => {\n        return {\n          Options: options,\n          Result: result\n        };\n      }\n    });\n    if (subject != null) {\n      log.set(\"$el\", subject);\n      log.set(\"type\", \"child\");\n    }\n    return result;\n  });\n}\nvar constructCypressError = (log, err) => {\n  ;\n  err.onFail = (err2) => log.error(err2);\n  return err;\n};\nfunction getVisual(images) {\n  return `\n<div id=\"visualRegressionPopup\" style=\"position:fixed;z-index:10;top:0;bottom:0;left:0;right:0;display:flex;flex-flow:column;backdrop-filter:blur(5px)\">\n  <div class=\"runner\" style=\"position:fixed;top:100px;bottom:100px;left:100px;right:100px;display:flex;flex-flow:column\">\n    <header style=\"position:static\">\n    <nav style=\"display:flex;width:100%;align-items:center;justify-content:space-between;padding:10px 15px;\">\n      <h2>Vusual Regression Plugin - screenshot difference inspection</h2>\n      <form style=\"display:flex;align-items:center;gap:5px;text-align:right\">\n        <button style=\"background-color:white;color:rgb(73 86 227);border-radius:4px\" type=\"button\" data-type=\"close\"><i class=\"fa fa-times\"></i> Close</button>\n      <form>\n    </nav>\n    </header>\n    <div style=\"padding:15px;overflow:auto\">\n      <div style=\"display:flex;justify-content:space-evenly;align-items:flex-start;gap:15px\">\n        <div id=\"imageContainer\"\n          style=\"position:relative;background:#fff;border:solid 15px #fff\"\n        >\n          <img alt=\"Actual image\" style=\"min-width:300px;width:100%;\" src=\"data:image/png;base64,${images.actual}\" />\n          <img id=\"baseImage\" alt=\"Base image\" style=\"position:absolute;top:0;left:0;min-width:300px;width:100%\" src=\"data:image/png;base64,${images.base}\" />\n          <div id=\"redLine\" style=\"position: absolute; top: 0; height: 100%; width: 2px; background-color: red; display: none;\"></div>\n        </div>\n        <div id=\"diffContainer\" style=\"background:#fff;border:solid 15px #fff\">\n          <img alt=\"Diff image\" style=\"min-width:300px;width:100%\" src=\"data:image/png;base64,${images.diff}\" />\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<script>\n  document.getElementById('imageContainer').addEventListener('mousemove', (e) => {\n    const containerRect = document.getElementById('imageContainer').getBoundingClientRect()\n    const mouseX = e.clientX - containerRect.left\n    const width = containerRect.width\n\n    // Calculate the percentage position of the mouse relative to the container\n    const percentage = (mouseX / width) * 100\n\n    // Update the clip-path to show part of the second image based on the mouse position\n    document.getElementById('baseImage').style.clipPath = \\`inset(0 \\${100 - percentage}% 0 0)\\`\n    \n    // Update the red line\n    document.getElementById('redLine').style.left = \\`\\${mouseX}px\\`\n    document.getElementById('redLine').style.display = 'block'\n  })\n</script>\n`;\n}\nexport {\n  addCompareSnapshotCommand\n};\n"],
  "mappings": "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",
  "names": []
}