UNPKG

@extclp/vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 7.4 kB
{"version":3,"file":"hollow-paths.mjs","sources":["../../../components/captcha/hollow-paths.ts"],"sourcesContent":["export interface CaptchaHollowOptions {\r\n ctx: CanvasRenderingContext2D,\r\n /**\r\n * The x coordinate of slide target center\r\n */\r\n x: number,\r\n /**\r\n * The y coordinate of slide target center\r\n */\r\n y: number,\r\n /**\r\n * Current canvas width\r\n */\r\n width: number,\r\n /**\r\n * Current canvas height\r\n */\r\n height: number,\r\n}\r\n\r\n/**\r\n * Specify the react of the hollow's shape\r\n */\r\nexport type CaptchaHollowResult = [x: number, y: number, width: number, height: number]\r\nexport type CaptchaHollowProcess = (options: CaptchaHollowOptions) => CaptchaHollowResult\r\n\r\nexport type CaptchaHollowType = 'square' | 'puzzle' | 'shield' | 'heart'\r\n\r\nexport const squarePath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\r\n const side = Math.min(width, height) * 0.25\r\n const halfSide = side * 0.5\r\n\r\n ctx.moveTo(x - halfSide, y - halfSide)\r\n ctx.lineTo(x + halfSide, y - halfSide)\r\n ctx.lineTo(x + halfSide, y + halfSide)\r\n ctx.lineTo(x - halfSide, y + halfSide)\r\n ctx.closePath()\r\n\r\n return [x - halfSide - 2, y - halfSide - 2, side + 4, side + 4]\r\n}\r\n\r\nexport const puzzlePath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\r\n const side = Math.min(width, height) * 0.2\r\n const halfSide = side * 0.5\r\n const left = x - halfSide\r\n const top = y - halfSide\r\n const radius = side * 0.2\r\n\r\n ctx.moveTo(left, top)\r\n ctx.arc(left + halfSide, top - radius + 2, radius, 0.72 * Math.PI, 2.26 * Math.PI)\r\n ctx.lineTo(left + side, top)\r\n ctx.arc(left + side + radius - 2, top + halfSide, radius, 1.21 * Math.PI, 2.78 * Math.PI)\r\n ctx.lineTo(left + side, top + side)\r\n ctx.lineTo(left, top + side)\r\n ctx.arc(left + radius - 2, top + halfSide, radius + 0.4, 2.76 * Math.PI, 1.24 * Math.PI, true)\r\n ctx.lineTo(left, top)\r\n\r\n return [x - halfSide - 2, y - side * 0.9 - 2, side * 1.4 + 4, side * 1.4 + 4]\r\n}\r\n\r\nexport const shieldPath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\r\n const side = Math.min(width, height) * 0.25\r\n const halfSide = side * 0.5\r\n\r\n ctx.moveTo(x, y - halfSide)\r\n ctx.bezierCurveTo(\r\n x,\r\n y - halfSide + side * 0.05,\r\n x - halfSide + side * 0.3,\r\n y - halfSide * 0.5 + side * 0.1,\r\n x - halfSide,\r\n y - halfSide * 0.7,\r\n )\r\n ctx.bezierCurveTo(x - halfSide, y + side * 0.3, x - side * 0.1, y + halfSide, x, y + halfSide)\r\n ctx.bezierCurveTo(\r\n x + side * 0.1,\r\n y + halfSide,\r\n x + halfSide,\r\n y + side * 0.3,\r\n x + halfSide,\r\n y - halfSide * 0.7,\r\n )\r\n ctx.bezierCurveTo(\r\n x + halfSide - side * 0.3,\r\n y - halfSide * 0.5 + side * 0.1,\r\n x,\r\n y - halfSide + side * 0.05,\r\n x,\r\n y - halfSide,\r\n )\r\n\r\n return [x - halfSide - 2, y - halfSide - 2, side + 4, side + 4]\r\n}\r\n\r\nexport const heartPath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\r\n const side = Math.min(width, height) * 0.25\r\n const halfSide = side * 0.5\r\n\r\n ctx.moveTo(x, y - side * 0.25)\r\n ctx.bezierCurveTo(\r\n x,\r\n y - side * 0.4,\r\n x - side * 0.1,\r\n y - halfSide,\r\n x - halfSide * 0.5,\r\n y - halfSide,\r\n )\r\n ctx.bezierCurveTo(\r\n x - halfSide * 0.5 - side * 0.1,\r\n y - halfSide,\r\n x - halfSide,\r\n y - side * 0.4,\r\n x - halfSide,\r\n y - side * 0.2,\r\n )\r\n ctx.bezierCurveTo(\r\n x - halfSide,\r\n y + side * 0.2,\r\n x - side * 0.05,\r\n y + halfSide * 0.8,\r\n x,\r\n y + halfSide * 0.8,\r\n )\r\n ctx.bezierCurveTo(\r\n x + side * 0.05,\r\n y + halfSide * 0.8,\r\n x + halfSide,\r\n y + side * 0.2,\r\n x + halfSide,\r\n y - side * 0.2,\r\n )\r\n ctx.bezierCurveTo(\r\n x + halfSide,\r\n y - side * 0.4,\r\n x + halfSide * 0.5 + side * 0.1,\r\n y - halfSide,\r\n x + halfSide * 0.5,\r\n y - halfSide,\r\n )\r\n ctx.bezierCurveTo(x + side * 0.1, y - halfSide, x, y - side * 0.4, x, y - side * 0.25)\r\n\r\n return [x - halfSide - 2, y - halfSide - 2, side + 4, side * 0.9 + 4]\r\n}\r\n"],"names":["squarePath","ctx","x","y","width","height","side","halfSide","puzzlePath","left","top","radius","shieldPath","heartPath"],"mappings":"AA4Ba,MAAAA,IAAmC,CAAC,EAAE,KAAAC,GAAK,GAAAC,GAAG,GAAAC,GAAG,OAAAC,GAAO,QAAAC,QAAa;AAChF,QAAMC,IAAO,KAAK,IAAIF,GAAOC,CAAM,IAAI,MACjCE,IAAWD,IAAO;AAExB,SAAAL,EAAI,OAAOC,IAAIK,GAAUJ,IAAII,CAAQ,GACrCN,EAAI,OAAOC,IAAIK,GAAUJ,IAAII,CAAQ,GACrCN,EAAI,OAAOC,IAAIK,GAAUJ,IAAII,CAAQ,GACrCN,EAAI,OAAOC,IAAIK,GAAUJ,IAAII,CAAQ,GACrCN,EAAI,UAAU,GAEP,CAACC,IAAIK,IAAW,GAAGJ,IAAII,IAAW,GAAGD,IAAO,GAAGA,IAAO,CAAC;AAChE,GAEaE,IAAmC,CAAC,EAAE,KAAAP,GAAK,GAAAC,GAAG,GAAAC,GAAG,OAAAC,GAAO,QAAAC,QAAa;AAChF,QAAMC,IAAO,KAAK,IAAIF,GAAOC,CAAM,IAAI,KACjCE,IAAWD,IAAO,KAClBG,IAAOP,IAAIK,GACXG,IAAMP,IAAII,GACVI,IAASL,IAAO;AAElB,SAAAL,EAAA,OAAOQ,GAAMC,CAAG,GACpBT,EAAI,IAAIQ,IAAOF,GAAUG,IAAMC,IAAS,GAAGA,GAAQ,OAAO,KAAK,IAAI,OAAO,KAAK,EAAE,GAC7EV,EAAA,OAAOQ,IAAOH,GAAMI,CAAG,GAC3BT,EAAI,IAAIQ,IAAOH,IAAOK,IAAS,GAAGD,IAAMH,GAAUI,GAAQ,OAAO,KAAK,IAAI,OAAO,KAAK,EAAE,GACxFV,EAAI,OAAOQ,IAAOH,GAAMI,IAAMJ,CAAI,GAC9BL,EAAA,OAAOQ,GAAMC,IAAMJ,CAAI,GAC3BL,EAAI,IAAIQ,IAAOE,IAAS,GAAGD,IAAMH,GAAUI,IAAS,KAAK,OAAO,KAAK,IAAI,OAAO,KAAK,IAAI,EAAI,GACzFV,EAAA,OAAOQ,GAAMC,CAAG,GAEb,CAACR,IAAIK,IAAW,GAAGJ,IAAIG,IAAO,MAAM,GAAGA,IAAO,MAAM,GAAGA,IAAO,MAAM,CAAC;AAC9E,GAEaM,IAAmC,CAAC,EAAE,KAAAX,GAAK,GAAAC,GAAG,GAAAC,GAAG,OAAAC,GAAO,QAAAC,QAAa;AAChF,QAAMC,IAAO,KAAK,IAAIF,GAAOC,CAAM,IAAI,MACjCE,IAAWD,IAAO;AAEpB,SAAAL,EAAA,OAAOC,GAAGC,IAAII,CAAQ,GACtBN,EAAA;AAAA,IACFC;AAAA,IACAC,IAAII,IAAWD,IAAO;AAAA,IACtBJ,IAAIK,IAAWD,IAAO;AAAA,IACtBH,IAAII,IAAW,MAAMD,IAAO;AAAA,IAC5BJ,IAAIK;AAAA,IACJJ,IAAII,IAAW;AAAA,EACjB,GACAN,EAAI,cAAcC,IAAIK,GAAUJ,IAAIG,IAAO,KAAKJ,IAAII,IAAO,KAAKH,IAAII,GAAUL,GAAGC,IAAII,CAAQ,GACzFN,EAAA;AAAA,IACFC,IAAII,IAAO;AAAA,IACXH,IAAII;AAAA,IACJL,IAAIK;AAAA,IACJJ,IAAIG,IAAO;AAAA,IACXJ,IAAIK;AAAA,IACJJ,IAAII,IAAW;AAAA,EACjB,GACIN,EAAA;AAAA,IACFC,IAAIK,IAAWD,IAAO;AAAA,IACtBH,IAAII,IAAW,MAAMD,IAAO;AAAA,IAC5BJ;AAAA,IACAC,IAAII,IAAWD,IAAO;AAAA,IACtBJ;AAAA,IACAC,IAAII;AAAA,EACN,GAEO,CAACL,IAAIK,IAAW,GAAGJ,IAAII,IAAW,GAAGD,IAAO,GAAGA,IAAO,CAAC;AAChE,GAEaO,IAAkC,CAAC,EAAE,KAAAZ,GAAK,GAAAC,GAAG,GAAAC,GAAG,OAAAC,GAAO,QAAAC,QAAa;AAC/E,QAAMC,IAAO,KAAK,IAAIF,GAAOC,CAAM,IAAI,MACjCE,IAAWD,IAAO;AAExB,SAAAL,EAAI,OAAOC,GAAGC,IAAIG,IAAO,IAAI,GACzBL,EAAA;AAAA,IACFC;AAAA,IACAC,IAAIG,IAAO;AAAA,IACXJ,IAAII,IAAO;AAAA,IACXH,IAAII;AAAA,IACJL,IAAIK,IAAW;AAAA,IACfJ,IAAII;AAAA,EACN,GACIN,EAAA;AAAA,IACFC,IAAIK,IAAW,MAAMD,IAAO;AAAA,IAC5BH,IAAII;AAAA,IACJL,IAAIK;AAAA,IACJJ,IAAIG,IAAO;AAAA,IACXJ,IAAIK;AAAA,IACJJ,IAAIG,IAAO;AAAA,EACb,GACIL,EAAA;AAAA,IACFC,IAAIK;AAAA,IACJJ,IAAIG,IAAO;AAAA,IACXJ,IAAII,IAAO;AAAA,IACXH,IAAII,IAAW;AAAA,IACfL;AAAA,IACAC,IAAII,IAAW;AAAA,EACjB,GACIN,EAAA;AAAA,IACFC,IAAII,IAAO;AAAA,IACXH,IAAII,IAAW;AAAA,IACfL,IAAIK;AAAA,IACJJ,IAAIG,IAAO;AAAA,IACXJ,IAAIK;AAAA,IACJJ,IAAIG,IAAO;AAAA,EACb,GACIL,EAAA;AAAA,IACFC,IAAIK;AAAA,IACJJ,IAAIG,IAAO;AAAA,IACXJ,IAAIK,IAAW,MAAMD,IAAO;AAAA,IAC5BH,IAAII;AAAA,IACJL,IAAIK,IAAW;AAAA,IACfJ,IAAII;AAAA,EACN,GACAN,EAAI,cAAcC,IAAII,IAAO,KAAKH,IAAII,GAAUL,GAAGC,IAAIG,IAAO,KAAKJ,GAAGC,IAAIG,IAAO,IAAI,GAE9E,CAACJ,IAAIK,IAAW,GAAGJ,IAAII,IAAW,GAAGD,IAAO,GAAGA,IAAO,MAAM,CAAC;AACtE;"}