{"version":3,"file":"hollow-paths.mjs","sources":["../../../../../../../packages/components/captcha/src/hooks/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 = [\n  x: number,\n  y: number,\n  width: number,\n  height: number\n]\nexport type CaptchaHollowProcess = (\n  options: CaptchaHollowOptions\n) => CaptchaHollowResult\n\nexport type CaptchaHollowType = 'square' | 'puzzle' | 'shield' | 'heart'\n\nexport const squarePath: CaptchaHollowProcess = ({\n  ctx,\n  x,\n  y,\n  width,\n  height,\n}) => {\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 = ({\n  ctx,\n  x,\n  y,\n  width,\n  height,\n}) => {\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(\n    left + halfSide,\n    top - radius + 2,\n    radius,\n    0.72 * Math.PI,\n    2.26 * Math.PI\n  )\n  ctx.lineTo(left + side, top)\n  ctx.arc(\n    left + side + radius - 2,\n    top + halfSide,\n    radius,\n    1.21 * Math.PI,\n    2.78 * Math.PI\n  )\n  ctx.lineTo(left + side, top + side)\n  ctx.lineTo(left, top + side)\n  ctx.arc(\n    left + radius - 2,\n    top + halfSide,\n    radius + 0.4,\n    2.76 * Math.PI,\n    1.24 * Math.PI,\n    true\n  )\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 = ({\n  ctx,\n  x,\n  y,\n  width,\n  height,\n}) => {\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(\n    x - halfSide,\n    y + side * 0.3,\n    x - side * 0.1,\n    y + halfSide,\n    x,\n    y + halfSide\n  )\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 = ({\n  ctx,\n  x,\n  y,\n  width,\n  height,\n}) => {\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(\n    x + side * 0.1,\n    y - halfSide,\n    x,\n    y - side * 0.4,\n    x,\n    y - side * 0.25\n  )\n\n  return [x - halfSide - 2, y - halfSide - 2, side + 4, side * 0.9 + 4]\n}\n"],"names":[],"mappings":"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"}