mirror of https://github.com/docusealco/docuseal
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							39 lines
						
					
					
						
							1000 B
						
					
					
				
			
		
		
	
	
							39 lines
						
					
					
						
							1000 B
						
					
					
				function isValidSignatureCanvas (data) {
 | 
						|
  if (data.length === 0) return false
 | 
						|
 | 
						|
  const strokes = data.filter(stroke => Array.isArray(stroke.points) && stroke.points.length > 2)
 | 
						|
 | 
						|
  if (strokes.length === 0) return false
 | 
						|
 | 
						|
  let skippedStraightLine = 0
 | 
						|
 | 
						|
  const validStrokes = strokes.filter(stroke => {
 | 
						|
    const points = stroke.points
 | 
						|
    const first = points[0]
 | 
						|
    const last = points[points.length - 1]
 | 
						|
    const A = last.y - first.y
 | 
						|
    const B = first.x - last.x
 | 
						|
    const C = last.x * first.y - first.x * last.y
 | 
						|
    const lineLength = Math.sqrt(A * A + B * B)
 | 
						|
 | 
						|
    const totalDeviation = points.reduce((sum, p) => {
 | 
						|
      const distanceToLine = Math.abs(A * p.x + B * p.y + C) / lineLength
 | 
						|
      return sum + distanceToLine
 | 
						|
    }, 0)
 | 
						|
 | 
						|
    const avgDeviation = totalDeviation / points.length
 | 
						|
 | 
						|
    if (avgDeviation < 3 && skippedStraightLine < 2) {
 | 
						|
      skippedStraightLine++
 | 
						|
 | 
						|
      return false
 | 
						|
    }
 | 
						|
 | 
						|
    return true
 | 
						|
  })
 | 
						|
 | 
						|
  return validStrokes.length > 0
 | 
						|
}
 | 
						|
 | 
						|
export { isValidSignatureCanvas }
 |