{"version":3,"file":"hollow-paths.mjs","sources":["../../../components/captcha/hollow-paths.ts"],"sourcesContent":["export interface CaptchaHollowOptions {\n  ctx: CanvasRenderingContext2D,\n  /**\n   * The x coordinate of slide target center\n   */\n  x: number,\n  /**\n   * The y coordinate of slide target center\n   */\n  y: number,\n  /**\n   * Current canvas width\n   */\n  width: number,\n  /**\n   * Current canvas height\n   */\n  height: number\n}\n\n/**\n * Specify the react of the hollow's shape\n */\nexport type CaptchaHollowResult = [x: number, y: number, width: number, height: number]\nexport type CaptchaHollowProcess = (options: CaptchaHollowOptions) => CaptchaHollowResult\n\nexport type CaptchaHollowType = 'square' | 'puzzle' | 'shield' | 'heart'\n\nexport const squarePath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\n  const side = Math.min(width, height) * 0.25\n  const halfSide = side * 0.5\n\n  ctx.moveTo(x - halfSide, y - halfSide)\n  ctx.lineTo(x + halfSide, y - halfSide)\n  ctx.lineTo(x + halfSide, y + halfSide)\n  ctx.lineTo(x - halfSide, y + halfSide)\n  ctx.closePath()\n\n  return [x - halfSide - 2, y - halfSide - 2, side + 4, side + 4]\n}\n\nexport const puzzlePath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\n  const side = Math.min(width, height) * 0.2\n  const halfSide = side * 0.5\n  const left = x - halfSide\n  const top = y - halfSide\n  const radius = side * 0.2\n\n  ctx.moveTo(left, top)\n  ctx.arc(left + halfSide, top - radius + 2, radius, 0.72 * Math.PI, 2.26 * Math.PI)\n  ctx.lineTo(left + side, top)\n  ctx.arc(left + side + radius - 2, top + halfSide, radius, 1.21 * Math.PI, 2.78 * Math.PI)\n  ctx.lineTo(left + side, top + side)\n  ctx.lineTo(left, top + side)\n  ctx.arc(left + radius - 2, top + halfSide, radius + 0.4, 2.76 * Math.PI, 1.24 * Math.PI, true)\n  ctx.lineTo(left, top)\n\n  return [x - halfSide - 2, y - side * 0.9 - 2, side * 1.4 + 4, side * 1.4 + 4]\n}\n\nexport const shieldPath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\n  const side = Math.min(width, height) * 0.25\n  const halfSide = side * 0.5\n\n  ctx.moveTo(x, y - halfSide)\n  ctx.bezierCurveTo(\n    x,\n    y - halfSide + side * 0.05,\n    x - halfSide + side * 0.3,\n    y - halfSide * 0.5 + side * 0.1,\n    x - halfSide,\n    y - halfSide * 0.7\n  )\n  ctx.bezierCurveTo(x - halfSide, y + side * 0.3, x - side * 0.1, y + halfSide, x, y + halfSide)\n  ctx.bezierCurveTo(\n    x + side * 0.1,\n    y + halfSide,\n    x + halfSide,\n    y + side * 0.3,\n    x + halfSide,\n    y - halfSide * 0.7\n  )\n  ctx.bezierCurveTo(\n    x + halfSide - side * 0.3,\n    y - halfSide * 0.5 + side * 0.1,\n    x,\n    y - halfSide + side * 0.05,\n    x,\n    y - halfSide\n  )\n\n  return [x - halfSide - 2, y - halfSide - 2, side + 4, side + 4]\n}\n\nexport const heartPath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\n  const side = Math.min(width, height) * 0.25\n  const halfSide = side * 0.5\n\n  ctx.moveTo(x, y - side * 0.25)\n  ctx.bezierCurveTo(\n    x,\n    y - side * 0.4,\n    x - side * 0.1,\n    y - halfSide,\n    x - halfSide * 0.5,\n    y - halfSide\n  )\n  ctx.bezierCurveTo(\n    x - halfSide * 0.5 - side * 0.1,\n    y - halfSide,\n    x - halfSide,\n    y - side * 0.4,\n    x - halfSide,\n    y - side * 0.2\n  )\n  ctx.bezierCurveTo(\n    x - halfSide,\n    y + side * 0.2,\n    x - side * 0.05,\n    y + halfSide * 0.8,\n    x,\n    y + halfSide * 0.8\n  )\n  ctx.bezierCurveTo(\n    x + side * 0.05,\n    y + halfSide * 0.8,\n    x + halfSide,\n    y + side * 0.2,\n    x + halfSide,\n    y - side * 0.2\n  )\n  ctx.bezierCurveTo(\n    x + halfSide,\n    y - side * 0.4,\n    x + halfSide * 0.5 + side * 0.1,\n    y - halfSide,\n    x + halfSide * 0.5,\n    y - halfSide\n  )\n  ctx.bezierCurveTo(x + side * 0.1, y - halfSide, x, y - side * 0.4, x, y - side * 0.25)\n\n  return [x - halfSide - 2, y - halfSide - 2, side + 4, side * 0.9 + 4]\n}\n"],"names":["squarePath","ctx","x","y","width","height","side","halfSide","puzzlePath","left","top","radius","shieldPath","heartPath"],"mappings":"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"}