|  |  | @ -6,10 +6,29 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  |     @mousedown.stop="startDrag" |  |  |  |     @mousedown.stop="startDrag" | 
			
		
	
		
		
			
				
					
					|  |  |  |   > |  |  |  |   > | 
			
		
	
		
		
			
				
					
					|  |  |  |     <div |  |  |  |     <div | 
			
		
	
		
		
			
				
					
					|  |  |  |       v-if="isSelected || !field?.type" |  |  |  |       v-if="isSelected || isDraw" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       class="top-0 bottom-0 right-0 left-0 absolute border border-1.5 pointer-events-none" |  |  |  |       class="top-0 bottom-0 right-0 left-0 absolute border border-1.5 pointer-events-none" | 
			
		
	
		
		
			
				
					
					|  |  |  |       :class="borderColors[submitterIndex]" |  |  |  |       :class="borderColors[submitterIndex]" | 
			
		
	
		
		
			
				
					
					|  |  |  |     /> |  |  |  |     /> | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     <div | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       v-if="field.type === 'cells' && (isSelected || isDraw)" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       class="top-0 bottom-0 right-0 left-0 absolute" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     > | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       <div | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         v-for="(cellW, index) in cells" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         :key="index" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         class="absolute top-0 bottom-0 border-r" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         :class="borderColors[submitterIndex]" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         :style="{ left: (cellW / area.w * 100) + '%' }" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       > | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         <span | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           v-if="index === 0" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           class="h-2.5 w-2.5 rounded-full -bottom-1 border-gray-400 bg-white shadow-md border absolute cursor-ew-resize z-10" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           style="left: -4px" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           @mousedown.stop="startResizeCell" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         /> | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       </div> | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     </div> | 
			
		
	
		
		
			
				
					
					|  |  |  |     <div |  |  |  |     <div | 
			
		
	
		
		
			
				
					
					|  |  |  |       v-if="field?.type" |  |  |  |       v-if="field?.type" | 
			
		
	
		
		
			
				
					
					|  |  |  |       class="absolute bg-white rounded-t border overflow-visible whitespace-nowrap group-hover:flex group-hover:z-10" |  |  |  |       class="absolute bg-white rounded-t border overflow-visible whitespace-nowrap group-hover:flex group-hover:z-10" | 
			
		
	
	
		
		
			
				
					|  |  | @ -118,6 +137,11 @@ export default { | 
			
		
	
		
		
			
				
					
					|  |  |  |       type: Object, |  |  |  |       type: Object, | 
			
		
	
		
		
			
				
					
					|  |  |  |       required: true |  |  |  |       required: true | 
			
		
	
		
		
			
				
					
					|  |  |  |     }, |  |  |  |     }, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     isDraw: { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       type: Boolean, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       required: false, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       default: false | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     }, | 
			
		
	
		
		
			
				
					
					|  |  |  |     field: { |  |  |  |     field: { | 
			
		
	
		
		
			
				
					
					|  |  |  |       type: Object, |  |  |  |       type: Object, | 
			
		
	
		
		
			
				
					
					|  |  |  |       required: false, |  |  |  |       required: false, | 
			
		
	
	
		
		
			
				
					|  |  | @ -135,7 +159,21 @@ export default { | 
			
		
	
		
		
			
				
					
					|  |  |  |   }, |  |  |  |   }, | 
			
		
	
		
		
			
				
					
					|  |  |  |   computed: { |  |  |  |   computed: { | 
			
		
	
		
		
			
				
					
					|  |  |  |     defaultName: Field.computed.defaultName, |  |  |  |     defaultName: Field.computed.defaultName, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     fieldNames: FieldType.computed.fieldNames, | 
			
		
	
		
		
			
				
					
					|  |  |  |     fieldIcons: FieldType.computed.fieldIcons, |  |  |  |     fieldIcons: FieldType.computed.fieldIcons, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     cells () { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       const cells = [] | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       let currentWidth = 0 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       while (currentWidth + (this.area.cell_w + this.area.cell_w / 4) < this.area.w) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         currentWidth += this.area.cell_w || 9999999 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         cells.push(currentWidth) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       return cells | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     }, | 
			
		
	
		
		
			
				
					
					|  |  |  |     submitter () { |  |  |  |     submitter () { | 
			
		
	
		
		
			
				
					
					|  |  |  |       return this.template.submitters.find((s) => s.uuid === this.field.submitter_uuid) |  |  |  |       return this.template.submitters.find((s) => s.uuid === this.field.submitter_uuid) | 
			
		
	
		
		
			
				
					
					|  |  |  |     }, |  |  |  |     }, | 
			
		
	
	
		
		
			
				
					|  |  | @ -187,6 +225,29 @@ export default { | 
			
		
	
		
		
			
				
					
					|  |  |  |         }, 1) |  |  |  |         }, 1) | 
			
		
	
		
		
			
				
					
					|  |  |  |       } |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  |     }, |  |  |  |     }, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     startResizeCell (e) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       document.addEventListener('mousemove', this.onResizeCell) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       document.addEventListener('mouseup', this.stopResizeCell) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       this.$emit('start-resize', 'ew') | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     }, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     stopResizeCell (e) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       document.removeEventListener('mousemove', this.onResizeCell) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       document.removeEventListener('mouseup', this.stopResizeCell) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       this.$emit('stop-resize') | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       this.save() | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     }, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     onResizeCell (e) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       if (e.toElement.id === 'mask') { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         const positionX = e.layerX / (e.toElement.clientWidth - 1) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (positionX > this.area.x) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           this.area.cell_w = positionX - this.area.x | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     }, | 
			
		
	
		
		
			
				
					
					|  |  |  |     maybeUpdateOptions () { |  |  |  |     maybeUpdateOptions () { | 
			
		
	
		
		
			
				
					
					|  |  |  |       if (!['radio', 'multiple', 'select'].includes(this.field.type)) { |  |  |  |       if (!['radio', 'multiple', 'select'].includes(this.field.type)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         delete this.field.options |  |  |  |         delete this.field.options | 
			
		
	
	
		
		
			
				
					|  |  | @ -195,6 +256,14 @@ export default { | 
			
		
	
		
		
			
				
					
					|  |  |  |       if (['select', 'multiple', 'radio'].includes(this.field.type)) { |  |  |  |       if (['select', 'multiple', 'radio'].includes(this.field.type)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         this.field.options ||= [''] |  |  |  |         this.field.options ||= [''] | 
			
		
	
		
		
			
				
					
					|  |  |  |       } |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       (this.field.areas || []).forEach((area) => { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (this.field.type === 'cells') { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           area.cell_w = area.w * 2 / Math.floor(area.w / area.h) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } else { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           delete area.cell_w | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       }) | 
			
		
	
		
		
			
				
					
					|  |  |  |     }, |  |  |  |     }, | 
			
		
	
		
		
			
				
					
					|  |  |  |     onNameBlur (e) { |  |  |  |     onNameBlur (e) { | 
			
		
	
		
		
			
				
					
					|  |  |  |       this.isNameFocus = false |  |  |  |       this.isNameFocus = false | 
			
		
	
	
		
		
			
				
					|  |  | @ -256,7 +325,7 @@ export default { | 
			
		
	
		
		
			
				
					
					|  |  |  |       document.addEventListener('mousemove', this.resize) |  |  |  |       document.addEventListener('mousemove', this.resize) | 
			
		
	
		
		
			
				
					
					|  |  |  |       document.addEventListener('mouseup', this.stopResize) |  |  |  |       document.addEventListener('mouseup', this.stopResize) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |       this.$emit('start-resize') |  |  |  |       this.$emit('start-resize', 'nwse') | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     }, |  |  |  |     }, | 
			
		
	
		
		
			
				
					
					|  |  |  |     stopResize () { |  |  |  |     stopResize () { | 
			
		
	
		
		
			
				
					
					|  |  |  |       document.removeEventListener('mousemove', this.resize) |  |  |  |       document.removeEventListener('mousemove', this.resize) | 
			
		
	
	
		
		
			
				
					|  |  | 
 |