@smileid/web-components 11.0.0 → 11.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/README.md +15 -15
  2. package/dist/README.md +15 -0
  3. package/dist/components/README.md +14 -0
  4. package/dist/components/document/src/README.md +111 -0
  5. package/dist/components/document/src/document-capture/README.md +90 -0
  6. package/dist/components/document/src/document-capture-instructions/README.md +56 -0
  7. package/dist/components/document/src/document-capture-review/README.md +79 -0
  8. package/dist/components/selfie/README.md +225 -0
  9. package/dist/components/smart-camera-web/src/README.md +207 -0
  10. package/dist/domain/camera/src/README.md +38 -0
  11. package/dist/domain/file-upload/README.md +35 -0
  12. package/dist/esm/{DocumentCaptureScreens-RECPb0wH.js → DocumentCaptureScreens-DmH2JZDA.js} +2 -2
  13. package/dist/esm/DocumentCaptureScreens-DmH2JZDA.js.map +1 -0
  14. package/dist/esm/EndUserConsent-D4fd1ovG.js.map +1 -1
  15. package/dist/esm/Navigation-CTjK6tLU.js.map +1 -1
  16. package/dist/esm/PoweredBySmileId-CxbaihMu.js.map +1 -1
  17. package/dist/esm/{SelfieCaptureScreens-CqBVGEJk.js → SelfieCaptureScreens-DbdN2zNk.js} +2 -2
  18. package/dist/esm/SelfieCaptureScreens-DbdN2zNk.js.map +1 -0
  19. package/dist/esm/SignaturePad-C7MtmT8m.js.map +1 -1
  20. package/dist/esm/TotpConsent-CQU5jQi4.js.map +1 -1
  21. package/dist/esm/combobox.js.map +1 -1
  22. package/dist/esm/document.js +1 -1
  23. package/dist/esm/main.js +2 -2
  24. package/dist/esm/{package-BDJnoIAU.js → package-bgeQiff6.js} +2 -2
  25. package/dist/esm/package-bgeQiff6.js.map +1 -0
  26. package/dist/esm/selfie.js +1 -1
  27. package/dist/esm/smart-camera-web.js +3 -3
  28. package/dist/esm/smart-camera-web.js.map +1 -1
  29. package/dist/esm/styles-BOEZtbuc.js.map +1 -1
  30. package/dist/package-lock.json +4948 -0
  31. package/dist/package.json +59 -0
  32. package/dist/smart-camera-web.js +1 -1
  33. package/dist/smart-camera-web.js.gz +0 -0
  34. package/dist/smart-camera-web.js.map +1 -1
  35. package/dist/src/components/combobox/src/index.js +2 -0
  36. package/dist/src/components/combobox/src/index.js.map +7 -0
  37. package/dist/src/components/document/src/index.js +2 -0
  38. package/dist/src/components/document/src/index.js.map +7 -0
  39. package/dist/src/components/end-user-consent/src/index.js +14 -0
  40. package/dist/src/components/end-user-consent/src/index.js.map +7 -0
  41. package/dist/src/components/selfie/src/index.js +2 -0
  42. package/dist/src/components/selfie/src/index.js.map +7 -0
  43. package/dist/src/components/signature-pad/src/index.js +10 -0
  44. package/dist/src/components/signature-pad/src/index.js.map +7 -0
  45. package/dist/src/components/smart-camera-web/src/SmartCameraWeb.js +2 -0
  46. package/dist/src/components/smart-camera-web/src/SmartCameraWeb.js.map +7 -0
  47. package/dist/src/components/totp-consent/src/index.js +14 -0
  48. package/dist/src/components/totp-consent/src/index.js.map +7 -0
  49. package/dist/src/index.js.map +7 -0
  50. package/dist/styles/README.md +3 -0
  51. package/dist/types/combobox.d.ts +19 -19
  52. package/dist/types/document.d.ts +19 -19
  53. package/dist/types/end-user-consent.d.ts +19 -19
  54. package/dist/types/main.d.ts +24 -20
  55. package/dist/types/navigation.d.ts +19 -19
  56. package/dist/types/selfie.d.ts +19 -19
  57. package/dist/types/signature-pad.d.ts +19 -19
  58. package/dist/types/smart-camera-web.d.ts +19 -19
  59. package/dist/types/totp-consent.d.ts +19 -19
  60. package/lib/components/README.md +14 -14
  61. package/lib/components/attribution/PoweredBySmileId.js +42 -42
  62. package/lib/components/camera-permission/CameraPermission.js +139 -139
  63. package/lib/components/camera-permission/CameraPermission.stories.js +27 -27
  64. package/lib/components/combobox/src/Combobox.js +589 -589
  65. package/lib/components/combobox/src/index.js +1 -1
  66. package/lib/components/document/src/DocumentCaptureScreens.js +410 -410
  67. package/lib/components/document/src/DocumentCaptureScreens.stories.js +57 -57
  68. package/lib/components/document/src/README.md +111 -111
  69. package/lib/components/document/src/document-capture/DocumentCapture.js +760 -760
  70. package/lib/components/document/src/document-capture/DocumentCapture.stories.js +78 -78
  71. package/lib/components/document/src/document-capture/README.md +90 -90
  72. package/lib/components/document/src/document-capture/index.js +3 -3
  73. package/lib/components/document/src/document-capture-instructions/DocumentCaptureInstructions.js +545 -545
  74. package/lib/components/document/src/document-capture-instructions/DocumentCaptureInstructions.stories.js +24 -24
  75. package/lib/components/document/src/document-capture-instructions/README.md +56 -56
  76. package/lib/components/document/src/document-capture-instructions/index.js +3 -3
  77. package/lib/components/document/src/document-capture-review/DocumentCaptureReview.js +360 -360
  78. package/lib/components/document/src/document-capture-review/DocumentCaptureReview.stories.js +24 -24
  79. package/lib/components/document/src/document-capture-review/README.md +79 -79
  80. package/lib/components/document/src/document-capture-review/index.js +3 -3
  81. package/lib/components/document/src/index.js +3 -3
  82. package/lib/components/end-user-consent/src/EndUserConsent.js +795 -795
  83. package/lib/components/end-user-consent/src/EndUserConsent.stories.js +29 -29
  84. package/lib/components/end-user-consent/src/index.js +4 -4
  85. package/lib/components/navigation/src/Navigation.js +171 -171
  86. package/lib/components/navigation/src/Navigation.stories.js +24 -24
  87. package/lib/components/navigation/src/index.js +3 -3
  88. package/lib/components/selfie/README.md +225 -225
  89. package/lib/components/selfie/src/SelfieCaptureScreens.js +420 -420
  90. package/lib/components/selfie/src/SelfieCaptureScreens.stories.js +29 -29
  91. package/lib/components/selfie/src/index.js +3 -3
  92. package/lib/components/selfie/src/selfie-capture/SelfieCapture.js +1099 -1099
  93. package/lib/components/selfie/src/selfie-capture/SelfieCapture.stories.js +36 -36
  94. package/lib/components/selfie/src/selfie-capture/index.js +3 -3
  95. package/lib/components/selfie/src/selfie-capture-instructions/SelfieCaptureInstructions.js +689 -689
  96. package/lib/components/selfie/src/selfie-capture-instructions/SelfieCaptureInstructions.stories.js +23 -23
  97. package/lib/components/selfie/src/selfie-capture-instructions/index.js +3 -3
  98. package/lib/components/selfie/src/selfie-capture-review/SelfieCaptureReview.js +209 -209
  99. package/lib/components/selfie/src/selfie-capture-review/SelfieCaptureReview.stories.js +24 -24
  100. package/lib/components/selfie/src/selfie-capture-review/index.js +3 -3
  101. package/lib/components/selfie/src/selfie-capture-wrapper/SelfieCaptureWrapper.tsx +256 -256
  102. package/lib/components/selfie/src/selfie-capture-wrapper/index.ts +1 -1
  103. package/lib/components/selfie/src/smartselfie-capture/OvalProgress.tsx +81 -81
  104. package/lib/components/selfie/src/smartselfie-capture/SmartSelfieCapture.tsx +265 -265
  105. package/lib/components/selfie/src/smartselfie-capture/components/AlertDisplay.tsx +34 -34
  106. package/lib/components/selfie/src/smartselfie-capture/components/CameraPreview.tsx +97 -97
  107. package/lib/components/selfie/src/smartselfie-capture/components/CaptureControls.tsx +78 -78
  108. package/lib/components/selfie/src/smartselfie-capture/components/index.ts +3 -3
  109. package/lib/components/selfie/src/smartselfie-capture/constants.ts +23 -23
  110. package/lib/components/selfie/src/smartselfie-capture/hooks/index.ts +2 -2
  111. package/lib/components/selfie/src/smartselfie-capture/hooks/useCamera.ts +238 -238
  112. package/lib/components/selfie/src/smartselfie-capture/hooks/useFaceCapture.ts +618 -618
  113. package/lib/components/selfie/src/smartselfie-capture/index.ts +1 -1
  114. package/lib/components/selfie/src/smartselfie-capture/utils/alertMessages.ts +13 -13
  115. package/lib/components/selfie/src/smartselfie-capture/utils/canvas.ts +105 -105
  116. package/lib/components/selfie/src/smartselfie-capture/utils/faceDetection.ts +129 -129
  117. package/lib/components/selfie/src/smartselfie-capture/utils/imageCapture.ts +64 -64
  118. package/lib/components/selfie/src/smartselfie-capture/utils/index.ts +4 -4
  119. package/lib/components/selfie/src/smartselfie-capture/utils/mediapipeManager.ts +77 -77
  120. package/lib/components/signature-pad/package-lock.json +3009 -3009
  121. package/lib/components/signature-pad/package.json +30 -30
  122. package/lib/components/signature-pad/src/SignaturePad.js +484 -484
  123. package/lib/components/signature-pad/src/SignaturePad.stories.js +32 -32
  124. package/lib/components/signature-pad/src/index.js +3 -3
  125. package/lib/components/smart-camera-web/src/README.md +206 -206
  126. package/lib/components/smart-camera-web/src/SmartCameraWeb.js +305 -305
  127. package/lib/components/smart-camera-web/src/SmartCameraWeb.stories.js +57 -57
  128. package/lib/components/totp-consent/src/TotpConsent.js +949 -949
  129. package/lib/components/totp-consent/src/index.js +4 -4
  130. package/lib/domain/camera/src/README.md +38 -38
  131. package/lib/domain/camera/src/SmartCamera.js +109 -109
  132. package/lib/domain/constants/src/Constants.js +27 -27
  133. package/lib/domain/file-upload/README.md +35 -35
  134. package/lib/domain/file-upload/src/SmartFileUpload.js +65 -65
  135. package/lib/styles/README.md +3 -3
  136. package/lib/styles/src/styles.js +372 -372
  137. package/lib/styles/src/typography.js +52 -52
  138. package/package.json +111 -112
  139. package/dist/esm/DocumentCaptureScreens-RECPb0wH.js.map +0 -1
  140. package/dist/esm/SelfieCaptureScreens-CqBVGEJk.js.map +0 -1
  141. package/dist/esm/package-BDJnoIAU.js.map +0 -1
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../node_modules/signature_pad/src/point.ts", "../../../../../../../node_modules/signature_pad/src/bezier.ts", "../../../../../../../node_modules/signature_pad/src/signature_event_target.ts", "../../../../../../../node_modules/signature_pad/src/throttle.ts", "../../../../../../../node_modules/signature_pad/src/signature_pad.ts", "../../../../../src/components/signature-pad/src/SignaturePad.js", "../../../../../src/components/signature-pad/src/index.js"],
4
+ "sourcesContent": ["// Interface for point data structure used e.g. in SignaturePad#fromData method\nexport interface BasicPoint {\n x: number;\n y: number;\n pressure: number;\n time: number;\n}\n\nexport class Point implements BasicPoint {\n public x: number;\n public y: number;\n public pressure: number;\n public time: number;\n\n constructor(x: number, y: number, pressure?: number, time?: number) {\n if (isNaN(x) || isNaN(y)) {\n throw new Error(`Point is invalid: (${x}, ${y})`);\n }\n this.x = +x;\n this.y = +y;\n this.pressure = pressure || 0;\n this.time = time || Date.now();\n }\n\n public distanceTo(start: BasicPoint): number {\n return Math.sqrt(\n Math.pow(this.x - start.x, 2) + Math.pow(this.y - start.y, 2),\n );\n }\n\n public equals(other: BasicPoint): boolean {\n return (\n this.x === other.x &&\n this.y === other.y &&\n this.pressure === other.pressure &&\n this.time === other.time\n );\n }\n\n public velocityFrom(start: BasicPoint): number {\n return this.time !== start.time\n ? this.distanceTo(start) / (this.time - start.time)\n : 0;\n }\n}\n", "import { BasicPoint, Point } from './point';\n\nexport class Bezier {\n public static fromPoints(\n points: Point[],\n widths: { start: number; end: number },\n ): Bezier {\n const c2 = this.calculateControlPoints(points[0], points[1], points[2]).c2;\n const c3 = this.calculateControlPoints(points[1], points[2], points[3]).c1;\n\n return new Bezier(points[1], c2, c3, points[2], widths.start, widths.end);\n }\n\n private static calculateControlPoints(\n s1: BasicPoint,\n s2: BasicPoint,\n s3: BasicPoint,\n ): {\n c1: BasicPoint;\n c2: BasicPoint;\n } {\n const dx1 = s1.x - s2.x;\n const dy1 = s1.y - s2.y;\n const dx2 = s2.x - s3.x;\n const dy2 = s2.y - s3.y;\n\n const m1 = { x: (s1.x + s2.x) / 2.0, y: (s1.y + s2.y) / 2.0 };\n const m2 = { x: (s2.x + s3.x) / 2.0, y: (s2.y + s3.y) / 2.0 };\n\n const l1 = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n const l2 = Math.sqrt(dx2 * dx2 + dy2 * dy2);\n\n const dxm = m1.x - m2.x;\n const dym = m1.y - m2.y;\n\n const k = l2 / (l1 + l2);\n const cm = { x: m2.x + dxm * k, y: m2.y + dym * k };\n\n const tx = s2.x - cm.x;\n const ty = s2.y - cm.y;\n\n return {\n c1: new Point(m1.x + tx, m1.y + ty),\n c2: new Point(m2.x + tx, m2.y + ty),\n };\n }\n\n constructor(\n public startPoint: Point,\n public control2: BasicPoint,\n public control1: BasicPoint,\n public endPoint: Point,\n public startWidth: number,\n public endWidth: number,\n ) {}\n\n // Returns approximated length. Code taken from https://www.lemoda.net/maths/bezier-length/index.html.\n public length(): number {\n const steps = 10;\n let length = 0;\n let px;\n let py;\n\n for (let i = 0; i <= steps; i += 1) {\n const t = i / steps;\n const cx = this.point(\n t,\n this.startPoint.x,\n this.control1.x,\n this.control2.x,\n this.endPoint.x,\n );\n const cy = this.point(\n t,\n this.startPoint.y,\n this.control1.y,\n this.control2.y,\n this.endPoint.y,\n );\n\n if (i > 0) {\n const xdiff = cx - (px as number);\n const ydiff = cy - (py as number);\n\n length += Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n }\n\n px = cx;\n py = cy;\n }\n\n return length;\n }\n\n // Calculate parametric value of x or y given t and the four point coordinates of a cubic bezier curve.\n private point(\n t: number,\n start: number,\n c1: number,\n c2: number,\n end: number,\n ): number {\n // prettier-ignore\n return ( start * (1.0 - t) * (1.0 - t) * (1.0 - t))\n + (3.0 * c1 * (1.0 - t) * (1.0 - t) * t)\n + (3.0 * c2 * (1.0 - t) * t * t)\n + ( end * t * t * t);\n }\n}\n", "export class SignatureEventTarget {\n /* tslint:disable: variable-name */\n private _et: EventTarget;\n /* tslint:enable: variable-name */\n\n constructor() {\n try {\n this._et = new EventTarget();\n } catch (error) {\n // Using document as EventTarget to support iOS 13 and older.\n // Because EventTarget constructor just exists at iOS 14 and later.\n this._et = document;\n }\n }\n\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions,\n ): void {\n this._et.addEventListener(type, listener, options);\n }\n\n dispatchEvent(event: Event): boolean {\n return this._et.dispatchEvent(event);\n }\n\n removeEventListener(\n type: string,\n callback: EventListenerOrEventListenerObject | null,\n options?: boolean | EventListenerOptions,\n ): void {\n this._et.removeEventListener(type, callback, options);\n }\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias */\n// Slightly simplified version of http://stackoverflow.com/a/27078401/815507\n\nexport function throttle(\n fn: (...args: any[]) => any,\n wait = 250,\n): (this: any, ...args: any[]) => any {\n let previous = 0;\n let timeout: number | null = null;\n let result: any;\n let storedContext: any;\n let storedArgs: any[];\n\n const later = (): void => {\n previous = Date.now();\n timeout = null;\n result = fn.apply(storedContext, storedArgs);\n\n if (!timeout) {\n storedContext = null;\n storedArgs = [];\n }\n };\n\n return function wrapper(this: any, ...args: any[]): any {\n const now = Date.now();\n const remaining = wait - (now - previous);\n\n storedContext = this;\n storedArgs = args;\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = now;\n result = fn.apply(storedContext, storedArgs);\n\n if (!timeout) {\n storedContext = null;\n storedArgs = [];\n }\n } else if (!timeout) {\n timeout = window.setTimeout(later, remaining);\n }\n\n return result;\n };\n}\n", "/**\n * The main idea and some parts of the code (e.g. drawing variable width Bézier curve) are taken from:\n * http://corner.squareup.com/2012/07/smoother-signatures.html\n *\n * Implementation of interpolation using cubic Bézier curves is taken from:\n * https://web.archive.org/web/20160323213433/http://www.benknowscode.com/2012/09/path-interpolation-using-cubic-bezier_9742.html\n *\n * Algorithm for approximated length of a Bézier curve is taken from:\n * http://www.lemoda.net/maths/bezier-length/index.html\n */\n\nimport { Bezier } from './bezier';\nimport { BasicPoint, Point } from './point';\nimport { SignatureEventTarget } from './signature_event_target';\nimport { throttle } from './throttle';\n\nexport interface SignatureEvent {\n event: MouseEvent | TouchEvent | PointerEvent;\n type: string;\n x: number;\n y: number;\n pressure: number;\n}\n\nexport interface FromDataOptions {\n clear?: boolean;\n}\n\nexport interface ToSVGOptions {\n includeBackgroundColor?: boolean;\n}\n\nexport interface PointGroupOptions {\n dotSize: number;\n minWidth: number;\n maxWidth: number;\n penColor: string;\n velocityFilterWeight: number;\n /**\n * This is the globalCompositeOperation for the line.\n * *default: 'source-over'*\n * @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation\n */\n compositeOperation: GlobalCompositeOperation;\n}\n\nexport interface Options extends Partial<PointGroupOptions> {\n minDistance?: number;\n backgroundColor?: string;\n throttle?: number;\n canvasContextOptions?: CanvasRenderingContext2DSettings;\n}\n\nexport interface PointGroup extends PointGroupOptions {\n points: BasicPoint[];\n}\n\nexport default class SignaturePad extends SignatureEventTarget {\n // Public stuff\n public dotSize: number;\n public minWidth: number;\n public maxWidth: number;\n public penColor: string;\n public minDistance: number;\n public velocityFilterWeight: number;\n public compositeOperation: GlobalCompositeOperation;\n public backgroundColor: string;\n public throttle: number;\n public canvasContextOptions: CanvasRenderingContext2DSettings;\n\n // Private stuff\n /* tslint:disable: variable-name */\n private _ctx: CanvasRenderingContext2D;\n private _drawingStroke = false;\n private _isEmpty = true;\n private _lastPoints: Point[] = []; // Stores up to 4 most recent points; used to generate a new curve\n private _data: PointGroup[] = []; // Stores all points in groups (one group per line or dot)\n private _lastVelocity = 0;\n private _lastWidth = 0;\n private _strokeMoveUpdate: (event: SignatureEvent) => void;\n /* tslint:enable: variable-name */\n\n constructor(\n private canvas: HTMLCanvasElement,\n options: Options = {},\n ) {\n super();\n this.velocityFilterWeight = options.velocityFilterWeight || 0.7;\n this.minWidth = options.minWidth || 0.5;\n this.maxWidth = options.maxWidth || 2.5;\n\n // We need to handle 0 value, so use `??` instead of `||`\n this.throttle = options.throttle ?? 16; // in milliseconds\n this.minDistance = options.minDistance ?? 5; // in pixels\n this.dotSize = options.dotSize || 0;\n this.penColor = options.penColor || 'black';\n this.backgroundColor = options.backgroundColor || 'rgba(0,0,0,0)';\n this.compositeOperation = options.compositeOperation || 'source-over';\n this.canvasContextOptions = options.canvasContextOptions ?? {};\n\n this._strokeMoveUpdate = this.throttle\n ? throttle(SignaturePad.prototype._strokeUpdate, this.throttle)\n : SignaturePad.prototype._strokeUpdate;\n this._ctx = canvas.getContext(\n '2d',\n this.canvasContextOptions,\n ) as CanvasRenderingContext2D;\n\n this.clear();\n\n // Enable mouse and touch event handlers\n this.on();\n }\n\n public clear(): void {\n const { _ctx: ctx, canvas } = this;\n\n // Clear canvas using background color\n ctx.fillStyle = this.backgroundColor;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n this._data = [];\n this._reset(this._getPointGroupOptions());\n this._isEmpty = true;\n }\n\n public fromDataURL(\n dataUrl: string,\n options: {\n ratio?: number;\n width?: number;\n height?: number;\n xOffset?: number;\n yOffset?: number;\n } = {},\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const ratio = options.ratio || window.devicePixelRatio || 1;\n const width = options.width || this.canvas.width / ratio;\n const height = options.height || this.canvas.height / ratio;\n const xOffset = options.xOffset || 0;\n const yOffset = options.yOffset || 0;\n\n this._reset(this._getPointGroupOptions());\n\n image.onload = (): void => {\n this._ctx.drawImage(image, xOffset, yOffset, width, height);\n resolve();\n };\n image.onerror = (error): void => {\n reject(error);\n };\n image.crossOrigin = 'anonymous';\n image.src = dataUrl;\n\n this._isEmpty = false;\n });\n }\n\n public toDataURL(\n type: 'image/svg+xml',\n encoderOptions?: ToSVGOptions,\n ): string;\n public toDataURL(type?: string, encoderOptions?: number): string;\n public toDataURL(\n type = 'image/png',\n encoderOptions?: number | ToSVGOptions | undefined,\n ): string {\n switch (type) {\n case 'image/svg+xml':\n if (typeof encoderOptions !== 'object') {\n encoderOptions = undefined;\n }\n return `data:image/svg+xml;base64,${btoa(\n this.toSVG(encoderOptions as ToSVGOptions),\n )}`;\n default:\n if (typeof encoderOptions !== 'number') {\n encoderOptions = undefined;\n }\n return this.canvas.toDataURL(type, encoderOptions);\n }\n }\n\n public on(): void {\n // Disable panning/zooming when touching canvas element\n this.canvas.style.touchAction = 'none';\n (this.canvas.style as CSSStyleDeclaration & { msTouchAction: string | null }).msTouchAction = 'none';\n this.canvas.style.userSelect = 'none';\n\n const isIOS =\n /Macintosh/.test(navigator.userAgent) && 'ontouchstart' in document;\n\n // The \"Scribble\" feature of iOS intercepts point events. So that we can\n // lose some of them when tapping rapidly. Use touch events for iOS\n // platforms to prevent it. See\n // https://developer.apple.com/forums/thread/664108 for more information.\n if (window.PointerEvent && !isIOS) {\n this._handlePointerEvents();\n } else {\n this._handleMouseEvents();\n\n if ('ontouchstart' in window) {\n this._handleTouchEvents();\n }\n }\n }\n\n public off(): void {\n // Enable panning/zooming when touching canvas element\n this.canvas.style.touchAction = 'auto';\n (this.canvas.style as CSSStyleDeclaration & { msTouchAction: string | null }).msTouchAction = 'auto';\n this.canvas.style.userSelect = 'auto';\n\n this.canvas.removeEventListener('pointerdown', this._handlePointerDown);\n this.canvas.removeEventListener('mousedown', this._handleMouseDown);\n this.canvas.removeEventListener('touchstart', this._handleTouchStart);\n\n this._removeMoveUpEventListeners();\n }\n\n private _getListenerFunctions() {\n const canvasWindow =\n window.document === this.canvas.ownerDocument\n ? window\n : this.canvas.ownerDocument.defaultView ?? this.canvas.ownerDocument;\n\n return {\n addEventListener: canvasWindow.addEventListener.bind(\n canvasWindow,\n ) as typeof window.addEventListener,\n removeEventListener: canvasWindow.removeEventListener.bind(\n canvasWindow,\n ) as typeof window.removeEventListener,\n };\n }\n\n private _removeMoveUpEventListeners(): void {\n const { removeEventListener } = this._getListenerFunctions();\n removeEventListener('pointermove', this._handlePointerMove);\n removeEventListener('pointerup', this._handlePointerUp);\n\n removeEventListener('mousemove', this._handleMouseMove);\n removeEventListener('mouseup', this._handleMouseUp);\n\n removeEventListener('touchmove', this._handleTouchMove);\n removeEventListener('touchend', this._handleTouchEnd);\n }\n\n public isEmpty(): boolean {\n return this._isEmpty;\n }\n\n public fromData(\n pointGroups: PointGroup[],\n { clear = true }: FromDataOptions = {},\n ): void {\n if (clear) {\n this.clear();\n }\n\n this._fromData(\n pointGroups,\n this._drawCurve.bind(this),\n this._drawDot.bind(this),\n );\n\n this._data = this._data.concat(pointGroups);\n }\n\n public toData(): PointGroup[] {\n return this._data;\n }\n\n public _isLeftButtonPressed(event: MouseEvent, only?: boolean): boolean {\n if (only) {\n return event.buttons === 1;\n }\n\n return (event.buttons & 1) === 1;\n }\n private _pointerEventToSignatureEvent(\n event: MouseEvent | PointerEvent,\n ): SignatureEvent {\n return {\n event: event,\n type: event.type,\n x: event.clientX,\n y: event.clientY,\n pressure: 'pressure' in event ? event.pressure : 0,\n };\n }\n\n private _touchEventToSignatureEvent(event: TouchEvent): SignatureEvent {\n const touch = event.changedTouches[0];\n return {\n event: event,\n type: event.type,\n x: touch.clientX,\n y: touch.clientY,\n pressure: touch.force,\n };\n }\n\n // Event handlers\n private _handleMouseDown = (event: MouseEvent): void => {\n if (!this._isLeftButtonPressed(event, true) || this._drawingStroke) {\n return;\n }\n this._strokeBegin(this._pointerEventToSignatureEvent(event));\n };\n\n private _handleMouseMove = (event: MouseEvent): void => {\n if (!this._isLeftButtonPressed(event, true) || !this._drawingStroke) {\n // Stop when not pressing primary button or pressing multiple buttons\n this._strokeEnd(this._pointerEventToSignatureEvent(event), false);\n return;\n }\n\n this._strokeMoveUpdate(this._pointerEventToSignatureEvent(event));\n };\n\n private _handleMouseUp = (event: MouseEvent): void => {\n if (this._isLeftButtonPressed(event)) {\n return;\n }\n\n this._strokeEnd(this._pointerEventToSignatureEvent(event));\n };\n\n private _handleTouchStart = (event: TouchEvent): void => {\n if (event.targetTouches.length !== 1 || this._drawingStroke) {\n return;\n }\n\n // Prevent scrolling.\n if (event.cancelable) {\n event.preventDefault();\n }\n\n this._strokeBegin(this._touchEventToSignatureEvent(event));\n };\n\n private _handleTouchMove = (event: TouchEvent): void => {\n if (event.targetTouches.length !== 1) {\n return;\n }\n\n // Prevent scrolling.\n if (event.cancelable) {\n event.preventDefault();\n }\n\n if (!this._drawingStroke) {\n this._strokeEnd(this._touchEventToSignatureEvent(event), false);\n return;\n }\n\n this._strokeMoveUpdate(this._touchEventToSignatureEvent(event));\n };\n\n private _handleTouchEnd = (event: TouchEvent): void => {\n if (event.targetTouches.length !== 0) {\n return;\n }\n\n if (event.cancelable) {\n event.preventDefault();\n }\n\n this.canvas.removeEventListener('touchmove', this._handleTouchMove);\n\n this._strokeEnd(this._touchEventToSignatureEvent(event));\n };\n\n private _handlePointerDown = (event: PointerEvent): void => {\n if (!this._isLeftButtonPressed(event) || this._drawingStroke) {\n return;\n }\n\n event.preventDefault();\n\n this._strokeBegin(this._pointerEventToSignatureEvent(event));\n };\n\n private _handlePointerMove = (event: PointerEvent): void => {\n if (!this._isLeftButtonPressed(event, true) || !this._drawingStroke) {\n // Stop when primary button not pressed or multiple buttons pressed\n this._strokeEnd(this._pointerEventToSignatureEvent(event), false);\n return;\n }\n\n event.preventDefault();\n this._strokeMoveUpdate(this._pointerEventToSignatureEvent(event));\n };\n\n private _handlePointerUp = (event: PointerEvent): void => {\n if (this._isLeftButtonPressed(event)) {\n return;\n }\n\n event.preventDefault();\n this._strokeEnd(this._pointerEventToSignatureEvent(event));\n };\n\n private _getPointGroupOptions(group?: PointGroup): PointGroupOptions {\n return {\n penColor: group && 'penColor' in group ? group.penColor : this.penColor,\n dotSize: group && 'dotSize' in group ? group.dotSize : this.dotSize,\n minWidth: group && 'minWidth' in group ? group.minWidth : this.minWidth,\n maxWidth: group && 'maxWidth' in group ? group.maxWidth : this.maxWidth,\n velocityFilterWeight:\n group && 'velocityFilterWeight' in group\n ? group.velocityFilterWeight\n : this.velocityFilterWeight,\n compositeOperation:\n group && 'compositeOperation' in group\n ? group.compositeOperation\n : this.compositeOperation,\n };\n }\n\n // Private methods\n private _strokeBegin(event: SignatureEvent): void {\n const cancelled = !this.dispatchEvent(\n new CustomEvent('beginStroke', { detail: event, cancelable: true }),\n );\n if (cancelled) {\n return;\n }\n\n const { addEventListener } = this._getListenerFunctions();\n switch (event.event.type) {\n case 'mousedown':\n addEventListener('mousemove', this._handleMouseMove);\n addEventListener('mouseup', this._handleMouseUp);\n break;\n case 'touchstart':\n addEventListener('touchmove', this._handleTouchMove);\n addEventListener('touchend', this._handleTouchEnd);\n break;\n case 'pointerdown':\n addEventListener('pointermove', this._handlePointerMove);\n addEventListener('pointerup', this._handlePointerUp);\n break;\n default:\n // do nothing\n }\n\n this._drawingStroke = true;\n\n const pointGroupOptions = this._getPointGroupOptions();\n\n const newPointGroup: PointGroup = {\n ...pointGroupOptions,\n points: [],\n };\n\n this._data.push(newPointGroup);\n this._reset(pointGroupOptions);\n this._strokeUpdate(event);\n }\n\n private _strokeUpdate(event: SignatureEvent): void {\n if (!this._drawingStroke) {\n return;\n }\n\n if (this._data.length === 0) {\n // This can happen if clear() was called while a signature is still in progress,\n // or if there is a race condition between start/update events.\n this._strokeBegin(event);\n return;\n }\n\n this.dispatchEvent(\n new CustomEvent('beforeUpdateStroke', { detail: event }),\n );\n\n const point = this._createPoint(event.x, event.y, event.pressure);\n const lastPointGroup = this._data[this._data.length - 1];\n const lastPoints = lastPointGroup.points;\n const lastPoint =\n lastPoints.length > 0 && lastPoints[lastPoints.length - 1];\n const isLastPointTooClose = lastPoint\n ? point.distanceTo(lastPoint) <= this.minDistance\n : false;\n const pointGroupOptions = this._getPointGroupOptions(lastPointGroup);\n\n // Skip this point if it's too close to the previous one\n if (!lastPoint || !(lastPoint && isLastPointTooClose)) {\n const curve = this._addPoint(point, pointGroupOptions);\n\n if (!lastPoint) {\n this._drawDot(point, pointGroupOptions);\n } else if (curve) {\n this._drawCurve(curve, pointGroupOptions);\n }\n\n lastPoints.push({\n time: point.time,\n x: point.x,\n y: point.y,\n pressure: point.pressure,\n });\n }\n\n this.dispatchEvent(new CustomEvent('afterUpdateStroke', { detail: event }));\n }\n\n private _strokeEnd(event: SignatureEvent, shouldUpdate = true): void {\n this._removeMoveUpEventListeners();\n\n if (!this._drawingStroke) {\n return;\n }\n\n if (shouldUpdate) {\n this._strokeUpdate(event);\n }\n\n this._drawingStroke = false;\n this.dispatchEvent(new CustomEvent('endStroke', { detail: event }));\n }\n\n private _handlePointerEvents(): void {\n this._drawingStroke = false;\n\n this.canvas.addEventListener('pointerdown', this._handlePointerDown);\n }\n\n private _handleMouseEvents(): void {\n this._drawingStroke = false;\n\n this.canvas.addEventListener('mousedown', this._handleMouseDown);\n }\n\n private _handleTouchEvents(): void {\n this.canvas.addEventListener('touchstart', this._handleTouchStart);\n }\n\n // Called when a new line is started\n private _reset(options: PointGroupOptions): void {\n this._lastPoints = [];\n this._lastVelocity = 0;\n this._lastWidth = (options.minWidth + options.maxWidth) / 2;\n this._ctx.fillStyle = options.penColor;\n this._ctx.globalCompositeOperation = options.compositeOperation;\n }\n\n private _createPoint(x: number, y: number, pressure: number): Point {\n const rect = this.canvas.getBoundingClientRect();\n\n return new Point(\n x - rect.left,\n y - rect.top,\n pressure,\n new Date().getTime(),\n );\n }\n\n // Add point to _lastPoints array and generate a new curve if there are enough points (i.e. 3)\n private _addPoint(point: Point, options: PointGroupOptions): Bezier | null {\n const { _lastPoints } = this;\n\n _lastPoints.push(point);\n\n if (_lastPoints.length > 2) {\n // To reduce the initial lag make it work with 3 points\n // by copying the first point to the beginning.\n if (_lastPoints.length === 3) {\n _lastPoints.unshift(_lastPoints[0]);\n }\n\n // _points array will always have 4 points here.\n const widths = this._calculateCurveWidths(\n _lastPoints[1],\n _lastPoints[2],\n options,\n );\n const curve = Bezier.fromPoints(_lastPoints, widths);\n\n // Remove the first element from the list, so that there are no more than 4 points at any time.\n _lastPoints.shift();\n\n return curve;\n }\n\n return null;\n }\n\n private _calculateCurveWidths(\n startPoint: Point,\n endPoint: Point,\n options: PointGroupOptions,\n ): { start: number; end: number } {\n const velocity =\n options.velocityFilterWeight * endPoint.velocityFrom(startPoint) +\n (1 - options.velocityFilterWeight) * this._lastVelocity;\n\n const newWidth = this._strokeWidth(velocity, options);\n\n const widths = {\n end: newWidth,\n start: this._lastWidth,\n };\n\n this._lastVelocity = velocity;\n this._lastWidth = newWidth;\n\n return widths;\n }\n\n private _strokeWidth(velocity: number, options: PointGroupOptions): number {\n return Math.max(options.maxWidth / (velocity + 1), options.minWidth);\n }\n\n private _drawCurveSegment(x: number, y: number, width: number): void {\n const ctx = this._ctx;\n\n ctx.moveTo(x, y);\n ctx.arc(x, y, width, 0, 2 * Math.PI, false);\n this._isEmpty = false;\n }\n\n private _drawCurve(curve: Bezier, options: PointGroupOptions): void {\n const ctx = this._ctx;\n const widthDelta = curve.endWidth - curve.startWidth;\n // '2' is just an arbitrary number here. If only length is used, then\n // there are gaps between curve segments :/\n const drawSteps = Math.ceil(curve.length()) * 2;\n\n ctx.beginPath();\n ctx.fillStyle = options.penColor;\n\n for (let i = 0; i < drawSteps; i += 1) {\n // Calculate the Bezier (x, y) coordinate for this step.\n const t = i / drawSteps;\n const tt = t * t;\n const ttt = tt * t;\n const u = 1 - t;\n const uu = u * u;\n const uuu = uu * u;\n\n let x = uuu * curve.startPoint.x;\n x += 3 * uu * t * curve.control1.x;\n x += 3 * u * tt * curve.control2.x;\n x += ttt * curve.endPoint.x;\n\n let y = uuu * curve.startPoint.y;\n y += 3 * uu * t * curve.control1.y;\n y += 3 * u * tt * curve.control2.y;\n y += ttt * curve.endPoint.y;\n\n const width = Math.min(\n curve.startWidth + ttt * widthDelta,\n options.maxWidth,\n );\n this._drawCurveSegment(x, y, width);\n }\n\n ctx.closePath();\n ctx.fill();\n }\n\n private _drawDot(point: BasicPoint, options: PointGroupOptions): void {\n const ctx = this._ctx;\n const width =\n options.dotSize > 0\n ? options.dotSize\n : (options.minWidth + options.maxWidth) / 2;\n\n ctx.beginPath();\n this._drawCurveSegment(point.x, point.y, width);\n ctx.closePath();\n ctx.fillStyle = options.penColor;\n ctx.fill();\n }\n\n private _fromData(\n pointGroups: PointGroup[],\n drawCurve: SignaturePad['_drawCurve'],\n drawDot: SignaturePad['_drawDot'],\n ): void {\n for (const group of pointGroups) {\n const { points } = group;\n const pointGroupOptions = this._getPointGroupOptions(group);\n\n if (points.length > 1) {\n for (let j = 0; j < points.length; j += 1) {\n const basicPoint = points[j];\n const point = new Point(\n basicPoint.x,\n basicPoint.y,\n basicPoint.pressure,\n basicPoint.time,\n );\n\n if (j === 0) {\n this._reset(pointGroupOptions);\n }\n\n const curve = this._addPoint(point, pointGroupOptions);\n\n if (curve) {\n drawCurve(curve, pointGroupOptions);\n }\n }\n } else {\n this._reset(pointGroupOptions);\n\n drawDot(points[0], pointGroupOptions);\n }\n }\n }\n\n public toSVG({ includeBackgroundColor = false }: ToSVGOptions = {}): string {\n const pointGroups = this._data;\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n const minX = 0;\n const minY = 0;\n const maxX = this.canvas.width / ratio;\n const maxY = this.canvas.height / ratio;\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\n svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n svg.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttribute('viewBox', `${minX} ${minY} ${maxX} ${maxY}`);\n svg.setAttribute('width', maxX.toString());\n svg.setAttribute('height', maxY.toString());\n\n if (includeBackgroundColor && this.backgroundColor) {\n const rect = document.createElement('rect');\n rect.setAttribute('width', '100%');\n rect.setAttribute('height', '100%');\n rect.setAttribute('fill', this.backgroundColor);\n\n svg.appendChild(rect);\n }\n\n this._fromData(\n pointGroups,\n\n (curve, { penColor }) => {\n const path = document.createElement('path');\n\n // Need to check curve for NaN values, these pop up when drawing\n // lines on the canvas that are not continuous. E.g. Sharp corners\n // or stopping mid-stroke and than continuing without lifting mouse.\n /* eslint-disable no-restricted-globals */\n if (\n !isNaN(curve.control1.x) &&\n !isNaN(curve.control1.y) &&\n !isNaN(curve.control2.x) &&\n !isNaN(curve.control2.y)\n ) {\n const attr =\n `M ${curve.startPoint.x.toFixed(3)},${curve.startPoint.y.toFixed(\n 3,\n )} ` +\n `C ${curve.control1.x.toFixed(3)},${curve.control1.y.toFixed(3)} ` +\n `${curve.control2.x.toFixed(3)},${curve.control2.y.toFixed(3)} ` +\n `${curve.endPoint.x.toFixed(3)},${curve.endPoint.y.toFixed(3)}`;\n path.setAttribute('d', attr);\n path.setAttribute('stroke-width', (curve.endWidth * 2.25).toFixed(3));\n path.setAttribute('stroke', penColor);\n path.setAttribute('fill', 'none');\n path.setAttribute('stroke-linecap', 'round');\n\n svg.appendChild(path);\n }\n /* eslint-enable no-restricted-globals */\n },\n\n (point, { penColor, dotSize, minWidth, maxWidth }) => {\n const circle = document.createElement('circle');\n const size = dotSize > 0 ? dotSize : (minWidth + maxWidth) / 2;\n circle.setAttribute('r', size.toString());\n circle.setAttribute('cx', point.x.toString());\n circle.setAttribute('cy', point.y.toString());\n circle.setAttribute('fill', penColor);\n\n svg.appendChild(circle);\n },\n );\n\n return svg.outerHTML;\n }\n}\n", "import SignaturePadCore from 'signature_pad';\n\nclass SmartFileUpload {\n static memoryLimit = 2048000;\n\n static supportedTypes = ['image/jpeg', 'image/png', 'image/svg+xml'];\n\n static getHumanSize(numberOfBytes) {\n // Approximate to the closest prefixed unit\n const units = ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const exponent = Math.min(\n Math.floor(Math.log(numberOfBytes) / Math.log(1024)),\n units.length - 1,\n );\n const approx = numberOfBytes / 1024 ** exponent;\n const output =\n exponent === 0\n ? `${numberOfBytes} bytes`\n : `${approx.toFixed(0)} ${units[exponent]}`;\n\n return output;\n }\n\n static getData(file) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = (e) => {\n resolve(e.target.result);\n };\n reader.onerror = () => {\n reject(\n new Error(\n 'An error occurred reading the file. Please check the file, and try again',\n ),\n );\n };\n reader.readAsDataURL(file);\n });\n }\n\n static async retrieve(files) {\n if (files.length > 1) {\n throw new Error('Only one file upload is permitted at a time');\n }\n\n const file = files[0];\n\n if (!SmartFileUpload.supportedTypes.includes(file.type)) {\n throw new Error(\n 'Unsupported file format. Please ensure that you are providing a JPG, PNG or SVG image',\n );\n }\n\n if (file.size > SmartFileUpload.memoryLimit) {\n throw new Error(\n `${\n file.name\n } is too large. Please ensure that the file is less than ${SmartFileUpload.getHumanSize(\n SmartFileUpload.memoryLimit,\n )}.`,\n );\n }\n\n const imageAsDataUrl = await SmartFileUpload.getData(file);\n\n return imageAsDataUrl;\n }\n}\n\nclass SignaturePad extends HTMLElement {\n connectedCallback() {\n const shadow = this.attachShadow({ mode: 'open' });\n\n const style = document.createElement('style');\n style.textContent = `\n:host {\n display: block;\n block-size: auto;\n inline-size: 30rem;\n max-inline-size: 100%;\n position: relative;\n --color-active: #2D2B2A;\n --color-default: #001096;\n --color-disabled: #848282;\n}\n\n:host::part(upload) {\n text-align: center;\n}\n\n:host::part(signature-controls) {\n display: inline-flex;\n position: absolute;\n top: 1rem;\n right: 1rem;\n}\n\n:host::part(upload) svg + * {\n margin-inline-start: .5rem;\n}\n\n:host::part(canvas) {\n background-color: #F9F0E7;\n --dot-bg: #F9F0E7;\n --dot-color: black;\n --dot-size: 1px;\n --dot-space: 22px;\n background:\n linear-gradient(90deg, var(--dot-bg) calc(var(--dot-space) - var(--dot-size)), transparent 1%) center / var(--dot-space) var(--dot-space),\n linear-gradient(var(--dot-bg) calc(var(--dot-space) - var(--dot-size)), transparent 1%) center / var(--dot-space) var(--dot-space),\n var(--dot-color);\n border-radius: 2rem;\n inline-size: 30rem;\n max-inline-size: 100%;\n aspect-ratio: 2 / 1;\n}\n\n:host::part(upload-preview-image) {\n max-inline-size: 10rem;\n margin-inline: auto;\n}\n\n.visually-hidden {\n clip: rect(0 0 0 0); \n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap; \n width: 1px;\n}\n\nbutton,\nlabel {\n font: inherit;\n cursor: pointer;\n}\n\nlabel {\n display: inline-flex;\n text-decoration: underline;\n}\n\nlabel svg + * {\n margin-inline-start: .5rem;\n}\n\n[type=\"file\"] {\n display: none;\n}\n\n.center {\n text-align: center;\n margin-inline: auto;\n}\n\n.color-red {\n color: red;\n}\n\nbutton[data-variant=\"icon\"] {\n appearance: none;\n -webkit-appearance: none;\n background-color: transparent;\n border: 0px;\n}\n\nbutton[data-variant=\"text\"] {\n appearance: none;\n -webkit-appearance: none;\n background-color: transparent;\n border: 0px;\n text-decoration: underline;\n display: inline-flex;\n align-items: baseline;\n}\n\nbutton[data-variant=\"solid\"] {\n --button-color: ${this.themeColor};\n border-radius: 2.5rem;\n border: 0;\n background-color: transparent;\n color: #fff;\n cursor: pointer;\n inline-size: 100%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n font-weight: 600;\n padding: .75rem 1.5rem;\n text-align: center;\n background-color: var(--button-color);\n border: 2px solid var(--button-color);\n}\n\nbutton:hover,\nbutton:focus,\nbutton:active {\n --button-color: var(--color-active);\n}\n\nbutton:disabled {\n --button-color: var(--color-disabled);\n}\n`;\n\n const wrapper = document.createElement('div');\n const errorMessage = document.createElement('div');\n errorMessage.innerHTML = `\n <p id=\"error\" class=\"color-red | center\"><p>\n `;\n\n const signatureControls = document.createElement('div');\n signatureControls.setAttribute('id', 'controls');\n signatureControls.setAttribute('part', 'signature-controls');\n signatureControls.innerHTML = `\n <button data-variant=\"icon\" type=\"button\" name=\"clear\" id=\"clear\">\n <span class=\"visually-hidden\">\n Clear Signature\n </span>\n <svg fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" viewBox=\"0 0 17 18\">\n <path d=\"M3.314 15.646a8.004 8.004 0 01-2.217-4.257 8.06 8.06 0 01.545-4.655l1.789.788a6.062 6.062 0 001.264 6.737 6.033 6.033 0 008.551 0c2.358-2.37 2.358-6.224 0-8.592a5.996 5.996 0 00-4.405-1.782l.662 2.354-3.128-.796-3.127-.796 2.25-2.324L7.748 0l.55 1.953a7.966 7.966 0 016.33 2.326 8.004 8.004 0 012.342 5.684 8.005 8.005 0 01-2.343 5.683A7.928 7.928 0 018.97 18a7.928 7.928 0 01-5.656-2.354z\" fill=\"currentColor\" />\n </svg>\n </button>\n `;\n\n const canvas = document.createElement('canvas');\n\n /**\n * NOTE: In order to make this responsive, we need to calculate the width\n * / height of the canvas element relative to the closest visible element\n *\n * Within our consuming context, we do follow these steps:\n * - Find the closest ancestor that is visible\n * - Find the visible child of that ancestor\n * - Get the reference width / inline-size of the element\n * - Compute the canvas.height as the lesser of the reference width or the\n * inline size of the canvas set in CSS\n * - Compute the canvas.height as half the size of the canvas.width or the\n * block size computed by the aspect-ratio property\n */\n\n const closestVisibleAncestor = this.parentElement.closest(':not([hidden])');\n const visibleChild = closestVisibleAncestor.querySelector(':not([hidden])');\n const containerWidth = visibleChild.offsetWidth;\n\n const remInPx = getComputedStyle(document.documentElement).fontSize.split(\n 'px',\n )[0];\n const componentMaxInlineSize = 30 * remInPx; // 30rem from the style declaration\n const aspectRatio = 2; // 2 from the canvas style aspect ratio declaration\n\n canvas.width =\n containerWidth < componentMaxInlineSize\n ? containerWidth\n : componentMaxInlineSize;\n canvas.height =\n (containerWidth < componentMaxInlineSize\n ? containerWidth\n : componentMaxInlineSize) / aspectRatio;\n\n canvas.setAttribute('id', 'signature-canvas');\n canvas.setAttribute('part', 'canvas');\n\n const uploadControl = document.createElement('div');\n uploadControl.setAttribute('id', 'signature-upload-wrapper');\n uploadControl.innerHTML = `\n <p part=\"upload\">\n <strong>or</strong>\n <label>\n <input type='file' onclick='this.value=null;' id='upload-signature' accept='image/jpeg, image/png, image/svg+xml' />\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#F9F0E7\" rx=\"2\"/>\n <mask id=\"sign\" width=\"16\" height=\"16\" x=\"0\" y=\"0\" maskUnits=\"userSpaceOnUse\" style=\"mask-type:alpha\">\n <rect width=\"16\" height=\"16\" fill=\"#D9D9D9\" rx=\"2\"/>\n </mask>\n <g mask=\"url(#sign)\">\n <path fill=\"#2D2B2A\" d=\"M0 13.333h16V16H0z\"/>\n </g>\n <path fill=\"#2D2B2A\" fill-rule=\"evenodd\" d=\"M2.69 7.346a.23.23 0 0 1 .059-.073.275.275 0 0 1 .284-.034c.07.036.146.064.224.084h.12c0-.012.105-.048.105-.395a.796.796 0 0 1 .211-.61.667.667 0 0 1 .607-.096c.202.061.39.154.555.275.194.138.38.286.555.443.146.134.31.25.489.347l.092.047c.119.06.238-.023.185-.143l-.04-.12a.817.817 0 0 1-.066-.694.675.675 0 0 1 .244-.273.774.774 0 0 1 .364-.12c.324-.028.651 0 .964.083h.026c.027-.861.225-1.83.82-2.523.593-.694 1.478-.993 2.205-.837.726.155 1.307.73 1.307 1.602 0 1.34-.872 2.26-1.915 2.93.471.374.85.835 1.11 1.351.027.046.05.094.065.144h.014a.55.55 0 0 0 .079.203.44.44 0 0 0 .04.18c.002.025.011.05.026.07h-.013c.037.17.041.344.013.515a.955.955 0 0 1-.188.493 1.097 1.097 0 0 1-.433.344 1.346 1.346 0 0 1-1.122.012 2.194 2.194 0 0 1-.846-.67 5.024 5.024 0 0 1-.462-.681h-.026a.502.502 0 0 0-.106-.144.014.014 0 0 1-.01-.003.011.011 0 0 1-.003-.009.035.035 0 0 1-.013-.023.047.047 0 0 1-.011-.017.626.626 0 0 0-.055-.163.24.24 0 0 0-.014-.095h.014a3.477 3.477 0 0 1-.198-.49 6.318 6.318 0 0 1-.278-1.699L7.51 6.51c-.243-.07-.5-.094-.753-.071-.158.024-.198.071-.211.107-.014.036-.04.168.053.359.092.191.171.478.118.658a.45.45 0 0 1-.21.25.66.66 0 0 1-.305.06 1.521 1.521 0 0 1-.568-.19 3.533 3.533 0 0 1-.58-.42 3.54 3.54 0 0 0-.49-.394 1.49 1.49 0 0 0-.409-.203c-.053-.024-.079-.024-.092-.012H4.05c-.014.012-.066.072-.066.275 0 .395-.12.705-.423.813a.813.813 0 0 1-.41.024 1.646 1.646 0 0 1-.343-.12.237.237 0 0 1-.126-.127.208.208 0 0 1 .007-.172Zm5.731.766c.068.204.152.404.251.598.011.053.03.105.053.155.036.068.08.132.132.191.02.05.047.099.08.144.085.152.186.296.303.43.167.22.389.4.647.526a.847.847 0 0 0 .687-.011.655.655 0 0 0 .247-.204.573.573 0 0 0 .11-.287 1.435 1.435 0 0 0-.04-.454h-.014a.496.496 0 0 0-.079-.335.491.491 0 0 0-.119-.191 3.842 3.842 0 0 0-1.017-1.16l-.356.18a.253.253 0 0 1-.193.027.248.248 0 0 1-.088-.041.22.22 0 0 1-.063-.07.219.219 0 0 1-.02-.172.242.242 0 0 1 .113-.14l.172-.083a3.388 3.388 0 0 0-.463-.251l-.58-.24c.022.47.101.935.237 1.388Zm.568-1.555c.24.12.474.252.7.395 1.017-.634 1.81-1.459 1.81-2.63 0-.67-.41-1.053-.912-1.16-.502-.108-1.189.083-1.704.669-.515.586-.7 1.47-.713 2.32v.083c.251.084.515.192.819.323Z\" clip-rule=\"evenodd\"/>\n </svg>\n <span>upload a signature</span>\n </label>\n </p>\n `;\n\n const publishSignatureContainer = document.createElement('p');\n publishSignatureContainer.innerHTML = `\n <button data-variant=\"solid\" type=\"button\" name=\"publish\" id=\"publish\">\n <span>\n Continue\n </span>\n <svg\n aria-hidden=\"true\"\n width=\"25\"\n height=\"24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7 12h11m0 0-4.588-4M18 12l-4.588 4\"\n stroke=\"#fff\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n `;\n\n wrapper.appendChild(errorMessage);\n wrapper.appendChild(signatureControls);\n wrapper.appendChild(canvas);\n if (this.allowUpload) wrapper.appendChild(uploadControl);\n wrapper.appendChild(publishSignatureContainer);\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n\n this.core = new SignaturePadCore(canvas);\n\n // Error Message\n this.errorMessage = errorMessage.querySelector('#error');\n\n // Canvas Resize / Sizing\n if (window) {\n window.onresize = this.resizeCanvas();\n }\n\n // Signature Pad Controls\n this.clearSignatureButton = signatureControls.querySelector('#clear');\n this.clearSignatureButton.addEventListener('click', () =>\n this.clearSignature(),\n );\n\n // Upload Controls\n this.uploadSignatureButton =\n uploadControl.querySelector('#upload-signature');\n this.uploadSignatureButton.addEventListener('change', (event) =>\n this.uploadSignature(event),\n );\n\n // Publish Signature\n this.publishSignatureButton =\n publishSignatureContainer.querySelector('#publish');\n this.publishSignatureButton.addEventListener('click', () =>\n this.publishSignature(),\n );\n }\n\n disconnectedCallback() {\n this.publishSignatureButton.removeEventListener('click', () =>\n this.publishSignature(),\n );\n this.clearSignatureButton.removeEventListener('click', () =>\n this.clearSignature(),\n );\n this.uploadSignatureButton.removeEventListener('change', (event) =>\n this.uploadSignature(event),\n );\n }\n\n // Adjust canvas coordinate space taking into account pixel ratio,\n // to make it look crisp on mobile devices.\n // This also causes canvas to be cleared.\n resizeCanvas() {\n // When zoomed out to less than 100%, for some very strange reason,\n // some browsers report devicePixelRatio as less than 1\n // and only part of the canvas is cleared then.\n const canvas = this.shadowRoot.querySelector('canvas');\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n\n // This part causes the canvas to be cleared\n canvas.width = (canvas.offsetWidth || canvas.width) * ratio;\n canvas.height = (canvas.offsetHeight || canvas.height) * ratio;\n canvas.getContext('2d').scale(ratio, ratio);\n\n // This library does not listen for canvas changes, so after the canvas is automatically\n // cleared by the browser, SignaturePad#isEmpty might still return false, even though the\n // canvas looks empty, because the internal data of this library wasn't cleared. To make sure\n // that the state of this library is consistent with visual state of the canvas, you\n // have to clear it manually.\n // signaturePad.clear();\n\n // If you want to keep the drawing on resize instead of clearing it you can reset the data.\n this.core.fromData(this.core.toData());\n }\n\n publishSignature() {\n try {\n this.resetErrorMessage();\n const previewImage = this.shadowRoot.querySelector('img');\n let image = previewImage ? previewImage.src : undefined;\n if (!image && !this.core.isEmpty()) {\n image = this.core.toDataURL('image/svg+xml');\n }\n\n if (image) {\n this.dispatchEvent(\n new CustomEvent('signature-pad.publish', {\n detail: image,\n }),\n );\n } else {\n throw new Error(\n `No signature present. ${\n this.allowUpload ? 'Draw or upload' : 'Draw'\n } a signature`,\n );\n }\n } catch (error) {\n this.handleError(error.message);\n }\n }\n\n resetErrorMessage() {\n this.errorMessage.textContent = '';\n }\n\n handleError(error) {\n this.errorMessage.textContent = error;\n }\n\n clearSignature() {\n this.resetErrorMessage();\n const canvas = this.shadowRoot.querySelector('canvas');\n const img = this.shadowRoot.querySelector('img');\n\n if (img) {\n img.remove();\n canvas.removeAttribute('hidden');\n }\n\n this.core.clear();\n }\n\n previewUpload(fileData) {\n const canvas = this.shadowRoot.querySelector('canvas');\n let img = this.shadowRoot.querySelector('img');\n\n if (!img) {\n img = document.createElement('img');\n }\n\n img.src = fileData;\n img.setAttribute('part', 'upload-preview-image');\n canvas.setAttribute('hidden', true);\n canvas.insertAdjacentElement('afterend', img);\n }\n\n async uploadSignature(event) {\n try {\n this.resetErrorMessage();\n const { files } = event.target;\n\n // validate file, and convert file to data url\n const fileData = await SmartFileUpload.retrieve(files);\n\n // swap out canvas for an image for preview\n this.previewUpload(fileData);\n } catch (error) {\n this.handleError(error.message);\n }\n }\n\n get allowUpload() {\n return this.hasAttribute('allow-upload');\n }\n\n get themeColor() {\n return this.getAttribute('theme-color') || '#001096';\n }\n}\n\nif (\n 'customElements' in window &&\n !window.customElements.get('smileid-signature-pad')\n) {\n window.customElements.define('smileid-signature-pad', SignaturePad);\n}\n\nexport default SignaturePad;\n", "import SignaturePad from './SignaturePad';\n\nexport default SignaturePad;\n"],
5
+ "mappings": "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",
6
+ "names": ["Point", "x", "y", "pressure", "time", "start", "other", "Bezier", "_Bezier", "points", "widths", "c2", "c3", "s1", "s2", "s3", "dx1", "dy1", "dx2", "dy2", "m1", "m2", "l1", "l2", "dxm", "dym", "k", "cm", "tx", "ty", "startPoint", "control2", "control1", "endPoint", "startWidth", "endWidth", "length", "px", "py", "i", "t", "cx", "cy", "xdiff", "ydiff", "c1", "end", "SignatureEventTarget", "error", "type", "listener", "options", "event", "callback", "throttle", "fn", "wait", "previous", "timeout", "result", "storedContext", "storedArgs", "later", "args", "now", "remaining", "SignaturePad", "_SignaturePad", "canvas", "_a", "_b", "_c", "ctx", "dataUrl", "resolve", "reject", "image", "ratio", "width", "height", "xOffset", "yOffset", "encoderOptions", "isIOS", "canvasWindow", "removeEventListener", "pointGroups", "clear", "only", "touch", "group", "addEventListener", "pointGroupOptions", "newPointGroup", "point", "lastPointGroup", "lastPoints", "lastPoint", "isLastPointTooClose", "curve", "shouldUpdate", "rect", "_lastPoints", "velocity", "newWidth", "widthDelta", "drawSteps", "tt", "ttt", "u", "uu", "uuu", "drawCurve", "drawDot", "j", "basicPoint", "includeBackgroundColor", "minX", "minY", "maxX", "maxY", "svg", "penColor", "path", "attr", "dotSize", "minWidth", "maxWidth", "circle", "size", "_SmartFileUpload", "numberOfBytes", "units", "exponent", "approx", "file", "resolve", "reject", "reader", "e", "files", "__publicField", "SmartFileUpload", "SignaturePad", "shadow", "style", "wrapper", "errorMessage", "signatureControls", "canvas", "containerWidth", "componentMaxInlineSize", "aspectRatio", "uploadControl", "publishSignatureContainer", "event", "ratio", "previewImage", "image", "error", "img", "fileData", "SignaturePad_default", "src_default", "SignaturePad_default"]
7
+ }