{"version":3,"file":"konum-formy.mjs","sources":["../../../projects/formy/src/lib/validators/rut-helper.ts","../../../projects/formy/src/lib/validators/runDv-validator.directive.ts","../../../projects/formy/src/lib/validators/rut-validator.directive.ts","../../../projects/formy/src/lib/formy.service.ts","../../../projects/formy/src/lib/model/model.ts","../../../projects/formy/src/lib/formy-input/formy-input.component.ts","../../../projects/formy/src/lib/formy-input/formy-input.component.html","../../../projects/formy/src/lib/formy.component.ts","../../../projects/formy/src/lib/formy.component.html","../../../projects/formy/src/lib/editor/editor.component.ts","../../../projects/formy/src/lib/editor/editor.component.html","../../../projects/formy/src/lib/sumary/sumary.component.ts","../../../projects/formy/src/lib/sumary/sumary.component.html","../../../projects/formy/src/lib/formy.module.ts","../../../projects/formy/src/public_api.ts","../../../projects/formy/src/konum-formy.ts"],"sourcesContent":["export function rutClean(value: string) {\n    if (typeof value === 'string') {\n      return value\n        .replace(/[^0-9kK]+/g, '')\n        .replace(/^0+/, '')\n        .toUpperCase();\n    }\n    return '';\n  }\n  \n  export function rutValidate(value: string) {\n    if (typeof value !== 'string') {\n      return false;\n    }\n    if (value.includes('.')){\n      return false;\n    }\n    if (!value.includes('-')){\n      return false;\n    }\n    \n    const rut: string = rutClean(value);\n    let rutDigits: number = parseInt(rut.slice(0, -1), 10);\n    let m: number = 0;\n    let s: number = 1;\n  \n    while (rutDigits > 0) {\n      s = (s + rutDigits % 10 * (9 - m++ % 6)) % 11;\n      rutDigits = Math.floor(rutDigits / 10);\n    }\n    const checkDigit: string = (s > 0) ? String((s - 1)) : 'K';\n  \n    return (checkDigit === rut.slice(-1));\n  }\n  \n  export function rutFormat(value: string) {\n    const rut: string = rutClean(value);\n  \n    if (rut.length <= 1) {\n      return rut;\n    }\n  \n    let result: string = `${rut.slice(-4, -1)}-${rut.substr(rut.length - 1)}`;\n    for (let i: number = 4; i < rut.length; i += 3) {\n      result = `${rut.slice(-3 - i, -i)}.${result}`;\n    }\n  \n    return result;\n  }","import { Directive } from '@angular/core';\nimport { NG_VALIDATORS, ValidatorFn, AbstractControl, FormControlDirective, FormControl, Validator, FormGroup, ValidationErrors } from '@angular/forms';\nimport { rutValidate } from './rut-helper';\n\n@Directive({\n  selector: '[runDvValidator]',\n  providers: [\n    { provide: NG_VALIDATORS, useExisting: RunDvValidatorDirective, multi: true }\n  ]\n})\nexport class RunDvValidatorDirective implements Validator {\n\n  constructor() {\n  }\n\n  validate(c: FormControl) {\n    return runDvValidator(c);\n  }\n}\n\n\n\n  export const runDvValidator: ValidatorFn = (control: FormGroup): ValidationErrors | null => {\n    let run:string = control.get('run').value;\n    const dv:string = control.get('dv').value;\n    if (!run || !dv){\n      return null;\n    }\n    if (!rutValidate(`${run}-${dv}`)){\n      return { 'runDvValidator': { value: control.value } }\n    }\n    return null;\n  };\n\n\n","import { Directive } from '@angular/core';\nimport { NG_VALIDATORS, ValidatorFn, AbstractControl, FormControlDirective, FormControl, Validator, ValidationErrors } from '@angular/forms';\nimport { rutValidate } from './rut-helper';\n\n@Directive({\n  selector: '[rutValidator][ngModel]',\n  providers: [\n    { provide: NG_VALIDATORS, useExisting: RutValidatorDirective, multi: true }\n  ]\n})\nexport class RutValidatorDirective implements Validator {\n\n  validator: ValidatorFn;\n  constructor() {\n    \n  }\n\n  validate(c: FormControl) {\n    return rutValidator(c);\n  }\n}\n\nexport function rutValidator(control: AbstractControl): ValidationErrors | null{\n    let val: string = control.value;\n    if (!rutValidate(val)){\n      return { 'rutValidator': { value: control.value } }\n    }\n    return null;\n}\n\n","import { Injectable } from '@angular/core';\nimport { FormyInputBase } from './model/model';\nimport { FormControl, Validators, FormGroup, FormArray } from '@angular/forms';\nimport { RunDvValidatorDirective, runDvValidator } from './validators/runDv-validator.directive';\nimport { rutValidator } from './validators/rut-validator.directive';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FormyService {\n\n  constructor() { }\n\n  toFormGroup(questions: FormyInputBase<string>[]) {\n    let group: any = {};\n\n    questions.forEach(question => {\n      const validators = [];\n      if (!!question.min) {\n        validators.push(Validators.min(question.min));\n      }\n      if (!!question.max) {\n        validators.push(Validators.max(question.max));\n      }\n      if (question.required) {\n        if (question.controlType === 'checkbox')\n          validators.push(Validators.requiredTrue);\n        else\n          validators.push(Validators.required);\n      }\n      if (question.controlType === 'rut') {\n        validators.push(rutValidator);\n      }\n      if (question.controlType === 'email') {\n        validators.push(Validators.email);\n      }\n      if (question.controlType !== 'multiple') {\n        group[question.key] = new FormControl(question.value || '', validators);\n      } else {\n        /* const arra = [];\n        question.options.forEach((opt,index) => {\n          arra.push(new FormControl(opt.value || ''));\n        }); */\n        group[question.key] = new FormArray([], validators);\n      }\n    });\n    const form = new FormGroup(group);\n    if (!!group['run'] && !!group['dv']) {\n      form.setValidators([runDvValidator]);\n    }\n    return form;\n  }\n}\n","export class FormyInputBase<T> {\n  value: T;\n  key: string;\n  label: string;\n  required: boolean;\n  order: number;\n  controlType: string;\n  type: string;\n  pattern?: string;\n  options: {key: string, value: any}[];\n  condition?:string;\n  selected?:boolean;\n  indexable?:boolean;\n  text?:string;\n  placeholder?:string;\n  multiple?:string;\n  min?:number;\n  max?:number;\n  error?:boolean;\n  url?:string;\n  constructor(options: {\n      value?: T,\n      key?: string,\n      label?: string,\n      required?: boolean,\n      order?: number,\n      controlType?: string,\n      type?: string,\n      pattern?:string,\n      condition?:string\n    } = {}) {\n    this.value = options.value;\n    this.key = options.key || '';\n    this.label = options.label || '';\n    this.required = !!options.required;\n    this.order = options.order === undefined ? 1 : options.order;\n    this.controlType = options.controlType || '';\n    this.pattern = options.pattern || '';\n    this.condition = options.condition || ''\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { FormGroup, FormArray, FormControl } from '@angular/forms';\nimport { FormyInputBase } from '../model/model';\n\n\n@Component({\n  selector: 'app-formy-input',\n  templateUrl: './formy-input.component.html',\n  styleUrls: ['./formy-input.component.css']\n})\nexport class FormyInputComponent {\n  @Input() question: FormyInputBase<string>;\n  @Input() form: FormGroup;\n  scale: number[] = [];\n  options: any;\n\n  ngOnInit() {\n    if (this.question.controlType === 'multiple') {\n      this.options = this.question.options.map(p => {\n        return { name: p.key, value: !!p.value ? p.value : false };\n      });\n    }\n  }\n\n  onCheckboxChange(name, e) {\n    const checkArray: FormArray = this.form.get(this.question.key) as FormArray;\n    checkArray.markAsTouched();\n    checkArray.markAsDirty();\n    if (e.target.checked) {\n      let control : any = new FormControl(e.target.value);\n      control.name = name;\n      checkArray.push(control);\n    } else {\n      let i: number = 0;\n      checkArray.controls.forEach((item: any) => {\n        if (item.name === name) {\n          checkArray.removeAt(i);\n        }\n        i++;\n      });\n    }\n    this.form.updateValueAndValidity({emitEvent:true});\n  }\n\n  get isValid() { return this.form.controls[this.question.key].valid; }\n\n  numbers() {\n    this.scale = [];\n    if (!!this.question && this.question.controlType === 'scale') {\n      const size = this.question.max - this.question.min;\n      for (let index = 0; index <= size; index++) {\n        this.scale[index] = index + this.question.min;\n      }\n    }\n    return this.scale;\n  }\n}\n","<div [formGroup]=\"form\" style=\"margin-top: 10px\">\n\n  <div [ngSwitch]=\"question.controlType\" class=\"form-group\">\n\n    <label [attr.for]=\"question.key\"\n      [ngClass]=\"{'is-invalid': !!form.controls[question.key] && form.controls[question.key].errors && form.controls[question.key].touched}\"\n      *ngIf=\"question.controlType !== 'separator' && question.controlType !== 'checkbox' && question.controlType !== 'image'\">{{question.label + (question.required?'*':'')}}</label>\n\n    <input *ngSwitchCase=\"'textbox'\" [formControlName]=\"question.key\" [id]=\"question.key\" [type]=\"question.type\"\n      [ngClass]=\"{'is-invalid': !!form.controls[question.key] && form.controls[question.key].errors && form.controls[question.key].touched}\"\n      [pattern]=\"question.pattern\" style=\"width: 100%\" class=\"form-control\">\n\n    <input *ngSwitchCase=\"'rut'\" [formControlName]=\"question.key\" [id]=\"question.key\" [type]=\"question.type\"\n      [ngClass]=\"{'is-invalid': !!form.controls[question.key] && form.controls[question.key].errors && form.controls[question.key].touched}\"\n      style=\"width: 100%\" class=\"form-control\">\n\n    <input *ngSwitchCase=\"'email'\" [formControlName]=\"question.key\" [id]=\"question.key\" [type]=\"question.type\"\n      [ngClass]=\"{'is-invalid': !!form.controls[question.key] && form.controls[question.key].errors && form.controls[question.key].touched}\"\n      style=\"width: 100%\" class=\"form-control\">\n\n    <input *ngSwitchCase=\"'number'\" [formControlName]=\"question.key\" [id]=\"question.key\" [type]=\"'number'\"\n      [ngClass]=\"{'is-invalid': !!form.controls[question.key] && form.controls[question.key].errors && form.controls[question.key].touched}\"\n      [min]=\"question.min\" [max]=\"question.max\" style=\"width: 100%\" class=\"form-control\">\n\n    <input *ngSwitchCase=\"'date'\" [formControlName]=\"question.key\" [id]=\"question.key\" [type]=\"'date'\"\n      [ngClass]=\"{'is-invalid': !!form.controls[question.key] && form.controls[question.key].errors && form.controls[question.key].touched}\"\n      style=\"width: 100%\" class=\"form-control\">\n\n    <input *ngSwitchCase=\"'time'\" [formControlName]=\"question.key\" [id]=\"question.key\" [type]=\"'time'\"\n      [ngClass]=\"{'is-invalid': !!form.controls[question.key] && form.controls[question.key].errors && form.controls[question.key].touched}\"\n      style=\"width: 100%\" class=\"form-control\">\n\n\n    <textarea *ngSwitchCase=\"'textboxarea'\" [formControlName]=\"question.key\" [id]=\"question.key\" style=\"width: 100%\"\n      [ngClass]=\"{'is-invalid': !!form.controls[question.key] && form.controls[question.key].errors && form.controls[question.key].touched}\"\n      rows=\"4\" class=\"form-control\"> </textarea>\n\n    <select [id]=\"question.key\" *ngSwitchCase=\"'dropdown'\" [formControlName]=\"question.key\" style=\"width: 100%\"\n      class=\"custom-select\"\n      [ngClass]=\"{'is-invalid': !!form.controls[question.key] && form.controls[question.key].errors && form.controls[question.key].touched}\">\n      <option *ngFor=\"let opt of question.options\" [value]=\"opt.key\">{{opt.key}}</option>\n    </select>\n  \n    <img *ngSwitchCase=\"'image'\" [src]=\"question.url\" style=\"width: 100%\">\n\n    <div *ngSwitchCase=\"'scale'\">\n      <div class=\"custom-control custom-radio custom-control-inline\" *ngFor=\"let num of numbers()\">\n        <input type=\"radio\" value=\"{{num}}\" id=\"{{question.key + num}}\" [formControlName]=\"question.key\"\n          class=\"custom-control-input\">\n        <label class=\"custom-control-label\" for=\"{{question.key + num}}\">{{num}}</label>\n      </div>\n    </div>\n\n\n    <div *ngSwitchCase=\"'multiple'\">\n      <div *ngFor=\"let data of options; let i=index\"  class=\"custom-control custom-checkbox\" >\n        <input  [id]=\"question.key+i\" type=\"checkbox\" class=\"custom-control-input\"  [checked]=\"data.value\" (change)=\"onCheckboxChange(data.name,$event)\" />\n        <label [attr.for]=\"question.key+i\" class=\"custom-control-label\">\n          {{data.name}}\n        </label>\n      </div>\n    </div>\n\n    <div *ngSwitchCase=\"'separator'\" style=\"margin-top: 10px; font-size: 16px\">\n      <span style=\"font-weight: bold\">{{question.label}}</span>\n    </div>\n\n    <div *ngSwitchCase=\"'text'\">\n      <span>{{question.text}}</span>\n    </div>\n\n    <small id=\"helpHelp\" class=\"form-text text-muted\" *ngIf=\"!!question.placeholder\">{{question.placeholder}}</small>\n  </div>\n\n\n  <div class=\"custom-control custom-checkbox\" *ngIf=\"question.controlType === 'checkbox'\">\n    <input [formControlName]=\"question.key\" [id]=\"question.key\" type=\"checkbox\" class=\"custom-control-input\" \n    [ngClass]=\"{'is-invalid': !!form.controls[question.key] && form.controls[question.key].errors && form.controls[question.key].touched}\">\n    <label [attr.for]=\"question.key\" class=\"custom-control-label\">{{question.label + (question.required?'*':'')}}</label>\n  </div>\n\n\n  <div\n    *ngIf=\"!!form.controls[question.key] && form.controls[question.key].errors && form.controls[question.key].touched\"\n    class=\"error\">\n    <div [hidden]=\"!form.controls[question.key].errors.required\">{{question.label}} requerido</div>\n    <div [hidden]=\"!form.controls[question.key].errors.pattern\">{{question.label}} incorrecto</div>\n    <div [hidden]=\"!form.controls[question.key].errors.min\">Valor mínimo {{question.min}}</div>\n    <div [hidden]=\"!form.controls[question.key].errors.max\">Valor máximo {{question.max}}</div>\n    <div [hidden]=\"!form.controls[question.key].errors.rutValidator\">Rut inválido</div>\n    <div [hidden]=\"!form.controls[question.key].errors.email\">Correo inválido</div>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { FormArray, FormGroup, Validators } from '@angular/forms';\nimport { FormyService } from './formy.service';\nimport { FormyInputBase } from './model/model';\n\n@Component({\n  selector: 'lib-formy',\n  templateUrl: './formy.component.html',\n  styleUrls: ['./formy.component.css']\n})\nexport class FormyComponent implements OnInit, OnChanges {\n\n  @Input() questions: FormyInputBase<string>[];\n  @Input() questionsJson: string;\n  @Input() disabled = false;\n  @Output() onChange: EventEmitter<any> = new EventEmitter();\n  form: FormGroup;\n  payLoad = '';\n\n  constructor(private qcs: FormyService) { }\n\n  ngOnInit() {\n    if (!this.questions && !this.questionsJson) {\n      return;\n    }\n    if (!!this.questions && !!this.questionsJson){\n      console.log('Only questions input is used.')\n    }\n    if (!this.questions && !!this.questionsJson){\n      this.questions = JSON.parse(this.questionsJson);\n    }\n    this.form = this.qcs.toFormGroup(this.questions);\n    if (this.disabled) {\n      this.form.disable();\n    }\n    this.form.valueChanges.subscribe(val => {\n      if (this.form.valid) {\n        this.questions.forEach(p => {\n          if (p.controlType === 'multiple'){\n            const checkArray: FormArray = this.form.get(p.key) as FormArray;\n            for (let index = 0; index < p.options.length; index++) {\n              let option = checkArray.controls.filter((c: any)=>c.name === p.options[index].key)[0];\n              p.options[index].value = !!option;\n            }\n          }else{\n            p.value = this.form.controls[p.key].value;\n          }\n        });\n        this.onChange.emit(this.questions);\n      } else {\n        this.onChange.emit(undefined);\n      }\n    });\n  }\n\n  checkForm(){\n    this.form.markAllAsTouched();\n    return this.form.valid;\n  }\n  checkFormAndEmit(){\n    this.form.markAllAsTouched();\n    if (this.form.valid){\n      this.onChange.emit(this.questions);\n    } else {\n      this.onChange.emit(undefined);\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (!!this.questions) {\n      this.form = this.qcs.toFormGroup(this.questions);\n    }\n  }\n\n  checkCondition(question: FormyInputBase<any>) {\n    if (!question.condition) {\n      return true;\n    }\n    const key = question.condition.split('=')[0];\n    const value = question.condition.split('=')[1];\n    if (!this.form.controls[key]) {\n      return true;\n    }\n    const meetCondition = `${this.form.controls[key].value}` === value;\n    if (!meetCondition) {\n      this.form.controls[question.key].setValidators(null);\n      this.form.controls[question.key].updateValueAndValidity();\n      return false;\n    } else {\n      if (question.required) {\n        this.form.controls[question.key].setValidators(Validators.required);\n        this.form.controls[question.key].updateValueAndValidity();\n      }\n      return true;\n    }\n  }\n  onSubmit() {\n    this.payLoad = JSON.stringify(this.form.getRawValue());\n  }\n\n}\n","<div *ngIf=\"questions\" class=\"questions\">\n  <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\n\n    <div *ngFor=\"let question of questions\" style=\"width: 100%\">\n      <app-formy-input [question]=\"question\" [form]=\"form\" *ngIf=\"checkCondition(question)\"></app-formy-input>\n    </div>\n\n\n    <div *ngIf=\"!!form.errors\"  class=\"alert alert-warning\">\n      <div *ngIf=\"form.errors?.runDvValidator && (form.touched || form.dirty)\">\n        El RUN y el DV no son válidos.\n      </div>\n    </div>\n  </form>\n</div>\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormyComponent } from '../formy.component';\nimport { FormyInputBase } from '../model/model';\n@Component({\n  selector: 'lib-formy-editor',\n  templateUrl: './editor.component.html',\n  styleUrls: ['./editor.component.css']\n})\nexport class FormyEditorComponent implements OnInit {\n  @Input() questions: FormyInputBase<any>[];\n  @Input() questionsJson: string;\n  @Input() extended = true;\n  @Input() debug = false;\n  @Input() disabledTypes: string[] = [];\n  @Output() onSave: EventEmitter<any> = new EventEmitter();\n  @Output() questionsChange: EventEmitter<FormyInputBase<any>[]> = new EventEmitter();\n  @ViewChild(\"formy\", { static: false }) formy: FormyComponent;\n  title = 'test-forms';\n  testQuestions: FormyInputBase<any>[];\n  selectedQuestion: FormyInputBase<any>;\n  errors: Map<string, FormyInputBase<any>> = new Map();\n  editMode = true;\n  showValid = false;\n  testValid = true;\n  regexHelp = false;\n  exportJson=false;\n  importJson=false;\n  copiado=false;\n  jsonInvalido=false;\n  jsonToImport='';\n  types = [\n    {\n      value: 'dropdown',\n      label: 'Opciones'\n    },\n    {\n      value: 'checkbox',\n      label: 'Checkbox'\n    },\n    {\n      value: 'textbox',\n      label: 'Texto corto'\n    },\n    {\n      value: 'textboxarea',\n      label: 'Texto largo'\n    }, {\n      value: 'number',\n      label: 'Número'\n    },\n    {\n      value: 'date',\n      label: 'Fecha'\n    },\n    {\n      value: 'time',\n      label: 'Hora'\n    },\n    {\n      value: 'scale',\n      label: 'Escala'\n    },\n    {\n      value: 'multiple',\n      label: 'Selección múltiple'\n    },\n    {\n      value: 'separator',\n      label: 'Separador'\n    },\n    {\n      value: 'text',\n      label: 'Instrucciones'\n    },\n    {\n      value: 'rut',\n      label: 'Rut'\n    },\n    {\n      value: 'email',\n      label: 'Email'\n    },\n    {\n      value: 'image',\n      label: 'Imágen externa'\n    }\n  ]\n  ngOnInit() {\n    if (!this.questions && !!this.questionsJson) {\n      this.questions = JSON.parse(this.questionsJson);\n    } else if (!this.questions) {\n      this.questions = [];\n    }\n    this.disabledTypes.forEach(p=>{\n      this.types = this.types.filter(type=>type.value !== p);\n    });\n    /*     setInterval(() => {\n          this.questionsChange.emit(this.questions);\n        }, 1000) */\n  }\n\n  validateForm(): boolean {\n    return this.validateQuestions(this.questions);\n  }\n\n  validateQuestions(questions:FormyInputBase<any>[]): boolean {\n    this.errors.clear();\n    this.checkQuestions(questions);\n    questions.forEach(question => {\n      if (!question.key) {\n        question.error = true;\n        this.errors.set(`La clave es obligatoria`, question);\n        return;\n      } if (!question.label) {\n        question.error = true;\n        this.errors.set(`${question.key} le falta etiqueta.`, question);\n        return;\n      }\n      if (!question.controlType) {\n        question.error = true;\n        this.errors.set(`${question.key} el tipo es obligatorio.`, question);\n      }\n      if (this.questions.filter(p => p.key === question.key).length > 1) {\n        question.error = true;\n        this.errors.set(`Clave ${question.key} duplicada`, question);\n      }\n      if (!!question.condition) {\n        const key = question.condition.split('=')[0];\n        const value = question.condition.split('=')[1];\n        if (this.questions.filter(p => p.key === key).length != 1) {\n          question.error = true;\n          this.errors.set(`Falta el componente ${key}  de la condición \"${question.condition}\".`, question);\n        }\n        if (!value) {\n          question.error = true;\n          this.errors.set(`Falta un valor a la condición \"${question.condition}\"`, question);\n        }\n      }\n\n      if (question.controlType === 'dropdown' && (!question.options || question.options.length === 0)) {\n        question.error = true;\n        this.errors.set(`Faltan opciones en el componentente ${question.key}`, question);\n      }\n\n      if (!!question.pattern) {\n        try {\n          let regex = new RegExp(question.pattern);\n        } catch (error) {\n          question.error = true;\n          this.errors.set(`El patrón de ${question.key} es inválido.`, question);\n        }\n      }\n    });\n    this.showValid = this.errors.size === 0;\n    return this.errors.size === 0;\n  }\n\n  clearValues() {\n    this.questions.forEach(p => {\n      p.value = undefined;\n      if (!!p.options) {\n        p.options.forEach(opt => {\n          if (!!opt.key) {\n            opt.value = false;\n          }\n        });\n      }\n    });\n  }\n\n  checkQuestions(questions) {\n    questions.forEach(question => {\n      question.value = '';\n      switch (question.controlType) {\n        case 'checkbox':\n          question.pattern = '';\n          question.min = undefined;\n          question.max = undefined;\n          break;\n        case 'dropdown':\n          question.options.forEach(opt => {\n            if (!!opt.value) {\n              opt.key = opt.value;\n            } else {\n              this.removeOption(question, undefined);\n            }\n          });\n          question.pattern = '';\n          question.min = undefined;\n          question.max = undefined;\n          break;\n        case 'multiple':\n          question.options.forEach(opt => {\n            if (!!opt.key) {\n              opt.value = false;\n            } else {\n              this.removeOption(question, '');\n            }\n          });\n\n          question.pattern = '';\n          question.min = undefined;\n          question.max = undefined;\n          break;\n        case 'separator':\n          question.required = false;\n          question.pattern = '';\n          break;\n        case 'text':\n          question.required = false;\n          question.pattern = '';\n          break;\n        case 'textbox':\n          question.min = undefined;\n          question.max = undefined;\n          break;\n        case 'textboxarea':\n          question.min = undefined;\n          question.max = undefined;\n          break;\n        case 'rut':\n          question.pattern = '';\n          question.min = undefined;\n          question.max = undefined;\n          question.placeholder = 'Sin puntos y con guión'\n          break;\n\n        default:\n          break;\n      }\n    });\n  }\n\n  upQuestion(question) {\n    this.questions[question.order - 1].order = question.order\n    question.order--;\n    this.questions.sort((a, b) => a.order < b.order ? -1 : 1);\n  }\n\n  downQuestion(question) {\n    this.questions[question.order + 1].order = question.order\n    question.order++;\n    this.questions.sort((a, b) => a.order < b.order ? -1 : 1);\n  }\n\n\n  save() {\n    if (this.validateForm()) {\n      this.onSave.emit(this.questions);\n    }\n  }\n\n  select(question) {\n    this.questions.forEach(element => {\n      element.selected = false;\n    });\n    question.selected = true;\n    question.error = false;\n    this.regexHelp = false;\n  }\n\n  test() {\n    if (this.validateForm()) {\n      this.testQuestions = this.questions.slice(0);\n      this.editMode = false;\n    }\n  }\n\n  validar() {\n    this.testValid = this.formy.checkForm();\n  }\n\n\n  addQuestion() {\n    const question = new FormyInputBase({ key: `input-${this.questions.length}`, controlType: 'textbox' });\n    question.order = this.questions.length;\n    this.select(question);\n    this.questions.push(question);\n    this.questions = this.questions.slice(0);\n    setTimeout(function () {\n      document.querySelector('#bottom').scrollIntoView({ behavior: 'smooth', block: 'center' });\n    }, 200);\n  }\n\n  goToQuestion(question) {\n    this.select(question);\n    setTimeout(function () {\n      document.querySelector(`#question-${question.order}`).scrollIntoView({ behavior: 'smooth', block: 'center' });\n    }, 200);\n  }\n\n  removeQuestion(question) {\n    if (confirm(`¿Eliminar pregunta ${question.label}?`)) {\n      this.questions = this.questions.filter(p => p.key !== question.key);\n    }\n  }\n\n  addOption(question: FormyInputBase<any>) {\n    !question.options ? question.options = [] : '';\n    question.options.push({ key: undefined, value: undefined });\n  }\n\n  removeOption(question: FormyInputBase<any>, key) {\n    question.options = question.options.filter(p => p.key != key);\n  }\n\n\n  importar(){\n    let questions;\n    try{\n    questions = JSON.parse(this.jsonToImport);\n    }catch(error){\n      this.jsonInvalido=true;\n      return;\n    }\n    this.jsonInvalido=false;\n    if (this.validateQuestions(questions)) {\n      this.questions = questions;\n      this.editMode = true;\n      this.importJson = false;\n    }\n  }\n\n  copyJson(){\n    navigator.clipboard.writeText(JSON.stringify(this.questions)).catch(() => {\n      console.error(\"Unable to copy text\");\n    });\n    this.copiado=true;\n  }\n  asJson() {\n    return JSON.stringify(this.questions);\n  }\n}\n","<div class=\"editor form-group toolbar\">\n  <button (click)=\"addQuestion()\" *ngIf=\"editMode && !importJson && !exportJson\" class=\"btn btn-info\">Agregar\n    <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" class=\"bi bi-plus-circle\" fill=\"currentColor\"\n      xmlns=\"http://www.w3.org/2000/svg\">\n      <path fill-rule=\"evenodd\" d=\"M8 3.5a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5H4a.5.5 0 0 1 0-1h3.5V4a.5.5 0 0 1 .5-.5z\" />\n      <path fill-rule=\"evenodd\" d=\"M7.5 8a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 0 1H8.5V12a.5.5 0 0 1-1 0V8z\" />\n      <path fill-rule=\"evenodd\" d=\"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z\" />\n    </svg></button>\n  <button (click)=\"test()\" *ngIf=\"editMode  && !importJson && !exportJson\" class=\"btn btn-info\" style=\"margin-left: 5px\">Probar\n    <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" class=\"bi bi-play\" fill=\"currentColor\"\n      xmlns=\"http://www.w3.org/2000/svg\">\n      <path fill-rule=\"evenodd\"\n        d=\"M10.804 8L5 4.633v6.734L10.804 8zm.792-.696a.802.802 0 0 1 0 1.392l-6.363 3.692C4.713 12.69 4 12.345 4 11.692V4.308c0-.653.713-.998 1.233-.696l6.363 3.692z\" />\n    </svg>\n  </button>\n  <button (click)=\"validateForm()\" *ngIf=\"editMode  && !importJson && !exportJson\" class=\"btn btn-info\" style=\"margin-left: 5px\">Validar\n    <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" class=\"bi bi-exclamation-triangle\" fill=\"currentColor\"\n      xmlns=\"http://www.w3.org/2000/svg\">\n      <path fill-rule=\"evenodd\"\n        d=\"M7.938 2.016a.146.146 0 0 0-.054.057L1.027 13.74a.176.176 0 0 0-.002.183c.016.03.037.05.054.06.015.01.034.017.066.017h13.713a.12.12 0 0 0 .066-.017.163.163 0 0 0 .055-.06.176.176 0 0 0-.003-.183L8.12 2.073a.146.146 0 0 0-.054-.057A.13.13 0 0 0 8.002 2a.13.13 0 0 0-.064.016zm1.044-.45a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566z\" />\n      <path\n        d=\"M7.002 12a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 5.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995z\" />\n    </svg></button>\n  <button (click)=\"save()\" *ngIf=\"editMode  && !importJson && !exportJson\" class=\"btn btn-info\" style=\"margin-left: 5px\">Guardar\n    <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" class=\"bi bi-file-check\" fill=\"currentColor\"\n      xmlns=\"http://www.w3.org/2000/svg\">\n      <path fill-rule=\"evenodd\"\n        d=\"M10.854 6.146a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 1 1 .708-.708L7.5 8.793l2.646-2.647a.5.5 0 0 1 .708 0z\" />\n      <path fill-rule=\"evenodd\"\n        d=\"M4 1h8a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2zm0 1a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H4z\" />\n    </svg>\n  </button>\n  <button (click)=\"editMode = true; clearValues()\" *ngIf=\"!editMode\" class=\"btn btn-info\">Editar\n    <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" class=\"bi bi-pencil-square\" fill=\"currentColor\"\n      xmlns=\"http://www.w3.org/2000/svg\">\n      <path\n        d=\"M15.502 1.94a.5.5 0 0 1 0 .706L14.459 3.69l-2-2L13.502.646a.5.5 0 0 1 .707 0l1.293 1.293zm-1.75 2.456l-2-2L4.939 9.21a.5.5 0 0 0-.121.196l-.805 2.414a.25.25 0 0 0 .316.316l2.414-.805a.5.5 0 0 0 .196-.12l6.813-6.814z\" />\n      <path fill-rule=\"evenodd\"\n        d=\"M1 13.5A1.5 1.5 0 0 0 2.5 15h11a1.5 1.5 0 0 0 1.5-1.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 1-.5.5h-11a.5.5 0 0 1-.5-.5v-11a.5.5 0 0 1 .5-.5H9a.5.5 0 0 0 0-1H2.5A1.5 1.5 0 0 0 1 2.5v11z\" />\n    </svg></button>\n  <button (click)=\"extended = true;\" *ngIf=\"editMode && !extended  && !importJson && !exportJson\" class=\"btn btn-info\"\n    style=\"margin-left: 5px\">Avanzado\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-gear\"\n      viewBox=\"0 0 16 16\">\n      <path\n        d=\"M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492zM5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0z\" />\n      <path\n        d=\"M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52l-.094-.319zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115l.094-.319z\" />\n    </svg>\n  </button>\n  <button (click)=\"extended = false;\" *ngIf=\"editMode && extended  && !importJson && !exportJson\" class=\"btn btn-info\" style=\"margin-left: 5px\">Básico\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-dash-square\"\n      viewBox=\"0 0 16 16\">\n      <path\n        d=\"M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z\" />\n      <path d=\"M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z\" />\n    </svg>\n  </button>\n  <button (click)=\"exportJson = true;copiado=false;importJson=false\" *ngIf=\"editMode && !importJson && !exportJson\"  class=\"btn btn-info\" style=\"margin-left: 5px\">Exportar\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\"  viewBox=\"0 0 576 512\">\n      <path d=\"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384V288H216c-13.3 0-24 10.7-24 24s10.7 24 24 24H384V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM384 336V288H494.1l-39-39c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l80 80c9.4 9.4 9.4 24.6 0 33.9l-80 80c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l39-39H384zm0-208H256V0L384 128z\"/></svg>\n  </button>\n  <button (click)=\"importJson = true;exportJson=false;\" *ngIf=\"editMode && !exportJson && !importJson\"  class=\"btn btn-info\" style=\"margin-left: 5px\">Importar\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 512 512\">\n      <path d=\"M128 64c0-35.3 28.7-64 64-64H352V128c0 17.7 14.3 32 32 32H512V448c0 35.3-28.7 64-64 64H192c-35.3 0-64-28.7-64-64V336H302.1l-39 39c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l39 39H128V64zm0 224v48H24c-13.3 0-24-10.7-24-24s10.7-24 24-24H128zM512 128H384V0L512 128z\"/></svg>\n  </button>\n  <button (click)=\"exportJson = false;importJson=false;\" *ngIf=\"exportJson || importJson\" class=\"btn btn-info\" style=\"margin-left: 5px\">Cerrar\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 512 512\">\n      <path d=\"M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z\"/></svg>\n  </button>\n  <!-- <button *ngIf=\"!editMode\" class=\"btn btn-info\" (click)=\"validar()\">Validar\n     </button> -->\n</div>\n<div class=\"editor form-group\" *ngIf=\"editMode && !importJson && !exportJson\">\n  <div class=\"alert alert-warning\" *ngIf=\"errors.size > 0\">\n    <div *ngFor=\"let error of errors  | keyvalue\" (click)=\"goToQuestion(error.value)\" class=\"error\">{{error.key}}</div>\n  </div>\n  <div class=\"alert alert-success\" *ngIf=\"showValid\">\n    Formulario válido.\n  </div>\n  <div *ngFor=\"let question of questions\" class=\"question\"  id=\"question-{{question.order}}\"\n    [ngClass]=\"{'selected': question.selected,'question-error': question.error}\">\n\n    <div *ngIf=\"question.selected\">\n      <div class=\"header\">\n        <div class=\"type form-group\">\n          <label for=\"help\">Tipo</label>\n          <select required style=\"width: 100%\" [(ngModel)]=\"question.controlType\" class=\"custom-select\">\n            <option value=\"{{type.value}}\" *ngFor=\"let type of types\">{{type.label}}</option>\n          \n          </select>\n        </div>\n      </div>\n      <div class=\"label\">\n        <div class=\"form-group\">\n          <label for=\"help\">Etiqueta</label>\n          <input required [(ngModel)]=\"question.label\" type=\"text\" style=\"width: 90%\" class=\"form-control\">\n        </div>\n      </div>\n      <div *ngIf=\"question.controlType === 'text'\" class=\"component\">\n        <textarea required [(ngModel)]=\"question.text\" rows=\"4\" style=\"width: 99%\" placeholder=\"Instrucciones\"\n          class=\"form-control\"></textarea>\n      </div>\n\n      <div *ngIf=\"question.controlType === 'scale' || question.controlType === 'number'\" class=\"options\">\n        <div class=\"form-group\">\n          <label for=\"help\">Mínimo</label>\n          <input [(ngModel)]=\"question.min\" type=\"number\" style=\"width: 100%\" class=\"form-control\" id=\"min\">\n        </div>\n        <div class=\"form-group\">\n          <label for=\"help\">Máximo</label>\n          <input [(ngModel)]=\"question.max\" type=\"number\" style=\"width: 100%\" class=\"form-control\" id=\"max\">\n        </div>\n      </div>\n      <div *ngIf=\"question.controlType === 'image'\" class=\"component\">\n        <div class=\"form-group\">\n          <label for=\"help\">URL</label>\n        <input required [(ngModel)]=\"question.url\" type=\"text\" style=\"width: 90%\" class=\"form-control\">\n        </div>\n      </div>\n      <div *ngIf=\"question.controlType === 'dropdown' || question.controlType === 'multiple'\" class=\"options\">\n        <span>Opciones</span>\n\n        <ul class=\"list-group\">\n          <li class=\"list-group-item\" *ngFor=\"let opt of question.options\">\n\n            <input type=\"text\" required [(ngModel)]=\"opt.key\" class=\"form-control\"\n              style=\"width: 200px;display: inline;\">\n            <button (click)=\"removeOption(question, opt.key)\" class=\"btn btn-danger\">Eliminar</button>\n          </li>\n        </ul>\n        <div>\n          <button (click)=\"addOption(question)\" class=\"btn btn-primary\">Agregar</button>\n        </div>\n      </div>\n      <div class=\"properties\" *ngIf=\"question.controlType != 'separator' &&  question.controlType != 'text' && question.controlType !== 'image' \">\n\n        <div class=\"form-group\" *ngIf=\"extended\">\n          <label for=\"help\">Ayuda</label>\n          <input [(ngModel)]=\"question.placeholder\" type=\"text\" style=\"width: 100%\" class=\"form-control\" id=\"help\"\n            aria-describedby=\"helpHelp\">\n          <small id=\"helpHelp\" class=\"form-text text-muted\">Se mostrará una ayuda como esta.</small>\n        </div>\n        <div class=\"form-group\" *ngIf=\"extended\">\n          <label for=\"help\">Clave</label>\n          <input required [(ngModel)]=\"question.key\" type=\"text\" class=\"form-control\" id=\"key\"\n            aria-describedby=\"keyHelp\">\n          <small id=\"keyHelp\" class=\"form-text text-muted\">Debe ser único en el formulario.</small>\n        </div>\n        <div *ngIf=\"question.controlType === 'rut'\" class=\"form-group\">\n          <label for=\"help\">Sin puntos y con guión.</label>\n        </div>\n        <div *ngIf=\"question.controlType === 'textbox' && extended\" class=\"form-group\">\n          <label for=\"help\">Patrón</label>\n          <input [(ngModel)]=\"question.pattern\" type=\"text\" class=\"form-control\" id=\"pattern\"\n            aria-describedby=\"patternHelp\">\n          <small id=\"patternHelp\" class=\"form-text text-muted\">Expresión regular para validar el campo.</small>\n          <button (click)=\"regexHelp=true\" *ngIf=\"!regexHelp\" class=\"btn btn-info\">Ayuda\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\"\n              class=\"bi bi-question-circle\" viewBox=\"0 0 16 16\">\n              <path d=\"M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z\" />\n              <path\n                d=\"M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286zm1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94z\" />\n            </svg>\n          </button>\n          <button (click)=\"regexHelp=false\" *ngIf=\"regexHelp\" class=\"btn btn-info\">Ocultar\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-x\"\n              viewBox=\"0 0 16 16\">\n              <path\n                d=\"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z\" />\n            </svg>\n          </button>\n          <div *ngIf=\"regexHelp\">\n            <a (click)=\"question.pattern='[0-9]{6}'\" class=\"regexHelp\">6 digitos: 217281</a><br>\n            <a (click)=\"question.pattern='.{10,20}'\" class=\"regexHelp\">Longitud minima de 10 y maxima de 20: Calle\n              nº10-Dpto 12 </a><br>\n            <a (click)=\"question.pattern='[aA-zZ ]{0,10}'\" class=\"regexHelp\">Hasta 10 letras con espacios: Pablo\n              Casa</a><br>\n            <a (click)=\"question.pattern='[0-9]{3}-[0-9]{3}'\" class=\"regexHelp\">Dos numeros 3 cifras separados por\n              guión: 456-123</a><br>\n            <a (click)=\"question.pattern='[aA-zZ0-9À-ÿ\\u00f1\\u00d1 ]{0,30}'\" class=\"regexHelp\">Hasta 30 letras o numeros\n              con acentos, ñ y espacio: Iñaqui Pérez 10</a><br>\n            <a (click)=\"question.pattern='[\\+]{1}[0-9]{11,12}'\" class=\"regexHelp\">Teléfono completo:\n              +56912345112</a><br>\n            <br>\n            <div><a href=\"https://regex101.com/\" target=\"_blank\"> Editor de expresiones regulares</a></div>\n          </div>\n\n        </div>\n\n        <div class=\"form-group\" *ngIf=\"extended\">\n          <label for=\"help\">Condición</label>\n          <input [(ngModel)]=\"question.condition\" type=\"text\" class=\"form-control\" id=\"condition\"\n            aria-describedby=\"conditionHelp\">\n          <small id=\"conditionHelp\" class=\"form-text text-muted\">Condición para que se muestre el campo:\n            claveComponente=valor.</small>\n        </div>\n\n        <div class=\"custom-control custom-switch\">\n          <input type=\"checkbox\" [(ngModel)]=\"question.required\" class=\"custom-control-input\" id=\"customSwitch1\">\n          <label class=\"custom-control-label\" for=\"customSwitch1\">Obligatorio</label>\n        </div>\n        <!-- <div class=\"custom-control custom-switch\">\n        <input type=\"checkbox\" [(ngModel)]=\"question.indexable\" class=\"custom-control-input\" id=\"customSwitch2\">\n        <label class=\"custom-control-label\" for=\"customSwitch2\">Indexable</label>\n       </div> -->\n      </div>\n    </div>\n    <div class=\"component\" *ngIf=\"!question.selected\" (click)=\"select(question)\">\n      <lib-formy [questions]=\"[question]\"></lib-formy>\n    </div>\n    <div *ngIf=\"question.selected\">\n      <button (click)=\"upQuestion(question)\" class=\"btn btn-info\" *ngIf=\"question.order !== 0\">Arriba\n        <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" class=\"bi bi-arrow-up\" fill=\"currentColor\"\n          xmlns=\"http://www.w3.org/2000/svg\">\n          <path fill-rule=\"evenodd\" d=\"M8 3.5a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-1 0V4a.5.5 0 0 1 .5-.5z\" />\n          <path fill-rule=\"evenodd\"\n            d=\"M7.646 2.646a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L8 3.707 5.354 6.354a.5.5 0 1 1-.708-.708l3-3z\" />\n        </svg>\n      </button>\n      <button (click)=\"downQuestion(question)\" class=\"btn btn-info\"\n        *ngIf=\"question.order !== questions.length -1 \">Abajo\n        <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" class=\"bi bi-arrow-down\" fill=\"currentColor\"\n          xmlns=\"http://www.w3.org/2000/svg\">\n          <path fill-rule=\"evenodd\"\n            d=\"M4.646 9.646a.5.5 0 0 1 .708 0L8 12.293l2.646-2.647a.5.5 0 0 1 .708.708l-3 3a.5.5 0 0 1-.708 0l-3-3a.5.5 0 0 1 0-.708z\" />\n          <path fill-rule=\"evenodd\" d=\"M8 2.5a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-1 0V3a.5.5 0 0 1 .5-.5z\" />\n        </svg>\n      </button>\n    </div>\n    <div *ngIf=\"question.selected\" style=\"text-align: right;\">\n      <button (click)=\"removeQuestion(question)\" class=\"btn btn-danger\">Eliminar\n        <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" class=\"bi bi-trash\" fill=\"currentColor\"\n          xmlns=\"http://www.w3.org/2000/svg\">\n          <path\n            d=\"M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6z\" />\n          <path fill-rule=\"evenodd\"\n            d=\"M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1zM4.118 4L4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z\" />\n        </svg>\n      </button>\n    </div>\n  </div>\n</div>\n\n<div class=\"editor\" *ngIf=\"!editMode\">\n  <div class=\"alert alert-warning\" *ngIf=\"!testValid\">\n    Formulario invalido\n  </div>\n  <div class=\"alert alert-success\" *ngIf=\"testValid\">\n    Formulario valido\n  </div>\n  <lib-formy #formy [questions]=\"testQuestions\" (onChange)=\"validar()\"></lib-formy>\n</div>\n\n<div class=\"editor\" *ngIf=\"exportJson && editMode\">\n  <div class=\"alert alert-success\" *ngIf=\"copiado\">\n    Copiado!\n  </div>\n  <button (click)=\"copyJson()\" *ngIf=\"editMode\" class=\"btn btn-info\" style=\"margin-left: 5px\">Copiar</button>\n<textarea required  rows=\"4\" style=\"width: 99%\" [value]=\"asJson()\"\nclass=\"form-control\"></textarea>\n</div>\n\n<div class=\"editor\" *ngIf=\"importJson && editMode\">\n  <div class=\"alert alert-warning\" *ngIf=\"jsonInvalido\">\n    JSON inválido\n  </div>\n  <div class=\"alert alert-warning\" *ngIf=\"errors.size > 0\">\n    <div *ngFor=\"let error of errors  | keyvalue\" class=\"error\">{{error.key}}</div>\n  </div>\n  <textarea required  rows=\"4\" style=\"width: 99%\" [(ngModel)]=\"jsonToImport\" placeholder=\"Pega aquí el JSON, y luego presiona el botón importar\"\n  class=\"form-control\"></textarea>\n  <button (click)=\"importar()\" *ngIf=\"editMode\" class=\"btn btn-info\" style=\"margin-left: 5px\">Importar</button>\n</div>\n  \n\n<div *ngIf=\"debug\">\n  {{asJson()}}\n</div>","import { Component, Input, OnChanges, OnInit } from '@angular/core';\nimport { FormyInputBase } from '../model/model';\n\ninterface SumaryQuestion {\n  key: string,\n  label: string,\n  order:number,\n  controlType: string,\n  answers: Map<string, number>\n}\n@Component({\n  selector: 'lib-formy-sumary',\n  templateUrl: './sumary.component.html',\n  styleUrls: ['./sumary.component.css']\n})\nexport class FormySumaryComponent implements OnInit, OnChanges {\n\n\n  @Input() answers: any[];\n  sumary: Map<String, SumaryQuestion[]> = new Map();\n  constructor() { }\n\n  ngOnInit() {\n    this.generateSumary();\n  }\n\n  ngOnChanges() {\n    this.generateSumary();\n  }\n\n  getPercentage(value) {\n    return Math.floor(value * 100 / this.answers.length);\n  }\n  getAverage(value) {\n    return Math.floor(value / this.answers.length);\n  }\n\n\n\n  generateSumary() {\n    this.sumary = new Map();\n    this.answers.forEach(answer => {\n      let form = answer as FormyInputBase<any>[];\n      form.forEach(question => {\n        let sumaryQuestion;\n        let key = question.order +' - '+question.key;\n        if (!this.sumary.has(key)) {\n          sumaryQuestion = {\n            key: question.key,\n            label: question.label,\n            order:question.order,\n            controlType: question.controlType,\n            answers: this.getQuestionSumaryMap(question)\n          }\n          this.sumary.set(key, sumaryQuestion);\n        } else {\n          sumaryQuestion = this.sumary.get(key);\n        }\n        this.setAnswerCount(question, sumaryQuestion);\n      });\n    });\n  }\n\n  setAnswerCount(answer: FormyInputBase<any>, sumaryQuestion: SumaryQuestion) {\n    switch (answer.controlType) {\n      case 'dropdown':\n        this.increaseOneMapKeyValue(sumaryQuestion.answers, answer.value);\n        break;\n      case 'scale':\n        this.increaseOneMapKeyValue(sumaryQuestion.answers, answer.value);\n        break;\n      case 'checkbox':\n        if (answer.value == true)\n          this.increaseOneMapKeyValue(sumaryQuestion.answers,'sum');\n        break;\n      case 'number':\n        sumaryQuestion.answers.set('sum', sumaryQuestion.answers.get('sum') + Number.parseInt(answer.value));\n        break;\n      case 'multiple':\n        answer.options.forEach(opt => {\n          if (opt.value) {\n            this.increaseOneMapKeyValue(sumaryQuestion.answers, opt.key);\n          }\n        }); ``\n        break;\n      default:\n        sumaryQuestion.answers.set(answer.value, null);\n        break;\n    }\n  }\n\n  getQuestionSumaryMap(question: FormyInputBase<any>): Map<string, number> {\n    let ret = new Map();\n    switch (question.controlType) {\n      case 'dropdown':\n        question.options.forEach(opt => {\n          ret.set(opt.key, 0);\n        });\n        break;\n      case 'number':\n        ret.set('sum', 0);\n        break;\n      case 'checkbox':\n          ret.set('sum', 0);\n          break;\n      case 'multiple':\n        question.options.forEach(opt => {\n          ret.set(opt.key, 0);\n        });\n        break;\n      case 'scale':\n        let i = question.min;\n        while (i <= question.max) {\n          ret.set(`${i}`, 0);\n          i++;\n        }\n        break;\n      default:\n        ret.set(question.value, null);\n    }\n\n    return ret;\n  }\n\n  increaseOneMapKeyValue(map: Map<string, number>, key: string) {\n    map.set(key, map.get(key) + 1);\n  }\n}\n","<div *ngFor=\"let question of sumary | keyvalue\" style=\"width: 100%;font-family: Arial;\">\n    <div style=\"margin-top: 10px\">\n\n        <div [ngSwitch]=\"question.value.controlType\" class=\"form-group\">\n\n            <span style=\"font-weight: bold;\">{{question.value.order}}. {{question.value.label}}</span>\n\n            <div *ngSwitchCase=\"'dropdown'\">\n                <div *ngFor=\"let opt of question.value.answers | keyvalue\">\n                    <span>{{opt.key}}</span> <span> - {{getPercentage(opt.value)}}%</span>\n                    <div class=\"outer\">\n                        <div [ngStyle]=\"{'width': getPercentage(opt.value)+'%'}\" class=\"percentage\">\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div *ngSwitchCase=\"'scale'\">\n                <div *ngFor=\"let opt of question.value.answers | keyvalue\">\n                    <span>{{opt.key}}</span> <span> - {{getPercentage(opt.value)}}%</span>\n                    <div class=\"outer\">\n                        <div [ngStyle]=\"{'width': getPercentage(opt.value)+'%'}\" class=\"percentage\">\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div *ngSwitchCase=\"'multiple'\">\n                <div *ngFor=\"let opt of question.value.answers | keyvalue\">\n                    <span>{{opt.key}}</span> <span> - {{getPercentage(opt.value)}}%</span>\n                    <div class=\"outer\">\n                        <div [ngStyle]=\"{'width': getPercentage(opt.value)+'%'}\" class=\"percentage\">\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div *ngSwitchCase=\"'date'\">\n                <!--   <div *ngFor=\"let opt of question.value.answers | keyvalue\">\n                    <span>{{opt.key | date:'dd-MM-yyyy'}}</span>\n                </div> -->\n                Las respuestas de fecha no están disponibles en el modo resumen.\n            </div>\n            <div *ngSwitchCase=\"'number'\">\n                <div *ngFor=\"let opt of question.value.answers | keyvalue\">\n                    <span>Media: {{getAverage(opt.value)}}</span>\n                </div>\n            </div>\n            <div *ngSwitchCase=\"'checkbox'\">\n                <div *ngFor=\"let opt of question.value.answers | keyvalue\">\n                    <span>{{getPercentage(opt.value)}}%</span>\n                    <div class=\"outer\">\n                        <div [ngStyle]=\"{'width': getPercentage(opt.value)+'%'}\" class=\"percentage\">\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div *ngSwitchCase=\"'textbox'\">\n                <!--  <div *ngFor=\"let opt of question.value.answers | keyvalue\">\n                    <span>{{opt.key}}</span><span *ngIf=\"opt.value\"> - {{opt.value}}</span>\n                </div> -->\n                Las respuestas de texto no están disponibles en el modo resumen.\n            </div>\n            <div *ngSwitchCase=\"'hour'\">\n                <!--  <div *ngFor=\"let opt of question.value.answers | keyvalue\">\n                     <span>{{opt.key}}</span><span *ngIf=\"opt.value\"> - {{opt.value}}</span>\n                 </div> -->\n                Las respuestas de hora no están disponibles en el modo resumen.\n            </div>\n        </div>\n    </div>\n</div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { FormyInputComponent } from './formy-input/formy-input.component';\nimport { RunDvValidatorDirective } from './validators/runDv-validator.directive';\nimport { FormyComponent } from './formy.component';\nimport { FormyEditorComponent } from './editor/editor.component';\nimport { FormySumaryComponent } from './sumary/sumary.component';\nimport { RutValidatorDirective } from './validators/rut-validator.directive';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule\n  ],\n  declarations: [FormyComponent,FormyInputComponent, RunDvValidatorDirective,FormyEditorComponent, FormySumaryComponent, RutValidatorDirective],\n  exports: [FormyComponent, FormyEditorComponent, FormySumaryComponent]\n})\nexport class FormyModule { }\n","/*\n * Public API Surface of formy\n */\n\nexport * from './lib/formy.service';\nexport * from './lib/formy.component';\nexport * from './lib/formy.module';\nexport * from './lib/model/model';\nexport * from './lib/editor/editor.component';\nexport * from './lib/sumary/sumary.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.FormyService","i2","i3","i4.FormyInputComponent","i3.FormyComponent"],"mappings":"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"}